diff --git a/.github/PULL_REQUEST_TEMPLATE/Bug.md b/.github/PULL_REQUEST_TEMPLATE/Bug.md deleted file mode 100644 index 2d4633745..000000000 --- a/.github/PULL_REQUEST_TEMPLATE/Bug.md +++ /dev/null @@ -1,74 +0,0 @@ -### Bug description -Clearly and concisely describe the problem (this cannot be empty). - -### Root cause -Briefly describe the root cause and analysis of the problem. -If there is an internal discussion on the forum, provide the link. - -### Solution description -Describe the changes made in the code in detail for the reviewers. - -### Reason for not identifying earlier - * [ ] Guidelines not followed. If yes, provide which guideline is not followed. - - * [ ] Guidelines not given. If yes, provide which/who need to address. - Tag label `update-guideline-coreteam` or `update-guideline-productteam`. - - * [ ] If any other reason, provide the details here. - -### Areas tested against this fix -Provide details about the areas or combinations that have been tested against this code changes. -* [ ] Tested against feature matrix. [Feature matrix link](https://syncfusion.sharepoint.com/sites/EJ2ProductOwners/Shared%20Documents/Forms/AllItems.aspx?viewid=ae81c682%2D3d0f%2D462a%2Db8ec%2D7358748d489d&id=%2Fsites%2FEJ2ProductOwners%2FShared%20Documents%2FGeneral%2FFeature%20Matrix%20%2D%20Documents) -* [ ] NA - -### Is it a breaking issue? -* [ ] Yes, Tag `breaking-issue`. -* [ ] NO - - If yes, provide the breaking commit details / MR here. - -### Action taken -What action did you take to avoid this in future? - - Feature matrix document updated -* [ ] Yes -* [ ] NO -* [ ] NA - -Automation details - Mark `Is Automated` field as (Yes, Manual, Not Applicable) in corresponding JIRA task once the bug is automated. -* [ ] BUnit, share corresponding MR. -* [ ] E2E or Manual Automation using tester - Make sure all items are automated with priority before release which can be tracked in [automation dashboard](https://syncfusion.atlassian.net/secure/Dashboard.jspa?selectPageId=43396). - -If the same issue is reproduced in ej2, what will you do? -* [ ] Resolved. Provide MR link. -* [ ] NO. Created task to track it. Share task link. -* [ ] NA - - Is this common issue need to be addressed in the same component or on other components in our platform? -* [ ] Yes - Need to check in other components, tag `needs-attention-coreteam` -* [ ] No - -### Output screenshots -Post the output screenshots if an UI is affected or added due to this bug. - -### Blazor Checklist -Confirm whether this feature is ensured in both Blazor Server and WASM -* [ ] NA -* [ ] Yes -* [ ] NO - -Is there any new API or existing API name change? -* [ ] Yes. If yes, Provide API Review task link. -* [ ] NO - -Is there any existing behavior change due to this code change? -* [ ] Yes. Add `breaking-change` label. -* [ ] NO - - -Do the code changes cause any memory leak and performance issue? (Test only if you suspect that your code may cause problem) -* [ ] Yes -* [ ] NO - -## Reviewer Checklist -* [ ] All provided information are reviewed and ensured. \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE/Feature.md b/.github/PULL_REQUEST_TEMPLATE/Feature.md deleted file mode 100644 index 97152e8bb..000000000 --- a/.github/PULL_REQUEST_TEMPLATE/Feature.md +++ /dev/null @@ -1,80 +0,0 @@ -### Feature description -Clearly and concisely describe the feature. - -### Requirement and specification document. -Share the JIRA task which is attached with the requirement and specification document or directly share the document. -- Even for a small feature, draft a requirement and specification document and attach it in the task. - -### API Review task -Provide task link. - -### Output screenshots -Post the output screenshots if an UI is affected or added due to this feature. - -### Feature matrix document - -Feature matrix document updated against this feature and committed in this [common location] (https://syncfusion.sharepoint.com/sites/EJ2ProductOwners/Shared%20Documents/Forms/AllItems.aspx?viewid=ae81c682%2D3d0f%2D462a%2Db8ec%2D7358748d489d&id=%2Fsites%2FEJ2ProductOwners%2FShared%20Documents%2FGeneral%2FFeature%20Matrix%20%2D%20Documents) . -* [ ] Yes -* [ ] NO -* [ ] NA - -Provide the details about the areas or combinations which have been tested against this code changes. -* [ ] Tested against feature matrix. - -### Feature acceptance criteria (Test-case document) -Draft the test cases in excel and attach it in the MR itself. The automation must be covered based on this positive and worst-case test-cases. - -### Automation details -Mark 'Is Automated' field as (Yes, Manual, Not Applicable) in corresponding JIRA task once the feature is automated. -* [ ] BUnit, share corresponding MR. -* [ ] E2E or Manual Automation using tester - Make sure all items are automated with priority before release which can be tracked in [automation dashboard](https://syncfusion.atlassian.net/secure/Dashboard.jspa?selectPageId=43396). - -### Test bed sample location -Provide the test bed sample location where the code reviewers can review the new feature’s behaviors. - -### Feature completion checklist - -UX changes got approval if UI is added or modified? -* [ ] Yes. Provide Task link. -* [ ] NO -* [ ] NA - -Drafted UG for this feature? -* [ ] Yes, provide MR link. -* [ ] NO, provide task link. -* [ ] NA - - Content team reviewed the UI content changes. -* [ ] Yes. Provide MR or Task link. -* [ ] NO -* [ ] NA - - Is this the common feature which needs to be addressed in the same component or on other components in our platform? -* [ ] Yes. If we need to check in other components, tag "needs-attention-coreteam" -* [ ] NO - -Is there any existing behavior change due to this code change? -* [ ] Yes. If So, add `breaking-change` label. -* [ ] NO - -### Blazor Checklist -Confirm whether the ensured feature is in both Blazor Server and WASM. -* [ ] Yes -* [ ] NO -* [ ] NA - -Do the code changes cause any memory leak and performance issue? -* [ ] Yes -* [ ] NO - -## Reviewer Checklist -* [ ] Reviewed feature matrix document modifications and reviewed developer testing report against the feature matrix reviewed. -* [ ] Testbed sample ensured. -* [ ] Coverage report checked. -* [ ] Ensured the code changes meet the coding standard. -* [ ] Confirming script changes made in this merge request can't be achieved in C#. - -Created task in Blazor to synchronize if the feature is not available and applicable. -* [ ] NA -* [ ] Yes, task link. -* [ ] NO, share reason. diff --git a/EJ2MVCSampleBrowser.csproj b/EJ2MVCSampleBrowser.csproj index bdebdddac..50171cae8 100644 --- a/EJ2MVCSampleBrowser.csproj +++ b/EJ2MVCSampleBrowser.csproj @@ -91,14 +91,14 @@ packages\Syncfusion.DocIO.AspNet.Mvc5.31.1.17\lib\net462\Syncfusion.DocIO.Base.dll - packages\\lib\net462\Syncfusion.Compression.Base.dll + packages\Syncfusion.Compression.Base.31.1.17\lib\net462\Syncfusion.Compression.Base.dll packages\Syncfusion.Presentation.AspNet.Mvc5.31.1.17\lib\net462\Syncfusion.Presentation.Base.dll False - packages\\lib\net45\Syncfusion.Licensing.dll + packages\Syncfusion.Licensing.31.1.17\lib\net462\Syncfusion.Licensing.dll diff --git a/PDF/EJ2MVCSampleBrowser.csproj b/PDF/EJ2MVCSampleBrowser.csproj deleted file mode 100644 index f999e7f21..000000000 --- a/PDF/EJ2MVCSampleBrowser.csproj +++ /dev/null @@ -1,692 +0,0 @@ - - - - - - Debug - AnyCPU - - - 2.0 - {9D06B672-AC99-4A11-8104-B4C0D5703B37} - {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} - Library - Properties - EJ2MVCSampleBrowser - EJ2MVCSampleBrowser - v4.6.2 - false - true - - - - - - - - - - - - true - full - false - bin\ - TRACE;DEBUG;STAGING;$(SyncfusionLicensing) - prompt - 4 - - - pdbonly - true - bin\ - TRACE;RELEASE;STAGING;$(SyncfusionLicensing) - prompt - 4 - - - $(DefineConstants);STAGING - - - - packages\Antlr.3.5.0.2\lib\Antlr3.Runtime.dll - - - packages\Microsoft.AspNet.SignalR.Core.2.4.3\lib\net45\Microsoft.AspNet.SignalR.Core.dll - - - packages\Microsoft.AspNet.SignalR.SystemWeb.2.4.3\lib\net45\Microsoft.AspNet.SignalR.SystemWeb.dll - - - packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.3.11.0\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll - - - - False - packages\Microsoft.Owin.4.2.2\lib\net45\Microsoft.Owin.dll - - - False - packages\Microsoft.Owin.Host.SystemWeb.4.2.2\lib\net45\Microsoft.Owin.Host.SystemWeb.dll - - - False - packages\Microsoft.Owin.Security.4.2.2\lib\net45\Microsoft.Owin.Security.dll - - - False - packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll - - - packages\Owin.1.0\lib\net40\Owin.dll - - - packages\Syncfusion.EJ2.MVC5.100.2.1\lib\net462\Syncfusion.EJ2.dll - - - packages\Syncfusion.Pdf.AspNet.Mvc5.100.2.1\lib\net462\Syncfusion.Pdf.Base.dll - - - False - packages\Syncfusion.DocIO.AspNet.Mvc5.100.2.1\lib\net462\Syncfusion.DocIO.Base.dll - - - packages\Syncfusion.EJ2.PdfViewer.AspNet.Mvc5.100.2.1\lib\net462\Syncfusion.EJ2.PdfViewer.dll - - - packages\Syncfusion.OfficeChartToImageConverter.AspNet.Mvc5.100.2.1\lib\net462\Syncfusion.OfficeChartToImageConverter.WPF.dll - - - packages\Syncfusion.EJ2.PdfViewer.AspNet.Mvc5.100.2.100\lib\net462\Syncfusion.PdfToImageConverter.Base.dll - - - packages\Syncfusion.DocToPdfConverter.AspNet.Mvc5.100.2.1\lib\net462\Syncfusion.DocToPDFConverter.Base.dll - - - packages\Syncfusion.Compression.Base.100.2.1\lib\net462\Syncfusion.Compression.Base.dll - - - packages\Syncfusion.OfficeChart.Base.100.2.1\lib\net462\Syncfusion.OfficeChart.Base.dll - - - packages\Syncfusion.Presentation.AspNet.Mvc5.100.2.1\lib\net462\Syncfusion.Presentation.Base.dll - - - packages\Syncfusion.PresentationToPdfConverter.AspNet.Mvc5.100.2.1\lib\net462\Syncfusion.PresentationToPdfConverter.Base.dll - - - packages\Syncfusion.ExcelToPdfConverter.AspNet.Mvc5.100.2.1\lib\net462\Syncfusion.ExcelToPDFConverter.Base.dll - - - packages\Syncfusion.SfChart.WPF.100.2.1\lib\net462\Syncfusion.SfChart.WPF.dll - - - packages\Syncfusion.XlsIO.AspNet.Mvc5.100.2.1\lib\net462\Syncfusion.XlsIO.Base.dll - - - False - packages\Syncfusion.Licensing.100.2.1\lib\net45\Syncfusion.Licensing.dll - - - - - - - packages\Microsoft.AspNet.WebApi.Client.6.0.0\lib\net45\System.Net.Http.Formatting.dll - - - - - - - - - - False - packages\Microsoft.AspNet.WebApi.Core.5.3.0\lib\net45\System.Web.Http.dll - - - packages\Microsoft.AspNet.WebApi.WebHost.5.3.0\lib\net45\System.Web.Http.WebHost.dll - - - - - - - - - - - True - packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll - - - - - - - True - packages\Microsoft.AspNet.WebPages.3.2.9\lib\net45\System.Web.Helpers.dll - - - True - packages\Microsoft.AspNet.Mvc.5.3.0\lib\net45\System.Web.Mvc.dll - - - True - packages\Microsoft.AspNet.Web.Optimization.1.1.3\lib\net40\System.Web.Optimization.dll - - - True - packages\Microsoft.AspNet.Razor.3.2.9\lib\net45\System.Web.Razor.dll - - - True - packages\Microsoft.AspNet.WebPages.3.2.9\lib\net45\System.Web.WebPages.dll - - - True - packages\Microsoft.AspNet.WebPages.3.2.9\lib\net45\System.Web.WebPages.Deployment.dll - - - True - packages\Microsoft.AspNet.WebPages.3.2.9\lib\net45\System.Web.WebPages.Razor.dll - - - - True - packages\WebGrease.1.6.0\lib\WebGrease.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Global.asax - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - PreserveNewest - - - Designer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Web.config - - - Web.config - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 10.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - - - - - - - - - - - - False - True - 54079 - / - http://localhost:54079/ - False - False - - - False - - - - - - diff --git a/PDF/EJ2MVCSampleBrowser.sln b/PDF/EJ2MVCSampleBrowser.sln deleted file mode 100644 index 610a18a63..000000000 --- a/PDF/EJ2MVCSampleBrowser.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.26730.16 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EJ2MVCSampleBrowser", "EJ2MVCSampleBrowser.csproj", "{9D06B672-AC99-4A11-8104-B4C0D5703B37}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {9D06B672-AC99-4A11-8104-B4C0D5703B37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9D06B672-AC99-4A11-8104-B4C0D5703B37}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9D06B672-AC99-4A11-8104-B4C0D5703B37}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9D06B672-AC99-4A11-8104-B4C0D5703B37}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {32546CB8-075D-420F-A588-C38DA7319D94} - EndGlobalSection -EndGlobal diff --git a/PDF/packages.config b/PDF/packages.config deleted file mode 100644 index 20f60b4b1..000000000 --- a/PDF/packages.config +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/PDF/sampleOrder.json b/PDF/sampleOrder.json deleted file mode 100644 index c4eb72759..000000000 --- a/PDF/sampleOrder.json +++ /dev/null @@ -1,4 +0,0 @@ -{ -"Viewer & Editors": [ "PdfViewer" ], -"Document Processing Libraries": [ "PDF" ] -} diff --git a/PDF/samplelist.js b/PDF/samplelist.js deleted file mode 100644 index 4a16aaca6..000000000 --- a/PDF/samplelist.js +++ /dev/null @@ -1,797 +0,0 @@ -if (!window) { - - var window = exports.window = {}; - } - window.samplesList =[ - { - "name": "PDF Viewer", - "directory": "PdfViewer", - "category": "Viewer & Editors", - "type": "update", - "samples": [ - { - "url": "Default", - "name": "Default Functionalities", - "category": "PDF Viewer", - "order": 0, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "023", - "uid": "0023230" - }, - { - "url": "ReadOnly", - "name": "Read-Only", - "category": "Document Security", - "order": 1, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "023", - "uid": "0023231" - }, - { - "url": "DocumentList", - "name": "Document List", - "category": "File Management", - "order": 2, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "023", - "uid": "0023232" - }, - { - "url": "MultiFormatViewer", - "name": "Multi-Format Viewer", - "category": "File Management", - "order": 2, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "023", - "uid": "0023233" - }, - { - "url": "OrganizePages", - "name": "Organize Pages", - "category": "Editor", - "order": 3, - "component": "PdfViewer", - "dir": "PdfViewer", - "type": "update", - "parentId": "023", - "uid": "0023234" - }, - { - "url": "CustomToolbar", - "name": "Toolbar", - "category": "Customization", - "order": 4, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "023", - "uid": "0023235" - }, - { - "url": "ContextMenu", - "name": "Context Menu", - "category": "Customization", - "order": 4, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "023", - "uid": "0023236" - }, - { - "url": "RightToLeft", - "name": "Right To Left", - "category": "Localization", - "order": 5, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "023", - "uid": "0023237" - }, - { - "url": "FormFilling", - "name": "Form Filling", - "category": "PDF Form", - "order": 6, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "023", - "uid": "0023238" - }, - { - "url": "FormDesigner", - "name": "Form Designer", - "category": "PDF Form", - "order": 6, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "023", - "uid": "0023239" - }, - { - "url": "ESigningFormDesigner", - "name": "eSigning Form Designer", - "category": "PDF Form", - "order": 6, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "023", - "uid": "00232310" - }, - { - "url": "ESigningPdfForms", - "name": "eSigning PDF Forms", - "category": "PDF Form", - "order": 6, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "023", - "uid": "00232311" - }, - { - "url": "Annotations", - "name": "Annotations", - "category": "Annotation", - "order": 7, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "023", - "uid": "00232312", - "type": "update" - }, - { - "url": "ProgrammaticOperations", - "name": "Programmatic Operations", - "category": "Annotation", - "order": 7, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "023", - "uid": "00232313", - "type": "update" - }, - { - "url": "HandwrittenSignature", - "name": "Handwritten Signature", - "category": "Signature", - "order": 8, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "023", - "uid": "00232314" - }, - { - "url": "InvisibleDigitalSignature", - "name": "Invisible Digital Signature", - "category": "Signature", - "order": 8, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "023", - "uid": "00232315" - }, - { - "url": "Redaction", - "name": "Redaction", - "category": "Editor", - "order": 3, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "023", - "uid": "00232316" - } - ], - "order": 3, - "uid": "023" - }, - { - "name": "PDF", - "directory": "PDF", - "type": "update", - "category": "Document Processing Libraries", - "samples": [ - { - "url": "Default", - "name": "Default", - "category": "PDF", - "order": 0, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "0089890" - }, - { - "url": "JobApplication", - "name": "Job Application", - "category": "Product Showcase", - "order": 1, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "0089891" - }, - { - "url": "Zugferd", - "name": "Zugferd Invoice", - "category": "Product Showcase", - "order": 1, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "0089892" - }, - { - "url": "HelloWorld", - "name": "Hello World", - "category": "Getting Started", - "order": 2, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "0089893" - }, - { - "url": "PdfCompression", - "name": "PDF Compression Level", - "category": "Compression", - "order": 3, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "0089894" - }, - { - "url": "CompressExistingPDF", - "name": "Compress Existing PDF", - "category": "Compression", - "order": 3, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "0089895" - }, - { - "url": "Barcode", - "name": "Barcode", - "category": "Graphics", - "order": 4, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "0089896" - }, - { - "url": "DrawingShapes", - "name": "Drawing Shapes", - "category": "Graphics", - "order": 4, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "0089897" - }, - { - "url": "GraphicBrushes", - "name": "Graphic Brushes", - "category": "Graphics", - "order": 4, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "0089898" - }, - { - "url": "ImageInsertion", - "name": "Image Insertion", - "category": "Graphics", - "order": 4, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "0089899" - }, - { - "url": "ImageToPdf", - "name": "Image to PDF", - "category": "Graphics", - "order": 4, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898910" - }, - { - "url": "MultiColumnHtmlText", - "name": "Multi Column HTML Text", - "category": "Graphics", - "order": 4, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898911" - }, - { - "url": "AdventureCycle", - "name": "Adventure Cycle Works", - "category": "Tables", - "order": 5, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898912" - }, - { - "url": "TableFeatures", - "name": "Table Features", - "category": "Tables", - "order": 5, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898913" - }, - { - "url": "TextFlow", - "name": "Text Flow", - "category": "Drawing Text", - "order": 6, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898914" - }, - { - "url": "RtlSupport", - "name": "RTL Support", - "category": "Drawing Text", - "order": 6, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898915" - }, - { - "url": "BulletsandLists", - "name": "Bullets and Lists", - "category": "Drawing Text", - "order": 6, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898916" - }, - { - "url": "Encryption", - "name": "Encryption", - "category": "Security", - "order": 7, - "type": "update", - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898917" - }, - { - "url": "DigitalSignature", - "name": "Digital Signature", - "category": "Security", - "order": 7, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898918" - }, - { - "url": "Redaction", - "name": "Redaction", - "category": "Security", - "order": 7, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898919" - }, - { - "url": "DigitalSignatureValidation", - "name": "Digital Signature Validation", - "category": "Security", - "order": 7, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898920" - }, - { - "url": "DocumentSettings", - "name": "Document Settings", - "category": "Settings", - "order": 8, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898921" - }, - { - "url": "PageSettings", - "name": "Page Settings", - "category": "Settings", - "order": 8, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898922" - }, - { - "url": "HeadersandFooters", - "name": "Headers and Footers", - "category": "Settings", - "order": 8, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898923" - }, - { - "url": "Layers", - "name": "Layers", - "category": "Settings", - "order": 8, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898924" - }, - { - "url": "FindPDFCorruption", - "name": "Find PDF Corruption", - "category": "Analyze Document", - "order": 9, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898925" - }, - { - "url": "InteractiveFeatures", - "name": "Interactive Features", - "category": "User Interaction", - "order": 10, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898926" - }, - { - "url": "FormFilling", - "name": "Form Filling", - "category": "User Interaction", - "order": 10, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898927" - }, - { - "url": "Portfolio", - "name": "Portfolio", - "category": "User Interaction", - "order": 10, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898928" - }, - { - "url": "AnnotationFlatten", - "name": "Annotations", - "category": "User Interaction", - "order": 10, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898929" - }, - { - "url": "NamedDestination", - "name": "Named Destination", - "category": "User Interaction", - "order": 10, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898930" - }, - { - "url": "Bookmarks", - "name": "Bookmarks", - "category": "User Interaction", - "order": 10, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898931" - }, - { - "url": "Attachments", - "name": "File Attachments", - "category": "User Interaction", - "order": 10, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898932" - }, - { - "url": "XFAFormCreation", - "name": "XFA Form Creation", - "category": "User Interaction", - "order": 10, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898933" - }, - { - "url": "XFAFormFilling", - "name": "XFA Form Filling", - "category": "User Interaction", - "order": 10, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898934" - }, - { - "url": "TextExtraction", - "name": "Text Extraction", - "category": "Import and Export", - "order": 11, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898935" - }, - { - "url": "RTFtoPDF", - "name": "RTF to PDF", - "category": "Import and Export", - "order": 11, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898936" - }, - { - "url": "WordtoPDF", - "name": "Word to PDF", - "category": "Import and Export", - "order": 11, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898937" - }, - { - "url": "XPStoPDF", - "name": "XPS to PDF", - "category": "Import and Export", - "order": 11, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898938" - }, - { - "url": "TIFFtoPDF", - "name": "TIFF to PDF", - "category": "Import and Export", - "order": 11, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898939" - }, - { - "url": "ImageExtraction", - "name": "Image Extraction", - "category": "Import and Export", - "order": 11, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898940" - }, - { - "url": "PDFToImage", - "name": "PDF To Image", - "category": "Import and Export", - "order": 11, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898941" - }, - { - "url": "ExportasImage", - "name": "Export as Image", - "category": "Import and Export", - "order": 11, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898942" - }, - { - "url": "HtmltoPDF", - "name": "HTML to PDF", - "category": "Import and Export", - "order": 11, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898943", - "sourceFiles": [ - { - "displayName": "HtmlToPDFController.cs", - "path": "../Content/PDF/HtmltoPDFController.txt" - }, - { "displayName": "HtmltoPDF.cshtml", "path": "../Content/PDF/HtmltoPDFConversion.txt" } - ] - }, - { - "url": "PDFConformance", - "name": "PDF Conformance", - "category": "Conformance", - "order": 12, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898944" - }, - { - "url": "PdfToPdfAConverter", - "name": "PDF to PDF-A", - "category": "Conformance", - "order": 12, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898945" - }, - { - "url": "MergeDocuments", - "name": "Merge Documents", - "category": "Modify Documents", - "order": 13, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898946" - }, - { - "url": "SplitPDF", - "name": "Split PDF", - "category": "Modify Documents", - "order": 13, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898947" - }, - { - "url": "OverlayDocuments", - "name": "Overlay Documents", - "category": "Modify Documents", - "order": 13, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898948" - }, - { - "url": "Booklet", - "name": "Booklet", - "category": "Modify Documents", - "order": 13, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898949" - }, - { - "url": "WatermarkPDF", - "name": "Watermark PDF", - "category": "Modify Documents", - "order": 13, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898950" - }, - { - "url": "ReplaceImages", - "name": "Replace Images", - "category": "Modify Documents", - "order": 13, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898951" - }, - { - "url": "ReplaceFonts", - "name": "Replace Fonts", - "category": "Modify Documents", - "order": 13, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898952" - }, - { - "url": "RearrangePages", - "name": "Rearrange Pages", - "category": "Modify Documents", - "order": 13, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898953" - }, - { - "url": "RemoveImages", - "name": "Remove Images", - "category": "Modify Documents", - "order": 13, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898954" - }, - { - "url": "Autotag", - "name": "Autotag", - "category": "Accessibility", - "order": 14, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898955" - }, - { - "url": "Customtag", - "name": "Customtag", - "category": "Accessibility", - "order": 14, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898956" - }, - { - "url": "ComplexScript", - "name": "Complex Script", - "category": "Drawing Text", - "order": 6, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898957" - }, - { - "url": "OpenTypeFont", - "name": "OpenType Font", - "category": "Drawing Text", - "order": 6, - "component": "PDF", - "dir": "PDF", - "parentId": "089", - "uid": "00898958" - } - ], - "order": 11, - "uid": "089" - }, -] \ No newline at end of file diff --git a/README.md b/README.md index 4e1090d8d..ddab42239 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,6 @@ The following topics can help you to use the Syncfusion ASP.NET MVC Components a -

 

INTERACTIVE CHAT

@@ -72,17 +71,10 @@ The following topics can help you to use the Syncfusion ASP.NET MVC Components a

FORMS

 

-

DOCUMENT PROCESSING LIBRARIES

- - - - -

 

-

VIEWER & EDITORS

- +

EDITORS

diff --git a/Scripts/ej2.min.js.map b/Scripts/ej2.min.js.map deleted file mode 100644 index 87b366087..000000000 --- a/Scripts/ej2.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ej2.min.js","sources":["../node_modules/@syncfusion/ej2-base/dist/src/es5/util.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/dom.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/notify-property-change.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/animation.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/internationalization.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/template.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/template-engine.js","../node_modules/@syncfusion/ej2-buttons/dist/src/es5/common/common.js","../node_modules/@syncfusion/ej2-popups/dist/src/es5/common/position.js","../node_modules/@syncfusion/ej2-popups/dist/src/es5/common/collision.js","../node_modules/@syncfusion/ej2-popups/dist/src/es5/popup/popup.js","../node_modules/@syncfusion/ej2-popups/dist/src/es5/spinner/spinner.js","../node_modules/@syncfusion/ej2-inputs/dist/src/es5/maskedtextbox/base/mask-base.js","../node_modules/@syncfusion/ej2-lists/dist/src/es5/common/list-base.js","../node_modules/@syncfusion/ej2-file-utils/dist/src/es5/encoding.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/collections/utils.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/model/theme.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/utils/helper.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/model/acc-base.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/utils/helper.js","../node_modules/@syncfusion/ej2-dropdowns/dist/src/es5/common/incremental-search.js","../node_modules/@syncfusion/ej2-dropdowns/dist/src/es5/common/highlight-search.js","../node_modules/@syncfusion/ej2-dropdowns/dist/src/es5/multi-select/float-label.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/base/util.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/aria-service.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/aggregate.js","../node_modules/@syncfusion/ej2-lineargauge/dist/src/es5/linear-gauge/utils/helper.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/utils/helper.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/base/util.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/recurrence-editor/date-generator.js","../node_modules/@syncfusion/ej2-splitbuttons/dist/src/es5/common/common.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/ajax.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/event-handler.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/observer.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/base.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/browser.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/intl/intl-base.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/canvas-renderer.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/module-loader.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/child-property.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/intl/parser-base.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/intl/number-formatter.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/intl/date-formatter.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/component.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/intl/date-parser.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/intl/number-parser.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/draggable.js","../node_modules/@syncfusion/ej2-inputs/dist/src/es5/input/input.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/droppable.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/keyboard.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/l10n.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/svg-renderer.js","../node_modules/@syncfusion/ej2-base/dist/src/es5/touch.js","../node_modules/@syncfusion/ej2-buttons/dist/src/es5/button/button.js","../node_modules/@syncfusion/ej2-buttons/dist/src/es5/check-box/check-box.js","../node_modules/@syncfusion/ej2-buttons/dist/src/es5/radio-button/radio-button.js","../node_modules/@syncfusion/ej2-popups/dist/src/es5/dialog/dialog.js","../node_modules/@syncfusion/ej2-popups/dist/src/es5/tooltip/tooltip.js","../node_modules/@syncfusion/ej2-inputs/dist/src/es5/numerictextbox/numerictextbox.js","../node_modules/@syncfusion/ej2-inputs/dist/src/es5/form-validator/form-validator.js","../node_modules/@syncfusion/ej2-inputs/dist/src/es5/maskedtextbox/maskedtextbox/maskedtextbox.js","../node_modules/@syncfusion/ej2-inputs/dist/src/es5/slider/slider.js","../node_modules/@syncfusion/ej2-inputs/dist/src/es5/uploader/uploader.js","../node_modules/@syncfusion/ej2-data/dist/src/es5/query.js","../node_modules/@syncfusion/ej2-data/dist/src/es5/util.js","../node_modules/@syncfusion/ej2-data/dist/src/es5/adaptors.js","../node_modules/@syncfusion/ej2-data/dist/src/es5/manager.js","../node_modules/@syncfusion/ej2-lists/dist/src/es5/list-view/list-view.js","../node_modules/@syncfusion/ej2-calendars/dist/src/es5/timepicker/timepicker.js","../node_modules/@syncfusion/ej2-calendars/dist/src/es5/calendar/calendar.js","../node_modules/@syncfusion/ej2-calendars/dist/src/es5/datepicker/datepicker.js","../node_modules/@syncfusion/ej2-calendars/dist/src/es5/daterangepicker/daterangepicker.js","../node_modules/@syncfusion/ej2-calendars/dist/src/es5/datetimepicker/datetimepicker.js","../node_modules/@syncfusion/ej2-file-utils/dist/src/es5/save.js","../node_modules/@syncfusion/ej2-file-utils/dist/src/es5/stream-writer.js","../node_modules/@syncfusion/ej2-compression/dist/src/es5/compression-writer.js","../node_modules/@syncfusion/ej2-compression/dist/src/es5/zip-archive.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/collections/dictionary.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/primitives/pdf-string.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/primitives/pdf-name.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/input-output/pdf-operators.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/input-output/pdf-dictionary-properties.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/primitives/pdf-dictionary.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/primitives/pdf-number.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/primitives/pdf-array.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/primitives/pdf-stream.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/enum.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/primitives/pdf-reference.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/actions/action.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/actions/uri-action.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/pdf-color.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/enum.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/drawing/pdf-drawing.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/brushes/pdf-brush.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/brushes/pdf-solid-brush.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/pdf-string-format.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/string-layouter.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/string-tokenizer.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/pdf-font.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/input-output/enum.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/input-output/pdf-writer.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/input-output/pdf-main-object-collection.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/input-output/cross-table.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/pdf-document-base.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/pdf-catalog.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/enum.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/input-output/pdf-cross-table.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-page-size.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/pdf-margins.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/images/image-decoder.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-page-settings.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/input-output/pdf-stream-writer.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/pdf-pen.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/pdf-transformation-matrix.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/constants.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/collections/object-object-pair/dictionary.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/pdf-transparency.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/automatic-field-info-collection.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/figures/base/graphics-element.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/automatic-field.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/automatic-field-info.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/pdf-graphics.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-page-layer.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/general/pdf-collection.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-page-layer-collection.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/figures/pdf-template.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/images/byte-array.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/primitives/pdf-boolean.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/figures/enum.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/unit-convertor.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/images/pdf-image.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/images/pdf-bitmap.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/pdf-resources.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-page-base.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/annotations/annotation-collection.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-page.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/page-added-event-arguments.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-section-page-collection.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/pdf-document-template.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-section-templates.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-section.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-section-collection.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-document-page-collection.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/general/pdf-cache-collection.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/pdf-document.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/pdf-font-metrics.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/pdf-standard-font-metrics-factory.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/fonts/pdf-standard-font.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/annotations/annotation.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/annotations/link-annotation.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/annotations/action-link-annotation.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/annotations/document-link-annotation.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/figures/base/element-layouter.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/general/enum.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/figures/layout-element.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/figures/base/text-layouter.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/graphics/figures/text-element.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/annotations/uri-annotation.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/annotations/pdf-text-web-link.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/pdf-numbers-convertor.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/pdf-template-value-pair.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/multiple-value-field.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/pdf-page-number-field.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/composite-field.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/single-value-field.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/document/automatic-fields/page-count-field.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/general/pdf-destination.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/structured-elements/tables/light-tables/enum.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/pages/pdf-page-template-element.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/structured-elements/grid/styles/pdf-borders.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/structured-elements/grid/styles/style.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/structured-elements/grid/pdf-grid-cell.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/structured-elements/grid/pdf-grid-column.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/structured-elements/grid/pdf-grid-row.js","../node_modules/@syncfusion/ej2-pdf-export/dist/src/es5/implementation/structured-elements/grid/pdf-grid.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/model/base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/utils/double-range.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/double-axis.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/model/constants.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/model/chart-base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/axis.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/cartesian-panel.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/utils/get-data.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/chart-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/model/data.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/marker-explode.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/marker.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/legend/legend.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/technical-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/utils/export.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/chart.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/axis-helper.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/date-time-axis.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/category-axis.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/logarithmic-axis.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/date-time-category-axis.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/strip-line.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/line-base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/line-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/column-base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/column-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/multi-colored-base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/area-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/bar-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/polar-radar-panel.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/polar-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/radar-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/stacking-bar-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/candle-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/stacking-column-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/step-line-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/step-area-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/stacking-area-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/scatter-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/range-column-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/waterfall-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/hilo-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/hilo-open-close-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/range-area-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/bubble-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/spline-base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/spline-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/spline-area-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/indicator-base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/sma-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/ema-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/tma-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/ad-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/atr-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/momentum-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/rsi-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/stochastic-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/bollinger-bands.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/technical-indicators/macd-indicator.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/trend-lines/trend-line.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/user-interaction/crosshair.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/user-interaction/zooming-toolkit.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/user-interaction/zooming.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/user-interaction/selection.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/user-interaction/selection.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/data-label.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/error-bar.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/legend/legend.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/common/annotation/annotation.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/annotation/annotation.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/box-and-whisker-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/multi-colored-area-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/series/multi-colored-line-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/chart/axis/multi-level-labels.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/renderer/accumulation-base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/renderer/pie-base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/renderer/pie-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/accumulation.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/renderer/triangular-base.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/renderer/funnel-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/renderer/pyramid-series.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/renderer/legend.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/renderer/dataLabel.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/user-interaction/selection.js","../node_modules/@syncfusion/ej2-charts/dist/src/es5/accumulation-chart/annotation/annotation.js","../charts.ts","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/model/theme.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/model/base.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/axes/axis.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/annotations/annotations.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/model/constants.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/axes/axis-renderer.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/axes/pointer-renderer.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/axes/axis-panel.js","../node_modules/@syncfusion/ej2-circulargauge/dist/src/es5/circular-gauge/circular-gauge.js","../circulargauge.ts","../node_modules/@syncfusion/ej2-dropdowns/dist/src/es5/drop-down-base/drop-down-base.js","../node_modules/@syncfusion/ej2-dropdowns/dist/src/es5/drop-down-list/drop-down-list.js","../node_modules/@syncfusion/ej2-dropdowns/dist/src/es5/combo-box/combo-box.js","../node_modules/@syncfusion/ej2-dropdowns/dist/src/es5/auto-complete/auto-complete.js","../node_modules/@syncfusion/ej2-dropdowns/dist/src/es5/multi-select/multi-select.js","../node_modules/@syncfusion/ej2-dropdowns/dist/src/es5/multi-select/checkbox-selection.js","../dropdowns.ts","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/base/enum.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/cell-style.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/cell.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/column.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/row.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/worksheets.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/worksheet.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/value-formatter.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/csv-helper.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/blob-helper.js","../node_modules/@syncfusion/ej2-excel-export/dist/src/es5/workbook.js","../node_modules/@syncfusion/ej2-navigations/dist/src/es5/common/h-scroll.js","../node_modules/@syncfusion/ej2-navigations/dist/src/es5/toolbar/toolbar.js","../node_modules/@syncfusion/ej2-navigations/dist/src/es5/accordion/accordion.js","../node_modules/@syncfusion/ej2-navigations/dist/src/es5/context-menu/context-menu.js","../node_modules/@syncfusion/ej2-navigations/dist/src/es5/tab/tab.js","../node_modules/@syncfusion/ej2-navigations/dist/src/es5/treeview/treeview.js","../node_modules/@syncfusion/ej2-navigations/dist/src/es5/sidebar/sidebar.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/value-formatter.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/models/column.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/base/constant.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/checkbox-filter.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/data.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/models/row.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/models/cell.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/cell-merge-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/row-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/row-model-generator.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/summary-model-generator.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/group-model-generator.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/content-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/header-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/cell-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/header-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/stacked-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/indent-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/caption-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/expand-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/header-indent-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/detail-header-indent-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/detail-expand-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/render.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/cell-render-factory.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/service-locator.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/renderer-factory.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/width-controller.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/focus-strategy.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/models/page-settings.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/selection.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/search.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/show-hide.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/scroll.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/print.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/models/aggregate.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/clipboard.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/base/grid.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/sort.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/pager/numeric-container.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/pager/pager-message.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/pager/pager.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/pager/pager-dropdown.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/pager/external-message.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/page.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/edit.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/filter-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/filter-menu-operator.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/string-filter-ui.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/number-filter-ui.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/boolean-filter-ui.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/date-filter-ui.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/filter-menu-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/excel-filter.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/filter.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/resize.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/reorder.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/row-reorder.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/group.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/detail-row.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/toolbar.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/footer-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/summary-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/intersection-observer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/virtual-row-model-generator.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/virtual-content-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/virtual-scroll.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/inline-edit-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/batch-edit-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/dialog-edit-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/edit-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/boolean-edit-cell.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/dropdown-edit-cell.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/numeric-edit-cell.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/default-edit-cell.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/normal-edit.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/inline-edit.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/batch-edit.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/dialog-edit.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/datepicker-edit-cell.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/column-chooser.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/export-helper.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/excel-export.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/pdf-export.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/command-column-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/command-column.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/context-menu.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/services/freeze-row-model-generator.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/renderer/freeze-renderer.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/freeze.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/column-menu.js","../node_modules/@syncfusion/ej2-grids/dist/src/es5/grid/actions/foreign-key.js","../grids.ts","../node_modules/@syncfusion/ej2-lineargauge/dist/src/es5/linear-gauge/model/base.js","../node_modules/@syncfusion/ej2-lineargauge/dist/src/es5/linear-gauge/axes/axis.js","../node_modules/@syncfusion/ej2-lineargauge/dist/src/es5/linear-gauge/axes/axis-panel.js","../node_modules/@syncfusion/ej2-lineargauge/dist/src/es5/linear-gauge/model/constant.js","../node_modules/@syncfusion/ej2-lineargauge/dist/src/es5/linear-gauge/axes/animation.js","../node_modules/@syncfusion/ej2-lineargauge/dist/src/es5/linear-gauge/axes/axis-renderer.js","../node_modules/@syncfusion/ej2-lineargauge/dist/src/es5/linear-gauge/annotations/annotations.js","../node_modules/@syncfusion/ej2-lineargauge/dist/src/es5/linear-gauge/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-lineargauge/dist/src/es5/linear-gauge/linear-gauge.js","../lineargauge.ts","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/model/theme.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/model/base.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/model/constants.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/layers/bing-map.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/layers/color-mapping.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/layers/layer-panel.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/user-interaction/annotation.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/utils/export.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/maps.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/layers/bubble.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/layers/marker.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/layers/data-label.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/layers/navigation-selected-line.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/layers/legend.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/user-interaction/highlight.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/user-interaction/selection.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-maps/dist/src/es5/maps/user-interaction/zoom.js","../maps.ts","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/base/constant.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/base/css-constant.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/header-renderer.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/actions/scroll.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/actions/touch.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/actions/keyboard.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/actions/data.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/timezone/timezone.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/event-renderer/event-base.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/actions/crud.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/popups/form-validator.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/popups/quick-popups.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/popups/event-tooltip.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/recurrence-editor/recurrence-editor.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/popups/event-window.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/renderer.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/models/work-hours.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/models/fields.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/models/event-settings.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/base/schedule.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/view-base.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/actions/work-cells.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/event-renderer/vertical-view.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/vertical-view.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/day.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/week.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/work-week.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/event-renderer/month.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/month.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/event-renderer/agenda-base.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/agenda.js","../node_modules/@syncfusion/ej2-schedule/dist/src/es5/schedule/renderer/month-agenda.js","../schedule.ts","../node_modules/@syncfusion/ej2-splitbuttons/dist/src/es5/drop-down-button/drop-down-button.js","../node_modules/@syncfusion/ej2-splitbuttons/dist/src/es5/split-button/split-button.js"],"sourcesContent":["var instances = 'ej2_instances';\nvar uid = 0;\n/**\n * Create Instance from constructor function with desired parameters.\n * @param {Function} classFunction - Class function to which need to create instance\n * @param {any[]} params - Parameters need to passed while creating instance\n * @return {any}\n * @private\n */\nexport function createInstance(classFunction, params) {\n var arrayParam = params;\n arrayParam.unshift(undefined);\n return new (Function.prototype.bind.apply(classFunction, arrayParam));\n}\n/**\n * To run a callback function immediately after the browser has completed other operations.\n * @param {Function} handler - callback function to be triggered.\n * @return {Function}\n * @private\n */\nexport function setImmediate(handler) {\n var unbind;\n var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n intCrypto.getRandomValues(num);\n var secret = 'ej2' + combineArray(num);\n var messageHandler = function (event) {\n if (event.source === window && typeof event.data === 'string' && event.data.length <= 32 && event.data === secret) {\n handler();\n unbind();\n }\n };\n window.addEventListener('message', messageHandler, false);\n window.postMessage(secret, '*');\n return unbind = function () {\n window.removeEventListener('message', messageHandler);\n handler = messageHandler = secret = undefined;\n };\n}\n/**\n * To get nameSpace value from the desired object.\n * @param {string} nameSpace - String value to the get the inner object\n * @param {any} obj - Object to get the inner object value.\n * @return {any}\n * @private\n */\nexport function getValue(nameSpace, obj) {\n /* tslint:disable no-any */\n var value = obj;\n var splits = nameSpace.split('.');\n for (var i = 0; i < splits.length && !isUndefined(value); i++) {\n value = value[splits[i]];\n }\n return value;\n}\n/**\n * To set value for the nameSpace in desired object.\n * @param {string} nameSpace - String value to the get the inner object\n * @param {any} value - Value that you need to set.\n * @param {any} obj - Object to get the inner object value.\n * @return {void}\n * @private\n */\nexport function setValue(nameSpace, value, obj) {\n var keys = nameSpace.split('.');\n var start = obj || {};\n var fromObj = start;\n var i;\n var length = keys.length;\n var key;\n for (i = 0; i < length; i++) {\n key = keys[i];\n if (i + 1 === length) {\n fromObj[key] = value === undefined ? {} : value;\n }\n else if (isNullOrUndefined(fromObj[key])) {\n fromObj[key] = {};\n }\n fromObj = fromObj[key];\n }\n return start;\n}\n/**\n * Delete an item from Object\n * @param {any} obj - Object in which we need to delete an item.\n * @param {string} params - String value to the get the inner object\n * @return {void}\n * @private\n */\nexport function deleteObject(obj, key) {\n delete obj[key];\n}\n/**\n * Check weather the given argument is only object.\n * @param {any} obj - Object which is need to check.\n * @return {boolean}\n * @private\n */\nexport function isObject(obj) {\n var objCon = {};\n return (!isNullOrUndefined(obj) && obj.constructor === objCon.constructor);\n}\n/**\n * To get enum value by giving the string.\n * @param {any} enumObject - Enum object.\n * @param {string} enumValue - Enum value to be searched\n * @return {any}\n * @private\n */\nexport function getEnumValue(enumObject, enumValue) {\n return enumObject[enumValue];\n}\n/**\n * Merge the source object into destination object.\n * @param {any} source - source object which is going to merge with destination object\n * @param {any} destination - object need to be merged\n * @return {void}\n * @private\n */\nexport function merge(source, destination) {\n if (!isNullOrUndefined(destination)) {\n var temrObj = source;\n var tempProp = destination;\n var keys = Object.keys(destination);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n temrObj[key] = tempProp[key];\n }\n }\n}\n/**\n * Extend the two object with newer one.\n * @param {any} copied - Resultant object after merged\n * @param {Object} first - First object need to merge\n * @param {Object} second - Second object need to merge\n * @return {Object}\n * @private\n */\nexport function extend(copied, first, second, deep) {\n var result = copied || {};\n var length = arguments.length;\n if (deep) {\n length = length - 1;\n }\n var _loop_1 = function (i) {\n if (!arguments_1[i]) {\n return \"continue\";\n }\n var obj1 = arguments_1[i];\n Object.keys(obj1).forEach(function (key) {\n var src = result[key];\n var copy = obj1[key];\n var clone;\n if (deep && isObject(copy)) {\n clone = isObject(src) ? src : {};\n result[key] = extend({}, clone, copy, true);\n }\n else {\n result[key] = copy;\n }\n });\n };\n var arguments_1 = arguments;\n for (var i = 1; i < length; i++) {\n _loop_1(i);\n }\n return result;\n}\n/**\n * To check whether the object is null or undefined.\n * @param {Object} value - To check the object is null or undefined\n * @return {boolean}\n * @private\n */\nexport function isNullOrUndefined(value) {\n return value === undefined || value === null;\n}\n/**\n * To check whether the object is undefined.\n * @param {Object} value - To check the object is undefined\n * @return {boolean}\n * @private\n */\nexport function isUndefined(value) {\n return ('undefined' === typeof value);\n}\n/**\n * To return the generated unique name\n * @param {string} definedName - To concatenate the unique id to provided name\n * @return {string}\n * @private\n */\nexport function getUniqueID(definedName) {\n return definedName + '_' + uid++;\n}\n/**\n * It limits the rate at which a function can fire. The function will fire only once every provided second instead of as quickly.\n * @param {Function} eventFunction - Specifies the function to run when the event occurs\n * @param {number} delay - A number that specifies the milliseconds for function delay call option\n * @return {Function}\n * @private\n */\nexport function debounce(eventFunction, delay) {\n var out;\n // tslint:disable-next-line\n return function () {\n var _this = this;\n var args = arguments;\n var later = function () {\n out = null;\n return eventFunction.apply(_this, args);\n };\n clearTimeout(out);\n out = setTimeout(later, delay);\n };\n}\n// Added since lint ignored after added '//tslint:disable-next-line' \n/* tslint:disable:no-any */\n/**\n * To convert the object to string for query url\n * @param {Object} data\n * @returns string\n * @private\n */\nexport function queryParams(data) {\n var array = [];\n var keys = Object.keys(data);\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var key = keys_2[_i];\n array.push(encodeURIComponent(key) + '=' + encodeURIComponent('' + data[key]));\n }\n return array.join('&');\n}\n/**\n * To check whether the given array contains object.\n * @param {T[]} value- Specifies the T type array to be checked.\n * @private\n */\nexport function isObjectArray(value) {\n var parser = Object.prototype.toString;\n if (parser.call(value) === '[object Array]') {\n if (parser.call(value[0]) === '[object Object]') {\n return true;\n }\n }\n return false;\n}\n/**\n * To check whether the child element is descendant to parent element or parent and child are same element.\n * @param{Element} - Specifies the child element to compare with parent.\n * @param{Element} - Specifies the parent element.\n * @return boolean\n * @private\n */\nexport function compareElementParent(child, parent) {\n var node = child;\n if (node === parent) {\n return true;\n }\n else if (node === document || !node) {\n return false;\n }\n else {\n return compareElementParent(node.parentNode, parent);\n }\n}\n/**\n * To throw custom error message.\n * @param{string} - Specifies the error message to be thrown.\n * @private\n */\nexport function throwError(message) {\n try {\n throw new Error(message);\n }\n catch (e) {\n throw e.message + '\\n' + e.stack;\n }\n}\n/**\n * This function is used to print given element\n * @param{Element} element - Specifies the print content element.\n * @param{Window} printWindow - Specifies the print window.\n * @private\n */\nexport function print(element, printWindow) {\n var div = document.createElement('div');\n var links = [].slice.call(document.getElementsByTagName('head')[0].querySelectorAll('link, style'));\n var reference = '';\n if (isNullOrUndefined(printWindow)) {\n printWindow = window.open('', 'print', 'height=452,width=1024,tabbar=no');\n }\n div.appendChild(element.cloneNode(true));\n for (var i = 0, len = links.length; i < len; i++) {\n reference += links[i].outerHTML;\n }\n printWindow.document.write(' ' + reference + '' + div.innerHTML +\n '' + '');\n printWindow.document.close();\n printWindow.focus();\n // tslint:disable-next-line\n var interval = setInterval(function () {\n if (printWindow.ready) {\n printWindow.print();\n printWindow.close();\n clearInterval(interval);\n }\n }, 500);\n return printWindow;\n}\n/**\n * Function to normalize the units applied to the element.\n * @param {number|string} value\n * @return {string} result\n * @private\n */\nexport function formatUnit(value) {\n var result = value + '';\n if (result === 'auto' || result.indexOf('%') !== -1 || result.indexOf('px') !== -1) {\n return result;\n }\n return result + 'px';\n}\n/**\n * Function to fetch the Instances of a HTML element for the given component.\n * @param {string | HTMLElement} element\n * @param {any} component\n * @return {Object} inst\n * @private\n */\n// tslint:disable-next-line\nexport function getInstance(element, component) {\n // tslint:disable-next-line:no-any\n var elem = (typeof (element) === 'string') ? document.querySelector(element) : element;\n if (elem[instances]) {\n for (var _i = 0, _a = elem[instances]; _i < _a.length; _i++) {\n var inst = _a[_i];\n if (inst instanceof component) {\n return inst;\n }\n }\n }\n return null;\n}\n/**\n * Function to add instances for the given element.\n * @param {string | HTMLElement} element\n * @param {Object} instance\n * @return {void}\n * @private\n */\nexport function addInstance(element, instance) {\n // tslint:disable-next-line:no-any\n var elem = (typeof (element) === 'string') ? document.querySelector(element) : element;\n if (elem[instances]) {\n elem[instances].push(instance);\n }\n else {\n elem[instances] = [instance];\n }\n}\n/**\n * Function to generate the unique id.\n * @return {string}\n * @private\n */\nexport function uniqueID() {\n // tslint:disable-next-line:no-any\n var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n return intCrypto.getRandomValues(num);\n}\nfunction combineArray(num) {\n var ret = '';\n for (var i = 0; i < 5; i++) {\n ret += (i ? ',' : '') + num[i];\n }\n return ret;\n}\n","/**\n * Functions related to dom operations.\n */\nimport { EventHandler } from './event-handler';\nimport { isNullOrUndefined } from './util';\n/**\n * Function to create Html element.\n * @param tagName - Name of the tag, id and class names.\n * @param properties - Object to set properties in the element.\n * @param properties.id - To set the id to the created element.\n * @param properties.className - To add classes to the element.\n * @param properties.innerHTML - To set the innerHTML to element.\n * @param properties.styles - To set the some custom styles to element.\n * @param properties.attrs - To set the attributes to element.\n * @private\n */\nexport function createElement(tagName, properties) {\n var element = document.createElement(tagName);\n if (typeof (properties) === 'undefined') {\n return element;\n }\n element.innerHTML = (properties.innerHTML ? properties.innerHTML : '');\n if (properties.className !== undefined) {\n element.className = properties.className;\n }\n if (properties.id !== undefined) {\n element.id = properties.id;\n }\n if (properties.styles !== undefined) {\n element.setAttribute('style', properties.styles);\n }\n if (properties.attrs !== undefined) {\n attributes(element, properties.attrs);\n }\n return element;\n}\n/**\n * The function used to add the classes to array of elements\n * @param {Element[]|NodeList} elements - An array of elements that need to add a list of classes\n * @param {string|string[]} classes - String or array of string that need to add an individual element as a class\n * @private\n */\nexport function addClass(elements, classes) {\n var classList = getClassList(classes);\n for (var _i = 0, _a = elements; _i < _a.length; _i++) {\n var ele = _a[_i];\n for (var _b = 0, classList_1 = classList; _b < classList_1.length; _b++) {\n var className = classList_1[_b];\n if (!ele.classList.contains(className)) {\n ele.classList.add(className);\n }\n }\n }\n return elements;\n}\n/**\n * The function used to add the classes to array of elements\n * @param {Element[]|NodeList} elements - An array of elements that need to remove a list of classes\n * @param {string|string[]} classes - String or array of string that need to add an individual element as a class\n * @private\n */\nexport function removeClass(elements, classes) {\n var classList = getClassList(classes);\n for (var _i = 0, _a = elements; _i < _a.length; _i++) {\n var ele = _a[_i];\n if (ele.className !== '') {\n for (var _b = 0, classList_2 = classList; _b < classList_2.length; _b++) {\n var className = classList_2[_b];\n ele.classList.remove(className);\n }\n }\n }\n return elements;\n}\nfunction getClassList(classes) {\n var classList = [];\n if (typeof classes === 'string') {\n classList.push(classes);\n }\n else {\n classList = classes;\n }\n return classList;\n}\n/**\n * The function used to check element is visible or not.\n * @param {Element|Node} element - An element the need to check visibility\n * @private\n */\nexport function isVisible(element) {\n var ele = element;\n return (ele.style.visibility === '' && ele.offsetWidth > 0);\n}\n/**\n * The function used to insert an array of elements into a first of the element.\n * @param {Element[]|NodeList} fromElements - An array of elements that need to prepend.\n * @param {Element} toElement - An element that is going to prepend.\n * @private\n */\nexport function prepend(fromElements, toElement) {\n var docFrag = document.createDocumentFragment();\n for (var _i = 0, _a = fromElements; _i < _a.length; _i++) {\n var ele = _a[_i];\n docFrag.appendChild(ele);\n }\n toElement.insertBefore(docFrag, toElement.firstElementChild);\n return fromElements;\n}\n/**\n * The function used to insert an array of elements into last of the element.\n * @param {Element[]|NodeList} fromElements - An array of elements that need to append.\n * @param {Element} toElement - An element that is going to prepend.\n * @private\n */\nexport function append(fromElements, toElement) {\n var docFrag = document.createDocumentFragment();\n for (var _i = 0, _a = fromElements; _i < _a.length; _i++) {\n var ele = _a[_i];\n docFrag.appendChild(ele);\n }\n toElement.appendChild(docFrag);\n return fromElements;\n}\n/**\n * The function used to remove the element from the\n * @param {Element|Node|HTMLElement} element - An element that is going to detach from the Dom\n * @private\n */\nexport function detach(element) {\n var parentNode = element.parentNode;\n return parentNode.removeChild(element);\n}\n/**\n * The function used to remove the element from Dom also clear the bounded events\n * @param {Element|Node|HTMLElement} element - An element remove from the Dom\n * @private\n */\nexport function remove(element) {\n var parentNode = element.parentNode;\n EventHandler.clearEvents(element);\n parentNode.removeChild(element);\n}\n/**\n * The function helps to set multiple attributes to an element\n * @param {Element|Node} element - An element that need to set attributes.\n * @param {{[key:string]:string}} attributes - JSON Object that is going to as attributes.\n * @private\n */\nexport function attributes(element, attributes) {\n var keys = Object.keys(attributes);\n var ele = element;\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n ele.setAttribute(key, attributes[key]);\n }\n return ele;\n}\n/**\n * The function selects the element from giving context.\n * @param {string} selector - Selector string need fetch element from the\n * @param {Document|Element=document} context - It is an optional type, That specifies a Dom context.\n * @private\n */\nexport function select(selector, context) {\n if (context === void 0) { context = document; }\n return context.querySelector(selector);\n}\n/**\n * The function selects an array of element from the given context.\n * @param {string} selector - Selector string need fetch element from the\n * @param {Document|Element=document} context - It is an optional type, That specifies a Dom context.\n * @private\n */\nexport function selectAll(selector, context) {\n if (context === void 0) { context = document; }\n var nodeList = context.querySelectorAll(selector);\n return nodeList;\n}\n/**\n * Returns single closest parent element based on class selector.\n * @param {Element} element - An element that need to find the closest element.\n * @param {string} selector - A classSelector of closest element.\n * @private\n */\nexport function closest(element, selector) {\n var el = element;\n if (typeof el.closest === 'function') {\n return el.closest(selector);\n }\n while (el && el.nodeType === 1) {\n if (matches(el, selector)) {\n return el;\n }\n el = el.parentNode;\n }\n return null;\n}\n/**\n * Returns all sibling elements of the given element.\n * @param {Element|Node} element - An element that need to get siblings.\n * @private\n */\nexport function siblings(element) {\n var siblings = [];\n var childNodes = Array.prototype.slice.call(element.parentNode.childNodes);\n for (var _i = 0, childNodes_1 = childNodes; _i < childNodes_1.length; _i++) {\n var curNode = childNodes_1[_i];\n if (curNode.nodeType === Node.ELEMENT_NODE && element !== curNode) {\n siblings.push(curNode);\n }\n }\n return siblings;\n}\n/**\n * set the value if not exist. Otherwise set the existing value\n * @param {HTMLElement} element - An element to which we need to set value.\n * @param {string} property - Property need to get or set.\n * @param {string} value - value need to set.\n * @private\n */\nexport function getAttributeOrDefault(element, property, value) {\n var attrVal = element.getAttribute(property);\n if (isNullOrUndefined(attrVal)) {\n element.setAttribute(property, value.toString());\n attrVal = value;\n }\n return attrVal;\n}\n/**\n * Set the style attributes to Html element.\n * @param {HTMLElement} element - Element which we want to set attributes\n * @param {any} attrs - Set the given attributes to element\n * @return {void}\n * @private\n */\nexport function setStyleAttribute(element, attrs) {\n if (attrs !== undefined) {\n Object.keys(attrs).forEach(function (key) {\n // tslint:disable-next-line:no-any\n element.style[key] = attrs[key];\n });\n }\n}\n/**\n * Method for add and remove classes to a dom element.\n * @param {Element} element - Element for add and remove classes\n * @param {string[]} addClasses - List of classes need to be add to the element\n * @param {string[]} removeClasses - List of classes need to be remove from the element\n * @return {void}\n * @private\n */\nexport function classList(element, addClasses, removeClasses) {\n addClass([element], addClasses);\n removeClass([element], removeClasses);\n}\n/**\n * Method to check whether the element matches the given selector.\n * @param {Element} element - Element to compare with the selector.\n * @param {string} selector - String selector which element will satisfy.\n * @return {void}\n * @private\n */\nexport function matches(element, selector) {\n var matches = element.matches || element.msMatchesSelector || element.webkitMatchesSelector;\n if (matches) {\n return matches.call(element, selector);\n }\n else {\n return [].indexOf.call(document.querySelectorAll(selector), element) !== -1;\n }\n}\n","import { createInstance, isUndefined, merge, extend, getValue } from './util';\n/**\n * Returns the Class Object\n * @param {ClassObject} instance - instance of ClassObject\n * @param {string} curKey - key of the current instance\n * @param {Object} defaultValue - default Value\n * @param {Object[]} type\n */\nfunction getObject(instance, curKey, defaultValue, type) {\n if (!instance.properties.hasOwnProperty(curKey)) {\n instance.properties[curKey] = createInstance(type, [instance, curKey, defaultValue]);\n }\n return instance.properties[curKey];\n}\n/**\n * Returns object array\n * @param {ClassObject} instance\n * @param {string} curKey\n * @param {Object[]} defaultValue\n * @param type\n * @param {boolean} isSetter\n * @returns {Object[]}\n */\nfunction getObjectArray(instance, curKey, defaultValue, type, isSetter, isFactory) {\n var result = [];\n var len = defaultValue.length;\n for (var i = 0; i < len; i++) {\n var curType = type;\n if (isFactory) {\n curType = type(defaultValue[i]);\n }\n if (isSetter) {\n var inst = createInstance(curType, [instance, curKey, {}, true]);\n inst.setProperties(defaultValue[i], true);\n result.push(inst);\n }\n else {\n result.push(createInstance(curType, [instance, curKey, defaultValue[i], true]));\n }\n }\n return result;\n}\n/**\n * Returns the properties of the object\n * @param {Object} defaultValue\n * @param {string} curKey\n */\nfunction propertyGetter(defaultValue, curKey) {\n return function () {\n if (!this.properties.hasOwnProperty(curKey)) {\n this.properties[curKey] = defaultValue;\n }\n return this.properties[curKey];\n };\n}\n/**\n * Set the properties for the object\n * @param {Object} defaultValue\n * @param {string} curKey\n */\nfunction propertySetter(defaultValue, curKey) {\n return function (newValue) {\n if (this.properties[curKey] !== newValue) {\n var oldVal = this.properties.hasOwnProperty(curKey) ? this.properties[curKey] : defaultValue;\n this.saveChanges(curKey, newValue, oldVal);\n this.properties[curKey] = newValue;\n }\n };\n}\n/**\n * Returns complex objects\n */\nfunction complexGetter(defaultValue, curKey, type) {\n return function () {\n return getObject(this, curKey, defaultValue, type);\n };\n}\n/**\n * Sets complex objects\n */\nfunction complexSetter(defaultValue, curKey, type) {\n return function (newValue) {\n getObject(this, curKey, defaultValue, type).setProperties(newValue);\n };\n}\nfunction complexFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n return getObject(this, curKey, defaultValue, curType);\n };\n}\nfunction complexFactorySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var curType = type(newValue);\n getObject(this, curKey, defaultValue, curType).setProperties(newValue);\n };\n}\nfunction complexArrayGetter(defaultValue, curKey, type) {\n return function () {\n if (!this.properties.hasOwnProperty(curKey)) {\n var defCollection = getObjectArray(this, curKey, defaultValue, type, false);\n this.properties[curKey] = defCollection;\n }\n return this.properties[curKey];\n };\n}\nfunction complexArraySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var oldValueCollection = getObjectArray(this, curKey, defaultValue, type, false);\n var newValCollection = getObjectArray(this, curKey, newValue, type, true);\n this.saveChanges(curKey, newValCollection, oldValueCollection);\n this.properties[curKey] = newValCollection;\n };\n}\nfunction complexArrayFactorySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var oldValueCollection = getObjectArray(this, curKey, defaultValue, type, false, true);\n var newValCollection = getObjectArray(this, curKey, newValue, type, true, true);\n this.saveChanges(curKey, newValCollection, oldValueCollection);\n this.properties[curKey] = newValCollection;\n };\n}\nfunction complexArrayFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n if (!this.properties.hasOwnProperty(curKey)) {\n var defCollection = getObjectArray(this, curKey, defaultValue, curType, false);\n this.properties[curKey] = defCollection;\n }\n return this.properties[curKey];\n };\n}\n/**\n * Method used to create property. General syntax below.\n * @param {T} defaultValue? - Specifies the default value of property.\n * ```\n * @Property('TypeScript')\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Property(defaultValue) {\n return function (target, key) {\n var propertyDescriptor = {\n set: propertySetter(defaultValue, key),\n get: propertyGetter(defaultValue, key),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'prop', defaultValue);\n };\n}\n/**\n * Method used to create complex property. General syntax below.\n * @param {T} defaultValue - Specifies the default value of property.\n * @param {Function} type - Specifies the class type of complex object.\n * ```\n * @Complex({},Type)\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Complex(defaultValue, type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexSetter(defaultValue, key, type),\n get: complexGetter(defaultValue, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'complexProp', defaultValue, type);\n };\n}\n/**\n * Method used to create complex Factory property. General syntax below.\n * @param {Function} defaultType - Specifies the default value of property.\n * @param {Function} type - Specifies the class factory type of complex object.\n * ```\n * @ComplexFactory(defaultType, factoryFunction)\n * propertyName: Type1 | Type2;\n * ```\n * @private\n */\nexport function ComplexFactory(type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexFactorySetter({}, key, type),\n get: complexFactoryGetter({}, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'complexProp', {}, type);\n };\n}\n/**\n * Method used to create complex array property. General syntax below.\n * @param {T[]} defaultValue - Specifies the default value of property.\n * @param {Function} type - Specifies the class type of complex object.\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Collection(defaultValue, type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexArraySetter(defaultValue, key, type),\n get: complexArrayGetter(defaultValue, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'colProp', defaultValue, type);\n };\n}\n/**\n * Method used to create complex factory array property. General syntax below.\n * @param {T[]} defaultType - Specifies the default type of property.\n * @param {Function} type - Specifies the class type of complex object.\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\nexport function CollectionFactory(type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexArrayFactorySetter([], key, type),\n get: complexArrayFactoryGetter([], key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'colProp', {}, type);\n };\n}\n/**\n * Method used to create event property. General syntax below.\n * @param {Function} defaultValue? - Specifies the default value of property.\n * @param {boolean} isComplex? - Specifies the whether it is complex object.\n * ```\n * @Event(()=>{return true;})\n * ```\n * @private\n */\nexport function Event() {\n return function (target, key) {\n var eventDescriptor = {\n set: function (newValue) {\n var oldValue = this.properties[key];\n if (oldValue !== newValue) {\n var finalContext = getParentContext(this, key);\n if (isUndefined(oldValue) === false) {\n finalContext.context.removeEventListener(finalContext.prefix, oldValue);\n }\n finalContext.context.addEventListener(finalContext.prefix, newValue);\n this.properties[key] = newValue;\n }\n },\n get: propertyGetter(undefined, key),\n enumerable: true,\n configurable: true\n };\n Object.defineProperty(target, key, eventDescriptor);\n addPropertyCollection(target, key, 'event');\n };\n}\n/**\n * NotifyPropertyChanges is triggers the call back when the property has been changed.\n *\n * ```\n * @NotifyPropertyChanges\n * class DemoClass implements INotifyPropertyChanged {\n *\n * @Property()\n * property1: string;\n *\n * dataBind: () => void;\n *\n * constructor() { }\n *\n * onPropertyChanged(newProp: any, oldProp: any) {\n * // Called when property changed\n * }\n * }\n * ```\n * @private\n */\nexport function NotifyPropertyChanges(classConstructor) {\n /** Need to code */\n}\n/**\n * Method used to create the builderObject for the target component.\n * @private\n */\nfunction addPropertyCollection(target, key, propertyType, defaultValue, type) {\n if (isUndefined(target.propList)) {\n target.propList = {\n props: [],\n complexProps: [],\n colProps: [],\n events: [],\n propNames: [],\n complexPropNames: [],\n colPropNames: [],\n eventNames: []\n };\n }\n /* tslint:disable no-any */\n target.propList[propertyType + 's'].push({\n propertyName: key,\n defaultValue: defaultValue,\n type: type\n });\n target.propList[propertyType + 'Names'].push(key);\n /* tslint:enable no-any */\n}\n/**\n * Returns an object containing the builder properties\n * @param {Function} component\n * @private\n */\nfunction getBuilderProperties(component) {\n if (isUndefined(component.prototype.builderObject)) {\n component.prototype.builderObject = {\n properties: {}, propCollections: [], add: function () {\n this.isPropertyArray = true;\n this.propCollections.push(extend({}, this.properties, {}));\n }\n };\n var rex = /complex/;\n for (var _i = 0, _a = Object.keys(component.prototype.propList); _i < _a.length; _i++) {\n var key = _a[_i];\n var _loop_1 = function (prop) {\n if (rex.test(key)) {\n component.prototype.builderObject[prop.propertyName] = function (value) {\n var childType = {};\n merge(childType, getBuilderProperties(prop.type));\n value(childType);\n var tempValue;\n if (!childType.isPropertyArray) {\n tempValue = extend({}, childType.properties, {});\n }\n else {\n tempValue = childType.propCollections;\n }\n this.properties[prop.propertyName] = tempValue;\n childType.properties = {};\n childType.propCollections = [];\n childType.isPropertyArray = false;\n return this;\n };\n }\n else {\n component.prototype.builderObject[prop.propertyName] = function (value) {\n this.properties[prop.propertyName] = value;\n return this;\n };\n }\n };\n for (var _b = 0, _c = component.prototype.propList[key]; _b < _c.length; _b++) {\n var prop = _c[_b];\n _loop_1(prop);\n }\n }\n }\n return component.prototype.builderObject;\n}\n/**\n * Method used to create builder for the components\n * @param {any} component -specifies the target component for which builder to be created.\n * @private\n */\nexport function CreateBuilder(component) {\n var builderFunction = function (element) {\n this.element = element;\n return this;\n };\n var instanceFunction = function (element) {\n if (!builderFunction.prototype.hasOwnProperty('create')) {\n builderFunction.prototype = getBuilderProperties(component);\n builderFunction.prototype.create = function () {\n var temp = extend({}, {}, this.properties);\n this.properties = {};\n return new component(temp, this.element);\n };\n }\n return new builderFunction(element);\n };\n return instanceFunction;\n}\n/**\n * Returns parent options for the object\n * @param {Object} context\n * @param {string} prefix\n * @private\n */\nfunction getParentContext(context, prefix) {\n if (context.hasOwnProperty('parentObj') === false) {\n return { context: context, prefix: prefix };\n }\n else {\n var curText = getValue('propName', context);\n if (curText) {\n prefix = curText + '-' + prefix;\n }\n return getParentContext(getValue('parentObj', context), prefix);\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { createElement, selectAll, closest } from './dom';\nimport { Base } from './base';\nimport { Browser } from './browser';\nimport { EventHandler } from './event-handler';\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\n/**\n * The Animation framework provide options to animate the html DOM elements\n * ```typescript\n * let animeObject = new Animation({\n * name: 'SlideLeftIn',\n * duration: 1000\n * });\n * animeObject.animate('#anime1');\n * animeObject.animate('#anime2', { duration: 500 });\n * ```\n */\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation(options) {\n var _this = _super.call(this, options, undefined) || this;\n /**\n * @private\n */\n _this.easing = {\n ease: 'cubic-bezier(0.250, 0.100, 0.250, 1.000)',\n linear: 'cubic-bezier(0.250, 0.250, 0.750, 0.750)',\n easeIn: 'cubic-bezier(0.420, 0.000, 1.000, 1.000)',\n easeOut: 'cubic-bezier(0.000, 0.000, 0.580, 1.000)',\n easeInOut: 'cubic-bezier(0.420, 0.000, 0.580, 1.000)',\n elasticInOut: 'cubic-bezier(0.5,-0.58,0.38,1.81)',\n elasticIn: 'cubic-bezier(0.17,0.67,0.59,1.81)',\n elasticOut: 'cubic-bezier(0.7,-0.75,0.99,1.01)'\n };\n return _this;\n }\n Animation_1 = Animation;\n /**\n * Applies animation to the current element.\n * @param {string | HTMLElement} element - Element which needs to be animated.\n * @param {AnimationModel} options - Overriding default animation settings.\n * @return {void}\n */\n Animation.prototype.animate = function (element, options) {\n options = !options ? {} : options;\n var model = this.getModel(options);\n if (typeof element === 'string') {\n var elements = Array.prototype.slice.call(selectAll(element, document));\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element_1 = elements_1[_i];\n model.element = element_1;\n Animation_1.delayAnimation(model);\n }\n }\n else {\n model.element = element;\n Animation_1.delayAnimation(model);\n }\n };\n /**\n * Stop the animation effect on animated element.\n * @param {HTMLElement} element - Element which needs to be stop the animation.\n * @param {AnimationOptions} model - Handling the animation model at stop function.\n * @return {void}\n */\n Animation.stop = function (element, model) {\n element.style.animation = '';\n element.removeAttribute('e-animate');\n var animationId = element.getAttribute('e-animation-id');\n if (animationId) {\n var frameId = parseInt(animationId, 10);\n cancelAnimationFrame(frameId);\n element.removeAttribute('e-animation-id');\n }\n if (model && model.end) {\n model.end.call(this, model);\n }\n };\n /**\n * Set delay to animation element\n * @param {AnimationModel} model\n * @returns {void}\n */\n Animation.delayAnimation = function (model) {\n if (model.delay) {\n setTimeout(function () { Animation_1.applyAnimation(model); }, model.delay);\n }\n else {\n Animation_1.applyAnimation(model);\n }\n };\n /**\n * Triggers animation\n * @param {AnimationModel} model\n * @returns {void}\n */\n Animation.applyAnimation = function (model) {\n var _this = this;\n model.timeStamp = 0;\n var step = 0;\n var timerId = 0;\n var startTime = 0;\n var prevTimeStamp = 0;\n var duration = model.duration;\n model.element.setAttribute('e-animate', 'true');\n var startAnimation = function (timeStamp) {\n try {\n if (timeStamp) {\n // let step: number = model.timeStamp = timeStamp - startTime;\n /** phantomjs workaround for timestamp fix */\n prevTimeStamp = prevTimeStamp === 0 ? timeStamp : prevTimeStamp;\n model.timeStamp = (timeStamp + model.timeStamp) - prevTimeStamp;\n prevTimeStamp = timeStamp;\n /** phantomjs workaround end */\n // trigger animation begin event\n if (!step && model.begin) {\n model.begin.call(_this, model);\n }\n step = step + 1;\n var avg = model.timeStamp / step;\n if (model.timeStamp < duration && model.timeStamp + avg < duration && model.element.getAttribute('e-animate')) {\n // apply animation effect to the current element \n model.element.style.animation = model.name + ' ' + model.duration + 'ms ' + model.timingFunction;\n if (model.progress) {\n model.progress.call(_this, model);\n }\n // repeat requestAnimationFrame \n requestAnimationFrame(startAnimation);\n }\n else {\n // clear requestAnimationFrame\n cancelAnimationFrame(timerId);\n model.element.removeAttribute('e-animation-id');\n model.element.removeAttribute('e-animate');\n model.element.style.animation = '';\n if (model.end) {\n model.end.call(_this, model);\n }\n }\n }\n else {\n startTime = performance.now();\n // set initial requestAnimationFrame\n timerId = requestAnimationFrame(startAnimation);\n model.element.setAttribute('e-animation-id', timerId.toString());\n }\n }\n catch (e) {\n cancelAnimationFrame(timerId);\n model.element.removeAttribute('e-animation-id');\n if (model.fail) {\n model.fail.call(_this, e);\n }\n }\n };\n startAnimation();\n };\n /**\n * Returns Animation Model\n * @param {AnimationModel} options\n * @returns {AnimationModel}\n */\n Animation.prototype.getModel = function (options) {\n return {\n name: options.name || this.name,\n delay: options.delay || this.delay,\n duration: (options.duration !== undefined ? options.duration : this.duration),\n begin: options.begin || this.begin,\n end: options.end || this.end,\n fail: options.fail || this.fail,\n progress: options.progress || this.progress,\n timingFunction: this.easing[options.timingFunction] ? this.easing[options.timingFunction] :\n (options.timingFunction || this.easing[this.timingFunction])\n };\n };\n /**\n * @private\n */\n Animation.prototype.onPropertyChanged = function (newProp, oldProp) {\n // no code needed\n };\n /**\n * Returns module name as animation\n * @private\n */\n Animation.prototype.getModuleName = function () {\n return 'animation';\n };\n /**\n * @private\n */\n Animation.prototype.destroy = function () {\n //Override base destroy;\n };\n __decorate([\n Property('FadeIn')\n ], Animation.prototype, \"name\", void 0);\n __decorate([\n Property(400)\n ], Animation.prototype, \"duration\", void 0);\n __decorate([\n Property('ease')\n ], Animation.prototype, \"timingFunction\", void 0);\n __decorate([\n Property(0)\n ], Animation.prototype, \"delay\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"progress\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"begin\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"end\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"fail\", void 0);\n Animation = Animation_1 = __decorate([\n NotifyPropertyChanges\n ], Animation);\n return Animation;\n var Animation_1;\n}(Base));\nexport { Animation };\n/**\n * Ripple provides material theme's wave effect when an element is clicked\n * ```html\n *
\n * \n * ```\n * @private\n * @param HTMLElement element - Target element\n * @param RippleOptions rippleOptions - Ripple options .\n */\nexport function rippleEffect(element, rippleOptions, done) {\n var rippleModel = getRippleModel(rippleOptions);\n if (rippleModel.rippleFlag === false || (rippleModel.rippleFlag === undefined && !isRippleEnabled)) {\n return Function;\n }\n element.setAttribute('data-ripple', 'true');\n EventHandler.add(element, 'mousedown', rippleHandler, { parent: element, rippleOptions: rippleModel });\n EventHandler.add(element, 'mouseup', rippleUpHandler, { parent: element, rippleOptions: rippleModel, done: done });\n EventHandler.add(element, 'mouseleave', rippleLeaveHandler, { parent: element, rippleOptions: rippleModel });\n if (Browser.isPointer) {\n EventHandler.add(element, 'transitionend', rippleLeaveHandler, { parent: element, rippleOptions: rippleModel });\n }\n return (function () {\n element.removeAttribute('data-ripple');\n EventHandler.remove(element, 'mousedown', rippleHandler);\n EventHandler.remove(element, 'mouseup', rippleUpHandler);\n EventHandler.remove(element, 'mouseleave', rippleLeaveHandler);\n EventHandler.remove(element, 'transitionend', rippleLeaveHandler);\n });\n}\nfunction getRippleModel(rippleOptions) {\n var rippleModel = {\n selector: rippleOptions && rippleOptions.selector ? rippleOptions.selector : null,\n ignore: rippleOptions && rippleOptions.ignore ? rippleOptions.ignore : null,\n rippleFlag: rippleOptions && rippleOptions.rippleFlag,\n isCenterRipple: rippleOptions && rippleOptions.isCenterRipple,\n duration: rippleOptions && rippleOptions.duration ? rippleOptions.duration : 350\n };\n return rippleModel;\n}\n/**\n * Handler for ripple event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\nfunction rippleHandler(e) {\n var target = (e.target);\n var selector = this.rippleOptions.selector;\n var element = selector ? closest(target, selector) : target;\n if (!element || (this.rippleOptions && closest(target, this.rippleOptions.ignore))) {\n return;\n }\n var offset = element.getBoundingClientRect();\n var offsetX = e.pageX - document.body.scrollLeft;\n var offsetY = e.pageY - document.body.scrollTop;\n var pageX = Math.max(Math.abs(offsetX - offset.left), Math.abs(offsetX - offset.right));\n var pageY = Math.max(Math.abs(offsetY - offset.top), Math.abs(offsetY - offset.bottom));\n var radius = Math.sqrt(pageX * pageX + pageY * pageY);\n var diameter = radius * 2 + 'px';\n var x = offsetX - offset.left - radius;\n var y = offsetY - offset.top - radius;\n if (this.rippleOptions && this.rippleOptions.isCenterRipple) {\n x = 0;\n y = 0;\n diameter = '100%';\n }\n element.classList.add('e-ripple');\n var duration = this.rippleOptions.duration.toString();\n var styles = 'width: ' + diameter + ';height: ' + diameter + ';left: ' + x + 'px;top: ' + y + 'px;' +\n 'transition-duration: ' + duration + 'ms;';\n var rippleElement = createElement('div', { className: 'e-ripple-element', styles: styles });\n element.appendChild(rippleElement);\n window.getComputedStyle(rippleElement).getPropertyValue('opacity');\n rippleElement.style.transform = 'scale(1)';\n if (element !== this.parent) {\n EventHandler.add(element, 'mouseleave', rippleLeaveHandler, { parent: this.parent, rippleOptions: this.rippleOptions });\n }\n}\n/**\n * Handler for ripple element mouse up event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\nfunction rippleUpHandler(e) {\n removeRipple(e, this);\n}\n/**\n * Handler for ripple element mouse move event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\nfunction rippleLeaveHandler(e) {\n removeRipple(e, this);\n}\n/**\n * Handler for removing ripple element\n * @param {MouseEvent} e\n * @param {rippleArgs} eventArgs\n * @returns {void}\n * @private\n */\nfunction removeRipple(e, eventArgs) {\n var duration = eventArgs.rippleOptions.duration;\n var target = (e.target);\n var selector = eventArgs.rippleOptions.selector;\n var element = selector ? closest(target, selector) : target;\n if (!element || (element && element.className.indexOf('e-ripple') === -1)) {\n return;\n }\n var rippleElements = selectAll('.e-ripple-element', element);\n var rippleElement = rippleElements[rippleElements.length - 1];\n if (rippleElement) {\n rippleElement.style.opacity = '0.5';\n }\n if (eventArgs.parent !== element) {\n EventHandler.remove(element, 'mouseleave', rippleLeaveHandler);\n }\n /* tslint:disable:align */\n setTimeout(function () {\n if (rippleElement && rippleElement.parentNode) {\n rippleElement.parentNode.removeChild(rippleElement);\n }\n if (!element.getElementsByClassName('e-ripple-element').length) {\n element.classList.remove('e-ripple');\n }\n if (eventArgs.done) {\n eventArgs.done(e);\n }\n }, duration);\n}\nexport var isRippleEnabled = false;\n/**\n * Animation Module provides support to enable ripple effect functionality to Essential JS 2 components.\n * @param {boolean} isRipple Specifies the boolean value to enable or disable ripple effect.\n * @returns {boolean}\n */\nexport function enableRipple(isRipple) {\n isRippleEnabled = isRipple;\n return isRippleEnabled;\n}\n","import { DateFormat } from './intl/date-formatter';\nimport { NumberFormat } from './intl/number-formatter';\nimport { DateParser } from './intl/date-parser';\nimport { NumberParser } from './intl/number-parser';\nimport { IntlBase } from './intl/intl-base';\nimport { extend, getValue } from './util';\nimport { Observer } from './observer';\n/**\n * Specifies the observer used for external change detection.\n */\nexport var onIntlChange = new Observer();\n/**\n * Specifies the default rtl status for EJ2 components.\n */\nexport var rightToLeft = false;\n/**\n * Specifies the CLDR data loaded for internationalization functionalities.\n * @private\n */\nexport var cldrData = {};\n/**\n * Specifies the default culture value to be considered.\n * @private\n */\nexport var defaultCulture = 'en-US';\n/**\n * Specifies default currency code to be considered\n * @private\n */\nexport var defaultCurrencyCode = 'USD';\nvar mapper = ['numericObject', 'dateObject'];\n/**\n * Internationalization class provides support to parse and format the number and date object to the desired format.\n * ```typescript\n * // To set the culture globally\n * setCulture('en-GB');\n *\n * // To set currency code globally\n * setCurrencyCode('EUR');\n *\n * //Load cldr data\n * loadCldr(gregorainData);\n * loadCldr(timeZoneData);\n * loadCldr(numbersData);\n * loadCldr(numberSystemData);\n *\n * // To use formatter in component side\n * let Intl:Internationalization = new Internationalization();\n *\n * // Date formatting\n * let dateFormatter: Function = Intl.getDateFormat({skeleton:'long',type:'dateTime'});\n * dateFormatter(new Date('11/2/2016'));\n * dateFormatter(new Date('25/2/2030'));\n * Intl.formatDate(new Date(),{skeleton:'E'});\n *\n * //Number formatting\n * let numberFormatter: Function = Intl.getNumberFormat({skeleton:'C5'})\n * numberFormatter(24563334);\n * Intl.formatNumber(123123,{skeleton:'p2'});\n *\n * // Date parser\n * let dateParser: Function = Intl.getDateParser({skeleton:'short',type:'time'});\n * dateParser('10:30 PM');\n * Intl.parseDate('10',{skeleton:'H'});\n * ```\n */\nvar Internationalization = /** @class */ (function () {\n function Internationalization(cultureName) {\n if (cultureName) {\n this.culture = cultureName;\n }\n }\n /**\n * Returns the format function for given options.\n * @param {DateFormatOptions} options - Specifies the format options in which the format function will return.\n * @returns {Function}\n */\n Internationalization.prototype.getDateFormat = function (options) {\n return DateFormat.dateFormat(this.getCulture(), options || { type: 'date', skeleton: 'short' }, cldrData);\n };\n /**\n * Returns the format function for given options.\n * @param {NumberFormatOptions} options - Specifies the format options in which the format function will return.\n * @returns {Function}\n */\n Internationalization.prototype.getNumberFormat = function (options) {\n if (options && !options.currency) {\n options.currency = defaultCurrencyCode;\n }\n return NumberFormat.numberFormatter(this.getCulture(), options || {}, cldrData);\n };\n /**\n * Returns the parser function for given options.\n * @param {DateFormatOptions} options - Specifies the format options in which the parser function will return.\n * @returns {Function}\n * @private\n */\n Internationalization.prototype.getDateParser = function (options) {\n return DateParser.dateParser(this.getCulture(), options || { skeleton: 'short', type: 'date' }, cldrData);\n };\n /**\n * Returns the parser function for given options.\n * @param {NumberFormatOptions} options - Specifies the format options in which the parser function will return.\n * @returns {Function}\n */\n Internationalization.prototype.getNumberParser = function (options) {\n return NumberParser.numberParser(this.getCulture(), options || { format: 'N' }, cldrData);\n };\n /**\n * Returns the formatted string based on format options.\n * @param {Number} value - Specifies the number to format.\n * @param {NumberFormatOptions} option - Specifies the format options in which the number will be formatted.\n * @returns {string}\n */\n Internationalization.prototype.formatNumber = function (value, option) {\n return this.getNumberFormat(option)(value);\n };\n /**\n * Returns the formatted date string based on format options.\n * @param {Number} value - Specifies the number to format.\n * @param {DateFormatOptions} option - Specifies the format options in which the number will be formatted.\n * @returns {string}\n */\n Internationalization.prototype.formatDate = function (value, option) {\n return this.getDateFormat(option)(value);\n };\n /**\n * Returns the date object for given date string and options.\n * @param {string} value - Specifies the string to parse.\n * @param {DateFormatOptions} option - Specifies the parse options in which the date string will be parsed.\n * @returns {Date}\n */\n Internationalization.prototype.parseDate = function (value, option) {\n return this.getDateParser(option)(value);\n };\n /**\n * Returns the number object from the given string value and options.\n * @param {string} value - Specifies the string to parse.\n * @param {NumberFormatOptions} option - Specifies the parse options in which the string number will be parsed.\n * @returns {number}\n */\n Internationalization.prototype.parseNumber = function (value, option) {\n return this.getNumberParser(option)(value);\n };\n /**\n * Returns Native Date Time Pattern\n * @param {DateFormatOptions} option - Specifies the parse options for resultant date time pattern.\n * @param {boolean} isExcelFormat - Specifies format value to be converted to excel pattern.\n * @returns {string}\n * @private\n */\n Internationalization.prototype.getDatePattern = function (option, isExcelFormat) {\n return IntlBase.getActualDateTimeFormat(this.getCulture(), option, cldrData, isExcelFormat);\n };\n /**\n * Returns Native Number Pattern\n * @param {NumberFormatOptions} option - Specifies the parse options for resultant number pattern.\n * @returns {string}\n * @private\n */\n Internationalization.prototype.getNumberPattern = function (option) {\n return IntlBase.getActualNumberFormat(this.getCulture(), option, cldrData);\n };\n Internationalization.prototype.getCulture = function () {\n return this.culture || defaultCulture;\n };\n return Internationalization;\n}());\nexport { Internationalization };\n/**\n * Set the default culture to all EJ2 components\n * @param {string} cultureName - Specifies the culture name to be set as default culture.\n */\nexport function setCulture(cultureName) {\n defaultCulture = cultureName;\n onIntlChange.notify('notifyExternalChange', { 'locale': defaultCulture });\n}\n/**\n * Set the default currency code to all EJ2 components\n * @param {string} currencyCode Specifies the culture name to be set as default culture.\n * @returns {void}\n */\nexport function setCurrencyCode(currencyCode) {\n defaultCurrencyCode = currencyCode;\n onIntlChange.notify('notifyExternalChange', { 'currencyCode': defaultCurrencyCode });\n}\n/**\n * Load the CLDR data into context\n * @param {Object[]} obj Specifies the CLDR data's to be used for formatting and parser.\n * @returns {void}\n */\nexport function loadCldr() {\n var data = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n data[_i] = arguments[_i];\n }\n for (var _a = 0, data_1 = data; _a < data_1.length; _a++) {\n var obj = data_1[_a];\n extend(cldrData, obj, {}, true);\n }\n}\n/**\n * To enable or disable RTL functionality for all components globally.\n * @param {boolean} status - Optional argument Specifies the status value to enable or disable rtl option.\n * @returns {void}\n */\nexport function enableRtl(status) {\n if (status === void 0) { status = true; }\n rightToLeft = status;\n onIntlChange.notify('notifyExternalChange', { enableRtl: rightToLeft });\n}\n/**\n * To get the numeric CLDR object for given culture\n * @param {string} locale - Specifies the locale for which numericObject to be returned.\n * @ignore\n * @private\n */\nexport function getNumericObject(locale, type) {\n /* tslint:disable no-any */\n var numObject = IntlBase.getDependables(cldrData, locale, true)[mapper[0]];\n var dateObject = IntlBase.getDependables(cldrData, locale)[mapper[1]];\n var numSystem = getValue('defaultNumberingSystem', numObject);\n var symbPattern = getValue('symbols-numberSystem-' + numSystem, numObject);\n var pattern = IntlBase.getSymbolPattern(type || 'decimal', numSystem, numObject, false);\n return extend(symbPattern, IntlBase.getFormatData(pattern, true, '', true), { 'dateSeparator': IntlBase.getDateSeparator(dateObject) });\n}\n/**\n * To get the default date CLDR object.\n * @ignore\n * @private\n */\nexport function getDefaultDateObject() {\n return IntlBase.getDependables(cldrData, '', false)[mapper[1]];\n}\n","/**\n * Template Engine\n */\nvar LINES = new RegExp('\\\\n|\\\\r|\\\\s\\\\s+', 'g');\nvar QUOTES = new RegExp(/'|\"/g);\nvar IF_STMT = new RegExp('if ?\\\\(');\nvar ELSEIF_STMT = new RegExp('else if ?\\\\(');\nvar ELSE_STMT = new RegExp('else');\nvar FOR_STMT = new RegExp('for ?\\\\(');\nvar IF_OR_FOR = new RegExp('(\\/if|\\/for)');\nvar CALL_FUNCTION = new RegExp('\\\\((.*)\\\\)', '');\nvar NOT_NUMBER = new RegExp('^[0-9]+$', 'g');\nvar WORD = new RegExp('[\\\\w\"\\'.\\\\s+]+', 'g');\nvar DBL_QUOTED_STR = new RegExp('\"(.*?)\"', 'g');\nvar exp = new RegExp('\\\\${([^}]*)}', 'g');\n// let cachedTemplate: Object = {};\n/**\n * The function to set regular expression for template expression string.\n * @param {RegExp} value - Value expression.\n * @private\n */\nexport function expression(value) {\n if (value) {\n exp = value;\n }\n return exp;\n}\n// /**\n// * To render the template string from the given data.\n// * @param {string} template - String Template.\n// * @param {Object[]|JSON} data - DataSource for the template.\n// * @param {Object} helper? - custom helper object.\n// */\n// export function template(template: string, data: JSON, helper?: Object): string {\n// let hash: string = hashCode(template);\n// let tmpl: Function;\n// if (!cachedTemplate[hash]) {\n// tmpl = cachedTemplate[hash] = compile(template, helper);\n// } else {\n// tmpl = cachedTemplate[hash];\n// }\n// return tmpl(data);\n// }\n/**\n * Compile the template string into template function.\n * @param {string} template - The template string which is going to convert.\n * @param {Object} helper? - Helper functions as an object.\n * @private\n */\nexport function compile(template, helper) {\n var argName = 'data';\n var evalExpResult = evalExp(template, argName, helper);\n var fnCode = \"var str=\\\"\" + evalExpResult + \"\\\"; return str;\";\n // tslint:disable-next-line:no-function-constructor-with-string-args\n var fn = new Function(argName, fnCode);\n return fn.bind(helper);\n}\n// function used to evaluate the function expression\nfunction evalExp(str, nameSpace, helper) {\n /**\n * Variable containing Local Keys\n */\n var localKeys = [];\n return str.replace(LINES, '').replace(DBL_QUOTED_STR, '\\'$1\\'').replace(exp, function (match, cnt, offset, matchStr) {\n var matches = cnt.match(CALL_FUNCTION);\n // matches to detect any function calls\n if (matches) {\n var rlStr = matches[1];\n if (ELSEIF_STMT.test(cnt)) {\n //handling else-if condition\n cnt = '\";} ' + cnt.replace(matches[1], rlStr.replace(WORD, function (str) {\n str = str.trim();\n return addNameSpace(str, !(QUOTES.test(str)) && (localKeys.indexOf(str) === -1), nameSpace, localKeys);\n })) + '{ \\n str = str + \"';\n }\n else if (IF_STMT.test(cnt)) {\n //handling if condition\n cnt = '\"; ' + cnt.replace(matches[1], rlStr.replace(WORD, function (strs) {\n strs = strs.trim();\n return addNameSpace(strs, !(QUOTES.test(strs)) && (localKeys.indexOf(strs) === -1), nameSpace, localKeys);\n })) + '{ \\n str = str + \"';\n }\n else if (FOR_STMT.test(cnt)) {\n //handling for condition\n var rlStr_1 = matches[1].split(' of ');\n // replace for each into actual JavaScript\n cnt = '\"; ' + cnt.replace(matches[1], function (mtc) {\n localKeys.push(rlStr_1[0]);\n localKeys.push(rlStr_1[0] + 'Index');\n return 'var i=0; i < ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys) + '.length; i++';\n }) + '{ \\n ' + rlStr_1[0] + '= ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys)\n + '[i]; \\n var ' + rlStr_1[0] + 'Index=i; \\n str = str + \"';\n }\n else {\n //helper function handling\n var fnStr = cnt.split('(');\n var fNameSpace = (helper && helper.hasOwnProperty(fnStr[0]) ? 'this.' : 'global');\n fNameSpace = (/\\./.test(fnStr[0]) ? '' : fNameSpace);\n cnt = '\" + ' + (fNameSpace === 'global' ? '' : fNameSpace) +\n cnt.replace(rlStr, addNameSpace(matches[1].replace(',', nameSpace + '.'), (fNameSpace === 'global' ? false : true), nameSpace, localKeys)) +\n '+\"';\n }\n }\n else if (ELSE_STMT.test(cnt)) {\n //handling else condition\n cnt = '\"; ' + cnt.replace(ELSE_STMT, '} else { \\n str = str + \"');\n }\n else if (!!cnt.match(IF_OR_FOR)) {\n // close condition \n cnt = cnt.replace(IF_OR_FOR, '\"; \\n } \\n str = str + \"');\n }\n else {\n // evaluate normal expression\n cnt = '\"+' + addNameSpace(cnt, (localKeys.indexOf(cnt) === -1), nameSpace, localKeys) + '+\"';\n }\n return cnt;\n });\n}\nfunction addNameSpace(str, addNS, nameSpace, ignoreList) {\n return ((addNS && !(NOT_NUMBER.test(str)) && ignoreList.indexOf(str.split('.')[0]) === -1) ? nameSpace + '.' + str : str);\n}\n// // Create hashCode for template string to storeCached function\n// function hashCode(str: string): string {\n// return str.split('').reduce((a: number, b: string) => { a = ((a << 5) - a) + b.charCodeAt(0); return a & a; }, 0).toString();\n// }\n","/**\n * Template Engine Bridge\n */\nimport { compile as render } from './template';\nimport { createElement } from './dom';\nvar HAS_ROW = /^[\\n\\r.]+\\ containerWidth) {\n if (overLeft > 0 && overRight <= 0) {\n position.left = containerRight - elemData.width;\n }\n else if (overRight > 0 && overLeft <= 0) {\n position.left = containerLeft;\n }\n else {\n position.left = overLeft > overRight ? (containerRight - elemData.width) : containerLeft;\n }\n }\n else if (overLeft > 0) {\n position.left += overLeft;\n }\n else if (overRight > 0) {\n position.left -= overRight;\n }\n }\n if (axis.Y) {\n var containerHeight = targetContainer ? getTargetContainerHeight() : getViewPortHeight();\n var containerTop = ContainerTop();\n var containerBottom = ContainerBottom();\n var overTop = containerTop - position.top;\n var overBottom = position.top + elemData.height - containerBottom;\n if (elemData.height > containerHeight) {\n if (overTop > 0 && overBottom <= 0) {\n position.top = containerBottom - elemData.height;\n }\n else if (overBottom > 0 && overTop <= 0) {\n position.top = containerTop;\n }\n else {\n position.top = overTop > overBottom ? (containerBottom - elemData.height) : containerTop;\n }\n }\n else if (overTop > 0) {\n position.top += overTop;\n }\n else if (overBottom > 0) {\n position.top -= overBottom;\n }\n }\n return position;\n}\nexport function isCollide(element, viewPortElement, x, y) {\n if (viewPortElement === void 0) { viewPortElement = null; }\n var elemOffset = calculatePosition(element, 'left', 'top');\n if (x) {\n elemOffset.left = x;\n }\n if (y) {\n elemOffset.top = y;\n }\n var data = [];\n targetContainer = viewPortElement;\n parentDocument = element.ownerDocument;\n var elementRect = element.getBoundingClientRect();\n var top = elemOffset.top;\n var left = elemOffset.left;\n var right = elemOffset.left + elementRect.width;\n var bottom = elemOffset.top + elementRect.height;\n var topData = '';\n var leftData = '';\n var yAxis = topCollideCheck(top, bottom);\n var xAxis = leftCollideCheck(left, right);\n if (yAxis.topSide) {\n data.push('top');\n }\n if (xAxis.rightSide) {\n data.push('right');\n }\n if (xAxis.leftSide) {\n data.push('left');\n }\n if (yAxis.bottomSide) {\n data.push('bottom');\n }\n return data;\n}\nexport function flip(element, target, offsetX, offsetY, positionX, positionY, viewPortElement, axis, fixedParent) {\n if (viewPortElement === void 0) { viewPortElement = null; }\n if (axis === void 0) { axis = { X: true, Y: true }; }\n if (!target || !element || !positionX || !positionY || (!axis.X && !axis.Y)) {\n return;\n }\n var tEdge = { TL: null,\n TR: null,\n BL: null,\n BR: null };\n var eEdge = {\n TL: null,\n TR: null,\n BL: null,\n BR: null\n };\n var elementRect = element.getBoundingClientRect();\n var pos = {\n posX: positionX, posY: positionY, offsetX: offsetX, offsetY: offsetY, position: { left: 0, top: 0 }\n };\n targetContainer = viewPortElement;\n parentDocument = target.ownerDocument;\n updateElementData(target, tEdge, pos, fixedParent);\n setPosition(eEdge, pos, elementRect);\n if (axis.X) {\n leftFlip(target, eEdge, tEdge, pos, elementRect, true);\n }\n if (axis.Y && tEdge.TL.top > -1) {\n topFlip(target, eEdge, tEdge, pos, elementRect, true);\n }\n setPopup(element, pos);\n}\nfunction setPopup(element, pos) {\n var left = 0;\n var top = 0;\n if (element.offsetParent != null\n && (getComputedStyle(element.offsetParent).position === 'absolute' ||\n getComputedStyle(element.offsetParent).position === 'relative')) {\n var data = calculatePosition(element.offsetParent, 'left', 'top');\n left = data.left;\n top = data.top;\n }\n element.style.top = (pos.position.top + pos.offsetY - (top)) + 'px';\n element.style.left = (pos.position.left + pos.offsetX - (left)) + 'px';\n}\nfunction updateElementData(target, edge, pos, fixedParent) {\n pos.position = calculatePosition(target, pos.posX, pos.posY, fixedParent);\n edge.TL = calculatePosition(target, 'left', 'top', fixedParent);\n edge.TR = calculatePosition(target, 'right', 'top', fixedParent);\n edge.BR = calculatePosition(target, 'left', 'bottom', fixedParent);\n edge.BL = calculatePosition(target, 'right', 'bottom', fixedParent);\n}\nfunction setPosition(eStatus, pos, elementRect) {\n eStatus.TL = { top: pos.position.top + pos.offsetY, left: pos.position.left + pos.offsetX };\n eStatus.TR = { top: eStatus.TL.top, left: eStatus.TL.left + elementRect.width };\n eStatus.BL = { top: eStatus.TL.top + elementRect.height,\n left: eStatus.TL.left };\n eStatus.BR = { top: eStatus.TL.top + elementRect.height,\n left: eStatus.TL.left + elementRect.width };\n}\nfunction leftCollideCheck(left, right) {\n var leftSide = false;\n var rightSide = false;\n if (((left - getBodyScrollLeft()) < ContainerLeft())) {\n leftSide = true;\n }\n if (right > ContainerRight()) {\n rightSide = true;\n }\n return { leftSide: leftSide, rightSide: rightSide };\n}\nfunction leftFlip(target, edge, tEdge, pos, elementRect, deepCheck) {\n var collideSide = leftCollideCheck(edge.TL.left, edge.TR.left);\n if ((tEdge.TL.left - getBodyScrollLeft()) <= ContainerLeft()) {\n collideSide.leftSide = false;\n }\n if (tEdge.TR.left >= ContainerRight()) {\n collideSide.rightSide = false;\n }\n if ((collideSide.leftSide && !collideSide.rightSide) || (!collideSide.leftSide && collideSide.rightSide)) {\n if (pos.posX === 'right') {\n pos.posX = 'left';\n }\n else {\n pos.posX = 'right';\n }\n pos.offsetX = pos.offsetX + elementRect.width;\n pos.offsetX = -1 * pos.offsetX;\n pos.position = calculatePosition(target, pos.posX, pos.posY);\n setPosition(edge, pos, elementRect);\n if (deepCheck) {\n leftFlip(target, edge, tEdge, pos, elementRect, false);\n }\n }\n}\nfunction topFlip(target, edge, tEdge, pos, elementRect, deepCheck) {\n var collideSide = topCollideCheck(edge.TL.top, edge.BL.top);\n if ((tEdge.TL.top - getBodyScrollTop()) <= ContainerTop()) {\n collideSide.topSide = false;\n }\n if (tEdge.BL.top >= ContainerBottom()) {\n collideSide.bottomSide = false;\n }\n if ((collideSide.topSide && !collideSide.bottomSide) || (!collideSide.topSide && collideSide.bottomSide)) {\n if (pos.posY === 'top') {\n pos.posY = 'bottom';\n }\n else {\n pos.posY = 'top';\n }\n pos.offsetY = pos.offsetY + elementRect.height;\n pos.offsetY = -1 * pos.offsetY;\n pos.position = calculatePosition(target, pos.posX, pos.posY);\n setPosition(edge, pos, elementRect);\n if (deepCheck) {\n topFlip(target, edge, tEdge, pos, elementRect, false);\n }\n }\n}\nfunction topCollideCheck(top, bottom) {\n var topSide = false;\n var bottomSide = false;\n if ((top - getBodyScrollTop()) < ContainerTop()) {\n topSide = true;\n }\n if (bottom > ContainerBottom()) {\n bottomSide = true;\n }\n return { topSide: topSide, bottomSide: bottomSide };\n}\nfunction getTargetContainerWidth() {\n return targetContainer.getBoundingClientRect().width;\n}\nfunction getTargetContainerHeight() {\n return targetContainer.getBoundingClientRect().height;\n}\nfunction getTargetContainerLeft() {\n return targetContainer.getBoundingClientRect().left;\n}\nfunction getTargetContainerTop() {\n return targetContainer.getBoundingClientRect().top;\n}\nfunction ContainerTop() {\n if (targetContainer) {\n return getTargetContainerTop();\n }\n return 0;\n}\nfunction ContainerLeft() {\n if (targetContainer) {\n return getTargetContainerLeft();\n }\n return 0;\n}\nfunction ContainerRight() {\n if (targetContainer) {\n return (getBodyScrollLeft() + getTargetContainerLeft() + getTargetContainerWidth());\n }\n return (getBodyScrollLeft() + getViewPortWidth());\n}\nfunction ContainerBottom() {\n if (targetContainer) {\n return (getBodyScrollTop() + getTargetContainerTop() + getTargetContainerHeight());\n }\n return (getBodyScrollTop() + getViewPortHeight());\n}\nfunction getBodyScrollTop() {\n // if(targetContainer)\n // return targetContainer.scrollTop;\n return parentDocument.documentElement.scrollTop || parentDocument.body.scrollTop;\n}\nfunction getBodyScrollLeft() {\n // if(targetContainer)\n // return targetContainer.scrollLeft;\n return parentDocument.documentElement.scrollLeft || parentDocument.body.scrollLeft;\n}\nfunction getViewPortHeight() {\n return window.innerHeight;\n}\nfunction getViewPortWidth() {\n return window.innerWidth;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { setStyleAttribute, addClass, removeClass, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit } from '@syncfusion/ej2-base';\nimport { Browser } from '@syncfusion/ej2-base';\nimport { calculatePosition, calculateRelativeBasedPosition } from '../common/position';\nimport { Animation, Property, Event, Component } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { flip, fit, isCollide } from '../common/collision';\n/**\n * Specifies the offset position values.\n */\nvar PositionData = /** @class */ (function (_super) {\n __extends(PositionData, _super);\n function PositionData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('left')\n ], PositionData.prototype, \"X\", void 0);\n __decorate([\n Property('top')\n ], PositionData.prototype, \"Y\", void 0);\n return PositionData;\n}(ChildProperty));\nexport { PositionData };\n// don't use space in classNames\nvar CLASSNAMES = {\n ROOT: 'e-popup',\n RTL: 'e-rtl',\n OPEN: 'e-popup-open',\n CLOSE: 'e-popup-close'\n};\n/**\n * Represents the Popup Component\n * ```html\n *
\n *
Popup Content
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Popup = /** @class */ (function (_super) {\n __extends(Popup, _super);\n function Popup(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.fixedParent = false;\n return _this;\n }\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n Popup.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n setStyleAttribute(this.element, { 'width': formatUnit(newProp.width) });\n break;\n case 'height':\n setStyleAttribute(this.element, { 'height': formatUnit(newProp.height) });\n break;\n case 'zIndex':\n setStyleAttribute(this.element, { 'zIndex': newProp.zIndex });\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'position':\n case 'relateTo':\n this.refreshPosition();\n break;\n case 'offsetX':\n var x = newProp.offsetX - oldProp.offsetX;\n this.element.style.left = (parseInt(this.element.style.left, 10) + (x)).toString() + 'px';\n break;\n case 'offsetY':\n var y = newProp.offsetY - oldProp.offsetY;\n this.element.style.top = (parseInt(this.element.style.top, 10) + (y)).toString() + 'px';\n break;\n case 'content':\n this.setContent();\n break;\n case 'actionOnScroll':\n if (newProp.actionOnScroll !== 'none') {\n this.wireScrollEvents();\n }\n else {\n this.unwireScrollEvents();\n }\n break;\n }\n }\n };\n /**\n * gets the Component module name.\n * @private\n */\n Popup.prototype.getModuleName = function () {\n return 'popup';\n };\n /**\n * gets the persisted state properties of the Component.\n */\n Popup.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * To destroy the control.\n */\n Popup.prototype.destroy = function () {\n this.element.classList.remove(CLASSNAMES.ROOT, CLASSNAMES.RTL);\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Popup.prototype.render = function () {\n this.element.classList.add(CLASSNAMES.ROOT);\n var styles = {};\n if (this.zIndex !== 1000) {\n styles.zIndex = this.zIndex;\n }\n if (this.width !== 'auto') {\n styles.width = formatUnit(this.width);\n }\n if (this.height !== 'auto') {\n styles.height = formatUnit(this.height);\n }\n setStyleAttribute(this.element, styles);\n this.setEnableRtl();\n this.setContent();\n this.wireEvents();\n };\n Popup.prototype.wireEvents = function () {\n if (Browser.isDevice) {\n EventHandler.add(window, 'orientationchange', this.orientationOnChange, this);\n }\n if (this.actionOnScroll !== 'none') {\n this.wireScrollEvents();\n }\n };\n Popup.prototype.wireScrollEvents = function () {\n if (this.getRelateToElement()) {\n for (var _i = 0, _a = this.getScrollableParent(this.getRelateToElement()); _i < _a.length; _i++) {\n var parent_1 = _a[_i];\n EventHandler.add(parent_1, 'scroll', this.scrollRefresh, this);\n }\n }\n };\n Popup.prototype.unwireEvents = function () {\n if (Browser.isDevice) {\n EventHandler.remove(window, 'orientationchange', this.orientationOnChange);\n }\n if (this.actionOnScroll !== 'none') {\n this.unwireScrollEvents();\n }\n };\n Popup.prototype.unwireScrollEvents = function () {\n if (this.getRelateToElement()) {\n for (var _i = 0, _a = this.getScrollableParent(this.getRelateToElement()); _i < _a.length; _i++) {\n var parent_2 = _a[_i];\n EventHandler.remove(parent_2, 'scroll', this.scrollRefresh);\n }\n }\n };\n Popup.prototype.getRelateToElement = function () {\n var relateToElement = this.relateTo === '' ? document.body : this.relateTo;\n this.setProperties({ relateTo: relateToElement }, true);\n return ((typeof this.relateTo) === 'string') ?\n document.querySelector(this.relateTo) : this.relateTo;\n };\n Popup.prototype.scrollRefresh = function (e) {\n if (this.actionOnScroll === 'reposition') {\n if (!(this.element.offsetParent === e.target ||\n (this.element.offsetParent && this.element.offsetParent.tagName === 'BODY' &&\n e.target.parentElement == null))) {\n this.refreshPosition();\n }\n }\n else if (this.actionOnScroll === 'hide') {\n this.hide();\n }\n if (this.actionOnScroll !== 'none') {\n if (this.getRelateToElement()) {\n var targetVisible = this.isElementOnViewport(this.getRelateToElement(), e.target);\n if (!targetVisible && !this.targetInvisibleStatus) {\n this.trigger('targetExitViewport');\n this.targetInvisibleStatus = true;\n }\n else if (targetVisible) {\n this.targetInvisibleStatus = false;\n }\n }\n }\n };\n /**\n * This method is to get the element visibility on viewport when scroll\n * the page. This method will returns true even though 1 px of element\n * part is in visible.\n */\n Popup.prototype.isElementOnViewport = function (relateToElement, scrollElement) {\n var scrollParents = this.getScrollableParent(relateToElement);\n for (var parent_3 = 0; parent_3 < scrollParents.length; parent_3++) {\n if (this.isElementVisible(relateToElement, scrollParents[parent_3])) {\n continue;\n }\n else {\n return false;\n }\n }\n return true;\n };\n Popup.prototype.isElementVisible = function (relateToElement, scrollElement) {\n var rect = relateToElement.getBoundingClientRect();\n if (!rect.height || !rect.width) {\n return false;\n }\n if (scrollElement.getBoundingClientRect) {\n var parent_4 = scrollElement.getBoundingClientRect();\n return !(rect.bottom < parent_4.top) &&\n (!(rect.bottom > parent_4.bottom) &&\n (!(rect.right > parent_4.right) &&\n !(rect.left < parent_4.left)));\n }\n else {\n var win = window;\n var windowView = {\n top: win.scrollY,\n left: win.scrollX,\n right: win.scrollX + win.outerWidth,\n bottom: win.scrollY + win.outerHeight\n };\n var off = calculatePosition(relateToElement);\n var ele = {\n top: off.top,\n left: off.left,\n right: off.left + rect.width,\n bottom: off.top + rect.height\n };\n var elementView = {\n top: windowView.bottom - ele.top,\n left: windowView.right - ele.left,\n bottom: ele.bottom - windowView.top,\n right: ele.right - windowView.left\n };\n return elementView.top > 0\n && elementView.left > 0\n && elementView.right > 0\n && elementView.bottom > 0;\n }\n };\n /**\n * Initialize the event handler\n * @private\n */\n Popup.prototype.preRender = function () {\n //There is no event handler\n };\n Popup.prototype.setEnableRtl = function () {\n this.reposition();\n this.enableRtl ? this.element.classList.add(CLASSNAMES.RTL) : this.element.classList.remove(CLASSNAMES.RTL);\n };\n Popup.prototype.setContent = function () {\n if (!isNullOrUndefined(this.content)) {\n this.element.innerHTML = '';\n if (typeof (this.content) === 'string') {\n this.element.textContent = this.content;\n }\n else {\n this.element.appendChild(this.content);\n }\n }\n };\n Popup.prototype.orientationOnChange = function () {\n var _this = this;\n setTimeout(function () {\n _this.refreshPosition();\n }, 200);\n };\n /**\n * Based on the `relative` element and `offset` values, `Popup` element position will refreshed.\n */\n Popup.prototype.refreshPosition = function (target) {\n if (!isNullOrUndefined(target)) {\n this.checkFixedParent(target);\n }\n this.reposition();\n this.checkCollision();\n };\n Popup.prototype.reposition = function () {\n var pos;\n var relateToElement = this.getRelateToElement();\n if (typeof this.position.X === 'number' && typeof this.position.Y === 'number') {\n pos = { left: this.position.X, top: this.position.Y };\n }\n else if (relateToElement) {\n var display = this.element.style.display;\n this.element.style.display = 'block';\n pos = this.getAnchorPosition(relateToElement, this.element, this.position, this.offsetX, this.offsetY);\n this.element.style.display = display;\n }\n else {\n pos = { left: 0, top: 0 };\n }\n this.element.style.left = pos.left + 'px';\n this.element.style.top = pos.top + 'px';\n };\n Popup.prototype.getAnchorPosition = function (anchorEle, ele, position, offsetX, offsetY) {\n var eleRect = ele.getBoundingClientRect();\n var anchorRect = anchorEle.getBoundingClientRect();\n var anchor = anchorEle;\n var anchorPos = { left: 0, top: 0 };\n if (ele.offsetParent && ele.offsetParent.tagName === 'BODY' && anchorEle.tagName === 'BODY') {\n anchorPos = calculatePosition(anchorEle);\n }\n else {\n anchorPos = calculateRelativeBasedPosition(anchor, ele);\n }\n switch (position.X) {\n default:\n case 'left':\n break;\n case 'center':\n if (this.targetType === 'container') {\n anchorPos.left += (anchorRect.width / 2 - eleRect.width / 2);\n }\n else {\n anchorPos.left += (anchorRect.width / 2);\n }\n break;\n case 'right':\n if (this.targetType === 'container') {\n anchorPos.left += (anchorRect.width - eleRect.width);\n }\n else {\n anchorPos.left += (anchorRect.width);\n }\n break;\n }\n switch (position.Y) {\n default:\n case 'top':\n break;\n case 'center':\n if (this.targetType === 'container') {\n anchorPos.top += (anchorRect.height / 2 - eleRect.height / 2);\n }\n else {\n anchorPos.top += (anchorRect.height / 2);\n }\n break;\n case 'bottom':\n if (this.targetType === 'container') {\n anchorPos.top += (anchorRect.height - eleRect.height);\n }\n else {\n anchorPos.top += (anchorRect.height);\n }\n break;\n }\n anchorPos.left += offsetX;\n anchorPos.top += offsetY;\n return anchorPos;\n };\n Popup.prototype.callFlip = function (param) {\n var relateToElement = this.getRelateToElement();\n flip(this.element, relateToElement, this.offsetX, this.offsetY, this.position.X, this.position.Y, this.viewPortElement, param, this.fixedParent);\n };\n Popup.prototype.callFit = function (param) {\n if (isCollide(this.element, this.viewPortElement).length !== 0) {\n var data = fit(this.element, this.viewPortElement, param);\n this.element.style.left = data.left + 'px';\n this.element.style.top = data.top + 'px';\n }\n };\n Popup.prototype.checkCollision = function () {\n var horz = this.collision.X;\n var vert = this.collision.Y;\n if (horz === 'none' && vert === 'none') {\n return;\n }\n if (horz === 'flip' && vert === 'flip') {\n this.callFlip({ X: true, Y: true });\n }\n else if (horz === 'fit' && vert === 'fit') {\n this.callFit({ X: true, Y: true });\n }\n else {\n if (horz === 'fit') {\n this.callFit({ X: true, Y: false });\n }\n else if (vert === 'fit') {\n this.callFit({ X: false, Y: true });\n }\n if (horz === 'flip') {\n this.callFlip({ X: true, Y: false });\n }\n else if (vert === 'flip') {\n this.callFlip({ Y: true, X: false });\n }\n }\n };\n /**\n * Shows the popup element from screen.\n * @param { AnimationModel | Function } collisionOrAnimationOptions? - To pass animation options or collision function.\n * @param { Function } collision? - To pass the collision function.\n */\n Popup.prototype.show = function (animationOptions) {\n var _this = this;\n if (this.zIndex === 1000) {\n this.zIndex = getZindexPartial(this.element);\n setStyleAttribute(this.element, { 'zIndex': this.zIndex });\n }\n animationOptions = (!isNullOrUndefined(animationOptions) && typeof animationOptions === 'object') ?\n animationOptions : this.showAnimation;\n if (this.collision.X !== 'none' || this.collision.Y !== 'none') {\n removeClass([this.element], CLASSNAMES.CLOSE);\n addClass([this.element], CLASSNAMES.OPEN);\n this.checkCollision();\n removeClass([this.element], CLASSNAMES.OPEN);\n addClass([this.element], CLASSNAMES.CLOSE);\n }\n if (!isNullOrUndefined(animationOptions)) {\n animationOptions.begin = function () {\n if (!_this.isDestroyed) {\n removeClass([_this.element], CLASSNAMES.CLOSE);\n addClass([_this.element], CLASSNAMES.OPEN);\n }\n };\n animationOptions.end = function () {\n if (!_this.isDestroyed) {\n _this.trigger('open');\n }\n };\n new Animation(animationOptions).animate(this.element);\n }\n else {\n removeClass([this.element], CLASSNAMES.CLOSE);\n addClass([this.element], CLASSNAMES.OPEN);\n this.trigger('open');\n }\n };\n /**\n * Hides the popup element from screen.\n * @param { AnimationModel } animationOptions? - To give the animation options.\n */\n Popup.prototype.hide = function (animationOptions) {\n var _this = this;\n animationOptions = (!isNullOrUndefined(animationOptions) && typeof animationOptions === 'object') ?\n animationOptions : this.hideAnimation;\n if (!isNullOrUndefined(animationOptions)) {\n animationOptions.end = function () {\n if (!_this.isDestroyed) {\n removeClass([_this.element], CLASSNAMES.OPEN);\n addClass([_this.element], CLASSNAMES.CLOSE);\n _this.trigger('close');\n }\n };\n new Animation(animationOptions).animate(this.element);\n }\n else {\n removeClass([this.element], CLASSNAMES.OPEN);\n addClass([this.element], CLASSNAMES.CLOSE);\n this.trigger('close');\n }\n };\n /**\n * Gets scrollable parent elements for the given element.\n * @param { HTMLElement } element - Specify the element to get the scrollable parents of it.\n */\n Popup.prototype.getScrollableParent = function (element) {\n this.checkFixedParent(element);\n return getScrollableParent(element, this.fixedParent);\n };\n Popup.prototype.checkFixedParent = function (element) {\n var parent = element.parentElement;\n while (parent && parent.tagName !== 'HTML') {\n var parentStyle = getComputedStyle(parent);\n if (parentStyle.position === 'fixed' && this.element.offsetParent && this.element.offsetParent.tagName === 'BODY') {\n this.element.style.position = 'fixed';\n this.fixedParent = true;\n }\n parent = parent.parentElement;\n if (isNullOrUndefined(this.element.offsetParent) && parentStyle.position === 'fixed'\n && this.element.style.position === 'fixed') {\n this.fixedParent = true;\n }\n }\n };\n __decorate([\n Property('auto')\n ], Popup.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], Popup.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"content\", void 0);\n __decorate([\n Property('container')\n ], Popup.prototype, \"targetType\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"viewPortElement\", void 0);\n __decorate([\n Property({ X: 'none', Y: 'none' })\n ], Popup.prototype, \"collision\", void 0);\n __decorate([\n Property('')\n ], Popup.prototype, \"relateTo\", void 0);\n __decorate([\n Complex({}, PositionData)\n ], Popup.prototype, \"position\", void 0);\n __decorate([\n Property(0)\n ], Popup.prototype, \"offsetX\", void 0);\n __decorate([\n Property(0)\n ], Popup.prototype, \"offsetY\", void 0);\n __decorate([\n Property(1000)\n ], Popup.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], Popup.prototype, \"enableRtl\", void 0);\n __decorate([\n Property('reposition')\n ], Popup.prototype, \"actionOnScroll\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"showAnimation\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"hideAnimation\", void 0);\n __decorate([\n Event()\n ], Popup.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], Popup.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], Popup.prototype, \"targetExitViewport\", void 0);\n Popup = __decorate([\n NotifyPropertyChanges\n ], Popup);\n return Popup;\n}(Component));\nexport { Popup };\n/**\n * Gets scrollable parent elements for the given element.\n * @param { HTMLElement } element - Specify the element to get the scrollable parents of it.\n * @private\n */\nexport function getScrollableParent(element, fixedParent) {\n var eleStyle = getComputedStyle(element);\n var scrollParents = [];\n var overflowRegex = /(auto|scroll)/;\n var parent = element.parentElement;\n while (parent && parent.tagName !== 'HTML') {\n var parentStyle = getComputedStyle(parent);\n if (!(eleStyle.position === 'absolute' && parentStyle.position === 'static')\n && overflowRegex.test(parentStyle.overflow + parentStyle.overflowY + parentStyle.overflowX)) {\n scrollParents.push(parent);\n }\n parent = parent.parentElement;\n }\n if (!fixedParent) {\n scrollParents.push(document);\n }\n return scrollParents;\n}\n/**\n * Gets the maximum z-index of the given element.\n * @param { HTMLElement } element - Specify the element to get the maximum z-index of it.\n * @private\n */\nexport function getZindexPartial(element) {\n // upto body traversal\n var parent = element.parentElement;\n var parentZindex = [];\n while (parent) {\n if (parent.tagName !== 'BODY') {\n var index = document.defaultView.getComputedStyle(parent, null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(parent, null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n parentZindex.push(index);\n }\n parent = parent.parentElement;\n }\n else {\n break;\n }\n }\n //Body direct children element traversal\n var childrenZindex = [];\n for (var i = 0; i < document.body.children.length; i++) {\n if (!element.isEqualNode(document.body.children[i])) {\n var index = document.defaultView.getComputedStyle(document.body.children[i], null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(document.body.children[i], null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n childrenZindex.push(index);\n }\n }\n }\n childrenZindex.push('999');\n var finalValue = parentZindex.concat(childrenZindex);\n return Math.max.apply(Math, finalValue) + 1;\n}\n","import { isNullOrUndefined, classList } from '@syncfusion/ej2-base';\nvar globalTimeOut = {};\nvar spinTemplate = null;\nvar spinCSSClass = null;\nvar DEFT_MAT_WIDTH = 30;\nvar DEFT_FAB_WIDTH = 30;\nvar DEFT_BOOT_WIDTH = 30;\nvar CLS_SHOWSPIN = 'e-spin-show';\nvar CLS_HIDESPIN = 'e-spin-hide';\nvar CLS_MATERIALSPIN = 'e-spin-material';\nvar CLS_FABRICSPIN = 'e-spin-fabric';\nvar CLS_BOOTSPIN = 'e-spin-bootstrap';\nvar CLS_HIGHCONTRASTSPIN = 'e-spin-high-contrast';\nvar CLS_SPINWRAP = 'e-spinner-pane';\nvar CLS_SPININWRAP = 'e-spinner-inner';\nvar CLS_SPINCIRCLE = 'e-path-circle';\nvar CLS_SPINARC = 'e-path-arc';\nvar CLS_SPINLABEL = 'e-spin-label';\nvar CLS_SPINTEMPLATE = 'e-spin-template';\n/**\n * Create a spinner for the specified target element.\n * ```\n * E.g : createSpinner({ target: targetElement, width: '34px', label: 'Loading..' });\n * ```\n * @param args\n * @private\n */\nexport function createSpinner(args) {\n var radius;\n var container = create_spinner_container(args.target);\n if (!isNullOrUndefined(args.cssClass)) {\n container.wrap.classList.add(args.cssClass);\n }\n if (!isNullOrUndefined(args.template) || !isNullOrUndefined(spinTemplate)) {\n var template = !isNullOrUndefined(args.template) ? args.template : spinTemplate;\n container.wrap.classList.add(CLS_SPINTEMPLATE);\n replaceContent(container.wrap, template, spinCSSClass);\n }\n else {\n var theme = !isNullOrUndefined(args.type) ? args.type : getTheme(container.wrap);\n var width = !isNullOrUndefined(args.width) ? args.width : undefined;\n radius = calculateRadius(width, theme);\n setTheme(theme, container.wrap, radius);\n if (!isNullOrUndefined(args.label)) {\n createLabel(container.inner_wrap, args.label);\n }\n }\n container.wrap.classList.add(CLS_HIDESPIN);\n}\nfunction createLabel(container, label) {\n var labelEle = document.createElement('div');\n labelEle.classList.add(CLS_SPINLABEL);\n labelEle.textContent = label;\n container.appendChild(labelEle);\n return labelEle;\n}\nfunction createMaterialSpinner(container, radius) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'Material', radius: radius };\n create_material_element(container, uniqueID);\n mat_calculate_attributes(radius, container);\n}\nfunction startMatAnimate(container, uniqueID, radius) {\n var globalObject = {};\n var timeOutVar = 0;\n globalTimeOut[uniqueID].timeOut = 0;\n globalObject[uniqueID] = globalVariables(uniqueID, radius, 0, 0);\n var spinnerInfo = { uniqueID: uniqueID, container: container, globalInfo: globalObject, timeOutVar: timeOutVar };\n animateMaterial(spinnerInfo);\n}\nfunction createFabricSpinner(container, radius) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'Fabric', radius: radius };\n create_fabric_element(container, uniqueID, CLS_FABRICSPIN);\n fb_calculate_attributes(radius, container, CLS_FABRICSPIN);\n}\nfunction createHighContrastSpinner(container, radius) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'HighContrast', radius: radius };\n create_fabric_element(container, uniqueID, CLS_HIGHCONTRASTSPIN);\n fb_calculate_attributes(radius, container, CLS_HIGHCONTRASTSPIN);\n}\nfunction getTheme(container) {\n var theme = window.getComputedStyle(container, ':after').getPropertyValue('content');\n return theme.replace(/['\"]+/g, '');\n}\nfunction setTheme(theme, container, radius) {\n var innerContainer = container.querySelector('.' + CLS_SPININWRAP);\n var svg = innerContainer.querySelector('svg');\n if (!isNullOrUndefined(svg)) {\n innerContainer.removeChild(svg);\n }\n switch (theme) {\n case 'Material':\n createMaterialSpinner(innerContainer, radius);\n break;\n case 'Fabric':\n createFabricSpinner(innerContainer, radius);\n break;\n case 'Bootstrap':\n createBootstrapSpinner(innerContainer, radius);\n break;\n case 'HighContrast':\n createHighContrastSpinner(innerContainer, radius);\n break;\n }\n}\nfunction createBootstrapSpinner(innerContainer, radius) {\n var uniqueID = random_generator();\n globalTimeOut[uniqueID] = { timeOut: 0, type: 'Bootstrap', radius: radius };\n create_bootstrap_element(innerContainer, uniqueID);\n boot_calculate_attributes(innerContainer, radius);\n}\nfunction create_bootstrap_element(innerContainer, uniqueID) {\n var svgBoot = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n var viewBoxValue = 64;\n var trans = 32;\n var defaultRadius = 2;\n svgBoot.setAttribute('id', uniqueID);\n svgBoot.setAttribute('class', CLS_BOOTSPIN);\n svgBoot.setAttribute('viewBox', '0 0 ' + viewBoxValue + ' ' + viewBoxValue);\n innerContainer.insertBefore(svgBoot, innerContainer.firstChild);\n for (var item = 0; item <= 7; item++) {\n var bootCircle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n bootCircle.setAttribute('class', CLS_SPINCIRCLE + '_' + item);\n bootCircle.setAttribute('r', defaultRadius + '');\n bootCircle.setAttribute('transform', 'translate(' + trans + ',' + trans + ')');\n svgBoot.appendChild(bootCircle);\n }\n}\nfunction boot_calculate_attributes(innerContainer, radius) {\n var svg = innerContainer.querySelector('svg.e-spin-bootstrap');\n svg.style.width = svg.style.height = radius + 'px';\n var x = 0;\n var y = 0;\n var rad = 24;\n var startArc = 90;\n for (var item = 0; item <= 7; item++) {\n var start = defineArcPoints(x, y, rad, startArc);\n var circleEle = svg.querySelector('.' + CLS_SPINCIRCLE + '_' + item);\n circleEle.setAttribute('cx', start.x + '');\n circleEle.setAttribute('cy', start.y + '');\n startArc = startArc >= 360 ? 0 : startArc;\n startArc = startArc + 45;\n }\n}\nfunction generateSeries(begin, stop) {\n var series = [];\n var start = begin;\n var end = stop;\n var increment = false;\n var count = 1;\n formSeries(start);\n function formSeries(i) {\n series.push(i);\n if (i !== end || count === 1) {\n if (i <= start && i > 1 && !increment) {\n i = parseFloat((i - 0.2).toFixed(2));\n }\n else if (i === 1) {\n i = 7;\n i = parseFloat((i + 0.2).toFixed(2));\n increment = true;\n }\n else if (i < 8 && increment) {\n i = parseFloat((i + 0.2).toFixed(2));\n if (i === 8) {\n increment = false;\n }\n }\n else if (i <= 8 && !increment) {\n i = parseFloat((i - 0.2).toFixed(2));\n }\n ++count;\n formSeries(i);\n }\n }\n return series;\n}\nfunction animateBootstrap(innerContainer) {\n var svg = innerContainer.querySelector('svg.e-spin-bootstrap');\n var id = svg.getAttribute('id');\n for (var i = 1; i <= 8; i++) {\n var circleEle = (innerContainer.getElementsByClassName('e-path-circle_' +\n (i === 8 ? 0 : i))[0]);\n rotation(circleEle, i, i, generateSeries(i, i), id);\n }\n function rotation(circle, start, end, series, id) {\n var count = 0;\n boot_animate(start);\n function boot_animate(radius) {\n if (globalTimeOut[id].isAnimate) {\n ++count;\n circle.setAttribute('r', radius + '');\n if (count >= series.length) {\n count = 0;\n }\n globalTimeOut[id].timeOut = setTimeout(boot_animate.bind(null, series[count]), 18);\n }\n }\n }\n}\nfunction replaceContent(container, template, cssClass) {\n if (!isNullOrUndefined(cssClass)) {\n container.classList.add(cssClass);\n }\n var inner = container.querySelector('.e-spinner-inner');\n inner.innerHTML = template;\n}\nfunction calculateRadius(width, theme) {\n var defaultSize = theme === 'Material' ? DEFT_MAT_WIDTH : theme === 'Fabric' ? DEFT_FAB_WIDTH : DEFT_BOOT_WIDTH;\n width = width ? parseFloat(width + '') : defaultSize;\n return theme === 'Bootstrap' ? width : width / 2;\n}\nfunction globalVariables(id, radius, count, previousId) {\n return {\n radius: radius,\n count: count,\n previousId: previousId\n };\n}\nfunction random_generator() {\n var random = '';\n var combine = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n for (var i = 0; i < 5; i++) {\n random += combine.charAt(Math.floor(Math.random() * combine.length));\n }\n return random;\n}\nfunction create_fabric_element(innerContainer, uniqueID, themeClass) {\n var svgFabric = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svgFabric.setAttribute('id', uniqueID);\n svgFabric.setAttribute('class', themeClass);\n var fabricCirclePath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n fabricCirclePath.setAttribute('class', CLS_SPINCIRCLE);\n var fabricCircleArc = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n fabricCircleArc.setAttribute('class', CLS_SPINARC);\n innerContainer.insertBefore(svgFabric, innerContainer.firstChild);\n svgFabric.appendChild(fabricCirclePath);\n svgFabric.appendChild(fabricCircleArc);\n}\nfunction create_material_element(innerContainer, uniqueID) {\n var svgMaterial = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svgMaterial.setAttribute('class', CLS_MATERIALSPIN);\n svgMaterial.setAttribute('id', uniqueID);\n var matCirclePath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n matCirclePath.setAttribute('class', CLS_SPINCIRCLE);\n innerContainer.insertBefore(svgMaterial, innerContainer.firstChild);\n svgMaterial.appendChild(matCirclePath);\n}\nfunction create_spinner_container(target) {\n var spinnerContainer = document.createElement('div');\n spinnerContainer.classList.add(CLS_SPINWRAP);\n var spinnerInnerContainer = document.createElement('div');\n spinnerInnerContainer.classList.add(CLS_SPININWRAP);\n target.appendChild(spinnerContainer);\n spinnerContainer.appendChild(spinnerInnerContainer);\n return { wrap: spinnerContainer, inner_wrap: spinnerInnerContainer };\n}\nfunction animateMaterial(spinnerInfo) {\n var start = 1;\n var end = 149;\n var duration = 1333;\n var max = 75;\n createCircle(start, end, easeAnimation, duration, spinnerInfo.globalInfo[spinnerInfo.uniqueID].count, max, spinnerInfo);\n spinnerInfo.globalInfo[spinnerInfo.uniqueID].count = ++spinnerInfo.globalInfo[spinnerInfo.uniqueID].count % 4;\n}\nfunction createCircle(start, end, easing, duration, count, max, spinnerInfo) {\n var id = ++spinnerInfo.globalInfo[spinnerInfo.uniqueID].previousId;\n var startTime = new Date().getTime();\n var change = end - start;\n var diameter = getSize((spinnerInfo.globalInfo[spinnerInfo.uniqueID].radius * 2) + '');\n var strokeSize = getStrokeSize(diameter);\n var rotate = -90 * (spinnerInfo.globalInfo[spinnerInfo.uniqueID].count || 0);\n mat_animation(spinnerInfo);\n function mat_animation(spinnerInfo) {\n var currentTime = Math.max(0, Math.min(new Date().getTime() - startTime, duration));\n updatePath(easing(currentTime, start, change, duration), spinnerInfo.container);\n if (id === spinnerInfo.globalInfo[spinnerInfo.uniqueID].previousId && currentTime < duration) {\n globalTimeOut[spinnerInfo.uniqueID].timeOut = setTimeout(mat_animation.bind(null, spinnerInfo), 1);\n }\n else {\n animateMaterial(spinnerInfo);\n }\n }\n function updatePath(value, container) {\n if ((!isNullOrUndefined(container.querySelector('svg.e-spin-material')))\n && (!isNullOrUndefined(container.querySelector('svg.e-spin-material').querySelector('path.e-path-circle')))) {\n var svg = container.querySelector('svg.e-spin-material');\n var path = svg.querySelector('path.e-path-circle');\n path.setAttribute('stroke-dashoffset', getDashOffset(diameter, strokeSize, value, max) + '');\n path.setAttribute('transform', 'rotate(' + (rotate) + ' ' + diameter / 2 + ' ' + diameter / 2 + ')');\n }\n }\n}\nfunction mat_calculate_attributes(radius, container) {\n var diameter = radius * 2;\n var svg = container.querySelector('svg.e-spin-material');\n var path = svg.querySelector('path.e-path-circle');\n var strokeSize = getStrokeSize(diameter);\n var transformOrigin = (diameter / 2) + 'px';\n svg.setAttribute('viewBox', '0 0 ' + diameter + ' ' + diameter);\n svg.style.width = svg.style.height = diameter + 'px';\n svg.style.transformOrigin = transformOrigin + ' ' + transformOrigin + ' ' + transformOrigin;\n path.setAttribute('stroke-width', strokeSize + '');\n path.setAttribute('d', drawArc(diameter, strokeSize));\n path.setAttribute('stroke-dasharray', ((diameter - strokeSize) * Math.PI * 0.75) + '');\n path.setAttribute('stroke-dashoffset', getDashOffset(diameter, strokeSize, 1, 75) + '');\n}\nfunction getSize(value) {\n var parsed = parseFloat(value);\n return parsed;\n}\nfunction drawArc(diameter, strokeSize) {\n var radius = diameter / 2;\n var offset = strokeSize / 2;\n return 'M' + radius + ',' + offset\n + 'A' + (radius - offset) + ',' + (radius - offset) + ' 0 1 1 ' + offset + ',' + radius;\n}\nfunction getStrokeSize(diameter) {\n return 10 / 100 * diameter;\n}\nfunction getDashOffset(diameter, strokeSize, value, max) {\n return (diameter - strokeSize) * Math.PI * ((3 * (max) / 100) - (value / 100));\n}\nfunction easeAnimation(current, start, change, duration) {\n var timestamp = (current /= duration) * current;\n var timecount = timestamp * current;\n return start + change * (6 * timecount * timestamp + -15 * timestamp * timestamp + 10 * timecount);\n}\nfunction fb_calculate_attributes(radius, innerConainer, trgClass) {\n var centerX = radius;\n var centerY = radius;\n var diameter = radius * 2;\n var startArc = 315;\n var endArc = 45;\n var svg = innerConainer.querySelector('.' + trgClass);\n var circle = svg.querySelector('.e-path-circle');\n var path = svg.querySelector('.e-path-arc');\n var transformOrigin = (diameter / 2) + 'px';\n circle.setAttribute('d', defineCircle(centerX, centerY, radius));\n path.setAttribute('d', defineArc(centerX, centerY, radius, startArc, endArc));\n svg.setAttribute('viewBox', '0 0 ' + diameter + ' ' + diameter);\n svg.style.transformOrigin = transformOrigin + ' ' + transformOrigin + ' ' + transformOrigin;\n svg.style.width = svg.style.height = diameter + 'px';\n}\nfunction defineArcPoints(centerX, centerY, radius, angle) {\n var radians = (angle - 90) * Math.PI / 180.0;\n return {\n x: centerX + (radius * Math.cos(radians)),\n y: centerY + (radius * Math.sin(radians))\n };\n}\nfunction defineArc(x, y, radius, startArc, endArc) {\n var start = defineArcPoints(x, y, radius, endArc);\n var end = defineArcPoints(x, y, radius, startArc);\n var d = [\n 'M', start.x, start.y,\n 'A', radius, radius, 0, 0, 0, end.x, end.y\n ].join(' ');\n return d;\n}\nfunction defineCircle(x, y, radius) {\n var d = [\n 'M', x, y,\n 'm', -radius, 0,\n 'a', radius, radius, 0, 1, 0, radius * 2, 0,\n 'a', radius, radius, 0, 1, 0, -radius * 2, 0,\n ].join(' ');\n return d;\n}\n/**\n * Function to show the Spinner.\n * @param container - Specify the target of the Spinner.\n * @private\n */\nexport function showSpinner(container) {\n showHideSpinner(container, false);\n}\nfunction showHideSpinner(container, isHide) {\n var spinnerWrap = container.classList.contains(CLS_SPINWRAP) ? container :\n container.querySelector('.' + CLS_SPINWRAP);\n var inner = spinnerWrap.querySelector('.' + CLS_SPININWRAP);\n var spinCheck;\n spinCheck = isHide ? !spinnerWrap.classList.contains(CLS_SPINTEMPLATE) && !spinnerWrap.classList.contains(CLS_HIDESPIN) :\n !spinnerWrap.classList.contains(CLS_SPINTEMPLATE) && !spinnerWrap.classList.contains(CLS_SHOWSPIN);\n if (spinCheck) {\n var svgEle = spinnerWrap.querySelector('svg');\n if (isNullOrUndefined(svgEle)) {\n return;\n }\n var id = svgEle.getAttribute('id');\n globalTimeOut[id].isAnimate = !isHide;\n switch (globalTimeOut[id].type) {\n case 'Material':\n isHide ? clearTimeout(globalTimeOut[id].timeOut) : startMatAnimate(inner, id, globalTimeOut[id].radius);\n break;\n case 'Bootstrap':\n isHide ? clearTimeout(globalTimeOut[id].timeOut) : animateBootstrap(inner);\n break;\n }\n }\n isHide ? classList(spinnerWrap, [CLS_HIDESPIN], [CLS_SHOWSPIN]) : classList(spinnerWrap, [CLS_SHOWSPIN], [CLS_HIDESPIN]);\n}\n/**\n * Function to hide the Spinner.\n * @param container - Specify the target of the Spinner.\n * @private\n */\nexport function hideSpinner(container) {\n showHideSpinner(container, true);\n}\n/**\n * Function to change the Spinners in a page globally from application end.\n * ```\n * E.g : setSpinner({ cssClass: 'custom-css'; type: 'Material' });\n * ```\n * @param args\n * @private\n */\nexport function setSpinner(args) {\n if (args.template !== undefined) {\n spinTemplate = args.template;\n if (args.template !== undefined) {\n spinCSSClass = args.cssClass;\n }\n }\n var container = document.querySelectorAll('.' + CLS_SPINWRAP);\n for (var index = 0; index < container.length; index++) {\n ensureTemplate(args.template, container[index], args.type, args.cssClass);\n }\n}\nfunction ensureTemplate(template, container, theme, cssClass) {\n if (isNullOrUndefined(template) && !container.classList.contains(CLS_SPINTEMPLATE)) {\n replaceTheme(container, theme, cssClass);\n if (container.classList.contains(CLS_SHOWSPIN)) {\n container.classList.remove(CLS_SHOWSPIN);\n showSpinner(container);\n }\n else {\n container.classList.remove(CLS_HIDESPIN);\n hideSpinner(container);\n }\n }\n else {\n spinTemplate = template;\n if (!isNullOrUndefined(cssClass)) {\n spinCSSClass = cssClass;\n }\n }\n}\nfunction replaceTheme(container, theme, cssClass) {\n if (!isNullOrUndefined(cssClass)) {\n container.classList.add(cssClass);\n }\n var svgElement = container.querySelector('svg');\n var radius = theme === 'Bootstrap' ? parseFloat(svgElement.style.height) : parseFloat(svgElement.style.height) / 2;\n var classNames = svgElement.getAttribute('class');\n var svgClassList = classNames.split(/\\s/);\n if (svgClassList.indexOf('e-spin-material') >= 0) {\n var id = svgElement.getAttribute('id');\n clearTimeout(globalTimeOut[id].timeOut);\n }\n setTheme(theme, container, radius);\n}\n","/**\n * MaskedTextBox base module\n */\nimport { EventHandler, isNullOrUndefined, merge, attributes, addClass, removeClass, Browser } from '@syncfusion/ej2-base';\nimport { Input } from '../../input/input';\nvar ERROR = 'e-error';\nvar INPUTGROUP = 'e-input-group';\nvar FLOATINPUT = 'e-float-input';\nvar UTILMASK = 'e-utility-mask';\nvar TOPLABEL = 'e-label-top';\nvar BOTTOMLABEL = 'e-label-bottom';\n/**\n * @hidden\n * Built-in masking elements collection.\n */\nexport var regularExpressions = {\n '0': '[0-9]',\n '9': '[0-9 ]',\n '#': '[0-9 +-]',\n 'L': '[A-Za-z]',\n '?': '[A-Za-z ]',\n '&': '[^\\x7f ]+',\n 'C': '[^\\x7f]+',\n 'A': '[A-Za-z0-9]',\n 'a': '[A-Za-z0-9 ]',\n};\n/**\n * @hidden\n * Generate required masking elements to the MaskedTextBox from user mask input.\n */\nexport function createMask() {\n attributes(this.element, { 'role': 'textbox', 'autocomplete': 'off', 'autocorrect': 'off', 'autocapitalize': 'off',\n 'spellcheck': 'false', 'aria-live': 'assertive', 'aria-valuenow': '' });\n if (this.mask) {\n var splitMask = this.mask.split(']');\n for (var i = 0; i < splitMask.length; i++) {\n if (splitMask[i][splitMask[i].length - 1] === '\\\\') {\n splitMask[i] = splitMask[i] + ']';\n var splitInnerMask = splitMask[i].split('[');\n for (var j = 0; j < splitInnerMask.length; j++) {\n if (splitInnerMask[j][splitInnerMask[j].length - 1] === '\\\\') {\n splitInnerMask[j] = splitInnerMask[j] + '[';\n }\n pushIntoRegExpCollec.call(this, splitInnerMask[j]);\n }\n }\n else {\n var splitInnerMask = splitMask[i].split('[');\n if (splitInnerMask.length > 1) {\n var chkSpace = false;\n for (var j = 0; j < splitInnerMask.length; j++) {\n if (splitInnerMask[j] === '\\\\') {\n this.customRegExpCollec.push('[');\n this.hiddenMask += splitInnerMask[j] + '[';\n }\n else if (splitInnerMask[j] === '') {\n chkSpace = true;\n }\n else if ((splitInnerMask[j] !== '' && chkSpace) || j === splitInnerMask.length - 1) {\n this.customRegExpCollec.push('[' + splitInnerMask[j] + ']');\n this.hiddenMask += this.promptChar;\n chkSpace = false;\n }\n else {\n pushIntoRegExpCollec.call(this, splitInnerMask[j]);\n }\n }\n }\n else {\n pushIntoRegExpCollec.call(this, splitInnerMask[0]);\n }\n }\n }\n this.escapeMaskValue = this.hiddenMask;\n this.promptMask = this.hiddenMask.replace(/[09?LCAa#&]/g, this.promptChar);\n if (!isNullOrUndefined(this.customCharacters)) {\n for (var i = 0; i < this.promptMask.length; i++) {\n if (!isNullOrUndefined(this.customCharacters[this.promptMask[i]])) {\n this.promptMask = this.promptMask.replace(new RegExp(this.promptMask[i], 'g'), this.promptChar);\n }\n }\n }\n var escapeNumber = 0;\n if (this.hiddenMask.match(new RegExp(/\\\\/))) {\n for (var i = 0; i < this.hiddenMask.length; i++) {\n var j = 0;\n if (i >= 2) {\n j = i;\n }\n escapeNumber = this.hiddenMask.length - this.promptMask.length;\n j = j - escapeNumber;\n if ((i > 0 && this.hiddenMask[i - 1] !== '\\\\') && (this.hiddenMask[i] === '>' ||\n this.hiddenMask[i] === '<' || this.hiddenMask[i] === '|')) {\n this.promptMask = this.promptMask.substring(0, j) +\n this.promptMask.substring((i + 1) - escapeNumber, this.promptMask.length);\n this.escapeMaskValue = this.escapeMaskValue.substring(0, j) +\n this.escapeMaskValue.substring((i + 1) - escapeNumber, this.escapeMaskValue.length);\n }\n if (this.hiddenMask[i] === '\\\\') {\n this.promptMask = this.promptMask.substring(0, j) + this.hiddenMask[i + 1] +\n this.promptMask.substring((i + 2) - escapeNumber, this.promptMask.length);\n this.escapeMaskValue = this.escapeMaskValue.substring(0, j) + this.escapeMaskValue[i + 1] +\n this.escapeMaskValue.substring((i + 2) - escapeNumber, this.escapeMaskValue.length);\n }\n }\n }\n else {\n this.promptMask = this.promptMask.replace(/[>|<]/g, '');\n this.escapeMaskValue = this.hiddenMask.replace(/[>|<]/g, '');\n }\n attributes(this.element, { 'aria-invalid': 'false' });\n }\n}\n/**\n * @hidden\n * Apply mask ability with masking elements to the MaskedTextBox.\n */\nexport function applyMask() {\n setElementValue.call(this, this.promptMask);\n setMaskValue.call(this, this.value);\n}\n/**\n * @hidden\n * To wire required events to the MaskedTextBox.\n */\nexport function wireEvents() {\n EventHandler.add(this.element, 'keydown', maskInputKeyDownHandler, this);\n EventHandler.add(this.element, 'keypress', maskInputKeyPressHandler, this);\n EventHandler.add(this.element, 'keyup', maskInputKeyUpHandler, this);\n EventHandler.add(this.element, 'focus', maskInputFocusHandler, this);\n EventHandler.add(this.element, 'blur', maskInputBlurHandler, this);\n EventHandler.add(this.element, 'paste', maskInputPasteHandler, this);\n EventHandler.add(this.element, 'cut', maskInputCutHandler, this);\n EventHandler.add(this.element, 'drop', maskInputDropHandler, this);\n}\n/**\n * @hidden\n * To unwire events attached to the MaskedTextBox.\n */\nexport function unwireEvents() {\n EventHandler.remove(this.element, 'keydown', maskInputKeyDownHandler);\n EventHandler.remove(this.element, 'keypress', maskInputKeyPressHandler);\n EventHandler.remove(this.element, 'keyup', maskInputKeyUpHandler);\n EventHandler.remove(this.element, 'focus', maskInputFocusHandler);\n EventHandler.remove(this.element, 'blur', maskInputBlurHandler);\n EventHandler.remove(this.element, 'paste', maskInputPasteHandler);\n EventHandler.remove(this.element, 'cut', maskInputCutHandler);\n}\n/**\n * @hidden\n * To get masked value from the MaskedTextBox.\n */\nexport function unstrippedValue(element) {\n return element.value;\n}\n/**\n * @hidden\n * To extract raw value from the MaskedTextBox.\n */\nexport function strippedValue(element) {\n var value = '';\n var k = 0;\n var checkMask = false;\n if (!isNullOrUndefined(element) && !isNullOrUndefined(this) && element.value !== this.promptMask) {\n for (var i = 0; i < this.customRegExpCollec.length; i++) {\n if (checkMask) {\n checkMask = false;\n }\n if (this.customRegExpCollec[k] === '>' || this.customRegExpCollec[k] === '<' ||\n this.customRegExpCollec[k] === '|' || this.customRegExpCollec[k] === '\\\\') {\n --i;\n checkMask = true;\n }\n if (!checkMask) {\n if ((element.value[i] !== this.promptChar) && (!isNullOrUndefined(this.customRegExpCollec[k]) &&\n ((!isNullOrUndefined(this.regExpCollec[this.customRegExpCollec[k]])) ||\n (this.customRegExpCollec[k].length > 2 && this.customRegExpCollec[k][0] === '[' &&\n this.customRegExpCollec[k][this.customRegExpCollec[k].length - 1] === ']') ||\n (!isNullOrUndefined(this.customCharacters) &&\n (!isNullOrUndefined(this.customCharacters[this.customRegExpCollec[k]]))))) && (element.value !== '')) {\n value += element.value[i];\n }\n }\n ++k;\n }\n }\n return value;\n}\nfunction pushIntoRegExpCollec(value) {\n for (var k = 0; k < value.length; k++) {\n this.hiddenMask += value[k];\n if (value[k] !== '\\\\') {\n this.customRegExpCollec.push(value[k]);\n }\n }\n}\nexport function maskInputFocusHandler(event) {\n var _this = this;\n if (this.promptMask.length > 0) {\n this.focusEventArgs = { selectionStart: 0, selectionEnd: this.promptMask.length };\n }\n else {\n this.focusEventArgs = { selectionStart: 0, selectionEnd: this.element.value.length };\n }\n var eventArgs = {};\n merge(eventArgs, this.focusEventArgs);\n this.trigger('focus', eventArgs);\n this.focusEventArgs = eventArgs;\n if (this.mask) {\n this.isFocus = true;\n if (this.placeholder && this.element.value === '') {\n setElementValue.call(this, this.promptMask);\n this.element.setSelectionRange(this.focusEventArgs.selectionStart, this.focusEventArgs.selectionEnd);\n setTimeout(function () {\n _this.element.setSelectionRange(_this.focusEventArgs.selectionStart, _this.focusEventArgs.selectionEnd);\n }, 1);\n }\n else {\n this.element.setSelectionRange(this.focusEventArgs.selectionStart, this.focusEventArgs.selectionEnd);\n }\n }\n}\nexport function maskInputBlurHandler(event) {\n if (this.mask) {\n this.isFocus = false;\n if (this.placeholder && this.element.value === this.promptMask && this.floatLabelType !== 'Always') {\n setElementValue.call(this, '');\n var labelElement = this.element.parentNode.querySelector('.e-float-text');\n if (this.floatLabelType === 'Auto' && !isNullOrUndefined(labelElement) && labelElement.classList.contains(TOPLABEL)) {\n removeClass([labelElement], TOPLABEL);\n }\n }\n }\n}\nfunction maskInputPasteHandler(event) {\n var _this = this;\n if (this.mask) {\n var sIndex_1 = this.element.selectionStart;\n var eIndex_1 = this.element.selectionEnd;\n var oldValue_1 = this.element.value;\n setElementValue.call(this, '');\n setTimeout(function () {\n var value = _this.element.value;\n if (_this.redoCollec.length > 0 && _this.redoCollec[0].value === _this.element.value) {\n value = strippedValue.call(_this, _this.element);\n }\n setElementValue.call(_this, oldValue_1);\n _this.element.selectionStart = sIndex_1;\n _this.element.selectionEnd = eIndex_1;\n var i = 0;\n _this.maskKeyPress = true;\n do {\n validateValue.call(_this, value[i], false, null);\n ++i;\n } while (i < value.length);\n _this.maskKeyPress = false;\n }, 1);\n }\n}\nfunction maskInputCutHandler(event) {\n var _this = this;\n if (this.mask) {\n var sIndex_2 = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n this.undoCollec.push({ value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd });\n var value_1 = this.element.value.substring(0, sIndex_2) + this.promptMask.substring(sIndex_2, eIndex) +\n this.element.value.substring(eIndex);\n setTimeout(function () {\n setElementValue.call(_this, value_1);\n _this.element.selectionStart = _this.element.selectionEnd = sIndex_2;\n }, 0);\n }\n}\nexport function maskInputDropHandler(event) {\n event.preventDefault();\n}\nfunction maskInputKeyDownHandler(event) {\n var _this = this;\n if (this.mask) {\n if (event.keyCode !== 229) {\n if (event.ctrlKey && (event.keyCode === 89 || event.keyCode === 90)) {\n event.preventDefault();\n }\n removeMaskInputValues.call(this, event);\n }\n else {\n setTimeout(function () {\n removeMaskInputValues.call(_this, event);\n }, 0);\n }\n var startValue = this.element.value;\n if (event.ctrlKey && (event.keyCode === 89 || event.keyCode === 90)) {\n var collec = void 0;\n if (event.keyCode === 90 && this.undoCollec.length > 0 && startValue !== this.undoCollec[this.undoCollec.length - 1].value) {\n collec = this.undoCollec[this.undoCollec.length - 1];\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n setElementValue.call(this, collec.value);\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n this.undoCollec.splice(this.undoCollec.length - 1, 1);\n }\n else if (event.keyCode === 89 && this.redoCollec.length > 0 && startValue !== this.redoCollec[0].value) {\n collec = this.redoCollec[0];\n this.undoCollec.push({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n setElementValue.call(this, collec.value);\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n this.redoCollec.splice(0, 1);\n }\n }\n }\n}\nexport function mobileRemoveFunction() {\n var collec;\n var sIndex = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n if (this.redoCollec.length > 0) {\n collec = this.redoCollec[0];\n setElementValue.call(this, collec.value);\n if ((collec.startIndex - sIndex) === 1) {\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n }\n else {\n this.element.selectionStart = sIndex + 1;\n this.element.selectionEnd = eIndex + 1;\n }\n }\n else {\n setElementValue.call(this, this.promptMask);\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n }\n}\nfunction removeMaskInputValues(event) {\n var isRemove = false;\n var oldEventVal;\n var isDeleted = false;\n if (this.element.value.length < this.promptMask.length) {\n isRemove = true;\n mobileRemoveFunction.call(this);\n oldEventVal = this.element.value;\n }\n var initStartIndex = this.element.selectionStart;\n var initEndIndex = this.element.selectionEnd;\n var startIndex = this.element.selectionStart;\n var endIndex = this.element.selectionEnd;\n var maskValue = this.hiddenMask.replace(/[>|\\\\<]/g, '');\n var curMask = maskValue[startIndex - 1];\n var parentElement = this.element.parentNode;\n if (isRemove || event.keyCode === 8 || event.keyCode === 46) {\n this.undoCollec.push({ value: this.element.value, startIndex: this.element.selectionStart, endIndex: endIndex });\n var multipleDel = false;\n if (startIndex > 0 || ((event.keyCode === 8 || event.keyCode === 46) && startIndex < this.element.value.length\n && ((this.element.selectionEnd - startIndex) !== this.element.value.length))) {\n var index = startIndex;\n if (startIndex !== endIndex) {\n startIndex = endIndex;\n if (event.keyCode === 46) {\n multipleDel = true;\n }\n }\n else if (event.keyCode === 46) {\n ++index;\n }\n else {\n --index;\n }\n for (var k = startIndex; (event.keyCode === 8 || isRemove || multipleDel) ? k > index : k < index; (event.keyCode === 8 || isRemove || multipleDel) ? k-- : k++) {\n for (var i = startIndex; (event.keyCode === 8 || isRemove || multipleDel) ? i > 0 : i < this.element.value.length; (event.keyCode === 8 || isRemove || multipleDel) ? i-- : i++) {\n var sIndex = void 0;\n if (((event.keyCode === 8 || multipleDel) && ((initStartIndex !== initEndIndex && initStartIndex !== startIndex) ||\n (initStartIndex === initEndIndex))) || isRemove) {\n curMask = maskValue[i - 1];\n sIndex = startIndex - 1;\n }\n else {\n curMask = maskValue[i];\n sIndex = startIndex;\n ++startIndex;\n }\n var oldValue = this.element.value[sIndex];\n if ((isNullOrUndefined(this.regExpCollec[curMask]) && (!isNullOrUndefined(this.customCharacters)\n && isNullOrUndefined(this.customCharacters[curMask]))\n && ((this.hiddenMask[sIndex] !== this.promptChar && this.customRegExpCollec[sIndex][0] !== '['\n && this.customRegExpCollec[sIndex][this.customRegExpCollec[sIndex].length - 1] !== ']')))\n || (this.promptMask[sIndex] !== this.promptChar && isNullOrUndefined(this.customCharacters))) {\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n event.preventDefault();\n if (event.keyCode === 46 && !multipleDel) {\n ++this.element.selectionStart;\n }\n }\n else {\n var value = this.element.value;\n var prompt_1 = this.promptChar;\n var elementValue = value.substring(0, sIndex) + prompt_1 + value.substring(startIndex, value.length);\n setElementValue.call(this, elementValue);\n event.preventDefault();\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n isDeleted = true;\n }\n startIndex = this.element.selectionStart;\n if ((!isDeleted && event.keyCode === 8) || multipleDel || (!isDeleted && !(event.keyCode === 46))) {\n sIndex = startIndex - 1;\n }\n else {\n sIndex = startIndex;\n isDeleted = false;\n }\n oldValue = this.element.value[sIndex];\n if (((initStartIndex !== initEndIndex) && (this.element.selectionStart === initStartIndex))\n || (this.promptMask[sIndex] === this.promptChar) || ((oldValue !== this.promptMask[sIndex]) &&\n (this.promptMask[sIndex] !== this.promptChar) && !isNullOrUndefined(this.customCharacters))) {\n break;\n }\n }\n }\n }\n if (this.element.selectionStart === 0 && (this.element.selectionEnd === this.element.value.length)) {\n setElementValue.call(this, this.promptMask);\n event.preventDefault();\n this.element.selectionStart = this.element.selectionEnd = startIndex;\n }\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n triggerMaskChangeEvent.call(this, event, oldEventVal);\n }\n}\nfunction maskInputKeyPressHandler(event) {\n if (this.mask) {\n var oldValue = this.element.value;\n if ((!event.ctrlKey) || (event.ctrlKey && event.code !== 'KeyA' && event.code !== 'KeyY'\n && event.code !== 'KeyZ' && event.code !== 'KeyX' && event.code !== 'KeyC' && event.code !== 'KeyV')) {\n this.maskKeyPress = true;\n var key = event.key;\n if (key === 'Spacebar') {\n key = String.fromCharCode(event.keyCode);\n }\n if (!key) {\n this.isIosInvalid = true;\n validateValue.call(this, String.fromCharCode(event.keyCode), event.ctrlKey, event);\n event.preventDefault();\n this.isIosInvalid = false;\n }\n else if (key && key.length === 1) {\n validateValue.call(this, key, event.ctrlKey, event);\n event.preventDefault();\n }\n }\n triggerMaskChangeEvent.call(this, event, oldValue);\n }\n}\nfunction triggerMaskChangeEvent(event, oldValue) {\n if (!isNullOrUndefined(this.changeEventArgs)) {\n var eventArgs = {};\n this.changeEventArgs = { value: this.element.value, maskedValue: this.element.value, isInteraction: false };\n if (this.mask) {\n this.changeEventArgs.value = strippedValue.call(this, this.element);\n }\n if (!isNullOrUndefined(event)) {\n this.changeEventArgs.isInteraction = true;\n this.changeEventArgs.event = event;\n }\n merge(eventArgs, this.changeEventArgs);\n this.trigger('change', eventArgs);\n }\n attributes(this.element, { 'aria-valuenow': this.element.value });\n}\nfunction maskInputKeyUpHandler(event) {\n if (this.mask) {\n var collec = void 0;\n if (!this.maskKeyPress && event.keyCode === 229) {\n var oldEventVal = void 0;\n if (this.element.value.length === 1) {\n this.element.value = this.element.value + this.promptMask;\n this.element.setSelectionRange(1, 1);\n }\n if (this.element.value.length > this.promptMask.length) {\n var startIndex = this.element.selectionStart;\n var addedValues = this.element.value.length - this.promptMask.length;\n var val_1 = this.element.value.substring(startIndex - addedValues, startIndex);\n if (this.undoCollec.length > 0) {\n collec = this.undoCollec[this.undoCollec.length - 1];\n var startIndex_1 = this.element.selectionStart;\n oldEventVal = collec.value;\n var oldVal = collec.value.substring(startIndex_1 - addedValues, startIndex_1);\n collec = this.redoCollec[0];\n val_1 = val_1.trim();\n var isSpace = Browser.isAndroid && val_1 === '';\n if (!isSpace && oldVal !== val_1 && collec.value.substring(startIndex_1 - addedValues, startIndex_1) !== val_1) {\n validateValue.call(this, val_1, event.ctrlKey, event);\n }\n else if (isSpace) {\n preventUnsupportedValues.call(this, event, startIndex_1 - 1, this.element.selectionEnd - 1, val_1, event.ctrlKey, false);\n }\n }\n else {\n oldEventVal = this.promptMask;\n validateValue.call(this, val_1, event.ctrlKey, event);\n }\n this.maskKeyPress = false;\n triggerMaskChangeEvent.call(this, event, oldEventVal);\n }\n }\n else {\n removeMaskError.call(this);\n }\n var val = strippedValue.call(this, this.element);\n if (!((this.element.selectionStart === 0) && (this.promptMask === this.element.value) && val === '')\n || (val === '' && this.value !== val)) {\n this.prevValue = val;\n this.value = val;\n }\n }\n else {\n triggerMaskChangeEvent.call(this, event);\n this.value = this.element.value;\n }\n}\nfunction mobileSwipeCheck(key) {\n if (key.length > 1 && ((this.promptMask.length + key.length) < this.element.value.length)) {\n var elementValue = this.redoCollec[0].value.substring(0, this.redoCollec[0].startIndex) + key +\n this.redoCollec[0].value.substring(this.redoCollec[0].startIndex, this.redoCollec[0].value.length);\n setElementValue.call(this, elementValue);\n this.element.selectionStart = this.element.selectionEnd = this.redoCollec[0].startIndex + key.length;\n }\n this.element.selectionStart = this.element.selectionStart - key.length;\n this.element.selectionEnd = this.element.selectionEnd - key.length;\n}\nfunction validateValue(key, isCtrlKey, event) {\n if (!this.maskKeyPress) {\n mobileSwipeCheck.call(this, key);\n }\n var startIndex = this.element.selectionStart;\n var initStartIndex = startIndex;\n var endIndex = this.element.selectionEnd;\n var curMask;\n var allowText = false;\n var value = this.element.value;\n var eventOldVal;\n var prevSupport = false;\n var isEqualVal = false;\n for (var k = 0; k < key.length; k++) {\n var keyValue = key[k];\n startIndex = this.element.selectionStart;\n endIndex = this.element.selectionEnd;\n if (!this.maskKeyPress && initStartIndex === startIndex) {\n startIndex = startIndex + k;\n }\n if ((!this.maskKeyPress || startIndex < this.promptMask.length)) {\n for (var i = startIndex; i < this.promptMask.length; i++) {\n var maskValue = this.escapeMaskValue;\n curMask = maskValue[startIndex];\n if (this.hiddenMask[startIndex] === '\\\\' && this.hiddenMask[startIndex + 1] === key) {\n isEqualVal = true;\n }\n if ((isNullOrUndefined(this.regExpCollec[curMask]) && (isNullOrUndefined(this.customCharacters)\n || (!isNullOrUndefined(this.customCharacters) && isNullOrUndefined(this.customCharacters[curMask])))\n && ((this.hiddenMask[startIndex] !== this.promptChar && this.customRegExpCollec[startIndex][0] !== '['\n && this.customRegExpCollec[startIndex][this.customRegExpCollec[startIndex].length - 1] !== ']')))\n || ((this.promptMask[startIndex] !== this.promptChar) && isNullOrUndefined(this.customCharacters))\n || (this.promptChar === curMask && this.escapeMaskValue === this.mask)) {\n this.element.selectionStart = this.element.selectionEnd = startIndex + 1;\n startIndex = this.element.selectionStart;\n curMask = this.hiddenMask[startIndex];\n }\n }\n if (!isNullOrUndefined(this.customCharacters) && !isNullOrUndefined(this.customCharacters[curMask])) {\n var customValStr = this.customCharacters[curMask];\n var customValArr = customValStr.split(',');\n for (var i = 0; i < customValArr.length; i++) {\n if (keyValue.match(new RegExp('[' + customValArr[i] + ']'))) {\n allowText = true;\n break;\n }\n }\n }\n else if (!isNullOrUndefined(this.regExpCollec[curMask]) && keyValue.match(new RegExp(this.regExpCollec[curMask]))\n && this.promptMask[startIndex] === this.promptChar) {\n allowText = true;\n }\n else if (this.promptMask[startIndex] === this.promptChar && this.customRegExpCollec[startIndex][0] === '['\n && this.customRegExpCollec[startIndex][this.customRegExpCollec[startIndex].length - 1] === ']'\n && keyValue.match(new RegExp(this.customRegExpCollec[startIndex]))) {\n allowText = true;\n }\n if ((!this.maskKeyPress || startIndex < this.hiddenMask.length) && allowText) {\n if (k === 0) {\n if (this.maskKeyPress) {\n this.undoCollec.push({ value: value, startIndex: startIndex, endIndex: startIndex });\n }\n else {\n var sIndex = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n if (this.redoCollec.length > 0) {\n eventOldVal = this.redoCollec[0].value;\n setElementValue.call(this, eventOldVal);\n this.undoCollec.push(this.redoCollec[0]);\n }\n else {\n this.undoCollec.push({ value: this.promptMask, startIndex: startIndex, endIndex: startIndex });\n eventOldVal = this.promptMask;\n setElementValue.call(this, eventOldVal);\n }\n this.element.selectionStart = sIndex;\n this.element.selectionEnd = eIndex;\n }\n }\n startIndex = this.element.selectionStart;\n applySupportedValues.call(this, event, startIndex, keyValue, eventOldVal, isEqualVal);\n prevSupport = true;\n if (k === key.length - 1) {\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n }\n allowText = false;\n }\n else {\n startIndex = this.element.selectionStart;\n preventUnsupportedValues.call(this, event, startIndex, initStartIndex, key, isCtrlKey, prevSupport);\n }\n if (k === key.length - 1 && !allowText) {\n if (!Browser.isAndroid || (Browser.isAndroid && startIndex < this.promptMask.length)) {\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n }\n }\n }\n else {\n if (key.length === 1 && !isCtrlKey && !isNullOrUndefined(event)) {\n addMaskErrorClass.call(this);\n }\n }\n }\n}\nfunction applySupportedValues(event, startIndex, keyValue, eventOldVal, isEqualVal) {\n if (this.hiddenMask.length > this.promptMask.length) {\n keyValue = changeToLowerUpperCase.call(this, keyValue, this.element.value);\n }\n if (!isEqualVal) {\n var value = this.element.value;\n var elementValue = value.substring(0, startIndex) + keyValue + value.substring(startIndex + 1, value.length);\n setElementValue.call(this, elementValue);\n this.element.selectionStart = this.element.selectionEnd = startIndex + 1;\n }\n triggerMaskChangeEvent.call(this, event, eventOldVal);\n}\nfunction preventUnsupportedValues(event, sIdx, idx, key, ctrl, chkSupport) {\n if (!this.maskKeyPress) {\n var eventOldVal = void 0;\n var value = this.element.value;\n if (sIdx >= this.promptMask.length) {\n setElementValue.call(this, value.substring(0, sIdx));\n }\n else {\n if (idx === sIdx) {\n setElementValue.call(this, value.substring(0, sIdx) + value.substring(sIdx + 1, value.length));\n }\n else {\n if (this.promptMask.length === this.element.value.length) {\n setElementValue.call(this, value.substring(0, sIdx) + value.substring(sIdx, value.length));\n }\n else {\n setElementValue.call(this, value.substring(0, idx) + value.substring(idx + 1, value.length));\n }\n }\n this.element.selectionStart = this.element.selectionEnd = (chkSupport ||\n this.element.value[idx] !== this.promptChar) ? sIdx : idx;\n }\n eventOldVal = this.element.value;\n triggerMaskChangeEvent.call(this, event, eventOldVal);\n addMaskErrorClass.call(this);\n }\n if (key.length === 1 && !ctrl && !isNullOrUndefined(event)) {\n addMaskErrorClass.call(this);\n }\n}\nfunction addMaskErrorClass() {\n var _this = this;\n var parentElement = this.element.parentNode;\n var timer = 200;\n if (parentElement.classList.contains(INPUTGROUP) || parentElement.classList.contains(FLOATINPUT)) {\n addClass([parentElement], ERROR);\n }\n else {\n addClass([this.element], ERROR);\n }\n if (this.isIosInvalid === true) {\n timer = 400;\n }\n attributes(this.element, { 'aria-invalid': 'true' });\n setTimeout(function () {\n if (!_this.maskKeyPress) {\n removeMaskError.call(_this);\n }\n }, timer);\n}\nfunction removeMaskError() {\n var parentElement = this.element.parentNode;\n removeClass([parentElement], ERROR);\n removeClass([this.element], ERROR);\n attributes(this.element, { 'aria-invalid': 'false' });\n}\n/**\n * @hidden\n * Validates user input using masking elements '<' , '>' and '|'.\n */\nfunction changeToLowerUpperCase(key, value) {\n var promptMask;\n var i;\n var j = 0;\n var curVal = value;\n var caseCount = 0;\n for (i = 0; i < this.hiddenMask.length; i++) {\n if (this.hiddenMask[i] === '\\\\') {\n promptMask = curVal.substring(0, i) + '\\\\' + curVal.substring(i, curVal.length);\n }\n if (this.hiddenMask[i] === '>' || this.hiddenMask[i] === '<' || this.hiddenMask[i] === '|') {\n if (this.hiddenMask[i] !== curVal[i]) {\n promptMask = curVal.substring(0, i) + this.hiddenMask[i] + curVal.substring(i, curVal.length);\n }\n ++caseCount;\n }\n if (promptMask) {\n if (((promptMask[i] === this.promptChar) && (i > this.element.selectionStart)) ||\n (this.element.value.indexOf(this.promptChar) < 0 && (this.element.selectionStart + caseCount) === i)) {\n caseCount = 0;\n break;\n }\n curVal = promptMask;\n }\n }\n while (i >= 0 && promptMask) {\n if (i === 0 || promptMask[i - 1] !== '\\\\') {\n var val = this.element.value;\n if (promptMask[i] === '>') {\n key = key.toUpperCase();\n break;\n }\n else if (promptMask[i] === '<') {\n key = key.toLowerCase();\n break;\n }\n else if (promptMask[i] === '|') {\n break;\n }\n }\n --i;\n }\n return key;\n}\n/**\n * @hidden\n * To set updated values in the MaskedTextBox.\n */\nexport function setMaskValue(val) {\n if (this.mask && val !== undefined && (val === '' || this.prevValue !== val)) {\n this.maskKeyPress = true;\n setElementValue.call(this, this.promptMask);\n if (val !== '') {\n this.element.selectionStart = 0;\n this.element.selectionEnd = 0;\n }\n if (val !== null) {\n for (var i = 0; i < val.length; i++) {\n validateValue.call(this, val[i], false, null);\n }\n }\n this.value = strippedValue.call(this, this.element);\n this.maskKeyPress = false;\n var labelElement = this.element.parentNode.querySelector('.e-float-text');\n if (this.element.value === this.promptMask && this.floatLabelType === 'Auto' &&\n !isNullOrUndefined(labelElement) && labelElement.classList.contains(TOPLABEL) && !this.isFocus) {\n removeClass([labelElement], TOPLABEL);\n addClass([labelElement], BOTTOMLABEL);\n setElementValue.call(this, '');\n }\n }\n}\n/**\n * @hidden\n * To set updated values in the input element.\n */\nexport function setElementValue(val, element) {\n if (!this.isFocus && this.floatLabelType === 'Auto' && isNullOrUndefined(this.value)) {\n val = '';\n }\n Input.setValue(val, (element ? element : this.element), this.floatLabelType);\n}\n/**\n * @hidden\n * Provide mask support to input textbox through utility method.\n */\nexport function maskInput(args) {\n var inputEle = getMaskInput(args);\n applyMask.call(inputEle);\n var val = strippedValue.call(this, this.element);\n this.prevValue = val;\n this.value = val;\n if (args.mask) {\n unwireEvents.call(inputEle);\n wireEvents.call(inputEle);\n }\n}\nfunction getMaskInput(args) {\n addClass([args.element], UTILMASK);\n var inputEle = {\n element: args.element,\n mask: args.mask,\n promptMask: '',\n hiddenMask: '',\n escapeMaskValue: '',\n promptChar: args.promptChar ? (args.promptChar.length > 1) ? args.promptChar = args.promptChar[0]\n : args.promptChar : '_',\n value: args.value ? args.value : null,\n regExpCollec: regularExpressions,\n customRegExpCollec: [],\n customCharacters: args.customCharacters,\n undoCollec: [],\n redoCollec: [],\n maskKeyPress: false,\n prevValue: ''\n };\n createMask.call(inputEle);\n return inputEle;\n}\n/**\n * @hidden\n * Gets raw value of the textbox which has been masked through utility method.\n */\nexport function getVal(args) {\n return strippedValue.call(getUtilMaskEle(args), args.element);\n}\n/**\n * @hidden\n * Gets masked value of the textbox which has been masked through utility method.\n */\nexport function getMaskedVal(args) {\n return unstrippedValue.call(getUtilMaskEle(args), args.element);\n}\nfunction getUtilMaskEle(args) {\n var value = '';\n var inputEle;\n if (!isNullOrUndefined(args) && args.element.classList.contains(UTILMASK)) {\n inputEle = getMaskInput(args);\n }\n return inputEle;\n}\n/**\n * @hidden\n * Arguments to perform undo and redo functionalities.\n */\nvar MaskUndo = /** @class */ (function () {\n function MaskUndo() {\n }\n return MaskUndo;\n}());\nexport { MaskUndo };\nvar maskUndo = new MaskUndo();\n","import { extend, merge, isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { createElement, attributes, prepend, isVisible, append, addClass } from '@syncfusion/ej2-base';\nimport { compile } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nexport var cssClass = {\n li: 'e-list-item',\n ul: 'e-list-parent e-ul',\n group: 'e-list-group-item',\n icon: 'e-list-icon',\n text: 'e-list-text',\n check: 'e-list-check',\n checked: 'e-checked',\n selected: 'e-selected',\n expanded: 'e-expanded',\n textContent: 'e-text-content',\n hasChild: 'e-has-child',\n level: 'e-level',\n url: 'e-list-url',\n collapsible: 'e-icon-collapsible',\n disabled: 'e-disabled',\n image: 'e-list-img',\n iconWrapper: 'e-icon-wrapper'\n};\n/**\n * Base List Generator\n */\nexport var ListBase;\n(function (ListBase) {\n /**\n * Default mapped fields.\n */\n ListBase.defaultMappedFields = {\n id: 'id',\n text: 'text',\n url: 'url',\n value: 'value',\n isChecked: 'isChecked',\n enabled: 'enabled',\n expanded: 'expanded',\n selected: 'selected',\n iconCss: 'iconCss',\n child: 'child',\n isVisible: 'isVisible',\n hasChildren: 'hasChildren',\n tooltip: 'tooltip',\n htmlAttributes: 'htmlAttributes',\n urlAttributes: 'urlAttributes',\n imageAttributes: 'imageAttributes',\n imageUrl: 'imageUrl',\n groupBy: null\n };\n var defaultAriaAttributes = {\n level: 1,\n listRole: 'presentation',\n itemRole: 'presentation',\n groupItemRole: 'group',\n itemText: 'list-item',\n wrapperRole: 'presentation'\n };\n var defaultListBaseOptions = {\n showCheckBox: false,\n showIcon: false,\n expandCollapse: false,\n fields: ListBase.defaultMappedFields,\n ariaAttributes: defaultAriaAttributes,\n listClass: '',\n itemClass: '',\n processSubChild: false,\n sortOrder: 'None',\n template: null,\n groupTemplate: null,\n expandIconClass: 'e-icon-collapsible',\n moduleName: 'list',\n expandIconPosition: 'Right'\n };\n /**\n * Function helps to created and return the UL Li element based on your data.\n * @param {{[key:string]:Object}[]|string[]} dataSource - Specifies an array of JSON or String data.\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n */\n function createList(dataSource, options, isSingleLevel) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var type = typeofData(dataSource).typeof;\n if (type === 'string' || type === 'number') {\n return createListFromArray(dataSource, isSingleLevel, options);\n }\n else {\n return createListFromJson(dataSource, options, ariaAttributes.level, isSingleLevel);\n }\n }\n ListBase.createList = createList;\n /**\n * Function helps to created an element list based on string array input .\n * @param {string[]} dataSource - Specifies an array of string data\n */\n function createListFromArray(dataSource, isSingleLevel, options) {\n var subChild = createListItemFromArray(dataSource, isSingleLevel, options);\n return generateUL(subChild, null, options);\n }\n ListBase.createListFromArray = createListFromArray;\n /**\n * Function helps to created an element list based on string array input .\n * @param {string[]} dataSource - Specifies an array of string data\n */\n function createListItemFromArray(dataSource, isSingleLevel, options) {\n var subChild = [];\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var id = genUID(); // generate id for drop-down-list option.\n for (var i = 0; i < dataSource.length; i++) {\n if (isNullOrUndefined(dataSource[i])) {\n continue;\n }\n var li = void 0;\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: dataSource[i],\n options: curOpt\n };\n curOpt.itemCreating(curData);\n }\n if (isSingleLevel) {\n li = generateSingleLevelLI(dataSource[i], null, null, [], null, id, i, options);\n }\n else {\n li = generateLI(dataSource[i], null, null, options);\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: dataSource[i],\n item: li,\n options: curOpt\n };\n curOpt.itemCreated(curData);\n }\n subChild.push(li);\n }\n return subChild;\n }\n ListBase.createListItemFromArray = createListItemFromArray;\n /**\n * Function helps to created an element list based on array of JSON input .\n * @param {{[key:string]:Object}[]} dataSource - Specifies an array of JSON data.\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n */\n // tslint:disable-next-line:max-func-body-length\n function createListItemFromJson(dataSource, options, level, isSingleLevel) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var fields = extend({}, ListBase.defaultMappedFields, curOpt.fields);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var id;\n if (level) {\n ariaAttributes.level = level;\n }\n var child = [];\n var li;\n if (Object.keys(dataSource).length && !typeofData(dataSource).item.hasOwnProperty(fields.id)) {\n id = genUID(); // generate id for drop-down-list option.\n }\n for (var i = 0; i < dataSource.length; i++) {\n var fieldData = getFieldValues(dataSource[i], fields);\n if (isNullOrUndefined(dataSource[i])) {\n continue;\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: fieldData[fields.text],\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreating(curData);\n }\n var curItem = dataSource[i];\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n fieldData = getFieldValues(dataSource[i], fields);\n }\n if (Object.keys(dataSource).length && fieldData.hasOwnProperty(fields.id)\n && !isNullOrUndefined(fieldData[fields.id])) {\n id = fieldData.id;\n }\n var innerEle = [];\n if (curOpt.showCheckBox) {\n innerEle.push(createElement('input', { className: cssClass.check, attrs: { type: 'checkbox' } }));\n }\n if (isSingleLevel === true) {\n if (curOpt.showIcon && fieldData.hasOwnProperty(fields.iconCss)) {\n if (!isNullOrUndefined(fieldData[fields.iconCss])) {\n innerEle.push(createElement('span', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] }));\n }\n }\n li = generateSingleLevelLI(curItem, fields, curOpt.itemClass, innerEle, (curItem.hasOwnProperty('isHeader') &&\n curItem.isHeader) ? true : false, id, i, options);\n }\n else {\n li = generateLI(curItem, fields, curOpt.itemClass, options);\n li.classList.add(cssClass.level + '-' + ariaAttributes.level);\n li.setAttribute('aria-level', ariaAttributes.level.toString());\n if (fieldData.hasOwnProperty(fields.tooltip)) {\n li.setAttribute('title', fieldData[fields.tooltip]);\n }\n if (fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n setAttribute(li, fieldData[fields.htmlAttributes]);\n }\n if (fieldData.hasOwnProperty(fields.enabled) && fieldData[fields.enabled] === false) {\n li.classList.add(cssClass.disabled);\n }\n if (fieldData.hasOwnProperty(fields.isVisible) && fieldData[fields.isVisible] === false) {\n li.style.display = 'none';\n }\n if (fieldData.hasOwnProperty(fields.imageUrl) && !isNullOrUndefined(fieldData[fields.imageUrl])) {\n var attr = { src: fieldData[fields.imageUrl] };\n if (fieldData.hasOwnProperty(fields.imageUrl)) {\n merge(attr, fieldData[fields.imageAttributes]);\n }\n prepend([createElement('img', { className: cssClass.image, attrs: attr })], li.firstElementChild);\n }\n if (curOpt.showIcon && fieldData.hasOwnProperty(fields.iconCss) && !curOpt.template) {\n if (!isNullOrUndefined(fieldData[fields.iconCss])) {\n prepend([createElement('div', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] })], li.firstElementChild);\n }\n }\n if (innerEle.length) {\n prepend(innerEle, li.firstElementChild);\n }\n processSubChild(curItem, fields, dataSource, curOpt, li, ariaAttributes.level);\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: fieldData[fields.text],\n item: li,\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreated(curData);\n }\n child.push(li);\n }\n return child;\n }\n ListBase.createListItemFromJson = createListItemFromJson;\n /**\n * Function helps to created an element list based on array of JSON input .\n * @param {{[key:string]:Object}[]} dataSource - Specifies an array of JSON data.\n * @param {ListBaseOptions} options? - Specifies the list options that need to provide.\n */\n function createListFromJson(dataSource, options, level, isSingleLevel) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var li = createListItemFromJson(dataSource, options, level, isSingleLevel);\n return generateUL(li, curOpt.listClass, options);\n }\n ListBase.createListFromJson = createListFromJson;\n /**\n * Return the next or previous visible element.\n * @param {Element[]|NodeList} elementArray - An element array to find next or previous element.\n * @param {Element} li - An element to find next or previous after this element.\n * @param {boolean} isPrevious? - Specify when the need get previous element from array.\n */\n function getSiblingLI(elementArray, element, isPrevious) {\n cssClass = getModuleClass(defaultListBaseOptions.moduleName);\n if (!elementArray || !elementArray.length) {\n return void 0;\n }\n var siblingLI;\n var liIndex;\n var liCollections = Array.prototype.slice.call(elementArray);\n if (element) {\n liIndex = indexOf(element, liCollections);\n }\n else {\n liIndex = (isPrevious === true ? liCollections.length : -1);\n }\n siblingLI = liCollections[liIndex + (isPrevious === true ? -1 : 1)];\n while (siblingLI && (!isVisible(siblingLI) || siblingLI.classList.contains(cssClass.disabled))) {\n liIndex = liIndex + (isPrevious === true ? -1 : 1);\n siblingLI = liCollections[liIndex];\n }\n return siblingLI;\n }\n ListBase.getSiblingLI = getSiblingLI;\n /**\n * Return the index of the li element\n * @param {Element} item - An element to find next or previous after this element.\n * @param {Element[]|NodeList} elementArray - An element array to find index of given li.\n */\n function indexOf(item, elementArray) {\n if (!elementArray || !item) {\n return void 0;\n }\n else {\n var liCollections = elementArray;\n liCollections = Array.prototype.slice.call(elementArray);\n return liCollections.indexOf(item);\n }\n }\n ListBase.indexOf = indexOf;\n /**\n * Returns the grouped data from given dataSource.\n * @param {{[key:string]:Object}[]} dataSource - The JSON data which is necessary to process.\n * @param {FieldsMapping} fields - Fields that are mapped from the data source.\n * @param {SortOrder='None'} sortOrder- Specifies final result sort order.\n */\n function groupDataSource(dataSource, fields, sortOrder) {\n if (sortOrder === void 0) { sortOrder = 'None'; }\n var cusQuery = new Query().group(fields.groupBy);\n // need to remove once sorting issues fixed in DataManager\n cusQuery = addSorting(sortOrder, 'key', cusQuery);\n var ds = getDataSource(dataSource, cusQuery);\n dataSource = [];\n for (var j = 0; j < ds.length; j++) {\n var itemObj = ds[j].items;\n var grpItem = {};\n var hdr = 'isHeader';\n grpItem[fields.text] = ds[j].key;\n grpItem[hdr] = true;\n grpItem.items = itemObj;\n dataSource.push(grpItem);\n for (var k = 0; k < itemObj.length; k++) {\n dataSource.push(itemObj[k]);\n }\n }\n return dataSource;\n }\n ListBase.groupDataSource = groupDataSource;\n /**\n * Returns a sorted query object.\n * @param {SortOrder} sortOrder - Specifies that sort order.\n * @param {string} sortBy - Specifies sortBy fields.\n * @param {Query=new Query()} query - Pass if any existing query.\n */\n function addSorting(sortOrder, sortBy, query) {\n if (query === void 0) { query = new Query(); }\n if (sortOrder === 'Ascending') {\n query.sortBy(sortBy, 'ascending', true);\n }\n else if (sortOrder === 'Descending') {\n query.sortBy(sortBy, 'descending', true);\n }\n else {\n for (var i = 0; i < query.queries.length; i++) {\n if (query.queries[i].fn === 'onSortBy') {\n query.queries.splice(i, 1);\n }\n }\n }\n return query;\n }\n ListBase.addSorting = addSorting;\n /**\n * Return an array of JSON Data that processed based on queries.\n * @param {{[key:string]:Object}[]} dataSource - Specifies local JSON data source.\n * @param {Query} query - Specifies query that need to process.\n */\n function getDataSource(dataSource, query) {\n // tslint:disable-next-line\n return new DataManager(dataSource)\n .executeLocal(query);\n }\n ListBase.getDataSource = getDataSource;\n /**\n * Created JSON data based the UL and LI element\n * @param {HTMLElement|Element} element - UL element that need to convert as a JSON\n * @param {ListBaseOptions} options? - Specifies listbase option for fields.\n */\n function createJsonFromElement(element, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var fields = extend({}, ListBase.defaultMappedFields, curOpt.fields);\n var curEle = element.cloneNode(true);\n var jsonAr = [];\n curEle.classList.add('json-parent');\n var childs = curEle.querySelectorAll('.json-parent>li');\n curEle.classList.remove('json-parent');\n for (var i = 0; i < childs.length; i++) {\n var li = childs[i];\n var anchor = li.querySelector('a');\n var ul = li.querySelector('ul');\n var json = {};\n var childNodes = anchor ? anchor.childNodes : li.childNodes;\n var keys = Object.keys(childNodes);\n for (var i_1 = 0; i_1 < childNodes.length; i_1++) {\n if (!(childNodes[Number(keys[i_1])]).hasChildNodes()) {\n json[fields.text] = childNodes[Number(keys[i_1])].textContent;\n }\n }\n json[fields.id] = genUID();\n var attributes_1 = getAllAttributes(li);\n if (Object.keys(attributes_1).length) {\n json[fields.htmlAttributes] = attributes_1;\n }\n if (anchor) {\n attributes_1 = getAllAttributes(anchor);\n if (Object.keys(attributes_1).length) {\n json[fields.urlAttributes] = attributes_1;\n }\n }\n if (ul) {\n json[fields.child] = createJsonFromElement(ul, options);\n }\n jsonAr.push(json);\n }\n return jsonAr;\n }\n ListBase.createJsonFromElement = createJsonFromElement;\n function typeofData(data) {\n var match = { typeof: null, item: null };\n for (var i = 0; i < data.length; i++) {\n if (!isNullOrUndefined(data[i])) {\n return match = { typeof: typeof data[i], item: data[i] };\n }\n }\n return match;\n }\n function setAttribute(element, elementAttributes) {\n var attr = {};\n merge(attr, elementAttributes);\n if (attr.class) {\n addClass([element], attr.class.split(' '));\n delete attr.class;\n }\n attributes(element, attr);\n }\n function getAllAttributes(element) {\n var attributes = {};\n var attr = element.attributes;\n for (var index = 0; index < attr.length; index++) {\n attributes[attr[index].nodeName] = attr[index].nodeValue;\n }\n return attributes;\n }\n /**\n * Created UL element from content template.\n * @param {string} template - that need to convert and generate li element.\n * @param {{[key:string]:Object}[]} dataSource - Specifies local JSON data source.\n * @param {ListBaseOptions} options? - Specifies listbase option for fields.\n */\n function renderContentTemplate(template, dataSource, fields, options) {\n cssClass = getModuleClass(defaultListBaseOptions.moduleName);\n var ulElement = createElement('ul', { className: cssClass.ul, attrs: { role: 'presentation' } });\n var curOpt = extend({}, defaultListBaseOptions, options);\n var compiledString = compile(template);\n var liCollection = [];\n var id = genUID(); // generate id for drop-down-list option.\n for (var i = 0; i < dataSource.length; i++) {\n var fieldData = getFieldValues(dataSource[i], fields);\n var curItem = dataSource[i];\n var isHeader = curItem.isHeader;\n var value = (typeof curItem === 'string' || typeof curItem === 'number') ? curItem : fieldData[fields.value];\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: curItem,\n text: value,\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreating(curData);\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n fieldData = getFieldValues(dataSource[i], fields);\n value = fieldData[fields.value];\n }\n var li = createElement('li', {\n id: id + '-' + i,\n className: isHeader ? cssClass.group : cssClass.li, attrs: { role: 'presentation' }\n });\n if (isHeader) {\n li.innerText = fieldData[fields.text];\n }\n else {\n append(compiledString(curItem), li);\n li.setAttribute('data-value', value);\n li.setAttribute('role', 'option');\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: curItem,\n text: value,\n item: li,\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreated(curData);\n }\n liCollection.push(li);\n }\n append(liCollection, ulElement);\n return ulElement;\n }\n ListBase.renderContentTemplate = renderContentTemplate;\n /**\n * Created header items from group template.\n * @param {string} template - that need to convert and generate li element.\n * @param {{[key:string]:Object}[]} dataSource - Specifies local JSON data source.\n * @param {FieldsMapping} fields - Specifies fields for mapping the dataSource.\n * @param {Element[]} headerItems? - Specifies listbase header items.\n */\n function renderGroupTemplate(groupTemplate, groupDataSource, fields, headerItems) {\n var compiledString = compile(groupTemplate);\n var category = fields.groupBy;\n var headerData = {};\n for (var _i = 0, headerItems_1 = headerItems; _i < headerItems_1.length; _i++) {\n var header = headerItems_1[_i];\n headerData[category] = header.textContent;\n header.innerHTML = '';\n append(compiledString(headerData), header);\n }\n return headerItems;\n }\n ListBase.renderGroupTemplate = renderGroupTemplate;\n function genUID() {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n }\n function processSubChild(curItem, fields, ds, options, element, level) {\n var fieldData = getFieldValues(curItem, fields);\n // Get SubList \n var subDS = fieldData[fields.child] || [];\n var hasChildren = fieldData[fields.hasChildren];\n //Create Sub child\n if (subDS.length) {\n hasChildren = true;\n element.classList.add(cssClass.hasChild);\n if (options.processSubChild) {\n var subLi = createListFromJson(subDS, options, ++level);\n element.appendChild(subLi);\n }\n }\n // Create expand and collapse node\n if (!!options.expandCollapse && hasChildren && !options.template) {\n if (element.firstElementChild.classList.contains(cssClass.textContent)) {\n element.firstElementChild.classList.add(cssClass.iconWrapper);\n }\n var expandElement = options.expandIconPosition === 'Left' ? prepend : append;\n expandElement([createElement('div', { className: 'e-icons ' + options.expandIconClass })], element.querySelector('.' + cssClass.textContent));\n }\n }\n function generateSingleLevelLI(item, fields, className, innerElements, grpLI, id, index, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var text = item;\n var value = item;\n var dataSource;\n var fieldData = getFieldValues(item, fields);\n if (typeof item !== 'string' && typeof item !== 'number') {\n dataSource = item;\n text = (typeof fieldData[fields.text] === 'boolean' || typeof fieldData[fields.text] === 'number') ?\n fieldData[fields.text] : (fieldData[fields.text] || '');\n value = fieldData[fields.value];\n }\n var elementID;\n if (!isNullOrUndefined(dataSource) && !isNullOrUndefined(fieldData[fields.id])\n && fieldData[fields.id] !== '') {\n elementID = id;\n }\n else {\n elementID = id + '-' + index;\n }\n var li = createElement('li', {\n className: (grpLI === true ? cssClass.group : cssClass.li) + ' ' + (isNullOrUndefined(className) ? '' : className),\n id: elementID, attrs: (ariaAttributes.groupItemRole !== '' && ariaAttributes.itemRole !== '' ?\n { role: (grpLI === true ? ariaAttributes.groupItemRole : ariaAttributes.itemRole) } : {})\n });\n if (dataSource && fieldData.hasOwnProperty(fields.enabled) && fieldData[fields.enabled].toString() === 'false') {\n li.classList.add(cssClass.disabled);\n }\n if (grpLI) {\n li.innerText = text;\n }\n else {\n if (!isNullOrUndefined(value)) {\n li.setAttribute('data-value', value);\n }\n li.setAttribute('role', 'option');\n if (dataSource && fieldData.hasOwnProperty(fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n setAttribute(li, fieldData[fields.htmlAttributes]);\n }\n if (innerElements.length) {\n append(innerElements, li);\n }\n if (dataSource && fieldData.hasOwnProperty(fields.url) && fieldData[fields.url]) {\n li.appendChild(anchorTag(dataSource, fields, text));\n }\n else {\n li.appendChild(document.createTextNode(text));\n }\n }\n return li;\n }\n function getModuleClass(moduleName) {\n var moduleClass;\n return moduleClass = {\n li: \"e-\" + moduleName + \"-item\",\n ul: \"e-\" + moduleName + \"-parent e-ul\",\n group: \"e-\" + moduleName + \"-group-item\",\n icon: \"e-\" + moduleName + \"-icon\",\n text: \"e-\" + moduleName + \"-text\",\n check: \"e-\" + moduleName + \"-check\",\n checked: 'e-checked',\n selected: 'e-selected',\n expanded: 'e-expanded',\n textContent: 'e-text-content',\n hasChild: 'e-has-child',\n level: 'e-level',\n url: \"e-\" + moduleName + \"-url\",\n collapsible: 'e-icon-collapsible',\n disabled: 'e-disabled',\n image: \"e-\" + moduleName + \"-img\",\n iconWrapper: 'e-icon-wrapper'\n };\n }\n function anchorTag(dataSource, fields, text) {\n var fieldData = getFieldValues(dataSource, fields);\n var attr = { href: fieldData[fields.url] };\n if (fieldData.hasOwnProperty(fields.urlAttributes) && fieldData[fields.urlAttributes]) {\n merge(attr, fieldData[fields.urlAttributes]);\n }\n var anchorTag = createElement('a', { className: cssClass.text + ' ' + cssClass.url, innerHTML: text });\n setAttribute(anchorTag, attr);\n return anchorTag;\n }\n /* tslint:disable:align */\n function generateLI(item, fields, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var text = item;\n var uID;\n var grpLI;\n var dataSource;\n var fieldData;\n if (typeof item !== 'string') {\n fieldData = getFieldValues(item, fields);\n dataSource = item;\n text = fieldData[fields.text] || '';\n uID = fieldData[fields.id];\n grpLI = (item.hasOwnProperty('isHeader') && item.isHeader)\n ? true : false;\n }\n var li = createElement('li', {\n className: (grpLI === true ? cssClass.group : cssClass.li) + ' ' + (isNullOrUndefined(className) ? '' : className),\n attrs: (ariaAttributes.groupItemRole !== '' && ariaAttributes.itemRole !== '' ?\n { role: (grpLI === true ? ariaAttributes.groupItemRole : ariaAttributes.itemRole) } : {})\n });\n !isNullOrUndefined(uID) ? li.setAttribute('data-uid', uID) : li.setAttribute('data-uid', genUID());\n if (grpLI && options && options.groupTemplate) {\n var compiledString = compile(options.groupTemplate);\n append(compiledString(item), li);\n }\n else if (!grpLI && options && options.template) {\n var compiledString = compile(options.template);\n append(compiledString(item), li);\n }\n else {\n var innerDiv = createElement('div', { className: cssClass.textContent,\n attrs: (ariaAttributes.wrapperRole !== '' ? { role: ariaAttributes.wrapperRole } : {}) });\n if (dataSource && fieldData.hasOwnProperty(fields.url) && fieldData[fields.url]) {\n innerDiv.appendChild(anchorTag(dataSource, fields, text));\n }\n else {\n innerDiv.appendChild(createElement('span', { className: cssClass.text, innerHTML: text,\n attrs: (ariaAttributes.itemText !== '' ? { role: ariaAttributes.itemText } : {}) }));\n }\n li.appendChild(innerDiv);\n }\n return li;\n }\n /**\n * Returns UL element based on the given LI element.\n * @param {HTMLElement[]} liElement - Specifies array of LI element.\n * @param {string} className? - Specifies class name that need to be added in UL element.\n * @param {ListBaseOptions} options? - Specifies ListBase options.\n */\n function generateUL(liElement, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n cssClass = getModuleClass(curOpt.moduleName);\n var ulElement = createElement('ul', {\n className: cssClass.ul + ' ' + (isNullOrUndefined(className) ? '' : className),\n attrs: (ariaAttributes.listRole !== '' ? { role: ariaAttributes.listRole } : {})\n });\n append(liElement, ulElement);\n return ulElement;\n }\n ListBase.generateUL = generateUL;\n /**\n * Returns LI element with additional DIV tag based on the given LI element.\n * @param {liElement} liElement - Specifies LI element.\n * @param {string} className? - Specifies class name that need to be added in created DIV element.\n * @param {ListBaseOptions} options? - Specifies ListBase options.\n */\n function generateIcon(liElement, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n cssClass = getModuleClass(curOpt.moduleName);\n var expandElement = curOpt.expandIconPosition === 'Left' ? prepend : append;\n expandElement([createElement('div', { className: 'e-icons ' + curOpt.expandIconClass + ' ' +\n (isNullOrUndefined(className) ? '' : className) })], liElement.querySelector('.' + cssClass.textContent));\n return liElement;\n }\n ListBase.generateIcon = generateIcon;\n})(ListBase || (ListBase = {}));\n/**\n * Used to get dataSource item from complex data using fields.\n * @param {{[key:string]:Object}|string[]|string} dataSource - Specifies an JSON or String data.\n * @param {FieldsMapping} fields - Fields that are mapped from the dataSource.\n */\nexport function getFieldValues(dataItem, fields) {\n var fieldData = {};\n var value;\n if (isNullOrUndefined(dataItem)) {\n return dataItem;\n }\n else if (typeof (dataItem) === 'string' || typeof (dataItem) === 'number') {\n return dataItem;\n }\n else if (isNullOrUndefined(dataItem.isHeader)) {\n for (var _i = 0, _a = Object.keys(fields); _i < _a.length; _i++) {\n var field = _a[_i];\n if (!isNullOrUndefined(fields[field]) &&\n typeof (fields[field]) === 'string') {\n var property = fields[field].split('.');\n var dataField = property.length > 1 ? property[0] : fields[field];\n if (!isNullOrUndefined(dataItem[dataField])) {\n value = getValue(fields[field], dataItem);\n if (!isNullOrUndefined(value)) {\n fieldData[fields[field]] = value;\n }\n }\n }\n }\n }\n else if (!isNullOrUndefined(dataItem.isHeader) && dataItem.isHeader) {\n fieldData = dataItem;\n }\n return fieldData;\n}\n","/**\n * Encoding class: Contains the details about encoding type, whether to write a Unicode byte order mark (BOM).\n * ```typescript\n * let encoding : Encoding = new Encoding();\n * encoding.type = 'Utf8';\n * encoding.getBytes('Encoding', 0, 5);\n * ```\n */\nvar Encoding = /** @class */ (function () {\n /**\n * Initializes a new instance of the Encoding class. A parameter specifies whether to write a Unicode byte order mark\n * @param {boolean} includeBom?-true to specify that a Unicode byte order mark is written; otherwise, false.\n */\n function Encoding(includeBom) {\n this.emitBOM = true;\n this.encodingType = 'Ansi';\n this.initBOM(includeBom);\n }\n Object.defineProperty(Encoding.prototype, \"includeBom\", {\n /**\n * Gets a value indicating whether to write a Unicode byte order mark\n * @returns boolean- true to specify that a Unicode byte order mark is written; otherwise, false\n */\n get: function () {\n return this.emitBOM;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Encoding.prototype, \"type\", {\n /**\n * Gets the encoding type.\n * @returns EncodingType\n */\n get: function () {\n return this.encodingType;\n },\n /**\n * Sets the encoding type.\n * @param {EncodingType} value\n */\n set: function (value) {\n this.encodingType = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Initialize the includeBom to emit BOM or Not\n * @param {boolean} includeBom\n */\n Encoding.prototype.initBOM = function (includeBom) {\n if (includeBom === undefined || includeBom === null) {\n this.emitBOM = true;\n }\n else {\n this.emitBOM = includeBom;\n }\n };\n /**\n * Calculates the number of bytes produced by encoding the characters in the specified string\n * @param {string} chars - The string containing the set of characters to encode\n * @returns {number} - The number of bytes produced by encoding the specified characters\n */\n Encoding.prototype.getByteCount = function (chars) {\n var byteCount = 0;\n validateNullOrUndefined(chars, 'string');\n if (chars === '') {\n var byte = this.utf8Len(chars.charCodeAt(0));\n return byte;\n }\n if (this.type === null || this.type === undefined) {\n this.type = 'Ansi';\n }\n return this.getByteCountInternal(chars, 0, chars.length);\n };\n /**\n * Return the Byte of character\n * @param {number} codePoint\n * @returns {number}\n */\n Encoding.prototype.utf8Len = function (codePoint) {\n var bytes = codePoint <= 0x7F ? 1 :\n codePoint <= 0x7FF ? 2 :\n codePoint <= 0xFFFF ? 3 :\n codePoint <= 0x1FFFFF ? 4 : 0;\n return bytes;\n };\n /**\n * for 4 byte character return surrogate pair true, otherwise false\n * @param {number} codeUnit\n * @returns {boolean}\n */\n Encoding.prototype.isHighSurrogate = function (codeUnit) {\n return codeUnit >= 0xD800 && codeUnit <= 0xDBFF;\n };\n /**\n * for 4byte character generate the surrogate pair\n * @param {number} highCodeUnit\n * @param {number} lowCodeUnit\n */\n Encoding.prototype.toCodepoint = function (highCodeUnit, lowCodeUnit) {\n highCodeUnit = (0x3FF & highCodeUnit) << 10;\n var u = highCodeUnit | (0x3FF & lowCodeUnit);\n return u + 0x10000;\n };\n /**\n * private method to get the byte count for specific charindex and count\n * @param {string} chars\n * @param {number} charIndex\n * @param {number} charCount\n */\n Encoding.prototype.getByteCountInternal = function (chars, charIndex, charCount) {\n var byteCount = 0;\n if (this.encodingType === 'Utf8' || this.encodingType === 'Unicode') {\n var isUtf8 = this.encodingType === 'Utf8';\n for (var i = 0; i < charCount; i++) {\n var charCode = chars.charCodeAt(isUtf8 ? charIndex : charIndex++);\n if (this.isHighSurrogate(charCode)) {\n if (isUtf8) {\n var high = charCode;\n var low = chars.charCodeAt(++charIndex);\n byteCount += this.utf8Len(this.toCodepoint(high, low));\n }\n else {\n byteCount += 4;\n ++i;\n }\n }\n else {\n if (isUtf8) {\n byteCount += this.utf8Len(charCode);\n }\n else {\n byteCount += 2;\n }\n }\n if (isUtf8) {\n charIndex++;\n }\n }\n return byteCount;\n }\n else {\n byteCount = charCount;\n return byteCount;\n }\n };\n /**\n * Encodes a set of characters from the specified string into the ArrayBuffer.\n * @param {string} s- The string containing the set of characters to encode\n * @param {number} charIndex-The index of the first character to encode.\n * @param {number} charCount- The number of characters to encode.\n * @returns {ArrayBuffer} - The ArrayBuffer that contains the resulting sequence of bytes.\n */\n Encoding.prototype.getBytes = function (s, charIndex, charCount) {\n validateNullOrUndefined(s, 'string');\n validateNullOrUndefined(charIndex, 'charIndex');\n validateNullOrUndefined(charCount, 'charCount');\n if (charIndex < 0 || charCount < 0) {\n throw new RangeError('Argument Out Of Range Exception: charIndex or charCount is less than zero');\n }\n if (s.length - charIndex < charCount) {\n throw new RangeError('Argument Out Of Range Exception: charIndex and charCount do not denote a valid range in string');\n }\n var bytes;\n if (s === '') {\n bytes = new ArrayBuffer(0);\n return bytes;\n }\n if (this.type === null || this.type === undefined) {\n this.type = 'Ansi';\n }\n var byteCount = this.getByteCountInternal(s, charIndex, charCount);\n switch (this.type) {\n case 'Utf8':\n bytes = this.getBytesOfUtf8Encoding(byteCount, s, charIndex, charCount);\n return bytes;\n case 'Unicode':\n bytes = this.getBytesOfUnicodeEncoding(byteCount, s, charIndex, charCount);\n return bytes;\n default:\n bytes = this.getBytesOfAnsiEncoding(byteCount, s, charIndex, charCount);\n return bytes;\n }\n };\n /**\n * Decodes a sequence of bytes from the specified ArrayBuffer into the string.\n * @param {ArrayBuffer} bytes- The ArrayBuffer containing the sequence of bytes to decode.\n * @param {number} index- The index of the first byte to decode.\n * @param {number} count- The number of bytes to decode.\n * @returns {string} - The string that contains the resulting set of characters.\n */\n Encoding.prototype.getString = function (bytes, index, count) {\n validateNullOrUndefined(bytes, 'bytes');\n validateNullOrUndefined(index, 'index');\n validateNullOrUndefined(count, 'count');\n if (index < 0 || count < 0) {\n throw new RangeError('Argument Out Of Range Exception: index or count is less than zero');\n }\n if (bytes.byteLength - index < count) {\n throw new RangeError('Argument Out Of Range Exception: index and count do not denote a valid range in bytes');\n }\n if (bytes.byteLength === 0 || count === 0) {\n return '';\n }\n if (this.type === null || this.type === undefined) {\n this.type = 'Ansi';\n }\n var out = '';\n var byteCal = new Uint8Array(bytes);\n switch (this.type) {\n case 'Utf8':\n var s = this.getStringOfUtf8Encoding(byteCal, index, count);\n return s;\n case 'Unicode':\n var byteUnicode = new Uint16Array(bytes);\n out = this.getStringofUnicodeEncoding(byteUnicode, index, count);\n return out;\n default:\n var j = index;\n for (var i = 0; i < count; i++) {\n var c = byteCal[j];\n out += String.fromCharCode(c); // 1 byte(ASCII) character \n j++;\n }\n return out;\n }\n };\n Encoding.prototype.getBytesOfAnsiEncoding = function (byteCount, s, charIndex, charCount) {\n var bytes = new ArrayBuffer(byteCount);\n var bufview = new Uint8Array(bytes);\n var k = 0;\n for (var i = 0; i < charCount; i++) {\n var charcode = s.charCodeAt(charIndex++);\n if (charcode < 0x800) {\n bufview[k] = charcode;\n }\n else {\n bufview[k] = 63; //replacement character '?'\n }\n k++;\n }\n return bytes;\n };\n Encoding.prototype.getBytesOfUtf8Encoding = function (byteCount, s, charIndex, charCount) {\n var bytes = new ArrayBuffer(byteCount);\n var uint = new Uint8Array(bytes);\n var index = charIndex;\n var j = 0;\n for (var i = 0; i < charCount; i++) {\n var charcode = s.charCodeAt(index);\n if (charcode <= 0x7F) {\n uint[j] = charcode;\n }\n else if (charcode < 0x800) {\n uint[j] = 0xc0 | (charcode >> 6);\n uint[++j] = 0x80 | (charcode & 0x3f);\n }\n else if ((charcode < 0xd800 || charcode >= 0xe000)) {\n uint[j] = 0xe0 | (charcode >> 12);\n uint[++j] = 0x80 | ((charcode >> 6) & 0x3f);\n uint[++j] = 0x80 | (charcode & 0x3f);\n }\n else {\n uint[j] = 0xef;\n uint[++j] = 0xbf;\n uint[++j] = 0xbd; // U+FFFE \"replacement character\"\n }\n ++j;\n ++index;\n }\n return bytes;\n };\n Encoding.prototype.getBytesOfUnicodeEncoding = function (byteCount, s, charIndex, charCount) {\n var bytes = new ArrayBuffer(byteCount);\n var uint16 = new Uint16Array(bytes);\n for (var i = 0; i < charCount; i++) {\n var charcode = s.charCodeAt(i);\n uint16[i] = charcode;\n }\n return bytes;\n };\n Encoding.prototype.getStringOfUtf8Encoding = function (byteCal, index, count) {\n var j = 0;\n var i = index;\n var s = '';\n for (j; j < count; j++) {\n var c = byteCal[i++];\n while (i > byteCal.length) {\n return s;\n }\n if (c > 127) {\n if (c > 191 && c < 224 && i < count) {\n c = (c & 31) << 6 | byteCal[i] & 63;\n }\n else if (c > 223 && c < 240 && i < byteCal.byteLength) {\n c = (c & 15) << 12 | (byteCal[i] & 63) << 6 | byteCal[++i] & 63;\n }\n else if (c > 239 && c < 248 && i < byteCal.byteLength) {\n c = (c & 7) << 18 | (byteCal[i] & 63) << 12 | (byteCal[++i] & 63) << 6 | byteCal[++i] & 63;\n }\n ++i;\n }\n s += String.fromCharCode(c); // 1 byte(ASCII) character \n }\n return s;\n };\n Encoding.prototype.getStringofUnicodeEncoding = function (byteUni, index, count) {\n if (count > byteUni.length) {\n throw new RangeError('ArgumentOutOfRange_Count');\n }\n var byte16 = new Uint16Array(count);\n var out = '';\n for (var i = 0; i < count && i < byteUni.length; i++) {\n byte16[i] = byteUni[index++];\n }\n out = String.fromCharCode.apply(null, byte16);\n return out;\n };\n /**\n * To clear the encoding instance\n * @return {void}\n */\n Encoding.prototype.destroy = function () {\n this.emitBOM = undefined;\n this.encodingType = undefined;\n };\n return Encoding;\n}());\nexport { Encoding };\n/**\n * To check the object is null or undefined and throw error if it is null or undefined\n * @param {Object} value - object to check is null or undefined\n * @return {boolean}\n * @throws {ArgumentException} - if the value is null or undefined\n * @private\n */\nexport function validateNullOrUndefined(value, message) {\n if (value === null || value === undefined) {\n throw new Error('ArgumentException: ' + message + ' cannot be null or undefined');\n }\n}\n","/**\n * @private\n * @hidden\n */\nexport function defaultToString(item) {\n // if (item === null) {\n // return 'COLLECTION_NULL';\n // } else if (typeof item === 'undefined') {\n // return 'COLLECTION_UNDEFINED';\n // } else if (Object.prototype.toString.call(item) === '[object String]') {\n if (Object.prototype.toString.call(item) === '[object String]') {\n return '$s' + item;\n }\n else {\n return '$o' + item.toString();\n }\n}\n","/**\n * Specifies Chart Themes\n */\nexport var Theme;\n(function (Theme) {\n /** @private */\n Theme.axisLabelFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.axisTitleFont = {\n size: '14px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.chartTitleFont = {\n size: '15px',\n fontWeight: '500',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.crosshairLabelFont = {\n size: '13px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.tooltipLabelFont = {\n size: '13px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.legendLabelFont = {\n size: '13px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.stripLineLabelFont = {\n size: '12px',\n fontWeight: 'Regular',\n color: '#353535',\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n})(Theme || (Theme = {}));\n/** @private */\nexport function getSeriesColor(theme) {\n var palette;\n switch (theme) {\n case 'Fabric':\n palette = ['#4472c4', '#ed7d31', '#ffc000', '#70ad47', '#5b9bd5',\n '#c1c1c1', '#6f6fe2', '#e269ae', '#9e480e', '#997300'];\n break;\n case 'Bootstrap':\n palette = ['#a16ee5', '#f7ce69', '#55a5c2', '#7ddf1e', '#ff6ea6',\n '#7953ac', '#b99b4f', '#407c92', '#5ea716', '#b91c52'];\n break;\n case 'Highcontrast':\n palette = ['#79ECE4', '#E98272', '#DFE6B6', '#C6E773', '#BA98FF',\n '#FA83C3', '#00C27A', '#43ACEF', '#D681EF', '#D8BC6E'];\n break;\n default:\n palette = ['#00bdae', '#404041', '#357cd2', '#e56590', '#f8b883',\n '#70ad47', '#dd8abd', '#7f84e8', '#7bb4eb', '#ea7a57'];\n break;\n }\n return palette;\n}\n/** @private */\nexport function getThemeColor(theme) {\n var style;\n switch (theme) {\n case 'Highcontrast':\n style = {\n axisLabel: '#ffffff',\n axisTitle: '#ffffff',\n axisLine: '#ffffff',\n majorGridLine: '#BFBFBF',\n minorGridLine: '#969696',\n majorTickLine: '#BFBFBF',\n minorTickLine: '#969696',\n chartTitle: '#ffffff',\n legendLabel: '#ffffff',\n background: '#000000',\n areaBorder: '#ffffff',\n errorBar: '#ffffff',\n crosshairLine: '#ffffff',\n crosshairFill: '#ffffff',\n crosshairLabel: '#000000',\n tooltipFill: '#ffffff',\n tooltipBoldLabel: '#000000',\n tooltipLightLabel: '#000000',\n tooltipHeaderLine: '#969696',\n markerShadow: '#BFBFBF',\n selectionRectFill: 'rgba(255, 217, 57, 0.3)',\n selectionRectStroke: '#ffffff',\n selectionCircleStroke: '#FFD939'\n };\n break;\n default:\n style = {\n axisLabel: '#686868',\n axisTitle: '#424242',\n axisLine: '#b5b5b5',\n majorGridLine: '#dbdbdb',\n minorGridLine: '#eaeaea',\n majorTickLine: '#b5b5b5',\n minorTickLine: '#d6d6d6',\n chartTitle: '#424242',\n legendLabel: '#353535',\n background: '#FFFFFF',\n areaBorder: 'Gray',\n errorBar: '#000000',\n crosshairLine: '#4f4f4f',\n crosshairFill: '#4f4f4f',\n crosshairLabel: '#e5e5e5',\n tooltipFill: 'rgba(0, 8, 22, 0.75)',\n tooltipBoldLabel: '#ffffff',\n tooltipLightLabel: '#dbdbdb',\n tooltipHeaderLine: '#ffffff',\n markerShadow: null,\n selectionRectFill: 'rgba(41, 171, 226, 0.1)',\n selectionRectStroke: '#29abe2',\n selectionCircleStroke: '#29abe2'\n };\n break;\n }\n return style;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { SvgRenderer, Animation, compile as templateComplier } from '@syncfusion/ej2-base';\nimport { merge, extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { createElement, remove } from '@syncfusion/ej2-base';\nimport { Index } from '../../common/model/base';\n/**\n * Methods for calculating the text size.\n */\n/**\n * Function to measure the height and width of the text.\n * @param {string} text\n * @param {FontModel} font\n * @param {string} id\n * @returns no\n * @private\n */\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('chartmeasuretext');\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'chartmeasuretext' });\n document.body.appendChild(htmlObject);\n }\n htmlObject.innerHTML = text;\n htmlObject.style.position = 'absolute';\n htmlObject.style.fontSize = font.size;\n htmlObject.style.fontWeight = font.fontWeight;\n htmlObject.style.fontStyle = font.fontStyle;\n htmlObject.style.fontFamily = font.fontFamily;\n htmlObject.style.visibility = 'hidden';\n htmlObject.style.top = '-100';\n htmlObject.style.left = '0';\n htmlObject.style.whiteSpace = 'nowrap';\n // For bootstrap line height issue\n htmlObject.style.lineHeight = 'normal';\n return new Size(htmlObject.clientWidth, htmlObject.clientHeight);\n}\n/**\n * Function to sort the dataSource, by default it sort the data in ascending order.\n * @param {Object} data\n * @param {string} fields\n * @param {boolean} isDescending\n * @returns Object\n */\nexport function sort(data, fields, isDescending) {\n var sortData = extend([], data, null);\n sortData.sort(function (a, b) {\n var first = 0;\n var second = 0;\n for (var i = 0; i < fields.length; i++) {\n first += a[fields[i]];\n second += b[fields[i]];\n }\n if ((!isDescending && first < second) || (isDescending && first > second)) {\n return -1;\n }\n else if (first === second) {\n return 0;\n }\n return 1;\n });\n return sortData;\n}\n/** @private */\nexport function rotateTextSize(font, text, angle, chart) {\n var renderer = new SvgRenderer(chart.element.id);\n var box;\n var options;\n var htmlObject;\n options = {\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight,\n 'transform': 'rotate(' + angle + ', 0, 0)',\n 'text-anchor': 'middle'\n };\n htmlObject = renderer.createText(options, text);\n if (!chart.delayRedraw) {\n chart.element.appendChild(chart.svgObject);\n }\n chart.svgObject.appendChild(htmlObject);\n box = htmlObject.getBoundingClientRect();\n remove(htmlObject);\n if (!chart.delayRedraw) {\n remove(chart.svgObject);\n }\n return new Size((box.right - box.left), (box.bottom - box.top));\n}\n/** @private */\nexport function removeElement(id) {\n var element = getElement(id);\n if (element) {\n remove(element);\n }\n}\n/** @private */\nexport function logBase(value, base) {\n return Math.log(value) / Math.log(base);\n}\n/** @private */\nexport function showTooltip(text, x, y, areaWidth, id, element, isTouch) {\n //let id1: string = 'EJ2_legend_tooltip';\n var tooltip = document.getElementById(id);\n var width = measureText(text, {\n fontFamily: 'Segoe UI', size: '12px',\n fontStyle: 'Normal', fontWeight: 'Regular'\n }).width + 5;\n x = (x + width > areaWidth) ? x - width : x;\n if (!tooltip) {\n tooltip = createElement('div', {\n innerHTML: text,\n id: id,\n styles: 'top:' + (y + 15).toString() + 'px;left:' + (x + 15).toString() +\n 'px;background-color: rgb(255, 255, 255) !important; color:black !important; ' +\n 'position:absolute;border:1px solid rgb(112, 112, 112); padding-left : 3px; padding-right : 2px;' +\n 'padding-bottom : 2px; padding-top : 2px; font-size:12px; font-family: \"Segoe UI\"'\n });\n element.appendChild(tooltip);\n }\n else {\n tooltip.innerHTML = text;\n tooltip.style.top = (y + 15).toString() + 'px';\n tooltip.style.left = (x + 15).toString() + 'px';\n }\n if (isTouch) {\n setTimeout(function () { removeElement(id); }, 1500);\n }\n}\n/** @private */\nexport function inside(value, range) {\n return (value < range.max) && (value > range.min);\n}\n/** @private */\nexport function withIn(value, range) {\n return (value <= range.max) && (value >= range.min);\n}\n/** @private */\nexport function withInRange(previousPoint, currentPoint, nextPoint, series) {\n var mX2 = series.logWithIn(currentPoint.xValue, series.xAxis);\n var mX1 = previousPoint ? series.logWithIn(previousPoint.xValue, series.xAxis) : mX2;\n var mX3 = nextPoint ? series.logWithIn(nextPoint.xValue, series.xAxis) : mX2;\n var xStart = Math.floor(series.xAxis.visibleRange.min);\n var xEnd = Math.ceil(series.xAxis.visibleRange.max);\n return ((mX1 >= xStart && mX1 <= xEnd) || (mX2 >= xStart && mX2 <= xEnd) ||\n (mX3 >= xStart && mX3 <= xEnd) || (xStart >= mX1 && xStart <= mX3));\n}\n/** @private */\nexport function sum(values) {\n var sum = 0;\n for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {\n var value = values_1[_i];\n sum += value;\n }\n return sum;\n}\n/** @private */\nexport function subArraySum(values, first, last, index, series) {\n var sum = 0;\n if (index !== null) {\n for (var i = (first + 1); i < last; i++) {\n if (index.indexOf(i) === -1) {\n sum += values[i][series.yName];\n }\n }\n }\n else {\n for (var i = (first + 1); i < last; i++) {\n if (!isNullOrUndefined(values[i][series.yName])) {\n sum += values[i][series.yName];\n }\n }\n }\n return sum;\n}\n/** @private */\nexport function subtractThickness(rect, thickness) {\n rect.x += thickness.left;\n rect.y += thickness.top;\n rect.width -= thickness.left + thickness.right;\n rect.height -= thickness.top + thickness.bottom;\n return rect;\n}\n/** @private */\nexport function subtractRect(rect, thickness) {\n rect.x += thickness.x;\n rect.y += thickness.y;\n rect.width -= thickness.x + thickness.width;\n rect.height -= thickness.y + thickness.height;\n return rect;\n}\n/** @private */\nexport function degreeToLocation(degree, radius, center) {\n var radian = (degree * Math.PI) / 180;\n return new ChartLocation(Math.cos(radian) * radius + center.x, Math.sin(radian) * radius + center.y);\n}\nfunction getAccumulationLegend(locX, locY, r, height, width, mode) {\n var cartesianlarge = degreeToLocation(270, r, new ChartLocation(locX, locY));\n var cartesiansmall = degreeToLocation(270, r, new ChartLocation(locX + (width / 10), locY));\n return 'M' + ' ' + locX + ' ' + locY + ' ' + 'L' + ' ' + (locX + r) + ' ' + (locY) + ' ' + 'A' + ' ' + (r) + ' ' + (r) +\n ' ' + 0 + ' ' + 1 + ' ' + 1 + ' ' + cartesianlarge.x + ' ' + cartesianlarge.y + ' ' + 'Z' + ' ' + 'M' + ' ' + (locX +\n (width / 10)) + ' ' + (locY - (height / 10)) + ' ' + 'L' + (locX + (r)) + ' ' + (locY - height / 10) + ' ' + 'A' + ' '\n + (r) + ' ' + (r) + ' ' + 0 + ' ' + 0 + ' ' + 0 + ' ' + cartesiansmall.x + ' ' + cartesiansmall.y + ' ' + 'Z';\n}\n/** @private */\nexport function getAngle(center, point) {\n var angle = Math.atan2((point.y - center.y), (point.x - center.x));\n angle = angle < 0 ? (6.283 + angle) : angle;\n return angle * (180 / Math.PI);\n}\n/** @private */\nexport function subArray(values, index) {\n var subArray = [];\n for (var i = 0; i <= index - 1; i++) {\n subArray.push(values[i]);\n }\n return subArray;\n}\n/** @private */\nexport function valueToCoefficient(value, axis) {\n var range = axis.visibleRange;\n var result = (value - range.min) / (range.delta);\n return axis.isInversed ? (1 - result) : result;\n}\n/** @private */\nexport function TransformToVisible(x, y, xAxis, yAxis, isInverted, series) {\n x = (xAxis.valueType === 'Logarithmic' ? logBase(x > 1 ? x : 1, xAxis.logBase) : x);\n y = (yAxis.valueType === 'Logarithmic' ?\n logBase(y > 1 ? y : 1, yAxis.logBase) : y);\n x += xAxis.valueType === 'Category' && xAxis.labelPlacement === 'BetweenTicks' && series.type !== 'Radar' ? 0.5 : 0;\n var radius = series.chart.radius * valueToCoefficient(y, yAxis);\n var point = CoefficientToVector(valueToPolarCoefficient(x, xAxis), series.chart.primaryXAxis.startAngle);\n return {\n x: (series.clipRect.width / 2 + series.clipRect.x) + radius * point.x,\n y: (series.clipRect.height / 2 + series.clipRect.y) + radius * point.y\n };\n}\n/**\n * method to find series, point index by element id\n * @private\n */\nexport function indexFinder(id, isPoint) {\n if (isPoint === void 0) { isPoint = false; }\n var ids = ['NaN', 'NaN'];\n if (id.indexOf('_Point_') > -1) {\n ids = id.split('_Series_')[1].split('_Point_');\n }\n else if (id.indexOf('_shape_') > -1 && (!isPoint || (isPoint && id.indexOf('_legend_') === -1))) {\n ids = id.split('_shape_');\n ids[0] = '0';\n }\n else if (id.indexOf('_text_') > -1 && (!isPoint || (isPoint && id.indexOf('_legend_') === -1))) {\n ids = id.split('_text_');\n ids[0] = '0';\n }\n return new Index(parseInt(ids[0], 10), parseInt(ids[1], 10));\n}\n/** @private */\nexport function CoefficientToVector(coefficient, startAngle) {\n startAngle = startAngle < 0 ? startAngle + 360 : startAngle;\n var angle = Math.PI * (1.5 - 2 * coefficient);\n angle = angle + (startAngle * Math.PI) / 180;\n return { x: Math.cos(angle), y: Math.sin(angle) };\n}\n/** @private */\nexport function valueToPolarCoefficient(value, axis) {\n var range = axis.visibleRange;\n var delta;\n var length;\n if (axis.valueType !== 'Category') {\n delta = (range.max - (axis.valueType === 'DateTime' ? axis.dateTimeInterval : range.interval)) - range.min;\n length = axis.visibleLabels.length - 1;\n delta = delta === 0 ? 1 : delta;\n }\n else {\n delta = range.delta;\n length = axis.visibleLabels.length;\n }\n return axis.isInversed ? ((value - range.min) / delta) * (1 - 1 / (length)) :\n 1 - ((value - range.min) / delta) * (1 - 1 / (length));\n}\n/** @private */\nvar Mean = /** @class */ (function () {\n function Mean(verticalStandardMean, verticalSquareRoot, horizontalStandardMean, horizontalSquareRoot, verticalMean, horizontalMean) {\n this.verticalStandardMean = verticalStandardMean;\n this.horizontalStandardMean = horizontalStandardMean;\n this.verticalSquareRoot = verticalSquareRoot;\n this.horizontalSquareRoot = horizontalSquareRoot;\n this.verticalMean = verticalMean;\n this.horizontalMean = horizontalMean;\n }\n return Mean;\n}());\nexport { Mean };\n/** @private */\nvar PolarArc = /** @class */ (function () {\n function PolarArc(startAngle, endAngle, innerRadius, radius, currentXPosition) {\n this.startAngle = startAngle;\n this.endAngle = endAngle;\n this.innerRadius = innerRadius;\n this.radius = radius;\n this.currentXPosition = currentXPosition;\n }\n return PolarArc;\n}());\nexport { PolarArc };\n/** @private */\nexport function createTooltip(id, text, top, left, fontSize) {\n var tooltip = getElement(id);\n var style = 'top:' + top.toString() + 'px;' +\n 'left:' + left.toString() + 'px;' +\n 'color:black !important' +\n 'background:#FFFFFF !important' + ';' +\n 'position:absolute;border:1px solid #707070;font-size:' + fontSize + ';border-radius:2px;';\n if (!tooltip) {\n tooltip = createElement('div', {\n id: id, innerHTML: ' ' + text + ' ', styles: style\n });\n document.body.appendChild(tooltip);\n }\n else {\n tooltip.setAttribute('innerHTML', ' ' + text + ' ');\n tooltip.setAttribute('styles', style);\n }\n}\n/** @private */\nexport function createZoomingLabels(chart, axis, parent, index, isVertical, rect) {\n var margin = 5;\n var opposedPosition = axis.opposedPosition;\n var anchor = isVertical ? 'start' : 'auto';\n var size;\n var chartRect = chart.availableSize.width;\n var x;\n var y;\n var rx = 3;\n var arrowLocation;\n var direction;\n for (var i = 0; i < 2; i++) {\n size = measureText(i ? axis.endLabel : axis.startLabel, axis.labelStyle);\n if (isVertical) {\n arrowLocation = i ? new ChartLocation(rect.x, rect.y + rx) :\n new ChartLocation(axis.rect.x, (rect.y + rect.height - rx));\n x = (rect.x + (opposedPosition ? (rect.width + margin) : -(size.width + margin + margin)));\n y = (rect.y + (i ? 0 : rect.height - size.height - margin));\n x += (x < 0 || ((chartRect) < (x + size.width + margin))) ? (opposedPosition ? -(size.width / 2) : size.width / 2) : 0;\n direction = findDirection(rx, rx, new Rect(x, y, size.width + margin, size.height + margin), arrowLocation, margin, false, false, !opposedPosition, arrowLocation.x, arrowLocation.y + (i ? -rx : rx));\n }\n else {\n arrowLocation = i ? new ChartLocation((rect.x + rect.width - rx), (rect.y + rect.height)) :\n new ChartLocation(rect.x + rx, (rect.y + rect.height));\n x = (rect.x + (i ? (rect.width - size.width - margin) : 0));\n y = (opposedPosition ? (rect.y - size.height - 10) : (rect.y + rect.height + margin));\n direction = findDirection(rx, rx, new Rect(x, y, size.width + margin, size.height + margin), arrowLocation, margin, opposedPosition, !opposedPosition, false, arrowLocation.x + (i ? rx : -rx), arrowLocation.y);\n }\n x = x + (margin / 2);\n y = y + (3 * (size.height / 4)) + (margin / 2);\n parent.appendChild(chart.renderer.drawPath(new PathOption(chart.element.id + '_Zoom_' + index + '_AxisLabel_Shape_' + i, chart.themeStyle.crosshairFill, 2, chart.themeStyle.crosshairFill, 1, null, direction)));\n textElement(new TextOption(chart.element.id + '_Zoom_' + index + '_AxisLabel_' + i, x, y, anchor, i ? axis.endLabel : axis.startLabel), { color: chart.themeStyle.crosshairLabel, fontFamily: 'Segoe UI', fontWeight: 'Regular', size: '11px' }, chart.themeStyle.crosshairLabel, parent);\n }\n return parent;\n}\n//Within bounds\n/** @private */\nexport function withInBounds(x, y, bounds, width, height) {\n if (width === void 0) { width = 0; }\n if (height === void 0) { height = 0; }\n return (x >= bounds.x - width && x <= bounds.x + bounds.width + width && y >= bounds.y - height\n && y <= bounds.y + bounds.height + height);\n}\n/** @private */\nexport function getValueXByPoint(value, size, axis) {\n var actualValue = !axis.isInversed ? value / size : (1 - (value / size));\n return actualValue * (axis.visibleRange.delta) + axis.visibleRange.min;\n}\n/** @private */\nexport function getValueYByPoint(value, size, axis) {\n var actualValue = axis.isInversed ? value / size : (1 - (value / size));\n return actualValue * (axis.visibleRange.delta) + axis.visibleRange.min;\n}\n/** @private */\nexport function findClipRect(series) {\n var rect = series.clipRect;\n if (series.chart.requireInvertedAxis) {\n rect.x = series.yAxis.rect.x;\n rect.y = series.xAxis.rect.y;\n rect.width = series.yAxis.rect.width;\n rect.height = series.xAxis.rect.height;\n }\n else {\n rect.x = series.xAxis.rect.x;\n rect.y = series.yAxis.rect.y;\n rect.width = series.xAxis.rect.width;\n rect.height = series.yAxis.rect.height;\n }\n}\n/** @private */\nexport function firstToLowerCase(str) {\n return str.substr(0, 1).toLowerCase() + str.substr(1);\n}\n/** @private */\nexport function getMinPointsDelta(axis, seriesCollection) {\n var minDelta = Number.MAX_VALUE;\n var xValues;\n var minVal;\n seriesCollection.forEach(function (series, index) {\n xValues = [];\n if (series.visible &&\n (axis.name === series.xAxisName || (axis.name === 'primaryXAxis' && series.xAxisName === null)\n || (axis.name === series.chart.primaryXAxis.name && !series.xAxisName))) {\n xValues = series.points.map(function (point, index) {\n return point.xValue;\n });\n xValues.sort(function (first, second) { return first - second; });\n if (xValues.length === 1) {\n minVal = xValues[0] - ((series.xMin && series.xAxis.valueType !== 'DateTime') ?\n series.xMin : axis.visibleRange.min);\n if (minVal !== 0) {\n minDelta = Math.min(minDelta, minVal);\n }\n }\n else {\n xValues.forEach(function (value, index, xValues) {\n if (index > 0 && value) {\n minVal = value - xValues[index - 1];\n if (minVal !== 0) {\n minDelta = Math.min(minDelta, minVal);\n }\n }\n });\n }\n }\n });\n if (minDelta === Number.MAX_VALUE) {\n minDelta = 1;\n }\n return minDelta;\n}\n/** @private */\nexport function getAnimationFunction(effect) {\n var functionName;\n switch (effect) {\n case 'Linear':\n functionName = linear;\n break;\n }\n return functionName;\n}\n/**\n * Animation Effect Calculation Started Here\n * @param currentTime\n * @param startValue\n * @param endValue\n * @param duration\n * @private\n */\nexport function linear(currentTime, startValue, endValue, duration) {\n return -endValue * Math.cos(currentTime / duration * (Math.PI / 2)) + endValue + startValue;\n}\n/**\n * Animation Effect Calculation End\n * @private\n */\nexport function markerAnimate(element, delay, duration, series, pointIndex, point, isLabel) {\n var centerX = point.x;\n var centerY = point.y;\n var height = 0;\n element.style.visibility = 'hidden';\n new Animation({}).animate(element, {\n duration: duration,\n delay: delay,\n progress: function (args) {\n if (args.timeStamp > args.delay) {\n args.element.style.visibility = 'visible';\n height = ((args.timeStamp - args.delay) / args.duration);\n element.setAttribute('transform', 'translate(' + centerX\n + ' ' + centerY + ') scale(' + height + ') translate(' + (-centerX) + ' ' + (-centerY) + ')');\n }\n },\n end: function (model) {\n element.style.visibility = '';\n element.removeAttribute('transform');\n if ((series.type === 'Scatter' || series.type === 'Bubble') && !isLabel && (pointIndex === series.points.length - 1)) {\n series.chart.trigger('animationComplete', { series: series });\n }\n }\n });\n}\n/**\n * Animation for template\n * @private\n */\nexport function templateAnimate(element, delay, duration, name, isRemove) {\n new Animation({}).animate(element, {\n duration: duration,\n delay: delay,\n name: name,\n progress: function (args) {\n args.element.style.visibility = 'visible';\n },\n end: function (args) {\n if (isRemove) {\n remove(args.element);\n }\n else {\n args.element.style.visibility = 'visible';\n }\n },\n });\n}\n/** @private */\nexport function drawSymbol(location, shape, size, url, options, label) {\n var functionName = 'Path';\n var renderer = new SvgRenderer('');\n var temp = calculateShapes(location, size, shape, options, url);\n var htmlObject = renderer['draw' + temp.functionName](temp.renderOption);\n htmlObject.setAttribute('aria-label', label);\n return htmlObject;\n}\n/** @private */\nexport function calculateShapes(location, size, shape, options, url) {\n var path;\n var functionName = 'Path';\n var width = size.width;\n var height = size.height;\n var locX = location.x;\n var locY = location.y;\n var x = location.x + (-width / 2);\n var y = location.y + (-height / 2);\n switch (shape) {\n case 'Circle':\n case 'Bubble':\n functionName = 'Ellipse';\n merge(options, { 'rx': width / 2, 'ry': height / 2, 'cx': locX, 'cy': locY });\n break;\n case 'Cross':\n path = 'M' + ' ' + x + ' ' + locY + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'M' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + locX + ' ' +\n (locY + (-height / 2));\n merge(options, { 'd': path });\n break;\n case 'HorizontalLine':\n path = 'M' + ' ' + x + ' ' + locY + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + locY;\n merge(options, { 'd': path });\n break;\n case 'VerticalLine':\n path = 'M' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + locX + ' ' + (locY + (-height / 2));\n merge(options, { 'd': path });\n break;\n case 'Diamond':\n path = 'M' + ' ' + x + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + locY + ' z';\n merge(options, { 'd': path });\n break;\n case 'Rectangle':\n case 'Hilo':\n case 'HiloOpenClose':\n case 'Candle':\n case 'Waterfall':\n case 'BoxAndWhisker':\n case 'StepArea':\n path = 'M' + ' ' + x + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (-height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Pyramid':\n case 'Triangle':\n path = 'M' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Funnel':\n case 'InvertedTriangle':\n path = 'M' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + (locX - (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Pentagon':\n var eq = 72;\n var xValue = void 0;\n var yValue = void 0;\n for (var i = 0; i <= 5; i++) {\n xValue = (width / 2) * Math.cos((Math.PI / 180) * (i * eq));\n yValue = (height / 2) * Math.sin((Math.PI / 180) * (i * eq));\n if (i === 0) {\n path = 'M' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ';\n }\n else {\n path = path.concat('L' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ');\n }\n }\n path = path.concat('Z');\n merge(options, { 'd': path });\n break;\n case 'Image':\n functionName = 'Image';\n merge(options, { 'href': url, 'height': height, 'width': width, x: x, y: y });\n break;\n }\n options = calculateLegendShapes(location, new Size(width, height), shape, options).renderOption;\n return { renderOption: options, functionName: functionName };\n}\n/** @private */\nexport function getRectLocation(startLocation, endLocation, outerRect) {\n var x;\n var y;\n x = (endLocation.x < outerRect.x) ? outerRect.x :\n (endLocation.x > (outerRect.x + outerRect.width)) ? outerRect.x + outerRect.width : endLocation.x;\n y = (endLocation.y < outerRect.y) ? outerRect.y :\n (endLocation.y > (outerRect.y + outerRect.height)) ? outerRect.y + outerRect.height : endLocation.y;\n return new Rect((x > startLocation.x ? startLocation.x : x), (y > startLocation.y ? startLocation.y : y), Math.abs(x - startLocation.x), Math.abs(y - startLocation.y));\n}\n/** @private */\nexport function minMax(value, min, max) {\n return value > max ? max : (value < min ? min : value);\n}\n/** @private */\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/** @private */\nexport function getTemplateFunction(template) {\n var templateFn = null;\n var e;\n try {\n if (document.querySelectorAll(template).length) {\n templateFn = templateComplier(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n templateFn = templateComplier(template);\n }\n return templateFn;\n}\n/** @private */\nexport function createTemplate(childElement, pointIndex, content, chart, point, series) {\n var templateFn;\n var templateElement;\n templateFn = getTemplateFunction(content);\n try {\n if (templateFn && templateFn({ chart: chart, series: series, point: point }).length) {\n templateElement = templateFn({ chart: chart, series: series, point: point });\n while (templateElement.length > 0) {\n childElement.appendChild(templateElement[0]);\n }\n }\n }\n catch (e) {\n return childElement;\n }\n return childElement;\n}\n/** @private */\nexport function getFontStyle(font) {\n var style = '';\n style = 'font-size:' + font.size +\n '; font-style:' + font.fontStyle + '; font-weight:' + font.fontWeight +\n '; font-family:' + font.fontFamily + ';opacity:' + font.opacity +\n '; color:' + font.color + ';';\n return style;\n}\n/** @private */\nexport function measureElementRect(element) {\n var bounds;\n document.body.appendChild(element);\n bounds = element.getBoundingClientRect();\n removeElement(element.id);\n return bounds;\n}\n/** @private */\nexport function findlElement(elements, id) {\n var element;\n for (var i = 0, length_1 = elements.length; i < length_1; i++) {\n if (elements[i].id.indexOf(id) > -1) {\n element = elements[i];\n continue;\n }\n }\n return element;\n}\n/** @private */\nexport function getPoint(x, y, xAxis, yAxis, isInverted, series) {\n x = ((xAxis.valueType === 'Logarithmic') ? logBase(((x > 1) ? x : 1), xAxis.logBase) : x);\n y = ((yAxis.valueType === 'Logarithmic') ? logBase(((y > 1) ? y : 1), yAxis.logBase) : y);\n x = valueToCoefficient(x, xAxis);\n y = valueToCoefficient(y, yAxis);\n var xLength = (isInverted ? xAxis.rect.height : xAxis.rect.width);\n var yLength = (isInverted ? yAxis.rect.width : yAxis.rect.height);\n var locationX = isInverted ? y * (yLength) : x * (xLength);\n var locationY = isInverted ? (1 - x) * (xLength) : (1 - y) * (yLength);\n return new ChartLocation(locationX, locationY);\n}\n/** @private */\nexport function appendElement(child, parent) {\n if (child && child.hasChildNodes() && parent) {\n parent.appendChild(child);\n }\n else {\n return null;\n }\n}\n/** @private */\nexport function getDraggedRectLocation(x1, y1, x2, y2, outerRect) {\n var width = Math.abs(x1 - x2);\n var height = Math.abs(y1 - y2);\n var x = Math.max(checkBounds(Math.min(x1, x2), width, outerRect.x, outerRect.width), outerRect.x);\n var y = Math.max(checkBounds(Math.min(y1, y2), height, outerRect.y, outerRect.height), outerRect.y);\n return new Rect(x, y, Math.min(width, outerRect.width), Math.min(height, outerRect.height));\n}\n/** @private */\nexport function checkBounds(start, size, min, max) {\n if (start < min) {\n start = min;\n }\n else if ((start + size) > (max + min)) {\n start = (max + min) - size;\n }\n return start;\n}\n/** @private */\nexport function getLabelText(currentPoint, series, chart) {\n var labelFormat = series.yAxis.labelFormat;\n var text = [];\n var customLabelFormat = labelFormat.match('{value}') !== null;\n switch (series.seriesType) {\n case 'XY':\n text.push(currentPoint.text || currentPoint.yValue.toString());\n break;\n case 'HighLow':\n text.push(currentPoint.text || Math.max(currentPoint.high, currentPoint.low).toString());\n text.push(currentPoint.text || Math.min(currentPoint.high, currentPoint.low).toString());\n break;\n case 'HighLowOpenClose':\n text.push(currentPoint.text || Math.max(currentPoint.high, currentPoint.low).toString());\n text.push(currentPoint.text || Math.min(currentPoint.high, currentPoint.low).toString());\n text.push(currentPoint.text || Math.max(currentPoint.open, currentPoint.close).toString());\n text.push(currentPoint.text || Math.min(currentPoint.open, currentPoint.close).toString());\n break;\n case 'BoxPlot':\n text.push(currentPoint.text || currentPoint.median.toString());\n text.push(currentPoint.text || currentPoint.maximum.toString());\n text.push(currentPoint.text || currentPoint.minimum.toString());\n text.push(currentPoint.text || currentPoint.upperQuartile.toString());\n text.push(currentPoint.text || currentPoint.lowerQuartile.toString());\n for (var _i = 0, _a = currentPoint.outliers; _i < _a.length; _i++) {\n var liers = _a[_i];\n text.push(currentPoint.text || liers.toString());\n }\n break;\n }\n if (labelFormat && !currentPoint.text) {\n for (var i = 0; i < text.length; i++) {\n text[i] = customLabelFormat ? labelFormat.replace('{value}', series.yAxis.format(parseFloat(text[i]))) :\n series.yAxis.format(parseFloat(text[i]));\n }\n }\n return text;\n}\n/** @private */\nexport function stopTimer(timer) {\n window.clearInterval(timer);\n}\n/** @private */\nexport function isCollide(rect, collections, clipRect) {\n var isCollide;\n var currentRect = new Rect(rect.x + clipRect.x, rect.y + clipRect.y, rect.width, rect.height);\n isCollide = collections.some(function (rect) {\n return (currentRect.x < rect.x + rect.width && currentRect.x + currentRect.width > rect.x &&\n currentRect.y < rect.y + rect.height && currentRect.height + currentRect.y > rect.y);\n });\n return isCollide;\n}\n/** @private */\nexport function isOverlap(currentRect, rect) {\n return (currentRect.x < rect.x + rect.width && currentRect.x + currentRect.width > rect.x &&\n currentRect.y < rect.y + rect.height && currentRect.height + currentRect.y > rect.y);\n}\n/** @private */\nexport function containsRect(currentRect, rect) {\n return (currentRect.x <= rect.x && currentRect.x + currentRect.width >= rect.x + rect.width &&\n currentRect.y <= rect.y && currentRect.height + currentRect.y >= rect.y + rect.height);\n}\n/** @private */\nexport function calculateRect(location, textSize, margin) {\n return new Rect((location.x - (textSize.width / 2) - margin.left), (location.y - (textSize.height / 2) - margin.top), textSize.width + margin.left + margin.right, textSize.height + margin.top + margin.bottom);\n}\n/** @private */\nexport function convertToHexCode(value) {\n return '#' + componentToHex(value.r) + componentToHex(value.g) + componentToHex(value.b);\n}\n/** @private */\nexport function componentToHex(value) {\n var hex = value.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n}\n/** @private */\nexport function convertHexToColor(hex) {\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? new ColorValue(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)) :\n new ColorValue(255, 255, 255);\n}\n/** @private */\nexport function colorNameToHex(color) {\n var element;\n color = color === 'transparent' ? 'white' : color;\n element = document.getElementById('chartmeasuretext');\n element.style.color = color;\n color = window.getComputedStyle(element).color;\n var exp = /^(rgb|hsl)(a?)[(]\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*(?:,\\s*([\\d.]+)\\s*)?[)]$/;\n var isRGBValue = exp.exec(color);\n return convertToHexCode(new ColorValue(parseInt(isRGBValue[3], 10), parseInt(isRGBValue[4], 10), parseInt(isRGBValue[5], 10)));\n}\n/** @private */\nexport function getSaturationColor(color, factor) {\n color = colorNameToHex(color);\n color = color.replace(/[^0-9a-f]/gi, '');\n if (color.length < 6) {\n color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2];\n }\n factor = factor || 0;\n // convert to decimal and change luminosity\n var rgb = '#';\n var colorCode;\n for (var i = 0; i < 3; i++) {\n colorCode = parseInt(color.substr(i * 2, 2), 16);\n colorCode = Math.round(Math.min(Math.max(0, colorCode + (colorCode * factor)), 255));\n rgb += ('00' + colorCode.toString(16)).substr(colorCode.toString(16).length);\n }\n return rgb;\n}\n/** @private */\nexport function getMedian(values) {\n var half = Math.floor(values.length / 2);\n return values.length % 2 ? values[half] : ((values[half - 1] + values[half]) / 2.0);\n}\n/** @private */\n// tslint:disable-next-line:max-func-body-length\nexport function calculateLegendShapes(location, size, shape, options) {\n var padding = 10;\n var path = '';\n var height = size.height;\n var width = size.width;\n var locX = location.x;\n var locY = location.y;\n switch (shape) {\n case 'MultiColoredLine':\n case 'Line':\n path = 'M' + ' ' + (locX + (-width / 2)) + ' ' + (locY) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY);\n merge(options, { 'd': path });\n break;\n case 'StepLine':\n options.fill = 'transparent';\n path = 'M' + ' ' + (locX + (-width / 2) - (padding / 4)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + (locX +\n (-width / 2) + (width / 10)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + (locX + (-width / 2) + (width / 10))\n + ' ' + (locY) + ' ' + 'L' + ' ' + (locX + (-width / 10)) + ' ' + (locY) + ' ' + 'L' + ' ' + (locX + (-width / 10))\n + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + (locX + (width / 5)) + ' ' + (locY + (height / 2)) + ' ' + 'L' +\n ' ' + (locX + (width / 5)) + ' ' + (locY + (-height / 2)) + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY +\n (-height / 2)) + 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + '' + (locX + (width / 2)\n + (padding / 4)) + ' ' + (locY + (height / 2));\n merge(options, { 'd': path });\n break;\n case 'RightArrow':\n var space = 2;\n path = 'M' + ' ' + (locX + (-width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY) + ' ' + 'L' + ' ' +\n (locX + (-width / 2)) + ' ' + (locY + (height / 2)) + ' L' + ' ' + (locX + (-width / 2)) + ' ' +\n (locY + (height / 2) - space) + ' ' + 'L' + ' ' + (locX + (width / 2) - (2 * space)) + ' ' + (locY) +\n ' L' + (locX + (-width / 2)) + ' ' + (locY - (height / 2) + space) + ' Z';\n merge(options, { 'd': path });\n break;\n case 'LeftArrow':\n options.fill = options.stroke;\n options.stroke = 'transparent';\n space = 2;\n path = 'M' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + (-width / 2)) + ' ' + (locY) + ' ' + 'L' + ' ' +\n (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' +\n (locX + (width / 2)) + ' ' + (locY + (height / 2) - space) + ' L' + ' ' + (locX + (-width / 2) + (2 * space))\n + ' ' + (locY) + ' L' + (locX + (width / 2)) + ' ' + (locY - (height / 2) + space) + ' Z';\n merge(options, { 'd': path });\n break;\n case 'Column':\n case 'StackingColumn':\n case 'StackingColumn100':\n case 'RangeColumn':\n path = 'M' + ' ' + (locX - 3 * (width / 5)) + ' ' + (locY - (height / 5)) + ' ' + 'L' + ' ' +\n (locX + 3 * (-width / 10)) + ' ' + (locY - (height / 5)) + ' ' + 'L' + ' ' +\n (locX + 3 * (-width / 10)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + (locX - 3 *\n (width / 5)) + ' ' + (locY + (height / 2)) + ' ' + 'Z' + ' ' + 'M' + ' ' +\n (locX + (-width / 10) - (width / 20)) + ' ' + (locY - (height / 4) - (padding / 2))\n + ' ' + 'L' + ' ' + (locX + (width / 10) + (width / 20)) + ' ' + (locY - (height / 4) -\n (padding / 2)) + ' ' + 'L' + ' ' + (locX + (width / 10) + (width / 20)) + ' ' + (locY\n + (height / 2)) + ' ' + 'L' + ' ' + (locX + (-width / 10) - (width / 20)) + ' ' + (locY +\n (height / 2)) + ' ' + 'Z' + ' ' + 'M' + ' ' + (locX + 3 * (width / 10)) + ' ' + (locY) + ' ' +\n 'L' + ' ' + (locX + 3 * (width / 5)) + ' ' + (locY) + ' ' + 'L' + ' '\n + (locX + 3 * (width / 5)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' '\n + (locX + 3 * (width / 10)) + ' ' + (locY + (height / 2)) + ' ' + 'Z';\n merge(options, { 'd': path });\n break;\n case 'Bar':\n case 'StackingBar':\n case 'StackingBar100':\n path = 'M' + ' ' + (locX + (-width / 2) + (-padding / 4)) + ' ' + (locY - 3 * (height / 5)) + ' '\n + 'L' + ' ' + (locX + 3 * (width / 10)) + ' ' + (locY - 3 * (height / 5)) + ' ' + 'L' + ' ' +\n (locX + 3 * (width / 10)) + ' ' + (locY - 3 * (height / 10)) + ' ' + 'L' + ' ' +\n (locX - (width / 2) + (-padding / 4)) + ' ' + (locY - 3 * (height / 10)) + ' ' + 'Z' + ' '\n + 'M' + ' ' + (locX + (-width / 2) + (-padding / 4)) + ' ' + (locY - (height / 5)\n + (padding / 20)) + ' ' + 'L' + ' ' + (locX + (width / 2) + (padding / 4)) + ' ' + (locY\n - (height / 5) + (padding / 20)) + ' ' + 'L' + ' ' + (locX + (width / 2) + (padding / 4))\n + ' ' + (locY + (height / 10) + (padding / 20)) + ' ' + 'L' + ' ' + (locX - (width / 2)\n + (-padding / 4)) + ' ' + (locY + (height / 10) + (padding / 20)) + ' ' + 'Z' + ' ' + 'M'\n + ' ' + (locX - (width / 2) + (-padding / 4)) + ' ' + (locY + (height / 5)\n + (padding / 10)) + ' ' + 'L' + ' ' + (locX + (-width / 4)) + ' ' + (locY + (height / 5)\n + (padding / 10)) + ' ' + 'L' + ' ' + (locX + (-width / 4)) + ' ' + (locY + (height / 2)\n + (padding / 10)) + ' ' + 'L' + ' ' + (locX - (width / 2) + (-padding / 4))\n + ' ' + (locY + (height / 2) + (padding / 10)) + ' ' + 'Z';\n merge(options, { 'd': path });\n break;\n case 'Spline':\n options.fill = 'transparent';\n path = 'M' + ' ' + (locX - (width / 2)) + ' ' + (locY + (height / 5)) + ' ' + 'Q' + ' '\n + locX + ' ' + (locY - height) + ' ' + locX + ' ' + (locY + (height / 5))\n + ' ' + 'M' + ' ' + locX + ' ' + (locY + (height / 5)) + ' ' + 'Q' + ' ' + (locX\n + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' + (locX + (width / 2)) + ' '\n + (locY - (height / 2));\n merge(options, { 'd': path });\n break;\n case 'Area':\n case 'MultiColoredArea':\n case 'RangeArea':\n case 'StackingArea':\n case 'StackingArea100':\n path = 'M' + ' ' + (locX - (width / 2) - (padding / 4)) + ' ' + (locY + (height / 2))\n + ' ' + 'L' + ' ' + (locX + (-width / 4) + (-padding / 8)) + ' ' + (locY - (height / 2))\n + ' ' + 'L' + ' ' + (locX) + ' ' + (locY + (height / 4)) + ' ' + 'L' + ' ' + (locX\n + (width / 4) + (padding / 8)) + ' ' + (locY + (-height / 2) + (height / 4)) + ' '\n + 'L' + ' ' + (locX + (height / 2) + (padding / 4)) + ' ' + (locY + (height / 2)) + ' ' + 'Z';\n merge(options, { 'd': path });\n break;\n case 'SplineArea':\n path = 'M' + ' ' + (locX - (width / 2)) + ' ' + (locY + (height / 5)) + ' ' + 'Q' + ' ' + locX\n + ' ' + (locY - height) + ' ' + locX + ' ' + (locY + (height / 5)) + ' ' + 'Z' + ' ' + 'M'\n + ' ' + locX + ' ' + (locY + (height / 5)) + ' ' + 'Q' + ' ' + (locX + (width / 2)) + ' '\n + (locY + (height / 2)) + ' ' + (locX + (width / 2)) + ' '\n + (locY - (height / 2)) + ' ' + ' Z';\n merge(options, { 'd': path });\n break;\n case 'Pie':\n case 'Doughnut':\n options.stroke = 'transparent';\n var r = Math.min(height, width) / 2;\n path = getAccumulationLegend(locX, locY, r, height, width, shape);\n merge(options, { 'd': path });\n break;\n }\n return { renderOption: options };\n}\n/** @private */\nexport function textTrim(maxWidth, text, font) {\n var label = text;\n var size = measureText(text, font).width;\n if (size > maxWidth) {\n var textLength = text.length;\n for (var i = textLength - 1; i >= 0; --i) {\n label = text.substring(0, i) + '...';\n size = measureText(label, font).width;\n if (size <= maxWidth) {\n return label;\n }\n }\n }\n return label;\n}\n/** @private */\nexport function stringToNumber(value, containerSize) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/** @private */\nexport function findDirection(rX, rY, rect, arrowLocation, arrowPadding, top, bottom, left, tipX, tipY, tipRadius) {\n var direction = '';\n var startX = rect.x;\n var startY = rect.y;\n var width = rect.x + rect.width;\n var height = rect.y + rect.height;\n tipRadius = tipRadius ? tipRadius : 0;\n if (top) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + startY + ' ' + (startX + rX) + ' ' + startY + ' ' +\n ' L' + ' ' + (width - rX) + ' ' + (startY) + ' Q ' + width + ' '\n + startY + ' ' + (width) + ' ' + (startY + rY));\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + width + ' '\n + (height) + ' ' + (width - rX) + ' ' + (height));\n if (arrowPadding !== 0) {\n direction = direction.concat(' L' + ' ' + (arrowLocation.x + arrowPadding / 2) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (tipX + tipRadius) + ' ' + (height + arrowPadding - tipRadius));\n direction += ' Q' + ' ' + (tipX) + ' ' + (height + arrowPadding) + ' ' + (tipX - tipRadius) +\n ' ' + (height + arrowPadding - tipRadius);\n }\n if ((arrowLocation.x - arrowPadding / 2) > startX) {\n direction = direction.concat(' L' + ' ' + (arrowLocation.x - arrowPadding / 2) + ' ' + height +\n ' L' + ' ' + (startX + rX) + ' ' + height + ' Q ' + startX + ' '\n + height + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n if (arrowPadding === 0) {\n direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + height + ' Q ' + startX + ' '\n + height + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n direction = direction.concat(' L' + ' ' + (startX) + ' ' + (height + rY) + ' z');\n }\n }\n }\n else if (bottom) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + (startY) + ' ' + (startX + rX) + ' ' + (startY) + ' L' + ' ' + (arrowLocation.x - arrowPadding / 2) + ' ' + (startY));\n direction = direction.concat(' L' + ' ' + (tipX - tipRadius) + ' ' + (arrowLocation.y + tipRadius));\n direction += ' Q' + ' ' + (tipX) + ' ' + (arrowLocation.y) + ' ' + (tipX + tipRadius) + ' ' + (arrowLocation.y + tipRadius);\n direction = direction.concat(' L' + ' ' + (arrowLocation.x + arrowPadding / 2) + ' ' + (startY) + ' L' + ' '\n + (width - rX) + ' ' + (startY) + ' Q ' + (width) + ' ' + (startY) + ' ' + (width) + ' ' + (startY + rY));\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + (width) + ' '\n + (height) + ' ' + (width - rX) + ' ' + (height) +\n ' L' + ' ' + (startX + rX) + ' ' + (height) + ' Q ' + (startX) + ' '\n + (height) + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else if (left) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + (startY) + ' ' + (startX + rX) + ' ' + (startY));\n direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (startY) + ' Q ' + (width) + ' '\n + (startY) + ' ' + (width) + ' ' + (startY + rY) + ' L' + ' ' + (width) + ' ' + (arrowLocation.y - arrowPadding / 2));\n direction = direction.concat(' L' + ' ' + (width + arrowPadding - tipRadius) + ' ' + (tipY - tipRadius));\n direction += ' Q ' + (width + arrowPadding) + ' ' + (tipY) + ' ' + (width + arrowPadding - tipRadius) + ' ' + (tipY + tipRadius);\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (arrowLocation.y + arrowPadding / 2) +\n ' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + width + ' ' + (height) + ' ' + (width - rX) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + (height) + ' Q ' + startX + ' '\n + (height) + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n direction = direction.concat('M' + ' ' + (startX + rX) + ' ' + (startY) + ' Q ' + (startX) + ' '\n + (startY) + ' ' + (startX) + ' ' + (startY + rY) + ' L' + ' ' + (startX) + ' ' + (arrowLocation.y - arrowPadding / 2));\n direction = direction.concat(' L' + ' ' + (startX - arrowPadding + tipRadius) + ' ' + (tipY - tipRadius));\n direction += ' Q ' + (startX - arrowPadding) + ' ' + (tipY) + ' ' + (startX - arrowPadding + tipRadius) + ' ' + (tipY + tipRadius);\n direction = direction.concat(' L' + ' ' + (startX) + ' ' + (arrowLocation.y + arrowPadding / 2) +\n ' L' + ' ' + (startX) + ' ' + (height - rY) + ' Q ' + startX + ' '\n + (height) + ' ' + (startX + rX) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (height) + ' Q ' + width + ' '\n + (height) + ' ' + (width) + ' ' + (height - rY) +\n ' L' + ' ' + (width) + ' ' + (startY + rY) + ' Q ' + width + ' '\n + (startY) + ' ' + (width - rX) + ' ' + (startY) + ' z');\n }\n return direction;\n}\n/** @private */\nexport function textElement(options, font, color, parent, isMinus) {\n if (isMinus === void 0) { isMinus = false; }\n var renderOptions = {};\n var htmlObject;\n var tspanElement;\n var renderer = new SvgRenderer('');\n var text;\n var height;\n renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'fill': color,\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight,\n 'text-anchor': options.anchor,\n 'transform': options.transform,\n 'opacity': font.opacity,\n 'dominant-baseline': options.baseLine\n };\n text = typeof options.text === 'string' ? options.text : isMinus ? options.text[options.text.length - 1] : options.text[0];\n htmlObject = renderer.createText(renderOptions, text);\n if (typeof options.text !== 'string' && options.text.length > 1) {\n for (var i = 1, len = options.text.length; i < len; i++) {\n height = (measureText(options.text[i], font).height);\n tspanElement = renderer.createTSpan({\n 'x': options.x, 'id': options.id,\n 'y': (options.y) + ((isMinus) ? -(i * height) : (i * height))\n }, isMinus ? options.text[options.text.length - (i + 1)] : options.text[i]);\n htmlObject.appendChild(tspanElement);\n }\n }\n parent.appendChild(htmlObject);\n return htmlObject;\n}\n/**\n * Method to calculate the width and height of the chart\n */\nexport function calculateSize(chart) {\n var containerWidth = chart.element.clientWidth;\n var containerHeight = chart.element.clientHeight;\n chart.availableSize = new Size(stringToNumber(chart.width, containerWidth) || containerWidth || 600, stringToNumber(chart.height, containerHeight) || containerHeight || 450);\n}\nexport function createSvg(chart) {\n chart.renderer = new SvgRenderer(chart.element.id);\n calculateSize(chart);\n chart.svgObject = chart.renderer.createSvg({\n id: chart.element.id + '_svg',\n width: chart.availableSize.width,\n height: chart.availableSize.height\n });\n}\n/**\n * To calculate chart title and height\n * @param title\n * @param style\n * @param width\n */\nexport function getTitle(title, style, width) {\n var titleCollection = [];\n switch (style.textOverflow) {\n case 'Wrap':\n titleCollection = textWrap(title, width, style);\n break;\n case 'Trim':\n titleCollection.push(textTrim(width, title, style));\n break;\n default:\n titleCollection.push(title);\n break;\n }\n return titleCollection;\n}\n/**\n * Method to calculate x position of title\n */\nexport function titlePositionX(chartSize, leftPadding, rightPadding, titleStyle) {\n var positionX;\n if (titleStyle.textAlignment === 'Near') {\n positionX = leftPadding;\n }\n else if (titleStyle.textAlignment === 'Center') {\n positionX = chartSize.width / 2;\n }\n else {\n positionX = chartSize.width - rightPadding;\n }\n return positionX;\n}\n/**\n * Method to find new text and element size based on textOverflow\n */\nexport function textWrap(currentLabel, maximumWidth, font) {\n var textCollection = currentLabel.split(' ');\n var label = '';\n var labelCollection = [];\n var text;\n for (var i = 0, len = textCollection.length; i < len; i++) {\n text = textCollection[i];\n if (measureText(label.concat(text), font).width < maximumWidth) {\n label = label.concat((label === '' ? '' : ' ') + text);\n }\n else {\n if (label !== '') {\n labelCollection.push(textTrim(maximumWidth, label, font));\n label = text;\n }\n else {\n labelCollection.push(textTrim(maximumWidth, text, font));\n text = '';\n }\n }\n if (label && i === len - 1) {\n labelCollection.push(textTrim(maximumWidth, label, font));\n }\n }\n return labelCollection;\n}\n/** @private */\nvar CustomizeOption = /** @class */ (function () {\n function CustomizeOption(id) {\n this.id = id;\n }\n return CustomizeOption;\n}());\nexport { CustomizeOption };\n/** @private */\nvar StackValues = /** @class */ (function () {\n function StackValues(startValue, endValue) {\n this.startValues = startValue;\n this.endValues = endValue;\n }\n return StackValues;\n}());\nexport { StackValues };\n/** @private */\nvar TextOption = /** @class */ (function (_super) {\n __extends(TextOption, _super);\n function TextOption(id, x, y, anchor, text, transform, baseLine) {\n if (transform === void 0) { transform = ''; }\n var _this = _super.call(this, id) || this;\n _this.transform = '';\n _this.baseLine = 'auto';\n _this.x = x;\n _this.y = y;\n _this.anchor = anchor;\n _this.text = text;\n _this.transform = transform;\n _this.baseLine = baseLine;\n return _this;\n }\n return TextOption;\n}(CustomizeOption));\nexport { TextOption };\n/** @private */\nvar PathOption = /** @class */ (function (_super) {\n __extends(PathOption, _super);\n function PathOption(id, fill, width, color, opacity, dashArray, d) {\n var _this = _super.call(this, id) || this;\n _this.opacity = opacity;\n _this.fill = fill;\n _this.stroke = color;\n _this['stroke-width'] = width;\n _this['stroke-dasharray'] = dashArray;\n _this.d = d;\n return _this;\n }\n return PathOption;\n}(CustomizeOption));\nexport { PathOption };\n/** @private */\nvar RectOption = /** @class */ (function (_super) {\n __extends(RectOption, _super);\n function RectOption(id, fill, border, opacity, rect, rx, ry, transform, dashArray) {\n var _this = _super.call(this, id, fill, border.width, border.color, opacity, dashArray) || this;\n _this.y = rect.y;\n _this.x = rect.x;\n _this.height = rect.height;\n _this.width = rect.width;\n _this.rx = rx ? rx : 0;\n _this.ry = ry ? ry : 0;\n _this.transform = transform ? transform : '';\n return _this;\n }\n return RectOption;\n}(PathOption));\nexport { RectOption };\n/** @private */\nvar CircleOption = /** @class */ (function (_super) {\n __extends(CircleOption, _super);\n function CircleOption(id, fill, border, opacity, cx, cy, r) {\n var _this = _super.call(this, id, fill, border.width, border.color, opacity) || this;\n _this.cy = cy;\n _this.cx = cx;\n _this.r = r;\n return _this;\n }\n return CircleOption;\n}(PathOption));\nexport { CircleOption };\n/** @private */\nvar PolygonOption = /** @class */ (function () {\n function PolygonOption(id, points, fill) {\n this.id = id;\n this.points = points;\n this.fill = fill;\n }\n return PolygonOption;\n}());\nexport { PolygonOption };\n/** @private */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/** @private */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\n/** @private */\nvar ChartLocation = /** @class */ (function () {\n function ChartLocation(x, y) {\n this.x = x;\n this.y = y;\n }\n return ChartLocation;\n}());\nexport { ChartLocation };\n/** @private */\nvar Thickness = /** @class */ (function () {\n function Thickness(left, right, top, bottom) {\n this.left = left;\n this.right = right;\n this.top = top;\n this.bottom = bottom;\n }\n return Thickness;\n}());\nexport { Thickness };\n/** @private */\nvar ColorValue = /** @class */ (function () {\n function ColorValue(r, g, b) {\n this.r = r;\n this.g = g;\n this.b = b;\n }\n return ColorValue;\n}());\nexport { ColorValue };\n/** @private */\nvar PointData = /** @class */ (function () {\n function PointData(point, series, index) {\n if (index === void 0) { index = 0; }\n this.point = point;\n this.series = series;\n this.lierIndex = index;\n }\n return PointData;\n}());\nexport { PointData };\n/** @private */\nvar AccPointData = /** @class */ (function () {\n function AccPointData(point, series, index) {\n if (index === void 0) { index = 0; }\n this.point = point;\n this.series = series;\n }\n return AccPointData;\n}());\nexport { AccPointData };\n/** @private */\nvar ControlPoints = /** @class */ (function () {\n function ControlPoints(controlPoint1, controlPoint2) {\n this.controlPoint1 = controlPoint1;\n this.controlPoint2 = controlPoint2;\n }\n return ControlPoints;\n}());\nexport { ControlPoints };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * AccumulationChart base file\n */\nimport { Property, ChildProperty, Complex, createElement } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { Border, Font, Animation, EmptyPointSettings, Connector } from '../../common/model/base';\nimport { Rect, stringToNumber, PathOption } from '../../common/utils/helper';\nimport { seriesRender, pointRender } from '../../common/model/constants';\nimport { getSeriesColor } from '../../common/model/theme';\nimport { getElement, firstToLowerCase } from '../../common/utils/helper';\n/**\n * Annotation for accumulation series\n */\nvar AccumulationAnnotationSettings = /** @class */ (function (_super) {\n __extends(AccumulationAnnotationSettings, _super);\n function AccumulationAnnotationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], AccumulationAnnotationSettings.prototype, \"content\", void 0);\n __decorate([\n Property('0')\n ], AccumulationAnnotationSettings.prototype, \"x\", void 0);\n __decorate([\n Property('0')\n ], AccumulationAnnotationSettings.prototype, \"y\", void 0);\n __decorate([\n Property('Pixel')\n ], AccumulationAnnotationSettings.prototype, \"coordinateUnits\", void 0);\n __decorate([\n Property('Chart')\n ], AccumulationAnnotationSettings.prototype, \"region\", void 0);\n __decorate([\n Property('Middle')\n ], AccumulationAnnotationSettings.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property('Center')\n ], AccumulationAnnotationSettings.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property(null)\n ], AccumulationAnnotationSettings.prototype, \"description\", void 0);\n return AccumulationAnnotationSettings;\n}(ChildProperty));\nexport { AccumulationAnnotationSettings };\n/**\n * Configures the dataLabel in accumulation chart.\n */\nvar AccumulationDataLabelSettings = /** @class */ (function (_super) {\n __extends(AccumulationDataLabelSettings, _super);\n function AccumulationDataLabelSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], AccumulationDataLabelSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], AccumulationDataLabelSettings.prototype, \"name\", void 0);\n __decorate([\n Property('transparent')\n ], AccumulationDataLabelSettings.prototype, \"fill\", void 0);\n __decorate([\n Property('Inside')\n ], AccumulationDataLabelSettings.prototype, \"position\", void 0);\n __decorate([\n Property(5)\n ], AccumulationDataLabelSettings.prototype, \"rx\", void 0);\n __decorate([\n Property(5)\n ], AccumulationDataLabelSettings.prototype, \"ry\", void 0);\n __decorate([\n Complex({ width: null, color: null }, Border)\n ], AccumulationDataLabelSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ size: '11px', color: null }, Font)\n ], AccumulationDataLabelSettings.prototype, \"font\", void 0);\n __decorate([\n Complex({}, Connector)\n ], AccumulationDataLabelSettings.prototype, \"connectorStyle\", void 0);\n __decorate([\n Property(null)\n ], AccumulationDataLabelSettings.prototype, \"template\", void 0);\n return AccumulationDataLabelSettings;\n}(ChildProperty));\nexport { AccumulationDataLabelSettings };\n/**\n * Points model for the series.\n */\nvar AccPoints = /** @class */ (function () {\n function AccPoints() {\n this.visible = true;\n this.symbolLocation = null;\n /** @private */\n this.region = null;\n /** @private */\n this.labelRegion = null;\n /** @private */\n this.labelVisible = true;\n this.regions = null;\n }\n return AccPoints;\n}());\nexport { AccPoints };\n/**\n * Configures the series in accumulation chart.\n */\nvar AccumulationSeries = /** @class */ (function (_super) {\n __extends(AccumulationSeries, _super);\n function AccumulationSeries() {\n /**\n * Specifies the dataSource for the series. It can be an array of JSON objects or an instance of DataManager.\n * ```html\n *
\n * ```\n * ```typescript\n * let dataManager: DataManager = new DataManager({\n * url: 'http://mvc.syncfusion.com/Services/Northwnd.svc/Tasks/'\n * });\n * let query: Query = new Query().take(50).where('Estimate', 'greaterThan', 0, false);\n * let pie: AccumulationChart = new AccumulationChart({\n * ...\n * series: [{\n * dataSource: dataManager,\n * xName: 'Id',\n * yName: 'Estimate',\n * query: query\n * }],\n * ...\n * });\n * pie.appendTo('#Pie');\n * ```\n * @default ''\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.points = [];\n /** @private */\n _this.sumOfPoints = 0;\n /** @private */\n _this.isRectSeries = true;\n /** @private */\n _this.clipRect = new Rect(0, 0, 0, 0);\n return _this;\n }\n /** @private To refresh the Datamanager for series */\n AccumulationSeries.prototype.refreshDataManager = function (accumulation) {\n var _this = this;\n if (isNullOrUndefined(this.query)) {\n this.dataManagerSuccess({ result: this.dataSource, count: this.dataSource.length }, accumulation);\n return;\n }\n var dataManager = this.dataModule.getData(this.dataModule.generateQuery().requiresCount());\n dataManager.then(function (e) { return _this.dataManagerSuccess(e, accumulation); });\n };\n /**\n * To get points on dataManager is success\n * @private\n */\n AccumulationSeries.prototype.dataManagerSuccess = function (e, accumulation) {\n var argsData = {\n name: seriesRender, series: this, data: e.result,\n };\n accumulation.trigger(seriesRender, argsData);\n this.resultData = e.result;\n this.getPoints(e.result, accumulation);\n if (++accumulation.seriesCounts === accumulation.visibleSeries.length) {\n accumulation.refreshChart();\n }\n };\n /** @private To find points from result data */\n AccumulationSeries.prototype.getPoints = function (result, accumulation) {\n var length = Object.keys(result).length;\n this.sumOfPoints = 0;\n if (length === 0) {\n return null;\n }\n this.findSumOfPoints(result);\n this.points = [];\n this.sumOfClub = 0;\n var point;\n var colors = this.palettes.length ? this.palettes : getSeriesColor(accumulation.theme);\n var clubValue = stringToNumber(this.groupTo, this.sumOfPoints);\n for (var i = 0; i < length; i++) {\n point = this.setPoints(result, i, colors);\n var currentY = point.y;\n if (!this.isClub(point, clubValue)) {\n if (isNullOrUndefined(point.y)) {\n point.visible = false;\n }\n this.pushPoints(point, colors);\n }\n }\n this.lastGroupTo = this.groupTo;\n if (this.sumOfClub > 0) {\n var clubPoint = new AccPoints();\n clubPoint.x = 'Others';\n clubPoint.y = this.sumOfClub;\n clubPoint.text = clubPoint.originalText = clubPoint.x + ': ' + this.sumOfClub;\n this.pushPoints(clubPoint, colors);\n }\n };\n /**\n * Method to set point index and color\n */\n AccumulationSeries.prototype.pushPoints = function (point, colors) {\n point.index = this.points.length;\n point.color = point.color || colors[point.index % colors.length];\n this.points.push(point);\n };\n /**\n * Method to find club point\n */\n AccumulationSeries.prototype.isClub = function (point, clubValue) {\n if (Math.abs(point.y) <= clubValue && !isNullOrUndefined(clubValue)) {\n this.sumOfClub += Math.abs(point.y);\n return true;\n }\n return false;\n };\n /**\n * Method to find sum of points in the series\n */\n AccumulationSeries.prototype.findSumOfPoints = function (result) {\n var length = Object.keys(result).length;\n for (var i = 0; i < length; i++) {\n if (!isNullOrUndefined(result[i][this.yName])) {\n this.sumOfPoints += Math.abs(result[i][this.yName]);\n }\n }\n };\n /**\n * Method to set points x, y and text from data source\n */\n AccumulationSeries.prototype.setPoints = function (data, i, colors) {\n var point = new AccPoints();\n point.x = getValue(this.xName, data[i]);\n point.y = getValue(this.yName, data[i]);\n point.color = getValue(this.pointColorMapping, data[i]);\n point.text = point.originalText = getValue(this.dataLabel.name || '', data[i]);\n this.setAccEmptyPoint(point, i, data, colors);\n return point;\n };\n /**\n * Method render the series elements for accumulation chart\n * @private\n */\n AccumulationSeries.prototype.renderSeries = function (accumulation) {\n var seriesGroup = accumulation.renderer.createGroup({ id: accumulation.element.id + '_Series_' + this.index });\n this.renderPoints(accumulation, seriesGroup);\n var datalabelGroup;\n if (accumulation.accumulationDataLabelModule && this.dataLabel.visible) {\n datalabelGroup = accumulation.renderer.createGroup({ id: accumulation.element.id + '_datalabel_Series_' + this.index });\n datalabelGroup.style.visibility =\n (this.animation.enable && accumulation.animateSeries && this.type === 'Pie') ? 'hidden' : 'visible';\n this.renderDataLabel(accumulation, datalabelGroup);\n }\n if (this.type === 'Pie') {\n this.findMaxBounds(this.labelBound, this.accumulationBound);\n accumulation.pieSeriesModule.animateSeries(accumulation, this.animation, this, seriesGroup);\n }\n if (accumulation.accumulationLegendModule) {\n this.labelBound.x -= accumulation.explodeDistance;\n this.labelBound.y -= accumulation.explodeDistance;\n this.labelBound.height += (accumulation.explodeDistance - this.labelBound.y);\n this.labelBound.width += (accumulation.explodeDistance - this.labelBound.x);\n }\n };\n /**\n * Method render the points elements for accumulation chart series.\n */\n AccumulationSeries.prototype.renderPoints = function (accumulation, seriesGroup) {\n var pointId = accumulation.element.id + '_Series_' + this.index + '_Point_';\n var option;\n for (var _i = 0, _a = this.points; _i < _a.length; _i++) {\n var point = _a[_i];\n var argsData = {\n cancel: false, name: pointRender, series: this, point: point, fill: point.color,\n border: this.isEmpty(point) ? { width: this.emptyPointSettings.border.width, color: this.emptyPointSettings.border.color } :\n { width: this.border.width, color: this.border.color }\n };\n accumulation.trigger(pointRender, argsData);\n point.color = argsData.fill;\n if (point.visible) {\n option = new PathOption(pointId + point.index, point.color, argsData.border.width || 1, argsData.border.color || point.color, 1, '', '');\n accumulation[(firstToLowerCase(this.type) + 'SeriesModule')].\n renderPoint(point, this, accumulation, option);\n seriesGroup.appendChild(accumulation.renderer.drawPath(option));\n }\n }\n accumulation.getSeriesElement().appendChild(seriesGroup);\n };\n /**\n * Method render the datalabel elements for accumulation chart.\n */\n AccumulationSeries.prototype.renderDataLabel = function (accumulation, datalabelGroup) {\n accumulation.accumulationDataLabelModule.findAreaRect();\n var element = createElement('div', {\n id: accumulation.element.id + '_Series_0' + '_DataLabelCollections'\n });\n for (var _i = 0, _a = this.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (point.visible) {\n accumulation.accumulationDataLabelModule.renderDataLabel(point, this.dataLabel, datalabelGroup, this.points, this.index, element);\n }\n }\n if (this.dataLabel.template !== null && element.childElementCount) {\n getElement(accumulation.element.id + '_Secondary_Element').appendChild(element);\n }\n accumulation.getSeriesElement().appendChild(datalabelGroup);\n };\n /**\n * To find maximum bounds for smart legend placing\n * @private\n */\n AccumulationSeries.prototype.findMaxBounds = function (totalbound, bound) {\n totalbound.x = bound.x < totalbound.x ? bound.x : totalbound.x;\n totalbound.y = bound.y < totalbound.y ? bound.y : totalbound.y;\n totalbound.height = (bound.y + bound.height) > totalbound.height ? (bound.y + bound.height) : totalbound.height;\n totalbound.width = (bound.x + bound.width) > totalbound.width ? (bound.x + bound.width) : totalbound.width;\n };\n /**\n * To set empty point value for null points\n * @private\n */\n AccumulationSeries.prototype.setAccEmptyPoint = function (point, i, data, colors) {\n if (!isNullOrUndefined(point.y)) {\n return null;\n }\n point.color = this.emptyPointSettings.fill || point.color;\n switch (this.emptyPointSettings.mode) {\n case 'Zero':\n point.y = 0;\n point.visible = true;\n break;\n case 'Average':\n var previous = data[i - 1] ? (data[i - 1][this.yName] || 0) : 0;\n var next = data[i + 1] ? (data[i + 1][this.yName] || 0) : 0;\n point.y = (Math.abs(previous) + Math.abs(next)) / 2;\n this.sumOfPoints += point.y;\n point.visible = true;\n break;\n case 'Drop':\n point.visible = false;\n break;\n }\n };\n /**\n * To find point is empty\n */\n AccumulationSeries.prototype.isEmpty = function (point) {\n return point.color === this.emptyPointSettings.fill;\n };\n __decorate([\n Property('')\n ], AccumulationSeries.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], AccumulationSeries.prototype, \"query\", void 0);\n __decorate([\n Property('')\n ], AccumulationSeries.prototype, \"xName\", void 0);\n __decorate([\n Property('')\n ], AccumulationSeries.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], AccumulationSeries.prototype, \"yName\", void 0);\n __decorate([\n Property(true)\n ], AccumulationSeries.prototype, \"visible\", void 0);\n __decorate([\n Complex({ color: null, width: 0 }, Border)\n ], AccumulationSeries.prototype, \"border\", void 0);\n __decorate([\n Complex(null, Animation)\n ], AccumulationSeries.prototype, \"animation\", void 0);\n __decorate([\n Property('SeriesType')\n ], AccumulationSeries.prototype, \"legendShape\", void 0);\n __decorate([\n Property('')\n ], AccumulationSeries.prototype, \"pointColorMapping\", void 0);\n __decorate([\n Property(null)\n ], AccumulationSeries.prototype, \"selectionStyle\", void 0);\n __decorate([\n Property(null)\n ], AccumulationSeries.prototype, \"groupTo\", void 0);\n __decorate([\n Complex({}, AccumulationDataLabelSettings)\n ], AccumulationSeries.prototype, \"dataLabel\", void 0);\n __decorate([\n Property([])\n ], AccumulationSeries.prototype, \"palettes\", void 0);\n __decorate([\n Property(0)\n ], AccumulationSeries.prototype, \"startAngle\", void 0);\n __decorate([\n Property(360)\n ], AccumulationSeries.prototype, \"endAngle\", void 0);\n __decorate([\n Property('80%')\n ], AccumulationSeries.prototype, \"radius\", void 0);\n __decorate([\n Property('0')\n ], AccumulationSeries.prototype, \"innerRadius\", void 0);\n __decorate([\n Property('Pie')\n ], AccumulationSeries.prototype, \"type\", void 0);\n __decorate([\n Property(true)\n ], AccumulationSeries.prototype, \"enableTooltip\", void 0);\n __decorate([\n Property(false)\n ], AccumulationSeries.prototype, \"explode\", void 0);\n __decorate([\n Property('30%')\n ], AccumulationSeries.prototype, \"explodeOffset\", void 0);\n __decorate([\n Property(false)\n ], AccumulationSeries.prototype, \"explodeAll\", void 0);\n __decorate([\n Property(null)\n ], AccumulationSeries.prototype, \"explodeIndex\", void 0);\n __decorate([\n Complex({ mode: 'Drop' }, EmptyPointSettings)\n ], AccumulationSeries.prototype, \"emptyPointSettings\", void 0);\n __decorate([\n Property(0)\n ], AccumulationSeries.prototype, \"gapRatio\", void 0);\n __decorate([\n Property('80%')\n ], AccumulationSeries.prototype, \"width\", void 0);\n __decorate([\n Property('80%')\n ], AccumulationSeries.prototype, \"height\", void 0);\n __decorate([\n Property('20%')\n ], AccumulationSeries.prototype, \"neckWidth\", void 0);\n __decorate([\n Property('20%')\n ], AccumulationSeries.prototype, \"neckHeight\", void 0);\n __decorate([\n Property('Linear')\n ], AccumulationSeries.prototype, \"pyramidMode\", void 0);\n __decorate([\n Property(1)\n ], AccumulationSeries.prototype, \"opacity\", void 0);\n return AccumulationSeries;\n}(ChildProperty));\nexport { AccumulationSeries };\n/**\n * method to get series from index\n * @private\n */\nexport function getSeriesFromIndex(index, visibleSeries) {\n for (var _i = 0, visibleSeries_1 = visibleSeries; _i < visibleSeries_1.length; _i++) {\n var series = visibleSeries_1[_i];\n if (index === series.index) {\n return series;\n }\n }\n return visibleSeries[0];\n}\n/**\n * method to get point from index\n * @private\n */\nexport function pointByIndex(index, points) {\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n if (point.index === index) {\n return point;\n }\n }\n return null;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Specifies Circular-Gauge Helper methods\n */\nimport { SvgRenderer, compile as templateComplier } from '@syncfusion/ej2-base';\nimport { merge } from '@syncfusion/ej2-base';\nimport { createElement, remove, setStyleAttribute } from '@syncfusion/ej2-base';\n/**\n * Function to measure the height and width of the text.\n * @param {string} text\n * @param {FontModel} font\n * @param {string} id\n * @returns Size\n * @private\n */\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('gauge-measuretext');\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'gauge-measuretext' });\n document.body.appendChild(htmlObject);\n }\n var style = 'position: absolute; visibility: hidden;' +\n ';left: 0; top: -100; white-space: nowrap;' + getFontStyle(font);\n htmlObject.innerHTML = text;\n htmlObject.setAttribute('style', style);\n return new Size(htmlObject.clientWidth, htmlObject.clientHeight);\n}\n/**\n * Function to find number from string\n * * @returns number\n * @private\n */\nexport function toPixel(value, maxDimension) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (maxDimension / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Function to get the style from FontModel.\n * @returns string\n * @private\n */\nexport function getFontStyle(font) {\n var style = '';\n style = 'font-size:' + font.size +\n '; font-style:' + font.fontStyle + '; font-weight:' + font.fontWeight +\n '; font-family:' + font.fontFamily + ';opacity:' + font.opacity +\n '; color:' + font.color + ';';\n return style;\n}\n/**\n * Function to set style to the element.\n * @private\n */\nexport function setStyles(element, fill, border) {\n setStyleAttribute(element, {\n 'stroke': border.color, 'stroke-width': border.width,\n 'fill': fill\n });\n}\n/**\n * Function to measure the element rect.\n * @returns ClientRect\n * @private\n */\nexport function measureElementRect(element) {\n var bounds;\n document.body.appendChild(element);\n bounds = element.getBoundingClientRect();\n removeElement(element.id);\n return bounds;\n}\n/**\n * Function to convert the number from string.\n * @returns number\n * @private\n */\nexport function stringToNumber(value, containerSize) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Function to create the text element.\n * @returns Element\n * @private\n */\nexport function textElement(options, font, color, parent, styles) {\n var renderOptions = {};\n var htmlObject;\n var renderer = new SvgRenderer('');\n var style = styles + ' font-size:' + font.size + '; font-style:' + font.fontStyle +\n ' ; font-weight:' + font.fontWeight + '; font-family:' + font.fontFamily + ';';\n renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'fill': color,\n 'text-anchor': options.anchor,\n 'transform': options.transform,\n 'opacity': font.opacity,\n 'dominant-baseline': options.baseLine,\n 'style': style\n };\n htmlObject = renderer.createText(renderOptions, options.text);\n parent.appendChild(htmlObject);\n return htmlObject;\n}\n/**\n * Function to append the path to the element.\n * @returns Element\n * @private\n */\nexport function appendPath(options, element, gauge, functionName) {\n functionName = functionName ? functionName : 'Path';\n var htmlObject = gauge.renderer['draw' + functionName](options);\n htmlObject.setAttribute('transform', options.transform);\n htmlObject.setAttribute('style', options.style);\n element.appendChild(htmlObject);\n return htmlObject;\n}\n/**\n * Function to calculate the sum of array values.\n * @returns number\n * @private\n */\nexport function calculateSum(from, to, values) {\n var sum = 0;\n var length = values.length;\n for (; from < length; from++) {\n sum += values[from];\n }\n return sum;\n}\n/**\n * Function to calculate the value for linear animation effect\n * @param currentTime\n * @param startValue\n * @param endValue\n * @param duration\n * @private\n */\nexport function linear(currentTime, startValue, endValue, duration) {\n return -endValue * Math.cos(currentTime / duration * (Math.PI / 2)) + endValue + startValue;\n}\n/**\n * Function to get the angle from value for circular gauge.\n * @returns number\n * @private\n */\nexport function getAngleFromValue(value, maximumValue, minimumValue, startAngle, endAngle, isClockWise) {\n var angle;\n endAngle -= isCompleteAngle(startAngle, endAngle) ? 0.0001 : 0;\n startAngle -= 90;\n endAngle -= 90;\n if (isClockWise) {\n angle = ((value - minimumValue) * (getDegree(startAngle, endAngle) / (maximumValue - minimumValue))) + startAngle;\n }\n else {\n angle = endAngle - ((value - minimumValue) * (getDegree(startAngle, endAngle) / (maximumValue - minimumValue)));\n angle = angle < 0 ? 360 + angle : angle;\n }\n angle = Math.round(angle) >= 360 ? (angle - 360) : Math.round(angle) < 0 ? (360 + angle) : angle;\n return angle;\n}\n/**\n * Function to get the degree for circular gauge.\n * @returns number\n * @private\n */\nexport function getDegree(startAngle, endAngle) {\n var degree = endAngle - startAngle;\n return degree < 0 ? (degree + 360) : degree;\n}\n/**\n * Function to get the value from angle for circular gauge.\n * @returns number\n * @private\n */\nexport function getValueFromAngle(angle, maximumValue, minimumValue, startAngle, endAngle, isClockWise) {\n endAngle -= isCompleteAngle(startAngle, endAngle) ? 0.0001 : 0;\n angle = angle < startAngle ? (angle + 360) : angle;\n if (isClockWise) {\n return (((angle - startAngle) / getDegree(startAngle, endAngle)) * (maximumValue - minimumValue)) + minimumValue;\n }\n else {\n return maximumValue - ((((angle - startAngle) / getDegree(startAngle, endAngle)) * (maximumValue - minimumValue)) + minimumValue);\n }\n}\n/**\n * Function to check whether it's a complete circle for circular gauge.\n * @returns boolean\n * @private\n */\nexport function isCompleteAngle(startAngle, endAngle) {\n var totalAngle = endAngle - startAngle;\n totalAngle = totalAngle <= 0 ? (totalAngle + 360) : totalAngle;\n return Math.floor(totalAngle / 360) !== 0;\n}\n/**\n * Function to get angle from location for circular gauge.\n * @returns number\n * @private\n */\nexport function getAngleFromLocation(center, point) {\n var angle = Math.atan2((point.y - center.y), (point.x - center.x));\n angle = Math.round((angle < 0 ? (6.283 + angle) : angle) * (180 / Math.PI)) - 270;\n angle += angle < 0 ? 360 : 0;\n return angle;\n}\n/**\n * Function to get the location from angle for circular gauge.\n * @returns GaugeLocation\n * @private\n */\nexport function getLocationFromAngle(degree, radius, center) {\n var radian = (degree * Math.PI) / 180;\n return new GaugeLocation(Math.cos(radian) * radius + center.x, Math.sin(radian) * radius + center.y);\n}\n/**\n * Function to get the path direction of the circular gauge.\n * @returns string\n * @private\n */\nexport function getPathArc(center, start, end, radius, startWidth, endWidth) {\n end -= isCompleteAngle(start, end) ? 0.0001 : 0;\n var degree = getDegree(start, end);\n var startRadius = radius - startWidth;\n var endRadius = radius - endWidth;\n var arcRadius = radius - ((startWidth + endWidth) / 2);\n if (startWidth !== undefined && endWidth !== undefined) {\n return getRangePath(getLocationFromAngle(start, radius, center), getLocationFromAngle(end, radius, center), getLocationFromAngle(start, startRadius, center), getLocationFromAngle(end, endRadius, center), radius, arcRadius, arcRadius, (degree < 180) ? 0 : 1);\n }\n else {\n return getCirclePath(getLocationFromAngle(start, radius, center), getLocationFromAngle(end, radius, center), radius, (degree < 180) ? 0 : 1);\n }\n}\n/**\n * Function to get the range path direction of the circular gauge.\n * @returns string\n * @private\n */\nexport function getRangePath(start, end, innerStart, innerEnd, radius, startRadius, endRadius, clockWise) {\n return 'M ' + start.x + ' ' + start.y +\n ' A ' + radius + ' ' + radius + ' 0 ' +\n clockWise + ' 1 ' + end.x + ' ' + end.y +\n ' L ' + innerEnd.x + ' ' + innerEnd.y +\n ' A ' + endRadius + ' ' + startRadius + ' 0 ' +\n clockWise + ' 0 ' + innerStart.x + ' ' + innerStart.y + ' Z';\n}\n/**\n * Function to calculate the complete path arc of the circular gauge.\n * @returns string\n * @private\n */\nexport function getCompleteArc(center, start, end, radius, innerRadius) {\n end -= isCompleteAngle(start, end) ? 0.0001 : 0;\n var degree = getDegree(start, end);\n return getCompletePath(center, getLocationFromAngle(start, radius, center), getLocationFromAngle(end, radius, center), radius, getLocationFromAngle(start, innerRadius, center), getLocationFromAngle(end, innerRadius, center), innerRadius, (degree < 180) ? 0 : 1);\n}\n/**\n * Function to get the circular path direction of the circular gauge.\n * @returns string\n * @private\n */\nexport function getCirclePath(start, end, radius, clockWise) {\n return 'M ' + start.x + ' ' + start.y + ' A ' + radius + ' ' +\n radius + ' 0 ' + clockWise + ' 1 ' + end.x + ' ' + end.y;\n}\n/**\n * Function to get the complete path direction of the circular gauge.\n * @returns string\n * @private\n */\nexport function getCompletePath(center, start, end, radius, innerStart, innerEnd, innerRadius, clockWise) {\n return 'M ' + start.x + ' ' + start.y + ' A ' + radius + ' ' + radius + ' 0 ' + clockWise +\n ' 1 ' + end.x + ' ' + end.y + ' L ' + innerEnd.x + ' ' + innerEnd.y + ' A ' + innerRadius +\n ' ' + innerRadius + ' 0 ' + clockWise + ',0 ' + innerStart.x + ' ' + innerStart.y + ' Z';\n}\n/**\n * Function to get element from id.\n * @returns Element\n * @private\n */\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/**\n * Function to compile the template function for circular gauge.\n * @returns Function\n * @private\n */\nexport function getTemplateFunction(template) {\n var templateFn = null;\n var e;\n try {\n if (document.querySelectorAll(template).length) {\n templateFn = templateComplier(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n templateFn = templateComplier(template);\n }\n return templateFn;\n}\n/**\n * Function to remove the element from id.\n * @private\n */\nexport function removeElement(id) {\n var element = getElement(id);\n if (element) {\n remove(element);\n }\n}\n/**\n * Function to get current point for circular gauge using element id.\n * @returns IVisiblePointer\n * @private\n */\nexport function getPointer(targetId, gauge) {\n var tempString;\n tempString = targetId.split(gauge.element.id + '_Axis_')[1];\n return {\n axisIndex: +tempString[0],\n pointerIndex: +tempString[tempString.length - 1]\n };\n}\n/**\n * Function to convert the label using formar for cirular gauge.\n * @returns string\n * @private\n */\nexport function getLabelFormat(format) {\n var customLabelFormat = format && format.match('{value}') !== null;\n var skeleton = customLabelFormat ? '' : format;\n return skeleton;\n}\n/**\n * Function to calculate the marker shape for circular gauge.\n * @returns PathOption\n * @private\n */\nexport function calculateShapes(location, shape, size, url, options) {\n var path;\n var width = size.width;\n var height = size.height;\n var locX = location.x;\n var locY = location.y;\n var x = location.x + (-width / 2);\n var y = location.y + (-height / 2);\n switch (shape) {\n case 'Circle':\n merge(options, { 'rx': width / 2, 'ry': height / 2, 'cx': locX, 'cy': locY });\n break;\n case 'Diamond':\n path = 'M' + ' ' + x + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + locY + ' Z';\n merge(options, { 'd': path });\n break;\n case 'Rectangle':\n path = 'M' + ' ' + x + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (-height / 2)) + ' Z';\n merge(options, { 'd': path });\n break;\n case 'Triangle':\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + ' ' + (locX - height) + ' ' + (locY - (width / 2)) +\n 'L' + ' ' + (locX - height) + ' ' + (locY + (width / 2)) + ' Z';\n merge(options, { 'd': path });\n break;\n case 'InvertedTriangle':\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + ' ' + (locX + height) + ' ' + (locY - (width / 2)) +\n 'L' + ' ' + (locX + height) + ' ' + (locY + (width / 2)) + ' Z';\n merge(options, { 'd': path });\n break;\n case 'Image':\n merge(options, { 'href': url, 'height': height, 'width': width, x: x, y: y });\n break;\n }\n return options;\n}\n/**\n * Function to get range color from value for circular gauge.\n * @returns string\n * @private\n */\nexport function getRangeColor(value, ranges, color) {\n var min = 0;\n var max = 0;\n var currentRange = ranges.filter(function (range) {\n min = Math.min(range.start, range.end);\n max = Math.max(range.start, range.end);\n return (value >= min && max >= value);\n });\n return currentRange.length ? currentRange[0].rangeColor : color;\n}\n/** @private */\nvar CustomizeOption = /** @class */ (function () {\n function CustomizeOption(id) {\n this.id = id;\n }\n return CustomizeOption;\n}());\nexport { CustomizeOption };\n/** @private */\nvar PathOption = /** @class */ (function (_super) {\n __extends(PathOption, _super);\n function PathOption(id, fill, width, color, opacity, dashArray, d, transform, style) {\n if (transform === void 0) { transform = ''; }\n if (style === void 0) { style = ''; }\n var _this = _super.call(this, id) || this;\n _this.opacity = opacity;\n _this.fill = fill;\n _this.stroke = color;\n _this['stroke-width'] = width;\n _this['stroke-dasharray'] = dashArray;\n _this.d = d;\n _this.transform = transform;\n _this.style = style;\n return _this;\n }\n return PathOption;\n}(CustomizeOption));\nexport { PathOption };\n/** @private */\nvar RectOption = /** @class */ (function (_super) {\n __extends(RectOption, _super);\n function RectOption(id, fill, border, opacity, rect) {\n var _this = _super.call(this, id) || this;\n _this.y = rect.y;\n _this.x = rect.x;\n _this.height = rect.height;\n _this.width = rect.width;\n _this.opacity = opacity;\n _this.fill = fill;\n _this.stroke = border.color;\n _this['stroke-width'] = border.width;\n return _this;\n }\n return RectOption;\n}(CustomizeOption));\nexport { RectOption };\n/**\n * Internal class size\n */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/** @private */\nvar GaugeLocation = /** @class */ (function () {\n function GaugeLocation(x, y) {\n this.x = x;\n this.y = y;\n }\n return GaugeLocation;\n}());\nexport { GaugeLocation };\n/** @private */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\n/** @private */\nvar TextOption = /** @class */ (function (_super) {\n __extends(TextOption, _super);\n function TextOption(id, x, y, anchor, text, transform, baseLine) {\n if (transform === void 0) { transform = ''; }\n var _this = _super.call(this, id) || this;\n _this.transform = '';\n _this.baseLine = 'auto';\n _this.x = x;\n _this.y = y;\n _this.anchor = anchor;\n _this.text = text;\n _this.transform = transform;\n _this.baseLine = baseLine;\n return _this;\n }\n return TextOption;\n}(CustomizeOption));\nexport { TextOption };\n/** @private */\nvar VisibleLabels = /** @class */ (function () {\n function VisibleLabels(text, value, size) {\n this.text = text;\n this.value = value;\n this.size = size;\n }\n return VisibleLabels;\n}());\nexport { VisibleLabels };\n","/**\n * IncrementalSearch module file\n */\nvar queryString = '';\nvar prevString = '';\nvar matches = [];\nvar activeClass = 'e-active';\n/**\n * Search and focus the list item based on key code matches with list text content\n * @param { number } keyCode - Specifies the key code which pressed on keyboard events.\n * @param { HTMLElement[]] } items - Specifies an array of HTMLElement, from which matches find has done.\n * @param { number } selectedIndex - Specifies the selected item in list item, so that search will happen\n * after selected item otherwise it will do from initial.\n * @param { boolean } ignoreCase - Specifies the case consideration when search has done.\n */\nexport function incrementalSearch(keyCode, items, selectedIndex, ignoreCase) {\n queryString += String.fromCharCode(keyCode);\n setTimeout(function () { queryString = ''; }, 1000);\n var index;\n queryString = ignoreCase ? queryString.toLowerCase() : queryString;\n if (prevString === queryString) {\n for (var i = 0; i < matches.length; i++) {\n if (matches[i].classList.contains(activeClass)) {\n index = i;\n break;\n }\n }\n index = index + 1;\n return matches[index];\n }\n else {\n var listItems = items;\n var strLength = queryString.length;\n var text = void 0;\n var item = void 0;\n selectedIndex = selectedIndex ? selectedIndex + 1 : 0;\n var i = selectedIndex;\n matches = [];\n do {\n if (i === listItems.length) {\n i = -1;\n }\n i === -1 ? index = 0 : index = i;\n item = listItems[index];\n text = ignoreCase ? item.innerText.toLowerCase() : item.innerText;\n if (text.substr(0, strLength) === queryString) {\n matches.push(listItems[index]);\n }\n i++;\n } while (i !== selectedIndex);\n prevString = queryString;\n return matches[0];\n }\n}\nexport function Search(inputVal, items, searchType, ignoreCase) {\n var listItems = items;\n ignoreCase = ignoreCase !== undefined && ignoreCase !== null ? ignoreCase : true;\n var itemData = { item: null, index: null };\n if (inputVal.length) {\n var strLength = inputVal.length;\n var queryStr = ignoreCase ? inputVal.toLocaleLowerCase() : inputVal;\n for (var i = 0, itemsData = listItems; i < itemsData.length; i++) {\n var item = itemsData[i];\n var text = (ignoreCase ? item.textContent.toLocaleLowerCase() : item.textContent).replace(/^\\s+|\\s+$/g, '');\n if ((searchType === 'Equal' && text === queryStr) || (searchType === 'StartsWith' && text.substr(0, strLength) === queryStr)) {\n itemData.item = item;\n itemData.index = i;\n return { item: item, index: i };\n }\n }\n return itemData;\n }\n return itemData;\n}\n","/**\n * Function helps to find which highlightSearch is to call based on your data.\n * @param {HTMLElement} content - Specifies an content element.\n * @param {string} query - Specifies the string to be highlighted.\n * @param {boolean} ignoreCase - Specifies the ignoreCase option.\n * @param {HightLightType} type - Specifies the type of highlight.\n */\nexport function highlightSearch(content, query, ignoreCase, type) {\n revert(content);\n if (query === '') {\n return;\n }\n else {\n var ignoreRegex = ignoreCase ? 'gim' : 'gm';\n query = /^[a-zA-Z0-9- ]*$/.test(query) ? query : query.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n var replaceQuery = type === 'StartsWith' ? '^(' + query + ')' : type === 'EndsWith' ? '(' + query + ')$' : '(' + query + ')';\n var pattern = new RegExp(replaceQuery, ignoreRegex);\n var li = content.querySelectorAll('ul li');\n for (var i = 0; i < li.length; i++) {\n var element = li[i];\n element.innerHTML = element.innerHTML.replace(pattern, '$1');\n }\n }\n}\n/**\n * Function helps to remove highlighted element based on your data.\n * @param {HTMLElement} id - Specifies an id of list data.\n */\nfunction revert(content) {\n var contentElement = content.querySelectorAll('.e-highlight');\n for (var i = contentElement.length - 1; i >= 0; i--) {\n var parent_1 = contentElement[i].parentNode;\n var text = document.createTextNode(contentElement[i].textContent);\n parent_1.replaceChild(text, contentElement[i]);\n }\n}\n","/**\n * FloatLable Moduel\n * Specifies whether to display the floating label above the input element.\n */\nimport { removeClass, addClass, detach } from '@syncfusion/ej2-base';\nimport { attributes, isNullOrUndefined, createElement } from '@syncfusion/ej2-base';\nvar FLOATLINE = 'e-float-line';\nvar FLOATTEXT = 'e-float-text';\nvar LABELTOP = 'e-label-top';\nvar LABELBOTTOM = 'e-label-bottom';\n/**\n * Function to create Float Label element.\n * @param overAllWrapper - overall wrapper of multiselect.\n * @param element - the given html element.\n * @param inputElement - specify the input wrapper.\n * @param value - Value of the MultiSelect.\n * @param floatLabelType - Specify the FloatLabel Type.\n * @param placeholder - Specify the PlaceHolder text.\n */\nexport function createFloatLabel(overAllWrapper, searchWrapper, element, inputElement, value, floatLabelType, placeholder) {\n var floatLinelement;\n var floatLabelElement;\n floatLinelement = createElement('span', { className: FLOATLINE });\n floatLabelElement = createElement('label', { className: FLOATTEXT });\n if (!isNullOrUndefined(element.id) && element.id !== '') {\n floatLabelElement.id = 'label_' + element.id.replace(/ /g, '_');\n attributes(element, { 'aria-labelledby': floatLabelElement.id });\n }\n if (!isNullOrUndefined(inputElement.placeholder) && inputElement.placeholder !== '') {\n floatLabelElement.innerHTML = inputElement.placeholder;\n inputElement.removeAttribute('placeholder');\n }\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n floatLabelElement.innerHTML = placeholder;\n }\n searchWrapper.appendChild(floatLinelement);\n searchWrapper.appendChild(floatLabelElement);\n overAllWrapper.classList.add('e-float-input');\n updateFloatLabelState(value, floatLabelElement);\n if (floatLabelType === 'Always') {\n if (floatLabelElement.classList.contains(LABELBOTTOM)) {\n removeClass([floatLabelElement], LABELBOTTOM);\n }\n addClass([floatLabelElement], LABELTOP);\n }\n}\n/**\n * Function to update status of the Float Label element.\n * @param value - Value of the MultiSelect.\n * @param label - float label element.\n */\nexport function updateFloatLabelState(value, label) {\n if (value && value.length > 0) {\n addClass([label], LABELTOP);\n removeClass([label], LABELBOTTOM);\n }\n else {\n removeClass([label], LABELTOP);\n addClass([label], LABELBOTTOM);\n }\n}\n/**\n * Function to remove Float Label element.\n * @param overAllWrapper - overall wrapper of multiselect.\n * @param componentWrapper - wrapper element of multiselect.\n * @param searchWrapper - search wrapper of multiselect.\n * @param inputElement - specify the input wrapper.\n * @param value - Value of the MultiSelect.\n * @param floatLabelType - Specify the FloatLabel Type.\n * @param placeholder - Specify the PlaceHolder text.\n */\nexport function removeFloating(overAllWrapper, componentWrapper, searchWrapper, inputElement, value, floatLabelType, placeholder) {\n var placeholderElement = componentWrapper.querySelector('.' + FLOATTEXT);\n var floatLine = componentWrapper.querySelector('.' + FLOATLINE);\n var placeholderText;\n if (!isNullOrUndefined(placeholderElement)) {\n placeholderText = placeholderElement.innerText;\n detach(searchWrapper.querySelector('.' + FLOATTEXT));\n setPlaceHolder(value, inputElement, placeholderText);\n if (!isNullOrUndefined(floatLine)) {\n detach(searchWrapper.querySelector('.' + FLOATLINE));\n }\n }\n else {\n placeholderText = (placeholder !== null) ? placeholder : '';\n setPlaceHolder(value, inputElement, placeholderText);\n }\n overAllWrapper.classList.remove('e-float-input');\n}\n/**\n * Function to set the placeholder to the element.\n * @param value - Value of the MultiSelect.\n * @param inputElement - specify the input wrapper.\n * @param placeholder - Specify the PlaceHolder text.\n */\nexport function setPlaceHolder(value, inputElement, placeholder) {\n if (value && value.length) {\n inputElement.placeholder = '';\n }\n else {\n inputElement.placeholder = placeholder;\n }\n}\n/**\n * Function for focusing the Float Element.\n * @param overAllWrapper - overall wrapper of multiselect.\n * @param componentWrapper - wrapper element of multiselect.\n */\nexport function floatLabelFocus(overAllWrapper, componentWrapper) {\n overAllWrapper.classList.add('e-input-focus');\n var label = componentWrapper.querySelector('.' + FLOATTEXT);\n if (!isNullOrUndefined(label)) {\n addClass([label], LABELTOP);\n if (label.classList.contains(LABELBOTTOM)) {\n removeClass([label], LABELBOTTOM);\n }\n }\n}\n/**\n * Function to focus the Float Label element.\n * @param overAllWrapper - overall wrapper of multiselect.\n * @param componentWrapper - wrapper element of multiselect.\n * @param value - Value of the MultiSelect.\n * @param floatLabelType - Specify the FloatLabel Type.\n * @param placeholder - Specify the PlaceHolder text.\n */\nexport function floatLabelBlur(overAllWrapper, componentWrapper, value, floatLabelType, placeholder) {\n overAllWrapper.classList.remove('e-input-focus');\n var label = componentWrapper.querySelector('.' + FLOATTEXT);\n if (value && value.length <= 0 && floatLabelType === 'Auto' && !isNullOrUndefined(label)) {\n if (label.classList.contains(LABELTOP)) {\n removeClass([label], LABELTOP);\n }\n addClass([label], LABELBOTTOM);\n }\n}\n","import { ChildProperty, compile as baseTemplateComplier, setValue } from '@syncfusion/ej2-base';\nimport { extend as baseExtend, isNullOrUndefined, getValue, classList } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, addClass, attributes, remove, createElement, removeClass } from '@syncfusion/ej2-base';\nimport { DataUtil, Query, DataManager, Predicate } from '@syncfusion/ej2-data';\nimport { Column } from '../models/column';\nimport { calculateRelativeBasedPosition, calculatePosition } from '@syncfusion/ej2-popups';\n//https://typescript.codeplex.com/discussions/401501\n/**\n * Function to check whether target object implement specific interface\n * @param {Object} target\n * @param {string} checkFor\n * @returns no\n * @hidden\n */\nexport function doesImplementInterface(target, checkFor) {\n /* tslint:disable:no-any */\n return target.prototype && checkFor in target.prototype;\n}\n/**\n * Function to get value from provided data\n * @param {string} field\n * @param {Object} data\n * @param {IColumn} column\n * @hidden\n */\nexport function valueAccessor(field, data, column) {\n field = isNullOrUndefined(field) ? '' : field;\n return getValue(field, data);\n}\n/**\n * The function used to update Dom using requestAnimationFrame.\n * @param {Function} fn - Function that contains the actual action\n * @return {Promise}\n * @hidden\n */\nexport function getUpdateUsingRaf(updateFunction, callBack) {\n requestAnimationFrame(function () {\n try {\n callBack(null, updateFunction());\n }\n catch (e) {\n callBack(e);\n }\n });\n}\n/**\n * @hidden\n */\nexport function iterateArrayOrObject(collection, predicate) {\n var result = [];\n for (var i = 0, len = collection.length; i < len; i++) {\n var pred = predicate(collection[i], i);\n if (!isNullOrUndefined(pred)) {\n result.push(pred);\n }\n }\n return result;\n}\n/** @hidden */\nexport function templateCompiler(template) {\n if (template) {\n var e = void 0;\n try {\n if (document.querySelectorAll(template).length) {\n return baseTemplateComplier(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n return baseTemplateComplier(template);\n }\n }\n return undefined;\n}\n/** @hidden */\nexport function setStyleAndAttributes(node, customAttributes) {\n var copyAttr = {};\n var literals = ['style', 'class'];\n //Dont touch the original object - make a copy\n baseExtend(copyAttr, customAttributes, {});\n if ('style' in copyAttr) {\n setStyleAttribute(node, copyAttr[literals[0]]);\n delete copyAttr[literals[0]];\n }\n if ('class' in copyAttr) {\n addClass([node], copyAttr[literals[1]]);\n delete copyAttr[literals[1]];\n }\n attributes(node, copyAttr);\n}\n/** @hidden */\nexport function extend(copied, first, second, exclude) {\n var moved = baseExtend(copied, first, second);\n Object.keys(moved).forEach(function (value, index) {\n if (exclude.indexOf(value) !== -1) {\n delete moved[value];\n }\n });\n return moved;\n}\n/** @hidden */\nexport function prepareColumns(columns, autoWidth) {\n for (var c = 0, len = columns.length; c < len; c++) {\n var column = void 0;\n if (typeof columns[c] === 'string') {\n column = new Column({ field: columns[c] });\n }\n else if (!(columns[c] instanceof Column)) {\n if (!columns[c].columns) {\n column = new Column(columns[c]);\n }\n else {\n column = new Column(columns[c]);\n columns[c].columns = prepareColumns(columns[c].columns);\n }\n }\n else {\n column = columns[c];\n }\n column.headerText = isNullOrUndefined(column.headerText) ? column.foreignKeyValue || column.field || '' : column.headerText;\n column.foreignKeyField = column.foreignKeyField || column.field;\n column.valueAccessor = (typeof column.valueAccessor === 'string' ? getValue(column.valueAccessor, window)\n : column.valueAccessor) || valueAccessor;\n column.width = autoWidth && isNullOrUndefined(column.width) ? 200 : column.width;\n if (isNullOrUndefined(column.visible)) {\n column.visible = true;\n }\n columns[c] = column;\n }\n return columns;\n}\n/** @hidden */\nexport function setCssInGridPopUp(popUp, e, className) {\n var popUpSpan = popUp.querySelector('span');\n var position = popUp.parentElement.getBoundingClientRect();\n var targetPosition = e.target.getBoundingClientRect();\n var isBottomTail;\n popUpSpan.className = className;\n popUp.style.display = '';\n isBottomTail = (isNullOrUndefined(e.clientY) ? e.changedTouches[0].clientY :\n e.clientY) > popUp.offsetHeight + 10;\n popUp.style.top = targetPosition.top - position.top +\n (isBottomTail ? -(popUp.offsetHeight + 10) : popUp.offsetHeight + 10) + 'px'; //10px for tail element\n popUp.style.left = getPopupLeftPosition(popUp, e, targetPosition, position.left) + 'px';\n if (isBottomTail) {\n popUp.querySelector('.e-downtail').style.display = '';\n popUp.querySelector('.e-uptail').style.display = 'none';\n }\n else {\n popUp.querySelector('.e-downtail').style.display = 'none';\n popUp.querySelector('.e-uptail').style.display = '';\n }\n}\n/** @hidden */\nfunction getPopupLeftPosition(popup, e, targetPosition, left) {\n var width = popup.offsetWidth / 2;\n var x = getPosition(e).x;\n if (x - targetPosition.left < width) {\n return targetPosition.left - left;\n }\n else if (targetPosition.right - x < width) {\n return targetPosition.right - left - width * 2;\n }\n else {\n return x - left - width;\n }\n}\n/** @hidden */\nexport function getActualProperties(obj) {\n if (obj instanceof ChildProperty) {\n return getValue('properties', obj);\n }\n else {\n return obj;\n }\n}\n/** @hidden */\nexport function parentsUntil(elem, selector, isID) {\n var parent = elem;\n while (parent) {\n if (isID ? parent.id === selector : parent.classList.contains(selector)) {\n break;\n }\n parent = parent.parentElement;\n }\n return parent;\n}\n/** @hidden */\nexport function getElementIndex(element, elements) {\n var index = -1;\n for (var i = 0, len = elements.length; i < len; i++) {\n if (elements[i].isEqualNode(element)) {\n index = i;\n break;\n }\n }\n return index;\n}\n/** @hidden */\nexport function inArray(value, collection) {\n for (var i = 0, len = collection.length; i < len; i++) {\n if (collection[i] === value) {\n return i;\n }\n }\n return -1;\n}\n/** @hidden */\nexport function getActualPropFromColl(collection) {\n var coll = [];\n for (var i = 0, len = collection.length; i < len; i++) {\n if (collection[i].hasOwnProperty('properties')) {\n coll.push(collection[i].properties);\n }\n else {\n coll.push(collection[i]);\n }\n }\n return coll;\n}\n/** @hidden */\nexport function removeElement(target, selector) {\n var elements = [].slice.call(target.querySelectorAll(selector));\n for (var i = 0; i < elements.length; i++) {\n remove(elements[i]);\n }\n}\n/** @hidden */\nexport function getPosition(e) {\n var position = {};\n position.x = (isNullOrUndefined(e.clientX) ? e.changedTouches[0].clientX :\n e.clientX);\n position.y = (isNullOrUndefined(e.clientY) ? e.changedTouches[0].clientY :\n e.clientY);\n return position;\n}\nvar uid = 0;\n/** @hidden */\nexport function getUid(prefix) {\n return prefix + uid++;\n}\n/** @hidden */\nexport function appendChildren(elem, children) {\n for (var i = 0, len = children.length; i < len; i++) {\n if (len === children.length) {\n elem.appendChild(children[i]);\n }\n else {\n elem.appendChild(children[0]);\n }\n }\n return elem;\n}\n/** @hidden */\nexport function parents(elem, selector, isID) {\n var parent = elem;\n var parents = [];\n while (parent) {\n if (isID ? parent.id === selector : parent.classList.contains(selector)) {\n parents.push(parent);\n }\n parent = parent.parentElement;\n }\n return parents;\n}\n/** @hidden */\nexport function calculateAggregate(type, data, column, context) {\n if (type === 'Custom') {\n var temp = column.customAggregate;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n return temp ? temp.call(context, data, column) : '';\n }\n return DataUtil.aggregates[type.toLowerCase()](data, column.field);\n}\n/** @hidden */\nvar scrollWidth = null;\n/** @hidden */\nexport function getScrollBarWidth() {\n if (scrollWidth !== null) {\n return scrollWidth;\n }\n var divNode = document.createElement('div');\n var value = 0;\n divNode.style.cssText = 'width:100px;height: 100px;overflow: scroll;position: absolute;top: -9999px;';\n document.body.appendChild(divNode);\n value = (divNode.offsetWidth - divNode.clientWidth) | 0;\n document.body.removeChild(divNode);\n return scrollWidth = value;\n}\n/** @hidden */\nvar rowHeight;\n/** @hidden */\nexport function getRowHeight(element) {\n if (rowHeight !== undefined) {\n return rowHeight;\n }\n var table = createElement('table', { className: 'e-table', styles: 'visibility: hidden' });\n table.innerHTML = 'A';\n element.appendChild(table);\n var rect = table.querySelector('td').getBoundingClientRect();\n element.removeChild(table);\n rowHeight = Math.ceil(rect.height);\n return rowHeight;\n}\n/** @hidden */\nexport function isEditable(col, type, elem) {\n var row = parentsUntil(elem, 'e-row');\n var isOldRow = !row ? true : row && !row.classList.contains('e-insertedrow');\n if (type === 'beginEdit' && isOldRow) {\n if (col.isIdentity || col.isPrimaryKey || !col.allowEditing) {\n return false;\n }\n return true;\n }\n else if (type === 'add' && col.isIdentity && col.isPrimaryKey) {\n return false;\n }\n else {\n if (isOldRow && !col.allowEditing && !col.isIdentity && !col.isPrimaryKey) {\n return false;\n }\n return true;\n }\n}\n/** @hidden */\nexport function isActionPrevent(inst) {\n var dlg = inst.element.querySelector('#' + inst.element.id + 'EditConfirm');\n return inst.editSettings.mode === 'Batch' &&\n (inst.element.querySelectorAll('.e-updatedtd').length) && inst.editSettings.showConfirmDialog &&\n (dlg ? dlg.classList.contains('e-popup-close') : true);\n}\n/** @hidden */\nexport function wrap(elem, action) {\n var clName = 'e-wrap';\n elem = elem instanceof Array ? elem : [elem];\n for (var i = 0; i < elem.length; i++) {\n action ? elem[i].classList.add(clName) : elem[i].classList.remove(clName);\n }\n}\nexport function changeButtonType(target) {\n var elements = [].slice.call(target.querySelectorAll('button'));\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var button = elements_1[_i];\n attributes(button, { type: 'button' });\n }\n}\n/** @hidden */\nexport function setFormatter(serviceLocator, column) {\n var fmtr = serviceLocator.getService('valueFormatter');\n switch (column.type) {\n case 'date':\n column.setFormatter(fmtr.getFormatFunction({ type: 'date', skeleton: column.format }));\n column.setParser(fmtr.getParserFunction({ type: 'date', skeleton: column.format }));\n break;\n case 'datetime':\n column.setFormatter(fmtr.getFormatFunction({ type: 'dateTime', skeleton: column.format }));\n column.setParser(fmtr.getParserFunction({ type: 'dateTime', skeleton: column.format }));\n break;\n case 'number':\n column.setFormatter(fmtr.getFormatFunction({ format: column.format }));\n column.setParser(fmtr.getParserFunction({ format: column.format }));\n break;\n }\n}\n/** @hidden */\nexport function addRemoveActiveClasses(cells, add) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n for (var i = 0, len = cells.length; i < len; i++) {\n if (add) {\n classList(cells[i], args.slice(), []);\n cells[i].setAttribute('aria-selected', 'true');\n }\n else {\n classList(cells[i], [], args.slice());\n cells[i].removeAttribute('aria-selected');\n }\n }\n}\n/** @hidden */\nexport function distinctStringValues(result) {\n var temp = {};\n var res = [];\n for (var i = 0; i < result.length; i++) {\n if (!(result[i] in temp)) {\n res.push(result[i].toString());\n temp[result[i]] = 1;\n }\n }\n return res;\n}\n/** @hidden */\nexport function getFilterMenuPostion(target, dialogObj, grid) {\n var elementVisible = dialogObj.element.style.display;\n dialogObj.element.style.display = 'block';\n var dlgWidth = dialogObj.width;\n var newpos;\n if (!grid.enableRtl) {\n newpos = calculateRelativeBasedPosition(target, dialogObj.element);\n dialogObj.element.style.display = elementVisible;\n dialogObj.element.style.top = (newpos.top + target.getBoundingClientRect().height) - 5 + 'px';\n var leftPos = ((newpos.left - dlgWidth) + target.clientWidth);\n if (leftPos < 1) {\n dialogObj.element.style.left = (dlgWidth + leftPos) - 16 + 'px'; // right calculation\n }\n else {\n dialogObj.element.style.left = leftPos + -4 + 'px';\n }\n }\n else {\n newpos = calculatePosition(target, 'left', 'bottom');\n dialogObj.element.style.top = (newpos.top + target.getBoundingClientRect().height) - 35 + 'px';\n dialogObj.element.style.display = elementVisible;\n var leftPos = ((newpos.left - dlgWidth) + target.clientWidth);\n if (leftPos < 1) {\n dialogObj.element.style.left = (dlgWidth + leftPos) + -16 + 'px';\n }\n else {\n dialogObj.element.style.left = leftPos - 16 + 'px';\n }\n }\n}\n/** @hidden */\nexport function getZIndexCalcualtion(args, dialogObj) {\n args.popup.element.style.zIndex = (dialogObj.zIndex + 1).toString();\n}\n/** @hidden */\nexport function toogleCheckbox(elem) {\n var span = elem.querySelector('.e-frame');\n span.classList.contains('e-check') ? classList(span, ['e-uncheck'], ['e-check']) :\n classList(span, ['e-check'], ['e-uncheck']);\n}\n/** @hidden */\nexport function createCboxWithWrap(uid, elem, className) {\n var div = createElement('div', { className: className });\n div.appendChild(elem);\n div.setAttribute('uid', uid);\n return div;\n}\n/** @hidden */\nexport function removeAddCboxClasses(elem, checked) {\n removeClass([elem], ['e-check', 'e-stop', 'e-uncheck']);\n if (checked) {\n elem.classList.add('e-check');\n }\n else {\n elem.classList.add('e-uncheck');\n }\n}\n/**\n * Refresh the Row model's foreign data.\n * @param row - Grid Row model object.\n * @param columns - Foreign columns array.\n * @param data - Updated Row data.\n * @hidden\n */\nexport function refreshForeignData(row, columns, data) {\n columns.forEach(function (col) {\n setValue(col.field, getForeignData(col, data), row.foreignKeyData);\n });\n row.cells.forEach(function (cell) {\n if (cell.isForeignKey) {\n setValue('foreignKeyData', getValue(cell.column.field, row.foreignKeyData), cell);\n }\n });\n}\n/**\n * Get the foreign data for the corresponding cell value.\n * @param column - Foreign Key column\n * @param data - Row data.\n * @param lValue - cell value.\n * @param foreignData - foreign data source.\n * @hidden\n */\nexport function getForeignData(column, data, lValue, foreignKeyData) {\n var fField = column.foreignKeyField;\n var key = (lValue || valueAccessor(column.field, data, column));\n key = isNullOrUndefined(key) ? '' : key;\n var query = new Query();\n var fdata = foreignKeyData || (column.dataSource instanceof DataManager) && column.dataSource.dataSource.offline ?\n column.dataSource.dataSource.json : column.columnData;\n if (key.getDay) {\n query.where(getDatePredicate({ field: fField, operator: 'equal', value: key, matchCase: false }));\n }\n else {\n query.where(fField, '==', key, false);\n }\n return new DataManager(fdata).executeLocal(query);\n}\n/**\n * To use to get the column's object by the foreign key value.\n * @param foreignKeyValue - Defines ForeignKeyValue.\n * @param columns - Array of column object.\n * @hidden\n */\nexport function getColumnByForeignKeyValue(foreignKeyValue, columns) {\n var column;\n return columns.some(function (col) {\n column = col;\n return col.foreignKeyValue === foreignKeyValue;\n }) && column;\n}\n/**\n * @hidden\n * @param filterObject - Defines predicate model object\n */\nexport function getDatePredicate(filterObject) {\n var datePredicate;\n var prevDate;\n var nextDate;\n var prevObj = baseExtend({}, getActualProperties(filterObject));\n var nextObj = baseExtend({}, getActualProperties(filterObject));\n var value = new Date(filterObject.value);\n if (filterObject.operator === 'equal' || filterObject.operator === 'notequal') {\n prevDate = new Date(value.setHours(0) - 1);\n nextDate = new Date(value.setHours(24));\n prevObj.value = prevDate;\n nextObj.value = nextDate;\n if (filterObject.operator === 'equal') {\n prevObj.operator = 'greaterthan';\n nextObj.operator = 'lessthan';\n }\n else if (filterObject.operator === 'notequal') {\n prevObj.operator = 'lessthanorequal';\n nextObj.operator = 'greaterthanorequal';\n }\n var predicateSt = new Predicate(prevObj.field, prevObj.operator, prevObj.value, false);\n var predicateEnd = new Predicate(nextObj.field, nextObj.operator, nextObj.value, false);\n datePredicate = filterObject.operator === 'equal' ? predicateSt.and(predicateEnd) : predicateSt.or(predicateEnd);\n }\n else {\n if (typeof (prevObj.value) === 'string') {\n prevObj.value = new Date(prevObj.value);\n }\n var predicates = new Predicate(prevObj.field, prevObj.operator, prevObj.value, false);\n datePredicate = predicates;\n }\n if (filterObject.setProperties) {\n filterObject.setProperties({ ejpredicate: datePredicate }, true);\n }\n else {\n filterObject.ejpredicate = datePredicate;\n }\n return datePredicate;\n}\n/**\n * @hidden\n */\nexport function renderMovable(ele, frzCols) {\n var mEle = ele.cloneNode(true);\n for (var i = 0; i < frzCols; i++) {\n mEle.removeChild(mEle.children[0]);\n }\n for (var i = frzCols, len = ele.childElementCount; i < len; i++) {\n ele.removeChild(ele.children[ele.childElementCount - 1]);\n }\n return mEle;\n}\n","/**\n * AriaService\n * @hidden\n */\nvar AriaService = /** @class */ (function () {\n function AriaService() {\n }\n AriaService.prototype.setOptions = function (target, options) {\n var props = Object.keys(options);\n props.forEach(function (name) { return setStateAndProperties(target, config[name], options[name]); });\n };\n AriaService.prototype.setExpand = function (target, expand) {\n setStateAndProperties(target, config.expand, expand);\n };\n AriaService.prototype.setSort = function (target, direction) {\n setStateAndProperties(target, config.sort, direction, typeof direction === 'boolean');\n };\n AriaService.prototype.setBusy = function (target, isBusy) {\n setStateAndProperties(target, config.busy, isBusy);\n setStateAndProperties(target, config.invalid, null, true);\n };\n AriaService.prototype.setGrabbed = function (target, isGrabbed, remove) {\n setStateAndProperties(target, config.grabbed, isGrabbed, remove);\n };\n AriaService.prototype.setDropTarget = function (target, isTarget) {\n setStateAndProperties(target, config.dropeffect, 'copy', !isTarget);\n };\n return AriaService;\n}());\nexport { AriaService };\n/**\n * @hidden\n */\nfunction setStateAndProperties(target, attribute, value, remove) {\n if (remove) {\n target.removeAttribute(attribute);\n return;\n }\n if (target) {\n target.setAttribute(attribute, value);\n }\n}\nvar config = {\n expand: 'aria-expanded',\n role: 'role',\n selected: 'aria-selected',\n multiselectable: 'aria-multiselectable',\n sort: 'aria-sort',\n busy: 'aria-busy',\n invalid: 'aria-invalid',\n grabbed: 'aria-grabbed',\n dropeffect: 'aria-dropeffect',\n haspopup: 'aria-haspopup',\n level: 'aria-level',\n colcount: 'aria-colcount'\n};\n","import { remove } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { uiUpdate, initialEnd, dataReady, modelChanged } from '../base/constant';\nimport { FooterRenderer } from '../renderer/footer-renderer';\nimport { SummaryCellRenderer } from '../renderer/summary-cell-renderer';\nimport { GroupSummaryModelGenerator, CaptionSummaryModelGenerator } from '../services/summary-model-generator';\n/**\n * Summary Action controller.\n */\nvar Aggregate = /** @class */ (function () {\n function Aggregate(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.addEventListener();\n }\n Aggregate.prototype.getModuleName = function () {\n return 'aggregate';\n };\n Aggregate.prototype.initiateRender = function () {\n var _this = this;\n var cellFac = this.locator.getService('cellRendererFactory');\n var instance = new SummaryCellRenderer(this.parent, this.locator);\n [CellType.Summary, CellType.CaptionSummary, CellType.GroupSummary].forEach(function (type) {\n return cellFac.addCellRenderer(type, instance);\n });\n this.footerRenderer = new FooterRenderer(this.parent, this.locator);\n this.footerRenderer.renderPanel();\n this.footerRenderer.renderTable();\n this.locator.register('footerRenderer', this.footerRenderer);\n var fn = function () {\n _this.prepareSummaryInfo();\n _this.parent.off(dataReady, fn);\n };\n this.parent.on(dataReady, fn, this);\n this.parent.on(dataReady, this.footerRenderer.refresh, this.footerRenderer);\n };\n Aggregate.prototype.prepareSummaryInfo = function () {\n var _this = this;\n summaryIterator(this.parent.aggregates, function (column) {\n var dataColumn = _this.parent.getColumnByField(column.field) || {};\n var type = dataColumn.type;\n column.setPropertiesSilent({ format: _this.getFormatFromType(column.format, type) });\n column.setFormatter();\n column.setPropertiesSilent({ columnName: column.columnName || column.field });\n });\n };\n Aggregate.prototype.getFormatFromType = function (format, type) {\n if (isNullOrUndefined(type) || typeof format !== 'string') {\n return format;\n }\n var obj;\n switch (type) {\n case 'number':\n obj = { format: format };\n break;\n case 'date':\n obj = { type: type, skeleton: format };\n break;\n case 'datetime':\n obj = { type: 'dateTime', skeleton: format };\n break;\n }\n return obj;\n };\n Aggregate.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n if (isNullOrUndefined(this.footerRenderer)) {\n this.initiateRender();\n }\n this.prepareSummaryInfo();\n this.footerRenderer.refresh();\n var cModel = new CaptionSummaryModelGenerator(this.parent);\n var gModel = new GroupSummaryModelGenerator(this.parent);\n if (gModel.getData().length !== 0 || !cModel.isEmpty()) {\n this.parent.notify(modelChanged, {});\n }\n };\n Aggregate.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(initialEnd, this.initiateRender, this);\n this.parent.on(uiUpdate, this.onPropertyChanged, this);\n };\n Aggregate.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.footerRenderer.removeEventListener();\n this.parent.off(initialEnd, this.initiateRender);\n this.parent.off(dataReady, this.footerRenderer.refresh);\n this.parent.off(uiUpdate, this.onPropertyChanged);\n };\n Aggregate.prototype.destroy = function () {\n this.removeEventListener();\n remove(this.parent.element.querySelector('.e-gridfooter'));\n };\n return Aggregate;\n}());\nexport { Aggregate };\n/**\n * @private\n */\nexport function summaryIterator(aggregates, callback) {\n aggregates.forEach(function (row) {\n row.columns.forEach(function (column) {\n callback(column, row);\n });\n });\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { SvgRenderer, compile as templateComplier, remove, merge, createElement } from '@syncfusion/ej2-base';\n/**\n * Specifies Linear-Gauge Helper methods\n */\n/** @private */\nexport function stringToNumber(value, containerSize) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Function to measure the height and width of the text.\n * @param {string} text\n * @param {FontModel} font\n * @param {string} id\n * @returns no\n * @private\n */\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('gauge-measuretext');\n var size;\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'gauge-measuretext' });\n document.body.appendChild(htmlObject);\n }\n htmlObject.innerHTML = text;\n htmlObject.style.position = 'absolute';\n htmlObject.style.fontSize = font.size;\n htmlObject.style.fontWeight = font.fontWeight;\n htmlObject.style.fontStyle = font.fontStyle;\n htmlObject.style.fontFamily = font.fontFamily;\n htmlObject.style.visibility = 'hidden';\n htmlObject.style.top = '-100';\n htmlObject.style.left = '0';\n htmlObject.style.whiteSpace = 'nowrap';\n size = new Size(htmlObject.clientWidth, htmlObject.clientHeight);\n //remove(htmlObject);\n return size;\n}\n/** @private */\nexport function withInRange(value, start, end, max, min, type) {\n var withIn;\n if (type === 'pointer') {\n withIn = (((value <= max) && (value >= min)));\n }\n else {\n withIn = (start != null && (start <= max) && (start >= min)) && (end != null && (end <= max) && (end >= min));\n }\n return withIn;\n}\nexport function convertPixelToValue(parentElement, pointerElement, orientation, axis, type, location) {\n var elementRect = parentElement.getBoundingClientRect();\n var pointerRect = pointerElement.getBoundingClientRect();\n var height = (pointerElement.id.indexOf('MarkerPointer') > -1) ? (pointerRect.height / 2) :\n (!axis.isInversed) ? 0 : pointerRect.height;\n var width = (pointerElement.id.indexOf('MarkerPointer') > -1) ? (pointerRect.width / 2) :\n (!axis.isInversed) ? pointerRect.width : 0;\n var size = new Size(axis.lineBounds.width, axis.lineBounds.height);\n var y = (type === 'drag') ? (location.y - axis.lineBounds.y) :\n ((pointerRect.top + height) - elementRect.top - axis.lineBounds.y);\n var x = (type === 'drag') ? (location.x - axis.lineBounds.x) :\n ((pointerRect.left + width) - elementRect.left - axis.lineBounds.x);\n var newSize = (orientation === 'Vertical') ? size.height : size.width;\n var divideVal = (orientation === 'Vertical') ? y : x;\n var value = (orientation === 'Vertical') ? (axis.isInversed) ? (divideVal / newSize) :\n (1 - (divideVal / newSize)) : (axis.isInversed) ? (1 - (divideVal / newSize)) : (divideVal / newSize);\n value = value * (axis.visibleRange.delta) + axis.visibleRange.min;\n return value;\n}\nexport function getPathToRect(path, size, parentElement) {\n var tempDiv = document.getElementById('gauge_path');\n if (tempDiv === null) {\n tempDiv = createElement('text', { id: 'gauge_path' });\n tempDiv.style.position = 'absolute';\n tempDiv.style.top = '0px';\n tempDiv.style.left = '0px';\n parentElement.appendChild(tempDiv);\n }\n var render = new SvgRenderer('id');\n var svg = render.createSvg({ id: 'box_path', width: size.width, height: size.height });\n svg.appendChild(path);\n tempDiv.appendChild(svg);\n var svgRect = path.getBBox();\n remove(tempDiv);\n return svgRect;\n}\n/** @private */\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/** @private */\nexport function removeElement(id) {\n var element = getElement(id);\n if (element) {\n remove(element);\n }\n}\n/** @private */\nexport function isPointerDrag(axes) {\n var pointerEnable = false;\n axes.map(function (axis, index) {\n axis.pointers.map(function (pointer, index) {\n if (pointer.enableDrag) {\n pointerEnable = true;\n }\n });\n });\n return pointerEnable;\n}\n/** @private */\nexport function valueToCoefficient(value, axis, orientation, range) {\n var result = (value - range.min) / range.delta;\n result = (orientation === 'Vertical') ? (!axis.isInversed) ? (1 - result) : result : (!axis.isInversed) ? result : (1 - result);\n return result;\n}\nexport function getFontStyle(font) {\n var style = '';\n style = 'font-size:' + font.size +\n '; font-style:' + font.fontStyle + '; font-weight:' + font.fontWeight +\n '; font-family:' + font.fontFamily + ';opacity:' + font.opacity +\n '; color:' + font.color + ';';\n return style;\n}\n/** @private */\nexport function getLabelFormat(format) {\n var customLabelFormat = format && format.match('{value}') !== null;\n var skeleton = customLabelFormat ? '' : format;\n return skeleton;\n}\n/** @private */\nexport function getTemplateFunction(template) {\n var templateFn = null;\n var e;\n try {\n if (document.querySelectorAll(template).length) {\n templateFn = templateComplier(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n templateFn = templateComplier(template);\n }\n return templateFn;\n}\n/** @private */\nexport function getElementOffset(childElement, parentElement) {\n var width;\n var height;\n parentElement.appendChild(childElement);\n width = childElement.offsetWidth;\n height = childElement.offsetHeight;\n parentElement.removeChild(childElement);\n return new Size(width, height);\n}\n/** @private */\nvar VisibleRange = /** @class */ (function () {\n function VisibleRange(min, max, interval, delta) {\n this.min = min;\n this.max = max;\n this.interval = interval;\n this.delta = delta;\n }\n return VisibleRange;\n}());\nexport { VisibleRange };\n/** @private */\nvar GaugeLocation = /** @class */ (function () {\n function GaugeLocation(x, y) {\n this.x = x;\n this.y = y;\n }\n return GaugeLocation;\n}());\nexport { GaugeLocation };\n/**\n * Internal class size for height and width\n */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/** @private */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\n/** @private */\nvar CustomizeOption = /** @class */ (function () {\n function CustomizeOption(id) {\n this.id = id;\n }\n return CustomizeOption;\n}());\nexport { CustomizeOption };\n/** @private */\nvar PathOption = /** @class */ (function (_super) {\n __extends(PathOption, _super);\n function PathOption(id, fill, width, color, opacity, dashArray, d, transform) {\n if (transform === void 0) { transform = ''; }\n var _this = _super.call(this, id) || this;\n _this.opacity = opacity;\n _this.fill = fill;\n _this.stroke = color;\n _this['stroke-width'] = width;\n _this['stroke-dasharray'] = dashArray;\n _this.d = d;\n _this.transform = transform;\n return _this;\n }\n return PathOption;\n}(CustomizeOption));\nexport { PathOption };\n/** @private */\nvar RectOption = /** @class */ (function () {\n function RectOption(id, fill, border, opacity, rect, transform, dashArray) {\n this.opacity = opacity;\n this.id = id;\n this.y = rect.y;\n this.x = rect.x;\n this.fill = fill;\n this.stroke = border.color;\n this['stroke-width'] = border.width;\n this.height = rect.height;\n this.width = rect.width;\n }\n return RectOption;\n}());\nexport { RectOption };\n/** @private */\nvar TextOption = /** @class */ (function (_super) {\n __extends(TextOption, _super);\n function TextOption(id, x, y, anchor, text, transform, baseLine) {\n if (transform === void 0) { transform = ''; }\n var _this = _super.call(this, id) || this;\n _this.transform = '';\n _this.baseLine = 'auto';\n _this.x = x;\n _this.y = y;\n _this.anchor = anchor;\n _this.text = text;\n _this.transform = transform;\n _this.baseLine = baseLine;\n return _this;\n }\n return TextOption;\n}(CustomizeOption));\nexport { TextOption };\n/** @private */\nvar VisibleLabels = /** @class */ (function () {\n function VisibleLabels(text, value, size) {\n this.text = text;\n this.value = value;\n this.size = size;\n }\n return VisibleLabels;\n}());\nexport { VisibleLabels };\n/** @private */\nvar Align = /** @class */ (function () {\n function Align(axisIndex, align) {\n this.align = align;\n this.axisIndex = axisIndex;\n }\n return Align;\n}());\nexport { Align };\n/** @private */\nexport function textElement(options, font, color, parent) {\n var renderOptions = {};\n var htmlObject;\n var renderer = new SvgRenderer('');\n var style = 'fill:' + color + '; font-size:' + font.size +\n '; font-style:' + font.fontStyle + ' ; font-weight:' + font.fontWeight + '; font-family:' +\n font.fontFamily + '; text-anchor:' + options.anchor + '; transform:' + options.transform +\n '; opacity:' + font.opacity + '; dominant-baseline:' + options.baseLine + ';';\n renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'style': style\n };\n htmlObject = renderer.createText(renderOptions, options.text);\n parent.appendChild(htmlObject);\n return htmlObject;\n}\nexport function calculateNiceInterval(min, max, size, orientation) {\n var delta = max - min;\n var currentInterval;\n var intervalDivs = [10, 5, 2, 1];\n var desiredIntervalsCount = getActualDesiredIntervalsCount(size, orientation);\n var niceInterval = delta / desiredIntervalsCount;\n var minInterval = Math.pow(10, Math.floor(Math.log(niceInterval) / Math.log(10)));\n for (var _i = 0, intervalDivs_1 = intervalDivs; _i < intervalDivs_1.length; _i++) {\n var interval = intervalDivs_1[_i];\n currentInterval = minInterval * interval;\n if (desiredIntervalsCount < (delta / currentInterval)) {\n break;\n }\n niceInterval = currentInterval;\n }\n return niceInterval;\n}\nexport function getActualDesiredIntervalsCount(size, orientation) {\n var maximumLabels = 5;\n var desiredIntervalsCount = (orientation === 'Horizontal' ? 0.533 : 1) * maximumLabels;\n desiredIntervalsCount = Math.max((size * (desiredIntervalsCount / 100)), 1);\n return desiredIntervalsCount;\n}\n/** @private */\nexport function getPointer(target, gauge) {\n var split = [];\n var axisIndex;\n var radix = 10;\n var pointIndex;\n var axis;\n var pointer;\n split = target.id.split('_');\n axisIndex = parseInt(split[2], radix);\n pointIndex = parseInt(split[4], radix);\n axis = gauge.axes[axisIndex];\n pointer = gauge.axes[axisIndex].pointers[pointIndex];\n return { axis: axis, axisIndex: axisIndex, pointer: pointer, pointerIndex: pointIndex };\n}\n/** @private */\nexport function getRangeColor(value, ranges) {\n var rangeColor = null;\n ranges.forEach(function (range, index) {\n if (value >= range.start && range.end >= value) {\n rangeColor = range.interior;\n }\n });\n return rangeColor;\n}\n/** @private */\nexport function getRangePalette() {\n var palette = ['#ff5985', '#ffb133', '#fcde0b', '#27d5ff', '#50c917'];\n return palette;\n}\n/** @private */\nexport function calculateShapes(location, shape, size, url, options, orientation, axis, pointer) {\n var path;\n var width = size.width;\n var height = size.height;\n var locX = location.x;\n var locY = location.y;\n var radius;\n switch (shape) {\n case 'Circle':\n radius = ((width + height) / 4);\n locX = (orientation === 'Vertical') ? (!axis.opposedPosition) ? (pointer.placement !== 'Far') ? locX - radius : locX + radius :\n pointer.placement === 'Near' ? locX - radius : locX + radius : locX;\n locY = (orientation === 'Vertical') ? locY : (!axis.opposedPosition) ? (pointer.placement === 'Far') ?\n locY + radius : locY - radius : (pointer.placement === 'Near') ? locY - radius : locY + radius;\n merge(options, { 'r': radius, 'cx': locX, 'cy': locY });\n break;\n case 'Diamond':\n case 'Rectangle':\n locX = (orientation === 'Horizontal') ? ((locX - (width / 2))) : ((!axis.opposedPosition && pointer.placement !== 'Far') ||\n (axis.opposedPosition && pointer.placement === 'Near')) ? locX - width : locX;\n locY = (orientation === 'Vertical') ? locY : (!axis.opposedPosition) ?\n (pointer.placement === 'Far') ? locY + (height / 2) : locY - (height / 2) :\n (pointer.placement === 'Near') ? locY - (height / 2) : locY + (height / 2);\n if (shape === 'Diamond') {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + width) + ' ' + locY + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + locY + ' z';\n }\n else {\n path = 'M' + ' ' + locX + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + width) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + width) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY - (height / 2)) + ' z';\n }\n merge(options, { 'd': path });\n break;\n case 'Triangle':\n if (orientation === 'Vertical') {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + (locX - width) + ' ' + (locY - (height / 2)) +\n 'L' + (locX - width) + ' ' + (locY + (height / 2)) + ' Z';\n }\n else {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + (locX + (width / 2)) + ' ' + (locY - height) +\n 'L' + (locX - (width / 2)) + ' ' + (locY - height) + ' Z';\n }\n merge(options, { 'd': path });\n break;\n case 'InvertedTriangle':\n if (orientation === 'Vertical') {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + (locX + width) + ' ' + (locY - (height / 2)) +\n 'L' + (locX + width) + ' ' + (locY + (height / 2)) + ' Z';\n }\n else {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' +\n 'L' + (locX + (width / 2)) + ' ' + (locY + height) +\n 'L' + (locX - (width / 2)) + ' ' + (locY + height) + ' Z';\n }\n merge(options, { 'd': path });\n break;\n case 'Arrow':\n if (orientation === 'Vertical') {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' + 'L' + (locX - (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + (locX - (width / 2)) + ' ' + ((locY - (height / 2)) + (height / 4)) + ' ' + 'L' + (locX - width) + ' '\n + ((locY - (height / 2)) + (height / 4)) + ' ' + 'L' + (locX - width) + ' ' + ((locY + (height / 2)) -\n (height / 4)) + ' ' + 'L' + (locX - (width / 2)) + ' ' + ((locY + (height / 2)) - (height / 4)) + ' ' +\n 'L' + (locX - (width / 2)) + ' ' + (locY + height / 2) + 'z';\n }\n else {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' + 'L' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ((locX + (width / 2)) - (width / 4)) + ' ' + (locY - (height / 2)) + ' ' + 'L' + ((locX + (width / 2)) -\n (width / 4)) + ' ' + (locY - height) + ' ' + 'L' + ((locX - (width / 2)) + (width / 4)) + ' ' + (locY - height) +\n ' ' + 'L' + ((locX - (width / 2)) + (width / 4)) + ' ' + (locY - (height / 2)) + ' ' + 'L' + (locX - (width / 2))\n + ' ' + (locY - (height / 2)) + 'z';\n }\n merge(options, { 'd': path });\n break;\n case 'InvertedArrow':\n if (orientation === 'Vertical') {\n path = 'M' + ' ' + locX + ' ' + locY + 'L' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + (locX + (width / 2)) + ' ' + ((locY - (height / 2)) + (height / 4)) + ' ' + 'L' + (locX + width) + ' '\n + ((locY - (height / 2)) + (height / 4)) + ' ' + 'L' + (locX + width) + ' ' + ((locY + (height / 2)) - (height / 4))\n + ' ' + 'L' + (locX + (width / 2)) + ' ' + ((locY + (height / 2)) - (height / 4)) + ' ' +\n 'L' + (locX + (width / 2)) + ' ' + (locY + height / 2) + 'z';\n }\n else {\n path = 'M' + ' ' + locX + ' ' + locY + ' ' + 'L' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ((locX + (width / 2)) - (width / 4)) + ' ' + (locY + (height / 2)) + ' ' + 'L' + ((locX + (width / 2)) -\n (width / 4)) + ' ' + (locY + height) + ' ' + 'L' + ((locX - (width / 2)) + (width / 4)) + ' ' + (locY + height)\n + ' ' + 'L' + ((locX - (width / 2)) + (width / 4)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + (locX - (width / 2)) + ' ' + (locY + (height / 2)) + 'z';\n }\n merge(options, { 'd': path });\n break;\n case 'Image':\n merge(options, { 'href': url, 'height': height, 'width': width, x: locX - (width / 2), y: locY - (height / 2) });\n break;\n }\n return options;\n}\n/** @private */\nexport function getBox(location, boxName, orientation, size, type, containerWidth, axis, cornerRadius) {\n var path = ' ';\n var radius = cornerRadius;\n var x1;\n var y1;\n var rectWidth;\n var rectHeight;\n var bottomRadius;\n var topRadius;\n switch (boxName) {\n case 'RoundedRectangle':\n x1 = location.x;\n y1 = location.y;\n rectWidth = location.width;\n rectHeight = location.height;\n path = 'M' + ' ' + x1 + ' ' + (radius + y1) + ' Q ' + x1 + ' ' + y1 + ' ' + (x1 + radius) + ' ' + y1 + ' ';\n path += 'L' + ' ' + (x1 + rectWidth - radius) + ' ' + y1 + ' Q ' + (x1 + rectWidth) + ' ' + y1 + ' '\n + (x1 + rectWidth) + ' ' + (y1 + radius) + ' ';\n path += 'L ' + (x1 + rectWidth) + ' ' + (y1 + rectHeight - radius) + ' Q ' + (x1 + rectWidth) + ' ' + (y1 + rectHeight)\n + ' ' + (x1 + rectWidth - radius) + ' ' + (y1 + rectHeight) + ' ';\n path += ' L ' + (x1 + radius) + ' ' + (y1 + rectHeight) + ' Q ' + x1 + ' ' + (y1 + rectHeight)\n + ' ' + x1 + ' ' + (y1 + rectHeight - radius) + ' ';\n path += 'L' + ' ' + x1 + ' ' + (radius + y1) + ' ' + 'z';\n break;\n case 'Thermometer':\n var width = (orientation === 'Vertical') ? location.width : location.height;\n bottomRadius = width + ((width / 2) / Math.PI);\n topRadius = width / 2;\n if (orientation === 'Vertical') {\n var addValue = ((containerWidth + ((containerWidth / 2) / Math.PI)) - bottomRadius);\n var y1_1 = (type === 'bar') ? location.y + addValue : location.y;\n var locY = (type === 'bar') ? location.y + (topRadius - (topRadius / Math.PI)) : location.y;\n var locHeight = location.height;\n path = 'M' + location.x + ' ' + (y1_1 + locHeight) +\n ' A ' + bottomRadius + ' ' + bottomRadius + ', 0, 1, 0, ' + (location.x + location.width) + ' ' + (y1_1 + locHeight) +\n ' L ' + (location.x + location.width) + ' ' + locY +\n ' A ' + topRadius + ' ' + topRadius + ', 0, 1, 0, ' + location.x + ' ' + locY + ' z ';\n }\n else {\n var x1_1 = (type === 'bar' && !axis.isInversed) ?\n location.x - ((containerWidth + ((containerWidth / 2) / Math.PI)) - bottomRadius) : location.x;\n var locWidth = (type === 'bar') ? (location.width - (topRadius - ((topRadius / Math.PI)))) : location.width;\n path = 'M' + x1_1 + ' ' + (location.y) +\n ' A ' + bottomRadius + ' ' + bottomRadius + ', 0, 1, 0, ' + x1_1 + ' ' + (location.y + location.height) +\n ' L ' + ((type === 'bar' ? location.x : x1_1) + locWidth) + ' ' + (location.y + location.height) +\n ' A ' + topRadius + ' ' + topRadius + ', 0, 1, 0, ' +\n ((type === 'bar' ? location.x : x1_1) + locWidth) + ' ' + (location.y) + ' z ';\n }\n break;\n }\n return path;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Helper functions for maps control\n */\nimport { SvgRenderer, createElement, isNullOrUndefined, remove, compile as templateComplier, merge } from '@syncfusion/ej2-base';\nimport { Animation } from '@syncfusion/ej2-base';\nimport { animationComplete } from '../index';\n/**\n * Maps internal use of `Size` type\n * @private\n */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/**\n * To find number from string\n * @private\n */\nexport function stringToNumber(value, containerSize) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Method to calculate the width and height of the maps\n */\nexport function calculateSize(maps) {\n var containerWidth = maps.element.clientWidth;\n var containerHeight = maps.element.clientHeight;\n maps.availableSize = new Size(stringToNumber(maps.width, containerWidth) || containerWidth || 600, stringToNumber(maps.height, containerHeight) || containerHeight || (maps.isDevice ?\n Math.min(window.innerWidth, window.innerHeight) : 450));\n}\n/**\n * Method to create svg for maps.\n */\nexport function createSvg(maps) {\n maps.renderer = new SvgRenderer(maps.element.id);\n calculateSize(maps);\n maps.svgObject = maps.renderer.createSvg({\n id: maps.element.id + '_svg',\n width: maps.availableSize.width,\n height: maps.availableSize.height\n });\n}\n/**\n * Method to convert degrees to radians\n */\nexport function degreesToRadians(deg) {\n return deg * (Math.PI / 180);\n}\n/**\n * Convert radians to degrees method\n */\nexport function radiansToDegrees(radian) {\n return radian * (180 / Math.PI);\n}\n/**\n * Method for converting from latitude and longitude values to points\n */\nexport function convertGeoToPoint(latitude, longitude, factor, layer, mapModel) {\n var mapSize = new Size(mapModel.mapAreaRect.width, mapModel.mapAreaRect.height);\n var x;\n var y;\n var value;\n var lat;\n var lng;\n var temp;\n var longitudeMinMax = mapModel.baseMapBounds.longitude;\n var latitudeMinMax = mapModel.baseMapBounds.latitude;\n var latRadian = degreesToRadians(latitude);\n var lngRadian = degreesToRadians(longitude);\n var type = mapModel.projectionType;\n var size = (mapModel.isTileMap) ? Math.pow(2, 1) * 256 : (isNullOrUndefined(factor)) ? Math.min(mapSize.width, mapSize.height) :\n (Math.min(mapSize.width, mapSize.height) * factor);\n if (layer.geometryType === 'Normal') {\n x = isNullOrUndefined(factor) ? longitude : Math.abs((longitude - longitudeMinMax.min) * factor);\n y = isNullOrUndefined(factor) ? latitude : Math.abs((latitudeMinMax.max - latitude) * factor);\n }\n else if (layer.geometryType === 'Geographic') {\n switch (type) {\n case 'Mercator':\n var pixelOrigin = new Point(size / 2, size / 2);\n x = pixelOrigin.x + longitude * (size / 360);\n var sinY = calculateBound(Math.sin(degreesToRadians(latitude)), -0.9999, 0.9999);\n y = pixelOrigin.y + 0.5 * (Math.log((1 + sinY) / (1 - sinY))) * (-(size / (2 * Math.PI)));\n break;\n case 'Winkel3':\n value = aitoff(lngRadian, latRadian);\n lng = (value.x + lngRadian / (Math.PI / 2)) / 2;\n lat = (value.y + latRadian) / 2;\n break;\n case 'Miller':\n lng = lngRadian;\n lat = (1.25 * Math.log(Math.tan((Math.PI / 4) + (.4 * latRadian))));\n break;\n case 'Eckert3':\n temp = Math.sqrt(Math.PI * (4 + Math.PI));\n lng = 2 / temp * lngRadian * (1 + Math.sqrt(1 - 4 * latRadian * latRadian / (Math.PI * Math.PI)));\n lat = 4 / temp * latRadian;\n break;\n case 'AitOff':\n value = aitoff(lngRadian, latRadian);\n lng = value.x;\n lat = value.y;\n break;\n case 'Eckert5':\n lng = lngRadian * (1 + Math.cos(latRadian)) / Math.sqrt(2 + Math.PI);\n lat = 2 * latRadian / Math.sqrt(2 + Math.PI);\n break;\n case 'Equirectangular':\n lng = lngRadian;\n lat = latRadian;\n break;\n case 'Eckert6':\n var epsilon = 1e-6;\n temp = (1 + (Math.PI / 2)) * Math.sin(latRadian);\n var delta = Infinity;\n for (var i = 0; i < 10 && Math.abs(delta) > epsilon; i++) {\n delta = (latRadian + (Math.sin(latRadian)) - temp) / (1 + Math.cos(latRadian));\n latRadian = latRadian - delta;\n }\n temp = Math.sqrt(2 + Math.PI);\n lng = lngRadian * (1 + Math.cos(latRadian)) / temp;\n lat = 2 * latRadian / temp;\n break;\n }\n x = (type === 'Mercator') ? x : roundTo(xToCoordinate(mapModel, radiansToDegrees(lng)), 3);\n y = (type === 'Mercator') ? y : (-(roundTo(yToCoordinate(mapModel, radiansToDegrees(lat)), 3)));\n }\n return new Point(x, y);\n}\n/**\n * Converting tile latitude and longitude to point\n */\nexport function convertTileLatLongToPoint(center, zoomLevel, tileTranslatePoint, isMapCoordinates) {\n var size = Math.pow(2, zoomLevel) * 256;\n var x = (center.x + 180) / 360;\n var sinLatitude = Math.sin(center.y * Math.PI / 180);\n var y = 0.5 - Math.log((1 + sinLatitude) / (1 - sinLatitude)) / (4 * Math.PI);\n var pixelX = center.x;\n var pixelY = center.y;\n if (isMapCoordinates) {\n pixelX = (x * size + 0.5) + tileTranslatePoint.x;\n pixelY = (y * size + 0.5) + tileTranslatePoint.y;\n }\n return { x: pixelX, y: pixelY };\n}\n/**\n * Method for calculate x point\n */\nexport function xToCoordinate(mapObject, val) {\n var longitudeMinMax = mapObject.baseMapBounds.longitude;\n var totalSize = isNullOrUndefined(mapObject.baseSize) ? mapObject.mapAreaRect.width : mapObject.mapAreaRect.width +\n (Math.abs(mapObject.baseSize.width - mapObject.mapAreaRect.width) / 2);\n return Math.round(totalSize * (val - longitudeMinMax.min) / (longitudeMinMax.max - longitudeMinMax.min) * 100) / 100;\n}\n/**\n * Method for calculate y point\n */\nexport function yToCoordinate(mapObject, val) {\n var latitudeMinMax = mapObject.baseMapBounds.latitude;\n return Math.round(mapObject.mapAreaRect.height * (val - latitudeMinMax.min) / (latitudeMinMax.max - latitudeMinMax.min) * 100) / 100;\n}\n/**\n * Method for calculate aitoff projection\n */\nexport function aitoff(x, y) {\n var cosy = Math.cos(y);\n var sincia = sinci(acos(cosy * Math.cos(x /= 2)));\n return new Point(2 * cosy * Math.sin(x) * sincia, Math.sin(y) * sincia);\n}\n/**\n * Method to round the number\n */\nexport function roundTo(a, b) {\n var c = Math.pow(10, b);\n return (Math.round(a * c) / c);\n}\nexport function sinci(x) {\n return x / Math.sin(x);\n}\nexport function acos(a) {\n return Math.acos(a);\n}\n/**\n * Method to calculate bound\n */\nexport function calculateBound(value, min, max) {\n if (!isNullOrUndefined(min)) {\n value = Math.max(value, min);\n }\n if (!(isNullOrUndefined(max))) {\n value = Math.min(value, max);\n }\n return value;\n}\n/**\n * Map internal class for point\n */\nvar Point = /** @class */ (function () {\n function Point(x, y) {\n this.x = x;\n this.y = y;\n }\n return Point;\n}());\nexport { Point };\n/**\n * Map internal class for min and max\n *\n */\nvar MinMax = /** @class */ (function () {\n function MinMax(min, max) {\n this.min = min;\n this.max = max;\n }\n return MinMax;\n}());\nexport { MinMax };\n/**\n * Map internal class locations\n */\nvar GeoLocation = /** @class */ (function () {\n function GeoLocation(latitude, longitude) {\n this.latitude = new MinMax(latitude.min, latitude.max);\n this.longitude = new MinMax(longitude.min, longitude.max);\n }\n return GeoLocation;\n}());\nexport { GeoLocation };\n/**\n * Function to measure the height and width of the text.\n * @param {string} text\n * @param {FontModel} font\n * @param {string} id\n * @returns no\n * @private\n */\nexport function measureText(text, font) {\n var htmlObject = document.getElementById('mapsmeasuretext');\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'mapsmeasuretext' });\n document.body.appendChild(htmlObject);\n }\n htmlObject.innerHTML = text;\n htmlObject.style.position = 'absolute';\n htmlObject.style.fontSize = font.size;\n htmlObject.style.fontWeight = font.fontWeight;\n htmlObject.style.fontStyle = font.fontStyle;\n htmlObject.style.fontFamily = font.fontFamily;\n htmlObject.style.visibility = 'hidden';\n htmlObject.style.top = '-100';\n htmlObject.style.left = '0';\n htmlObject.style.whiteSpace = 'nowrap';\n // For bootstrap line height issue\n htmlObject.style.lineHeight = 'normal';\n return new Size(htmlObject.clientWidth, htmlObject.clientHeight);\n}\n/**\n * Internal use of text options\n * @private\n */\nvar TextOption = /** @class */ (function () {\n function TextOption(id, x, y, anchor, text, transform, baseLine) {\n if (transform === void 0) { transform = ''; }\n this.transform = '';\n this.baseLine = 'auto';\n this.id = id;\n this.x = x;\n this.y = y;\n this.anchor = anchor;\n this.text = text;\n this.transform = transform;\n this.baseLine = baseLine;\n }\n return TextOption;\n}());\nexport { TextOption };\n/**\n * Internal use of path options\n * @private\n */\nvar PathOption = /** @class */ (function () {\n function PathOption(id, fill, width, color, opacity, dashArray, d) {\n this.id = id;\n this.opacity = opacity;\n this.fill = fill;\n this.stroke = color;\n this['stroke-width'] = width;\n this['stroke-dasharray'] = dashArray;\n this.d = d;\n }\n return PathOption;\n}());\nexport { PathOption };\n/**\n * Internal use of rectangle options\n * @private\n */\nvar RectOption = /** @class */ (function (_super) {\n __extends(RectOption, _super);\n function RectOption(id, fill, border, opacity, rect, rx, ry, transform, dashArray) {\n var _this = _super.call(this, id, fill, border.width, border.color, opacity, dashArray) || this;\n _this.y = rect.y;\n _this.x = rect.x;\n _this.height = rect.height;\n _this.width = rect.width;\n _this.rx = rx ? rx : 0;\n _this.ry = ry ? ry : 0;\n _this.transform = transform ? transform : '';\n _this['stroke-dasharray'] = dashArray;\n return _this;\n }\n return RectOption;\n}(PathOption));\nexport { RectOption };\n/**\n * Internal use of circle options\n * @private\n */\nvar CircleOption = /** @class */ (function (_super) {\n __extends(CircleOption, _super);\n function CircleOption(id, fill, border, opacity, cx, cy, r, dashArray) {\n var _this = _super.call(this, id, fill, border.width, border.color, opacity) || this;\n _this.cy = cy;\n _this.cx = cx;\n _this.r = r;\n _this['stroke-dasharray'] = dashArray;\n return _this;\n }\n return CircleOption;\n}(PathOption));\nexport { CircleOption };\n/**\n * Internal use of polygon options\n * @private\n */\nvar PolygonOption = /** @class */ (function (_super) {\n __extends(PolygonOption, _super);\n function PolygonOption(id, points, fill, width, color, opacity, dashArray) {\n if (opacity === void 0) { opacity = 1; }\n if (dashArray === void 0) { dashArray = ''; }\n var _this = _super.call(this, id, fill, width, color, opacity, dashArray) || this;\n _this.points = points;\n return _this;\n }\n return PolygonOption;\n}(PathOption));\nexport { PolygonOption };\n/**\n * Internal use of polyline options\n * @private\n */\nvar PolylineOption = /** @class */ (function (_super) {\n __extends(PolylineOption, _super);\n function PolylineOption(id, points, fill, width, color, opacity, dashArray) {\n if (opacity === void 0) { opacity = 1; }\n if (dashArray === void 0) { dashArray = ''; }\n return _super.call(this, id, points, fill, width, color, opacity, dashArray) || this;\n }\n return PolylineOption;\n}(PolygonOption));\nexport { PolylineOption };\n/**\n * Internal use of line options\n * @private\n */\nvar LineOption = /** @class */ (function (_super) {\n __extends(LineOption, _super);\n function LineOption(id, line, fill, width, color, opacity, dashArray) {\n if (opacity === void 0) { opacity = 1; }\n if (dashArray === void 0) { dashArray = ''; }\n var _this = _super.call(this, id, fill, width, color, opacity, dashArray) || this;\n _this.x1 = line.x1;\n _this.y1 = line.y1;\n _this.x2 = line.x2;\n _this.y2 = line.y2;\n return _this;\n }\n return LineOption;\n}(PathOption));\nexport { LineOption };\n/**\n * Internal use of line\n * @property\n */\nvar Line = /** @class */ (function () {\n function Line(x1, y1, x2, y2) {\n this.x1 = x1;\n this.y1 = y1;\n this.x2 = x2;\n this.y2 = y2;\n }\n return Line;\n}());\nexport { Line };\n/**\n * Internal use of map location type\n * @private\n */\nvar MapLocation = /** @class */ (function () {\n function MapLocation(x, y) {\n this.x = x;\n this.y = y;\n }\n return MapLocation;\n}());\nexport { MapLocation };\n/**\n * Internal use of type rect\n * @private\n */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\n/**\n * Internal use for pattern creation.\n * @property\n */\nvar PatternOptions = /** @class */ (function () {\n function PatternOptions(id, x, y, width, height, patternUnits, patternContentUnits, patternTransform, href) {\n if (patternUnits === void 0) { patternUnits = 'userSpaceOnUse'; }\n if (patternContentUnits === void 0) { patternContentUnits = 'userSpaceOnUse'; }\n if (patternTransform === void 0) { patternTransform = ''; }\n if (href === void 0) { href = ''; }\n this.id = id;\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n this.patternUnits = patternUnits;\n this.patternContentUnits = patternContentUnits;\n this.patternTransform = patternTransform;\n this.href = href;\n }\n return PatternOptions;\n}());\nexport { PatternOptions };\n/**\n * Internal rendering of text\n * @private\n */\nexport function renderTextElement(options, font, color, parent, isMinus) {\n if (isMinus === void 0) { isMinus = false; }\n var renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'fill': color,\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight,\n 'text-anchor': options.anchor,\n 'transform': options.transform,\n 'opacity': font.opacity,\n 'dominant-baseline': options.baseLine\n };\n var text = typeof options.text === 'string' ? options.text : isMinus ? options.text[options.text.length - 1] : options.text[0];\n var tspanElement;\n var renderer = new SvgRenderer('');\n var height;\n var htmlObject = renderer.createText(renderOptions, text);\n htmlObject.style['user-select'] = 'none';\n htmlObject.style['-moz-user-select'] = 'none';\n htmlObject.style['-webkit-touch-callout'] = 'none';\n htmlObject.style['-webkit-user-select'] = 'none';\n htmlObject.style['-khtml-user-select'] = 'none';\n htmlObject.style['-ms-user-select'] = 'none';\n htmlObject.style['-o-user-select'] = 'none';\n if (typeof options.text !== 'string' && options.text.length > 1) {\n for (var i = 1, len = options.text.length; i < len; i++) {\n height = (measureText(options.text[i], font).height);\n tspanElement = renderer.createTSpan({\n 'x': options.x, 'id': options.id,\n 'y': (options.y) + ((isMinus) ? -(i * height) : (i * height))\n }, isMinus ? options.text[options.text.length - (i + 1)] : options.text[i]);\n htmlObject.appendChild(tspanElement);\n }\n }\n parent.appendChild(htmlObject);\n return htmlObject;\n}\n/**\n * @private\n */\nexport function convertElement(element, markerId, data, index, mapObj) {\n var childElement = createElement('div', {\n id: markerId,\n styles: 'position: absolute;pointer-events: auto;'\n });\n while (element.length > 0) {\n childElement.appendChild(element[0]);\n }\n var templateHtml = childElement.innerHTML;\n var properties = Object.keys(data);\n for (var i = 0; i < properties.length; i++) {\n if (properties[i].toLowerCase() !== 'latitude' && properties[i].toLowerCase() !== 'longitude') {\n templateHtml = templateHtml.replace(new RegExp('{{:' + properties[i] + '}}', 'g'), data[properties[i].toString()]);\n }\n }\n childElement.innerHTML = templateHtml;\n return childElement;\n}\nexport function convertElementFromLabel(element, labelId, data, index, mapObj) {\n var labelEle = isNullOrUndefined(element.childElementCount) ? element[0] : element;\n var templateHtml = labelEle.outerHTML;\n var properties = Object.keys(data);\n for (var i = 0; i < properties.length; i++) {\n templateHtml = templateHtml.replace(new RegExp('{{:' + properties[i] + '}}', 'g'), data[properties[i].toString()]);\n }\n return createElement('div', {\n id: labelId,\n innerHTML: templateHtml,\n styles: 'position: absolute'\n });\n}\n/**\n * Internal use of append shape element\n * @private\n */\nexport function appendShape(shape, element) {\n if (element) {\n element.appendChild(shape);\n }\n return shape;\n}\n/**\n * Internal rendering of Circle\n * @private\n */\nexport function drawCircle(maps, options, element) {\n return appendShape(maps.renderer.drawCircle(options), element);\n}\n/**\n * Internal rendering of Rectangle\n * @private\n */\nexport function drawRectangle(maps, options, element) {\n return appendShape(maps.renderer.drawRectangle(options), element);\n}\n/**\n * Internal rendering of Path\n * @private\n */\nexport function drawPath(maps, options, element) {\n return appendShape(maps.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of Polygon\n * @private\n */\nexport function drawPolygon(maps, options, element) {\n return appendShape(maps.renderer.drawPolygon(options), element);\n}\n/**\n * Internal rendering of Polyline\n * @private\n */\nexport function drawPolyline(maps, options, element) {\n return appendShape(maps.renderer.drawPolyline(options), element);\n}\n/**\n * Internal rendering of Line\n * @private\n */\nexport function drawLine(maps, options, element) {\n return appendShape(maps.renderer.drawLine(options), element);\n}\n/**\n * @private\n * Calculate marker shapes\n */\nexport function calculateShapes(maps, shape, options, size, location, markerEle) {\n var tempGroup;\n switch (shape) {\n case 'Balloon':\n tempGroup = drawBalloon(maps, options, size, location, markerEle);\n break;\n case 'Cross':\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' + (location.y + size.height\n / 2) + ' M ' + (location.x - size.width / 2) + ' ' + location.y + ' L ' + (location.x + size.width / 2) + ' ' + location.y;\n break;\n case 'Diamond':\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + (location.x + size.width / 2) + ' '\n + location.y + ' L ' + location.x + ' ' + (location.y + size.height / 2) + ' L ' + (location.x - size.width / 2)\n + ' ' + location.y + ' Z';\n break;\n case 'Star':\n options.d = 'M ' + (location.x + size.width / 3) + ' ' + (location.y - size.height / 2) + ' L ' + (location.x - size.width / 2)\n + ' ' + (location.y + size.height / 6) + ' L ' + (location.x + size.width / 2) + ' ' + (location.y + size.height / 6)\n + ' L ' + (location.x - size.width / 3) + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' +\n (location.y + size.height / 2) + ' L ' + (location.x + size.width / 3) + ' ' + (location.y - size.height / 2) + ' Z';\n break;\n case 'Triangle':\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + (location.x + size.width / 2) + ' ' +\n (location.y + size.height / 2) + ' L ' + (location.x - size.width / 2) + ' ' + (location.y + size.height / 2) + ' Z';\n break;\n case 'HorizontalLine':\n options.d = ' M ' + (location.x - size.width / 2) + ' ' + location.y + ' L ' + (location.x + size.width / 2) + ' '\n + location.y;\n break;\n case 'VerticalLine':\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' +\n (location.y + size.height / 2);\n break;\n }\n return shape === 'Balloon' ? tempGroup : maps.renderer.drawPath(options);\n}\n/**\n * Internal rendering of Diamond\n * @private\n */\nexport function drawDiamond(maps, options, size, location, element) {\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + (location.x + size.width / 2) + ' ' + location.y +\n ' L ' + location.x + ' ' + (location.y + size.height / 2) + ' L ' + (location.x - size.width / 2) + ' ' + location.y + ' Z';\n return appendShape(maps.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of Triangle\n * @private\n */\nexport function drawTriangle(maps, options, size, location, element) {\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + (location.x + size.width / 2) + ' ' +\n (location.y + size.height / 2) + ' L ' + (location.x - size.width / 2) + ' ' + (location.y + size.height / 2) + ' Z';\n return appendShape(maps.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of Cross\n * @private\n */\nexport function drawCross(maps, options, size, location, element) {\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' + (location.y + size.height / 2) +\n ' M ' + (location.x - size.width / 2) + ' ' + location.y + ' L ' + (location.x + size.width / 2) + ' ' + location.y;\n return appendShape(maps.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of HorizontalLine\n * @private\n */\nexport function drawHorizontalLine(maps, options, size, location, element) {\n options.d = ' M ' + (location.x - size.width / 2) + ' ' + location.y + ' L ' + (location.x + size.width / 2) + ' ' + location.y;\n return appendShape(maps.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of VerticalLine\n * @private\n */\nexport function drawVerticalLine(maps, options, size, location, element) {\n options.d = 'M ' + location.x + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' + (location.y + size.height / 2);\n return appendShape(maps.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of Star\n * @private\n */\nexport function drawStar(maps, options, size, location, element) {\n options.d = 'M ' + (location.x + size.width / 3) + ' ' + (location.y - size.height / 2) + ' L ' + (location.x - size.width / 2)\n + ' ' + (location.y + size.height / 6) + ' L ' + (location.x + size.width / 2) + ' ' + (location.y + size.height / 6) + ' L '\n + (location.x - size.width / 3) + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' + (location.y + size.height / 2)\n + ' L ' + (location.x + size.width / 3) + ' ' + (location.y - size.height / 2) + ' Z';\n return appendShape(maps.renderer.drawPath(options), element);\n}\n/**\n * Internal rendering of Balloon\n * @private\n */\nexport function drawBalloon(maps, options, size, location, element) {\n var width = size.width;\n var height = size.height;\n var padding = 5;\n location.x -= width / 2;\n location.y -= height;\n options.d = 'M15,0C8.8,0,3.8,5,3.8,11.2C3.8,17.5,9.4,24.4,15,30c5.6-5.6,11.2-12.5,11.2-18.8C26.2,5,21.2,0,15,0z M15,16' +\n 'c-2.8,0-5-2.2-5-5s2.2-5,5-5s5,2.2,5,5S17.8,16,15,16z';\n var balloon = maps.renderer.drawPath(options);\n var x = size.width / 22.5;\n var y = size.height / 30;\n balloon.setAttribute('transform', 'translate(' + location.x + ', ' + location.y + ') scale(' + x + ', ' + y + ')');\n var g = maps.renderer.createGroup({ id: options.id });\n appendShape(balloon, g);\n return appendShape(g, element);\n}\n/**\n * Internal rendering of Pattern\n * @private\n */\nexport function drawPattern(maps, options, elements, element) {\n var pattern = maps.renderer.createPattern(options, 'pattern');\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var ele = elements_1[_i];\n appendShape(ele, pattern);\n }\n return appendShape(pattern, element);\n}\n/**\n * Method to get specific field and vaues from data.\n * @private\n */\n// tslint:disable:no-any\nexport function getFieldData(dataSource, fields) {\n var newData = [];\n var data;\n for (var _i = 0, dataSource_1 = dataSource; _i < dataSource_1.length; _i++) {\n var temp = dataSource_1[_i];\n data = {};\n for (var _a = 0, fields_1 = fields; _a < fields_1.length; _a++) {\n var field = fields_1[_a];\n if (temp[field]) {\n data[field] = temp[field];\n }\n }\n newData.push(data);\n }\n return newData;\n}\n/**\n * To find the index of dataSource from shape properties\n */\n// tslint:disable:no-string-literal\nexport function checkShapeDataFields(dataSource, properties, dataPath, propertyPath) {\n if (!(isNullOrUndefined(properties))) {\n for (var i = 0; i < dataSource.length; i++) {\n if (dataSource[i][dataPath] === properties[propertyPath]) {\n return i;\n }\n }\n }\n return null;\n}\nexport function filter(points, start, end) {\n var pointObject = [];\n for (var i = 0; i < points.length; i++) {\n var point = points[i];\n if (start <= point.y && end >= point.y) {\n pointObject.push(point);\n }\n }\n return pointObject;\n}\n/**\n * To find the midpoint of the polygon from points\n */\nexport function findMidPointOfPolygon(points) {\n if (!points.length) {\n return null;\n }\n var min = 0;\n var max = points.length;\n var startX;\n var startY;\n var startX1;\n var startY1;\n var sum = 0;\n var xSum = 0;\n var ySum = 0;\n for (var i = min; i <= max - 1; i++) {\n startX = points[i].x;\n startY = points[i].y;\n if (i === max - 1) {\n startX1 = points[0].x;\n startY1 = points[0].y;\n }\n else {\n startX1 = points[i + 1].x;\n startY1 = points[i + 1].y;\n }\n sum = sum + Math.abs(((startX * startY1)) - (startX1 * startY));\n xSum = xSum + Math.abs(((startX + startX1) * (((startX * startY1) - (startX1 * startY)))));\n ySum = ySum + Math.abs(((startY + startY1) * (((startX * startY1) - (startX1 * startY)))));\n }\n sum = 0.5 * sum;\n xSum = (1 / (4 * sum)) * xSum;\n ySum = (1 / (4 * sum)) * ySum;\n /* Code for finding nearest points in polygon related to midPoint*/\n var rightMinPoint = { x: 0, y: 0 };\n var rightMaxPoint = { x: 0, y: 0 };\n var leftMinPoint = { x: 0, y: 0 };\n var leftMaxPoint = { x: 0, y: 0 };\n var bottomMinPoint = { x: 0, y: 0 };\n var bottomMaxPoint = { x: 0, y: 0 };\n var topMinPoint = { x: 0, y: 0 };\n var topMaxPoint = { x: 0, y: 0 };\n var height = 0;\n for (var i = min; i <= max - 1; i++) {\n var point = points[i];\n if (point.y > ySum) {\n if (point.x < xSum && xSum - point.x < xSum - bottomMinPoint.x) {\n bottomMinPoint = { x: point.x, y: point.y };\n }\n else if (point.x > xSum && (bottomMaxPoint.x === 0 || point.x - xSum < bottomMaxPoint.x - xSum)) {\n bottomMaxPoint = { x: point.x, y: point.y };\n }\n }\n else {\n if (point.x < xSum && xSum - point.x < xSum - topMinPoint.x) {\n topMinPoint = { x: point.x, y: point.y };\n }\n else if (point.x > xSum && (topMaxPoint.x === 0 || point.x - xSum < topMaxPoint.x - xSum)) {\n topMaxPoint = { x: point.x, y: point.y };\n }\n }\n height = (bottomMaxPoint.y - topMaxPoint.y) + ((bottomMaxPoint.y - topMaxPoint.y) / 4);\n if (point.x > xSum) {\n if (point.y < ySum && ySum - point.y < ySum - rightMinPoint.y) {\n rightMinPoint = { x: point.x, y: point.y };\n }\n else if (point.y > ySum && (rightMaxPoint.y === 0 || point.y - ySum < rightMaxPoint.y - ySum)) {\n rightMaxPoint = { x: point.x, y: point.y };\n }\n }\n else {\n if (point.y < ySum && ySum - point.y < ySum - leftMinPoint.y) {\n leftMinPoint = { x: point.x, y: point.y };\n }\n else if (point.y > ySum && (leftMaxPoint.y === 0 || point.y - ySum < leftMaxPoint.y - ySum)) {\n leftMaxPoint = { x: point.x, y: point.y };\n }\n }\n }\n return {\n x: xSum, y: ySum, rightMin: rightMinPoint, rightMax: rightMaxPoint,\n leftMin: leftMinPoint, leftMax: leftMaxPoint, points: points, topMax: topMaxPoint, topMin: topMinPoint,\n bottomMax: bottomMaxPoint, bottomMin: bottomMinPoint, height: height\n };\n}\n/**\n * @private\n * Check custom path\n */\n/* tslint:disable:no-string-literal */\nexport function isCustomPath(layerData) {\n var customPath = false;\n if (Object.prototype.toString.call(layerData) === '[object Array]') {\n layerData.forEach(function (layer, index) {\n if (!isNullOrUndefined(layer['geometry']) && layer['geometry']['type'] === 'Path') {\n customPath = true;\n }\n });\n }\n return customPath;\n}\n/**\n * @private\n * Trim the title text\n */\nexport function textTrim(maxWidth, text, font) {\n var label = text;\n var size = measureText(text, font).width;\n if (size > maxWidth) {\n var textLength = text.length;\n for (var i = textLength - 1; i >= 0; --i) {\n label = text.substring(0, i) + '...';\n size = measureText(label, font).width;\n if (size <= maxWidth || label.length < 4) {\n if (label.length < 4) {\n label = ' ';\n }\n return label;\n }\n }\n }\n return label;\n}\n/**\n * Method to calculate x position of title\n */\nexport function findPosition(location, alignment, textSize, type) {\n var x;\n var y;\n switch (alignment) {\n case 'Near':\n x = location.x;\n break;\n case 'Center':\n x = (type === 'title') ? (location.width / 2 - textSize.width / 2) :\n ((location.x + (location.width / 2)) - textSize.width / 2);\n break;\n case 'Far':\n x = (type === 'title') ? (location.width - location.y - textSize.width) :\n ((location.x + location.width) - textSize.width);\n break;\n }\n y = (type === 'title') ? location.y + (textSize.height / 2) : ((location.y + location.height / 2) + textSize.height / 2);\n return new Point(x, y);\n}\n/**\n * To remove element by id\n */\nexport function removeElement(id) {\n var element = document.getElementById(id);\n return element ? remove(element) : null;\n}\n/**\n * @private\n */\nexport function getTranslate(mapObject, layer, animate) {\n var zoomFactor = animate ? 1 : mapObject.zoomSettings.zoomFactor;\n var min = mapObject.baseMapRectBounds['min'];\n var max = mapObject.baseMapRectBounds['max'];\n var size = mapObject.mapAreaRect;\n var availSize = mapObject.availableSize;\n var x;\n var y;\n var mapWidth = Math.abs(max['x'] - min['x']);\n var mapHeight = Math.abs(min['y'] - max['y']);\n var factor = animate ? 1 : mapObject.zoomSettings.zoomFactor;\n var scaleFactor;\n var scaleX;\n var scaleY;\n var center = mapObject.centerPosition;\n if (!isNullOrUndefined(center.longitude) && !isNullOrUndefined(center.latitude)) {\n var leftPosition = ((mapWidth + Math.abs(mapObject.mapAreaRect.width - mapWidth)) / 2) / factor;\n var topPosition = ((mapHeight + Math.abs(mapObject.mapAreaRect.height - mapHeight)) / 2) / factor;\n var point = convertGeoToPoint(center.latitude, center.longitude, mapObject.mapLayerPanel.calculateFactor(layer), layer, mapObject);\n x = -point.x + leftPosition;\n y = -point.y + topPosition;\n scaleFactor = zoomFactor;\n }\n else {\n scaleFactor = parseFloat(Math.min(size.width / mapWidth, size.height / mapHeight).toFixed(2));\n mapWidth *= scaleFactor;\n mapHeight *= scaleFactor;\n x = size.x + ((-(min['x'])) + ((size.width / 2) - (mapWidth / 2)));\n y = size.y + ((-(min['y'])) + ((size.height / 2) - (mapHeight / 2)));\n }\n return { scale: scaleFactor, location: new Point(x, y) };\n}\n/**\n * To get the html element by specified id\n */\nexport function getElementByID(id) {\n return document.getElementById(id);\n}\n/**\n * To apply internalization\n */\nexport function Internalize(maps, value) {\n maps.formatFunction =\n maps.intl.getNumberFormat({ format: maps.format, useGrouping: maps.useGroupingSeparator });\n return maps.formatFunction(value);\n}\n/**\n * Function to compile the template function for maps.\n * @returns Function\n * @private\n */\nexport function getTemplateFunction(template) {\n var templateFn = null;\n var e;\n try {\n if (document.querySelectorAll(template).length) {\n templateFn = templateComplier(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n templateFn = templateComplier(template);\n }\n return templateFn;\n}\n/**\n * Function to get element from id.\n * @returns Element\n * @private\n */\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/**\n * Function to get shape data using target id\n */\nexport function getShapeData(targetId, map) {\n var layerIndex = parseInt(targetId.split('_LayerIndex_')[1].split('_')[0], 10);\n var shapeIndex = parseInt(targetId.split('_ShapeIndex_')[1].split('_')[0], 10);\n var layer = map.layers[layerIndex];\n var shapeData = layer.layerData[shapeIndex]['property'];\n var data;\n if (layer.dataSource) {\n data = layer.dataSource[checkShapeDataFields(layer.dataSource, shapeData, layer.shapeDataPath, layer.shapePropertyPath)];\n }\n return { shapeData: shapeData, data: data };\n}\n/**\n * Function to trigger shapeSelected event\n * @private\n */\nexport function triggerShapeEvent(targetId, selection, maps, eventName) {\n var shape = getShapeData(targetId, maps);\n var eventArgs = {\n cancel: false,\n name: eventName,\n fill: selection.fill,\n opacity: selection.opacity,\n border: selection.border,\n shapeData: shape.shapeData,\n data: shape.data,\n target: targetId\n };\n maps.trigger(eventName, eventArgs);\n return eventArgs;\n}\n/**\n * Function to get elements using class name\n */\nexport function getElementsByClassName(className) {\n return document.getElementsByClassName(className);\n}\n/**\n * Function to get elements using querySelectorAll\n */\n// export function querySelectorAll(args: string, element: Element): NodeListOf {\n// return element.querySelectorAll('.' + args);\n// }\n/**\n * Function to get elements using querySelector\n */\nexport function querySelector(args, elementSelector) {\n var targetEle = null;\n if (document.getElementById(elementSelector)) {\n targetEle = document.getElementById(elementSelector).querySelector('#' + args);\n }\n return targetEle;\n}\n/**\n * Function to get the element for selection and highlight using public method\n */\nexport function getTargetElement(layerIndex, name, enable, map) {\n var shapeIndex;\n var targetId;\n var targetEle;\n var shapeData = map.layers[layerIndex].shapeData['features'];\n for (var i = 0; i < shapeData.length; i++) {\n if (shapeData[i]['properties'].name === name) {\n targetId = map.element.id + '_' + 'LayerIndex_' + layerIndex + '_ShapeIndex_' + i + '_dataIndex_undefined';\n break;\n }\n }\n targetEle = getElement(targetId);\n return targetEle;\n}\n/**\n * Function to create style element for highlight and selection\n */\nexport function createStyle(id, className, eventArgs) {\n return createElement('style', {\n id: id, innerHTML: '.' + className + '{fill:'\n + eventArgs.fill + ';' + 'opacity:' + eventArgs.opacity.toString() + ';' +\n '}'\n });\n}\n/**\n * Function to customize the style for highlight and selection\n */\nexport function customizeStyle(id, className, eventArgs) {\n var styleEle = getElement(id);\n styleEle.innerHTML = '.' + className + '{fill:'\n + eventArgs.fill + ';' + 'opacity:' + eventArgs.opacity.toString() + ';' +\n 'stroke-width:' + eventArgs.border.width.toString() +\n 'stroke-color:' + eventArgs.border.color + '}';\n}\n/**\n * Function to remove class from element\n */\nexport function removeClass(element) {\n element.removeAttribute('class');\n}\n/**\n * Animation Effect Calculation End\n * @private\n */\nexport function elementAnimate(element, delay, duration, point, maps, ele, radius) {\n if (radius === void 0) { radius = 0; }\n var centerX = point.x;\n var centerY = point.y;\n var height = 0;\n var transform = element.getAttribute('transform') || '';\n new Animation({}).animate(element, {\n duration: duration,\n delay: delay,\n progress: function (args) {\n if (args.timeStamp > args.delay) {\n height = ((args.timeStamp - args.delay) / args.duration);\n element.setAttribute('transform', 'translate( ' + (centerX - (radius * height)) + ' ' + (centerY - (radius * height)) +\n ' ) scale(' + height + ')');\n }\n },\n end: function (model) {\n element.setAttribute('transform', transform);\n if (!ele) {\n return;\n }\n var event = {\n cancel: false, name: animationComplete, element: ele, maps: maps\n };\n maps.trigger(animationComplete, event);\n }\n });\n}\nexport function timeout(id) {\n removeElement(id);\n}\nexport function showTooltip(text, size, x, y, areaWidth, areaHeight, id, element, isTouch) {\n var tooltip = document.getElementById(id);\n var width = measureText(text, {\n fontFamily: 'Segoe UI', size: '8px',\n fontStyle: 'Normal', fontWeight: 'Regular'\n }).width;\n var str = text.split(' ');\n var demo = str[0].length;\n for (var i = 1; i < str.length; i++) {\n if (demo < str[i].length) {\n demo = str[i].length;\n }\n }\n if (!tooltip) {\n tooltip = createElement('div', {\n id: id,\n styles: 'background-color: rgb(255, 255, 255) !important; color:black !important; ' +\n 'position:absolute;border:1px solid rgb(0, 0, 0); padding-left:5px;' +\n 'font-size:12px; font-family: \"Segoe UI\"; text-align:center'\n });\n }\n if (x < (areaWidth - width)) {\n x = x;\n }\n else if (x > (areaWidth - width) && x < areaWidth - (demo * 8)) {\n width = (areaWidth - x);\n }\n else if (x >= areaWidth - demo * 8) {\n if (x > width) {\n x = x - width;\n }\n else {\n width = x;\n x = 0;\n }\n }\n var size1 = size.split('px');\n wordWrap(tooltip, text, x, y, size1, width, areaWidth, element);\n var height = tooltip.clientHeight;\n if ((height + parseInt(size1[0], 10) * 2) > areaHeight) {\n width = x;\n x = 0;\n }\n wordWrap(tooltip, text, x, y, size1, width, areaWidth, element);\n if (isTouch) {\n setTimeout(timeout, 5000, id);\n }\n}\nexport function wordWrap(tooltip, text, x, y, size1, width, areaWidth, element) {\n tooltip.innerHTML = text;\n tooltip.style.top = (y + parseInt(size1[0], 10)).toString() + 'px';\n tooltip.style.left = (x).toString() + 'px';\n tooltip.style.width = width.toString() + 'px';\n tooltip.style.maxWidth = (areaWidth).toString() + 'px';\n tooltip.style.wordWrap = 'break-word';\n element.appendChild(tooltip);\n}\n// /**\n// * \n// * @param touchList \n// * @param e \n// * @param touches \n// */\n// export function addTouchPointer(touchList: ITouches[], e: PointerEvent, touches: TouchList): ITouches[] {\n// if (touches) {\n// touchList = [];\n// for (let i: number = 0, length: number = touches.length; i < length; i++) {\n// touchList.push({ pageX: touches[i].clientX, pageY: touches[i].clientY, pointerId: null });\n// }\n// } else {\n// touchList = touchList ? touchList : [];\n// if (touchList.length === 0) {\n// touchList.push({ pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId });\n// } else {\n// for (let i: number = 0, length: number = touchList.length; i < length; i++) {\n// if (touchList[i].pointerId === e.pointerId) {\n// touchList[i] = { pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId };\n// } else {\n// touchList.push({ pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId });\n// }\n// }\n// }\n// }\n// return touchList;\n// }\n/** @private */\nexport function createTooltip(id, text, top, left, fontSize) {\n var tooltip = getElement(id);\n var style = 'top:' + top.toString() + 'px;' +\n 'left:' + left.toString() + 'px;' +\n 'background:' + '#FFFFFF' + ';' +\n 'position:absolute;border:1px solid #707070;font-size:' + fontSize + ';border-radius:2px;';\n if (!tooltip) {\n tooltip = createElement('div', {\n id: id, innerHTML: ' ' + text + ' ', styles: style\n });\n document.body.appendChild(tooltip);\n }\n else {\n tooltip.setAttribute('innerHTML', ' ' + text + ' ');\n tooltip.setAttribute('styles', style);\n }\n}\n/** @private */\nexport function drawSymbol(location, shape, size, url, options) {\n var functionName = 'Path';\n var renderer = new SvgRenderer('');\n var temp = calculateLegendShapes(location, size, shape, options, url);\n var htmlObject = renderer['draw' + temp.functionName](temp.renderOption);\n return htmlObject;\n}\n/** @private */\nexport function calculateLegendShapes(location, size, shape, options, url) {\n var path;\n var functionName = 'Path';\n var width = size.width;\n var height = size.height;\n var locX = location.x;\n var locY = location.y;\n var x = location.x + (-width / 2);\n var y = location.y + (-height / 2);\n switch (shape) {\n case 'Circle':\n case 'Bubble':\n functionName = 'Ellipse';\n merge(options, { 'rx': width / 2, 'ry': height / 2, 'cx': locX, 'cy': locY });\n break;\n case 'Star':\n path = 'M ' + (location.x + size.width / 3) + ' ' + (location.y - size.height / 2) + ' L ' + (location.x - size.width / 2)\n + ' ' + (location.y + size.height / 6) + ' L ' + (location.x + size.width / 2) + ' ' + (location.y + size.height / 6)\n + ' L ' + (location.x - size.width / 3) + ' ' + (location.y - size.height / 2) + ' L ' + location.x + ' ' +\n (location.y + size.height / 2) + ' L ' + (location.x + size.width / 3) + ' ' + (location.y - size.height / 2) + ' Z';\n merge(options, { 'd': path });\n break;\n case 'Cross':\n path = 'M' + ' ' + x + ' ' + locY + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'M' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + locX + ' ' +\n (locY + (-height / 2));\n merge(options, { 'd': path });\n break;\n case 'HorizontalLine':\n path = 'M' + ' ' + x + ' ' + locY + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + locY;\n merge(options, { 'd': path });\n break;\n case 'VerticalLine':\n path = 'M' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + locX + ' ' + (locY + (-height / 2));\n merge(options, { 'd': path });\n break;\n case 'Diamond':\n path = 'M' + ' ' + x + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + locY + ' z';\n merge(options, { 'd': path });\n break;\n case 'Rectangle':\n path = 'M' + ' ' + x + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (-height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Triangle':\n path = 'M' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'InvertedTriangle':\n path = 'M' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + (locX - (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Pentagon':\n var eq = 72;\n var xValue = void 0;\n var yValue = void 0;\n for (var i = 0; i <= 5; i++) {\n xValue = (width / 2) * Math.cos((Math.PI / 180) * (i * eq));\n yValue = (height / 2) * Math.sin((Math.PI / 180) * (i * eq));\n if (i === 0) {\n path = 'M' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ';\n }\n else {\n path = path.concat('L' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ');\n }\n }\n path = path.concat('Z');\n merge(options, { 'd': path });\n break;\n case 'Image':\n functionName = 'Image';\n merge(options, { 'href': url, 'height': height, 'width': width, x: x, y: y });\n break;\n }\n return { renderOption: options, functionName: functionName };\n}\n/**\n * Animation Effect Calculation End\n * @private\n */\n// export function markerTemplateAnimate(element: Element, delay: number, duration: number, point: MapLocation): void {\n// let delta: number = 0;\n// let top: string = (element as HTMLElement).style.top;\n// let y: number = parseInt(top, 10);\n// new Animation({}).animate(element, {\n// duration: duration,\n// delay: delay,\n// progress: (args: AnimationOptions): void => {\n// if (args.timeStamp > args.delay) {\n// delta = ((args.timeStamp - args.delay) / args.duration);\n// (element as HTMLElement).style.top = y - 100 + (delta * 100) + 'px';\n// }\n// },\n// end: (model: AnimationOptions) => {\n// (element as HTMLElement).style.top = top;\n// }\n// });\n// }\n/** @private */\nexport function getElementOffset(childElement, parentElement) {\n var width;\n var height;\n parentElement.appendChild(childElement);\n width = childElement.offsetWidth;\n height = childElement.offsetHeight;\n parentElement.removeChild(childElement);\n return new Size(width, height);\n}\n/** @private */\nexport function changeBorderWidth(element, index, scale, maps) {\n var childNode;\n for (var l = 0; l < element.childElementCount; l++) {\n childNode = element.childNodes[l];\n if (childNode.id.indexOf('_NavigationGroup') > -1) {\n changeNavaigationLineWidth(childNode, index, scale, maps);\n }\n else {\n var currentStroke = (maps.layersCollection[index].shapeSettings.border.width);\n childNode.setAttribute('stroke-width', (currentStroke / scale).toString());\n }\n }\n}\n/** @private */\nexport function changeNavaigationLineWidth(element, index, scale, maps) {\n var node;\n for (var m = 0; m < element.childElementCount; m++) {\n node = element.childNodes[m];\n if (node.tagName === 'path') {\n var currentStroke = (maps.layersCollection[index]\n .navigationLineSettings[parseFloat(node.id.split('_')[2])].width);\n node.setAttribute('stroke-width', (currentStroke / scale).toString());\n }\n }\n}\n// /** Pinch zoom helper methods */\n/** @private */\nexport function targetTouches(event) {\n var targetTouches = [];\n var touches = event.touches;\n for (var i = 0; i < touches.length; i++) {\n targetTouches.push({ pageX: touches[i].pageX, pageY: touches[i].pageY });\n }\n return targetTouches;\n}\n/** @private */\nexport function calculateScale(startTouches, endTouches) {\n var startDistance = getDistance(startTouches[0], startTouches[1]);\n var endDistance = getDistance(endTouches[0], endTouches[1]);\n return (endDistance / startDistance);\n}\n/** @private */\nexport function getDistance(a, b) {\n var x = a.pageX - b.pageX;\n var y = a.pageY - b.pageY;\n return Math.sqrt(x * x + y * y);\n}\n/** @private */\nexport function getTouches(touches, maps) {\n var rect = maps.element.getBoundingClientRect();\n var posTop = rect.top + document.defaultView.pageXOffset;\n var posLeft = rect.left + document.defaultView.pageYOffset;\n return Array.prototype.slice.call(touches).map(function (touch) {\n return {\n x: touch.pageX - posLeft,\n y: touch.pageY - posTop,\n };\n });\n}\n/** @private */\nexport function getTouchCenter(touches) {\n return {\n x: touches.map(function (e) { return e['x']; }).reduce(sum) / touches.length,\n y: touches.map(function (e) { return e['y']; }).reduce(sum) / touches.length\n };\n}\n/** @private */\nexport function sum(a, b) {\n return a + b;\n}\n/**\n * Animation Effect Calculation End\n * @private\n */\nexport function zoomAnimate(element, delay, duration, point, scale, size, maps) {\n var delta = 0;\n var previousLocation = maps.previousPoint;\n var preScale = maps.previousScale;\n var diffScale = scale - preScale;\n var currentLocation = new MapLocation(0, 0);\n var currentScale = 1;\n if (scale === preScale) {\n element.setAttribute('transform', 'scale( ' + (scale) + ' ) translate( ' + point.x + ' ' + point.y + ' )');\n return;\n }\n var slope = function (previousLocation, point) {\n if (previousLocation.x === point.x) {\n return null;\n }\n return (point.y - previousLocation.y) / (point.x - previousLocation.x);\n };\n var intercept = function (point, slopeValue) {\n if (slopeValue === null) {\n return point.x;\n }\n return point.y - slopeValue * point.x;\n };\n var slopeFactor = slope(previousLocation, point);\n var slopeIntersection = intercept(previousLocation, slopeFactor);\n var horizontalDifference = point.x - previousLocation.x;\n var verticalDifference = point.y - previousLocation.y;\n animate(element, delay, duration, function (args) {\n if (args.timeStamp > args.delay) {\n delta = ((args.timeStamp - args.delay) / args.duration);\n currentScale = preScale + (delta * diffScale);\n currentLocation.x = previousLocation.x + (delta * horizontalDifference) / (currentScale / scale);\n if (slopeFactor == null) {\n currentLocation.y = previousLocation.y + (delta * verticalDifference);\n }\n else {\n currentLocation.y = ((slopeFactor * currentLocation.x) + slopeIntersection);\n }\n args.element.setAttribute('transform', 'scale( ' + currentScale + ' ) ' +\n 'translate( ' + currentLocation.x + ' ' + currentLocation.y + ' )');\n maps.translatePoint = currentLocation;\n maps.scale = currentScale;\n maps.zoomModule.processTemplate(point.x, point.y, currentScale, maps);\n }\n }, function () {\n maps.translatePoint = point;\n maps.scale = scale;\n element.setAttribute('transform', 'scale( ' + (scale) + ' ) translate( ' + point.x + ' ' + point.y + ' )');\n maps.zoomModule.processTemplate(point.x, point.y, scale, maps);\n });\n}\n/**\n * To process custom animation\n */\nexport function animate(element, delay, duration, process, end) {\n var _this = this;\n var start = null;\n var clearAnimation;\n var startAnimation = function (timestamp) {\n if (!start) {\n start = timestamp;\n }\n var progress = timestamp - start;\n if (progress < duration) {\n process.call(_this, { element: element, delay: 0, timeStamp: progress, duration: duration });\n window.requestAnimationFrame(startAnimation);\n }\n else {\n window.cancelAnimationFrame(clearAnimation);\n end.call(_this, { element: element });\n }\n };\n clearAnimation = window.requestAnimationFrame(startAnimation);\n}\nvar MapAjax = /** @class */ (function () {\n function MapAjax(url, sendData) {\n this.url = null;\n this.sendData = null;\n this.url = url;\n this.sendData = sendData;\n }\n return MapAjax;\n}());\nexport { MapAjax };\n/**\n * Animation Translate\n * @private\n */\nexport function smoothTranslate(element, delay, duration, point) {\n var delta = 0;\n var transform = element.getAttribute('transform').split(' ');\n if (transform.length === 2) {\n transform[2] = transform[1].split(')')[0];\n transform[1] = transform[0].split('(')[1];\n }\n var previousLocation = new MapLocation(parseInt(transform[1], 10), parseInt(transform[2], 10));\n var diffx = point.x - previousLocation.x;\n var diffy = point.y - previousLocation.y;\n var currentLocation = new MapLocation(0, 0);\n animate(element, delay, duration, function (args) {\n if (args.timeStamp > args.delay) {\n delta = ((args.timeStamp - args.delay) / args.duration);\n currentLocation.x = previousLocation.x + (delta * diffx);\n currentLocation.y = previousLocation.y + (delta * diffy);\n args.element.setAttribute('transform', 'translate( ' + currentLocation.x + ' ' + currentLocation.y + ' )');\n }\n }, function () {\n element.setAttribute('transform', 'translate( ' + point.x + ' ' + point.y + ' )');\n });\n}\n","/**\n * Schedule common utilities\n */\nexport var WEEK_LENGTH = 7;\nexport var MS_PER_DAY = 86400000;\nexport var MS_PER_MINUTE = 60000;\nexport function getWeekFirstDate(date1, firstDayOfWeek) {\n var date = new Date(date1.getTime());\n firstDayOfWeek = (firstDayOfWeek - date.getDay() + 7 * (-1)) % 7;\n return new Date(date.setDate(date.getDate() + firstDayOfWeek));\n}\nexport function firstDateOfMonth(date) {\n return new Date(date.getFullYear(), date.getMonth());\n}\nexport function lastDateOfMonth(dt) {\n return new Date(dt.getFullYear(), dt.getMonth() + 1, 0);\n}\nexport function getWeekNumber(dt) {\n var currentDate = new Date('' + dt).valueOf();\n var date = new Date(dt.getFullYear(), 0, 1).valueOf();\n var a = (currentDate - date);\n return Math.ceil((((a) / MS_PER_DAY) + new Date(date).getDay() + 1) / 7);\n}\nexport function setTime(date, time) {\n var tzOffsetBefore = date.getTimezoneOffset();\n var d = new Date(date.getTime() + time);\n var tzOffsetDiff = d.getTimezoneOffset() - tzOffsetBefore;\n date.setTime(d.getTime() + tzOffsetDiff * MS_PER_DAY);\n return date;\n}\nexport function resetTime(date) {\n date.setHours(0, 0, 0, 0);\n return date;\n}\nexport function getDateInMs(date) {\n return date.getTime() - new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0).getTime();\n}\nexport function addDays(date, i) {\n date = new Date('' + date);\n return new Date(date.setDate(date.getDate() + i));\n}\nexport function addMonths(date, i) {\n date = new Date('' + date);\n var day = date.getDate();\n date.setDate(1);\n date.setMonth(date.getMonth() + i);\n date.setDate(Math.min(day, getMaxDays(date)));\n return date;\n}\nexport function addYears(date, i) {\n date = new Date('' + date);\n var day = date.getDate();\n date.setDate(1);\n date.setFullYear(date.getFullYear() + i);\n date.setDate(Math.min(day, getMaxDays(date)));\n return date;\n}\nexport function getStartEndHours(date, startHour, endHour) {\n var date1 = new Date(date.getTime());\n date1.setHours(startHour.getHours());\n date1.setMinutes(startHour.getMinutes());\n date1.setSeconds(startHour.getSeconds());\n var date2 = new Date(date.getTime());\n if (endHour.getHours() === 0) {\n date2 = addDays(date2, 1);\n }\n else {\n date2.setHours(endHour.getHours());\n date2.setMinutes(endHour.getMinutes());\n date2.setSeconds(endHour.getSeconds());\n }\n return { startHour: date1, endHour: date2 };\n}\nexport function getMaxDays(d) {\n var date = new Date(d.getFullYear(), d.getMonth() + 1, 0);\n return date.getDate();\n}\nexport function getDaysCount(startDate, endDate) {\n var strTime = resetTime(new Date(startDate));\n var endTime = resetTime(new Date(endDate));\n return (endTime.getTime() - strTime.getTime()) / MS_PER_DAY;\n}\n/** @hidden */\nvar scrollWidth = null;\n/** @hidden */\nexport function getScrollBarWidth() {\n if (scrollWidth !== null) {\n return scrollWidth;\n }\n var divNode = document.createElement('div');\n var value = 0;\n divNode.style.cssText = 'width:100px;height: 100px;overflow: scroll;position: absolute;top: -9999px;';\n document.body.appendChild(divNode);\n value = (divNode.offsetWidth - divNode.clientWidth) | 0;\n document.body.removeChild(divNode);\n return scrollWidth = value;\n}\n","import { isNullOrUndefined, getDefaultDateObject, getValue, cldrData } from '@syncfusion/ej2-base';\nimport { MS_PER_DAY } from '../schedule/base/util';\n/**\n * Date Generator from Recurrence Rule\n */\nexport function generateSummary(rule, localeObject, locale) {\n var ruleObject = extractObjectFromRule(rule);\n var summary = localeObject.getConstant(EVERY) + ' ';\n var cldrObj;\n var cldrObj1;\n if (locale === 'en' || locale === 'en-US') {\n cldrObj1 = (getValue('months.stand-alone.abbreviated', getDefaultDateObject()));\n cldrObj = (getValue('days.stand-alone.abbreviated', getDefaultDateObject()));\n }\n else {\n cldrObj1 = (getValue('main.' + '' + locale + '.dates.calendars.gregorian.months.stand-alone.abbreviated', cldrData));\n cldrObj = (getValue('main.' + '' + locale + '.dates.calendars.gregorian.days.stand-alone.abbreviated', cldrData));\n }\n if (ruleObject.interval > 1) {\n summary += ruleObject.interval + ' ';\n }\n switch (ruleObject.freq) {\n case 'DAILY':\n summary += localeObject.getConstant(DAYS);\n break;\n case 'WEEKLY':\n summary += localeObject.getConstant(WEEKS) + ' ' + localeObject.getConstant(ON) + ' ';\n ruleObject.day.forEach(function (day, index) {\n summary += getValue(DAYINDEXOBJECT[day], cldrObj);\n summary += (((ruleObject.day.length - 1) === index) ? '' : ', ');\n });\n break;\n case 'MONTHLY':\n summary += localeObject.getConstant(MONTHS) + ' ' + localeObject.getConstant(ON) + ' ';\n summary += getMonthSummary(ruleObject, cldrObj, localeObject);\n break;\n case 'YEARLY':\n summary += localeObject.getConstant(YEARS) + ' ' + localeObject.getConstant(ON) + ' ';\n summary += getValue((ruleObject.month[0]).toString(), cldrObj1) + ' ';\n summary += getMonthSummary(ruleObject, cldrObj, localeObject);\n break;\n default:\n return '';\n }\n if (ruleObject.count) {\n summary += ', ' + (ruleObject.count) + ' ' + localeObject.getConstant(TIMES);\n }\n else if (ruleObject.until) {\n var tempDate = ruleObject.until;\n summary += ', ' + localeObject.getConstant(UNTIL)\n + ' ' + tempDate.getDate()\n + ' ' + getValue((tempDate.getMonth() + 1).toString(), cldrObj1)\n + ' ' + tempDate.getFullYear();\n }\n return summary;\n}\nfunction getMonthSummary(ruleObject, cldrObj, localeObj) {\n var summary = '';\n if (ruleObject.monthDay.length) {\n summary += ruleObject.monthDay[0];\n }\n else if (ruleObject.day) {\n var pos = ruleObject.setPosition - 1;\n summary += localeObj.getConstant(WEEKPOS[pos > -1 ? pos : (WEEKPOS.length - 1)])\n + ' ' + getValue(DAYINDEXOBJECT[ruleObject.day[0]], cldrObj);\n }\n return summary;\n}\nexport function generate(startDate, rule, excludeDate, startDayOfWeek, maximumCount, viewDate) {\n if (maximumCount === void 0) { maximumCount = MAXOCCURRENCE; }\n if (viewDate === void 0) { viewDate = null; }\n var ruleObject = extractObjectFromRule(rule);\n var cacheDate;\n var data = [];\n var modifiedDate = new Date(startDate.getTime());\n if (viewDate && viewDate > startDate && !ruleObject.count) {\n tempViewDate = new Date(new Date(viewDate.getTime()).setHours(0, 0, 0));\n }\n else {\n tempViewDate = null;\n }\n if (!ruleObject.until && tempViewDate) {\n cacheDate = new Date(tempViewDate.getTime());\n cacheDate.setDate(tempViewDate.getDate() + 42 * (ruleObject.interval));\n ruleObject.until = cacheDate;\n }\n if (ruleObject.until && startDate > ruleObject.until) {\n return data;\n }\n maxOccurrence = maximumCount;\n setFirstDayOfWeek(DAYINDEX[startDayOfWeek]);\n tempExcludeDate = [];\n var tempDate = isNullOrUndefined(excludeDate) ? [] : excludeDate.split(',');\n tempDate.forEach(function (content) {\n var parsedDate = getDateFromRecurrenceDateString(content);\n tempExcludeDate.push(new Date(parsedDate.getTime()).setHours(0, 0, 0, 0));\n });\n switch (ruleObject.freq) {\n case 'DAILY':\n dailyType(modifiedDate, ruleObject.until, data, ruleObject);\n break;\n case 'WEEKLY':\n weeklyType(modifiedDate, ruleObject.until, data, ruleObject);\n break;\n case 'MONTHLY':\n monthlyType(modifiedDate, ruleObject.until, data, ruleObject);\n break;\n case 'YEARLY':\n yearlyType(modifiedDate, ruleObject.until, data, ruleObject);\n }\n return data;\n}\nfunction getDateFromRecurrenceDateString(recDateString) {\n return new Date(recDateString.substr(0, 4) +\n '-' + recDateString.substr(4, 2) +\n '-' + recDateString.substr(6, 5) +\n ':' + recDateString.substr(11, 2) +\n ':' + recDateString.substr(13));\n}\nfunction excludeDateHandler(data, date) {\n var zeroIndex = new Date(date).setHours(0, 0, 0, 0);\n if (tempExcludeDate.indexOf(zeroIndex) === -1 && (!tempViewDate || zeroIndex >= tempViewDate.getTime())) {\n data.push(date);\n }\n}\nfunction dailyType(startDate, endDate, data, ruleObject) {\n var tempDate = new Date(startDate.getTime());\n var interval = ruleObject.interval;\n var expectedCount = ruleObject.count ? ruleObject.count : maxOccurrence;\n var state;\n while (compareDates(tempDate, endDate)) {\n state = true;\n state = validateRules(tempDate, ruleObject);\n if (state) {\n excludeDateHandler(data, tempDate.getTime());\n if (expectedCount && (data.length + tempExcludeDate.length) >= expectedCount) {\n break;\n }\n }\n tempDate.setDate(tempDate.getDate() + interval);\n }\n}\nfunction weeklyType(startDate, endDate, data, ruleObject) {\n var tempDate = getStartDateForWeek(startDate, ruleObject.day);\n var interval = ruleObject.interval;\n var expectedDays = ruleObject.day;\n var expectedCount = ruleObject.count ? ruleObject.count : maxOccurrence;\n var state;\n var dayCycleData = processWeekDays(expectedDays);\n while (compareDates(tempDate, endDate)) {\n state = true;\n state = validateRules(tempDate, ruleObject);\n if (state) {\n excludeDateHandler(data, tempDate.getTime());\n if (expectedCount && (data.length + tempExcludeDate.length) >= expectedCount) {\n break;\n }\n }\n if (expectedDays.length > 1) {\n tempDate.setDate(tempDate.getDate()\n + dayCycleData[DAYINDEX[tempDate.getDay()]]\n + ((expectedDays.indexOf(DAYINDEX[tempDate.getDay()]) === expectedDays.length - 1) ?\n ((interval - 1) * 7) : 0));\n }\n else {\n tempDate.setDate(tempDate.getDate()\n + (interval * 7));\n }\n }\n}\nfunction monthlyType(startDate, endDate, data, ruleObject) {\n var ruleType = validateMonthlyRuleType(ruleObject);\n switch (ruleType) {\n case 'day':\n monthlyDayTypeProcess(startDate, endDate, data, ruleObject);\n break;\n case 'both':\n case 'date':\n monthlyDateTypeProcess(startDate, endDate, data, ruleObject);\n break;\n }\n}\nfunction yearlyType(startDate, endDate, data, ruleObject) {\n var typeValue = checkYearlyType(ruleObject);\n switch (typeValue) {\n case 'MONTH':\n monthlyType(startDate, endDate, data, ruleObject);\n break;\n case 'WEEKNO':\n processWeekNo(startDate, endDate, data, ruleObject);\n break;\n case 'YEARDAY':\n processYearDay(startDate, endDate, data, ruleObject);\n break;\n }\n}\nfunction processWeekNo(startDate, endDate, data, ruleObject) {\n var stDate = new Date(startDate.getFullYear(), 0, 0);\n var tempDate;\n var expectedCount = ruleObject.count ? ruleObject.count : maxOccurrence;\n var state;\n var startDay;\n var firstWeekSpan;\n var weekNos = ruleObject.weekNo;\n var weekNo;\n var maxDate;\n var minDate;\n while (compareDates(stDate, endDate)) {\n startDay = dayIndex.indexOf(DAYINDEX[stDate.getDay()]);\n firstWeekSpan = (6 - startDay) + 1;\n for (var index = 0; index < weekNos.length; index++) {\n weekNo = weekNos[index];\n weekNo = (weekNo > 0) ? weekNo : 53 + weekNo + 1;\n maxDate = (weekNo === 1) ? firstWeekSpan : firstWeekSpan + ((weekNo - 1) * 7);\n minDate = (weekNo === 1) ? firstWeekSpan - 7 : firstWeekSpan + ((weekNo - 2) * 7);\n while (minDate < maxDate) {\n tempDate = new Date(stDate.getTime() + (MS_PER_DAY * minDate));\n state = validateRules(tempDate, ruleObject);\n if ((tempDate >= startDate) && state && compareDates(tempDate, endDate)) {\n excludeDateHandler(data, tempDate.getTime());\n if (expectedCount && (data.length + tempExcludeDate.length) >= expectedCount) {\n return;\n }\n }\n minDate++;\n }\n }\n stDate = new Date(tempDate.getFullYear() + ruleObject.interval, 0, 0);\n }\n}\nfunction processYearDay(startDate, endDate, data, ruleObject) {\n var stDate = new Date(startDate.getFullYear(), 0, 0);\n var tempDate;\n var expectedCount = ruleObject.count ? ruleObject.count : maxOccurrence;\n var state;\n var date;\n while (compareDates(stDate, endDate)) {\n for (var index = 0; index < ruleObject.yearDay.length; index++) {\n date = ruleObject.yearDay[index];\n tempDate = new Date(stDate.getTime());\n if ((date === LEAPYEAR || date === -LEAPYEAR) && ((tempDate.getFullYear() + 1) % 4 !== 0)) {\n tempDate.setDate(tempDate.getDate() + 1);\n continue;\n }\n tempDate.setDate(tempDate.getDate() + ((date < 0) ? getMaxYearDay(tempDate.getFullYear() + 1) + 1 + date : date));\n state = validateRules(tempDate, ruleObject);\n if ((tempDate >= startDate) && state && compareDates(tempDate, endDate)) {\n excludeDateHandler(data, tempDate.getTime());\n if (expectedCount && (data.length + tempExcludeDate.length) >= expectedCount) {\n return;\n }\n }\n }\n stDate = new Date(tempDate.getFullYear() + ruleObject.interval, 0, 0);\n }\n}\nfunction getMaxYearDay(date) {\n return (date % 4 === 0) ? LEAPYEAR : NORMALYEAR;\n}\nfunction checkYearlyType(ruleObject) {\n if (ruleObject.yearDay.length) {\n return 'YEARDAY';\n }\n else if (ruleObject.weekNo.length) {\n return 'WEEKNO';\n }\n return 'MONTH';\n}\nfunction monthlyDateTypeProcess(startDate, endDate, data, ruleObject) {\n var tempDate = new Date(startDate.getTime());\n var mainDate = new Date(startDate.getTime());\n var expectedCount = ruleObject.count ? ruleObject.count : maxOccurrence;\n var interval = ruleObject.interval;\n var monthInit = 0;\n var date;\n var state;\n tempDate.setDate(1);\n mainDate.setDate(1);\n if (ruleObject.month.length) {\n tempDate.setMonth(ruleObject.month[0] - 1);\n }\n while (compareDates(tempDate, endDate)) {\n for (var index = 0; index < ruleObject.monthDay.length; index++) {\n date = ruleObject.monthDay[index];\n var maxDate = (tempDate.getMonth() === 1) ?\n (tempDate.getFullYear() % 4 === 0 ? 29 : 28) : monthDay[tempDate.getMonth()];\n date = date > 0 ? date : (maxDate + date + 1);\n if ((date > 0) && validateProperDate(tempDate, date, mainDate)) {\n tempDate.setDate(date);\n if (endDate && tempDate > endDate) {\n return;\n }\n state = validateRules(tempDate, ruleObject);\n if ((tempDate >= startDate) && state && compareDates(tempDate, endDate)) {\n excludeDateHandler(data, tempDate.getTime());\n if (expectedCount && (data.length + tempExcludeDate.length) >= expectedCount) {\n return;\n }\n }\n }\n }\n monthInit = setNextValidDate(tempDate, ruleObject, monthInit, interval);\n }\n}\nfunction setNextValidDate(tempDate, ruleObject, monthInit, interval, beginDate) {\n if (beginDate === void 0) { beginDate = null; }\n var monthData = beginDate ? beginDate.getMonth() : 0;\n tempDate.setDate(1);\n if (ruleObject.month.length) {\n monthInit++;\n monthInit = monthInit % ruleObject.month.length;\n tempDate.setMonth(ruleObject.month[monthInit] - 1);\n if (monthInit === 0) {\n tempDate.setFullYear(tempDate.getFullYear() + interval);\n }\n }\n else {\n if (beginDate && (beginDate.getFullYear() < tempDate.getFullYear())) {\n monthData = tempDate.getMonth() - 1;\n }\n tempDate.setMonth((beginDate ?\n monthData :\n tempDate.getMonth()) + interval);\n }\n return monthInit;\n}\nfunction monthlyDayTypeProcess(startDate, endDate, data, ruleObject) {\n var tempDate = new Date(startDate.getTime());\n var expectedDays = ruleObject.day;\n var expectedCount = ruleObject.count ? ruleObject.count : maxOccurrence;\n var dayCycleData = processWeekDays(expectedDays);\n var interval = ruleObject.interval;\n var state;\n var monthCollection = [];\n var weekCollection = [];\n var month;\n var index;\n var beginDate;\n var monthInit = 0;\n tempDate.setDate(1);\n if (ruleObject.month.length) {\n tempDate.setMonth(ruleObject.month[0] - 1);\n }\n tempDate = getStartDateForWeek(tempDate, ruleObject.day);\n while (compareDates(tempDate, endDate)) {\n month = tempDate.getMonth();\n beginDate = new Date(tempDate.getTime());\n if (expectedDays.length > 1) {\n while (tempDate.getMonth() === month) {\n weekCollection.push(tempDate.getTime());\n if (DAYINDEX[tempDate.getDay()] === expectedDays[expectedDays.length - 1]) {\n monthCollection.push(weekCollection);\n weekCollection = [];\n }\n tempDate.setDate(tempDate.getDate()\n + dayCycleData[DAYINDEX[tempDate.getDay()]]);\n }\n }\n else {\n while (tempDate.getMonth() === month) {\n monthCollection.push([tempDate.getTime()]);\n tempDate.setDate(tempDate.getDate()\n + (7));\n }\n }\n index = ((ruleObject.setPosition < 1) ? (monthCollection.length + ruleObject.setPosition) : ruleObject.setPosition - 1);\n if (ruleObject.setPosition === null) {\n index = 0;\n var datas = [];\n for (var week = 0; week < monthCollection.length; week++) {\n for (var row = 0; row < monthCollection[week].length; row++) {\n datas.push(monthCollection[week][row]);\n }\n }\n monthCollection = [datas];\n }\n for (var week = 0; week < monthCollection[index].length; week++) {\n var dayData = monthCollection[index][week];\n var chDate = new Date(dayData);\n state = validateRules(chDate, ruleObject);\n if ((chDate >= startDate) && compareDates(chDate, endDate) && state) {\n excludeDateHandler(data, dayData);\n if (expectedCount && (data.length + tempExcludeDate.length) >= expectedCount) {\n return;\n }\n }\n }\n monthInit = setNextValidDate(tempDate, ruleObject, monthInit, interval, beginDate);\n monthCollection = [];\n weekCollection = [];\n tempDate = getStartDateForWeek(tempDate, ruleObject.day);\n }\n}\nfunction compareDates(startDate, endDate) {\n return endDate ? (startDate <= endDate) : true;\n}\nfunction checkDayIndex(day, expectedDays) {\n return (expectedDays.indexOf(DAYINDEX[day]) === -1);\n}\nfunction getStartDateForWeek(startDate, expectedDays) {\n var tempDate = new Date(startDate.getTime());\n if (expectedDays.indexOf(DAYINDEX[tempDate.getDay()]) === -1) {\n do {\n tempDate.setDate(tempDate.getDate() + 1);\n } while (expectedDays.indexOf(DAYINDEX[tempDate.getDay()]) === -1);\n }\n return tempDate;\n}\nexport function extractObjectFromRule(rules) {\n var ruleObject = {\n freq: null,\n interval: 1,\n count: null,\n until: null,\n day: [],\n month: [],\n weekNo: [],\n monthDay: [],\n yearDay: [],\n setPosition: null,\n validRules: []\n };\n var rulesList = rules.split(';');\n var splitData = [];\n var temp;\n rulesList.forEach(function (data) {\n splitData = data.split('=');\n switch (splitData[0]) {\n case 'UNTIL':\n temp = splitData[1];\n ruleObject.until = getDateFromRecurrenceDateString(temp);\n break;\n case 'BYDAY':\n ruleObject.day = splitData[1].split(',');\n ruleObject.validRules.push(splitData[0]);\n break;\n case 'BYMONTHDAY':\n ruleObject.monthDay = splitData[1].split(',').map(Number);\n ruleObject.validRules.push(splitData[0]);\n break;\n case 'BYMONTH':\n ruleObject.month = splitData[1].split(',').map(Number);\n ruleObject.validRules.push(splitData[0]);\n break;\n case 'BYYEARDAY':\n ruleObject.yearDay = splitData[1].split(',').map(Number);\n ruleObject.validRules.push(splitData[0]);\n break;\n case 'BYWEEKNO':\n ruleObject.weekNo = splitData[1].split(',').map(Number);\n ruleObject.validRules.push(splitData[0]);\n break;\n case 'INTERVAL':\n ruleObject.interval = parseInt(splitData[1], 10);\n break;\n case 'COUNT':\n ruleObject.count = parseInt(splitData[1], 10);\n break;\n case 'BYSETPOS':\n ruleObject.setPosition = parseInt(splitData[1], 10);\n break;\n case 'FREQ':\n ruleObject.freq = splitData[1];\n break;\n }\n });\n if ((ruleObject.freq === 'MONTHLY') && (ruleObject.monthDay.length === 0)) {\n var index = ruleObject.validRules.indexOf('BYDAY');\n ruleObject.validRules.splice(index, 1);\n }\n return ruleObject;\n}\nfunction validateProperDate(tempDate, data, startDate) {\n var maxDate = (tempDate.getMonth() === 1) ? (tempDate.getFullYear() % 4 === 0 ? 29 : 28) : monthDay[tempDate.getMonth()];\n return (data <= maxDate) && (tempDate >= startDate);\n}\nfunction processWeekDays(expectedDays) {\n var dayCycle = {};\n expectedDays.forEach(function (element, index) {\n if (index === expectedDays.length - 1) {\n var startIndex = dayIndex.indexOf(element);\n var temp = startIndex;\n while (temp % 7 !== dayIndex.indexOf(expectedDays[0])) {\n temp++;\n }\n dayCycle[element] = temp - startIndex;\n }\n else {\n dayCycle[element] = dayIndex.indexOf(expectedDays[(index + 1)]) - dayIndex.indexOf(element);\n }\n });\n return dayCycle;\n}\nfunction checkMonth(tempDate, expectedMonth) {\n return (expectedMonth.indexOf(tempDate.getMonth() + 1) === -1);\n}\nfunction checkDate(tempDate, expectedDate) {\n var temp = expectedDate.slice(0);\n var data;\n var maxDate = (tempDate.getMonth() === 1) ?\n (tempDate.getFullYear() % 4 === 0 ? 29 : 28) : monthDay[tempDate.getMonth()];\n data = temp.shift();\n while (data) {\n if (data < 0) {\n data = data + maxDate + 1;\n }\n if (data === tempDate.getDate()) {\n return false;\n }\n data = temp.shift();\n }\n return true;\n}\nfunction checkYear(tempDate, expectedyearDay) {\n var temp = expectedyearDay.slice(0);\n var data;\n var yearDay = getYearDay(tempDate);\n data = temp.shift();\n while (data) {\n if (data < 0) {\n data = data + getMaxYearDay(tempDate.getFullYear()) + 1;\n }\n if (data === yearDay) {\n return false;\n }\n data = temp.shift();\n }\n return true;\n}\nfunction getYearDay(currentDate) {\n if (!startDateCollection[currentDate.getFullYear()]) {\n startDateCollection[currentDate.getFullYear()] = new Date(currentDate.getFullYear(), 0, 0);\n }\n var tempDate = startDateCollection[currentDate.getFullYear()];\n var diff = currentDate.getTime() - tempDate.getTime();\n return Math.ceil(diff / MS_PER_DAY);\n}\nfunction validateMonthlyRuleType(ruleObject) {\n if (ruleObject.monthDay.length && !ruleObject.day.length) {\n return 'date';\n }\n else if (!ruleObject.monthDay.length && ruleObject.day.length) {\n return 'day';\n }\n return 'both';\n}\nfunction rotate(days) {\n var data = days.shift();\n days.push(data);\n}\nfunction setFirstDayOfWeek(day) {\n while (dayIndex[0] !== day) {\n rotate(dayIndex);\n }\n}\nfunction validateRules(tempDate, ruleObject) {\n var state = true;\n var expectedDays = ruleObject.day;\n var expectedMonth = ruleObject.month;\n var expectedDate = ruleObject.monthDay;\n var expectedyearDay = ruleObject.yearDay;\n ruleObject.validRules.forEach(function (rule) {\n switch (rule) {\n case 'BYDAY':\n if (checkDayIndex(tempDate.getDay(), expectedDays)) {\n state = false;\n }\n break;\n case 'BYMONTH':\n if (checkMonth(tempDate, expectedMonth)) {\n state = false;\n }\n break;\n case 'BYMONTHDAY':\n if (checkDate(tempDate, expectedDate)) {\n state = false;\n }\n break;\n case 'BYYEARDAY':\n if (checkYear(tempDate, expectedyearDay)) {\n state = false;\n }\n break;\n }\n });\n return state;\n}\nvar startDateCollection = {};\nvar propertyKeys = {\n FREQ: 'freq',\n BYDAY: 'day',\n BYSETPOS: 'setPos',\n UNTIL: 'until',\n INTERVAL: 'interval',\n COUNT: 'count',\n BYMONTH: 'month',\n BYWEEKNO: 'weekNo',\n BYMONTHDAY: 'monthDay',\n BYYEARDAY: 'yearDay'\n};\nvar tempExcludeDate;\nvar dayIndex = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];\nvar maxOccurrence;\nvar tempViewDate;\nvar monthDay = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nvar DAYINDEX = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];\nvar MAXOCCURRENCE = 43;\nvar LEAPYEAR = 366;\nvar NORMALYEAR = 365;\nvar WEEKPOS = ['first', 'second', 'third', 'fourth', 'last'];\nvar MONTHDATA = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];\nvar TIMES = 'summaryTimes';\nvar ON = 'summaryOn';\nvar REPEAT = 'summaryRepeat';\nvar EVERY = 'every';\nvar UNTIL = 'summaryUntil';\nvar DAYS = 'summaryDay';\nvar WEEKS = 'summaryWeek';\nvar MONTHS = 'summaryMonth';\nvar YEARS = 'summaryYear';\nvar DAYINDEXOBJECT = {\n SU: 'sun',\n MO: 'mon',\n TU: 'tue',\n WE: 'wed',\n TH: 'thu',\n FR: 'fri',\n SA: 'sat'\n};\nexport function getRecurrenceStringFromDate(date) {\n return [date.getUTCFullYear(),\n roundDateValues(date.getUTCMonth() + 1),\n roundDateValues(date.getUTCDate()),\n 'T',\n roundDateValues(date.getUTCHours()),\n roundDateValues(date.getUTCMinutes()),\n roundDateValues(date.getUTCSeconds()),\n 'Z'].join('');\n}\nfunction roundDateValues(date) {\n return ('0' + date).slice(-2);\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, extend, deleteObject, Property } from '@syncfusion/ej2-base';\n/**\n * @param props\n * @param model\n */\nexport function getModel(props, model) {\n var obj = extend({}, props);\n for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n var prop = _a[_i];\n if ((model).indexOf(prop) < 0) {\n deleteObject(obj, prop);\n }\n }\n return obj;\n}\nvar Item = /** @class */ (function (_super) {\n __extends(Item, _super);\n function Item() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Item.prototype, \"iconCss\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"id\", void 0);\n __decorate([\n Property(false)\n ], Item.prototype, \"separator\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"url\", void 0);\n return Item;\n}(ChildProperty));\nexport { Item };\n","import { isNullOrUndefined, merge } from './util';\nvar headerRegex = /^(.*?):[ \\t]*([^\\r\\n]*)$/gm;\nvar defaultType = 'GET';\n/**\n * Ajax class provides ability to make asynchronous HTTP request to the server\n * ```typescript\n * var ajax = new Ajax(\"index.html\", \"GET\", true);\n * ajax.send().then(\n * function (value) {\n * console.log(value);\n * },\n * function (reason) {\n * console.log(reason);\n * });\n * ```\n */\nvar Ajax = /** @class */ (function () {\n /**\n * Constructor for Ajax class\n * @param {string|Object} options?\n * @param {string} type?\n * @param {boolean} async?\n * @returns defaultType\n */\n function Ajax(options, type, async) {\n /**\n * A boolean value indicating whether the request should be sent asynchronous or not.\n * @default true\n */\n this.mode = true;\n this.options = {};\n if (typeof options === 'string') {\n this.url = options;\n this.type = type ? type.toUpperCase() : defaultType;\n this.mode = !isNullOrUndefined(async) ? async : true;\n }\n else if (typeof options === 'object') {\n this.options = options;\n merge(this, this.options);\n }\n this.type = this.type ? this.type.toUpperCase() : defaultType;\n }\n /**\n * Send the request to server.\n * @param {any} data - To send the user data\n * @return {Promise}\n */\n Ajax.prototype.send = function (data) {\n var _this = this;\n this.data = isNullOrUndefined(data) ? this.data : data;\n var promise = new Promise(function (resolve, reject) {\n _this.httpRequest = new XMLHttpRequest();\n _this.httpRequest.onreadystatechange = function () { _this.stateChange(resolve, reject); };\n _this.httpRequest.open(_this.type, _this.url, _this.mode);\n // Set default headers\n if (!isNullOrUndefined(_this.data)) {\n _this.httpRequest.setRequestHeader('Content-Type', _this.contentType || 'application/json; charset=utf-8');\n }\n if (_this.beforeSend) {\n _this.beforeSend();\n }\n _this.httpRequest.send(!isNullOrUndefined(_this.data) ? _this.data : null);\n });\n return promise;\n };\n Ajax.prototype.successHandler = function (data) {\n if (this.onSuccess) {\n this.onSuccess(data, this);\n }\n return data;\n };\n Ajax.prototype.failureHandler = function (reason) {\n if (this.onFailure) {\n this.onFailure(this.httpRequest);\n }\n return reason;\n };\n Ajax.prototype.stateChange = function (resolve, reject) {\n var data = this.httpRequest.responseText;\n if (this.dataType && this.dataType.toLowerCase() === 'json') {\n if (data === '') {\n data = undefined;\n }\n else {\n try {\n data = JSON.parse(data);\n }\n catch (error) {\n // no exception handle\n }\n }\n }\n if (this.httpRequest.readyState === 4) {\n if (this.httpRequest.status === 200 || this.httpRequest.status === 304) {\n resolve(this.successHandler(data));\n }\n else {\n reject(new Error(this.failureHandler(this.httpRequest.statusText)));\n }\n }\n };\n /**\n * To get the response header from XMLHttpRequest\n * @param {string} key Key to search in the response header\n * @returns {string}\n */\n Ajax.prototype.getResponseHeader = function (key) {\n var responseHeaders;\n var header;\n responseHeaders = {};\n var headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n while (headers) {\n responseHeaders[headers[1].toLowerCase()] = headers[2];\n headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n }\n header = responseHeaders[key.toLowerCase()];\n return isNullOrUndefined(header) ? null : header;\n };\n return Ajax;\n}());\nexport { Ajax };\n","import { debounce, extend } from './util';\n/**\n * EventHandler class provides option to add, remove, clear and trigger events to a HTML DOM element\n * @private\n * ```html\n *
\n * \n * ```\n */\nvar EventHandler = /** @class */ (function () {\n function EventHandler() {\n }\n // to get the event data based on element\n EventHandler.addOrGetEventData = function (element) {\n if ('__eventList' in element) {\n return element.__eventList.events;\n }\n else {\n element.__eventList = {};\n return element.__eventList.events = [];\n }\n };\n /**\n * Add an event to the specified DOM element.\n * @param {any} element - Target HTML DOM element\n * @param {string} eventName - A string that specifies the name of the event\n * @param {Function} listener - Specifies the function to run when the event occurs\n * @param {Object} bindTo - A object that binds 'this' variable in the event handler\n * @param {number} debounce - Specifies at what interval given event listener should be triggered.\n * @return {Function}\n */\n EventHandler.add = function (element, eventName, listener, bindTo, intDebounce) {\n var eventData = EventHandler.addOrGetEventData(element);\n var debounceListener;\n if (intDebounce) {\n debounceListener = debounce(listener, intDebounce);\n }\n else {\n debounceListener = listener;\n }\n if (bindTo) {\n debounceListener = debounceListener.bind(bindTo);\n }\n var event = eventName.split(' ');\n for (var i = 0; i < event.length; i++) {\n eventData.push({\n name: event[i],\n listener: listener,\n debounce: debounceListener\n });\n element.addEventListener(event[i], debounceListener);\n }\n return debounceListener;\n };\n /**\n * Remove an event listener that has been attached before.\n * @param {any} element - Specifies the target html element to remove the event\n * @param {string} eventName - A string that specifies the name of the event to remove\n * @param {Function} listener - Specifies the function to remove\n * @return {void}\n */\n EventHandler.remove = function (element, eventName, listener) {\n var eventData = EventHandler.addOrGetEventData(element);\n var event = eventName.split(' ');\n var _loop_1 = function (j) {\n var index = -1;\n var debounceListener;\n if (eventData && eventData.length !== 0) {\n eventData.some(function (x, i) {\n return x.name === event[j] && x.listener === listener ?\n (index = i, debounceListener = x.debounce, true) : false;\n });\n }\n if (index !== -1) {\n eventData.splice(index, 1);\n }\n if (debounceListener) {\n element.removeEventListener(event[j], debounceListener);\n }\n };\n for (var j = 0; j < event.length; j++) {\n _loop_1(j);\n }\n };\n /**\n * Clear all the event listeners that has been previously attached to the element.\n * @param {any} element - Specifies the target html element to clear the events\n * @return {void}\n */\n EventHandler.clearEvents = function (element) {\n var eventData;\n var copyData;\n eventData = EventHandler.addOrGetEventData(element);\n copyData = extend([], copyData, eventData);\n for (var i = 0; i < copyData.length; i++) {\n element.removeEventListener(copyData[i].name, copyData[i].debounce);\n eventData.shift();\n }\n };\n /**\n * Trigger particular event of the element.\n * @param {any} element - Specifies the target html element to trigger the events\n * @param {string} eventName - Specifies the event to trigger for the specified element.\n * Can be a custom event, or any of the standard events.\n * @param {any} eventProp - Additional parameters to pass on to the event properties\n * @return {void}\n */\n EventHandler.trigger = function (element, eventName, eventProp) {\n var eventData = EventHandler.addOrGetEventData(element);\n var fn = null;\n for (var _i = 0, eventData_1 = eventData; _i < eventData_1.length; _i++) {\n var event_1 = eventData_1[_i];\n if (event_1.name === eventName) {\n event_1.debounce.call(this, eventProp);\n }\n }\n };\n return EventHandler;\n}());\nexport { EventHandler };\n","import { isNullOrUndefined, getValue } from './util';\nvar Observer = /** @class */ (function () {\n function Observer(context) {\n this.ranArray = [];\n this.boundedEvents = {};\n if (isNullOrUndefined(context)) {\n return;\n }\n this.context = context;\n }\n ;\n /**\n * To attach handler for given property in current context.\n * @param {string} property - specifies the name of the event.\n * @param {Function} handler - Specifies the handler function to be called while event notified.\n * @param {Object} context - Specifies the context binded to the handler.\n * @return {void}\n */\n Observer.prototype.on = function (property, handler, context, id) {\n if (isNullOrUndefined(handler)) {\n return;\n }\n var cntxt = context || this.context;\n if (this.notExist(property)) {\n this.boundedEvents[property] = [{ handler: handler, context: cntxt }];\n return;\n }\n if (!isNullOrUndefined(id)) {\n if (this.ranArray.indexOf(id) === -1) {\n this.ranArray.push(id);\n this.boundedEvents[property].push({ handler: handler, context: cntxt, id: id });\n }\n }\n else if (!this.isHandlerPresent(this.boundedEvents[property], handler)) {\n this.boundedEvents[property].push({ handler: handler, context: cntxt });\n }\n };\n /**\n * To remove handlers from a event attached using on() function.\n * @param {string} eventName - specifies the name of the event.\n * @param {Function} handler - Optional argument specifies the handler function to be called while event notified.\n * @return {void}\n */\n Observer.prototype.off = function (property, handler, id) {\n if (this.notExist(property)) {\n return;\n }\n var curObject = getValue(property, this.boundedEvents);\n if (handler) {\n for (var i = 0; i < curObject.length; i++) {\n if (id) {\n curObject.splice(i, 1);\n var indexLocation = this.ranArray.indexOf(id);\n if (indexLocation !== -1) {\n this.ranArray.splice(indexLocation, 1);\n }\n break;\n }\n else if (handler === curObject[i].handler) {\n curObject.splice(i, 1);\n break;\n }\n }\n }\n else {\n delete this.boundedEvents[property];\n }\n };\n /**\n * To notify the handlers in the specified event.\n * @param {string} property - Specifies the event to be notify.\n * @param {Object} args - Additional parameters to pass while calling the handler.\n * @return {void}\n */\n Observer.prototype.notify = function (property, argument) {\n if (this.notExist(property)) {\n return;\n }\n if (argument) {\n argument.name = property;\n }\n var curObject = getValue(property, this.boundedEvents).slice(0);\n for (var _i = 0, curObject_1 = curObject; _i < curObject_1.length; _i++) {\n var cur = curObject_1[_i];\n cur.handler.call(cur.context, argument);\n }\n };\n /**\n * To destroy handlers in the event\n */\n Observer.prototype.destroy = function () {\n this.boundedEvents = this.context = undefined;\n };\n /**\n * Returns if the property exists.\n */\n Observer.prototype.notExist = function (prop) {\n return this.boundedEvents.hasOwnProperty(prop) === false;\n };\n /**\n * Returns if the handler is present.\n */\n Observer.prototype.isHandlerPresent = function (boundedEvents, handler) {\n for (var _i = 0, boundedEvents_1 = boundedEvents; _i < boundedEvents_1.length; _i++) {\n var cur = boundedEvents_1[_i];\n if (cur.handler === handler) {\n return true;\n }\n }\n return false;\n };\n return Observer;\n}());\nexport { Observer };\n","import { isUndefined, isNullOrUndefined, merge, setImmediate, setValue } from './util';\nimport { addClass, removeClass } from './dom';\nimport { Observer } from './observer';\n/* tslint:enable:no-any */\n/**\n * Base library module is common module for Framework modules like touch,keyboard and etc.,\n * @private\n */\nvar Base = /** @class */ (function () {\n /**\n * Base constructor accept options and element\n */\n function Base(options, element) {\n this.isProtectedOnChange = true;\n this.properties = {};\n this.changedProperties = {};\n this.oldProperties = {};\n this.refreshing = false;\n // tslint:disable-next-line:no-empty\n this.finalUpdate = function () { };\n this.childChangedProperties = {};\n this.modelObserver = new Observer(this);\n if (!isUndefined(element)) {\n if ('string' === typeof (element)) {\n this.element = document.querySelector(element);\n }\n else {\n this.element = element;\n }\n if (!isNullOrUndefined(this.element)) {\n this.isProtectedOnChange = false;\n this.addInstance();\n }\n }\n if (!isUndefined(options)) {\n this.setProperties(options, true);\n }\n this.isDestroyed = false;\n }\n /** Property base section */\n /**\n * Function used to set bunch of property at a time.\n * @private\n * @param {Object} prop - JSON object which holds components properties.\n * @param {boolean} muteOnChange? - Specifies to true when we set properties.\n */\n Base.prototype.setProperties = function (prop, muteOnChange) {\n var prevDetection = this.isProtectedOnChange;\n this.isProtectedOnChange = !!muteOnChange;\n merge(this, prop);\n if (muteOnChange !== true) {\n merge(this.changedProperties, prop);\n this.dataBind();\n }\n this.finalUpdate();\n this.changedProperties = {};\n this.oldProperties = {};\n this.isProtectedOnChange = prevDetection;\n };\n ;\n /**\n * Calls for child element data bind\n * @param {Object} obj\n * @param {Object} parent\n * @returns {void}\n */\n // tslint:disable-next-line:no-any\n Base.callChildDataBind = function (obj, parent) {\n var keys = Object.keys(obj);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (parent[key] instanceof Array) {\n for (var _a = 0, _b = parent[key]; _a < _b.length; _a++) {\n var obj_1 = _b[_a];\n if (obj_1.dataBind !== undefined) {\n obj_1.dataBind();\n }\n }\n }\n else {\n parent[key].dataBind();\n }\n }\n };\n Base.prototype.clearChanges = function () {\n this.finalUpdate();\n this.changedProperties = {};\n this.oldProperties = {};\n this.childChangedProperties = {};\n };\n /**\n * Bind property changes immediately to components\n */\n Base.prototype.dataBind = function () {\n Base.callChildDataBind(this.childChangedProperties, this);\n if (Object.getOwnPropertyNames(this.changedProperties).length) {\n var prevDetection = this.isProtectedOnChange;\n var newChanges = this.changedProperties;\n var oldChanges = this.oldProperties;\n this.clearChanges();\n this.isProtectedOnChange = true;\n this.onPropertyChanged(newChanges, oldChanges);\n this.isProtectedOnChange = prevDetection;\n }\n };\n ;\n Base.prototype.saveChanges = function (key, newValue, oldValue) {\n if (this.isProtectedOnChange) {\n return;\n }\n this.oldProperties[key] = oldValue;\n this.changedProperties[key] = newValue;\n this.finalUpdate();\n this.finalUpdate = setImmediate(this.dataBind.bind(this));\n };\n ;\n /** Event Base Section */\n /**\n * Adds the handler to the given event listener.\n * @param {string} eventName - A String that specifies the name of the event\n * @param {Function} listener - Specifies the call to run when the event occurs.\n * @return {void}\n */\n Base.prototype.addEventListener = function (eventName, handler) {\n this.modelObserver.on(eventName, handler);\n };\n /**\n * Removes the handler from the given event listener.\n * @param {string} eventName - A String that specifies the name of the event to remove\n * @param {Function} listener - Specifies the function to remove\n * @return {void}\n */\n Base.prototype.removeEventListener = function (eventName, handler) {\n this.modelObserver.off(eventName, handler);\n };\n /**\n * Triggers the handlers in the specified event.\n * @private\n * @param {string} eventName - Specifies the event to trigger for the specified component properties.\n * Can be a custom event, or any of the standard events.\n * @param {Event} eventProp - Additional parameters to pass on to the event properties\n * @return {void}\n */\n Base.prototype.trigger = function (eventName, eventProp) {\n if (this.isDestroyed !== true) {\n var prevDetection = this.isProtectedOnChange;\n this.isProtectedOnChange = false;\n this.modelObserver.notify(eventName, eventProp);\n this.isProtectedOnChange = prevDetection;\n }\n };\n /**\n * To maintain instance in base class\n */\n Base.prototype.addInstance = function () {\n // Add module class to the root element\n var moduleClass = 'e-' + this.getModuleName().toLowerCase();\n addClass([this.element], ['e-control', moduleClass]);\n if (!isNullOrUndefined(this.element.ej2_instances)) {\n this.element.ej2_instances.push(this);\n }\n else {\n setValue('ej2_instances', [this], this.element);\n }\n };\n /**\n * To remove the instance from the element\n */\n Base.prototype.destroy = function () {\n var _this = this;\n this.element.ej2_instances =\n this.element.ej2_instances.filter(function (i) { return i !== _this; });\n removeClass([this.element], ['e-' + this.getModuleName()]);\n if (this.element.ej2_instances.length === 0) {\n // Remove module class from the root element\n removeClass([this.element], ['e-control']);\n }\n this.clearChanges();\n this.modelObserver.destroy();\n this.isDestroyed = true;\n };\n return Base;\n}());\nexport { Base };\n","import { isUndefined } from './util';\nvar REGX_MOBILE = /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini|mobile/i;\nvar REGX_IE = /msie|trident/i;\nvar REGX_IE11 = /Trident\\/7\\./;\nvar REGX_IOS = /(ipad|iphone|ipod touch)/i;\nvar REGX_IOS7 = /(ipad|iphone|ipod touch);.*os 7_\\d|(ipad|iphone|ipod touch);.*os 8_\\d/i;\nvar REGX_ANDROID = /android/i;\nvar REGX_WINDOWS = /trident|windows phone|edge/i;\nvar REGX_VERSION = /(version)[ \\/]([\\w.]+)/i;\nvar REGX_BROWSER = {\n OPERA: /(opera|opr)(?:.*version|)[ \\/]([\\w.]+)/i,\n EDGE: /(edge)(?:.*version|)[ \\/]([\\w.]+)/i,\n CHROME: /(chrome|crios)[ \\/]([\\w.]+)/i,\n PANTHOMEJS: /(phantomjs)[ \\/]([\\w.]+)/i,\n SAFARI: /(safari)[ \\/]([\\w.]+)/i,\n WEBKIT: /(webkit)[ \\/]([\\w.]+)/i,\n MSIE: /(msie|trident) ([\\w.]+)/i,\n MOZILLA: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n};\n/* istanbul ignore else */\nif (typeof window !== 'undefined') {\n window.browserDetails = window.browserDetails || {};\n}\n/**\n * Get configuration details for Browser\n * @private\n */\nvar Browser = /** @class */ (function () {\n function Browser() {\n }\n Browser.extractBrowserDetail = function () {\n var browserInfo = { culture: {} };\n var keys = Object.keys(REGX_BROWSER);\n var clientInfo = [];\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n clientInfo = Browser.userAgent.match(REGX_BROWSER[key]);\n if (clientInfo) {\n browserInfo.name = (clientInfo[1].toLowerCase() === 'opr' ? 'opera' : clientInfo[1].toLowerCase());\n browserInfo.name = (clientInfo[1].toLowerCase() === 'crios' ? 'chrome' : browserInfo.name);\n browserInfo.version = clientInfo[2];\n browserInfo.culture.name = browserInfo.culture.language = navigator.language;\n if (!!Browser.userAgent.match(REGX_IE11)) {\n browserInfo.name = 'msie';\n break;\n }\n var version = Browser.userAgent.match(REGX_VERSION);\n if (browserInfo.name === 'safari' && version) {\n browserInfo.version = version[2];\n }\n break;\n }\n }\n return browserInfo;\n };\n /**\n * To get events from the browser\n * @param {string} event - type of event triggered.\n * @returns {Boolean}\n */\n Browser.getEvent = function (event) {\n // tslint:disable-next-line:no-any\n var events = {\n start: {\n isPointer: 'pointerdown', isTouch: 'touchstart', isDevice: 'mousedown'\n },\n move: {\n isPointer: 'pointermove', isTouch: 'touchmove', isDevice: 'mousemove'\n },\n end: {\n isPointer: 'pointerup', isTouch: 'touchend', isDevice: 'mouseup'\n }\n };\n return (Browser.isPointer ? events[event].isPointer :\n (Browser.isTouch ? events[event].isTouch + (!Browser.isDevice ? ' ' + events[event].isDevice : '')\n : events[event].isDevice));\n };\n /**\n * To get the Touch start event from browser\n * @returns {string}\n */\n Browser.getTouchStartEvent = function () {\n return Browser.getEvent('start');\n };\n /**\n * To get the Touch end event from browser\n * @returns {string}\n */\n Browser.getTouchEndEvent = function () {\n return Browser.getEvent('end');\n };\n /**\n * To get the Touch move event from browser\n * @returns {string}\n */\n Browser.getTouchMoveEvent = function () {\n return Browser.getEvent('move');\n };\n /**\n * To get the value based on provided key and regX\n * @param {string} key\n * @param {RegExp} regX\n * @returns {Object}\n */\n Browser.getValue = function (key, regX) {\n var browserDetails = window.browserDetails;\n if ('undefined' === typeof browserDetails[key]) {\n return browserDetails[key] = regX.test(Browser.userAgent);\n }\n return browserDetails[key];\n };\n Object.defineProperty(Browser, \"userAgent\", {\n get: function () {\n return Browser.uA;\n },\n //Properties \n /**\n * Property specifies the userAgent of the browser. Default userAgent value is based on the browser.\n * Also we can set our own userAgent.\n */\n set: function (uA) {\n Browser.uA = uA;\n window.browserDetails = {};\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"info\", {\n //Read Only Properties\n /**\n * Property is to get the browser information like Name, Version and Language\n * @returns BrowserInfo\n */\n get: function () {\n if (isUndefined(window.browserDetails.info)) {\n return window.browserDetails.info = Browser.extractBrowserDetail();\n }\n return window.browserDetails.info;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIE\", {\n /**\n * Property is to get whether the userAgent is based IE.\n */\n get: function () {\n return Browser.getValue('isIE', REGX_IE);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isTouch\", {\n /**\n * Property is to get whether the browser has touch support.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isTouch)) {\n return window.browserDetails.isTouch = ('ontouchstart' in window);\n }\n return window.browserDetails.isTouch;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isPointer\", {\n /**\n * Property is to get whether the browser has Pointer support.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isPointer)) {\n return window.browserDetails.isPointer = ('pointerEnabled' in window.navigator);\n }\n return window.browserDetails.isPointer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isMSPointer\", {\n /**\n * Property is to get whether the browser has MSPointer support.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isMSPointer)) {\n return window.browserDetails.isMSPointer = ('msPointerEnabled' in window.navigator);\n }\n return window.browserDetails.isMSPointer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isDevice\", {\n /**\n * Property is to get whether the userAgent is device based.\n */\n get: function () {\n return Browser.getValue('isDevice', REGX_MOBILE);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIos\", {\n /**\n * Property is to get whether the userAgent is IOS.\n */\n get: function () {\n return Browser.getValue('isIos', REGX_IOS);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIos7\", {\n /**\n * Property is to get whether the userAgent is Ios7.\n */\n get: function () {\n return Browser.getValue('isIos7', REGX_IOS7);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isAndroid\", {\n /**\n * Property is to get whether the userAgent is Android.\n */\n get: function () {\n return Browser.getValue('isAndroid', REGX_ANDROID);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isWebView\", {\n /**\n * Property is to identify whether application ran in web view.\n */\n get: function () {\n if (isUndefined(window.browserDetails.isWebView)) {\n window.browserDetails.isWebView = !(isUndefined(window.cordova) && isUndefined(window.PhoneGap)\n && isUndefined(window.phonegap) && window.forge !== 'object');\n return window.browserDetails.isWebView;\n }\n return window.browserDetails.isWebView;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isWindows\", {\n /**\n * Property is to get whether the userAgent is Windows.\n */\n get: function () {\n return Browser.getValue('isWindows', REGX_WINDOWS);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchStartEvent\", {\n /**\n * Property is to get the touch start event. It returns event name based on browser.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchStartEvent)) {\n return window.browserDetails.touchStartEvent = Browser.getTouchStartEvent();\n }\n return window.browserDetails.touchStartEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchMoveEvent\", {\n /**\n * Property is to get the touch move event. It returns event name based on browser.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchMoveEvent)) {\n return window.browserDetails.touchMoveEvent = Browser.getTouchMoveEvent();\n }\n return window.browserDetails.touchMoveEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchEndEvent\", {\n /**\n * Property is to get the touch end event. It returns event name based on browser.\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchEndEvent)) {\n return window.browserDetails.touchEndEvent = Browser.getTouchEndEvent();\n }\n return window.browserDetails.touchEndEvent;\n },\n enumerable: true,\n configurable: true\n });\n /* istanbul ignore next */\n Browser.uA = typeof navigator !== 'undefined' ? navigator.userAgent : '';\n return Browser;\n}());\nexport { Browser };\n","import { defaultCurrencyCode } from '../internationalization';\nimport { getValue, isNullOrUndefined, extend } from '../util';\nimport { ParserBase as parser } from './parser-base';\nimport { DateFormat } from './date-formatter';\nimport { NumberFormat } from './number-formatter';\n/**\n * Date base common constants and function for date parser and formatter.\n */\nexport var IntlBase;\n(function (IntlBase) {\n // tslint:disable-next-line:max-line-length\n IntlBase.negativeDataRegex = /^(('[^']+'|''|[^*#@0,.E])*)(\\*.)?((([#,]*[0,]*0+)(\\.0*[0-9]*#*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n IntlBase.customRegex = /^(('[^']+'|''|[^*#@0,.])*)(\\*.)?((([0#,]*[0,]*[0#]*)(\\.[0#]*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n IntlBase.latnParseRegex = /0|1|2|3|4|5|6|7|8|9/g;\n var fractionRegex = /[0-9]/g;\n IntlBase.defaultCurrency = '$';\n var mapper = ['infinity', 'nan', 'group', 'decimal'];\n var patternRegex = /G|M|L|H|c|'| a|yy|y|EEEE|E/g;\n var patternMatch = {\n 'G': '',\n 'M': 'm',\n 'L': 'm',\n 'H': 'h',\n 'c': 'd',\n '\\'': '\"',\n ' a': ' AM/PM',\n 'yy': 'yy',\n 'y': 'yyyy',\n 'EEEE': 'dddd',\n 'E': 'ddd'\n };\n IntlBase.formatRegex = /(^[ncpae]{1})([0-1]?[0-9]|20)?$/i;\n IntlBase.currencyFormatRegex = /(^[ca]{1})([0-1]?[0-9]|20)?$/i;\n IntlBase.curWithoutNumberRegex = /(c|a)$/ig;\n var typeMapper = {\n '$': 'isCurrency',\n '%': 'isPercent',\n '-': 'isNegative',\n 0: 'nlead',\n 1: 'nend'\n };\n IntlBase.dateParseRegex = /([a-z])\\1*|'([^']|'')+'|''|./gi;\n IntlBase.basicPatterns = ['short', 'medium', 'long', 'full'];\n /* tslint:disable:quotemark */\n IntlBase.defaultObject = {\n 'dates': {\n 'calendars': {\n 'gregorian': {\n 'months': {\n 'stand-alone': {\n 'abbreviated': {\n '1': 'Jan',\n '2': 'Feb',\n '3': 'Mar',\n '4': 'Apr',\n '5': 'May',\n '6': 'Jun',\n '7': 'Jul',\n '8': 'Aug',\n '9': 'Sep',\n '10': 'Oct',\n '11': 'Nov',\n '12': 'Dec'\n },\n 'narrow': {\n '1': 'J',\n '2': 'F',\n '3': 'M',\n '4': 'A',\n '5': 'M',\n '6': 'J',\n '7': 'J',\n '8': 'A',\n '9': 'S',\n '10': 'O',\n '11': 'N',\n '12': 'D'\n },\n 'wide': {\n '1': 'January',\n '2': 'February',\n '3': 'March',\n '4': 'April',\n '5': 'May',\n '6': 'June',\n '7': 'July',\n '8': 'August',\n '9': 'September',\n '10': 'October',\n '11': 'November',\n '12': 'December'\n }\n }\n },\n \"days\": {\n \"stand-alone\": {\n \"abbreviated\": {\n \"sun\": \"Sun\",\n \"mon\": \"Mon\",\n \"tue\": \"Tue\",\n \"wed\": \"Wed\",\n \"thu\": \"Thu\",\n \"fri\": \"Fri\",\n \"sat\": \"Sat\"\n },\n \"narrow\": {\n \"sun\": \"S\",\n \"mon\": \"M\",\n \"tue\": \"T\",\n \"wed\": \"W\",\n \"thu\": \"T\",\n \"fri\": \"F\",\n \"sat\": \"S\"\n },\n \"short\": {\n \"sun\": \"Su\",\n \"mon\": \"Mo\",\n \"tue\": \"Tu\",\n \"wed\": \"We\",\n \"thu\": \"Th\",\n \"fri\": \"Fr\",\n \"sat\": \"Sa\"\n },\n \"wide\": {\n \"sun\": \"Sunday\",\n \"mon\": \"Monday\",\n \"tue\": \"Tuesday\",\n \"wed\": \"Wednesday\",\n \"thu\": \"Thursday\",\n \"fri\": \"Friday\",\n \"sat\": \"Saturday\"\n }\n }\n },\n \"dayPeriods\": {\n \"format\": {\n \"wide\": {\n \"am\": \"AM\",\n \"pm\": \"PM\"\n }\n }\n },\n 'eras': {\n 'eraNames': {\n '0': 'Before Christ',\n '0-alt-variant': 'Before Common Era',\n '1': 'Anno Domini',\n \"1-alt-variant\": \"Common Era\"\n },\n 'eraAbbr': {\n '0': 'BC',\n '0-alt-variant': 'BCE',\n '1': 'AD',\n '1-alt-variant': 'CE'\n },\n 'eraNarrow': {\n '0': 'B',\n '0-alt-variant': 'BCE',\n '1': 'A',\n '1-alt-variant': 'CE'\n }\n },\n 'dateFormats': {\n 'full': 'EEEE, MMMM d, y',\n 'long': 'MMMM d, y',\n 'medium': 'MMM d, y',\n 'short': 'M/d/yy'\n },\n 'timeFormats': {\n 'full': 'h:mm:ss a zzzz',\n 'long': 'h:mm:ss a z',\n 'medium': 'h:mm:ss a',\n 'short': 'h:mm a'\n },\n 'dateTimeFormats': {\n 'full': \"{1} 'at' {0}\",\n 'long': \"{1} 'at' {0}\",\n 'medium': '{1}, {0}',\n 'short': '{1}, {0}',\n 'availableFormats': {\n 'd': 'd',\n 'E': 'ccc',\n 'Ed': 'd E',\n 'Ehm': 'E h:mm a',\n 'EHm': 'E HH:mm',\n 'Ehms': 'E h:mm:ss a',\n 'EHms': 'E HH:mm:ss',\n 'Gy': 'y G',\n 'GyMMM': 'MMM y G',\n 'GyMMMd': 'MMM d, y G',\n 'GyMMMEd': 'E, MMM d, y G',\n 'h': 'h a',\n 'H': 'HH',\n 'hm': 'h:mm a',\n 'Hm': 'HH:mm',\n 'hms': 'h:mm:ss a',\n 'Hms': 'HH:mm:ss',\n 'hmsv': 'h:mm:ss a v',\n 'Hmsv': 'HH:mm:ss v',\n 'hmv': 'h:mm a v',\n 'Hmv': 'HH:mm v',\n 'M': 'L',\n 'Md': 'M/d',\n 'MEd': 'E, M/d',\n 'MMM': 'LLL',\n 'MMMd': 'MMM d',\n 'MMMEd': 'E, MMM d',\n 'MMMMd': 'MMMM d',\n 'ms': 'mm:ss',\n 'y': 'y',\n 'yM': 'M/y',\n 'yMd': 'M/d/y',\n 'yMEd': 'E, M/d/y',\n 'yMMM': 'MMM y',\n 'yMMMd': 'MMM d, y',\n 'yMMMEd': 'E, MMM d, y',\n 'yMMMM': 'MMMM y',\n },\n }\n }\n },\n 'timeZoneNames': {\n \"hourFormat\": \"+HH:mm;-HH:mm\",\n \"gmtFormat\": \"GMT{0}\",\n \"gmtZeroFormat\": \"GMT\",\n }\n },\n 'numbers': {\n 'currencies': {\n 'USD': {\n 'displayName': 'US Dollar',\n 'symbol': '$',\n 'symbol-alt-narrow': '$'\n },\n 'EUR': {\n 'displayName': 'Euro',\n 'symbol': '€',\n 'symbol-alt-narrow': '€'\n },\n 'GBP': {\n 'displayName': 'British Pound',\n 'symbol-alt-narrow': '£'\n },\n },\n 'defaultNumberingSystem': 'latn',\n 'minimumGroupingDigits': '1',\n 'symbols-numberSystem-latn': {\n 'decimal': '.',\n 'group': ',',\n 'list': ';',\n 'percentSign': '%',\n 'plusSign': '+',\n 'minusSign': '-',\n 'exponential': 'E',\n 'superscriptingExponent': '×',\n 'perMille': '‰',\n 'infinity': '∞',\n 'nan': 'NaN',\n 'timeSeparator': ':'\n },\n 'decimalFormats-numberSystem-latn': {\n 'standard': '#,##0.###',\n },\n 'percentFormats-numberSystem-latn': {\n 'standard': '#,##0%'\n },\n 'currencyFormats-numberSystem-latn': {\n 'standard': '¤#,##0.00',\n 'accounting': '¤#,##0.00;(¤#,##0.00)'\n },\n 'scientificFormats-numberSystem-latn': {\n 'standard': '#E0'\n }\n }\n };\n /* tslint:enable:quotemark */\n IntlBase.monthIndex = {\n 3: 'abbreviated',\n 4: 'wide',\n 5: 'narrow',\n 1: 'abbreviated'\n };\n /**\n *\n */\n IntlBase.month = 'months';\n IntlBase.days = 'days';\n /**\n * Default numerber Object\n */\n IntlBase.patternMatcher = {\n C: 'currency',\n P: 'percent',\n N: 'decimal',\n A: 'currency',\n E: 'scientific'\n };\n /**\n * Returns the resultant pattern based on the skeleton, dateObject and the type provided\n * @private\n * @param {string} skeleton\n * @param {Object} dateObject\n * @param {string} type\n * @returns {string}\n */\n function getResultantPattern(skeleton, dateObject, type) {\n var resPattern;\n var iType = type || 'date';\n if (IntlBase.basicPatterns.indexOf(skeleton) !== -1) {\n resPattern = getValue(iType + 'Formats.' + skeleton, dateObject);\n if (iType === 'dateTime') {\n var dPattern = getValue('dateFormats.' + skeleton, dateObject);\n var tPattern = getValue('timeFormats.' + skeleton, dateObject);\n resPattern = resPattern.replace('{1}', dPattern).replace('{0}', tPattern);\n }\n }\n else {\n resPattern = getValue('dateTimeFormats.availableFormats.' + skeleton, dateObject);\n }\n return resPattern;\n }\n IntlBase.getResultantPattern = getResultantPattern;\n /**\n * Returns the dependable object for provided cldr data and culture\n * @private\n * @param {Object} cldr\n * @param {string} culture\n * @param {boolean} isNumber\n * @returns {Dependables}\n */\n function getDependables(cldr, culture, isNumber) {\n var ret = {};\n ret.parserObject = parser.getMainObject(cldr, culture) || IntlBase.defaultObject;\n if (isNumber) {\n ret.numericObject = getValue('numbers', ret.parserObject);\n }\n else {\n ret.dateObject = getValue('dates.calendars.gregorian', ret.parserObject);\n }\n return ret;\n }\n IntlBase.getDependables = getDependables;\n /**\n * Returns the symbol pattern for provided parameters\n * @private\n * @param {string} type\n * @param {string} numSystem\n * @param {Object} obj\n * @param {boolean} isAccount\n * @returns {string}\n */\n function getSymbolPattern(type, numSystem, obj, isAccount) {\n return getValue(type + 'Formats-numberSystem-' +\n numSystem + (isAccount ? '.accounting' : '.standard'), obj) || (isAccount ? getValue(type + 'Formats-numberSystem-' +\n numSystem + '.standard', obj) : '');\n }\n IntlBase.getSymbolPattern = getSymbolPattern;\n /**\n * Returns proper numeric skeleton\n * @private\n * @param {string} skeleton\n * @returns {NumericSkeleton}\n */\n function getProperNumericSkeleton(skeleton) {\n var matches = skeleton.match(IntlBase.formatRegex);\n var ret = {};\n var pattern = matches[1].toUpperCase();\n ret.isAccount = (pattern === 'A');\n /* tslint:disable no-any */\n ret.type = IntlBase.patternMatcher[pattern];\n if (skeleton.length > 1) {\n ret.fractionDigits = parseInt(matches[2], 10);\n }\n return ret;\n }\n IntlBase.getProperNumericSkeleton = getProperNumericSkeleton;\n /**\n * Returns format data for number formatting like minimum fraction, maximum fraction, etc..,\n * @private\n * @param {string} pattern\n * @param {boolean} needFraction\n * @param {string} cSymbol\n * @param {boolean} fractionOnly\n * @returns {NegativeData}\n */\n function getFormatData(pattern, needFraction, cSymbol, fractionOnly) {\n var nData = fractionOnly ? {} : { nlead: '', nend: '' };\n var match = pattern.match(IntlBase.customRegex);\n if (match) {\n if (!fractionOnly) {\n nData.nlead = changeCurrencySymbol(match[1], cSymbol);\n nData.nend = changeCurrencySymbol(match[10], cSymbol);\n nData.groupPattern = match[4];\n }\n var fraction = match[7];\n if (fraction && needFraction) {\n var fmatch = fraction.match(fractionRegex);\n if (!isNullOrUndefined(fmatch)) {\n nData.minimumFraction = fmatch.length;\n }\n else {\n nData.minimumFraction = 0;\n }\n nData.maximumFraction = fraction.length - 1;\n }\n }\n return nData;\n }\n IntlBase.getFormatData = getFormatData;\n /**\n * Changes currency symbol\n * @private\n * @param {string} val\n * @param {string} sym\n * @returns {string}\n */\n function changeCurrencySymbol(val, sym) {\n if (val) {\n return val.replace(IntlBase.defaultCurrency, sym);\n }\n return '';\n }\n /**\n * Returns currency symbol based on currency code\n * @private\n * @param {Object} numericObject\n * @param {string} currencyCode\n * @returns {string}\n */\n function getCurrencySymbol(numericObject, currencyCode) {\n return getValue('currencies.' + currencyCode + '.symbol', numericObject) || '$';\n }\n IntlBase.getCurrencySymbol = getCurrencySymbol;\n /**\n * Returns formatting options for custom number format\n * @private\n * @param {string} format\n * @param {CommonOptions} dOptions\n * @param {Dependables} obj\n * @returns {GenericFormatOptions}\n */\n function customFormat(format, dOptions, obj) {\n var options = {};\n var formatSplit = format.split(';');\n var data = ['pData', 'nData', 'zeroData'];\n for (var i = 0; i < formatSplit.length; i++) {\n options[data[i]] = customNumberFormat(formatSplit[i], dOptions, obj);\n }\n if (isNullOrUndefined(options.nData)) {\n options.nData = extend({}, options.pData);\n options.nData.nlead = isNullOrUndefined(dOptions) ? '-' + options.nData.nlead : dOptions.minusSymbol + options.nData.nlead;\n }\n return options;\n }\n IntlBase.customFormat = customFormat;\n /**\n * Returns custom formatting options\n * @private\n * @param {string} format\n * @param {CommonOptions} dOptions\n * @param {Object} numObject\n * @returns {NegativeData}\n */\n function customNumberFormat(format, dOptions, numObject) {\n var cOptions = { type: 'decimal', minimumFractionDigits: 0, maximumFractionDigits: 0 };\n var pattern = format.match(IntlBase.customRegex);\n if (isNullOrUndefined(pattern) || (pattern[5] === '' && format !== 'N/A')) {\n cOptions.type = undefined;\n }\n cOptions.nlead = pattern[1];\n cOptions.nend = pattern[10];\n var integerPart = pattern[6];\n cOptions.useGrouping = integerPart.indexOf(',') !== -1;\n integerPart = integerPart.replace(/,/g, '');\n var fractionPart = pattern[7];\n if (integerPart.indexOf('0') !== -1) {\n cOptions.minimumIntegerDigits = integerPart.length - integerPart.indexOf('0');\n }\n if (!isNullOrUndefined(fractionPart)) {\n cOptions.minimumFractionDigits = fractionPart.lastIndexOf('0');\n cOptions.maximumFractionDigits = fractionPart.lastIndexOf('#');\n if (cOptions.minimumFractionDigits === -1) {\n cOptions.minimumFractionDigits = 0;\n }\n if (cOptions.maximumFractionDigits === -1 || cOptions.maximumFractionDigits < cOptions.minimumFractionDigits) {\n cOptions.maximumFractionDigits = cOptions.minimumFractionDigits;\n }\n }\n if (!isNullOrUndefined(dOptions)) {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '$', dOptions.currencySymbol));\n if (!cOptions.isCurrency) {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', dOptions.percentSymbol));\n }\n }\n else {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', '%'));\n }\n if (!isNullOrUndefined(numObject)) {\n var symbolPattern = getSymbolPattern(cOptions.type, dOptions.numberMapper.numberSystem, numObject, false);\n if (cOptions.useGrouping) {\n cOptions.groupSeparator = dOptions.numberMapper.numberSymbols[mapper[2]];\n cOptions.groupData = NumberFormat.getGroupingDetails(symbolPattern.split(';')[0]);\n }\n cOptions.nlead = cOptions.nlead.replace(/\\'/g, '');\n cOptions.nend = cOptions.nend.replace(/\\'/g, '');\n }\n return cOptions;\n }\n /**\n * Returns formatting options for currency or percent type\n * @private\n * @param {string[]} parts\n * @param {string} actual\n * @param {string} symbol\n * @returns {NegativeData}\n */\n function isCurrencyPercent(parts, actual, symbol) {\n var options = { nlead: parts[0], nend: parts[1] };\n for (var i = 0; i < 2; i++) {\n var part = parts[i];\n var loc = part.indexOf(actual);\n if ((loc !== -1) && ((loc < part.indexOf('\\'')) || (loc > part.lastIndexOf('\\'')))) {\n options[typeMapper[i]] = part.substr(0, loc) + symbol + part.substr(loc + 1);\n options[typeMapper[actual]] = true;\n options.type = options.isCurrency ? 'currency' : 'percent';\n break;\n }\n }\n return options;\n }\n IntlBase.isCurrencyPercent = isCurrencyPercent;\n /**\n * Returns culture based date separator\n * @private\n * @param {Object} dateObj\n * @returns {string}\n */\n function getDateSeparator(dateObj) {\n var value = (getValue('dateFormats.short', dateObj) || '').match(/[d‏M‏]([^d‏M])[d‏M‏]/i);\n return value ? value[1] : '/';\n }\n IntlBase.getDateSeparator = getDateSeparator;\n /**\n * Returns Native Date Time pattern\n * @private\n * @param {string} culture\n * @param {DateFormatOptions} options\n * @param {Object} cldr\n * @returns {string}\n */\n function getActualDateTimeFormat(culture, options, cldr, isExcelFormat) {\n var dependable = getDependables(cldr, culture);\n var actualPattern = options.format || getResultantPattern(options.skeleton, dependable.dateObject, options.type);\n if (isExcelFormat) {\n actualPattern = actualPattern.replace(patternRegex, function (pattern) {\n return patternMatch[pattern];\n });\n if (actualPattern.indexOf('z') !== -1) {\n var tLength = actualPattern.match(/z/g).length;\n var timeZonePattern = void 0;\n var options_1 = { 'timeZone': {} };\n options_1.numMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n options_1.timeZone = getValue('dates.timeZoneNames', dependable.parserObject);\n var value = new Date();\n var timezone = value.getTimezoneOffset();\n var pattern = (tLength < 4) ? '+H;-H' : options_1.timeZone.hourFormat;\n pattern = pattern.replace(/:/g, options_1.numMapper.timeSeparator);\n if (timezone === 0) {\n timeZonePattern = options_1.timeZone.gmtZeroFormat;\n }\n else {\n timeZonePattern = DateFormat.getTimeZoneValue(timezone, pattern);\n timeZonePattern = options_1.timeZone.gmtFormat.replace(/\\{0\\}/, timeZonePattern);\n }\n actualPattern = actualPattern.replace(/[z]+/, '\"' + timeZonePattern + '\"');\n }\n actualPattern = actualPattern.replace(/ $/, '');\n }\n return actualPattern;\n }\n IntlBase.getActualDateTimeFormat = getActualDateTimeFormat;\n /**\n * Returns Native Number pattern\n * @private\n * @param {string} culture\n * @param {NumberFormatOptions} options\n * @param {Object} cldr\n * @returns {string}\n */\n function getActualNumberFormat(culture, options, cldr) {\n var dependable = getDependables(cldr, culture, true);\n var parseOptions = { custom: true };\n var minFrac;\n var curObj = {};\n var curMatch = (options.format || '').match(IntlBase.currencyFormatRegex);\n if (curMatch) {\n var dOptions = {};\n dOptions.numberMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n var curCode = getCurrencySymbol(dependable.numericObject, options.currency || defaultCurrencyCode);\n var symbolPattern = getSymbolPattern('currency', dOptions.numberMapper.numberSystem, dependable.numericObject, (/a/i).test(options.format));\n symbolPattern = symbolPattern.replace(/\\u00A4/g, curCode);\n var split = symbolPattern.split(';');\n curObj.hasNegativePattern = (split.length > 1);\n curObj.nData = getFormatData(split[1] || '-' + split[0], true, curCode);\n curObj.pData = getFormatData(split[0], false, curCode);\n if (!curMatch[2] && !options.minimumFractionDigits && !options.maximumFractionDigits) {\n minFrac = getFormatData(symbolPattern.split(';')[0], true, '', true).minimumFraction;\n }\n }\n var actualPattern;\n if ((IntlBase.formatRegex.test(options.format)) || !(options.format)) {\n extend(parseOptions, getProperNumericSkeleton(options.format || 'N'));\n parseOptions.custom = false;\n actualPattern = '###0';\n if (parseOptions.fractionDigits || options.minimumFractionDigits || options.maximumFractionDigits || minFrac) {\n var defaultMinimum = 0;\n if (parseOptions.fractionDigits) {\n options.minimumFractionDigits = options.maximumFractionDigits = parseOptions.fractionDigits;\n }\n actualPattern = fractionDigitsPattern(actualPattern, minFrac || parseOptions.fractionDigits ||\n options.minimumFractionDigits || defaultMinimum, options.maximumFractionDigits || defaultMinimum);\n }\n if (options.minimumIntegerDigits) {\n actualPattern = minimumIntegerPattern(actualPattern, options.minimumIntegerDigits);\n }\n if (options.useGrouping) {\n actualPattern = groupingPattern(actualPattern);\n }\n if (parseOptions.type === 'currency') {\n var cPattern = actualPattern;\n actualPattern = curObj.pData.nlead + cPattern + curObj.pData.nend;\n if (curObj.hasNegativePattern) {\n actualPattern += ';' + curObj.nData.nlead + cPattern + curObj.nData.nend;\n }\n }\n if (parseOptions.type === 'percent') {\n actualPattern += ' %';\n }\n }\n else {\n actualPattern = options.format.replace(/\\'/g, '\"');\n }\n return actualPattern;\n }\n IntlBase.getActualNumberFormat = getActualNumberFormat;\n function fractionDigitsPattern(pattern, minDigits, maxDigits) {\n pattern += '.';\n for (var a = 0; a < minDigits; a++) {\n pattern += '0';\n }\n if (minDigits < maxDigits) {\n var diff = maxDigits - minDigits;\n for (var b = 0; b < diff; b++) {\n pattern += '#';\n }\n }\n return pattern;\n }\n function minimumIntegerPattern(pattern, digits) {\n var temp = pattern.split('.');\n var integer = '';\n for (var x = 0; x < digits; x++) {\n integer += '0';\n }\n return temp[1] ? (integer + '.' + temp[1]) : integer;\n }\n function groupingPattern(pattern) {\n var temp = pattern.split('.');\n var integer = temp[0];\n var no = 3 - integer.length % 3;\n var hash = (no && no === 1) ? '#' : (no === 2 ? '##' : '');\n integer = hash + integer;\n pattern = '';\n for (var x = integer.length - 1; x > 0; x = x - 3) {\n pattern = ',' + integer[x - 2] + integer[x - 1] + integer[x] + pattern;\n }\n pattern = pattern.slice(1);\n return temp[1] ? (pattern + '.' + temp[1]) : pattern;\n }\n})(IntlBase || (IntlBase = {}));\n","/**\n * To import utils\n */\nimport { isNullOrUndefined } from './util';\n/**\n * @private\n */\nvar CanvasRenderer = /** @class */ (function () {\n /* End-Properties */\n function CanvasRenderer(rootID) {\n this.rootId = rootID;\n }\n // method to get the attributes value\n /* tslint:disable */\n CanvasRenderer.prototype.getOptionValue = function (options, key) {\n return options[key];\n };\n /* tslint:enable */\n /**\n * To create a Html5 canvas element\n * @param {BaseAttibutes} options - Options to create canvas\n * @return {HTMLCanvasElement}\n */\n CanvasRenderer.prototype.createCanvas = function (options) {\n var canvasObj = document.createElement('canvas');\n canvasObj.setAttribute('id', this.rootId + '_canvas');\n this.ctx = canvasObj.getContext('2d');\n this.canvasObj = canvasObj;\n this.setCanvasSize(options.width, options.height);\n return this.canvasObj;\n };\n /**\n * To set the width and height for the Html5 canvas element\n * @param {number} width - width of the canvas\n * @param {number} height - height of the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.setCanvasSize = function (width, height) {\n var element = document.getElementById(this.rootId);\n var size = !isNullOrUndefined(element) ? element.getBoundingClientRect() : null;\n if (isNullOrUndefined(this.width)) {\n this.canvasObj.setAttribute('width', width ? width.toString() : size.width.toString());\n }\n else {\n this.canvasObj.setAttribute('width', this.width.toString());\n }\n if (isNullOrUndefined(this.height)) {\n this.canvasObj.setAttribute('height', height ? height.toString() : '450');\n }\n else {\n this.canvasObj.setAttribute('height', this.height.toString());\n }\n };\n // To set the values to the attributes\n CanvasRenderer.prototype.setAttributes = function (options) {\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n var dashArray = this.getOptionValue(options, 'stroke-dasharray');\n if (!isNullOrUndefined(dashArray)) {\n var dashArrayString = dashArray.split(',');\n this.ctx.setLineDash([parseInt(dashArrayString[0], 10), parseInt(dashArrayString[1], 10)]);\n }\n this.ctx.strokeStyle = this.getOptionValue(options, 'stroke');\n };\n /**\n * To draw a line\n * @param {LineAttributes} options - required options to draw a line on the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.drawLine = function (options) {\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n this.ctx.strokeStyle = options.stroke;\n this.ctx.moveTo(options.x1, options.y1);\n this.ctx.lineTo(options.x2, options.y2);\n this.ctx.stroke();\n this.ctx.restore();\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw a rectangle\n * @param {RectAttributes} options - required options to draw a rectangle on the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.drawRectangle = function (options) {\n var canvasCtx = this.ctx;\n var cornerRadius = options.rx;\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.globalAlpha = this.getOptionValue(options, 'opacity');\n this.setAttributes(options);\n this.ctx.rect(options.x, options.y, options.width, options.height);\n if (cornerRadius !== null && cornerRadius >= 0) {\n this.drawCornerRadius(options);\n }\n else {\n if (options.fill === 'none') {\n options.fill = 'transparent';\n }\n this.ctx.fillStyle = options.fill;\n this.ctx.fillRect(options.x, options.y, options.width, options.height);\n this.ctx.stroke();\n }\n this.ctx.restore();\n this.ctx = canvasCtx;\n this.dataUrl = this.canvasObj.toDataURL();\n };\n // To draw the corner of a rectangle\n CanvasRenderer.prototype.drawCornerRadius = function (options) {\n var cornerRadius = options.rx;\n var x = options.x;\n var y = options.y;\n var width = options.width;\n var height = options.height;\n if (options.fill === 'none') {\n options.fill = 'transparent';\n }\n this.ctx.fillStyle = options.fill;\n if (width < 2 * cornerRadius) {\n cornerRadius = width / 2;\n }\n if (height < 2 * cornerRadius) {\n cornerRadius = height / 2;\n }\n this.ctx.beginPath();\n this.ctx.moveTo(x + width - cornerRadius, y);\n this.ctx.arcTo(x + width, y, x + width, y + height, cornerRadius);\n this.ctx.arcTo(x + width, y + height, x, y + height, cornerRadius);\n this.ctx.arcTo(x, y + height, x, y, cornerRadius);\n this.ctx.arcTo(x, y, x + width, y, cornerRadius);\n this.ctx.closePath();\n this.ctx.fill();\n this.ctx.stroke();\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw a path on the canvas\n * @param {PathAttributes} options - options needed to draw path\n * @param {Int32Array} canvasTranslate - Array of numbers to translate the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.drawPath = function (options, canvasTranslate) {\n var path = options.d;\n var dataSplit = path.split(' ');\n var borderWidth = this.getOptionValue(options, 'stroke-width');\n var canvasCtx = this.ctx;\n var flag = true;\n this.ctx.save();\n this.ctx.beginPath();\n if (canvasTranslate) {\n this.ctx.translate(canvasTranslate[0], canvasTranslate[1]);\n }\n this.ctx.globalAlpha = options.opacity ? options.opacity : this.getOptionValue(options, 'fill-opacity');\n this.setAttributes(options);\n for (var i = 0; i < dataSplit.length; i = i + 3) {\n var x1 = parseFloat(dataSplit[i + 1]);\n var y1 = parseFloat(dataSplit[i + 2]);\n switch (dataSplit[i]) {\n case 'M':\n if (!options.innerR && !options.cx) {\n this.ctx.moveTo(x1, y1);\n }\n break;\n case 'L':\n if (!options.innerR) {\n this.ctx.lineTo(x1, y1);\n }\n break;\n case 'C':\n var c1 = parseFloat(dataSplit[i + 3]);\n var c2 = parseFloat(dataSplit[i + 4]);\n var c3 = parseFloat(dataSplit[i + 5]);\n var c4 = parseFloat(dataSplit[i + 6]);\n this.ctx.bezierCurveTo(x1, y1, c1, c2, c3, c4);\n i = i + 4;\n break;\n case 'A':\n if (!options.innerR) {\n if (options.cx) {\n this.ctx.arc(options.cx, options.cy, options.radius, 0, 2 * Math.PI, options.counterClockWise);\n }\n else {\n this.ctx.moveTo(options.x, options.y);\n this.ctx.arc(options.x, options.y, options.radius, options.start, options.end, options.counterClockWise);\n this.ctx.lineTo(options.x, options.y);\n }\n }\n else if (flag) {\n this.ctx.arc(options.x, options.y, options.radius, options.start, options.end, options.counterClockWise);\n this.ctx.arc(options.x, options.y, options.innerR, options.end, options.start, !options.counterClockWise);\n flag = false;\n }\n i = i + 5;\n break;\n case 'z':\n this.ctx.closePath();\n break;\n }\n }\n if (options.fill !== 'none' && options.fill !== undefined) {\n this.ctx.fillStyle = options.fill;\n this.ctx.fill();\n }\n if (borderWidth > 0) {\n this.ctx.stroke();\n }\n this.ctx.restore();\n this.ctx = canvasCtx;\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw a text\n * @param {TextAttributes} options - options required to draw text\n * @param {string} label - Specifies the text which has to be drawn on the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.drawText = function (options, label) {\n var fontWeight = this.getOptionValue(options, 'font-weight');\n if (!isNullOrUndefined(fontWeight) && fontWeight.toLowerCase() === 'regular') {\n fontWeight = 'normal';\n }\n var fontSize = this.getOptionValue(options, 'font-size');\n var fontFamily = this.getOptionValue(options, 'font-family');\n var fontStyle = this.getOptionValue(options, 'font-style').toLowerCase();\n var font = (fontStyle + ' ' + fontWeight + ' ' + fontSize + ' ' + fontFamily);\n var anchor = this.getOptionValue(options, 'text-anchor');\n var opacity = options.opacity !== undefined ? options.opacity : 1;\n if (anchor === 'middle') {\n anchor = 'center';\n }\n this.ctx.save();\n this.ctx.fillStyle = options.fill;\n this.ctx.font = font;\n this.ctx.textAlign = anchor;\n this.ctx.globalAlpha = opacity;\n if (options.baseline) {\n this.ctx.textBaseline = options.baseline;\n }\n var txtlngth = 0;\n this.ctx.translate(options.x + (txtlngth / 2), options.y);\n this.ctx.rotate(options.labelRotation * Math.PI / 180);\n this.ctx.fillText(label, 0, 0);\n this.ctx.restore();\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw circle on the canvas\n * @param {CircleAttributes} options - required options to draw the circle\n * @return {void}\n */\n CanvasRenderer.prototype.drawCircle = function (options) {\n var canvasCtx = this.ctx;\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.arc(options.cx, options.cy, options.r, 0, 2 * Math.PI);\n this.ctx.fillStyle = options.fill;\n this.ctx.globalAlpha = options.opacity;\n this.ctx.fill();\n this.setAttributes(options);\n this.ctx.stroke();\n this.ctx.restore();\n this.ctx = canvasCtx;\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw polyline\n * @param {PolylineAttributes} options - options needed to draw polyline\n * @return {void}\n */\n CanvasRenderer.prototype.drawPolyline = function (options) {\n this.ctx.save();\n this.ctx.beginPath();\n var points = options.points.split(' ');\n for (var i = 0; i < points.length - 1; i++) {\n var point = points[i].split(',');\n var x = parseFloat(point[0]);\n var y = parseFloat(point[1]);\n if (i === 0) {\n this.ctx.moveTo(x, y);\n }\n else {\n this.ctx.lineTo(x, y);\n }\n }\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n this.ctx.strokeStyle = options.stroke;\n this.ctx.stroke();\n this.ctx.restore();\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw an ellipse on the canvas\n * @param {EllipseAttributes} options - options needed to draw ellipse\n * @return {void}\n */\n CanvasRenderer.prototype.drawEllipse = function (options) {\n var canvasCtx = this.ctx;\n var circumference = Math.max(options.rx, options.ry);\n var scaleX = options.rx / circumference;\n var scaleY = options.ry / circumference;\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.translate(options.cx, options.cy);\n this.ctx.save();\n this.ctx.scale(scaleX, scaleY);\n this.ctx.arc(0, 0, circumference, 0, 2 * Math.PI, false);\n this.ctx.fillStyle = options.fill;\n this.ctx.fill();\n this.ctx.restore();\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n this.ctx.strokeStyle = options.stroke;\n this.ctx.stroke();\n this.ctx.restore();\n this.ctx = canvasCtx;\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To draw an image\n * @param {ImageAttributes} options - options required to draw an image on the canvas\n * @return {void}\n */\n CanvasRenderer.prototype.drawImage = function (options) {\n this.ctx.save();\n var imageObj = new Image();\n if (!isNullOrUndefined(options.href)) {\n imageObj.src = options.href;\n this.ctx.drawImage(imageObj, options.x, options.y, options.width, options.height);\n }\n this.ctx.restore();\n this.dataUrl = this.canvasObj.toDataURL();\n };\n /**\n * To create a linear gradient\n * @param {string[]} colors - Specifies the colors required to create linear gradient\n * @return {string}\n */\n CanvasRenderer.prototype.createLinearGradient = function (colors) {\n var myGradient;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n myGradient = this.ctx.createLinearGradient(0, 0, 0, this.canvasObj.height);\n }\n var color = this.setGradientValues(colors, myGradient);\n return color;\n };\n /**\n * To create a radial gradient\n * @param {string[]} colors - Specifies the colors required to create linear gradient\n * @return {string}\n */\n CanvasRenderer.prototype.createRadialGradient = function (colors) {\n var myGradient;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n myGradient = this.ctx.createRadialGradient(0, 0, 0, 0, 0, this.canvasObj.height);\n }\n var colorName = this.setGradientValues(colors, myGradient);\n return colorName;\n };\n // To set the gradient values\n CanvasRenderer.prototype.setGradientValues = function (colors, myGradient) {\n var colorName;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n for (var i = 0; i <= colors.length - 1; i++) {\n var color = colors[i].color;\n var newColorStop = (colors[i].colorStop).slice(0, -1);\n var stopColor = parseInt(newColorStop, 10) / 100;\n myGradient.addColorStop(stopColor, color);\n }\n colorName = myGradient.toString();\n }\n else {\n colorName = colors[0].color.toString();\n }\n this.dataUrl = this.canvasObj.toDataURL();\n return colorName;\n };\n /**\n * To set the attributes to the element\n * @param {SVGCanvasAttributes} options - Attributes to set for the element\n * @param {HTMLElement} element - The element to which the attributes need to be set\n * @return {HTMLElement}\n */\n CanvasRenderer.prototype.setElementAttributes = function (options, element) {\n var keys = Object.keys(options);\n var values = Object.keys(options).map(function (key) { return options[key]; });\n for (var i = 0; i < keys.length; i++) {\n element.setAttribute(keys[i], values[i]);\n }\n return element;\n };\n /**\n * To update the values of the canvas element attributes\n * @param {SVGCanvasAttributes} options - Specifies the colors required to create gradient\n * @return {void}\n */\n CanvasRenderer.prototype.updateCanvasAttributes = function (options) {\n this.setElementAttributes(options, this.canvasObj);\n var ctx = this.ctx;\n if (!isNullOrUndefined(this.dataUrl)) {\n var img_1 = new Image;\n img_1.onload = function () {\n ctx.drawImage(img_1, 0, 0);\n };\n img_1.src = this.dataUrl;\n }\n };\n return CanvasRenderer;\n}());\nexport { CanvasRenderer };\n","/**\n * Module loading operations\n */\nimport { createInstance, setValue, getValue, deleteObject } from './util';\nvar MODULE_SUFFIX = 'Module';\nvar ModuleLoader = /** @class */ (function () {\n function ModuleLoader(parent) {\n this.loadedModules = [];\n this.parent = parent;\n }\n ;\n /**\n * Inject required modules in component library\n * @return {void}\n * @param {ModuleDeclaration[]} requiredModules - Array of modules to be required\n * @param {Function[]} moduleList - Array of modules to be injected from sample side\n */\n ModuleLoader.prototype.inject = function (requiredModules, moduleList) {\n var reqLength = requiredModules.length;\n if (reqLength === 0) {\n this.clean();\n return;\n }\n if (this.loadedModules.length) {\n this.clearUnusedModule(requiredModules);\n }\n for (var i = 0; i < reqLength; i++) {\n var modl = requiredModules[i];\n for (var _i = 0, moduleList_1 = moduleList; _i < moduleList_1.length; _i++) {\n var module = moduleList_1[_i];\n var modName = modl.member;\n if (module.prototype.getModuleName() === modl.member && !this.isModuleLoaded(modName)) {\n var moduleObject = createInstance(module, modl.args);\n var memberName = this.getMemberName(modName);\n if (modl.isProperty) {\n setValue(memberName, module, this.parent);\n }\n else {\n setValue(memberName, moduleObject, this.parent);\n }\n var loadedModule = modl;\n loadedModule.member = memberName;\n this.loadedModules.push(loadedModule);\n }\n }\n }\n };\n /**\n * To remove the created object while destroying the control\n * @return {void}\n */\n ModuleLoader.prototype.clean = function () {\n for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) {\n var modules = _a[_i];\n if (!modules.isProperty) {\n getValue(modules.member, this.parent).destroy();\n }\n }\n this.loadedModules = [];\n };\n /**\n * Removes all unused modules\n * @param {ModuleDeclaration[]} moduleList\n * @returns {void}\n */\n ModuleLoader.prototype.clearUnusedModule = function (moduleList) {\n var _this = this;\n var usedModules = moduleList.map(function (arg) { return _this.getMemberName(arg.member); });\n var removableModule = this.loadedModules.filter(function (module) {\n return usedModules.indexOf(module.member) === -1;\n });\n for (var _i = 0, removableModule_1 = removableModule; _i < removableModule_1.length; _i++) {\n var mod = removableModule_1[_i];\n if (!mod.isProperty) {\n getValue(mod.member, this.parent).destroy();\n }\n this.loadedModules.splice(this.loadedModules.indexOf(mod), 1);\n deleteObject(this.parent, mod.member);\n }\n };\n /**\n * To get the name of the member.\n * @param {string} name\n * @returns {string}\n */\n ModuleLoader.prototype.getMemberName = function (name) {\n return name[0].toLowerCase() + name.substring(1) + MODULE_SUFFIX;\n };\n /**\n * Returns boolean based on whether the module specified is loaded or not\n * @param {string} modName\n * @returns {boolean}\n */\n ModuleLoader.prototype.isModuleLoaded = function (modName) {\n for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) {\n var mod = _a[_i];\n if (mod.member === this.getMemberName(modName)) {\n return true;\n }\n }\n return false;\n };\n return ModuleLoader;\n}());\nexport { ModuleLoader };\n","import { getValue, setValue, merge } from './util';\nimport { Base } from './base';\n/**\n * To detect the changes for inner properties.\n * @private\n */\nvar ChildProperty = /** @class */ (function () {\n function ChildProperty(parent, propName, defaultValue, isArray) {\n this.properties = {};\n this.changedProperties = {};\n this.childChangedProperties = {};\n this.oldProperties = {};\n // tslint:disable-next-line:no-empty\n this.finalUpdate = function () { };\n this.callChildDataBind = getValue('callChildDataBind', Base);\n this.parentObj = parent;\n this.controlParent = this.parentObj.controlParent || this.parentObj;\n this.propName = propName;\n this.setProperties(defaultValue, true);\n this.isParentArray = isArray;\n }\n /**\n * Updates the property changes\n * @param {boolean} val\n * @param {string} propName\n * @returns {void}\n */\n ChildProperty.prototype.updateChange = function (val, propName) {\n if (val === true) {\n this.parentObj.childChangedProperties[propName] = val;\n }\n else {\n delete this.parentObj.childChangedProperties[propName];\n }\n if (this.parentObj.updateChange) {\n this.parentObj.updateChange(val, this.parentObj.propName);\n }\n };\n /**\n * Updates time out duration\n */\n ChildProperty.prototype.updateTimeOut = function () {\n if (this.parentObj.updateTimeOut) {\n this.parentObj.finalUpdate();\n this.parentObj.updateTimeOut();\n }\n else {\n var changeTime_1 = setTimeout(this.parentObj.dataBind.bind(this.parentObj));\n var clearUpdate = function () {\n clearTimeout(changeTime_1);\n };\n this.finalUpdate = clearUpdate;\n }\n };\n /**\n * Clears changed properties\n */\n ChildProperty.prototype.clearChanges = function () {\n this.finalUpdate();\n this.updateChange(false, this.propName);\n this.oldProperties = {};\n this.changedProperties = {};\n };\n /**\n * Set property changes\n * @param {Object} prop\n * @param {boolean} muteOnChange\n * {void}\n */\n ChildProperty.prototype.setProperties = function (prop, muteOnChange) {\n if (muteOnChange === true) {\n merge(this, prop);\n this.updateChange(false, this.propName);\n this.clearChanges();\n }\n else {\n merge(this, prop);\n }\n };\n /**\n * Binds data\n */\n ChildProperty.prototype.dataBind = function () {\n this.callChildDataBind(this.childChangedProperties, this);\n if (this.isParentArray) {\n var curIndex = this.parentObj[this.propName].indexOf(this);\n if (Object.keys(this.changedProperties).length) {\n setValue(this.propName + '.' + curIndex, this.changedProperties, this.parentObj.changedProperties);\n setValue(this.propName + '.' + curIndex, this.oldProperties, this.parentObj.oldProperties);\n }\n }\n else {\n this.parentObj.changedProperties[this.propName] = this.changedProperties;\n this.parentObj.oldProperties[this.propName] = this.oldProperties;\n }\n this.clearChanges();\n };\n /**\n * Saves changes to newer values\n * @param {string} key\n * @param {Object} newValue\n * @param {Object} oldValue\n * @returns {void}\n */\n ChildProperty.prototype.saveChanges = function (key, newValue, oldValue) {\n if (this.controlParent.isProtectedOnChange) {\n return;\n }\n this.oldProperties[key] = oldValue;\n this.changedProperties[key] = newValue;\n this.updateChange(true, this.propName);\n this.finalUpdate();\n this.updateTimeOut();\n };\n return ChildProperty;\n}());\nexport { ChildProperty };\n","/**\n * Parser\n */\nvar defaultNumberingSystem = {\n 'latn': {\n '_digits': '0123456789',\n '_type': 'numeric'\n }\n};\nimport { isUndefined, getValue } from '../util';\nvar latnRegex = /^[0-9]*$/;\nvar defaultNumberSymbols = {\n 'decimal': '.',\n 'group': ',',\n 'percentSign': '%',\n 'plusSign': '+',\n 'minusSign': '-',\n 'infinity': '∞',\n 'nan': 'NaN',\n 'exponential': 'E'\n};\nvar latnNumberSystem = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n/**\n * Interface for parser base\n * @private\n */\nvar ParserBase = /** @class */ (function () {\n function ParserBase() {\n }\n /**\n * Returns the cldr object for the culture specifies\n * @param {Object} obj - Specifies the object from which culture object to be acquired.\n * @param {string} cName - Specifies the culture name.\n * @returns {Object}\n */\n ParserBase.getMainObject = function (obj, cName) {\n return getValue('main.' + cName, obj);\n };\n /**\n * Returns the numbering system object from given cldr data.\n * @param {Object} obj - Specifies the object from which number system is acquired.\n * @returns {Object}\n */\n ParserBase.getNumberingSystem = function (obj) {\n return getValue('supplemental.numberingSystems', obj) || this.numberingSystems;\n };\n /**\n * Returns the reverse of given object keys or keys specified.\n * @param {Object} prop - Specifies the object to be reversed.\n * @param {number[]} keys - Optional parameter specifies the custom keyList for reversal.\n * @returns {Object}\n */\n ParserBase.reverseObject = function (prop, keys) {\n var propKeys = keys || Object.keys(prop);\n var res = {};\n for (var _i = 0, propKeys_1 = propKeys; _i < propKeys_1.length; _i++) {\n var key = propKeys_1[_i];\n /* tslint:disable no-any */\n if (!res.hasOwnProperty(prop[key])) {\n res[prop[key]] = key;\n }\n }\n return res;\n };\n /**\n * Returns the symbol regex by skipping the escape sequence.\n * @param {string[]} props - Specifies the array values to be skipped.\n * @returns {RegExp}\n */\n ParserBase.getSymbolRegex = function (props) {\n var regexStr = props.map(function (str) {\n return str.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1');\n }).join('|');\n return new RegExp(regexStr, 'g');\n };\n ParserBase.getSymbolMatch = function (prop) {\n var matchKeys = Object.keys(defaultNumberSymbols);\n var ret = {};\n for (var _i = 0, matchKeys_1 = matchKeys; _i < matchKeys_1.length; _i++) {\n var key = matchKeys_1[_i];\n ret[prop[key]] = defaultNumberSymbols[key];\n }\n return ret;\n };\n /**\n * Returns regex string for provided value\n * @param {string} val\n * @returns {string}\n */\n ParserBase.constructRegex = function (val) {\n var len = val.length;\n var ret = '';\n for (var i = 0; i < len; i++) {\n if (i !== len - 1) {\n ret += val[i] + '|';\n }\n else {\n ret += val[i];\n }\n }\n return ret;\n };\n /**\n * Returns the replaced value of matching regex and obj mapper.\n * @param {string} value - Specifies the values to be replaced.\n * @param {RegExp} regex - Specifies the regex to search.\n * @param {Object} obj - Specifies the object matcher to be replace value parts.\n * @returns {string}\n */\n ParserBase.convertValueParts = function (value, regex, obj) {\n return value.replace(regex, function (str) {\n return obj[str];\n });\n };\n /**\n * Returns default numbering system object for formatting from cldr data\n * @param {Object} obj\n * @returns {NumericObject}\n */\n ParserBase.getDefaultNumberingSystem = function (obj) {\n var ret = {};\n ret.obj = getValue('numbers', obj);\n ret.nSystem = getValue('defaultNumberingSystem', ret.obj);\n return ret;\n };\n /**\n * Returns the replaced value of matching regex and obj mapper.\n */\n ParserBase.getCurrentNumericOptions = function (curObj, numberSystem, needSymbols) {\n var ret = {};\n var cur = this.getDefaultNumberingSystem(curObj);\n if (!isUndefined(cur.nSystem)) {\n var digits = getValue(cur.nSystem + '._digits', numberSystem);\n if (!isUndefined(digits)) {\n ret.numericPair = this.reverseObject(digits, latnNumberSystem);\n ret.numberParseRegex = new RegExp(this.constructRegex(digits), 'g');\n ret.numericRegex = '[' + digits[0] + '-' + digits[9] + ']';\n if (needSymbols) {\n ret.numericRegex = digits[0] + '-' + digits[9];\n ret.symbolNumberSystem = getValue('symbols-numberSystem-' + cur.nSystem, cur.obj);\n ret.symbolMatch = this.getSymbolMatch(ret.symbolNumberSystem);\n ret.numberSystem = cur.nSystem;\n }\n }\n }\n return ret;\n };\n /**\n * Returns number mapper object for the provided cldr data\n * @param {Object} curObj\n * @param {Object} numberSystem\n * @param {boolean} isNumber\n * @returns {NumberMapper}\n */\n ParserBase.getNumberMapper = function (curObj, numberSystem, isNumber) {\n var ret = { mapper: {} };\n var cur = this.getDefaultNumberingSystem(curObj);\n if (!isUndefined(cur.nSystem)) {\n ret.numberSystem = cur.nSystem;\n ret.numberSymbols = getValue('symbols-numberSystem-' + cur.nSystem, cur.obj);\n ret.timeSeparator = getValue('timeSeparator', ret.numberSymbols);\n var digits = getValue(cur.nSystem + '._digits', numberSystem);\n if (!isUndefined(digits)) {\n for (var _i = 0, latnNumberSystem_1 = latnNumberSystem; _i < latnNumberSystem_1.length; _i++) {\n var i = latnNumberSystem_1[_i];\n ret.mapper[i] = digits[i];\n }\n }\n }\n return ret;\n };\n ParserBase.nPair = 'numericPair';\n ParserBase.nRegex = 'numericRegex';\n ParserBase.numberingSystems = defaultNumberingSystem;\n return ParserBase;\n}());\nexport { ParserBase };\n","import { isUndefined, throwError, isNullOrUndefined, extend } from '../util';\nimport { defaultCurrencyCode } from '../internationalization';\nimport { IntlBase as base } from './intl-base';\nimport { ParserBase as parser } from './parser-base';\nvar errorText = {\n 'ms': 'minimumSignificantDigits',\n 'ls': 'maximumSignificantDigits',\n 'mf': 'minimumFractionDigits',\n 'lf': 'maximumFractionDigits',\n};\nvar integerError = 'minimumIntegerDigits';\nvar percentSign = 'percentSign';\nvar minusSign = 'minusSign';\nvar spaceRegex = /\\s/;\nvar mapper = ['infinity', 'nan', 'group', 'decimal', 'exponential'];\nvar infinity = 'infinity';\nvar nan = 'nan';\n/**\n * Module for number formatting.\n * @private\n */\nvar NumberFormat = /** @class */ (function () {\n function NumberFormat() {\n }\n /**\n * Returns the formatter function for given skeleton.\n * @param {string} culture - Specifies the culture name to be which formatting.\n * @param {NumberFormatOptions} option - Specific the format in which number will format.\n * @param {Object} object- Specifies the global cldr data collection.\n * @return Function.\n */\n NumberFormat.numberFormatter = function (culture, option, cldr) {\n var _this = this;\n var fOptions = extend({}, option);\n var cOptions = {};\n var dOptions = {};\n var symbolPattern;\n var dependable = base.getDependables(cldr, culture, true);\n dOptions.numberMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n dOptions.currencySymbol = base.getCurrencySymbol(dependable.numericObject, fOptions.currency || defaultCurrencyCode);\n /* tslint:disable no-any */\n dOptions.percentSymbol = dOptions.numberMapper.numberSymbols[percentSign];\n dOptions.minusSymbol = dOptions.numberMapper.numberSymbols[minusSign];\n var symbols = dOptions.numberMapper.numberSymbols;\n if ((option.format) && !(base.formatRegex.test(option.format))) {\n cOptions = base.customFormat(option.format, dOptions, dependable.numericObject);\n }\n else {\n extend(fOptions, base.getProperNumericSkeleton(option.format || 'N'));\n fOptions.isCurrency = fOptions.type === 'currency';\n fOptions.isPercent = fOptions.type === 'percent';\n symbolPattern = base.getSymbolPattern(fOptions.type, dOptions.numberMapper.numberSystem, dependable.numericObject, fOptions.isAccount);\n fOptions.groupOne = this.checkValueRange(fOptions.maximumSignificantDigits, fOptions.minimumSignificantDigits, true);\n this.checkValueRange(fOptions.maximumFractionDigits, fOptions.minimumFractionDigits, false, true);\n if (!isUndefined(fOptions.fractionDigits)) {\n fOptions.minimumFractionDigits = fOptions.maximumFractionDigits = fOptions.fractionDigits;\n }\n if (isUndefined(fOptions.useGrouping)) {\n fOptions.useGrouping = true;\n }\n if (fOptions.isCurrency) {\n symbolPattern = symbolPattern.replace(/\\u00A4/g, base.defaultCurrency);\n }\n var split = symbolPattern.split(';');\n cOptions.nData = base.getFormatData(split[1] || '-' + split[0], true, dOptions.currencySymbol);\n cOptions.pData = base.getFormatData(split[0], false, dOptions.currencySymbol);\n if (fOptions.useGrouping) {\n fOptions.groupSeparator = symbols[mapper[2]];\n fOptions.groupData = this.getGroupingDetails(split[0]);\n }\n var minFrac = isUndefined(fOptions.minimumFractionDigits);\n if (minFrac) {\n fOptions.minimumFractionDigits = cOptions.nData.minimumFraction;\n }\n if (isUndefined(fOptions.maximumFractionDigits)) {\n var mval = cOptions.nData.maximumFraction;\n fOptions.maximumFractionDigits = isUndefined(mval) && fOptions.isPercent ? 0 : mval;\n }\n var mfrac = fOptions.minimumFractionDigits;\n var lfrac = fOptions.maximumFractionDigits;\n if (!isUndefined(mfrac) && !isUndefined(lfrac)) {\n if (mfrac > lfrac) {\n fOptions.maximumFractionDigits = mfrac;\n }\n }\n }\n extend(cOptions.nData, fOptions);\n extend(cOptions.pData, fOptions);\n return function (value) {\n if (isNaN(value)) {\n return symbols[mapper[1]];\n }\n else if (!isFinite(value)) {\n return symbols[mapper[0]];\n }\n return _this.intNumberFormatter(value, cOptions, dOptions);\n };\n };\n /**\n * Returns grouping details for the pattern provided\n * @param {string} pattern\n * @returns {GroupDetails}\n */\n NumberFormat.getGroupingDetails = function (pattern) {\n var ret = {};\n var match = pattern.match(base.negativeDataRegex);\n if (match && match[4]) {\n var pattern_1 = match[4];\n var p = pattern_1.lastIndexOf(',');\n if (p !== -1) {\n var temp = pattern_1.split('.')[0];\n ret.primary = (temp.length - p) - 1;\n var s = pattern_1.lastIndexOf(',', p - 1);\n if (s !== -1) {\n ret.secondary = p - 1 - s;\n }\n }\n }\n return ret;\n };\n /**\n * Returns if the provided integer range is valid.\n * @param {number} val1\n * @param {number} val2\n * @param {boolean} checkbothExist\n * @param {boolean} isFraction\n * @returns {boolean}\n */\n NumberFormat.checkValueRange = function (val1, val2, checkbothExist, isFraction) {\n var decide = isFraction ? 'f' : 's';\n var dint = 0;\n var str1 = errorText['l' + decide];\n var str2 = errorText['m' + decide];\n if (!isUndefined(val1)) {\n this.checkRange(val1, str1, isFraction);\n dint++;\n }\n if (!isUndefined(val2)) {\n this.checkRange(val2, str2, isFraction);\n dint++;\n }\n if (dint === 2) {\n if (val1 < val2) {\n throwError(str2 + 'specified must be less than the' + str1);\n }\n else {\n return true;\n }\n }\n else if (checkbothExist && dint === 1) {\n throwError('Both' + str2 + 'and' + str2 + 'must be present');\n }\n return false;\n };\n /**\n * Check if the provided fraction range is valid\n * @param {number} val\n * @param {string} text\n * @param {boolean} isFraction\n * @returns {void}\n */\n NumberFormat.checkRange = function (val, text, isFraction) {\n var range = isFraction ? [0, 20] : [1, 21];\n if (val < range[0] || val > range[1]) {\n throwError(text + 'value must be within the range' + range[0] + 'to' + range[1]);\n }\n };\n /**\n * Returns formatted numeric string for provided formatting options\n * @param {number} value\n * @param {base.GenericFormatOptions} fOptions\n * @param {CommonOptions} dOptions\n * @returns {string}\n */\n NumberFormat.intNumberFormatter = function (value, fOptions, dOptions) {\n var curData;\n if (isUndefined(fOptions.nData.type)) {\n return undefined;\n }\n else {\n if (value < 0) {\n value = value * -1;\n curData = fOptions.nData;\n }\n else if (value === 0) {\n curData = fOptions.zeroData || fOptions.pData;\n }\n else {\n curData = fOptions.pData;\n }\n var fValue = '';\n if (curData.isPercent) {\n value = value * 100;\n }\n if (curData.groupOne) {\n fValue = this.processSignificantDigits(value, curData.minimumSignificantDigits, curData.maximumSignificantDigits);\n }\n else {\n fValue = this.processFraction(value, curData.minimumFractionDigits, curData.maximumFractionDigits);\n if (curData.minimumIntegerDigits) {\n fValue = this.processMinimumIntegers(fValue, curData.minimumIntegerDigits);\n }\n }\n if (curData.type === 'scientific') {\n fValue = value.toExponential(curData.maximumFractionDigits);\n fValue = fValue.replace('e', dOptions.numberMapper.numberSymbols[mapper[4]]);\n }\n fValue = fValue.replace('.', dOptions.numberMapper.numberSymbols[mapper[3]]);\n if (curData.useGrouping) {\n fValue = this.groupNumbers(fValue, curData.groupData.primary, curData.groupSeparator || ',', dOptions.numberMapper.numberSymbols[mapper[3]] || '.', curData.groupData.secondary);\n }\n fValue = parser.convertValueParts(fValue, base.latnParseRegex, dOptions.numberMapper.mapper);\n if (curData.nlead === 'N/A') {\n return curData.nlead;\n }\n else {\n return curData.nlead + fValue + curData.nend;\n }\n }\n };\n /**\n * Returns significant digits processed numeric string\n * @param {number} value\n * @param {number} min\n * @param {number} max\n * @returns {string}\n */\n NumberFormat.processSignificantDigits = function (value, min, max) {\n var temp = value + '';\n var tn;\n var length = temp.length;\n if (length < min) {\n return value.toPrecision(min);\n }\n else {\n temp = value.toPrecision(max);\n tn = +temp;\n return tn + '';\n }\n };\n /**\n * Returns grouped numeric string\n * @param {string} val\n * @param {number} level1\n * @param {string} sep\n * @param {string} decimalSymbol\n * @param {number} level2\n * @returns {string}\n */\n NumberFormat.groupNumbers = function (val, level1, sep, decimalSymbol, level2) {\n var flag = !isNullOrUndefined(level2) && level2 !== 0;\n var split = val.split(decimalSymbol);\n var prefix = split[0];\n var length = prefix.length;\n var str = '';\n while (length > level1) {\n str = prefix.slice(length - level1, length) + (str.length ?\n (sep + str) : '');\n length -= level1;\n if (flag) {\n level1 = level2;\n flag = false;\n }\n }\n split[0] = prefix.slice(0, length) + (str.length ? sep : '') + str;\n return split.join(decimalSymbol);\n };\n /**\n * Returns fraction processed numeric string\n * @param {number} value\n * @param {number} min\n * @param {number} max\n * @returns {string}\n */\n NumberFormat.processFraction = function (value, min, max) {\n var temp = (value + '').split('.')[1];\n var length = temp ? temp.length : 0;\n if (min && length < min) {\n var ret = '';\n if (length === 0) {\n ret = value.toFixed(min);\n }\n else {\n ret += value;\n for (var j = 0; j < min - length; j++) {\n ret += '0';\n }\n return ret;\n }\n return value.toFixed(min);\n }\n else if (!isNullOrUndefined(max) && (length > max || max === 0)) {\n return value.toFixed(max);\n }\n return value + '';\n };\n /**\n * Returns integer processed numeric string\n * @param {string} value\n * @param {number} min\n * @returns {string}\n */\n NumberFormat.processMinimumIntegers = function (value, min) {\n var temp = value.split('.');\n var lead = temp[0];\n var len = lead.length;\n if (len < min) {\n for (var i = 0; i < min - len; i++) {\n lead = '0' + lead;\n }\n temp[0] = lead;\n }\n return temp.join('.');\n };\n return NumberFormat;\n}());\nexport { NumberFormat };\n","import { ParserBase as parser } from './parser-base';\nimport { IntlBase as base } from './intl-base';\nimport { isUndefined, throwError, getValue } from '../util';\nvar abbreviateRegexGlobal = /\\/MMMMM|MMMM|MMM|a|LLL|EEEEE|EEEE|E|K|ccc|G+|z+/gi;\nvar standalone = 'stand-alone';\nvar weekdayKey = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];\nexport var basicPatterns = ['short', 'medium', 'long', 'full'];\nvar timeSetter = {\n m: 'getMinutes',\n h: 'getHours',\n H: 'getHours',\n s: 'getSeconds',\n d: 'getDate',\n};\nexport var datePartMatcher = {\n 'M': 'month',\n 'd': 'day',\n 'E': 'weekday',\n 'c': 'weekday',\n 'y': 'year',\n 'm': 'minute',\n 'h': 'hour',\n 'H': 'hour',\n 's': 'second',\n 'L': 'month',\n 'a': 'designator',\n 'z': 'timeZone',\n 'Z': 'timeZone',\n 'G': 'era'\n};\nvar timeSeparator = 'timeSeparator';\n/**\n * Date Format is a framework provides support for date formatting.\n * @private\n */\nvar DateFormat = /** @class */ (function () {\n function DateFormat() {\n }\n /**\n * Returns the formatter function for given skeleton.\n * @param {string} - Specifies the culture name to be which formatting.\n * @param {DateFormatOptions} - Specific the format in which date will format.\n * @param {cldr} - Specifies the global cldr data collection.\n * @return Function.\n */\n DateFormat.dateFormat = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture);\n var formatOptions = {};\n var resPattern = option.format || base.getResultantPattern(option.skeleton, dependable.dateObject, option.type);\n formatOptions.dateSeperator = base.getDateSeparator(dependable.dateObject);\n if (isUndefined(resPattern)) {\n throwError('Format options or type given must be invalid');\n }\n else {\n formatOptions.pattern = resPattern;\n formatOptions.numMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n var patternMatch = resPattern.match(abbreviateRegexGlobal) || [];\n for (var _i = 0, patternMatch_1 = patternMatch; _i < patternMatch_1.length; _i++) {\n var str = patternMatch_1[_i];\n var len = str.length;\n var char = str[0];\n if (char === 'K') {\n char = 'h';\n }\n /* tslint:disable no-any */\n var charKey = datePartMatcher[char];\n switch (char) {\n case 'E':\n case 'c':\n formatOptions.weekday = dependable.dateObject[base.days][standalone][base.monthIndex[len]];\n break;\n case 'M':\n case 'L':\n formatOptions.month = dependable.dateObject[base.month][standalone][base.monthIndex[len]];\n break;\n case 'a':\n formatOptions.designator = getValue('dayPeriods.format.wide', dependable.dateObject);\n break;\n case 'G':\n var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n formatOptions.era = getValue('eras.' + eText, dependable.dateObject);\n break;\n case 'z':\n formatOptions.timeZone = getValue('dates.timeZoneNames', dependable.parserObject);\n break;\n }\n }\n }\n return function (value) {\n if (isNaN(value.getDate())) {\n return null;\n }\n return _this.intDateFormatter(value, formatOptions);\n };\n };\n /**\n * Returns formatted date string based on options passed.\n * @param {Date} value\n * @param {FormatOptions} options\n */\n DateFormat.intDateFormatter = function (value, options) {\n var pattern = options.pattern;\n var ret = '';\n var matches = pattern.match(base.dateParseRegex);\n for (var _i = 0, matches_1 = matches; _i < matches_1.length; _i++) {\n var match = matches_1[_i];\n var length_1 = match.length;\n var char = match[0];\n if (char === 'K') {\n char = 'h';\n }\n var curval = void 0;\n var isNumber = void 0;\n var processNumber = void 0;\n var curstr = '';\n switch (char) {\n case 'M':\n case 'L':\n curval = value.getMonth() + 1;\n if (length_1 > 2) {\n ret += options.month[curval];\n }\n else {\n isNumber = true;\n }\n break;\n case 'E':\n case 'c':\n ret += options.weekday[weekdayKey[value.getDay()]];\n break;\n case 'H':\n case 'h':\n case 'm':\n case 's':\n case 'd':\n isNumber = true;\n curval = value[timeSetter[char]]();\n if (char === 'h') {\n curval = curval % 12 || 12;\n }\n break;\n case 'y':\n processNumber = true;\n curstr += value.getFullYear();\n if (length_1 === 2) {\n curstr = curstr.substr(curstr.length - 2);\n }\n break;\n case 'a':\n var desig = value.getHours() < 12 ? 'am' : 'pm';\n ret += options.designator[desig];\n break;\n case 'G':\n var dec = value.getFullYear() < 0 ? 0 : 1;\n ret += options.era[dec];\n break;\n case '\\'':\n ret += (match === '\\'\\'') ? '\\'' : match.replace(/\\'/g, '');\n break;\n case 'z':\n var timezone = value.getTimezoneOffset();\n var pattern_1 = (length_1 < 4) ? '+H;-H' : options.timeZone.hourFormat;\n pattern_1 = pattern_1.replace(/:/g, options.numMapper.timeSeparator);\n if (timezone === 0) {\n ret += options.timeZone.gmtZeroFormat;\n }\n else {\n processNumber = true;\n curstr = this.getTimeZoneValue(timezone, pattern_1);\n }\n curstr = options.timeZone.gmtFormat.replace(/\\{0\\}/, curstr);\n break;\n case ':':\n ret += options.numMapper.numberSymbols[timeSeparator];\n /* tslint:enable no-any */\n break;\n case '/':\n ret += options.dateSeperator;\n break;\n default:\n ret += match;\n }\n if (isNumber) {\n processNumber = true;\n curstr = this.checkTwodigitNumber(curval, length_1);\n }\n if (processNumber) {\n ret += parser.convertValueParts(curstr, base.latnParseRegex, options.numMapper.mapper);\n }\n }\n return ret;\n };\n /**\n * Returns two digit numbers for given value and length\n */\n DateFormat.checkTwodigitNumber = function (val, len) {\n var ret = val + '';\n if (len === 2 && ret.length !== 2) {\n return '0' + ret;\n }\n return ret;\n };\n /**\n * Returns the value of the Time Zone.\n * @param {number} tVal\n * @param {string} pattern\n * @private\n */\n DateFormat.getTimeZoneValue = function (tVal, pattern) {\n var _this = this;\n var splt = pattern.split(';');\n var curPattern = splt[tVal > 0 ? 1 : 0];\n var no = Math.abs(tVal);\n return curPattern = curPattern.replace(/HH?|mm/g, function (str) {\n var len = str.length;\n var ishour = str.indexOf('H') !== -1;\n return _this.checkTwodigitNumber(Math.floor(ishour ? (no / 60) : (no % 60)), len);\n });\n };\n return DateFormat;\n}());\nexport { DateFormat };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { isUndefined, getValue, isNullOrUndefined, setValue, uniqueID } from './util';\nimport { ModuleLoader } from './module-loader';\nimport { Base } from './base';\nimport { Observer } from './observer';\nimport { ChildProperty } from './child-property';\nimport { Property, NotifyPropertyChanges } from './notify-property-change';\nimport { onIntlChange, rightToLeft, defaultCulture } from './internationalization';\nvar componentCount = 0;\nvar lastPageID;\nvar lastHistoryLen = 0;\n/**\n * Base class for all Essential JavaScript components\n */\nvar Component = /** @class */ (function (_super) {\n __extends(Component, _super);\n /**\n * Initialize the constructor for component base\n */\n function Component(options, selector) {\n var _this = _super.call(this, options, selector) || this;\n _this.randomId = uniqueID();\n _this.needsID = false;\n if (isNullOrUndefined(_this.enableRtl)) {\n _this.setProperties({ 'enableRtl': rightToLeft }, true);\n }\n if (isNullOrUndefined(_this.locale)) {\n _this.setProperties({ 'locale': defaultCulture }, true);\n }\n _this.moduleLoader = new ModuleLoader(_this);\n _this.localObserver = new Observer(_this);\n // tslint:disable-next-line:no-function-constructor-with-string-args\n _this.detectFunction = new Function('args', 'var prop = Object.keys(args); if(prop.length){this[prop[0]] = args[prop[0]];}');\n onIntlChange.on('notifyExternalChange', _this.detectFunction, _this, _this.randomId);\n if (!isUndefined(selector)) {\n _this.appendTo();\n }\n return _this;\n }\n Component.prototype.requiredModules = function () {\n return [];\n };\n ;\n /**\n * Destroys the sub modules while destroying the widget\n */\n Component.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n if (this.enablePersistence) {\n this.setPersistData();\n }\n this.localObserver.destroy();\n if (this.refreshing) {\n return;\n }\n this.trigger('destroyed', { cancel: false });\n _super.prototype.destroy.call(this);\n this.moduleLoader.clean();\n onIntlChange.off('notifyExternalChange', this.detectFunction, this.randomId);\n };\n /**\n * Applies all the pending property changes and render the component again.\n */\n Component.prototype.refresh = function () {\n this.refreshing = true;\n this.moduleLoader.clean();\n this.destroy();\n this.clearChanges();\n this.localObserver = new Observer(this);\n this.preRender();\n this.injectModules();\n this.render();\n this.refreshing = false;\n };\n /**\n * Appends the control within the given HTML element\n * @param {string | HTMLElement} selector - Target element where control needs to be appended\n */\n Component.prototype.appendTo = function (selector) {\n if (!isNullOrUndefined(selector) && typeof (selector) === 'string') {\n this.element = document.querySelector(selector);\n }\n else if (!isNullOrUndefined(selector)) {\n this.element = selector;\n }\n if (!isNullOrUndefined(this.element)) {\n this.isProtectedOnChange = false;\n if (this.needsID && !this.element.id) {\n this.element.id = this.getUniqueID(this.getModuleName());\n }\n if (this.enablePersistence) {\n this.mergePersistData();\n window.addEventListener('unload', this.setPersistData.bind(this));\n }\n var inst = getValue('ej2_instances', this.element);\n if (!inst || inst.indexOf(this) === -1) {\n _super.prototype.addInstance.call(this);\n }\n this.preRender();\n this.injectModules();\n this.render();\n this.trigger('created');\n }\n };\n /**\n * When invoked, applies the pending property changes immediately to the component.\n */\n Component.prototype.dataBind = function () {\n this.injectModules();\n _super.prototype.dataBind.call(this);\n };\n ;\n /**\n * Attach one or more event handler to the current component context.\n * It is used for internal handling event internally within the component only.\n * @param {BoundOptions[]| string} event - It is optional type either to Set the collection of event list or the eventName.\n * @param {Function} handler - optional parameter Specifies the handler to run when the event occurs\n * @param {Object} context - optional parameter Specifies the context to be bind in the handler.\n * @return {void}\n * @private\n */\n Component.prototype.on = function (event, handler, context) {\n if (typeof event === 'string') {\n this.localObserver.on(event, handler, context);\n }\n else {\n for (var _i = 0, event_1 = event; _i < event_1.length; _i++) {\n var arg = event_1[_i];\n this.localObserver.on(arg.event, arg.handler, arg.context);\n }\n }\n };\n /**\n * To remove one or more event handler that has been attached with the on() method.\n * @param {BoundOptions[]| string} event - It is optional type either to Set the collection of event list or the eventName.\n * @param {Function} handler - optional parameter Specifies the function to run when the event occurs\n * @return {void}\n * @private\n */\n Component.prototype.off = function (event, handler) {\n if (typeof event === 'string') {\n this.localObserver.off(event, handler);\n }\n else {\n for (var _i = 0, event_2 = event; _i < event_2.length; _i++) {\n var arg = event_2[_i];\n this.localObserver.off(arg.event, arg.handler);\n }\n }\n };\n /**\n * To notify the handlers in the specified event.\n * @param {string} property - Specifies the event to be notify.\n * @param {Object} argument - Additional parameters to pass while calling the handler.\n * @return {void}\n * @private\n */\n Component.prototype.notify = function (property, argument) {\n if (this.isDestroyed !== true) {\n this.localObserver.notify(property, argument);\n }\n };\n /**\n * Get injected modules\n * @private\n */\n Component.prototype.getInjectedModules = function () {\n return this.injectedModules;\n };\n ;\n /**\n * Dynamically injects the required modules to the component.\n */\n Component.Inject = function () {\n var moduleList = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n moduleList[_i] = arguments[_i];\n }\n if (!this.prototype.injectedModules) {\n this.prototype.injectedModules = [];\n }\n for (var i = 0; i < moduleList.length; i++) {\n if (this.prototype.injectedModules.indexOf(moduleList[i]) === -1) {\n this.prototype.injectedModules.push(moduleList[i]);\n }\n }\n };\n Component.prototype.injectModules = function () {\n if (this.injectedModules && this.injectedModules.length) {\n this.moduleLoader.inject(this.requiredModules(), this.injectedModules);\n }\n };\n Component.prototype.mergePersistData = function () {\n var data = window.localStorage.getItem(this.getModuleName() + this.element.id);\n if (!(isNullOrUndefined(data) || (data === ''))) {\n this.setProperties(JSON.parse(data), true);\n }\n };\n Component.prototype.setPersistData = function () {\n if (!this.isDestroyed) {\n window.localStorage.setItem(this.getModuleName() + this.element.id, this.getPersistData());\n }\n };\n Component.prototype.clearTemplate = function (templateName) {\n //No Code\n };\n Component.prototype.getUniqueID = function (definedName) {\n if (this.isHistoryChanged()) {\n componentCount = 0;\n }\n lastPageID = this.pageID(location.href);\n lastHistoryLen = history.length;\n return definedName + '_' + lastPageID + '_' + componentCount++;\n };\n Component.prototype.pageID = function (url) {\n var hash = 0;\n if (url.length === 0) {\n return hash;\n }\n for (var i = 0; i < url.length; i++) {\n var char = url.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return Math.abs(hash);\n };\n Component.prototype.isHistoryChanged = function () {\n return lastPageID !== this.pageID(location.href) || lastHistoryLen !== history.length;\n };\n Component.prototype.addOnPersist = function (options) {\n var _this = this;\n var persistObj = {};\n for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {\n var key = options_1[_i];\n var objValue = void 0;\n objValue = getValue(key, this);\n if (!isUndefined(objValue)) {\n setValue(key, this.getActualProperties(objValue), persistObj);\n }\n }\n return JSON.stringify(persistObj, function (key, value) {\n return _this.getActualProperties(value);\n });\n };\n Component.prototype.getActualProperties = function (obj) {\n if (obj instanceof ChildProperty) {\n return getValue('properties', obj);\n }\n else {\n return obj;\n }\n };\n Component.prototype.ignoreOnPersist = function (options) {\n return JSON.stringify(this.iterateJsonProperties(this.properties, options));\n };\n Component.prototype.iterateJsonProperties = function (obj, ignoreList) {\n var newObj = {};\n var _loop_1 = function (key) {\n if (ignoreList.indexOf(key) === -1) {\n // tslint:disable-next-line:no-any\n var value = obj[key];\n if (typeof value === 'object' && !(value instanceof Array)) {\n var newList = ignoreList.filter(function (str) {\n return new RegExp(key + '.').test(str);\n }).map(function (str) {\n return str.replace(key + '.', '');\n });\n newObj[key] = this_1.iterateJsonProperties(this_1.getActualProperties(value), newList);\n }\n else {\n newObj[key] = value;\n }\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n var key = _a[_i];\n _loop_1(key);\n }\n return newObj;\n };\n __decorate([\n Property(false)\n ], Component.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property()\n ], Component.prototype, \"enableRtl\", void 0);\n __decorate([\n Property()\n ], Component.prototype, \"locale\", void 0);\n Component = __decorate([\n NotifyPropertyChanges\n ], Component);\n return Component;\n}(Base));\nexport { Component };\n//Function handling for page navigation detection \n/* istanbul ignore next */\n(function () {\n if (typeof window !== 'undefined') {\n window.addEventListener('popstate', \n /* istanbul ignore next */\n function () {\n componentCount = 0;\n });\n }\n})();\n","import { IntlBase as base } from './intl-base';\nimport { ParserBase as parser } from './parser-base';\nimport { isUndefined, throwError, getValue, isNullOrUndefined } from '../util';\nimport { datePartMatcher } from './date-formatter';\nvar number = 'numbers';\nvar defNoSystem = 'defaultNumberingSystem';\nvar noSystem = 'numberingSystem';\nvar standalone = 'stand-alone';\nvar curWeekDay = 'curWeekDay';\nvar latnRegex = /^[0-9]*$/;\nvar abbreviateRegex = /\\/MMMMM|MMMM|MMM|a|LLL|EEEEE|EEEE|E|ccc/;\nvar timeSetter = {\n minute: 'setMinutes',\n hour: 'setHours',\n second: 'setSeconds',\n day: 'setDate',\n month: 'setMonth'\n};\nvar month = 'months';\n/* tslint:disable no-any */\n/**\n * Date Parser.\n * @private\n */\nvar DateParser = /** @class */ (function () {\n function DateParser() {\n }\n /**\n * Returns the parser function for given skeleton.\n * @param {string} - Specifies the culture name to be which formatting.\n * @param {DateFormatOptions} - Specific the format in which string date will be parsed.\n * @param {cldr} - Specifies the global cldr data collection.\n * @return Function.\n */\n // tslint:disable-next-line:max-func-body-length\n DateParser.dateParser = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture);\n var numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr));\n var parseOptions = {};\n var resPattern = option.format || base.getResultantPattern(option.skeleton, dependable.dateObject, option.type);\n var regexString = '';\n var hourOnly;\n if (isUndefined(resPattern)) {\n throwError('Format options or type given must be invalid');\n }\n else {\n parseOptions = { pattern: resPattern, evalposition: {} };\n var patternMatch = resPattern.match(base.dateParseRegex) || [];\n var length_1 = patternMatch.length;\n var gmtCorrection = 0;\n var zCorrectTemp = 0;\n var isgmtTraversed = false;\n var nRegx = numOptions.numericRegex;\n for (var i = 0; i < length_1; i++) {\n var str = patternMatch[i];\n var len = str.length;\n var char = (str[0] === 'K') ? 'h' : str[0];\n var isNumber = void 0;\n var canUpdate = void 0;\n var charKey = datePartMatcher[char];\n var optional = (len === 2) ? '' : '?';\n if (isgmtTraversed) {\n gmtCorrection = zCorrectTemp;\n isgmtTraversed = false;\n }\n switch (char) {\n case 'E':\n case 'c':\n // tslint:disable-next-line\n var weekObject = parser.reverseObject(dependable.dateObject[base.days][standalone][base.monthIndex[len]]);\n regexString += '(' + Object.keys(weekObject).join('|') + ')';\n break;\n case 'M':\n case 'L':\n case 'd':\n case 'm':\n case 's':\n case 'h':\n case 'H':\n canUpdate = true;\n if ((char === 'M' || char === 'L') && len > 2) {\n // tslint:disable-next-line\n parseOptions[charKey] = parser.reverseObject(dependable.dateObject[month][standalone][base.monthIndex[len]]);\n /* tslint:disable no-any */\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + ')';\n }\n else {\n isNumber = true;\n regexString += '(' + nRegx + nRegx + optional + ')';\n }\n if (char === 'h') {\n parseOptions.hour12 = true;\n }\n break;\n case 'y':\n canUpdate = isNumber = true;\n if (len === 2) {\n regexString += '(' + nRegx + nRegx + ')';\n }\n else {\n regexString += '(' + nRegx + '{' + len + ',})';\n }\n break;\n case 'a':\n canUpdate = true;\n parseOptions[charKey] = parser.reverseObject(getValue('dayPeriods.format.wide', dependable.dateObject));\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + ')';\n break;\n case 'G':\n canUpdate = true;\n var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n parseOptions[charKey] = parser.reverseObject(getValue('eras.' + eText, dependable.dateObject));\n regexString += '(' + Object.keys(parseOptions[charKey]).join('|') + '?)';\n break;\n case 'z':\n var tval = new Date().getTimezoneOffset();\n canUpdate = (tval !== 0);\n parseOptions[charKey] = getValue('dates.timeZoneNames', dependable.parserObject);\n var tzone = parseOptions[charKey];\n hourOnly = (len < 4);\n var hpattern = hourOnly ? '+H;-H' : tzone.hourFormat;\n regexString += '(' + this.parseTimeZoneRegx(hpattern, tzone, nRegx) + ')?';\n isgmtTraversed = true;\n zCorrectTemp = hourOnly ? 6 : 12;\n break;\n case '\\'':\n var iString = str.replace(/\\'/g, '');\n regexString += '(' + iString + ')?';\n break;\n default:\n regexString += '([\\\\D])';\n break;\n }\n if (canUpdate) {\n parseOptions.evalposition[charKey] = { isNumber: isNumber, pos: i + 1 + gmtCorrection, hourOnly: hourOnly };\n }\n if (i === length_1 - 1 && !isNullOrUndefined(regexString)) {\n parseOptions.parserRegex = new RegExp('^' + regexString + '$');\n }\n }\n }\n return function (value) {\n var parsedDateParts = _this.internalDateParse(value, parseOptions, numOptions);\n if (isNullOrUndefined(parsedDateParts) || !Object.keys(parsedDateParts).length) {\n return null;\n }\n return _this.getDateObject(parsedDateParts);\n };\n };\n /**\n * Returns date object for provided date options\n * @param {DateParts} options\n * @param {Date} value\n * @returns {Date}\n */\n DateParser.getDateObject = function (options, value) {\n var res = value || new Date();\n res.setMilliseconds(0);\n var tKeys = ['hour', 'minute', 'second', 'month', 'day'];\n var y = options.year;\n var desig = options.designator;\n var tzone = options.timeZone;\n if (!isUndefined(y)) {\n var len = (y + '').length;\n if (len <= 2) {\n var century = Math.floor(res.getFullYear() / 100) * 100;\n y += century;\n }\n res.setFullYear(y);\n }\n for (var _i = 0, tKeys_1 = tKeys; _i < tKeys_1.length; _i++) {\n var key = tKeys_1[_i];\n var tValue = options[key];\n if (!isUndefined(tValue)) {\n if (key === 'month') {\n tValue -= 1;\n if (tValue < 0 || tValue > 11) {\n return new Date('invalid');\n }\n var pDate = res.getDate();\n res.setDate(1);\n res[timeSetter[key]](tValue);\n var lDate = new Date(res.getFullYear(), tValue + 1, 0).getDate();\n res.setDate(pDate < lDate ? pDate : lDate);\n }\n else {\n if (key === 'day') {\n var lastDay = new Date(res.getFullYear(), res.getMonth() + 1, 0).getDate();\n if ((tValue < 1 || tValue > lastDay)) {\n return null;\n }\n }\n res[timeSetter[key]](tValue);\n }\n }\n }\n if (!isUndefined(desig)) {\n var hour = res.getHours();\n if (desig === 'pm') {\n res.setHours(hour + (hour === 12 ? 0 : 12));\n }\n else if (hour === 12) {\n res.setHours(0);\n }\n }\n if (!isUndefined(tzone)) {\n var tzValue = tzone - res.getTimezoneOffset();\n if (tzValue !== 0) {\n res.setMinutes(res.getMinutes() + tzValue);\n }\n }\n return res;\n };\n /**\n * Returns date parsing options for provided value along with parse and numeric options\n * @param {string} value\n * @param {ParseOptions} parseOptions\n * @param {NumericOptions} num\n * @returns {DateParts}\n */\n DateParser.internalDateParse = function (value, parseOptions, num) {\n var matches = value.match(parseOptions.parserRegex);\n var retOptions = { 'hour': 0, 'minute': 0, 'second': 0 };\n var nRegx = num.numericRegex;\n if (isNullOrUndefined(matches)) {\n return null;\n }\n else {\n var props = Object.keys(parseOptions.evalposition);\n for (var _i = 0, props_1 = props; _i < props_1.length; _i++) {\n var prop = props_1[_i];\n var curObject = parseOptions.evalposition[prop];\n var matchString = matches[curObject.pos];\n if (curObject.isNumber) {\n retOptions[prop] = this.internalNumberParser(matchString, num);\n }\n else {\n if (prop === 'timeZone' && !isUndefined(matchString)) {\n var pos = curObject.pos;\n var val = void 0;\n var tmatch = matches[pos + 1];\n var flag = !isUndefined(tmatch);\n if (curObject.hourOnly) {\n val = this.getZoneValue(flag, tmatch, matches[pos + 4], num) * 60;\n }\n else {\n val = this.getZoneValue(flag, tmatch, matches[pos + 7], num) * 60;\n val += this.getZoneValue(flag, matches[pos + 4], matches[pos + 10], num);\n }\n if (!isNullOrUndefined(val)) {\n retOptions[prop] = val;\n }\n }\n else {\n retOptions[prop] = parseOptions[prop][matchString];\n }\n }\n }\n if (parseOptions.hour12) {\n retOptions.hour12 = true;\n }\n }\n return retOptions;\n };\n /**\n * Returns parsed number for provided Numeric string and Numeric Options\n * @param {string} value\n * @param {NumericOptions} option\n * @returns {number}\n */\n DateParser.internalNumberParser = function (value, option) {\n value = parser.convertValueParts(value, option.numberParseRegex, option.numericPair);\n if (latnRegex.test(value)) {\n return +value;\n }\n return null;\n };\n /**\n * Returns parsed time zone RegExp for provided hour format and time zone\n * @param {string} hourFormat\n * @param {base.TimeZoneOptions} tZone\n * @param {string} nRegex\n * @returns {string}\n */\n DateParser.parseTimeZoneRegx = function (hourFormat, tZone, nRegex) {\n var pattern = tZone.gmtFormat;\n var ret;\n var result;\n var cRegex = '(' + nRegex + ')' + '(' + nRegex + ')';\n var splitStr;\n ret = hourFormat.replace('+', '\\\\+');\n if (hourFormat.indexOf('HH') !== -1) {\n ret = ret.replace(/HH|mm/g, '(' + cRegex + ')');\n }\n else {\n ret = ret.replace(/H|m/g, '(' + cRegex + '?)');\n }\n splitStr = (ret.split(';').map(function (str) {\n return pattern.replace('{0}', str);\n }));\n ret = splitStr.join('|') + '|' + tZone.gmtZeroFormat;\n return ret;\n };\n /**\n * Returns zone based value.\n * @param {boolean} flag\n * @param {string} val1\n * @param {string} val2\n * @param {NumericOptions} num\n * @returns {number}\n */\n DateParser.getZoneValue = function (flag, val1, val2, num) {\n var ival = flag ? val1 : val2;\n if (!ival) {\n return 0;\n }\n var value = this.internalNumberParser(ival, num);\n if (flag) {\n return -value;\n }\n return value;\n };\n return DateParser;\n}());\nexport { DateParser };\n","import { extend, isNullOrUndefined } from '../util';\nimport { ParserBase as parser } from './parser-base';\nimport { IntlBase as base } from './intl-base';\nvar formatRegex = /(^[ncpa]{1})([0-1]?[0-9]|20)?$/i;\nvar parseRegex = /^([^0-9]*)(([0-9,]*[0-9]+)(\\.[0-9]+)?)([Ee][+-]?[0-9]+)?([^0-9]*)$/;\nvar groupRegex = /,/g;\nvar latnDecimalRegex = /^[0-9]*(\\.[0-9]+)?$/;\nvar keys = ['minusSign', 'infinity'];\n/**\n * Module for Number Parser.\n * @private\n */\nvar NumberParser = /** @class */ (function () {\n function NumberParser() {\n }\n /**\n * Returns the parser function for given skeleton.\n * @param {string} - Specifies the culture name to be which formatting.\n * @param {NumberFormatOptions} - Specific the format in which number will parsed.\n * @param {cldr} - Specifies the global cldr data collection.\n * @return Function.\n */\n NumberParser.numberParser = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture, true);\n var parseOptions = { custom: true };\n var numOptions;\n if ((base.formatRegex.test(option.format)) || !(option.format)) {\n extend(parseOptions, base.getProperNumericSkeleton(option.format || 'N'));\n parseOptions.custom = false;\n }\n else {\n extend(parseOptions, base.customFormat(option.format, null, null));\n }\n numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n parseOptions.symbolRegex = parser.getSymbolRegex(Object.keys(numOptions.symbolMatch));\n // tslint:disable-next-line:no-any\n parseOptions.infinity = numOptions.symbolNumberSystem[keys[1]];\n var symbolpattern = base.getSymbolPattern(parseOptions.type, numOptions.numberSystem, dependable.numericObject, parseOptions.isAccount);\n if (symbolpattern) {\n symbolpattern = symbolpattern.replace(/\\u00A4/g, base.defaultCurrency);\n var split = symbolpattern.split(';');\n parseOptions.nData = base.getFormatData(split[1] || '-' + split[0], true, '');\n parseOptions.pData = base.getFormatData(split[0], true, '');\n }\n return function (value) {\n return _this.getParsedNumber(value, parseOptions, numOptions);\n };\n };\n /**\n * Returns parsed number for the provided formatting options\n * @param {string} value\n * @param {NumericParts} options\n * @param {NumericOptions} numOptions\n * @returns {number}\n */\n NumberParser.getParsedNumber = function (value, options, numOptions) {\n var isNegative;\n var isPercent;\n var tempValue;\n var lead;\n var end;\n var ret;\n if (value.indexOf(options.infinity) !== -1) {\n return Infinity;\n }\n else {\n value = parser.convertValueParts(value, options.symbolRegex, numOptions.symbolMatch);\n value = parser.convertValueParts(value, numOptions.numberParseRegex, numOptions.numericPair);\n if (value.indexOf('.') === 0) {\n value = '0' + value;\n }\n var matches = value.match(parseRegex);\n if (isNullOrUndefined(matches)) {\n return NaN;\n }\n lead = matches[1];\n tempValue = matches[2];\n var exponent = matches[5];\n end = matches[6];\n isNegative = options.custom ? ((lead === options.nData.nlead) && (end === options.nData.nend)) :\n ((lead.indexOf(options.nData.nlead) !== -1) && (end.indexOf(options.nData.nend) !== -1));\n isPercent = isNegative ?\n options.nData.isPercent :\n options.pData.isPercent;\n tempValue = tempValue.replace(groupRegex, '');\n if (exponent) {\n tempValue += exponent;\n }\n ret = +tempValue;\n if (options.type === 'percent' || isPercent) {\n ret = ret / 100;\n }\n if (options.custom || options.fractionDigits) {\n ret = parseFloat(ret.toFixed(options.custom ?\n (isNegative ? options.nData.maximumFractionDigits : options.pData.maximumFractionDigits) : options.fractionDigits));\n }\n if (isNegative) {\n ret *= -1;\n }\n return ret;\n }\n };\n return NumberParser;\n}());\nexport { NumberParser };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Base } from './base';\nimport { Browser } from './browser';\nimport { isVisible } from './dom';\nimport { Property, Complex, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { EventHandler } from './event-handler';\nimport { ChildProperty } from './child-property';\nimport { select, closest, setStyleAttribute, addClass, createElement } from './dom';\nimport { extend, isUndefined, isNullOrUndefined, compareElementParent } from './util';\nvar defaultPosition = { left: 0, top: 0, bottom: 0, right: 0 };\nvar positionProp = ['offsetLeft', 'offsetTop'];\nvar axisMapper = ['x', 'y'];\nvar axisValueMapper = ['left', 'top'];\n/**\n * Specifies the position coordinates\n */\nvar Position = /** @class */ (function (_super) {\n __extends(Position, _super);\n function Position() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], Position.prototype, \"left\", void 0);\n __decorate([\n Property(0)\n ], Position.prototype, \"top\", void 0);\n return Position;\n}(ChildProperty));\nexport { Position };\n/**\n * Draggable Module provides support to enable draggable functionality in Dom Elements.\n * ```html\n *
Draggable
\n * \n * ```\n */\nvar Draggable = /** @class */ (function (_super) {\n __extends(Draggable, _super);\n function Draggable(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.dragLimit = Draggable_1.getDefaultPosition();\n _this.borderWidth = Draggable_1.getDefaultPosition();\n _this.padding = Draggable_1.getDefaultPosition();\n _this.diffX = 0;\n _this.diffY = 0;\n _this.droppables = {};\n _this.bind();\n return _this;\n }\n Draggable_1 = Draggable;\n Draggable.prototype.bind = function () {\n this.toggleEvents();\n if (Browser.isIE) {\n addClass([this.element], 'e-block-touch');\n }\n this.droppables[this.scope] = {};\n };\n Draggable.getDefaultPosition = function () {\n return extend({}, defaultPosition);\n };\n Draggable.prototype.toggleEvents = function (isUnWire) {\n var ele;\n if (!isUndefined(this.handle)) {\n ele = select(this.handle, this.element);\n }\n if (isUnWire) {\n EventHandler.remove(ele || this.element, Browser.touchStartEvent, this.initialize);\n }\n else {\n EventHandler.add(ele || this.element, Browser.touchStartEvent, this.initialize, this);\n }\n };\n Draggable.prototype.initialize = function (evt) {\n this.target = evt.currentTarget;\n if (this.preventDefault && !isUndefined(evt.changedTouches)) {\n evt.preventDefault();\n }\n if (this.abort) {\n if (!isNullOrUndefined(closest(evt.target, this.abort))) {\n return;\n }\n }\n this.element.setAttribute('aria-grabbed', 'true');\n var intCoord = this.getCoordinates(evt);\n this.initialPosition = { x: intCoord.pageX, y: intCoord.pageY };\n if (!this.clone) {\n var pos = this.element.getBoundingClientRect();\n this.relativeXPosition = intCoord.pageX - pos.left;\n this.relativeYPosition = intCoord.pageY - pos.top;\n }\n EventHandler.add(document, Browser.touchMoveEvent, this.intDragStart, this);\n EventHandler.add(document, Browser.touchEndEvent, this.intDestroy, this);\n this.toggleEvents(true);\n document.body.classList.add('e-prevent-select');\n EventHandler.trigger(document.documentElement, Browser.touchStartEvent, evt);\n };\n Draggable.prototype.intDragStart = function (evt) {\n var isChangeTouch = !isUndefined(evt.changedTouches);\n if (isChangeTouch && (evt.changedTouches.length !== 1)) {\n return;\n }\n var intCordinate = this.getCoordinates(evt);\n var pos;\n var styleProp = getComputedStyle(this.element);\n this.margin = {\n left: parseInt(styleProp.marginLeft, 10),\n top: parseInt(styleProp.marginTop, 10),\n right: parseInt(styleProp.marginRight, 10),\n bottom: parseInt(styleProp.marginBottom, 10),\n };\n var element = this.element;\n if (this.clone && this.dragTarget) {\n var intClosest = closest(evt.target, this.dragTarget);\n if (!isNullOrUndefined(intClosest)) {\n element = intClosest;\n }\n }\n this.offset = this.calculateParentPosition(element);\n this.position = this.getMousePosition(evt);\n var x = this.initialPosition.x - intCordinate.pageX;\n var y = this.initialPosition.y - intCordinate.pageY;\n var distance = Math.sqrt((x * x) + (y * y));\n if (distance >= this.distance) {\n var ele = this.getHelperElement(evt);\n if (!ele || isNullOrUndefined(ele)) {\n return;\n }\n var dragTargetElement = this.helperElement = ele;\n this.parentClientRect = this.calculateParentPosition(dragTargetElement.offsetParent);\n if (this.dragStart) {\n var curTarget = this.getProperTargetElement(evt);\n this.trigger('dragStart', { event: evt, element: element, target: curTarget });\n }\n if (this.dragArea) {\n this.setDragArea();\n }\n else {\n this.dragLimit = { left: 0, right: 0, bottom: 0, top: 0 };\n this.borderWidth = { top: 0, left: 0 };\n }\n pos = { left: this.position.left - this.parentClientRect.left, top: this.position.top - this.parentClientRect.top };\n if (this.clone && !this.enableTailMode) {\n this.diffX = this.position.left - this.offset.left;\n this.diffY = this.position.top - this.offset.top;\n }\n var posValue = this.getProcessedPositionValue({ top: (pos.top - this.diffY) + 'px',\n left: (pos.left - this.diffX) + 'px' });\n setStyleAttribute(dragTargetElement, {\n position: 'absolute', top: posValue.top, left: posValue.left\n });\n EventHandler.remove(document, Browser.touchMoveEvent, this.intDragStart);\n EventHandler.remove(document, Browser.touchEndEvent, this.intDestroy);\n if (isVisible(dragTargetElement)) {\n EventHandler.add(document, Browser.touchMoveEvent, this.intDrag, this);\n EventHandler.add(document, Browser.touchEndEvent, this.intDragStop, this);\n this.setGlobalDroppables(false, this.element, dragTargetElement);\n }\n else {\n document.body.classList.remove('e-prevent-select');\n }\n }\n };\n Draggable.prototype.getProcessedPositionValue = function (value) {\n if (this.axis) {\n if (this.axis === 'x') {\n value.top = '0px';\n }\n else if (this.axis === 'y') {\n value.left = '0px';\n }\n }\n if (this.queryPositionInfo) {\n return this.queryPositionInfo(value);\n }\n return value;\n };\n Draggable.prototype.calculateParentPosition = function (ele) {\n if (isNullOrUndefined(ele)) {\n return { left: 0, top: 0 };\n }\n var rect = ele.getBoundingClientRect();\n var style = getComputedStyle(ele);\n return {\n left: (rect.left + window.pageXOffset) - parseInt(style.marginLeft, 10),\n top: (rect.top + window.pageYOffset) - parseInt(style.marginTop, 10)\n };\n };\n Draggable.prototype.intDrag = function (evt) {\n if (!isUndefined(evt.changedTouches) && (evt.changedTouches.length !== 1)) {\n return;\n }\n var left;\n var top;\n this.position = this.getMousePosition(evt);\n var docHeight = this.getDocumentWidthHeight('Height');\n if (docHeight < this.position.top) {\n this.position.top = docHeight;\n }\n var docWidth = this.getDocumentWidthHeight('Width');\n if (docWidth < this.position.left) {\n this.position.left = docWidth;\n }\n if (this.drag) {\n var curTarget = this.getProperTargetElement(evt);\n this.trigger('drag', { event: evt, element: this.element, target: curTarget });\n }\n var eleObj = this.checkTargetElement(evt);\n if (eleObj.target && eleObj.instance) {\n eleObj.instance.intOver(evt, eleObj.target);\n /* tslint:disable no-any */\n eleObj.instance.dragData[this.scope] = this.droppables[this.scope];\n this.hoverObject = eleObj;\n }\n else if (this.hoverObject) {\n this.hoverObject.instance.intOut(evt, eleObj.target);\n this.hoverObject.instance.dragData[this.scope] = null;\n this.hoverObject = null;\n }\n var helperElement = this.droppables[this.scope].helper;\n this.parentClientRect = this.calculateParentPosition(this.helperElement.offsetParent);\n var tLeft = this.parentClientRect.left;\n var tTop = this.parentClientRect.top;\n var intCoord = this.getCoordinates(evt);\n var pagex = intCoord.pageX;\n var pagey = intCoord.pageY;\n var dLeft = this.position.left - this.diffX;\n var dTop = this.position.top - this.diffY;\n if (this.dragArea) {\n var styles = getComputedStyle(helperElement);\n if (this.pageX !== pagex || this.skipDistanceCheck) {\n var helperWidth = helperElement.offsetWidth + (parseFloat(styles.marginLeft)\n + parseFloat(styles.marginRight));\n if (this.dragLimit.left > dLeft) {\n left = this.dragLimit.left;\n }\n else if (this.dragLimit.right < dLeft + helperWidth) {\n left = this.dragLimit.right - helperWidth;\n }\n else {\n left = dLeft;\n }\n }\n if (this.pageY !== pagey || this.skipDistanceCheck) {\n var helperHeight = helperElement.offsetHeight + (parseFloat(styles.marginTop)\n + parseFloat(styles.marginBottom));\n if (this.dragLimit.top > dTop) {\n top = this.dragLimit.top;\n }\n else if (this.dragLimit.bottom < dTop + helperHeight) {\n top = this.dragLimit.bottom - helperHeight;\n }\n else {\n top = dTop;\n }\n }\n }\n else {\n left = dLeft;\n top = dTop;\n }\n var iTop = tTop + this.borderWidth.top;\n var iLeft = tLeft + this.borderWidth.left;\n var dragValue = this.getProcessedPositionValue({ top: (top - iTop) + 'px', left: (left - iLeft) + 'px' });\n setStyleAttribute(helperElement, { left: dragValue.left, top: dragValue.top });\n this.position.left = left;\n this.position.top = top;\n this.pageX = pagex;\n this.pageY = pagey;\n };\n Draggable.prototype.getDocumentWidthHeight = function (str) {\n var docBody = document.body;\n var docEle = document.documentElement;\n var returnValue = Math.max(docBody['scroll' + str], docEle['scroll' + str], docBody['offset' + str], docEle['offset' + str], docEle['client' + str]);\n return returnValue;\n };\n Draggable.prototype.intDragStop = function (evt) {\n if (!isUndefined(evt.changedTouches) && (evt.changedTouches.length !== 1)) {\n return;\n }\n var type = ['touchend', 'pointerup', 'mouseup'];\n if (type.indexOf(evt.type) !== -1) {\n if (this.dragStop) {\n var curTarget = this.getProperTargetElement(evt);\n this.trigger('dragStop', { event: evt, element: this.element, target: curTarget, helper: this.helperElement });\n }\n this.intDestroy(evt);\n }\n else {\n this.element.setAttribute('aria-grabbed', 'false');\n }\n var eleObj = this.checkTargetElement(evt);\n if (eleObj.target && eleObj.instance) {\n eleObj.instance.dragStopCalled = true;\n eleObj.instance.dragData[this.scope] = this.droppables[this.scope];\n eleObj.instance.intDrop(evt, eleObj.target);\n }\n this.setGlobalDroppables(true);\n document.body.classList.remove('e-prevent-select');\n };\n Draggable.prototype.intDestroy = function (evt) {\n this.toggleEvents();\n document.body.classList.remove('e-prevent-select');\n this.element.setAttribute('aria-grabbed', 'false');\n EventHandler.remove(document, Browser.touchMoveEvent, this.intDragStart);\n EventHandler.remove(document, Browser.touchEndEvent, this.intDragStop);\n EventHandler.remove(document, Browser.touchEndEvent, this.intDestroy);\n EventHandler.remove(document, Browser.touchMoveEvent, this.intDrag);\n };\n // triggers when property changed\n Draggable.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Draggable.prototype.getModuleName = function () {\n return 'draggable';\n };\n Draggable.prototype.setDragArea = function () {\n var eleWidthBound;\n var eleHeightBound;\n var top = 0;\n var left = 0;\n var ele;\n var type = typeof this.dragArea;\n if (type === 'string') {\n ele = select(this.dragArea);\n }\n else {\n ele = this.dragArea;\n }\n if (ele) {\n var elementArea = ele.getBoundingClientRect();\n eleWidthBound = elementArea.width ? elementArea.width : elementArea.right - elementArea.left;\n eleHeightBound = elementArea.height ? elementArea.height : elementArea.bottom - elementArea.top;\n var keys = ['Top', 'Left', 'Bottom', 'Right'];\n var styles = getComputedStyle(ele);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var tborder = styles['border' + key + 'Width'];\n var tpadding = styles['padding' + key];\n var lowerKey = key.toLowerCase();\n this.borderWidth[lowerKey] = isNaN(parseFloat(tborder)) ? 0 : parseFloat(tborder);\n this.padding[lowerKey] = isNaN(parseFloat(tpadding)) ? 0 : parseFloat(tpadding);\n }\n top = elementArea.top;\n left = elementArea.left;\n this.dragLimit.left = left + this.borderWidth.left + this.padding.left;\n this.dragLimit.top = top + this.borderWidth.top + this.padding.top;\n this.dragLimit.right = left + eleWidthBound - (this.borderWidth.right + this.padding.right);\n this.dragLimit.bottom = top + eleHeightBound - (this.borderWidth.bottom + this.padding.bottom);\n }\n };\n Draggable.prototype.getProperTargetElement = function (evt) {\n var intCoord = this.getCoordinates(evt);\n var ele;\n var prevStyle = this.helperElement.style.display || '';\n if (compareElementParent(evt.target, this.helperElement) || evt.type.indexOf('touch') !== -1) {\n this.helperElement.style.display = 'none';\n ele = document.elementFromPoint(intCoord.clientX, intCoord.clientY);\n this.helperElement.style.display = prevStyle;\n }\n else {\n ele = evt.target;\n }\n return ele;\n };\n Draggable.prototype.getMousePosition = function (evt) {\n var intCoord = this.getCoordinates(evt);\n var pageX = this.clone ? intCoord.pageX : intCoord.pageX - this.relativeXPosition;\n var pageY = this.clone ? intCoord.pageY : intCoord.pageY - this.relativeYPosition;\n return {\n left: pageX - (this.margin.left + this.cursorAt.left),\n top: pageY - (this.margin.top + this.cursorAt.top)\n };\n };\n Draggable.prototype.getCoordinates = function (evt) {\n if (evt.type.indexOf('touch') > -1) {\n return evt.changedTouches[0];\n }\n return evt;\n };\n Draggable.prototype.getHelperElement = function (evt) {\n var element;\n if (this.clone) {\n if (this.helper) {\n element = this.helper({ sender: evt, element: this.target });\n }\n else {\n element = createElement('div', { className: 'e-drag-helper e-block-touch', innerHTML: 'Draggable' });\n document.body.appendChild(element);\n }\n }\n else {\n element = this.element;\n }\n return element;\n };\n Draggable.prototype.setGlobalDroppables = function (reset, drag, helper) {\n this.droppables[this.scope] = reset ? null : {\n draggable: drag,\n helper: helper,\n draggedElement: this.element\n };\n };\n Draggable.prototype.checkTargetElement = function (evt) {\n var target = this.getProperTargetElement(evt);\n var dropIns = this.getDropInstance(target);\n if (!dropIns && target && !isNullOrUndefined(target.parentNode)) {\n var parent_1 = closest(target.parentNode, '.e-droppable') || target.parentElement;\n if (parent_1) {\n dropIns = this.getDropInstance(parent_1);\n }\n }\n return { target: target, instance: dropIns };\n };\n Draggable.prototype.getDropInstance = function (ele) {\n var name = 'getModuleName';\n var drop;\n var eleInst = ele && ele.ej2_instances;\n if (eleInst) {\n for (var _i = 0, eleInst_1 = eleInst; _i < eleInst_1.length; _i++) {\n var inst = eleInst_1[_i];\n if (inst[name]() === 'droppable') {\n drop = inst;\n break;\n }\n }\n }\n return drop;\n };\n Draggable.prototype.destroy = function () {\n this.toggleEvents(true);\n _super.prototype.destroy.call(this);\n };\n __decorate([\n Complex({}, Position)\n ], Draggable.prototype, \"cursorAt\", void 0);\n __decorate([\n Property(true)\n ], Draggable.prototype, \"clone\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"dragArea\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"dragStop\", void 0);\n __decorate([\n Property(1)\n ], Draggable.prototype, \"distance\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"handle\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"abort\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"helper\", void 0);\n __decorate([\n Property('default')\n ], Draggable.prototype, \"scope\", void 0);\n __decorate([\n Property('')\n ], Draggable.prototype, \"dragTarget\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"axis\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"queryPositionInfo\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableTailMode\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"skipDistanceCheck\", void 0);\n __decorate([\n Property(true)\n ], Draggable.prototype, \"preventDefault\", void 0);\n Draggable = Draggable_1 = __decorate([\n NotifyPropertyChanges\n ], Draggable);\n return Draggable;\n var Draggable_1;\n}(Base));\nexport { Draggable };\n","import { createElement, attributes, addClass, removeClass, detach, classList, closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar CLASSNAMES = {\n RTL: 'e-rtl',\n DISABLE: 'e-disabled',\n INPUT: 'e-input',\n INPUTGROUP: 'e-input-group',\n FLOATINPUT: 'e-float-input',\n FLOATLINE: 'e-float-line',\n FLOATTEXT: 'e-float-text',\n CLEARICON: 'e-clear-icon',\n CLEARICONHIDE: 'e-clear-icon-hide',\n LABELTOP: 'e-label-top',\n LABELBOTTOM: 'e-label-bottom',\n NOFLOATLABEL: 'e-no-float-label',\n INPUTCUSTOMTAG: 'e-input-custom-tag',\n FLOATCUSTOMTAG: 'e-float-custom-tag'\n};\n/**\n * Base for Input creation through util methods.\n */\nexport var Input;\n(function (Input) {\n var privateInputObj = {\n container: null,\n buttons: [],\n clearButton: null\n };\n /**\n * Create a wrapper to input element with multiple span elements and set the basic properties to input based components.\n * ```\n * E.g : Input.createInput({ element: element, floatLabelType : \"Auto\", properties: { placeholder: 'Search' } });\n * ```\n * @param args\n */\n function createInput(args) {\n var inputObject = { container: null, buttons: [], clearButton: null };\n if (isNullOrUndefined(args.floatLabelType) || args.floatLabelType === 'Never') {\n inputObject.container = createInputContainer(args, CLASSNAMES.INPUTGROUP, CLASSNAMES.INPUTCUSTOMTAG, 'span');\n args.element.parentNode.insertBefore(inputObject.container, args.element);\n addClass([args.element], CLASSNAMES.INPUT);\n inputObject.container.appendChild(args.element);\n }\n else {\n createFloatingInput(args, inputObject);\n }\n args.element.addEventListener('focus', function () {\n var parent = getParentNode(this);\n if (parent.classList.contains('e-input-group')) {\n parent.classList.add('e-input-focus');\n }\n });\n args.element.addEventListener('blur', function () {\n var parent = getParentNode(this);\n if (parent.classList.contains('e-input-group')) {\n parent.classList.remove('e-input-focus');\n }\n });\n if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.showClearButton) && args.properties.showClearButton) {\n setClearButton(args.properties.showClearButton, args.element, inputObject, true);\n if (inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n addClass([inputObject.container], CLASSNAMES.INPUTGROUP);\n }\n }\n if (!isNullOrUndefined(args.buttons)) {\n for (var i = 0; i < args.buttons.length; i++) {\n inputObject.buttons.push(appendSpan(args.buttons[i], inputObject.container));\n }\n }\n inputObject = setPropertyValue(args, inputObject);\n privateInputObj = inputObject;\n return inputObject;\n }\n Input.createInput = createInput;\n function _focusFn() {\n var label = getParentNode(this).getElementsByClassName('e-float-text')[0];\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n function _blurFn() {\n var parent = getParentNode(this);\n if (parent.getElementsByTagName('input')[0].value === '') {\n var label = parent.getElementsByClassName('e-float-text')[0];\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n function wireFloatingEvents(element) {\n element.addEventListener('focus', _focusFn);\n element.addEventListener('blur', _blurFn);\n }\n function unwireFloatingEvents(element) {\n element.removeEventListener('focus', _focusFn);\n element.removeEventListener('blur', _blurFn);\n }\n function createFloatingInput(args, inputObject) {\n var inputElement;\n var floatLinelement;\n var floatLabelElement;\n if (args.floatLabelType === 'Auto') {\n wireFloatingEvents(args.element);\n }\n if (isNullOrUndefined(inputObject.container)) {\n inputObject.container = createInputContainer(args, CLASSNAMES.FLOATINPUT, CLASSNAMES.FLOATCUSTOMTAG, 'div');\n args.element.parentNode.insertBefore(inputObject.container, args.element);\n }\n else {\n if (!isNullOrUndefined(args.customTag)) {\n inputObject.container.classList.add(CLASSNAMES.FLOATCUSTOMTAG);\n }\n inputObject.container.classList.add(CLASSNAMES.FLOATINPUT);\n }\n floatLinelement = createElement('span', { className: CLASSNAMES.FLOATLINE });\n floatLabelElement = createElement('label', { className: CLASSNAMES.FLOATTEXT });\n if (!isNullOrUndefined(args.element.id) && args.element.id !== '') {\n floatLabelElement.id = 'label_' + args.element.id.replace(/ /g, '_');\n attributes(args.element, { 'aria-labelledby': floatLabelElement.id });\n }\n if (!isNullOrUndefined(args.element.placeholder) && args.element.placeholder !== '') {\n floatLabelElement.innerHTML = args.element.placeholder;\n args.element.removeAttribute('placeholder');\n }\n if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.placeholder) &&\n args.properties.placeholder !== '') {\n floatLabelElement.innerHTML = args.properties.placeholder;\n }\n if (!floatLabelElement.innerHTML) {\n inputObject.container.classList.add(CLASSNAMES.NOFLOATLABEL);\n }\n inputObject.container.appendChild(args.element);\n inputObject.container.appendChild(floatLinelement);\n inputObject.container.appendChild(floatLabelElement);\n updateLabelState(args.element.value, floatLabelElement);\n if (args.floatLabelType === 'Always') {\n if (floatLabelElement.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([floatLabelElement], CLASSNAMES.LABELBOTTOM);\n }\n addClass([floatLabelElement], CLASSNAMES.LABELTOP);\n }\n if (args.floatLabelType === 'Auto') {\n args.element.addEventListener('input', function (event) {\n updateLabelState(args.element.value, floatLabelElement);\n });\n args.element.addEventListener('blur', function (event) {\n updateLabelState(args.element.value, floatLabelElement);\n });\n }\n }\n function setPropertyValue(args, inputObject) {\n if (!isNullOrUndefined(args.properties)) {\n for (var _i = 0, _a = Object.keys(args.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n setCssClass(args.properties.cssClass, [inputObject.container]);\n break;\n case 'enabled':\n setEnabled(args.properties.enabled, args.element);\n break;\n case 'enableRtl':\n setEnableRtl(args.properties.enableRtl, [inputObject.container]);\n break;\n case 'placeholder':\n setPlaceholder(args.properties.placeholder, args.element);\n break;\n case 'readonly':\n setReadonly(args.properties.readonly, args.element);\n break;\n }\n }\n }\n return inputObject;\n }\n function updateIconState(value, button) {\n if (value) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n function updateLabelState(value, label) {\n if (value) {\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n else {\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n function getParentNode(element) {\n var parentNode = element.parentNode;\n return parentNode;\n }\n /**\n * To create clear button.\n */\n function createClearButton(element, inputObject, initial) {\n var button = createElement('span', { className: CLASSNAMES.CLEARICON });\n var container = inputObject.container;\n if (!isNullOrUndefined(initial)) {\n container.appendChild(button);\n }\n else {\n var baseElement = inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT) ?\n inputObject.container.querySelector('.' + CLASSNAMES.FLOATTEXT) : element;\n baseElement.insertAdjacentElement('afterend', button);\n }\n if (!isNullOrUndefined(container) &&\n container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n addClass([container], CLASSNAMES.INPUTGROUP);\n }\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n wireClearBtnEvents(element, button, container);\n return button;\n }\n function wireClearBtnEvents(element, button, container) {\n button.addEventListener('click', function (event) {\n if (!(element.classList.contains(CLASSNAMES.DISABLE) || element.readOnly)) {\n event.preventDefault();\n if (element !== document.activeElement) {\n element.focus();\n }\n element.value = '';\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n });\n element.addEventListener('input', function (event) {\n updateIconState(element.value, button);\n });\n element.addEventListener('focus', function (event) {\n updateIconState(element.value, button);\n });\n element.addEventListener('blur', function (event) {\n setTimeout(function () { addClass([button], CLASSNAMES.CLEARICONHIDE); }, 200);\n });\n }\n function validateLabel(element, floatLabelType) {\n var parent = getParentNode(element);\n if (parent.classList.contains(CLASSNAMES.FLOATINPUT) && floatLabelType === 'Auto') {\n var label = getParentNode(element).getElementsByClassName('e-float-text')[0];\n updateLabelState(element.value, label);\n }\n }\n /**\n * To create input box contianer.\n */\n function createInputContainer(args, className, tagClass, tag) {\n var container;\n if (!isNullOrUndefined(args.customTag)) {\n container = createElement(args.customTag, { className: className });\n container.classList.add(tagClass);\n }\n else {\n container = createElement(tag, { className: className });\n }\n container.classList.add('e-control-wrapper');\n return container;\n }\n /**\n * Sets the value to the input element.\n * ```\n * E.g : Input.setValue('content', element, \"Auto\", true );\n * ```\n * @param value - Specify the value of the input element.\n * @param element - The element on which the specified value is updated.\n * @param floatLabelType - Specify the float label type of the input element.\n * @param clearButton - Boolean value to specify whether the clear icon is enabled / disabled on the input.\n */\n function setValue(value, element, floatLabelType, clearButton) {\n element.value = value;\n if ((!isNullOrUndefined(floatLabelType)) && floatLabelType === 'Auto') {\n validateLabel(element, floatLabelType);\n }\n if (!isNullOrUndefined(clearButton) && clearButton) {\n var parentElement = getParentNode(element);\n var button = parentElement.getElementsByClassName(CLASSNAMES.CLEARICON)[0];\n if (element.value && parentElement.classList.contains('e-input-focus')) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n }\n Input.setValue = setValue;\n /**\n * Sets the single or multiple cssClass to wrapper of input element.\n * ```\n * E.g : Input.setCssClass('e-custom-class', [element]);\n * ```\n * @param cssClass - Css class names which are needed to add.\n * @param elements - The elements which are needed to add / remove classes.\n * @param oldClass - Css class names which are needed to remove. If old classes are need to remove, can give this optional parameter.\n */\n function setCssClass(cssClass, elements, oldClass) {\n if (!isNullOrUndefined(oldClass) && oldClass !== '') {\n removeClass(elements, oldClass);\n }\n if (!isNullOrUndefined(cssClass) && cssClass !== '') {\n addClass(elements, cssClass);\n }\n }\n Input.setCssClass = setCssClass;\n /**\n * Set the placeholder attribute to the input element.\n * ```\n * E.g : Input.setPlaceholder('Search here', element);\n * ```\n * @param placeholder - Placeholder value which is need to add.\n * @param element - The element on which the placeholder is need to add.\n */\n function setPlaceholder(placeholder, element) {\n var parentElement;\n parentElement = getParentNode(element);\n if (parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = placeholder;\n parentElement.classList.remove(CLASSNAMES.NOFLOATLABEL);\n }\n else {\n parentElement.classList.add(CLASSNAMES.NOFLOATLABEL);\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n }\n else {\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n attributes(element, { 'placeholder': placeholder, 'aria-placeholder': placeholder });\n }\n else {\n element.removeAttribute('placeholder');\n element.removeAttribute('aria-placeholder');\n }\n }\n }\n Input.setPlaceholder = setPlaceholder;\n /**\n * Set the read only attribute to the input element\n * ```\n * E.g : Input.setReadonly(true, element);\n * ```\n * @param isReadonly\n * - Boolean value to specify whether to set read only. Setting \"True\" value enables read only.\n * @param element\n * - The element which is need to enable read only.\n */\n function setReadonly(isReadonly, element, floatLabelType) {\n if (isReadonly) {\n attributes(element, { readonly: '' });\n }\n else {\n element.removeAttribute('readonly');\n }\n if (!isNullOrUndefined(floatLabelType)) {\n validateLabel(element, floatLabelType);\n }\n }\n Input.setReadonly = setReadonly;\n /**\n * Displays the element direction from right to left when its enabled.\n * ```\n * E.g : Input.setEnableRtl(true, [inputObj.container]);\n * ```\n * @param isRtl\n * - Boolean value to specify whether to set RTL. Setting \"True\" value enables the RTL mode.\n * @param elements\n * - The elements that are needed to enable/disable RTL.\n */\n function setEnableRtl(isRtl, elements) {\n if (isRtl) {\n addClass(elements, CLASSNAMES.RTL);\n }\n else {\n removeClass(elements, CLASSNAMES.RTL);\n }\n }\n Input.setEnableRtl = setEnableRtl;\n /**\n * Enables or disables the given input element.\n * ```\n * E.g : Input.setEnabled(false, element);\n * ```\n * @param isEnable\n * - Boolean value to specify whether to enable or disable.\n * @param element\n * - Element to be enabled or disabled.\n */\n function setEnabled(isEnable, element, floatLabelType) {\n var disabledAttrs = { 'disabled': 'disabled', 'aria-disabled': 'true' };\n if (isEnable) {\n element.classList.remove(CLASSNAMES.DISABLE);\n removeAttributes(disabledAttrs, element);\n }\n else {\n element.classList.add(CLASSNAMES.DISABLE);\n addAttributes(disabledAttrs, element);\n }\n if (!isNullOrUndefined(floatLabelType)) {\n validateLabel(element, floatLabelType);\n }\n }\n Input.setEnabled = setEnabled;\n function setClearButton(isClear, element, inputObject, initial) {\n if (isClear) {\n inputObject.clearButton = createClearButton(element, inputObject, initial);\n }\n else {\n inputObject.clearButton.remove();\n inputObject.clearButton = null;\n }\n }\n Input.setClearButton = setClearButton;\n /**\n * Removing the multiple attributes from the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.removeAttributes({ 'disabled': 'disabled', 'aria-disabled': 'true' }, element);\n * ```\n * @param attrs\n * - Array of attributes which are need to removed from the element.\n * @param element\n * - Element on which the attributes are needed to be removed.\n */\n function removeAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = void 0;\n parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n else {\n element.removeAttribute(key);\n }\n }\n }\n Input.removeAttributes = removeAttributes;\n /**\n * Adding the multiple attributes to the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.addAttributes({ 'id': 'inputpopup' }, element);\n * ```\n * @param attrs\n * - Array of attributes which is added to element.\n * @param element\n * - Element on which the attributes are needed to be added.\n */\n function addAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = void 0;\n parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = attrs[key];\n }\n else {\n element.setAttribute(key, attrs[key]);\n }\n }\n }\n Input.addAttributes = addAttributes;\n function removeFloating(input) {\n var container = input.container;\n if (!isNullOrUndefined(container) && container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n var inputEle = container.querySelector('input');\n var placeholder = container.querySelector('.' + CLASSNAMES.FLOATTEXT).textContent;\n var clearButton = container.querySelector('.e-clear-icon') !== null;\n detach(container.querySelector('.' + CLASSNAMES.FLOATLINE));\n detach(container.querySelector('.' + CLASSNAMES.FLOATTEXT));\n classList(container, [CLASSNAMES.INPUTGROUP], [CLASSNAMES.FLOATINPUT]);\n unwireFloatingEvents(inputEle);\n attributes(inputEle, { 'placeholder': placeholder });\n inputEle.classList.add(CLASSNAMES.INPUT);\n if (!clearButton) {\n inputEle.removeAttribute('required');\n }\n }\n }\n Input.removeFloating = removeFloating;\n function addFloating(input, type, placeholder) {\n var container = closest(input, '.' + CLASSNAMES.INPUTGROUP);\n if (type !== 'Never') {\n var customTag = container.tagName;\n customTag = customTag !== 'DIV' && customTag !== 'SPAN' ? customTag : null;\n var args = { element: input, floatLabelType: type, customTag: customTag, properties: { placeholder: placeholder } };\n var iconEle = container.querySelector('.e-clear-icon');\n var inputObj = { container: container };\n input.classList.remove(CLASSNAMES.INPUT);\n createFloatingInput(args, inputObj);\n if (isNullOrUndefined(iconEle)) {\n iconEle = container.querySelector('.e-input-group-icon');\n }\n if (isNullOrUndefined(iconEle)) {\n container.classList.remove(CLASSNAMES.INPUTGROUP);\n }\n else {\n var floatLine = container.querySelector('.' + CLASSNAMES.FLOATLINE);\n var floatText = container.querySelector('.' + CLASSNAMES.FLOATTEXT);\n container.insertBefore(input, iconEle);\n container.insertBefore(floatLine, iconEle);\n container.insertBefore(floatText, iconEle);\n }\n }\n }\n Input.addFloating = addFloating;\n /**\n * Creates a new span element with the given icons added and append it in container element.\n * ```\n * E.g : Input.appendSpan('e-icon-spin', inputObj.container);\n * ```\n * @param iconClass - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param container - The container on which created span element is going to append.\n */\n function appendSpan(iconClass, container) {\n var button = createElement('span', { className: iconClass });\n container.appendChild(button);\n if (!container.classList.contains(CLASSNAMES.INPUTGROUP)) {\n container.classList.add(CLASSNAMES.INPUTGROUP);\n }\n button.addEventListener('mousedown', function () {\n if (!container.classList.contains('e-disabled') && !container.querySelector('input').readOnly) {\n this.classList.add('e-input-btn-ripple');\n }\n });\n button.addEventListener('mouseup', function () {\n var ele = this;\n setTimeout(function () { ele.classList.remove('e-input-btn-ripple'); }, 500);\n });\n return button;\n }\n Input.appendSpan = appendSpan;\n})(Input || (Input = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Base } from './base';\nimport { Browser } from './browser';\nimport { isVisible, matches } from './dom';\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { EventHandler } from './event-handler';\nimport { compareElementParent } from './util';\n/**\n * Droppable Module provides support to enable droppable functionality in Dom Elements.\n * ```html\n *
Droppable
\n * \n * ```\n */\nvar Droppable = /** @class */ (function (_super) {\n __extends(Droppable, _super);\n function Droppable(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.mouseOver = false;\n _this.dragData = {};\n _this.dragStopCalled = false;\n _this.bind();\n return _this;\n }\n Droppable.prototype.bind = function () {\n this.wireEvents();\n };\n Droppable.prototype.wireEvents = function () {\n EventHandler.add(this.element, Browser.touchEndEvent, this.intDrop, this);\n };\n // triggers when property changed\n Droppable.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Droppable.prototype.getModuleName = function () {\n return 'droppable';\n };\n Droppable.prototype.intOver = function (event, element) {\n if (!this.mouseOver) {\n this.trigger('over', { event: event, target: element });\n this.mouseOver = true;\n }\n };\n Droppable.prototype.intOut = function (event, element) {\n if (this.mouseOver) {\n this.trigger('out', { evt: event, target: element });\n this.mouseOver = false;\n }\n };\n Droppable.prototype.intDrop = function (evt, element) {\n if (!this.dragStopCalled) {\n return;\n }\n else {\n this.dragStopCalled = false;\n }\n var accept = true;\n var drag = this.dragData[this.scope];\n var isDrag = drag ? (drag.helper && isVisible(drag.helper)) : false;\n var area;\n if (isDrag) {\n area = this.isDropArea(evt, drag.helper, element);\n if (this.accept) {\n accept = matches(drag.helper, this.accept);\n }\n }\n if (isDrag && this.drop && area.canDrop && accept) {\n this.trigger('drop', { event: evt, target: area.target, droppedElement: drag.helper, dragData: drag });\n }\n };\n Droppable.prototype.isDropArea = function (evt, helper, element) {\n var area = { canDrop: true, target: element || evt.target };\n var isTouch = evt.type === 'touchend';\n if (isTouch || area.target === helper) {\n helper.style.display = 'none';\n var coord = isTouch ? (evt.changedTouches[0]) : evt;\n var ele = document.elementFromPoint(coord.clientX, coord.clientY);\n area.canDrop = false;\n area.canDrop = compareElementParent(ele, this.element);\n if (area.canDrop) {\n area.target = ele;\n }\n helper.style.display = '';\n }\n return area;\n };\n Droppable.prototype.destroy = function () {\n EventHandler.remove(this.element, Browser.touchEndEvent, this.intDrop);\n _super.prototype.destroy.call(this);\n };\n __decorate([\n Property()\n ], Droppable.prototype, \"accept\", void 0);\n __decorate([\n Property('default')\n ], Droppable.prototype, \"scope\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"drop\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"over\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"out\", void 0);\n Droppable = __decorate([\n NotifyPropertyChanges\n ], Droppable);\n return Droppable;\n}(Base));\nexport { Droppable };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { Base } from './base';\nvar keyCode = {\n 'backspace': 8,\n 'tab': 9,\n 'enter': 13,\n 'shift': 16,\n 'control': 17,\n 'alt': 18,\n 'pause': 19,\n 'capslock': 20,\n 'space': 32,\n 'escape': 27,\n 'pageup': 33,\n 'pagedown': 34,\n 'end': 35,\n 'home': 36,\n 'leftarrow': 37,\n 'uparrow': 38,\n 'rightarrow': 39,\n 'downarrow': 40,\n 'insert': 45,\n 'delete': 46,\n 'f1': 112,\n 'f2': 113,\n 'f3': 114,\n 'f4': 115,\n 'f5': 116,\n 'f6': 117,\n 'f7': 118,\n 'f8': 119,\n 'f9': 120,\n 'f10': 121,\n 'f11': 122,\n 'f12': 123,\n 'semicolon': 186,\n 'plus': 187,\n 'comma': 188,\n 'minus': 189,\n 'dot': 190,\n 'forwardslash': 191,\n 'graveaccent': 192,\n 'openbracket': 219,\n 'backslash': 220,\n 'closebracket': 221,\n 'singlequote': 222\n};\n/**\n * KeyboardEvents class enables you to bind key action desired key combinations for ex., Ctrl+A, Delete, Alt+Space etc.\n * ```html\n *
;\n * \n * ```\n */\nvar KeyboardEvents = /** @class */ (function (_super) {\n __extends(KeyboardEvents, _super);\n /**\n * Initializes the KeyboardEvents\n * @param {HTMLElement} element\n * @param {KeyboardEventsModel} options\n */\n function KeyboardEvents(element, options) {\n var _this = _super.call(this, options, element) || this;\n /**\n * To handle a key press event returns null\n */\n _this.keyPressHandler = function (e) {\n var isAltKey = e.altKey;\n var isCtrlKey = e.ctrlKey;\n var isShiftKey = e.shiftKey;\n var curkeyCode = e.which;\n var keys = Object.keys(_this.keyConfigs);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n var configCollection = _this.keyConfigs[key].split(',');\n for (var _a = 0, configCollection_1 = configCollection; _a < configCollection_1.length; _a++) {\n var rconfig = configCollection_1[_a];\n var rKeyObj = KeyboardEvents_1.getKeyConfigData(rconfig.trim());\n if (isAltKey === rKeyObj.altKey && isCtrlKey === rKeyObj.ctrlKey &&\n isShiftKey === rKeyObj.shiftKey && curkeyCode === rKeyObj.keyCode) {\n e.action = key;\n if (_this.keyAction) {\n _this.keyAction(e);\n }\n }\n }\n }\n };\n _this.bind();\n return _this;\n }\n KeyboardEvents_1 = KeyboardEvents;\n /**\n * Unwire bound events and destroy the instance.\n * @return {void}\n */\n KeyboardEvents.prototype.destroy = function () {\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * Function can be used to specify certain action if a property is changed\n * @param newProp\n * @param oldProp\n * @returns {void}\n * @private\n */\n KeyboardEvents.prototype.onPropertyChanged = function (newProp, oldProp) {\n // No code are needed\n };\n ;\n KeyboardEvents.prototype.bind = function () {\n this.wireEvents();\n };\n /**\n * To get the module name, returns 'keyboard'.\n * @private\n */\n KeyboardEvents.prototype.getModuleName = function () {\n return 'keyboard';\n };\n /**\n * Wiring event handlers to events\n */\n KeyboardEvents.prototype.wireEvents = function () {\n this.element.addEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * Unwiring event handlers to events\n */\n KeyboardEvents.prototype.unwireEvents = function () {\n this.element.removeEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * To get the key configuration data\n * @param {string} config - configuration data\n * returns {KeyData}\n */\n KeyboardEvents.getKeyConfigData = function (config) {\n if (config in this.configCache) {\n return this.configCache[config];\n }\n var keys = config.toLowerCase().split('+');\n var keyData = {\n altKey: (keys.indexOf('alt') !== -1 ? true : false),\n ctrlKey: (keys.indexOf('ctrl') !== -1 ? true : false),\n shiftKey: (keys.indexOf('shift') !== -1 ? true : false),\n keyCode: null\n };\n if (keys[keys.length - 1].length > 1 && !!Number(keys[keys.length - 1])) {\n keyData.keyCode = Number(keys[keys.length - 1]);\n }\n else {\n keyData.keyCode = KeyboardEvents_1.getKeyCode(keys[keys.length - 1]);\n }\n KeyboardEvents_1.configCache[config] = keyData;\n return keyData;\n };\n // Return the keycode value as string \n KeyboardEvents.getKeyCode = function (keyVal) {\n return keyCode[keyVal] || keyVal.toUpperCase().charCodeAt(0);\n };\n KeyboardEvents.configCache = {};\n __decorate([\n Property({})\n ], KeyboardEvents.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property('keyup')\n ], KeyboardEvents.prototype, \"eventName\", void 0);\n __decorate([\n Event()\n ], KeyboardEvents.prototype, \"keyAction\", void 0);\n KeyboardEvents = KeyboardEvents_1 = __decorate([\n NotifyPropertyChanges\n ], KeyboardEvents);\n return KeyboardEvents;\n var KeyboardEvents_1;\n}(Base));\nexport { KeyboardEvents };\n","import { extend } from './util';\nimport { defaultCulture } from './internationalization';\n/**\n * L10n modules provides localized text for different culture.\n * ```typescript\n * import {setCulture} from '@syncfusion/ts-base-library';\n * //load global locale object common for all components.\n * L10n.load({\n * 'fr-BE': {\n * 'button': {\n * 'check': 'vérifié'\n * }\n * }\n * });\n * //set globale default locale culture.\n * setCulture('fr-BE');\n * let instance: L10n = new L10n('button', {\n * check: 'checked'\n * });\n * //Get locale text for current property.\n * instance.getConstant('check');\n * //Change locale culture in a component.\n * instance.setLocale('en-US');\n * ```\n */\nvar L10n = /** @class */ (function () {\n /**\n * Constructor\n */\n function L10n(controlName, localeStrings, locale) {\n this.controlName = controlName;\n this.localeStrings = localeStrings;\n this.setLocale(locale || defaultCulture);\n }\n /**\n * Sets the locale text\n * @param {string} locale\n * @returns {void}\n */\n L10n.prototype.setLocale = function (locale) {\n var intLocale = this.intGetControlConstant(L10n.locale, locale);\n this.currentLocale = intLocale || this.localeStrings;\n };\n /**\n * Sets the global locale for all components.\n * @param {Object} localeObject - specifies the localeObject to be set as global locale.\n */\n L10n.load = function (localeObject) {\n this.locale = extend(this.locale, localeObject, {}, true);\n };\n /**\n * Returns current locale text for the property based on the culture name and control name.\n * @param {string} propertyName - specifies the property for which localize text to be returned.\n * @return string\n */\n L10n.prototype.getConstant = function (prop) {\n /* tslint:disable no-any */\n return this.currentLocale[prop] || this.localeStrings[prop] || '';\n };\n /**\n * Returns the control constant object for current object and the locale specified.\n * @param {Object} curObject\n * @param {string} locale\n * @returns {Object}\n */\n L10n.prototype.intGetControlConstant = function (curObject, locale) {\n if (curObject[locale]) {\n return curObject[locale][this.controlName];\n }\n return null;\n };\n L10n.locale = {};\n return L10n;\n}());\nexport { L10n };\n","/**\n * To import utils\n */\nimport { isNullOrUndefined, } from './util';\nvar SvgRenderer = /** @class */ (function () {\n /* End-Properties */\n function SvgRenderer(rootID) {\n //Internal Variables \n this.svgLink = 'http://www.w3.org/2000/svg';\n this.rootId = rootID;\n }\n // method to get the attributes value\n /* tslint:disable */\n SvgRenderer.prototype.getOptionValue = function (options, key) {\n return options[key];\n }; /* tslint:enable */\n /**\n * To create a Html5 SVG element\n * @param {SVGAttributes} options - Options to create SVG\n * @return {Element}\n */\n SvgRenderer.prototype.createSvg = function (options) {\n if (isNullOrUndefined(options.id)) {\n options.id = this.rootId + '_svg';\n }\n this.svgObj = document.getElementById(options.id);\n if (isNullOrUndefined(document.getElementById(options.id))) {\n this.svgObj = document.createElementNS(this.svgLink, 'svg');\n }\n this.svgObj = this.setElementAttributes(options, this.svgObj);\n this.setSVGSize(options.width, options.height);\n return this.svgObj;\n };\n // method to set the height and width for the SVG element\n SvgRenderer.prototype.setSVGSize = function (width, height) {\n var element = document.getElementById(this.rootId);\n var size = !isNullOrUndefined(element) ? element.getBoundingClientRect() : null;\n if (isNullOrUndefined(this.width) || this.width <= 0) {\n this.svgObj.setAttribute('width', width ? width.toString() : size.width.toString());\n }\n else {\n this.svgObj.setAttribute('width', this.width.toString());\n }\n if (isNullOrUndefined(this.height) || this.height <= 0) {\n this.svgObj.setAttribute('height', height ? height.toString() : '450');\n }\n else {\n this.svgObj.setAttribute('height', this.height.toString());\n }\n };\n /**\n * To draw a path\n * @param {PathAttributes} options - Options to draw a path in SVG\n * @return {Element}\n */\n SvgRenderer.prototype.drawPath = function (options) {\n var path = document.getElementById(options.id);\n if (path === null) {\n path = document.createElementNS(this.svgLink, 'path');\n }\n path = this.setElementAttributes(options, path);\n return path;\n };\n /**\n * To draw a line\n * @param {LineAttributes} options - Options to draw a line in SVG\n * @return {Element}\n */\n SvgRenderer.prototype.drawLine = function (options) {\n var line = document.getElementById(options.id);\n if (line === null) {\n line = document.createElementNS(this.svgLink, 'line');\n }\n line = this.setElementAttributes(options, line);\n return line;\n };\n /**\n * To draw a rectangle\n * @param {BaseAttibutes} options - Required options to draw a rectangle in SVG\n * @return {Element}\n */\n SvgRenderer.prototype.drawRectangle = function (options) {\n var rectangle = document.getElementById(options.id);\n if (rectangle === null) {\n rectangle = document.createElementNS(this.svgLink, 'rect');\n }\n rectangle = this.setElementAttributes(options, rectangle);\n return rectangle;\n };\n /**\n * To draw a circle\n * @param {CircleAttributes} options - Required options to draw a circle in SVG\n * @return {Element}\n */\n SvgRenderer.prototype.drawCircle = function (options) {\n var circle = document.getElementById(options.id);\n if (circle === null) {\n circle = document.createElementNS(this.svgLink, 'circle');\n }\n circle = this.setElementAttributes(options, circle);\n return circle;\n };\n /**\n * To draw a polyline\n * @param {PolylineAttributes} options - Options required to draw a polyline\n * @return {Element}\n */\n SvgRenderer.prototype.drawPolyline = function (options) {\n var polyline = document.getElementById(options.id);\n if (polyline === null) {\n polyline = document.createElementNS(this.svgLink, 'polyline');\n }\n polyline = this.setElementAttributes(options, polyline);\n return polyline;\n };\n /**\n * To draw an ellipse\n * @param {EllipseAttributes} options - Options required to draw an ellipse\n * @return {Element}\n */\n SvgRenderer.prototype.drawEllipse = function (options) {\n var ellipse = document.getElementById(options.id);\n if (ellipse === null) {\n ellipse = document.createElementNS(this.svgLink, 'ellipse');\n }\n ellipse = this.setElementAttributes(options, ellipse);\n return ellipse;\n };\n /**\n * To draw a polygon\n * @param {PolylineAttributes} options - Options needed to draw a polygon in SVG\n * @return {Element}\n */\n SvgRenderer.prototype.drawPolygon = function (options) {\n var polygon = document.getElementById(options.id);\n if (polygon === null) {\n polygon = document.createElementNS(this.svgLink, 'polygon');\n }\n polygon = this.setElementAttributes(options, polygon);\n return polygon;\n };\n /**\n * To draw an image\n * @param {ImageAttributes} options - Required options to draw an image in SVG\n * @return {Element}\n */\n SvgRenderer.prototype.drawImage = function (options) {\n var img = document.createElementNS(this.svgLink, 'image');\n img.setAttributeNS(null, 'height', options.height.toString());\n img.setAttributeNS(null, 'width', options.width.toString());\n img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', options.href);\n img.setAttributeNS(null, 'x', options.x.toString());\n img.setAttributeNS(null, 'y', options.y.toString());\n img.setAttributeNS(null, 'id', options.id);\n img.setAttributeNS(null, 'visibility', options.visibility);\n if (!isNullOrUndefined(this.getOptionValue(options, 'clip-path'))) {\n img.setAttributeNS(null, 'clip-path', this.getOptionValue(options, 'clip-path'));\n }\n if (!isNullOrUndefined(options.preserveAspectRatio)) {\n img.setAttributeNS(null, 'preserveAspectRatio', options.preserveAspectRatio);\n }\n return img;\n };\n /**\n * To draw a text\n * @param {TextAttributes} options - Options needed to draw a text in SVG\n * @return {Element}\n */\n SvgRenderer.prototype.createText = function (options, label) {\n var text = document.createElementNS(this.svgLink, 'text');\n text = this.setElementAttributes(options, text);\n if (!isNullOrUndefined(label)) {\n text.textContent = label;\n }\n return text;\n };\n /**\n * To create a tSpan\n * @param {TextAttributes} options - Options to create tSpan\n * @param {string} label - The text content which is to be rendered in the tSpan\n * @return {Element}\n */\n SvgRenderer.prototype.createTSpan = function (options, label) {\n var tSpan = document.createElementNS(this.svgLink, 'tspan');\n tSpan = this.setElementAttributes(options, tSpan);\n if (!isNullOrUndefined(label)) {\n tSpan.textContent = label;\n }\n return tSpan;\n };\n /**\n * To create a title\n * @param {string} text - The text content which is to be rendered in the title\n * @return {Element}\n */\n SvgRenderer.prototype.createTitle = function (text) {\n var title = document.createElementNS(this.svgLink, 'title');\n title.textContent = text;\n return title;\n };\n /**\n * To create defs element in SVG\n * @return {Element}\n */\n SvgRenderer.prototype.createDefs = function () {\n var defs = document.createElementNS(this.svgLink, 'defs');\n return defs;\n };\n /**\n * To create clip path in SVG\n * @param {BaseAttibutes} options - Options needed to create clip path\n * @return {Element}\n */\n SvgRenderer.prototype.createClipPath = function (options) {\n var clipPath = document.createElementNS(this.svgLink, 'clipPath');\n clipPath = this.setElementAttributes(options, clipPath);\n return clipPath;\n };\n /**\n * To create foreign object in SVG\n * @param {BaseAttibutes} options - Options needed to create foreign object\n * @return {Element}\n */\n SvgRenderer.prototype.createForeignObject = function (options) {\n var foreignObject = document.createElementNS(this.svgLink, 'foreignObject');\n foreignObject = this.setElementAttributes(options, foreignObject);\n return foreignObject;\n };\n /**\n * To create group element in SVG\n * @param {BaseAttibutes} options - Options needed to create group\n * @return {Element}\n */\n SvgRenderer.prototype.createGroup = function (options) {\n var group = document.createElementNS(this.svgLink, 'g');\n group = this.setElementAttributes(options, group);\n return group;\n };\n /**\n * To create pattern in SVG\n * @param {PatternAttributes} options - Required options to create pattern in SVG\n * @param {string} type - Specifies the name of the pattern\n * @return {Element}\n */\n SvgRenderer.prototype.createPattern = function (options, element) {\n var pattern = document.createElementNS(this.svgLink, element);\n pattern = this.setElementAttributes(options, pattern);\n return pattern;\n };\n /**\n * To create radial gradient in SVG\n * @param {string[]} colors - Specifies the colors required to create radial gradient\n * @param {string[]} colorStop - Specifies the colorstop required to create radial gradient\n * @param {string} name - Specifies the name of the gradient\n * @param {RadialGradient} options - value for radial gradient\n * @return {string}\n */\n SvgRenderer.prototype.createRadialGradient = function (colors, name, options) {\n var colorName;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n var newOptions = {\n 'id': this.rootId + '_' + name + 'radialGradient',\n 'cx': options.cx + '%',\n 'cy': options.cy + '%',\n 'r': options.r + '%',\n 'fx': options.fx + '%',\n 'fy': options.fy + '%'\n };\n this.drawGradient('radialGradient', newOptions, colors);\n colorName = 'url(#' + this.rootId + '_' + name + 'radialGradient)';\n }\n else {\n colorName = colors[0].color.toString();\n }\n return colorName;\n };\n /**\n * To create linear gradient in SVG\n * @param {string[]} colors - Array of string specifies the values for color\n * @param {string[]} colors - Array of string specifies the values for colorStop\n * @param {string} name - Specifies the name of the gradient\n * @param {LinearGradient} options - Specifies the options for gradient\n * @return {string}\n */\n SvgRenderer.prototype.createLinearGradient = function (colors, name, options) {\n var colorName;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n var newOptions = {\n 'id': this.rootId + '_' + name + 'linearGradient',\n 'x1': options.x1 + '%',\n 'y1': options.y1 + '%',\n 'x2': options.x2 + '%',\n 'y2': options.y2 + '%'\n };\n this.drawGradient('linearGradient', newOptions, colors);\n colorName = 'url(#' + this.rootId + '_' + name + 'linearGradient)';\n }\n else {\n colorName = colors[0].color.toString();\n }\n return colorName;\n };\n /**\n * To render the gradient element in SVG\n * @param {string} gradientType - Specifies the type of the gradient\n * @param {RadialGradient | LinearGradient} options - Options required to render a gradient\n * @param {string[]} colors - Array of string specifies the values for color\n * @param {string[]} colorStop - Array of string specifies the values for colorStop\n * @return {Element}\n */\n SvgRenderer.prototype.drawGradient = function (gradientType, options, colors) {\n var defs = this.createDefs();\n var gradient = document.createElementNS(this.svgLink, gradientType);\n gradient = this.setElementAttributes(options, gradient);\n for (var i = 0; i < colors.length; i++) {\n var stop_1 = document.createElementNS(this.svgLink, 'stop');\n stop_1.setAttribute('offset', colors[i].colorStop);\n stop_1.setAttribute('stop-color', colors[i].color);\n stop_1.setAttribute('stop-opacity', '1');\n gradient.appendChild(stop_1);\n }\n defs.appendChild(gradient);\n return defs;\n };\n /**\n * To render a clip path\n * @param {BaseAttibutes} options - Options required to render a clip path\n * @return {Element}\n */\n SvgRenderer.prototype.drawClipPath = function (options) {\n var defs = this.createDefs();\n var clipPath = this.createClipPath({ 'id': options.id });\n var rect = this.drawRectangle(options);\n clipPath.appendChild(rect);\n defs.appendChild(clipPath);\n return defs;\n };\n /**\n * To create circular clip path in SVG\n * @param {CircleAttributes} options - Options required to create circular clip path\n * @return {Element}\n */\n SvgRenderer.prototype.drawCircularClipPath = function (options) {\n var defs = this.createDefs();\n var clipPath = this.createClipPath({ 'id': options.id });\n var circle = this.drawCircle(options);\n clipPath.appendChild(circle);\n defs.appendChild(clipPath);\n return defs;\n };\n /**\n * To set the attributes to the element\n * @param {SVGCanvasAttributes} options - Attributes to set for the element\n * @param {Element} element - The element to which the attributes need to be set\n * @return {Element}\n */\n SvgRenderer.prototype.setElementAttributes = function (options, element) {\n var keys = Object.keys(options);\n for (var i = 0; i < keys.length; i++) {\n element.setAttribute(keys[i], options[keys[i]]);\n }\n return element;\n };\n return SvgRenderer;\n}());\nexport { SvgRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { extend } from './util';\nimport { Property, Complex, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { Browser } from './browser';\nimport { Base } from './base';\nimport { ChildProperty } from './child-property';\nimport { EventHandler } from './event-handler';\n/**\n * SwipeSettings is a framework module that provides support to handle swipe event like swipe up, swipe right, etc..,\n * @private\n */\nvar SwipeSettings = /** @class */ (function (_super) {\n __extends(SwipeSettings, _super);\n function SwipeSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(50)\n ], SwipeSettings.prototype, \"swipeThresholdDistance\", void 0);\n return SwipeSettings;\n}(ChildProperty));\nexport { SwipeSettings };\nvar swipeRegex = /(Up|Down)/;\n/**\n * Touch class provides support to handle the touch event like tap, double tap, tap hold, etc..,\n * ```typescript\n * let node: HTMLElement;\n * let touchObj: Touch = new Touch({\n * element: node,\n * tap: function (e) {\n * // tap handler function code\n * }\n * tapHold: function (e) {\n * // tap hold handler function code\n * }\n * scroll: function (e) {\n * // scroll handler function code\n * }\n * swipe: function (e) {\n * // swipe handler function code\n * }\n * });\n * ```\n */\nvar Touch = /** @class */ (function (_super) {\n __extends(Touch, _super);\n /* End-Properties */\n function Touch(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.touchAction = true;\n _this.tapCount = 0;\n _this.startEvent = function (evt) {\n if (_this.touchAction === true) {\n var point = (evt.changedTouches ? evt.changedTouches[0] : evt);\n if (evt.changedTouches !== undefined) {\n _this.touchAction = false;\n }\n _this.isTouchMoved = false;\n _this.movedDirection = '';\n _this.startPoint = _this.lastMovedPoint = { clientX: point.clientX, clientY: point.clientY };\n _this.startEventData = point;\n _this.hScrollLocked = _this.vScrollLocked = false;\n _this.tStampStart = Date.now();\n _this.timeOutTapHold = setTimeout(function () { _this.tapHoldEvent(evt); }, _this.tapHoldThreshold);\n EventHandler.add(_this.element, Browser.touchMoveEvent, _this.moveEvent, _this);\n EventHandler.add(_this.element, Browser.touchEndEvent, _this.endEvent, _this);\n }\n };\n _this.moveEvent = function (evt) {\n var point = evt.changedTouches ? evt.changedTouches[0] : evt;\n _this.movedPoint = point;\n _this.isTouchMoved = !(point.clientX === _this.startPoint.clientX && point.clientY === _this.startPoint.clientY);\n var eScrollArgs = {};\n if (_this.isTouchMoved) {\n clearTimeout(_this.timeOutTapHold);\n _this.calcScrollPoints(evt);\n var scrollArg = {\n startEvents: _this.startEventData,\n originalEvent: evt, startX: _this.startPoint.clientX,\n startY: _this.startPoint.clientY, distanceX: _this.distanceX,\n distanceY: _this.distanceY, scrollDirection: _this.scrollDirection,\n velocity: _this.getVelocity(point)\n };\n eScrollArgs = extend(eScrollArgs, {}, scrollArg);\n _this.trigger('scroll', eScrollArgs);\n _this.lastMovedPoint = { clientX: point.clientX, clientY: point.clientY };\n }\n };\n _this.endEvent = function (evt) {\n clearTimeout(_this.timeOutTapHold);\n clearTimeout(_this.timeOutTap);\n var point = evt;\n if (evt.changedTouches) {\n point = evt.changedTouches[0];\n }\n var diffX = point.clientX - _this.startPoint.clientX;\n var diffY = point.clientY - _this.startPoint.clientY;\n diffX = Math.floor(diffX < 0 ? -1 * diffX : diffX);\n diffY = Math.floor(diffY < 0 ? -1 * diffY : diffX);\n _this.isTouchMoved = diffX > 1 || diffY > 1;\n _this.endPoint = point;\n var eSwipeArgs;\n var tDistance = _this.swipeSettings.swipeThresholdDistance;\n _this.calcPoints(evt);\n var swipeArgs = {\n originalEvent: evt,\n startEvents: _this.startEventData,\n startX: _this.startPoint.clientX,\n startY: _this.startPoint.clientY,\n distanceX: _this.distanceX, distanceY: _this.distanceY, swipeDirection: _this.movedDirection,\n velocity: _this.getVelocity(point)\n };\n if (!_this.isTouchMoved) {\n if (typeof _this.tap === 'function') {\n _this.trigger('tap', { originalEvent: evt, tapCount: ++_this.tapCount });\n _this.timeOutTap = setTimeout(function () {\n _this.tapCount = 0;\n }, _this.tapThreshold);\n }\n }\n else {\n eSwipeArgs = extend(eSwipeArgs, _this.defaultArgs, swipeArgs);\n var canTrigger = false;\n var ele = _this.element;\n var scrollBool = _this.isScrollable(ele);\n var moved = swipeRegex.test(_this.movedDirection);\n if ((tDistance < _this.distanceX && !moved) || (tDistance < _this.distanceY && moved)) {\n if (!scrollBool) {\n canTrigger = true;\n }\n else {\n canTrigger = _this.checkSwipe(ele, moved);\n }\n }\n if (canTrigger) {\n _this.trigger('swipe', eSwipeArgs);\n }\n }\n _this.modeClear = setTimeout(function () {\n _this.touchAction = true;\n }, (typeof _this.tap !== 'function' ? 0 : 10));\n _this.lastTapTime = new Date().getTime();\n EventHandler.remove(_this.element, Browser.touchMoveEvent, _this.moveEvent);\n EventHandler.remove(_this.element, Browser.touchEndEvent, _this.endEvent);\n };\n _this.bind();\n return _this;\n }\n // triggers when property changed \n /**\n * @private\n * @param newProp\n * @param oldProp\n */\n Touch.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Touch.prototype.bind = function () {\n this.wireEvents();\n if (Browser.isIE) {\n this.element.classList.add('e-block-touch');\n }\n };\n /**\n * To destroy the touch instance.\n * @return {void}\n */\n Touch.prototype.destroy = function () {\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n // Need to changes the event binding once we updated the event handler.\n Touch.prototype.wireEvents = function () {\n EventHandler.add(this.element, Browser.touchStartEvent, this.startEvent, this);\n };\n Touch.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.startEvent);\n };\n /**\n * Returns module name as touch\n * @returns {string}\n * @private\n */\n Touch.prototype.getModuleName = function () {\n return 'touch';\n };\n /**\n * Returns if the HTML element is Scrollable.\n * @param {HTMLElement} element - HTML Element to check if Scrollable.\n * @returns {boolean}\n */\n Touch.prototype.isScrollable = function (element) {\n var eleStyle = getComputedStyle(element);\n var style = eleStyle.overflow + eleStyle.overflowX + eleStyle.overflowY;\n if ((/(auto|scroll)/).test(style)) {\n return true;\n }\n return false;\n };\n Touch.prototype.tapHoldEvent = function (evt) {\n this.tapCount = 0;\n this.touchAction = true;\n var eTapArgs;\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.moveEvent);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.endEvent);\n eTapArgs = { originalEvent: evt };\n this.trigger('tapHold', eTapArgs);\n };\n Touch.prototype.calcPoints = function (evt) {\n var point = evt.changedTouches ? evt.changedTouches[0] : evt;\n this.defaultArgs = { originalEvent: evt };\n this.distanceX = Math.abs((Math.abs(point.clientX) - Math.abs(this.startPoint.clientX)));\n this.distanceY = Math.abs((Math.abs(point.clientY) - Math.abs(this.startPoint.clientY)));\n if (this.distanceX > this.distanceY) {\n this.movedDirection = (point.clientX > this.startPoint.clientX) ? 'Right' : 'Left';\n }\n else {\n this.movedDirection = (point.clientY < this.startPoint.clientY) ? 'Up' : 'Down';\n }\n };\n Touch.prototype.calcScrollPoints = function (evt) {\n var point = evt.changedTouches ? evt.changedTouches[0] : evt;\n this.defaultArgs = { originalEvent: evt };\n this.distanceX = Math.abs((Math.abs(point.clientX) - Math.abs(this.lastMovedPoint.clientX)));\n this.distanceY = Math.abs((Math.abs(point.clientY) - Math.abs(this.lastMovedPoint.clientY)));\n if ((this.distanceX > this.distanceY || this.hScrollLocked === true) && this.vScrollLocked === false) {\n this.scrollDirection = (point.clientX > this.lastMovedPoint.clientX) ? 'Right' : 'Left';\n this.hScrollLocked = true;\n }\n else {\n this.scrollDirection = (point.clientY < this.lastMovedPoint.clientY) ? 'Up' : 'Down';\n this.vScrollLocked = true;\n }\n };\n Touch.prototype.getVelocity = function (pnt) {\n var newX = pnt.clientX;\n var newY = pnt.clientY;\n var newT = Date.now();\n var xDist = newX - this.startPoint.clientX;\n var yDist = newY - this.startPoint.clientX;\n var interval = newT - this.tStampStart;\n return Math.sqrt(xDist * xDist + yDist * yDist) / interval;\n };\n // tslint:disable-next-line:no-any\n Touch.prototype.checkSwipe = function (ele, flag) {\n var keys = ['scroll', 'offset'];\n var temp = flag ? ['Height', 'Top'] : ['Width', 'Left'];\n if ((ele[keys[0] + temp[0]] <= ele[keys[1] + temp[0]])) {\n return true;\n }\n return (ele[keys[0] + temp[1]] === 0) ||\n (ele[keys[1] + temp[0]] + ele[keys[0] + temp[1]] >= ele[keys[0] + temp[0]]);\n };\n __decorate([\n Event()\n ], Touch.prototype, \"tap\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"tapHold\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"swipe\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"scroll\", void 0);\n __decorate([\n Property(350)\n ], Touch.prototype, \"tapThreshold\", void 0);\n __decorate([\n Property(750)\n ], Touch.prototype, \"tapHoldThreshold\", void 0);\n __decorate([\n Complex({}, SwipeSettings)\n ], Touch.prototype, \"swipeSettings\", void 0);\n Touch = __decorate([\n NotifyPropertyChanges\n ], Touch);\n return Touch;\n}(Base));\nexport { Touch };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, NotifyPropertyChanges, Component } from '@syncfusion/ej2-base';\nimport { addClass, createElement, detach, removeClass, rippleEffect, EventHandler } from '@syncfusion/ej2-base';\nimport { getTextNode } from '../common/common';\nvar cssClassName = {\n RTL: 'e-rtl',\n BUTTON: 'e-btn',\n PRIMARY: 'e-primary',\n ICONBTN: 'e-icon-btn'\n};\n/**\n * The Button is a graphical user interface element that triggers an event on its click action. It can contain a text, an image, or both.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar Button = /** @class */ (function (_super) {\n __extends(Button, _super);\n /**\n * Constructor for creating the widget\n * @param {ButtonModel} options?\n * @param {string|HTMLButtonElement} element?\n */\n function Button(options, element) {\n return _super.call(this, options, element) || this;\n }\n Button.prototype.preRender = function () {\n // pre render code snippets\n };\n /**\n * Initialize the control rendering\n * @returns void\n * @private\n */\n Button.prototype.render = function () {\n this.initialize();\n };\n Button.prototype.initialize = function () {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n if (this.isPrimary) {\n this.element.classList.add(cssClassName.PRIMARY);\n }\n if (this.content) {\n this.element.innerHTML = this.content;\n }\n this.setIconCss();\n if (this.enableRtl) {\n this.element.classList.add(cssClassName.RTL);\n }\n if (this.disabled) {\n this.controlStatus(this.disabled);\n }\n else {\n this.wireEvents();\n }\n rippleEffect(this.element, { selector: '.' + cssClassName.BUTTON });\n };\n Button.prototype.controlStatus = function (disabled) {\n this.element.disabled = disabled;\n };\n Button.prototype.setIconCss = function () {\n if (this.iconCss) {\n var span = createElement('span', { className: 'e-btn-icon ' + this.iconCss });\n if (!this.element.textContent.trim()) {\n this.element.classList.add(cssClassName.ICONBTN);\n }\n else {\n span.classList.add('e-icon-' + this.iconPosition.toLowerCase());\n }\n var node = this.element.childNodes[0];\n if (node && (this.iconPosition === 'Left')) {\n this.element.insertBefore(span, node);\n }\n else {\n this.element.appendChild(span);\n }\n }\n };\n Button.prototype.wireEvents = function () {\n if (this.isToggle) {\n EventHandler.add(this.element, 'click', this.btnClickHandler, this);\n }\n };\n Button.prototype.unWireEvents = function () {\n if (this.isToggle) {\n EventHandler.remove(this.element, 'click', this.btnClickHandler);\n }\n };\n Button.prototype.btnClickHandler = function () {\n if (this.element.classList.contains('e-active')) {\n this.element.classList.remove('e-active');\n }\n else {\n this.element.classList.add('e-active');\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n Button.prototype.destroy = function () {\n var span;\n var element = this.element;\n _super.prototype.destroy.call(this);\n removeClass([this.element], [cssClassName.PRIMARY, cssClassName.RTL, cssClassName.ICONBTN, 'e-success',\n 'e-info', 'e-danger', 'e-warning', 'e-flat', 'e-outline', 'e-small', 'e-bigger', 'e-active', 'e-round']);\n ['e-ripple', 'disabled'].forEach(function (value) {\n element.removeAttribute(value);\n });\n if (this.content) {\n element.innerHTML = element.innerHTML.replace(this.content, '');\n }\n span = element.querySelector('span.e-btn-icon');\n if (span) {\n detach(span);\n }\n this.unWireEvents();\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n Button.prototype.getModuleName = function () {\n return 'btn';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\n */\n Button.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Called internally if any of the property value changed.\n * @param {Button} newProp\n * @param {Button} oldProp\n * @returns void\n * @private\n */\n Button.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'isPrimary':\n if (newProp.isPrimary) {\n this.element.classList.add(cssClassName.PRIMARY);\n }\n else {\n this.element.classList.remove(cssClassName.PRIMARY);\n }\n break;\n case 'disabled':\n this.controlStatus(newProp.disabled);\n this.unWireEvents();\n break;\n case 'iconCss':\n var span = this.element.querySelector('span.e-btn-icon');\n if (span) {\n span.className = 'e-btn-icon ' + newProp.iconCss;\n if (this.element.textContent.trim()) {\n if (this.iconPosition === 'Left') {\n span.classList.add('e-icon-left');\n }\n else {\n span.classList.add('e-icon-right');\n }\n }\n }\n else {\n this.setIconCss();\n }\n break;\n case 'iconPosition':\n span = this.element.querySelector('span.e-btn-icon');\n if (span) {\n detach(span);\n }\n this.setIconCss();\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n this.element.classList.add(cssClassName.RTL);\n }\n else {\n this.element.classList.remove(cssClassName.RTL);\n }\n break;\n case 'content':\n var node = getTextNode(this.element);\n if (!node) {\n this.element.classList.remove(cssClassName.ICONBTN);\n }\n this.element.innerHTML = newProp.content;\n this.setIconCss();\n break;\n case 'isToggle':\n if (newProp.isToggle) {\n EventHandler.add(this.element, 'click', this.btnClickHandler, this);\n }\n else {\n EventHandler.remove(this.element, 'click', this.btnClickHandler);\n removeClass([this.element], ['e-active']);\n }\n break;\n }\n }\n };\n __decorate([\n Property('Left')\n ], Button.prototype, \"iconPosition\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"disabled\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"isPrimary\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"content\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"isToggle\", void 0);\n Button = __decorate([\n NotifyPropertyChanges\n ], Button);\n return Button;\n}(Component));\nexport { Button };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { Event, EventHandler } from '@syncfusion/ej2-base';\nimport { addClass, createElement, detach, getUniqueID, isRippleEnabled, removeClass, rippleEffect } from '@syncfusion/ej2-base';\nimport { wrapperInitialize, rippleMouseHandler } from './../common/common';\nvar CHECK = 'e-check';\nvar DISABLED = 'e-checkbox-disabled';\nvar FRAME = 'e-frame';\nvar INDETERMINATE = 'e-stop';\nvar LABEL = 'e-label';\nvar RIPPLE = 'e-ripple-container';\nvar RIPPLECHECK = 'e-ripple-check';\nvar RIPPLEINDETERMINATE = 'e-ripple-stop';\nvar RTL = 'e-rtl';\nvar WRAPPER = 'e-checkbox-wrapper';\n/**\n * The CheckBox is a graphical user interface element that allows you to select one or more options from the choices.\n * It contains checked, unchecked, and indeterminate states.\n * ```html\n * \n * \n * ```\n */\nvar CheckBox = /** @class */ (function (_super) {\n __extends(CheckBox, _super);\n /**\n * Constructor for creating the widget\n * @private\n */\n function CheckBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isKeyPressed = false;\n return _this;\n }\n CheckBox.prototype.changeState = function (state) {\n var ariaState;\n var rippleSpan;\n var frameSpan = this.getWrapper().getElementsByClassName(FRAME)[0];\n if (isRippleEnabled) {\n rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n }\n if (state === 'check') {\n frameSpan.classList.remove(INDETERMINATE);\n frameSpan.classList.add(CHECK);\n if (rippleSpan) {\n rippleSpan.classList.remove(RIPPLEINDETERMINATE);\n rippleSpan.classList.add(RIPPLECHECK);\n }\n ariaState = 'true';\n this.element.checked = true;\n }\n else if (state === 'uncheck') {\n removeClass([frameSpan], [CHECK, INDETERMINATE]);\n if (rippleSpan) {\n removeClass([rippleSpan], [RIPPLECHECK, RIPPLEINDETERMINATE]);\n }\n ariaState = 'false';\n this.element.checked = false;\n }\n else {\n frameSpan.classList.remove(CHECK);\n frameSpan.classList.add(INDETERMINATE);\n if (rippleSpan) {\n rippleSpan.classList.remove(RIPPLECHECK);\n rippleSpan.classList.add(RIPPLEINDETERMINATE);\n }\n ariaState = 'mixed';\n this.element.indeterminate = true;\n }\n this.getWrapper().setAttribute('aria-checked', ariaState);\n };\n CheckBox.prototype.clickHandler = function (event) {\n this.focusOutHandler();\n if (this.indeterminate) {\n this.changeState(this.checked ? 'check' : 'uncheck');\n this.indeterminate = false;\n this.element.indeterminate = false;\n }\n else if (this.checked) {\n this.changeState('uncheck');\n this.checked = false;\n }\n else {\n this.changeState('check');\n this.checked = true;\n }\n var changeEventArgs = { checked: this.element.checked, event: event };\n this.trigger('change', changeEventArgs);\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n CheckBox.prototype.destroy = function () {\n var _this = this;\n var wrapper = this.getWrapper();\n _super.prototype.destroy.call(this);\n if (!this.disabled) {\n this.unWireEvents();\n }\n if (this.tagName === 'INPUT') {\n wrapper.parentNode.insertBefore(this.element, wrapper);\n detach(wrapper);\n this.element.checked = false;\n if (this.indeterminate) {\n this.element.indeterminate = false;\n }\n ['name', 'value', 'disabled'].forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n }\n else {\n ['role', 'aria-checked', 'class'].forEach(function (key) {\n wrapper.removeAttribute(key);\n });\n if (this.element.id) {\n wrapper.setAttribute('id', this.element.id);\n }\n wrapper.innerHTML = '';\n }\n };\n CheckBox.prototype.focusHandler = function () {\n if (this.isKeyPressed) {\n this.getWrapper().classList.add('e-focus');\n }\n };\n CheckBox.prototype.focusOutHandler = function () {\n this.getWrapper().classList.remove('e-focus');\n };\n /**\n * Gets the module name.\n * @private\n */\n CheckBox.prototype.getModuleName = function () {\n return 'checkbox';\n };\n /**\n * Gets the properties to be maintained in the persistence state.\n * @private\n */\n CheckBox.prototype.getPersistData = function () {\n return this.addOnPersist(['checked', 'indeterminate']);\n };\n CheckBox.prototype.getWrapper = function () {\n return this.element.parentElement.parentElement;\n };\n CheckBox.prototype.initialize = function () {\n if (this.name) {\n this.element.setAttribute('name', this.name);\n }\n if (this.value) {\n this.element.setAttribute('value', this.value);\n }\n if (this.checked) {\n this.changeState('check');\n }\n if (this.indeterminate) {\n this.changeState();\n }\n if (this.disabled) {\n this.setDisabled();\n }\n };\n CheckBox.prototype.initWrapper = function () {\n var wrapper = this.element.parentElement;\n if (!wrapper.classList.contains(WRAPPER)) {\n wrapper = createElement('div', {\n className: WRAPPER, attrs: { 'role': 'checkbox', 'aria-checked': 'false' }\n });\n this.element.parentNode.insertBefore(wrapper, this.element);\n }\n var label = createElement('label', { attrs: { for: this.element.id } });\n var frameSpan = createElement('span', { className: 'e-icons ' + FRAME });\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.split(' '));\n }\n wrapper.appendChild(label);\n label.appendChild(this.element);\n label.appendChild(frameSpan);\n if (isRippleEnabled) {\n var rippleSpan = createElement('span', { className: RIPPLE });\n if (this.labelPosition === 'Before') {\n label.appendChild(rippleSpan);\n }\n else {\n label.insertBefore(rippleSpan, frameSpan);\n }\n rippleEffect(rippleSpan, { duration: 400, isCenterRipple: true });\n }\n if (this.label) {\n this.setText(this.label);\n }\n };\n CheckBox.prototype.keyDownHandler = function () {\n this.isKeyPressed = true;\n };\n CheckBox.prototype.labelMouseHandler = function (e) {\n var rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n rippleMouseHandler(e, rippleSpan);\n };\n CheckBox.prototype.mouseDownHandler = function () {\n this.isKeyPressed = false;\n };\n /**\n * Called internally if any of the property value changes.\n * @private\n */\n CheckBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n var wrapper = this.getWrapper();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'checked':\n this.indeterminate = false;\n this.element.indeterminate = false;\n this.changeState(newProp.checked ? 'check' : 'uncheck');\n break;\n case 'indeterminate':\n if (newProp.indeterminate) {\n this.changeState();\n }\n else {\n this.element.indeterminate = false;\n this.changeState(this.checked ? 'check' : 'uncheck');\n }\n break;\n case 'disabled':\n if (newProp.disabled) {\n this.setDisabled();\n this.unWireEvents();\n }\n else {\n this.element.disabled = false;\n wrapper.classList.remove(DISABLED);\n wrapper.setAttribute('aria-disabled', 'false');\n this.wireEvents();\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n wrapper.classList.remove(oldProp.cssClass);\n }\n wrapper.classList.add(newProp.cssClass);\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n wrapper.classList.add(RTL);\n }\n else {\n wrapper.classList.remove(RTL);\n }\n break;\n case 'label':\n this.setText(newProp.label);\n break;\n case 'labelPosition':\n var label = wrapper.getElementsByClassName(LABEL)[0];\n var labelWrap = wrapper.getElementsByTagName('label')[0];\n detach(label);\n if (newProp.labelPosition === 'After') {\n labelWrap.appendChild(label);\n }\n else {\n labelWrap.insertBefore(label, wrapper.getElementsByClassName(FRAME)[0]);\n }\n break;\n case 'name':\n this.element.setAttribute('name', newProp.name);\n break;\n case 'value':\n this.element.setAttribute('value', newProp.value);\n break;\n }\n }\n };\n /**\n * Initialize Angular, React and Unique ID support.\n * @private\n */\n CheckBox.prototype.preRender = function () {\n var element = this.element;\n this.tagName = this.element.tagName;\n element = wrapperInitialize('EJS-CHECKBOX', 'checkbox', element, WRAPPER);\n this.element = element;\n if (this.element.getAttribute('type') !== 'checkbox') {\n this.element.setAttribute('type', 'checkbox');\n }\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n };\n /**\n * Initialize the control rendering\n * @private\n */\n CheckBox.prototype.render = function () {\n this.initWrapper();\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\n }\n };\n CheckBox.prototype.setDisabled = function () {\n var wrapper = this.getWrapper();\n this.element.disabled = true;\n wrapper.classList.add(DISABLED);\n wrapper.setAttribute('aria-disabled', 'true');\n };\n CheckBox.prototype.setText = function (text) {\n var label = this.getWrapper().getElementsByClassName(LABEL)[0];\n if (label) {\n label.textContent = text;\n }\n else {\n label = createElement('span', { className: LABEL, innerHTML: text });\n var labelWrap = this.getWrapper().getElementsByTagName('label')[0];\n if (this.labelPosition === 'Before') {\n labelWrap.insertBefore(label, this.getWrapper().getElementsByClassName(FRAME)[0]);\n }\n else {\n labelWrap.appendChild(label);\n }\n }\n };\n CheckBox.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.remove(this.element, 'click', this.clickHandler);\n EventHandler.remove(document, 'keydown', this.keyDownHandler);\n EventHandler.remove(wrapper, 'mousedown', this.mouseDownHandler);\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n var label = wrapper.getElementsByTagName('label')[0];\n EventHandler.remove(label, 'mousedown', this.labelMouseHandler);\n EventHandler.remove(label, 'mouseup', this.labelMouseHandler);\n };\n CheckBox.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n EventHandler.add(document, 'keydown', this.keyDownHandler, this);\n EventHandler.add(wrapper, 'mousedown', this.mouseDownHandler, this);\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n var label = wrapper.getElementsByTagName('label')[0];\n EventHandler.add(label, 'mousedown', this.labelMouseHandler, this);\n EventHandler.add(label, 'mouseup', this.labelMouseHandler, this);\n };\n __decorate([\n Event()\n ], CheckBox.prototype, \"change\", void 0);\n __decorate([\n Property(false)\n ], CheckBox.prototype, \"checked\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], CheckBox.prototype, \"disabled\", void 0);\n __decorate([\n Property(false)\n ], CheckBox.prototype, \"indeterminate\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"label\", void 0);\n __decorate([\n Property('After')\n ], CheckBox.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"value\", void 0);\n CheckBox = __decorate([\n NotifyPropertyChanges\n ], CheckBox);\n return CheckBox;\n}(Component));\nexport { CheckBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, rippleEffect, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { addClass, createElement, getInstance, getUniqueID, isRippleEnabled, removeClass } from '@syncfusion/ej2-base';\nimport { detach, Event, EventHandler } from '@syncfusion/ej2-base';\nimport { wrapperInitialize, rippleMouseHandler } from './../common/common';\nvar LABEL = 'e-label';\nvar RIPPLE = 'e-ripple-container';\nvar RTL = 'e-rtl';\nvar WRAPPER = 'e-radio-wrapper';\n/**\n * The RadioButton is a graphical user interface element that allows you to select one option from the choices.\n * It contains checked and unchecked states.\n * ```html\n * \n * \n * ```\n */\nvar RadioButton = /** @class */ (function (_super) {\n __extends(RadioButton, _super);\n /**\n * Constructor for creating the widget\n * @private\n */\n function RadioButton(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isKeyPressed = false;\n return _this;\n }\n RadioButton_1 = RadioButton;\n RadioButton.prototype.changeHandler = function (event) {\n this.checked = true;\n this.dataBind();\n var changeEventArgs = { value: this.value, event: event };\n this.trigger('change', changeEventArgs);\n };\n RadioButton.prototype.updateChange = function (state) {\n var input;\n var name = this.element.getAttribute('name');\n var radioGrp = document.querySelectorAll('input.e-radio[name=\"' + name + '\"]');\n for (var i = 0; i < radioGrp.length; i++) {\n input = radioGrp[i];\n if (input !== this.element) {\n getInstance(input, RadioButton_1).checked = false;\n }\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n RadioButton.prototype.destroy = function () {\n var _this = this;\n var radioWrap = this.element.parentElement;\n _super.prototype.destroy.call(this);\n if (!this.disabled) {\n this.unWireEvents();\n }\n if (this.tagName === 'INPUT') {\n radioWrap.parentNode.insertBefore(this.element, radioWrap);\n detach(radioWrap);\n this.element.checked = false;\n ['name', 'value', 'disabled'].forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n }\n else {\n ['role', 'aria-checked', 'class'].forEach(function (key) {\n radioWrap.removeAttribute(key);\n });\n if (this.element.id) {\n radioWrap.setAttribute('id', this.element.id);\n }\n radioWrap.innerHTML = '';\n }\n };\n RadioButton.prototype.focusHandler = function () {\n if (this.isKeyPressed) {\n this.getLabel().classList.add('e-focus');\n }\n };\n RadioButton.prototype.focusOutHandler = function () {\n this.getLabel().classList.remove('e-focus');\n };\n RadioButton.prototype.getModuleName = function () {\n return 'radio';\n };\n /**\n * Gets the properties to be maintained in the persistence state.\n * @private\n */\n RadioButton.prototype.getPersistData = function () {\n return this.addOnPersist(['checked']);\n };\n RadioButton.prototype.getLabel = function () {\n return this.element.nextElementSibling;\n };\n RadioButton.prototype.initialize = function () {\n this.initWrapper();\n if (this.name) {\n this.element.setAttribute('name', this.name);\n }\n if (this.value) {\n this.element.setAttribute('value', this.value);\n }\n if (this.checked) {\n this.element.checked = true;\n }\n if (this.disabled) {\n this.setDisabled();\n }\n };\n RadioButton.prototype.initWrapper = function () {\n var rippleSpan;\n var wrapper = this.element.parentElement;\n if (!wrapper.classList.contains(WRAPPER)) {\n wrapper = createElement('div', { className: WRAPPER });\n this.element.parentNode.insertBefore(wrapper, this.element);\n }\n var label = createElement('label', { attrs: { for: this.element.id } });\n wrapper.appendChild(this.element);\n wrapper.appendChild(label);\n if (isRippleEnabled) {\n rippleSpan = createElement('span', { className: (RIPPLE) });\n label.appendChild(rippleSpan);\n rippleEffect(rippleSpan, {\n duration: 400,\n isCenterRipple: true\n });\n }\n if (this.enableRtl) {\n label.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([label], this.cssClass.split(' '));\n }\n if (this.label) {\n this.setText(this.label);\n }\n };\n RadioButton.prototype.keyDownHandler = function () {\n this.isKeyPressed = true;\n };\n RadioButton.prototype.labelRippleHandler = function (e) {\n var ripple = this.getLabel().getElementsByClassName(RIPPLE)[0];\n rippleMouseHandler(e, ripple);\n };\n RadioButton.prototype.mouseDownHandler = function () {\n this.isKeyPressed = false;\n };\n /**\n * Called internally if any of the property value changes.\n * @private\n */\n RadioButton.prototype.onPropertyChanged = function (newProp, oldProp) {\n var label = this.getLabel();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'checked':\n if (newProp.checked) {\n this.updateChange(newProp.checked);\n }\n this.element.checked = newProp.checked;\n break;\n case 'disabled':\n if (newProp.disabled) {\n this.setDisabled();\n this.unWireEvents();\n }\n else {\n this.element.disabled = false;\n this.wireEvents();\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([label], oldProp.cssClass.split(' '));\n }\n addClass([label], newProp.cssClass.split(' '));\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n label.classList.add(RTL);\n }\n else {\n label.classList.remove(RTL);\n }\n break;\n case 'label':\n this.setText(newProp.label);\n break;\n case 'labelPosition':\n if (newProp.labelPosition === 'Before') {\n label.classList.add('e-right');\n }\n else {\n label.classList.remove('e-right');\n }\n break;\n case 'name':\n this.element.setAttribute('name', newProp.name);\n break;\n case 'value':\n this.element.setAttribute('value', newProp.value);\n break;\n }\n }\n };\n /**\n * Initialize checked Property, Angular and React and Unique ID support.\n * @private\n */\n RadioButton.prototype.preRender = function () {\n var element = this.element;\n this.tagName = this.element.tagName;\n element = wrapperInitialize('EJS-RADIOBUTTON', 'radio', element, WRAPPER);\n this.element = element;\n if (this.element.getAttribute('type') !== 'radio') {\n this.element.setAttribute('type', 'radio');\n }\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n };\n /**\n * Initialize the control rendering\n * @private\n */\n RadioButton.prototype.render = function () {\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\n }\n };\n RadioButton.prototype.setDisabled = function () {\n this.element.disabled = true;\n };\n RadioButton.prototype.setText = function (text) {\n var label = this.getLabel();\n var textLabel = label.getElementsByClassName(LABEL)[0];\n if (textLabel) {\n textLabel.textContent = text;\n }\n else {\n textLabel = createElement('span', { className: LABEL, innerHTML: text });\n label.appendChild(textLabel);\n }\n if (this.labelPosition === 'Before') {\n this.getLabel().classList.add('e-right');\n }\n else {\n this.getLabel().classList.remove('e-right');\n }\n };\n RadioButton.prototype.unWireEvents = function () {\n var label = this.getLabel();\n EventHandler.remove(this.element, 'change', this.changeHandler);\n EventHandler.remove(document, 'keydown', this.keyDownHandler);\n EventHandler.remove(label, 'mousedown', this.mouseDownHandler);\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n var rippleLabel = label.getElementsByClassName(LABEL)[0];\n if (rippleLabel) {\n EventHandler.remove(rippleLabel, 'mousedown', this.labelRippleHandler);\n EventHandler.remove(rippleLabel, 'mouseup', this.labelRippleHandler);\n }\n };\n RadioButton.prototype.wireEvents = function () {\n var label = this.getLabel();\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n EventHandler.add(document, 'keydown', this.keyDownHandler, this);\n EventHandler.add(label, 'mousedown', this.mouseDownHandler, this);\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n var rippleLabel = label.getElementsByClassName(LABEL)[0];\n if (rippleLabel) {\n EventHandler.add(rippleLabel, 'mousedown', this.labelRippleHandler, this);\n EventHandler.add(rippleLabel, 'mouseup', this.labelRippleHandler, this);\n }\n };\n __decorate([\n Event()\n ], RadioButton.prototype, \"change\", void 0);\n __decorate([\n Property(false)\n ], RadioButton.prototype, \"checked\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], RadioButton.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"label\", void 0);\n __decorate([\n Property('After')\n ], RadioButton.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"value\", void 0);\n RadioButton = RadioButton_1 = __decorate([\n NotifyPropertyChanges\n ], RadioButton);\n return RadioButton;\n var RadioButton_1;\n}(Component));\nexport { RadioButton };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Event, Collection, L10n, Browser, Complex } from '@syncfusion/ej2-base';\nimport { createElement, addClass, removeClass, detach, attributes, prepend, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit } from '@syncfusion/ej2-base';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { Draggable } from '@syncfusion/ej2-base';\nimport { Popup, PositionData, getZindexPartial } from '../popup/popup';\nimport { Button } from '@syncfusion/ej2-buttons';\nvar ButtonProps = /** @class */ (function (_super) {\n __extends(ButtonProps, _super);\n function ButtonProps() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], ButtonProps.prototype, \"buttonModel\", void 0);\n __decorate([\n Property()\n ], ButtonProps.prototype, \"click\", void 0);\n return ButtonProps;\n}(ChildProperty));\nexport { ButtonProps };\n/**\n * Specifies Dialog open and close animation settings.\n */\nvar AnimationSettings = /** @class */ (function (_super) {\n __extends(AnimationSettings, _super);\n function AnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Fade')\n ], AnimationSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(400)\n ], AnimationSettings.prototype, \"duration\", void 0);\n __decorate([\n Property(0)\n ], AnimationSettings.prototype, \"delay\", void 0);\n return AnimationSettings;\n}(ChildProperty));\nexport { AnimationSettings };\nvar ROOT = 'e-dialog';\nvar RTL = 'e-rtl';\nvar DLG_HEADER_CONTENT = 'e-dlg-header-content';\nvar DLG_HEADER = 'e-dlg-header';\nvar DLG_FOOTER_CONTENT = 'e-footer-content';\nvar MODAL_DLG = 'e-dlg-modal';\nvar DLG_CONTENT = 'e-dlg-content';\nvar DLG_CLOSE_ICON = 'e-icon-dlg-close';\nvar DLG_OVERLAY = 'e-dlg-overlay';\nvar DLG_CONTAINER = 'e-dlg-container';\nvar SCROLL_DISABLED = 'e-scroll-disabled';\nvar DLG_PRIMARY_BUTTON = 'e-primary';\nvar ICON = 'e-icons';\nvar POPUP_ROOT = 'e-popup';\nvar DEVICE = 'e-device';\nvar FULLSCREEN = 'e-dlg-fullscreen';\nvar DLG_CLOSE_ICON_BTN = 'e-dlg-closeicon-btn';\nvar DLG_HIDE = 'e-popup-close';\nvar DLG_SHOW = 'e-popup-open';\n/**\n * Represents the Dialog component that displays information to the user, and used to get the user input.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Dialog = /** @class */ (function (_super) {\n __extends(Dialog, _super);\n /**\n * Constructor for creating the widget\n * @hidden\n */\n function Dialog(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the control rendering\n * @private\n */\n Dialog.prototype.render = function () {\n this.initialize();\n this.initRender();\n this.wireEvents();\n };\n /**\n * Initialize the event handler\n * @private\n */\n Dialog.prototype.preRender = function () {\n var _this = this;\n this.headerContent = null;\n var classArray = [];\n for (var j = 0; j < this.element.classList.length; j++) {\n if (!isNullOrUndefined(this.element.classList[j].match('e-control')) ||\n !isNullOrUndefined(this.element.classList[j].match(ROOT))) {\n classArray.push(this.element.classList[j]);\n }\n }\n removeClass([this.element], classArray);\n this.clonedEle = this.element.cloneNode(true);\n this.closeIconClickEventHandler = function (event) {\n _this.hide();\n _this.closedFrom = event;\n };\n this.dlgOverlayClickEventHandler = function (event) {\n _this.trigger('overlayClick', event);\n };\n var localeText = { close: 'Close' };\n this.l10n = new L10n('dialog', localeText, this.locale);\n };\n ;\n Dialog.prototype.keyDown = function (event) {\n var _this = this;\n if (event.keyCode === 9) {\n if (this.isModal) {\n var buttonObj = void 0;\n if (!isNullOrUndefined(this.btnObj)) {\n buttonObj = this.btnObj[this.btnObj.length - 1];\n }\n if (!isNullOrUndefined(buttonObj) && document.activeElement === buttonObj.element && !event.shiftKey) {\n event.preventDefault();\n this.focusableElements(this.element).focus();\n }\n if (document.activeElement === this.focusableElements(this.element) && event.shiftKey) {\n event.preventDefault();\n if (!isNullOrUndefined(buttonObj)) {\n buttonObj.element.focus();\n }\n }\n }\n }\n var element = document.activeElement;\n var isTagName = (['input', 'textarea'].indexOf(element.tagName.toLowerCase()) > -1);\n var isContentEdit = false;\n if (!isTagName) {\n isContentEdit = element.hasAttribute('contenteditable') && element.getAttribute('contenteditable') === 'true';\n }\n if (event.keyCode === 27 && this.closeOnEscape) {\n this.hide();\n this.closedFrom = event;\n }\n if ((event.keyCode === 13 && !event.ctrlKey && element.tagName.toLowerCase() !== 'textarea' &&\n isTagName && !isNullOrUndefined(this.primaryButtonEle)) ||\n (event.keyCode === 13 && event.ctrlKey && (element.tagName.toLowerCase() === 'textarea' ||\n isContentEdit)) && !isNullOrUndefined(this.primaryButtonEle)) {\n var buttonIndex_1;\n var firstPrimary = this.buttons.some(function (data, index) {\n buttonIndex_1 = index;\n var buttonModel = data.buttonModel;\n return !isNullOrUndefined(buttonModel) && buttonModel.isPrimary === true;\n });\n if (firstPrimary && typeof (this.buttons[buttonIndex_1].click) === 'function') {\n setTimeout(function () {\n _this.buttons[buttonIndex_1].click.call(_this, event);\n });\n }\n }\n };\n /**\n * Initialize the control rendering\n * @private\n */\n Dialog.prototype.initialize = function () {\n if (!isNullOrUndefined(this.target)) {\n this.targetEle = ((typeof this.target) === 'string') ?\n document.querySelector(this.target) : this.target;\n }\n addClass([this.element], ROOT);\n if (Browser.isDevice) {\n addClass([this.element], DEVICE);\n }\n this.setCSSClass();\n this.setMaxHeight();\n };\n /**\n * Initialize the rendering\n * @private\n */\n Dialog.prototype.initRender = function () {\n var _this = this;\n attributes(this.element, { role: 'dialog' });\n if (this.zIndex === 1000) {\n this.zIndex = getZindexPartial(this.element);\n }\n this.setTargetContent();\n if (this.header !== '') {\n this.setHeader();\n }\n if (this.showCloseIcon) {\n this.renderCloseIcon();\n }\n if (!isNullOrUndefined(this.content) && this.content !== '') {\n this.setContent();\n }\n else if (this.element.hasChildNodes()) {\n this.contentEle = this.element;\n }\n if (this.footerTemplate !== '') {\n this.setFooterTemplate();\n }\n if (!isNullOrUndefined(this.buttons[0].buttonModel) && this.footerTemplate === '') {\n this.setButton();\n }\n if (this.allowDragging && (!this.isModal) && (!isNullOrUndefined(this.headerContent))) {\n this.setAllowDragging();\n }\n attributes(this.element, { 'aria-modal': (this.isModal ? 'true' : 'false') });\n if (this.isModal) {\n this.setIsModal();\n }\n if (!isNullOrUndefined(this.targetEle)) {\n this.isModal ? this.targetEle.appendChild(this.dlgContainer) : this.targetEle.appendChild(this.element);\n }\n this.popupObj = new Popup(this.element, {\n height: this.height,\n width: this.width,\n zIndex: this.zIndex,\n relateTo: this.target,\n actionOnScroll: 'none',\n open: function () {\n _this.focusContent();\n _this.trigger('open');\n },\n close: function (event) {\n _this.unBindEvent(_this.element);\n if (_this.isModal) {\n _this.dlgContainer.style.display = 'none';\n }\n _this.trigger('close', _this.closedFrom);\n _this.closedFrom = {};\n if (!isNullOrUndefined(_this.storeActiveElement)) {\n _this.storeActiveElement.focus();\n }\n }\n });\n this.positionChange();\n this.setEnableRTL();\n addClass([this.element], DLG_HIDE);\n if (this.isModal) {\n this.setOverlayZindex();\n }\n if (this.visible) {\n this.show();\n }\n else {\n if (this.isModal) {\n this.dlgOverlay.style.display = 'none';\n }\n }\n };\n Dialog.prototype.setOverlayZindex = function () {\n var zIndex = parseInt(this.element.style.zIndex, 10) ? parseInt(this.element.style.zIndex, 10) : this.zIndex;\n this.dlgOverlay.style.zIndex = (zIndex - 1).toString();\n this.dlgContainer.style.zIndex = zIndex.toString();\n };\n Dialog.prototype.positionChange = function () {\n if (!this.isModal) {\n this.popupObj.setProperties({\n position: {\n X: this.position.X, Y: this.position.Y\n }\n });\n }\n else {\n this.dlgContainer.classList.add('e-dlg-' + this.position.X + '-' + this.position.Y);\n }\n };\n Dialog.prototype.setAllowDragging = function () {\n var _this = this;\n var handleContent = '.' + DLG_HEADER_CONTENT;\n this.dragObj = new Draggable(this.element, {\n clone: false,\n handle: handleContent,\n dragStart: function (event) {\n _this.trigger('dragStart', event);\n },\n dragStop: function (event) {\n _this.trigger('dragStop', event);\n },\n drag: function (event) {\n _this.trigger('drag', event);\n }\n });\n if (!isNullOrUndefined(this.targetEle)) {\n this.dragObj.dragArea = this.targetEle;\n }\n };\n Dialog.prototype.setButton = function () {\n this.buttonContent = [];\n this.btnObj = [];\n var primaryBtnFlag = true;\n for (var i = 0; i < this.buttons.length; i++) {\n var btn = createElement('button', { attrs: { type: 'button' } });\n this.buttonContent.push(btn.outerHTML);\n }\n this.setFooterTemplate();\n for (var i = 0; i < this.buttons.length; i++) {\n this.btnObj[i] = new Button(this.buttons[i].buttonModel);\n if (typeof (this.buttons[i].click) === 'function') {\n EventHandler.add(this.ftrTemplateContent.children[i], 'click', this.buttons[i].click, this);\n }\n this.btnObj[i].appendTo(this.ftrTemplateContent.children[i]);\n if (!this.btnObj[i].isPrimary) {\n this.btnObj[i].element.classList.add('e-flat');\n }\n this.primaryButtonEle = this.element.getElementsByClassName('e-primary')[0];\n }\n };\n Dialog.prototype.setContent = function () {\n attributes(this.element, { 'aria-describedby': this.element.id + '_dialog-content' });\n this.contentEle = createElement('div', { className: DLG_CONTENT, id: this.element.id + '_dialog-content' });\n typeof (this.content) === 'string' ? this.contentEle.innerHTML = this.content : this.contentEle.appendChild(this.content);\n !isNullOrUndefined(this.headerContent) ? this.element.insertBefore(this.contentEle, this.element.children[1]) :\n this.element.insertBefore(this.contentEle, this.element.children[0]);\n if (this.height === 'auto') {\n this.setMaxHeight();\n }\n };\n Dialog.prototype.setMaxHeight = function () {\n var display = this.element.style.display;\n this.element.style.display = 'none';\n this.element.style.maxHeight = (!isNullOrUndefined(this.target)) ?\n (this.targetEle.offsetHeight - 20) + 'px' : (window.innerHeight - 20) + 'px';\n this.element.style.display = display;\n };\n Dialog.prototype.setEnableRTL = function () {\n this.enableRtl ? addClass([this.element], RTL) : removeClass([this.element], RTL);\n };\n Dialog.prototype.setTargetContent = function () {\n var isContent = this.element.innerHTML.replace(/\\s/g, '') !== '';\n if (this.element.children.length > 0 || isContent) {\n var contentDiv = document.createDocumentFragment();\n while (this.element.childNodes.length !== 0) {\n contentDiv.appendChild(this.element.childNodes[0]);\n }\n this.setProperties({ content: contentDiv }, true);\n }\n };\n Dialog.prototype.setHeader = function () {\n this.headerEle = createElement('div', { id: this.element.id + '_title', className: DLG_HEADER, innerHTML: this.header });\n attributes(this.element, { 'aria-labelledby': this.element.id + '_title' });\n this.createHeaderContent();\n this.headerContent.appendChild(this.headerEle);\n this.element.insertBefore(this.headerContent, this.element.children[0]);\n };\n Dialog.prototype.setFooterTemplate = function () {\n this.ftrTemplateContent = createElement('div', {\n className: DLG_FOOTER_CONTENT,\n innerHTML: (this.footerTemplate !== '' ? this.footerTemplate : this.buttonContent.join(''))\n });\n this.element.appendChild(this.ftrTemplateContent);\n };\n Dialog.prototype.createHeaderContent = function () {\n if (isNullOrUndefined(this.headerContent)) {\n this.headerContent = createElement('div', { className: DLG_HEADER_CONTENT });\n }\n };\n Dialog.prototype.renderCloseIcon = function () {\n this.closeIcon = createElement('button', { className: DLG_CLOSE_ICON_BTN, attrs: { type: 'button' } });\n this.closeIconBtnObj = new Button({ cssClass: 'e-flat', iconCss: DLG_CLOSE_ICON + ' ' + ICON });\n this.closeIconTitle();\n if (!isNullOrUndefined(this.headerContent)) {\n prepend([this.closeIcon], this.headerContent);\n }\n else {\n this.createHeaderContent();\n prepend([this.closeIcon], this.headerContent);\n this.element.insertBefore(this.headerContent, this.element.children[0]);\n }\n this.closeIconBtnObj.appendTo(this.closeIcon);\n };\n Dialog.prototype.closeIconTitle = function () {\n this.l10n.setLocale(this.locale);\n var closeIconTitle = this.l10n.getConstant('close');\n this.closeIcon.setAttribute('title', closeIconTitle);\n };\n Dialog.prototype.setCSSClass = function (oldCSSClass) {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' '));\n }\n };\n Dialog.prototype.setIsModal = function () {\n this.dlgContainer = createElement('div', { className: DLG_CONTAINER });\n this.element.parentNode.insertBefore(this.dlgContainer, this.element);\n this.dlgContainer.appendChild(this.element);\n addClass([this.element], MODAL_DLG);\n this.dlgOverlay = createElement('div', { className: DLG_OVERLAY });\n this.dlgOverlay.style.zIndex = (this.zIndex - 1).toString();\n this.dlgContainer.appendChild(this.dlgOverlay);\n };\n Dialog.prototype.getValidFocusNode = function (items) {\n var node;\n for (var u = 0; u < items.length; u++) {\n node = items[u];\n if ((node.clientHeight > 0 || (node.tagName.toLowerCase() === 'a' && node.hasAttribute('href'))) && node.tabIndex > -1 &&\n !node.disabled && !this.disableElement(node, '[disabled],[aria-disabled=\"true\"],[type=\"hidden\"]')) {\n return node;\n }\n }\n return node;\n };\n Dialog.prototype.focusableElements = function (content) {\n if (!isNullOrUndefined(content)) {\n var value = 'input,select,textarea,button,a,[contenteditable=\"true\"],[tabindex]';\n var items = content.querySelectorAll(value);\n return this.getValidFocusNode(items);\n }\n return null;\n };\n Dialog.prototype.getAutoFocusNode = function (container) {\n var node = container.querySelector('.' + DLG_CLOSE_ICON_BTN);\n var value = '[autofocus]';\n var items = container.querySelectorAll(value);\n var validNode = this.getValidFocusNode(items);\n if (!isNullOrUndefined(validNode)) {\n node = validNode;\n }\n else {\n validNode = this.focusableElements(this.contentEle);\n if (!isNullOrUndefined(validNode)) {\n return node = validNode;\n }\n else if (!isNullOrUndefined(this.primaryButtonEle)) {\n return this.element.querySelector('.' + DLG_PRIMARY_BUTTON);\n }\n }\n return node;\n };\n Dialog.prototype.disableElement = function (element, t) {\n var elementMatch = element ? element.matches || element.webkitMatchesSelector || element.msMatchesSelector : null;\n if (elementMatch) {\n for (; element; element = element.parentNode) {\n if (element instanceof Element && elementMatch.call(element, t)) {\n return element;\n }\n }\n }\n return null;\n };\n Dialog.prototype.focusContent = function () {\n var element = this.getAutoFocusNode(this.element);\n var node = !isNullOrUndefined(element) ? element : this.element;\n node.focus();\n this.bindEvent(this.element);\n };\n Dialog.prototype.bindEvent = function (element) {\n EventHandler.add(element, 'keydown', this.keyDown, this);\n };\n Dialog.prototype.unBindEvent = function (element) {\n EventHandler.remove(element, 'keydown', this.keyDown);\n };\n /**\n * Module required function\n * @private\n */\n Dialog.prototype.getModuleName = function () {\n return 'dialog';\n };\n /**\n * Called internally if any of the property value changed\n * @private\n */\n Dialog.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'content':\n if (!isNullOrUndefined(this.content) && this.content !== '') {\n if (!isNullOrUndefined(this.contentEle) && this.contentEle.getAttribute('role') !== 'dialog') {\n this.contentEle.innerHTML = '';\n typeof (this.content) === 'string' ?\n this.contentEle.innerHTML = this.content : this.contentEle.appendChild(this.content);\n this.setMaxHeight();\n }\n else {\n this.setContent();\n }\n }\n else if (!isNullOrUndefined(this.contentEle)) {\n this.element.removeChild(this.contentEle);\n }\n break;\n case 'header':\n if (this.header === '') {\n detach(this.headerEle);\n }\n else {\n this.element.getElementsByClassName(DLG_HEADER).length > 0 ?\n this.element.getElementsByClassName(DLG_HEADER)[0].innerHTML = this.header\n : this.setHeader();\n }\n break;\n case 'footerTemplate':\n this.element.getElementsByClassName(DLG_FOOTER_CONTENT).length > 0 ?\n this.ftrTemplateContent.innerHTML = this.footerTemplate : this.setFooterTemplate();\n break;\n case 'showCloseIcon':\n if (this.element.getElementsByClassName(DLG_CLOSE_ICON).length > 0) {\n if (!this.showCloseIcon && this.header === '') {\n detach(this.headerContent);\n }\n else if (!this.showCloseIcon) {\n detach(this.closeIcon);\n }\n }\n else {\n this.renderCloseIcon();\n this.wireEvents();\n }\n break;\n case 'locale':\n if (this.showCloseIcon) {\n this.closeIconTitle();\n }\n break;\n case 'visible':\n this.visible ? this.show() : this.hide();\n break;\n case 'isModal':\n this.element.setAttribute('aria-modal', this.isModal ? 'true' : 'false');\n if (this.isModal) {\n this.setIsModal();\n this.wireEvents();\n if (!isNullOrUndefined(this.targetEle)) {\n this.isModal ? this.targetEle.appendChild(this.dlgContainer) : this.targetEle.appendChild(this.element);\n }\n }\n else {\n removeClass([this.element], MODAL_DLG);\n removeClass([document.body], SCROLL_DISABLED);\n detach(this.dlgOverlay);\n while (this.dlgContainer.firstChild) {\n this.dlgContainer.parentElement.insertBefore(this.dlgContainer.firstChild, this.dlgContainer);\n }\n this.dlgContainer.parentElement.removeChild(this.dlgContainer);\n }\n break;\n case 'height':\n setStyleAttribute(this.element, { 'height': formatUnit(newProp.height) });\n break;\n case 'width':\n setStyleAttribute(this.element, { 'width': formatUnit(newProp.width) });\n break;\n case 'zIndex':\n this.popupObj.zIndex = this.zIndex;\n if (this.isModal) {\n this.setOverlayZindex();\n }\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'animationSettings':\n this.show();\n break;\n case 'buttons':\n if (!isNullOrUndefined(this.buttons[0].buttonModel) && this.footerTemplate === '') {\n if (!isNullOrUndefined(this.ftrTemplateContent)) {\n detach(this.ftrTemplateContent);\n }\n this.setButton();\n }\n break;\n case 'allowDragging':\n if (this.allowDragging && (!this.isModal) && (!isNullOrUndefined(this.headerContent))) {\n this.setAllowDragging();\n }\n else {\n this.dragObj.destroy();\n }\n break;\n case 'target':\n this.popupObj.relateTo = newProp.target;\n break;\n case 'position':\n if (oldProp.position.X === this.position.X && oldProp.position.Y === this.position.Y) {\n break;\n }\n if (this.isModal) {\n this.dlgContainer.classList.remove('e-dlg-' + oldProp.position.X + '-' + oldProp.position.Y);\n this.dlgContainer.classList.add('e-dlg-' + this.position.X + '-' + this.position.Y);\n }\n else {\n this.popupObj.position.X = this.position.X;\n this.popupObj.position.Y = this.position.Y;\n break;\n }\n break;\n case 'enableRtl':\n this.setEnableRTL();\n break;\n }\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Dialog.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * To destroy the widget\n * @method destroy\n * @return {void}\n * @private\n * @memberof dialog\n */\n Dialog.prototype.destroy = function () {\n if (this.element.classList.contains(ROOT)) {\n this.unWireEvents();\n _super.prototype.destroy.call(this);\n var classArray = [\n ROOT, RTL, MODAL_DLG\n ];\n removeClass([this.element, this.element], classArray);\n if (this.popupObj.element.classList.contains(POPUP_ROOT)) {\n this.popupObj.destroy();\n }\n if (!isNullOrUndefined(this.btnObj)) {\n for (var i = void 0; i < this.btnObj.length; i++) {\n this.btnObj[i].destroy();\n }\n }\n if (this.isModal) {\n detach(this.dlgOverlay);\n this.dlgContainer.parentNode.insertBefore(this.element, this.dlgContainer);\n detach(this.dlgContainer);\n }\n this.element.innerHTML = '';\n while (this.element.attributes.length > 0) {\n this.element.removeAttribute(this.element.attributes[0].name);\n }\n for (var k = 0; k < this.clonedEle.attributes.length; k++) {\n this.element.setAttribute(this.clonedEle.attributes[k].name, this.clonedEle.attributes[k].value);\n }\n }\n };\n /**\n * Binding event to the element while widget creation\n * @hidden\n */\n Dialog.prototype.wireEvents = function () {\n if (this.showCloseIcon) {\n EventHandler.add(this.closeIcon, 'click', this.closeIconClickEventHandler, this);\n }\n if (this.isModal) {\n EventHandler.add(this.dlgOverlay, 'click', this.dlgOverlayClickEventHandler, this);\n }\n };\n /**\n * Unbinding event to the element while widget destroy\n * @hidden\n */\n Dialog.prototype.unWireEvents = function () {\n if (this.showCloseIcon) {\n EventHandler.remove(this.closeIcon, 'click', this.closeIconClickEventHandler);\n }\n if (this.isModal) {\n EventHandler.remove(this.dlgOverlay, 'click', this.dlgOverlayClickEventHandler);\n }\n if (!isNullOrUndefined(this.buttons[0].buttonModel)) {\n for (var i = 0; i < this.buttons.length; i++) {\n if (typeof (this.buttons[i].click) === 'function') {\n EventHandler.remove(this.ftrTemplateContent.children[i], 'click', this.buttons[i].click);\n }\n }\n }\n };\n /**\n * Specifies dialog offset x and y position changed dynamically or\n * change the header,footer height or width dynamically, reposition the dialog as per the new changes.\n * @return {void}\n */\n Dialog.prototype.refreshPosition = function () {\n this.popupObj.refreshPosition();\n };\n /**\n * To show the Dialog element on screen.\n * To enable the fullScreen Dialog pass the parameter to 'true'.\n * @param { boolean } isFullScreen - Enable the fullScreen Dialog.\n * @return {void}\n */\n Dialog.prototype.show = function (isFullScreen) {\n if (!this.element.classList.contains(DLG_SHOW) || (!isNullOrUndefined(isFullScreen))) {\n if (!isNullOrUndefined(isFullScreen)) {\n this.fullScreen(isFullScreen);\n }\n var eventArgs = {\n cancel: false,\n container: this.isModal ? this.dlgContainer : this.element\n };\n this.trigger('beforeOpen', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.storeActiveElement = document.activeElement;\n this.element.tabIndex = -1;\n if (this.isModal && (!isNullOrUndefined(this.dlgOverlay))) {\n this.dlgOverlay.style.display = 'block';\n this.dlgContainer.style.display = 'flex';\n if (!isNullOrUndefined(this.targetEle)) {\n if (this.targetEle === document.body) {\n this.dlgContainer.style.position = 'fixed';\n }\n else {\n this.dlgContainer.style.position = 'absolute';\n }\n this.dlgOverlay.style.position = 'absolute';\n this.element.style.position = 'relative';\n addClass([this.targetEle], SCROLL_DISABLED);\n }\n else {\n addClass([document.body], SCROLL_DISABLED);\n }\n }\n var openAnimation = {\n name: this.animationSettings.effect + 'In',\n duration: this.animationSettings.duration,\n delay: this.animationSettings.delay\n };\n this.animationSettings.effect === 'None' ? this.popupObj.show() : this.popupObj.show(openAnimation);\n this.dialogOpen = true;\n this.setProperties({ visible: true }, true);\n }\n };\n /**\n * To hide the Dialog element on screen.\n * @return {void}\n */\n Dialog.prototype.hide = function () {\n var eventArgs = {\n cancel: false,\n container: this.isModal ? this.dlgContainer : this.element\n };\n this.trigger('beforeClose', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n if (this.isModal) {\n this.dlgOverlay.style.display = 'none';\n !isNullOrUndefined(this.targetEle) ? removeClass([this.targetEle], SCROLL_DISABLED) :\n removeClass([document.body], SCROLL_DISABLED);\n }\n var closeAnimation = {\n name: this.animationSettings.effect + 'Out',\n duration: this.animationSettings.duration,\n delay: this.animationSettings.delay\n };\n this.animationSettings.effect === 'None' ? this.popupObj.hide() : this.popupObj.hide(closeAnimation);\n this.dialogOpen = false;\n this.setProperties({ visible: false }, true);\n };\n /**\n * Specifies to view the Full screen Dialog.\n * @private\n */\n Dialog.prototype.fullScreen = function (args) {\n var top = this.element.offsetTop;\n var left = this.element.offsetLeft;\n if (args) {\n addClass([this.element], FULLSCREEN);\n var display = this.element.style.display;\n this.element.style.display = 'none';\n this.element.style.maxHeight = (!isNullOrUndefined(this.target)) ?\n (this.targetEle.offsetHeight) + 'px' : (window.innerHeight) + 'px';\n this.element.style.display = display;\n addClass([document.body], SCROLL_DISABLED);\n if (this.allowDragging && !isNullOrUndefined(this.dragObj)) {\n this.dragObj.destroy();\n }\n }\n else {\n removeClass([this.element], FULLSCREEN);\n removeClass([document.body], SCROLL_DISABLED);\n if (this.allowDragging && (!this.isModal) && (!isNullOrUndefined(this.headerContent))) {\n this.setAllowDragging();\n }\n }\n return args;\n };\n __decorate([\n Property('')\n ], Dialog.prototype, \"content\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"showCloseIcon\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"isModal\", void 0);\n __decorate([\n Property('')\n ], Dialog.prototype, \"header\", void 0);\n __decorate([\n Property(true)\n ], Dialog.prototype, \"visible\", void 0);\n __decorate([\n Property('auto')\n ], Dialog.prototype, \"height\", void 0);\n __decorate([\n Property('100%')\n ], Dialog.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Dialog.prototype, \"cssClass\", void 0);\n __decorate([\n Property(1000)\n ], Dialog.prototype, \"zIndex\", void 0);\n __decorate([\n Property(null)\n ], Dialog.prototype, \"target\", void 0);\n __decorate([\n Property('')\n ], Dialog.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"allowDragging\", void 0);\n __decorate([\n Collection([{}], ButtonProps)\n ], Dialog.prototype, \"buttons\", void 0);\n __decorate([\n Property(true)\n ], Dialog.prototype, \"closeOnEscape\", void 0);\n __decorate([\n Complex({}, AnimationSettings)\n ], Dialog.prototype, \"animationSettings\", void 0);\n __decorate([\n Complex({ X: 'center', Y: 'center' }, PositionData)\n ], Dialog.prototype, \"position\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"dragStop\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"overlayClick\", void 0);\n Dialog = __decorate([\n NotifyPropertyChanges\n ], Dialog);\n return Dialog;\n}(Component));\nexport { Dialog };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, ChildProperty, Event } from '@syncfusion/ej2-base';\nimport { EventHandler, Touch, Browser, Animation as PopupAnimation } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getUniqueID, formatUnit } from '@syncfusion/ej2-base';\nimport { attributes, createElement, closest, removeClass, addClass, remove } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Complex } from '@syncfusion/ej2-base';\nimport { Popup } from '../popup/popup';\nimport { calculatePosition } from '../common/position';\nimport { isCollide, fit } from '../common/collision';\nvar TOUCHEND_HIDE_DELAY = 1500;\nvar TAPHOLD_THRESHOLD = 500;\nvar SHOW_POINTER_TIP_GAP = 0;\nvar HIDE_POINTER_TIP_GAP = 8;\nvar MOUSE_TRAIL_GAP = 2;\nvar POINTER_ADJUST = 2;\nvar ROOT = 'e-tooltip';\nvar RTL = 'e-rtl';\nvar DEVICE = 'e-bigger';\nvar ICON = 'e-icons';\nvar CLOSE = 'e-tooltip-close';\nvar TOOLTIP_WRAP = 'e-tooltip-wrap';\nvar CONTENT = 'e-tip-content';\nvar ARROW_TIP = 'e-arrow-tip';\nvar ARROW_TIP_OUTER = 'e-arrow-tip-outer';\nvar ARROW_TIP_INNER = 'e-arrow-tip-inner';\nvar TIP_BOTTOM = 'e-tip-bottom';\nvar TIP_TOP = 'e-tip-top';\nvar TIP_LEFT = 'e-tip-left';\nvar TIP_RIGHT = 'e-tip-right';\nvar POPUP_ROOT = 'e-popup';\nvar POPUP_OPEN = 'e-popup-open';\nvar POPUP_CLOSE = 'e-popup-close';\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property({ effect: 'FadeIn', duration: 150, delay: 0 })\n ], Animation.prototype, \"open\", void 0);\n __decorate([\n Property({ effect: 'FadeOut', duration: 150, delay: 0 })\n ], Animation.prototype, \"close\", void 0);\n return Animation;\n}(ChildProperty));\nexport { Animation };\n/**\n * Represents the Tooltip component that displays a piece of information about the target element on mouse hover.\n * ```html\n *
Show Tooltip
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Tooltip = /** @class */ (function (_super) {\n __extends(Tooltip, _super);\n /**\n * Constructor for creating the Tooltip Component\n */\n function Tooltip(options, element) {\n return _super.call(this, options, element) || this;\n }\n Tooltip.prototype.initialize = function () {\n this.formatPosition();\n addClass([this.element], ROOT);\n };\n Tooltip.prototype.formatPosition = function () {\n if (this.position.indexOf('Top') === 0 || this.position.indexOf('Bottom') === 0) {\n _a = this.position.split(/(?=[A-Z])/), this.tooltipPositionY = _a[0], this.tooltipPositionX = _a[1];\n }\n else {\n _b = this.position.split(/(?=[A-Z])/), this.tooltipPositionX = _b[0], this.tooltipPositionY = _b[1];\n }\n var _a, _b;\n };\n Tooltip.prototype.renderArrow = function () {\n this.setTipClass(this.position);\n var tip = createElement('div', { className: ARROW_TIP + ' ' + this.tipClass });\n tip.appendChild(createElement('div', { className: ARROW_TIP_OUTER + ' ' + this.tipClass }));\n tip.appendChild(createElement('div', { className: ARROW_TIP_INNER + ' ' + this.tipClass }));\n this.tooltipEle.appendChild(tip);\n };\n Tooltip.prototype.setTipClass = function (position) {\n if (position.indexOf('Right') === 0) {\n this.tipClass = TIP_LEFT;\n }\n else if (position.indexOf('Bottom') === 0) {\n this.tipClass = TIP_TOP;\n }\n else if (position.indexOf('Left') === 0) {\n this.tipClass = TIP_RIGHT;\n }\n else {\n this.tipClass = TIP_BOTTOM;\n }\n };\n Tooltip.prototype.renderPopup = function (target) {\n var elePos = this.mouseTrail ? { top: 0, left: 0 } : this.getTooltipPosition(target);\n this.popupObj = new Popup(this.tooltipEle, {\n height: this.height,\n width: this.width,\n position: {\n X: elePos.left,\n Y: elePos.top\n },\n enableRtl: this.enableRtl,\n open: this.openPopupHandler.bind(this),\n close: this.closePopupHandler.bind(this)\n });\n };\n Tooltip.prototype.getTooltipPosition = function (target) {\n var pos = calculatePosition(target, this.tooltipPositionX, this.tooltipPositionY);\n var offsetPos = this.calculateTooltipOffset(this.position);\n var elePos = this.collisionFlipFit(target, pos.left + offsetPos.left, pos.top + offsetPos.top);\n return elePos;\n };\n Tooltip.prototype.reposition = function (target) {\n var elePos = this.getTooltipPosition(target);\n this.popupObj.position = { X: elePos.left, Y: elePos.top };\n this.popupObj.dataBind();\n };\n Tooltip.prototype.openPopupHandler = function () {\n this.trigger('afterOpen', this.tooltipEventArgs);\n };\n Tooltip.prototype.closePopupHandler = function () {\n this.clear();\n this.trigger('afterClose', this.tooltipEventArgs);\n };\n Tooltip.prototype.calculateTooltipOffset = function (position) {\n var pos = { top: 0, left: 0 };\n var tooltipEleWidth = this.tooltipEle.offsetWidth;\n var tooltipEleHeight = this.tooltipEle.offsetHeight;\n var arrowEle = this.tooltipEle.querySelector('.' + ARROW_TIP);\n var tipWidth = arrowEle ? arrowEle.offsetWidth : 0;\n var tipHeight = arrowEle ? arrowEle.offsetHeight : 0;\n var tipAdjust = (this.showTipPointer ? SHOW_POINTER_TIP_GAP : HIDE_POINTER_TIP_GAP);\n var tipHeightAdjust = (tipHeight / 2) + POINTER_ADJUST + (this.tooltipEle.offsetHeight - this.tooltipEle.clientHeight);\n var tipWidthAdjust = (tipWidth / 2) + POINTER_ADJUST + (this.tooltipEle.offsetWidth - this.tooltipEle.clientWidth);\n if (this.mouseTrail) {\n tipAdjust += MOUSE_TRAIL_GAP;\n }\n switch (position) {\n case 'RightTop':\n pos.left += tipWidth + tipAdjust;\n pos.top -= tooltipEleHeight - tipHeightAdjust;\n break;\n case 'RightCenter':\n pos.left += tipWidth + tipAdjust;\n pos.top -= (tooltipEleHeight / 2);\n break;\n case 'RightBottom':\n pos.left += tipWidth + tipAdjust;\n pos.top -= (tipHeightAdjust);\n break;\n case 'BottomRight':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tipWidthAdjust);\n break;\n case 'BottomCenter':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth / 2);\n break;\n case 'BottomLeft':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth - tipWidthAdjust);\n break;\n case 'LeftBottom':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tipHeightAdjust);\n break;\n case 'LeftCenter':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tooltipEleHeight / 2);\n break;\n case 'LeftTop':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tooltipEleHeight - tipHeightAdjust);\n break;\n case 'TopLeft':\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth - tipWidthAdjust);\n break;\n case 'TopRight':\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tipWidthAdjust);\n break;\n default:\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth / 2);\n break;\n }\n pos.left += this.offsetX;\n pos.top += this.offsetY;\n return pos;\n };\n Tooltip.prototype.updateTipPosition = function (position) {\n var selEle = this.tooltipEle.querySelectorAll('.' + ARROW_TIP + ',.' + ARROW_TIP_OUTER + ',.' + ARROW_TIP_INNER);\n var removeList = [TIP_BOTTOM, TIP_TOP, TIP_LEFT, TIP_RIGHT];\n removeClass(selEle, removeList);\n this.setTipClass(position);\n addClass(selEle, this.tipClass);\n };\n Tooltip.prototype.adjustArrow = function (target, position, tooltipPositionX, tooltipPositionY) {\n if (this.showTipPointer === false) {\n return;\n }\n this.updateTipPosition(position);\n var leftValue;\n var topValue;\n var tooltipWidth = this.tooltipEle.clientWidth;\n var tooltipHeight = this.tooltipEle.clientHeight;\n var arrowEle = this.tooltipEle.querySelector('.' + ARROW_TIP);\n var arrowInnerELe = this.tooltipEle.querySelector('.' + ARROW_TIP_INNER);\n var tipWidth = arrowEle.offsetWidth;\n var tipHeight = arrowEle.offsetHeight;\n if (this.tipClass === TIP_BOTTOM || this.tipClass === TIP_TOP) {\n if (this.tipClass === TIP_BOTTOM) {\n topValue = '99.9%';\n // Arrow icon aligned -2px height from ArrowOuterTip div\n arrowInnerELe.style.top = '-' + (tipHeight - 2) + 'px';\n }\n else {\n topValue = -(tipHeight - 1) + 'px';\n // Arrow icon aligned -6px height from ArrowOuterTip div\n arrowInnerELe.style.top = '-' + (tipHeight - 6) + 'px';\n }\n var tipPosExclude = tooltipPositionX !== 'Center' || (tooltipWidth > target.offsetWidth) || this.mouseTrail;\n if ((tipPosExclude && tooltipPositionX === 'Left') || (!tipPosExclude && this.tipPointerPosition === 'End')) {\n leftValue = (tooltipWidth - tipWidth - POINTER_ADJUST) + 'px';\n }\n else if ((tipPosExclude && tooltipPositionX === 'Right') || (!tipPosExclude && this.tipPointerPosition === 'Start')) {\n leftValue = POINTER_ADJUST + 'px';\n }\n else {\n leftValue = ((tooltipWidth / 2) - (tipWidth / 2)) + 'px';\n }\n }\n else {\n if (this.tipClass === TIP_RIGHT) {\n leftValue = '99.9%';\n // Arrow icon aligned -2px left from ArrowOuterTip div\n arrowInnerELe.style.left = '-' + (tipWidth - 2) + 'px';\n }\n else {\n leftValue = -(tipWidth - 1) + 'px';\n // Arrow icon aligned -2px from ArrowOuterTip width\n arrowInnerELe.style.left = (-(tipWidth) + (tipWidth - 2)) + 'px';\n }\n var tipPosExclude = tooltipPositionY !== 'Center' || (tooltipHeight > target.offsetHeight) || this.mouseTrail;\n if ((tipPosExclude && tooltipPositionY === 'Top') || (!tipPosExclude && this.tipPointerPosition === 'End')) {\n topValue = (tooltipHeight - tipHeight - POINTER_ADJUST) + 'px';\n }\n else if ((tipPosExclude && tooltipPositionY === 'Bottom') || (!tipPosExclude && this.tipPointerPosition === 'Start')) {\n topValue = POINTER_ADJUST + 'px';\n }\n else {\n topValue = ((tooltipHeight / 2) - (tipHeight / 2)) + 'px';\n }\n }\n arrowEle.style.top = topValue;\n arrowEle.style.left = leftValue;\n };\n Tooltip.prototype.renderContent = function (target) {\n var tooltipContent = this.tooltipEle.querySelector('.' + CONTENT);\n if (target && !isNullOrUndefined(target.getAttribute('title'))) {\n target.setAttribute('data-content', target.getAttribute('title'));\n target.removeAttribute('title');\n }\n if (!isNullOrUndefined(this.content)) {\n if (typeof (this.content) === 'string') {\n tooltipContent.innerHTML = this.content;\n }\n else {\n while (tooltipContent.firstChild) {\n tooltipContent.removeChild(tooltipContent.firstChild);\n }\n tooltipContent.appendChild(this.content);\n }\n }\n else {\n if (target && !isNullOrUndefined(target.getAttribute('data-content'))) {\n tooltipContent.innerHTML = target.getAttribute('data-content');\n }\n }\n };\n Tooltip.prototype.renderCloseIcon = function () {\n if (!this.isSticky) {\n return;\n }\n var tipClose = createElement('div', { className: ICON + ' ' + CLOSE });\n this.tooltipEle.appendChild(tipClose);\n EventHandler.add(tipClose, Browser.touchStartEvent, this.onStickyClose, this);\n };\n Tooltip.prototype.addDescribedBy = function (target, id) {\n var describedby = (target.getAttribute('aria-describedby') || '').split(/\\s+/);\n if (describedby.indexOf(id) < 0) {\n describedby.push(id);\n }\n attributes(target, { 'aria-describedby': describedby.join(' ').trim(), 'data-tooltip-id': id });\n };\n Tooltip.prototype.removeDescribedBy = function (target) {\n var id = target.getAttribute('data-tooltip-id');\n var describedby = (target.getAttribute('aria-describedby') || '').split(/\\s+/);\n var index = describedby.indexOf(id);\n if (index !== -1) {\n describedby.splice(index, 1);\n }\n target.removeAttribute('data-tooltip-id');\n var orgdescribedby = describedby.join(' ').trim();\n if (orgdescribedby) {\n target.setAttribute('aria-describedby', orgdescribedby);\n }\n else {\n target.removeAttribute('aria-describedby');\n }\n };\n Tooltip.prototype.tapHoldHandler = function (evt) {\n clearTimeout(this.autoCloseTimer);\n this.targetHover(evt.originalEvent);\n };\n Tooltip.prototype.touchEndHandler = function (e) {\n var _this = this;\n if (this.isSticky) {\n return;\n }\n var close = function () {\n _this.close();\n };\n this.autoCloseTimer = setTimeout(close, TOUCHEND_HIDE_DELAY);\n };\n Tooltip.prototype.targetClick = function (e) {\n var target;\n if (this.target) {\n target = closest(e.target, this.target);\n }\n else {\n target = this.element;\n }\n if (isNullOrUndefined(target)) {\n return;\n }\n if (target.getAttribute('data-tooltip-id') === null) {\n this.targetHover(e);\n }\n else if (!this.isSticky) {\n this.hideTooltip(this.animation.close, e, target);\n }\n };\n Tooltip.prototype.targetHover = function (e) {\n var target;\n if (this.target) {\n target = closest(e.target, this.target);\n }\n else {\n target = this.element;\n }\n if (isNullOrUndefined(target) || target.getAttribute('data-tooltip-id') !== null) {\n return;\n }\n var targetList = [].slice.call(document.querySelectorAll('[data-tooltip-id= ' + this.ctrlId + '_content]'));\n for (var _i = 0, targetList_1 = targetList; _i < targetList_1.length; _i++) {\n var target_1 = targetList_1[_i];\n this.restoreElement(target_1);\n }\n this.showTooltip(target, this.animation.open, e);\n this.wireMouseEvents(e, target);\n };\n Tooltip.prototype.showTooltip = function (target, showAnimation, e) {\n var _this = this;\n clearTimeout(this.showTimer);\n clearTimeout(this.hideTimer);\n this.tooltipEventArgs = e ? { type: e.type, cancel: false, target: target, event: e, element: this.tooltipEle } :\n { type: null, cancel: false, target: target, event: null, element: this.tooltipEle };\n this.trigger('beforeRender', this.tooltipEventArgs);\n if (this.tooltipEventArgs.cancel) {\n this.isHidden = true;\n this.clear();\n return;\n }\n this.isHidden = false;\n if (isNullOrUndefined(this.tooltipEle)) {\n this.ctrlId = this.element.getAttribute('id') ? getUniqueID(this.element.getAttribute('id')) : getUniqueID('tooltip');\n this.tooltipEle = createElement('div', {\n className: TOOLTIP_WRAP + ' ' + POPUP_ROOT, attrs: {\n role: 'tooltip', 'aria-hidden': 'false', 'id': this.ctrlId + '_content'\n }, styles: 'width:' + formatUnit(this.width) + ';height:' + formatUnit(this.height) + ';position:absolute;'\n });\n if (this.cssClass) {\n addClass([this.tooltipEle], this.cssClass.split(' '));\n }\n if (Browser.isDevice) {\n addClass([this.tooltipEle], DEVICE);\n }\n if (this.width !== 'auto') {\n this.tooltipEle.style.maxWidth = formatUnit(this.width);\n }\n this.tooltipEle.appendChild(createElement('div', { className: CONTENT }));\n document.body.appendChild(this.tooltipEle);\n this.addDescribedBy(target, this.ctrlId + '_content');\n this.renderContent(target);\n addClass([this.tooltipEle], POPUP_OPEN);\n if (this.showTipPointer) {\n this.renderArrow();\n }\n this.renderCloseIcon();\n this.renderPopup(target);\n }\n else {\n this.adjustArrow(target, this.position, this.tooltipPositionX, this.tooltipPositionY);\n this.addDescribedBy(target, this.ctrlId + '_content');\n this.renderContent(target);\n PopupAnimation.stop(this.tooltipEle);\n this.reposition(target);\n }\n removeClass([this.tooltipEle], POPUP_OPEN);\n addClass([this.tooltipEle], POPUP_CLOSE);\n this.tooltipEventArgs = e ? { type: e.type, cancel: false, target: target, event: e, element: this.tooltipEle } :\n { type: null, cancel: false, target: target, event: null, element: this.tooltipEle };\n this.trigger('beforeOpen', this.tooltipEventArgs);\n if (this.tooltipEventArgs.cancel) {\n this.isHidden = true;\n this.clear();\n return;\n }\n var openAnimation = {\n name: showAnimation.effect, duration: showAnimation.duration, delay: showAnimation.delay, timingFunction: 'easeOut'\n };\n if (showAnimation.effect === 'None') {\n openAnimation = undefined;\n }\n if (this.openDelay > 0) {\n var show = function () {\n if (_this.popupObj) {\n _this.popupObj.show(openAnimation);\n }\n };\n this.showTimer = setTimeout(show, this.openDelay);\n }\n else {\n this.popupObj.show(openAnimation);\n }\n };\n Tooltip.prototype.checkCollision = function (target, x, y) {\n var elePos = {\n left: x, top: y, position: this.position,\n horizontal: this.tooltipPositionX, vertical: this.tooltipPositionY\n };\n var affectedPos = isCollide(this.tooltipEle, (this.target ? this.element : null), x, y);\n if (affectedPos.length > 0) {\n elePos.horizontal = affectedPos.indexOf('left') >= 0 ? 'Right' : affectedPos.indexOf('right') >= 0 ? 'Left' :\n this.tooltipPositionX;\n elePos.vertical = affectedPos.indexOf('top') >= 0 ? 'Bottom' : affectedPos.indexOf('bottom') >= 0 ? 'Top' :\n this.tooltipPositionY;\n }\n return elePos;\n };\n Tooltip.prototype.collisionFlipFit = function (target, x, y) {\n var elePos = this.checkCollision(target, x, y);\n var newpos = elePos.position;\n if (this.tooltipPositionY !== elePos.vertical) {\n newpos = ((this.position.indexOf('Bottom') === 0 || this.position.indexOf('Top') === 0) ?\n elePos.vertical + this.tooltipPositionX : this.tooltipPositionX + elePos.vertical);\n }\n if (this.tooltipPositionX !== elePos.horizontal) {\n if (newpos.indexOf('Left') === 0) {\n elePos.vertical = (newpos === 'LeftTop' || newpos === 'LeftCenter') ? 'Top' : 'Bottom';\n newpos = (elePos.vertical + 'Left');\n }\n if (newpos.indexOf('Right') === 0) {\n elePos.vertical = (newpos === 'RightTop' || newpos === 'RightCenter') ? 'Top' : 'Bottom';\n newpos = (elePos.vertical + 'Right');\n }\n elePos.horizontal = this.tooltipPositionX;\n }\n this.tooltipEventArgs = {\n type: null, cancel: false, target: target, event: null,\n element: this.tooltipEle, collidedPosition: newpos\n };\n this.trigger('beforeCollision', this.tooltipEventArgs);\n if (elePos.position !== newpos) {\n var pos = calculatePosition(target, this.tooltipPositionX, elePos.vertical);\n this.adjustArrow(target, newpos, elePos.horizontal, elePos.vertical);\n var offsetPos = this.calculateTooltipOffset(newpos);\n elePos.position = newpos;\n elePos.left = pos.left + offsetPos.left;\n elePos.top = pos.top + offsetPos.top;\n }\n else {\n this.adjustArrow(target, newpos, elePos.horizontal, elePos.vertical);\n }\n var eleOffset = { left: elePos.left, top: elePos.top };\n var left = fit(this.tooltipEle, (this.target ? this.element : null), { X: true, Y: false }, eleOffset).left;\n if (this.showTipPointer && (newpos.indexOf('Bottom') === 0 || newpos.indexOf('Top') === 0)) {\n var arrowEle = this.tooltipEle.querySelector('.' + ARROW_TIP);\n var arrowleft = parseInt(arrowEle.style.left, 10) - (left - elePos.left);\n if (arrowleft < 0) {\n arrowleft = 0;\n }\n else if ((arrowleft + arrowEle.offsetWidth) > this.tooltipEle.clientWidth) {\n arrowleft = this.tooltipEle.clientWidth - arrowEle.offsetWidth;\n }\n arrowEle.style.left = arrowleft.toString() + 'px';\n }\n eleOffset.left = left;\n return eleOffset;\n };\n Tooltip.prototype.hideTooltip = function (hideAnimation, e, targetElement) {\n var _this = this;\n var target;\n if (e) {\n target = this.target ? (targetElement || e.target) : this.element;\n this.tooltipEventArgs = {\n type: e.type, cancel: false, target: target, event: e, element: this.tooltipEle\n };\n }\n else {\n target = document.querySelector('[data-tooltip-id= ' + this.ctrlId + '_content]');\n this.tooltipEventArgs = {\n type: null, cancel: false, target: target, event: null, element: this.tooltipEle\n };\n }\n if (isNullOrUndefined(target)) {\n return;\n }\n this.trigger('beforeClose', this.tooltipEventArgs);\n if (!this.tooltipEventArgs.cancel) {\n this.restoreElement(target);\n this.isHidden = true;\n var closeAnimation_1 = {\n name: hideAnimation.effect, duration: hideAnimation.duration, delay: hideAnimation.delay, timingFunction: 'easeIn'\n };\n if (hideAnimation.effect === 'None') {\n closeAnimation_1 = undefined;\n }\n if (this.closeDelay > 0) {\n var hide = function () {\n if (_this.popupObj) {\n _this.popupObj.hide(closeAnimation_1);\n }\n };\n this.hideTimer = setTimeout(hide, this.closeDelay);\n }\n else {\n this.popupObj.hide(closeAnimation_1);\n }\n }\n else {\n this.isHidden = false;\n }\n };\n Tooltip.prototype.restoreElement = function (target) {\n this.unwireMouseEvents(target);\n if (!isNullOrUndefined(target.getAttribute('data-content'))) {\n target.setAttribute('title', target.getAttribute('data-content'));\n target.removeAttribute('data-content');\n }\n this.removeDescribedBy(target);\n };\n Tooltip.prototype.clear = function () {\n if (this.tooltipEle) {\n removeClass([this.tooltipEle], POPUP_CLOSE);\n addClass([this.tooltipEle], POPUP_OPEN);\n }\n if (this.isHidden) {\n if (this.popupObj) {\n this.popupObj.destroy();\n }\n if (this.tooltipEle) {\n remove(this.tooltipEle);\n }\n this.tooltipEle = null;\n this.popupObj = null;\n }\n };\n Tooltip.prototype.onMouseOut = function (e) {\n this.hideTooltip(this.animation.close, e);\n };\n Tooltip.prototype.onStickyClose = function (e) {\n this.close();\n };\n Tooltip.prototype.onMouseMove = function (event) {\n var eventPageX = 0;\n var eventPageY = 0;\n if (event.type.indexOf('touch') > -1) {\n event.preventDefault();\n eventPageX = event.touches[0].pageX;\n eventPageY = event.touches[0].pageY;\n }\n else {\n eventPageX = event.pageX;\n eventPageY = event.pageY;\n }\n PopupAnimation.stop(this.tooltipEle);\n removeClass([this.tooltipEle], POPUP_CLOSE);\n addClass([this.tooltipEle], POPUP_OPEN);\n this.adjustArrow(event.target, this.position, this.tooltipPositionX, this.tooltipPositionY);\n var pos = this.calculateTooltipOffset(this.position);\n var x = eventPageX + pos.left + this.offsetX;\n var y = eventPageY + pos.top + this.offsetY;\n var elePos = this.checkCollision(event.target, x, y);\n if (this.tooltipPositionX !== elePos.horizontal || this.tooltipPositionY !== elePos.vertical) {\n var newpos = (this.position.indexOf('Bottom') === 0 || this.position.indexOf('Top') === 0) ?\n elePos.vertical + elePos.horizontal : elePos.horizontal + elePos.vertical;\n elePos.position = newpos;\n this.adjustArrow(event.target, elePos.position, elePos.horizontal, elePos.vertical);\n var colpos = this.calculateTooltipOffset(elePos.position);\n elePos.left = eventPageX + colpos.left - this.offsetX;\n elePos.top = eventPageY + colpos.top - this.offsetY;\n }\n this.tooltipEle.style.left = elePos.left + 'px';\n this.tooltipEle.style.top = elePos.top + 'px';\n };\n Tooltip.prototype.keyDown = function (event) {\n if (this.tooltipEle && event.keyCode === 27) {\n this.close();\n }\n };\n Tooltip.prototype.touchEnd = function (e) {\n if (this.tooltipEle && closest(e.target, '.' + ROOT) === null) {\n this.close();\n }\n };\n Tooltip.prototype.scrollHandler = function (e) {\n if (this.tooltipEle) {\n this.close();\n }\n };\n /**\n * Core method that initializes the control rendering.\n * @private\n */\n Tooltip.prototype.render = function () {\n this.initialize();\n this.wireEvents(this.opensOn);\n };\n /**\n * Initializes the values of private members.\n * @private\n */\n Tooltip.prototype.preRender = function () {\n this.tipClass = TIP_BOTTOM;\n this.tooltipPositionX = 'Center';\n this.tooltipPositionY = 'Top';\n this.isHidden = true;\n };\n /**\n * Binding events to the Tooltip element.\n * @hidden\n */\n Tooltip.prototype.wireEvents = function (trigger) {\n var triggerList = this.getTriggerList(trigger);\n for (var _i = 0, triggerList_1 = triggerList; _i < triggerList_1.length; _i++) {\n var opensOn = triggerList_1[_i];\n if (opensOn === 'Custom') {\n return;\n }\n if (opensOn === 'Focus') {\n this.wireFocusEvents();\n }\n if (opensOn === 'Click') {\n EventHandler.add(this.element, Browser.touchStartEvent, this.targetClick, this);\n }\n if (opensOn === 'Hover') {\n if (Browser.isDevice) {\n this.touchModule = new Touch(this.element, {\n tapHoldThreshold: TAPHOLD_THRESHOLD,\n tapHold: this.tapHoldHandler.bind(this)\n });\n EventHandler.add(this.element, Browser.touchEndEvent, this.touchEndHandler, this);\n }\n else {\n EventHandler.add(this.element, 'mouseover', this.targetHover, this);\n }\n }\n }\n EventHandler.add(document, 'touchend', this.touchEnd, this);\n EventHandler.add(document, 'scroll', this.scrollHandler, this);\n EventHandler.add(document, 'keydown', this.keyDown, this);\n };\n Tooltip.prototype.getTriggerList = function (trigger) {\n if (trigger === 'Auto') {\n trigger = (Browser.isDevice) ? 'Hover' : 'Hover Focus';\n }\n return trigger.split(' ');\n };\n Tooltip.prototype.wireFocusEvents = function () {\n if (!isNullOrUndefined(this.target)) {\n var targetList = [].slice.call(this.element.querySelectorAll(this.target));\n for (var _i = 0, targetList_2 = targetList; _i < targetList_2.length; _i++) {\n var target = targetList_2[_i];\n EventHandler.add(target, 'focus', this.targetHover, this);\n }\n }\n else {\n EventHandler.add(this.element, 'focus', this.targetHover, this);\n }\n };\n Tooltip.prototype.wireMouseEvents = function (e, target) {\n if (this.tooltipEle) {\n if (!this.isSticky) {\n if (e.type === 'focus') {\n EventHandler.add(target, 'blur', this.onMouseOut, this);\n }\n if (e.type === 'mouseover') {\n EventHandler.add(target, 'mouseleave', this.onMouseOut, this);\n }\n }\n if (this.mouseTrail) {\n EventHandler.add(target, 'mousemove touchstart mouseenter', this.onMouseMove, this);\n }\n }\n };\n /**\n * Unbinding events from the element on widget destroy.\n * @hidden\n */\n Tooltip.prototype.unwireEvents = function (trigger) {\n var triggerList = this.getTriggerList(trigger);\n for (var _i = 0, triggerList_2 = triggerList; _i < triggerList_2.length; _i++) {\n var opensOn = triggerList_2[_i];\n if (opensOn === 'Custom') {\n return;\n }\n if (opensOn === 'Focus') {\n this.unwireFocusEvents();\n }\n if (opensOn === 'Click') {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.targetClick);\n }\n if (opensOn === 'Hover') {\n if (Browser.isDevice) {\n if (this.touchModule) {\n this.touchModule.destroy();\n }\n EventHandler.remove(this.element, Browser.touchEndEvent, this.touchEndHandler);\n }\n else {\n EventHandler.remove(this.element, 'mouseover', this.targetHover);\n }\n }\n }\n EventHandler.remove(document, 'touchend', this.touchEnd);\n EventHandler.remove(document, 'scroll', this.scrollHandler);\n EventHandler.remove(document, 'keydown', this.keyDown);\n };\n Tooltip.prototype.unwireFocusEvents = function () {\n if (!isNullOrUndefined(this.target)) {\n var targetList = [].slice.call(this.element.querySelectorAll(this.target));\n for (var _i = 0, targetList_3 = targetList; _i < targetList_3.length; _i++) {\n var target = targetList_3[_i];\n EventHandler.remove(target, 'focus', this.targetHover);\n }\n }\n else {\n EventHandler.remove(this.element, 'focus', this.targetHover);\n }\n };\n Tooltip.prototype.unwireMouseEvents = function (target) {\n if (!this.isSticky) {\n var triggerList = this.getTriggerList(this.opensOn);\n for (var _i = 0, triggerList_3 = triggerList; _i < triggerList_3.length; _i++) {\n var opensOn = triggerList_3[_i];\n if (opensOn === 'Focus') {\n EventHandler.remove(target, 'blur', this.onMouseOut);\n }\n if (opensOn === 'Hover' && !Browser.isDevice) {\n EventHandler.remove(target, 'mouseleave', this.onMouseOut);\n }\n }\n }\n if (this.mouseTrail) {\n EventHandler.remove(target, 'mousemove touchstart mouseenter', this.onMouseMove);\n }\n };\n /**\n * Core method to return the component name.\n * @private\n */\n Tooltip.prototype.getModuleName = function () {\n return 'tooltip';\n };\n /**\n * Returns the properties to be maintained in the persisted state.\n * @private\n */\n Tooltip.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Called internally, if any of the property value changed.\n * @private\n */\n Tooltip.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n if (this.tooltipEle) {\n this.tooltipEle.style.width = formatUnit(newProp.width);\n }\n break;\n case 'height':\n if (this.tooltipEle) {\n this.tooltipEle.style.height = formatUnit(newProp.height);\n }\n break;\n case 'content':\n if (this.tooltipEle) {\n this.renderContent();\n }\n break;\n case 'opensOn':\n this.unwireEvents(oldProp.opensOn);\n this.wireEvents(newProp.opensOn);\n break;\n case 'position':\n this.formatPosition();\n var target = document.querySelector('[data-tooltip-id= ' + this.ctrlId + '_content]');\n if (this.tooltipEle && target) {\n var arrowInnerELe = this.tooltipEle.querySelector('.' + ARROW_TIP_INNER);\n arrowInnerELe.style.top = arrowInnerELe.style.left = null;\n this.reposition(target);\n }\n break;\n case 'tipPointerPosition':\n var trgt = document.querySelector('[data-tooltip-id= ' + this.ctrlId + '_content]');\n if (this.tooltipEle && trgt) {\n this.reposition(trgt);\n }\n break;\n case 'offsetX':\n if (this.tooltipEle) {\n var x = newProp.offsetX - oldProp.offsetX;\n this.tooltipEle.style.left = (parseInt(this.tooltipEle.style.left, 10) + (x)).toString() + 'px';\n }\n break;\n case 'offsetY':\n if (this.tooltipEle) {\n var y = newProp.offsetY - oldProp.offsetY;\n this.tooltipEle.style.top = (parseInt(this.tooltipEle.style.top, 10) + (y)).toString() + 'px';\n }\n break;\n case 'cssClass':\n if (this.tooltipEle) {\n if (oldProp.cssClass) {\n removeClass([this.tooltipEle], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.tooltipEle], newProp.cssClass.split(' '));\n }\n }\n break;\n case 'enableRtl':\n if (this.tooltipEle) {\n if (this.enableRtl) {\n addClass([this.tooltipEle], RTL);\n }\n else {\n removeClass([this.tooltipEle], RTL);\n }\n }\n break;\n }\n }\n };\n /**\n * It is used to show the Tooltip on the specified target with specific animation settings.\n * @param element Target element where the Tooltip is to be displayed.\n * @param animation Sets the specific animation, while showing the Tooltip on the screen.\n * @return {void}\n */\n Tooltip.prototype.open = function (element, animation) {\n if (animation === void 0) { animation = this.animation.open; }\n if (element.style.display === 'none') {\n return;\n }\n this.showTooltip(element, animation);\n };\n /**\n * It is used to hide the Tooltip with specific animation effect.\n * @param animation Sets the specific animation when hiding Tooltip from the screen.\n * @return {void}\n */\n Tooltip.prototype.close = function (animation) {\n if (animation === void 0) { animation = this.animation.close; }\n this.hideTooltip(animation);\n };\n /**\n * It is used to refresh the Tooltip content and its position.\n * @param target Target element where the Tooltip content or position needs to be refreshed.\n * @return {void}\n */\n Tooltip.prototype.refresh = function (target) {\n if (this.tooltipEle) {\n this.renderContent(target);\n }\n if (this.popupObj && target) {\n this.reposition(target);\n }\n };\n /**\n * It is used to destroy the Tooltip component.\n * @method destroy\n * @return {void}\n * @memberof Tooltip\n */\n Tooltip.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n removeClass([this.element], ROOT);\n this.unwireEvents(this.opensOn);\n if (this.popupObj) {\n this.popupObj.destroy();\n }\n if (this.tooltipEle) {\n remove(this.tooltipEle);\n }\n this.tooltipEle = null;\n this.popupObj = null;\n };\n __decorate([\n Property('auto')\n ], Tooltip.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Tooltip.prototype, \"height\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"content\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"target\", void 0);\n __decorate([\n Property('TopCenter')\n ], Tooltip.prototype, \"position\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"offsetX\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"offsetY\", void 0);\n __decorate([\n Property(true)\n ], Tooltip.prototype, \"showTipPointer\", void 0);\n __decorate([\n Property('Auto')\n ], Tooltip.prototype, \"tipPointerPosition\", void 0);\n __decorate([\n Property('Auto')\n ], Tooltip.prototype, \"opensOn\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"mouseTrail\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"isSticky\", void 0);\n __decorate([\n Complex({}, Animation)\n ], Tooltip.prototype, \"animation\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"openDelay\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"closeDelay\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"enableRtl\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeRender\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"afterOpen\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"afterClose\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeCollision\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"destroyed\", void 0);\n Tooltip = __decorate([\n NotifyPropertyChanges\n ], Tooltip);\n return Tooltip;\n}(Component));\nexport { Tooltip };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event, Browser, L10n } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { createElement, attributes, addClass, removeClass, setStyleAttribute, detach } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue, formatUnit, setValue, merge } from '@syncfusion/ej2-base';\nimport { Internationalization, getNumericObject } from '@syncfusion/ej2-base';\nimport { Input } from '../input/input';\nvar ROOT = 'e-control-wrapper e-numeric';\nvar SPINICON = 'e-input-group-icon';\nvar SPINUP = 'e-spin-up';\nvar SPINDOWN = 'e-spin-down';\nvar ERROR = 'e-error';\nvar INCREMENT = 'increment';\nvar DECREMENT = 'decrement';\nvar INTREGEXP = new RegExp('/^(-)?(\\d*)$/');\nvar DECIMALSEPARATOR = '.';\n/**\n * Represents the NumericTextBox component that allows the user to enter only numeric values.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar NumericTextBox = /** @class */ (function (_super) {\n __extends(NumericTextBox, _super);\n function NumericTextBox(options, element) {\n return _super.call(this, options, element) || this;\n }\n NumericTextBox.prototype.preRender = function () {\n this.isPrevFocused = false;\n this.decimalSeparator = '.';\n this.intRegExp = new RegExp('/^(-)?(\\d*)$/');\n this.isCalled = false;\n var ejInstance = getValue('ej2_instances', this.element);\n this.cloneElement = this.element.cloneNode(true);\n this.angularTagName = null;\n if (this.element.tagName === 'EJS-NUMERICTEXTBOX') {\n this.angularTagName = this.element.tagName;\n var input = createElement('input');\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n input.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n input.innerHTML = this.element.innerHTML;\n }\n if (this.element.hasAttribute('id')) {\n this.element.removeAttribute('id');\n }\n this.element.classList.remove('e-control', 'e-numerictextbox');\n this.element.classList.add('e-numeric-container');\n this.element.appendChild(input);\n this.element = input;\n setValue('ej2_instances', ejInstance, this.element);\n }\n attributes(this.element, { 'role': 'spinbutton', 'tabindex': '0', 'autocomplete': 'off', 'aria-live': 'assertive' });\n var localeText = { incrementTitle: 'Increment value', decrementTitle: 'Decrement value', placeholder: '' };\n this.l10n = new L10n('numerictextbox', localeText, this.locale);\n this.isValidState = true;\n this.inputStyle = null;\n this.inputName = null;\n this.cultureInfo = {};\n this.initCultureInfo();\n this.initCultureFunc();\n this.checkAttributes();\n this.prevValue = this.value;\n this.validateMinMax();\n this.validateStep();\n if (this.placeholder === null) {\n this.updatePlaceholder();\n }\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n NumericTextBox.prototype.render = function () {\n if (this.element.tagName.toLowerCase() === 'input') {\n this.createWrapper();\n if (this.showSpinButton) {\n this.spinBtnCreation();\n }\n if (!isNullOrUndefined(this.width)) {\n setStyleAttribute(this.container, { 'width': formatUnit(this.width) });\n }\n if (!this.container.classList.contains('e-input-group')) {\n this.container.classList.add('e-input-group');\n }\n this.changeValue(this.value);\n this.wireEvents();\n if (this.value !== null && !isNaN(this.value)) {\n if (this.decimals) {\n this.setProperties({ value: this.roundNumber(this.value, this.decimals) }, true);\n }\n }\n }\n };\n NumericTextBox.prototype.checkAttributes = function () {\n var attributes = ['value', 'min', 'max', 'step', 'disabled', 'readonly', 'style', 'name'];\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n var enabled = this.element.getAttribute(prop) === 'disabled' ||\n this.element.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, true);\n break;\n case 'readonly':\n var readonly = this.element.getAttribute(prop) === 'readonly'\n || this.element.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, true);\n break;\n case 'style':\n this.inputStyle = this.element.getAttribute(prop);\n break;\n case 'name':\n this.inputName = this.element.getAttribute(prop);\n break;\n default:\n var value = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if ((value !== null && !isNaN(value)) || (prop === 'value')) {\n this.setProperties(setValue(prop, value, {}), true);\n }\n break;\n }\n }\n }\n };\n NumericTextBox.prototype.updatePlaceholder = function () {\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n };\n NumericTextBox.prototype.initCultureFunc = function () {\n this.instance = new Internationalization(this.locale);\n };\n NumericTextBox.prototype.initCultureInfo = function () {\n this.cultureInfo.format = this.format;\n if (getValue('currency', this) !== null) {\n setValue('currency', this.currency, this.cultureInfo);\n this.setProperties({ currencyCode: this.currency }, true);\n }\n };\n /* Wrapper creation */\n NumericTextBox.prototype.createWrapper = function () {\n var inputObj = Input.createInput({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: this.cssClass,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n enabled: this.enabled\n }\n });\n this.inputWrapper = inputObj;\n this.container = inputObj.container;\n this.container.setAttribute('class', ROOT + ' ' + this.container.getAttribute('class'));\n if (this.readonly) {\n attributes(this.element, { 'aria-readonly': 'true' });\n }\n this.hiddenInput = (createElement('input', { attrs: { type: 'hidden' } }));\n this.inputName = this.inputName !== null ? this.inputName : this.element.id;\n this.element.removeAttribute('name');\n attributes(this.hiddenInput, { 'name': this.inputName });\n this.container.insertBefore(this.hiddenInput, this.container.childNodes[1]);\n if (this.inputStyle !== null) {\n attributes(this.container, { 'style': this.inputStyle });\n }\n };\n /* Spinner creation */\n NumericTextBox.prototype.spinBtnCreation = function () {\n this.spinDown = Input.appendSpan(SPINICON + ' ' + SPINDOWN, this.container);\n attributes(this.spinDown, {\n 'title': this.l10n.getConstant('decrementTitle'),\n 'aria-label': this.l10n.getConstant('decrementTitle')\n });\n this.spinUp = Input.appendSpan(SPINICON + ' ' + SPINUP, this.container);\n attributes(this.spinUp, {\n 'title': this.l10n.getConstant('incrementTitle'),\n 'aria-label': this.l10n.getConstant('incrementTitle')\n });\n this.wireSpinBtnEvents();\n };\n NumericTextBox.prototype.validateMinMax = function () {\n if (!(typeof (this.min) === 'number' && !isNaN(this.min))) {\n this.setProperties({ min: -(Number.MAX_VALUE) }, true);\n }\n if (!(typeof (this.max) === 'number' && !isNaN(this.max))) {\n this.setProperties({ max: Number.MAX_VALUE }, true);\n }\n if (this.decimals !== null) {\n if (this.min !== -(Number.MAX_VALUE)) {\n this.setProperties({ min: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.min)) }, true);\n }\n if (this.max !== (Number.MAX_VALUE)) {\n this.setProperties({ max: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.max)) }, true);\n }\n }\n this.setProperties({ min: this.min > this.max ? this.max : this.min }, true);\n attributes(this.element, { 'aria-valuemin': this.min.toString(), 'aria-valuemax': this.max.toString() });\n };\n NumericTextBox.prototype.formattedValue = function (decimals, value) {\n return this.instance.getNumberFormat({\n maximumFractionDigits: decimals,\n minimumFractionDigits: decimals, useGrouping: false\n })(value);\n };\n NumericTextBox.prototype.validateStep = function () {\n if (this.decimals !== null) {\n this.setProperties({ step: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.step)) }, true);\n }\n };\n NumericTextBox.prototype.action = function (operation, event) {\n this.isInteract = true;\n var value = this.isFocused ? this.instance.getNumberParser({ format: 'n' })(this.element.value) : this.value;\n this.changeValue(this.performAction(value, this.step, operation));\n this.raiseChangeEvent(event);\n };\n NumericTextBox.prototype.checkErrorClass = function () {\n if (this.isValidState) {\n removeClass([this.container], ERROR);\n }\n else {\n addClass([this.container], ERROR);\n }\n attributes(this.element, { 'aria-invalid': this.isValidState ? 'false' : 'true' });\n };\n NumericTextBox.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n };\n NumericTextBox.prototype.resetHandler = function (e) {\n e.preventDefault();\n if (!(this.inputWrapper.clearButton.classList.contains('e-clear-icon-hide'))) {\n this.clear(e);\n }\n };\n NumericTextBox.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n this.setElementValue('');\n };\n NumericTextBox.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'focus', this.focusIn, this);\n EventHandler.add(this.element, 'blur', this.focusOut, this);\n EventHandler.add(this.element, 'keydown', this.keyDownHandler, this);\n EventHandler.add(this.element, 'keypress', this.keyPressHandler, this);\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n EventHandler.add(this.element, 'paste', this.pasteHandler, this);\n if (this.enabled) {\n this.bindClearEvent();\n }\n };\n NumericTextBox.prototype.wireSpinBtnEvents = function () {\n /* bind spin button events */\n EventHandler.add(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n };\n NumericTextBox.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'focus', this.focusIn);\n EventHandler.remove(this.element, 'blur', this.focusOut);\n EventHandler.remove(this.element, 'keydown', this.keyDownHandler);\n EventHandler.remove(this.element, 'keypress', this.keyPressHandler);\n EventHandler.remove(this.element, 'change', this.changeHandler);\n EventHandler.remove(this.element, 'paste', this.pasteHandler);\n };\n NumericTextBox.prototype.unwireSpinBtnEvents = function () {\n /* unbind spin button events */\n EventHandler.remove(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner);\n EventHandler.remove(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner);\n EventHandler.remove(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n };\n NumericTextBox.prototype.changeHandler = function (event) {\n if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n }\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput, event);\n };\n NumericTextBox.prototype.raiseChangeEvent = function (event) {\n if (this.prevValue !== this.value) {\n var eventArgs = {};\n this.changeEventArgs = { value: this.value, previousValue: this.prevValue, isInteraction: this.isInteract, event: event };\n if (event) {\n this.changeEventArgs.event = event;\n }\n merge(eventArgs, this.changeEventArgs);\n this.prevValue = this.value;\n this.isInteract = false;\n this.trigger('change', eventArgs);\n }\n };\n NumericTextBox.prototype.pasteHandler = function () {\n var _this = this;\n var beforeUpdate = this.element.value;\n setTimeout(function () {\n if (!_this.numericRegex().test(_this.element.value)) {\n _this.setElementValue(beforeUpdate);\n }\n });\n };\n NumericTextBox.prototype.keyDownHandler = function (event) {\n switch (event.keyCode) {\n case 38:\n event.preventDefault();\n this.action(INCREMENT, event);\n break;\n case 40:\n event.preventDefault();\n this.action(DECREMENT, event);\n break;\n default: break;\n }\n if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n this.isKeyDown = true;\n this.updateValue(this.instance.getNumberParser({ format: 'n' })(this.element.value));\n this.isKeyDown = false;\n }\n };\n ;\n NumericTextBox.prototype.performAction = function (value, step, operation) {\n if (value === null || isNaN(value)) {\n value = 0;\n }\n var updatedValue = operation === INCREMENT ? value + step : value - step;\n updatedValue = this.correctRounding(value, step, updatedValue);\n return this.strictMode ? this.trimValue(updatedValue) : updatedValue;\n };\n ;\n NumericTextBox.prototype.correctRounding = function (value, step, result) {\n var floatExp = new RegExp('[,.](.*)');\n var valueText = value.toString();\n var stepText = step.toString();\n var floatValue = floatExp.test(value.toString());\n var floatStep = floatExp.test(step.toString());\n if (floatValue || floatStep) {\n var valueCount = floatValue ? floatExp.exec(value.toString())[0].length : 0;\n var stepCount = floatStep ? floatExp.exec(step.toString())[0].length : 0;\n var max = Math.max(valueCount, stepCount);\n return value = this.roundValue(result, max);\n }\n return result;\n };\n ;\n NumericTextBox.prototype.roundValue = function (result, precision) {\n precision = precision || 0;\n var divide = Math.pow(10, precision);\n return result *= divide, result = Math.round(result) / divide;\n };\n ;\n NumericTextBox.prototype.updateValue = function (value, event) {\n if (event) {\n this.isInteract = true;\n }\n if (value !== null && !isNaN(value)) {\n if (this.decimals) {\n value = this.roundNumber(value, this.decimals);\n }\n }\n this.changeValue(value === null || isNaN(value) ? null : this.strictMode ? this.trimValue(value) : value);\n if (!this.isKeyDown) {\n this.raiseChangeEvent(event);\n }\n };\n NumericTextBox.prototype.updateCurrency = function (prop, propVal) {\n setValue(prop, propVal, this.cultureInfo);\n this.updateValue(this.value);\n };\n NumericTextBox.prototype.changeValue = function (value) {\n if (!(value || value === 0)) {\n value = null;\n this.setProperties({ value: value }, true);\n }\n else {\n var numberOfDecimals = void 0;\n var decimalPart = value.toString().split('.')[1];\n numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n if (this.decimals !== null) {\n numberOfDecimals = numberOfDecimals < this.decimals ? numberOfDecimals : this.decimals;\n }\n this.setProperties({ value: this.roundNumber(value, numberOfDecimals) }, true);\n }\n this.modifyText();\n if (!this.strictMode) {\n this.validateState();\n }\n };\n ;\n NumericTextBox.prototype.modifyText = function () {\n if (this.value || this.value === 0) {\n var value = this.formatNumber();\n var elementValue = this.isFocused ? value : this.instance.getNumberFormat(this.cultureInfo)(this.value);\n this.setElementValue(elementValue);\n attributes(this.element, { 'aria-valuenow': value });\n this.hiddenInput.value = value;\n }\n else {\n this.setElementValue('');\n this.element.removeAttribute('aria-valuenow');\n this.hiddenInput.value = null;\n }\n };\n ;\n NumericTextBox.prototype.setElementValue = function (val, element) {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, this.showClearButton);\n };\n NumericTextBox.prototype.validateState = function () {\n this.isValidState = true;\n if (this.value || this.value === 0) {\n this.isValidState = !(this.value > this.max || this.value < this.min);\n }\n this.checkErrorClass();\n };\n NumericTextBox.prototype.formatNumber = function () {\n var numberOfDecimals;\n var currentValue = this.value;\n var decimalPart = currentValue.toString().split('.')[1];\n numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n if (this.decimals !== null) {\n numberOfDecimals = numberOfDecimals < this.decimals ? numberOfDecimals : this.decimals;\n }\n return this.instance.getNumberFormat({\n maximumFractionDigits: numberOfDecimals,\n minimumFractionDigits: numberOfDecimals, useGrouping: false\n })(this.value);\n };\n ;\n NumericTextBox.prototype.trimValue = function (value) {\n if (value > this.max) {\n return this.max;\n }\n if (value < this.min) {\n return this.min;\n }\n return value;\n };\n ;\n NumericTextBox.prototype.roundNumber = function (value, precision) {\n var result = value;\n var decimals = precision || 0;\n var result1 = result.toString().split('e');\n result = Math.round(Number(result1[0] + 'e' + (result1[1] ? (Number(result1[1]) + decimals) : decimals)));\n var result2 = result.toString().split('e');\n result = Number(result2[0] + 'e' + (result2[1] ? (Number(result2[1]) - decimals) : -decimals));\n return Number(result.toFixed(decimals));\n };\n ;\n NumericTextBox.prototype.cancelEvent = function (event) {\n event.preventDefault();\n return false;\n };\n NumericTextBox.prototype.keyPressHandler = function (event) {\n if (event.which === 0 || event.metaKey || event.ctrlKey || event.keyCode === 8 || event.keyCode === 13) {\n return true;\n }\n var currentChar = String.fromCharCode(event.which);\n var text = this.element.value;\n text = text.substring(0, this.element.selectionStart) + currentChar + text.substring(this.element.selectionEnd);\n if (!this.numericRegex().test(text)) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n else {\n return true;\n }\n };\n ;\n NumericTextBox.prototype.numericRegex = function () {\n var numericObject = getNumericObject(this.locale);\n var decimalSeparator = getValue('decimal', numericObject);\n var fractionRule = '*';\n if (decimalSeparator === DECIMALSEPARATOR) {\n decimalSeparator = '\\\\' + decimalSeparator;\n }\n if (this.decimals === 0) {\n return INTREGEXP;\n }\n if (this.decimals && this.validateDecimalOnType) {\n fractionRule = '{0,' + this.decimals + '}';\n }\n return new RegExp('^(-)?(((\\\\d+(' + decimalSeparator + '\\\\d' + fractionRule +\n ')?)|(' + decimalSeparator + '\\\\d' + fractionRule + ')))?$');\n };\n ;\n NumericTextBox.prototype.mouseWheel = function (event) {\n event.preventDefault();\n var delta;\n var rawEvent = event;\n if (rawEvent.wheelDelta) {\n delta = rawEvent.wheelDelta / 120;\n }\n else if (rawEvent.detail) {\n delta = -rawEvent.detail / 3;\n }\n if (delta > 0) {\n this.action(INCREMENT, event);\n }\n else if (delta < 0) {\n this.action(DECREMENT, event);\n }\n this.cancelEvent(event);\n };\n NumericTextBox.prototype.focusIn = function (event) {\n if (!this.enabled || this.readonly) {\n return;\n }\n this.isFocused = true;\n removeClass([this.container], ERROR);\n this.prevValue = this.value;\n if ((this.value || this.value === 0)) {\n var formatValue = this.formatNumber();\n this.setElementValue(formatValue);\n if (!this.isPrevFocused) {\n this.element.setSelectionRange(0, formatValue.length);\n }\n }\n if (!Browser.isDevice) {\n EventHandler.add(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel, this);\n }\n };\n ;\n NumericTextBox.prototype.focusOut = function (event) {\n var _this = this;\n if (this.isPrevFocused) {\n event.preventDefault();\n if (Browser.isDevice) {\n var value_1 = this.element.value;\n this.element.focus();\n this.isPrevFocused = false;\n var ele_1 = this.element;\n setTimeout(function () {\n _this.setElementValue(value_1, ele_1);\n }, 200);\n }\n }\n else {\n this.isFocused = false;\n if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n }\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput);\n if (!Browser.isDevice) {\n EventHandler.remove(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel);\n }\n }\n };\n ;\n NumericTextBox.prototype.mouseDownOnSpinner = function (event) {\n var _this = this;\n if (this.isFocused) {\n this.isPrevFocused = true;\n event.preventDefault();\n }\n if (!this.getElementData(event)) {\n return;\n }\n var result = this.getElementData(event);\n var target = event.currentTarget;\n var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n EventHandler.add(target, 'mouseleave', this.mouseUpClick, this);\n this.timeOut = setInterval(function () { _this.isCalled = true; _this.action(action, event); }, 150);\n EventHandler.add(document, 'mouseup', this.mouseUpClick, this);\n };\n NumericTextBox.prototype.touchMoveOnSpinner = function (event) {\n var target = document.elementFromPoint(event.clientX, event.clientY);\n if (!(target.classList.contains(SPINICON))) {\n clearInterval(this.timeOut);\n }\n };\n NumericTextBox.prototype.mouseUpOnSpinner = function (event) {\n if (this.isPrevFocused) {\n this.element.focus();\n if (!Browser.isDevice) {\n this.isPrevFocused = false;\n }\n }\n if (!Browser.isDevice) {\n event.preventDefault();\n }\n if (!this.getElementData(event)) {\n return;\n }\n var target = event.currentTarget;\n var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n EventHandler.remove(target, 'mouseleave', this.mouseUpClick);\n if (!this.isCalled) {\n this.action(action, event);\n }\n this.isCalled = false;\n EventHandler.remove(document, 'mouseup', this.mouseUpClick);\n };\n NumericTextBox.prototype.getElementData = function (event) {\n if ((event.which && event.which === 3) || (event.button && event.button === 2)\n || !this.enabled || this.readonly) {\n return false;\n }\n clearInterval(this.timeOut);\n return true;\n };\n NumericTextBox.prototype.mouseUpClick = function (event) {\n event.stopPropagation();\n clearInterval(this.timeOut);\n this.isCalled = false;\n EventHandler.remove(this.spinUp, 'mouseleave', this.mouseUpClick);\n EventHandler.remove(this.spinDown, 'mouseleave', this.mouseUpClick);\n };\n /**\n * Increments the NumericTextBox value with the specified step value.\n * @param {number} step - Specifies the value used to increment the NumericTextBox value.\n * if its not given then numeric value will be incremented based on the step property value.\n */\n NumericTextBox.prototype.increment = function (step) {\n if (step === void 0) { step = this.step; }\n this.changeValue(this.performAction(this.value, step, INCREMENT));\n };\n /**\n * Decrements the NumericTextBox value with specified step value.\n * @param {number} step - Specifies the value used to decrement the NumericTextBox value.\n * if its not given then numeric value will be decremented based on the step property value.\n */\n NumericTextBox.prototype.decrement = function (step) {\n if (step === void 0) { step = this.step; }\n this.changeValue(this.performAction(this.value, step, DECREMENT));\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n * @method destroy\n * @return {void}\n */\n NumericTextBox.prototype.destroy = function () {\n this.unwireEvents();\n detach(this.hiddenInput);\n if (this.showSpinButton) {\n this.unwireSpinBtnEvents();\n detach(this.spinUp);\n detach(this.spinDown);\n }\n this.container.parentElement.appendChild(this.cloneElement);\n detach(this.container);\n _super.prototype.destroy.call(this);\n };\n /**\n * Returns the value of NumericTextBox with the format applied to the NumericTextBox.\n */\n NumericTextBox.prototype.getText = function () {\n return this.element.value;\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n * @return {string}\n */\n NumericTextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Calls internally if any of the property value is changed.\n * @private\n */\n NumericTextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n var elementVal;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n setStyleAttribute(this.container, { 'width': formatUnit(newProp.width) });\n break;\n case 'cssClass':\n Input.setCssClass(newProp.cssClass, [this.container], oldProp.cssClass);\n break;\n case 'enabled':\n Input.setEnabled(newProp.enabled, this.element);\n break;\n case 'enableRtl':\n Input.setEnableRtl(newProp.enableRtl, [this.container]);\n break;\n case 'readonly':\n Input.setReadonly(newProp.readonly, this.element);\n if (this.readonly) {\n attributes(this.element, { 'aria-readonly': 'true' });\n }\n else {\n this.element.removeAttribute('aria-readonly');\n }\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.element);\n break;\n case 'step':\n this.step = newProp.step;\n this.validateStep();\n break;\n case 'showSpinButton':\n if (newProp.showSpinButton) {\n this.spinBtnCreation();\n }\n else {\n detach(this.spinUp);\n detach(this.spinDown);\n }\n break;\n case 'showClearButton':\n Input.setClearButton(newProp.showClearButton, this.element, this.inputWrapper);\n break;\n case 'value':\n this.updateValue(newProp.value);\n break;\n case 'min':\n case 'max':\n setValue(prop, getValue(prop, newProp), this);\n this.validateMinMax();\n this.updateValue(this.value);\n break;\n case 'strictMode':\n this.strictMode = newProp.strictMode;\n this.updateValue(this.value);\n this.validateState();\n break;\n case 'locale':\n this.initCultureFunc();\n this.l10n.setLocale(this.locale);\n if (!isNullOrUndefined(this.spinDown)) {\n attributes(this.spinDown, {\n 'title': this.l10n.getConstant('decrementTitle'),\n 'aria-label': this.l10n.getConstant('decrementTitle')\n });\n }\n if (!isNullOrUndefined(this.spinUp)) {\n attributes(this.spinUp, {\n 'title': this.l10n.getConstant('incrementTitle'),\n 'aria-label': this.l10n.getConstant('incrementTitle')\n });\n }\n this.updatePlaceholder();\n Input.setPlaceholder(this.placeholder, this.element);\n this.updateValue(this.value);\n break;\n case 'currency':\n var propVal = getValue(prop, newProp);\n this.setProperties({ currencyCode: propVal }, true);\n this.updateCurrency(prop, propVal);\n break;\n case 'currencyCode':\n var propValue = getValue(prop, newProp);\n this.setProperties({ currency: propValue }, true);\n this.updateCurrency('currency', propValue);\n break;\n case 'format':\n setValue(prop, getValue(prop, newProp), this);\n this.initCultureInfo();\n this.updateValue(this.value);\n break;\n case 'decimals':\n this.decimals = newProp.decimals;\n this.updateValue(this.value);\n }\n }\n };\n /**\n * Gets the component name\n * @private\n */\n NumericTextBox.prototype.getModuleName = function () {\n return 'numerictextbox';\n };\n __decorate([\n Property('')\n ], NumericTextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"value\", void 0);\n __decorate([\n Property(-(Number.MAX_VALUE))\n ], NumericTextBox.prototype, \"min\", void 0);\n __decorate([\n Property(Number.MAX_VALUE)\n ], NumericTextBox.prototype, \"max\", void 0);\n __decorate([\n Property(1)\n ], NumericTextBox.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"showSpinButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('n2')\n ], NumericTextBox.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"decimals\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currency\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currencyCode\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"strictMode\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"validateDecimalOnType\", void 0);\n __decorate([\n Property('Never')\n ], NumericTextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"change\", void 0);\n NumericTextBox = __decorate([\n NotifyPropertyChanges\n ], NumericTextBox);\n return NumericTextBox;\n}(Component));\nexport { NumericTextBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { selectAll, select, createElement, Base } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined, EventHandler } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, Event } from '@syncfusion/ej2-base';\n/**\n * global declarations\n */\nvar VALIDATE_EMAIL = new RegExp('^[A-Za-z0-9._%+-]{3,}@[a-zA-Z]{3,}([.]{1}[a-zA-Z]{2,5}' +\n '|[.]{1}[a-zA-Z]{2,4}[.]{1}[a-zA-Z]{2,4})$');\nvar VALIDATE_URL = new RegExp('^((ftp|http|https):\\/\\/)?www\\.([A-z]{2,})\\.([A-z]{2,})$');\nvar VALIDATE_DATE_ISO = new RegExp('^([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$');\nvar VALIDATE_DIGITS = new RegExp('^[0-9]*$');\nvar VALIDATE_PHONE = new RegExp('^[+]?[0-9]{9,13}$');\nvar VALIDATE_CREDITCARD = new RegExp('^\\\\d{13,16}$');\n/**\n * ErrorOption values\n * @private\n */\nexport var ErrorOption;\n(function (ErrorOption) {\n ErrorOption[ErrorOption[\"Message\"] = 0] = \"Message\";\n ErrorOption[ErrorOption[\"Label\"] = 1] = \"Label\";\n})(ErrorOption || (ErrorOption = {}));\n/**\n * FormValidator class enables you to validate the form fields based on your defined rules\n * ```html\n *
\n * \n * \n *
\n * \n * ```\n */\nvar FormValidator = /** @class */ (function (_super) {\n __extends(FormValidator, _super);\n // Initializes the FormValidator \n function FormValidator(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.validated = [];\n _this.errorRules = [];\n _this.allowSubmit = false;\n _this.required = 'required';\n _this.infoElement = null;\n _this.inputElement = null;\n _this.selectQuery = 'input:not([type=reset]):not([type=button]), select, textarea';\n /**\n * Specifies the default messages for validation rules.\n * @default : { List of validation message };\n */\n _this.defaultMessages = {\n required: 'This field is required.',\n email: 'Please enter a valid email address.',\n url: 'Please enter a valid URL.',\n date: 'Please enter a valid date.',\n dateIso: 'Please enter a valid date ( ISO ).',\n creditcard: 'Please enter valid card number',\n number: 'Please enter a valid number.',\n digits: 'Please enter only digits.',\n maxLength: 'Please enter no more than {0} characters.',\n minLength: 'Please enter at least {0} characters.',\n rangeLength: 'Please enter a value between {0} and {1} characters long.',\n range: 'Please enter a value between {0} and {1}.',\n max: 'Please enter a value less than or equal to {0}.',\n min: 'Please enter a value greater than or equal to {0}.',\n regex: 'Please enter a correct value.',\n tel: 'Please enter a valid phone number.',\n pattern: 'Please enter a correct pattern value.',\n equalTo: 'Please enter the valid match text',\n };\n if (typeof _this.rules === 'undefined') {\n _this.rules = {};\n }\n element = typeof element === 'string' ? select(element, document) : element;\n // Set novalidate to prevent default HTML5 form validation\n if (_this.element != null) {\n _this.element.setAttribute('novalidate', '');\n _this.inputElements = selectAll(_this.selectQuery, _this.element);\n _this.createHTML5Rules();\n _this.wireEvents();\n }\n else {\n return undefined;\n }\n return _this;\n }\n FormValidator_1 = FormValidator;\n /**\n * Add validation rules to the corresponding input element based on `name` attribute.\n * @param {string} name `name` of form field.\n * @param {Object} rules Validation rules for the corresponding element.\n * @return {void}\n */\n FormValidator.prototype.addRules = function (name, rules) {\n if (name) {\n if (this.rules.hasOwnProperty(name)) {\n extend(this.rules[name], rules, {});\n }\n else {\n this.rules[name] = rules;\n }\n }\n };\n /**\n * Remove validation to the corresponding field based on name attribute.\n * When no parameter is passed, remove all the validations in the form.\n * @param {string} name Input name attribute value.\n * @param {string[]} rules List of validation rules need to be remove from the corresponding element.\n * @return {void}\n */\n FormValidator.prototype.removeRules = function (name, rules) {\n if (!name && !rules) {\n this.rules = {};\n }\n else if (this.rules[name] && !rules) {\n delete this.rules[name];\n }\n else if (!isNullOrUndefined(this.rules[name] && rules)) {\n for (var i = 0; i < rules.length; i++) {\n delete this.rules[name][rules[i]];\n }\n }\n else {\n return;\n }\n };\n /**\n * Validate the current form values using defined rules.\n * Returns `true` when the form is valid otherwise `false`\n * @param {string} selected - Optional parameter to validate specified element.\n * @return {boolean}\n */\n FormValidator.prototype.validate = function (selected) {\n var rules = Object.keys(this.rules);\n if (selected && rules.length) {\n this.validateRules(selected);\n //filter the selected element it don't have any valid input element\n return rules.indexOf(selected) !== -1 && this.errorRules.filter(function (data) {\n return data.name === selected;\n }).length === 0;\n }\n else {\n for (var _i = 0, rules_1 = rules; _i < rules_1.length; _i++) {\n var name_1 = rules_1[_i];\n this.validateRules(name_1);\n }\n return this.errorRules.length === 0;\n }\n };\n /**\n * Reset the value of all the fields in form.\n * @return {void}\n */\n FormValidator.prototype.reset = function () {\n this.element.reset();\n this.clearForm();\n };\n /**\n * Get input element by name.\n * @param {string} name - Input element name attribute value.\n * @return {HTMLInputElement}\n */\n FormValidator.prototype.getInputElement = function (name) {\n this.inputElement = (select('[name=' + name + ']', this.element));\n return this.inputElement;\n };\n /**\n * Destroy the form validator object and error elements.\n * @return {void}\n */\n FormValidator.prototype.destroy = function () {\n this.reset();\n this.unwireEvents();\n this.rules = {};\n var elements = selectAll('.' + this.errorClass + ', .' + this.validClass, this.element);\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element = elements_1[_i];\n element.remove();\n }\n _super.prototype.destroy.call(this);\n };\n /**\n * @private\n */\n FormValidator.prototype.onPropertyChanged = function (newProp, oldProp) {\n // No code are needed\n };\n ;\n /**\n * @private\n */\n FormValidator.prototype.getModuleName = function () {\n return 'formValidator';\n };\n FormValidator.prototype.clearForm = function () {\n this.errorRules = [];\n this.validated = [];\n var elements = selectAll(this.selectQuery, this.element);\n for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) {\n var element = elements_2[_i];\n var input = element;\n input.removeAttribute('aria-invalid');\n input.classList.remove(this.errorClass);\n if (input.name.length > 0) {\n this.getInputElement(input.name);\n this.getErrorElement(input.name);\n this.hideMessage(input.name);\n }\n input.classList.remove(this.validClass);\n }\n };\n FormValidator.prototype.createHTML5Rules = function () {\n var defRules = ['required', 'regex', 'rangeLength', 'maxLength', 'minLength', 'dateIso', 'digits', 'pattern',\n 'data-val-required', 'type', 'data-validation', 'min', 'max', 'range', 'equalTo', 'data-val-minlength-min',\n 'data-val-equalto-other', 'data-val-maxlength-max', 'data-val-range-min', 'data-val-regex-pattern', 'data-val-length-max',\n 'data-val-creditcard', 'data-val-phone'];\n var acceptedTypes = ['email', 'url', 'date', 'number', 'tel'];\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n // Default attribute rules \n var allRule = {};\n for (var _b = 0, defRules_1 = defRules; _b < defRules_1.length; _b++) {\n var rule = defRules_1[_b];\n if (input.getAttribute(rule) !== null) {\n switch (rule) {\n case 'required':\n this.defRule(input, allRule, rule, input.required);\n break;\n case 'data-validation':\n rule = input.getAttribute(rule);\n this.defRule(input, allRule, rule, true);\n break;\n case 'type':\n if (acceptedTypes.indexOf(input.type) !== -1) {\n this.defRule(input, allRule, input.type, true);\n }\n break;\n case 'rangeLength':\n case 'range':\n this.defRule(input, allRule, rule, JSON.parse(input.getAttribute(rule)));\n break;\n case 'equalTo':\n var id = input.getAttribute(rule);\n this.defRule(input, allRule, rule, id);\n break;\n default:\n if (input.getAttribute('data-val') === 'true') {\n this.annotationRule(input, allRule, rule, input.getAttribute(rule));\n }\n else {\n this.defRule(input, allRule, rule, input.getAttribute(rule));\n }\n }\n }\n }\n //adding pattern type validation\n if (Object.keys(allRule).length !== 0) {\n this.addRules(input.name, allRule);\n }\n }\n };\n FormValidator.prototype.annotationRule = function (input, ruleCon, ruleName, value) {\n var annotationRule = ruleName.split('-');\n var rulesList = ['required', 'creditcard', 'phone', 'maxlength', 'minlength', 'range', 'regex', 'equalto'];\n var ruleFirstName = annotationRule[annotationRule.length - 1];\n var ruleSecondName = annotationRule[annotationRule.length - 2];\n if (rulesList.indexOf(ruleFirstName) !== -1) {\n switch (ruleFirstName) {\n case 'required':\n this.defRule(input, ruleCon, 'required', value);\n break;\n case 'creditcard':\n this.defRule(input, ruleCon, 'creditcard', value);\n break;\n case 'phone':\n this.defRule(input, ruleCon, 'tel', value);\n break;\n }\n }\n else if (rulesList.indexOf(ruleSecondName) !== -1) {\n switch (ruleSecondName) {\n case 'maxlength':\n this.defRule(input, ruleCon, 'maxLength', value);\n break;\n case 'minlength':\n this.defRule(input, ruleCon, 'minLength', value);\n break;\n case 'range':\n var minvalue = input.getAttribute('data-val-range-min');\n var maxvalue = input.getAttribute('data-val-range-max');\n this.defRule(input, ruleCon, 'range', [minvalue, maxvalue]);\n break;\n case 'equalto':\n var id = input.getAttribute(ruleName).split('.');\n this.defRule(input, ruleCon, 'equalTo', id[id.length - 1]);\n break;\n case 'regex':\n this.defRule(input, ruleCon, 'regex', value);\n break;\n }\n }\n };\n FormValidator.prototype.defRule = function (input, ruleCon, ruleName, value) {\n var message = input.getAttribute('data-' + ruleName + '-message');\n var annotationMessage = input.getAttribute('data-val-' + ruleName);\n if (message) {\n value = [value, message];\n }\n else if (annotationMessage) {\n value = [value, annotationMessage];\n }\n ruleCon[ruleName] = value;\n };\n // Wire events to the form elements\n FormValidator.prototype.wireEvents = function () {\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n if (FormValidator_1.isCheckable(input)) {\n EventHandler.add(input, 'click', this.clickHandler, this);\n }\n else if (input.tagName === 'SELECT') {\n EventHandler.add(input, 'change', this.changeHandler, this);\n }\n else {\n EventHandler.add(input, 'focusout', this.focusOutHandler, this);\n EventHandler.add(input, 'keyup', this.keyUpHandler, this);\n }\n }\n EventHandler.add(this.element, 'submit', this.submitHandler, this);\n EventHandler.add(this.element, 'reset', this.resetHandler, this);\n };\n // UnWire events to the form elements\n FormValidator.prototype.unwireEvents = function () {\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n EventHandler.clearEvents(input);\n }\n EventHandler.remove(this.element, 'submit', this.submitHandler);\n EventHandler.remove(this.element, 'reset', this.resetHandler);\n };\n // Handle input element focusout event\n FormValidator.prototype.focusOutHandler = function (e) {\n this.trigger('focusout', e);\n //FormValidator.triggerCallback(this.focusout, e);\n var element = e.target;\n if (this.rules[element.name]) {\n if (this.rules[element.name][this.required] || element.value.length > 0) {\n this.validate(element.name);\n }\n else if (this.validated.indexOf(element.name) === -1) {\n this.validated.push(element.name);\n }\n }\n };\n // Handle input element keyup event\n FormValidator.prototype.keyUpHandler = function (e) {\n this.trigger('keyup', e);\n var element = e.target;\n // List of keys need to prevent while validation\n var excludeKeys = [16, 17, 18, 20, 35, 36, 37, 38, 39, 40, 45, 144, 225];\n if (e.which === 9 && (!this.rules[element.name] || (this.rules[element.name] && !this.rules[element.name][this.required]))) {\n return;\n }\n if (this.validated.indexOf(element.name) !== -1 && this.rules[element.name] && excludeKeys.indexOf(e.which) === -1) {\n this.validate(element.name);\n }\n };\n // Handle input click event\n FormValidator.prototype.clickHandler = function (e) {\n this.trigger('click', e);\n var element = e.target;\n // If element type is not submit allow validation\n if (element.type !== 'submit') {\n this.validate(element.name);\n }\n else if (element.getAttribute('formnovalidate') !== null) {\n // Prevent form validation, if submit button has formnovalidate attribute\n this.allowSubmit = true;\n }\n };\n // Handle input change event\n FormValidator.prototype.changeHandler = function (e) {\n this.trigger('change', e);\n var element = e.target;\n this.validate(element.name);\n };\n // Handle form submit event\n FormValidator.prototype.submitHandler = function (e) {\n this.trigger('submit', e);\n //FormValidator.triggerCallback(this.submit, e);\n // Prevent form submit if validation failed\n if (!this.allowSubmit && !this.validate()) {\n e.preventDefault();\n }\n else {\n this.allowSubmit = false;\n }\n };\n // Handle form reset\n FormValidator.prototype.resetHandler = function () {\n this.clearForm();\n };\n // Validate each rule based on input element name\n FormValidator.prototype.validateRules = function (name) {\n if (!this.rules[name]) {\n return;\n }\n var rules = Object.keys(this.rules[name]);\n this.getInputElement(name);\n this.getErrorElement(name);\n for (var _i = 0, rules_2 = rules; _i < rules_2.length; _i++) {\n var rule = rules_2[_i];\n var errorMessage = this.getErrorMessage(this.rules[name][rule], rule);\n var errorRule = { name: name, message: errorMessage };\n var eventArgs = {\n inputName: name,\n element: this.inputElement,\n message: errorMessage\n };\n if (!this.isValid(name, rule) && !this.inputElement.classList.contains(this.ignore)) {\n this.removeErrorRules(name);\n this.errorRules.push(errorRule);\n // Set aria attributes to invalid elements\n this.inputElement.setAttribute('aria-invalid', 'true');\n this.inputElement.setAttribute('aria-describedby', this.inputElement.id + '-info');\n if (!this.infoElement) {\n this.createErrorElement(name, errorRule.message, this.inputElement);\n }\n else {\n this.showMessage(errorRule);\n }\n eventArgs.errorElement = this.infoElement;\n eventArgs.status = 'failure';\n this.inputElement.classList.add(this.errorClass);\n this.inputElement.classList.remove(this.validClass);\n this.trigger('validationComplete', eventArgs);\n // Set aria-required to required rule elements\n if (rule === 'required') {\n this.inputElement.setAttribute('aria-required', 'true');\n }\n break;\n }\n else {\n this.hideMessage(name);\n eventArgs.status = 'success';\n this.trigger('validationComplete', eventArgs);\n }\n }\n };\n // Check the input element whether it's value satisfy the validation rule or not\n FormValidator.prototype.isValid = function (name, rule) {\n var params = this.rules[name][rule];\n var param = (params instanceof Array && typeof params[1] === 'string') ? params[0] : params;\n var currentRule = this.rules[name][rule];\n var args = { value: this.inputElement.value, param: param, element: this.inputElement, formElement: this.element };\n this.trigger('validationBegin', args);\n if (currentRule && typeof currentRule[0] === 'function') {\n var fn = currentRule[0];\n return fn.call(this, { element: this.inputElement, value: this.inputElement.value });\n }\n else if (FormValidator_1.isCheckable(this.inputElement)) {\n if (rule !== 'required') {\n return true;\n }\n return selectAll('input[name=' + name + ']:checked', this.element).length > 0;\n }\n else {\n return FormValidator_1.checkValidator[rule](args);\n }\n };\n // Return default error message or custom error message \n FormValidator.prototype.getErrorMessage = function (ruleValue, rule) {\n var message = (ruleValue instanceof Array && typeof ruleValue[1] === 'string') ? ruleValue[1] : this.defaultMessages[rule];\n var formats = message.match(/{(\\d)}/g);\n if (!isNullOrUndefined(formats)) {\n for (var i = 0; i < formats.length; i++) {\n var value = ruleValue instanceof Array ? ruleValue[i] : ruleValue;\n message = message.replace(formats[i], value);\n }\n }\n return message;\n };\n // Create error element based on name and error message\n FormValidator.prototype.createErrorElement = function (name, message, input) {\n var errorElement = createElement(this.errorElement, {\n className: this.errorClass,\n innerHTML: message,\n attrs: { for: name }\n });\n // Create message design if errorOption is message\n if (this.errorOption === ErrorOption.Message) {\n errorElement.classList.remove(this.errorClass);\n errorElement.classList.add('e-message');\n errorElement = createElement(this.errorContainer, { className: this.errorClass, innerHTML: errorElement.outerHTML });\n }\n errorElement.id = this.inputElement.name + '-info';\n // Append error message into MVC error message element\n if (this.element.querySelector('[data-valmsg-for=\"' + input.id + '\"]')) {\n this.element.querySelector('[data-valmsg-for=\"' + input.id + '\"]').appendChild(errorElement);\n }\n else if (input.hasAttribute('data-msg-containerid') === true) {\n // Append error message into custom div element\n var containerId = input.getAttribute('data-msg-containerid');\n var divElement = this.element.querySelector('#' + containerId);\n divElement.appendChild(errorElement);\n }\n else if (this.customPlacement != null) {\n // Call custom placement function if customPlacement is not null\n this.customPlacement.call(this, this.inputElement, errorElement);\n }\n else {\n this.inputElement.parentNode.insertBefore(errorElement, this.inputElement.nextSibling);\n }\n errorElement.style.display = 'block';\n this.getErrorElement(name);\n this.validated.push(name);\n this.checkRequired(name);\n };\n // Get error element by name\n FormValidator.prototype.getErrorElement = function (name) {\n this.infoElement = select(this.errorElement + '.' + this.errorClass, this.inputElement.parentElement);\n if (!this.infoElement) {\n this.infoElement = select(this.errorElement + '.' + this.errorClass + '[for=\"' + name + '\"]');\n }\n return this.infoElement;\n };\n // Remove existing rule from errorRules object\n FormValidator.prototype.removeErrorRules = function (name) {\n for (var i = 0; i < this.errorRules.length; i++) {\n var rule = this.errorRules[i];\n if (rule.name === name) {\n this.errorRules.splice(i, 1);\n }\n }\n };\n // Show error message to the input element\n FormValidator.prototype.showMessage = function (errorRule) {\n this.infoElement.style.display = 'block';\n this.infoElement.innerHTML = errorRule.message;\n this.checkRequired(errorRule.name);\n };\n // Hide error message based on input name\n FormValidator.prototype.hideMessage = function (name) {\n if (this.infoElement) {\n this.infoElement.style.display = 'none';\n this.removeErrorRules(name);\n this.inputElement.classList.add(this.validClass);\n this.inputElement.classList.remove(this.errorClass);\n this.inputElement.setAttribute('aria-invalid', 'false');\n }\n };\n // Check whether the input element have required rule and its value is not empty\n FormValidator.prototype.checkRequired = function (name) {\n if (!this.rules[name][this.required] && !this.inputElement.value.length) {\n this.infoElement.innerHTML = this.inputElement.value;\n this.infoElement.setAttribute('aria-invalid', 'false');\n this.hideMessage(name);\n }\n };\n // Return boolean result if the input have chekcable or submit types\n FormValidator.isCheckable = function (input) {\n var inputType = input.getAttribute('type');\n return inputType && (inputType === 'checkbox' || inputType === 'radio' || inputType === 'submit');\n };\n // List of function to validate the rules\n FormValidator.checkValidator = {\n required: function (option) {\n return option.value.length > 0;\n },\n email: function (option) {\n return VALIDATE_EMAIL.test(option.value);\n },\n url: function (option) {\n return VALIDATE_URL.test(option.value);\n },\n dateIso: function (option) {\n return VALIDATE_DATE_ISO.test(option.value);\n },\n tel: function (option) {\n return VALIDATE_PHONE.test(option.value);\n },\n creditcard: function (option) {\n return VALIDATE_CREDITCARD.test(option.value);\n },\n number: function (option) {\n return !isNaN(Number(option.value)) && option.value.indexOf(' ') === -1;\n },\n digits: function (option) {\n return VALIDATE_DIGITS.test(option.value);\n },\n maxLength: function (option) {\n return option.value.length <= option.param;\n },\n minLength: function (option) {\n return option.value.length >= option.param;\n },\n rangeLength: function (option) {\n var param = option.param;\n return option.value.length >= param[0] && option.value.length <= param[1];\n },\n range: function (option) {\n var param = option.param;\n return !isNaN(Number(option.value)) && Number(option.value) >= param[0] && Number(option.value) <= param[1];\n },\n date: function (option) {\n return !isNaN(new Date(option.value).getTime());\n },\n max: function (option) {\n if (!isNaN(Number(option.value))) {\n // Maximum rule validation for number\n return +option.value <= option.param;\n }\n // Maximum rule validation for date\n return new Date(option.value).getTime() <= new Date(JSON.parse(JSON.stringify(option.param))).getTime();\n },\n min: function (option) {\n if (!isNaN(Number(option.value))) {\n // Minimum rule validation for number\n return +option.value >= option.param;\n }\n // Minimum rule validation for date\n return new Date(option.value).getTime() >= new Date(JSON.parse(JSON.stringify(option.param))).getTime();\n },\n regex: function (option) {\n return new RegExp(option.param).test(option.value);\n },\n equalTo: function (option) {\n var compareTo = option.formElement.querySelector('#' + option.param);\n option.param = compareTo.value;\n return option.param === option.value;\n },\n };\n __decorate([\n Property('e-hidden')\n ], FormValidator.prototype, \"ignore\", void 0);\n __decorate([\n Property()\n ], FormValidator.prototype, \"rules\", void 0);\n __decorate([\n Property('e-error')\n ], FormValidator.prototype, \"errorClass\", void 0);\n __decorate([\n Property('e-valid')\n ], FormValidator.prototype, \"validClass\", void 0);\n __decorate([\n Property('label')\n ], FormValidator.prototype, \"errorElement\", void 0);\n __decorate([\n Property('div')\n ], FormValidator.prototype, \"errorContainer\", void 0);\n __decorate([\n Property(ErrorOption.Label)\n ], FormValidator.prototype, \"errorOption\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"focusout\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"keyup\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"submit\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"validationBegin\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"validationComplete\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"customPlacement\", void 0);\n FormValidator = FormValidator_1 = __decorate([\n NotifyPropertyChanges\n ], FormValidator);\n return FormValidator;\n var FormValidator_1;\n}(Base));\nexport { FormValidator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Event, Property, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, getValue, setValue, addClass, detach, createElement } from '@syncfusion/ej2-base';\nimport { Input } from '../../input/input';\nimport { regularExpressions, createMask, applyMask, wireEvents, unwireEvents, unstrippedValue, strippedValue } from '../base/index';\nimport { setMaskValue, setElementValue } from '../base/index';\nimport { maskInputBlurHandler } from '../base/mask-base';\nvar ROOT = 'e-widget e-control-wrapper e-mask';\nvar INPUT = 'e-input';\n/**\n * The MaskedTextBox allows the user to enter the valid input only based on the provided mask.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar MaskedTextBox = /** @class */ (function (_super) {\n __extends(MaskedTextBox, _super);\n function MaskedTextBox(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Gets the component name\n * @private\n */\n MaskedTextBox.prototype.getModuleName = function () {\n return 'maskedtextbox';\n };\n /**\n * Initializes the event handler\n * @private\n */\n MaskedTextBox.prototype.preRender = function () {\n this.promptMask = '';\n this.hiddenMask = '';\n this.escapeMaskValue = '';\n this.regExpCollec = regularExpressions;\n this.customRegExpCollec = [];\n this.undoCollec = [];\n this.redoCollec = [];\n this.changeEventArgs = {};\n this.focusEventArgs = {};\n this.maskKeyPress = false;\n this.isFocus = false;\n this.isInitial = false;\n this.isIosInvalid = false;\n var ejInstance = getValue('ej2_instances', this.element);\n this.cloneElement = this.element.cloneNode(true);\n this.angularTagName = null;\n if (this.element.tagName === 'EJS-MASKEDTEXTBOX') {\n this.angularTagName = this.element.tagName;\n var input = createElement('input');\n for (var i = 0; i < this.element.attributes.length; i++) {\n input.setAttribute(this.element.attributes[i].nodeName, this.element.attributes[i].nodeValue);\n input.innerHTML = this.element.innerHTML;\n }\n this.element.parentNode.appendChild(input);\n this.element.parentNode.removeChild(this.element);\n this.element = input;\n setValue('ej2_instances', ejInstance, this.element);\n }\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n * @return {string}\n */\n MaskedTextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Initializes the component rendering.\n * @private\n */\n MaskedTextBox.prototype.render = function () {\n if (this.element.tagName.toLowerCase() === 'input') {\n if (this.floatLabelType === 'Never') {\n addClass([this.element], INPUT);\n }\n this.createWrapper();\n this.isInitial = true;\n this.resetMaskedTextBox();\n this.isInitial = false;\n this.setMaskPlaceholder(true);\n this.setWidth(this.width);\n }\n };\n MaskedTextBox.prototype.resetMaskedTextBox = function () {\n this.promptMask = '';\n this.hiddenMask = '';\n this.escapeMaskValue = '';\n this.customRegExpCollec = [];\n this.undoCollec = [];\n this.redoCollec = [];\n if (this.promptChar.length > 1) {\n this.promptChar = this.promptChar[0];\n }\n createMask.call(this);\n applyMask.call(this);\n var val = strippedValue.call(this, this.element);\n this.prevValue = val;\n this.value = val;\n if (!this.isInitial) {\n unwireEvents.call(this);\n }\n wireEvents.call(this);\n };\n MaskedTextBox.prototype.setMaskPlaceholder = function (setVal) {\n if (this.placeholder) {\n Input.setPlaceholder(this.placeholder, this.element);\n if (this.element.value === this.promptMask && setVal && this.floatLabelType !== 'Always') {\n setElementValue.call(this, '');\n }\n if (this.floatLabelType === 'Never') {\n maskInputBlurHandler.call(this);\n }\n }\n };\n MaskedTextBox.prototype.setCssClass = function (cssClass, element) {\n if (cssClass) {\n addClass(element, cssClass);\n }\n };\n MaskedTextBox.prototype.setWidth = function (width) {\n if (!isNullOrUndefined(width)) {\n this.element.style.width = formatUnit(width);\n }\n };\n MaskedTextBox.prototype.createWrapper = function () {\n this.inputObj = Input.createInput({\n element: this.element,\n customTag: this.angularTagName,\n floatLabelType: this.floatLabelType,\n properties: {\n enableRtl: this.enableRtl,\n enabled: this.enabled,\n placeholder: this.placeholder\n }\n });\n this.inputObj.container.setAttribute('class', ROOT + ' ' + this.inputObj.container.getAttribute('class'));\n };\n /**\n * Calls internally if any of the property value is changed.\n * @hidden\n */\n MaskedTextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n setMaskValue.call(this, this.value);\n if (this.placeholder) {\n this.setMaskPlaceholder(false);\n }\n break;\n case 'placeholder':\n this.setMaskPlaceholder(true);\n break;\n case 'width':\n this.setWidth(newProp.width);\n break;\n case 'cssClass':\n this.setCssClass(newProp.cssClass, [this.inputObj.container]);\n break;\n case 'enabled':\n Input.setEnabled(newProp.enabled, this.element);\n break;\n case 'enableRtl':\n Input.setEnableRtl(newProp.enableRtl, [this.inputObj.container]);\n break;\n case 'customCharacters':\n this.customCharacters = newProp.customCharacters;\n this.resetMaskedTextBox();\n break;\n case 'mask':\n var strippedValue_1 = this.value;\n this.mask = newProp.mask;\n this.updateValue(strippedValue_1);\n break;\n case 'promptChar':\n if (newProp.promptChar.length > 1) {\n newProp.promptChar = newProp.promptChar[0];\n }\n if (newProp.promptChar) {\n this.promptChar = newProp.promptChar;\n }\n else {\n this.promptChar = '_';\n }\n var value = this.element.value.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n if (this.promptMask === this.element.value) {\n value = this.promptMask.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n }\n this.promptMask = this.promptMask.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n this.undoCollec = this.redoCollec = [];\n setElementValue.call(this, value);\n break;\n }\n }\n };\n MaskedTextBox.prototype.updateValue = function (strippedVal) {\n this.resetMaskedTextBox();\n setMaskValue.call(this, strippedVal);\n };\n /**\n * Gets the value of the MaskedTextBox with the masked format.\n * By using `value` property, you can get the raw value of maskedtextbox without literals and prompt characters.\n * @return {string}\n */\n MaskedTextBox.prototype.getMaskedValue = function () {\n return unstrippedValue.call(this, this.element);\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n * @method destroy\n * @return {void}\n */\n MaskedTextBox.prototype.destroy = function () {\n unwireEvents.call(this);\n this.inputObj.container.parentElement.appendChild(this.cloneElement);\n detach(this.inputObj.container);\n _super.prototype.destroy.call(this);\n };\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property('Never')\n ], MaskedTextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(true)\n ], MaskedTextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], MaskedTextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], MaskedTextBox.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"mask\", void 0);\n __decorate([\n Property('_')\n ], MaskedTextBox.prototype, \"promptChar\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"customCharacters\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"focus\", void 0);\n MaskedTextBox = __decorate([\n NotifyPropertyChanges\n ], MaskedTextBox);\n return MaskedTextBox;\n}(Component));\nexport { MaskedTextBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event, Complex } from '@syncfusion/ej2-base';\nimport { L10n, Internationalization } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { createElement, attributes, addClass, removeClass, setStyleAttribute, detach } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, Browser } from '@syncfusion/ej2-base';\nimport { Tooltip } from '@syncfusion/ej2-popups';\n/**\n * Configures the ticks data of the Slider.\n */\nvar TicksData = /** @class */ (function (_super) {\n __extends(TicksData, _super);\n function TicksData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], TicksData.prototype, \"placement\", void 0);\n __decorate([\n Property(10)\n ], TicksData.prototype, \"largeStep\", void 0);\n __decorate([\n Property(1)\n ], TicksData.prototype, \"smallStep\", void 0);\n __decorate([\n Property(false)\n ], TicksData.prototype, \"showSmallTicks\", void 0);\n __decorate([\n Property(null)\n ], TicksData.prototype, \"format\", void 0);\n return TicksData;\n}(ChildProperty));\nexport { TicksData };\n/**\n * It illustrates the tooltip data in slider.\n */\nvar TooltipData = /** @class */ (function (_super) {\n __extends(TooltipData, _super);\n function TooltipData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], TooltipData.prototype, \"cssClass\", void 0);\n __decorate([\n Property('Before')\n ], TooltipData.prototype, \"placement\", void 0);\n __decorate([\n Property('Focus')\n ], TooltipData.prototype, \"showOn\", void 0);\n __decorate([\n Property(false)\n ], TooltipData.prototype, \"isVisible\", void 0);\n __decorate([\n Property(null)\n ], TooltipData.prototype, \"format\", void 0);\n return TooltipData;\n}(ChildProperty));\nexport { TooltipData };\nvar classNames = {\n root: 'e-slider',\n rtl: 'e-rtl',\n sliderHiddenInput: 'e-slider-input',\n sliderHandle: 'e-handle',\n rangeBar: 'e-range',\n sliderButton: 'e-slider-button',\n firstButton: 'e-first-button',\n secondButton: 'e-second-button',\n scale: 'e-scale',\n tick: 'e-tick',\n large: 'e-large',\n tickValue: 'e-tick-value',\n sliderTooltip: 'e-slider-tooltip',\n sliderHover: 'e-slider-hover',\n sliderFirstHandle: 'e-handle-first',\n sliderSecondHandle: 'e-handle-second',\n sliderDisabled: 'e-disabled',\n sliderContainer: 'e-slider-container',\n horizontalTooltipBefore: 'e-slider-horizontal-before',\n horizontalTooltipAfter: 'e-slider-horizontal-after',\n verticalTooltipBefore: 'e-slider-vertical-before',\n verticalTooltipAfter: 'e-slider-vertical-after',\n materialTooltip: 'e-material-tooltip',\n materialTooltipOpen: 'e-material-tooltip-open',\n materialTooltipActive: 'e-tooltip-active',\n materialSlider: 'e-material-slider',\n sliderTrack: 'e-slider-track',\n sliderHandleFocused: 'e-handle-focused',\n verticalSlider: 'e-vertical',\n horizontalSlider: 'e-horizontal',\n sliderHandleStart: 'e-handle-start',\n sliderTooltipStart: 'e-material-tooltip-start',\n sliderTabHandle: 'e-tab-handle',\n sliderButtonIcon: 'e-button-icon',\n sliderSmallSize: 'e-small-size',\n sliderTickPosition: 'e-tick-pos',\n sliderFirstTick: 'e-first-tick',\n sliderLastTick: 'e-last-tick',\n sliderButtonClass: 'e-slider-btn',\n sliderTooltipWrapper: 'e-tooltip-wrap',\n sliderTabTrack: 'e-tab-track',\n sliderTabRange: 'e-tab-range',\n sliderActiveHandle: 'e-handle-active',\n sliderMaterialHandle: 'e-material-handle',\n sliderMaterialRange: 'e-material-range',\n sliderMaterialDefault: 'e-material-default',\n materialTooltipShow: 'e-material-tooltip-show',\n materialTooltipHide: 'e-material-tooltip-hide',\n readOnly: 'e-read-only'\n};\n/**\n * The Slider component allows the user to select a value or range\n * of values in-between a min and max range, by dragging the handle over the slider bar.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Slider = /** @class */ (function (_super) {\n __extends(Slider, _super);\n function Slider(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.horDir = 'left';\n _this.verDir = 'bottom';\n _this.transition = {\n handle: 'left .4s cubic-bezier(.25, .8, .25, 1), right .4s cubic-bezier(.25, .8, .25, 1), ' +\n 'top .4s cubic-bezier(.25, .8, .25, 1) , bottom .4s cubic-bezier(.25, .8, .25, 1)',\n rangeBar: 'all .4s cubic-bezier(.25, .8, .25, 1)'\n };\n _this.transitionOnMaterialTooltip = {\n handle: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out',\n rangeBar: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out, width 1ms ease-out, height 1ms ease-out'\n };\n _this.scaleTransform = 'transform .4s cubic-bezier(.25, .8, .25, 1)';\n _this.customAriaText = null;\n return _this;\n }\n Slider.prototype.preRender = function () {\n var localeText = { incrementTitle: 'Increase', decrementTitle: 'Decrease' };\n this.l10n = new L10n('slider', localeText, this.locale);\n this.tickElementCollection = [];\n this.tooltipFormatInfo = {};\n this.ticksFormatInfo = {};\n this.initCultureInfo();\n this.initCultureFunc();\n };\n Slider.prototype.initCultureFunc = function () {\n this.internationalization = new Internationalization(this.locale);\n };\n Slider.prototype.initCultureInfo = function () {\n this.tooltipFormatInfo.format = (!isNullOrUndefined(this.tooltip.format)) ? this.tooltip.format : null;\n this.ticksFormatInfo.format = (!isNullOrUndefined(this.ticks.format)) ? this.ticks.format : null;\n };\n Slider.prototype.formatString = function (value, formatInfo) {\n var formatValue = null;\n var formatString = null;\n if ((value || value === 0)) {\n formatValue = this.formatNumber(value);\n var numberOfDecimals = this.numberOfDecimals(value);\n formatString = this.internationalization.getNumberFormat(formatInfo)(this.makeRoundNumber(value, numberOfDecimals));\n }\n return { elementVal: formatValue, formatString: formatString };\n };\n ;\n Slider.prototype.formatNumber = function (value) {\n var numberOfDecimals = this.numberOfDecimals(value);\n return this.internationalization.getNumberFormat({\n maximumFractionDigits: numberOfDecimals,\n minimumFractionDigits: numberOfDecimals, useGrouping: false\n })(value);\n };\n ;\n Slider.prototype.numberOfDecimals = function (value) {\n var decimalPart = value.toString().split('.')[1];\n var numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n return numberOfDecimals;\n };\n Slider.prototype.makeRoundNumber = function (value, precision) {\n var decimals = precision || 0;\n return Number(value.toFixed(decimals));\n };\n ;\n Slider.prototype.fractionalToInteger = function (value) {\n value = (this.numberOfDecimals(value) === 0) ? Number(value).toFixed(this.noOfDecimals) : value;\n var tens = 1;\n for (var i = 0; i < this.noOfDecimals; i++) {\n tens *= 10;\n }\n value = Number((value * tens).toFixed(0));\n return value;\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Slider.prototype.render = function () {\n this.initialize();\n this.initRender();\n this.wireEvents();\n this.setZindex();\n };\n Slider.prototype.initialize = function () {\n addClass([this.element], classNames.root);\n this.setCSSClass();\n };\n Slider.prototype.setCSSClass = function (oldCSSClass) {\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' '));\n }\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n };\n Slider.prototype.setEnabled = function () {\n var tooltipElement = this.type !== 'Range' ? [this.firstTooltipElement] :\n [this.firstTooltipElement, this.secondTooltipElement];\n if (!this.enabled) {\n addClass([this.sliderContainer], [classNames.sliderDisabled]);\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Always') {\n tooltipElement.forEach(function (tooltipElement) {\n tooltipElement.classList.add(classNames.sliderDisabled);\n });\n }\n this.unwireEvents();\n }\n else {\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Always') {\n tooltipElement.forEach(function (tooltipElement) {\n tooltipElement.classList.remove(classNames.sliderDisabled);\n });\n }\n this.wireEvents();\n }\n };\n Slider.prototype.getTheme = function (container) {\n var theme = window.getComputedStyle(container, ':after').getPropertyValue('content');\n return theme.replace(/['\"]+/g, '');\n };\n /**\n * Initialize the rendering\n * @private\n */\n Slider.prototype.initRender = function () {\n this.sliderContainer = createElement('div', { className: classNames.sliderContainer });\n this.element.parentNode.insertBefore(this.sliderContainer, this.element);\n this.sliderContainer.appendChild(this.element);\n this.sliderTrack = createElement('div', { className: classNames.sliderTrack });\n this.element.appendChild(this.sliderTrack);\n this.element.tabIndex = -1;\n this.isMaterial = this.getTheme(this.sliderContainer) === 'material';\n this.setHandler();\n this.createRangeBar();\n this.setOrientClass();\n this.hiddenInput = (createElement('input', {\n attrs: {\n type: 'hidden', value: (isNullOrUndefined(this.value) ? this.min.toString() : this.value.toString()),\n name: this.element.getAttribute('name') || this.element.getAttribute('id') ||\n '_' + (Math.random() * 1000).toFixed(0) + 'slider', class: classNames.sliderHiddenInput\n }\n }));\n this.hiddenInput.tabIndex = -1;\n this.sliderContainer.appendChild(this.hiddenInput);\n if (this.showButtons) {\n this.setButtons();\n }\n this.setEnableRTL();\n if (this.type === 'Range') {\n this.rangeValueUpdate();\n }\n else {\n this.value = isNullOrUndefined(this.value) ? parseFloat(formatUnit(this.min.toString())) : this.value;\n }\n this.previousVal = this.type !== 'Range' ? this.checkHandleValue(parseFloat(formatUnit(this.value.toString()))) :\n [this.checkHandleValue(parseFloat(formatUnit(this.value[0].toString()))),\n this.checkHandleValue(parseFloat(formatUnit(this.value[1].toString())))];\n this.previousChanged = this.previousVal;\n this.setValue();\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n }\n if (this.tooltip.isVisible) {\n this.renderTooltip();\n }\n if (!this.enabled) {\n addClass([this.sliderContainer], [classNames.sliderDisabled]);\n }\n else {\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n }\n if (this.readOnly) {\n addClass([this.sliderContainer], [classNames.readOnly]);\n }\n else {\n removeClass([this.sliderContainer], [classNames.readOnly]);\n }\n };\n Slider.prototype.createRangeBar = function () {\n if (this.type !== 'Default') {\n this.rangeBar = (createElement('div', { attrs: { class: classNames.rangeBar } }));\n this.element.appendChild(this.rangeBar);\n }\n };\n Slider.prototype.setOrientClass = function () {\n if (this.orientation !== 'Vertical') {\n this.sliderContainer.classList.remove(classNames.verticalSlider);\n this.sliderContainer.classList.add(classNames.horizontalSlider);\n this.firstHandle.setAttribute('aria-orientation', 'horizontal');\n if (this.type === 'Range') {\n this.secondHandle.setAttribute('aria-orientation', 'horizontal');\n }\n }\n else {\n this.sliderContainer.classList.remove(classNames.horizontalSlider);\n this.sliderContainer.classList.add(classNames.verticalSlider);\n this.firstHandle.setAttribute('aria-orientation', 'vertical');\n if (this.type === 'Range') {\n this.secondHandle.setAttribute('aria-orientation', 'vertical');\n }\n }\n };\n Slider.prototype.setAriaAttributes = function (element) {\n var _this = this;\n if (this.type !== 'Range') {\n attributes(element, {\n 'aria-valuemin': this.min.toString(), 'aria-valuemax': this.max.toString()\n });\n }\n else {\n var range = [[this.min.toString(), this.value[1].toString()],\n [this.value[0].toString(), this.max.toString()]];\n range.forEach(function (range, index) {\n var element = index === 0 ? _this.firstHandle : _this.secondHandle;\n if (element) {\n attributes(element, {\n 'aria-valuemin': range[0], 'aria-valuemax': range[1]\n });\n }\n });\n }\n };\n Slider.prototype.createSecondHandle = function () {\n this.secondHandle = createElement('div', {\n attrs: {\n class: classNames.sliderHandle, 'role': 'slider', 'aria-labelledby': this.element.id + '_title', tabIndex: '0'\n }\n });\n this.secondHandle.classList.add(classNames.sliderSecondHandle);\n this.element.appendChild(this.secondHandle);\n if (this.isMaterial && this.tooltip.isVisible) {\n this.secondMaterialHandle = createElement('div', {\n attrs: {\n class: classNames.sliderHandle + ' ' +\n classNames.sliderMaterialHandle\n }\n });\n this.element.appendChild(this.secondMaterialHandle);\n }\n };\n Slider.prototype.createFirstHandle = function () {\n this.firstHandle = createElement('div', {\n attrs: {\n class: classNames.sliderHandle, 'role': 'slider', 'aria-labelledby': this.element.id + '_title', tabIndex: '0'\n }\n });\n this.firstHandle.classList.add(classNames.sliderFirstHandle);\n this.element.appendChild(this.firstHandle);\n if (this.isMaterial && this.tooltip.isVisible) {\n this.firstMaterialHandle = createElement('div', {\n attrs: {\n class: classNames.sliderHandle + ' ' +\n classNames.sliderMaterialHandle\n }\n });\n this.element.appendChild(this.firstMaterialHandle);\n }\n };\n Slider.prototype.wireFirstHandleEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.firstHandle, 'mousedown touchstart', this.handleFocus, this);\n EventHandler.add(this.firstHandle, 'transitionend', this.transitionEnd, this);\n EventHandler.add(this.firstHandle, 'mouseenter touchenter', this.handleOver, this);\n EventHandler.add(this.firstHandle, 'mouseleave touchend', this.handleLeave, this);\n }\n else {\n EventHandler.remove(this.firstHandle, 'mousedown touchstart', this.handleFocus);\n EventHandler.remove(this.firstHandle, 'transitionend', this.transitionEnd);\n EventHandler.remove(this.firstHandle, 'mouseenter touchenter', this.handleOver);\n EventHandler.remove(this.firstHandle, 'mouseleave touchend', this.handleLeave);\n }\n };\n Slider.prototype.wireSecondHandleEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.secondHandle, 'mousedown touchstart', this.handleFocus, this);\n EventHandler.add(this.secondHandle, 'transitionend', this.transitionEnd, this);\n EventHandler.add(this.secondHandle, 'mouseenter touchenter', this.handleOver, this);\n EventHandler.add(this.secondHandle, 'mouseleave touchend', this.handleLeave, this);\n }\n else {\n EventHandler.remove(this.secondHandle, 'mousedown touchstart', this.handleFocus);\n EventHandler.remove(this.secondHandle, 'transitionend', this.transitionEnd);\n EventHandler.remove(this.secondHandle, 'mouseenter touchenter', this.handleOver);\n EventHandler.remove(this.secondHandle, 'mouseleave touchend', this.handleLeave);\n }\n };\n Slider.prototype.handleStart = function () {\n var pos = (this.activeHandle === 1) ? this.handlePos1 : this.handlePos2;\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n if (pos === 0 && this.type !== 'Range') {\n this.getHandle().classList.add(classNames.sliderHandleStart);\n if (this.isMaterial && this.tooltip.isVisible) {\n this.firstMaterialHandle.classList.add(classNames.sliderHandleStart);\n if (tooltipElement) {\n tooltipElement.classList.add(classNames.sliderTooltipStart);\n }\n }\n }\n };\n Slider.prototype.transitionEnd = function (e) {\n this.handleStart();\n this.getHandle().style.transition = 'none';\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if (this.tooltip.isVisible) {\n var tooltipObj = this.activeHandle === 1 ? this.firstTooltipObj : this.secondTooltipObj;\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n if (!this.isMaterial) {\n tooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } };\n this.tooltipAnimation();\n }\n else {\n if (!tooltipElement.classList.contains(classNames.materialTooltipOpen) && e.propertyName !== 'transform') {\n this.openMaterialTooltip();\n }\n else {\n if (this.type === 'Default') {\n tooltipElement.style.transition = this.transition.handle;\n }\n this.refreshTooltip();\n }\n }\n }\n if (this.tooltip.showOn !== 'Always') {\n this.closeTooltip();\n }\n };\n Slider.prototype.handleFocusOut = function () {\n if (this.firstHandle.classList.contains(classNames.sliderHandleFocused)) {\n this.firstHandle.classList.remove(classNames.sliderHandleFocused);\n }\n if (this.type === 'Range') {\n if (this.secondHandle.classList.contains(classNames.sliderHandleFocused)) {\n this.secondHandle.classList.remove(classNames.sliderHandleFocused);\n }\n }\n };\n Slider.prototype.handleFocus = function (e) {\n if (e.currentTarget === this.firstHandle) {\n this.firstHandle.classList.add(classNames.sliderHandleFocused);\n }\n else {\n this.secondHandle.classList.add(classNames.sliderHandleFocused);\n }\n };\n Slider.prototype.handleOver = function (e) {\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Hover') {\n this.tooltipValue();\n var tooltipObj = e.currentTarget === this.firstHandle ? this.firstTooltipObj : this.secondTooltipObj;\n tooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } };\n if (e.currentTarget === this.firstHandle) {\n this.firstTooltipObj.open(this.firstHandle);\n }\n else {\n this.secondTooltipObj.open(this.secondHandle);\n }\n }\n };\n Slider.prototype.handleLeave = function (e) {\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Hover' &&\n !e.currentTarget.classList.contains(classNames.sliderHandleFocused) &&\n !e.currentTarget.classList.contains(classNames.sliderTabHandle)) {\n this.tooltipValue();\n var tooltipObj = e.currentTarget === this.firstHandle ? this.firstTooltipObj : this.secondTooltipObj;\n if (e.currentTarget === this.firstHandle) {\n this.firstTooltipObj.close();\n }\n else {\n this.secondTooltipObj.close();\n }\n tooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } };\n }\n };\n Slider.prototype.setHandler = function () {\n if (this.min > this.max) {\n this.min = this.max;\n }\n this.createFirstHandle();\n if (this.type === 'Range') {\n this.createSecondHandle();\n }\n };\n Slider.prototype.setEnableRTL = function () {\n this.enableRtl && this.orientation !== 'Vertical' ? addClass([this.sliderContainer], classNames.rtl) :\n removeClass([this.sliderContainer], classNames.rtl);\n var preDir = (this.orientation !== 'Vertical') ? this.horDir : this.verDir;\n if (this.enableRtl) {\n this.horDir = 'right';\n this.verDir = 'bottom';\n }\n else {\n this.horDir = 'left';\n this.verDir = 'bottom';\n }\n var currDir = (this.orientation !== 'Vertical') ? this.horDir : this.verDir;\n if (preDir !== currDir) {\n if (this.orientation === 'Horizontal') {\n setStyleAttribute(this.firstHandle, { 'right': '', 'left': 'auto' });\n if (this.type === 'Range') {\n setStyleAttribute(this.secondHandle, { 'top': '', 'left': 'auto' });\n }\n }\n }\n };\n Slider.prototype.tooltipValue = function () {\n var text;\n var value1;\n var value2;\n var args = {\n value: this.value,\n text: ''\n };\n this.setTooltipContent();\n args.text = text = this.firstTooltipObj.content;\n this.trigger('tooltipChange', args);\n this.addTooltipClass(args.text);\n if (text !== args.text) {\n this.customAriaText = args.text;\n this.firstTooltipObj.content = args.text;\n this.setAriaAttrValue(this.firstHandle);\n if (this.type === 'Range') {\n this.secondTooltipObj.content = args.text;\n this.setAriaAttrValue(this.secondHandle);\n }\n }\n };\n Slider.prototype.setTooltipContent = function () {\n var content;\n if (this.type === 'Range') {\n var content_1 = this.formatContent(this.tooltipFormatInfo, false);\n this.firstTooltipObj.content = content_1;\n this.secondTooltipObj.content = content_1;\n }\n else {\n if (!isNullOrUndefined(this.handleVal1)) {\n var content_2 = this.formatContent(this.tooltipFormatInfo, false);\n this.firstTooltipObj.content = content_2;\n }\n }\n };\n Slider.prototype.formatContent = function (formatInfo, ariaContent) {\n var content = '';\n if (!ariaContent) {\n if (this.type === 'Range') {\n if (this.enableRtl && this.orientation !== 'Vertical') {\n content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(this.handleVal2, formatInfo)\n .formatString + ' - ' + this.formatString(this.handleVal1, formatInfo).formatString) :\n (this.handleVal2.toString() + ' - ' + this.handleVal1.toString());\n }\n else {\n content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(this.handleVal1, formatInfo)\n .formatString + ' - ' + this.formatString(this.handleVal2, formatInfo).formatString) :\n (this.handleVal1.toString() + ' - ' + this.handleVal2.toString());\n }\n }\n else {\n if (!isNullOrUndefined(this.handleVal1)) {\n content = (!isNullOrUndefined(formatInfo.format)) ?\n this.formatString(this.handleVal1, formatInfo).formatString : this.handleVal1.toString();\n }\n }\n return content;\n }\n else {\n if (this.type === 'Range') {\n if (this.enableRtl && this.orientation !== 'Vertical') {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n (this.formatString(this.handleVal2, formatInfo).elementVal + ' - ' +\n this.formatString(this.handleVal1, formatInfo).elementVal) :\n (this.handleVal2.toString() + ' - ' + this.handleVal1.toString());\n }\n else {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n (this.formatString(this.handleVal1, formatInfo).elementVal + ' - ' +\n this.formatString(this.handleVal2, formatInfo).elementVal) :\n (this.handleVal1.toString() + ' - ' + this.handleVal2.toString());\n }\n }\n else {\n if (!isNullOrUndefined(this.handleVal1)) {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n this.formatString(this.handleVal1, formatInfo).elementVal : this.handleVal1.toString();\n }\n }\n return content;\n }\n };\n Slider.prototype.addTooltipClass = function (content) {\n var _this = this;\n if (this.isMaterial && this.tooltip.isVisible) {\n var count_1 = content.toString().length;\n var tooltipElement = this.type !== 'Range' ? [this.firstTooltipElement] :\n [this.firstTooltipElement, this.secondTooltipElement];\n tooltipElement.forEach(function (element, index) {\n if (!element) {\n var cssClass = count_1 > 4 ? classNames.sliderMaterialRange : classNames.sliderMaterialDefault;\n !index ? _this.firstTooltipObj.cssClass = classNames.sliderTooltip + ' ' + cssClass :\n _this.secondTooltipObj.cssClass = classNames.sliderTooltip + ' ' + cssClass;\n }\n else {\n if (count_1 > 4) {\n element.classList.remove(classNames.sliderMaterialDefault);\n if (!element.classList.contains(classNames.sliderMaterialRange)) {\n element.classList.add(classNames.sliderMaterialRange);\n element.style.transform = 'scale(1)';\n }\n }\n else {\n element.classList.remove(classNames.sliderMaterialRange);\n if (!element.classList.contains(classNames.sliderMaterialDefault)) {\n element.classList.add(classNames.sliderMaterialDefault);\n element.style.transform = _this.getTooltipTransformProperties(_this.previousTooltipClass).rotate;\n }\n }\n }\n });\n }\n };\n Slider.prototype.tooltipPlacement = function () {\n var tooltipPosition;\n if (this.orientation === 'Horizontal') {\n this.tooltip.placement === 'Before' ? tooltipPosition = 'TopCenter' : tooltipPosition = 'BottomCenter';\n }\n else {\n this.tooltip.placement === 'Before' ? tooltipPosition = 'LeftCenter' : tooltipPosition = 'RightCenter';\n }\n this.firstTooltipObj.position = tooltipPosition;\n if (this.type === 'Range') {\n this.secondTooltipObj.position = tooltipPosition;\n }\n if (this.isMaterial) {\n this.firstTooltipObj.showTipPointer = true;\n this.setProperties({ tooltip: { showOn: 'Always' } }, true);\n this.firstTooltipObj.height = 30;\n if (this.type === 'Range') {\n this.secondTooltipObj.showTipPointer = true;\n this.secondTooltipObj.height = 30;\n }\n }\n };\n Slider.prototype.tooltipBeforeOpen = function (args) {\n var tooltipElement = args.target === this.firstHandle ? this.firstTooltipElement = args.element :\n this.secondTooltipElement = args.element;\n args.target.removeAttribute('aria-describedby');\n if (this.isMaterial && this.tooltip.isVisible) {\n var transformProperties = this.getTooltipTransformProperties(this.previousTooltipClass);\n tooltipElement.firstChild.classList.add(classNames.materialTooltipHide);\n this.handleStart();\n if (tooltipElement.firstElementChild.innerText.length > 4) {\n tooltipElement.style.transform = transformProperties.translate + \" scale(0.01)\";\n }\n else {\n tooltipElement.style.transform = transformProperties.translate + \" \" + transformProperties.rotate + \" scale(0.01)\";\n }\n }\n };\n Slider.prototype.wireMaterialTooltipEvent = function (destroy) {\n if (this.isMaterial && this.tooltip.isVisible) {\n if (!destroy) {\n EventHandler.add(this.firstTooltipElement, 'mousedown touchstart', this.sliderDown, this);\n if (this.type === 'Range') {\n EventHandler.add(this.secondTooltipElement, 'mousedown touchstart', this.sliderDown, this);\n }\n }\n else {\n EventHandler.remove(this.firstTooltipElement, 'mousedown touchstart', this.sliderDown);\n if (this.type === 'Range') {\n EventHandler.remove(this.secondTooltipElement, 'mousedown touchstart', this.sliderDown);\n }\n }\n }\n };\n Slider.prototype.tooltipPositionCalculation = function (position) {\n var cssClass;\n switch (position) {\n case 'TopCenter':\n cssClass = classNames.horizontalTooltipBefore;\n break;\n case 'BottomCenter':\n cssClass = classNames.horizontalTooltipAfter;\n break;\n case 'LeftCenter':\n cssClass = classNames.verticalTooltipBefore;\n break;\n case 'RightCenter':\n cssClass = classNames.verticalTooltipAfter;\n break;\n }\n return cssClass;\n };\n Slider.prototype.getTooltipTransformProperties = function (className) {\n if (this.firstTooltipElement) {\n var position = void 0;\n if (this.orientation === 'Horizontal') {\n position = (this.firstTooltipElement.clientHeight + 14) - (this.firstTooltipElement.clientHeight / 2);\n }\n else {\n position = (this.firstTooltipElement.clientWidth + 14) - (this.firstTooltipElement.clientWidth / 2);\n }\n var transformProperties = this.orientation === 'Horizontal' ?\n (className === classNames.horizontalTooltipBefore ? { rotate: 'rotate(45deg)', translate: \"translateY(\" + position + \"px)\" } :\n { rotate: 'rotate(225deg)', translate: \"translateY(\" + -(position) + \"px)\" }) :\n (className === classNames.verticalTooltipBefore ? { rotate: 'rotate(-45deg)', translate: \"translateX(\" + position + \"px)\" } :\n { rotate: 'rotate(-225deg)', translate: \"translateX(\" + (-position) + \"px)\" });\n return transformProperties;\n }\n return undefined;\n };\n Slider.prototype.openMaterialTooltip = function () {\n var _this = this;\n this.refreshTooltip();\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n var handle = this.activeHandle === 1 ? this.firstMaterialHandle : this.secondMaterialHandle;\n if (tooltipElement.firstChild.classList.contains(classNames.materialTooltipHide)) {\n tooltipElement.firstChild.classList.remove(classNames.materialTooltipHide);\n }\n tooltipElement.firstChild.classList.add(classNames.materialTooltipShow);\n this.getHandle().style.cursor = 'default';\n tooltipElement.style.transition = this.scaleTransform;\n tooltipElement.classList.add(classNames.materialTooltipOpen);\n handle.style.transform = 'scale(0)';\n if (tooltipElement.firstElementChild.innerText.length > 4) {\n tooltipElement.style.transform = 'scale(1)';\n }\n else {\n tooltipElement.style.transform = this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n if (this.type === 'Default') {\n setTimeout(function () { tooltipElement.style.transition = _this.transition.handle; }, 2500);\n }\n else {\n setTimeout(function () { tooltipElement.style.transition = 'none'; }, 2500);\n }\n };\n Slider.prototype.checkTooltipPosition = function (args) {\n var tooltipPosition = args.target === this.firstHandle ? this.firstHandleTooltipPosition :\n this.secondHandleTooltipPosition;\n if (tooltipPosition === undefined || tooltipPosition !== args.collidedPosition) {\n var tooltipClass = this.tooltipPositionCalculation(args.collidedPosition);\n args.element.classList.remove(this.previousTooltipClass);\n args.element.classList.add(tooltipClass);\n this.previousTooltipClass = tooltipClass;\n if (args.element.style.transform && args.element.classList.contains(classNames.materialTooltipOpen) &&\n args.element.firstElementChild.innerText.length < 4) {\n args.element.style.transform = this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n if (args.target === this.firstHandle) {\n this.firstHandleTooltipPosition = args.collidedPosition;\n }\n else {\n this.secondHandleTooltipPosition = args.collidedPosition;\n }\n }\n };\n Slider.prototype.renderTooltip = function () {\n if (this.tooltip.showOn === 'Auto') {\n this.setProperties({ tooltip: { showOn: 'Hover' } }, true);\n }\n this.firstTooltipObj = new Tooltip({\n showTipPointer: false,\n cssClass: classNames.sliderTooltip,\n animation: { open: { effect: 'None' }, close: { effect: 'None' } },\n opensOn: 'Custom',\n beforeOpen: this.tooltipBeforeOpen.bind(this),\n beforeCollision: this.checkTooltipPosition.bind(this),\n afterClose: this.tooltipAfterClose.bind(this)\n });\n this.firstTooltipObj.appendTo(this.firstHandle);\n if (this.type === 'Range') {\n this.secondTooltipObj = new Tooltip({\n showTipPointer: false,\n cssClass: classNames.sliderTooltip,\n animation: { open: { effect: 'None' }, close: { effect: 'None' } },\n opensOn: 'Custom',\n beforeOpen: this.tooltipBeforeOpen.bind(this),\n beforeCollision: this.checkTooltipPosition.bind(this),\n afterClose: this.tooltipAfterClose.bind(this)\n });\n this.secondTooltipObj.appendTo(this.secondHandle);\n }\n this.tooltipPlacement();\n this.firstHandle.style.transition = 'none';\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if (this.type === 'Range') {\n this.secondHandle.style.transition = 'none';\n }\n if (this.isMaterial) {\n this.sliderContainer.classList.add(classNames.materialSlider);\n this.tooltipValue();\n this.firstTooltipObj.open(this.firstHandle);\n if (this.type === 'Range') {\n this.secondTooltipObj.open(this.secondHandle);\n }\n }\n };\n Slider.prototype.tooltipAfterClose = function (args) {\n if (args.element === this.firstTooltipElement) {\n this.firstTooltipElement = undefined;\n }\n else {\n this.secondTooltipElement = undefined;\n }\n };\n Slider.prototype.setButtons = function () {\n this.firstBtn = createElement('div', { className: classNames.sliderButton + ' ' + classNames.firstButton });\n this.firstBtn.appendChild(createElement('span', { className: classNames.sliderButtonIcon }));\n this.firstBtn.tabIndex = -1;\n this.secondBtn = createElement('div', { className: classNames.sliderButton + ' ' + classNames.secondButton });\n this.secondBtn.appendChild(createElement('span', { className: classNames.sliderButtonIcon }));\n this.secondBtn.tabIndex = -1;\n this.sliderContainer.classList.add(classNames.sliderButtonClass);\n this.sliderContainer.appendChild(this.firstBtn);\n this.sliderContainer.appendChild(this.secondBtn);\n this.sliderContainer.appendChild(this.element);\n this.buttonTitle();\n };\n Slider.prototype.buttonTitle = function () {\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n this.l10n.setLocale(this.locale);\n var decrementTitle = this.l10n.getConstant('decrementTitle');\n var incrementTitle = this.l10n.getConstant('incrementTitle');\n attributes(enabledRTL ? this.secondBtn : this.firstBtn, { 'aria-label': decrementTitle, title: decrementTitle });\n attributes(enabledRTL ? this.firstBtn : this.secondBtn, { 'aria-label': incrementTitle, title: incrementTitle });\n };\n Slider.prototype.buttonFocusOut = function () {\n if (this.isMaterial) {\n this.getHandle().style.transform = this.getHandle().style.transform.replace('scale(1.5)', 'scale(1)');\n }\n };\n Slider.prototype.repeatButton = function (args) {\n var buttonElement = args.target.parentElement;\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n if (!tooltipElement && this.tooltip.isVisible) {\n this.openTooltip();\n }\n var hVal = this.handleValueUpdate();\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n var value;\n if (args.target.parentElement.classList.contains(classNames.firstButton)\n || args.target.classList.contains(classNames.firstButton)) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), false));\n }\n else if (args.target.parentElement.classList.contains(classNames.secondButton)\n || (args.target.classList.contains(classNames.secondButton))) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), true));\n }\n if (value >= this.min && value <= this.max) {\n this.changeHandleValue(value);\n this.refreshTooltipOnMove();\n }\n };\n Slider.prototype.repeatHandlerMouse = function (args) {\n args.preventDefault();\n if (args.type === ('mousedown') || args.type === ('touchstart')) {\n this.buttonClick(args);\n this.repeatInterval = setInterval(this.repeatButton.bind(this), 180, args);\n }\n };\n Slider.prototype.materialChange = function () {\n if (this.getHandle().style.transform.indexOf('scale(1.5') === -1) {\n this.getHandle().style.transform = 'scale(1.5)';\n }\n };\n Slider.prototype.repeatHandlerUp = function (e) {\n this.changeEvent('changed');\n if (this.tooltip.isVisible && this.tooltip.showOn !== 'Always' && !this.isMaterial) {\n this.closeTooltip();\n }\n clearInterval(this.repeatInterval);\n this.getHandle().focus();\n };\n Slider.prototype.renderScale = function () {\n var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n var spanText;\n this.noOfDecimals = this.numberOfDecimals(this.step);\n this.ul = createElement('ul', {\n className: classNames.scale + ' ' + 'e-' + orien + '-scale ' + classNames.tick + '-' + this.ticks.placement.toLowerCase(),\n attrs: { role: 'presentation', tabIndex: '-1', 'aria-hidden': 'true' }\n });\n if (Browser.isAndroid && orien === 'h') {\n this.ul.classList.add(classNames.sliderTickPosition);\n }\n var smallStep = this.ticks.smallStep;\n if (!this.ticks.showSmallTicks) {\n this.ticks.largeStep > 0 ? (smallStep = this.ticks.largeStep) :\n (smallStep = (parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min))));\n }\n else if (smallStep <= 0) {\n smallStep = parseFloat(formatUnit(this.step));\n }\n var min = this.fractionalToInteger(this.min);\n var max = this.fractionalToInteger(this.max);\n var steps = this.fractionalToInteger(smallStep);\n var count = Math.abs((max - min) / steps);\n this.element.appendChild(this.ul);\n var li;\n var start = parseFloat(this.min.toString());\n if (orien === 'v') {\n start = parseFloat(this.max.toString());\n }\n var left = 0;\n var tickWidth = 100 / count;\n if (tickWidth === Infinity) {\n tickWidth = 5;\n }\n for (var i = 0; i <= count; i++) {\n li = (createElement('li', {\n attrs: {\n class: classNames.tick, title: start.toString(), role: 'presentation', tabIndex: '-1',\n 'aria-hidden': 'true'\n }\n }));\n var islargeTick = void 0;\n if (this.numberOfDecimals(this.max) === 0 && this.numberOfDecimals(this.min) === 0 && this.numberOfDecimals(this.step) === 0) {\n if (orien === 'h') {\n islargeTick = ((start - parseFloat(this.min.toString())) % this.ticks.largeStep === 0) ? true : false;\n }\n else {\n islargeTick = (Math.abs(start - parseFloat(this.max.toString())) % this.ticks.largeStep === 0) ? true : false;\n }\n }\n else {\n var largestep = this.fractionalToInteger(this.ticks.largeStep);\n var startValue = this.fractionalToInteger(start);\n islargeTick = ((startValue - min) % largestep === 0) ? true : false;\n }\n if (islargeTick) {\n li.classList.add(classNames.large);\n }\n (orien === 'h') ? (li.style.width = tickWidth + '%') : (li.style.height = tickWidth + '%');\n var repeat = islargeTick ? (this.ticks.placement === 'Both' ? 2 : 1) : 0;\n if (islargeTick) {\n for (var j = 0; j < repeat; j++) {\n this.createTick(li, start);\n }\n }\n else {\n this.formatTicksValue(li, start);\n }\n this.ul.appendChild(li);\n this.tickElementCollection.push(li);\n var decimalPoints = void 0;\n if (this.numberOfDecimals(smallStep) > this.numberOfDecimals(start)) {\n decimalPoints = this.numberOfDecimals(smallStep);\n }\n else {\n decimalPoints = this.numberOfDecimals(start);\n }\n if (orien === 'h') {\n start = this.makeRoundNumber(start + smallStep, decimalPoints);\n }\n else {\n start = this.makeRoundNumber(start - smallStep, decimalPoints);\n }\n left = this.makeRoundNumber(left + smallStep, decimalPoints);\n }\n this.firstChild = this.ul.firstElementChild;\n this.lastChild = this.ul.lastElementChild;\n this.firstChild.classList.add(classNames.sliderFirstTick);\n this.lastChild.classList.add(classNames.sliderLastTick);\n this.sliderContainer.classList.add(classNames.scale + '-' + this.ticks.placement.toLowerCase());\n if (orien === 'h') {\n this.firstChild.style.width = tickWidth / 2 + '%';\n this.lastChild.style.width = tickWidth / 2 + '%';\n }\n else {\n this.firstChild.style.height = tickWidth / 2 + '%';\n this.lastChild.style.height = tickWidth / 2 + '%';\n }\n var eventArgs = { ticksWrapper: this.ul, tickElements: this.tickElementCollection };\n this.trigger('renderedTicks', eventArgs);\n this.scaleAlignment();\n };\n Slider.prototype.createTick = function (li, start) {\n var span = createElement('span', {\n className: classNames.tickValue + ' ' + classNames.tick + '-' + this.ticks.placement.toLowerCase(),\n attrs: { role: 'presentation', tabIndex: '-1', 'aria-hidden': 'true' }\n });\n li.appendChild(span);\n span.innerHTML = this.formatTicksValue(li, start);\n };\n Slider.prototype.formatTicksValue = function (li, start) {\n var tickText = this.formatNumber(start);\n var text = !isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format) ?\n this.formatString(start, this.ticksFormatInfo).formatString : tickText;\n var eventArgs = { value: start, text: text, tickElement: li };\n this.trigger('renderingTicks', eventArgs);\n li.setAttribute('title', eventArgs.text.toString());\n return eventArgs.text.toString();\n };\n Slider.prototype.scaleAlignment = function () {\n this.tickValuePosition();\n var smallTick = 12;\n var largeTick = 20;\n var half = largeTick / 2;\n var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n if (this.orientation === 'Vertical') {\n (this.element.getBoundingClientRect().width <= 15) ?\n this.sliderContainer.classList.add(classNames.sliderSmallSize) :\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n }\n else {\n (this.element.getBoundingClientRect().height <= 15) ?\n this.sliderContainer.classList.add(classNames.sliderSmallSize) :\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n }\n };\n Slider.prototype.tickValuePosition = function () {\n var first = this.firstChild.getBoundingClientRect();\n var firstChild;\n var smallStep = this.ticks.smallStep;\n var count = Math.abs((parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min)))) / smallStep;\n if (this.firstChild.children.length > 0) {\n firstChild = this.firstChild.children[0].getBoundingClientRect();\n }\n var tickElements = [this.sliderContainer.querySelectorAll('.' + classNames.tick + '.' +\n classNames.large + ' .' + classNames.tickValue)];\n var other;\n if (this.ticks.placement === 'Both') {\n other = [].slice.call(tickElements[0], 2);\n }\n else {\n other = [].slice.call(tickElements[0], 1);\n }\n var tickWidth = this.orientation === 'Vertical' ?\n (first.height * 2) : (first.width * 2);\n for (var i = 0; i < this.firstChild.children.length; i++) {\n if (this.orientation === 'Vertical') {\n this.firstChild.children[i].style.top = -(firstChild.height / 2) + 'px';\n }\n else {\n if (!this.enableRtl) {\n this.firstChild.children[i].style.left = -(firstChild.width / 2) + 'px';\n }\n else {\n this.firstChild.children[i].style.left = (tickWidth -\n this.firstChild.children[i].getBoundingClientRect().width) / 2 + 'px';\n }\n }\n }\n for (var i = 0; i < other.length; i++) {\n var otherChild = other[i].getBoundingClientRect();\n if (this.orientation === 'Vertical') {\n setStyleAttribute(other[i], { top: (tickWidth - otherChild.height) / 2 + 'px' });\n }\n else {\n setStyleAttribute(other[i], { left: (tickWidth - otherChild.width) / 2 + 'px' });\n }\n }\n if (this.enableRtl && this.lastChild.children.length && count !== 0) {\n this.lastChild.children[0].style.left = -(this.lastChild.getBoundingClientRect().width / 2) + 'px';\n if (this.ticks.placement === 'Both') {\n this.lastChild.children[1].style.left = -(this.lastChild.getBoundingClientRect().width / 2) + 'px';\n }\n }\n if (count === 0) {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n this.firstChild.style.left = this.firstHandle.style.left;\n }\n else {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n this.firstChild.style.right = this.firstHandle.style.right;\n this.firstChild.children[0].style.left =\n (this.firstChild.getBoundingClientRect().width / 2) + 2 + 'px';\n if (this.ticks.placement === 'Both') {\n this.firstChild.children[1].style.left =\n (this.firstChild.getBoundingClientRect().width / 2) + 2 + 'px';\n }\n }\n }\n if (this.orientation === 'Vertical') {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n }\n }\n };\n Slider.prototype.setAriaAttrValue = function (element) {\n var ariaValueText;\n var isTickFormatted = ((!isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format))) ? true : false;\n var text = !isTickFormatted ?\n this.formatContent(this.ticksFormatInfo, false) : this.formatContent(this.tooltipFormatInfo, false);\n var valuenow = isTickFormatted ? this.formatContent(this.ticksFormatInfo, true) :\n this.formatContent(this.tooltipFormatInfo, true);\n text = (!this.customAriaText) ? (text) : (this.customAriaText);\n if (text.split(' - ').length === 2) {\n ariaValueText = text.split(' - ');\n }\n else {\n ariaValueText = [text, text];\n }\n this.setAriaAttributes(element);\n if (this.type !== 'Range') {\n attributes(element, { 'aria-valuenow': valuenow, 'aria-valuetext': text });\n }\n else {\n (!this.enableRtl) ? ((element === this.firstHandle) ?\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] }) :\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] })) :\n ((element === this.firstHandle) ?\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] }) :\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] }));\n }\n };\n Slider.prototype.handleValueUpdate = function () {\n var hVal;\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n hVal = this.handleVal1;\n }\n else {\n hVal = this.handleVal2;\n }\n }\n else {\n hVal = this.handleVal1;\n }\n return hVal;\n };\n Slider.prototype.buttonClick = function (args) {\n var value;\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n var hVal = this.handleValueUpdate();\n if ((args.keyCode === 40) || (args.keyCode === 37)\n || args.currentTarget.classList.contains(classNames.firstButton)) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), false));\n }\n else if ((args.keyCode === 38) || (args.keyCode === 39) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), true));\n }\n else if ((args.keyCode === 33\n || args.currentTarget.classList.contains(classNames.firstButton))) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true));\n }\n else if ((args.keyCode === 34) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false));\n }\n else if ((args.keyCode === 36)) {\n value = parseFloat(this.min.toString());\n }\n else if ((args.keyCode === 35)) {\n value = parseFloat(this.max.toString());\n }\n this.changeHandleValue(value);\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipAnimation();\n this.getHandle().focus();\n if (args.currentTarget.classList.contains(classNames.firstButton)) {\n EventHandler.add(this.firstBtn, 'mouseup touchend', this.buttonUp, this);\n }\n if (args.currentTarget.classList.contains(classNames.secondButton)) {\n EventHandler.add(this.secondBtn, 'mouseup touchend', this.buttonUp, this);\n }\n };\n Slider.prototype.tooltipAnimation = function () {\n if (this.tooltip.isVisible) {\n var tooltipObj = this.activeHandle === 1 ? this.firstTooltipObj : this.secondTooltipObj;\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n if (this.isMaterial) {\n !tooltipElement.classList.contains(classNames.materialTooltipOpen) ? this.openMaterialTooltip() : this.refreshTooltip();\n }\n else {\n tooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } };\n this.openTooltip();\n }\n }\n };\n Slider.prototype.buttonUp = function (args) {\n if (this.tooltip.isVisible) {\n if (!this.isMaterial) {\n var tooltipObj = this.activeHandle === 1 ? this.firstTooltipObj : this.secondTooltipObj;\n tooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'None' } };\n }\n }\n if (args.currentTarget.classList.contains(classNames.firstButton)) {\n EventHandler.remove(this.firstBtn, 'mouseup touchend', this.buttonUp);\n }\n if (args.currentTarget.classList.contains(classNames.secondButton)) {\n EventHandler.remove(this.secondBtn, 'mouseup touchend', this.buttonUp);\n }\n };\n Slider.prototype.setRangeBar = function () {\n if (this.orientation === 'Horizontal') {\n if (this.type === 'MinRange') {\n this.enableRtl ? (this.rangeBar.style.right = '0px') : (this.rangeBar.style.left = '0px');\n setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else {\n this.enableRtl ? (this.rangeBar.style.right =\n this.handlePos1 + 'px') : (this.rangeBar.style.left = this.handlePos1 + 'px');\n setStyleAttribute(this.rangeBar, { 'width': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n else {\n if (this.type === 'MinRange') {\n this.rangeBar.style.bottom = '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else {\n this.rangeBar.style.bottom = this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n };\n Slider.prototype.setValue = function () {\n this.handleVal1 = isNullOrUndefined(this.value) ? this.checkHandleValue(parseFloat(this.min.toString())) :\n this.checkHandleValue(parseFloat(this.value.toString()));\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.preHandlePos1 = this.handlePos1;\n isNullOrUndefined(this.activeHandle) ? (this.type === 'Range' ? this.activeHandle = 2 : this.activeHandle = 1) :\n this.activeHandle = this.activeHandle;\n if (this.type === 'Default' || this.type === 'MinRange') {\n this.setHandlePosition();\n this.handleStart();\n this.value = this.handleVal1;\n this.setAriaAttrValue(this.firstHandle);\n this.changeEvent('changed');\n }\n else {\n this.validateRangeValue();\n }\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n };\n Slider.prototype.rangeValueUpdate = function () {\n if (this.value === null || typeof (this.value) !== 'object') {\n this.value = [parseFloat(formatUnit(this.min)), parseFloat(formatUnit(this.max))];\n }\n };\n Slider.prototype.validateRangeValue = function () {\n this.rangeValueUpdate();\n this.setRangeValue();\n };\n Slider.prototype.modifyZindex = function () {\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n this.firstHandle.style.zIndex = (this.zIndex + 4) + '';\n this.secondHandle.style.zIndex = (this.zIndex + 3) + '';\n if (this.isMaterial && this.tooltip.isVisible && this.firstTooltipElement && this.secondTooltipElement) {\n this.firstTooltipElement.style.zIndex = (this.zIndex + 4) + '';\n this.secondTooltipElement.style.zIndex = (this.zIndex + 3) + '';\n }\n }\n else {\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n if (this.isMaterial && this.tooltip.isVisible && this.firstTooltipElement && this.secondTooltipElement) {\n this.firstTooltipElement.style.zIndex = (this.zIndex + 3) + '';\n this.secondTooltipElement.style.zIndex = (this.zIndex + 4) + '';\n }\n }\n }\n else if (this.isMaterial && this.tooltip.isVisible && this.firstTooltipElement) {\n this.firstTooltipElement.style.zIndex = (this.zIndex + 4) + '';\n }\n };\n Slider.prototype.setHandlePosition = function () {\n var _this = this;\n var pos = (this.activeHandle === 1) ? this.handlePos1 : this.handlePos2;\n var val = (this.activeHandle === 1) ? this.handleVal1 : this.handleVal2;\n var handle;\n var tooltipElement;\n if (this.isMaterial && this.tooltip.isVisible) {\n tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n handle = [this.getHandle(), (this.activeHandle === 1 ? this.firstMaterialHandle : this.secondMaterialHandle)];\n }\n else {\n handle = [this.getHandle()];\n }\n if (this.tooltip.isVisible && pos === 0 && this.type !== 'Range') {\n handle[0].classList.add(classNames.sliderHandleStart);\n if (this.isMaterial) {\n handle[1].classList.add(classNames.sliderHandleStart);\n if (tooltipElement) {\n tooltipElement.classList.add(classNames.sliderTooltipStart);\n }\n }\n }\n else {\n handle[0].classList.remove(classNames.sliderHandleStart);\n if (this.tooltip.isVisible && this.isMaterial) {\n handle[1].classList.remove(classNames.sliderHandleStart);\n if (tooltipElement) {\n tooltipElement.classList.remove(classNames.sliderTooltipStart);\n }\n }\n }\n handle.forEach(function (handle) {\n if (_this.orientation === 'Horizontal') {\n _this.enableRtl ? (handle.style.right =\n pos + \"px\") : (handle.style.left = pos + \"px\");\n }\n else {\n handle.style.bottom = pos + \"px\";\n }\n });\n this.changeEvent('change');\n };\n Slider.prototype.getHandle = function () {\n return (this.activeHandle === 1) ? this.firstHandle : this.secondHandle;\n };\n Slider.prototype.setRangeValue = function () {\n var temp = this.activeHandle;\n this.updateRangeValue();\n this.activeHandle = 1;\n this.setHandlePosition();\n this.activeHandle = 2;\n this.setHandlePosition();\n this.activeHandle = 1;\n };\n Slider.prototype.changeEvent = function (eventName) {\n var previous = eventName === 'change' ? this.previousVal : this.previousChanged;\n if (this.type !== 'Range') {\n this.setProperties({ 'value': this.handleVal1 }, true);\n if (previous !== this.value) {\n this.trigger(eventName, this.changeEventArgs(eventName));\n this.setPreviousVal(eventName, this.value);\n }\n this.setAriaAttrValue(this.firstHandle);\n }\n else {\n var value = this.value = [this.handleVal1, this.handleVal2];\n this.setProperties({ 'value': value }, true);\n if (previous.length === this.value.length\n && this.value[0] !== previous[0] || this.value[1] !== previous[1]) {\n this.trigger(eventName, this.changeEventArgs(eventName));\n this.setPreviousVal(eventName, this.value);\n }\n this.setAriaAttrValue(this.getHandle());\n }\n this.hiddenInput.value = this.value.toString();\n };\n Slider.prototype.changeEventArgs = function (eventName) {\n var eventArgs;\n if (this.tooltip.isVisible && this.firstTooltipObj) {\n this.tooltipValue();\n eventArgs = {\n value: this.value,\n previousValue: eventName === 'change' ? this.previousVal : this.previousChanged,\n action: eventName, text: this.firstTooltipObj.content\n };\n }\n else {\n eventArgs = {\n value: this.value,\n previousValue: eventName === 'change' ? this.previousVal : this.previousChanged,\n action: eventName, text: isNullOrUndefined(this.ticksFormatInfo.format) ? this.value.toString() :\n (this.type !== 'Range' ? this.formatString(this.value, this.ticksFormatInfo).formatString :\n (this.formatString(this.value[0], this.ticksFormatInfo).formatString + ' - ' +\n this.formatString(this.value[1], this.ticksFormatInfo).formatString))\n };\n }\n return eventArgs;\n };\n Slider.prototype.setPreviousVal = function (eventName, value) {\n if (eventName === 'change') {\n this.previousVal = value;\n }\n else {\n this.previousChanged = value;\n }\n };\n Slider.prototype.updateRangeValue = function () {\n var values = this.value.toString().split(',').map(Number);\n if ((this.enableRtl && this.orientation !== 'Vertical') || this.rtl) {\n this.value = [values[1], values[0]];\n }\n else {\n this.value = [values[0], values[1]];\n }\n if (this.enableRtl && this.orientation !== 'Vertical') {\n this.handleVal1 = this.checkHandleValue(this.value[1]);\n this.handleVal2 = this.checkHandleValue(this.value[0]);\n }\n else {\n this.handleVal1 = this.checkHandleValue(this.value[0]);\n this.handleVal2 = this.checkHandleValue(this.value[1]);\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n if (this.handlePos1 > this.handlePos2) {\n this.handlePos1 = this.handlePos2;\n this.handleVal1 = this.handleVal2;\n }\n this.preHandlePos1 = this.handlePos1;\n this.preHandlePos2 = this.handlePos2;\n };\n Slider.prototype.checkHandlePosition = function (value) {\n var pos;\n value = (100 *\n (value - (parseFloat(formatUnit(this.min))))) / ((parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min))));\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width * (value / 100);\n }\n else {\n pos = this.element.getBoundingClientRect().height * (value / 100);\n }\n if (((parseFloat(formatUnit(this.max))) === (parseFloat(formatUnit(this.min))))) {\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width;\n }\n else {\n pos = this.element.getBoundingClientRect().height;\n }\n }\n return pos;\n };\n Slider.prototype.checkHandleValue = function (value) {\n if (this.min > this.max) {\n this.min = this.max;\n }\n if (this.min === this.max) {\n return (parseFloat(formatUnit(this.max)));\n }\n var handle = this.tempStartEnd();\n if (value < handle.start) {\n value = handle.start;\n }\n else if (value > handle.end) {\n value = handle.end;\n }\n return value;\n };\n Slider.prototype.onResize = function () {\n var _this = this;\n this.firstHandle.style.transition = 'none';\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if (this.type === 'Range') {\n this.secondHandle.style.transition = 'none';\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n if (this.handleVal2) {\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n }\n if (this.orientation === 'Horizontal') {\n this.enableRtl ? this.firstHandle.style.right =\n this.handlePos1 + \"px\" : this.firstHandle.style.left = this.handlePos1 + \"px\";\n if (this.isMaterial && this.tooltip.isVisible && this.firstMaterialHandle) {\n this.enableRtl ? this.firstMaterialHandle.style.right =\n this.handlePos1 + \"px\" : this.firstMaterialHandle.style.left = this.handlePos1 + \"px\";\n }\n if (this.type === 'MinRange') {\n this.enableRtl ? (this.rangeBar.style.right = '0px') : (this.rangeBar.style.left = '0px');\n setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else if (this.type === 'Range') {\n this.enableRtl ? this.secondHandle.style.right =\n this.handlePos2 + \"px\" : this.secondHandle.style.left = this.handlePos2 + \"px\";\n if (this.isMaterial && this.tooltip.isVisible && this.secondMaterialHandle) {\n this.enableRtl ? this.secondMaterialHandle.style.right =\n this.handlePos2 + \"px\" : this.secondMaterialHandle.style.left = this.handlePos2 + \"px\";\n }\n this.enableRtl ? (this.rangeBar.style.right =\n this.handlePos1 + 'px') : (this.rangeBar.style.left = this.handlePos1 + 'px');\n setStyleAttribute(this.rangeBar, { 'width': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n else {\n this.firstHandle.style.bottom = this.handlePos1 + \"px\";\n if (this.isMaterial && this.tooltip.isVisible && this.firstMaterialHandle) {\n this.firstMaterialHandle.style.bottom = this.handlePos1 + \"px\";\n }\n if (this.type === 'MinRange') {\n this.rangeBar.style.bottom = '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else if (this.type === 'Range') {\n this.secondHandle.style.bottom = this.handlePos2 + \"px\";\n if (this.isMaterial && this.tooltip.isVisible && this.secondMaterialHandle) {\n this.secondMaterialHandle.style.bottom = this.handlePos2 + \"px\";\n }\n this.rangeBar.style.bottom = this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n if (this.ticks.placement !== 'None' && this.ul) {\n this.removeElement(this.ul);\n this.renderScale();\n }\n if (!this.tooltip.isVisible) {\n setTimeout(function () {\n _this.firstHandle.style.transition = _this.scaleTransform;\n if (_this.type === 'Range') {\n _this.secondHandle.style.transition = _this.scaleTransform;\n }\n });\n }\n this.refreshTooltip();\n };\n Slider.prototype.changeHandleValue = function (value) {\n var position = null;\n if (this.activeHandle === 1) {\n this.handleVal1 = this.checkHandleValue(value);\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n if (this.type === 'Range' && this.handlePos1 > this.handlePos2) {\n this.handlePos1 = this.handlePos2;\n this.handleVal1 = this.handleVal2;\n }\n if (this.handlePos1 !== this.preHandlePos1) {\n position = this.preHandlePos1 = this.handlePos1;\n }\n this.modifyZindex();\n }\n else {\n this.handleVal2 = this.checkHandleValue(value);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n if (this.type === 'Range' && this.handlePos2 < this.handlePos1) {\n this.handlePos2 = this.handlePos1;\n this.handleVal2 = this.handleVal1;\n }\n if (this.handlePos2 !== this.preHandlePos2) {\n position = this.preHandlePos2 = this.handlePos2;\n }\n this.modifyZindex();\n }\n if (position !== null) {\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n this.setHandlePosition();\n }\n };\n Slider.prototype.tempStartEnd = function () {\n if (this.min > this.max) {\n return {\n start: this.max,\n end: this.min\n };\n }\n else {\n return {\n start: this.min,\n end: this.max\n };\n }\n };\n Slider.prototype.xyToPosition = function (position) {\n var pos;\n if (this.min === this.max) {\n return 100;\n }\n if (this.orientation === 'Horizontal') {\n var left = position.x - this.element.getBoundingClientRect().left;\n var num = this.element.offsetWidth / 100;\n this.val = (left / num);\n }\n else {\n var top_1 = position.y - this.element.getBoundingClientRect().top;\n var num = this.element.offsetHeight / 100;\n this.val = 100 - (top_1 / num);\n }\n var val = this.stepValueCalculation(this.val);\n if (val < 0) {\n val = 0;\n }\n else if (val > 100) {\n val = 100;\n }\n if (this.enableRtl && this.orientation !== 'Vertical') {\n val = 100 - val;\n }\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width * (val / 100);\n }\n else {\n pos = this.element.getBoundingClientRect().height * (val / 100);\n }\n return pos;\n };\n Slider.prototype.stepValueCalculation = function (value) {\n if (this.step === 0) {\n this.step = 1;\n }\n var percentStep = (parseFloat(formatUnit(this.step))) / ((parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min))) / 100);\n var remain = value % Math.abs(percentStep);\n if (remain !== 0) {\n if ((percentStep / 2) > remain) {\n value -= remain;\n }\n else {\n value += Math.abs(percentStep) - remain;\n }\n }\n return value;\n };\n Slider.prototype.add = function (a, b, addition) {\n var precision;\n var x = Math.pow(10, precision || 3);\n var val;\n if (addition) {\n val = (Math.round(a * x) + Math.round(b * x)) / x;\n }\n else {\n val = (Math.round(a * x) - Math.round(b * x)) / x;\n }\n return val;\n };\n Slider.prototype.round = function (a) {\n var f = this.step.toString().split('.');\n return f[1] ? parseFloat(a.toFixed(f[1].length)) : Math.round(a);\n };\n Slider.prototype.positionToValue = function (pos) {\n var val;\n var diff = parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min));\n if (this.orientation === 'Horizontal') {\n val = (pos / this.element.getBoundingClientRect().width) * diff;\n }\n else {\n val = (pos / this.element.getBoundingClientRect().height) * diff;\n }\n var total = this.add(val, parseFloat(this.min.toString()), true);\n return (total);\n };\n Slider.prototype.sliderBarClick = function (evt) {\n evt.preventDefault();\n var proxy = this;\n var pos;\n if (evt.type === 'mousedown' || evt.type === 'click') {\n pos = { x: evt.clientX, y: evt.clientY };\n }\n else if (evt.type === 'touchstart') {\n pos = { x: evt.changedTouches[0].clientX, y: evt.changedTouches[0].clientY };\n }\n var handlepos = this.xyToPosition(pos);\n var handleVal = this.positionToValue(handlepos);\n if (this.type !== 'Range') {\n this.handleVal1 = handleVal;\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n }\n if (this.type === 'Range' && (this.handlePos2 - handlepos) < (handlepos - this.handlePos1)) {\n this.secondHandle.classList.add(classNames.sliderActiveHandle);\n this.handlePos2 = this.preHandlePos2 = handlepos;\n this.handleVal2 = handleVal;\n this.activeHandle = 2;\n this.modifyZindex();\n this.secondHandle.focus();\n }\n else {\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n this.handlePos1 = this.preHandlePos1 = handlepos;\n this.handleVal1 = handleVal;\n this.activeHandle = 1;\n this.modifyZindex();\n this.firstHandle.focus();\n }\n if (this.isMaterial && this.tooltip.isVisible) {\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n tooltipElement.classList.add(classNames.materialTooltipActive);\n }\n var focusedElement = this.element.querySelector('.' + classNames.sliderTabHandle);\n if (focusedElement && this.getHandle() !== focusedElement) {\n focusedElement.classList.remove(classNames.sliderTabHandle);\n }\n var handle = this.activeHandle === 1 ? this.firstHandle : this.secondHandle;\n if (evt.target === handle) {\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipAnimation();\n return;\n }\n if (!this.checkRepeatedValue(handleVal)) {\n return;\n }\n var transition = this.isMaterial && this.tooltip.isVisible ?\n this.transitionOnMaterialTooltip : this.transition;\n this.getHandle().style.transition = transition.handle;\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = transition.rangeBar;\n }\n this.setHandlePosition();\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n };\n Slider.prototype.refreshTooltipOnMove = function () {\n if (this.tooltip.isVisible) {\n this.tooltipValue();\n this.activeHandle === 1 ? this.firstTooltipObj.refresh(this.firstHandle) :\n this.secondTooltipObj.refresh(this.secondHandle);\n }\n };\n Slider.prototype.sliderDown = function (event) {\n event.preventDefault();\n this.sliderBarClick(event);\n EventHandler.add(document, 'mousemove touchmove', this.sliderBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.sliderBarUp, this);\n };\n Slider.prototype.sliderBarUp = function () {\n this.changeEvent('changed');\n this.handleFocusOut();\n this.firstHandle.classList.remove(classNames.sliderActiveHandle);\n if (this.type === 'Range') {\n this.secondHandle.classList.remove(classNames.sliderActiveHandle);\n }\n if (this.tooltip.isVisible) {\n if (this.tooltip.showOn !== 'Always') {\n this.closeTooltip();\n }\n if (!this.isMaterial) {\n var tooltipObj = this.activeHandle === 1 ? this.firstTooltipObj : this.secondTooltipObj;\n tooltipObj.animation = { open: { effect: 'None' }, close: { effect: 'None' } };\n }\n }\n if (this.isMaterial) {\n this.getHandle().style.transform = this.getHandle().style.transform.replace('scale(1.5)', 'scale(1)');\n if (this.tooltip.isVisible) {\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n tooltipElement.classList.remove(classNames.materialTooltipActive);\n }\n }\n EventHandler.remove(document, 'mousemove touchmove', this.sliderBarMove);\n EventHandler.remove(document, 'mouseup touchend', this.sliderBarUp);\n };\n Slider.prototype.sliderBarMove = function (evt) {\n if (evt.type !== 'touchmove') {\n evt.preventDefault();\n }\n var pos;\n if (evt.type === 'mousemove') {\n pos = { x: evt.clientX, y: evt.clientY };\n }\n else {\n pos = { x: evt.changedTouches[0].clientX, y: evt.changedTouches[0].clientY };\n }\n var handlepos = this.xyToPosition(pos);\n var handleVal = this.positionToValue(handlepos);\n handlepos = Math.round(handlepos);\n if (this.type !== 'Range' && this.activeHandle === 1) {\n this.handlePos1 = handlepos;\n this.handleVal1 = handleVal;\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n }\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n if (handlepos > this.handlePos2) {\n handlepos = this.handlePos2;\n handleVal = this.handleVal2;\n }\n if (handlepos !== this.preHandlePos1) {\n this.handlePos1 = this.preHandlePos1 = handlepos;\n this.handleVal1 = handleVal;\n this.activeHandle = 1;\n }\n }\n else if (this.activeHandle === 2) {\n this.secondHandle.classList.add(classNames.sliderActiveHandle);\n if (handlepos < this.handlePos1) {\n handlepos = this.handlePos1;\n handleVal = this.handleVal1;\n }\n if (handlepos !== this.preHandlePos2) {\n this.handlePos2 = this.preHandlePos2 = handlepos;\n this.handleVal2 = handleVal;\n this.activeHandle = 2;\n }\n }\n }\n if (!this.checkRepeatedValue(handleVal)) {\n return;\n }\n this.getHandle().style.transition = this.scaleTransform;\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n this.setHandlePosition();\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n var tooltipElement = this.activeHandle === 1 ? this.firstTooltipElement : this.secondTooltipElement;\n if (this.tooltip.isVisible) {\n if (this.isMaterial) {\n !tooltipElement.classList.contains(classNames.materialTooltipOpen) ? this.openMaterialTooltip() :\n this.refreshTooltipOnMove();\n }\n else {\n !tooltipElement ? this.openTooltip() : this.refreshTooltipOnMove();\n }\n }\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n };\n Slider.prototype.checkRepeatedValue = function (currentValue) {\n if (this.type === 'Range') {\n var previousVal = this.enableRtl && this.orientation !== 'Vertical' ? (this.activeHandle === 1 ?\n this.previousVal[1] : this.previousVal[0]) :\n (this.activeHandle === 1 ? this.previousVal[0] : this.previousVal[1]);\n if (currentValue === previousVal) {\n return 0;\n }\n }\n else {\n if (currentValue === this.previousVal) {\n return 0;\n }\n }\n return 1;\n };\n Slider.prototype.refreshTooltip = function () {\n if (this.tooltip.isVisible && this.firstTooltipObj) {\n this.tooltipValue();\n this.firstTooltipObj.refresh(this.firstHandle);\n if (this.type === 'Range') {\n this.secondTooltipObj.refresh(this.secondHandle);\n }\n }\n };\n Slider.prototype.openTooltip = function () {\n if (this.tooltip.isVisible && this.firstTooltipObj) {\n this.tooltipValue();\n if (this.isMaterial) {\n this.openMaterialTooltip();\n }\n else {\n if (this.activeHandle === 1) {\n this.firstTooltipObj.open(this.firstHandle);\n }\n else {\n this.secondTooltipObj.open(this.secondHandle);\n }\n }\n }\n };\n Slider.prototype.keyDown = function (event) {\n switch (event.keyCode) {\n case 37:\n case 38:\n case 39:\n case 40:\n case 33:\n case 34:\n case 36:\n case 35:\n event.preventDefault();\n this.buttonClick(event);\n if (this.tooltip.isVisible && this.tooltip.showOn !== 'Always' && !this.isMaterial) {\n this.closeTooltip();\n }\n break;\n }\n };\n Slider.prototype.wireButtonEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.firstBtn, 'mouseleave touchleave', this.buttonFocusOut, this);\n EventHandler.add(this.secondBtn, 'mouseleave touchleave', this.buttonFocusOut, this);\n EventHandler.add(this.firstBtn, 'mousedown touchstart', this.repeatHandlerMouse, this);\n EventHandler.add(this.firstBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp, this);\n EventHandler.add(this.secondBtn, 'mousedown touchstart', this.repeatHandlerMouse, this);\n EventHandler.add(this.secondBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp, this);\n EventHandler.add(this.firstBtn, 'focusout', this.sliderFocusOut, this);\n EventHandler.add(this.secondBtn, 'focusout', this.sliderFocusOut, this);\n }\n else {\n EventHandler.remove(this.firstBtn, 'mouseleave touchleave', this.buttonFocusOut);\n EventHandler.remove(this.secondBtn, 'mouseleave touchleave', this.buttonFocusOut);\n EventHandler.remove(this.firstBtn, 'mousedown touchstart', this.repeatHandlerMouse);\n EventHandler.remove(this.firstBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp);\n EventHandler.remove(this.secondBtn, 'mousedown touchstart', this.repeatHandlerMouse);\n EventHandler.remove(this.secondBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp);\n EventHandler.remove(this.firstBtn, 'focusout', this.sliderFocusOut);\n EventHandler.remove(this.secondBtn, 'focusout', this.sliderFocusOut);\n }\n };\n Slider.prototype.wireEvents = function () {\n this.onresize = this.onResize.bind(this);\n window.addEventListener('resize', this.onresize);\n if (this.enabled && !this.readOnly) {\n EventHandler.add(this.element, 'mousedown touchstart', this.sliderDown, this);\n EventHandler.add(this.sliderContainer, 'keydown', this.keyDown, this);\n EventHandler.add(this.sliderContainer, 'keyup', this.keyUp, this);\n EventHandler.add(this.element, 'focusout', this.sliderFocusOut, this);\n EventHandler.add(this.sliderContainer, 'mouseover mouseout touchstart touchend', this.hover, this);\n this.wireFirstHandleEvt(false);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(false);\n }\n if (this.showButtons) {\n this.wireButtonEvt(false);\n }\n this.wireMaterialTooltipEvent(false);\n }\n };\n Slider.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'mousedown touchstart', this.sliderDown);\n EventHandler.remove(this.sliderContainer, 'keydown', this.keyDown);\n EventHandler.remove(this.sliderContainer, 'keyup', this.keyUp);\n EventHandler.remove(this.element, 'focusout', this.sliderFocusOut);\n EventHandler.remove(this.sliderContainer, 'mouseover mouseout touchstart touchend', this.hover);\n this.wireFirstHandleEvt(true);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(true);\n }\n if (this.showButtons) {\n this.wireButtonEvt(true);\n }\n this.wireMaterialTooltipEvent(true);\n };\n Slider.prototype.keyUp = function (event) {\n if (event.keyCode === 9 && event.target.classList.contains(classNames.sliderHandle)) {\n if (!event.target.classList.contains(classNames.sliderTabHandle)) {\n if (this.element.querySelector('.' + classNames.sliderTabHandle)) {\n this.element.querySelector('.' + classNames.sliderTabHandle).classList.remove(classNames.sliderTabHandle);\n }\n event.target.classList.add(classNames.sliderTabHandle);\n var parentElement = event.target.parentElement;\n if (parentElement === this.element) {\n parentElement.querySelector('.' + classNames.sliderTrack).classList.add(classNames.sliderTabTrack);\n if (this.type === 'Range' || this.type === 'MinRange') {\n parentElement.querySelector('.' + classNames.rangeBar).classList.add(classNames.sliderTabRange);\n }\n }\n if (this.type === 'Range') {\n (event.target.previousSibling).classList.contains(classNames.sliderHandle) ?\n this.activeHandle = 2 : this.activeHandle = 1;\n }\n this.tooltipAnimation();\n if (this.tooltip.isVisible && this.tooltip.showOn !== 'Always' && !this.isMaterial) {\n this.closeTooltip();\n }\n }\n }\n this.changeEvent('changed');\n };\n Slider.prototype.hover = function (event) {\n if (!isNullOrUndefined(event)) {\n if (event.type === 'mouseover' || event.type === 'touchmove' || event.type === 'mousemove' ||\n event.type === 'pointermove' || event.type === 'touchstart') {\n this.sliderContainer.classList.add(classNames.sliderHover);\n }\n else {\n this.sliderContainer.classList.remove(classNames.sliderHover);\n }\n }\n };\n Slider.prototype.sliderFocusOut = function (event) {\n var _this = this;\n if (event.relatedTarget !== this.secondHandle && event.relatedTarget !== this.firstHandle &&\n event.relatedTarget !== this.element && event.relatedTarget !== this.firstBtn && event.relatedTarget !== this.secondBtn) {\n this.hiddenInput.focus();\n this.hiddenInput.blur();\n if (this.isMaterial && this.tooltip.isVisible) {\n var transformProperties_1 = this.getTooltipTransformProperties(this.previousTooltipClass);\n var tooltipElement = this.type !== 'Range' ? [this.firstTooltipElement] :\n [this.firstTooltipElement, this.secondTooltipElement];\n var hiddenHandle_1 = this.type !== 'Range' ? [this.firstHandle] : [this.firstHandle, this.secondHandle];\n var handle_1 = this.type !== 'Range' ? [this.firstMaterialHandle] :\n [this.firstMaterialHandle, this.secondMaterialHandle];\n tooltipElement.forEach(function (tooltipElement, index) {\n if (tooltipElement) {\n tooltipElement.style.transition = _this.scaleTransform;\n tooltipElement.firstChild.classList.remove(classNames.materialTooltipShow);\n tooltipElement.firstChild.classList.add(classNames.materialTooltipHide);\n hiddenHandle_1[index].style.cursor = '-webkit-grab';\n hiddenHandle_1[index].style.cursor = 'grab';\n handle_1[index].style.transform = 'scale(1)';\n tooltipElement.classList.remove(classNames.materialTooltipOpen);\n if (tooltipElement.firstElementChild.innerText.length > 4) {\n tooltipElement.style.transform = transformProperties_1.translate + ' ' + 'scale(0.01)';\n }\n else {\n tooltipElement.style.transform = transformProperties_1.translate + ' ' +\n transformProperties_1.rotate + ' ' + 'scale(0.01)';\n }\n setTimeout(function () { tooltipElement.style.transition = 'none'; }, 2500);\n }\n });\n }\n if (this.element.querySelector('.' + classNames.sliderTabHandle)) {\n this.element.querySelector('.' + classNames.sliderTabHandle).classList.remove(classNames.sliderTabHandle);\n }\n if (this.element.querySelector('.' + classNames.sliderTabTrack)) {\n this.element.querySelector('.' + classNames.sliderTabTrack).classList.remove(classNames.sliderTabTrack);\n if ((this.type === 'Range' || this.type === 'MinRange') &&\n this.element.querySelector('.' + classNames.sliderTabRange)) {\n this.element.querySelector('.' + classNames.sliderTabRange).classList.remove(classNames.sliderTabRange);\n }\n }\n }\n };\n Slider.prototype.closeTooltip = function () {\n if (this.tooltip.isVisible) {\n this.tooltipValue();\n if (this.activeHandle === 1) {\n this.firstTooltipObj.close();\n }\n else {\n this.secondTooltipObj.close();\n }\n }\n };\n Slider.prototype.removeElement = function (element) {\n if (element.parentNode) {\n element.parentNode.removeChild(element);\n }\n };\n Slider.prototype.changeSliderType = function (type) {\n if (this.isMaterial && this.firstMaterialHandle) {\n this.sliderContainer.classList.remove(classNames.materialSlider);\n this.removeElement(this.firstMaterialHandle);\n this.firstTooltipElement = undefined;\n this.firstHandleTooltipPosition = undefined;\n if (this.secondMaterialHandle) {\n this.removeElement(this.secondMaterialHandle);\n this.secondTooltipElement = undefined;\n this.secondHandleTooltipPosition = undefined;\n }\n }\n if (this.tooltip.isVisible && this.isMaterial) {\n this.sliderContainer.classList.add(classNames.materialSlider);\n }\n this.removeElement(this.firstHandle);\n if (type !== 'Default') {\n if (type === 'Range') {\n this.removeElement(this.secondHandle);\n }\n this.removeElement(this.rangeBar);\n }\n if (this.tooltip.isVisible && !isNullOrUndefined(this.firstTooltipObj)) {\n this.firstTooltipObj.destroy();\n if (type === 'Range' && !isNullOrUndefined(this.secondTooltipObj)) {\n this.secondTooltipObj.destroy();\n }\n }\n this.createRangeBar();\n this.setHandler();\n this.setOrientClass();\n this.wireFirstHandleEvt(false);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(false);\n }\n this.setValue();\n if (this.tooltip.isVisible) {\n this.renderTooltip();\n this.wireMaterialTooltipEvent(false);\n }\n this.updateConfig();\n };\n Slider.prototype.changeRtl = function () {\n if (!this.enableRtl && this.type === 'Range') {\n this.value = [this.handleVal2, this.handleVal1];\n }\n this.updateConfig();\n if (this.tooltip.isVisible) {\n this.firstTooltipObj.refresh(this.firstHandle);\n if (this.type === 'Range') {\n this.secondTooltipObj.refresh(this.secondHandle);\n }\n }\n if (this.showButtons) {\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n attributes(enabledRTL ? this.secondBtn : this.firstBtn, { 'aria-label': 'Decrease', title: 'Decrease' });\n attributes(enabledRTL ? this.firstBtn : this.secondBtn, { 'aria-label': 'Increase', title: 'Increase' });\n }\n };\n Slider.prototype.changeOrientation = function () {\n this.changeSliderType(this.type);\n };\n Slider.prototype.updateConfig = function () {\n this.setEnableRTL();\n this.setValue();\n if (this.tooltip.isVisible) {\n this.refreshTooltip();\n }\n if (this.ticks.placement !== 'None') {\n if (this.ul) {\n this.removeElement(this.ul);\n this.renderScale();\n }\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Slider.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Prepares the slider for safe removal from the DOM.\n * Detaches all event handlers, attributes, and classes to avoid memory leaks.\n * @method destroy\n * @return {void}\n */\n Slider.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.unwireEvents();\n window.removeEventListener('resize', this.onresize);\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n this.firstHandle.removeAttribute('aria-orientation');\n if (this.type === 'Range') {\n this.secondHandle.removeAttribute('aria-orientation');\n }\n this.sliderContainer.parentNode.insertBefore(this.element, this.sliderContainer);\n detach(this.sliderContainer);\n if (this.tooltip.isVisible) {\n this.firstTooltipObj.destroy();\n if (this.type === 'Range' && !isNullOrUndefined(this.secondTooltipObj)) {\n this.secondTooltipObj.destroy();\n }\n }\n this.element.innerHTML = '';\n };\n /**\n * Calls internally if any of the property value is changed.\n * @private\n */\n Slider.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'value':\n if (!isNullOrUndefined(oldProp.value) && !isNullOrUndefined(newProp.value)) {\n if (oldProp.value.toString() !== newProp.value.toString()) {\n this.setValue();\n this.refreshTooltip();\n if (this.type === 'Range') {\n if (oldProp.value[0] === newProp.value[0]) {\n this.activeHandle = 2;\n }\n else {\n this.activeHandle = 1;\n }\n }\n }\n }\n break;\n case 'min':\n case 'step':\n case 'max':\n this.setMinMaxValue();\n break;\n case 'tooltip':\n if (!isNullOrUndefined(newProp.tooltip) && !isNullOrUndefined(oldProp.tooltip)) {\n this.setTooltip();\n }\n break;\n case 'type':\n this.changeSliderType(oldProp.type);\n this.setZindex();\n break;\n case 'enableRtl':\n if (oldProp.enableRtl !== newProp.enableRtl && this.orientation !== 'Vertical') {\n this.rtl = oldProp.enableRtl;\n this.changeRtl();\n }\n break;\n case 'orientation':\n this.changeOrientation();\n break;\n case 'ticks':\n if (!isNullOrUndefined(this.sliderContainer.querySelector('.' + classNames.scale))) {\n detach(this.ul);\n Array.prototype.forEach.call(this.sliderContainer.classList, function (className) {\n if (className.match(/e-scale-/)) {\n _this.sliderContainer.classList.remove(className);\n }\n });\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n this.setZindex();\n }\n break;\n case 'locale':\n if (this.showButtons) {\n this.buttonTitle();\n }\n break;\n case 'showButtons':\n if (newProp.showButtons) {\n this.setButtons();\n this.onResize();\n if (this.enabled && !this.readOnly) {\n this.wireButtonEvt(false);\n }\n }\n else {\n if (this.firstBtn && this.secondBtn) {\n this.sliderContainer.removeChild(this.firstBtn);\n this.sliderContainer.removeChild(this.secondBtn);\n this.firstBtn = undefined;\n this.secondBtn = undefined;\n }\n }\n break;\n case 'enabled':\n this.setEnabled();\n break;\n case 'readOnly':\n this.setReadOnly();\n break;\n }\n }\n };\n Slider.prototype.setReadOnly = function () {\n if (this.readOnly) {\n this.unwireEvents();\n this.sliderContainer.classList.add(classNames.readOnly);\n }\n else {\n this.wireEvents();\n this.sliderContainer.classList.remove(classNames.readOnly);\n }\n };\n Slider.prototype.setMinMaxValue = function () {\n var _this = this;\n this.setValue();\n this.refreshTooltip();\n if (!isNullOrUndefined(this.sliderContainer.querySelector('.' + classNames.scale))) {\n if (this.ul) {\n detach(this.ul);\n Array.prototype.forEach.call(this.sliderContainer.classList, function (className) {\n if (className.match(/e-scale-/)) {\n _this.sliderContainer.classList.remove(className);\n }\n });\n }\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n this.setZindex();\n }\n };\n Slider.prototype.setZindex = function () {\n this.zIndex = 6;\n if (!isNullOrUndefined(this.ticks) && this.ticks.placement !== 'None') {\n this.ul.style.zIndex = (this.zIndex + -7) + '';\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n if (!this.isMaterial && !isNullOrUndefined(this.ticks) && this.ticks.placement === 'Both') {\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n if (this.type === 'Range') {\n this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n }\n };\n Slider.prototype.setTooltip = function () {\n this.changeSliderType(this.type);\n };\n /**\n * Gets the component name\n * @private\n */\n Slider.prototype.getModuleName = function () {\n return 'slider';\n };\n __decorate([\n Property(null)\n ], Slider.prototype, \"value\", void 0);\n __decorate([\n Property(1)\n ], Slider.prototype, \"step\", void 0);\n __decorate([\n Property(0)\n ], Slider.prototype, \"min\", void 0);\n __decorate([\n Property(100)\n ], Slider.prototype, \"max\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"readOnly\", void 0);\n __decorate([\n Property('Default')\n ], Slider.prototype, \"type\", void 0);\n __decorate([\n Complex({}, TicksData)\n ], Slider.prototype, \"ticks\", void 0);\n __decorate([\n Property(true)\n ], Slider.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"enableRtl\", void 0);\n __decorate([\n Complex({}, TooltipData)\n ], Slider.prototype, \"tooltip\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"showButtons\", void 0);\n __decorate([\n Property(true)\n ], Slider.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property('Horizontal')\n ], Slider.prototype, \"orientation\", void 0);\n __decorate([\n Property('')\n ], Slider.prototype, \"cssClass\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"changed\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"renderingTicks\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"renderedTicks\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"tooltipChange\", void 0);\n Slider = __decorate([\n NotifyPropertyChanges\n ], Slider);\n return Slider;\n}(Component));\nexport { Slider };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Event, EventHandler, L10n, compile, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, createElement, detach, Animation } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, KeyboardEvents, setValue, getValue, ChildProperty } from '@syncfusion/ej2-base';\nimport { Collection, Complex, Browser } from '@syncfusion/ej2-base';\nvar ROOT = 'e-uploader';\nvar CONTROL_WRAPPER = 'e-upload';\nvar INPUT_WRAPPER = 'e-file-select';\nvar DROP_AREA = 'e-file-drop';\nvar DROP_WRAPPER = 'e-file-select-wrap';\nvar LIST_PARENT = 'e-upload-files';\nvar FILE = 'e-upload-file-list';\nvar STATUS = 'e-file-status';\nvar ACTION_BUTTONS = 'e-upload-actions';\nvar UPLOAD_BUTTONS = 'e-file-upload-btn e-css e-btn e-primary';\nvar CLEAR_BUTTONS = 'e-file-clear-btn e-css e-btn e-flat';\nvar FILE_NAME = 'e-file-name';\nvar FILE_TYPE = 'e-file-type';\nvar FILE_SIZE = 'e-file-size';\nvar CLEAR_ICON = 'e-file-remove-btn';\nvar REMOVE_ICON = 'e-file-delete-btn';\nvar DRAG_HOVER = 'e-upload-drag-hover';\nvar PROGRESS_WRAPPER = 'e-upload-progress-wrap';\nvar PROGRESSBAR = 'e-upload-progress-bar';\nvar PROGRESSBAR_TEXT = 'e-progress-bar-text';\nvar UPLOAD_INPROGRESS = 'e-upload-progress';\nvar UPLOAD_SUCCESS = 'e-upload-success';\nvar UPLOAD_FAILED = 'e-upload-fails';\nvar TEXT_CONTAINER = 'e-file-container';\nvar VALIDATION_FAILS = 'e-validation-fails';\nvar RTL = 'e-rtl';\nvar DISABLED = 'e-disabled';\nvar RTL_CONTAINER = 'e-rtl-container';\nvar ICON_FOCUSED = 'e-clear-icon-focus';\nvar PROGRESS_INNER_WRAPPER = 'e-progress-inner-wrap';\nvar FilesProp = /** @class */ (function (_super) {\n __extends(FilesProp, _super);\n function FilesProp() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], FilesProp.prototype, \"name\", void 0);\n __decorate([\n Property(null)\n ], FilesProp.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], FilesProp.prototype, \"type\", void 0);\n return FilesProp;\n}(ChildProperty));\nexport { FilesProp };\nvar ButtonsProps = /** @class */ (function (_super) {\n __extends(ButtonsProps, _super);\n function ButtonsProps() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Browse')\n ], ButtonsProps.prototype, \"browse\", void 0);\n __decorate([\n Property('Upload')\n ], ButtonsProps.prototype, \"upload\", void 0);\n __decorate([\n Property('Clear')\n ], ButtonsProps.prototype, \"clear\", void 0);\n return ButtonsProps;\n}(ChildProperty));\nexport { ButtonsProps };\nvar AsyncSettings = /** @class */ (function (_super) {\n __extends(AsyncSettings, _super);\n function AsyncSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], AsyncSettings.prototype, \"saveUrl\", void 0);\n __decorate([\n Property('')\n ], AsyncSettings.prototype, \"removeUrl\", void 0);\n return AsyncSettings;\n}(ChildProperty));\nexport { AsyncSettings };\n/**\n * The uploader component allows to upload images, documents, and other files from local to server.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar Uploader = /** @class */ (function (_super) {\n __extends(Uploader, _super);\n /**\n * Triggers when change the Uploader value.\n */\n function Uploader(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.initialAttr = { accept: null, multiple: false, disabled: false };\n _this.fileList = [];\n _this.filesData = [];\n _this.uploadedFilesData = [];\n _this.isForm = false;\n return _this;\n }\n /**\n * Calls internally if any of the property value is changed.\n * @private\n */\n Uploader.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowedExtensions':\n this.setExtensions(this.allowedExtensions);\n this.clearAll();\n break;\n case 'enabled':\n this.setControlStatus();\n break;\n case 'multiple':\n this.setMultipleSelection();\n break;\n case 'enableRtl':\n this.setRTL();\n this.reRenderFileList();\n break;\n case 'buttons':\n this.buttons.browse = isNullOrUndefined(this.buttons.browse) ? '' : this.buttons.browse;\n this.buttons.clear = isNullOrUndefined(this.buttons.clear) ? '' : this.buttons.clear;\n this.buttons.upload = isNullOrUndefined(this.buttons.upload) ? '' : this.buttons.upload;\n this.renderButtonTemplates();\n break;\n case 'dropArea':\n this.unBindDropEvents();\n this.setDropArea();\n break;\n case 'showFileList':\n if (this.listParent) {\n this.listParent.style.display = this.showFileList ? 'block' : 'none';\n this.actionButtons.style.display = this.showFileList ? 'block' : 'none';\n }\n break;\n case 'files':\n this.renderPreLoadFiles();\n break;\n case 'minFileSize':\n case 'maxFileSize':\n case 'template':\n case 'autoUpload':\n this.clearAll();\n break;\n case 'locale':\n this.l10n.setLocale(this.locale);\n this.setLocalizedTexts();\n this.preLocaleObj = getValue('currentLocale', this.l10n);\n break;\n }\n }\n };\n Uploader.prototype.setLocalizedTexts = function () {\n if (isNullOrUndefined(this.template)) {\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.innerText = (this.buttons.browse === 'Browse') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.innerText);\n this.uploadWrapper.querySelector('.' + DROP_AREA).innerHTML = this.localizedTexts('dropFilesHint');\n }\n this.updateFileList();\n }\n };\n Uploader.prototype.getKeyValue = function (val) {\n var keyValue;\n for (var _i = 0, _a = Object.keys(this.preLocaleObj); _i < _a.length; _i++) {\n var key = _a[_i];\n if (this.preLocaleObj[key] === val) {\n keyValue = key;\n }\n }\n return keyValue;\n };\n Uploader.prototype.updateFileList = function () {\n var element;\n if (this.fileList.length > 0 && !isNullOrUndefined(this.uploadWrapper.querySelector('.' + LIST_PARENT))) {\n for (var i = 0; i < this.fileList.length; i++) {\n element = this.fileList[i].querySelector('.e-file-status');\n element.innerHTML = this.localizedTexts(this.getKeyValue(this.filesData[i].status));\n this.filesData[i].status = this.localizedTexts(this.getKeyValue(this.filesData[i].status));\n if (this.fileList[i].classList.contains(UPLOAD_SUCCESS)) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('remove'));\n }\n else {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('delete'));\n }\n if (!this.autoUpload) {\n this.uploadButton.innerText = (this.buttons.upload === 'Upload') ?\n this.localizedTexts('Upload') : this.buttons.upload;\n this.clearButton.innerText = (this.buttons.clear === 'Clear') ?\n this.localizedTexts('Clear') : this.buttons.clear;\n }\n }\n }\n };\n Uploader.prototype.reRenderFileList = function () {\n if (this.listParent) {\n detach(this.listParent);\n this.listParent = null;\n this.fileList = [];\n this.removeActionButtons();\n this.createFileList(this.filesData);\n this.renderActionButtons();\n }\n };\n Uploader.prototype.preRender = function () {\n this.cloneElement = this.element.cloneNode(true);\n this.localeText = { Browse: 'Browse', Clear: 'Clear', Upload: 'Upload',\n dropFilesHint: 'or Drop files here', invalidMaxFileSize: 'File size is too large',\n invalidMinFileSize: 'File size is too small', invalidFileType: 'File type is not allowed',\n uploadFailedMessage: 'File failed to upload', uploadSuccessMessage: 'File uploaded successfully',\n removedSuccessMessage: 'File removed successfully', removedFailedMessage: 'File failed to remove', inProgress: 'Uploading',\n readyToUploadMessage: 'Ready to upload', remove: 'Remove', cancel: 'Cancel', delete: 'Delete file'\n };\n this.l10n = new L10n('uploader', this.localeText, this.locale);\n this.preLocaleObj = getValue('currentLocale', this.l10n);\n this.checkHTMLAttributes();\n if (this.asyncSettings.saveUrl === '' && this.asyncSettings.removeUrl === '' && !this.autoUpload) {\n if (!isNullOrUndefined(this.element.closest('form'))) {\n this.isForm = true;\n this.element.closest('form').setAttribute('enctype', 'multipart/form-data');\n this.element.closest('form').setAttribute('encoding', 'multipart/form-data');\n }\n }\n var ejInstance = getValue('ej2_instances', this.element);\n if (this.element.tagName === 'EJS-UPLOADER' || this.element.tagName === 'UPLOADERCOMPONENT') {\n var inputElement = createElement('input', { attrs: { type: 'file' } });\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n inputElement.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n inputElement.innerHTML = this.element.innerHTML;\n }\n if (!inputElement.hasAttribute('name')) {\n inputElement.setAttribute('name', 'UploadFiles');\n }\n this.element.appendChild(inputElement);\n this.element = inputElement;\n setValue('ej2_instances', ejInstance, this.element);\n }\n if (isNullOrUndefined(this.element.getAttribute('name'))) {\n this.element.setAttribute('name', this.element.getAttribute('id'));\n }\n if (!this.element.hasAttribute('type')) {\n this.element.setAttribute('type', 'file');\n }\n this.keyConfigs = {\n previous: 'shift+tab',\n enter: 'enter',\n next: 'tab'\n };\n };\n Uploader.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Return the module name of the component.\n */\n Uploader.prototype.getModuleName = function () {\n return 'uploader';\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Uploader.prototype.render = function () {\n this.renderBrowseButton();\n this.initializeUpload();\n this.wireEvents();\n this.setMultipleSelection();\n this.setExtensions(this.allowedExtensions);\n this.setRTL();\n this.renderPreLoadFiles();\n this.setControlStatus();\n };\n Uploader.prototype.renderBrowseButton = function () {\n this.browseButton = createElement('button', { className: 'e-css e-btn', attrs: { 'type': 'button' } });\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.innerText = (this.buttons.browse === 'Browse') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.innerText);\n }\n else {\n this.browseButton.appendChild(this.buttons.browse);\n }\n this.element.setAttribute('aria-label', 'Uploader');\n };\n Uploader.prototype.renderActionButtons = function () {\n this.element.setAttribute('tabindex', '-1');\n this.actionButtons = createElement('div', { className: ACTION_BUTTONS });\n this.uploadButton = createElement('button', { className: UPLOAD_BUTTONS, attrs: { 'type': 'button', 'tabindex': '-1' } });\n this.clearButton = createElement('button', { className: CLEAR_BUTTONS, attrs: { 'type': 'button', 'tabindex': '-1' } });\n this.actionButtons.appendChild(this.clearButton);\n this.actionButtons.appendChild(this.uploadButton);\n this.renderButtonTemplates();\n this.uploadWrapper.appendChild(this.actionButtons);\n this.browseButton.blur();\n this.uploadButton.focus();\n this.wireActionButtonEvents();\n };\n Uploader.prototype.wireActionButtonEvents = function () {\n EventHandler.add(this.uploadButton, 'click', this.uploadButtonClick, this);\n EventHandler.add(this.clearButton, 'click', this.clearButtonClick, this);\n };\n Uploader.prototype.unwireActionButtonEvents = function () {\n EventHandler.remove(this.uploadButton, 'click', this.uploadButtonClick);\n EventHandler.remove(this.clearButton, 'click', this.clearButtonClick);\n };\n Uploader.prototype.removeActionButtons = function () {\n if (this.actionButtons) {\n this.unwireActionButtonEvents();\n detach(this.actionButtons);\n this.actionButtons = null;\n }\n };\n Uploader.prototype.renderButtonTemplates = function () {\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.innerText = (this.buttons.browse === 'Browse') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.innerText);\n }\n else {\n this.browseButton.appendChild(this.buttons.browse);\n }\n if (this.uploadButton) {\n var uploadText = void 0;\n uploadText = isNullOrUndefined(this.buttons.upload) ? 'Upload' : this.buttons.upload;\n this.buttons.upload = uploadText;\n if (typeof (this.buttons.upload) === 'string') {\n this.uploadButton.innerText = (this.buttons.upload === 'Upload') ?\n this.localizedTexts('Upload') : this.buttons.upload;\n this.uploadButton.setAttribute('title', this.uploadButton.innerText);\n }\n else {\n this.uploadButton.appendChild(this.buttons.upload);\n }\n }\n if (this.clearButton) {\n var clearText = void 0;\n clearText = isNullOrUndefined(this.buttons.clear) ? 'Clear' : this.buttons.clear;\n this.buttons.clear = clearText;\n if (typeof (this.buttons.clear) === 'string') {\n this.clearButton.innerText = (this.buttons.clear === 'Clear') ?\n this.localizedTexts('Clear') : this.buttons.clear;\n this.clearButton.setAttribute('title', this.clearButton.innerText);\n }\n else {\n this.clearButton.appendChild(this.buttons.clear);\n }\n }\n };\n Uploader.prototype.initializeUpload = function () {\n this.element.setAttribute('tabindex', '-1');\n var inputWrapper = createElement('span', { className: INPUT_WRAPPER });\n this.element.parentElement.insertBefore(inputWrapper, this.element);\n this.dropAreaWrapper = createElement('div', { className: DROP_WRAPPER });\n this.element.parentElement.insertBefore(this.dropAreaWrapper, this.element);\n inputWrapper.appendChild(this.element);\n this.dropAreaWrapper.appendChild(this.browseButton);\n this.dropAreaWrapper.appendChild(inputWrapper);\n var fileDropArea = createElement('span', { className: DROP_AREA });\n fileDropArea.innerHTML = this.localizedTexts('dropFilesHint');\n this.dropAreaWrapper.appendChild(fileDropArea);\n this.uploadWrapper = createElement('div', { className: CONTROL_WRAPPER, attrs: { 'aria-activedescendant': 'li-focused' } });\n this.dropAreaWrapper.parentElement.insertBefore(this.uploadWrapper, this.dropAreaWrapper);\n this.uploadWrapper.appendChild(this.dropAreaWrapper);\n this.setDropArea();\n };\n Uploader.prototype.renderPreLoadFiles = function () {\n if (isNullOrUndefined(this.files[0].size) || !isNullOrUndefined(this.template)) {\n return;\n }\n var files = [].slice.call(this.files);\n var filesData = [];\n if (!this.multiple) {\n this.clearData();\n files = [files[0]];\n }\n for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {\n var data = files_1[_i];\n var fileData = {\n name: this.getFileNameOnly(data.name) + '.' + data.type.split('.')[data.type.split('.').length - 1],\n rawFile: '',\n size: data.size,\n status: this.localizedTexts('uploadSuccessMessage'),\n type: data.type,\n validationMessages: { minSize: '', maxSize: '' },\n statusCode: '2'\n };\n filesData.push(fileData);\n this.filesData.push(fileData);\n }\n this.createFileList(filesData);\n if (!this.autoUpload && this.listParent && !this.actionButtons && !this.isForm) {\n this.renderActionButtons();\n }\n this.checkActionButtonStatus();\n };\n Uploader.prototype.checkActionButtonStatus = function () {\n if (this.actionButtons) {\n var length_1 = this.uploadWrapper.querySelectorAll('.' + VALIDATION_FAILS).length +\n this.uploadWrapper.querySelectorAll('.e-upload-fails:not(.e-upload-progress)').length +\n this.uploadWrapper.querySelectorAll('span.' + UPLOAD_SUCCESS).length +\n this.uploadWrapper.querySelectorAll('span.' + UPLOAD_INPROGRESS).length;\n if (length_1 > 0 && length_1 === this.uploadWrapper.querySelectorAll('li').length) {\n this.uploadButton.setAttribute('disabled', 'disabled');\n }\n else {\n this.uploadButton.removeAttribute('disabled');\n }\n }\n };\n Uploader.prototype.setDropArea = function () {\n var dropTextArea = this.dropAreaWrapper.querySelector('.e-file-drop');\n if (this.dropArea) {\n this.dropZoneElement = (typeof (this.dropArea) !== 'string') ? this.dropArea :\n document.querySelector(this.dropArea);\n var element = this.element;\n var enableDropText = false;\n while (element.parentNode) {\n element = element.parentNode;\n if (element === this.dropZoneElement) {\n enableDropText = true;\n }\n }\n if (!enableDropText) {\n dropTextArea.textContent = '';\n }\n }\n else {\n this.dropZoneElement = this.uploadWrapper;\n dropTextArea.textContent = this.localizedTexts('dropFilesHint');\n }\n this.bindDropEvents();\n };\n Uploader.prototype.setMultipleSelection = function () {\n if (this.multiple && !this.element.hasAttribute('multiple')) {\n var newAttr = document.createAttribute('multiple');\n this.element.setAttributeNode(newAttr);\n }\n else if (!this.multiple) {\n this.element.removeAttribute('multiple');\n }\n };\n Uploader.prototype.checkAutoUpload = function (fileData) {\n if (this.autoUpload) {\n this.upload(fileData);\n this.removeActionButtons();\n }\n else if (!this.actionButtons) {\n this.renderActionButtons();\n }\n this.checkActionButtonStatus();\n };\n Uploader.prototype.wireEvents = function () {\n EventHandler.add(this.browseButton, 'click', this.browseButtonClick, this);\n EventHandler.add(this.element, 'change', this.onSelectFiles, this);\n EventHandler.add(document, 'click', this.removeFocus, this);\n this.keyboardModule = new KeyboardEvents(this.uploadWrapper, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown',\n });\n if (this.isForm) {\n EventHandler.add(this.element.closest('form'), 'reset', this.resetForm, this);\n }\n };\n Uploader.prototype.unWireEvents = function () {\n EventHandler.remove(this.browseButton, 'click', this.browseButtonClick);\n EventHandler.remove(this.element, 'change', this.onSelectFiles);\n EventHandler.remove(document, 'click', this.removeFocus);\n this.keyboardModule.destroy();\n };\n Uploader.prototype.resetForm = function () {\n this.clearAll();\n this.element.value = '';\n };\n Uploader.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'next':\n if (e.target === this.browseButton && isNullOrUndefined(this.listParent)) {\n this.browseButton.blur();\n }\n else if (e.target === this.uploadButton) {\n this.uploadButton.blur();\n }\n else {\n this.setTabFocus(e);\n e.preventDefault();\n e.stopPropagation();\n if (e.target === this.clearButton && this.uploadButton.hasAttribute('disabled')) {\n this.clearButton.blur();\n }\n }\n break;\n case 'previous':\n if (e.target === this.browseButton) {\n this.browseButton.blur();\n }\n else {\n this.setReverseFocus(e);\n e.preventDefault();\n e.stopPropagation();\n }\n break;\n case 'enter':\n if (e.target === this.clearButton) {\n this.clearButtonClick();\n }\n else if (e.target === this.uploadButton) {\n this.uploadButtonClick();\n }\n else if (e.target === this.browseButton) {\n this.browseButtonClick();\n }\n else {\n this.removeFiles(e);\n this.browseButton.focus();\n }\n e.preventDefault();\n e.stopPropagation();\n break;\n }\n };\n Uploader.prototype.setReverseFocus = function (e) {\n var target = e.target;\n if (target === this.uploadButton) {\n this.uploadButton.blur();\n this.clearButton.focus();\n }\n else if (target === this.clearButton && this.listParent && this.listParent.querySelector('.e-icons')) {\n this.clearButton.blur();\n var items = [].slice.call(this.listParent.querySelectorAll('span.e-icons'));\n items[items.length - 1].classList.add(ICON_FOCUSED);\n items[items.length - 1].focus();\n }\n else {\n var iconElements = [].slice.call(this.listParent.querySelectorAll('span.e-icons'));\n var index = iconElements.indexOf(target);\n if (index > 0) {\n this.removeFocus();\n iconElements[index - 1].classList.add(ICON_FOCUSED);\n iconElements[index - 1].focus();\n }\n else {\n this.removeFocus();\n this.browseButton.focus();\n }\n }\n };\n Uploader.prototype.setTabFocus = function (e) {\n var target = e.target;\n if (target === this.clearButton) {\n this.removeFocus();\n if (this.uploadButton.hasAttribute('disabled')) {\n return;\n }\n this.uploadButton.focus();\n }\n else if (target.classList.contains('e-icons')) {\n var iconElements = [].slice.call(this.listParent.querySelectorAll('span.e-icons'));\n var index = iconElements.indexOf(target);\n if (index < (iconElements.length - 1)) {\n this.removeFocus();\n iconElements[index + 1].classList.add(ICON_FOCUSED);\n iconElements[index + 1].focus();\n }\n else {\n this.removeFocus();\n this.clearButton.focus();\n }\n }\n else {\n this.browseButton.blur();\n var iconElement = this.listParent.querySelector('span.e-icons');\n iconElement.focus();\n iconElement.classList.add(ICON_FOCUSED);\n }\n };\n Uploader.prototype.removeFocus = function () {\n if (this.uploadWrapper && this.listParent && this.listParent.querySelector('.' + ICON_FOCUSED)) {\n document.activeElement.blur();\n this.listParent.querySelector('.' + ICON_FOCUSED).classList.remove(ICON_FOCUSED);\n }\n };\n Uploader.prototype.browseButtonClick = function () {\n this.element.click();\n };\n Uploader.prototype.uploadButtonClick = function () {\n this.upload(this.filesData);\n };\n Uploader.prototype.clearButtonClick = function () {\n this.clearAll();\n };\n Uploader.prototype.bindDropEvents = function () {\n if (this.dropZoneElement) {\n EventHandler.add(this.dropZoneElement, 'drop', this.dropElement, this);\n EventHandler.add(this.dropZoneElement, 'dragover', this.dragHover, this);\n EventHandler.add(this.dropZoneElement, 'dragleave', this.onDragLeave, this);\n }\n };\n Uploader.prototype.unBindDropEvents = function () {\n if (this.dropZoneElement) {\n EventHandler.remove(this.dropZoneElement, 'drop', this.dropElement);\n EventHandler.remove(this.dropZoneElement, 'dragover', this.dragHover);\n EventHandler.remove(this.dropZoneElement, 'dragleave', this.onDragLeave);\n }\n };\n Uploader.prototype.onDragLeave = function (e) {\n this.dropZoneElement.classList.remove(DRAG_HOVER);\n };\n Uploader.prototype.dragHover = function (e) {\n if (!this.enabled) {\n return;\n }\n this.dropZoneElement.classList.add(DRAG_HOVER);\n e.preventDefault();\n e.stopPropagation();\n };\n Uploader.prototype.dropElement = function (e) {\n this.dropZoneElement.classList.remove(DRAG_HOVER);\n this.onSelectFiles(e);\n e.preventDefault();\n e.stopPropagation();\n };\n Uploader.prototype.removeFiles = function (args) {\n if (!this.enabled) {\n return;\n }\n var selectedElement = args.target.parentElement;\n var index = this.fileList.indexOf(selectedElement);\n var fileData = this.filesData[index];\n this.remove(fileData);\n this.element.value = '';\n this.checkActionButtonStatus();\n };\n Uploader.prototype.removeFilesData = function (file, customTemplate) {\n if (customTemplate) {\n return;\n }\n var selectedElement = this.getLiElement(file);\n if (isNullOrUndefined(selectedElement)) {\n return;\n }\n detach(selectedElement);\n var index = this.fileList.indexOf(selectedElement);\n this.fileList.splice(index, 1);\n this.filesData.splice(index, 1);\n if (this.fileList.length === 0 && !isNullOrUndefined(this.listParent)) {\n detach(this.listParent);\n this.listParent = null;\n this.removeActionButtons();\n }\n };\n Uploader.prototype.removeUploadedFile = function (file, eventArgs, custom) {\n var _this = this;\n var selectedFiles = file;\n var ajax = new XMLHttpRequest();\n ajax.addEventListener('load', function (e) { _this.removeCompleted(e, selectedFiles, custom); }, false);\n /* istanbul ignore next */\n ajax.addEventListener('error', function (e) { _this.removeFailed(e, selectedFiles, custom); }, false);\n ajax.open('POST', this.asyncSettings.removeUrl);\n eventArgs.currentRequest = ajax;\n this.trigger('removing', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n var name = this.element.getAttribute('name');\n var formData = new FormData();\n formData.append(name, selectedFiles.rawFile);\n this.updateFormData(formData, eventArgs.customFormData);\n ajax.send(formData);\n };\n Uploader.prototype.removeCompleted = function (e, files, customTemplate) {\n var args = {\n e: e, operation: 'remove', file: this.updateStatus(files, this.localizedTexts('removedSuccessMessage'), '2')\n };\n this.trigger('success', args);\n this.removeFilesData(files, customTemplate);\n var index = this.uploadedFilesData.indexOf(files);\n this.uploadedFilesData.splice(index, 1);\n this.trigger('change', { files: this.uploadedFilesData });\n };\n Uploader.prototype.removeFailed = function (e, files, customTemplate) {\n var args = {\n e: e, operation: 'remove', file: this.updateStatus(files, this.localizedTexts('removedFailedMessage'), '0')\n };\n if (!customTemplate) {\n var index = this.filesData.indexOf(files);\n var rootElement = this.fileList[index];\n if (rootElement) {\n var statusElement = rootElement.querySelector('.' + STATUS);\n rootElement.classList.remove(UPLOAD_SUCCESS);\n statusElement.classList.remove(UPLOAD_SUCCESS);\n rootElement.classList.add(UPLOAD_FAILED);\n statusElement.classList.add(UPLOAD_FAILED);\n }\n this.checkActionButtonStatus();\n }\n this.trigger('failure', args);\n };\n Uploader.prototype.onSelectFiles = function (args) {\n if (!this.enabled) {\n return;\n }\n var fileData = [];\n var targetFiles;\n if (args.type === 'drop') {\n var files = args.dataTransfer.files;\n targetFiles = this.multiple ? this.sortFileList(files) : [files[0]];\n }\n else {\n targetFiles = [].slice.call(args.target.files);\n }\n if (!this.multiple) {\n this.clearData();\n targetFiles = [targetFiles[0]];\n }\n for (var i = 0; i < targetFiles.length; i++) {\n var file = targetFiles[i];\n var eventArgs_1 = {\n name: file.name,\n rawFile: file,\n size: file.size,\n status: this.localizedTexts('readyToUploadMessage'),\n type: this.getFileType(file.name),\n validationMessages: this.validatedFileSize(file.size),\n statusCode: '1'\n };\n eventArgs_1.status = eventArgs_1.validationMessages.minSize !== '' ? this.localizedTexts('invalidMinFileSize') :\n eventArgs_1.validationMessages.maxSize !== '' ? this.localizedTexts('invalidMaxFileSize') : eventArgs_1.status;\n if (eventArgs_1.validationMessages.minSize !== '' || eventArgs_1.validationMessages.maxSize !== '') {\n eventArgs_1.statusCode = '0';\n }\n fileData.push(eventArgs_1);\n }\n var eventArgs = {\n cancel: false,\n filesData: fileData,\n isModified: false,\n modifiedFilesData: [],\n progressInterval: ''\n };\n if (args.type === 'drop') {\n fileData = this.checkExtension(fileData);\n }\n this.trigger('selected', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n if (eventArgs.isModified && eventArgs.modifiedFilesData.length > 0) {\n var dataFiles = this.checkExtension(eventArgs.modifiedFilesData);\n this.updateSortedFileList(dataFiles);\n if (!this.isForm) {\n this.checkAutoUpload(dataFiles);\n }\n this.filesData = dataFiles;\n }\n else {\n this.createFileList(fileData);\n this.filesData = this.filesData.concat(fileData);\n if (!this.isForm) {\n this.checkAutoUpload(fileData);\n }\n }\n if (!isNullOrUndefined(eventArgs.progressInterval) && eventArgs.progressInterval !== '') {\n this.progressInterval = eventArgs.progressInterval;\n }\n };\n Uploader.prototype.clearData = function () {\n if (!isNullOrUndefined(this.listParent)) {\n detach(this.listParent);\n this.listParent = null;\n }\n if (Browser.info.name !== 'msie') {\n this.element.value = '';\n }\n this.fileList = [];\n this.filesData = [];\n this.removeActionButtons();\n };\n Uploader.prototype.updateSortedFileList = function (filesData) {\n var previousListClone = createElement('div', { id: 'clonewrapper' });\n var added = -1;\n var removedList;\n if (this.listParent) {\n for (var i = 0; i < this.listParent.querySelectorAll('li').length; i++) {\n var liElement = this.listParent.querySelectorAll('li')[i];\n previousListClone.appendChild(liElement.cloneNode(true));\n }\n removedList = this.listParent.querySelectorAll('li');\n for (var _i = 0, removedList_1 = removedList; _i < removedList_1.length; _i++) {\n var item = removedList_1[_i];\n detach(item);\n }\n this.removeActionButtons();\n var oldList = [].slice.call(previousListClone.childNodes);\n detach(this.listParent);\n this.listParent = null;\n this.fileList = [];\n this.createParentUL();\n for (var index = 0; index < filesData.length; index++) {\n for (var j = 0; j < this.filesData.length; j++) {\n if (this.filesData[j].name === filesData[index].name) {\n this.listParent.appendChild(oldList[j]);\n EventHandler.add(oldList[j].querySelector('.e-icons'), 'click', this.removeFiles, this);\n this.fileList.push(oldList[j]);\n added = index;\n }\n }\n if (added !== index) {\n this.createFileList([filesData[index]]);\n }\n }\n }\n else {\n this.createFileList(filesData);\n }\n };\n Uploader.prototype.checkExtension = function (files) {\n var dropFiles = files;\n if (this.allowedExtensions !== '') {\n var allowedExtensions = [];\n var extensions = this.allowedExtensions.split(',');\n for (var _i = 0, extensions_1 = extensions; _i < extensions_1.length; _i++) {\n var extension = extensions_1[_i];\n allowedExtensions.push(extension.trim().toLocaleLowerCase());\n }\n for (var i = 0; i < files.length; i++) {\n if (allowedExtensions.indexOf(('.' + files[i].type).toLocaleLowerCase()) === -1) {\n files[i].status = this.localizedTexts('invalidFileType');\n files[i].statusCode = '0';\n }\n }\n }\n return dropFiles;\n };\n Uploader.prototype.validatedFileSize = function (fileSize) {\n var minSizeError = '';\n var maxSizeError = '';\n if (fileSize < this.minFileSize) {\n minSizeError = this.localizedTexts('invalidMinFileSize');\n }\n else if (fileSize > this.maxFileSize) {\n maxSizeError = this.localizedTexts('invalidMaxFileSize');\n }\n else {\n minSizeError = '';\n maxSizeError = '';\n }\n var errorMessage = { minSize: minSizeError, maxSize: maxSizeError };\n return errorMessage;\n };\n Uploader.prototype.createCustomfileList = function (fileData) {\n this.createParentUL();\n for (var _i = 0, fileData_1 = fileData; _i < fileData_1.length; _i++) {\n var listItem = fileData_1[_i];\n var liElement = createElement('li', { className: FILE, attrs: { 'data-file-name': listItem.name } });\n this.uploadTemplateFn = this.templateComplier(this.template);\n var length_2 = this.uploadTemplateFn(listItem).length;\n for (var i = 0; i < length_2; i++) {\n liElement.appendChild(this.uploadTemplateFn(listItem)[i]);\n }\n this.listParent.appendChild(liElement);\n this.fileList.push(liElement);\n }\n };\n Uploader.prototype.createParentUL = function () {\n if (isNullOrUndefined(this.listParent)) {\n this.listParent = createElement('ul', { className: LIST_PARENT });\n this.uploadWrapper.appendChild(this.listParent);\n this.listParent.style.display = this.showFileList ? 'block' : 'none';\n }\n };\n Uploader.prototype.createFileList = function (fileData) {\n this.createParentUL();\n if (this.template !== '' && !isNullOrUndefined(this.template)) {\n this.createCustomfileList(fileData);\n }\n else {\n for (var _i = 0, fileData_2 = fileData; _i < fileData_2.length; _i++) {\n var listItem = fileData_2[_i];\n var liElement = createElement('li', { className: FILE, attrs: { 'data-file-name': listItem.name } });\n var textContainer = createElement('span', { className: TEXT_CONTAINER });\n var textElement = createElement('span', { className: FILE_NAME, attrs: { 'title': listItem.name } });\n textElement.innerHTML = this.getFileNameOnly(listItem.name);\n var fileExtension = createElement('span', { className: FILE_TYPE });\n fileExtension.innerHTML = '.' + this.getFileType(listItem.name);\n if (!this.enableRtl) {\n textContainer.appendChild(textElement);\n textContainer.appendChild(fileExtension);\n }\n else {\n var rtlContainer = createElement('span', { className: RTL_CONTAINER });\n rtlContainer.appendChild(fileExtension);\n rtlContainer.appendChild(textElement);\n textContainer.appendChild(rtlContainer);\n }\n var fileSize = createElement('span', { className: FILE_SIZE });\n fileSize.innerHTML = this.bytesToSize(listItem.size);\n textContainer.appendChild(fileSize);\n var statusElement = createElement('span', { className: STATUS });\n textContainer.appendChild(statusElement);\n statusElement.innerHTML = listItem.status;\n liElement.appendChild(textContainer);\n var iconElement = createElement('span', { className: ' e-icons', attrs: { 'tabindex': '-1' } });\n if (Browser.info.name === 'msie') {\n iconElement.classList.add('e-msie');\n }\n if (listItem.statusCode !== '2') {\n iconElement.setAttribute('title', this.localizedTexts('remove'));\n }\n else {\n iconElement.setAttribute('title', this.localizedTexts('delete'));\n }\n liElement.appendChild(iconElement);\n EventHandler.add(iconElement, 'click', this.removeFiles, this);\n if (listItem.statusCode === '2') {\n statusElement.classList.add(UPLOAD_SUCCESS);\n iconElement.classList.add(REMOVE_ICON);\n }\n else if (listItem.statusCode !== '1') {\n statusElement.classList.remove(UPLOAD_SUCCESS);\n statusElement.classList.add(VALIDATION_FAILS);\n }\n if (this.autoUpload && listItem.statusCode === '1' && this.asyncSettings.saveUrl !== '') {\n statusElement.innerHTML = '';\n }\n if (!iconElement.classList.contains(REMOVE_ICON)) {\n iconElement.classList.add(CLEAR_ICON);\n }\n this.listParent.appendChild(liElement);\n this.fileList.push(liElement);\n this.truncateName(textElement);\n }\n }\n };\n Uploader.prototype.truncateName = function (name) {\n var nameElement = name;\n var text;\n if (nameElement.offsetWidth < nameElement.scrollWidth) {\n text = nameElement.textContent;\n nameElement.dataset.tail = text.slice(text.length - 10);\n }\n };\n Uploader.prototype.getFileType = function (name) {\n var extension;\n var index = name.lastIndexOf('.');\n if (index >= 0) {\n extension = name.substring(index + 1);\n }\n return extension ? extension : '';\n };\n Uploader.prototype.getFileNameOnly = function (name) {\n var type = this.getFileType(name);\n var names = name.split('.' + type);\n return type = names[0];\n };\n Uploader.prototype.setInitialAttributes = function () {\n if (this.initialAttr.accept) {\n this.element.setAttribute('accept', this.initialAttr.accept);\n }\n if (this.initialAttr.disabled) {\n this.element.setAttribute('disabled', 'disabled');\n }\n if (this.initialAttr.multiple) {\n var newAttr = document.createAttribute('multiple');\n this.element.setAttributeNode(newAttr);\n }\n };\n Uploader.prototype.filterfileList = function (files) {\n var filterFiles = [];\n var li;\n for (var i = 0; i < files.length; i++) {\n li = this.getLiElement(files[i]);\n if (!li.classList.contains(UPLOAD_SUCCESS)) {\n filterFiles.push(files[i]);\n }\n }\n return filterFiles;\n };\n Uploader.prototype.updateStatus = function (files, status, statusCode) {\n if (!(status === '' || isNullOrUndefined(status)) && !(statusCode === '' || isNullOrUndefined(statusCode))) {\n files.status = status;\n files.statusCode = statusCode;\n }\n var li = this.getLiElement(files);\n if (!isNullOrUndefined(li)) {\n if (!isNullOrUndefined(li.querySelector('.' + STATUS)) && !((status === '' || isNullOrUndefined(status)))) {\n li.querySelector('.' + STATUS).textContent = status;\n }\n }\n return files;\n };\n Uploader.prototype.getLiElement = function (files) {\n var liElements = [];\n var li;\n if (this.uploadWrapper) {\n liElements = this.uploadWrapper.querySelectorAll('.' + LIST_PARENT + '> li');\n for (var i = 0; i < liElements.length; i++) {\n if (liElements[i].getAttribute('data-file-name') === files.name) {\n li = liElements[i];\n }\n }\n }\n return li;\n };\n Uploader.prototype.createProgressBar = function (liElement) {\n var progressbarWrapper = createElement('span', { className: PROGRESS_WRAPPER });\n var progressBar = createElement('progressbar', { className: PROGRESSBAR, attrs: { value: '0', max: '100' } });\n var progressbarInnerWrapper = createElement('span', { className: PROGRESS_INNER_WRAPPER });\n progressBar.setAttribute('style', 'width: 0%');\n var progressbarText = createElement('span', { className: PROGRESSBAR_TEXT });\n progressbarText.textContent = '0%';\n progressbarInnerWrapper.appendChild(progressBar);\n progressbarWrapper.appendChild(progressbarInnerWrapper);\n progressbarWrapper.appendChild(progressbarText);\n liElement.querySelector('.' + TEXT_CONTAINER).appendChild(progressbarWrapper);\n };\n Uploader.prototype.updateProgressbar = function (e, li) {\n if (!isNaN(Math.round((e.loaded / e.total) * 100)) && !isNullOrUndefined(li.querySelector('.' + PROGRESSBAR))) {\n if (!isNullOrUndefined(this.progressInterval) && this.progressInterval !== '') {\n var value = (Math.round((e.loaded / e.total) * 100)) % parseInt(this.progressInterval, 10);\n if (value === 0 || value === 100) {\n this.changeProgressValue(li, Math.round((e.loaded / e.total) * 100).toString() + '%');\n }\n }\n else {\n this.changeProgressValue(li, Math.round((e.loaded / e.total) * 100).toString() + '%');\n }\n }\n };\n Uploader.prototype.changeProgressValue = function (li, progressValue) {\n li.querySelector('.' + PROGRESSBAR).setAttribute('style', 'width:' + progressValue);\n li.querySelector('.' + PROGRESSBAR_TEXT).textContent = progressValue;\n };\n Uploader.prototype.uploadInProgress = function (e, files, customUI) {\n var li = this.getLiElement(files);\n if (isNullOrUndefined(li) && (!customUI || isNullOrUndefined(customUI))) {\n return;\n }\n if (!isNullOrUndefined(li)) {\n if (!(li.querySelectorAll('.' + PROGRESS_WRAPPER).length > 0) && li.querySelector('.' + STATUS)) {\n li.querySelector('.' + STATUS).classList.add(UPLOAD_INPROGRESS);\n this.createProgressBar(li);\n this.updateProgressBarClasses(li, UPLOAD_INPROGRESS);\n }\n this.updateProgressbar(e, li);\n if (!isNullOrUndefined(li.querySelector('.e-icons'))) {\n li.querySelector('.e-icons').removeAttribute('title');\n li.querySelector('.e-icons').classList.add(UPLOAD_INPROGRESS);\n }\n }\n var args = { e: e, operation: 'upload', file: this.updateStatus(files, this.localizedTexts('inProgress'), '3') };\n this.trigger('progress', args);\n };\n /* istanbul ignore next */\n Uploader.prototype.uploadComplete = function (e, files, customUI) {\n var status = e.target;\n if (status.readyState === 4 && status.status === 200) {\n var li = this.getLiElement(files);\n if (isNullOrUndefined(li) && (!customUI || isNullOrUndefined(customUI))) {\n return;\n }\n if (!isNullOrUndefined(li)) {\n this.updateProgressBarClasses(li, UPLOAD_SUCCESS);\n this.removeProgressbar(li, 'success');\n if (!isNullOrUndefined(li.querySelector('.' + CLEAR_ICON))) {\n li.querySelector('.' + CLEAR_ICON).classList.add(REMOVE_ICON);\n li.querySelector('.' + CLEAR_ICON).setAttribute('title', this.localizedTexts('delete'));\n li.querySelector('.' + CLEAR_ICON).classList.remove(CLEAR_ICON);\n }\n if (!isNullOrUndefined(li.querySelector('.e-icons'))) {\n li.querySelector('.e-icons').classList.remove(UPLOAD_INPROGRESS);\n li.querySelector('.e-icons').setAttribute('title', this.localizedTexts('delete'));\n }\n }\n var args = { e: e, operation: 'upload', file: this.updateStatus(files, this.localizedTexts('uploadSuccessMessage'), '2') };\n this.trigger('success', args);\n this.uploadedFilesData.push(files);\n this.trigger('change', { files: this.uploadedFilesData });\n this.checkActionButtonStatus();\n }\n else {\n this.uploadFailed(e, files);\n }\n };\n Uploader.prototype.uploadFailed = function (e, files) {\n var li = this.getLiElement(files);\n var args = { e: e, operation: 'upload', file: this.updateStatus(files, this.localizedTexts('uploadFailedMessage'), '0') };\n if (!isNullOrUndefined(li)) {\n this.updateProgressBarClasses(li, UPLOAD_FAILED);\n this.removeProgressbar(li, 'failure');\n li.querySelector('.' + CLEAR_ICON).setAttribute('title', this.localizedTexts('remove'));\n li.querySelector('.e-icons').classList.remove(UPLOAD_INPROGRESS);\n }\n this.trigger('failure', args);\n this.checkActionButtonStatus();\n };\n Uploader.prototype.updateProgressBarClasses = function (li, className) {\n var progressBar = li.querySelector('.' + PROGRESSBAR);\n if (!isNullOrUndefined(progressBar)) {\n progressBar.classList.add(className);\n }\n };\n Uploader.prototype.removeProgressbar = function (li, callType) {\n var _this = this;\n if (!isNullOrUndefined(li.querySelector('.' + PROGRESS_WRAPPER))) {\n this.progressAnimation = new Animation({ duration: 1250 });\n this.progressAnimation.animate(li.querySelector('.' + PROGRESS_WRAPPER), { name: 'FadeOut' });\n this.progressAnimation.animate(li.querySelector('.' + PROGRESSBAR_TEXT), { name: 'FadeOut' });\n setTimeout(function () { _this.animateProgressBar(li, callType); }, 750);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.animateProgressBar = function (li, callType) {\n if (callType === 'success') {\n li.classList.add(UPLOAD_SUCCESS);\n if (!isNullOrUndefined(li.querySelector('.' + STATUS))) {\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_INPROGRESS);\n this.progressAnimation.animate(li.querySelector('.' + STATUS), { name: 'FadeIn' });\n li.querySelector('.' + STATUS).classList.add(UPLOAD_SUCCESS);\n }\n }\n else {\n if (!isNullOrUndefined(li.querySelector('.' + STATUS))) {\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_INPROGRESS);\n this.progressAnimation.animate(li.querySelector('.' + STATUS), { name: 'FadeIn' });\n li.querySelector('.' + STATUS).classList.add(UPLOAD_FAILED);\n }\n }\n detach(li.querySelector('.' + PROGRESS_WRAPPER));\n };\n Uploader.prototype.setExtensions = function (extensions) {\n this.element.setAttribute('accept', extensions);\n };\n Uploader.prototype.templateComplier = function (uploadTemplate) {\n if (uploadTemplate) {\n var exception = void 0;\n try {\n if (document.querySelectorAll(uploadTemplate).length) {\n return compile(document.querySelector(uploadTemplate).innerHTML.trim());\n }\n }\n catch (exception) {\n return compile(uploadTemplate);\n }\n }\n return undefined;\n };\n Uploader.prototype.setRTL = function () {\n this.enableRtl ? addClass([this.uploadWrapper], RTL) : removeClass([this.uploadWrapper], RTL);\n };\n Uploader.prototype.localizedTexts = function (localeText) {\n this.l10n.setLocale(this.locale);\n return this.l10n.getConstant(localeText);\n };\n Uploader.prototype.setControlStatus = function () {\n if (!this.enabled) {\n this.uploadWrapper.classList.add(DISABLED);\n this.element.setAttribute('disabled', 'disabled');\n this.browseButton.setAttribute('disabled', 'disabled');\n if (!isNullOrUndefined(this.clearButton)) {\n this.clearButton.setAttribute('disabled', 'disabled');\n }\n if (!isNullOrUndefined(this.uploadButton)) {\n this.uploadButton.setAttribute('disabled', 'disabled');\n }\n }\n else {\n if (this.uploadWrapper.classList.contains(DISABLED)) {\n this.uploadWrapper.classList.remove(DISABLED);\n }\n if (!isNullOrUndefined(this.browseButton) && this.element.hasAttribute('disabled')) {\n this.element.removeAttribute('disabled');\n this.browseButton.removeAttribute('disabled');\n }\n if (!isNullOrUndefined(this.clearButton) && this.clearButton.hasAttribute('disabled')) {\n this.clearButton.removeAttribute('disabled');\n }\n if (!isNullOrUndefined(this.uploadButton) && this.uploadButton.hasAttribute('disabled')) {\n this.uploadButton.hasAttribute('disabled');\n }\n }\n };\n Uploader.prototype.checkHTMLAttributes = function () {\n if (this.element.hasAttribute('accept')) {\n this.allowedExtensions = this.element.getAttribute('accept');\n this.initialAttr.accept = this.allowedExtensions;\n }\n if (this.element.hasAttribute('multiple')) {\n this.multiple = true;\n this.initialAttr.multiple = true;\n }\n if (this.element.hasAttribute('disabled')) {\n this.enabled = false;\n this.initialAttr.disabled = true;\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.updateFormData = function (formData, customData) {\n if (customData.length > 0 && customData[0]) {\n for (var i = 0; i < customData.length; i++) {\n var data = customData[i];\n // tslint:disable-next-line\n formData.append(Object.keys(data)[i], Object.values(data)[i]);\n }\n }\n };\n /**\n * It is used to convert bytes value into kilobytes or megabytes depending on the size based\n * on [binary prefix](https://en.wikipedia.org/wiki/Binary_prefix).\n * @param { number } bytes - specifies the file size in bytes.\n * @returns string\n */\n Uploader.prototype.bytesToSize = function (bytes) {\n var i = -1;\n var size;\n if (!bytes) {\n return '0.0 KB';\n }\n do {\n bytes = bytes / 1000;\n i++;\n } while (bytes > 99);\n if (i >= 2) {\n bytes = bytes * 1000;\n i = 1;\n }\n return Math.max(bytes, 0).toFixed(1) + ' ' + ['KB', 'MB'][i];\n };\n /**\n * Allows you to sort the file data alphabetically based on its file name clearly.\n * @param { FileList } filesData - specifies the files data for upload.\n * @returns File[]\n */\n Uploader.prototype.sortFileList = function (filesData) {\n var files = filesData;\n var fileNames = [];\n for (var i = 0; i < files.length; i++) {\n fileNames.push(files[i].name);\n }\n var sortedFileNames = fileNames.sort();\n var sortedFilesData = [];\n var index = 0;\n for (var _i = 0, sortedFileNames_1 = sortedFileNames; _i < sortedFileNames_1.length; _i++) {\n var name_1 = sortedFileNames_1[_i];\n for (var i = 0; i < files.length; i++) {\n if (name_1 === files[i].name) {\n sortedFilesData.push(files[i]);\n }\n }\n }\n return sortedFilesData;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n * @method destroy\n * @return {void}.\n */\n Uploader.prototype.destroy = function () {\n this.element.value = null;\n this.clearAll();\n this.unWireEvents();\n this.unBindDropEvents();\n if (this.multiple) {\n this.element.removeAttribute('multiple');\n }\n if (!this.enabled) {\n this.element.removeAttribute('disabled');\n }\n this.element.removeAttribute('accept');\n this.setInitialAttributes();\n this.uploadWrapper.parentElement.appendChild(this.cloneElement);\n this.cloneElement.classList.remove('e-control', ROOT);\n detach(this.uploadWrapper);\n this.uploadWrapper = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Allows you to call the upload process manually by calling save URL action.\n * To process the selected files (added in upload queue), pass an empty argument otherwise\n * upload the specific file based on its argument.\n * @param { FileInfo[] } files - specifies the files data for upload.\n * @returns void\n */\n Uploader.prototype.upload = function (files, custom) {\n var _this = this;\n var selectedFiles = [];\n if (this.asyncSettings.saveUrl === '' || isNullOrUndefined(this.asyncSettings.saveUrl)) {\n return;\n }\n if (!custom || isNullOrUndefined(custom)) {\n if (!this.multiple) {\n var file = [];\n file.push(files[0]);\n selectedFiles = this.filterfileList(file);\n }\n else {\n selectedFiles = this.filterfileList(files);\n }\n }\n else {\n selectedFiles = files;\n }\n var _loop_1 = function (i) {\n var ajax = new XMLHttpRequest();\n ajax.addEventListener('load', function (e) { _this.uploadComplete(e, selectedFiles[i], custom); }, false);\n /* istanbul ignore next */\n ajax.addEventListener('error', function (e) { _this.uploadFailed(e, selectedFiles[i]); }, false);\n ajax.upload.addEventListener('progress', function (e) { _this.uploadInProgress(e, selectedFiles[i], custom); }, false);\n ajax.open('POST', this_1.asyncSettings.saveUrl);\n var formData = new FormData();\n if (selectedFiles[i].statusCode === '1') {\n var eventArgs = {\n fileData: selectedFiles[i],\n customFormData: [],\n cancel: false,\n currentRequest: ajax\n };\n this_1.trigger('uploading', eventArgs);\n if (eventArgs.cancel) {\n return { value: void 0 };\n }\n var name_2 = this_1.element.getAttribute('name');\n formData.append(name_2, selectedFiles[i].rawFile, selectedFiles[i].name);\n this_1.updateFormData(formData, eventArgs.customFormData);\n ajax.send(formData);\n }\n };\n var this_1 = this;\n for (var i = 0; i < selectedFiles.length; i++) {\n var state_1 = _loop_1(i);\n if (typeof state_1 === \"object\")\n return state_1.value;\n }\n };\n /**\n * Remove the uploaded file from server manually by calling the remove URL action.\n * If you pass an empty argument to this method, the complete file list can be cleared,\n * otherwise remove the specific file based on its argument (“file_data”).\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to remove from file list/server.\n * @returns void\n */\n Uploader.prototype.remove = function (fileData, customTemplate) {\n var removeFiles = [];\n fileData = !isNullOrUndefined(fileData) ? fileData : this.filesData;\n if (fileData instanceof Array) {\n removeFiles = fileData;\n }\n else {\n removeFiles.push(fileData);\n }\n var eventArgs = {\n cancel: false,\n filesData: removeFiles,\n customFormData: []\n };\n var removeUrl = this.asyncSettings.removeUrl;\n var validUrl = (removeUrl === '' || isNullOrUndefined(removeUrl)) ? false : true;\n for (var _i = 0, removeFiles_1 = removeFiles; _i < removeFiles_1.length; _i++) {\n var files = removeFiles_1[_i];\n if (files.statusCode === '2' && validUrl) {\n this.removeUploadedFile(files, eventArgs, customTemplate);\n }\n else {\n this.trigger('removing', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.removeFilesData(files, customTemplate);\n }\n }\n };\n /**\n * Clear all the file entries from list that can be uploaded files or added in upload queue.\n * @returns void\n */\n Uploader.prototype.clearAll = function () {\n if (isNullOrUndefined(this.listParent)) {\n return;\n }\n var eventArgs = {\n cancel: false,\n filesData: this.filesData\n };\n this.trigger('clearing', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.clearData();\n };\n Uploader.prototype.getFilesData = function () {\n return this.filesData;\n };\n __decorate([\n Complex({ saveUrl: '', removeUrl: '' }, AsyncSettings)\n ], Uploader.prototype, \"asyncSettings\", void 0);\n __decorate([\n Property(false)\n ], Uploader.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], Uploader.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"multiple\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"autoUpload\", void 0);\n __decorate([\n Complex({}, ButtonsProps)\n ], Uploader.prototype, \"buttons\", void 0);\n __decorate([\n Property('')\n ], Uploader.prototype, \"allowedExtensions\", void 0);\n __decorate([\n Property(0)\n ], Uploader.prototype, \"minFileSize\", void 0);\n __decorate([\n Property(30000000)\n ], Uploader.prototype, \"maxFileSize\", void 0);\n __decorate([\n Property(null)\n ], Uploader.prototype, \"dropArea\", void 0);\n __decorate([\n Collection([{}], FilesProp)\n ], Uploader.prototype, \"files\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"showFileList\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"selected\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"uploading\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"success\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"failure\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"removing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"clearing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"progress\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"change\", void 0);\n Uploader = __decorate([\n NotifyPropertyChanges\n ], Uploader);\n return Uploader;\n}(Component));\nexport { Uploader };\n","import { DataUtil } from './util';\n/**\n * Query class is used to build query which is used by the DataManager to communicate with datasource.\n */\nvar Query = /** @class */ (function () {\n /**\n * Constructor for Query class.\n * @param {string|string[]} from?\n * @hidden\n */\n function Query(from) {\n /** @hidden */\n this.subQuery = null;\n /** @hidden */\n this.isChild = false;\n this.queries = [];\n this.key = '';\n this.fKey = '';\n if (typeof from === 'string') {\n this.fromTable = from;\n }\n else if (from && from instanceof Array) {\n this.lookups = from;\n }\n this.expands = [];\n this.sortedColumns = [];\n this.groupedColumns = [];\n this.subQuery = null;\n this.isChild = false;\n this.params = [];\n return this;\n }\n /**\n * Sets the primary key.\n * @param {string} field - Defines the column field.\n */\n Query.prototype.setKey = function (field) {\n this.key = field;\n return this;\n };\n /**\n * Sets default DataManager to execute query.\n * @param {DataManager} dataManager - Defines the DataManager.\n */\n Query.prototype.using = function (dataManager) {\n this.dataManager = dataManager;\n return this;\n };\n /**\n * Executes query with the given DataManager.\n * @param {DataManager} dataManager - Defines the DataManager.\n * @param {Function} done - Defines the success callback.\n * @param {Function} fail - Defines the failure callback.\n * @param {Function} always - Defines the callback which will be invoked on either success or failure.\n *\n *
\n     * let dataManager: DataManager = new DataManager([{ ID: '10' }, { ID: '2' }, { ID: '1' }, { ID: '20' }]);\n     * let query: Query = new Query();\n     * query.sortBy('ID', (x: string, y: string): number => { return parseInt(x, 10) - parseInt(y, 10) });\n     * let promise: Promise< Object > = query.execute(dataManager);\n     * promise.then((e: { result: Object }) => { });\n     * 
\n */\n Query.prototype.execute = function (dataManager, done, fail, always) {\n dataManager = dataManager || this.dataManager;\n if (dataManager) {\n return dataManager.executeQuery(this, done, fail, always);\n }\n return DataUtil.throwError('Query - execute() : dataManager needs to be is set using \"using\" function or should be passed as argument');\n };\n /**\n * Executes query with the local datasource.\n * @param {DataManager} dataManager - Defines the DataManager.\n */\n Query.prototype.executeLocal = function (dataManager) {\n dataManager = dataManager || this.dataManager;\n if (dataManager) {\n return dataManager.executeLocal(this);\n }\n return DataUtil.throwError('Query - executeLocal() : dataManager needs to be is set using \"using\" function or should be passed as argument');\n };\n /**\n * Creates deep copy of the Query object.\n */\n Query.prototype.clone = function () {\n var cloned = new Query();\n cloned.queries = this.queries.slice(0);\n cloned.key = this.key;\n cloned.isChild = this.isChild;\n cloned.dataManager = this.dataManager;\n cloned.fromTable = this.fromTable;\n cloned.params = this.params.slice(0);\n cloned.expands = this.expands.slice(0);\n cloned.sortedColumns = this.sortedColumns.slice(0);\n cloned.groupedColumns = this.groupedColumns.slice(0);\n cloned.subQuerySelector = this.subQuerySelector;\n cloned.subQuery = this.subQuery;\n cloned.fKey = this.fKey;\n cloned.isCountRequired = this.isCountRequired;\n return cloned;\n };\n /**\n * Specifies the name of table to retrieve data in query execution.\n * @param {string} tableName - Defines the table name.\n */\n Query.prototype.from = function (tableName) {\n this.fromTable = tableName;\n return this;\n };\n /**\n * Adds additional parameter which will be sent along with the request which will be generated while DataManager execute.\n * @param {string} key - Defines the key of additional parameter.\n * @param {Function|string} value - Defines the value for the key.\n */\n Query.prototype.addParams = function (key, value) {\n if (typeof value === 'function') {\n this.params.push({ key: key, fn: value });\n }\n else {\n this.params.push({ key: key, value: value });\n }\n return this;\n };\n /**\n * Expands the related table.\n * @param {string|Object[]} tables\n */\n Query.prototype.expand = function (tables) {\n if (typeof tables === 'string') {\n this.expands = [].slice.call([tables], 0);\n }\n else {\n this.expands = tables.slice(0);\n }\n return this;\n };\n /**\n * Filter data with given filter criteria.\n * @param {string|Predicate} fieldName - Defines the column field or Predicate.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string|number|boolean} value - Defines the values to match with data.\n * @param {boolean} ignoreCase - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n */\n Query.prototype.where = function (fieldName, operator, value, ignoreCase, ignoreAccent) {\n operator = operator ? (operator).toLowerCase() : null;\n var predicate = null;\n if (typeof fieldName === 'string') {\n predicate = new Predicate(fieldName, operator, value, ignoreCase, ignoreAccent);\n }\n else if (fieldName instanceof Predicate) {\n predicate = fieldName;\n }\n this.queries.push({\n fn: 'onWhere',\n e: predicate\n });\n return this;\n };\n /**\n * Search data with given search criteria.\n * @param {string|number|boolean} searchKey - Defines the search key.\n * @param {string|string[]} fieldNames - Defines the collection of column fields.\n * @param {string} operator - Defines the operator how to search data.\n * @param {boolean} ignoreCase - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n */\n Query.prototype.search = function (searchKey, fieldNames, operator, ignoreCase, ignoreAccent) {\n if (typeof fieldNames === 'string') {\n fieldNames = [fieldNames];\n }\n operator = operator || 'contains';\n var comparer = DataUtil.fnOperators[operator];\n this.queries.push({\n fn: 'onSearch',\n e: {\n fieldNames: fieldNames,\n operator: operator,\n searchKey: searchKey,\n ignoreCase: ignoreCase,\n ignoreAccent: ignoreAccent,\n comparer: comparer\n }\n });\n return this;\n };\n /**\n * Sort the data with given sort criteria.\n * By default, sort direction is ascending.\n * @param {string|string[]} fieldName - Defines the single or collection of column fields.\n * @param {string|Function} comparer - Defines the sort direction or custom sort comparer function.\n */\n Query.prototype.sortBy = function (fieldName, comparer, isFromGroup) {\n var order = 'ascending';\n var sorts;\n var temp;\n if (typeof fieldName === 'string' && DataUtil.endsWith(fieldName.toLowerCase(), ' desc')) {\n fieldName = fieldName.replace(/ desc$/i, '');\n comparer = 'descending';\n }\n if (!comparer || typeof comparer === 'string') {\n order = comparer ? comparer.toLowerCase() : 'ascending';\n comparer = DataUtil.fnSort(comparer);\n }\n if (isFromGroup) {\n sorts = Query.filterQueries(this.queries, 'onSortBy');\n for (var i = 0; i < sorts.length; i++) {\n temp = sorts[i].e.fieldName;\n if (typeof temp === 'string') {\n if (temp === fieldName) {\n return this;\n }\n }\n else if (temp instanceof Array) {\n for (var j = 0; j < temp.length; j++) {\n if (temp[j] === fieldName || fieldName.toLowerCase() === temp[j] + ' desc') {\n return this;\n }\n }\n }\n }\n }\n this.queries.push({\n fn: 'onSortBy',\n e: {\n fieldName: fieldName,\n comparer: comparer,\n direction: order\n }\n });\n return this;\n };\n /**\n * Sorts data in descending order.\n * @param {string} fieldName - Defines the column field.\n */\n Query.prototype.sortByDesc = function (fieldName) {\n return this.sortBy(fieldName, 'descending');\n };\n /**\n * Groups data with the given field name.\n * @param {string} fieldName - Defines the column field.\n */\n Query.prototype.group = function (fieldName, fn, format) {\n this.sortBy(fieldName, null, true);\n this.queries.push({\n fn: 'onGroup',\n e: {\n fieldName: fieldName,\n comparer: fn ? fn : null,\n format: format ? format : null\n }\n });\n return this;\n };\n /**\n * Gets data based on the given page index and size.\n * @param {number} pageIndex - Defines the current page index.\n * @param {number} pageSize - Defines the no of records per page.\n */\n Query.prototype.page = function (pageIndex, pageSize) {\n this.queries.push({\n fn: 'onPage',\n e: {\n pageIndex: pageIndex,\n pageSize: pageSize\n }\n });\n return this;\n };\n /**\n * Gets data based on the given start and end index.\n * @param {number} start - Defines the start index of the datasource.\n * @param {number} end - Defines the end index of the datasource.\n */\n Query.prototype.range = function (start, end) {\n this.queries.push({\n fn: 'onRange',\n e: {\n start: start,\n end: end\n }\n });\n return this;\n };\n /**\n * Gets data from the top of the data source based on given number of records count.\n * @param {number} nos - Defines the no of records to retrieve from datasource.\n */\n Query.prototype.take = function (nos) {\n this.queries.push({\n fn: 'onTake',\n e: {\n nos: nos\n }\n });\n return this;\n };\n /**\n * Skips data with given number of records count from the top of the data source.\n * @param {number} nos - Defines the no of records skip in the datasource.\n */\n Query.prototype.skip = function (nos) {\n this.queries.push({\n fn: 'onSkip',\n e: { nos: nos }\n });\n return this;\n };\n /**\n * Selects specified columns from the data source.\n * @param {string|string[]} fieldNames - Defines the collection of column fields.\n */\n Query.prototype.select = function (fieldNames) {\n if (typeof fieldNames === 'string') {\n fieldNames = [].slice.call([fieldNames], 0);\n }\n this.queries.push({\n fn: 'onSelect',\n e: { fieldNames: fieldNames }\n });\n return this;\n };\n /**\n * Gets the records in hierarchical relationship from two tables. It requires the foreign key to relate two tables.\n * @param {Query} query - Defines the query to relate two tables.\n * @param {Function} selectorFn - Defines the custom function to select records.\n */\n Query.prototype.hierarchy = function (query, selectorFn) {\n this.subQuerySelector = selectorFn;\n this.subQuery = query;\n return this;\n };\n /**\n * Sets the foreign key which is used to get data from the related table.\n * @param {string} key - Defines the foreign key.\n */\n Query.prototype.foreignKey = function (key) {\n this.fKey = key;\n return this;\n };\n /**\n * It is used to get total number of records in the DataManager execution result.\n */\n Query.prototype.requiresCount = function () {\n this.isCountRequired = true;\n return this;\n };\n //type - sum, avg, min, max\n /**\n * Aggregate the data with given type and field name.\n * @param {string} type - Defines the aggregate type.\n * @param {string} field - Defines the column field to aggregate.\n */\n Query.prototype.aggregate = function (type, field) {\n this.queries.push({\n fn: 'onAggregates',\n e: { field: field, type: type }\n });\n return this;\n };\n /**\n * Pass array of filterColumn query for performing filter operation.\n * @param {QueryOptions[]} queries\n * @param {string} name\n * @hidden\n */\n Query.filterQueries = function (queries, name) {\n return queries.filter(function (q) {\n return q.fn === name;\n });\n };\n /**\n * To get the list of queries which is already filtered in current data source.\n * @param {Object[]} queries\n * @param {string[]} singles\n * @hidden\n */\n Query.filterQueryLists = function (queries, singles) {\n var filtered = queries.filter(function (q) {\n return singles.indexOf(q.fn) !== -1;\n });\n var res = {};\n for (var i = 0; i < filtered.length; i++) {\n if (!res[filtered[i].fn]) {\n res[filtered[i].fn] = filtered[i].e;\n }\n }\n return res;\n };\n return Query;\n}());\nexport { Query };\n/**\n * Predicate class is used to generate complex filter criteria.\n * This will be used by DataManager to perform multiple filtering operation.\n */\nvar Predicate = /** @class */ (function () {\n /**\n * Constructor for Predicate class.\n * @param {string|Predicate} field\n * @param {string} operator\n * @param {string|number|boolean|Predicate|Predicate[]} value\n * @param {boolean=false} ignoreCase\n * @hidden\n */\n function Predicate(field, operator, value, ignoreCase, ignoreAccent) {\n if (ignoreCase === void 0) { ignoreCase = false; }\n /** @hidden */\n this.ignoreAccent = false;\n /** @hidden */\n this.isComplex = false;\n if (typeof field === 'string') {\n this.field = field;\n this.operator = operator.toLowerCase();\n this.value = value;\n this.ignoreCase = ignoreCase;\n this.ignoreAccent = ignoreAccent;\n this.isComplex = false;\n this.comparer = DataUtil.fnOperators.processOperator(this.operator);\n }\n else if (field instanceof Predicate && value instanceof Predicate || value instanceof Array) {\n this.isComplex = true;\n this.condition = operator.toLowerCase();\n this.predicates = [field];\n if (value instanceof Array) {\n [].push.apply(this.predicates, value);\n }\n else {\n this.predicates.push(value);\n }\n }\n return this;\n }\n /**\n * Adds n-number of new predicates on existing predicate with “and” condition.\n * @param {Object[]} args - Defines the collection of predicates.\n */\n Predicate.and = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return Predicate.combinePredicates([].slice.call(args, 0), 'and');\n };\n /**\n * Adds new predicate on existing predicate with “and” condition.\n * @param {string} field - Defines the column field.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string} value - Defines the values to match with data.\n * @param {boolean} ignoreCase? - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n */\n Predicate.prototype.and = function (field, operator, value, ignoreCase, ignoreAccent) {\n return Predicate.combine(this, field, operator, value, 'and', ignoreCase, ignoreAccent);\n };\n /**\n * Adds n-number of new predicates on existing predicate with “or” condition.\n * @param {Object[]} args - Defines the collection of predicates.\n */\n Predicate.or = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return Predicate.combinePredicates([].slice.call(args, 0), 'or');\n };\n /**\n * Adds new predicate on existing predicate with “or” condition.\n * @param {string} field - Defines the column field.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string} value - Defines the values to match with data.\n * @param {boolean} ignoreCase? - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n */\n Predicate.prototype.or = function (field, operator, value, ignoreCase, ignoreAccent) {\n return Predicate.combine(this, field, operator, value, 'or', ignoreCase, ignoreAccent);\n };\n /**\n * Converts plain JavaScript object to Predicate object.\n * @param {Predicate[]|Predicate} json - Defines single or collection of Predicate.\n */\n Predicate.fromJson = function (json) {\n if (json instanceof Array) {\n var res = [];\n for (var i = 0, len = json.length; i < len; i++) {\n res.push(this.fromJSONData(json[i]));\n }\n return res;\n }\n var pred = json;\n return this.fromJSONData(pred);\n };\n /**\n * Validate the record based on the predicates.\n * @param {Object} record - Defines the datasource record.\n */\n Predicate.prototype.validate = function (record) {\n var predicate = this.predicates ? this.predicates : [];\n var isAnd;\n var ret;\n if (!this.isComplex && this.comparer) {\n return this.comparer.call(this, DataUtil.getObject(this.field, record), this.value, this.ignoreCase, this.ignoreAccent);\n }\n isAnd = this.condition === 'and';\n for (var i = 0; i < predicate.length; i++) {\n ret = predicate[i].validate(record);\n if (isAnd) {\n if (!ret) {\n return false;\n }\n }\n else {\n if (ret) {\n return true;\n }\n }\n }\n return isAnd;\n };\n /**\n * Converts predicates to plain JavaScript.\n * This method is uses Json stringify when serializing Predicate object.\n */\n Predicate.prototype.toJson = function () {\n var predicates;\n var p;\n if (this.isComplex) {\n predicates = [];\n p = this.predicates;\n for (var i = 0; i < p.length; i++) {\n predicates.push(p[i].toJson());\n }\n }\n return {\n isComplex: this.isComplex,\n field: this.field,\n operator: this.operator,\n value: this.value,\n ignoreCase: this.ignoreCase,\n ignoreAccent: this.ignoreAccent,\n condition: this.condition,\n predicates: predicates\n };\n };\n Predicate.combinePredicates = function (predicates, operator) {\n if (predicates.length === 1) {\n if (!(predicates[0] instanceof Array)) {\n return predicates[0];\n }\n predicates = predicates[0];\n }\n return new Predicate(predicates[0], operator, predicates.slice(1));\n };\n Predicate.combine = function (pred, field, operator, value, condition, ignoreCase, ignoreAccent) {\n if (field instanceof Predicate) {\n return Predicate[condition](pred, field);\n }\n if (typeof field === 'string') {\n return Predicate[condition](pred, new Predicate(field, operator, value, ignoreCase, ignoreAccent));\n }\n return DataUtil.throwError('Predicate - ' + condition + ' : invalid arguments');\n };\n Predicate.fromJSONData = function (json) {\n var preds = json.predicates || [];\n var len = preds.length;\n var predicates = [];\n var result;\n for (var i = 0; i < len; i++) {\n predicates.push(this.fromJSONData(preds[i]));\n }\n if (!json.isComplex) {\n result = new Predicate(json.field, json.operator, json.value, json.ignoreCase, json.ignoreAccent);\n }\n else {\n result = new Predicate(predicates[0], json.condition, predicates.slice(1));\n }\n return result;\n };\n return Predicate;\n}());\nexport { Predicate };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from './manager';\nimport { Query } from './query';\nvar consts = { GroupGuid: '{271bbba0-1ee7}' };\n/**\n * Data manager common utility methods.\n * @hidden\n */\nvar DataUtil = /** @class */ (function () {\n function DataUtil() {\n }\n /**\n * Returns the value by invoking the provided parameter function.\n * If the paramater is not of type function then it will be returned as it is.\n * @param {Function|string|string[]|number} value\n * @param {Object} inst?\n * @hidden\n */\n DataUtil.getValue = function (value, inst) {\n if (typeof value === 'function') {\n return value.call(inst || {});\n }\n return value;\n };\n /**\n * Returns true if the input string ends with given string.\n * @param {string} input\n * @param {string} substr\n */\n DataUtil.endsWith = function (input, substr) {\n return input.slice(-substr.length) === substr;\n };\n /**\n * Returns true if the input string starts with given string.\n * @param {string} str\n * @param {string} startstr\n */\n DataUtil.startsWith = function (input, start) {\n return input.slice(0, start.length) === start;\n };\n /**\n * To return the sorting function based on the string.\n * @param {string} order\n * @hidden\n */\n DataUtil.fnSort = function (order) {\n order = order ? DataUtil.toLowerCase(order) : 'ascending';\n if (order === 'ascending') {\n return this.fnAscending;\n }\n return this.fnDescending;\n };\n /**\n * Comparer function which is used to sort the data in ascending order.\n * @param {string|number} x\n * @param {string|number} y\n * @returns number\n */\n DataUtil.fnAscending = function (x, y) {\n if (y === null || y === undefined) {\n return -1;\n }\n if (typeof x === 'string') {\n return x.localeCompare(y);\n }\n if (x === null || x === undefined) {\n return 1;\n }\n return x - y;\n };\n /**\n * Comparer function which is used to sort the data in descending order.\n * @param {string|number} x\n * @param {string|number} y\n * @returns number\n */\n DataUtil.fnDescending = function (x, y) {\n if (y === null || y === undefined) {\n return 1;\n }\n if (typeof x === 'string') {\n return x.localeCompare(y) * -1;\n }\n if (x === null || x === undefined) {\n return -1;\n }\n return y - x;\n };\n DataUtil.extractFields = function (obj, fields) {\n var newObj = {};\n for (var i = 0; i < fields.length; i++) {\n newObj = this.setValue(fields[i], this.getObject(fields[i], obj), newObj);\n }\n return newObj;\n };\n /**\n * Select objects by given fields from jsonArray.\n * @param {Object[]} jsonArray\n * @param {string[]} fields\n */\n DataUtil.select = function (jsonArray, fields) {\n var newData = [];\n for (var i = 0; i < jsonArray.length; i++) {\n newData.push(this.extractFields(jsonArray[i], fields));\n }\n return newData;\n };\n /**\n * Group the input data based on the field name.\n * It also performs aggregation of the grouped records based on the aggregates paramater.\n * @param {Object[]} jsonArray\n * @param {string} field?\n * @param {Object[]} agg?\n * @param {number} level?\n * @param {Object[]} groupDs?\n */\n DataUtil.group = function (jsonArray, field, aggregates, level, groupDs, format) {\n level = level || 1;\n var jsonData = jsonArray;\n var guid = 'GroupGuid';\n if (jsonData.GroupGuid === consts[guid]) {\n var _loop_1 = function (j) {\n if (!isNullOrUndefined(groupDs)) {\n var indx = -1;\n var temp = groupDs.filter(function (e) { return e.key === jsonData[j].key; });\n indx = groupDs.indexOf(temp[0]);\n jsonData[j].items = this_1.group(jsonData[j].items, field, aggregates, jsonData.level + 1, groupDs[indx].items, format);\n jsonData[j].count = groupDs[indx].count;\n }\n else {\n jsonData[j].items = this_1.group(jsonData[j].items, field, aggregates, jsonData.level + 1, null, format);\n jsonData[j].count = jsonData[j].items.length;\n }\n };\n var this_1 = this;\n for (var j = 0; j < jsonData.length; j++) {\n _loop_1(j);\n }\n jsonData.childLevels += 1;\n return jsonData;\n }\n var grouped = {};\n var groupedArray = [];\n groupedArray.GroupGuid = consts[guid];\n groupedArray.level = level;\n groupedArray.childLevels = 0;\n groupedArray.records = jsonData;\n var _loop_2 = function (i) {\n var val = this_2.getVal(jsonData, i, field);\n if (!isNullOrUndefined(format)) {\n val = format(val, field);\n }\n if (!grouped[val]) {\n grouped[val] = {\n key: val,\n count: 0,\n items: [],\n aggregates: {},\n field: field\n };\n groupedArray.push(grouped[val]);\n if (!isNullOrUndefined(groupDs)) {\n var tempObj = groupDs.filter(function (e) { return e.key === grouped[val].key; });\n grouped[val].count = tempObj[0].count;\n }\n }\n grouped[val].count = !isNullOrUndefined(groupDs) ? grouped[val].count : grouped[val].count += 1;\n grouped[val].items.push(jsonData[i]);\n };\n var this_2 = this;\n for (var i = 0; i < jsonData.length; i++) {\n _loop_2(i);\n }\n if (aggregates && aggregates.length) {\n var _loop_3 = function (i) {\n var res = {};\n var fn = void 0;\n var aggs = aggregates;\n for (var j = 0; j < aggregates.length; j++) {\n fn = DataUtil.aggregates[aggregates[j].type];\n if (!isNullOrUndefined(groupDs)) {\n var temp = groupDs.filter(function (e) { return e.key === groupedArray[i].key; });\n if (fn) {\n res[aggs[j].field + ' - ' + aggs[j].type] = fn(temp[0].items, aggs[j].field);\n }\n }\n else {\n if (fn) {\n res[aggs[j].field + ' - ' + aggs[j].type] = fn(groupedArray[i].items, aggs[j].field);\n }\n }\n }\n groupedArray[i].aggregates = res;\n };\n for (var i = 0; i < groupedArray.length; i++) {\n _loop_3(i);\n }\n }\n return jsonData.length && groupedArray || jsonData;\n };\n /**\n * It is used to categorize the multiple items based on a specific field in jsonArray.\n * The hierarchical queries are commonly required when you use foreign key binding.\n * @param {string} fKey\n * @param {string} from\n * @param {Object[]} source\n * @param {Group} lookup?\n * @param {string} pKey?\n * @hidden\n */\n DataUtil.buildHierarchy = function (fKey, from, source, lookup, pKey) {\n var i;\n var grp = {};\n var temp;\n if (lookup.result) {\n lookup = lookup.result;\n }\n if (lookup.GroupGuid) {\n this.throwError('DataManager: Do not have support Grouping in hierarchy');\n }\n for (i = 0; i < lookup.length; i++) {\n var fKeyData = this.getObject(fKey, lookup[i]);\n temp = grp[fKeyData] || (grp[fKeyData] = []);\n temp.push(lookup[i]);\n }\n for (i = 0; i < source.length; i++) {\n var fKeyData = this.getObject(pKey || fKey, source[i]);\n source[i][from] = grp[fKeyData];\n }\n };\n /**\n * The method used to get the field names which started with specified characters.\n * @param {Object} obj\n * @param {string[]} fields?\n * @param {string} prefix?\n * @hidden\n */\n DataUtil.getFieldList = function (obj, fields, prefix) {\n if (prefix === undefined) {\n prefix = '';\n }\n if (fields === undefined || fields === null) {\n return this.getFieldList(obj, [], prefix);\n }\n var copyObj = obj;\n var keys = Object.keys(obj);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var prop = keys_1[_i];\n if (typeof copyObj[prop] === 'object' && !(copyObj[prop] instanceof Array)) {\n this.getFieldList(copyObj[prop], fields, prefix + prop + '.');\n }\n else {\n fields.push(prefix + prop);\n }\n }\n return fields;\n };\n /**\n * Gets the value of the property in the given object.\n * The complex object can be accessed by providing the field names concatenated with dot(.).\n * @param {string} nameSpace - The name of the property to be accessed.\n * @param {Object} from - Defines the source object.\n */\n DataUtil.getObject = function (nameSpace, from) {\n if (!nameSpace) {\n return from;\n }\n if (!from) {\n return undefined;\n }\n if (nameSpace.indexOf('.') === -1) {\n return from[nameSpace];\n }\n var value = from;\n var splits = nameSpace.split('.');\n for (var i = 0; i < splits.length; i++) {\n if (value == null) {\n break;\n }\n value = value[splits[i]];\n }\n return value;\n };\n /**\n * To set value for the nameSpace in desired object.\n * @param {string} nameSpace - String value to the get the inner object.\n * @param {Object} value - Value that you need to set.\n * @param {Object} obj - Object to get the inner object value.\n * @return { [key: string]: Object; } | Object\n * @hidden\n */\n DataUtil.setValue = function (nameSpace, value, obj) {\n var keys = nameSpace.toString().split('.');\n var start = obj || {};\n var fromObj = start;\n var i;\n var length = keys.length;\n var key;\n for (i = 0; i < length; i++) {\n key = keys[i];\n if (i + 1 === length) {\n fromObj[key] = value === undefined ? undefined : value;\n }\n else if (isNullOrUndefined(fromObj[key])) {\n fromObj[key] = {};\n }\n fromObj = fromObj[key];\n }\n return start;\n };\n /**\n * Sort the given data based on the field and comparer.\n * @param {Object[]} ds - Defines the input data.\n * @param {string} field - Defines the field to be sorted.\n * @param {Function} comparer - Defines the comparer function used to sort the records.\n */\n DataUtil.sort = function (ds, field, comparer) {\n if (ds.length <= 1) {\n return ds;\n }\n var middle = parseInt((ds.length / 2).toString(), 10);\n var left = ds.slice(0, middle);\n var right = ds.slice(middle);\n left = this.sort(left, field, comparer);\n right = this.sort(right, field, comparer);\n return this.merge(left, right, field, comparer);\n };\n DataUtil.ignoreDiacritics = function (value) {\n if (typeof value !== 'string') {\n return value;\n }\n var result = value.split('');\n var newValue = result.map(function (temp) { return temp in DataUtil.diacritics ? DataUtil.diacritics[temp] : temp; });\n return newValue.join('');\n };\n DataUtil.merge = function (left, right, fieldName, comparer) {\n var result = [];\n var current;\n while (left.length > 0 || right.length > 0) {\n if (left.length > 0 && right.length > 0) {\n if (comparer) {\n current = comparer(this.getVal(left, 0, fieldName), this.getVal(right, 0, fieldName)) <= 0 ? left : right;\n }\n else {\n current = left[0][fieldName] < left[0][fieldName] ? left : right;\n }\n }\n else {\n current = left.length > 0 ? left : right;\n }\n result.push(current.shift());\n }\n return result;\n };\n DataUtil.getVal = function (array, index, field) {\n return field ? this.getObject(field, array[index]) : array[index];\n };\n DataUtil.toLowerCase = function (val) {\n return val ? typeof val === 'string' ? val.toLowerCase() : val.toString() : (val === 0 || val === false) ? val.toString() : '';\n };\n /**\n * To perform the filter operation with specified adaptor and returns the result.\n * @param {Object} adaptor\n * @param {string} fnName\n * @param {Object} param1?\n * @param {Object} param2?\n * @hidden\n */\n DataUtil.callAdaptorFunction = function (adaptor, fnName, param1, param2) {\n if (fnName in adaptor) {\n var res = adaptor[fnName](param1, param2);\n if (!this.fnOperators.isnull(res)) {\n param1 = res;\n }\n }\n return param1;\n };\n /**\n * Checks wheather the given input is a plain object or not.\n * @param {Object|Object[]} obj\n */\n DataUtil.isPlainObject = function (obj) {\n return (!!obj) && (obj.constructor === Object);\n };\n /**\n * Returns true when the browser cross origin request.\n */\n DataUtil.isCors = function () {\n var xhr = null;\n var request = 'XMLHttpRequest';\n try {\n xhr = new window[request]();\n }\n catch (e) {\n // No exception handling\n }\n return !!xhr && ('withCredentials' in xhr);\n };\n /**\n * Generate random GUID value which will be prefixed with the given value.\n * @param {string} prefix\n */\n DataUtil.getGuid = function (prefix) {\n var hexs = '0123456789abcdef';\n var rand;\n return (prefix || '') + '00000000-0000-4000-0000-000000000000'.replace(/0/g, function (val, i) {\n if ('crypto' in window && 'getRandomValues' in crypto) {\n var arr = new Uint8Array(1);\n window.crypto.getRandomValues(arr);\n rand = arr[0] % 16 | 0;\n }\n else {\n rand = Math.random() * 16 | 0;\n }\n return hexs[i === 19 ? rand & 0x3 | 0x8 : rand];\n });\n };\n /**\n * Checks wheather the given value is null or not.\n * @param {string|Object} val\n * @returns boolean\n */\n DataUtil.isNull = function (val) {\n return val === undefined || val === null;\n };\n /**\n * To get the required items from collection of objects.\n * @param {Object[]} array\n * @param {string} field\n * @param {Function} comparer\n * @returns Object\n * @hidden\n */\n DataUtil.getItemFromComparer = function (array, field, comparer) {\n var keyVal;\n var current;\n var key;\n var i = 0;\n var castRequired = typeof DataUtil.getVal(array, 0, field) === 'string';\n if (array.length) {\n while (isNullOrUndefined(keyVal) && i < array.length) {\n keyVal = DataUtil.getVal(array, i, field);\n key = array[i++];\n }\n }\n for (; i < array.length; i++) {\n current = DataUtil.getVal(array, i, field);\n if (isNullOrUndefined(current)) {\n continue;\n }\n if (castRequired) {\n keyVal = +keyVal;\n current = +current;\n }\n if (comparer(keyVal, current) > 0) {\n keyVal = current;\n key = array[i];\n }\n }\n return key;\n };\n /**\n * To get distinct values of Array or Array of Objects.\n * @param {Object[]} json\n * @param {string} field\n * @param {boolean} requiresCompleteRecord\n * @returns Object[]\n * * distinct array of objects is return when requiresCompleteRecord set as true.\n * @hidden\n */\n DataUtil.distinct = function (json, fieldName, requiresCompleteRecord) {\n requiresCompleteRecord = isNullOrUndefined(requiresCompleteRecord) ? false : requiresCompleteRecord;\n var result = [];\n var val;\n var tmp = {};\n json.forEach(function (data, index) {\n val = DataUtil.getVal(json, index, fieldName);\n if (!(val in tmp)) {\n result.push(!requiresCompleteRecord ? val : json[index]);\n tmp[val] = 1;\n }\n });\n return result;\n };\n /**\n * Specifies the value which will be used to adjust the date value to server timezone.\n * @default null\n */\n DataUtil.serverTimezoneOffset = null;\n /**\n * Throw error with the given string as message.\n * @param {string} er\n */\n DataUtil.throwError = function (error) {\n try {\n throw new Error(error);\n }\n catch (e) {\n throw e.message + '\\n' + e.stack;\n }\n };\n DataUtil.aggregates = {\n /**\n * Calculate sum of the given field in the data.\n * @param {Object[]} ds\n * @param {string} field\n */\n sum: function (ds, field) {\n var result = 0;\n var val;\n var castRequired = typeof DataUtil.getVal(ds, 0, field) !== 'number';\n for (var i = 0; i < ds.length; i++) {\n val = DataUtil.getVal(ds, i, field);\n if (!isNaN(val) && val !== null) {\n if (castRequired) {\n val = +val;\n }\n result += val;\n }\n }\n return result;\n },\n /**\n * Calculate average value of the given field in the data.\n * @param {Object[]} ds\n * @param {string} field\n */\n average: function (ds, field) {\n return DataUtil.aggregates.sum(ds, field) / ds.length;\n },\n /**\n * Returns the min value of the data based on the field.\n * @param {Object[]} ds\n * @param {string|Function} field\n */\n min: function (ds, field) {\n var result;\n var comparer;\n if (typeof field === 'function') {\n comparer = field;\n field = null;\n }\n result = DataUtil.getObject(field, DataUtil.getItemFromComparer(ds, field, comparer || DataUtil.fnAscending));\n return isNullOrUndefined(result) ? null : result;\n },\n /**\n * Returns the max value of the data based on the field.\n * @param {Object[]} ds\n * @param {string} field\n * @returns number\n */\n max: function (ds, field) {\n var result;\n var comparer;\n if (typeof field === 'function') {\n comparer = field;\n field = null;\n }\n /* tslint:disable-next-line:no-any */\n result = DataUtil.getObject(field, DataUtil.getItemFromComparer(ds, field, comparer || DataUtil.fnDescending));\n return isNullOrUndefined(result) ? null : result;\n },\n /**\n * Returns the total number of true value present in the data based on the given boolean field name.\n * @param {Object[]} ds\n * @param {string} field\n */\n truecount: function (ds, field) {\n return new DataManager(ds).executeLocal(new Query().where(field, 'equal', true, true)).length;\n },\n /**\n * Returns the total number of false value present in the data based on the given boolean field name.\n * @param {Object[]} ds\n * @param {string} field\n */\n falsecount: function (ds, field) {\n return new DataManager(ds).executeLocal(new Query().where(field, 'equal', false, true)).length;\n },\n /**\n * Returns the length of the given data.\n * @param {Object[]} ds\n * @param {string} field?\n * @returns number\n */\n count: function (ds, field) {\n return ds.length;\n }\n };\n /**\n * Specifies the Object with filter operators.\n */\n DataUtil.operatorSymbols = {\n '<': 'lessthan',\n '>': 'greaterthan',\n '<=': 'lessthanorequal',\n '>=': 'greaterthanorequal',\n '==': 'equal',\n '!=': 'notequal',\n '*=': 'contains',\n '$=': 'endswith',\n '^=': 'startswith'\n };\n /**\n * Specifies the Object with filter operators which will be used for OData filter query generation.\n * * It will be used for date/number type filter query.\n */\n DataUtil.odBiOperator = {\n '<': ' lt ',\n '>': ' gt ',\n '<=': ' le ',\n '>=': ' ge ',\n '==': ' eq ',\n '!=': ' ne ',\n 'lessthan': ' lt ',\n 'lessthanorequal': ' le ',\n 'greaterthan': ' gt ',\n 'greaterthanorequal': ' ge ',\n 'equal': ' eq ',\n 'notequal': ' ne '\n };\n /**\n * Specifies the Object with filter operators which will be used for OData filter query generation.\n * It will be used for string type filter query.\n */\n DataUtil.odUniOperator = {\n '$=': 'endswith',\n '^=': 'startswith',\n '*=': 'substringof',\n 'endswith': 'endswith',\n 'startswith': 'startswith',\n 'contains': 'substringof'\n };\n /**\n * Specifies the Object with filter operators which will be used for ODataV4 filter query generation.\n * It will be used for string type filter query.\n */\n DataUtil.odv4UniOperator = {\n '$=': 'endswith',\n '^=': 'startswith',\n '*=': 'contains',\n 'endswith': 'endswith',\n 'startswith': 'startswith',\n 'contains': 'contains'\n };\n DataUtil.diacritics = {\n '\\u24B6': 'A',\n '\\uFF21': 'A',\n '\\u00C0': 'A',\n '\\u00C1': 'A',\n '\\u00C2': 'A',\n '\\u1EA6': 'A',\n '\\u1EA4': 'A',\n '\\u1EAA': 'A',\n '\\u1EA8': 'A',\n '\\u00C3': 'A',\n '\\u0100': 'A',\n '\\u0102': 'A',\n '\\u1EB0': 'A',\n '\\u1EAE': 'A',\n '\\u1EB4': 'A',\n '\\u1EB2': 'A',\n '\\u0226': 'A',\n '\\u01E0': 'A',\n '\\u00C4': 'A',\n '\\u01DE': 'A',\n '\\u1EA2': 'A',\n '\\u00C5': 'A',\n '\\u01FA': 'A',\n '\\u01CD': 'A',\n '\\u0200': 'A',\n '\\u0202': 'A',\n '\\u1EA0': 'A',\n '\\u1EAC': 'A',\n '\\u1EB6': 'A',\n '\\u1E00': 'A',\n '\\u0104': 'A',\n '\\u023A': 'A',\n '\\u2C6F': 'A',\n '\\uA732': 'AA',\n '\\u00C6': 'AE',\n '\\u01FC': 'AE',\n '\\u01E2': 'AE',\n '\\uA734': 'AO',\n '\\uA736': 'AU',\n '\\uA738': 'AV',\n '\\uA73A': 'AV',\n '\\uA73C': 'AY',\n '\\u24B7': 'B',\n '\\uFF22': 'B',\n '\\u1E02': 'B',\n '\\u1E04': 'B',\n '\\u1E06': 'B',\n '\\u0243': 'B',\n '\\u0182': 'B',\n '\\u0181': 'B',\n '\\u24B8': 'C',\n '\\uFF23': 'C',\n '\\u0106': 'C',\n '\\u0108': 'C',\n '\\u010A': 'C',\n '\\u010C': 'C',\n '\\u00C7': 'C',\n '\\u1E08': 'C',\n '\\u0187': 'C',\n '\\u023B': 'C',\n '\\uA73E': 'C',\n '\\u24B9': 'D',\n '\\uFF24': 'D',\n '\\u1E0A': 'D',\n '\\u010E': 'D',\n '\\u1E0C': 'D',\n '\\u1E10': 'D',\n '\\u1E12': 'D',\n '\\u1E0E': 'D',\n '\\u0110': 'D',\n '\\u018B': 'D',\n '\\u018A': 'D',\n '\\u0189': 'D',\n '\\uA779': 'D',\n '\\u01F1': 'DZ',\n '\\u01C4': 'DZ',\n '\\u01F2': 'Dz',\n '\\u01C5': 'Dz',\n '\\u24BA': 'E',\n '\\uFF25': 'E',\n '\\u00C8': 'E',\n '\\u00C9': 'E',\n '\\u00CA': 'E',\n '\\u1EC0': 'E',\n '\\u1EBE': 'E',\n '\\u1EC4': 'E',\n '\\u1EC2': 'E',\n '\\u1EBC': 'E',\n '\\u0112': 'E',\n '\\u1E14': 'E',\n '\\u1E16': 'E',\n '\\u0114': 'E',\n '\\u0116': 'E',\n '\\u00CB': 'E',\n '\\u1EBA': 'E',\n '\\u011A': 'E',\n '\\u0204': 'E',\n '\\u0206': 'E',\n '\\u1EB8': 'E',\n '\\u1EC6': 'E',\n '\\u0228': 'E',\n '\\u1E1C': 'E',\n '\\u0118': 'E',\n '\\u1E18': 'E',\n '\\u1E1A': 'E',\n '\\u0190': 'E',\n '\\u018E': 'E',\n '\\u24BB': 'F',\n '\\uFF26': 'F',\n '\\u1E1E': 'F',\n '\\u0191': 'F',\n '\\uA77B': 'F',\n '\\u24BC': 'G',\n '\\uFF27': 'G',\n '\\u01F4': 'G',\n '\\u011C': 'G',\n '\\u1E20': 'G',\n '\\u011E': 'G',\n '\\u0120': 'G',\n '\\u01E6': 'G',\n '\\u0122': 'G',\n '\\u01E4': 'G',\n '\\u0193': 'G',\n '\\uA7A0': 'G',\n '\\uA77D': 'G',\n '\\uA77E': 'G',\n '\\u24BD': 'H',\n '\\uFF28': 'H',\n '\\u0124': 'H',\n '\\u1E22': 'H',\n '\\u1E26': 'H',\n '\\u021E': 'H',\n '\\u1E24': 'H',\n '\\u1E28': 'H',\n '\\u1E2A': 'H',\n '\\u0126': 'H',\n '\\u2C67': 'H',\n '\\u2C75': 'H',\n '\\uA78D': 'H',\n '\\u24BE': 'I',\n '\\uFF29': 'I',\n '\\u00CC': 'I',\n '\\u00CD': 'I',\n '\\u00CE': 'I',\n '\\u0128': 'I',\n '\\u012A': 'I',\n '\\u012C': 'I',\n '\\u0130': 'I',\n '\\u00CF': 'I',\n '\\u1E2E': 'I',\n '\\u1EC8': 'I',\n '\\u01CF': 'I',\n '\\u0208': 'I',\n '\\u020A': 'I',\n '\\u1ECA': 'I',\n '\\u012E': 'I',\n '\\u1E2C': 'I',\n '\\u0197': 'I',\n '\\u24BF': 'J',\n '\\uFF2A': 'J',\n '\\u0134': 'J',\n '\\u0248': 'J',\n '\\u24C0': 'K',\n '\\uFF2B': 'K',\n '\\u1E30': 'K',\n '\\u01E8': 'K',\n '\\u1E32': 'K',\n '\\u0136': 'K',\n '\\u1E34': 'K',\n '\\u0198': 'K',\n '\\u2C69': 'K',\n '\\uA740': 'K',\n '\\uA742': 'K',\n '\\uA744': 'K',\n '\\uA7A2': 'K',\n '\\u24C1': 'L',\n '\\uFF2C': 'L',\n '\\u013F': 'L',\n '\\u0139': 'L',\n '\\u013D': 'L',\n '\\u1E36': 'L',\n '\\u1E38': 'L',\n '\\u013B': 'L',\n '\\u1E3C': 'L',\n '\\u1E3A': 'L',\n '\\u0141': 'L',\n '\\u023D': 'L',\n '\\u2C62': 'L',\n '\\u2C60': 'L',\n '\\uA748': 'L',\n '\\uA746': 'L',\n '\\uA780': 'L',\n '\\u01C7': 'LJ',\n '\\u01C8': 'Lj',\n '\\u24C2': 'M',\n '\\uFF2D': 'M',\n '\\u1E3E': 'M',\n '\\u1E40': 'M',\n '\\u1E42': 'M',\n '\\u2C6E': 'M',\n '\\u019C': 'M',\n '\\u24C3': 'N',\n '\\uFF2E': 'N',\n '\\u01F8': 'N',\n '\\u0143': 'N',\n '\\u00D1': 'N',\n '\\u1E44': 'N',\n '\\u0147': 'N',\n '\\u1E46': 'N',\n '\\u0145': 'N',\n '\\u1E4A': 'N',\n '\\u1E48': 'N',\n '\\u0220': 'N',\n '\\u019D': 'N',\n '\\uA790': 'N',\n '\\uA7A4': 'N',\n '\\u01CA': 'NJ',\n '\\u01CB': 'Nj',\n '\\u24C4': 'O',\n '\\uFF2F': 'O',\n '\\u00D2': 'O',\n '\\u00D3': 'O',\n '\\u00D4': 'O',\n '\\u1ED2': 'O',\n '\\u1ED0': 'O',\n '\\u1ED6': 'O',\n '\\u1ED4': 'O',\n '\\u00D5': 'O',\n '\\u1E4C': 'O',\n '\\u022C': 'O',\n '\\u1E4E': 'O',\n '\\u014C': 'O',\n '\\u1E50': 'O',\n '\\u1E52': 'O',\n '\\u014E': 'O',\n '\\u022E': 'O',\n '\\u0230': 'O',\n '\\u00D6': 'O',\n '\\u022A': 'O',\n '\\u1ECE': 'O',\n '\\u0150': 'O',\n '\\u01D1': 'O',\n '\\u020C': 'O',\n '\\u020E': 'O',\n '\\u01A0': 'O',\n '\\u1EDC': 'O',\n '\\u1EDA': 'O',\n '\\u1EE0': 'O',\n '\\u1EDE': 'O',\n '\\u1EE2': 'O',\n '\\u1ECC': 'O',\n '\\u1ED8': 'O',\n '\\u01EA': 'O',\n '\\u01EC': 'O',\n '\\u00D8': 'O',\n '\\u01FE': 'O',\n '\\u0186': 'O',\n '\\u019F': 'O',\n '\\uA74A': 'O',\n '\\uA74C': 'O',\n '\\u01A2': 'OI',\n '\\uA74E': 'OO',\n '\\u0222': 'OU',\n '\\u24C5': 'P',\n '\\uFF30': 'P',\n '\\u1E54': 'P',\n '\\u1E56': 'P',\n '\\u01A4': 'P',\n '\\u2C63': 'P',\n '\\uA750': 'P',\n '\\uA752': 'P',\n '\\uA754': 'P',\n '\\u24C6': 'Q',\n '\\uFF31': 'Q',\n '\\uA756': 'Q',\n '\\uA758': 'Q',\n '\\u024A': 'Q',\n '\\u24C7': 'R',\n '\\uFF32': 'R',\n '\\u0154': 'R',\n '\\u1E58': 'R',\n '\\u0158': 'R',\n '\\u0210': 'R',\n '\\u0212': 'R',\n '\\u1E5A': 'R',\n '\\u1E5C': 'R',\n '\\u0156': 'R',\n '\\u1E5E': 'R',\n '\\u024C': 'R',\n '\\u2C64': 'R',\n '\\uA75A': 'R',\n '\\uA7A6': 'R',\n '\\uA782': 'R',\n '\\u24C8': 'S',\n '\\uFF33': 'S',\n '\\u1E9E': 'S',\n '\\u015A': 'S',\n '\\u1E64': 'S',\n '\\u015C': 'S',\n '\\u1E60': 'S',\n '\\u0160': 'S',\n '\\u1E66': 'S',\n '\\u1E62': 'S',\n '\\u1E68': 'S',\n '\\u0218': 'S',\n '\\u015E': 'S',\n '\\u2C7E': 'S',\n '\\uA7A8': 'S',\n '\\uA784': 'S',\n '\\u24C9': 'T',\n '\\uFF34': 'T',\n '\\u1E6A': 'T',\n '\\u0164': 'T',\n '\\u1E6C': 'T',\n '\\u021A': 'T',\n '\\u0162': 'T',\n '\\u1E70': 'T',\n '\\u1E6E': 'T',\n '\\u0166': 'T',\n '\\u01AC': 'T',\n '\\u01AE': 'T',\n '\\u023E': 'T',\n '\\uA786': 'T',\n '\\uA728': 'TZ',\n '\\u24CA': 'U',\n '\\uFF35': 'U',\n '\\u00D9': 'U',\n '\\u00DA': 'U',\n '\\u00DB': 'U',\n '\\u0168': 'U',\n '\\u1E78': 'U',\n '\\u016A': 'U',\n '\\u1E7A': 'U',\n '\\u016C': 'U',\n '\\u00DC': 'U',\n '\\u01DB': 'U',\n '\\u01D7': 'U',\n '\\u01D5': 'U',\n '\\u01D9': 'U',\n '\\u1EE6': 'U',\n '\\u016E': 'U',\n '\\u0170': 'U',\n '\\u01D3': 'U',\n '\\u0214': 'U',\n '\\u0216': 'U',\n '\\u01AF': 'U',\n '\\u1EEA': 'U',\n '\\u1EE8': 'U',\n '\\u1EEE': 'U',\n '\\u1EEC': 'U',\n '\\u1EF0': 'U',\n '\\u1EE4': 'U',\n '\\u1E72': 'U',\n '\\u0172': 'U',\n '\\u1E76': 'U',\n '\\u1E74': 'U',\n '\\u0244': 'U',\n '\\u24CB': 'V',\n '\\uFF36': 'V',\n '\\u1E7C': 'V',\n '\\u1E7E': 'V',\n '\\u01B2': 'V',\n '\\uA75E': 'V',\n '\\u0245': 'V',\n '\\uA760': 'VY',\n '\\u24CC': 'W',\n '\\uFF37': 'W',\n '\\u1E80': 'W',\n '\\u1E82': 'W',\n '\\u0174': 'W',\n '\\u1E86': 'W',\n '\\u1E84': 'W',\n '\\u1E88': 'W',\n '\\u2C72': 'W',\n '\\u24CD': 'X',\n '\\uFF38': 'X',\n '\\u1E8A': 'X',\n '\\u1E8C': 'X',\n '\\u24CE': 'Y',\n '\\uFF39': 'Y',\n '\\u1EF2': 'Y',\n '\\u00DD': 'Y',\n '\\u0176': 'Y',\n '\\u1EF8': 'Y',\n '\\u0232': 'Y',\n '\\u1E8E': 'Y',\n '\\u0178': 'Y',\n '\\u1EF6': 'Y',\n '\\u1EF4': 'Y',\n '\\u01B3': 'Y',\n '\\u024E': 'Y',\n '\\u1EFE': 'Y',\n '\\u24CF': 'Z',\n '\\uFF3A': 'Z',\n '\\u0179': 'Z',\n '\\u1E90': 'Z',\n '\\u017B': 'Z',\n '\\u017D': 'Z',\n '\\u1E92': 'Z',\n '\\u1E94': 'Z',\n '\\u01B5': 'Z',\n '\\u0224': 'Z',\n '\\u2C7F': 'Z',\n '\\u2C6B': 'Z',\n '\\uA762': 'Z',\n '\\u24D0': 'a',\n '\\uFF41': 'a',\n '\\u1E9A': 'a',\n '\\u00E0': 'a',\n '\\u00E1': 'a',\n '\\u00E2': 'a',\n '\\u1EA7': 'a',\n '\\u1EA5': 'a',\n '\\u1EAB': 'a',\n '\\u1EA9': 'a',\n '\\u00E3': 'a',\n '\\u0101': 'a',\n '\\u0103': 'a',\n '\\u1EB1': 'a',\n '\\u1EAF': 'a',\n '\\u1EB5': 'a',\n '\\u1EB3': 'a',\n '\\u0227': 'a',\n '\\u01E1': 'a',\n '\\u00E4': 'a',\n '\\u01DF': 'a',\n '\\u1EA3': 'a',\n '\\u00E5': 'a',\n '\\u01FB': 'a',\n '\\u01CE': 'a',\n '\\u0201': 'a',\n '\\u0203': 'a',\n '\\u1EA1': 'a',\n '\\u1EAD': 'a',\n '\\u1EB7': 'a',\n '\\u1E01': 'a',\n '\\u0105': 'a',\n '\\u2C65': 'a',\n '\\u0250': 'a',\n '\\uA733': 'aa',\n '\\u00E6': 'ae',\n '\\u01FD': 'ae',\n '\\u01E3': 'ae',\n '\\uA735': 'ao',\n '\\uA737': 'au',\n '\\uA739': 'av',\n '\\uA73B': 'av',\n '\\uA73D': 'ay',\n '\\u24D1': 'b',\n '\\uFF42': 'b',\n '\\u1E03': 'b',\n '\\u1E05': 'b',\n '\\u1E07': 'b',\n '\\u0180': 'b',\n '\\u0183': 'b',\n '\\u0253': 'b',\n '\\u24D2': 'c',\n '\\uFF43': 'c',\n '\\u0107': 'c',\n '\\u0109': 'c',\n '\\u010B': 'c',\n '\\u010D': 'c',\n '\\u00E7': 'c',\n '\\u1E09': 'c',\n '\\u0188': 'c',\n '\\u023C': 'c',\n '\\uA73F': 'c',\n '\\u2184': 'c',\n '\\u24D3': 'd',\n '\\uFF44': 'd',\n '\\u1E0B': 'd',\n '\\u010F': 'd',\n '\\u1E0D': 'd',\n '\\u1E11': 'd',\n '\\u1E13': 'd',\n '\\u1E0F': 'd',\n '\\u0111': 'd',\n '\\u018C': 'd',\n '\\u0256': 'd',\n '\\u0257': 'd',\n '\\uA77A': 'd',\n '\\u01F3': 'dz',\n '\\u01C6': 'dz',\n '\\u24D4': 'e',\n '\\uFF45': 'e',\n '\\u00E8': 'e',\n '\\u00E9': 'e',\n '\\u00EA': 'e',\n '\\u1EC1': 'e',\n '\\u1EBF': 'e',\n '\\u1EC5': 'e',\n '\\u1EC3': 'e',\n '\\u1EBD': 'e',\n '\\u0113': 'e',\n '\\u1E15': 'e',\n '\\u1E17': 'e',\n '\\u0115': 'e',\n '\\u0117': 'e',\n '\\u00EB': 'e',\n '\\u1EBB': 'e',\n '\\u011B': 'e',\n '\\u0205': 'e',\n '\\u0207': 'e',\n '\\u1EB9': 'e',\n '\\u1EC7': 'e',\n '\\u0229': 'e',\n '\\u1E1D': 'e',\n '\\u0119': 'e',\n '\\u1E19': 'e',\n '\\u1E1B': 'e',\n '\\u0247': 'e',\n '\\u025B': 'e',\n '\\u01DD': 'e',\n '\\u24D5': 'f',\n '\\uFF46': 'f',\n '\\u1E1F': 'f',\n '\\u0192': 'f',\n '\\uA77C': 'f',\n '\\u24D6': 'g',\n '\\uFF47': 'g',\n '\\u01F5': 'g',\n '\\u011D': 'g',\n '\\u1E21': 'g',\n '\\u011F': 'g',\n '\\u0121': 'g',\n '\\u01E7': 'g',\n '\\u0123': 'g',\n '\\u01E5': 'g',\n '\\u0260': 'g',\n '\\uA7A1': 'g',\n '\\u1D79': 'g',\n '\\uA77F': 'g',\n '\\u24D7': 'h',\n '\\uFF48': 'h',\n '\\u0125': 'h',\n '\\u1E23': 'h',\n '\\u1E27': 'h',\n '\\u021F': 'h',\n '\\u1E25': 'h',\n '\\u1E29': 'h',\n '\\u1E2B': 'h',\n '\\u1E96': 'h',\n '\\u0127': 'h',\n '\\u2C68': 'h',\n '\\u2C76': 'h',\n '\\u0265': 'h',\n '\\u0195': 'hv',\n '\\u24D8': 'i',\n '\\uFF49': 'i',\n '\\u00EC': 'i',\n '\\u00ED': 'i',\n '\\u00EE': 'i',\n '\\u0129': 'i',\n '\\u012B': 'i',\n '\\u012D': 'i',\n '\\u00EF': 'i',\n '\\u1E2F': 'i',\n '\\u1EC9': 'i',\n '\\u01D0': 'i',\n '\\u0209': 'i',\n '\\u020B': 'i',\n '\\u1ECB': 'i',\n '\\u012F': 'i',\n '\\u1E2D': 'i',\n '\\u0268': 'i',\n '\\u0131': 'i',\n '\\u24D9': 'j',\n '\\uFF4A': 'j',\n '\\u0135': 'j',\n '\\u01F0': 'j',\n '\\u0249': 'j',\n '\\u24DA': 'k',\n '\\uFF4B': 'k',\n '\\u1E31': 'k',\n '\\u01E9': 'k',\n '\\u1E33': 'k',\n '\\u0137': 'k',\n '\\u1E35': 'k',\n '\\u0199': 'k',\n '\\u2C6A': 'k',\n '\\uA741': 'k',\n '\\uA743': 'k',\n '\\uA745': 'k',\n '\\uA7A3': 'k',\n '\\u24DB': 'l',\n '\\uFF4C': 'l',\n '\\u0140': 'l',\n '\\u013A': 'l',\n '\\u013E': 'l',\n '\\u1E37': 'l',\n '\\u1E39': 'l',\n '\\u013C': 'l',\n '\\u1E3D': 'l',\n '\\u1E3B': 'l',\n '\\u017F': 'l',\n '\\u0142': 'l',\n '\\u019A': 'l',\n '\\u026B': 'l',\n '\\u2C61': 'l',\n '\\uA749': 'l',\n '\\uA781': 'l',\n '\\uA747': 'l',\n '\\u01C9': 'lj',\n '\\u24DC': 'm',\n '\\uFF4D': 'm',\n '\\u1E3F': 'm',\n '\\u1E41': 'm',\n '\\u1E43': 'm',\n '\\u0271': 'm',\n '\\u026F': 'm',\n '\\u24DD': 'n',\n '\\uFF4E': 'n',\n '\\u01F9': 'n',\n '\\u0144': 'n',\n '\\u00F1': 'n',\n '\\u1E45': 'n',\n '\\u0148': 'n',\n '\\u1E47': 'n',\n '\\u0146': 'n',\n '\\u1E4B': 'n',\n '\\u1E49': 'n',\n '\\u019E': 'n',\n '\\u0272': 'n',\n '\\u0149': 'n',\n '\\uA791': 'n',\n '\\uA7A5': 'n',\n '\\u01CC': 'nj',\n '\\u24DE': 'o',\n '\\uFF4F': 'o',\n '\\u00F2': 'o',\n '\\u00F3': 'o',\n '\\u00F4': 'o',\n '\\u1ED3': 'o',\n '\\u1ED1': 'o',\n '\\u1ED7': 'o',\n '\\u1ED5': 'o',\n '\\u00F5': 'o',\n '\\u1E4D': 'o',\n '\\u022D': 'o',\n '\\u1E4F': 'o',\n '\\u014D': 'o',\n '\\u1E51': 'o',\n '\\u1E53': 'o',\n '\\u014F': 'o',\n '\\u022F': 'o',\n '\\u0231': 'o',\n '\\u00F6': 'o',\n '\\u022B': 'o',\n '\\u1ECF': 'o',\n '\\u0151': 'o',\n '\\u01D2': 'o',\n '\\u020D': 'o',\n '\\u020F': 'o',\n '\\u01A1': 'o',\n '\\u1EDD': 'o',\n '\\u1EDB': 'o',\n '\\u1EE1': 'o',\n '\\u1EDF': 'o',\n '\\u1EE3': 'o',\n '\\u1ECD': 'o',\n '\\u1ED9': 'o',\n '\\u01EB': 'o',\n '\\u01ED': 'o',\n '\\u00F8': 'o',\n '\\u01FF': 'o',\n '\\u0254': 'o',\n '\\uA74B': 'o',\n '\\uA74D': 'o',\n '\\u0275': 'o',\n '\\u01A3': 'oi',\n '\\u0223': 'ou',\n '\\uA74F': 'oo',\n '\\u24DF': 'p',\n '\\uFF50': 'p',\n '\\u1E55': 'p',\n '\\u1E57': 'p',\n '\\u01A5': 'p',\n '\\u1D7D': 'p',\n '\\uA751': 'p',\n '\\uA753': 'p',\n '\\uA755': 'p',\n '\\u24E0': 'q',\n '\\uFF51': 'q',\n '\\u024B': 'q',\n '\\uA757': 'q',\n '\\uA759': 'q',\n '\\u24E1': 'r',\n '\\uFF52': 'r',\n '\\u0155': 'r',\n '\\u1E59': 'r',\n '\\u0159': 'r',\n '\\u0211': 'r',\n '\\u0213': 'r',\n '\\u1E5B': 'r',\n '\\u1E5D': 'r',\n '\\u0157': 'r',\n '\\u1E5F': 'r',\n '\\u024D': 'r',\n '\\u027D': 'r',\n '\\uA75B': 'r',\n '\\uA7A7': 'r',\n '\\uA783': 'r',\n '\\u24E2': 's',\n '\\uFF53': 's',\n '\\u00DF': 's',\n '\\u015B': 's',\n '\\u1E65': 's',\n '\\u015D': 's',\n '\\u1E61': 's',\n '\\u0161': 's',\n '\\u1E67': 's',\n '\\u1E63': 's',\n '\\u1E69': 's',\n '\\u0219': 's',\n '\\u015F': 's',\n '\\u023F': 's',\n '\\uA7A9': 's',\n '\\uA785': 's',\n '\\u1E9B': 's',\n '\\u24E3': 't',\n '\\uFF54': 't',\n '\\u1E6B': 't',\n '\\u1E97': 't',\n '\\u0165': 't',\n '\\u1E6D': 't',\n '\\u021B': 't',\n '\\u0163': 't',\n '\\u1E71': 't',\n '\\u1E6F': 't',\n '\\u0167': 't',\n '\\u01AD': 't',\n '\\u0288': 't',\n '\\u2C66': 't',\n '\\uA787': 't',\n '\\uA729': 'tz',\n '\\u24E4': 'u',\n '\\uFF55': 'u',\n '\\u00F9': 'u',\n '\\u00FA': 'u',\n '\\u00FB': 'u',\n '\\u0169': 'u',\n '\\u1E79': 'u',\n '\\u016B': 'u',\n '\\u1E7B': 'u',\n '\\u016D': 'u',\n '\\u00FC': 'u',\n '\\u01DC': 'u',\n '\\u01D8': 'u',\n '\\u01D6': 'u',\n '\\u01DA': 'u',\n '\\u1EE7': 'u',\n '\\u016F': 'u',\n '\\u0171': 'u',\n '\\u01D4': 'u',\n '\\u0215': 'u',\n '\\u0217': 'u',\n '\\u01B0': 'u',\n '\\u1EEB': 'u',\n '\\u1EE9': 'u',\n '\\u1EEF': 'u',\n '\\u1EED': 'u',\n '\\u1EF1': 'u',\n '\\u1EE5': 'u',\n '\\u1E73': 'u',\n '\\u0173': 'u',\n '\\u1E77': 'u',\n '\\u1E75': 'u',\n '\\u0289': 'u',\n '\\u24E5': 'v',\n '\\uFF56': 'v',\n '\\u1E7D': 'v',\n '\\u1E7F': 'v',\n '\\u028B': 'v',\n '\\uA75F': 'v',\n '\\u028C': 'v',\n '\\uA761': 'vy',\n '\\u24E6': 'w',\n '\\uFF57': 'w',\n '\\u1E81': 'w',\n '\\u1E83': 'w',\n '\\u0175': 'w',\n '\\u1E87': 'w',\n '\\u1E85': 'w',\n '\\u1E98': 'w',\n '\\u1E89': 'w',\n '\\u2C73': 'w',\n '\\u24E7': 'x',\n '\\uFF58': 'x',\n '\\u1E8B': 'x',\n '\\u1E8D': 'x',\n '\\u24E8': 'y',\n '\\uFF59': 'y',\n '\\u1EF3': 'y',\n '\\u00FD': 'y',\n '\\u0177': 'y',\n '\\u1EF9': 'y',\n '\\u0233': 'y',\n '\\u1E8F': 'y',\n '\\u00FF': 'y',\n '\\u1EF7': 'y',\n '\\u1E99': 'y',\n '\\u1EF5': 'y',\n '\\u01B4': 'y',\n '\\u024F': 'y',\n '\\u1EFF': 'y',\n '\\u24E9': 'z',\n '\\uFF5A': 'z',\n '\\u017A': 'z',\n '\\u1E91': 'z',\n '\\u017C': 'z',\n '\\u017E': 'z',\n '\\u1E93': 'z',\n '\\u1E95': 'z',\n '\\u01B6': 'z',\n '\\u0225': 'z',\n '\\u0240': 'z',\n '\\u2C6C': 'z',\n '\\uA763': 'z',\n '\\u0386': '\\u0391',\n '\\u0388': '\\u0395',\n '\\u0389': '\\u0397',\n '\\u038A': '\\u0399',\n '\\u03AA': '\\u0399',\n '\\u038C': '\\u039F',\n '\\u038E': '\\u03A5',\n '\\u03AB': '\\u03A5',\n '\\u038F': '\\u03A9',\n '\\u03AC': '\\u03B1',\n '\\u03AD': '\\u03B5',\n '\\u03AE': '\\u03B7',\n '\\u03AF': '\\u03B9',\n '\\u03CA': '\\u03B9',\n '\\u0390': '\\u03B9',\n '\\u03CC': '\\u03BF',\n '\\u03CD': '\\u03C5',\n '\\u03CB': '\\u03C5',\n '\\u03B0': '\\u03C5',\n '\\u03C9': '\\u03C9',\n '\\u03C2': '\\u03C3'\n };\n DataUtil.fnOperators = {\n /**\n * Returns true when the actual input is equal to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n * @param {boolean} ignoreAccent?\n */\n equal: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) === DataUtil.toLowerCase(expected);\n }\n return actual === expected;\n },\n /**\n * Returns true when the actual input is not equal to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n notequal: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n return !DataUtil.fnOperators.equal(actual, expected, ignoreCase);\n },\n /**\n * Returns true when the actual input is less than to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n lessthan: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) < DataUtil.toLowerCase(expected);\n }\n return actual < expected;\n },\n /**\n * Returns true when the actual input is greater than to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n greaterthan: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) > DataUtil.toLowerCase(expected);\n }\n return actual > expected;\n },\n /**\n * Returns true when the actual input is less than or equal to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n lessthanorequal: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) <= DataUtil.toLowerCase(expected);\n }\n return actual <= expected;\n },\n /**\n * Returns true when the actual input is greater than or equal to the given input.\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n */\n greaterthanorequal: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) >= DataUtil.toLowerCase(expected);\n }\n return actual >= expected;\n },\n /**\n * Returns true when the actual input contains the given string.\n * @param {string|number} actual\n * @param {string|number} expected\n * @param {boolean} ignoreCase?\n */\n contains: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return !isNullOrUndefined(actual) && !isNullOrUndefined(expected) &&\n DataUtil.toLowerCase(actual).indexOf(DataUtil.toLowerCase(expected)) !== -1;\n }\n return !isNullOrUndefined(actual) && !isNullOrUndefined(expected) &&\n actual.toString().indexOf(expected) !== -1;\n },\n /**\n * Returns true when the given input value is not null.\n * @param {string|number} actual\n * @returns boolean\n */\n notnull: function (actual) {\n return actual !== null;\n },\n /**\n * Returns true when the given input value is null.\n * @param {string|number} actual\n * @returns boolean\n */\n isnull: function (actual) {\n return actual === null;\n },\n /**\n * Returns true when the actual input starts with the given string\n * @param {string} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n */\n startswith: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return actual && expected && DataUtil.startsWith(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return actual && expected && DataUtil.startsWith(actual, expected);\n },\n /**\n * Returns true when the actual input ends with the given string.\n * @param {string} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n */\n endswith: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return actual && expected && DataUtil.endsWith(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return actual && expected && DataUtil.endsWith(actual, expected);\n },\n /**\n * It will return the filter operator based on the filter symbol.\n * @param {string} operator\n * @hidden\n */\n processSymbols: function (operator) {\n var fnName = DataUtil.operatorSymbols[operator];\n if (fnName) {\n var fn = DataUtil.fnOperators[fnName];\n return fn;\n }\n return DataUtil.throwError('Query - Process Operator : Invalid operator');\n },\n /**\n * It will return the valid filter operator based on the specified operators.\n * @param {string} operator\n * @hidden\n */\n processOperator: function (operator) {\n var fn = DataUtil.fnOperators[operator];\n if (fn) {\n return fn;\n }\n return DataUtil.fnOperators.processSymbols(operator);\n }\n };\n /**\n * To perform the parse operation on JSON data, like convert to string from JSON or convert to JSON from string.\n */\n DataUtil.parse = {\n /**\n * Parse the given string to the plain JavaScript object.\n * @param {string|Object|Object[]} jsonText\n */\n parseJson: function (jsonText) {\n if (typeof jsonText === 'string') {\n jsonText = JSON.parse(jsonText, DataUtil.parse.jsonReviver);\n }\n else if (jsonText instanceof Array) {\n DataUtil.parse.iterateAndReviveArray(jsonText);\n }\n else if (typeof jsonText === 'object') {\n DataUtil.parse.iterateAndReviveJson(jsonText);\n }\n return jsonText;\n },\n /**\n * It will perform on array of values.\n * @param {string[]|Object[]} array\n * @hidden\n */\n iterateAndReviveArray: function (array) {\n for (var i = 0; i < array.length; i++) {\n if (typeof array[i] === 'object') {\n DataUtil.parse.iterateAndReviveJson(array[i]);\n }\n else if (typeof array[i] === 'string' && !/^[\\s]*\\[|^[\\s]*\\{|\\\"/g.test(array[i])) {\n array[i] = DataUtil.parse.jsonReviver('', array[i]);\n }\n else {\n array[i] = DataUtil.parse.parseJson(array[i]);\n }\n }\n },\n /**\n * It will perform on JSON values\n * @param {JSON} json\n * @hidden\n */\n iterateAndReviveJson: function (json) {\n var value;\n var keys = Object.keys(json);\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var prop = keys_2[_i];\n if (DataUtil.startsWith(prop, '__')) {\n continue;\n }\n value = json[prop];\n if (typeof value === 'object') {\n if (value instanceof Array) {\n DataUtil.parse.iterateAndReviveArray(value);\n }\n else if (value) {\n DataUtil.parse.iterateAndReviveJson(value);\n }\n }\n else {\n json[prop] = DataUtil.parse.jsonReviver(json[prop], value);\n }\n }\n },\n /**\n * It will perform on JSON values\n * @param {string} field\n * @param {string|Date} value\n * @hidden\n */\n jsonReviver: function (field, value) {\n var dupValue = value;\n if (typeof value === 'string') {\n var ms = /^\\/Date\\(([+-]?[0-9]+)([+-][0-9]{4})?\\)\\/$/.exec(value);\n if (ms) {\n return DataUtil.dateParse.toTimeZone(new Date(parseInt(ms[1], 10)), DataUtil.serverTimezoneOffset, true);\n }\n else if (/^(\\d{4}\\-\\d\\d\\-\\d\\d([tT][\\d:\\.]*){1})([zZ]|([+\\-])(\\d\\d):?(\\d\\d))?$/.test(value)) {\n var arr = dupValue.split(/[^0-9]/);\n value = DataUtil.dateParse\n .toTimeZone(new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, parseInt(arr[2], 10), parseInt(arr[3], 10), parseInt(arr[4], 10), parseInt(arr[5], 10)), DataUtil.serverTimezoneOffset, true);\n }\n }\n return value;\n },\n /**\n * Check wheather the given value is JSON or not.\n * @param {Object[]} jsonData\n */\n isJson: function (jsonData) {\n if (typeof jsonData[0] === 'string') {\n return jsonData;\n }\n return DataUtil.parse.parseJson(jsonData);\n },\n /**\n * Checks wheather the given value is GUID or not.\n * @param {string} value\n */\n isGuid: function (value) {\n var regex = /[A-Fa-f0-9]{8}(?:-[A-Fa-f0-9]{4}){3}-[A-Fa-f0-9]{12}/i;\n var match = regex.exec(value);\n return match != null;\n },\n /**\n * The method used to replace the value based on the type.\n * @param {Object} value\n * @param {boolean} stringify\n * @hidden\n */\n replacer: function (value, stringify) {\n if (DataUtil.isPlainObject(value)) {\n return DataUtil.parse.jsonReplacer(value, stringify);\n }\n if (value instanceof Array) {\n return DataUtil.parse.arrayReplacer(value);\n }\n if (value instanceof Date) {\n return DataUtil.parse.jsonReplacer({ val: value }, stringify).val;\n }\n return value;\n },\n /**\n * It will replace the JSON value.\n * @param {string} key\n * @param {Object} val\n * @hidden\n */\n jsonReplacer: function (val, stringify) {\n var value;\n var keys = Object.keys(val);\n for (var _i = 0, keys_3 = keys; _i < keys_3.length; _i++) {\n var prop = keys_3[_i];\n value = val[prop];\n if (!(value instanceof Date)) {\n continue;\n }\n var d = value;\n val[prop] = DataUtil.dateParse.toTimeZone(DataUtil.dateParse.addSelfOffset(d), DataUtil.serverTimezoneOffset).toJSON();\n }\n return val;\n },\n /**\n * It will replace the Array of value.\n * @param {string} key\n * @param {Object[]} val\n * @hidden\n */\n arrayReplacer: function (val) {\n for (var i = 0; i < val.length; i++) {\n if (DataUtil.isPlainObject(val[i])) {\n val[i] = DataUtil.parse.jsonReplacer(val[i]);\n }\n else if (val[i] instanceof Date) {\n val[i] = DataUtil.parse.jsonReplacer({ date: val[i] }).date;\n }\n }\n return val;\n }\n };\n /**\n * @hidden\n */\n DataUtil.dateParse = {\n addSelfOffset: function (input) {\n return new Date(+input - (input.getTimezoneOffset() * 60000));\n },\n toUTC: function (input) {\n return new Date(+input + (input.getTimezoneOffset() * 60000));\n },\n toTimeZone: function (input, offset, utc) {\n if (offset === null) {\n return input;\n }\n var unix = utc ? DataUtil.dateParse.toUTC(input) : input;\n return new Date(+unix - (offset * 3600000));\n }\n };\n return DataUtil;\n}());\nexport { DataUtil };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { merge, extend, isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';\nimport { DataUtil } from './util';\nimport { Query, Predicate } from './query';\n/**\n * Adaptors are specific data source type aware interfaces that are used by DataManager to communicate with DataSource.\n * This is the base adaptor class that other adaptors can extend.\n * @hidden\n */\nvar Adaptor = /** @class */ (function () {\n /**\n * Constructor for Adaptor class\n * @param {DataOptions} ds?\n * @hidden\n * @returns aggregates\n */\n function Adaptor(ds) {\n // common options for all the adaptors \n this.options = {\n from: 'table',\n requestType: 'json',\n sortBy: 'sorted',\n select: 'select',\n skip: 'skip',\n group: 'group',\n take: 'take',\n search: 'search',\n count: 'requiresCounts',\n where: 'where',\n aggregates: 'aggregates'\n };\n /**\n * Specifies the type of adaptor.\n * @default Adaptor\n */\n this.type = Adaptor;\n this.dataSource = ds;\n this.pvt = {};\n }\n /**\n * Returns the data from the query processing.\n * @param {Object} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @returns Object\n */\n Adaptor.prototype.processResponse = function (data, ds, query, xhr) {\n return data;\n };\n return Adaptor;\n}());\nexport { Adaptor };\n/**\n * JsonAdaptor is used to process JSON data. It contains methods to process the given JSON data based on the queries.\n * @hidden\n */\nvar JsonAdaptor = /** @class */ (function (_super) {\n __extends(JsonAdaptor, _super);\n function JsonAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Process the JSON data based on the provided queries.\n * @param {DataManager} dataManager\n * @param {Query} query\n * @returns Object\n */\n JsonAdaptor.prototype.processQuery = function (dataManager, query) {\n var result = dataManager.dataSource.json.slice(0);\n var count = result.length;\n var countFlg = true;\n var ret;\n var key;\n var agg = {};\n for (var i = 0; i < query.queries.length; i++) {\n key = query.queries[i];\n ret = this[key.fn].call(this, result, key.e, query);\n if (key.fn === 'onAggregates') {\n agg[key.e.field + ' - ' + key.e.type] = ret;\n }\n else {\n result = ret !== undefined ? ret : result;\n }\n if (key.fn === 'onPage' || key.fn === 'onSkip' || key.fn === 'onTake' || key.fn === 'onRange') {\n countFlg = false;\n }\n if (countFlg) {\n count = result.length;\n }\n }\n if (query.isCountRequired) {\n result = {\n result: result,\n count: count,\n aggregates: agg\n };\n }\n return result;\n };\n /**\n * Performs batch update in the JSON array which add, remove and update records.\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n */\n JsonAdaptor.prototype.batchRequest = function (dm, changes, e) {\n var i;\n for (i = 0; i < changes.addedRecords.length; i++) {\n this.insert(dm, changes.addedRecords[i]);\n }\n for (i = 0; i < changes.changedRecords.length; i++) {\n this.update(dm, e.key, changes.changedRecords[i]);\n }\n for (i = 0; i < changes.deletedRecords.length; i++) {\n this.remove(dm, e.key, changes.deletedRecords[i]);\n }\n return changes;\n };\n /**\n * Performs filter operation with the given data and where query.\n * @param {Object[]} ds\n * @param {{validate:Function}} e\n */\n JsonAdaptor.prototype.onWhere = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.filter(function (obj) {\n if (e) {\n return e.validate(obj);\n }\n });\n };\n /**\n * Returns aggregate function based on the aggregate type.\n * @param {Object[]} ds\n * @param {{field:string} e\n * @param {string}} type\n */\n JsonAdaptor.prototype.onAggregates = function (ds, e) {\n var fn = DataUtil.aggregates[e.type];\n if (!ds || !fn || ds.length === 0) {\n return null;\n }\n return fn(ds, e.field);\n };\n /**\n * Performs search operation based on the given query.\n * @param {Object[]} ds\n * @param {QueryOptions} e\n */\n JsonAdaptor.prototype.onSearch = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n if (e.fieldNames.length === 0) {\n DataUtil.getFieldList(ds[0], e.fieldNames);\n }\n return ds.filter(function (obj) {\n for (var j = 0; j < e.fieldNames.length; j++) {\n if (e.comparer.call(obj, DataUtil.getObject(e.fieldNames[j], obj), e.searchKey, e.ignoreCase)) {\n return true;\n }\n }\n return false;\n });\n };\n /**\n * Sort the data with given direction and field.\n * @param {Object[]} ds\n * @param {{comparer:(a:Object} e\n * @param {Object} b\n */\n JsonAdaptor.prototype.onSortBy = function (ds, e, query) {\n if (!ds || !ds.length) {\n return ds;\n }\n var fnCompare;\n var field = DataUtil.getValue(e.fieldName, query);\n if (!field) {\n return ds.sort(e.comparer);\n }\n if (field instanceof Array) {\n field = field.slice(0);\n for (var i = field.length - 1; i >= 0; i--) {\n if (!field[i]) {\n continue;\n }\n fnCompare = e.comparer;\n if (DataUtil.endsWith(field[i], ' desc')) {\n fnCompare = DataUtil.fnSort('descending');\n field[i] = field[i].replace(' desc', '');\n }\n ds = DataUtil.sort(ds, field[i], fnCompare);\n }\n return ds;\n }\n return DataUtil.sort(ds, field, e.comparer);\n };\n /**\n * Group the data based on the given query.\n * @param {Object[]} ds\n * @param {QueryOptions} e\n * @param {Query} query\n */\n JsonAdaptor.prototype.onGroup = function (ds, e, query) {\n if (!ds || !ds.length) {\n return ds;\n }\n var aggQuery = Query.filterQueries(query.queries, 'onAggregates');\n var agg = [];\n if (aggQuery.length) {\n var tmp = void 0;\n for (var i = 0; i < aggQuery.length; i++) {\n tmp = aggQuery[i].e;\n agg.push({ type: tmp.type, field: DataUtil.getValue(tmp.field, query) });\n }\n }\n return DataUtil.group(ds, DataUtil.getValue(e.fieldName, query), agg, null, null, e.comparer);\n };\n /**\n * Retrieves records based on the given page index and size.\n * @param {Object[]} ds\n * @param {{pageSize:number} e\n * @param {number}} pageIndex\n * @param {Query} query\n */\n JsonAdaptor.prototype.onPage = function (ds, e, query) {\n var size = DataUtil.getValue(e.pageSize, query);\n var start = (DataUtil.getValue(e.pageIndex, query) - 1) * size;\n var end = start + size;\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(start, end);\n };\n /**\n * Retrieves records based on the given start and end index from query.\n * @param {Object[]} ds\n * @param {{start:number} e\n * @param {number}} end\n */\n JsonAdaptor.prototype.onRange = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(DataUtil.getValue(e.start), DataUtil.getValue(e.end));\n };\n /**\n * Picks the given count of records from the top of the datasource.\n * @param {Object[]} ds\n * @param {{nos:number}} e\n */\n JsonAdaptor.prototype.onTake = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(0, DataUtil.getValue(e.nos));\n };\n /**\n * Skips the given count of records from the data source.\n * @param {Object[]} ds\n * @param {{nos:number}} e\n */\n JsonAdaptor.prototype.onSkip = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(DataUtil.getValue(e.nos));\n };\n /**\n * Selects specified columns from the data source.\n * @param {Object[]} ds\n * @param {{fieldNames:string}} e\n */\n JsonAdaptor.prototype.onSelect = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return DataUtil.select(ds, DataUtil.getValue(e.fieldNames));\n };\n /**\n * Inserts new record in the table.\n * @param {DataManager} dm\n * @param {Object} data\n * @param {number} position\n */\n JsonAdaptor.prototype.insert = function (dm, data, tableName, query, position) {\n if (isNullOrUndefined(position)) {\n return dm.dataSource.json.push(data);\n }\n else {\n return dm.dataSource.json.splice(position, 0, data);\n }\n };\n /**\n * Remove the data from the dataSource based on the key field value.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @returns null\n */\n JsonAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n var ds = dm.dataSource.json;\n var i;\n if (typeof value === 'object') {\n value = value[keyField];\n }\n for (i = 0; i < ds.length; i++) {\n if (ds[i][keyField] === value) {\n break;\n }\n }\n return i !== ds.length ? ds.splice(i, 1) : null;\n };\n /**\n * Updates existing record and saves the changes to the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @returns null\n */\n JsonAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n var ds = dm.dataSource.json;\n var i;\n var key = value[keyField];\n for (i = 0; i < ds.length; i++) {\n if (ds[i][keyField] === key) {\n break;\n }\n }\n return i < ds.length ? merge(ds[i], value) : null;\n };\n return JsonAdaptor;\n}(Adaptor));\nexport { JsonAdaptor };\n/**\n * URL Adaptor of DataManager can be used when you are required to use remote service to retrieve data.\n * It interacts with server-side for all DataManager Queries and CRUD operations.\n * @hidden\n */\nvar UrlAdaptor = /** @class */ (function (_super) {\n __extends(UrlAdaptor, _super);\n function UrlAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Process the query to generate request body.\n * @param {DataManager} dm\n * @param {Query} query\n * @param {Object[]} hierarchyFilters?\n * @returns p\n */\n UrlAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n var queries = this.getQueryRequest(query);\n var singles = Query.filterQueryLists(query.queries, ['onSelect', 'onPage', 'onSkip', 'onTake', 'onRange']);\n var params = query.params;\n var url = dm.dataSource.url;\n var temp;\n var skip;\n var take = null;\n var options = this.options;\n var request = { sorts: [], groups: [], filters: [], searches: [], aggregates: [] };\n // calc Paging & Range\n if ('onPage' in singles) {\n temp = singles.onPage;\n skip = DataUtil.getValue(temp.pageIndex, query);\n take = DataUtil.getValue(temp.pageSize, query);\n skip = (skip - 1) * take;\n }\n else if ('onRange' in singles) {\n temp = singles.onRange;\n skip = temp.start;\n take = temp.end - temp.start;\n }\n // Sorting\n for (var i = 0; i < queries.sorts.length; i++) {\n temp = DataUtil.getValue(queries.sorts[i].e.fieldName, query);\n request.sorts.push(DataUtil.callAdaptorFunction(this, 'onEachSort', { name: temp, direction: queries.sorts[i].e.direction }, query));\n }\n // hierarchy\n if (hierarchyFilters) {\n temp = this.getFiltersFrom(hierarchyFilters, query);\n if (temp) {\n request.filters.push(DataUtil.callAdaptorFunction(this, 'onEachWhere', temp.toJson(), query));\n }\n }\n // Filters\n for (var i = 0; i < queries.filters.length; i++) {\n request.filters.push(DataUtil.callAdaptorFunction(this, 'onEachWhere', queries.filters[i].e.toJson(), query));\n var keys_1 = typeof request.filters[i] === 'object' ? Object.keys(request.filters[i]) : [];\n for (var _i = 0, keys_2 = keys_1; _i < keys_2.length; _i++) {\n var prop = keys_2[_i];\n if (DataUtil.isNull((request)[prop])) {\n delete request[prop];\n }\n }\n }\n // Searches\n for (var i = 0; i < queries.searches.length; i++) {\n temp = queries.searches[i].e;\n request.searches.push(DataUtil.callAdaptorFunction(this, 'onEachSearch', {\n fields: temp.fieldNames,\n operator: temp.operator,\n key: temp.searchKey,\n ignoreCase: temp.ignoreCase\n }, query));\n }\n // Grouping\n for (var i = 0; i < queries.groups.length; i++) {\n request.groups.push(DataUtil.getValue(queries.groups[i].e.fieldName, query));\n }\n // aggregates\n for (var i = 0; i < queries.aggregates.length; i++) {\n temp = queries.aggregates[i].e;\n request.aggregates.push({ type: temp.type, field: DataUtil.getValue(temp.field, query) });\n }\n var req = {};\n this.getRequestQuery(options, query, singles, request, req);\n // Params\n DataUtil.callAdaptorFunction(this, 'addParams', { dm: dm, query: query, params: params, reqParams: req });\n // cleanup\n var keys = Object.keys(req);\n for (var _a = 0, keys_3 = keys; _a < keys_3.length; _a++) {\n var prop = keys_3[_a];\n if (DataUtil.isNull(req[prop]) || req[prop] === '' || req[prop].length === 0) {\n delete req[prop];\n }\n }\n if (!(options.skip in req && options.take in req) && take !== null) {\n req[options.skip] = DataUtil.callAdaptorFunction(this, 'onSkip', skip, query);\n req[options.take] = DataUtil.callAdaptorFunction(this, 'onTake', take, query);\n }\n var p = this.pvt;\n this.pvt = {};\n if (this.options.requestType === 'json') {\n return {\n data: JSON.stringify(req),\n url: url,\n pvtData: p,\n type: 'POST',\n contentType: 'application/json; charset=utf-8'\n };\n }\n temp = this.convertToQueryString(req, query, dm);\n temp = (dm.dataSource.url.indexOf('?') !== -1 ? '&' : '/') + temp;\n return {\n type: 'GET', url: temp.length ? url.replace(/\\/*$/, temp) : url, pvtData: p\n };\n };\n UrlAdaptor.prototype.getRequestQuery = function (options, query, singles, request, request1) {\n var param = 'param';\n var req = request1;\n req[options.from] = query.fromTable;\n if (options.expand) {\n req[options.expand] = query.expands;\n }\n req[options.select] = 'onSelect' in singles ?\n DataUtil.callAdaptorFunction(this, 'onSelect', DataUtil.getValue(singles.onSelect.fieldNames, query), query) : '';\n req[options.count] = query.isCountRequired ? DataUtil.callAdaptorFunction(this, 'onCount', query.isCountRequired, query) : '';\n req[options.search] = request.searches.length ? DataUtil.callAdaptorFunction(this, 'onSearch', request.searches, query) : '';\n req[options.skip] = 'onSkip' in singles ?\n DataUtil.callAdaptorFunction(this, 'onSkip', DataUtil.getValue(singles.onSkip.nos, query), query) : '';\n req[options.take] = 'onTake' in singles ?\n DataUtil.callAdaptorFunction(this, 'onTake', DataUtil.getValue(singles.onTake.nos, query), query) : '';\n req[options.where] = request.filters.length || request.searches.length ?\n DataUtil.callAdaptorFunction(this, 'onWhere', request.filters, query) : '';\n req[options.sortBy] = request.sorts.length ? DataUtil.callAdaptorFunction(this, 'onSortBy', request.sorts, query) : '';\n req[options.group] = request.groups.length ? DataUtil.callAdaptorFunction(this, 'onGroup', request.groups, query) : '';\n req[options.aggregates] = request.aggregates.length ?\n DataUtil.callAdaptorFunction(this, 'onAggregates', request.aggregates, query) : '';\n req[param] = [];\n };\n /**\n * Convert the object from processQuery to string which can be added query string.\n * @param {Object} req\n * @param {Query} query\n * @param {DataManager} dm\n */\n UrlAdaptor.prototype.convertToQueryString = function (request, query, dm) {\n return '';\n // this needs to be overridden\n };\n /**\n * Return the data from the data manager processing.\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Object} request?\n * @param {CrudOptions} changes?\n */\n UrlAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var requests = request;\n var pvt = requests.pvtData || {};\n var groupDs = data.groupDs;\n if (xhr && xhr.getResponseHeader('Content-Type') &&\n xhr.getResponseHeader('Content-Type').indexOf('xml') !== -1) {\n return (query.isCountRequired ? { result: [], count: 0 } : []);\n }\n var d = JSON.parse(requests.data);\n if (d && d.action === 'batch' && data.addedRecords) {\n changes.addedRecords = data.addedRecords;\n return changes;\n }\n if (data.d) {\n data = data.d;\n }\n var args = {};\n if ('count' in data) {\n args.count = data.count;\n }\n args.result = data.result ? data.result : data;\n this.getAggregateResult(pvt, data, args, groupDs);\n return DataUtil.isNull(args.count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n };\n /**\n * Add the group query to the adaptor`s option.\n * @param {Object[]} e\n * @returns void\n */\n UrlAdaptor.prototype.onGroup = function (e) {\n this.pvt.groups = e;\n return e;\n };\n /**\n * Add the aggregate query to the adaptor`s option.\n * @param {Aggregates[]} e\n * @returns void\n */\n UrlAdaptor.prototype.onAggregates = function (e) {\n this.pvt.aggregates = e;\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {Object} e\n */\n UrlAdaptor.prototype.batchRequest = function (dm, changes, e) {\n var url;\n var key;\n return {\n type: 'POST',\n url: dm.dataSource.batchUrl || dm.dataSource.crudUrl || dm.dataSource.removeUrl || dm.dataSource.url,\n contentType: 'application/json; charset=utf-8',\n dataType: 'json',\n data: JSON.stringify({\n changed: changes.changedRecords,\n added: changes.addedRecords,\n deleted: changes.deletedRecords,\n action: 'batch',\n table: e[url],\n key: e[key]\n })\n };\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @returns void\n */\n UrlAdaptor.prototype.beforeSend = function (dm, request) {\n // need to extend this method\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName\n */\n UrlAdaptor.prototype.insert = function (dm, data, tableName) {\n return {\n url: dm.dataSource.insertUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify({\n value: data,\n table: tableName,\n action: 'insert'\n })\n };\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {number|string} value\n * @param {string} tableName\n */\n UrlAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n return {\n type: 'POST',\n url: dm.dataSource.removeUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify({\n key: value,\n keyColumn: keyField,\n table: tableName,\n action: 'remove'\n })\n };\n };\n /**\n * Prepare and return request body which is used to update record.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName\n */\n UrlAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n return {\n type: 'POST',\n url: dm.dataSource.updateUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify({\n value: value,\n action: 'update',\n keyColumn: keyField,\n key: value[keyField],\n table: tableName\n })\n };\n };\n /**\n * To generate the predicate based on the filtered query.\n * @param {Object[]|string[]|number[]} data\n * @param {Query} query\n * @hidden\n */\n UrlAdaptor.prototype.getFiltersFrom = function (data, query) {\n var key = query.fKey;\n var value;\n var prop = key;\n var pKey = query.key;\n var predicats = [];\n if (typeof data[0] !== 'object') {\n prop = null;\n }\n for (var i = 0; i < data.length; i++) {\n if (typeof data[0] === 'object') {\n value = DataUtil.getObject(pKey || prop, data[i]);\n }\n else {\n value = data[i];\n }\n predicats.push(new Predicate(key, 'equal', value));\n }\n return Predicate.or(predicats);\n };\n UrlAdaptor.prototype.getAggregateResult = function (pvt, data, args, groupDs) {\n var pData = data;\n if (data && data.result) {\n pData = data.result;\n }\n if (pvt && pvt.aggregates && pvt.aggregates.length) {\n var agg = pvt.aggregates;\n var fn = void 0;\n var aggregateData = pData;\n var res = {};\n if (data.aggregate) {\n aggregateData = data.aggregate;\n }\n for (var i = 0; i < agg.length; i++) {\n fn = DataUtil.aggregates[agg[i].type];\n if (fn) {\n res[agg[i].field + ' - ' + agg[i].type] = fn(aggregateData, agg[i].field);\n }\n }\n args.aggregates = res;\n }\n if (pvt && pvt.groups && pvt.groups.length) {\n var groups = pvt.groups;\n for (var i = 0; i < groups.length; i++) {\n var level = null;\n if (!isNullOrUndefined(groupDs)) {\n groupDs = DataUtil.group(groupDs, groups[i]);\n }\n pData = DataUtil.group(pData, groups[i], pvt.aggregates, level, groupDs);\n }\n args.result = pData;\n }\n return args;\n };\n UrlAdaptor.prototype.getQueryRequest = function (query) {\n var req = { sorts: [], groups: [], filters: [], searches: [], aggregates: [] };\n req.sorts = Query.filterQueries(query.queries, 'onSortBy');\n req.groups = Query.filterQueries(query.queries, 'onGroup');\n req.filters = Query.filterQueries(query.queries, 'onWhere');\n req.searches = Query.filterQueries(query.queries, 'onSearch');\n req.aggregates = Query.filterQueries(query.queries, 'onAggregates');\n return req;\n };\n UrlAdaptor.prototype.addParams = function (options) {\n var req = options.reqParams;\n if (options.params.length) {\n req.params = {};\n }\n for (var _i = 0, _a = options.params; _i < _a.length; _i++) {\n var tmp = _a[_i];\n if (req[tmp.key]) {\n throw new Error('Query() - addParams: Custom Param is conflicting other request arguments');\n }\n req[tmp.key] = tmp.value;\n if (tmp.fn) {\n req[tmp.key] = tmp.fn.call(options.query, tmp.key, options.query, options.dm);\n }\n req.params[tmp.key] = req[tmp.key];\n }\n };\n return UrlAdaptor;\n}(Adaptor));\nexport { UrlAdaptor };\n/**\n * OData Adaptor that is extended from URL Adaptor, is used for consuming data through OData Service.\n * @hidden\n */\nvar ODataAdaptor = /** @class */ (function (_super) {\n __extends(ODataAdaptor, _super);\n function ODataAdaptor() {\n var _this = _super.call(this) || this;\n // options replaced the default adaptor options\n _this.options = extend({}, _this.options, {\n requestType: 'get',\n accept: 'application/json;odata=light;q=1,application/json;odata=verbose;q=0.5',\n multipartAccept: 'multipart/mixed',\n sortBy: '$orderby',\n select: '$select',\n skip: '$skip',\n take: '$top',\n count: '$inlinecount',\n where: '$filter',\n expand: '$expand',\n batch: '$batch',\n changeSet: '--changeset_',\n batchPre: 'batch_',\n contentId: 'Content-Id: ',\n batchContent: 'Content-Type: multipart/mixed; boundary=',\n changeSetContent: 'Content-Type: application/http\\nContent-Transfer-Encoding: binary ',\n batchChangeSetContentType: 'Content-Type: application/json; charset=utf-8 '\n });\n _this.getModuleName = getValue('getModulename', _this);\n return _this;\n }\n /**\n * Generate request string based on the filter criteria from query.\n * @param {Predicate} pred\n * @param {boolean} requiresCast?\n */\n ODataAdaptor.prototype.onPredicate = function (predicate, query, requiresCast) {\n var returnValue = '';\n var operator;\n var guid;\n var val = predicate.value;\n var type = typeof val;\n var field = predicate.field ? ODataAdaptor.getField(predicate.field) : null;\n if (val instanceof Date) {\n val = 'datetime\\'' + DataUtil.parse.replacer(val) + '\\'';\n }\n if (type === 'string') {\n val = '\\'' + val + '\\'';\n if (requiresCast) {\n field = 'cast(' + field + ', \\'Edm.String\\')';\n }\n if (DataUtil.parse.isGuid(val)) {\n guid = 'guid';\n }\n if (predicate.ignoreCase) {\n if (!guid) {\n field = 'tolower(' + field + ')';\n }\n val = val.toLowerCase();\n }\n }\n operator = DataUtil.odBiOperator[predicate.operator];\n if (operator) {\n returnValue += field;\n returnValue += operator;\n if (guid) {\n returnValue += guid;\n }\n return returnValue + val;\n }\n if (!isNullOrUndefined(this.getModuleName)) {\n if (this.getModuleName() === 'ODataV4Adaptor') {\n operator = DataUtil.odv4UniOperator[predicate.operator];\n }\n }\n else {\n operator = DataUtil.odUniOperator[predicate.operator];\n }\n if (operator === 'substringof') {\n var temp = val;\n val = field;\n field = temp;\n }\n returnValue += operator + '(';\n returnValue += field + ',';\n if (guid) {\n returnValue += guid;\n }\n returnValue += val + ')';\n return returnValue;\n };\n /**\n * Generate request string based on the multiple filter criteria from query.\n * @param {Predicate} pred\n * @param {boolean} requiresCast?\n */\n ODataAdaptor.prototype.onComplexPredicate = function (predicate, query, requiresCast) {\n var res = [];\n for (var i = 0; i < predicate.predicates.length; i++) {\n res.push('(' + this.onEachWhere(predicate.predicates[i], query, requiresCast) + ')');\n }\n return res.join(' ' + predicate.condition + ' ');\n };\n /**\n * Generate query string based on the multiple filter criteria from query.\n * @param {Predicate} filter\n * @param {boolean} requiresCast?\n */\n ODataAdaptor.prototype.onEachWhere = function (filter, query, requiresCast) {\n return filter.isComplex ? this.onComplexPredicate(filter, query, requiresCast) : this.onPredicate(filter, query, requiresCast);\n };\n /**\n * Generate query string based on the multiple filter criteria from query.\n * @param {string[]} filters\n */\n ODataAdaptor.prototype.onWhere = function (filters) {\n if (this.pvt.search) {\n filters.push(this.onEachWhere(this.pvt.search, null, true));\n }\n return filters.join(' and ');\n };\n /**\n * Generate query string based on the multiple search criteria from query.\n * @param {{fields:string[]} e\n * @param {string} operator\n * @param {string} key\n * @param {boolean}} ignoreCase\n */\n ODataAdaptor.prototype.onEachSearch = function (e) {\n if (e.fields && e.fields.length === 0) {\n DataUtil.throwError('Query() - Search : oData search requires list of field names to search');\n }\n var filter = this.pvt.search || [];\n for (var i = 0; i < e.fields.length; i++) {\n filter.push(new Predicate(e.fields[i], e.operator, e.key, e.ignoreCase));\n }\n this.pvt.search = filter;\n };\n /**\n * Generate query string based on the search criteria from query.\n * @param {Object} e\n */\n ODataAdaptor.prototype.onSearch = function (e) {\n this.pvt.search = Predicate.or(this.pvt.search);\n return '';\n };\n /**\n * Generate query string based on multiple sort criteria from query.\n * @param {QueryOptions} e\n */\n ODataAdaptor.prototype.onEachSort = function (e) {\n var res = [];\n if (e.name instanceof Array) {\n for (var i = 0; i < e.name.length; i++) {\n res.push(ODataAdaptor.getField(e.name[i]) + (e.direction === 'descending' ? ' desc' : ''));\n }\n }\n else {\n res.push(ODataAdaptor.getField(e.name) + (e.direction === 'descending' ? ' desc' : ''));\n }\n return res.join(',');\n };\n /**\n * Returns sort query string.\n * @param {string[]} e\n */\n ODataAdaptor.prototype.onSortBy = function (e) {\n return e.reverse().join(',');\n };\n /**\n * Adds the group query to the adaptor option.\n * @param {Object[]} e\n * @returns string\n */\n ODataAdaptor.prototype.onGroup = function (e) {\n this.pvt.groups = e;\n return [];\n };\n /**\n * Returns the select query string.\n * @param {string[]} e\n */\n ODataAdaptor.prototype.onSelect = function (e) {\n for (var i = 0; i < e.length; i++) {\n e[i] = ODataAdaptor.getField(e[i]);\n }\n return e.join(',');\n };\n /**\n * Add the aggregate query to the adaptor option.\n * @param {Object[]} e\n * @returns string\n */\n ODataAdaptor.prototype.onAggregates = function (e) {\n this.pvt.aggregates = e;\n return '';\n };\n /**\n * Returns the query string which requests total count from the data source.\n * @param {boolean} e\n * @returns string\n */\n ODataAdaptor.prototype.onCount = function (e) {\n return e === true ? 'allpages' : '';\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings?\n */\n ODataAdaptor.prototype.beforeSend = function (dm, request, settings) {\n if (DataUtil.endsWith(settings.url, this.options.batch) && settings.type.toLowerCase() === 'post') {\n request.setRequestHeader('Accept', this.options.multipartAccept);\n request.setRequestHeader('DataServiceVersion', '2.0');\n request.overrideMimeType('text/plain; charset=x-user-defined');\n }\n else {\n request.setRequestHeader('Accept', this.options.accept);\n }\n request.setRequestHeader('DataServiceVersion', '2.0');\n request.setRequestHeader('MaxDataServiceVersion', '2.0');\n };\n /**\n * Returns the data from the query processing.\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n * @returns aggregateResult\n */\n ODataAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var pvtData = 'pvtData';\n if (!isNullOrUndefined(data.d)) {\n var dataCopy = ((query && query.isCountRequired) ? data.d.results : data.d);\n var metaData = '__metadata';\n if (!isNullOrUndefined(dataCopy)) {\n for (var i = 0; i < dataCopy.length; i++) {\n if (!isNullOrUndefined(dataCopy[i][metaData])) {\n delete dataCopy[i][metaData];\n }\n }\n }\n }\n var pvt = request && request[pvtData];\n var emptyAndBatch = this.processBatchResponse(data, query, xhr, request, changes);\n if (emptyAndBatch) {\n return emptyAndBatch;\n }\n var versionCheck = xhr && request.getResponseHeader('DataServiceVersion');\n var count = null;\n var version = (versionCheck && parseInt(versionCheck, 10)) || 2;\n if (query && query.isCountRequired) {\n var oDataCount = '__count';\n if (data[oDataCount] || data['odata.count']) {\n count = data[oDataCount] || data['odata.count'];\n }\n if (data.d) {\n data = data.d;\n }\n if (data[oDataCount] || data['odata.count']) {\n count = data[oDataCount] || data['odata.count'];\n }\n }\n if (version === 3 && data.value) {\n data = data.value;\n }\n if (data.d) {\n data = data.d;\n }\n if (version < 3 && data.results) {\n data = data.results;\n }\n var args = {};\n args.count = count;\n args.result = data;\n this.getAggregateResult(pvt, data, args);\n return DataUtil.isNull(count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n };\n /**\n * Converts the request object to query string.\n * @param {Object} req\n * @param {Query} query\n * @param {DataManager} dm\n * @returns tableName\n */\n ODataAdaptor.prototype.convertToQueryString = function (request, query, dm) {\n var res = [];\n var table = 'table';\n var tableName = request[table] || '';\n var format = '$format';\n delete request[table];\n if (dm.dataSource.requiresFormat) {\n request[format] = 'json';\n }\n var keys = Object.keys(request);\n for (var _i = 0, keys_4 = keys; _i < keys_4.length; _i++) {\n var prop = keys_4[_i];\n res.push(prop + '=' + request[prop]);\n }\n res = res.join('&');\n if (dm.dataSource.url && dm.dataSource.url.indexOf('?') !== -1 && !tableName) {\n return res;\n }\n return res.length ? tableName + '?' + res : tableName || '';\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName?\n */\n ODataAdaptor.prototype.insert = function (dm, data, tableName) {\n return {\n url: dm.dataSource.url.replace(/\\/*$/, tableName ? '/' + tableName : ''),\n data: JSON.stringify(data)\n };\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {number} value\n * @param {string} tableName?\n */\n ODataAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n return {\n type: 'DELETE',\n url: dm.dataSource.url.replace(/\\/*$/, tableName ? '/' + tableName : '') + '(' + value + ')'\n };\n };\n /**\n * Updates existing record and saves the changes to the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @returns this\n */\n ODataAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n return {\n type: 'PUT',\n url: dm.dataSource.url.replace(/\\/*$/, tableName ? '/' + tableName : '') + '(' + value[keyField] + ')',\n data: JSON.stringify(value),\n accept: this.options.accept\n };\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n * @returns {Object}\n */\n ODataAdaptor.prototype.batchRequest = function (dm, changes, e) {\n var initialGuid = e.guid = DataUtil.getGuid(this.options.batchPre);\n var url = dm.dataSource.url.replace(/\\/*$/, '/' + this.options.batch);\n var args = {\n url: e.url,\n key: e.key,\n cid: 1,\n cSet: DataUtil.getGuid(this.options.changeSet)\n };\n var req = '--' + initialGuid + '\\n';\n req += 'Content-Type: multipart/mixed; boundary=' + args.cSet.replace('--', '') + '\\n';\n this.pvt.changeSet = 0;\n req += this.generateInsertRequest(changes.addedRecords, args);\n req += this.generateUpdateRequest(changes.changedRecords, args);\n req += this.generateDeleteRequest(changes.deletedRecords, args);\n req += args.cSet + '--\\n';\n req += '--' + initialGuid + '--';\n return {\n type: 'POST',\n url: url,\n dataType: 'json',\n contentType: 'multipart/mixed; charset=UTF-8;boundary=' + initialGuid,\n data: req\n };\n };\n /**\n * Generate the string content from the removed records.\n * The result will be send during batch update.\n * @param {Object[]} arr\n * @param {RemoteArgs} e\n * @returns this\n */\n ODataAdaptor.prototype.generateDeleteRequest = function (arr, e) {\n if (!arr) {\n return '';\n }\n var req = '';\n var stat = {\n 'method': 'DELETE ',\n 'url': function (data, i, key) { return '(' + data[i][key] + ')'; },\n 'data': function (data, i) { return ''; }\n };\n req = this.generateBodyContent(arr, e, stat);\n return req + '\\n';\n };\n /**\n * Generate the string content from the inserted records.\n * The result will be send during batch update.\n * @param {Object[]} arr\n * @param {RemoteArgs} e\n */\n ODataAdaptor.prototype.generateInsertRequest = function (arr, e) {\n if (!arr) {\n return '';\n }\n var req = '';\n var stat = {\n 'method': 'POST ',\n 'url': function (data, i, key) { return ''; },\n 'data': function (data, i) { return JSON.stringify(data[i]) + '\\n\\n'; }\n };\n req = this.generateBodyContent(arr, e, stat);\n return req;\n };\n /**\n * Generate the string content from the updated records.\n * The result will be send during batch update.\n * @param {Object[]} arr\n * @param {RemoteArgs} e\n */\n ODataAdaptor.prototype.generateUpdateRequest = function (arr, e) {\n if (!arr) {\n return '';\n }\n var req = '';\n var stat = {\n 'method': 'PUT ',\n 'url': function (data, i, key) { return '(' + data[i][key] + ')'; },\n 'data': function (data, i) { return JSON.stringify(data[i]) + '\\n\\n'; }\n };\n req = this.generateBodyContent(arr, e, stat);\n return req;\n };\n ODataAdaptor.getField = function (prop) {\n return prop.replace(/\\./g, '/');\n };\n ODataAdaptor.prototype.generateBodyContent = function (arr, e, stat) {\n var req = '';\n for (var i = 0; i < arr.length; i++) {\n req += '\\n' + e.cSet + '\\n';\n req += this.options.changeSetContent + '\\n\\n';\n req += stat.method;\n req += e.url + stat.url(arr, i, e.key) + ' HTTP/1.1\\n';\n req += 'Accept: ' + this.options.accept + '\\n';\n req += 'Content-Id: ' + this.pvt.changeSet++ + '\\n';\n req += this.options.batchChangeSetContentType + '\\n\\n';\n req += stat.data(arr, i);\n }\n return req;\n };\n ODataAdaptor.prototype.processBatchResponse = function (data, query, xhr, request, changes) {\n if (xhr && xhr.getResponseHeader('Content-Type') && xhr.getResponseHeader('Content-Type').indexOf('xml') !== -1) {\n return (query.isCountRequired ? { result: [], count: 0 } : []);\n }\n if (request && this.options.batch && DataUtil.endsWith(request.url, this.options.batch) && request.type.toLowerCase() === 'post') {\n var guid = xhr.getResponseHeader('Content-Type');\n var cIdx = void 0;\n var jsonObj = void 0;\n var d = data + '';\n guid = guid.substring(guid.indexOf('=batchresponse') + 1);\n d = d.split(guid);\n if (d.length < 2) {\n return {};\n }\n d = d[1];\n var exVal = /(?:\\bContent-Type.+boundary=)(changesetresponse.+)/i.exec(d);\n if (exVal) {\n d.replace(exVal[0], '');\n }\n var changeGuid = exVal ? exVal[1] : '';\n d = d.split(changeGuid);\n for (var i = d.length; i > -1; i--) {\n if (!/\\bContent-ID:/i.test(d[i]) || !/\\bHTTP.+201/.test(d[i])) {\n continue;\n }\n cIdx = parseInt(/\\bContent-ID: (\\d+)/i.exec(d[i])[1], 10);\n if (changes.addedRecords[cIdx]) {\n jsonObj = DataUtil.parse.parseJson(/^\\{.+\\}/m.exec(d[i])[0]);\n extend({}, changes.addedRecords[cIdx], this.processResponse(jsonObj));\n }\n }\n return changes;\n }\n return null;\n };\n return ODataAdaptor;\n}(UrlAdaptor));\nexport { ODataAdaptor };\n/**\n * The OData v4 is an improved version of OData protocols.\n * The DataManager uses the ODataV4Adaptor to consume OData v4 services.\n * @hidden\n */\nvar ODataV4Adaptor = /** @class */ (function (_super) {\n __extends(ODataV4Adaptor, _super);\n function ODataV4Adaptor() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n // options replaced the default adaptor options\n _this.options = extend({}, _this.options, {\n requestType: 'get',\n accept: 'application/json, text/javascript, */*; q=0.01',\n multipartAccept: 'multipart/mixed',\n sortBy: '$orderby',\n select: '$select',\n skip: '$skip',\n take: '$top',\n count: '$count',\n search: '$search',\n where: '$filter',\n expand: '$expand',\n batch: '$batch',\n changeSet: '--changeset_',\n batchPre: 'batch_',\n contentId: 'Content-Id: ',\n batchContent: 'Content-Type: multipart/mixed; boundary=',\n changeSetContent: 'Content-Type: application/http\\nContent-Transfer-Encoding: binary ',\n batchChangeSetContentType: 'Content-Type: application/json; charset=utf-8 '\n });\n return _this;\n }\n /**\n * @hidden\n */\n ODataV4Adaptor.prototype.getModulename = function () {\n return 'ODataV4Adaptor';\n };\n ;\n /**\n * Returns the query string which requests total count from the data source.\n * @param {boolean} e\n * @returns string\n */\n ODataV4Adaptor.prototype.onCount = function (e) {\n return e === true ? 'true' : '';\n };\n /**\n * Generate request string based on the filter criteria from query.\n * @param {Predicate} pred\n * @param {boolean} requiresCast?\n */\n ODataV4Adaptor.prototype.onPredicate = function (predicate, query, requiresCast) {\n var returnValue = '';\n var val = predicate.value;\n var isDate = val instanceof Date;\n returnValue = _super.prototype.onPredicate.call(this, predicate, query, requiresCast);\n if (isDate) {\n returnValue = returnValue.replace(/datetime'(.*)'$/, '$1');\n }\n return returnValue;\n };\n /**\n * Generate query string based on the multiple search criteria from query.\n * @param {{fields:string[]} e\n * @param {string} operator\n * @param {string} key\n * @param {boolean}} ignoreCase\n */\n ODataV4Adaptor.prototype.onEachSearch = function (e) {\n var search = this.pvt.searches || [];\n search.push(e.key);\n this.pvt.searches = search;\n };\n /**\n * Generate query string based on the search criteria from query.\n * @param {Object} e\n */\n ODataV4Adaptor.prototype.onSearch = function (e) {\n return this.pvt.searches.join(' OR ');\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings\n * @returns void\n */\n ODataV4Adaptor.prototype.beforeSend = function (dm, request, settings) {\n request.setRequestHeader('Accept', this.options.accept);\n };\n /**\n * Returns the data from the query processing.\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n * @returns aggregateResult\n */\n ODataV4Adaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var pvtData = 'pvtData';\n var pvt = request && request[pvtData];\n var emptyAndBatch = _super.prototype.processBatchResponse.call(this, data, query, xhr, request, changes);\n if (emptyAndBatch) {\n return emptyAndBatch;\n }\n var count = null;\n var dataCount = '@odata.count';\n if (query && query.isCountRequired) {\n if (dataCount in data) {\n count = data[dataCount];\n }\n }\n data = data.value;\n var args = {};\n args.count = count;\n args.result = data;\n this.getAggregateResult(pvt, data, args);\n return DataUtil.isNull(count) ? args.result : { result: args.result, count: count, aggregates: args.aggregates };\n };\n return ODataV4Adaptor;\n}(ODataAdaptor));\nexport { ODataV4Adaptor };\n/**\n * The Web API is a programmatic interface to define the request and response messages system that is mostly exposed in JSON or XML.\n * The DataManager uses the WebApiAdaptor to consume Web API.\n * Since this adaptor is targeted to interact with Web API created using OData endpoint, it is extended from ODataAdaptor\n * @hidden\n */\nvar WebApiAdaptor = /** @class */ (function (_super) {\n __extends(WebApiAdaptor, _super);\n function WebApiAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName?\n */\n WebApiAdaptor.prototype.insert = function (dm, data, tableName) {\n return {\n type: 'POST',\n url: dm.dataSource.url,\n data: JSON.stringify(data)\n };\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {number} value\n * @param {string} tableName?\n */\n WebApiAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n return {\n type: 'DELETE',\n url: dm.dataSource.url + '/' + value,\n data: JSON.stringify(value)\n };\n };\n /**\n * Prepare and return request body which is used to update record.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n */\n WebApiAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n return {\n type: 'PUT',\n url: dm.dataSource.url,\n data: JSON.stringify(value)\n };\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings\n * @returns void\n */\n WebApiAdaptor.prototype.beforeSend = function (dm, request, settings) {\n request.setRequestHeader('Accept', 'application/json, text/javascript, */*; q=0.01');\n };\n /**\n * Returns the data from the query processing.\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n * @returns aggregateResult\n */\n WebApiAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var pvtData = 'pvtData';\n var pvt = request && request[pvtData];\n var count = null;\n var args = {};\n if (request && request.type.toLowerCase() !== 'post') {\n var versionCheck = xhr && request.getResponseHeader('DataServiceVersion');\n var version = (versionCheck && parseInt(versionCheck, 10)) || 2;\n if (query && query.isCountRequired) {\n if (!DataUtil.isNull(data.Count)) {\n count = data.Count;\n }\n }\n if (version < 3 && data.Items) {\n data = data.Items;\n }\n args.count = count;\n args.result = data;\n this.getAggregateResult(pvt, data, args);\n }\n args.result = args.result || data;\n return DataUtil.isNull(count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n };\n return WebApiAdaptor;\n}(ODataAdaptor));\nexport { WebApiAdaptor };\n/**\n * WebMethodAdaptor can be used by DataManager to interact with web method.\n * @hidden\n */\nvar WebMethodAdaptor = /** @class */ (function (_super) {\n __extends(WebMethodAdaptor, _super);\n function WebMethodAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Prepare the request body based on the query.\n * The query information can be accessed at the WebMethod using variable named `value`.\n * @param {DataManager} dm\n * @param {Query} query\n * @param {Object[]} hierarchyFilters?\n * @returns application\n */\n WebMethodAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n var obj = new UrlAdaptor().processQuery(dm, query, hierarchyFilters);\n var getData = 'data';\n var data = DataUtil.parse.parseJson(obj[getData]);\n var result = {};\n var value = 'value';\n if (data.param) {\n for (var i = 0; i < data.param.length; i++) {\n var param = data.param[i];\n var key = Object.keys(param)[0];\n result[key] = param[key];\n }\n }\n result[value] = data;\n var pvtData = 'pvtData';\n var url = 'url';\n return {\n data: JSON.stringify(result),\n url: obj[url],\n pvtData: obj[pvtData],\n type: 'POST',\n contentType: 'application/json; charset=utf-8'\n };\n };\n return WebMethodAdaptor;\n}(UrlAdaptor));\nexport { WebMethodAdaptor };\n/**\n * RemoteSaveAdaptor, extended from JsonAdaptor and it is used for binding local data and performs all DataManager queries in client-side.\n * It interacts with server-side only for CRUD operations.\n * @hidden\n */\nvar RemoteSaveAdaptor = /** @class */ (function (_super) {\n __extends(RemoteSaveAdaptor, _super);\n /**\n * @hidden\n */\n function RemoteSaveAdaptor() {\n var _this = _super.call(this) || this;\n setValue('beforeSend', UrlAdaptor.prototype.beforeSend, _this);\n return _this;\n }\n RemoteSaveAdaptor.prototype.insert = function (dm, data, tableName) {\n _super.prototype.insert.call(this, dm, data, null, null, 0);\n return {\n url: dm.dataSource.insertUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify({\n value: data,\n table: tableName,\n action: 'insert'\n })\n };\n };\n RemoteSaveAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n _super.prototype.remove.call(this, dm, keyField, value);\n return {\n type: 'POST',\n url: dm.dataSource.removeUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify({\n key: value,\n keyColumn: keyField,\n table: tableName,\n action: 'remove'\n })\n };\n };\n RemoteSaveAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n _super.prototype.update.call(this, dm, keyField, value);\n return {\n type: 'POST',\n url: dm.dataSource.updateUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify({\n value: value,\n action: 'update',\n keyColumn: keyField,\n key: value[keyField],\n table: tableName\n })\n };\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * Also perform the changes in the locally cached data to sync with the remote data.\n * The result is used by the batch request.\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n */\n RemoteSaveAdaptor.prototype.batchRequest = function (dm, changes, e) {\n var i;\n for (i = 0; i < changes.addedRecords.length; i++) {\n JsonAdaptor.prototype.insert(dm, changes.addedRecords[i]);\n }\n for (i = 0; i < changes.changedRecords.length; i++) {\n JsonAdaptor.prototype.update(dm, e.key, changes.changedRecords[i]);\n }\n for (i = 0; i < changes.deletedRecords.length; i++) {\n JsonAdaptor.prototype.remove(dm, e.key, changes.deletedRecords[i]);\n }\n return {\n type: 'POST',\n url: dm.dataSource.batchUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n contentType: 'application/json; charset=utf-8',\n dataType: 'json',\n data: JSON.stringify({\n changed: changes.changedRecords,\n added: changes.addedRecords,\n deleted: changes.deletedRecords,\n action: 'batch',\n table: e.url,\n key: e.key\n })\n };\n };\n return RemoteSaveAdaptor;\n}(JsonAdaptor));\nexport { RemoteSaveAdaptor };\n/**\n * Cache Adaptor is used to cache the data of the visited pages. It prevents new requests for the previously visited pages.\n * You can configure cache page size and duration of caching by using cachingPageSize and timeTillExpiration properties of the DataManager\n * @hidden\n */\nvar CacheAdaptor = /** @class */ (function (_super) {\n __extends(CacheAdaptor, _super);\n /**\n * Constructor for CacheAdaptor class.\n * @param {CacheAdaptor} adaptor?\n * @param {number} timeStamp?\n * @param {number} pageSize?\n * @hidden\n */\n function CacheAdaptor(adaptor, timeStamp, pageSize) {\n var _this = _super.call(this) || this;\n _this.isCrudAction = false;\n _this.isInsertAction = false;\n if (!isNullOrUndefined(adaptor)) {\n _this.cacheAdaptor = adaptor;\n }\n _this.pageSize = pageSize;\n _this.guidId = DataUtil.getGuid('cacheAdaptor');\n var obj = { keys: [], results: [] };\n window.localStorage.setItem(_this.guidId, JSON.stringify(obj));\n var guid = _this.guidId;\n if (!isNullOrUndefined(timeStamp)) {\n setInterval(function () {\n var data;\n data = DataUtil.parse.parseJson(window.localStorage.getItem(guid));\n var forDel = [];\n for (var i = 0; i < data.results.length; i++) {\n var currentTime = +new Date();\n var requestTime = +new Date(data.results[i].timeStamp);\n data.results[i].timeStamp = currentTime - requestTime;\n if (currentTime - requestTime > timeStamp) {\n forDel.push(i);\n }\n }\n for (var i = 0; i < forDel.length; i++) {\n data.results.splice(forDel[i], 1);\n data.keys.splice(forDel[i], 1);\n }\n window.localStorage.removeItem(guid);\n window.localStorage.setItem(guid, JSON.stringify(data));\n }, timeStamp);\n }\n return _this;\n }\n /**\n * It will generate the key based on the URL when we send a request to server.\n * @param {string} url\n * @param {Query} query?\n * @hidden\n */\n CacheAdaptor.prototype.generateKey = function (url, query) {\n var queries = this.getQueryRequest(query);\n var singles = Query.filterQueryLists(query.queries, ['onSelect', 'onPage', 'onSkip', 'onTake', 'onRange']);\n var key = url;\n var page = 'onPage';\n if (page in singles) {\n key += singles[page].pageIndex;\n }\n queries.sorts.forEach(function (obj) {\n key += obj.e.direction + obj.e.fieldName;\n });\n queries.groups.forEach(function (obj) {\n key += obj.e.fieldName;\n });\n queries.searches.forEach(function (obj) {\n key += obj.e.searchKey;\n });\n for (var filter = 0; filter < queries.filters.length; filter++) {\n var currentFilter = queries.filters[filter];\n if (currentFilter.e.isComplex) {\n var newQuery = query.clone();\n newQuery.queries = [];\n for (var i = 0; i < currentFilter.e.predicates.length; i++) {\n newQuery.queries.push({ fn: 'onWhere', e: currentFilter.e.predicates[i], filter: query.queries.filter });\n }\n key += currentFilter.e.condition + this.generateKey(url, newQuery);\n }\n else {\n key += currentFilter.e.field + currentFilter.e.operator + currentFilter.e.value;\n }\n }\n return key;\n };\n /**\n * Process the query to generate request body.\n * If the data is already cached, it will return the cached data.\n * @param {DataManager} dm\n * @param {Query} query?\n * @param {Object[]} hierarchyFilters?\n */\n CacheAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n var key = this.generateKey(dm.dataSource.url, query);\n var cachedItems;\n cachedItems = DataUtil.parse.parseJson(window.localStorage.getItem(this.guidId));\n var data = cachedItems ? cachedItems.results[cachedItems.keys.indexOf(key)] : null;\n if (data != null && !this.isCrudAction && !this.isInsertAction) {\n return data;\n }\n this.isCrudAction = null;\n this.isInsertAction = null;\n return this.cacheAdaptor.processQuery.apply(this.cacheAdaptor, [].slice.call(arguments, 0));\n };\n /**\n * Returns the data from the query processing.\n * It will also cache the data for later usage.\n * @param {DataResult} data\n * @param {DataManager} ds?\n * @param {Query} query?\n * @param {XMLHttpRequest} xhr?\n * @param {Ajax} request?\n * @param {CrudOptions} changes?\n */\n CacheAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n if (this.isInsertAction || (request && this.cacheAdaptor.options.batch &&\n DataUtil.endsWith(request.url, this.cacheAdaptor.options.batch) && request.type.toLowerCase() === 'post')) {\n return this.cacheAdaptor.processResponse(data, ds, query, xhr, request, changes);\n }\n data = this.cacheAdaptor.processResponse.apply(this.cacheAdaptor, [].slice.call(arguments, 0));\n var key = query ? this.generateKey(ds.dataSource.url, query) : ds.dataSource.url;\n var obj = {};\n obj = DataUtil.parse.parseJson(window.localStorage.getItem(this.guidId));\n var index = obj.keys.indexOf(key);\n if (index !== -1) {\n obj.results.splice(index, 1);\n obj.keys.splice(index, 1);\n }\n obj.results[obj.keys.push(key) - 1] = { keys: key, result: data.result, timeStamp: new Date(), count: data.count };\n while (obj.results.length > this.pageSize) {\n obj.results.splice(0, 1);\n obj.keys.splice(0, 1);\n }\n window.localStorage.setItem(this.guidId, JSON.stringify(obj));\n return data;\n };\n /**\n * Method will trigger before send the request to server side. Used to set the custom header or modify the request options.\n * @param {DataManager} dm\n * @param {XMLHttpRequest} request\n * @param {Ajax} settings?\n */\n CacheAdaptor.prototype.beforeSend = function (dm, request, settings) {\n if (DataUtil.endsWith(settings.url, this.cacheAdaptor.options.batch) && settings.type.toLowerCase() === 'post') {\n request.setRequestHeader('Accept', this.cacheAdaptor.options.multipartAccept);\n }\n if (!dm.dataSource.crossDomain) {\n request.setRequestHeader('Accept', this.cacheAdaptor.options.accept);\n }\n };\n /**\n * Updates existing record and saves the changes to the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName\n */\n CacheAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n this.isCrudAction = true;\n return this.cacheAdaptor.update(dm, keyField, value, tableName);\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName?\n */\n CacheAdaptor.prototype.insert = function (dm, data, tableName) {\n this.isInsertAction = true;\n return this.cacheAdaptor.insert(dm, data, tableName);\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n */\n CacheAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n this.isCrudAction = true;\n return this.cacheAdaptor.remove(dm, keyField, value, tableName);\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n */\n CacheAdaptor.prototype.batchRequest = function (dm, changes, e) {\n return this.cacheAdaptor.batchRequest(dm, changes, e);\n };\n return CacheAdaptor;\n}(UrlAdaptor));\nexport { CacheAdaptor };\n","import { Ajax } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataUtil } from './util';\nimport { Query } from './query';\nimport { ODataAdaptor, JsonAdaptor, CacheAdaptor, RemoteSaveAdaptor } from './adaptors';\n/**\n * DataManager is used to manage and manipulate relational data.\n */\nvar DataManager = /** @class */ (function () {\n /**\n * Constructor for DataManager class\n * @param {DataOptions|JSON[]} dataSource?\n * @param {Query} query?\n * @param {AdaptorOptions|string} adaptor?\n * @hidden\n */\n function DataManager(dataSource, query, adaptor) {\n var _this = this;\n /** @hidden */\n this.dateParse = true;\n this.requests = [];\n if (!dataSource && !this.dataSource) {\n dataSource = [];\n }\n adaptor = adaptor || dataSource.adaptor;\n var data;\n if (dataSource instanceof Array) {\n data = {\n json: dataSource,\n offline: true\n };\n }\n else if (typeof dataSource === 'object') {\n if (!dataSource.json) {\n dataSource.json = [];\n }\n data = {\n url: dataSource.url,\n insertUrl: dataSource.insertUrl,\n removeUrl: dataSource.removeUrl,\n updateUrl: dataSource.updateUrl,\n crudUrl: dataSource.crudUrl,\n batchUrl: dataSource.batchUrl,\n json: dataSource.json,\n headers: dataSource.headers,\n accept: dataSource.accept,\n data: dataSource.data,\n timeTillExpiration: dataSource.timeTillExpiration,\n cachingPageSize: dataSource.cachingPageSize,\n enableCaching: dataSource.enableCaching,\n requestType: dataSource.requestType,\n key: dataSource.key,\n crossDomain: dataSource.crossDomain,\n jsonp: dataSource.jsonp,\n dataType: dataSource.dataType,\n offline: dataSource.offline !== undefined ? dataSource.offline\n : dataSource.adaptor instanceof RemoteSaveAdaptor ? false : dataSource.url ? false : true,\n requiresFormat: dataSource.requiresFormat\n };\n }\n else {\n DataUtil.throwError('DataManager: Invalid arguments');\n }\n if (data.requiresFormat === undefined && !DataUtil.isCors()) {\n data.requiresFormat = isNullOrUndefined(data.crossDomain) ? true : data.crossDomain;\n }\n if (data.dataType === undefined) {\n data.dataType = 'json';\n }\n this.dataSource = data;\n this.defaultQuery = query;\n if (data.url && data.offline && !data.json.length) {\n this.isDataAvailable = false;\n this.adaptor = adaptor || new ODataAdaptor();\n this.dataSource.offline = false;\n this.ready = this.executeQuery(query || new Query());\n this.ready.then(function (e) {\n _this.dataSource.offline = true;\n _this.isDataAvailable = true;\n data.json = e.result;\n _this.adaptor = new JsonAdaptor();\n });\n }\n else {\n this.adaptor = data.offline ? new JsonAdaptor() : new ODataAdaptor();\n }\n if (!data.jsonp && this.adaptor instanceof ODataAdaptor) {\n data.jsonp = 'callback';\n }\n this.adaptor = adaptor || this.adaptor;\n if (data.enableCaching) {\n this.adaptor = new CacheAdaptor(this.adaptor, data.timeTillExpiration, data.cachingPageSize);\n }\n return this;\n }\n /**\n * Overrides DataManager's default query with given query.\n * @param {Query} query - Defines the new default query.\n */\n DataManager.prototype.setDefaultQuery = function (query) {\n this.defaultQuery = query;\n return this;\n };\n /**\n * Executes the given query with local data source.\n * @param {Query} query - Defines the query to retrieve data.\n */\n DataManager.prototype.executeLocal = function (query) {\n if (!this.defaultQuery && !(query instanceof Query)) {\n DataUtil.throwError('DataManager - executeLocal() : A query is required to execute');\n }\n if (!this.dataSource.json) {\n DataUtil.throwError('DataManager - executeLocal() : Json data is required to execute');\n }\n query = query || this.defaultQuery;\n var result = this.adaptor.processQuery(this, query);\n if (query.subQuery) {\n var from = query.subQuery.fromTable;\n var lookup = query.subQuery.lookups;\n var res = query.isCountRequired ? result.result :\n result;\n if (lookup && lookup instanceof Array) {\n DataUtil.buildHierarchy(query.subQuery.fKey, from, res, lookup, query.subQuery.key);\n }\n for (var j = 0; j < res.length; j++) {\n if (res[j][from] instanceof Array) {\n res[j] = extend({}, {}, res[j]);\n res[j][from] = this.adaptor.processResponse(query.subQuery.using(new DataManager(res[j][from].slice(0))).executeLocal(), this, query);\n }\n }\n }\n return this.adaptor.processResponse(result, this, query);\n };\n /**\n * Executes the given query with either local or remote data source.\n * It will be executed as asynchronously and returns Promise object which will be resolved or rejected after action completed.\n * @param {Query|Function} query - Defines the query to retrieve data.\n * @param {Function} done - Defines the callback function and triggers when the Promise is resolved.\n * @param {Function} fail - Defines the callback function and triggers when the Promise is rejected.\n * @param {Function} always - Defines the callback function and triggers when the Promise is resolved or rejected.\n */\n DataManager.prototype.executeQuery = function (query, done, fail, always) {\n var _this = this;\n if (typeof query === 'function') {\n always = fail;\n fail = done;\n done = query;\n query = null;\n }\n if (!query) {\n query = this.defaultQuery;\n }\n if (!(query instanceof Query)) {\n DataUtil.throwError('DataManager - executeQuery() : A query is required to execute');\n }\n var deffered = new Deferred();\n var args = { query: query };\n if (!this.dataSource.offline && this.dataSource.url !== undefined) {\n var result = this.adaptor.processQuery(this, query);\n this.makeRequest(result, deffered, args, query);\n }\n else {\n DataManager.nextTick(function () {\n var res = _this.executeLocal(query);\n args = DataManager.getDeferedArgs(query, res, args);\n deffered.resolve(args);\n });\n }\n return deffered.promise;\n };\n DataManager.getDeferedArgs = function (query, result, args) {\n if (query.isCountRequired) {\n args.result = result.result;\n args.count = result.count;\n args.aggregates = result.aggregates;\n }\n else {\n args.result = result;\n }\n return args;\n };\n DataManager.nextTick = function (fn) {\n (window.setImmediate || window.setTimeout)(fn, 0);\n };\n DataManager.prototype.extendRequest = function (url, fnSuccess, fnFail) {\n return extend({}, {\n type: 'GET',\n dataType: this.dataSource.dataType,\n crossDomain: this.dataSource.crossDomain,\n jsonp: this.dataSource.jsonp,\n cache: true,\n processData: false,\n onSuccess: fnSuccess,\n onFailure: fnFail\n }, url);\n };\n DataManager.prototype.makeRequest = function (url, deffered, args, query) {\n var _this = this;\n var isSelector = !!query.subQuerySelector;\n var fnFail = function (e) {\n args.error = e;\n deffered.reject(args);\n };\n var process = function (data, count, xhr, request, actual, aggregates, virtualSelectRecords) {\n args.xhr = xhr;\n args.count = count ? parseInt(count.toString(), 10) : 0;\n args.result = data;\n args.request = request;\n args.aggregates = aggregates;\n args.actual = actual;\n args.virtualSelectRecords = virtualSelectRecords;\n deffered.resolve(args);\n };\n var fnQueryChild = function (data, selector) {\n var subDeffer = new Deferred();\n var childArgs = { parent: args };\n query.subQuery.isChild = true;\n var subUrl = _this.adaptor.processQuery(_this, query.subQuery, data ? _this.adaptor.processResponse(data) : selector);\n var childReq = _this.makeRequest(subUrl, subDeffer, childArgs, query.subQuery);\n if (!isSelector) {\n subDeffer.then(function (subData) {\n if (data) {\n DataUtil.buildHierarchy(query.subQuery.fKey, query.subQuery.fromTable, data, subData, query.subQuery.key);\n process(data, subData.count, subData.xhr);\n }\n }, fnFail);\n }\n return childReq;\n };\n var fnSuccess = function (data, request) {\n if (request.httpRequest.getResponseHeader('Content-Type').indexOf('xml') === -1 && _this.dateParse) {\n data = DataUtil.parse.parseJson(data);\n }\n var result = _this.adaptor.processResponse(data, _this, query, request.httpRequest, request);\n var count = 0;\n var aggregates = null;\n var virtualSelectRecords = 'virtualSelectRecords';\n var virtualRecords = data[virtualSelectRecords];\n if (query.isCountRequired) {\n count = result.count;\n aggregates = result.aggregates;\n result = result.result;\n }\n if (!query.subQuery) {\n process(result, count, request.httpRequest, request.type, data, aggregates, virtualRecords);\n return;\n }\n if (!isSelector) {\n fnQueryChild(result, request);\n }\n };\n var req = this.extendRequest(url, fnSuccess, fnFail);\n var ajax = new Ajax(req);\n ajax.beforeSend = function () {\n _this.beforeSend(ajax.httpRequest, ajax);\n };\n req = ajax.send();\n req.catch(function (e) { return true; }); // to handle failure remote requests. \n this.requests.push(ajax);\n if (isSelector) {\n var promise = void 0;\n var res = query.subQuerySelector.call(this, { query: query.subQuery, parent: query });\n if (res && res.length) {\n promise = Promise.all([req, fnQueryChild(null, res)]);\n promise.then(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var result = args[0];\n var pResult = _this.adaptor.processResponse(result[0], _this, query, _this.requests[0].httpRequest, _this.requests[0]);\n var count = 0;\n if (query.isCountRequired) {\n count = pResult.count;\n pResult = pResult.result;\n }\n var cResult = _this.adaptor.processResponse(result[1], _this, query.subQuery, _this.requests[1].httpRequest, _this.requests[1]);\n count = 0;\n if (query.subQuery.isCountRequired) {\n count = cResult.count;\n cResult = cResult.result;\n }\n DataUtil.buildHierarchy(query.subQuery.fKey, query.subQuery.fromTable, pResult, cResult, query.subQuery.key);\n isSelector = false;\n process(pResult, count, _this.requests[0].httpRequest);\n });\n }\n else {\n isSelector = false;\n }\n }\n return req;\n };\n DataManager.prototype.beforeSend = function (request, settings) {\n this.adaptor.beforeSend(this, request, settings);\n var headers = this.dataSource.headers;\n var props;\n for (var i = 0; headers && i < headers.length; i++) {\n props = [];\n var keys = Object.keys(headers[i]);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var prop = keys_1[_i];\n props.push(prop);\n request.setRequestHeader(prop, headers[i][prop]);\n }\n }\n };\n /**\n * Save bulk changes to the given table name.\n * User can add a new record, edit an existing record, and delete a record at the same time.\n * If the datasource from remote, then updated in a single post.\n * @param {Object} changes - Defines the CrudOptions.\n * @param {string} key - Defines the column field.\n * @param {string|Query} tableName - Defines the table name.\n * @param {Query} query - Sets default query for the DataManager.\n */\n DataManager.prototype.saveChanges = function (changes, key, tableName, query) {\n var _this = this;\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var args = {\n url: tableName,\n key: key || this.dataSource.key\n };\n var req = this.adaptor.batchRequest(this, changes, args, query);\n if (this.dataSource.offline) {\n return req;\n }\n var deff = new Deferred();\n var ajax = new Ajax(req);\n ajax.beforeSend = function () {\n _this.beforeSend(ajax.httpRequest, ajax);\n };\n ajax.onSuccess = function (data, request) {\n deff.resolve(_this.adaptor.processResponse(DataUtil.parse.parseJson(data), _this, null, request.httpRequest, request, changes));\n };\n ajax.onFailure = function (e) {\n deff.reject([{ error: e }]);\n };\n ajax.send().catch(function (e) { return true; }); // to handle the failure requests. \n return deff.promise;\n };\n /**\n * Inserts new record in the given table.\n * @param {Object} data - Defines the data to insert.\n * @param {string|Query} tableName - Defines the table name.\n * @param {Query} query - Sets default query for the DataManager.\n */\n DataManager.prototype.insert = function (data, tableName, query, position) {\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var req = this.adaptor.insert(this, data, tableName, query, position);\n if (this.dataSource.offline) {\n return req;\n }\n return this.doAjaxRequest(req);\n };\n /**\n * Removes data from the table with the given key.\n * @param {string} keyField - Defines the column field.\n * @param {Object} value - Defines the value to find the data in the specified column.\n * @param {string|Query} tableName - Defines the table name\n * @param {Query} query - Sets default query for the DataManager.\n */\n DataManager.prototype.remove = function (keyField, value, tableName, query) {\n if (typeof value === 'object') {\n value = value[keyField];\n }\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var res = this.adaptor.remove(this, keyField, value, tableName, query);\n if (this.dataSource.offline) {\n return res;\n }\n return this.doAjaxRequest(res);\n };\n /**\n * Updates existing record in the given table.\n * @param {string} keyField - Defines the column field.\n * @param {Object} value - Defines the value to find the data in the specified column.\n * @param {string|Query} tableName - Defines the table name\n * @param {Query} query - Sets default query for the DataManager.\n */\n DataManager.prototype.update = function (keyField, value, tableName, query) {\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var res = this.adaptor.update(this, keyField, value, tableName, query);\n if (this.dataSource.offline) {\n return res;\n }\n return this.doAjaxRequest(res);\n };\n DataManager.prototype.doAjaxRequest = function (res) {\n var _this = this;\n var defer = new Deferred();\n res = extend({}, {\n type: 'POST',\n contentType: 'application/json; charset=utf-8',\n processData: false\n }, res);\n var ajax = new Ajax(res);\n ajax.beforeSend = function () {\n _this.beforeSend(ajax.httpRequest, ajax);\n };\n ajax.onSuccess = function (record, request) {\n try {\n DataUtil.parse.parseJson(record);\n }\n catch (e) {\n record = [];\n }\n record = _this.adaptor.processResponse(DataUtil.parse.parseJson(record), _this, null, request.httpRequest, request);\n defer.resolve(record);\n };\n ajax.onFailure = function (e) {\n defer.reject([{ error: e }]);\n };\n ajax.send().catch(function (e) { return true; }); // to handle the failure requests.\n return defer.promise;\n };\n return DataManager;\n}());\nexport { DataManager };\n/**\n * Deferred is used to handle asynchronous operation.\n */\nvar Deferred = /** @class */ (function () {\n function Deferred() {\n var _this = this;\n /**\n * Promise is an object that represents a value that may not be available yet, but will be resolved at some point in the future.\n */\n this.promise = new Promise(function (resolve, reject) {\n _this.resolve = resolve;\n _this.reject = reject;\n });\n /**\n * Defines the callback function triggers when the Deferred object is resolved.\n */\n this.then = this.promise.then.bind(this.promise);\n /**\n * Defines the callback function triggers when the Deferred object is rejected.\n */\n this.catch = this.promise.catch.bind(this.promise);\n }\n return Deferred;\n}());\nexport { Deferred };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { merge, formatUnit, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, createElement, prepend, closest, remove } from '@syncfusion/ej2-base';\nimport { Component, EventHandler, Property, Complex, Event } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { Animation, rippleEffect, Touch } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { ListBase, getFieldValues } from '../common/list-base';\n// Effect Configuration Effect[] = [fromViewBackward,fromViewForward,toViewBackward,toviewForward];\nvar effectsConfig = {\n 'None': [],\n 'SlideLeft': ['SlideRightOut', 'SlideLeftOut', 'SlideLeftIn', 'SlideRightIn'],\n 'SlideDown': ['SlideTopOut', 'SlideBottomOut', 'SlideBottomIn', 'SlideTopIn'],\n 'Zoom': ['FadeOut', 'FadeZoomOut', 'FadeZoomIn', 'FadeIn'],\n 'Fade': ['FadeOut', 'FadeOut', 'FadeIn', 'FadeIn']\n};\nvar effectsRTLConfig = {\n 'None': [],\n 'SlideLeft': ['SlideLeftOut', 'SlideRightOut', 'SlideRightIn', 'SlideLeftIn'],\n 'SlideDown': ['SlideBottomOut', 'SlideTopOut', 'SlideTopIn', 'SlideBottomIn'],\n 'Zoom': ['FadeZoomOut', 'FadeOut', 'FadeIn', 'FadeZoomIn'],\n 'Fade': ['FadeOut', 'FadeOut', 'FadeIn', 'FadeIn']\n};\n// don't use space in classnames.\nvar classNames = {\n root: 'e-listview',\n hover: 'e-hover',\n selected: 'e-active',\n focused: 'e-focused',\n parentItem: 'e-list-parent',\n listItem: 'e-list-item',\n listItemText: 'e-list-text',\n grpListItem: 'e-list-group-item',\n hasChild: 'e-has-child',\n view: 'e-view',\n header: 'e-list-header',\n headerText: 'e-headertext',\n text: 'e-text',\n disable: 'e-disabled',\n content: 'e-content',\n icon: 'e-icons',\n backIcon: 'e-icon-back',\n checkboxWrapper: 'e-checkbox-wrapper',\n checkbox: 'e-checkbox',\n checked: 'e-check',\n checkboxIcon: 'e-frame',\n checkboxRight: 'e-checkbox-right',\n checkboxLeft: 'e-checkbox-left',\n listviewCheckbox: 'e-listview-checkbox',\n itemCheckList: 'e-checklist'\n};\nvar FieldSettings = /** @class */ (function (_super) {\n __extends(FieldSettings, _super);\n function FieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('id')\n ], FieldSettings.prototype, \"id\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"text\", void 0);\n __decorate([\n Property('isChecked')\n ], FieldSettings.prototype, \"isChecked\", void 0);\n __decorate([\n Property('isVisible')\n ], FieldSettings.prototype, \"isVisible\", void 0);\n __decorate([\n Property('enabled')\n ], FieldSettings.prototype, \"enabled\", void 0);\n __decorate([\n Property('iconCss')\n ], FieldSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property('child')\n ], FieldSettings.prototype, \"child\", void 0);\n __decorate([\n Property('tooltip')\n ], FieldSettings.prototype, \"tooltip\", void 0);\n __decorate([\n Property('groupBy')\n ], FieldSettings.prototype, \"groupBy\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"sortBy\", void 0);\n __decorate([\n Property('htmlAttributes')\n ], FieldSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('tableName')\n ], FieldSettings.prototype, \"tableName\", void 0);\n return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\n/**\n * Represents the EJ2 ListView control.\n * ```html\n *
\n *
    \n *
  • Favourite
  • \n *
  • Documents
  • \n *
  • Downloads
  • \n *
\n *
\n * ```\n * ```typescript\n * var lvObj = new ListView({});\n * lvObj.appendTo(\"#listview\");\n * ```\n */\nvar ListView = /** @class */ (function (_super) {\n __extends(ListView, _super);\n /**\n * Constructor for creating the widget\n */\n function ListView(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.curDSLevel = [];\n _this.curViewDS = [];\n _this.keyConfigs = {\n moveDown: 'downarrow',\n moveUp: 'uparrow',\n back: 'backspace',\n home: 'home',\n select: 'enter',\n end: 'end',\n tab: 'tab',\n space: 'space'\n };\n _this.animateOptions = {};\n _this.isNestedList = false;\n _this.currentLiElements = [];\n _this.resetList = false;\n _this.selectedData = [];\n _this.selectedId = [];\n _this.aniObj = new Animation(_this.animateOptions);\n return _this;\n }\n ListView.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'htmlAttributes':\n this.setHTMLAttribute();\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'enable':\n this.setEnable();\n break;\n case 'width':\n case 'height':\n this.setSize();\n break;\n case 'enableRtl':\n this.setEnableRTL();\n break;\n case 'fields':\n this.listBaseOption.fields = this.fields.properties;\n this.reRender();\n break;\n case 'headerTitle':\n if (!this.curDSLevel.length) {\n this.header(this.headerTitle, false);\n }\n break;\n case 'showHeader':\n {\n this.header(this.headerTitle, false);\n }\n break;\n case 'showCheckBox':\n case 'checkBoxPosition':\n this.setCheckbox();\n break;\n case 'dataSource':\n this.reRender();\n break;\n case 'sortOrder':\n case 'showIcon':\n this.listBaseOption.showIcon = this.showIcon;\n this.curViewDS = this.getSubDS();\n this.resetCurrentList();\n break;\n default:\n break;\n }\n }\n };\n // Model Changes\n ListView.prototype.setHTMLAttribute = function () {\n if (Object.keys(this.htmlAttributes).length) {\n attributes(this.element, this.htmlAttributes);\n }\n };\n ListView.prototype.setCSSClass = function (oldCSSClass) {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' '));\n }\n };\n ListView.prototype.setSize = function () {\n this.element.style.height = formatUnit(this.height);\n this.element.style.width = formatUnit(this.width);\n };\n ListView.prototype.setEnable = function () {\n this.enableElement(this.element, this.enable);\n };\n ListView.prototype.setEnableRTL = function () {\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n else {\n this.element.classList.remove('e-rtl');\n }\n };\n ListView.prototype.enableElement = function (element, isEnabled) {\n if (isEnabled) {\n element.classList.remove(classNames.disable);\n }\n else {\n element.classList.add(classNames.disable);\n }\n };\n //Suport Component Functions\n ListView.prototype.header = function (text, showBack) {\n if (this.headerEle === undefined && this.showHeader) {\n this.headerEle = createElement('div', { className: classNames.header });\n var innerHeaderEle = createElement('span', { className: classNames.headerText, innerHTML: this.headerTitle });\n var textEle = createElement('div', { className: classNames.text, innerHTML: innerHeaderEle.outerHTML });\n var hedBackButton = createElement('div', {\n className: classNames.icon + ' ' + classNames.backIcon + ' e-but-back',\n attrs: { style: 'display:none;' }\n });\n this.headerEle.appendChild(hedBackButton);\n this.headerEle.appendChild(textEle);\n this.element.classList.add('e-has-header');\n prepend([this.headerEle], this.element);\n }\n else if (this.headerEle) {\n if (this.showHeader) {\n this.headerEle.style.display = '';\n var textEle = this.headerEle.querySelector('.' + classNames.headerText);\n var hedBackButton = this.headerEle.querySelector('.' + classNames.backIcon);\n textEle.innerHTML = text;\n if (showBack === true) {\n hedBackButton.style.display = '';\n }\n else {\n hedBackButton.style.display = 'none';\n }\n }\n else {\n this.headerEle.style.display = 'none';\n }\n }\n };\n // Animation Related Functions\n ListView.prototype.switchView = function (fromView, toView, reverse) {\n var _this = this;\n if (fromView && toView) {\n var fPos_1 = fromView.style.position;\n var overflow_1 = (this.element.style.overflow !== 'hidden') ? this.element.style.overflow : '';\n fromView.style.position = 'absolute';\n fromView.classList.add('e-view');\n var anim = void 0;\n var duration = this.animation.duration;\n if (this.animation.effect) {\n anim = (this.enableRtl ? effectsRTLConfig[this.animation.effect] : effectsConfig[this.animation.effect]);\n }\n else {\n var slideLeft = 'SlideLeft';\n anim = effectsConfig[slideLeft];\n reverse = this.enableRtl;\n duration = 0;\n }\n this.element.style.overflow = 'hidden';\n this.aniObj.animate(fromView, {\n name: (reverse === true ? anim[0] : anim[1]),\n duration: duration,\n timingFunction: this.animation.easing,\n end: function (model) {\n fromView.style.display = 'none';\n _this.element.style.overflow = overflow_1;\n fromView.style.position = fPos_1;\n fromView.classList.remove('e-view');\n }\n });\n toView.style.display = '';\n this.aniObj.animate(toView, {\n name: (reverse === true ? anim[2] : anim[3]),\n duration: duration,\n timingFunction: this.animation.easing,\n end: function () {\n _this.trigger('actionComplete');\n }\n });\n this.curUL = toView;\n }\n };\n ListView.prototype.preRender = function () {\n this.listBaseOption = {\n template: this.template,\n groupTemplate: this.groupTemplate, expandCollapse: true, listClass: '',\n ariaAttributes: {\n itemRole: 'listitem', listRole: 'list', itemText: '',\n groupItemRole: 'group', wrapperRole: 'presentation'\n },\n fields: this.fields.properties, sortOrder: this.sortOrder, showIcon: this.showIcon,\n itemCreated: this.renderCheckbox.bind(this)\n };\n };\n ListView.prototype.renderCheckbox = function (args) {\n if (args.item.classList.contains(classNames.hasChild)) {\n this.isNestedList = true;\n }\n if (this.showCheckBox && this.isValidLI(args.item)) {\n var checkboxElement = void 0;\n var fieldData = void 0;\n checkboxElement = createCheckBox(false, { checked: false, enableRtl: this.enableRtl,\n cssClass: classNames.listviewCheckbox });\n checkboxElement.setAttribute('role', 'checkbox');\n var frameElement_1 = checkboxElement.querySelector('.' + classNames.checkboxIcon);\n args.item.classList.add(classNames.itemCheckList);\n args.item.firstElementChild.classList.add(classNames.checkbox);\n if (typeof this.dataSource[0] !== 'string') {\n fieldData = getFieldValues(args.curData, this.listBaseOption.fields);\n if (!this.resetList && fieldData[this.listBaseOption.fields.isChecked]) {\n this.checkInternally(args, checkboxElement);\n }\n else if (this.selectedData.indexOf(fieldData[this.listBaseOption.fields.text]) !== -1 &&\n this.selectedId.indexOf(fieldData[this.listBaseOption.fields.id]) !== -1) {\n this.checkInternally(args, checkboxElement);\n }\n }\n else if ((typeof this.dataSource[0] === 'string' && this.selectedData.indexOf(args.text) !== -1)) {\n this.checkInternally(args, checkboxElement);\n }\n checkboxElement.setAttribute('aria-checked', frameElement_1.classList.contains(classNames.checked) ? 'true' : 'false');\n if (this.checkBoxPosition === 'Left') {\n checkboxElement.classList.add(classNames.checkboxLeft);\n args.item.firstElementChild.classList.add(classNames.checkboxLeft);\n args.item.firstElementChild.insertBefore(checkboxElement, args.item.firstElementChild.childNodes[0]);\n }\n else {\n checkboxElement.classList.add(classNames.checkboxRight);\n args.item.firstElementChild.classList.add(classNames.checkboxRight);\n args.item.firstElementChild.appendChild(checkboxElement);\n }\n this.currentLiElements.push(args.item);\n }\n };\n ListView.prototype.checkInternally = function (args, checkboxElement) {\n args.item.classList.add(classNames.selected);\n args.item.setAttribute('aria-selected', 'true');\n checkboxElement.querySelector('.' + classNames.checkboxIcon).classList.add(classNames.checked);\n checkboxElement.setAttribute('aria-checked', 'true');\n };\n /**\n * It is used to check the checkbox of an item.\n * @param {Fields | HTMLElement} item - It accepts Fields or HTML list element as an argument.\n */\n ListView.prototype.checkItem = function (item) {\n this.toggleCheckBase(item, true);\n };\n ListView.prototype.toggleCheckBase = function (item, checked) {\n if (this.showCheckBox) {\n var liElement = item;\n if (item instanceof Object && item.constructor !== HTMLLIElement) {\n liElement = this.getLiFromObjOrElement(item);\n }\n if (!isNullOrUndefined(liElement)) {\n var checkboxIcon = liElement.querySelector('.' + classNames.checkboxIcon);\n checked ? liElement.classList.add(classNames.selected) : liElement.classList.remove(classNames.selected);\n liElement.setAttribute('aria-selected', checked ? 'true' : 'false');\n checked ? checkboxIcon.classList.add(classNames.checked) : checkboxIcon.classList.remove(classNames.checked);\n checkboxIcon.parentElement.setAttribute('aria-checked', checked ? 'true' : 'false');\n }\n this.setSelectedItemData(liElement);\n }\n };\n /**\n * It is used to uncheck the checkbox of an item.\n * @param {Fields | HTMLElement} item - It accepts Fields or HTML list element as an argument.\n */\n ListView.prototype.unCheckItem = function (item) {\n this.toggleCheckBase(item, false);\n };\n /**\n * It is used to check all the items in ListView.\n */\n ListView.prototype.checkAllItem = function () {\n this.toggleAllCheckBase(true);\n };\n /**\n * It is used to un-check all the items in ListView.\n */\n ListView.prototype.unCheckAllItem = function () {\n this.toggleAllCheckBase(false);\n };\n ListView.prototype.toggleAllCheckBase = function (checked) {\n if (this.showCheckBox) {\n for (var i = 0; i < this.liCollection.length; i++) {\n var checkIcon = this.liCollection[i].querySelector('.' + classNames.checkboxIcon);\n if (checked) {\n if (!checkIcon.classList.contains(classNames.checked)) {\n this.checkItem(this.liCollection[i]);\n }\n }\n else {\n if (checkIcon.classList.contains(classNames.checked)) {\n this.unCheckItem(this.liCollection[i]);\n }\n }\n }\n }\n };\n ListView.prototype.setCheckbox = function () {\n var _this = this;\n if (this.showCheckBox) {\n var liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.listItem));\n var args_1 = {\n item: undefined, curData: undefined, dataSource: undefined, fields: undefined,\n options: undefined, text: ''\n };\n liCollection.forEach(function (element) {\n args_1.item = element;\n args_1.curData = _this.getItemData(element);\n if (element.querySelector('.' + classNames.checkboxWrapper)) {\n _this.removeElement(element.querySelector('.' + classNames.checkboxWrapper));\n }\n _this.renderCheckbox(args_1);\n if (args_1.item.classList.contains(classNames.selected)) {\n _this.checkInternally(args_1, args_1.item.querySelector('.' + classNames.checkboxWrapper));\n }\n });\n }\n else {\n var liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.itemCheckList));\n liCollection.forEach(function (element) {\n element.classList.remove(classNames.selected);\n element.firstElementChild.classList.remove(classNames.checkbox);\n _this.removeElement(element.querySelector('.' + classNames.checkboxWrapper));\n });\n if (this.selectedItems) {\n this.selectedItems.item.classList.add(classNames.selected);\n }\n }\n };\n ListView.prototype.clickHandler = function (e) {\n var target = e.target;\n var classList = target.classList;\n if (classList.contains(classNames.backIcon) || classList.contains(classNames.headerText)) {\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.unCheckAllItem();\n }\n this.back();\n }\n else {\n var li = closest(target.parentNode, '.' + classNames.listItem);\n if (li === null) {\n li = target;\n }\n this.removeFocus();\n if (this.enable && this.showCheckBox && this.isValidLI(li)) {\n if (e.target.classList.contains(classNames.checkboxIcon)) {\n li.classList.add(classNames.focused);\n if (isNullOrUndefined(li.querySelector('.' + classNames.checked))) {\n var args = { curData: undefined, dataSource: undefined, fields: undefined, options: undefined,\n text: undefined, item: li };\n this.checkInternally(args, args.item.querySelector('.' + classNames.checkboxWrapper));\n }\n else {\n this.unCheckItem(li);\n li.classList.add(classNames.focused);\n }\n }\n else if (li.classList.contains(classNames.hasChild)) {\n this.removeHover();\n this.removeSelect();\n this.removeSelect(li);\n this.setSelectLI(li, e);\n li.classList.remove(classNames.selected);\n }\n else {\n this.setCheckboxLI(li, e);\n }\n }\n else {\n this.setSelectLI(li, e);\n }\n }\n };\n ListView.prototype.removeElement = function (element) {\n return element && element.parentNode && element.parentNode.removeChild(element);\n };\n ListView.prototype.hoverHandler = function (e) {\n var curLi = closest(e.target.parentNode, '.' + classNames.listItem);\n this.setHoverLI(curLi);\n };\n ListView.prototype.leaveHandler = function (e) {\n this.removeHover();\n };\n ;\n ListView.prototype.homeKeyHandler = function (e, end) {\n var li = this.curUL.querySelectorAll('.' + classNames.listItem);\n var focusedElement = this.curUL.querySelector('.' + classNames.focused) ||\n this.curUL.querySelector('.' + classNames.selected);\n if (focusedElement) {\n focusedElement.classList.remove(classNames.focused);\n if (!this.showCheckBox) {\n focusedElement.classList.remove(classNames.selected);\n }\n }\n var index = !end ? 0 : li.length - 1;\n if (li[index].classList.contains(classNames.hasChild) || this.showCheckBox) {\n li[index].classList.add(classNames.focused);\n }\n else {\n this.setSelectLI(li[index], e);\n }\n };\n ListView.prototype.arrowKeyHandler = function (e, prev) {\n var siblingLI;\n var li;\n var hasChild = !isNullOrUndefined(this.curUL.querySelector('.' + classNames.hasChild)) ? true : false;\n if (hasChild || this.showCheckBox) {\n li = this.curUL.querySelector('.' + classNames.focused) || this.curUL.querySelector('.' + classNames.selected);\n siblingLI = ListBase.getSiblingLI(this.curUL.querySelectorAll('.' + classNames.listItem), li, prev);\n if (!isNullOrUndefined(siblingLI)) {\n if (li) {\n li.classList.remove(classNames.focused);\n if (!this.showCheckBox) {\n li.classList.remove(classNames.selected);\n }\n }\n if (siblingLI.classList.contains(classNames.hasChild) || this.showCheckBox) {\n siblingLI.classList.add(classNames.focused);\n }\n else {\n this.setSelectLI(siblingLI, e);\n }\n }\n }\n else {\n li = this.curUL.querySelector('.' + classNames.selected);\n siblingLI = ListBase.getSiblingLI(this.curUL.querySelectorAll('.' + classNames.listItem), li, prev);\n this.setSelectLI(siblingLI, e);\n }\n };\n ListView.prototype.enterKeyHandler = function (e) {\n var hasChild = !isNullOrUndefined(this.curUL.querySelector('.' + classNames.hasChild)) ? true : false;\n var li = this.curUL.querySelector('.' + classNames.focused);\n if (hasChild && li) {\n li.classList.remove(classNames.focused);\n if (this.showCheckBox) {\n this.removeSelect();\n this.removeSelect(li);\n this.removeHover();\n }\n this.setSelectLI(li, e);\n }\n };\n ListView.prototype.spaceKeyHandler = function (e) {\n if (this.enable && this.showCheckBox) {\n var li = this.curUL.querySelector('.' + classNames.focused);\n if (!isNullOrUndefined(li) && isNullOrUndefined(li.querySelector('.' + classNames.checked))) {\n var args = { curData: undefined, dataSource: undefined, fields: undefined, options: undefined,\n text: undefined, item: li };\n this.checkInternally(args, args.item.querySelector('.' + classNames.checkboxWrapper));\n }\n else {\n this.unCheckItem(li);\n }\n }\n };\n ListView.prototype.keyActionHandler = function (e) {\n e.preventDefault();\n switch (e.action) {\n case 'home':\n this.homeKeyHandler(e);\n break;\n case 'end':\n this.homeKeyHandler(e, true);\n break;\n case 'moveDown':\n this.arrowKeyHandler(e);\n break;\n case 'moveUp':\n this.arrowKeyHandler(e, true);\n break;\n case 'select':\n this.enterKeyHandler(e);\n break;\n case 'back':\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.unCheckAllItem();\n }\n this.back();\n break;\n case 'tab':\n this.tabFocus(e);\n break;\n case 'space':\n this.spaceKeyHandler(e);\n break;\n }\n };\n ListView.prototype.swipeActionHandler = function (e) {\n if (e.swipeDirection === 'Right') {\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.unCheckAllItem();\n }\n this.back();\n }\n };\n ListView.prototype.focusout = function () {\n var focusedElement = this.curUL.querySelector('.' + classNames.focused);\n var activeElement = this.curUL.querySelector('[aria-selected = true]');\n if (focusedElement && !this.showCheckBox) {\n focusedElement.classList.remove(classNames.focused);\n if (activeElement) {\n activeElement.classList.add(classNames.selected);\n }\n }\n };\n ListView.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'mouseover', this.hoverHandler, this);\n EventHandler.add(this.element, 'mouseout', this.leaveHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusout, this);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs\n });\n this.touchModule = new Touch(this.element, { swipe: this.swipeActionHandler.bind(this) });\n };\n ListView.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'click', this.clickHandler);\n EventHandler.remove(this.element, 'mouseover', this.hoverHandler);\n EventHandler.remove(this.element, 'mouseout', this.leaveHandler);\n this.keyboardModule.destroy();\n this.touchModule.destroy();\n };\n ListView.prototype.tabFocus = function (e) {\n var selectedList = this.curUL.querySelector('.' + classNames.selected);\n if ((!selectedList && this.curUL) || this.showCheckBox) {\n var li = this.curUL.querySelector('.' + classNames.listItem);\n if (li.classList.contains(classNames.hasChild) || this.showCheckBox) {\n var focusedElement = this.curUL.querySelector('.' + classNames.focused);\n if (isNullOrUndefined(focusedElement)) {\n li.classList.add(classNames.focused);\n }\n }\n else {\n this.setSelectLI(li, e);\n }\n }\n };\n ListView.prototype.removeFocus = function () {\n var focusedLI = this.element.querySelectorAll('.' + classNames.focused);\n for (var _i = 0, focusedLI_1 = focusedLI; _i < focusedLI_1.length; _i++) {\n var ele = focusedLI_1[_i];\n ele.classList.remove(classNames.focused);\n }\n };\n ListView.prototype.removeHover = function () {\n var hoverLI = this.element.querySelector('.' + classNames.hover);\n if (hoverLI) {\n hoverLI.classList.remove(classNames.hover);\n }\n };\n ListView.prototype.removeSelect = function (li) {\n if (isNullOrUndefined(li)) {\n var selectedLI = this.element.querySelectorAll('.' + classNames.selected);\n for (var _i = 0, selectedLI_1 = selectedLI; _i < selectedLI_1.length; _i++) {\n var ele = selectedLI_1[_i];\n if (this.showCheckBox && ele.querySelector('.' + classNames.checked)) {\n continue;\n }\n else {\n ele.setAttribute('aria-selected', 'false');\n ele.classList.remove(classNames.selected);\n }\n }\n }\n else {\n li.classList.remove(classNames.selected);\n li.setAttribute('aria-selected', 'false');\n }\n };\n ListView.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(classNames.listItem)\n && !li.classList.contains(classNames.grpListItem)\n && !li.classList.contains(classNames.disable));\n };\n ListView.prototype.setCheckboxLI = function (li, e) {\n if (this.isValidLI(li) && this.enable && this.showCheckBox) {\n if (this.curUL.querySelector('.' + classNames.focused)) {\n this.curUL.querySelector('.' + classNames.focused).classList.remove(classNames.focused);\n }\n li.classList.add(classNames.focused);\n var checkboxElement = li.querySelector('.' + classNames.checkboxWrapper);\n var checkIcon = checkboxElement.querySelector('.' + classNames.checkboxIcon + '.' + classNames.icon);\n this.removeHover();\n if (!checkIcon.classList.contains(classNames.checked)) {\n checkIcon.classList.add(classNames.checked);\n li.classList.add(classNames.selected);\n li.setAttribute('aria-selected', 'true');\n }\n else {\n checkIcon.classList.remove(classNames.checked);\n li.classList.remove(classNames.selected);\n li.setAttribute('aria-selected', 'false');\n }\n checkboxElement.setAttribute('aria-checked', checkIcon.classList.contains(classNames.checked) ?\n 'true' : 'false');\n if (e) {\n var eventArgs = this.selectEventData(li, e);\n merge(eventArgs, { isChecked: checkIcon.classList.contains(classNames.checked) });\n this.trigger('select', eventArgs);\n }\n this.setSelectedItemData(li);\n this.renderSubList(li);\n }\n };\n ListView.prototype.selectEventData = function (li, e) {\n var data = this.getItemData(li);\n var fieldData = getFieldValues(data, this.listBaseOption.fields);\n var selectedItem;\n if (isNullOrUndefined(data) && typeof this.dataSource[0] === 'string') {\n selectedItem = { item: li, text: li.innerText.trim(), data: this.dataSource };\n }\n else {\n selectedItem = { item: li, text: fieldData[this.listBaseOption.fields.text], data: data };\n }\n var eventArgs = {};\n merge(eventArgs, selectedItem);\n if (e) {\n merge(eventArgs, { isInteracted: true, event: e, index: Array.prototype.indexOf.call(this.curUL.children, li) });\n }\n return eventArgs;\n };\n ListView.prototype.setSelectedItemData = function (li) {\n var data = this.getItemData(li);\n var fieldData = getFieldValues(data, this.listBaseOption.fields);\n if (isNullOrUndefined(data) && (typeof this.dataSource[0] === 'string')) {\n this.selectedItems = {\n item: li,\n text: li.innerText.trim(),\n data: this.dataSource\n };\n }\n else {\n this.selectedItems = {\n item: li,\n text: fieldData[this.listBaseOption.fields.text],\n data: data\n };\n }\n };\n ListView.prototype.setSelectLI = function (li, e) {\n if (this.isValidLI(li) && !li.classList.contains(classNames.selected) && this.enable) {\n if (!this.showCheckBox) {\n this.removeSelect();\n }\n li.classList.add(classNames.selected);\n li.classList.add(classNames.focused);\n li.setAttribute('aria-selected', 'true');\n this.removeHover();\n this.setSelectedItemData(li);\n var eventArgs = this.selectEventData(li, e);\n this.trigger('select', eventArgs);\n this.selectedLI = li;\n this.renderSubList(li);\n }\n };\n ListView.prototype.setHoverLI = function (li) {\n if (this.isValidLI(li) && !li.classList.contains(classNames.hover) && this.enable) {\n var lastLi = this.element.querySelectorAll('.' + classNames.hover);\n if (lastLi && lastLi.length) {\n removeClass(lastLi, classNames.hover);\n }\n if (!li.classList.contains(classNames.selected) || this.showCheckBox) {\n li.classList.add(classNames.hover);\n }\n }\n };\n ListView.prototype.hoverSiblingLI = function (prev) {\n var lastLi = this.curUL.querySelector('.' + classNames.hover);\n var siblingLI;\n if (!lastLi) {\n lastLi = this.curUL.querySelector('.' + classNames.selected);\n }\n if (lastLi) {\n siblingLI = ListBase.getSiblingLI(this.curUL.querySelectorAll('.' + classNames.listItem), lastLi, prev);\n }\n else {\n if (prev) {\n var curLIs = this.curUL.querySelectorAll('.' + classNames.listItem);\n siblingLI = curLIs[curLIs.length - 1];\n }\n else {\n siblingLI = this.curUL.querySelector('.' + classNames.listItem);\n }\n }\n this.setHoverLI(siblingLI);\n };\n //Data Source Related Functions\n ListView.prototype.getSubDS = function () {\n var levelKeys = this.curDSLevel;\n if (levelKeys.length) {\n var ds = this.localData;\n for (var _i = 0, levelKeys_1 = levelKeys; _i < levelKeys_1.length; _i++) {\n var key = levelKeys_1[_i];\n this.curDSJSON = this.findItemFromDS(ds, { id: key });\n var fieldData = getFieldValues(this.curDSJSON, this.listBaseOption.fields);\n ds = this.curDSJSON ? fieldData[this.fields.child] : ds;\n }\n return ds;\n }\n return this.localData;\n };\n ListView.prototype.getItemData = function (li) {\n var fields = this.getElementUID(li);\n var curDS = this.dataSource;\n return this.findItemFromDS(curDS, fields);\n };\n ListView.prototype.findItemFromDS = function (dataSource, fields, parent) {\n var _this = this;\n var resultJSON;\n if (dataSource && dataSource.length && fields) {\n dataSource.some(function (data) {\n var fieldData = getFieldValues(data, _this.listBaseOption.fields);\n //(!(fid) || id === fid) && (!(ftext) || text === ftext) && (!!fid || !!ftext)\n if ((fields.id || fields.text) &&\n (!fields.id || fieldData[_this.fields.id] === fields.id) &&\n (!fields.text || fieldData[_this.fields.text] === fields.text)) {\n resultJSON = (parent ? dataSource : data);\n }\n else if (!isNullOrUndefined(fields.id) && isNullOrUndefined(fieldData[_this.fields.id])) {\n var li = _this.element.querySelector('[data-uid=\"'\n + fields.id + '\"]');\n if (li.innerText.trim() === fieldData[_this.fields.text]) {\n resultJSON = data;\n }\n }\n else if (fieldData.hasOwnProperty(_this.fields.child) && fieldData[_this.fields.child].length) {\n resultJSON = _this.findItemFromDS(fieldData[_this.fields.child], fields, parent);\n }\n return !!resultJSON;\n });\n }\n else {\n resultJSON = dataSource;\n }\n return resultJSON;\n };\n ListView.prototype.getQuery = function () {\n var columns = [];\n var query = (this.query ? this.query : new Query());\n if (!this.query) {\n for (var _i = 0, _a = Object.keys(this.fields.properties); _i < _a.length; _i++) {\n var column = _a[_i];\n if (column !== 'tableName' && !!(this.fields[column]) &&\n this.fields[column] !==\n ListBase.defaultMappedFields[column]\n && columns.indexOf(this.fields[column]) === -1) {\n columns.push(this.fields[column]);\n }\n }\n query.select(columns);\n if (this.fields.properties.hasOwnProperty('tableName')) {\n query.from(this.fields.tableName);\n }\n }\n return query;\n };\n ListView.prototype.setViewDataSource = function (dataSource) {\n if (dataSource === void 0) { dataSource = this.localData; }\n if (dataSource && this.fields.groupBy) {\n this.curViewDS = ListBase.groupDataSource(dataSource, this.fields, this.sortOrder);\n }\n else if (dataSource && this.sortOrder !== 'None') {\n this.curViewDS = ListBase.getDataSource(dataSource, ListBase.addSorting(this.sortOrder, this.fields.sortBy));\n }\n else {\n this.curViewDS = dataSource;\n }\n };\n ListView.prototype.isInAnimation = function () {\n return this.curUL.classList.contains('.e-animate');\n };\n ListView.prototype.setLocalData = function () {\n var _this = this;\n this.trigger('actionBegin');\n if (this.dataSource instanceof DataManager) {\n this.dataSource.executeQuery(this.getQuery()).then(function (e) {\n if (_this.isDestroyed) {\n return;\n }\n _this.localData = e.result;\n _this.renderList();\n _this.trigger('actionComplete', e);\n }).catch(function (e) {\n if (_this.isDestroyed) {\n return;\n }\n _this.trigger('actionFailure', e);\n });\n }\n else if (!this.dataSource || !this.dataSource.length) {\n var ul = this.element.querySelector('ul');\n if (ul) {\n remove(ul);\n this.setProperties({ dataSource: ListBase.createJsonFromElement(ul) }, true);\n this.localData = this.dataSource;\n this.renderList();\n this.trigger('actionComplete', { data: this.localData });\n }\n }\n else {\n this.localData = this.dataSource;\n this.renderList();\n this.trigger('actionComplete', { data: this.localData });\n }\n };\n ListView.prototype.reRender = function () {\n this.element.innerHTML = '';\n this.curUL = this.headerEle = undefined;\n this.setLocalData();\n this.header();\n };\n ListView.prototype.resetCurrentList = function () {\n this.setViewDataSource(this.curViewDS);\n this.contentContainer.innerHTML = '';\n this.createList();\n this.renderIntoDom(this.curUL);\n };\n ListView.prototype.createList = function () {\n this.currentLiElements = [];\n this.isNestedList = false;\n this.ulElement = this.curUL = ListBase.createList(this.curViewDS, this.listBaseOption);\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n };\n ListView.prototype.renderSubList = function (li) {\n var uID = li.getAttribute('data-uid');\n if (li.classList.contains(classNames.hasChild) && uID) {\n var ul = closest(li.parentNode, '.' + classNames.parentItem);\n var ele = this.element.querySelector('[pid=\\'' + uID + '\\']');\n this.curDSLevel.push(uID);\n this.setViewDataSource(this.getSubDS());\n if (!ele) {\n ele = ListBase.createListFromJson(this.curViewDS, this.listBaseOption, this.curDSLevel.length);\n ele.setAttribute('pID', uID);\n ele.style.display = 'none';\n this.renderIntoDom(ele);\n }\n this.switchView(ul, ele);\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n var fieldData = getFieldValues(this.selectedItems.data, this.listBaseOption.fields);\n this.header((fieldData[this.listBaseOption.fields.text]), true);\n this.selectedLI = undefined;\n }\n };\n ListView.prototype.renderIntoDom = function (ele) {\n this.contentContainer.appendChild(ele);\n };\n ListView.prototype.renderList = function () {\n this.setViewDataSource();\n this.createList();\n this.contentContainer = createElement('div', { className: classNames.content });\n this.element.appendChild(this.contentContainer);\n this.renderIntoDom(this.ulElement);\n };\n ListView.prototype.getElementUID = function (obj) {\n var fields = {};\n if (obj instanceof Element) {\n fields.id = obj.getAttribute('data-uid');\n }\n else {\n fields = obj;\n }\n return fields;\n };\n /**\n * It is used to Initialize the control rendering.\n */\n ListView.prototype.render = function () {\n this.element.classList.add(classNames.root);\n attributes(this.element, { role: 'list', tabindex: '0' });\n this.setCSSClass();\n this.setEnableRTL();\n this.setEnable();\n this.setSize();\n this.wireEvents();\n this.header();\n this.setLocalData();\n this.setHTMLAttribute();\n this.rippleFn = rippleEffect(this.element, {\n selector: '.' + classNames.listItem\n });\n };\n /**\n * It is used to destroy the ListView component.\n */\n ListView.prototype.destroy = function () {\n this.unWireEvents();\n var classAr = [classNames.root, this.cssClass, classNames.disable, 'e-rtl',\n 'e-has-header'];\n removeClass([this.element], classAr);\n this.rippleFn();\n _super.prototype.destroy.call(this);\n };\n /**\n * It helps to switch back from navigated sub list.\n */\n ListView.prototype.back = function () {\n var pID = this.curDSLevel[this.curDSLevel.length - 1];\n if (pID === undefined || this.isInAnimation()) {\n return;\n }\n this.curDSLevel.pop();\n this.setViewDataSource(this.getSubDS());\n var toUL = this.element.querySelector('[data-uid=\\'' + pID + '\\']');\n var fromUL = this.curUL;\n if (!toUL) {\n this.createList();\n this.renderIntoDom(this.ulElement);\n toUL = this.curUL;\n }\n else {\n toUL = toUL.parentElement;\n }\n var fieldData = getFieldValues(this.curDSJSON, this.listBaseOption.fields);\n var text = fieldData[this.fields.text];\n this.switchView(fromUL, toUL, true);\n this.removeFocus();\n var li = this.element.querySelector('[data-uid=\\'' + pID + '\\']');\n li.classList.add(classNames.focused);\n if (this.showCheckBox && li.querySelector('.' + classNames.checkboxIcon).classList.contains(classNames.checked)) {\n li.setAttribute('aria-selected', 'true');\n }\n else {\n li.classList.remove(classNames.selected);\n li.setAttribute('aria-selected', 'false');\n }\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n this.header((this.curDSLevel.length ? text : this.headerTitle), (this.curDSLevel.length ? true : false));\n };\n /**\n * It is used to select the list item from the ListView.\n * @param {Fields|HTMLElement} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.selectItem = function (obj) {\n if (!isNullOrUndefined(obj)) {\n if (this.showCheckBox) {\n this.setCheckboxLI(this.getLiFromObjOrElement(obj));\n }\n else {\n this.setSelectLI(this.getLiFromObjOrElement(obj));\n }\n }\n };\n ListView.prototype.getLiFromObjOrElement = function (obj) {\n var li;\n if (!isNullOrUndefined(obj)) {\n if (typeof this.dataSource[0] === 'string') {\n if (obj instanceof Object && obj.constructor === HTMLLIElement) {\n var uid = obj.getAttribute('data-uid').toString();\n for (var i = 0; i < this.liCollection.length; i++) {\n if (this.liCollection[i].getAttribute('data-uid').toString() === uid) {\n li = this.liCollection[i];\n break;\n }\n }\n }\n }\n else {\n var resultJSON = this.getItemData(obj);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n li = this.element.querySelector('[data-uid=\"'\n + fieldData[this.fields.id] + '\"]');\n if (isNullOrUndefined(li)) {\n var curLi = this.element.querySelectorAll('.' + classNames.listItem);\n for (var i = 0; i < curLi.length; i++) {\n if (curLi[i].innerText.trim() === resultJSON.text) {\n li = curLi[i];\n }\n }\n }\n }\n }\n }\n return li;\n };\n ListView.prototype.selectMultipleItems = function (obj) {\n if (!isNullOrUndefined(obj)) {\n for (var i = 0; i < obj.length; i++) {\n if (!isNullOrUndefined(obj[i])) {\n this.selectItem(obj[i]);\n }\n }\n }\n };\n ListView.prototype.getParentId = function () {\n var parentId = [];\n if (this.isNestedList) {\n for (var i = this.curDSLevel.length - 1; i >= 0; i--) {\n parentId.push(this.curDSLevel[i]);\n }\n }\n return parentId;\n };\n /**\n * It is used to get the currently\n * {@link http://ej2.syncfusion.com/documentation/list-view/api-selectedItem.html?lang=typescript selected}\n * item details from the list items.\n */\n ListView.prototype.getSelectedItems = function () {\n this.selectedId = [];\n if (this.showCheckBox) {\n var liCollection = this.curUL.getElementsByClassName(classNames.selected);\n var liTextCollection = [];\n var liDataCollection = [];\n this.selectedId = [];\n var dataParent = [];\n for (var i = 0; i < liCollection.length; i++) {\n if (typeof this.dataSource[0] === 'string') {\n liTextCollection.push(liCollection[i].innerText.trim());\n }\n else {\n var tempData = this.getItemData(liCollection[i]);\n var fieldData = getFieldValues(tempData, this.listBaseOption.fields);\n if (this.isNestedList) {\n dataParent.push({ data: tempData, parentId: this.getParentId() });\n }\n else {\n liDataCollection.push(tempData);\n }\n liTextCollection.push(fieldData[this.listBaseOption.fields.text]);\n this.selectedId.push(fieldData[this.listBaseOption.fields.id]);\n }\n }\n if (typeof this.dataSource[0] === 'string') {\n return { item: liCollection, data: this.dataSource, text: liTextCollection };\n }\n if (this.isNestedList) {\n return { item: liCollection, data: dataParent, text: liTextCollection };\n }\n else {\n return { item: liCollection, data: liDataCollection, text: liTextCollection };\n }\n }\n else {\n var liElement = this.element.getElementsByClassName(classNames.selected)[0];\n var fieldData = getFieldValues(this.getItemData(liElement), this.listBaseOption.fields);\n if (typeof this.dataSource[0] === 'string') {\n return (!isNullOrUndefined(liElement)) ? {\n item: liElement, data: this.dataSource,\n text: liElement.innerText.trim()\n } : undefined;\n }\n else {\n if (isNullOrUndefined(fieldData) || isNullOrUndefined(liElement)) {\n return undefined;\n }\n else {\n this.selectedId.push(fieldData[this.listBaseOption.fields.id]);\n return {\n text: fieldData[this.listBaseOption.fields.text], item: liElement,\n data: this.getItemData(liElement)\n };\n }\n }\n }\n };\n /**\n * It is used to find out an item details from the current list.\n * @param {Fields|HTMLElement} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.findItem = function (obj) {\n return this.getItemData(obj);\n };\n /**\n * A function that used to enable the disabled list items based on passed element.\n * @param {Fields|HTMLElement} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.enableItem = function (obj) {\n this.setItemState(obj, true);\n };\n /**\n * It is used to disable the list items based on passed element.\n * @param {Fields|HTMLElement} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.disableItem = function (obj) {\n this.setItemState(obj, false);\n };\n //A function that used to set state of the list item like enable, disable.\n ListView.prototype.setItemState = function (obj, isEnable) {\n var resultJSON = this.getItemData(obj);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n var li = this.element.querySelector('[data-uid=\"' + fieldData[this.fields.id] + '\"]');\n if (isEnable) {\n if (li) {\n li.classList.remove(classNames.disable);\n }\n delete resultJSON[this.fields.enabled];\n }\n else if (!isEnable) {\n if (li) {\n li.classList.add(classNames.disable);\n }\n resultJSON[this.fields.enabled] = false;\n }\n }\n };\n /**\n * It is used to show an list item from the ListView.\n * @param {Fields|HTMLElement} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.showItem = function (obj) {\n this.showHideItem(obj, false, '');\n };\n /**\n * It is used to hide an item from the ListView.\n * @param {Fields|HTMLElement} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.hideItem = function (obj) {\n this.showHideItem(obj, true, 'none');\n };\n ListView.prototype.showHideItem = function (obj, isHide, display) {\n var resultJSON = this.getItemData(obj);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n var li = this.element.querySelector('[data-uid=\"' + fieldData[this.fields.id] + '\"]');\n if (li) {\n li.style.display = display;\n }\n if (isHide) {\n resultJSON[this.fields.isVisible] = false;\n }\n else {\n delete resultJSON[this.fields.isVisible];\n }\n }\n };\n /**\n * It adds new item to current ListView.\n * To add a new item in the list view, we need to pass ‘data’ as array or object and ‘fields’ as object.\n * For example fields: { text: 'Name', tooltip: 'Name', id:'id'}\n * @param {{[key:string]:Object}[]} data - Array JSON Data that need to add.\n * @param {Fields} fields - Fields as an Object with ID and Text fields.\n */\n ListView.prototype.addItem = function (data, fields) {\n var ds = this.findItemFromDS(this.dataSource, fields);\n var fieldData = getFieldValues(ds, this.listBaseOption.fields);\n var child = fieldData[this.fields.child];\n if (!child) {\n child = [];\n }\n child = child.concat(data);\n if (ds instanceof Array) {\n this.dataSource = this.localData = ds.concat(data);\n this.setViewDataSource();\n }\n else {\n ds[this.fields.child] = child;\n }\n this.resetCurrentList();\n };\n /**\n * A function that removes the item from data source based on passed element like fields: { text: 'Name', tooltip: 'Name', id:'id'}\n * @param {Fields|HTMLElement} obj - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.removeItem = function (obj) {\n this.removeItemFromList(obj, true);\n };\n ListView.prototype.removeItemFromList = function (obj, resetList) {\n var _this = this;\n var currentlySelectedItems = [];\n var selectedElements = [];\n var valid = false;\n if (typeof this.dataSource[0] === 'string') {\n if (typeof obj === 'object') {\n var liCollection_1 = [];\n var idx_1 = 0;\n this.liCollection.forEach(function (element) {\n if (element === obj) {\n valid = true;\n _this.removeElement(element);\n _this.dataSource.splice(idx_1, 1);\n _this.localData = _this.dataSource;\n }\n else {\n liCollection_1.push(element);\n }\n idx_1++;\n });\n this.liCollection = liCollection_1;\n }\n else if (typeof obj === 'string') {\n var liCollection_2 = [];\n var idx_2 = 0;\n var ds_1 = [];\n this.liCollection.forEach(function (element) {\n if (element.innerText.trim() === obj) {\n valid = true;\n _this.removeElement(element);\n }\n else {\n liCollection_2.push(element);\n ds_1.push(_this.dataSource[idx_2]);\n }\n idx_2++;\n });\n this.localData = this.curViewDS = this.dataSource = ds_1;\n this.liCollection = liCollection_2;\n }\n var values = this.getSelectedItems();\n this.selectedData = (!isNullOrUndefined(values)) ? values.text : undefined;\n selectedElements = undefined;\n if (resetList && valid) {\n this.resetList = true;\n this.resetCurrentList();\n if (!this.showCheckBox && this.selectedData && this.selectedData.length) {\n this.removeSelect();\n var index = this.dataSource.lastIndexOf(this.selectedData);\n this.liCollection[index].classList.add(classNames.selected);\n this.liCollection[index].setAttribute('aria-selected', 'true');\n }\n this.resetList = false;\n }\n }\n else {\n selectedElements = (!isNullOrUndefined(this.getSelectedItems())) ?\n this.getSelectedItems().data : undefined;\n var fields_1 = this.getElementUID(obj);\n var curAr_1;\n var curDS = this.findItemFromDS(this.dataSource, fields_1, true);\n if (curDS && obj) {\n var idx_3;\n curDS.some(function (data, index, arr) {\n var fieldData = getFieldValues(data, _this.listBaseOption.fields);\n if ((fields_1.id || fields_1.text) &&\n (!fields_1.id || fieldData[_this.fields.id] === fields_1.id) &&\n (!fields_1.text || fieldData[_this.fields.text] === fields_1.text)) {\n curAr_1 = arr;\n idx_3 = index;\n return true;\n }\n return false;\n });\n this.removeElement(this.getLiFromObjOrElement(curAr_1[idx_3]));\n curAr_1.splice(idx_3, 1);\n this.curViewDS = curAr_1;\n }\n var values = this.getSelectedItems();\n this.selectedData = (!isNullOrUndefined(values)) ? values.text : undefined;\n if (resetList && curAr_1) {\n this.resetList = true;\n this.resetCurrentList();\n if (!this.showCheckBox && !isNullOrUndefined(values)) {\n this.selectItem(values.item);\n }\n this.resetList = false;\n }\n }\n };\n /**\n * A function that removes multiple item from list view based on given input.\n * @param {Fields[] | HTMLElement[]} obj - We can pass array of elements or array of field Object with ID and Text fields.\n */\n ListView.prototype.removeMultipleItems = function (obj) {\n if (obj.length) {\n for (var i = 0; i < obj.length; i++) {\n (i === obj.length - 1) ? this.removeItemFromList(obj[i], true) : this.removeItemFromList(obj[i], false);\n }\n }\n };\n // Module Required function\n ListView.prototype.getModuleName = function () {\n return 'listview';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n */\n ListView.prototype.getPersistData = function () {\n return this.addOnPersist(['cssClass', 'enableRtl', 'htmlAttributes',\n 'enable', 'fields', 'animation', 'headerTitle',\n 'sortOrder', 'showIcon', 'height', 'width', 'showCheckBox', 'checkBoxPosition']);\n };\n __decorate([\n Property()\n ], ListView.prototype, \"cssClass\", void 0);\n __decorate([\n Property({})\n ], ListView.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(true)\n ], ListView.prototype, \"enable\", void 0);\n __decorate([\n Property([])\n ], ListView.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], ListView.prototype, \"query\", void 0);\n __decorate([\n Complex(ListBase.defaultMappedFields, FieldSettings)\n ], ListView.prototype, \"fields\", void 0);\n __decorate([\n Property({ effect: 'SlideLeft', duration: 400, easing: 'ease' })\n ], ListView.prototype, \"animation\", void 0);\n __decorate([\n Property('None')\n ], ListView.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showIcon\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showCheckBox\", void 0);\n __decorate([\n Property('Left')\n ], ListView.prototype, \"checkBoxPosition\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"headerTitle\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showHeader\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"template\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"groupTemplate\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionFailure\", void 0);\n ListView = __decorate([\n NotifyPropertyChanges\n ], ListView);\n return ListView;\n}(Component));\nexport { ListView };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { EventHandler, Property, Internationalization, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Animation, Browser } from '@syncfusion/ej2-base';\nimport { Event, cldrData, L10n, Component, getDefaultDateObject, rippleEffect } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, removeClass, closest, append, attributes, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, getValue, getUniqueID } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { ListBase, cssClass as ListBaseClasses } from '@syncfusion/ej2-lists';\nvar WRAPPERCLASS = 'e-time-wrapper';\nvar POPUP = 'e-popup';\nvar INPUTCONTAINER = 'e-input-group';\nvar ERROR = 'e-error';\nvar POPUPDIMENSION = '240px';\nvar DAY = new Date().getDate();\nvar MONTH = new Date().getMonth();\nvar YEAR = new Date().getFullYear();\nvar ROOT = 'e-timepicker';\nvar RTL = 'e-rtl';\nvar CONTENT = 'e-content';\nvar SELECTED = 'e-active';\nvar HOVER = 'e-hover';\nvar NAVIGATION = 'e-navigation';\nvar DISABLED = 'e-disabled';\nvar ICONANIMATION = 'e-icon-anim';\nvar FOCUS = 'e-input-focus';\nvar DEVICE = 'e-device';\nvar LISTCLASS = ListBaseClasses.li;\nvar HALFPOSITION = 2;\nvar ANIMATIONDURATION = 50;\nexport var TimePickerBase;\n(function (TimePickerBase) {\n function createListItems(min, max, globalize, timeFormat, step) {\n var start;\n var end;\n var interval = step * 60000;\n var listItems = [];\n var timeCollections = [];\n start = +(min.setMilliseconds(0));\n end = +(max.setMilliseconds(0));\n while (end >= start) {\n timeCollections.push(start);\n listItems.push(globalize.formatDate(new Date(start), { format: timeFormat, type: 'time' }));\n start += interval;\n }\n var listTag = ListBase.createList(listItems, null, true);\n return { collection: timeCollections, list: listTag };\n }\n TimePickerBase.createListItems = createListItems;\n})(TimePickerBase || (TimePickerBase = {}));\n/**\n * TimePicker is an intuitive interface component which provides an options to select a time value\n * from popup list or to set a desired time value.\n * ```\n * \n * \n * ```\n */\nvar TimePicker = /** @class */ (function (_super) {\n __extends(TimePicker, _super);\n /**\n * Constructor for creating the widget\n */\n function TimePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.liCollections = [];\n _this.timeCollections = [];\n _this.disableItemCollection = [];\n return _this;\n }\n /**\n * Initialize the event handler\n * @private\n */\n TimePicker.prototype.preRender = function () {\n this.keyConfigure = {\n enter: 'enter',\n escape: 'escape',\n end: 'end',\n tab: 'tab',\n home: 'home',\n down: 'downarrow',\n up: 'uparrow',\n left: 'leftarrow',\n right: 'rightarrow',\n open: 'alt+downarrow',\n close: 'alt+uparrow'\n };\n this.cloneElement = this.element.cloneNode(true);\n this.inputElement = this.element;\n this.angularTag = null;\n if (this.element.tagName === 'EJS-TIMEPICKER') {\n this.angularTag = this.element.tagName;\n this.inputElement = createElement('input');\n this.element.appendChild(this.inputElement);\n }\n };\n // element creation\n TimePicker.prototype.render = function () {\n this.initialize();\n this.createInputElement();\n this.setEnable();\n this.validateInterval();\n this.bindEvents();\n this.validateDisable();\n this.setValue(this.getFormattedValue(this.value));\n };\n TimePicker.prototype.validateDisable = function () {\n this.setMinMax(this.initMin, this.initMax);\n this.popupCreation();\n this.popupObj.hide();\n if ((!isNaN(+this.value) && this.value !== null)) {\n if (!this.valueIsDisable(this.value)) {\n //disable value given in value property so reset the date based on current date\n if (this.strictMode) {\n this.resetState();\n }\n this.initValue = null;\n this.initMax = this.getDateObject(this.initMax);\n this.initMin = this.getDateObject(this.initMin);\n this.timeCollections = this.liCollections = [];\n this.setMinMax(this.initMin, this.initMax);\n }\n }\n };\n TimePicker.prototype.initialize = function () {\n this.globalize = new Internationalization(this.locale);\n this.defaultCulture = new Internationalization('en');\n // persist the value property.\n this.setProperties({ value: this.checkDateValue(new Date('' + this.value)) }, true);\n this.setProperties({ min: this.checkDateValue(new Date('' + this.min)) }, true);\n this.setProperties({ max: this.checkDateValue(new Date('' + this.max)) }, true);\n this.checkAttributes(); //check the input element attributes\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('timepicker', localeText, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n this.initValue = this.checkDateValue(this.value);\n this.initMin = this.checkDateValue(this.min);\n this.initMax = this.checkDateValue(this.max);\n this.isNavigate = this.isPreventBlur = this.isTextSelected = false;\n this.activeIndex = this.valueWithMinutes = this.prevDate = null;\n if (!isNullOrUndefined(this.element.getAttribute('id'))) {\n if (this.angularTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n //for angular case\n this.element.id = getUniqueID('ej2_timepicker');\n if (this.angularTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n if (isNullOrUndefined(this.inputElement.getAttribute('name'))) {\n attributes(this.inputElement, { 'name': this.element.id });\n }\n };\n TimePicker.prototype.checkDateValue = function (value) {\n return (!isNullOrUndefined(value) && value instanceof Date && !isNaN(+value)) ? value : null;\n };\n TimePicker.prototype.createInputElement = function () {\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: this.cssClass,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n },\n buttons: [' e-input-group-icon e-time-icon e-icons']\n });\n this.inputWrapper.container.style.width = this.setWidth(this.width);\n attributes(this.inputElement, {\n 'aria-haspopup': 'true', 'aria-autocomplete': 'list', 'tabindex': '0', 'aria-activedescendant': 'null',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false', 'aria-disabled': 'false', 'aria-invalid': 'false'\n });\n if (!this.isNullOrEmpty(this.inputStyle)) {\n Input.addAttributes({ 'style': this.inputStyle }, this.inputElement);\n }\n addClass([this.inputWrapper.container], WRAPPERCLASS);\n };\n // destroy function\n TimePicker.prototype.destroy = function () {\n this.hide();\n this.unBindEvents();\n var ariaAttribute = {\n 'aria-haspopup': 'true', 'aria-autocomplete': 'list', 'tabindex': '0', 'aria-activedescendant': 'null',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false', 'aria-disabled': 'true', 'aria-invalid': 'false'\n };\n Input.removeAttributes(ariaAttribute, this.inputElement);\n if (this.angularTag === null) {\n this.inputWrapper.container.parentElement.appendChild(this.inputElement);\n }\n this.ensureInputAttribute();\n this.enableElement([this.inputElement]);\n this.inputElement.classList.remove('e-input');\n if (isNullOrUndefined(this.cloneElement.getAttribute('disabled'))) {\n Input.setEnabled(true, this.inputElement, this.floatLabelType);\n }\n remove(this.inputWrapper.container);\n this.inputWrapper = this.popupWrapper = this.cloneElement = undefined;\n this.liCollections = this.timeCollections = this.disableItemCollection = [];\n if (!isNullOrUndefined(this.rippleFn)) {\n this.rippleFn();\n }\n _super.prototype.destroy.call(this);\n };\n TimePicker.prototype.ensureInputAttribute = function () {\n for (var i = 0; i < this.inputElement.attributes.length; i++) {\n var prop = this.inputElement.attributes[i].name;\n if (isNullOrUndefined(this.cloneElement.getAttribute(prop))) {\n if (prop.toLowerCase() === 'value' || isNullOrUndefined(this.cloneElement.getAttribute('value'))) {\n this.inputElement.value = '';\n }\n this.inputElement.removeAttribute(prop);\n }\n }\n };\n //popup creation\n TimePicker.prototype.popupCreation = function () {\n this.popupWrapper = createElement('div', {\n className: ROOT + ' ' + POPUP,\n attrs: { 'id': this.element.id + '_popup', 'style': 'visibility:hidden' }\n });\n if (!isNullOrUndefined(this.cssClass)) {\n this.popupWrapper.classList.add(this.cssClass);\n }\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.generateList();\n append([this.listWrapper], this.popupWrapper);\n }\n document.body.appendChild(this.popupWrapper);\n this.addSelection();\n this.renderPopup();\n this.setScrollPosition();\n };\n TimePicker.prototype.getPopupHeight = function () {\n var height = parseInt(POPUPDIMENSION, 10);\n var popupHeight = this.popupWrapper.getBoundingClientRect().height;\n return popupHeight > height ? height : popupHeight;\n };\n TimePicker.prototype.generateList = function () {\n this.createListItems();\n this.wireListEvents();\n var rippleModel = { duration: 300, selector: '.' + LISTCLASS };\n this.rippleFn = rippleEffect(this.listWrapper, rippleModel);\n this.liCollections = this.listWrapper.querySelectorAll('.' + LISTCLASS);\n };\n TimePicker.prototype.popupCalculation = function () {\n var left = 0;\n if (Browser.isDevice) {\n var firstItem = this.isEmptyList() ? this.listTag : this.liCollections[0];\n left = -(parseInt(getComputedStyle(firstItem).textIndent, 10) -\n (this.enableRtl ? parseInt(getComputedStyle(this.inputElement).paddingRight, 10) :\n parseInt(getComputedStyle(this.inputElement).paddingLeft, 10)));\n }\n return left;\n };\n TimePicker.prototype.isEmptyList = function () {\n return !isNullOrUndefined(this.liCollections) && this.liCollections.length === 0 ||\n isNullOrUndefined(this.liCollections);\n };\n TimePicker.prototype.renderPopup = function () {\n var _this = this;\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n var offset = Browser.isDevice ? this.setPopupPosition() : 2;\n this.popupObj = new Popup(this.popupWrapper, {\n width: this.setPopupWidth(this.width),\n zIndex: this.zIndex,\n targetType: 'relative',\n collision: { X: 'flip', Y: 'flip' },\n relateTo: this.inputWrapper.container,\n position: { X: 'left', Y: 'bottom' },\n enableRtl: this.enableRtl,\n offsetY: offset,\n offsetX: this.popupCalculation(),\n open: function () {\n _this.popupWrapper.style.visibility = 'visible';\n addClass([_this.inputWrapper.buttons[0]], SELECTED);\n }, close: function () {\n removeClass([_this.inputWrapper.buttons[0]], SELECTED);\n _this.unWireListEvents();\n _this.inputElement.setAttribute('aria-activedescendant', 'null');\n remove(_this.popupObj.element);\n _this.popupObj.destroy();\n _this.popupWrapper.innerHTML = '';\n _this.listWrapper = _this.popupWrapper = _this.listTag = undefined;\n }\n });\n if (!Browser.isDevice) {\n this.popupObj.collision = { X: 'none', Y: 'flip' };\n }\n this.popupObj.element.style.maxHeight = POPUPDIMENSION;\n };\n //util function\n TimePicker.prototype.getFormattedValue = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n else {\n return this.globalize.formatDate(value, { skeleton: 'medium', type: 'time' });\n }\n };\n TimePicker.prototype.getDateObject = function (text) {\n if (!this.isNullOrEmpty(text)) {\n var dateValue = this.createDateObj(text);\n var value = !this.isNullOrEmpty(this.initValue);\n if (this.checkDateValue(dateValue)) {\n var date = value ? this.initValue.getDate() : DAY;\n var month = value ? this.initValue.getMonth() : MONTH;\n var year = value ? this.initValue.getFullYear() : YEAR;\n return new Date(year, month, date, dateValue.getHours(), dateValue.getMinutes(), dateValue.getSeconds());\n }\n }\n return null;\n };\n TimePicker.prototype.checkErrorState = function (val) {\n var value = this.getDateObject(val);\n if (this.validateState(value)) {\n removeClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n }\n else {\n addClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'true' });\n }\n };\n TimePicker.prototype.validateInterval = function () {\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.enableElement([this.inputWrapper.buttons[0]]);\n }\n else {\n this.disableTimeIcon();\n }\n };\n TimePicker.prototype.disableTimeIcon = function () {\n this.disableElement([this.inputWrapper.buttons[0]]);\n this.hide();\n };\n TimePicker.prototype.disableElement = function (element) {\n addClass(element, DISABLED);\n };\n TimePicker.prototype.enableElement = function (element) {\n removeClass(element, DISABLED);\n };\n TimePicker.prototype.selectInputText = function () {\n this.inputElement.setSelectionRange(0, (this.inputElement).value.length);\n };\n TimePicker.prototype.getMeridianText = function () {\n var meridian;\n if (this.locale === 'en' || this.locale === 'en-US') {\n meridian = getValue('dayPeriods.format.wide', getDefaultDateObject());\n }\n else {\n meridian = getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.dayPeriods.format.abbreviated', cldrData);\n }\n return meridian;\n };\n TimePicker.prototype.getCursorSelection = function () {\n var input = (this.inputElement);\n var start = 0;\n var end = 0;\n if (!isNaN(input.selectionStart)) {\n start = input.selectionStart;\n end = input.selectionEnd;\n }\n return { start: Math.abs(start), end: Math.abs(end) };\n };\n TimePicker.prototype.getActiveElement = function () {\n if (!isNullOrUndefined(this.popupWrapper)) {\n return this.popupWrapper.querySelectorAll('.' + SELECTED);\n }\n else {\n return null;\n }\n };\n TimePicker.prototype.isNullOrEmpty = function (value) {\n if (isNullOrUndefined(value) || (typeof value === 'string' && value.trim() === '')) {\n return true;\n }\n else {\n return false;\n }\n };\n TimePicker.prototype.setWidth = function (width) {\n if (typeof width === 'number') {\n width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n width = width;\n }\n else {\n width = '100%';\n }\n return width;\n };\n TimePicker.prototype.setPopupWidth = function (width) {\n width = this.setWidth(width);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.containerStyle.width * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n if (Browser.isDevice) {\n var firstItem = this.isEmptyList() ? this.listTag : this.liCollections[0];\n width = (parseInt(width, 10) + (parseInt(getComputedStyle(firstItem).textIndent, 10) -\n parseInt(getComputedStyle(this.inputElement).textIndent, 10) +\n parseInt(getComputedStyle(this.inputElement.parentElement).borderLeftWidth, 10)) * 2) + 'px';\n }\n return width;\n };\n TimePicker.prototype.setScrollPosition = function () {\n var listHeight = this.getPopupHeight();\n var element;\n element = this.selectedElement;\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else if (this.popupWrapper && this.checkDateValue(this.scrollTo)) {\n this.setScrollTo();\n }\n };\n TimePicker.prototype.findScrollTop = function (element) {\n var listHeight = this.getPopupHeight();\n var nextEle = element.nextElementSibling;\n var height = nextEle ? nextEle.offsetTop : element.offsetTop;\n var liHeight = element.getBoundingClientRect().height;\n if ((height + element.offsetTop) > listHeight) {\n this.popupWrapper.scrollTop = nextEle ? (height - (listHeight / HALFPOSITION + liHeight / HALFPOSITION)) : height;\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n };\n TimePicker.prototype.setScrollTo = function () {\n var element;\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n var initialTime = this.timeCollections[0];\n var scrollTime = this.getDateObject(this.checkDateValue(this.scrollTo)).getTime();\n element = items[Math.round((scrollTime - initialTime) / (this.step * 60000))];\n }\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n };\n TimePicker.prototype.getText = function () {\n return (isNullOrUndefined(this.checkDateValue(this.value))) ? '' : this.getValue(this.value);\n };\n TimePicker.prototype.getValue = function (value) {\n return (isNullOrUndefined(this.checkDateValue(value))) ? null : this.globalize.formatDate(value, {\n format: this.cldrTimeFormat(), type: 'time'\n });\n };\n TimePicker.prototype.cldrDateFormat = function () {\n var cldrDate;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrDate = (getValue('dateFormats.short', getDefaultDateObject()));\n }\n else {\n cldrDate = (this.getCultureDateObject(cldrData, '' + this.locale));\n }\n return cldrDate;\n };\n TimePicker.prototype.cldrTimeFormat = function () {\n var cldrTime;\n if (this.isNullOrEmpty(this.format)) {\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n }\n else {\n cldrTime = this.format;\n }\n return cldrTime;\n };\n TimePicker.prototype.dateToNumeric = function () {\n var cldrTime;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.medium', getDefaultDateObject()));\n }\n else {\n cldrTime = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.timeFormats.medium', cldrData));\n }\n return cldrTime;\n };\n TimePicker.prototype.getExactDateTime = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n else {\n return this.globalize.formatDate(value, { format: this.dateToNumeric(), type: 'time' });\n }\n };\n TimePicker.prototype.setValue = function (value) {\n var time = this.checkValue(value);\n if (!this.strictMode && !this.validateState(time)) {\n this.initValue = this.valueWithMinutes = null;\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n if (this.isNullOrEmpty(time)) {\n this.initValue = null;\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n this.initValue = this.getDateObject(time);\n }\n }\n this.updateInput(true, this.initValue);\n };\n TimePicker.prototype.updatePlaceHolder = function () {\n Input.setPlaceholder(this.l10n.getConstant('placeholder'), this.inputElement);\n };\n //event related functions\n TimePicker.prototype.popupHandler = function () {\n if (this.isPopupOpen()) {\n this.closePopup();\n }\n else {\n if (!Browser.isDevice) {\n this.inputElement.focus();\n }\n this.show();\n addClass([this.inputWrapper.container], FOCUS);\n }\n };\n TimePicker.prototype.mouseDownHandler = function () {\n if (!this.readonly) {\n var curPos = this.getCursorSelection();\n this.inputElement.setSelectionRange(0, 0);\n EventHandler.add(this.inputElement, 'mouseup', this.mouseUpHandler, this);\n }\n };\n TimePicker.prototype.mouseUpHandler = function (event) {\n if (!this.readonly) {\n event.preventDefault();\n EventHandler.remove(this.inputElement, 'mouseup', this.mouseUpHandler);\n var curPos = this.getCursorSelection();\n if (!(curPos.start === 0 && curPos.end === this.inputElement.value.length)) {\n if (this.inputElement.value.length > 0) {\n this.cursorDetails = this.focusSelection();\n }\n this.inputElement.setSelectionRange(this.cursorDetails.start, this.cursorDetails.end);\n }\n }\n };\n TimePicker.prototype.focusSelection = function () {\n var regex = new RegExp('^[a-zA-Z0-9]+$');\n var split = this.inputElement.value.split('');\n split.push(' ');\n var curPos = this.getCursorSelection();\n var start = 0;\n var end = 0;\n var isSeparator = false;\n if (!this.isTextSelected) {\n for (var i = 0; i < split.length; i++) {\n if (!regex.test(split[i])) {\n end = i;\n isSeparator = true;\n }\n if (isSeparator) {\n if (curPos.start >= start && curPos.end <= end) {\n end = end;\n this.isTextSelected = true;\n break;\n }\n else {\n start = i + 1;\n isSeparator = false;\n }\n }\n }\n }\n else {\n start = curPos.start;\n end = curPos.end;\n this.isTextSelected = false;\n }\n return { start: start, end: end };\n };\n TimePicker.prototype.inputHandler = function (event) {\n if (!this.readonly && this.enabled) {\n if (event.action !== 'right' && event.action !== 'left' && event.action !== 'tab') {\n event.preventDefault();\n }\n switch (event.action) {\n case 'home':\n case 'end':\n case 'up':\n case 'down':\n this.keyHandler(event);\n break;\n case 'enter':\n if (this.isNavigate) {\n this.selectedElement = this.liCollections[this.activeIndex];\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n this.updateValue(this.valueWithMinutes, event);\n }\n else {\n this.updateValue(this.inputElement.value, event);\n }\n this.hide();\n addClass([this.inputWrapper.container], FOCUS);\n this.isNavigate = false;\n break;\n case 'open':\n this.show();\n break;\n case 'escape':\n Input.setValue(this.objToString(this.value), this.inputElement, this.floatLabelType, this.showClearButton);\n this.previousState(this.value);\n this.hide();\n break;\n case 'close':\n this.hide();\n break;\n default:\n this.isNavigate = false;\n break;\n }\n }\n };\n TimePicker.prototype.onMouseClick = function (event) {\n var target = event.target;\n var li = this.selectedElement = closest(target, '.' + LISTCLASS);\n this.setSelection(li, event);\n if (li && li.classList.contains(LISTCLASS)) {\n this.hide();\n if (!Browser.isDevice) {\n addClass([this.inputWrapper.container], FOCUS);\n }\n }\n };\n TimePicker.prototype.closePopup = function (delay) {\n if (this.isPopupOpen() && this.popupObj) {\n var args = {\n popup: this.popupObj\n };\n this.trigger('close', args);\n var animModel = {\n name: 'FadeOut',\n duration: ANIMATIONDURATION,\n delay: delay ? delay : 0\n };\n this.popupObj.hide(new Animation(animModel));\n removeClass([this.inputWrapper.container], [ICONANIMATION, FOCUS]);\n attributes(this.inputElement, { 'aria-expanded': 'false' });\n EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n }\n };\n TimePicker.prototype.checkValueChange = function (event, isNavigation) {\n if (!this.strictMode && !this.validateState(this.valueWithMinutes)) {\n this.initValue = this.valueWithMinutes = null;\n this.setProperties({ value: this.getDateObject(this.inputElement.value) }, true);\n this.prevValue = this.inputElement.value;\n if (+this.prevDate !== +this.value) {\n this.changeEvent(event);\n }\n }\n else {\n if (!isNavigation) {\n if ((this.prevValue !== this.inputElement.value) || isNullOrUndefined(this.checkDateValue(this.value))) {\n this.valueProcess(event, this.getDateObject(this.inputElement.value));\n }\n }\n else {\n var value = this.getDateObject(new Date(this.timeCollections[this.activeIndex]));\n if (+this.prevDate !== +value) {\n this.valueProcess(event, value);\n }\n }\n }\n };\n TimePicker.prototype.onMouseOver = function (event) {\n var currentLi = closest(event.target, '.' + LISTCLASS);\n this.setHover(currentLi, HOVER);\n };\n TimePicker.prototype.setHover = function (li, className) {\n if (this.enabled && this.isValidLI(li) && !li.classList.contains(className)) {\n this.removeHover(className);\n addClass([li], className);\n if (className === NAVIGATION) {\n li.setAttribute('aria-selected', 'true');\n }\n }\n };\n TimePicker.prototype.setSelection = function (li, event) {\n if (this.isValidLI(li) && !li.classList.contains(SELECTED)) {\n this.checkValue(li.getAttribute('data-value'));\n this.selectedElement = li;\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(li);\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n addClass([this.selectedElement], SELECTED);\n this.selectedElement.setAttribute('aria-selected', 'true');\n this.checkValueChange(event, true);\n }\n };\n TimePicker.prototype.onMouseLeave = function () {\n this.removeHover(HOVER);\n };\n TimePicker.prototype.scrollHandler = function () {\n if (this.getModuleName() === 'timepicker' && Browser.isDevice) {\n return;\n }\n else {\n this.hide();\n }\n };\n TimePicker.prototype.setMinMax = function (minVal, maxVal) {\n if (isNullOrUndefined(this.checkDateValue(minVal))) {\n this.initMin = this.getDateObject('12:00:00 AM');\n }\n if (isNullOrUndefined(this.checkDateValue(maxVal))) {\n this.initMax = this.getDateObject('11:59:59 PM');\n }\n };\n //protected function\n TimePicker.prototype.validateMinMax = function (dateVal, minVal, maxVal) {\n var value = dateVal instanceof Date ? dateVal : this.getDateObject(dateVal);\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n dateVal = this.strictOperation(this.initMin, this.initMax, dateVal, value);\n }\n else if (+(this.createDateObj(this.getFormattedValue(this.initMin))) >\n +(this.createDateObj(this.getFormattedValue(this.initMax)))) {\n this.disableTimeIcon();\n }\n if (this.strictMode) {\n dateVal = this.valueIsDisable(dateVal) ? dateVal : null;\n }\n this.checkErrorState(dateVal);\n return dateVal;\n };\n TimePicker.prototype.valueIsDisable = function (value) {\n if (this.disableItemCollection.length > 0) {\n if (this.disableItemCollection.length === this.timeCollections.length) {\n return false;\n }\n var time = value instanceof Date ? this.objToString(value) : value;\n for (var index = 0; index < this.disableItemCollection.length; index++) {\n if (time === this.disableItemCollection[index]) {\n return false;\n }\n }\n }\n return true;\n };\n TimePicker.prototype.validateState = function (val) {\n if (!this.strictMode) {\n if (this.valueIsDisable(val)) {\n var value = typeof val === 'string' ? this.setCurrentDate(this.getDateObject(val)) :\n this.setCurrentDate(this.getDateObject(val));\n var maxValue = this.setCurrentDate(this.getDateObject(this.initMax));\n var minValue = this.setCurrentDate(this.getDateObject(this.initMin));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n if ((+(value) > +(maxValue)) || (+(value) < +(minValue))) {\n return false;\n }\n }\n else {\n if ((+(maxValue) < +(minValue)) || this.inputElement.value !== '') {\n return false;\n }\n }\n }\n else {\n return false;\n }\n }\n return true;\n };\n TimePicker.prototype.strictOperation = function (minimum, maximum, dateVal, val) {\n var maxValue = this.createDateObj(this.getFormattedValue(maximum));\n var minValue = this.createDateObj(this.getFormattedValue(minimum));\n var value = this.createDateObj(this.getFormattedValue(val));\n if (this.strictMode) {\n if (+minValue > +maxValue) {\n this.disableTimeIcon();\n this.initValue = this.getDateObject(maxValue);\n Input.setValue(this.getValue(this.initValue), this.inputElement, this.floatLabelType, this.showClearButton);\n return this.inputElement.value;\n }\n else if (+minValue >= +value) {\n return this.getDateObject(minValue);\n }\n else if (+value >= +maxValue || +minValue === +maxValue) {\n return this.getDateObject(maxValue);\n }\n }\n else {\n if (+minValue > +maxValue) {\n this.disableTimeIcon();\n if (!isNaN(+this.createDateObj(dateVal))) {\n return dateVal;\n }\n }\n }\n return dateVal;\n };\n TimePicker.prototype.bindEvents = function () {\n EventHandler.add(this.inputWrapper.buttons[0], 'click', this.popupHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.focusOut, this);\n EventHandler.add(this.inputElement, 'focus', this.focusIn, this);\n this.bindClearEvent();\n if (!Browser.isDevice) {\n this.inputEvent = new KeyboardEvents(this.inputWrapper.container, {\n keyAction: this.inputHandler.bind(this), keyConfigs: this.keyConfigure, eventName: 'keydown'\n });\n EventHandler.add(this.inputElement, 'mousedown touchstart', this.mouseDownHandler, this);\n }\n };\n TimePicker.prototype.unBindEvents = function () {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.popupHandler);\n EventHandler.remove(this.inputElement, 'blur', this.focusOut);\n EventHandler.remove(this.inputElement, 'focus', this.focusIn);\n if (this.inputEvent) {\n this.inputEvent.destroy();\n }\n EventHandler.remove(this.inputElement, 'mousedown touchstart', this.mouseDownHandler);\n };\n TimePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.clearHandler, this);\n }\n };\n TimePicker.prototype.clearHandler = function (e) {\n e.preventDefault();\n this.clear(e);\n };\n TimePicker.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n this.initValue = null;\n this.resetState();\n this.changeEvent(event);\n };\n TimePicker.prototype.setZIndex = function () {\n if (this.popupObj) {\n this.popupObj.zIndex = this.zIndex;\n this.popupObj.dataBind();\n }\n };\n TimePicker.prototype.checkAttributes = function () {\n var attributes = ['step', 'disabled', 'readonly', 'style', 'name', 'value', 'min', 'max', 'placeholder'];\n var value;\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n var enabled = isNullOrUndefined(this.inputElement.getAttribute(prop));\n this.setProperties({ enabled: enabled }, true);\n break;\n case 'readonly':\n var readonly = !isNullOrUndefined(this.inputElement.getAttribute(prop));\n this.setProperties({ readonly: readonly }, true);\n break;\n case 'style':\n this.inputStyle = this.inputElement.getAttribute(prop);\n break;\n case 'name':\n this.inputElement.setAttribute('name', this.inputElement.getAttribute(prop));\n break;\n case 'step':\n this.step = parseInt(this.inputElement.getAttribute(prop), 10);\n break;\n case 'placeholder':\n this.placeholder = this.inputElement.getAttribute(prop);\n break;\n case 'min':\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.setProperties({ min: value }, true);\n }\n break;\n case 'max':\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.setProperties({ max: value }, true);\n }\n break;\n case 'value':\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.initValue = value;\n this.updateInput(false, this.initValue);\n }\n break;\n }\n }\n }\n };\n TimePicker.prototype.setCurrentDate = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n return new Date(YEAR, MONTH, DAY, value.getHours(), value.getMinutes(), value.getSeconds());\n };\n TimePicker.prototype.getSeparator = function () {\n var result = '';\n var formats = this.cldrTimeFormat().split(' ')[this.getTextFormat()];\n if (isNullOrUndefined(formats)) {\n if (this.cldrTimeFormat().indexOf('a') === 0) {\n formats = 'a ' + this.cldrTimeFormat().split('a')[1];\n }\n else if (this.cldrTimeFormat().indexOf('a') === this.cldrTimeFormat().length - 1) {\n formats = this.cldrTimeFormat().split('a')[0] + ' a';\n }\n }\n var regex = new RegExp('^[a-zA-Z0-9]+$');\n for (var i = 0; i < formats.length; i++) {\n if (!regex.test(formats.charAt(i))) {\n result = formats.charAt(i);\n }\n }\n return result;\n };\n TimePicker.prototype.getTextFormat = function () {\n var time = 0;\n if (this.cldrTimeFormat().split(' ')[0] === 'a' || this.cldrTimeFormat().indexOf('a') === 0) {\n time = 1;\n }\n else if (this.cldrTimeFormat().indexOf('a') < 0) {\n var strArray = this.cldrTimeFormat().split(' ');\n for (var i = 0; i < strArray.length; i++) {\n if (strArray[i].toLowerCase().indexOf('h') >= 0) {\n time = i;\n break;\n }\n }\n }\n return time;\n };\n TimePicker.prototype.updateValue = function (value, event) {\n var val;\n if (this.isNullOrEmpty(value)) {\n this.resetState();\n }\n else {\n val = this.checkValue(value);\n if (this.strictMode) {\n // this case set previous value to the text box when set invalid date\n var inputVal = (val === null && value.trim().length > 0) ?\n this.previousState(this.prevDate) : this.inputElement.value;\n Input.setValue(inputVal, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n }\n this.checkValueChange(event, typeof value === 'string' ? false : true);\n };\n TimePicker.prototype.previousState = function (date) {\n var value = this.getDateObject(date);\n for (var i = 0; i < this.timeCollections.length; i++) {\n if (+value === this.timeCollections[i]) {\n this.activeIndex = i;\n this.selectedElement = this.liCollections[i];\n this.valueWithMinutes = new Date(this.timeCollections[i]);\n break;\n }\n }\n return this.prevValue;\n };\n TimePicker.prototype.resetState = function () {\n this.removeSelection();\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.valueWithMinutes = this.activeIndex = null;\n if (!this.strictMode) {\n this.checkErrorState(null);\n }\n };\n TimePicker.prototype.objToString = function (val) {\n if (isNullOrUndefined(this.checkDateValue(val))) {\n return null;\n }\n else {\n return this.globalize.formatDate(val, { format: this.cldrTimeFormat(), type: 'time' });\n }\n };\n TimePicker.prototype.checkValue = function (value) {\n if (!this.isNullOrEmpty(value)) {\n var date = value instanceof Date ? value : this.getDateObject(value);\n return this.validateValue(date, value);\n }\n this.resetState();\n return this.valueWithMinutes = null;\n };\n TimePicker.prototype.validateValue = function (date, value) {\n var time;\n var val = this.validateMinMax(value, this.min, this.max);\n var newval = this.createDateObj(val);\n if (this.getFormattedValue(newval) !== this.getFormattedValue(this.value)) {\n this.valueWithMinutes = isNullOrUndefined(newval) ? null : newval;\n time = this.objToString(this.valueWithMinutes);\n }\n else {\n if (this.strictMode) {\n //for strict mode case, when value not present within a range. Reset the nearest range value.\n date = newval;\n }\n this.valueWithMinutes = this.checkDateValue(date);\n time = this.objToString(this.valueWithMinutes);\n }\n if (!this.strictMode && isNullOrUndefined(time)) {\n var value_1 = val.trim().length > 0 ? val : '';\n Input.setValue(value_1, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n Input.setValue(time, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n return time;\n };\n TimePicker.prototype.findNextElement = function (event) {\n var textVal = (this.inputElement).value;\n var value = isNullOrUndefined(this.valueWithMinutes) ? this.createDateObj(textVal) :\n this.getDateObject(this.valueWithMinutes);\n var timeVal = null;\n var count = this.liCollections.length;\n if (!isNullOrUndefined(this.checkDateValue(value)) || !isNullOrUndefined(this.activeIndex)) {\n if (event.action === 'home') {\n var index = this.validLiElement(0);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n }\n else if (event.action === 'end') {\n var index = this.validLiElement(this.timeCollections.length - 1, true);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n }\n else {\n if (event.action === 'down') {\n for (var i = 0; i < count; i++) {\n if (+value < this.timeCollections[i]) {\n var index = this.validLiElement(i);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n else if (i === count - 1) {\n var index = this.validLiElement(0);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n }\n }\n else {\n for (var i = count - 1; i >= 0; i--) {\n if (+value > this.timeCollections[i]) {\n var index = this.validLiElement(i, true);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n else if (i === 0) {\n var index = this.validLiElement(count - 1);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n }\n }\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.elementValue(isNullOrUndefined(timeVal) ? null : new Date(timeVal));\n }\n else {\n var index = this.validLiElement(0, event.action === 'down' ? false : true);\n this.activeIndex = index;\n this.selectedElement = this.liCollections[index];\n this.elementValue(new Date(this.timeCollections[index]));\n }\n };\n TimePicker.prototype.elementValue = function (value) {\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.checkValue(value);\n }\n };\n TimePicker.prototype.validLiElement = function (index, backward) {\n var elementIndex = null;\n var items = isNullOrUndefined(this.popupWrapper) ? this.liCollections :\n this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n var isCheck = true;\n if (items.length) {\n if (backward) {\n for (var i = index; i >= 0; i--) {\n if (!items[i].classList.contains(DISABLED)) {\n elementIndex = i;\n break;\n }\n else if (i === 0) {\n if (isCheck) {\n index = i = items.length;\n isCheck = false;\n }\n }\n }\n }\n else {\n for (var i = index; i <= items.length - 1; i++) {\n if (!items[i].classList.contains(DISABLED)) {\n elementIndex = i;\n break;\n }\n else if (i === items.length - 1) {\n if (isCheck) {\n index = i = -1;\n isCheck = false;\n }\n }\n }\n }\n }\n return elementIndex;\n };\n TimePicker.prototype.keyHandler = function (event) {\n if (isNullOrUndefined(this.step) || this.step <= 0 || this.inputWrapper.buttons[0].classList.contains(DISABLED)) {\n return;\n }\n var count = this.timeCollections.length;\n if (isNullOrUndefined(this.getActiveElement()) || this.getActiveElement().length === 0) {\n if (this.liCollections.length > 0) {\n if (isNullOrUndefined(this.value) && isNullOrUndefined(this.activeIndex)) {\n var index = this.validLiElement(0, event.action === 'down' ? false : true);\n this.activeIndex = index;\n this.selectedElement = this.liCollections[index];\n this.elementValue(new Date(this.timeCollections[index]));\n }\n else {\n this.findNextElement(event);\n }\n }\n else {\n this.findNextElement(event);\n }\n }\n else {\n var nextItem = void 0;\n if ((event.keyCode >= 37) && (event.keyCode <= 40)) {\n var index = (event.keyCode === 40 || event.keyCode === 39) ? ++this.activeIndex : --this.activeIndex;\n this.activeIndex = index = this.activeIndex === (count) ? 0 : this.activeIndex;\n this.activeIndex = index = this.activeIndex < 0 ? (count - 1) : this.activeIndex;\n this.activeIndex = index = this.validLiElement(this.activeIndex, (event.keyCode === 40 || event.keyCode === 39) ?\n false : true);\n nextItem = isNullOrUndefined(this.timeCollections[index]) ? this.timeCollections[0] : this.timeCollections[index];\n }\n else if (event.action === 'home') {\n var index = this.validLiElement(0);\n this.activeIndex = index;\n nextItem = this.timeCollections[index];\n }\n else if (event.action === 'end') {\n var index = this.validLiElement(count - 1, true);\n this.activeIndex = index;\n nextItem = this.timeCollections[index];\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.elementValue(new Date(nextItem));\n }\n this.isNavigate = true;\n this.setHover(this.selectedElement, NAVIGATION);\n this.setActiveDescendant();\n this.selectInputText();\n if (this.isPopupOpen() && this.selectedElement !== null && (!event || event.type !== 'click')) {\n this.setScrollPosition();\n }\n };\n TimePicker.prototype.setPopupPosition = function () {\n var offsetValue;\n var padding = 1;\n var popupHeight = this.getPopupHeight();\n var element = this.getActiveElement();\n var liHeight = this.liCollections[0].getBoundingClientRect().height;\n var listHeight = popupHeight / HALFPOSITION;\n var height = element.length === 0 ? this.liCollections[0].offsetTop : element[0].offsetTop;\n var lastItemOffsetValue = this.liCollections[this.liCollections.length - 1].offsetTop;\n var ulPadding = (parseInt(getComputedStyle(this.listTag).paddingTop, 10));\n if (lastItemOffsetValue - listHeight < height) {\n var count = popupHeight / liHeight;\n offsetValue = (count - (this.liCollections.length - this.activeIndex)) * liHeight - ulPadding - HALFPOSITION;\n }\n else if ((height + liHeight) > listHeight) {\n offsetValue = listHeight - liHeight / HALFPOSITION;\n }\n else {\n offsetValue = height;\n }\n offsetValue = offsetValue + HALFPOSITION + ((liHeight - this.containerStyle.height) / HALFPOSITION);\n return -offsetValue;\n };\n TimePicker.prototype.getCultureTimeObject = function (ld, c) {\n return getValue('main.' + c + '.dates.calendars.gregorian.timeFormats.short', ld);\n };\n TimePicker.prototype.getCultureDateObject = function (ld, c) {\n return getValue('main.' + c + '.dates.calendars.gregorian.dateFormats.short', ld);\n };\n TimePicker.prototype.wireListEvents = function () {\n EventHandler.add(this.listWrapper, 'click', this.onMouseClick, this);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n };\n TimePicker.prototype.unWireListEvents = function () {\n if (this.listWrapper) {\n EventHandler.remove(this.listWrapper, 'click', this.onMouseClick);\n if (!Browser.isDevice) {\n EventHandler.remove(this.listWrapper, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.listWrapper, 'mouseout', this.onMouseLeave);\n }\n }\n };\n TimePicker.prototype.valueProcess = function (event, value) {\n var result = (isNullOrUndefined(this.checkDateValue(value))) ? null : value;\n if (+this.prevDate !== +result) {\n this.initValue = result;\n this.changeEvent(event);\n }\n };\n TimePicker.prototype.changeEvent = function (event) {\n this.addSelection();\n this.updateInput(true, this.initValue);\n var eventArgs = {\n e: event,\n value: this.value,\n text: (this.inputElement).value,\n isInteracted: isNullOrUndefined(event) ? false : true\n };\n eventArgs.value = this.valueWithMinutes || this.getDateObject(this.inputElement.value);\n this.prevDate = this.valueWithMinutes || this.getDateObject(this.inputElement.value);\n this.trigger('change', eventArgs);\n };\n TimePicker.prototype.updateInput = function (isUpdate, date) {\n if (isUpdate) {\n this.prevValue = this.getValue(date);\n }\n this.prevDate = this.valueWithMinutes = date;\n this.setProperties({ value: date }, true);\n };\n TimePicker.prototype.setActiveDescendant = function () {\n if (!isNullOrUndefined(this.selectedElement)) {\n attributes(this.inputElement, { 'aria-activedescendant': this.selectedElement.getAttribute('id') });\n }\n else {\n attributes(this.inputElement, { 'aria-activedescendant': 'null' });\n }\n };\n TimePicker.prototype.removeSelection = function () {\n this.removeHover(HOVER);\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + SELECTED);\n if (items.length) {\n removeClass(items, SELECTED);\n items[0].removeAttribute('aria-selected');\n }\n }\n };\n TimePicker.prototype.removeHover = function (className) {\n var hoveredItem = this.getHoverItem(className);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, className);\n if (className === NAVIGATION) {\n hoveredItem[0].removeAttribute('aria-selected');\n }\n }\n };\n TimePicker.prototype.getHoverItem = function (className) {\n var hoveredItem;\n if (!isNullOrUndefined(this.popupWrapper)) {\n hoveredItem = this.popupWrapper.querySelectorAll('.' + className);\n }\n return hoveredItem;\n };\n TimePicker.prototype.setActiveClass = function () {\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n for (var i = 0; i < items.length; i++) {\n if (this.timeCollections[i] === +this.getDateObject(this.valueWithMinutes)) {\n items[i].setAttribute('aria-selected', 'true');\n this.selectedElement = items[i];\n this.activeIndex = i;\n break;\n }\n }\n }\n }\n };\n TimePicker.prototype.addSelection = function () {\n this.selectedElement = null;\n this.removeSelection();\n this.setActiveClass();\n if (!isNullOrUndefined(this.selectedElement)) {\n addClass([this.selectedElement], SELECTED);\n this.selectedElement.setAttribute('aria-selected', 'true');\n }\n };\n TimePicker.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(LISTCLASS) && !li.classList.contains(DISABLED));\n };\n TimePicker.prototype.createDateObj = function (val) {\n var today = this.globalize.formatDate(new Date(), { skeleton: 'short', type: 'date' });\n var value = null;\n if (typeof val === 'string') {\n if (val.toUpperCase().indexOf('AM') > -1 || val.toUpperCase().indexOf('PM') > -1) {\n today = this.defaultCulture.formatDate(new Date(), { skeleton: 'short', type: 'date' });\n value = isNaN(+new Date(today + ' ' + val)) ? null : new Date(new Date(today + ' ' + val).setMilliseconds(0));\n if (isNullOrUndefined(value)) {\n value = this.TimeParse(today, val);\n }\n }\n else {\n value = this.TimeParse(today, val);\n }\n }\n else if (val instanceof Date) {\n value = val;\n }\n return value;\n };\n TimePicker.prototype.TimeParse = function (today, val) {\n var value;\n value = this.globalize.parseDate(today + ' ' + val, {\n format: this.cldrDateFormat() + ' ' + this.cldrTimeFormat(), type: 'datetime'\n });\n value = isNullOrUndefined(value) ? this.globalize.parseDate(today + ' ' + val, {\n format: this.cldrDateFormat() + ' ' + this.dateToNumeric(), type: 'datetime'\n }) : value;\n value = isNullOrUndefined(value) ? value : new Date(value.setMilliseconds(0));\n return value;\n };\n TimePicker.prototype.createListItems = function () {\n var _this = this;\n this.listWrapper = createElement('div', { className: CONTENT, attrs: { 'tabindex': '0' } });\n var start;\n var end;\n var interval = this.step * 60000;\n var listItems = [];\n this.timeCollections = [];\n this.disableItemCollection = [];\n start = +(this.getDateObject(this.initMin).setMilliseconds(0));\n end = +(this.getDateObject(this.initMax).setMilliseconds(0));\n while (end >= start) {\n this.timeCollections.push(start);\n listItems.push(this.globalize.formatDate(new Date(start), { format: this.cldrTimeFormat(), type: 'time' }));\n start += interval;\n }\n var listBaseOptions = {\n itemCreated: function (args) {\n var eventArgs = {\n element: args.item,\n text: args.text, value: _this.getDateObject(args.text), isDisabled: false\n };\n _this.trigger('itemRender', eventArgs);\n if (eventArgs.isDisabled) {\n eventArgs.element.classList.add(DISABLED);\n }\n if (eventArgs.element.classList.contains(DISABLED)) {\n _this.disableItemCollection.push(eventArgs.element.getAttribute('data-value'));\n }\n }\n };\n this.listTag = ListBase.createList(listItems, listBaseOptions, true);\n attributes(this.listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options' });\n append([this.listTag], this.listWrapper);\n };\n TimePicker.prototype.documentClickHandler = function (event) {\n if (!Browser.isDevice) {\n event.preventDefault();\n }\n var target = event.target;\n if (!(closest(target, '#' + this.popupObj.element.id)) && target !== this.inputElement\n && target !== (this.inputWrapper && this.inputWrapper.buttons[0]) &&\n target !== (this.inputWrapper && this.inputWrapper.container)) {\n if (this.isPopupOpen()) {\n this.hide();\n }\n }\n else if (target !== this.inputElement) {\n if (!Browser.isDevice) {\n this.isPreventBlur = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.inputElement);\n event.preventDefault();\n }\n }\n };\n TimePicker.prototype.setEnableRtl = function () {\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n if (this.popupObj) {\n this.popupObj.enableRtl = this.enableRtl;\n this.popupObj.dataBind();\n }\n };\n TimePicker.prototype.setEnable = function () {\n Input.setEnabled(this.enabled, this.inputElement, this.floatLabelType);\n if (this.enabled) {\n removeClass([this.inputWrapper.container], DISABLED);\n attributes(this.inputElement, { 'aria-disabled': 'false' });\n }\n else {\n this.hide();\n addClass([this.inputWrapper.container], DISABLED);\n attributes(this.inputElement, { 'aria-disabled': 'true' });\n }\n };\n TimePicker.prototype.getProperty = function (date, val) {\n if (val === 'min') {\n this.initMin = this.checkDateValue(new Date('' + date.min));\n this.setProperties({ min: this.initMin }, true);\n }\n else {\n this.initMax = this.checkDateValue(new Date('' + date.max));\n this.setProperties({ max: this.initMax }, true);\n }\n if (this.inputElement.value === '') {\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n this.checkValue(this.inputElement.value);\n }\n this.checkValueChange(null, false);\n };\n /**\n * Focuses out the TimePicker textbox element.\n * @returns void\n */\n TimePicker.prototype.focusOut = function () {\n // IE popup closing issue when click over the scrollbar\n if (this.isPreventBlur && this.isPopupOpen()) {\n this.inputElement.focus();\n return;\n }\n this.closePopup();\n this.inputElement.blur();\n this.trigger('blur');\n if (this.getText() !== this.inputElement.value) {\n this.updateValue((this.inputElement).value, null);\n }\n else if (this.inputElement.value.trim().length === 0) {\n this.resetState();\n }\n this.cursorDetails = null;\n this.isNavigate = false;\n };\n TimePicker.prototype.isPopupOpen = function () {\n if (this.popupWrapper && this.popupWrapper.classList.contains('' + ROOT)) {\n return true;\n }\n return false;\n };\n /**\n * Focused the TimePicker textbox element.\n * @returns void\n */\n TimePicker.prototype.focusIn = function () {\n this.inputElement.focus();\n if (!this.readonly && !Browser.isDevice) {\n this.selectInputText();\n }\n this.trigger('focus');\n };\n /**\n * Hides the TimePicker popup.\n * @returns void\n */\n TimePicker.prototype.hide = function () {\n this.closePopup(100);\n };\n /**\n * Opens the popup to show the list items.\n * @returns void\n */\n TimePicker.prototype.show = function () {\n if (!this.isPopupOpen() && this.enabled && !this.readonly && !this.inputWrapper.buttons[0].classList.contains(DISABLED)) {\n this.popupCreation();\n var args = {\n popup: this.popupObj\n };\n this.trigger('open', args);\n var openAnimation = {\n name: 'FadeIn',\n duration: ANIMATIONDURATION,\n };\n this.popupObj.refreshPosition(this.inputElement);\n this.popupObj.show(new Animation(openAnimation));\n this.setActiveDescendant();\n attributes(this.inputElement, { 'aria-expanded': 'true' });\n EventHandler.add(document, 'mousedown touchstart', this.documentClickHandler, this);\n }\n };\n /**\n * Gets the properties to be maintained upon browser refresh.\n * @returns string\n */\n TimePicker.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * To get component name\n * @private\n */\n TimePicker.prototype.getModuleName = function () {\n return 'timepicker';\n };\n /**\n * Called internally if any of the property value changed.\n * returns void\n * @private\n */\n TimePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n this.inputElement.setAttribute('aria-placeholder', newProp.placeholder);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement, this.floatLabelType);\n if (this.readonly) {\n this.hide();\n }\n break;\n case 'cssClass':\n addClass([this.inputWrapper.container], [newProp.cssClass]);\n if (this.popupWrapper) {\n addClass([this.popupWrapper], [newProp.cssClass]);\n }\n this.setProperties({ cssClass: newProp.cssClass }, true);\n break;\n case 'enabled':\n this.setProperties({ enabled: newProp.enabled }, true);\n this.setEnable();\n break;\n case 'enableRtl':\n this.setProperties({ enableRtl: newProp.enableRtl }, true);\n this.setEnableRtl();\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n this.setZIndex();\n break;\n case 'min':\n case 'max':\n this.getProperty(newProp, prop);\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n break;\n case 'locale':\n this.setProperties({ locale: newProp.locale }, true);\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.updatePlaceHolder();\n this.setValue(this.value);\n break;\n case 'width':\n setStyleAttribute(this.inputWrapper.container, { 'width': this.setWidth(newProp.width) });\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.setValue(this.value);\n break;\n case 'value':\n newProp.value = this.checkDateValue(new Date('' + newProp.value));\n this.initValue = newProp.value;\n this.setProperties({ value: isNullOrUndefined(this.checkValue(newProp.value)) ? null : newProp.value }, true);\n this.checkValueChange(null, false);\n break;\n case 'strictMode':\n if (newProp.strictMode) {\n this.checkErrorState(null);\n }\n this.setProperties({ strictMode: newProp.strictMode }, true);\n this.checkValue((this.inputElement).value);\n this.checkValueChange(null, false);\n break;\n case 'scrollTo':\n if (this.checkDateValue(newProp.scrollTo)) {\n if (this.popupWrapper) {\n this.setScrollTo();\n }\n this.setProperties({ scrollTo: newProp.scrollTo }, true);\n }\n else {\n this.setProperties({ scrollTo: null });\n }\n }\n }\n };\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property('Never')\n ], TimePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property(1000)\n ], TimePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(30)\n ], TimePicker.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"scrollTo\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"min\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"max\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"enableRtl\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"itemRender\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"focus\", void 0);\n TimePicker = __decorate([\n NotifyPropertyChanges\n ], TimePicker);\n return TimePicker;\n}(Component));\nexport { TimePicker };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event, Internationalization } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, KeyboardEvents, L10n } from '@syncfusion/ej2-base';\nimport { cldrData, getDefaultDateObject, rippleEffect } from '@syncfusion/ej2-base';\nimport { createElement, removeClass, detach, closest, addClass, attributes } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue, getUniqueID, extend, Browser } from '@syncfusion/ej2-base';\n//class constant defination.\nvar ROOT = 'e-calendar';\nvar DEVICE = 'e-device';\nvar HEADER = 'e-header';\nvar RTL = 'e-rtl';\nvar CONTENT = 'e-content';\nvar YEAR = 'e-year';\nvar MONTH = 'e-month';\nvar DECADE = 'e-decade';\nvar ICON = 'e-icons';\nvar PREVICON = 'e-prev';\nvar NEXTICON = 'e-next';\nvar RIPPLESTYLE = 'e-ripple-style';\nvar PREVSPAN = 'e-date-icon-prev';\nvar NEXTSPAN = 'e-date-icon-next ';\nvar ICONCONTAINER = 'e-icon-container';\nvar DISABLED = 'e-disabled';\nvar OVERLAY = 'e-overlay';\nvar WEEKEND = 'e-weekend';\nvar WEEKNUMBER = 'e-week-number';\nvar OTHERMONTH = 'e-other-month';\nvar SELECTED = 'e-selected';\nvar FOCUSEDDATE = 'e-focused-date';\nvar OTHERMONTHROW = 'e-month-hide';\nvar TODAY = 'e-today';\nvar TITLE = 'e-title';\nvar LINK = 'e-day';\nvar CELL = 'e-cell';\nvar WEEKHEADER = 'e-week-header';\nvar ZOOMIN = 'e-zoomin';\nvar FOOTER = 'e-footer-container';\nvar BTN = 'e-btn';\nvar FLAT = 'e-flat';\nvar dayMilliSeconds = 86400000;\nvar minutesMilliSeconds = 60000;\n/**\n * Represents the Calendar component that allows the user to select a date.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Calendar = /** @class */ (function (_super) {\n __extends(Calendar, _super);\n /**\n * Initialized new instance of Calendar Class.\n * Constructor for creating the widget\n * @param {CalendarModel} options?\n * @param {string|HTMLElement} element?\n */\n function Calendar(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.effect = '';\n _this.keyConfigs = {\n controlUp: 'ctrl+38',\n controlDown: 'ctrl+40',\n moveDown: 'downarrow',\n moveUp: 'uparrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n select: 'enter',\n home: 'home',\n end: 'end',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n shiftPageUp: 'shift+pageup',\n shiftPageDown: 'shift+pagedown',\n controlHome: 'ctrl+home',\n controlEnd: 'ctrl+end'\n };\n return _this;\n }\n /**\n * To Initialize the control rendering.\n * @returns void\n * @private\n */\n Calendar.prototype.render = function () {\n this.globalize = new Internationalization(this.locale);\n this.todayDisabled = false;\n this.todayDate = new Date(new Date().setHours(0, 0, 0, 0));\n if (this.getModuleName() === 'calendar') {\n this.element.classList.add(ROOT);\n if (this.enableRtl) {\n this.element.classList.add(RTL);\n }\n if (Browser.isDevice) {\n this.element.classList.add(DEVICE);\n }\n attributes(this.element, {\n 'data-role': 'calendar'\n });\n }\n else {\n this.calendarElement = createElement('div');\n this.calendarElement.classList.add(ROOT);\n if (this.enableRtl) {\n this.calendarElement.classList.add(RTL);\n }\n if (Browser.isDevice) {\n this.calendarElement.classList.add(DEVICE);\n }\n attributes(this.calendarElement, {\n 'role': 'calendar'\n });\n }\n this.processDate();\n this.header();\n this.content();\n this.wireEvents();\n };\n Calendar.prototype.processDate = function () {\n this.validateDate();\n this.minMaxUpdate();\n };\n Calendar.prototype.validateDate = function () {\n this.setProperties({ value: this.checkDateValue(new Date('' + this.value)) }, true); // persist the value propeerty.\n this.setProperties({ min: this.checkDateValue(new Date('' + this.min)) }, true);\n this.setProperties({ max: this.checkDateValue(new Date('' + this.max)) }, true);\n this.currentDate = this.currentDate ? this.currentDate : new Date(new Date().setHours(0, 0, 0, 0));\n if (!isNullOrUndefined(this.value) && this.min <= this.max && this.value >= this.min && this.value <= this.max) {\n this.currentDate = new Date('' + this.value);\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: null }, true);\n }\n };\n Calendar.prototype.minMaxUpdate = function () {\n if (!(this.min <= this.max)) {\n this.setProperties({ min: this.min }, true);\n addClass([this.element], OVERLAY);\n }\n else {\n removeClass([this.element], OVERLAY);\n }\n this.min = isNullOrUndefined(this.min) || !(+this.min) ? this.min = new Date(1900, 0, 1) : this.min;\n this.max = isNullOrUndefined(this.max) || !(+this.max) ? this.max = new Date(2099, 11, 31) : this.max;\n if (!isNullOrUndefined(this.value) && this.value <= this.min && this.min <= this.max) {\n this.setProperties({ value: this.min }, true);\n this.changedArgs = { value: this.value };\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value >= this.max && this.min <= this.max) {\n this.setProperties({ value: this.max }, true);\n this.changedArgs = { value: this.value };\n }\n }\n if (this.min <= this.max && this.value && this.value <= this.max && this.value >= this.min) {\n this.currentDate = new Date('' + this.value);\n }\n else {\n if (this.min <= this.max && !this.value && this.currentDate > this.max) {\n this.currentDate = new Date('' + this.max);\n }\n else {\n if (this.currentDate < this.min) {\n this.currentDate = new Date('' + this.min);\n }\n }\n }\n };\n Calendar.prototype.header = function () {\n var ariaPrevAttrs = {\n 'aria-disabled': 'false',\n 'aria-label': 'previous month'\n };\n var ariaNextAttrs = {\n 'aria-disabled': 'false',\n 'aria-label': 'next month'\n };\n var ariaTitleAttrs = {\n 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'title'\n };\n this.headerElement = createElement('div', { className: HEADER });\n var iconContainer = createElement('div', { className: ICONCONTAINER });\n this.previousIcon = createElement('button', { className: '' + PREVICON, attrs: { type: 'button' } });\n rippleEffect(this.previousIcon, {\n duration: 400,\n selector: '.e-prev',\n isCenterRipple: true\n });\n attributes(this.previousIcon, ariaPrevAttrs);\n this.nextIcon = createElement('button', { className: '' + NEXTICON, attrs: { type: 'button' } });\n rippleEffect(this.nextIcon, {\n selector: '.e-next',\n duration: 400,\n isCenterRipple: true\n });\n attributes(this.nextIcon, ariaNextAttrs);\n this.headerTitleElement = createElement('div', { className: '' + LINK + ' ' + TITLE });\n attributes(this.headerTitleElement, ariaTitleAttrs);\n this.headerElement.appendChild(this.headerTitleElement);\n this.previousIcon.appendChild(createElement('span', { className: '' + PREVSPAN + ' ' + ICON }));\n this.nextIcon.appendChild(createElement('span', { className: '' + NEXTSPAN + ' ' + ICON }));\n iconContainer.appendChild(this.previousIcon);\n iconContainer.appendChild(this.nextIcon);\n this.headerElement.appendChild(iconContainer);\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.headerElement);\n }\n else {\n this.calendarElement.appendChild(this.headerElement);\n }\n };\n Calendar.prototype.content = function () {\n this.previousDate = this.value;\n this.contentElement = createElement('div', { className: CONTENT });\n this.table = createElement('table', { attrs: { tabIndex: '0', 'role': 'grid', 'aria-activedescendant': '' } });\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.contentElement);\n }\n else {\n this.calendarElement.appendChild(this.contentElement);\n }\n this.contentElement.appendChild(this.table);\n this.contentHdr();\n this.contentBody();\n if (this.showTodayButton) {\n this.contentFooter();\n }\n };\n Calendar.prototype.getCultureValues = function () {\n var culShortNames = [];\n var cldrObj;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrObj = (getValue('days.stand-alone.short', getDefaultDateObject()));\n }\n else {\n cldrObj = (this.getCultureObjects(cldrData, '' + this.locale));\n }\n for (var _i = 0, _a = Object.keys(cldrObj); _i < _a.length; _i++) {\n var obj = _a[_i];\n culShortNames.push(getValue(obj, cldrObj));\n }\n return culShortNames;\n };\n Calendar.prototype.contentHdr = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content .e-week-header')[0])) {\n detach(this.element.querySelectorAll('.e-content .e-week-header')[0]);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content .e-week-header')[0])) {\n detach(this.calendarElement.querySelectorAll('.e-content .e-week-header')[0]);\n }\n }\n var daysCount = 6;\n var html = '';\n var shortNames;\n if (this.firstDayOfWeek > 6 || this.firstDayOfWeek < 0) {\n this.setProperties({ firstDayOfWeek: 0 }, true);\n }\n this.tableHeadElement = createElement('thead', { className: WEEKHEADER });\n if (this.weekNumber) {\n html += '';\n addClass([this.element], '' + WEEKNUMBER);\n }\n shortNames = this.shiftArray(((this.getCultureValues().length > 0 && this.getCultureValues())), this.firstDayOfWeek);\n for (var days = 0; days <= daysCount; days++) {\n html += '' + shortNames[days] + '';\n }\n html = '' + html + '';\n this.tableHeadElement.innerHTML = html;\n this.table.appendChild(this.tableHeadElement);\n };\n Calendar.prototype.contentBody = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content tbody')[0])) {\n detach(this.element.querySelectorAll('.e-content tbody')[0]);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content tbody')[0])) {\n detach(this.calendarElement.querySelectorAll('.e-content tbody')[0]);\n }\n }\n switch (this.start) {\n case 'Year':\n this.renderYears();\n break;\n case 'Decade':\n this.renderDecades();\n break;\n default:\n this.renderMonths();\n }\n };\n Calendar.prototype.updateFooter = function () {\n this.todayElement.textContent = this.l10.getConstant('today');\n };\n Calendar.prototype.contentFooter = function () {\n if (this.showTodayButton) {\n var minimum = new Date(this.min.toDateString());\n var maximum = new Date(this.max.toDateString());\n var l10nLocale = { today: 'Today' };\n this.globalize = new Internationalization(this.locale);\n this.l10 = new L10n(this.getModuleName(), l10nLocale, this.locale);\n this.todayElement = createElement('button');\n rippleEffect(this.todayElement);\n this.updateFooter();\n addClass([this.todayElement], [BTN, TODAY, FLAT]);\n if ((!(new Date(minimum.setHours(0, 0, 0, 0)) <= this.todayDate &&\n this.todayDate <= new Date(maximum.setHours(0, 0, 0, 0)))) || (this.todayDisabled)) {\n addClass([this.todayElement], DISABLED);\n }\n this.footer = createElement('div', { className: FOOTER });\n this.footer.appendChild(this.todayElement);\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.footer);\n }\n if (this.getModuleName() === 'datepicker') {\n this.calendarElement.appendChild(this.footer);\n }\n if (this.getModuleName() === 'datetimepicker') {\n this.calendarElement.appendChild(this.footer);\n }\n if (!this.todayElement.classList.contains(DISABLED)) {\n EventHandler.add(this.todayElement, 'click', this.todayButtonClick, this);\n }\n }\n };\n Calendar.prototype.wireEvents = function () {\n EventHandler.add(this.headerTitleElement, 'click', this.navTitle, this);\n if (this.getModuleName() === 'calendar') {\n this.keyboardModule = new KeyboardEvents(this.element, {\n eventName: 'keydown',\n keyAction: this.keyActionHandle.bind(this),\n keyConfigs: this.keyConfigs\n });\n }\n else {\n this.keyboardModule = new KeyboardEvents(this.calendarElement, {\n eventName: 'keydown',\n keyAction: this.keyActionHandle.bind(this),\n keyConfigs: this.keyConfigs\n });\n }\n };\n Calendar.prototype.todayButtonClick = function () {\n if (this.showTodayButton) {\n var tempValue = new Date();\n if (this.value) {\n tempValue.setHours(this.value.getHours());\n tempValue.setMinutes(this.value.getMinutes());\n tempValue.setSeconds(this.value.getSeconds());\n }\n else {\n tempValue = new Date(tempValue.getFullYear(), tempValue.getMonth(), tempValue.getDate(), 0, 0, 0);\n }\n this.setProperties({ value: tempValue }, true);\n if (this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.navigateTo(this.depth, new Date('' + this.value));\n }\n else {\n this.navigateTo('Month', new Date('' + this.value));\n }\n this.effect = '';\n }\n };\n Calendar.prototype.keyActionHandle = function (e) {\n var view = this.getViewNumber(this.currentView());\n var focusedDate = this.tableBodyElement.querySelector('tr td.e-focused-date');\n var selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n var depthValue = this.getViewNumber(this.depth);\n var levelRestrict = (view === depthValue && this.getViewNumber(this.start) >= depthValue);\n this.effect = '';\n switch (e.action) {\n case 'moveLeft':\n this.KeyboardNavigate(-1, view, e, this.max, this.min);\n e.preventDefault();\n break;\n case 'moveRight':\n this.KeyboardNavigate(1, view, e, this.max, this.min);\n e.preventDefault();\n break;\n case 'moveUp':\n if (view === 0) {\n this.KeyboardNavigate(-7, view, e, this.max, this.min); // move the current date to the previous seven days.\n }\n else {\n this.KeyboardNavigate(-4, view, e, this.max, this.min); // move the current year to the previous four days.\n }\n e.preventDefault();\n break;\n case 'moveDown':\n if (view === 0) {\n this.KeyboardNavigate(7, view, e, this.max, this.min);\n }\n else {\n this.KeyboardNavigate(4, view, e, this.max, this.min);\n }\n e.preventDefault();\n break;\n case 'select':\n if (e.target === this.todayElement) {\n this.todayButtonClick();\n }\n else {\n var element = !isNullOrUndefined(focusedDate) ? focusedDate : selectedDate;\n if (!isNullOrUndefined(element) && !element.classList.contains(DISABLED)) {\n if (levelRestrict) {\n var d = new Date(parseInt('' + (element).id, 0));\n this.selectDate(e, d, (element));\n }\n else {\n this.contentClick(null, --view, (element));\n }\n }\n }\n break;\n case 'controlUp':\n this.title();\n e.preventDefault();\n break;\n case 'controlDown':\n if (!isNullOrUndefined(focusedDate) || !isNullOrUndefined(selectedDate) && !levelRestrict) {\n this.contentClick(null, --view, (focusedDate || selectedDate));\n }\n e.preventDefault();\n break;\n case 'home':\n this.currentDate = this.firstDay(this.currentDate);\n detach(this.tableBodyElement);\n this.renderMonths(e);\n e.preventDefault();\n break;\n case 'end':\n this.currentDate = this.lastDay(this.currentDate);\n detach(this.tableBodyElement);\n this.renderMonths(e);\n e.preventDefault();\n break;\n case 'pageUp':\n this.addMonths(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'pageDown':\n this.addMonths(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'shiftPageUp':\n this.addYears(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'shiftPageDown':\n this.addYears(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'controlHome':\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 0, 1));\n e.preventDefault();\n break;\n case 'controlEnd':\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 11, 31));\n e.preventDefault();\n break;\n }\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n Calendar.prototype.KeyboardNavigate = function (number, currentView, e, max, min) {\n var date = new Date('' + this.currentDate);\n switch (currentView) {\n case 2:\n this.addYears(this.currentDate, number);\n if (this.isMinMaxRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderDecades(e);\n }\n else {\n this.currentDate = date;\n }\n break;\n case 1:\n this.addMonths(this.currentDate, number);\n if (this.isMinMaxRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n else {\n this.currentDate = date;\n }\n break;\n case 0:\n this.addDay(this.currentDate, number, e, max, min);\n if (this.isMinMaxRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderMonths(e);\n }\n else {\n this.currentDate = date;\n }\n break;\n }\n };\n /**\n * Initialize the event handler\n * @private\n */\n Calendar.prototype.preRender = function () {\n var _this = this;\n this.navigatePreviousHandler = this.navigatePrevious.bind(this);\n this.navigateNextHandler = this.navigateNext.bind(this);\n this.changeHandler = function (e) {\n _this.triggerChange(e);\n };\n this.navigateHandler = function (e) {\n _this.triggerNavigate(e);\n };\n };\n ;\n Calendar.prototype.minMaxDate = function (localDate) {\n var currentDate = new Date(new Date(+localDate).setHours(0, 0, 0, 0));\n var minDate = new Date(new Date(+this.min).setHours(0, 0, 0, 0));\n var maxDate = new Date(new Date(+this.max).setHours(0, 0, 0, 0));\n if (+currentDate === +minDate || +currentDate === +maxDate) {\n if (+localDate < +this.min) {\n localDate = new Date(+this.min);\n }\n if (+localDate > +this.max) {\n localDate = new Date(+this.max);\n }\n }\n return localDate;\n };\n Calendar.prototype.renderMonths = function (e) {\n var numCells = this.weekNumber ? 8 : 7;\n var tdEles = this.renderDays(this.currentDate, e);\n this.contentHdr();\n this.renderTemplate(tdEles, numCells, MONTH, e);\n };\n Calendar.prototype.renderDays = function (currentDate, e) {\n var tdEles = [];\n var cellsCount = 42;\n var localDate = new Date('' + currentDate);\n var minMaxDate;\n var numCells = this.weekNumber ? 8 : 7;\n // 8 and 7 denotes the number of columns to be specified.\n var currentMonth = localDate.getMonth();\n this.titleUpdate(currentDate, 'days');\n var d = localDate;\n localDate = new Date(d.getFullYear(), d.getMonth(), 0, d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds());\n while (localDate.getDay() !== this.firstDayOfWeek) {\n this.setStartDate(localDate, -1 * dayMilliSeconds);\n }\n for (var day = 0; day < cellsCount; ++day) {\n var weekEle = createElement('td', { className: CELL });\n var weekAnchor = createElement('span');\n if (day % 7 === 0 && this.weekNumber) {\n weekAnchor.textContent = '' + this.getWeek(localDate);\n weekEle.appendChild(weekAnchor);\n addClass([weekEle], '' + WEEKNUMBER);\n tdEles.push(weekEle);\n }\n minMaxDate = new Date(+localDate);\n localDate = this.minMaxDate(localDate);\n var dateFormatOptions = { type: 'dateTime', skeleton: 'full' };\n var date = this.globalize.parseDate(this.globalize.formatDate(localDate, dateFormatOptions), dateFormatOptions);\n var tdEle = this.dayCell(localDate);\n var title = this.globalize.formatDate(localDate, { type: 'date', skeleton: 'full' });\n var dayLink = createElement('span');\n dayLink.textContent = this.globalize.formatDate(localDate, { type: 'date', skeleton: 'd' });\n var disabled = (this.min > localDate) || (this.max < localDate);\n if (disabled) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n }\n else {\n dayLink.setAttribute('title', '' + title);\n }\n if (currentMonth !== localDate.getMonth()) {\n addClass([tdEle], OTHERMONTH);\n }\n if (localDate.getDay() === 0 || localDate.getDay() === 6) {\n addClass([tdEle], WEEKEND);\n }\n tdEle.appendChild(dayLink);\n this.renderDaycellArg = {\n date: localDate,\n isDisabled: false,\n element: tdEle,\n isOutOfRange: disabled\n };\n var args = this.renderDaycellArg;\n this.renderDayCellEvent(args);\n if (args.isDisabled) {\n if (this.value && +this.value === +args.date) {\n this.setProperties({ value: null }, true);\n }\n }\n if (this.renderDaycellArg.isDisabled && !tdEle.classList.contains(SELECTED)) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n if (+this.renderDaycellArg.date === +this.todayDate) {\n this.todayDisabled = true;\n }\n }\n var otherMnthBool = tdEle.classList.contains(OTHERMONTH);\n var disabledCls = tdEle.classList.contains(DISABLED);\n if (!disabledCls) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n }\n // to set the value as null while setting the disabled date onProperty change.\n if (args.isDisabled && +this.value === +args.date) {\n this.setProperties({ value: null }, true);\n }\n if (!otherMnthBool && !disabledCls && this.getDateVal(localDate)) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (currentDate.getDate() === localDate.getDate() && !otherMnthBool && !disabledCls) {\n addClass([tdEle], FOCUSEDDATE);\n }\n else {\n if (currentDate >= this.max && parseInt(tdEle.id, 0) === +this.max && !otherMnthBool && !disabledCls) {\n addClass([tdEle], FOCUSEDDATE);\n }\n if (currentDate <= this.min && parseInt(tdEle.id, 0) === +this.min && !otherMnthBool && !disabledCls) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n }\n if (date.getMonth() === new Date().getMonth() && date.getDate() === new Date().getDate()) {\n if (date.getFullYear() === new Date().getFullYear()) {\n addClass([tdEle], TODAY);\n }\n }\n tdEles.push(this.renderDaycellArg.element);\n localDate = new Date(+minMaxDate);\n this.addDay(localDate, 1, null, this.max, this.min);\n }\n return tdEles;\n };\n Calendar.prototype.renderYears = function (e) {\n this.removeTheadEle();\n var numCells = 4;\n var days;\n var tdEles = [];\n var valueUtil = isNullOrUndefined(this.value);\n var curDate = new Date('' + this.currentDate);\n var mon = curDate.getMonth();\n var yr = curDate.getFullYear();\n var localDate = curDate;\n var curYrs = localDate.getFullYear();\n var minYr = new Date('' + this.min).getFullYear();\n var minMonth = new Date('' + this.min).getMonth();\n var maxYr = new Date('' + this.max).getFullYear();\n var maxMonth = new Date('' + this.max).getMonth();\n localDate.setMonth(0);\n this.titleUpdate(this.currentDate, 'months');\n var disabled = (this.min > localDate) || (this.max < localDate);\n localDate.setDate(1);\n for (var month = 0; month < 12; ++month) {\n var tdEle = this.dayCell(localDate);\n var dayLink = createElement('span');\n var localMonth = (this.value && (this.value).getMonth() === localDate.getMonth());\n var select = (this.value && (this.value).getFullYear() === yr && localMonth);\n dayLink.textContent = this.globalize.formatDate(localDate, { type: 'dateTime', skeleton: 'MMM' });\n if ((this.min && (curYrs < minYr || (month < minMonth && curYrs === minYr))) || (this.max && (curYrs > maxYr || (month > maxMonth && curYrs >= maxYr)))) {\n addClass([tdEle], DISABLED);\n }\n else if (!valueUtil && select) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (localDate.getMonth() === mon && this.currentDate.getMonth() === mon) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n localDate.setDate(1);\n localDate.setMonth(localDate.getMonth() + 1);\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n }\n tdEle.appendChild(dayLink);\n tdEles.push(tdEle);\n }\n this.renderTemplate(tdEles, numCells, YEAR, e);\n };\n Calendar.prototype.renderDecades = function (e) {\n this.removeTheadEle();\n var numCells = 4;\n var yearCell = 12;\n var tdEles = [];\n var localDate = new Date('' + this.currentDate);\n localDate.setMonth(0);\n localDate.setDate(1);\n var localYr = localDate.getFullYear();\n var startYr = new Date('' + (localYr - localYr % 10));\n var endYr = new Date('' + (localYr - localYr % 10 + (10 - 1)));\n var startHdrYr = this.globalize.formatDate(startYr, { type: 'dateTime', skeleton: 'y' });\n var endHdrYr = this.globalize.formatDate(endYr, { type: 'dateTime', skeleton: 'y' });\n this.headerTitleElement.textContent = startHdrYr + ' - ' + (endHdrYr);\n var start = new Date(localYr - (localYr % 10) - 1, 0, 1);\n var startYear = start.getFullYear();\n for (var rowIterator = 0; rowIterator < yearCell; ++rowIterator) {\n var year = startYear + rowIterator;\n localDate.setFullYear(year);\n var tdEle = this.dayCell(localDate);\n attributes(tdEle, { 'role': 'gridcell' });\n var dayLink = createElement('span');\n dayLink.textContent = this.globalize.formatDate(localDate, { type: 'dateTime', skeleton: 'y' });\n if (year < new Date('' + this.min).getFullYear() || year > new Date('' + this.max).getFullYear()) {\n addClass([tdEle], DISABLED);\n }\n else if (!isNullOrUndefined(this.value) && localDate.getFullYear() === (this.value).getFullYear()) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (localDate.getFullYear() === this.currentDate.getFullYear() && !tdEle.classList.contains(DISABLED)) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n }\n tdEle.appendChild(dayLink);\n tdEles.push(tdEle);\n }\n this.renderTemplate(tdEles, numCells, 'e-decade', e);\n };\n Calendar.prototype.dayCell = function (localDate) {\n var dateFormatOptions = { skeleton: 'full', type: 'dateTime' };\n var date = this.globalize.parseDate(this.globalize.formatDate(localDate, dateFormatOptions), dateFormatOptions);\n var value = date.valueOf();\n var attrs = {\n className: CELL, attrs: { 'id': '' + getUniqueID('' + value), 'aria-selected': 'false', 'role': 'gridcell' }\n };\n return createElement('td', attrs);\n };\n Calendar.prototype.firstDay = function (date) {\n var collection = this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERMONTH + '');\n if (collection.length) {\n for (var i = 0; i < collection.length; i++) {\n if (!collection[i].classList.contains(DISABLED)) {\n date = new Date(parseInt(collection[i].id, 0));\n break;\n }\n }\n }\n return date;\n };\n Calendar.prototype.lastDay = function (date) {\n var lastDate = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n var timeOffset = Math.abs(lastDate.getTimezoneOffset() - this.firstDay(date).getTimezoneOffset());\n if (timeOffset) {\n lastDate.setHours(this.firstDay(date).getHours() + (timeOffset / 60));\n }\n return this.findlastDay(lastDate);\n };\n ;\n Calendar.prototype.checkDateValue = function (value) {\n return (!isNullOrUndefined(value) && value instanceof Date && !isNaN(+value)) ? value : null;\n };\n Calendar.prototype.findlastDay = function (date) {\n var collection = this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERMONTH + '');\n if (collection.length) {\n for (var i = collection.length - 1; i >= 0; i--) {\n if (!collection[i].classList.contains(DISABLED)) {\n date = new Date(parseInt(collection[i].id, 0));\n break;\n }\n }\n }\n return date;\n };\n Calendar.prototype.removeTheadEle = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content table thead')[0])) {\n detach(this.tableHeadElement);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content table thead')[0])) {\n detach(this.tableHeadElement);\n }\n }\n };\n Calendar.prototype.renderTemplate = function (elements, numCells, classNm, e) {\n var view = this.getViewNumber(this.currentView());\n var trEle;\n this.tableBodyElement = createElement('tbody');\n this.table.appendChild(this.tableBodyElement);\n removeClass([this.contentElement, this.headerElement], [MONTH, DECADE, YEAR]);\n addClass([this.contentElement, this.headerElement], [classNm]);\n var weekNumCell = 41;\n var numberCell = 35;\n var otherMonthCell = 6;\n var row = numCells;\n var rowIterator = 0;\n for (var dayCell = 0; dayCell < elements.length / numCells; ++dayCell) {\n trEle = createElement('tr', { attrs: { 'role': 'row' } });\n for (rowIterator = 0 + rowIterator; rowIterator < row; rowIterator++) {\n if (!elements[rowIterator].classList.contains('e-week-number') && !isNullOrUndefined(elements[rowIterator].children[0])) {\n addClass([elements[rowIterator].children[0]], [LINK]);\n rippleEffect(elements[rowIterator].children[0], {\n duration: 600,\n isCenterRipple: true\n });\n }\n trEle.appendChild(elements[rowIterator]);\n if (!this.weekNumber && rowIterator === otherMonthCell && elements[otherMonthCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n if (this.weekNumber) {\n if (rowIterator === weekNumCell && elements[weekNumCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n else {\n if (rowIterator === numberCell && elements[numberCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n }\n row = row + numCells;\n rowIterator = rowIterator + 0;\n this.tableBodyElement.appendChild(trEle);\n }\n this.table.querySelector('tbody').className = this.effect;\n this.iconHandler();\n this.changedArgs = { value: this.value };\n if (view !== this.getViewNumber(this.currentView()) || (view === 0 && view !== this.getViewNumber(this.currentView()))) {\n this.navigateHandler(e);\n }\n this.setAriaActivedescendant();\n this.changeHandler();\n };\n Calendar.prototype.clickHandler = function (e) {\n e.preventDefault();\n var eve = e.currentTarget;\n var view = this.getViewNumber(this.currentView());\n if (eve.classList.contains(OTHERMONTH)) {\n this.value = this.getIdValue(e, null);\n this.contentClick(e, 0, null);\n }\n else if (view === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.contentClick(e, 1, null);\n }\n else if (2 === view) {\n this.contentClick(e, 1, null);\n }\n else if (!eve.classList.contains(OTHERMONTH) && view === 0) {\n this.selectDate(e, this.getIdValue(e, null), null);\n }\n else {\n this.contentClick(e, 0, eve);\n }\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n Calendar.prototype.contentClick = function (e, view, ele) {\n var currentView = this.getViewNumber(this.currentView());\n var d = this.getIdValue(e, ele);\n switch (view) {\n case 0:\n if (currentView === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n detach(this.tableBodyElement);\n this.currentDate = d;\n this.effect = ZOOMIN;\n this.renderMonths(e);\n }\n else {\n this.currentDate.setMonth(d.getMonth());\n if (d.getMonth() > 0 && this.currentDate.getMonth() !== d.getMonth()) {\n this.currentDate.setDate(0);\n }\n this.currentDate.setFullYear(d.getFullYear());\n this.effect = ZOOMIN;\n detach(this.tableBodyElement);\n this.renderMonths(e);\n }\n break;\n case 1:\n if (currentView === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.selectDate(e, d, null);\n }\n else {\n this.currentDate.setFullYear(d.getFullYear());\n this.effect = ZOOMIN;\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n }\n };\n Calendar.prototype.switchView = function (view, e) {\n switch (view) {\n case 0:\n detach(this.tableBodyElement);\n this.renderMonths(e);\n break;\n case 1:\n detach(this.tableBodyElement);\n this.renderYears(e);\n break;\n case 2:\n detach(this.tableBodyElement);\n this.renderDecades(e);\n }\n };\n /**\n * To get component name\n * @private\n */\n Calendar.prototype.getModuleName = function () {\n return 'calendar';\n };\n /**\n * Gets the properties to be maintained upon browser refresh.\n * @returns string\n */\n Calendar.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Called internally if any of the property value changed.\n * returns void\n * @private\n */\n Calendar.prototype.onPropertyChanged = function (newProp, oldProp) {\n this.effect = '';\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n this.setProperties({ value: new Date('' + newProp.value) }, true);\n if (isNaN(+this.value)) {\n this.setProperties({ value: oldProp.value }, true);\n }\n this.validateDate();\n this.minMaxUpdate();\n this.setvalue();\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n if (this.getModuleName() === 'calendar') {\n this.element.classList.add('e-rtl');\n }\n else {\n this.calendarElement.classList.add('e-rtl');\n }\n }\n else {\n if (this.getModuleName() === 'calendar') {\n this.element.classList.remove('e-rtl');\n }\n else {\n this.calendarElement.classList.remove('e-rtl');\n }\n }\n break;\n case 'start':\n case 'weekNumber':\n case 'firstDayOfWeek':\n this.contentHdr();\n this.contentBody();\n break;\n case 'min':\n case 'max':\n prop === 'min' ? this.setProperties({ min: this.checkDateValue(new Date('' + newProp.min)) }, true) :\n this.setProperties({ max: this.checkDateValue(new Date('' + newProp.max)) }, true);\n this.setProperties({ start: this.currentView() }, true);\n detach(this.tableBodyElement);\n this.minMaxUpdate();\n this.contentBody();\n if ((this.todayDate < this.min || this.max < this.todayDate) && (this.footer) && (this.todayElement)) {\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = undefined;\n this.contentFooter();\n }\n else {\n if (this.todayElement.classList.contains('e-disabled') && (this.footer) && (this.todayElement)) {\n removeClass([this.todayElement], DISABLED);\n }\n }\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.contentHdr();\n this.contentBody();\n this.l10.setLocale(this.locale);\n this.updateFooter();\n break;\n case 'showTodayButton':\n if (newProp.showTodayButton) {\n this.contentFooter();\n }\n else {\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = undefined;\n }\n this.setProperties({ showTodayButton: newProp.showTodayButton }, true);\n break;\n }\n }\n };\n Calendar.prototype.setvalue = function () {\n detach(this.tableBodyElement);\n this.setProperties({ start: this.currentView() }, true);\n this.contentBody();\n };\n Calendar.prototype.titleUpdate = function (date, view) {\n var globalize = new Internationalization(this.locale);\n switch (view) {\n case 'days':\n this.headerTitleElement.textContent = globalize.formatDate(date, { type: 'dateTime', skeleton: 'yMMMM' });\n break;\n case 'months':\n this.headerTitleElement.textContent = globalize.formatDate(date, { type: 'dateTime', skeleton: 'y' });\n }\n };\n Calendar.prototype.setActiveDescendant = function () {\n var id;\n var focusedEle = this.tableBodyElement.querySelector('tr td.e-focused-date');\n var selectedEle = this.tableBodyElement.querySelector('tr td.e-selected');\n var title = this.globalize.formatDate(this.currentDate, { type: 'date', skeleton: 'full' });\n if (selectedEle || focusedEle) {\n (focusedEle || selectedEle).setAttribute('aria-selected', 'true');\n (focusedEle || selectedEle).setAttribute('aria-label', 'The current focused date is ' + '' + title);\n id = (focusedEle || selectedEle).getAttribute('id');\n }\n return id;\n };\n Calendar.prototype.iconHandler = function () {\n new Date('' + this.currentDate).setDate(1);\n switch (this.currentView()) {\n case 'Month':\n this.previousIconHandler(this.compareMonth(new Date('' + this.currentDate), this.min) < 1);\n this.nextIconHandler(this.compareMonth(new Date('' + this.currentDate), this.max) > -1);\n break;\n case 'Year':\n this.previousIconHandler(this.compareYear(new Date('' + this.currentDate), this.min) < 1);\n this.nextIconHandler(this.compareYear(new Date('' + this.currentDate), this.max) > -1);\n break;\n case 'Decade':\n this.previousIconHandler(this.compareDecade(new Date('' + this.currentDate), this.min) < 1);\n this.nextIconHandler(this.compareDecade(new Date('' + this.currentDate), this.max) > -1);\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n Calendar.prototype.destroy = function () {\n if (this.getModuleName() === 'calendar') {\n removeClass([this.element], [ROOT]);\n }\n else {\n if (this.calendarElement) {\n removeClass([this.element], [ROOT]);\n }\n }\n if (this.getModuleName() === 'calendar') {\n EventHandler.remove(this.headerTitleElement, 'click', this.navTitle);\n if (this.todayElement) {\n EventHandler.remove(this.todayElement, 'click', this.todayButtonClick);\n }\n this.previousIconHandler(true);\n this.nextIconHandler(true);\n this.keyboardModule.destroy();\n this.element.removeAttribute('data-role');\n }\n this.element.innerHTML = '';\n _super.prototype.destroy.call(this);\n };\n Calendar.prototype.title = function (e) {\n var currentView = this.getViewNumber(this.currentView());\n this.effect = ZOOMIN;\n this.switchView(++currentView, e);\n };\n Calendar.prototype.getViewNumber = function (stringVal) {\n if (stringVal === 'Month') {\n return 0;\n }\n else if (stringVal === 'Year') {\n return 1;\n }\n else {\n return 2;\n }\n };\n Calendar.prototype.navTitle = function (e) {\n e.preventDefault();\n this.title(e);\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n Calendar.prototype.previous = function () {\n this.effect = '';\n var currentView = this.getViewNumber(this.currentView());\n switch (this.currentView()) {\n case 'Month':\n this.addMonths(this.currentDate, -1);\n this.switchView(currentView);\n break;\n case 'Year':\n this.addYears(this.currentDate, -1);\n this.switchView(currentView);\n break;\n case 'Decade':\n this.addYears(this.currentDate, -10);\n this.switchView(currentView);\n break;\n }\n };\n Calendar.prototype.navigatePrevious = function (e) {\n e.preventDefault();\n this.previous();\n this.triggerNavigate(e);\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n Calendar.prototype.next = function () {\n this.effect = '';\n var currentView = this.getViewNumber(this.currentView());\n switch (this.currentView()) {\n case 'Month':\n this.addMonths(this.currentDate, 1);\n this.switchView(currentView);\n break;\n case 'Year':\n this.addYears(this.currentDate, 1);\n this.switchView(currentView);\n break;\n case 'Decade':\n this.addYears(this.currentDate, 10);\n this.switchView(currentView);\n break;\n }\n };\n Calendar.prototype.navigateNext = function (eve) {\n eve.preventDefault();\n this.next();\n this.triggerNavigate(eve);\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n /**\n * This method is used to navigate to the month/year/decade view of the Calendar.\n * @param {string} view - Specifies the view of the Calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @returns void\n */\n Calendar.prototype.navigateTo = function (view, date) {\n this.minMaxUpdate();\n if (+date >= +this.min && +date <= +this.max) {\n this.currentDate = date;\n }\n if (+date <= +this.min) {\n this.currentDate = new Date('' + this.min);\n }\n if (+date >= +this.max) {\n this.currentDate = new Date('' + this.max);\n }\n this.switchView(this.getViewNumber(view));\n };\n /**\n * Gets the current view of the Calendar.\n * @returns string\n */\n Calendar.prototype.currentView = function () {\n if (this.contentElement.classList.contains(YEAR)) {\n return 'Year';\n }\n else if (this.contentElement.classList.contains(DECADE)) {\n return 'Decade';\n }\n else {\n return 'Month';\n }\n };\n Calendar.prototype.getDateVal = function (date) {\n return (!isNullOrUndefined(this.value) && date.getDate() === (this.value).getDate()\n && date.getMonth() === (this.value).getMonth() && date.getFullYear() === (this.value).getFullYear());\n };\n Calendar.prototype.getCultureObjects = function (ld, c) {\n return getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.days.format.short', ld);\n };\n ;\n Calendar.prototype.getWeek = function (d) {\n var currentDate = new Date('' + d).valueOf();\n var date = new Date(d.getFullYear(), 0, 1).valueOf();\n var a = (currentDate - date);\n return Math.ceil((((a) / dayMilliSeconds) + new Date(date).getDay() + 1) / 7);\n };\n Calendar.prototype.setStartDate = function (date, time) {\n var tzOffset = date.getTimezoneOffset();\n var d = new Date(date.getTime() + time);\n var tzOffsetDiff = d.getTimezoneOffset() - tzOffset;\n date.setTime(d.getTime() + tzOffsetDiff * minutesMilliSeconds);\n };\n Calendar.prototype.addMonths = function (date, i) {\n var day = date.getDate();\n date.setDate(1);\n date.setMonth(date.getMonth() + i);\n date.setDate(Math.min(day, this.getMaxDays(date)));\n };\n Calendar.prototype.addYears = function (date, i) {\n var day = date.getDate();\n date.setDate(1);\n date.setFullYear(date.getFullYear() + i);\n date.setDate(Math.min(day, this.getMaxDays(date)));\n };\n Calendar.prototype.getIdValue = function (e, element) {\n var eve;\n if (e) {\n eve = e.currentTarget;\n }\n else {\n eve = element;\n }\n var dateFormatOptions = { type: 'dateTime', skeleton: 'full' };\n var dateString = this.globalize.formatDate(new Date(parseInt('' + eve.getAttribute('id'), 0)), dateFormatOptions);\n var date = this.globalize.parseDate(dateString, dateFormatOptions);\n var value = date.valueOf() - date.valueOf() % 1000;\n return new Date(value);\n //return this.globalize.parseDate(dateString, dateFormatOptions);\n };\n Calendar.prototype.selectDate = function (e, date, element) {\n var ele = element || e.currentTarget;\n if (this.currentView() === 'Decade') {\n this.setDateDecade(this.currentDate, date.getFullYear());\n }\n else if (this.currentView() === 'Year') {\n this.setDateYear(this.currentDate, date);\n }\n else {\n this.setProperties({ value: new Date('' + date) }, true);\n this.currentDate = new Date('' + date);\n }\n var tableBodyElement = closest(ele, '.' + ROOT);\n if (isNullOrUndefined(tableBodyElement)) {\n tableBodyElement = this.tableBodyElement;\n }\n if (!isNullOrUndefined(tableBodyElement.querySelector('.' + SELECTED))) {\n removeClass([tableBodyElement.querySelector('.' + SELECTED)], SELECTED);\n }\n if (!isNullOrUndefined(tableBodyElement.querySelector('.' + FOCUSEDDATE))) {\n removeClass([tableBodyElement.querySelector('.' + FOCUSEDDATE)], FOCUSEDDATE);\n }\n addClass([ele], SELECTED);\n this.changedArgs = { value: this.value };\n this.changeHandler(e);\n };\n Calendar.prototype.setAriaActivedescendant = function () {\n attributes(this.table, {\n 'aria-activedescendant': '' + this.setActiveDescendant()\n });\n };\n Calendar.prototype.previousIconHandler = function (disabled) {\n if (disabled) {\n EventHandler.remove(this.previousIcon, 'click', this.navigatePreviousHandler);\n addClass([this.previousIcon], '' + DISABLED);\n addClass([this.previousIcon], '' + OVERLAY);\n this.previousIcon.setAttribute('aria-disabled', 'true');\n }\n else {\n EventHandler.add(this.previousIcon, 'click', this.navigatePreviousHandler);\n removeClass([this.previousIcon], '' + DISABLED);\n removeClass([this.previousIcon], '' + OVERLAY);\n this.previousIcon.setAttribute('aria-disabled', 'false');\n }\n };\n Calendar.prototype.renderDayCellEvent = function (args) {\n extend(this.renderDaycellArg, { name: 'renderDayCell' });\n this.trigger('renderDayCell', args);\n };\n Calendar.prototype.navigatedEvent = function (eve) {\n extend(this.navigatedArgs, { name: 'navigated', event: eve });\n this.trigger('navigated', this.navigatedArgs);\n };\n Calendar.prototype.triggerNavigate = function (event) {\n this.navigatedArgs = { view: this.currentView(), date: this.currentDate };\n this.navigatedEvent(event);\n };\n Calendar.prototype.changeEvent = function (e) {\n this.trigger('change', this.changedArgs);\n };\n Calendar.prototype.triggerChange = function (e) {\n this.changedArgs.event = e;\n if (!isNullOrUndefined(this.value)) {\n this.setProperties({ value: this.value }, true);\n }\n if (+this.value !== Number.NaN && +this.value !== +this.previousDate) {\n this.changeEvent(e);\n }\n this.previousDate = this.value;\n };\n Calendar.prototype.nextIconHandler = function (disabled) {\n if (disabled) {\n EventHandler.remove(this.nextIcon, 'click', this.navigateNextHandler);\n addClass([this.nextIcon], DISABLED);\n addClass([this.nextIcon], OVERLAY);\n this.nextIcon.setAttribute('aria-disabled', 'true');\n }\n else {\n EventHandler.add(this.nextIcon, 'click', this.navigateNextHandler);\n removeClass([this.nextIcon], DISABLED);\n removeClass([this.nextIcon], OVERLAY);\n this.nextIcon.setAttribute('aria-disabled', 'false');\n }\n };\n Calendar.prototype.compare = function (startDate, endDate, modifier) {\n var start = endDate.getFullYear();\n var end;\n var result;\n end = start;\n result = 0;\n if (modifier) {\n start = start - start % modifier;\n end = start - start % modifier + modifier - 1;\n }\n if (startDate.getFullYear() > end) {\n result = 1;\n }\n else if (startDate.getFullYear() < start) {\n result = -1;\n }\n return result;\n };\n Calendar.prototype.isMinMaxRange = function (date) {\n return +date >= +this.min && +date <= +this.max;\n };\n Calendar.prototype.compareYear = function (start, end) {\n return this.compare(start, end, 0);\n };\n Calendar.prototype.compareDecade = function (start, end) {\n return this.compare(start, end, 10);\n };\n Calendar.prototype.shiftArray = function (array, i) {\n return array.slice(i).concat(array.slice(0, i));\n };\n Calendar.prototype.addDay = function (date, i, e, max, min) {\n var column = i;\n var value = new Date(+date);\n if (!isNullOrUndefined(this.tableBodyElement) && !isNullOrUndefined(e)) {\n while (this.findNextTD(new Date(+date), column, max, min)) {\n column += i;\n }\n var rangeValue = new Date(value.setDate(value.getDate() + column));\n column = (+rangeValue > +max || +rangeValue < +min) ? column === i ? i - i : i : column;\n }\n date.setDate(date.getDate() + column);\n };\n Calendar.prototype.findNextTD = function (date, column, max, min) {\n var value = new Date(date.setDate(date.getDate() + column));\n var collection = [];\n var isDisabled = false;\n if ((!isNullOrUndefined(value) && value.getMonth()) !== (!isNullOrUndefined(this.currentDate) && this.currentDate.getMonth())) {\n var tdEles = this.renderDays(value, null);\n collection = tdEles.filter(function (ele) {\n return ele.classList.contains(DISABLED);\n });\n }\n else {\n collection = this.tableBodyElement.querySelectorAll('td.' + DISABLED);\n }\n if (+value <= (+(max)) && +value >= (+(min))) {\n if (collection.length) {\n for (var i = 0; i < collection.length; i++) {\n isDisabled = (+value === +new Date(parseInt(collection[i].id, 0))) ? true : false;\n if (isDisabled) {\n break;\n }\n }\n }\n }\n return isDisabled;\n };\n Calendar.prototype.getMaxDays = function (d) {\n var date;\n var month;\n var tmpDate = new Date('' + d);\n date = 28;\n month = tmpDate.getMonth();\n while (tmpDate.getMonth() === month) {\n ++date;\n tmpDate.setDate(date);\n }\n return date - 1;\n };\n Calendar.prototype.setDateDecade = function (date, year) {\n date.setFullYear(year);\n this.setProperties({ value: new Date('' + date) }, true);\n };\n ;\n Calendar.prototype.setDateYear = function (date, value) {\n date.setFullYear(value.getFullYear(), value.getMonth(), date.getDate());\n if (value.getMonth() !== date.getMonth()) {\n date.setDate(0);\n }\n this.setProperties({ value: new Date('' + date) }, true);\n this.currentDate = new Date('' + this.value);\n };\n Calendar.prototype.compareMonth = function (start, end) {\n var result;\n if (start.getFullYear() > end.getFullYear()) {\n result = 1;\n }\n else if (start.getFullYear() < end.getFullYear()) {\n result = -1;\n }\n else {\n result = start.getMonth() === end.getMonth() ? 0 : start.getMonth() > end.getMonth() ? 1 : -1;\n }\n return result;\n };\n __decorate([\n Property(null)\n ], Calendar.prototype, \"value\", void 0);\n __decorate([\n Property(new Date(1900, 0, 1))\n ], Calendar.prototype, \"min\", void 0);\n __decorate([\n Property(new Date(2099, 11, 31))\n ], Calendar.prototype, \"max\", void 0);\n __decorate([\n Property(0)\n ], Calendar.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property('Month')\n ], Calendar.prototype, \"start\", void 0);\n __decorate([\n Property('Month')\n ], Calendar.prototype, \"depth\", void 0);\n __decorate([\n Property(false)\n ], Calendar.prototype, \"weekNumber\", void 0);\n __decorate([\n Property(true)\n ], Calendar.prototype, \"showTodayButton\", void 0);\n __decorate([\n Property(false)\n ], Calendar.prototype, \"enablePersistence\", void 0);\n __decorate([\n Event()\n ], Calendar.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Calendar.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], Calendar.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Calendar.prototype, \"navigated\", void 0);\n __decorate([\n Event()\n ], Calendar.prototype, \"renderDayCell\", void 0);\n Calendar = __decorate([\n NotifyPropertyChanges\n ], Calendar);\n return Calendar;\n}(Component));\nexport { Calendar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { EventHandler, Property, Internationalization, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Animation, Event, L10n, Browser, formatUnit } from '@syncfusion/ej2-base';\nimport { createElement, detach, addClass, removeClass, closest, attributes } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setValue, getUniqueID, merge } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { Calendar } from '../calendar/calendar';\n//class constant defination\nvar DATEWRAPPER = 'e-date-wrapper';\nvar ROOT = 'e-datepicker';\nvar POPUPWRAPPER = 'e-popup-wrapper';\nvar INPUTWRAPPER = 'e-input-group-icon';\nvar POPUP = 'e-popup';\nvar INPUTCONTAINER = 'e-input-group';\nvar INPUTFOCUS = 'e-input-focus';\nvar INPUTROOT = 'e-input';\nvar ERROR = 'e-error';\nvar RTL = 'e-rtl';\nvar LINK = 'e-day';\nvar ACTIVE = 'e-active';\nvar OVERFLOW = 'e-date-overflow';\nvar DATEICON = 'e-date-icon';\nvar ICONS = 'e-icons';\nvar OPENDURATION = 300;\nvar CLOSEDURATION = 200;\nvar OFFSETVALUE = 4;\n/**\n * Represents the DatePicker component that allows user to select\n * or enter a date value.\n * ```html\n * \n * ````\n * ````typescript\n * \n * ```\n */\nvar DatePicker = /** @class */ (function (_super) {\n __extends(DatePicker, _super);\n /**\n * Constructor for creating the widget.\n */\n function DatePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.previousEleValue = '';\n _this.isDateIconClicked = false;\n _this.keyConfigs = {\n altUpArrow: 'alt+uparrow',\n altDownArrow: 'alt+downarrow',\n escape: 'escape',\n enter: 'enter',\n controlUp: 'ctrl+38',\n controlDown: 'ctrl+40',\n moveDown: 'downarrow',\n moveUp: 'uparrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n select: 'enter',\n home: 'home',\n end: 'end',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n shiftPageUp: 'shift+pageup',\n shiftPageDown: 'shift+pagedown',\n controlHome: 'ctrl+home',\n controlEnd: 'ctrl+end',\n tab: 'tab'\n };\n _this.calendarKeyConfigs = {\n escape: 'escape',\n enter: 'enter',\n tab: 'tab'\n };\n return _this;\n }\n /**\n * To Initialize the control rendering.\n * @return void\n * @private\n */\n DatePicker.prototype.render = function () {\n this.initialize();\n this.bindEvents();\n };\n DatePicker.prototype.initialize = function () {\n this.createInput();\n this.updateInput();\n this.previousEleValue = this.inputElement.value;\n };\n DatePicker.prototype.createInput = function () {\n var ariaAttrs = {\n 'aria-live': 'assertive', 'aria-atomic': 'true',\n 'aria-haspopup': 'true', 'aria-activedescendant': 'null',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false'\n };\n if (this.getModuleName() === 'datepicker') {\n var l10nLocale = { placeholder: null };\n this.globalize = new Internationalization(this.locale);\n this.l10n = new L10n('datepicker', l10nLocale, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n }\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: this.cssClass,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n },\n buttons: [INPUTWRAPPER + ' ' + DATEICON + ' ' + ICONS]\n });\n this.setWidth(this.width);\n if (this.inputElement.name !== '') {\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute('name'));\n }\n else {\n this.inputElement.setAttribute('name', '' + this.element.id);\n }\n attributes(this.inputElement, ariaAttrs);\n if (!this.enabled) {\n this.inputElement.setAttribute('aria-disabled', 'true');\n }\n else {\n this.inputElement.setAttribute('aria-disabled', 'false');\n }\n Input.addAttributes({ 'aria-label': 'select' }, this.inputWrapper.buttons[0]);\n addClass([this.inputWrapper.container], DATEWRAPPER);\n };\n DatePicker.prototype.updateInput = function () {\n if (this.value && !this.isCalendar()) {\n this.disabledDates();\n }\n if (+new Date('' + this.value)) {\n if (typeof this.value === 'string') {\n this.value = this.checkDateValue(new Date('' + this.value));\n var dateOptions = void 0;\n if (this.getModuleName() === 'datetimepicker') {\n dateOptions = {\n format: !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n };\n }\n else {\n dateOptions = { format: this.format, type: 'dateTime', skeleton: 'yMd' };\n }\n var dateString = this.globalize.formatDate(this.value, dateOptions);\n this.setProperties({ value: this.globalize.parseDate(dateString, dateOptions) }, true);\n }\n }\n else {\n this.setProperties({ value: null }, true);\n }\n if (this.strictMode) {\n //calls the Calendar processDate protected method to update the date value according to the strictMode true behaviour.\n _super.prototype.processDate.call(this);\n }\n if (!isNullOrUndefined(this.value)) {\n var dateValue = this.value;\n var dateString = void 0;\n var tempFormat = !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat;\n if (this.getModuleName() === 'datetimepicker') {\n dateString = this.globalize.formatDate(this.value, { format: tempFormat, type: 'dateTime', skeleton: 'yMd' });\n }\n else {\n dateString = this.globalize.formatDate(this.value, { format: this.format, type: 'dateTime', skeleton: 'yMd' });\n }\n if ((+dateValue <= +this.max) && (+dateValue >= +this.min)) {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n var value = (+dateValue >= +this.max || !+this.value) || (!+this.value || +dateValue <= +this.min);\n if (!this.strictMode && value) {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n }\n }\n if (isNullOrUndefined(this.value) && this.strictMode) {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n }\n this.changedArgs = { value: this.value };\n this.errorClass();\n };\n ;\n DatePicker.prototype.bindEvents = function () {\n if (this.enabled) {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateIconHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n this.bindClearEvent();\n }\n else {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateIconHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n }\n this.keyboardModules = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown',\n keyAction: this.inputKeyActionHandle.bind(this),\n keyConfigs: this.keyConfigs\n });\n };\n DatePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n };\n DatePicker.prototype.resetHandler = function (e) {\n e.preventDefault();\n this.clear(e);\n };\n DatePicker.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.changeEvent(event);\n };\n DatePicker.prototype.dateIconHandler = function (e) {\n e.preventDefault();\n if (!this.readonly) {\n if (this.isCalendar()) {\n this.hide();\n }\n else {\n this.isDateIconClicked = true;\n this.show();\n if (!Browser.isDevice) {\n if (this.getModuleName() === 'datetimepicker') {\n this.inputElement.focus();\n }\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n addClass(this.inputWrapper.buttons, ACTIVE);\n }\n }\n };\n DatePicker.prototype.CalendarKeyActionHandle = function (e) {\n switch (e.action) {\n case 'escape':\n if (this.isCalendar()) {\n this.hide();\n }\n else {\n this.inputWrapper.container.children[this.index].blur();\n }\n break;\n case 'enter':\n if (!this.isCalendar()) {\n this.show();\n }\n else {\n if (+this.value !== +this.currentDate && !this.isCalendar()) {\n this.inputWrapper.container.children[this.index].focus();\n }\n }\n if (this.getModuleName() === 'datetimepicker') {\n this.inputElement.focus();\n }\n break;\n case 'tab':\n this.hide();\n }\n };\n DatePicker.prototype.inputFocusHandler = function () {\n this.isDateIconClicked = false;\n this.trigger('focus');\n };\n DatePicker.prototype.inputBlurHandler = function () {\n this.strictModeUpdate();\n this.updateInput();\n this.changeTrigger();\n this.errorClass();\n if (this.isCalendar() && document.activeElement === this.inputElement) {\n this.hide();\n }\n this.inputElement.blur();\n this.trigger('blur');\n if (this.isCalendar()) {\n this.calendarKeyboardModules = new KeyboardEvents(this.calendarElement.children[1].firstElementChild, {\n eventName: 'keydown',\n keyAction: this.CalendarKeyActionHandle.bind(this),\n keyConfigs: this.calendarKeyConfigs\n });\n }\n };\n DatePicker.prototype.documentHandler = function (e) {\n if (!Browser.isDevice) {\n e.preventDefault();\n }\n var target = e.target;\n if (!(closest(target, '.e-datepicker.e-popup-wrapper'))\n && !(closest(target, '.' + INPUTCONTAINER) === this.inputWrapper.container)\n && (!target.classList.contains('e-day'))) {\n this.hide();\n }\n };\n DatePicker.prototype.inputKeyActionHandle = function (e) {\n switch (e.action) {\n case 'altUpArrow':\n this.hide();\n this.inputElement.focus();\n break;\n case 'altDownArrow':\n this.strictModeUpdate();\n this.updateInput();\n if (this.getModuleName() === 'datepicker') {\n this.show();\n }\n break;\n case 'escape':\n this.hide();\n break;\n case 'enter':\n this.strictModeUpdate();\n this.updateInput();\n this.changeTrigger();\n this.errorClass();\n if (!this.isCalendar() && document.activeElement === this.inputElement) {\n this.hide();\n }\n break;\n case 'tab':\n this.strictModeUpdate();\n this.updateInput();\n this.changeTrigger();\n this.errorClass();\n this.hide();\n break;\n default:\n this.previousDate = (!isNullOrUndefined(this.value) && new Date('' + this.value) || null);\n if (this.isCalendar()) {\n _super.prototype.keyActionHandle.call(this, e);\n }\n }\n };\n DatePicker.prototype.strictModeUpdate = function () {\n var format;\n if (this.getModuleName() === 'datetimepicker') {\n format = !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat;\n }\n else {\n format = isNullOrUndefined(this.format) ? this.format : this.format.replace('dd', 'd');\n }\n if (!isNullOrUndefined(format)) {\n var len = format.split('M').length - 1;\n if (len < 3) {\n format = format.replace('MM', 'M');\n }\n }\n var dateOptions;\n if (this.getModuleName() === 'datetimepicker') {\n dateOptions = {\n format: !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n };\n }\n else {\n dateOptions = { format: format, type: 'dateTime', skeleton: 'yMd' };\n }\n var date = this.globalize.parseDate(this.inputElement.value, dateOptions);\n if (this.strictMode && date) {\n Input.setValue(this.globalize.formatDate(date, dateOptions), this.inputElement, this.floatLabelType, this.showClearButton);\n if (this.inputElement.value !== this.previousEleValue) {\n this.setProperties({ value: date }, true);\n }\n }\n else if (!this.strictMode) {\n if (this.inputElement.value !== this.previousEleValue) {\n this.setProperties({ value: date }, true);\n }\n }\n if (this.strictMode && !date && this.inputElement.value === '') {\n this.setProperties({ value: null }, true);\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: null }, true);\n }\n if (isNullOrUndefined(this.value)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n };\n DatePicker.prototype.createCalendar = function () {\n var _this = this;\n this.popupWrapper = createElement('div', { className: '' + ROOT + ' ' + POPUPWRAPPER });\n if (!isNullOrUndefined(this.cssClass)) {\n this.popupWrapper.classList.add(this.cssClass);\n }\n document.body.appendChild(this.popupWrapper);\n if (Browser.isDevice) {\n this.modelHeader();\n this.modal = createElement('div');\n this.modal.className = '' + ROOT + ' e-date-modal';\n document.body.className += ' ' + OVERFLOW;\n this.modal.style.display = 'block';\n document.body.appendChild(this.modal);\n }\n //this.calendarElement represent the Calendar object from the Calendar class.\n this.calendarElement.querySelector('table tbody').className = '';\n this.popupObj = new Popup(this.popupWrapper, {\n content: this.calendarElement,\n relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n position: Browser.isDevice ? { X: 'center', Y: 'center' } : { X: 'left', Y: 'bottom' },\n offsetY: OFFSETVALUE,\n targetType: 'container',\n enableRtl: this.enableRtl,\n zIndex: this.zIndex,\n collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : { X: 'flip', Y: 'flip' },\n open: function () {\n if (_this.getModuleName() !== 'datetimepicker') {\n if (document.activeElement !== _this.inputElement && !Browser.isDevice) {\n _this.calendarElement.children[1].firstElementChild.focus();\n _this.calendarKeyboardModules = new KeyboardEvents(_this.calendarElement.children[1].firstElementChild, {\n eventName: 'keydown',\n keyAction: _this.CalendarKeyActionHandle.bind(_this),\n keyConfigs: _this.calendarKeyConfigs\n });\n _this.calendarKeyboardModules = new KeyboardEvents(_this.inputWrapper.container.children[_this.index], {\n eventName: 'keydown',\n keyAction: _this.CalendarKeyActionHandle.bind(_this),\n keyConfigs: _this.calendarKeyConfigs\n });\n }\n }\n }, close: function () {\n if (!Browser.isDevice) {\n if (_this.isDateIconClicked) {\n _this.inputWrapper.container.children[_this.index].focus();\n }\n }\n if (_this.value) {\n _this.disabledDates();\n }\n _this.popupObj.destroy();\n detach(_this.popupWrapper);\n _this.popupObj = _this.popupWrapper = null;\n _this.setAriaAttributes();\n }\n });\n this.popupObj.element.classList.add(this.cssClass);\n this.setAriaAttributes();\n };\n DatePicker.prototype.modelHeader = function () {\n var modelHeader = createElement('div', { className: 'e-model-header' });\n var yearHeading = createElement('h1', { className: 'e-model-year' });\n var h2 = createElement('div');\n var daySpan = createElement('span', { className: 'e-model-day' });\n var monthSpan = createElement('span', { className: 'e-model-month' });\n yearHeading.textContent = '' + this.globalize.formatDate(this.value || new Date(), { format: 'y', skeleton: 'dateTime' });\n daySpan.textContent = '' + this.globalize.formatDate(this.value || new Date(), { format: 'E', skeleton: 'dateTime' }) + ', ';\n monthSpan.textContent = '' + this.globalize.formatDate(this.value || new Date(), { format: 'MMM d', skeleton: 'dateTime' });\n modelHeader.appendChild(yearHeading);\n h2.appendChild(daySpan);\n h2.appendChild(monthSpan);\n modelHeader.appendChild(h2);\n this.calendarElement.insertBefore(modelHeader, this.calendarElement.firstElementChild);\n };\n DatePicker.prototype.changeTrigger = function () {\n if (this.inputElement.value !== this.previousEleValue) {\n if (((this.previousDate && this.previousDate.valueOf()) !== (this.value && this.value.valueOf()))) {\n this.changedArgs.value = this.value;\n this.trigger('change', this.changedArgs);\n this.previousEleValue = this.inputElement.value;\n this.previousDate = new Date('' + this.value);\n }\n }\n };\n DatePicker.prototype.navigatedEvent = function () {\n this.trigger('navigated', this.navigatedArgs);\n };\n DatePicker.prototype.changeEvent = function (e) {\n this.selectCalendar(e);\n this.changedArgs.event = e;\n this.trigger('change', this.changedArgs);\n this.previousDate = this.value;\n };\n DatePicker.prototype.selectCalendar = function (e) {\n var date;\n var tempFormat;\n if (this.getModuleName() === 'datetimepicker') {\n tempFormat = !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat;\n }\n else {\n tempFormat = this.format;\n }\n if (this.value) {\n if (this.getModuleName() === 'datetimepicker') {\n date = this.globalize.formatDate(this.changedArgs.value, { format: tempFormat, type: 'dateTime', skeleton: 'yMd' });\n }\n else {\n date = this.globalize.formatDate(this.changedArgs.value, { format: this.format, type: 'dateTime', skeleton: 'yMd' });\n }\n }\n if (!isNullOrUndefined(date)) {\n Input.setValue(date, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n this.hide();\n this.previousEleValue = this.inputElement.value;\n this.errorClass();\n };\n DatePicker.prototype.isCalendar = function () {\n if (this.popupWrapper && this.popupWrapper.classList.contains('' + POPUPWRAPPER)) {\n return true;\n }\n return false;\n };\n DatePicker.prototype.setWidth = function (width) {\n if (typeof width === 'number') {\n this.inputWrapper.container.style.width = formatUnit(this.width);\n }\n else if (typeof width === 'string') {\n this.inputWrapper.container.style.width = (this.width);\n }\n else {\n this.inputWrapper.container.style.width = '100%';\n }\n };\n /**\n * Shows the Calendar.\n * @returns void\n */\n DatePicker.prototype.show = function () {\n var prevent = true;\n var outOfRange;\n if (!isNullOrUndefined(this.value) && !(+this.value >= +this.min && +this.value <= +this.max)) {\n outOfRange = new Date('' + this.value);\n this.setProperties({ 'value': null }, true);\n }\n else {\n outOfRange = this.value || null;\n }\n if (!this.isCalendar()) {\n _super.prototype.render.call(this);\n this.setProperties({ 'value': outOfRange || null }, true);\n this.previousDate = outOfRange;\n this.createCalendar();\n }\n this.preventArgs = {\n preventDefault: function () {\n prevent = false;\n }\n };\n var args = {\n popup: this.popupObj\n };\n merge(args, this.preventArgs);\n this.trigger('open', args);\n if (prevent) {\n addClass(this.inputWrapper.buttons, ACTIVE);\n document.body.appendChild(this.popupObj.element);\n this.popupObj.refreshPosition(this.inputElement);\n var openAnimation = {\n name: 'FadeIn',\n duration: Browser.isDevice ? 0 : OPENDURATION,\n };\n this.popupObj.show(new Animation(openAnimation));\n this.setAriaAttributes();\n }\n else {\n detach(this.popupWrapper);\n this.popupObj.destroy();\n this.popupWrapper = this.popupObj = null;\n }\n EventHandler.add(document, 'mousedown touchstart', this.documentHandler, this);\n };\n /**\n * Hide the Calendar.\n * @returns void\n */\n DatePicker.prototype.hide = function () {\n var args = {\n popup: this.popupObj\n };\n this.preventArgs = {\n preventDefault: function () {\n prevent = false;\n }\n };\n var prevent = true;\n removeClass(this.inputWrapper.buttons, ACTIVE);\n removeClass([document.body], OVERFLOW);\n merge(args, this.preventArgs);\n this.trigger('close', args);\n if (this.isCalendar() && prevent) {\n var closeAnimation = {\n name: 'FadeOut',\n duration: CLOSEDURATION,\n };\n this.popupObj.hide();\n this.keyboardModule.destroy();\n removeClass(this.inputWrapper.buttons, ACTIVE);\n }\n this.setAriaAttributes();\n this.previousEleValue = this.inputElement.value;\n if (Browser.isDevice && this.modal) {\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n EventHandler.remove(document, 'mousedown touchstart', this.documentHandler);\n };\n /**\n * Sets the focus to widget for interaction.\n * @returns void\n */\n DatePicker.prototype.focusIn = function (triggerEvent) {\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n this.trigger('focus');\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n * @returns void\n */\n DatePicker.prototype.focusOut = function () {\n this.inputElement.blur();\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n this.trigger('blur');\n };\n /**\n * Gets the current view of the DatePicker.\n * @returns string\n */\n DatePicker.prototype.currentView = function () {\n var currentView;\n if (this.calendarElement) {\n // calls the Calendar currentView public method\n currentView = _super.prototype.currentView.call(this);\n }\n return currentView;\n };\n /**\n * This method used to navigate to the month/year/decade view of the DatePicker.\n * @param {string} view - Specifies the view of the calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @returns void\n */\n DatePicker.prototype.navigateTo = function (view, date) {\n if (this.calendarElement) {\n // calls the Calendar navigateTo public method\n _super.prototype.navigateTo.call(this, view, date);\n }\n };\n /**\n * To destroy the widget.\n * @returns void\n */\n DatePicker.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.keyboardModules.destroy();\n if (this.popupObj && this.popupObj.element.classList.contains(POPUP)) {\n _super.prototype.destroy.call(this);\n }\n var ariaAttrs = {\n 'aria-live': 'assertive', 'aria-atomic': 'true', 'aria-disabled': 'true',\n 'aria-haspopup': 'true', 'aria-activedescendant': 'null',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false'\n };\n Input.removeAttributes(ariaAttrs, this.inputElement);\n if (this.isCalendar()) {\n detach(this.popupWrapper);\n this.popupObj = this.popupWrapper = null;\n this.keyboardModule.destroy();\n }\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n this.ensureInputAttribute();\n if (this.ngTag === null) {\n this.inputWrapper.container.insertAdjacentElement('afterend', this.inputElement);\n removeClass([this.inputElement], [INPUTROOT]);\n removeClass([this.element], [ROOT]);\n detach(this.inputWrapper.container);\n }\n };\n DatePicker.prototype.ensureInputAttribute = function () {\n for (var i = 0; i < this.inputElement.attributes.length; i++) {\n var prop = this.inputElement.attributes[i].name;\n if (isNullOrUndefined(this.inputEleCopy.getAttribute(prop))) {\n if (prop.toLowerCase() === 'value' || isNullOrUndefined(this.inputEleCopy.getAttribute('value'))) {\n this.inputElement.value = '';\n }\n this.inputElement.removeAttribute(prop);\n }\n }\n };\n /**\n * Initialize the event handler\n * @private\n */\n DatePicker.prototype.preRender = function () {\n this.inputEleCopy = this.element.cloneNode(true);\n this.inputElement = this.element;\n this.index = this.showClearButton ? 2 : 1;\n this.ngTag = null;\n if (this.element.tagName === 'EJS-DATEPICKER' || this.element.tagName === 'EJS-DATETIMEPICKER') {\n this.ngTag = this.element.tagName;\n this.inputElement = createElement('input');\n this.element.appendChild(this.inputElement);\n }\n if (this.element.getAttribute('id')) {\n if (this.ngTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n if (this.getModuleName() === 'datetimepicker') {\n this.element.id = getUniqueID('ej2-datetimepicker');\n if (this.ngTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n else {\n this.element.id = getUniqueID('ej2-datepicker');\n if (this.ngTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n }\n this.checkHtmlAttributes();\n _super.prototype.preRender.call(this);\n };\n ;\n DatePicker.prototype.checkHtmlAttributes = function () {\n this.globalize = new Internationalization(this.locale);\n var attributes = ['value', 'min', 'max', 'disabled', 'readonly', 'style', 'name', 'placeholder', 'type'];\n var options;\n if (this.getModuleName() === 'datetimepicker') {\n options = {\n format: !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n };\n }\n else {\n options = { format: this.format, type: 'dateTime', skeleton: 'yMd' };\n }\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n var enabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '';\n this.setProperties({ enabled: !enabled }, true);\n if (!enabled) {\n this.inputElement.setAttribute('aria-disabled', 'true');\n }\n break;\n case 'readonly':\n var readonly = this.inputElement.getAttribute(prop) === 'readonly' ||\n this.inputElement.getAttribute(prop) === '';\n this.setProperties({ readonly: readonly }, true);\n break;\n case 'placeholder':\n if (this.placeholder === null) {\n var placeholder = this.inputElement.getAttribute(prop);\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, true);\n }\n break;\n case 'style':\n this.inputElement.setAttribute('style', '' + this.inputElement.getAttribute(prop));\n break;\n case 'name':\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute(prop));\n break;\n case 'value':\n if (!this.value) {\n var value = this.inputElement.getAttribute(prop);\n this.setProperties(setValue(prop, this.globalize.parseDate(value, options), {}), true);\n }\n break;\n case 'min':\n if (+this.min === +new Date(1900, 0, 1)) {\n this.setProperties(setValue(prop, this.globalize.parseDate(this.inputElement.getAttribute(prop)), {}), true);\n }\n break;\n case 'max':\n if (+this.max === +new Date(2099, 11, 31)) {\n this.setProperties(setValue(prop, this.globalize.parseDate(this.inputElement.getAttribute(prop)), {}), true);\n }\n break;\n case 'type':\n if (this.inputElement.getAttribute(prop) !== 'text') {\n this.inputElement.setAttribute('type', 'text');\n }\n break;\n }\n }\n }\n };\n /**\n * To get component name.\n * @private\n */\n DatePicker.prototype.getModuleName = function () {\n return 'datepicker';\n };\n DatePicker.prototype.disabledDates = function () {\n var valueCopy = new Date('' + this.value);\n var previousValCopy = this.previousDate;\n //calls the Calendar render method to check the disabled dates through renderDayCell event and update the input value accordingly.\n _super.prototype.render.call(this);\n this.previousDate = previousValCopy;\n var date = valueCopy && +(valueCopy);\n var dateIdString = '*[id^=\"/id\"]'.replace('/id', '' + date);\n if (!this.strictMode) {\n this.setProperties({ 'value': valueCopy }, true);\n }\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll(dateIdString)[0])) {\n if (this.calendarElement.querySelectorAll(dateIdString)[0].classList.contains('e-disabled')) {\n if (!this.strictMode) {\n this.setProperties({ 'value': null }, true);\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n }\n }\n var inputVal;\n if (this.getModuleName() === 'datetimepicker') {\n inputVal = this.globalize.formatDate(valueCopy, {\n format: !isNullOrUndefined(this.format) ? this.format : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n });\n }\n else {\n inputVal = this.globalize.formatDate(valueCopy, { format: this.format, type: 'dateTime', skeleton: 'yMd' });\n }\n Input.setValue(inputVal, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n DatePicker.prototype.setAriaAttributes = function () {\n if (this.isCalendar()) {\n Input.addAttributes({ 'aria-expanded': 'true' }, this.inputElement);\n attributes(this.inputElement, {\n 'aria-activedescendant': '' + this.setActiveDescendant()\n });\n }\n else {\n Input.addAttributes({ 'aria-expanded': 'false' }, this.inputElement);\n attributes(this.inputElement, {\n 'aria-activedescendant': 'null'\n });\n }\n };\n DatePicker.prototype.errorClass = function () {\n if ((!isNullOrUndefined(this.value) && !(+this.value >= +this.min && +this.value <= +this.max))\n || (!this.strictMode && this.inputElement.value !== '' && isNullOrUndefined(this.value))) {\n addClass([this.inputWrapper.container], ERROR);\n }\n else {\n removeClass([this.inputWrapper.container], ERROR);\n }\n };\n /**\n * Called internally if any of the property value changed.\n * returns void\n * @private\n */\n DatePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n var options = { format: this.format, type: 'dateTime', skeleton: 'yMd' };\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n if (typeof newProp.value === 'string') {\n newProp.value = this.globalize.parseDate(newProp.value, options);\n }\n this.setProperties({ value: newProp.value }, true);\n this.previousEleValue = this.inputElement.value;\n if (isNullOrUndefined(this.value)) {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n this.updateInput();\n this.changeTrigger();\n break;\n case 'format':\n this.updateInput();\n break;\n case 'placeholder':\n Input.setPlaceholder(this.placeholder, this.inputElement);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.inputElement);\n if (!this.enabled) {\n this.inputElement.setAttribute('aria-disabled', 'true');\n }\n else {\n this.inputElement.setAttribute('aria-disabled', 'false');\n }\n this.bindEvents();\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.inputElement);\n this.updateInput();\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n break;\n case 'cssClass':\n Input.setCssClass(newProp.cssClass, [this.inputWrapper.container]);\n if (this.popupWrapper) {\n addClass([this.popupWrapper], [newProp.cssClass]);\n }\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n break;\n case 'strictMode':\n this.updateInput();\n break;\n case 'width':\n this.setWidth(newProp.width);\n break;\n default:\n if (this.calendarElement) {\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n }\n break;\n }\n this.hide();\n }\n };\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(1000)\n ], DatePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property('Never')\n ], DatePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"destroyed\", void 0);\n DatePicker = __decorate([\n NotifyPropertyChanges\n ], DatePicker);\n return DatePicker;\n}(Calendar));\nexport { DatePicker };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { Property, EventHandler, Internationalization, NotifyPropertyChanges, detach, getUniqueID } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Event, L10n, Browser, ChildProperty } from '@syncfusion/ej2-base';\nimport { addClass, createElement, remove, closest, select, prepend, removeClass, attributes, Collection } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, isUndefined, formatUnit, setValue, rippleEffect, merge, extend } from '@syncfusion/ej2-base';\nimport { Calendar } from '../calendar/calendar';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { ListBase, cssClass as ListBaseClasses } from '@syncfusion/ej2-lists';\nvar DATERANGEWRAPPER = 'e-date-range-wrapper';\nvar INPUTCONTAINER = 'e-input-group';\nvar DATERANGEICON = 'e-input-group-icon e-range-icon e-icons';\nvar POPUP = 'e-popup';\nvar LEFTCALENDER = 'e-left-calendar';\nvar RIGHTCALENDER = 'e-right-calendar';\nvar LEFTCONTAINER = 'e-left-container';\nvar RIGHTCONTAINER = 'e-right-container';\nvar ROOT = 'e-daterangepicker';\nvar ERROR = 'e-error';\nvar ACTIVE = 'e-active';\nvar STARTENDCONTAINER = 'e-start-end';\nvar STARTDATE = 'e-start-date';\nvar ENDDATE = 'e-end-date';\nvar STARTBUTTON = 'e-start-btn';\nvar INPUTFOCUS = 'e-input-focus';\nvar ENDBUTTON = 'e-end-btn';\nvar RANGEHOVER = 'e-range-hover';\nvar OTHERMONTH = 'e-other-month';\nvar STARTLABEL = 'e-start-label';\nvar ENDLABEL = 'e-end-label';\nvar DISABLED = 'e-disabled';\nvar SELECTED = 'e-selected';\nvar CALENDAR = 'e-calendar';\nvar NEXTICON = 'e-next';\nvar PREVICON = 'e-prev';\nvar HEADER = 'e-header';\nvar TITLE = 'e-title';\nvar ICONCONTAINER = 'e-icon-container';\nvar RANGECONTAINER = 'e-date-range-container';\nvar RANGEHEADER = 'e-range-header';\nvar PRESETS = 'e-presets';\nvar FOOTER = 'e-footer';\nvar RANGEBORDER = 'e-range-border';\nvar TODAY = 'e-today';\nvar FOCUSDATE = 'e-focused-date';\nvar CONTENT = 'e-content';\nvar DAYSPAN = 'e-day-span';\nvar WEEKNUMBER = 'e-week-number';\nvar DATEDISABLED = 'e-date-disabled';\nvar ICONDISABLED = 'e-icon-disabled';\nvar CALENDARCONTAINER = 'e-calendar-container';\nvar SEPARATOR = 'e-separator';\nvar APPLY = 'e-apply';\nvar CANCEL = 'e-cancel';\nvar DEVICE = 'e-device';\nvar OVERLAY = 'e-overlay';\nvar CHANGEICON = 'e-change-icon e-icons';\nvar LISTCLASS = ListBaseClasses.li;\nvar RTL = 'e-rtl';\nvar HOVER = 'e-hover';\nvar HIDE = 'e-hide';\nvar OVERFLOW = 'e-range-overflow';\nvar OFFSETVALUE = 4;\nvar Presets = /** @class */ (function (_super) {\n __extends(Presets, _super);\n function Presets() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Presets.prototype, \"label\", void 0);\n __decorate([\n Property()\n ], Presets.prototype, \"start\", void 0);\n __decorate([\n Property()\n ], Presets.prototype, \"end\", void 0);\n return Presets;\n}(ChildProperty));\nexport { Presets };\n/**\n * Represents the DateRangePicker component that allows user to select the date range from the calendar\n * or entering the range through the input element.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar DateRangePicker = /** @class */ (function (_super) {\n __extends(DateRangePicker, _super);\n /**\n * Constructor for creating the widget\n */\n function DateRangePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isCustomRange = false;\n _this.isCustomWindow = false;\n _this.presetsItem = [];\n _this.liCollections = [];\n _this.previousEleValue = '';\n _this.isTab = false;\n _this.isKeyPopup = false;\n _this.dateDisabled = false;\n _this.isRangeIconClicked = false;\n _this.isMaxDaysClicked = false;\n _this.disabledDays = [];\n return _this;\n }\n /**\n * To Initialize the control rendering.\n * @return void\n * @private\n */\n DateRangePicker.prototype.render = function () {\n this.initialize();\n };\n /**\n * Initialize the event handler\n * @returns void\n * @private\n */\n DateRangePicker.prototype.preRender = function () {\n this.presetKeyConfig = {\n moveUp: 'uparrow',\n moveDown: 'downarrow',\n enter: 'enter',\n tab: 'tab'\n };\n this.keyInputConfigs = {\n altUpArrow: 'alt+uparrow',\n altDownArrow: 'alt+downarrow',\n escape: 'escape',\n enter: 'enter',\n tab: 'tab',\n };\n this.defaultConstant = {\n placeholder: '',\n startLabel: 'Start Date',\n endLabel: 'End Date',\n customRange: 'Custom Range',\n applyText: 'Apply',\n cancelText: 'Cancel',\n selectedDays: 'Selected Days',\n days: 'days'\n };\n /**\n * Mobile View\n */\n this.isMobile = window.matchMedia('(max-width:550px)').matches;\n this.inputElement = this.element;\n this.angularTag = null;\n if (this.element.tagName === 'EJS-DATERANGEPICKER') {\n this.angularTag = this.element.tagName;\n this.inputElement = createElement('input');\n this.element.appendChild(this.inputElement);\n }\n this.cloneElement = this.element.cloneNode(true);\n if (this.element.getAttribute('id')) {\n if (this.angularTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n this.element.id = getUniqueID('ej2-datetimepicker');\n if (this.angularTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n this.initProperty();\n _super.prototype.preRender.call(this);\n this.navNextFunction = this.navNextMonth.bind(this);\n this.navPrevFunction = this.navPrevMonth.bind(this);\n this.deviceNavNextFunction = this.deviceNavNext.bind(this);\n this.deviceNavPrevFunction = this.deviceNavPrevious.bind(this);\n };\n ;\n DateRangePicker.prototype.initProperty = function () {\n this.value = null;\n this.start = this.depth = 'Month';\n };\n DateRangePicker.prototype.initialize = function () {\n merge(this.keyConfigs, { shiftTab: 'shift+tab' });\n this.setProperties({ startDate: this.checkDateValue(new Date('' + this.startDate)) }, true); // persis the value propeerty.\n this.setProperties({ endDate: this.checkDateValue(new Date('' + this.endDate)) }, true);\n this.setProperties({ min: this.checkDateValue(new Date('' + this.min)) }, true);\n this.setProperties({ max: this.checkDateValue(new Date('' + this.max)) }, true);\n this.checkHtmlAttributes();\n this.globalize = new Internationalization(this.locale);\n this.l10n = new L10n('daterangepicker', this.defaultConstant, this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n this.processPresets();\n this.createInput();\n this.bindEvents();\n };\n DateRangePicker.prototype.processPresets = function () {\n var i = 0;\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label)) {\n for (var _i = 0, _a = this.presets; _i < _a.length; _i++) {\n var range = _a[_i];\n var id = range.label.replace(/\\s+/g, '') + '_' + (++i);\n this.presetsItem.push({ id: id, text: range.label, start: range.start, end: range.end });\n }\n this.validateDates();\n var startDate = isNullOrUndefined(this.startDate) ? null : new Date(+this.startDate);\n var endDate = isNullOrUndefined(this.endDate) ? null : new Date(+this.endDate);\n this.presetsItem.push({ id: 'custom_range', text: this.l10n.getConstant('customRange'), start: startDate, end: endDate });\n if (!isNullOrUndefined(this.startDate) && !isNullOrUndefined(this.endDate)) {\n this.isCustomRange = true;\n this.activeIndex = this.presetsItem.length - 1;\n }\n }\n };\n DateRangePicker.prototype.bindEvents = function () {\n if (this.enabled) {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.rangeIconHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n this.bindClearEvent();\n if (!this.isMobile) {\n this.inputKeyboardModule = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown', keyAction: this.inputHandler.bind(this), keyConfigs: this.keyInputConfigs\n });\n }\n }\n else {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.rangeIconHandler);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.inputKeyboardModule)) {\n this.inputKeyboardModule.destroy();\n }\n }\n }\n };\n DateRangePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.resetHandler, this);\n }\n };\n DateRangePicker.prototype.resetHandler = function (e) {\n e.preventDefault();\n this.clear();\n };\n DateRangePicker.prototype.clear = function () {\n this.setProperties({ startDate: null }, true);\n this.setProperties({ endDate: null }, true);\n Input.setValue('', this.inputElement, this.floatLabelType);\n this.changeTrigger();\n };\n DateRangePicker.prototype.rangeIconHandler = function (e) {\n e.preventDefault();\n this.targetElement = null;\n if (this.isPopupOpen()) {\n this.applyFunction(e);\n }\n else {\n this.isRangeIconClicked = true;\n this.show();\n if (!Browser.isDevice) {\n this.inputWrapper.container.children[0].focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n }\n };\n DateRangePicker.prototype.checkHtmlAttributes = function () {\n this.globalize = new Internationalization(this.locale);\n var attributes;\n attributes = ['startDate', 'endDate', 'minDays', 'maxDays', 'min', 'max', 'disabled',\n 'readonly', 'style', 'name', 'placeholder', 'type'];\n var format = { format: this.format, type: 'date', skeleton: 'yMd' };\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n var disabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '';\n this.setProperties({ enabled: !disabled }, true);\n break;\n case 'readonly':\n var readonly = this.inputElement.getAttribute(prop) === 'readonly' ||\n this.inputElement.getAttribute(prop) === '';\n this.setProperties({ readonly: readonly }, true);\n break;\n case 'placeholder':\n if (isNullOrUndefined(this.placeholder) || this.placeholder.trim() === '') {\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, true);\n }\n break;\n case 'style':\n this.inputElement.setAttribute('style', '' + this.inputElement.getAttribute(prop));\n break;\n case 'min':\n if (isNullOrUndefined(this.min) || +this.min === +new Date(1900, 0, 1)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.setProperties(setValue(prop, dateValue, {}), true);\n }\n break;\n case 'name':\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute(prop));\n break;\n case 'max':\n if (isNullOrUndefined(this.max) || +this.max === +new Date(2099, 11, 31)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.setProperties(setValue(prop, dateValue, {}), true);\n }\n break;\n case 'startDate':\n if (isNullOrUndefined(this.startDate)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.setProperties(setValue(prop, dateValue, {}), true);\n }\n break;\n case 'endDate':\n if (isNullOrUndefined(this.endDate)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.setProperties(setValue(prop, dateValue, {}), true);\n }\n break;\n case 'minDays':\n if (isNullOrUndefined(this.minDays)) {\n this.setProperties(setValue(prop, parseInt(this.inputElement.getAttribute(prop), 10), {}), true);\n }\n break;\n case 'maxDays':\n if (isNullOrUndefined(this.maxDays)) {\n this.setProperties(setValue(prop, parseInt(this.inputElement.getAttribute(prop), 10), {}), true);\n }\n break;\n case 'type':\n if (this.inputElement.getAttribute(prop) !== 'text') {\n this.inputElement.setAttribute('type', 'text');\n }\n break;\n }\n }\n }\n };\n DateRangePicker.prototype.createPopup = function () {\n this.activeIndex = this.presetsItem.length - 1;\n this.isCustomRange = true;\n for (var i = 0; i <= this.presetsItem.length - 2; i++) {\n var startDate = this.presetsItem[i].start;\n var endDate = this.presetsItem[i].end;\n if (this.startDate && this.endDate) {\n if ((+startDate.setMilliseconds(0) === +this.startDate.setMilliseconds(0)) &&\n (+endDate.setMilliseconds(0) === +this.endDate.setMilliseconds(0))) {\n this.activeIndex = i;\n this.isCustomRange = false;\n }\n }\n }\n this.popupWrapper = createElement('div', { id: this.element.id + '_popup', className: ROOT + ' ' + POPUP });\n var isPreset = (!this.isCustomRange || this.isMobile);\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && isPreset) {\n this.isCustomWindow = false;\n this.createPresets();\n document.body.appendChild(this.popupWrapper);\n this.listRippleEffect();\n this.renderPopup();\n }\n else {\n this.isCustomWindow = true;\n this.renderControl();\n }\n };\n DateRangePicker.prototype.renderControl = function () {\n this.createControl();\n this.bindCalendarEvents();\n this.updateRange((this.isMobile ? [this.calendarElement] : [this.leftCalendar, this.rightCalendar]));\n if (!isNullOrUndefined(this.endDate) && !isNullOrUndefined(this.startDate)) {\n this.disabledDateRender();\n }\n this.updateHeader();\n };\n DateRangePicker.prototype.clearCalendarEvents = function () {\n EventHandler.clearEvents(this.leftCalPrevIcon);\n EventHandler.clearEvents(this.leftCalNextIcon);\n EventHandler.clearEvents(this.rightCalPrevIcon);\n EventHandler.clearEvents(this.rightCalNextIcon);\n EventHandler.clearEvents(this.headerTitleElement);\n };\n DateRangePicker.prototype.updateNavIcons = function () {\n this.previousIcon = this.rightCalPrevIcon;\n this.nextIcon = this.leftCalNextIcon;\n this.nextIconHandler(this.compareMonths(new Date('' + this.leftCalCurrentDate), this.rightCalCurrentDate) < 1);\n this.previousIconHandler(this.compareMonths(new Date('' + this.leftCalCurrentDate), this.rightCalCurrentDate) < 1);\n };\n DateRangePicker.prototype.calendarIconEvent = function () {\n this.clearCalendarEvents();\n if (this.leftCalPrevIcon && !this.leftCalPrevIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.leftCalPrevIcon, 'mousedown', this.navPrevFunction);\n }\n if (this.leftCalNextIcon && !this.leftCalNextIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.leftCalNextIcon, 'mousedown', this.navNextFunction);\n }\n if (this.rightCalPrevIcon && !this.rightCalPrevIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.rightCalPrevIcon, 'mousedown', this.navPrevFunction);\n }\n if (this.rightCalNextIcon && !this.rightCalNextIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.rightCalNextIcon, 'mousedown', this.navNextFunction);\n }\n };\n DateRangePicker.prototype.bindCalendarEvents = function () {\n if (!this.isMobile) {\n this.updateNavIcons();\n this.calendarIconEvent();\n this.calendarIconRipple();\n this.headerTitleElement = this.popupObj.element.querySelector('.' + RIGHTCALENDER + ' .' + HEADER + ' .' + TITLE);\n EventHandler.clearEvents(this.headerTitleElement);\n this.headerTitleElement = this.popupObj.element.querySelector('.' + LEFTCALENDER + ' .' + HEADER + ' .' + TITLE);\n EventHandler.clearEvents(this.headerTitleElement);\n this.leftKeyboardModule = new KeyboardEvents(this.leftCalendar, {\n eventName: 'keydown',\n keyAction: this.keyInputHandler.bind(this),\n keyConfigs: this.keyConfigs\n });\n this.rightKeyboardModule = new KeyboardEvents(this.rightCalendar, {\n eventName: 'keydown',\n keyAction: this.keyInputHandler.bind(this),\n keyConfigs: this.keyConfigs\n });\n }\n else {\n EventHandler.clearEvents(this.headerTitleElement);\n this.deviceCalendarEvent();\n EventHandler.add(this.startButton.element, 'click', this.deviceHeaderClick, this);\n EventHandler.add(this.endButton.element, 'click', this.deviceHeaderClick, this);\n }\n this.bindCalendarCellEvents();\n this.removeFocusedDate();\n };\n DateRangePicker.prototype.calendarIconRipple = function () {\n rippleEffect(this.leftCalPrevIcon, { selector: '.e-prev', duration: 400, isCenterRipple: true });\n rippleEffect(this.leftCalNextIcon, { selector: '.e-next', duration: 400, isCenterRipple: true });\n rippleEffect(this.rightCalPrevIcon, { selector: '.e-prev', duration: 400, isCenterRipple: true });\n rippleEffect(this.rightCalNextIcon, { selector: '.e-next', duration: 400, isCenterRipple: true });\n };\n DateRangePicker.prototype.deviceCalendarEvent = function () {\n EventHandler.clearEvents(this.nextIcon);\n EventHandler.clearEvents(this.previousIcon);\n rippleEffect(this.nextIcon, { selector: '.e-prev', duration: 400, isCenterRipple: true });\n rippleEffect(this.previousIcon, { selector: '.e-next', duration: 400, isCenterRipple: true });\n if (this.nextIcon && !this.nextIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.nextIcon, 'mousedown', this.deviceNavNextFunction);\n }\n if (this.previousIcon && !this.previousIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.previousIcon, 'mousedown', this.deviceNavPrevFunction);\n }\n };\n DateRangePicker.prototype.deviceNavNext = function (e) {\n var calendar = closest(e.target, '.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n this.navigateNext(e);\n this.deviceNavigation();\n };\n DateRangePicker.prototype.deviceNavPrevious = function (e) {\n var calendar = closest(e.target, '.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n this.navigatePrevious(e);\n this.deviceNavigation();\n };\n DateRangePicker.prototype.updateDeviceCalendar = function (calendar) {\n if (calendar) {\n this.previousIcon = calendar.querySelector('.' + PREVICON);\n this.nextIcon = calendar.querySelector('.' + NEXTICON);\n this.calendarElement = calendar;\n this.deviceCalendar = calendar;\n this.contentElement = calendar.querySelector('.' + CONTENT);\n this.tableBodyElement = select('.' + CONTENT + ' tbody', calendar);\n this.table = calendar.querySelector('.' + CONTENT).getElementsByTagName('table')[0];\n this.headerTitleElement = calendar.querySelector('.' + HEADER + ' .' + TITLE);\n this.headerElement = calendar.querySelector('.' + HEADER);\n }\n };\n DateRangePicker.prototype.deviceHeaderClick = function (event) {\n var element = event.currentTarget;\n if (element.classList.contains(STARTBUTTON) && !isNullOrUndefined(this.startDate)) {\n this.endButton.element.classList.remove(ACTIVE);\n this.startButton.element.classList.add(ACTIVE);\n var calendar = this.popupObj.element.querySelector('.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n if (isNullOrUndefined(this.calendarElement.querySelector('.' + STARTDATE + ':not(.e-other-month)'))) {\n this.currentDate = new Date(+this.startDate);\n remove(this.tableBodyElement);\n this.renderMonths();\n this.deviceNavigation();\n }\n this.removeClassDisabled();\n }\n else if (!isNullOrUndefined(this.startDate) && !isNullOrUndefined(this.endDate)) {\n this.startButton.element.classList.remove(ACTIVE);\n this.endButton.element.classList.add(ACTIVE);\n var calendar = this.popupObj.element.querySelector('.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n if (isNullOrUndefined(this.calendarElement.querySelector('.' + ENDDATE + ':not(.e-other-month)'))) {\n this.currentDate = new Date(+this.endDate);\n remove(this.tableBodyElement);\n this.renderMonths();\n this.deviceNavigation();\n }\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + CALENDAR));\n this.selectableDates();\n }\n };\n DateRangePicker.prototype.inputFocusHandler = function () {\n this.trigger('focus');\n };\n DateRangePicker.prototype.inputBlurHandler = function () {\n var value = this.inputElement.value;\n if (!isNullOrUndefined(this.presetsItem)) {\n if (this.presetsItem.length > 0 && this.previousEleValue !== this.inputElement.value) {\n this.activeIndex = this.presetsItem.length - 1;\n this.isCustomRange = true;\n }\n }\n if (!isNullOrUndefined(value) && value.trim() !== '') {\n var range = value.split(' ' + this.separator + ' ');\n if (range.length > 1) {\n var dateOptions = { format: this.format, type: 'date', skeleton: 'yMd' };\n var startDate = this.globalize.parseDate(range[0].trim(), dateOptions);\n var endDate = this.globalize.parseDate(range[1].trim(), dateOptions);\n if (!isNullOrUndefined(startDate) && !isNaN(+startDate) && !isNullOrUndefined(endDate) && !isNaN(+endDate)) {\n this.setProperties({ startDate: startDate }, true);\n this.setProperties({ endDate: endDate }, true);\n this.refreshControl();\n this.changeTrigger();\n this.trigger('blur');\n return;\n }\n }\n }\n if (!this.strictMode) {\n this.clearRange();\n }\n else {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.updateInput();\n }\n this.errorClass();\n this.changeTrigger();\n this.trigger('blur');\n };\n DateRangePicker.prototype.clearRange = function () {\n this.setProperties({ startDate: null }, true);\n this.setProperties({ endDate: null }, true);\n this.previousStartValue = this.previousEndValue = null;\n this.currentDate = null;\n };\n DateRangePicker.prototype.errorClass = function () {\n var inputStr = this.inputElement.value.trim();\n if (isNullOrUndefined(this.endDate) && isNullOrUndefined(this.startDate) && inputStr !== '') {\n addClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'true' });\n }\n else {\n removeClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n }\n };\n DateRangePicker.prototype.keyCalendarUpdate = function (isLeftCalendar, ele) {\n this.removeFocusedDate();\n if (isLeftCalendar) {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n ele = this.leftCalendar;\n }\n else {\n this.rightCalCurrentDate = new Date(+this.currentDate);\n ele = this.rightCalendar;\n }\n this.updateCalendarElement(ele);\n this.table.focus();\n return ele;\n };\n DateRangePicker.prototype.navInCalendar = function (e, isLeftCalendar, leftLimit, rightLimit, ele) {\n var date;\n var min = this.min;\n var max;\n if (!isNullOrUndefined(this.maxDays) && this.isMaxDaysClicked) {\n max = new Date(new Date(+this.startDate).setDate(this.startDate.getDate() + (this.maxDays - 1)));\n }\n else {\n max = this.max;\n }\n switch (e.action) {\n case 'moveRight':\n date = new Date(+this.currentDate);\n this.addDay(date, 1, e, max, min);\n if (isLeftCalendar && +date === +rightLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.KeyboardNavigate(1, 0, e, max, min);\n this.keyNavigation(ele, e);\n break;\n case 'moveLeft':\n date = new Date(+this.currentDate);\n this.addDay(date, -1, e, max, min);\n if (!isLeftCalendar && +date === +leftLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.KeyboardNavigate(-1, 0, e, max, min);\n this.keyNavigation(ele, e);\n break;\n case 'moveUp':\n date = new Date(+this.currentDate);\n this.addDay(date, -7, e, max, min);\n if (!isLeftCalendar && +date <= +leftLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.KeyboardNavigate(-7, 0, e, max, min);\n this.keyNavigation(ele, e);\n break;\n case 'moveDown':\n date = new Date(+this.currentDate);\n this.addDay(date, 7, e, max, min);\n if (isLeftCalendar && +date >= +rightLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.KeyboardNavigate(7, 0, e, max, min);\n this.keyNavigation(ele, e);\n break;\n case 'home':\n this.currentDate = this.firstDay(this.currentDate);\n remove(this.tableBodyElement);\n this.renderMonths();\n this.keyNavigation(ele, e);\n break;\n case 'end':\n this.currentDate = this.lastDay(this.currentDate);\n remove(this.tableBodyElement);\n this.renderMonths();\n this.keyNavigation(ele, e);\n break;\n }\n };\n DateRangePicker.prototype.keyInputHandler = function (e) {\n var date;\n var rightDateLimit = new Date(this.rightCalCurrentDate.getFullYear(), this.rightCalCurrentDate.getMonth(), 1);\n var leftDateLimit = new Date(this.leftCalCurrentDate.getFullYear(), this.leftCalCurrentDate.getMonth() + 1, 0);\n var ele = closest(e.target, '.' + RIGHTCALENDER);\n ele = isNullOrUndefined(ele) ? this.leftCalendar : ele;\n var isLeftCalendar = ele.classList.contains(LEFTCALENDER);\n this.updateCalendarElement(ele);\n var focusedDate = ele.querySelector('tr td.' + FOCUSDATE);\n var startDate = ele.querySelector('tr td.' + STARTDATE);\n var endDate = ele.querySelector('tr td.' + ENDDATE);\n if (!isNullOrUndefined(focusedDate)) {\n this.currentDate = this.currentDate;\n }\n else if (!isNullOrUndefined(endDate) && !this.dateDisabled) {\n this.currentDate = new Date(+this.endDate);\n }\n else if (!isNullOrUndefined(startDate) && !this.dateDisabled) {\n this.currentDate = new Date(+this.startDate);\n }\n else if (!this.dateDisabled) {\n this.currentDate.setDate(1);\n }\n switch (e.action) {\n case 'select':\n var element = !isNullOrUndefined(focusedDate) ? focusedDate : startDate;\n if (!isNullOrUndefined(element) && !element.classList.contains(DISABLED)) {\n this.selectRange(e, (element));\n }\n e.preventDefault();\n break;\n case 'controlHome':\n var yearDate = new Date(this.currentDate.getFullYear(), 0, 1);\n if (!isLeftCalendar && +yearDate < +leftDateLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 0, 1));\n this.keyNavigation(ele, e);\n break;\n case 'controlEnd':\n yearDate = new Date(this.currentDate.getFullYear(), 11, 31);\n if (isLeftCalendar && +yearDate > +rightDateLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 11, 31));\n this.keyNavigation(ele, e);\n break;\n case 'pageUp':\n date = new Date(+this.currentDate);\n this.addMonths(date, -1);\n if (!isLeftCalendar && +date <= +leftDateLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.addMonths(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'pageDown':\n date = new Date(+this.currentDate);\n this.addMonths(date, 1);\n if (isLeftCalendar && +date >= +rightDateLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.addMonths(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'shiftPageUp':\n date = new Date(+this.currentDate);\n this.addYears(date, -1);\n if (!isLeftCalendar && +date <= +leftDateLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.addYears(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'shiftPageDown':\n date = new Date(+this.currentDate);\n this.addYears(date, 1);\n if (isLeftCalendar && +date >= +rightDateLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.addYears(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'shiftTab':\n if (!isNullOrUndefined(this.presetElement)) {\n this.presetElement.setAttribute('tabindex', '0');\n this.presetElement.focus();\n this.removeFocusedDate();\n }\n e.preventDefault();\n break;\n default:\n this.navInCalendar(e, isLeftCalendar, leftDateLimit, rightDateLimit, ele);\n this.checkMinMaxDays();\n }\n this.presetHeight();\n };\n DateRangePicker.prototype.keyNavigation = function (calendar, e) {\n this.bindCalendarCellEvents(calendar);\n if (calendar.classList.contains(LEFTCALENDER)) {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n }\n else {\n this.rightCalCurrentDate = new Date(+this.currentDate);\n }\n this.updateNavIcons();\n this.calendarIconEvent();\n this.updateRange([calendar]);\n this.dateDisabled = this.isDateDisabled(this.currentDate);\n e.preventDefault();\n };\n DateRangePicker.prototype.inputHandler = function (e) {\n switch (e.action) {\n case 'altUpArrow':\n if (this.isPopupOpen()) {\n this.hide();\n }\n break;\n case 'altDownArrow':\n if (!this.isPopupOpen()) {\n this.show();\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.leftCalendar)) {\n this.calendarFocus();\n }\n }\n this.isKeyPopup = true;\n this.isRangeIconClicked = false;\n }\n break;\n case 'escape':\n if (this.isPopupOpen()) {\n this.hide();\n }\n break;\n case 'enter':\n if (document.activeElement === this.inputElement) {\n this.inputBlurHandler();\n this.hide();\n }\n break;\n case 'tab':\n if (document.activeElement === this.inputElement && this.isPopupOpen()) {\n this.hide();\n e.preventDefault();\n }\n break;\n }\n };\n DateRangePicker.prototype.bindCalendarCellEvents = function (calendar) {\n var tdCells;\n if (calendar) {\n tdCells = calendar.querySelectorAll('.' + CALENDAR + ' td');\n }\n else {\n tdCells = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' td');\n }\n for (var _i = 0, tdCells_1 = tdCells; _i < tdCells_1.length; _i++) {\n var cell = tdCells_1[_i];\n EventHandler.clearEvents(cell);\n var disabledCell = void 0;\n disabledCell = cell.classList.contains(DISABLED) || cell.classList.contains(DATEDISABLED);\n if (!disabledCell && !cell.classList.contains(WEEKNUMBER)) {\n EventHandler.add(cell, 'mousedown', this.selectRange, this);\n if (!this.isMobile) {\n EventHandler.add(cell, 'mouseover', this.hoverSelection, this);\n }\n }\n }\n };\n DateRangePicker.prototype.removeFocusedDate = function () {\n var isDate = !isNullOrUndefined(this.startDate) || !isNullOrUndefined(this.endDate);\n var focusedDate;\n focusedDate = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' .' + FOCUSDATE);\n for (var _i = 0, focusedDate_1 = focusedDate; _i < focusedDate_1.length; _i++) {\n var ele = focusedDate_1[_i];\n if (!ele.classList.contains(TODAY) || (ele.classList.contains(TODAY) && (isDate))) {\n ele.classList.remove(FOCUSDATE);\n if (!ele.classList.contains(STARTDATE) && !ele.classList.contains(ENDDATE)) {\n ele.removeAttribute('aria-label');\n }\n }\n }\n };\n DateRangePicker.prototype.hoverSelection = function (event, element) {\n var currentElement = element || event.currentTarget;\n var currentDate = this.getIdValue(null, currentElement);\n if (!isNullOrUndefined(this.startDate) && isNullOrUndefined(this.endDate)) {\n var tdCells = void 0;\n tdCells = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' td');\n for (var _i = 0, tdCells_2 = tdCells; _i < tdCells_2.length; _i++) {\n var ele = tdCells_2[_i];\n var isDisabledCell = (!ele.classList.contains(DISABLED) || ele.classList.contains(DATEDISABLED));\n if (!ele.classList.contains(WEEKNUMBER) && isDisabledCell) {\n var eleDate = this.getIdValue(null, ele);\n if (+eleDate >= +this.startDate && +eleDate <= +currentDate) {\n addClass([ele], RANGEHOVER);\n }\n else {\n removeClass([ele], [RANGEHOVER]);\n }\n }\n }\n }\n };\n DateRangePicker.prototype.updateRange = function (elementCollection) {\n if (!isNullOrUndefined(this.startDate)) {\n for (var _i = 0, elementCollection_1 = elementCollection; _i < elementCollection_1.length; _i++) {\n var calendar = elementCollection_1[_i];\n var tdCells = calendar.querySelectorAll('.' + CALENDAR + ' td');\n for (var _a = 0, tdCells_3 = tdCells; _a < tdCells_3.length; _a++) {\n var ele = tdCells_3[_a];\n if (!ele.classList.contains(WEEKNUMBER) && !ele.classList.contains(DISABLED)) {\n var eleDate = this.getIdValue(null, ele);\n if (!isNullOrUndefined(this.endDate)) {\n if (+eleDate >= +this.startDate && +eleDate <= +this.endDate && +this.startDate !== +this.endDate) {\n addClass([ele], RANGEHOVER);\n }\n }\n else {\n removeClass([ele], [RANGEHOVER]);\n }\n if (!ele.classList.contains(OTHERMONTH)) {\n if (+eleDate === +this.startDate) {\n addClass([ele], [STARTDATE, SELECTED]);\n this.addSelectedAttributes(ele, this.startDate, true);\n }\n if (!isNullOrUndefined(this.endDate) && +eleDate === +this.endDate) {\n addClass([ele], [ENDDATE, SELECTED]);\n this.addSelectedAttributes(ele, this.endDate, false);\n }\n if (+eleDate === +this.startDate && !isNullOrUndefined(this.endDate) && +eleDate === +this.endDate) {\n this.addSelectedAttributes(ele, this.endDate, false, true);\n }\n }\n }\n }\n }\n }\n };\n DateRangePicker.prototype.checkMinMaxDays = function () {\n if ((!isNullOrUndefined(this.minDays) && this.minDays > 0) || (!isNullOrUndefined(this.maxDays) && this.maxDays > 0)) {\n if (!this.isMobile) {\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + LEFTCALENDER));\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + RIGHTCALENDER));\n }\n else {\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + CALENDAR));\n }\n }\n };\n DateRangePicker.prototype.rangeArgs = function () {\n var inputValue;\n var range;\n var startDate = !isNullOrUndefined(this.startDate) ?\n this.globalize.formatDate(this.startDate, { format: this.format, type: 'date', skeleton: 'yMd' }) : null;\n var endDate = !isNullOrUndefined(this.endDate) ?\n this.globalize.formatDate(this.endDate, { format: this.format, type: 'date', skeleton: 'yMd' }) : null;\n if (!isNullOrUndefined(this.endDate) && !isNullOrUndefined(this.startDate)) {\n inputValue = startDate + ' ' + this.separator + ' ' + endDate;\n range = (Math.round(Math.abs((this.startDate.getTime() - this.endDate.getTime()) / (1000 * 60 * 60 * 24))) + 1);\n }\n else {\n inputValue = '';\n range = 0;\n }\n var args = {\n value: inputValue,\n startDate: this.startDate,\n endDate: this.endDate,\n daySpan: range\n };\n return args;\n };\n DateRangePicker.prototype.otherMonthSelect = function (ele, isStartDate, sameDate) {\n var value = +this.getIdValue(null, ele);\n var dateIdString = '*[id^=\"/id\"]:not(.e-other-month)'.replace('/id', '' + value);\n var tdCell = this.popupObj.element.querySelector(dateIdString);\n if (!isNullOrUndefined(tdCell)) {\n if (isStartDate) {\n addClass([tdCell], [STARTDATE, SELECTED]);\n this.addSelectedAttributes(tdCell, this.startDate, true);\n }\n else {\n addClass([tdCell], [ENDDATE, SELECTED]);\n this.addSelectedAttributes(tdCell, this.endDate, true);\n }\n if (sameDate) {\n this.addSelectedAttributes(ele, this.endDate, false, true);\n }\n }\n };\n // tslint:disable-next-line:max-func-body-length\n DateRangePicker.prototype.selectRange = function (event, element) {\n event.preventDefault();\n var date;\n date = event instanceof MouseEvent ? this.getIdValue(event, null) : this.getIdValue(null, element);\n if (!isNullOrUndefined(this.endDate) && !isNullOrUndefined(this.startDate)) {\n if (!this.isMobile || this.isMobile && !this.endButton.element.classList.contains(ACTIVE)) {\n this.removeSelection();\n }\n }\n else if (this.isMobile && this.startButton.element.classList.contains(ACTIVE)) {\n this.removeSelection();\n }\n var ele = element || event.currentTarget;\n if (isNullOrUndefined(this.startDate)) {\n if (!isNullOrUndefined(this.previousStartValue)) {\n date.setHours(this.previousStartValue.getHours());\n date.setMinutes(this.previousStartValue.getMinutes());\n date.setSeconds(this.previousStartValue.getSeconds());\n }\n this.setProperties({ startDate: new Date('' + date) }, true);\n this.setProperties({ endDate: null }, true);\n addClass([ele], STARTDATE);\n this.addSelectedAttributes(ele, this.startDate, true);\n if (ele.classList.contains(OTHERMONTH)) {\n this.otherMonthSelect(ele, true);\n }\n this.checkMinMaxDays();\n this.applyButton.disabled = true;\n this.applyButton.element.disabled = true;\n if (this.isMobile) {\n this.endButton.element.classList.add(ACTIVE);\n this.startButton.element.classList.remove(ACTIVE);\n this.endButton.element.removeAttribute('disabled');\n this.selectableDates();\n }\n this.trigger('select', this.rangeArgs());\n }\n else {\n if (+date === +this.startDate || +date > +this.startDate) {\n if (+date === +this.startDate && !isNullOrUndefined(this.minDays) && this.minDays > 1) {\n return;\n }\n this.setProperties({ endDate: null }, true);\n if (this.isMobile || element) {\n this.hoverSelection(event, element);\n }\n if (!isNullOrUndefined(this.previousEndValue)) {\n date.setHours(this.previousEndValue.getHours());\n date.setMinutes(this.previousEndValue.getMinutes());\n date.setSeconds(this.previousEndValue.getSeconds());\n }\n this.setProperties({ endDate: new Date('' + date) }, true);\n var endEle = this.popupObj.element.querySelectorAll('.' + ENDDATE);\n if (this.isMobile) {\n this.startButton.element.classList.remove(ACTIVE);\n this.endButton.element.classList.add(ACTIVE);\n for (var _i = 0, endEle_1 = endEle; _i < endEle_1.length; _i++) {\n var ele_1 = endEle_1[_i];\n ele_1.removeAttribute('aria-label');\n if (!ele_1.classList.contains(STARTDATE)) {\n ele_1.setAttribute('aria-selected', 'false');\n removeClass([ele_1], [ENDDATE, SELECTED]);\n }\n else {\n this.addSelectedAttributes(ele_1, this.startDate, true);\n removeClass([ele_1], [ENDDATE]);\n }\n }\n }\n addClass([ele], ENDDATE);\n if (+this.endDate === +this.startDate) {\n this.addSelectedAttributes(ele, this.endDate, false, true);\n }\n else {\n this.addSelectedAttributes(ele, this.endDate, false);\n }\n if (ele.classList.contains(OTHERMONTH)) {\n if (+this.endDate === +this.startDate) {\n this.otherMonthSelect(ele, false, true);\n }\n else {\n this.otherMonthSelect(ele, false);\n }\n }\n endEle = this.popupObj.element.querySelectorAll('.' + ENDDATE);\n for (var _a = 0, endEle_2 = endEle; _a < endEle_2.length; _a++) {\n var ele_2 = endEle_2[_a];\n if (ele_2.classList.contains(STARTDATE)) {\n removeClass([ele_2], [RANGEHOVER]);\n }\n }\n this.applyButton.disabled = false;\n this.applyButton.element.disabled = false;\n if (!this.isMobile) {\n this.removeClassDisabled();\n }\n this.disabledDateRender();\n this.trigger('select', this.rangeArgs());\n }\n else if (+date < +this.startDate) {\n this.removeClassDisabled();\n this.setProperties({ startDate: new Date('' + date) }, true);\n this.removeSelectedAttributes();\n removeClass(this.popupObj.element.querySelectorAll('.' + STARTDATE), [STARTDATE, SELECTED]);\n addClass([ele], STARTDATE);\n this.addSelectedAttributes(ele, this.startDate, true);\n if (ele.classList.contains(OTHERMONTH)) {\n this.otherMonthSelect(ele, true);\n }\n this.checkMinMaxDays();\n }\n }\n addClass([ele], SELECTED);\n this.updateHeader();\n this.removeFocusedDate();\n };\n DateRangePicker.prototype.selectableDates = function () {\n if (!isNullOrUndefined(this.startDate)) {\n var tdCells = this.calendarElement.querySelectorAll('.' + CALENDAR + ' td');\n var isStartDate = false;\n for (var _i = 0, tdCells_4 = tdCells; _i < tdCells_4.length; _i++) {\n var ele = tdCells_4[_i];\n if (!ele.classList.contains(STARTDATE) && !ele.classList.contains(WEEKNUMBER)) {\n if (!ele.classList.contains(DISABLED)) {\n var eleDate = this.getIdValue(null, ele);\n if (+eleDate < +this.startDate) {\n addClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n EventHandler.clearEvents(ele);\n continue;\n }\n else {\n break;\n }\n }\n }\n if (ele.classList.contains(STARTDATE) && !ele.classList.contains(OTHERMONTH)) {\n isStartDate = true;\n break;\n }\n }\n if (isStartDate) {\n if (!this.previousIcon.classList.contains(DISABLED)) {\n addClass([this.previousIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n }\n };\n DateRangePicker.prototype.updateMinMaxDays = function (calendar) {\n if (!isNullOrUndefined(this.startDate) && (isNullOrUndefined(this.endDate) || this.isMobile)) {\n if ((!isNullOrUndefined(this.minDays) && this.minDays > 0) || (!isNullOrUndefined(this.maxDays) && this.maxDays > 0)) {\n var minDate = new Date(new Date(+this.startDate).setDate(this.startDate.getDate() + (this.minDays - 1)));\n var maxDate = new Date(new Date(+this.startDate).setDate(this.startDate.getDate() + (this.maxDays - 1)));\n minDate = (!isNullOrUndefined(this.minDays) && this.minDays > 0) ? minDate : null;\n maxDate = (!isNullOrUndefined(this.maxDays) && this.maxDays > 0) ? maxDate : null;\n var tdCells = calendar.querySelectorAll('.' + CALENDAR + ' td');\n var maxEle = void 0;\n for (var _i = 0, tdCells_5 = tdCells; _i < tdCells_5.length; _i++) {\n var ele = tdCells_5[_i];\n if (!ele.classList.contains(STARTDATE) && !ele.classList.contains(WEEKNUMBER)) {\n var eleDate = this.getIdValue(null, ele);\n if (!isNullOrUndefined(minDate) && +eleDate === +minDate && ele.classList.contains(DISABLED)) {\n minDate.setDate(minDate.getDate() + 1);\n }\n if (!ele.classList.contains(DISABLED)) {\n if (+eleDate <= +this.startDate) {\n continue;\n }\n if (!isNullOrUndefined(minDate) && +eleDate < +minDate) {\n addClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n EventHandler.clearEvents(ele);\n }\n if (!isNullOrUndefined(maxDate) && +eleDate > +maxDate) {\n addClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n this.isMaxDaysClicked = true;\n EventHandler.clearEvents(ele);\n if (isNullOrUndefined(maxEle) && !ele.classList.contains(OTHERMONTH)) {\n maxEle = ele;\n }\n }\n }\n }\n }\n if (!isNullOrUndefined(maxEle)) {\n if (this.isMobile) {\n if (!this.nextIcon.classList.contains(DISABLED)) {\n addClass([this.nextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n else {\n var calendar_1 = closest(maxEle, '.' + RIGHTCALENDER);\n calendar_1 = isNullOrUndefined(calendar_1) ? this.leftCalendar : calendar_1;\n var isLeftCalendar = calendar_1.classList.contains(LEFTCALENDER);\n if (!isLeftCalendar) {\n if (!this.rightCalNextIcon.classList.contains(DISABLED)) {\n addClass([this.rightCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n else {\n if (!this.rightCalNextIcon.classList.contains(DISABLED)) {\n addClass([this.rightCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (!this.leftCalNextIcon.classList.contains(DISABLED)) {\n addClass([this.leftCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (!this.rightCalPrevIcon.classList.contains(DISABLED)) {\n addClass([this.rightCalPrevIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n }\n }\n }\n }\n else {\n this.isMaxDaysClicked = false;\n }\n };\n DateRangePicker.prototype.removeClassDisabled = function () {\n var tdCells;\n tdCells = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' td' + '.' + DATEDISABLED);\n for (var _i = 0, tdCells_6 = tdCells; _i < tdCells_6.length; _i++) {\n var ele = tdCells_6[_i];\n if (ele.classList.contains(DATEDISABLED)) {\n removeClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n EventHandler.add(ele, 'click', this.selectRange, this);\n if (!this.isMobile) {\n EventHandler.add(ele, 'mouseover', this.hoverSelection, this);\n }\n }\n }\n if (this.isMobile) {\n if (this.nextIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.nextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (this.previousIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.previousIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n else {\n if (this.rightCalNextIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.rightCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (this.rightCalPrevIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.rightCalPrevIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (this.leftCalNextIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.leftCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n };\n DateRangePicker.prototype.updateHeader = function () {\n var format = { type: 'date', skeleton: 'yMMMd' };\n if (!isNullOrUndefined(this.endDate) && !isNullOrUndefined(this.startDate)) {\n var range = (Math.round(Math.abs((this.startDate.getTime() - this.endDate.getTime()) / (1000 * 60 * 60 * 24))) + 1);\n if (!isNullOrUndefined(this.disabledDayCnt)) {\n range = range - this.disabledDayCnt;\n this.disabledDayCnt = null;\n }\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = range.toString() + ' ' + this.l10n.getConstant('days');\n }\n else {\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = this.l10n.getConstant('selectedDays');\n }\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.endDate) && !isNullOrUndefined(this.startDate)) {\n this.popupObj.element.querySelector('.' + ENDLABEL).textContent = this.globalize.formatDate(this.endDate, format);\n }\n else {\n this.popupObj.element.querySelector('.' + ENDLABEL).textContent = this.l10n.getConstant('endLabel');\n }\n if (!isNullOrUndefined(this.startDate)) {\n this.popupObj.element.querySelector('.' + STARTLABEL).textContent = this.globalize.formatDate(this.startDate, format);\n }\n else {\n this.popupObj.element.querySelector('.' + STARTLABEL).textContent = this.l10n.getConstant('startLabel');\n }\n }\n else {\n if (!isNullOrUndefined(this.startDate)) {\n this.startButton.element.textContent = this.globalize.formatDate(this.startDate, format);\n }\n else {\n this.startButton.element.textContent = this.l10n.getConstant('startLabel');\n }\n if (!isNullOrUndefined(this.endDate) && !isNullOrUndefined(this.startDate)) {\n this.endButton.element.textContent = this.globalize.formatDate(this.endDate, format);\n }\n else {\n this.endButton.element.textContent = this.l10n.getConstant('endLabel');\n }\n }\n };\n DateRangePicker.prototype.removeSelection = function () {\n this.setProperties({ startDate: null }, true);\n this.setProperties({ endDate: null }, true);\n this.removeSelectedAttributes();\n if (this.popupObj.element.querySelectorAll('.' + SELECTED).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + SELECTED), [STARTDATE, ENDDATE, SELECTED]);\n }\n if (this.popupObj.element.querySelectorAll('.' + FOCUSDATE).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + FOCUSDATE), FOCUSDATE);\n }\n if (this.popupObj.element.querySelectorAll('.' + RANGEHOVER).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + RANGEHOVER), [RANGEHOVER]);\n }\n };\n DateRangePicker.prototype.addSelectedAttributes = function (ele, date, isStartDate, sameDate) {\n if (ele) {\n var title = this.globalize.formatDate(date, { type: 'date', skeleton: 'full' });\n if (!isNullOrUndefined(sameDate) && sameDate) {\n ele.setAttribute('aria-label', 'The current start and end date is ' + '' + title);\n }\n else {\n ele.setAttribute('aria-label', 'The current ' + (isStartDate ? 'start' : 'end') + ' date is ' + '' + title);\n }\n ele.setAttribute('aria-selected', 'true');\n }\n };\n DateRangePicker.prototype.removeSelectedAttributes = function () {\n var start = this.popupObj.element.querySelectorAll('.' + STARTDATE);\n for (var _i = 0, start_1 = start; _i < start_1.length; _i++) {\n var ele = start_1[_i];\n ele.setAttribute('aria-selected', 'false');\n ele.removeAttribute('aria-label');\n }\n var end = this.popupObj.element.querySelectorAll('.' + ENDDATE);\n for (var _a = 0, end_1 = end; _a < end_1.length; _a++) {\n var ele = end_1[_a];\n ele.setAttribute('aria-selected', 'false');\n ele.removeAttribute('aria-label');\n }\n };\n DateRangePicker.prototype.updateCalendarElement = function (calendar) {\n if (calendar.classList.contains(LEFTCALENDER)) {\n this.calendarElement = this.leftCalendar;\n this.currentDate = this.leftCalCurrentDate;\n this.previousIcon = this.leftCalPrevIcon;\n this.nextIcon = this.leftCalNextIcon;\n }\n else {\n this.calendarElement = this.rightCalendar;\n this.currentDate = this.rightCalCurrentDate;\n this.previousIcon = this.rightCalPrevIcon;\n this.nextIcon = this.rightCalNextIcon;\n }\n this.contentElement = calendar.querySelector('.' + CONTENT);\n this.tableBodyElement = select('.' + CONTENT + ' tbody', calendar);\n this.table = calendar.querySelector('.' + CONTENT).getElementsByTagName('table')[0];\n this.headerTitleElement = calendar.querySelector('.' + HEADER + ' .' + TITLE);\n this.headerElement = calendar.querySelector('.' + HEADER);\n };\n DateRangePicker.prototype.navPrevMonth = function (e) {\n e.preventDefault();\n var ele = closest(e.target, '.' + LEFTCALENDER);\n ele = isNullOrUndefined(ele) ? closest(e.target, '.' + RIGHTCALENDER) : ele;\n this.updateCalendarElement(ele);\n this.navigatePrevious(e);\n if (!isNullOrUndefined(this.startDate) && isNullOrUndefined(this.endDate)) {\n this.updateMinMaxDays(ele);\n }\n this.updateControl(ele);\n };\n DateRangePicker.prototype.deviceNavigation = function (ele) {\n this.deviceCalendarEvent();\n this.updateRange([this.popupObj.element.querySelector('.' + CALENDAR)]);\n if ((!isNullOrUndefined(this.endDate) && this.endButton.element.classList.contains(ACTIVE))) {\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + CALENDAR));\n }\n if (this.endButton.element.classList.contains(ACTIVE)) {\n this.selectableDates();\n }\n this.bindCalendarCellEvents();\n this.removeFocusedDate();\n this.popupObj.refreshPosition(this.inputElement);\n this.popupObj.show();\n };\n DateRangePicker.prototype.updateControl = function (calendar) {\n if (calendar.classList.contains(RIGHTCALENDER)) {\n this.rightCalCurrentDate = new Date(+this.currentDate);\n }\n else {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n }\n this.updateNavIcons();\n this.calendarIconEvent();\n this.bindCalendarCellEvents();\n this.removeFocusedDate();\n this.updateRange([calendar]);\n this.presetHeight();\n if (!(this.isMobile || this.enableRtl)) {\n this.popupObj.offsetX = -this.popupWrapper.getBoundingClientRect().width;\n this.popupObj.show();\n }\n };\n DateRangePicker.prototype.navNextMonth = function (event) {\n event.preventDefault();\n var ele = closest(event.target, '.' + LEFTCALENDER);\n ele = isNullOrUndefined(ele) ? closest(event.target, '.' + RIGHTCALENDER) : ele;\n this.updateCalendarElement(ele);\n this.navigateNext(event);\n if (!isNullOrUndefined(this.startDate) && isNullOrUndefined(this.endDate)) {\n this.updateMinMaxDays(ele);\n }\n this.updateControl(ele);\n };\n DateRangePicker.prototype.compareMonths = function (start, end) {\n var result;\n if (start.getFullYear() > end.getFullYear()) {\n result = -1;\n }\n else if (start.getFullYear() < end.getFullYear()) {\n if (start.getFullYear() + 1 === end.getFullYear() && start.getMonth() === 11 && end.getMonth() === 0) {\n result = -1;\n }\n else {\n result = 1;\n }\n }\n else {\n result = start.getMonth() === end.getMonth() ? 0 : start.getMonth() + 1 === end.getMonth() ? -1 : 1;\n }\n return result;\n };\n DateRangePicker.prototype.isPopupOpen = function () {\n if (!isNullOrUndefined(this.popupObj) && this.popupObj.element.classList.contains(POPUP)) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.createHeader = function () {\n var labelContainer = createElement('div', { className: STARTENDCONTAINER });\n if (!this.isMobile) {\n var startLabel = createElement('a', { className: STARTLABEL });\n var endLabel = createElement('a', { className: ENDLABEL });\n var changeIcon = createElement('span', { className: CHANGEICON });\n attributes(startLabel, { 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'Start Date', 'role': 'button' });\n attributes(endLabel, { 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'End Date', 'role': 'button' });\n labelContainer.appendChild(startLabel);\n labelContainer.appendChild(changeIcon);\n labelContainer.appendChild(endLabel);\n startLabel.textContent = this.l10n.getConstant('startLabel');\n endLabel.textContent = this.l10n.getConstant('endLabel');\n }\n else {\n var endBtn = createElement('button', { className: ENDBUTTON });\n var startBtn = createElement('button', { className: STARTBUTTON });\n this.startButton = new Button({ content: this.l10n.getConstant('startLabel') }, startBtn);\n this.endButton = new Button({ content: this.l10n.getConstant('endLabel') }, endBtn);\n labelContainer.appendChild(startBtn);\n labelContainer.appendChild(endBtn);\n }\n return labelContainer;\n };\n DateRangePicker.prototype.disableInput = function () {\n if (this.strictMode) {\n if (!isNullOrUndefined(this.previousStartValue) && !isNullOrUndefined(this.previousEndValue)) {\n this.setProperties({ startDate: this.previousStartValue }, true);\n this.setProperties({ endDate: this.previousEndValue }, true);\n this.updateInput();\n }\n }\n else {\n this.updateInput();\n this.clearRange();\n this.errorClass();\n }\n this.setProperties({ enabled: false }, true);\n Input.setEnabled(this.enabled, this.inputElement);\n this.bindEvents();\n };\n DateRangePicker.prototype.validateMinMax = function () {\n this.min = isNullOrUndefined(this.min) || !(+this.min) ? this.min = new Date(1900, 0, 1) : this.min;\n this.max = isNullOrUndefined(this.max) || !(+this.max) ? this.max = new Date(2099, 11, 31) : this.max;\n if (!(this.min <= this.max)) {\n this.disableInput();\n return;\n }\n if (!isNullOrUndefined(this.minDays) && !isNullOrUndefined(this.maxDays)) {\n if (this.maxDays > 0 && this.minDays > 0 && (this.minDays > this.maxDays)) {\n this.maxDays = null;\n }\n }\n if (!isNullOrUndefined(this.minDays) && this.minDays < 0) {\n this.minDays = null;\n }\n if (!isNullOrUndefined(this.maxDays) && this.maxDays < 0) {\n this.maxDays = null;\n }\n };\n DateRangePicker.prototype.validateDates = function () {\n this.setProperties({ value: null }, true);\n this.startDate = isNullOrUndefined(this.startDate) || isNaN(+this.startDate) ? null : (this.startDate);\n this.endDate = isNullOrUndefined(this.endDate) || isNaN(+this.endDate) ? null : (this.endDate);\n };\n DateRangePicker.prototype.validateRangeStrict = function () {\n if (!isNullOrUndefined(this.startDate)) {\n if (+this.startDate < +this.min) {\n this.setProperties({ startDate: this.min }, true);\n }\n else if (+this.startDate > +this.max) {\n this.setProperties({ startDate: this.max }, true);\n }\n }\n if (!isNullOrUndefined(this.endDate)) {\n if (+this.endDate > +this.max) {\n this.setProperties({ endDate: this.max }, true);\n }\n else if (+this.endDate < +this.min) {\n this.setProperties({ endDate: this.min }, true);\n }\n }\n if ((!isNullOrUndefined(this.startDate) && !isNullOrUndefined(this.endDate)) && +this.startDate > +this.endDate) {\n this.setProperties({ endDate: this.max }, true);\n }\n this.validateMinMaxDays();\n };\n DateRangePicker.prototype.validateRange = function () {\n if (!isNullOrUndefined(this.startDate) && +this.startDate < +this.min) {\n this.setProperties({ endDate: null }, true);\n this.setProperties({ startDate: null }, true);\n }\n if (!isNullOrUndefined(this.endDate) && +this.endDate > +this.max) {\n this.setProperties({ startDate: null }, true);\n this.setProperties({ endDate: null }, true);\n }\n if ((!isNullOrUndefined(this.startDate) && !isNullOrUndefined(this.endDate)) && +this.startDate > +this.endDate) {\n this.setProperties({ startDate: null }, true);\n this.setProperties({ endDate: null }, true);\n }\n this.validateMinMaxDays();\n };\n DateRangePicker.prototype.validateMinMaxDays = function () {\n if (!isNullOrUndefined(this.startDate) && !isNullOrUndefined(this.endDate)) {\n var range = (Math.round(Math.abs((this.startDate.getTime() - this.endDate.getTime()) / (1000 * 60 * 60 * 24))) + 1);\n if ((!isNullOrUndefined(this.minDays) && this.minDays > 0) && !(range >= this.minDays)) {\n if (this.strictMode) {\n var date = new Date(+this.startDate);\n date.setDate(date.getDate() + (this.minDays - 1));\n if (+date > +this.max) {\n this.setProperties({ endDate: this.max }, true);\n }\n else {\n this.setProperties({ endDate: date }, true);\n }\n }\n else {\n this.setProperties({ startDate: null }, true);\n this.setProperties({ endDate: null }, true);\n }\n }\n if ((!isNullOrUndefined(this.maxDays) && this.maxDays > 0) && !(range <= this.maxDays)) {\n if (this.strictMode) {\n this.endDate = new Date(+this.startDate);\n this.endDate.setDate(this.endDate.getDate() + (this.maxDays - 1));\n this.setProperties({ endDate: this.endDate }, true);\n }\n else {\n this.setProperties({ startDate: null }, true);\n this.setProperties({ endDate: null }, true);\n }\n }\n }\n };\n DateRangePicker.prototype.renderCalendar = function () {\n this.calendarElement = createElement('div');\n this.calendarElement.classList.add(CALENDAR);\n if (this.enableRtl) {\n this.calendarElement.classList.add(RTL);\n }\n attributes(this.calendarElement, { 'role': 'calendar' });\n _super.prototype.header.call(this);\n _super.prototype.content.call(this);\n };\n DateRangePicker.prototype.isSameMonth = function (start, end) {\n if (start.getMonth() === end.getMonth() && start.getFullYear() === end.getFullYear()) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.selectNextMonth = function () {\n if (!isNullOrUndefined(this.endDate) && !isNullOrUndefined(this.startDate) && !this.isSameMonth(this.endDate, this.currentDate)) {\n this.currentDate = new Date(+this.endDate);\n }\n else {\n this.currentDate.setDate(1);\n this.currentDate.setMonth(this.currentDate.getMonth() + 1);\n }\n };\n DateRangePicker.prototype.selectStartMonth = function () {\n if (!isNullOrUndefined(this.startDate)) {\n if (!isNullOrUndefined(this.max) && this.isSameMonth(this.startDate, this.max)) {\n this.currentDate = new Date(+this.max);\n this.currentDate.setDate(1);\n this.currentDate.setMonth(this.currentDate.getMonth() - 1);\n }\n else {\n this.currentDate = new Date(+this.startDate);\n }\n }\n else {\n this.currentDate = new Date();\n if (this.currentDate > this.max || this.isSameMonth(this.min, this.max) || this.isSameMonth(this.currentDate, this.max)) {\n this.currentDate = new Date(+this.max);\n this.currentDate.setDate(1);\n this.currentDate.setMonth(this.currentDate.getMonth() - 1);\n }\n else if (this.currentDate < this.min) {\n this.currentDate = new Date('' + this.min);\n }\n }\n };\n DateRangePicker.prototype.createCalendar = function () {\n var calendarContainer = createElement('div', { className: CALENDARCONTAINER });\n if (!this.isMobile) {\n this.selectStartMonth();\n this.renderCalendar();\n this.leftCalCurrentDate = new Date(+this.currentDate);\n this.calendarElement.classList.add(LEFTCALENDER);\n this.leftCalPrevIcon = this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + PREVICON);\n this.leftCalNextIcon = this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + NEXTICON);\n remove(this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + ICONCONTAINER));\n this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + HEADER).appendChild(this.leftCalNextIcon);\n this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + HEADER).appendChild(this.leftCalPrevIcon);\n prepend([this.leftCalPrevIcon], this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + HEADER));\n this.leftCalendar = this.calendarElement;\n var leftContainer = createElement('div', { className: LEFTCONTAINER });\n var rightContainer = createElement('div', { className: RIGHTCONTAINER });\n leftContainer.appendChild(this.leftCalendar);\n calendarContainer.appendChild(leftContainer);\n this.selectNextMonth();\n this.renderCalendar();\n this.rightCalCurrentDate = new Date(+this.currentDate);\n addClass([this.calendarElement], RIGHTCALENDER);\n this.rightCalendar = this.calendarElement;\n this.rightCalPrevIcon = this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + PREVICON);\n this.rightCalNextIcon = this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + NEXTICON);\n remove(this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + ICONCONTAINER));\n this.calendarElement.querySelector('table').setAttribute('tabindex', '-1');\n this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + HEADER).appendChild(this.rightCalNextIcon);\n this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + HEADER).appendChild(this.rightCalPrevIcon);\n prepend([this.rightCalPrevIcon], this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + HEADER));\n rightContainer.appendChild(this.rightCalendar);\n calendarContainer.appendChild(rightContainer);\n }\n else {\n if (!isNullOrUndefined(this.startDate)) {\n this.currentDate = new Date(+this.startDate);\n }\n _super.prototype.render.call(this);\n var prevIcon = this.calendarElement.querySelector('.' + CALENDAR + ' .' + PREVICON);\n var nextIcon = this.calendarElement.querySelector('.' + CALENDAR + ' .' + NEXTICON);\n remove(this.calendarElement.querySelector('.' + CALENDAR + ' .' + ICONCONTAINER));\n this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER).appendChild(nextIcon);\n this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER).appendChild(prevIcon);\n prepend([prevIcon], this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER));\n this.deviceCalendar = this.calendarElement;\n calendarContainer.appendChild(this.calendarElement);\n this.headerTitleElement = this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER + ' .' + TITLE);\n }\n return calendarContainer;\n };\n DateRangePicker.prototype.createControl = function () {\n var controlContainer = createElement('div', { className: RANGECONTAINER });\n var headerContainer = createElement('div', { className: RANGEHEADER });\n var labelContainer = this.createHeader();\n headerContainer.appendChild(labelContainer);\n var daySpan = createElement('div', { className: DAYSPAN });\n attributes(daySpan, { 'aria-label': 'Selected Days' });\n daySpan.textContent = this.l10n.getConstant('selectedDays');\n headerContainer.appendChild(daySpan);\n var separator = createElement('div', { className: SEPARATOR });\n var calendarContainer = this.createCalendar();\n controlContainer.appendChild(headerContainer);\n controlContainer.appendChild(separator);\n controlContainer.appendChild(calendarContainer);\n var footerSection = createElement('div', { className: FOOTER });\n var cancelBtn = createElement('button', { className: CANCEL + ' e-flat' });\n var applyBtn = createElement('button', { className: APPLY + ' e-flat e-primary' });\n footerSection.appendChild(applyBtn);\n footerSection.appendChild(cancelBtn);\n var enable = !isNullOrUndefined(this.startDate) && !isNullOrUndefined(this.endDate);\n this.cancelButton = new Button({ content: this.l10n.getConstant('cancelText') }, cancelBtn);\n this.applyButton = new Button({ content: this.l10n.getConstant('applyText'), disabled: !enable }, applyBtn);\n EventHandler.add(applyBtn, 'click', this.applyFunction, this);\n EventHandler.add(cancelBtn, 'click', this.cancelFunction, this);\n this.popupWrapper.appendChild(controlContainer);\n document.body.appendChild(this.popupWrapper);\n if (!this.isMobile) {\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label)) {\n this.createPresets();\n this.listRippleEffect();\n addClass([controlContainer], RANGEBORDER);\n addClass([this.popupWrapper], 'e-preset-wrapper');\n var presets = this.popupWrapper.querySelector('.' + PRESETS);\n presets.style.height = this.popupWrapper.querySelector('.' + RANGECONTAINER).getBoundingClientRect().height + 'px';\n }\n }\n this.popupWrapper.appendChild(footerSection);\n if (this.isMobile) {\n this.deviceHeaderUpdate();\n }\n this.renderPopup();\n };\n DateRangePicker.prototype.cancelFunction = function (eve) {\n if (!this.isMobile && this.isKeyPopup) {\n this.inputElement.focus();\n this.isKeyPopup = false;\n }\n this.hide();\n };\n DateRangePicker.prototype.deviceHeaderUpdate = function () {\n if (isNullOrUndefined(this.startDate) && isNullOrUndefined(this.endDate)) {\n this.endButton.element.setAttribute('disabled', '');\n this.startButton.element.classList.add(ACTIVE);\n }\n else if (!isNullOrUndefined(this.startDate)) {\n this.startButton.element.classList.add(ACTIVE);\n }\n };\n DateRangePicker.prototype.applyFunction = function (eve) {\n eve.preventDefault();\n if (!isNullOrUndefined(this.startDate) && !isNullOrUndefined(this.endDate)) {\n this.previousStartValue = new Date(+this.startDate);\n this.previousEndValue = new Date(+this.endDate);\n this.previousEleValue = this.inputElement.value;\n Input.setValue(this.rangeArgs().value, this.inputElement, this.floatLabelType, this.showClearButton);\n this.changeTrigger();\n this.hide();\n this.errorClass();\n }\n else {\n this.hide();\n }\n if (!this.isMobile) {\n this.isKeyPopup = false;\n if (this.isRangeIconClicked) {\n this.inputWrapper.container.children[1].focus();\n this.popupKeyboardModule = new KeyboardEvents(this.inputWrapper.container.children[1], {\n eventName: 'keydown',\n keyAction: this.popupKeyActionHandle.bind(this),\n keyConfigs: this.keyInputConfigs\n });\n }\n }\n };\n DateRangePicker.prototype.onMouseClick = function (event, item) {\n var target = item || event.target;\n var li = closest(target, '.' + LISTCLASS);\n if (li && li.classList.contains(LISTCLASS)) {\n this.setListSelection(li, event);\n }\n };\n DateRangePicker.prototype.onMouseOver = function (event) {\n var li = closest(event.target, '.' + LISTCLASS);\n if (li && li.classList.contains(LISTCLASS) && !li.classList.contains(HOVER)) {\n addClass([li], HOVER);\n }\n };\n DateRangePicker.prototype.onMouseLeave = function (event) {\n var item = closest(event.target, '.' + HOVER);\n if (!isNullOrUndefined(item)) {\n removeClass([item], HOVER);\n }\n };\n DateRangePicker.prototype.setListSelection = function (li, event) {\n if (li && (!li.classList.contains(ACTIVE) || (this.isMobile && li.classList.contains(ACTIVE)))) {\n if (this.isMobile && li.classList.contains(ACTIVE)) {\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(li);\n var values_1 = this.presetsItem[this.activeIndex];\n if (values_1.id === 'custom_range') {\n this.renderCustomPopup();\n return;\n }\n return;\n }\n this.removeListSelection();\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(li);\n addClass([li], ACTIVE);\n li.setAttribute('aria-selected', 'true');\n var values = this.presetsItem[this.activeIndex];\n if (values.id === 'custom_range') {\n this.renderCustomPopup();\n }\n else {\n this.applyPresetRange(values);\n }\n }\n };\n DateRangePicker.prototype.removeListSelection = function () {\n var item = this.presetElement.querySelector('.' + ACTIVE);\n if (!isNullOrUndefined(item)) {\n removeClass([item], ACTIVE);\n item.removeAttribute('aria-selected');\n }\n };\n DateRangePicker.prototype.applyPresetRange = function (values) {\n this.hide();\n this.presetsItem[this.presetsItem.length - 1].start = null;\n this.presetsItem[this.presetsItem.length - 1].end = null;\n this.setProperties({ startDate: values.start }, true);\n this.setProperties({ endDate: values.end }, true);\n this.refreshControl();\n this.trigger('select', this.rangeArgs());\n this.changeTrigger();\n this.previousEleValue = this.inputElement.value;\n this.isCustomRange = false;\n this.leftCalendar = this.rightCalendar = null;\n if (this.isKeyPopup) {\n this.isRangeIconClicked = false;\n this.inputElement.focus();\n }\n };\n DateRangePicker.prototype.renderCustomPopup = function () {\n this.isCustomWindow = true;\n this.popupObj.hide();\n this.popupWrapper = createElement('div', { id: this.element.id + '_popup', className: ROOT + ' ' + POPUP });\n this.renderControl();\n this.isCustomRange = true;\n if (!this.isMobile) {\n this.calendarFocus();\n }\n };\n DateRangePicker.prototype.listRippleEffect = function () {\n for (var _i = 0, _a = this.liCollections; _i < _a.length; _i++) {\n var li = _a[_i];\n rippleEffect(li);\n }\n };\n DateRangePicker.prototype.createPresets = function () {\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label)) {\n this.presetElement = createElement('div', { className: PRESETS, attrs: { 'tabindex': '0' } });\n var listTag = ListBase.createList(this.presetsItem, null, true);\n attributes(listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options' });\n this.presetElement.appendChild(listTag);\n this.popupWrapper.appendChild(this.presetElement);\n this.liCollections = this.presetElement.querySelectorAll('.' + LISTCLASS);\n this.wireListEvents();\n if (this.isMobile) {\n this.presetElement.style.width = this.inputWrapper.container.getBoundingClientRect().width + 'px';\n }\n if (!isNullOrUndefined(this.activeIndex) && this.activeIndex > -1) {\n addClass([this.liCollections[this.activeIndex]], ACTIVE);\n }\n }\n };\n DateRangePicker.prototype.wireListEvents = function () {\n EventHandler.add(this.presetElement, 'click', this.onMouseClick, this);\n if (!this.isMobile) {\n EventHandler.add(this.presetElement, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.presetElement, 'mouseout', this.onMouseLeave, this);\n }\n };\n DateRangePicker.prototype.unWireListEvents = function () {\n if (!isNullOrUndefined(this.presetElement)) {\n EventHandler.remove(this.presetElement, 'click', this.onMouseClick);\n if (!this.isMobile) {\n EventHandler.remove(this.presetElement, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.presetElement, 'mouseout', this.onMouseLeave);\n }\n }\n };\n DateRangePicker.prototype.renderPopup = function () {\n var _this = this;\n this.popupWrapper.classList.add('e-control');\n var popupWidth = this.popupWrapper.getBoundingClientRect().width;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass.trim() !== '') {\n this.popupWrapper.classList.add(this.cssClass);\n }\n if (this.isMobile && this.isCustomWindow) {\n this.modal = createElement('div');\n document.body.appendChild(this.modal);\n }\n this.popupObj = new Popup(this.popupWrapper, {\n relateTo: this.isMobile && this.isCustomWindow ? document.body :\n (!isNullOrUndefined(this.targetElement) ? this.targetElement : this.inputWrapper.container),\n position: (this.isMobile ?\n (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && !this.isCustomWindow ?\n { X: 'left', Y: 'bottom' } : { X: 'center', Y: 'center' }) :\n this.enableRtl ? { X: 'left', Y: 'bottom' } : { X: 'right', Y: 'bottom' }),\n offsetX: this.isMobile || this.enableRtl ? 0 : -popupWidth,\n offsetY: OFFSETVALUE,\n collision: this.isMobile ?\n (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && !this.isCustomWindow ?\n { X: 'fit' } : { X: 'fit', Y: 'fit' }) : { X: 'fit' },\n targetType: this.isMobile && this.isCustomWindow ? 'container' : 'relative',\n enableRtl: this.enableRtl,\n zIndex: this.zIndex,\n open: function () {\n attributes(_this.inputElement, { 'aria-expanded': 'true' });\n addClass([_this.inputWrapper.buttons[0]], ACTIVE);\n if (!_this.isMobile) {\n if (_this.cancelButton) {\n _this.btnKeyboardModule = new KeyboardEvents(_this.cancelButton.element, {\n eventName: 'keydown',\n keyAction: _this.hide.bind(_this),\n keyConfigs: { tab: 'tab' }\n });\n }\n if (!isNullOrUndefined(_this.leftCalendar)) {\n if (!_this.isRangeIconClicked) {\n _this.calendarFocus();\n }\n }\n if (!isNullOrUndefined(_this.presetElement)) {\n _this.presetKeyboardModule = new KeyboardEvents(_this.presetElement, {\n eventName: 'keydown',\n keyAction: _this.presetKeyActionHandler.bind(_this),\n keyConfigs: _this.presetKeyConfig\n });\n if (isNullOrUndefined(_this.leftCalendar)) {\n _this.presetElement.focus();\n }\n else {\n _this.presetElement.setAttribute('tabindex', '-1');\n }\n }\n _this.popupKeyBoardHandler();\n }\n },\n close: function () {\n attributes(_this.inputElement, { 'aria-expanded': 'false' });\n removeClass([_this.inputWrapper.buttons[0]], ACTIVE);\n if (!_this.isMobile) {\n if (_this.isRangeIconClicked) {\n _this.inputWrapper.container.children[1].focus();\n }\n }\n if (!isUndefined(_this.presets[0].start && _this.presets[0].end && _this.presets[0].label)) {\n _this.unWireListEvents();\n }\n if (!isNullOrUndefined(_this.popupObj)) {\n remove(_this.popupObj.element);\n _this.popupObj.destroy();\n _this.popupObj = null;\n }\n }\n });\n document.body.appendChild(this.popupObj.element);\n if (this.isMobile) {\n this.popupObj.element.classList.add(DEVICE);\n if (!Browser.isDevice) {\n this.popupObj.element.classList.add('e-bigger');\n }\n }\n if (this.isMobile && this.isCustomWindow) {\n addClass([this.modal], [DEVICE, ROOT, 'e-range-modal']);\n document.body.className += ' ' + OVERFLOW;\n this.modal.style.display = 'block';\n }\n this.presetHeight();\n if (!(this.isMobile || this.enableRtl)) {\n this.popupObj.offsetX = -this.popupWrapper.getBoundingClientRect().width;\n }\n this.popupObj.refreshPosition(this.inputElement);\n this.popupObj.show();\n EventHandler.add(document, 'mousedown touchstart', this.documentHandler, this);\n };\n DateRangePicker.prototype.calendarFocus = function () {\n var startDate = this.popupObj.element.querySelector('.' + STARTDATE);\n if (startDate) {\n var ele = closest(startDate, '.' + RIGHTCALENDER);\n ele = isNullOrUndefined(ele) ? this.leftCalendar : ele;\n if (this.isRangeIconClicked) {\n this.inputWrapper.container.focus();\n }\n else {\n ele.children[1].firstElementChild.focus();\n }\n addClass([startDate], FOCUSDATE);\n }\n else {\n if (this.isRangeIconClicked) {\n this.inputWrapper.container.focus();\n }\n else {\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n }\n };\n DateRangePicker.prototype.presetHeight = function () {\n var presets = this.popupObj && this.popupObj.element.querySelector('.' + PRESETS);\n var rangeContainer = this.popupObj && this.popupObj.element.querySelector('.' + RANGECONTAINER);\n if (!isNullOrUndefined(presets) && !isNullOrUndefined(rangeContainer)) {\n presets.style.height = rangeContainer.getBoundingClientRect().height + 'px';\n }\n };\n DateRangePicker.prototype.presetKeyActionHandler = function (e) {\n switch (e.action) {\n case 'moveDown':\n this.listMoveDown(e);\n this.setScrollPosition();\n e.preventDefault();\n break;\n case 'moveUp':\n this.listMoveUp(e);\n this.setScrollPosition();\n e.preventDefault();\n break;\n case 'enter':\n var hvrItem = this.getHoverLI();\n var actItem = this.getActiveLI();\n if (!isNullOrUndefined(this.leftCalendar) && !isNullOrUndefined(actItem)) {\n if (isNullOrUndefined(hvrItem) || (!isNullOrUndefined(actItem) && actItem === hvrItem)) {\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(actItem);\n var values = this.presetsItem[this.activeIndex];\n if (values.id === 'custom_range') {\n this.calendarFocus();\n actItem.classList.remove(HOVER);\n e.preventDefault();\n return;\n }\n }\n }\n if (!isNullOrUndefined(hvrItem) || !isNullOrUndefined(actItem)) {\n this.onMouseClick(e, hvrItem || actItem);\n }\n e.preventDefault();\n break;\n case 'tab':\n if (this.leftCalendar) {\n var item = this.getHoverLI();\n if (!isNullOrUndefined(item)) {\n item.classList.remove(HOVER);\n }\n }\n else {\n this.hide();\n e.preventDefault();\n }\n break;\n }\n };\n DateRangePicker.prototype.listMoveDown = function (e) {\n var hvrItem = this.getHoverLI();\n var actItem = this.getActiveLI();\n if (!isNullOrUndefined(hvrItem)) {\n var li = hvrItem.nextElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n removeClass([hvrItem], HOVER);\n addClass([li], HOVER);\n }\n }\n else if (!isNullOrUndefined(actItem)) {\n var li = actItem.nextElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n addClass([li], HOVER);\n }\n }\n else {\n addClass([this.liCollections[0]], HOVER);\n }\n };\n DateRangePicker.prototype.listMoveUp = function (e) {\n var hvrItem = this.getHoverLI();\n var actItem = this.getActiveLI();\n if (!isNullOrUndefined(hvrItem)) {\n var li = hvrItem.previousElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n removeClass([hvrItem], HOVER);\n addClass([li], HOVER);\n }\n }\n else if (!isNullOrUndefined(actItem)) {\n var li = actItem.previousElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n addClass([li], HOVER);\n }\n }\n };\n DateRangePicker.prototype.getHoverLI = function () {\n var item = this.presetElement.querySelector('.' + HOVER);\n return item;\n };\n DateRangePicker.prototype.getActiveLI = function () {\n var item = this.presetElement.querySelector('.' + ACTIVE);\n return item;\n };\n DateRangePicker.prototype.popupKeyBoardHandler = function () {\n this.popupKeyboardModule = new KeyboardEvents(this.popupWrapper, {\n eventName: 'keydown',\n keyAction: this.popupKeyActionHandle.bind(this),\n keyConfigs: { escape: 'escape' }\n });\n this.popupKeyboardModule = new KeyboardEvents(this.inputWrapper.container.children[1], {\n eventName: 'keydown',\n keyAction: this.popupKeyActionHandle.bind(this),\n keyConfigs: this.keyInputConfigs\n });\n };\n DateRangePicker.prototype.setScrollPosition = function () {\n var listHeight = this.presetElement.getBoundingClientRect().height;\n var hover = this.presetElement.querySelector('.' + HOVER);\n var active = this.presetElement.querySelector('.' + ACTIVE);\n var element = !isNullOrUndefined(hover) ? hover : active;\n if (!isNullOrUndefined(element)) {\n var nextEle = element.nextElementSibling;\n var height = nextEle ? nextEle.offsetTop : element.offsetTop;\n var liHeight = element.getBoundingClientRect().height;\n if ((height + element.offsetTop) > listHeight) {\n this.presetElement.scrollTop = nextEle ? (height - (listHeight / 2 + liHeight / 2)) : height;\n }\n else {\n this.presetElement.scrollTop = 0;\n }\n }\n };\n DateRangePicker.prototype.popupKeyActionHandle = function (e) {\n switch (e.action) {\n case 'escape':\n if (this.isPopupOpen()) {\n if (this.isKeyPopup) {\n this.inputElement.focus();\n this.isKeyPopup = false;\n }\n this.hide();\n }\n else {\n this.inputWrapper.container.children[1].blur();\n }\n break;\n case 'enter':\n if (!this.isPopupOpen()) {\n this.show();\n }\n else {\n this.inputWrapper.container.children[1].focus();\n }\n break;\n case 'tab':\n this.hide();\n }\n };\n DateRangePicker.prototype.documentHandler = function (e) {\n e.preventDefault();\n if (isNullOrUndefined(this.popupObj)) {\n return;\n }\n var target = e.target;\n if ((isNullOrUndefined(this.targetElement) ||\n (!isNullOrUndefined(this.targetElement) && !(target === this.targetElement))) &&\n !(closest(target, '#' + this.popupObj.element.id))\n && !(closest(target, '.' + INPUTCONTAINER) === this.inputWrapper.container)) {\n if (this.isPopupOpen()) {\n if (!this.isMobile) {\n this.isRangeIconClicked = false;\n }\n this.applyFunction(e);\n }\n }\n };\n DateRangePicker.prototype.createInput = function () {\n this.inputWrapper = Input.createInput({\n floatLabelType: this.floatLabelType,\n element: this.inputElement,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: this.cssClass,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n },\n buttons: [DATERANGEICON]\n });\n attributes(this.inputElement, {\n 'aria-readonly': this.readonly ? 'true' : 'false', 'tabindex': '1', 'aria-haspopup': 'true',\n 'aria-activedescendant': 'null', 'aria-owns': this.element.id + '_popup', 'aria-expanded': 'false',\n 'role': 'daterangepicker', 'autocomplete': 'off', 'aria-disabled': !this.enabled ? 'true' : 'false',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false'\n });\n Input.addAttributes({ 'aria-label': 'select' }, this.inputWrapper.buttons[0]);\n if (!isNullOrUndefined(this.placeholder) && this.placeholder.trim() !== '') {\n Input.addAttributes({ 'aria-placeholder': this.placeholder }, this.inputElement);\n }\n this.setEleWidth(this.width);\n addClass([this.inputWrapper.container], DATERANGEWRAPPER);\n if (isNullOrUndefined(this.element.getAttribute('name'))) {\n attributes(this.inputElement, { 'name': this.element.id });\n }\n if (this.inputElement.type === 'hidden') {\n this.inputWrapper.container.style.display = 'none';\n }\n this.refreshControl();\n this.previousEleValue = this.inputElement.value;\n };\n DateRangePicker.prototype.setEleWidth = function (width) {\n if (typeof width === 'string') {\n this.inputWrapper.container.style.width = (this.width);\n }\n else if (typeof width === 'number') {\n this.inputWrapper.container.style.width = formatUnit(this.width);\n }\n else {\n this.inputWrapper.container.style.width = '100%';\n }\n };\n DateRangePicker.prototype.refreshControl = function () {\n this.validateMinMax();\n this.validateDates();\n if (this.strictMode) {\n this.validateRangeStrict();\n }\n var isDisabled = this.disabledDates();\n if (this.strictMode && (isDisabled)) {\n this.setProperties({ startDate: this.previousStartValue }, true);\n this.setProperties({ endDate: this.previousEndValue }, true);\n }\n this.updateInput();\n if (!this.strictMode) {\n this.validateRange();\n }\n if (!this.strictMode && (isDisabled)) {\n this.clearRange();\n }\n if (!isNullOrUndefined(this.endDate) && !isNullOrUndefined(this.startDate) && !isDisabled) {\n this.disabledDateRender();\n }\n this.errorClass();\n this.previousStartValue = isNullOrUndefined(this.startDate) || isNaN(+this.startDate) ? null : new Date(+this.startDate);\n this.previousEndValue = isNullOrUndefined(this.endDate) || isNaN(+this.endDate) ? null : new Date(+this.endDate);\n };\n DateRangePicker.prototype.updateInput = function () {\n if (!isNullOrUndefined(this.endDate) && !isNullOrUndefined(this.startDate)) {\n var startDate = this.globalize.formatDate(this.startDate, { format: this.format, type: 'date', skeleton: 'yMd' });\n var endDate = this.globalize.formatDate(this.endDate, { format: this.format, type: 'date', skeleton: 'yMd' });\n Input.setValue(startDate + ' ' + this.separator + ' ' + endDate, this.inputElement, this.floatLabelType, this.showClearButton);\n this.previousStartValue = new Date(+this.startDate);\n this.previousEndValue = new Date(+this.endDate);\n }\n };\n DateRangePicker.prototype.isDateDisabled = function (date) {\n var value = new Date(+date);\n if (+value < +this.min || +value > +this.max) {\n return true;\n }\n this.virtualRenderCellArgs = {\n date: value,\n isDisabled: false,\n };\n var args = this.virtualRenderCellArgs;\n this.virtualRenderCellEvent(args);\n if (args.isDisabled) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.disabledDateRender = function () {\n this.disabledDays = [];\n this.disabledDayCnt = null;\n var localDate = new Date(+this.startDate);\n var count = 0;\n while (+localDate <= +this.endDate) {\n this.virtualRenderCellArgs = {\n date: localDate,\n isDisabled: false,\n };\n var args = this.virtualRenderCellArgs;\n this.virtualRenderCellEvent(args);\n if (args.isDisabled) {\n this.disabledDays.push(new Date(+args.date));\n if (+localDate > +this.startDate && +localDate < +this.endDate) {\n count++;\n }\n }\n this.addDay(localDate, 1, null, this.max, this.min);\n }\n this.disabledDayCnt = count;\n };\n DateRangePicker.prototype.virtualRenderCellEvent = function (args) {\n extend(this.virtualRenderCellArgs, { name: 'renderDayCell' });\n this.trigger('renderDayCell', args);\n };\n DateRangePicker.prototype.disabledDates = function () {\n var isStartDisabled = false;\n var isEndDisabled = false;\n if (!isNullOrUndefined(this.endDate) && !isNullOrUndefined(this.startDate)) {\n this.value = null;\n isStartDisabled = this.isDateDisabled(this.startDate);\n isEndDisabled = this.isDateDisabled(this.endDate);\n this.currentDate = null;\n this.value = null;\n }\n return (isStartDisabled || isEndDisabled);\n };\n DateRangePicker.prototype.changeTrigger = function () {\n if (this.previousEleValue !== this.inputElement.value) {\n this.trigger('change', this.rangeArgs());\n }\n this.previousEleValue = this.inputElement.value;\n };\n /**\n * This method is used to navigate to the month/year/decade view of the Calendar.\n * @param {string} view - Specifies the view of the Calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @returns void\n * @hidden\n */\n DateRangePicker.prototype.navigateTo = function (view, value) {\n _super.prototype.navigateTo.call(this, view, value);\n };\n /**\n * Sets the focus to widget for interaction.\n * @returns void\n */\n DateRangePicker.prototype.focusIn = function () {\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n this.inputElement.focus();\n this.trigger('focus');\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n * @returns void\n */\n DateRangePicker.prototype.focusOut = function () {\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n this.inputElement.blur();\n this.trigger('blur');\n };\n /**\n * To destroy the widget.\n * @returns void\n */\n DateRangePicker.prototype.destroy = function () {\n this.hide();\n removeClass([this.inputElement], [ROOT]);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n var ariaAttrs = {\n 'aria-readonly': this.readonly ? 'true' : 'false', 'tabindex': '1', 'aria-haspopup': 'true',\n 'aria-activedescendant': 'null', 'aria-owns': this.element.id + '_popup', 'aria-expanded': 'false',\n 'role': 'daterangepicker', 'autocomplete': 'off', 'aria-disabled': !this.enabled ? 'true' : 'false',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'aria-invalid': 'false', 'spellcheck': 'false'\n };\n Input.removeAttributes(ariaAttrs, this.inputElement);\n this.ensureInputAttribute();\n this.inputElement.classList.remove('e-input');\n if (!isNullOrUndefined(this.inputWrapper)) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'click', this.rangeIconHandler);\n if (this.angularTag === null) {\n this.inputWrapper.container.parentElement.appendChild(this.inputElement);\n }\n detach(this.inputWrapper.container);\n }\n if (!isNullOrUndefined(this.inputKeyboardModule) && !this.isMobile) {\n this.inputKeyboardModule.destroy();\n }\n if (this.popupObj) {\n if (!this.isMobile) {\n this.clearCalendarEvents();\n }\n }\n _super.prototype.destroy.call(this);\n this.inputWrapper = this.popupWrapper = this.popupObj = this.cloneElement = this.presetElement = null;\n };\n DateRangePicker.prototype.ensureInputAttribute = function () {\n for (var attr = 0; attr < this.inputElement.attributes.length; attr++) {\n var prop = this.inputElement.attributes[attr].name;\n if (isNullOrUndefined(this.cloneElement.getAttribute(prop))) {\n if (prop.toLowerCase() === 'value' || isNullOrUndefined(this.cloneElement.getAttribute('value'))) {\n this.inputElement.value = '';\n }\n this.inputElement.removeAttribute(prop);\n }\n }\n };\n /**\n * To get component name\n * @returns string\n * @private\n */\n DateRangePicker.prototype.getModuleName = function () {\n return 'daterangepicker';\n };\n /**\n * Return the properties that are maintained upon browser refresh.\n * @returns string\n */\n DateRangePicker.prototype.getPersistData = function () {\n var keyEntity = ['startDate', 'endDate'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Return the selected range and day span in the DateRangePicker.\n * @returns Object\n */\n DateRangePicker.prototype.getSelectedRange = function () {\n var range;\n if (!isNullOrUndefined(this.startDate) && !isNullOrUndefined(this.endDate)) {\n range = (Math.round(Math.abs((this.startDate.getTime() - this.endDate.getTime()) / (1000 * 60 * 60 * 24))) + 1);\n this.disabledDateRender();\n if (!isNullOrUndefined(this.disabledDayCnt)) {\n range = range - this.disabledDayCnt;\n this.disabledDayCnt = null;\n }\n }\n else {\n range = 0;\n }\n return { startDate: this.startDate, endDate: this.endDate, daySpan: range };\n };\n /**\n * To open the Popup container in the DateRangePicker component.\n * @returns void\n */\n DateRangePicker.prototype.show = function (element) {\n if (element) {\n this.targetElement = element;\n }\n if (!this.readonly) {\n this.createPopup();\n var isPreset = (!this.isCustomRange || (this.isMobile && this.isCustomRange));\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && isPreset) {\n this.setScrollPosition();\n }\n if (this.isPopupOpen() && !this.readonly) {\n var args = {\n date: this.inputElement.value,\n model: this,\n popup: this.popupObj\n };\n this.trigger('open', args);\n }\n }\n };\n /**\n * To close the Popup container in the DateRangePicker component.\n * @returns void\n */\n DateRangePicker.prototype.hide = function () {\n if (isNullOrUndefined(this.previousEndValue) && isNullOrUndefined(this.previousStartValue)) {\n this.clearRange();\n }\n else {\n if (!isNullOrUndefined(this.previousStartValue)) {\n this.setProperties({ startDate: new Date('' + this.previousStartValue) }, true);\n this.currentDate = new Date('' + this.startDate);\n }\n else {\n this.setProperties({ startDate: null }, true);\n }\n if (!isNullOrUndefined(this.previousEndValue)) {\n this.setProperties({ endDate: new Date('' + this.previousEndValue) }, true);\n }\n else {\n this.setProperties({ endDate: null }, true);\n }\n }\n if (this.isPopupOpen()) {\n var args = {\n date: this.inputElement.value,\n model: this,\n popup: this.popupObj\n };\n this.trigger('close', args);\n if (this.isMobile) {\n if (!isNullOrUndefined(this.startButton) && !isNullOrUndefined(this.endButton)) {\n EventHandler.remove(this.startButton.element, 'click', this.deviceHeaderClick);\n EventHandler.remove(this.endButton.element, 'click', this.deviceHeaderClick);\n }\n }\n if (this.popupObj) {\n this.popupObj.hide();\n }\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.leftKeyboardModule) && !isNullOrUndefined(this.rightKeyboardModule)) {\n this.leftKeyboardModule.destroy();\n this.rightKeyboardModule.destroy();\n }\n if (!isNullOrUndefined(this.presetElement)) {\n this.presetKeyboardModule.destroy();\n }\n if (!isNullOrUndefined(this.cancelButton)) {\n this.btnKeyboardModule.destroy();\n }\n }\n this.targetElement = null;\n }\n removeClass([document.body], OVERFLOW);\n EventHandler.remove(document, 'mousedown touchstart', this.documentHandler);\n if (this.isMobile && this.modal) {\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n this.isKeyPopup = this.dateDisabled = false;\n };\n DateRangePicker.prototype.setLocale = function () {\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.inputElement);\n this.updateInput();\n this.changeTrigger();\n };\n DateRangePicker.prototype.refreshChange = function () {\n this.refreshControl();\n this.changeTrigger();\n };\n /**\n * Called internally if any of the property value changed.\n * returns void\n * @private\n */\n DateRangePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n var format = { format: this.format, type: 'date', skeleton: 'yMd' };\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n this.hide();\n switch (prop) {\n case 'width':\n this.setEleWidth(this.width);\n break;\n case 'separator':\n this.previousEleValue = this.inputElement.value;\n this.setProperties({ separator: newProp.separator }, true);\n this.updateInput();\n this.changeTrigger();\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n this.setProperties({ placeholder: newProp.placeholder }, true);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n this.inputElement.setAttribute('aria-readonly', '' + this.readonly);\n break;\n case 'cssClass':\n if (this.popupWrapper) {\n addClass([this.popupWrapper], [newProp.cssClass]);\n }\n addClass([this.inputWrapper.container], [newProp.cssClass]);\n this.setProperties({ cssClass: newProp.cssClass }, true);\n break;\n case 'enabled':\n this.setProperties({ enabled: newProp.enabled }, true);\n Input.setEnabled(this.enabled, this.inputElement);\n this.bindEvents();\n break;\n case 'enableRtl':\n this.setProperties({ enableRtl: newProp.enableRtl }, true);\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.updateInput();\n this.changeTrigger();\n break;\n case 'locale':\n this.setProperties({ locale: newProp.locale }, true);\n this.setLocale();\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n break;\n case 'startDate':\n if (typeof newProp.startDate === 'string') {\n newProp.value = this.globalize.parseDate(newProp.startDate, format);\n }\n this.setProperties({ startDate: newProp.startDate }, true);\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.refreshControl();\n this.changeTrigger();\n break;\n case 'endDate':\n if (typeof newProp.endDate === 'string') {\n newProp.value = this.globalize.parseDate(newProp.endDate, format);\n }\n this.setProperties({ endDate: this.checkDateValue(new Date('' + newProp.endDate)) }, true);\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.refreshControl();\n this.changeTrigger();\n break;\n case 'minDays':\n this.setProperties({ minDays: newProp.minDays }, true);\n this.refreshChange();\n break;\n case 'maxDays':\n this.setProperties({ maxDays: newProp.maxDays }, true);\n this.refreshChange();\n break;\n case 'min':\n this.setProperties({ min: this.checkDateValue(new Date('' + newProp.min)) }, true);\n this.previousEleValue = this.inputElement.value;\n this.refreshChange();\n break;\n case 'max':\n this.setProperties({ max: this.checkDateValue(new Date('' + newProp.max)) }, true);\n this.refreshChange();\n break;\n case 'strictMode':\n this.setProperties({ strictMode: newProp.strictMode }, true);\n this.refreshChange();\n break;\n case 'presets':\n this.setProperties({ presets: newProp.presets }, true);\n this.processPresets();\n break;\n }\n }\n };\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"startDate\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"endDate\", void 0);\n __decorate([\n Collection([{}], Presets)\n ], DateRangePicker.prototype, \"presets\", void 0);\n __decorate([\n Property('')\n ], DateRangePicker.prototype, \"width\", void 0);\n __decorate([\n Property(1000)\n ], DateRangePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], DateRangePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property('')\n ], DateRangePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property('-')\n ], DateRangePicker.prototype, \"separator\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"minDays\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"maxDays\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], DateRangePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property('Never')\n ], DateRangePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property('Month')\n ], DateRangePicker.prototype, \"start\", void 0);\n __decorate([\n Property('Month')\n ], DateRangePicker.prototype, \"depth\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"value\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"navigated\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"blur\", void 0);\n DateRangePicker = __decorate([\n NotifyPropertyChanges\n ], DateRangePicker);\n return DateRangePicker;\n}(Calendar));\nexport { DateRangePicker };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n///\nimport { EventHandler, Internationalization, Property, NotifyPropertyChanges, Browser } from '@syncfusion/ej2-base';\nimport { Animation, Event, cldrData, getDefaultDateObject, detach } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, L10n, removeClass, closest, append, attributes } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, isNullOrUndefined, formatUnit, getValue, rippleEffect } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '../datepicker/datepicker';\nimport { TimePickerBase } from '../timepicker/timepicker';\nimport { cssClass as ListBaseClasses } from '@syncfusion/ej2-lists';\n//class constant defination\nvar DATEWRAPPER = 'e-date-wrapper';\nvar DATEPICKERROOT = 'e-datepicker';\nvar DATETIMEWRAPPER = 'e-datetime-wrapper';\nvar DAY = new Date().getDate();\nvar MONTH = new Date().getMonth();\nvar YEAR = new Date().getFullYear();\nvar HOUR = new Date().getHours();\nvar MINUTE = new Date().getMinutes();\nvar SECOND = new Date().getSeconds();\nvar MILLISECOND = new Date().getMilliseconds();\nvar ROOT = 'e-datetimepicker';\nvar DATETIMEPOPUPWRAPPER = 'e-datetimepopup-wrapper';\nvar INPUTWRAPPER = 'e-input-group-icon';\nvar POPUP = 'e-popup';\nvar TIMEICON = 'e-time-icon';\nvar INPUTFOCUS = 'e-input-focus';\nvar POPUPDIMENSION = '250px';\nvar ICONANIMATION = 'e-icon-anim';\nvar DISABLED = 'e-disabled';\nvar ERROR = 'e-error';\nvar CONTENT = 'e-content';\nvar RTL = 'e-rtl';\nvar NAVIGATION = 'e-navigation';\nvar ACTIVE = 'e-active';\nvar HOVER = 'e-hover';\nvar ICONS = 'e-icons';\nvar HALFPOSITION = 2;\nvar LISTCLASS = ListBaseClasses.li;\nvar ANIMATIONDURATION = 100;\nvar OVERFLOW = 'e-time-overflow';\n/**\n * Represents the DateTimePicker component that allows user to select\n * or enter a date time value.\n * ```html\n * \n * ````\n * ````typescript\n * \n * ```\n */\nvar DateTimePicker = /** @class */ (function (_super) {\n __extends(DateTimePicker, _super);\n /**\n * Constructor for creating the widget\n */\n function DateTimePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.valueWithMinutes = null;\n _this.previousDateTime = null;\n return _this;\n }\n /**\n * Sets the focus to widget for interaction.\n * @returns void\n */\n DateTimePicker.prototype.focusIn = function () {\n this.inputElement.focus();\n addClass([this.inputWrapper.container], INPUTFOCUS);\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n * @returns void\n */\n DateTimePicker.prototype.focusOut = function () {\n if (this.isTimePopupOpen()) {\n this.inputElement.focus();\n return;\n }\n this.inputElement.blur();\n removeClass([this.inputWrapper.container], INPUTFOCUS);\n this.closePopup();\n };\n /**\n * To destroy the widget.\n * @returns void\n */\n DateTimePicker.prototype.destroy = function () {\n if (this.popupObject && this.popupObject.element.classList.contains(POPUP)) {\n this.dateTimeWrapper = undefined;\n this.liCollections = this.timeCollections = [];\n if (!isNullOrUndefined(this.rippleFn)) {\n this.rippleFn();\n }\n }\n var ariaAttribute = {\n 'aria-live': 'assertive', 'aria-atomic': 'true', 'aria-invalid': 'false',\n 'aria-haspopup': 'true', 'aria-activedescendant': 'null',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false',\n 'aria-owns': this.element.id + '_options', 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off'\n };\n Input.removeAttributes(ariaAttribute, this.inputElement);\n this.inputElement.removeAttribute('aria-placeholder');\n if (this.isCalendar()) {\n detach(this.popupWrapper);\n this.popupObject = this.popupWrapper = null;\n this.keyboardHandler.destroy();\n }\n this.unBindInputEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * To Initialize the control rendering.\n * @return void\n * @private\n */\n DateTimePicker.prototype.render = function () {\n this.timekeyConfigure = {\n enter: 'enter',\n escape: 'escape',\n end: 'end',\n tab: 'tab',\n home: 'home',\n down: 'downarrow',\n up: 'uparrow',\n left: 'leftarrow',\n right: 'rightarrow',\n open: 'alt+downarrow',\n close: 'alt+uparrow'\n };\n this.valueWithMinutes = null;\n this.previousDateTime = null;\n this.cloneElement = this.element.cloneNode(true);\n this.dateTimeFormat = this.cldrDateTimeFormat();\n this.initValue = this.value;\n this.checkAttributes();\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('datetimepicker', localeText, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n _super.prototype.render.call(this);\n this.createInputElement();\n this.bindInputEvents();\n this.setValue();\n };\n DateTimePicker.prototype.setValue = function () {\n this.initValue = this.validateMinMaxRange(this.value);\n if (!this.strictMode && this.isDateObject(this.initValue)) {\n var value = this.validateMinMaxRange(this.initValue);\n Input.setValue(this.getFormattedValue(value), this.inputElement, this.floatLabelType, this.showClearButton);\n this.setProperties({ value: value }, true);\n }\n else {\n if (isNullOrUndefined(this.value)) {\n this.initValue = null;\n this.setProperties({ value: null }, true);\n }\n }\n this.valueWithMinutes = this.value;\n _super.prototype.updateInput.call(this);\n };\n DateTimePicker.prototype.validateMinMaxRange = function (value) {\n var result = value;\n if (this.isDateObject(value)) {\n result = this.validateValue(value);\n }\n else {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n }\n }\n this.checkValidState(result);\n return result;\n };\n DateTimePicker.prototype.checkValidState = function (value) {\n this.isValidState = true;\n if (!this.strictMode) {\n if ((+(value) > +(this.max)) || (+(value) < +(this.min))) {\n this.isValidState = false;\n }\n }\n this.checkErrorState();\n };\n DateTimePicker.prototype.checkErrorState = function () {\n if (this.isValidState) {\n removeClass([this.inputWrapper.container], ERROR);\n }\n else {\n addClass([this.inputWrapper.container], ERROR);\n }\n attributes(this.inputElement, { 'aria-invalid': this.isValidState ? 'false' : 'true' });\n };\n DateTimePicker.prototype.validateValue = function (value) {\n var dateVal = value;\n if (this.strictMode) {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n dateVal = this.max;\n }\n else if (+value < +this.min) {\n dateVal = this.min;\n }\n else if (+value > +this.max) {\n dateVal = this.max;\n }\n }\n else {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n dateVal = value;\n }\n }\n return dateVal;\n };\n DateTimePicker.prototype.disablePopupButton = function (isDisable) {\n if (isDisable) {\n addClass([this.inputWrapper.buttons[0], this.timeIcon], DISABLED);\n this.hide();\n }\n else {\n removeClass([this.inputWrapper.buttons[0], this.timeIcon], DISABLED);\n }\n };\n DateTimePicker.prototype.getFormattedValue = function (value) {\n if (!isNullOrUndefined(value)) {\n var dateOptions = { format: this.cldrDateTimeFormat(), type: 'dateTime', skeleton: 'yMd' };\n return this.globalize.formatDate(value, dateOptions);\n }\n else {\n return null;\n }\n };\n DateTimePicker.prototype.isDateObject = function (value) {\n return (!isNullOrUndefined(value) && !isNaN(+value)) ? true : false;\n };\n DateTimePicker.prototype.createInputElement = function () {\n removeClass([this.inputElement], DATEPICKERROOT);\n removeClass([this.inputWrapper.container], DATEWRAPPER);\n addClass([this.inputWrapper.container], DATETIMEWRAPPER);\n addClass([this.inputElement], ROOT);\n this.renderTimeIcon();\n };\n DateTimePicker.prototype.renderTimeIcon = function () {\n this.timeIcon = Input.appendSpan(INPUTWRAPPER + ' ' + TIMEICON + ' ' + ICONS, this.inputWrapper.container);\n };\n DateTimePicker.prototype.bindInputEvents = function () {\n EventHandler.add(this.timeIcon, 'mousedown touchstart', this.timeHandler, this);\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.focusOut, this);\n EventHandler.add(this.inputElement, 'focus', this.focusIn, this);\n this.keyboardHandler = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown',\n keyAction: this.inputKeyAction.bind(this),\n keyConfigs: this.keyConfigs\n });\n };\n DateTimePicker.prototype.unBindInputEvents = function () {\n EventHandler.remove(this.timeIcon, 'mousedown touchstart', this.timeHandler);\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateHandler);\n EventHandler.remove(this.inputElement, 'blur', this.focusOut);\n EventHandler.remove(this.inputElement, 'focus', this.focusIn);\n if (this.keyboardHandler) {\n this.keyboardHandler.destroy();\n }\n };\n DateTimePicker.prototype.cldrTimeFormat = function () {\n var cldrTime;\n if (this.isNullOrEmpty(this.timeFormat)) {\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n }\n else {\n cldrTime = this.timeFormat;\n }\n return cldrTime;\n };\n DateTimePicker.prototype.cldrDateTimeFormat = function () {\n var cldrTime;\n var culture = new Internationalization(this.locale);\n var dateFormat = culture.getDatePattern({ skeleton: 'yMd' });\n if (this.isNullOrEmpty(this.format)) {\n cldrTime = dateFormat + ' ' + this.getCldrFormat('time');\n }\n else {\n cldrTime = this.format;\n }\n return cldrTime;\n };\n DateTimePicker.prototype.getCldrFormat = function (type) {\n var cldrDateTime;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrDateTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrDateTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n return cldrDateTime;\n };\n DateTimePicker.prototype.isNullOrEmpty = function (value) {\n if (isNullOrUndefined(value) || (typeof value === 'string' && value.trim() === '')) {\n return true;\n }\n else {\n return false;\n }\n };\n DateTimePicker.prototype.getCultureTimeObject = function (ld, c) {\n return getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.timeFormats.short', ld);\n };\n DateTimePicker.prototype.timeHandler = function (e) {\n if (e.currentTarget === this.timeIcon) {\n e.preventDefault();\n }\n if (this.enabled && !this.readonly) {\n _super.prototype.hide.call(this);\n if (this.isTimePopupOpen()) {\n this.closePopup();\n }\n else {\n if (!Browser.isDevice) {\n this.inputElement.focus();\n }\n this.popupCreation('time');\n }\n }\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n };\n DateTimePicker.prototype.dateHandler = function (e) {\n if (this.getModuleName() === 'datetimepicker') {\n if (e.currentTarget === this.inputWrapper.buttons[0]) {\n e.preventDefault();\n }\n }\n if (this.enabled && !this.readonly) {\n this.closePopup();\n if (!isNullOrUndefined(this.popupWrapper)) {\n this.popupCreation('date');\n }\n }\n };\n DateTimePicker.prototype.show = function (type) {\n if (type === 'time') {\n if (this.isDatePopupOpen()) {\n this.hide();\n }\n this.popupCreation('time');\n }\n else {\n if (this.isTimePopupOpen()) {\n this.hide();\n }\n _super.prototype.show.call(this);\n this.popupCreation('date');\n }\n this.trigger('open');\n };\n DateTimePicker.prototype.toggle = function () {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this);\n this.popupCreation('time');\n }\n else if (this.isTimePopupOpen()) {\n this.hide();\n _super.prototype.show.call(this);\n this.popupCreation('date');\n }\n else {\n this.show();\n }\n };\n DateTimePicker.prototype.listCreation = function () {\n var value = isNullOrUndefined(this.value) ? this.inputElement.value !== '' ?\n this.globalize.parseDate(this.inputElement.value, { format: this.cldrDateTimeFormat(), type: 'datetime' }) :\n new Date() : this.value;\n this.valueWithMinutes = value;\n this.listWrapper = createElement('div', { className: CONTENT, attrs: { 'tabindex': '0' } });\n var min = this.startTime(value);\n var max = this.endTime(value);\n var listDetails = TimePickerBase.createListItems(min, max, this.globalize, this.cldrTimeFormat(), this.step);\n this.timeCollections = listDetails.collection;\n this.listTag = listDetails.list;\n attributes(this.listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options' });\n append([listDetails.list], this.listWrapper);\n this.wireTimeListEvents();\n var rippleModel = { duration: 300, selector: '.' + LISTCLASS };\n this.rippleFn = rippleEffect(this.listWrapper, rippleModel);\n this.liCollections = this.listWrapper.querySelectorAll('.' + LISTCLASS);\n };\n DateTimePicker.prototype.popupCreation = function (type) {\n if (type === 'date') {\n addClass([this.popupWrapper], DATETIMEPOPUPWRAPPER);\n attributes(this.popupWrapper, { 'id': this.element.id + '_datepopup' });\n this.trigger('open', this.popupWrapper);\n }\n else {\n this.dateTimeWrapper = createElement('div', {\n className: ROOT + ' ' + POPUP,\n attrs: { 'id': this.element.id + '_timepopup', 'style': 'visibility:hidden ; display:block' }\n });\n if (!isNullOrUndefined(this.cssClass)) {\n this.dateTimeWrapper.classList.add(this.cssClass);\n }\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.listCreation();\n append([this.listWrapper], this.dateTimeWrapper);\n }\n document.body.appendChild(this.dateTimeWrapper);\n this.addTimeSelection();\n this.renderPopup();\n this.setTimeScrollPosition();\n this.openPopup();\n this.popupObject.refreshPosition(this.inputElement);\n }\n };\n DateTimePicker.prototype.openPopup = function () {\n this.trigger('open');\n var openAnimation = {\n name: 'FadeIn',\n duration: ANIMATIONDURATION,\n };\n this.popupObject.show(new Animation(openAnimation));\n addClass([this.inputWrapper.container], [ICONANIMATION]);\n attributes(this.inputElement, { 'aria-expanded': 'true' });\n EventHandler.add(document, 'mousedown touchstart', this.documentClickHandler, this);\n };\n DateTimePicker.prototype.documentClickHandler = function (event) {\n var target = event.target;\n if (!(closest(target, '#' + (this.popupObject && this.popupObject.element.id))) && target !== this.inputElement\n && target !== this.timeIcon && target !== this.inputWrapper.container) {\n if (this.isTimePopupOpen()) {\n this.hide();\n }\n }\n };\n DateTimePicker.prototype.isTimePopupOpen = function () {\n return (this.dateTimeWrapper && this.dateTimeWrapper.classList.contains('' + ROOT)) ? true : false;\n };\n DateTimePicker.prototype.isDatePopupOpen = function () {\n return (this.popupWrapper && this.popupWrapper.classList.contains('' + DATETIMEPOPUPWRAPPER)) ? true : false;\n };\n DateTimePicker.prototype.renderPopup = function () {\n var _this = this;\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n if (Browser.isDevice) {\n this.timeModal = createElement('div');\n this.timeModal.className = '' + ROOT + ' e-time-modal';\n document.body.className += ' ' + OVERFLOW;\n this.timeModal.style.display = 'block';\n document.body.appendChild(this.timeModal);\n }\n var offset = 4;\n this.popupObject = new Popup(this.dateTimeWrapper, {\n width: this.setPopupWidth(),\n zIndex: this.zIndex,\n targetType: 'container',\n collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : { X: 'flip', Y: 'flip' },\n relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n position: Browser.isDevice ? { X: 'center', Y: 'center' } : { X: 'left', Y: 'bottom' },\n enableRtl: this.enableRtl,\n offsetY: offset,\n open: function () {\n _this.dateTimeWrapper.style.visibility = 'visible';\n addClass([_this.timeIcon], ACTIVE);\n if (!Browser.isDevice) {\n _this.inputEvent = new KeyboardEvents(_this.inputWrapper.container, {\n keyAction: _this.TimeKeyActionHandle.bind(_this), keyConfigs: _this.timekeyConfigure, eventName: 'keydown'\n });\n }\n }, close: function () {\n removeClass([_this.timeIcon], ACTIVE);\n _this.unWireTimeListEvents();\n _this.inputElement.setAttribute('aria-activedescendant', 'null');\n remove(_this.popupObject.element);\n _this.popupObject.destroy();\n _this.dateTimeWrapper.innerHTML = '';\n _this.listWrapper = _this.dateTimeWrapper = null;\n if (_this.inputEvent) {\n _this.inputEvent.destroy();\n }\n }\n });\n this.popupObject.element.style.maxHeight = POPUPDIMENSION;\n };\n DateTimePicker.prototype.setDimension = function (width) {\n if (typeof width === 'number') {\n width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n width = width;\n }\n else {\n width = '100%';\n }\n return width;\n };\n DateTimePicker.prototype.setPopupWidth = function () {\n var width = this.setDimension(this.width);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.containerStyle.width * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n return width;\n };\n DateTimePicker.prototype.wireTimeListEvents = function () {\n EventHandler.add(this.listWrapper, 'click', this.onMouseClick, this);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n };\n DateTimePicker.prototype.unWireTimeListEvents = function () {\n if (this.listWrapper) {\n EventHandler.remove(this.listWrapper, 'click', this.onMouseClick);\n EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n }\n };\n DateTimePicker.prototype.onMouseOver = function (event) {\n var currentLi = closest(event.target, '.' + LISTCLASS);\n this.setTimeHover(currentLi, HOVER);\n };\n DateTimePicker.prototype.onMouseLeave = function () {\n this.removeTimeHover(HOVER);\n };\n DateTimePicker.prototype.setTimeHover = function (li, className) {\n if (this.enabled && this.isValidLI(li) && !li.classList.contains(className)) {\n this.removeTimeHover(className);\n addClass([li], className);\n }\n };\n DateTimePicker.prototype.getPopupHeight = function () {\n var height = parseInt(POPUPDIMENSION, 10);\n var popupHeight = this.dateTimeWrapper.getBoundingClientRect().height;\n return popupHeight > height ? height : popupHeight;\n };\n DateTimePicker.prototype.changeEvent = function () {\n if (+this.previousDateTime !== +this.value) {\n _super.prototype.changeEvent.call(this);\n if (!Browser.isDevice) {\n this.inputElement.focus();\n }\n this.valueWithMinutes = this.value;\n this.setInputValue('date');\n }\n };\n DateTimePicker.prototype.updateValue = function () {\n this.setInputValue('time');\n if (+this.previousDateTime !== +this.value) {\n this.changedArgs.value = this.value;\n this.addTimeSelection();\n this.trigger('change', this.changedArgs);\n this.previousDateTime = this.value;\n }\n };\n DateTimePicker.prototype.setTimeScrollPosition = function () {\n var popupHeight = this.getPopupHeight();\n var popupElement;\n popupElement = this.selectedElement;\n if (!isNullOrUndefined(popupElement)) {\n var nextEle = popupElement.nextElementSibling;\n var height = nextEle ? nextEle.offsetTop : popupElement.offsetTop;\n var liHeight = popupElement.getBoundingClientRect().height;\n if ((height + popupElement.offsetTop) > popupHeight) {\n this.dateTimeWrapper.scrollTop = nextEle ? (height - (popupHeight / HALFPOSITION + liHeight / HALFPOSITION)) : height;\n }\n else {\n this.dateTimeWrapper.scrollTop = 0;\n }\n }\n };\n DateTimePicker.prototype.setInputValue = function (type) {\n if (type === 'date') {\n this.inputElement.value = this.getFormattedValue(this.getFullDateTime());\n this.setProperties({ value: this.getFullDateTime() }, true);\n }\n else {\n this.inputElement.value = this.getFormattedValue(new Date(this.timeCollections[this.activeIndex]));\n this.setProperties({ value: new Date(this.timeCollections[this.activeIndex]) }, true);\n }\n };\n DateTimePicker.prototype.getFullDateTime = function () {\n var value = null;\n if (this.isDateObject(this.valueWithMinutes)) {\n value = this.combineDateTime(this.valueWithMinutes);\n }\n else {\n value = this.previousDate;\n }\n return this.validateMinMaxRange(value);\n };\n DateTimePicker.prototype.combineDateTime = function (value) {\n if (this.isDateObject(value)) {\n var day = this.previousDate.getDate();\n var month = this.previousDate.getMonth();\n var year = this.previousDate.getFullYear();\n var hour = value.getHours();\n var minutes = value.getMinutes();\n var seconds = value.getSeconds();\n return new Date(year, month, day, hour, minutes, seconds);\n }\n else {\n return this.previousDate;\n }\n };\n DateTimePicker.prototype.onMouseClick = function (event) {\n var target = event.target;\n var li = this.selectedElement = closest(target, '.' + LISTCLASS);\n if (li && li.classList.contains(LISTCLASS)) {\n this.timeValue = li.getAttribute('data-value');\n this.hide();\n }\n this.setSelection(li, event);\n };\n DateTimePicker.prototype.setSelection = function (li, event) {\n if (this.isValidLI(li) && !li.classList.contains(ACTIVE)) {\n var value = li.getAttribute('data-value');\n this.selectedElement = li;\n var index = Array.prototype.slice.call(this.liCollections).indexOf(li);\n this.activeIndex = index;\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n addClass([this.selectedElement], ACTIVE);\n this.selectedElement.setAttribute('aria-selected', 'true');\n this.updateValue();\n }\n };\n DateTimePicker.prototype.setTimeActiveClass = function () {\n var collections = isNullOrUndefined(this.dateTimeWrapper) ? this.listWrapper : this.dateTimeWrapper;\n if (!isNullOrUndefined(collections)) {\n var items = collections.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n for (var i = 0; i < items.length; i++) {\n if (this.timeCollections[i] === +(this.valueWithMinutes)) {\n items[i].setAttribute('aria-selected', 'true');\n this.selectedElement = items[i];\n this.activeIndex = i;\n this.setTimeActiveDescendant();\n break;\n }\n }\n }\n }\n };\n DateTimePicker.prototype.setTimeActiveDescendant = function () {\n if (!isNullOrUndefined(this.selectedElement)) {\n attributes(this.inputElement, { 'aria-activedescendant': this.selectedElement.getAttribute('id') });\n }\n else {\n attributes(this.inputElement, { 'aria-activedescendant': 'null' });\n }\n };\n DateTimePicker.prototype.addTimeSelection = function () {\n this.selectedElement = null;\n this.removeTimeSelection();\n this.setTimeActiveClass();\n if (!isNullOrUndefined(this.selectedElement)) {\n addClass([this.selectedElement], ACTIVE);\n this.selectedElement.setAttribute('aria-selected', 'true');\n }\n };\n DateTimePicker.prototype.removeTimeSelection = function () {\n this.removeTimeHover(HOVER);\n if (!isNullOrUndefined(this.dateTimeWrapper)) {\n var items = this.dateTimeWrapper.querySelectorAll('.' + ACTIVE);\n if (items.length) {\n removeClass(items, ACTIVE);\n items[0].removeAttribute('aria-selected');\n }\n }\n };\n DateTimePicker.prototype.removeTimeHover = function (className) {\n var hoveredItem = this.getTimeHoverItem(className);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, className);\n }\n };\n DateTimePicker.prototype.getTimeHoverItem = function (className) {\n var collections = isNullOrUndefined(this.dateTimeWrapper) ? this.listWrapper : this.dateTimeWrapper;\n var hoveredItem;\n if (!isNullOrUndefined(collections)) {\n hoveredItem = collections.querySelectorAll('.' + className);\n }\n return hoveredItem;\n };\n DateTimePicker.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(LISTCLASS) && !li.classList.contains(DISABLED));\n };\n DateTimePicker.prototype.calculateStartEnd = function (value, range, method) {\n var day = value.getDate();\n var month = value.getMonth();\n var year = value.getFullYear();\n var hours = value.getHours();\n var minutes = value.getMinutes();\n var seconds = value.getSeconds();\n var milliseconds = value.getMilliseconds();\n if (range) {\n if (method === 'starttime') {\n return new Date(year, month, day, 0, 0, 0);\n }\n else {\n return new Date(year, month, day, 23, 59, 59);\n }\n }\n else {\n return new Date(year, month, day, hours, minutes, seconds, milliseconds);\n }\n };\n DateTimePicker.prototype.startTime = function (date) {\n var tempStartValue;\n var start;\n var tempMin = this.min;\n var value;\n value = date === null ? new Date() : date;\n if ((+value.getDate() === +tempMin.getDate() && +value.getMonth() === +tempMin.getMonth() &&\n +value.getFullYear() === +tempMin.getFullYear()) || ((+new Date(value.getFullYear(), value.getMonth(), value.getDate())) <=\n +new Date(tempMin.getFullYear(), tempMin.getMonth(), tempMin.getDate()))) {\n start = false;\n tempStartValue = this.min;\n }\n else if (+value < +this.max && +value > +this.min) {\n start = true;\n tempStartValue = value;\n }\n else if (+value >= +this.max) {\n start = true;\n tempStartValue = this.max;\n }\n return this.calculateStartEnd(tempStartValue, start, 'starttime');\n };\n DateTimePicker.prototype.endTime = function (date) {\n var tempEndValue;\n var end;\n var tempMax = this.max;\n var value;\n value = date === null ? new Date() : date;\n if ((+value.getDate() === +tempMax.getDate() && +value.getMonth() === +tempMax.getMonth() &&\n +value.getFullYear() === +tempMax.getFullYear()) || (+new Date(value.getUTCFullYear(), value.getMonth(), value.getDate()) >=\n +new Date(tempMax.getFullYear(), tempMax.getMonth(), tempMax.getDate()))) {\n end = false;\n tempEndValue = this.max;\n }\n else if (+value < +this.max && +value > +this.min) {\n end = true;\n tempEndValue = value;\n }\n else if (+value <= +this.min) {\n end = true;\n tempEndValue = this.min;\n }\n return this.calculateStartEnd(tempEndValue, end, 'endtime');\n };\n DateTimePicker.prototype.hide = function () {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this);\n }\n else if (this.isTimePopupOpen()) {\n this.closePopup();\n removeClass([document.body], OVERFLOW);\n if (Browser.isDevice && this.timeModal) {\n this.timeModal.style.display = 'none';\n this.timeModal.outerHTML = '';\n this.timeModal = null;\n }\n this.setTimeActiveDescendant();\n }\n this.trigger('close');\n };\n DateTimePicker.prototype.closePopup = function () {\n if (this.isTimePopupOpen() && this.popupObject) {\n var animModel = {\n name: 'FadeOut',\n duration: ANIMATIONDURATION,\n delay: 0\n };\n this.popupObject.hide(new Animation(animModel));\n this.inputWrapper.container.classList.remove(ICONANIMATION);\n attributes(this.inputElement, { 'aria-expanded': 'false' });\n EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n }\n if (Browser.isDevice) {\n removeClass([this.inputWrapper.container], INPUTFOCUS);\n }\n };\n DateTimePicker.prototype.preRender = function () {\n _super.prototype.preRender.call(this);\n };\n ;\n DateTimePicker.prototype.getProperty = function (date, val) {\n if (val === 'min') {\n this.setProperties({ min: this.validateValue(date.min) }, true);\n }\n else {\n this.setProperties({ max: this.validateValue(date.max) }, true);\n }\n };\n DateTimePicker.prototype.checkAttributes = function () {\n var attributes = ['style', 'name', 'step', 'disabled', 'readonly', 'value', 'min', 'max', 'placeholder', 'type'];\n var value;\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'name':\n this.inputElement.setAttribute('name', this.inputElement.getAttribute(prop));\n break;\n case 'step':\n this.step = parseInt(this.inputElement.getAttribute(prop), 10);\n break;\n case 'readonly':\n var readonly = !isNullOrUndefined(this.inputElement.getAttribute(prop));\n this.setProperties({ readonly: readonly }, true);\n break;\n case 'placeholder':\n this.placeholder = this.inputElement.getAttribute(prop);\n break;\n case 'min':\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ min: value }, true);\n }\n break;\n case 'disabled':\n var enabled = isNullOrUndefined(this.inputElement.getAttribute(prop));\n this.setProperties({ enabled: enabled }, true);\n break;\n case 'max':\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ max: value }, true);\n }\n break;\n case 'type':\n if (this.inputElement.getAttribute(prop) !== 'text') {\n this.inputElement.setAttribute('type', 'text');\n }\n break;\n }\n }\n }\n };\n DateTimePicker.prototype.getTimeActiveElement = function () {\n if (!isNullOrUndefined(this.dateTimeWrapper)) {\n return this.dateTimeWrapper.querySelectorAll('.' + ACTIVE);\n }\n else {\n return null;\n }\n };\n DateTimePicker.prototype.createDateObj = function (val) {\n return val instanceof Date ? val : null;\n };\n DateTimePicker.prototype.getDateObject = function (text) {\n if (!this.isNullOrEmpty(text)) {\n var dateValue = this.createDateObj(text);\n var value = this.valueWithMinutes;\n var status_1 = !isNullOrUndefined(value);\n if (this.checkDateValue(dateValue)) {\n var date = status_1 ? value.getDate() : DAY;\n var month = status_1 ? value.getMonth() : MONTH;\n var year = status_1 ? value.getFullYear() : YEAR;\n var hour = status_1 ? value.getHours() : HOUR;\n var minute = status_1 ? value.getMinutes() : MINUTE;\n var second = status_1 ? value.getSeconds() : SECOND;\n var millisecond = status_1 ? value.getMilliseconds() : MILLISECOND;\n return new Date(year, month, date, hour, minute, second, millisecond);\n }\n }\n return null;\n };\n DateTimePicker.prototype.findNextTimeElement = function (event) {\n var textVal = (this.inputElement).value;\n var value = isNullOrUndefined(this.valueWithMinutes) ? this.createDateObj(textVal) :\n this.getDateObject(this.valueWithMinutes);\n var dateTimeVal = null;\n var listCount = this.liCollections.length;\n if (!isNullOrUndefined(this.checkDateValue(value)) || !isNullOrUndefined(this.activeIndex)) {\n if (event.action === 'home') {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[0])));\n this.activeIndex = 0;\n }\n else if (event.action === 'end') {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[this.timeCollections.length - 1])));\n this.activeIndex = this.timeCollections.length - 1;\n }\n else {\n if (event.action === 'down') {\n for (var i = 0; i < listCount; i++) {\n if (+value < this.timeCollections[i]) {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[i])));\n this.activeIndex = i;\n break;\n }\n }\n }\n else {\n for (var i = listCount - 1; i >= 0; i--) {\n if (+value > this.timeCollections[i]) {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[i])));\n this.activeIndex = i;\n break;\n }\n }\n }\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.timeElementValue(isNullOrUndefined(dateTimeVal) ? null : new Date(dateTimeVal));\n }\n };\n DateTimePicker.prototype.setTimeValue = function (date, value) {\n var time;\n var val = this.validateMinMaxRange(value);\n var newval = this.createDateObj(val);\n if (this.getFormattedValue(newval) !== (!isNullOrUndefined(this.value) ? this.getFormattedValue(this.value) : null)) {\n this.valueWithMinutes = isNullOrUndefined(newval) ? null : newval;\n time = new Date(+this.valueWithMinutes);\n }\n else {\n if (this.strictMode) {\n //for strict mode case, when value not present within a range. Reset the nearest range value.\n date = newval;\n }\n this.valueWithMinutes = this.checkDateValue(date);\n time = new Date(+this.valueWithMinutes);\n }\n var dateString = this.globalize.formatDate(time, {\n format: !isNullOrUndefined(this.format) ? this.format : this.cldrDateTimeFormat(), type: 'dateTime', skeleton: 'yMd'\n });\n if (!this.strictMode && isNullOrUndefined(time)) {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n return time;\n };\n DateTimePicker.prototype.timeElementValue = function (value) {\n if (!isNullOrUndefined(this.checkDateValue(value)) && !this.isNullOrEmpty(value)) {\n var date = value instanceof Date ? value : this.getDateObject(value);\n return this.setTimeValue(date, value);\n }\n return null;\n };\n DateTimePicker.prototype.timeKeyHandler = function (event) {\n if (isNullOrUndefined(this.step) || this.step <= 0) {\n return;\n }\n var listCount = this.timeCollections.length;\n if (isNullOrUndefined(this.getTimeActiveElement()) || this.getTimeActiveElement().length === 0) {\n if (this.liCollections.length > 0) {\n if (isNullOrUndefined(this.value) && isNullOrUndefined(this.activeIndex)) {\n this.activeIndex = 0;\n this.selectedElement = this.liCollections[0];\n this.timeElementValue(new Date(this.timeCollections[0]));\n }\n else {\n this.findNextTimeElement(event);\n }\n }\n }\n else {\n var nextItemValue = void 0;\n if ((event.keyCode >= 37) && (event.keyCode <= 40)) {\n var index = (event.keyCode === 40 || event.keyCode === 39) ? ++this.activeIndex : --this.activeIndex;\n this.activeIndex = index = this.activeIndex === (listCount) ? 0 : this.activeIndex;\n this.activeIndex = index = this.activeIndex < 0 ? (listCount - 1) : this.activeIndex;\n nextItemValue = isNullOrUndefined(this.timeCollections[index]) ? this.timeCollections[0] : this.timeCollections[index];\n }\n else if (event.action === 'home') {\n this.activeIndex = 0;\n nextItemValue = this.timeCollections[0];\n }\n else if (event.action === 'end') {\n this.activeIndex = listCount - 1;\n nextItemValue = this.timeCollections[listCount - 1];\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.timeElementValue(new Date(nextItemValue));\n }\n this.isNavigate = true;\n this.setTimeHover(this.selectedElement, NAVIGATION);\n this.setTimeActiveDescendant();\n if (this.isTimePopupOpen() && this.selectedElement !== null && (!event || event.type !== 'click')) {\n this.setTimeScrollPosition();\n }\n };\n DateTimePicker.prototype.TimeKeyActionHandle = function (event) {\n if (this.enabled) {\n if (event.action !== 'right' && event.action !== 'left' && event.action !== 'tab') {\n event.preventDefault();\n }\n switch (event.action) {\n case 'up':\n case 'down':\n case 'home':\n case 'end':\n this.timeKeyHandler(event);\n break;\n case 'enter':\n if (this.isNavigate) {\n this.selectedElement = this.liCollections[this.activeIndex];\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n this.updateValue();\n }\n else {\n this.updateValue();\n }\n this.hide();\n addClass([this.inputWrapper.container], INPUTFOCUS);\n this.isNavigate = false;\n break;\n case 'escape':\n this.hide();\n break;\n default:\n this.isNavigate = false;\n break;\n }\n }\n };\n DateTimePicker.prototype.inputKeyAction = function (event) {\n switch (event.action) {\n case 'altDownArrow':\n this.strictModeUpdate();\n this.updateInput();\n this.toggle();\n break;\n }\n };\n DateTimePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n break;\n case 'value':\n newProp.value = this.validateValue(newProp.value);\n Input.setValue(this.getFormattedValue(newProp.value), this.inputElement, this.floatLabelType, this.showClearButton);\n this.valueWithMinutes = newProp.value;\n this.setProperties({ value: newProp.value }, true);\n this.previousDateTime = new Date(this.inputElement.value);\n this.updateInput();\n this.changeTrigger();\n break;\n case 'min':\n case 'max':\n this.getProperty(newProp, prop);\n this.updateInput();\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'cssClass':\n Input.setCssClass(newProp.cssClass, [this.inputWrapper.container]);\n if (this.dateTimeWrapper) {\n addClass([this.dateTimeWrapper], [newProp.cssClass]);\n }\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.l10n.getConstant('placeholder'), this.inputElement);\n this.dateTimeFormat = this.cldrDateTimeFormat();\n _super.prototype.updateInput.call(this);\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.setValue();\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n this.inputElement.setAttribute('aria-placeholder', newProp.placeholder);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.inputElement);\n this.bindEvents();\n break;\n case 'strictMode':\n this.updateInput();\n break;\n case 'width':\n this.setWidth(newProp.width);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n break;\n default:\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n break;\n }\n this.hide();\n }\n };\n /**\n * To get component name.\n * @private\n */\n DateTimePicker.prototype.getModuleName = function () {\n return 'datetimepicker';\n };\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"timeFormat\", void 0);\n __decorate([\n Property(30)\n ], DateTimePicker.prototype, \"step\", void 0);\n __decorate([\n Property(1000)\n ], DateTimePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], DateTimePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"destroyed\", void 0);\n DateTimePicker = __decorate([\n NotifyPropertyChanges\n ], DateTimePicker);\n return DateTimePicker;\n}(DatePicker));\nexport { DateTimePicker };\n","/**\n * Save class provide method to save file\n * ```typescript\n * let blob : Blob = new Blob([''], { type: 'text/plain' });\n * Save.save('fileName.txt',blob);\n */\nvar Save = /** @class */ (function () {\n /**\n * Initialize new instance of {save}\n */\n function Save() {\n // tslint:disable\n }\n /**\n * Saves the file with specified name and sends the file to client browser\n * @param {string} fileName- file name to save.\n * @param {Blob} buffer- the content to write in file\n * @param {boolean} isMicrosoftBrowser- specify whether microsoft browser or not\n * @returns {void}\n */\n Save.save = function (fileName, buffer) {\n if (fileName === null || fileName === undefined || fileName === '') {\n throw new Error('ArgumentException: fileName cannot be undefined, null or empty');\n }\n var extension = fileName.substring(fileName.lastIndexOf('.') + 1, fileName.length);\n var mimeType = this.getMimeType(extension);\n if (mimeType !== '') {\n buffer = new Blob([buffer], { type: mimeType });\n }\n if (this.isMicrosoftBrowser) {\n navigator.msSaveBlob(buffer, fileName);\n }\n else {\n var downloadLink = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');\n this.saveInternal(fileName, extension, buffer, downloadLink, 'download' in downloadLink);\n }\n };\n Save.saveInternal = function (fileName, extension, buffer, downloadLink, hasDownloadAttribute) {\n if (hasDownloadAttribute) {\n downloadLink.download = fileName;\n var dataUrl_1 = window.URL.createObjectURL(buffer);\n downloadLink.href = dataUrl_1;\n var event_1 = document.createEvent('MouseEvent');\n event_1.initEvent('click', true, true);\n downloadLink.dispatchEvent(event_1);\n setTimeout(function () {\n window.URL.revokeObjectURL(dataUrl_1);\n dataUrl_1 = undefined;\n });\n }\n else {\n if (extension !== 'docx' && extension !== 'xlsx') {\n var url = window.URL.createObjectURL(buffer);\n var isPopupBlocked = window.open(url, '_blank');\n if (!isPopupBlocked) {\n window.location.href = url;\n }\n }\n else {\n var reader_1 = new FileReader();\n reader_1.onloadend = function () {\n var isPopupBlocked = window.open(reader_1.result, '_blank');\n if (!isPopupBlocked) {\n window.location.href = reader_1.result;\n }\n };\n reader_1.readAsDataURL(buffer);\n }\n }\n };\n /**\n *\n * @param {string} extension - get mime type of the specified extension\n * @private\n */\n Save.getMimeType = function (extension) {\n var mimeType = '';\n switch (extension) {\n case 'html':\n mimeType = 'text/html';\n break;\n case 'pdf':\n mimeType = 'application/pdf';\n break;\n case 'docx':\n mimeType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n break;\n case 'xlsx':\n mimeType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n break;\n case 'txt':\n mimeType = 'text/plain';\n break;\n }\n return mimeType;\n };\n return Save;\n}());\nexport { Save };\n","import { Encoding, validateNullOrUndefined } from './encoding';\nimport { Save } from './save';\n/**\n * StreamWriter class contains the implementation for writing characters to a file in a particular encoding\n * ```typescript\n * let writer = new StreamWriter();\n * writer.write('Hello World');\n * writer.save('Sample.txt');\n * writer.dispose();\n * ```\n */\nvar StreamWriter = /** @class */ (function () {\n /**\n * Initializes a new instance of the StreamWriter class by using the specified encoding.\n * @param {Encoding} encoding?- The character encoding to use.\n */\n function StreamWriter(encoding) {\n this.bufferBlob = new Blob(['']);\n this.bufferText = '';\n this.init(encoding);\n Save.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n }\n Object.defineProperty(StreamWriter.prototype, \"buffer\", {\n /**\n * Gets the content written to the StreamWriter as Blob.\n * @returns Blob\n */\n get: function () {\n this.flush();\n return this.bufferBlob;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StreamWriter.prototype, \"encoding\", {\n /**\n * Gets the encoding.\n * @returns Encoding\n */\n get: function () {\n return this.enc;\n },\n enumerable: true,\n configurable: true\n });\n StreamWriter.prototype.init = function (encoding) {\n if (encoding === null || encoding === undefined) {\n this.enc = new Encoding(false);\n this.enc.type = 'Utf8';\n }\n else {\n this.enc = encoding;\n this.setBomByte();\n }\n };\n /**\n * Private method to set Byte Order Mark(BOM) value based on EncodingType\n */\n StreamWriter.prototype.setBomByte = function () {\n if (this.encoding.includeBom) {\n switch (this.encoding.type) {\n case 'Unicode':\n var arrayUnicode = new ArrayBuffer(2);\n var uint8 = new Uint8Array(arrayUnicode);\n uint8[0] = 255;\n uint8[1] = 254;\n this.bufferBlob = new Blob([arrayUnicode]);\n break;\n case 'Utf8':\n var arrayUtf8 = new ArrayBuffer(3);\n var utf8 = new Uint8Array(arrayUtf8);\n utf8[0] = 239;\n utf8[1] = 187;\n utf8[2] = 191;\n this.bufferBlob = new Blob([arrayUtf8]);\n break;\n default:\n this.bufferBlob = new Blob(['']);\n break;\n }\n }\n };\n /**\n * Saves the file with specified name and sends the file to client browser\n * @param {string} fileName - The file name to save\n * @returns {void}\n */\n StreamWriter.prototype.save = function (fileName) {\n if (this.bufferText !== '') {\n this.flush();\n }\n Save.save(fileName, this.buffer);\n };\n /**\n * Writes the specified string.\n * @param {string} value - The string to write. If value is null or undefined, nothing is written.\n * @returns {void}\n */\n StreamWriter.prototype.write = function (value) {\n if (this.encoding === undefined) {\n throw new Error('Object Disposed Exception: current writer is disposed');\n }\n validateNullOrUndefined(value, 'string');\n this.bufferText += value;\n if (this.bufferText.length >= 10240) {\n this.flush();\n }\n };\n StreamWriter.prototype.flush = function () {\n if (this.bufferText === undefined || this.bufferText === null || this.bufferText.length === 0) {\n return;\n }\n var bufferArray = this.encoding.getBytes(this.bufferText, 0, this.bufferText.length);\n this.bufferText = '';\n this.bufferBlob = new Blob([this.bufferBlob, bufferArray]);\n };\n /**\n * Writes the specified string followed by a line terminator\n * @param {string} value - The string to write. If value is null or undefined, nothing is written\n * @returns {void}\n */\n StreamWriter.prototype.writeLine = function (value) {\n if (this.encoding === undefined) {\n throw new Error('Object Disposed Exception: current writer is disposed');\n }\n validateNullOrUndefined(value, 'string');\n this.bufferText = this.bufferText + value + '\\r\\n';\n if (this.bufferText.length >= 10240) {\n this.flush();\n }\n };\n /**\n * Releases the resources used by the StreamWriter\n * @returns {void}\n */\n StreamWriter.prototype.destroy = function () {\n this.bufferBlob = undefined;\n this.bufferText = undefined;\n if (this.enc instanceof Encoding) {\n this.enc.destroy();\n }\n this.enc = undefined;\n };\n return StreamWriter;\n}());\nexport { StreamWriter };\n","import { Encoding } from '@syncfusion/ej2-file-utils';\n/**\n * array literal codes\n */\nvar arrLiteralCodes = new Int16Array(286);\nvar arrLiteralLengths = new Uint8Array(286);\nvar arrDistanceCodes = new Int16Array(30);\nvar arrDistanceLengths = new Uint8Array(30);\n/**\n * represent compression stream writer\n * ```typescript\n * let compressedWriter = new CompressedStreamWriter();\n * let text: string = 'Hello world!!!';\n * compressedWriter.write(text, 0, text.length);\n * compressedWriter.close();\n * ```\n */\nvar CompressedStreamWriter = /** @class */ (function () {\n /**\n * Initializes compressor and writes ZLib header if needed.\n * @param {boolean} noWrap - optional if true, ZLib header and checksum will not be written.\n */\n function CompressedStreamWriter(noWrap) {\n this.pendingBuffer = new Uint8Array(1 << 16);\n this.pendingBufLength = 0;\n this.pendingBufCache = 0;\n this.pendingBufBitsInCache = 0;\n this.bufferPosition = 0;\n this.extraBits = 0;\n this.currentHash = 0;\n this.matchStart = 0;\n this.matchLength = 0;\n this.matchPrevAvail = false;\n this.blockStart = 0;\n this.stringStart = 0;\n this.lookAhead = 0;\n this.totalBytesIn = 0;\n this.inputOffset = 0;\n this.inputEnd = 0;\n this.windowSize = 1 << 15;\n this.windowMask = this.windowSize - 1;\n this.hashSize = 1 << 15;\n this.hashMask = this.hashSize - 1;\n this.hashShift = Math.floor((15 + 3 - 1) / 3);\n this.maxDist = this.windowSize - 262;\n this.checkSum = 1;\n this.noWrap = false;\n this.treeLiteral = new CompressorHuffmanTree(this, 286, 257, 15);\n this.treeDistances = new CompressorHuffmanTree(this, 30, 1, 15);\n this.treeCodeLengths = new CompressorHuffmanTree(this, 19, 4, 7);\n this.arrDistances = new Uint16Array((1 << 14));\n this.arrLiterals = new Uint8Array((1 << 14));\n this.stream = [];\n this.dataWindow = new Uint8Array(2 * this.windowSize);\n this.hashHead = new Int16Array(this.hashSize);\n this.hashPrevious = new Int16Array(this.windowSize);\n this.blockStart = this.stringStart = 1;\n this.noWrap = noWrap;\n if (!noWrap) {\n this.writeZLibHeader();\n }\n }\n Object.defineProperty(CompressedStreamWriter.prototype, \"compressedData\", {\n /**\n * get compressed data\n */\n get: function () {\n return this.stream;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CompressedStreamWriter.prototype, \"getCompressedString\", {\n get: function () {\n var compressedString = '';\n if (this.stream !== undefined) {\n for (var i = 0; i < this.stream.length; i++) {\n compressedString += String.fromCharCode.apply(null, this.stream[i]);\n }\n }\n return compressedString;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Compresses data and writes it to the stream.\n * @param {Uint8Array} data - data to compress\n * @param {number} offset - offset in data\n * @param {number} length - length of the data\n * @returns {void}\n */\n CompressedStreamWriter.prototype.write = function (data, offset, length) {\n if (data === undefined || data === null) {\n throw new Error('ArgumentException: data cannot null or undefined');\n }\n var end = offset + length;\n if (0 > offset || offset > end || end > data.length) {\n throw new Error('ArgumentOutOfRangeException: Offset or length is incorrect');\n }\n if (typeof data === 'string') {\n var encode = new Encoding(false);\n encode.type = 'Utf8';\n data = new Uint8Array(encode.getBytes(data, 0, data.length));\n end = offset + data.length;\n }\n this.inputBuffer = data;\n this.inputOffset = offset;\n this.inputEnd = end;\n if (!this.noWrap) {\n this.checkSum = ChecksumCalculator.checksumUpdate(this.checkSum, this.inputBuffer, this.inputOffset, end);\n }\n while (!(this.inputEnd === this.inputOffset) || !(this.pendingBufLength === 0)) {\n this.pendingBufferFlush();\n this.compressData(false);\n }\n };\n /**\n * write ZLib header to the compressed data\n * @return {void}\n */\n CompressedStreamWriter.prototype.writeZLibHeader = function () {\n /* Initialize header.*/\n var headerDate = (8 + (7 << 4)) << 8;\n /* Save compression level.*/\n headerDate |= ((5 >> 2) & 3) << 6;\n /* Align header.*/\n headerDate += 31 - (headerDate % 31);\n /* Write header to stream.*/\n this.pendingBufferWriteShortBytes(headerDate);\n };\n /**\n * Write Most Significant Bytes in to stream\n * @param {number} s - check sum value\n */\n CompressedStreamWriter.prototype.pendingBufferWriteShortBytes = function (s) {\n this.pendingBuffer[this.pendingBufLength++] = s >> 8;\n this.pendingBuffer[this.pendingBufLength++] = s;\n };\n CompressedStreamWriter.prototype.compressData = function (finish) {\n var success;\n do {\n this.fillWindow();\n var canFlush = (finish && this.inputEnd === this.inputOffset);\n success = this.compressSlow(canFlush, finish);\n } while (this.pendingBufLength === 0 && success);\n return success;\n };\n CompressedStreamWriter.prototype.compressSlow = function (flush, finish) {\n if (this.lookAhead < 262 && !flush) {\n return false;\n }\n while (this.lookAhead >= 262 || flush) {\n if (this.lookAhead === 0) {\n return this.lookAheadCompleted(finish);\n }\n if (this.stringStart >= 2 * this.windowSize - 262) {\n this.slideWindow();\n }\n var prevMatch = this.matchStart;\n var prevLen = this.matchLength;\n if (this.lookAhead >= 3) {\n this.discardMatch();\n }\n if (prevLen >= 3 && this.matchLength <= prevLen) {\n prevLen = this.matchPreviousBest(prevMatch, prevLen);\n }\n else {\n this.matchPreviousAvailable();\n }\n if (this.bufferPosition >= (1 << 14)) {\n return this.huffmanIsFull(finish);\n }\n }\n return true;\n };\n CompressedStreamWriter.prototype.discardMatch = function () {\n var hashHead = this.insertString();\n if (hashHead !== 0 && this.stringStart - hashHead <= this.maxDist && this.findLongestMatch(hashHead)) {\n if (this.matchLength <= 5 && (this.matchLength === 3 && this.stringStart - this.matchStart > 4096)) {\n this.matchLength = 3 - 1;\n }\n }\n };\n CompressedStreamWriter.prototype.matchPreviousAvailable = function () {\n if (this.matchPrevAvail) {\n this.huffmanTallyLit(this.dataWindow[this.stringStart - 1] & 0xff);\n }\n this.matchPrevAvail = true;\n this.stringStart++;\n this.lookAhead--;\n };\n CompressedStreamWriter.prototype.matchPreviousBest = function (prevMatch, prevLen) {\n this.huffmanTallyDist(this.stringStart - 1 - prevMatch, prevLen);\n prevLen -= 2;\n do {\n this.stringStart++;\n this.lookAhead--;\n if (this.lookAhead >= 3) {\n this.insertString();\n }\n } while (--prevLen > 0);\n this.stringStart++;\n this.lookAhead--;\n this.matchPrevAvail = false;\n this.matchLength = 3 - 1;\n return prevLen;\n };\n CompressedStreamWriter.prototype.lookAheadCompleted = function (finish) {\n if (this.matchPrevAvail) {\n this.huffmanTallyLit(this.dataWindow[this.stringStart - 1] & 0xff);\n }\n this.matchPrevAvail = false;\n this.huffmanFlushBlock(this.dataWindow, this.blockStart, this.stringStart - this.blockStart, finish);\n this.blockStart = this.stringStart;\n return false;\n };\n CompressedStreamWriter.prototype.huffmanIsFull = function (finish) {\n var len = this.stringStart - this.blockStart;\n if (this.matchPrevAvail) {\n len--;\n }\n var lastBlock = (finish && this.lookAhead === 0 && !this.matchPrevAvail);\n this.huffmanFlushBlock(this.dataWindow, this.blockStart, len, lastBlock);\n this.blockStart += len;\n return !lastBlock;\n };\n CompressedStreamWriter.prototype.fillWindow = function () {\n if (this.stringStart >= this.windowSize + this.maxDist) {\n this.slideWindow();\n }\n while (this.lookAhead < 262 && this.inputOffset < this.inputEnd) {\n var more = 2 * this.windowSize - this.lookAhead - this.stringStart;\n if (more > this.inputEnd - this.inputOffset) {\n more = this.inputEnd - this.inputOffset;\n }\n this.dataWindow.set(this.inputBuffer.subarray(this.inputOffset, this.inputOffset + more), this.stringStart + this.lookAhead);\n this.inputOffset += more;\n this.totalBytesIn += more;\n this.lookAhead += more;\n }\n if (this.lookAhead >= 3) {\n this.updateHash();\n }\n };\n CompressedStreamWriter.prototype.slideWindow = function () {\n this.dataWindow.set(this.dataWindow.subarray(this.windowSize, this.windowSize + this.windowSize), 0);\n this.matchStart -= this.windowSize;\n this.stringStart -= this.windowSize;\n this.blockStart -= this.windowSize;\n for (var i = 0; i < this.hashSize; ++i) {\n var m = this.hashHead[i] & 0xffff;\n this.hashHead[i] = (((m >= this.windowSize) ? (m - this.windowSize) : 0));\n }\n for (var i = 0; i < this.windowSize; i++) {\n var m = this.hashPrevious[i] & 0xffff;\n this.hashPrevious[i] = ((m >= this.windowSize) ? (m - this.windowSize) : 0);\n }\n };\n CompressedStreamWriter.prototype.insertString = function () {\n var match;\n var hash = ((this.currentHash << this.hashShift) ^ this.dataWindow[this.stringStart + (3 - 1)]) & this.hashMask;\n this.hashPrevious[this.stringStart & this.windowMask] = match = this.hashHead[hash];\n this.hashHead[hash] = this.stringStart;\n this.currentHash = hash;\n return match & 0xffff;\n };\n CompressedStreamWriter.prototype.findLongestMatch = function (curMatch) {\n var chainLen = 4096;\n var niceLen = 258;\n var scan = this.stringStart;\n var match;\n var bestEnd = this.stringStart + this.matchLength;\n var bestLength = Math.max(this.matchLength, 3 - 1);\n var limit = Math.max(this.stringStart - this.maxDist, 0);\n var stringEnd = this.stringStart + 258 - 1;\n var scanEnd1 = this.dataWindow[bestEnd - 1];\n var scanEnd = this.dataWindow[bestEnd];\n var data = this.dataWindow;\n if (bestLength >= 32) {\n chainLen >>= 2;\n }\n if (niceLen > this.lookAhead) {\n niceLen = this.lookAhead;\n }\n do {\n if (data[curMatch + bestLength] !== scanEnd ||\n data[curMatch + bestLength - 1] !== scanEnd1 ||\n data[curMatch] !== data[scan] ||\n data[curMatch + 1] !== data[scan + 1]) {\n continue;\n }\n match = curMatch + 2;\n scan += 2;\n /* tslint:disable */\n while (data[++scan] === data[++match] && data[++scan] === data[++match] &&\n data[++scan] === data[++match] && data[++scan] === data[++match] &&\n data[++scan] === data[++match] && data[++scan] === data[++match] &&\n data[++scan] === data[++match] && data[++scan] === data[++match] && scan < stringEnd) {\n /* tslint:disable */\n }\n if (scan > bestEnd) {\n this.matchStart = curMatch;\n bestEnd = scan;\n bestLength = scan - this.stringStart;\n if (bestLength >= niceLen) {\n break;\n }\n scanEnd1 = data[bestEnd - 1];\n scanEnd = data[bestEnd];\n }\n scan = this.stringStart;\n } while ((curMatch = (this.hashPrevious[curMatch & this.windowMask] & 0xffff)) > limit && --chainLen !== 0);\n this.matchLength = Math.min(bestLength, this.lookAhead);\n return this.matchLength >= 3;\n };\n CompressedStreamWriter.prototype.updateHash = function () {\n this.currentHash = (this.dataWindow[this.stringStart] << this.hashShift) ^ this.dataWindow[this.stringStart + 1];\n };\n CompressedStreamWriter.prototype.huffmanTallyLit = function (literal) {\n this.arrDistances[this.bufferPosition] = 0;\n this.arrLiterals[this.bufferPosition++] = literal;\n this.treeLiteral.codeFrequencies[literal]++;\n return this.bufferPosition >= (1 << 14);\n };\n CompressedStreamWriter.prototype.huffmanTallyDist = function (dist, len) {\n this.arrDistances[this.bufferPosition] = dist;\n this.arrLiterals[this.bufferPosition++] = (len - 3);\n var lc = this.huffmanLengthCode(len - 3);\n this.treeLiteral.codeFrequencies[lc]++;\n if (lc >= 265 && lc < 285) {\n this.extraBits += Math.floor((lc - 261) / 4);\n }\n var dc = this.huffmanDistanceCode(dist - 1);\n this.treeDistances.codeFrequencies[dc]++;\n if (dc >= 4) {\n this.extraBits += Math.floor((dc / 2 - 1));\n }\n return this.bufferPosition >= (1 << 14);\n };\n CompressedStreamWriter.prototype.huffmanFlushBlock = function (stored, storedOffset, storedLength, lastBlock) {\n this.treeLiteral.codeFrequencies[256]++;\n this.treeLiteral.buildTree();\n this.treeDistances.buildTree();\n this.treeLiteral.calculateBLFreq(this.treeCodeLengths);\n this.treeDistances.calculateBLFreq(this.treeCodeLengths);\n this.treeCodeLengths.buildTree();\n var blTreeCodes = 4;\n for (var i = 18; i > blTreeCodes; i--) {\n if (this.treeCodeLengths.codeLengths[CompressorHuffmanTree.huffCodeLengthOrders[i]] > 0) {\n blTreeCodes = i + 1;\n }\n }\n var opt_len = 14 + blTreeCodes * 3 + this.treeCodeLengths.getEncodedLength() +\n this.treeLiteral.getEncodedLength() + this.treeDistances.getEncodedLength() + this.extraBits;\n var static_len = this.extraBits;\n for (var i = 0; i < 286; i++) {\n static_len += this.treeLiteral.codeFrequencies[i] * arrLiteralLengths[i];\n }\n for (var i = 0; i < 30; i++) {\n static_len += this.treeDistances.codeFrequencies[i] * arrDistanceLengths[i];\n }\n if (opt_len >= static_len) {\n // Force static trees.\n opt_len = static_len;\n }\n if (storedOffset >= 0 && storedLength + 4 < opt_len >> 3) {\n this.huffmanFlushStoredBlock(stored, storedOffset, storedLength, lastBlock);\n }\n else if (opt_len == static_len) {\n // Encode with static tree.\n this.pendingBufferWriteBits((1 << 1) + (lastBlock ? 1 : 0), 3);\n this.treeLiteral.setStaticCodes(arrLiteralCodes, arrLiteralLengths);\n this.treeDistances.setStaticCodes(arrDistanceCodes, arrDistanceLengths);\n this.huffmanCompressBlock();\n this.huffmanReset();\n }\n else {\n this.pendingBufferWriteBits((2 << 1) + (lastBlock ? 1 : 0), 3);\n this.huffmanSendAllTrees(blTreeCodes);\n this.huffmanCompressBlock();\n this.huffmanReset();\n }\n };\n CompressedStreamWriter.prototype.huffmanFlushStoredBlock = function (stored, storedOffset, storedLength, lastBlock) {\n this.pendingBufferWriteBits((0 << 1) + (lastBlock ? 1 : 0), 3);\n this.pendingBufferAlignToByte();\n this.pendingBufferWriteShort(storedLength);\n this.pendingBufferWriteShort(~storedLength);\n this.pendingBufferWriteByteBlock(stored, storedOffset, storedLength);\n this.huffmanReset();\n };\n CompressedStreamWriter.prototype.huffmanLengthCode = function (len) {\n if (len === 255) {\n return 285;\n }\n var code = 257;\n while (len >= 8) {\n code += 4;\n len >>= 1;\n }\n return code + len;\n };\n CompressedStreamWriter.prototype.huffmanDistanceCode = function (distance) {\n var code = 0;\n while (distance >= 4) {\n code += 2;\n distance >>= 1;\n }\n return code + distance;\n };\n CompressedStreamWriter.prototype.huffmanSendAllTrees = function (blTreeCodes) {\n this.treeCodeLengths.buildCodes();\n this.treeLiteral.buildCodes();\n this.treeDistances.buildCodes();\n this.pendingBufferWriteBits(this.treeLiteral.treeLength - 257, 5);\n this.pendingBufferWriteBits(this.treeDistances.treeLength - 1, 5);\n this.pendingBufferWriteBits(blTreeCodes - 4, 4);\n for (var rank = 0; rank < blTreeCodes; rank++) {\n this.pendingBufferWriteBits(this.treeCodeLengths.codeLengths[CompressorHuffmanTree.huffCodeLengthOrders[rank]], 3);\n }\n this.treeLiteral.writeTree(this.treeCodeLengths);\n this.treeDistances.writeTree(this.treeCodeLengths);\n };\n CompressedStreamWriter.prototype.huffmanReset = function () {\n this.bufferPosition = 0;\n this.extraBits = 0;\n this.treeLiteral.reset();\n this.treeDistances.reset();\n this.treeCodeLengths.reset();\n };\n CompressedStreamWriter.prototype.huffmanCompressBlock = function () {\n for (var i = 0; i < this.bufferPosition; i++) {\n var literalLen = this.arrLiterals[i] & 255;\n var dist = this.arrDistances[i];\n if (dist-- !== 0) {\n var lc = this.huffmanLengthCode(literalLen);\n this.treeLiteral.writeCodeToStream(lc);\n var bits = Math.floor((lc - 261) / 4);\n if (bits > 0 && bits <= 5) {\n this.pendingBufferWriteBits(literalLen & ((1 << bits) - 1), bits);\n }\n var dc = this.huffmanDistanceCode(dist);\n this.treeDistances.writeCodeToStream(dc);\n bits = Math.floor(dc / 2 - 1);\n if (bits > 0) {\n this.pendingBufferWriteBits(dist & ((1 << bits) - 1), bits);\n }\n }\n else {\n this.treeLiteral.writeCodeToStream(literalLen);\n }\n }\n this.treeLiteral.writeCodeToStream(256);\n };\n /**\n * write bits in to internal buffer\n * @param {number} b - source of bits\n * @param {number} count - count of bits to write\n */\n CompressedStreamWriter.prototype.pendingBufferWriteBits = function (b, count) {\n var uint = new Uint32Array(1);\n uint[0] = this.pendingBufCache | (b << this.pendingBufBitsInCache);\n this.pendingBufCache = uint[0];\n this.pendingBufBitsInCache += count;\n this.pendingBufferFlushBits();\n };\n CompressedStreamWriter.prototype.pendingBufferFlush = function (isClose) {\n this.pendingBufferFlushBits();\n if (this.pendingBufLength > 0) {\n var array = new Uint8Array(this.pendingBufLength);\n array.set(this.pendingBuffer.subarray(0, this.pendingBufLength), 0);\n this.stream.push(array);\n }\n this.pendingBufLength = 0;\n };\n CompressedStreamWriter.prototype.pendingBufferFlushBits = function () {\n var result = 0;\n while (this.pendingBufBitsInCache >= 8 && this.pendingBufLength < (1 << 16)) {\n this.pendingBuffer[this.pendingBufLength++] = this.pendingBufCache;\n this.pendingBufCache >>= 8;\n this.pendingBufBitsInCache -= 8;\n result++;\n }\n return result;\n };\n CompressedStreamWriter.prototype.pendingBufferWriteByteBlock = function (data, offset, length) {\n var array = data.subarray(offset, offset + length);\n this.pendingBuffer.set(array, this.pendingBufLength);\n this.pendingBufLength += length;\n };\n CompressedStreamWriter.prototype.pendingBufferWriteShort = function (s) {\n this.pendingBuffer[this.pendingBufLength++] = s;\n this.pendingBuffer[this.pendingBufLength++] = (s >> 8);\n };\n CompressedStreamWriter.prototype.pendingBufferAlignToByte = function () {\n if (this.pendingBufBitsInCache > 0) {\n this.pendingBuffer[this.pendingBufLength++] = this.pendingBufCache;\n }\n this.pendingBufCache = 0;\n this.pendingBufBitsInCache = 0;\n };\n /**\n * close the stream and write all pending buffer in to stream\n * @returns {void}\n */\n CompressedStreamWriter.prototype.close = function () {\n do {\n this.pendingBufferFlush(true);\n if (!this.compressData(true)) {\n this.pendingBufferFlush(true);\n this.pendingBufferAlignToByte();\n if (!this.noWrap) {\n this.pendingBufferWriteShortBytes(this.checkSum >> 16);\n this.pendingBufferWriteShortBytes(this.checkSum & 0xffff);\n }\n this.pendingBufferFlush(true);\n }\n } while (!(this.inputEnd === this.inputOffset) ||\n !(this.pendingBufLength === 0));\n };\n /**\n * release allocated un-managed resource\n * @returns {void}\n */\n CompressedStreamWriter.prototype.destroy = function () {\n this.stream = [];\n this.stream = undefined;\n this.pendingBuffer = undefined;\n this.treeLiteral = undefined;\n this.treeDistances = undefined;\n this.treeCodeLengths = undefined;\n this.arrLiterals = undefined;\n this.arrDistances = undefined;\n this.hashHead = undefined;\n this.hashPrevious = undefined;\n this.dataWindow = undefined;\n this.inputBuffer = undefined;\n this.pendingBufLength = undefined;\n this.pendingBufCache = undefined;\n this.pendingBufBitsInCache = undefined;\n this.bufferPosition = undefined;\n this.extraBits = undefined;\n this.currentHash = undefined;\n this.matchStart = undefined;\n this.matchLength = undefined;\n this.matchPrevAvail = undefined;\n this.blockStart = undefined;\n this.stringStart = undefined;\n this.lookAhead = undefined;\n this.totalBytesIn = undefined;\n this.inputOffset = undefined;\n this.inputEnd = undefined;\n this.windowSize = undefined;\n this.windowMask = undefined;\n this.hashSize = undefined;\n this.hashMask = undefined;\n this.hashShift = undefined;\n this.maxDist = undefined;\n this.checkSum = undefined;\n this.noWrap = undefined;\n };\n return CompressedStreamWriter;\n}());\nexport { CompressedStreamWriter };\n/**\n * represent the Huffman Tree\n */\nvar CompressorHuffmanTree = /** @class */ (function () {\n /**\n * Create new Huffman Tree\n * @param {CompressedStreamWriter} writer instance\n * @param {number} elementCount - element count\n * @param {number} minCodes - minimum count\n * @param {number} maxLength - maximum count\n */\n function CompressorHuffmanTree(writer, elementCount, minCodes, maxLength) {\n this.writer = writer;\n this.codeMinCount = minCodes;\n this.maxLength = maxLength;\n this.codeFrequency = new Uint16Array(elementCount);\n this.lengthCount = new Int32Array(maxLength);\n }\n Object.defineProperty(CompressorHuffmanTree.prototype, \"treeLength\", {\n get: function () {\n return this.codeCount;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CompressorHuffmanTree.prototype, \"codeLengths\", {\n get: function () {\n return this.codeLength;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CompressorHuffmanTree.prototype, \"codeFrequencies\", {\n get: function () {\n return this.codeFrequency;\n },\n enumerable: true,\n configurable: true\n });\n CompressorHuffmanTree.prototype.setStaticCodes = function (codes, lengths) {\n var temp = new Int16Array(codes.length);\n temp.set(codes, 0);\n this.codes = temp;\n var lengthTemp = new Uint8Array(lengths.length);\n lengthTemp.set(lengths, 0);\n this.codeLength = lengthTemp;\n };\n /**\n * reset all code data in tree\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.reset = function () {\n for (var i = 0; i < this.codeFrequency.length; i++) {\n this.codeFrequency[i] = 0;\n }\n this.codes = undefined;\n this.codeLength = undefined;\n };\n /**\n * write code to the compressor output stream\n * @param {number} code - code to be written\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.writeCodeToStream = function (code) {\n this.writer.pendingBufferWriteBits(this.codes[code] & 0xffff, this.codeLength[code]);\n };\n /**\n * calculate code from their frequencies\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.buildCodes = function () {\n var nextCode = new Int32Array(this.maxLength);\n this.codes = new Int16Array(this.codeCount);\n var code = 0;\n for (var bitsCount = 0; bitsCount < this.maxLength; bitsCount++) {\n nextCode[bitsCount] = code;\n code += this.lengthCount[bitsCount] << (15 - bitsCount);\n }\n for (var i = 0; i < this.codeCount; i++) {\n var bits = this.codeLength[i];\n if (bits > 0) {\n this.codes[i] = CompressorHuffmanTree.bitReverse(nextCode[bits - 1]);\n nextCode[bits - 1] += 1 << (16 - bits);\n }\n }\n };\n CompressorHuffmanTree.bitReverse = function (value) {\n return (CompressorHuffmanTree.reverseBits[value & 15] << 12\n | CompressorHuffmanTree.reverseBits[(value >> 4) & 15] << 8\n | CompressorHuffmanTree.reverseBits[(value >> 8) & 15] << 4\n | CompressorHuffmanTree.reverseBits[value >> 12]);\n };\n /**\n * calculate length of compressed data\n * @returns {number}\n */\n CompressorHuffmanTree.prototype.getEncodedLength = function () {\n var len = 0;\n for (var i = 0; i < this.codeFrequency.length; i++) {\n len += this.codeFrequency[i] * this.codeLength[i];\n }\n return len;\n };\n /**\n * calculate code frequencies\n * @param {CompressorHuffmanTree} blTree\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.calculateBLFreq = function (blTree) {\n var maxCount;\n var minCount;\n var count;\n var curLen = -1;\n var i = 0;\n while (i < this.codeCount) {\n count = 1;\n var nextLen = this.codeLength[i];\n if (nextLen === 0) {\n maxCount = 138;\n minCount = 3;\n }\n else {\n maxCount = 6;\n minCount = 3;\n if (curLen !== nextLen) {\n blTree.codeFrequency[nextLen]++;\n count = 0;\n }\n }\n curLen = nextLen;\n i++;\n while (i < this.codeCount && curLen === this.codeLength[i]) {\n i++;\n if (++count >= maxCount) {\n break;\n }\n }\n if (count < minCount) {\n blTree.codeFrequency[curLen] += count;\n }\n else if (curLen !== 0) {\n blTree.codeFrequency[16]++;\n }\n else if (count <= 10) {\n blTree.codeFrequency[17]++;\n }\n else {\n blTree.codeFrequency[18]++;\n }\n }\n };\n /**\n * @param {CompressorHuffmanTree} blTree - write tree to output stream\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.writeTree = function (blTree) {\n var maxRepeatCount;\n var minRepeatCount;\n var currentRepeatCount;\n var currentCodeLength = -1;\n var i = 0;\n while (i < this.codeCount) {\n currentRepeatCount = 1;\n var nextLen = this.codeLength[i];\n if (nextLen === 0) {\n maxRepeatCount = 138;\n minRepeatCount = 3;\n }\n else {\n maxRepeatCount = 6;\n minRepeatCount = 3;\n if (currentCodeLength !== nextLen) {\n blTree.writeCodeToStream(nextLen);\n currentRepeatCount = 0;\n }\n }\n currentCodeLength = nextLen;\n i++;\n while (i < this.codeCount && currentCodeLength === this.codeLength[i]) {\n i++;\n if (++currentRepeatCount >= maxRepeatCount) {\n break;\n }\n }\n if (currentRepeatCount < minRepeatCount) {\n while (currentRepeatCount-- > 0) {\n blTree.writeCodeToStream(currentCodeLength);\n }\n }\n else if (currentCodeLength !== 0) {\n blTree.writeCodeToStream(16);\n this.writer.pendingBufferWriteBits(currentRepeatCount - 3, 2);\n }\n else if (currentRepeatCount <= 10) {\n blTree.writeCodeToStream(17);\n this.writer.pendingBufferWriteBits(currentRepeatCount - 3, 3);\n }\n else {\n blTree.writeCodeToStream(18);\n this.writer.pendingBufferWriteBits(currentRepeatCount - 11, 7);\n }\n }\n };\n /**\n * Build huffman tree\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.buildTree = function () {\n var codesCount = this.codeFrequency.length;\n var arrTree = new Int32Array(codesCount);\n var treeLength = 0;\n var maxCount = 0;\n for (var n = 0; n < codesCount; n++) {\n var freq = this.codeFrequency[n];\n if (freq !== 0) {\n var pos = treeLength++;\n var pPos = 0;\n while (pos > 0 && this.codeFrequency[arrTree[pPos = Math.floor((pos - 1) / 2)]] > freq) {\n arrTree[pos] = arrTree[pPos];\n pos = pPos;\n }\n arrTree[pos] = n;\n maxCount = n;\n }\n }\n while (treeLength < 2) {\n arrTree[treeLength++] =\n (maxCount < 2) ? ++maxCount : 0;\n }\n this.codeCount = Math.max(maxCount + 1, this.codeMinCount);\n var leafsCount = treeLength;\n var nodesCount = leafsCount;\n var child = new Int32Array(4 * treeLength - 2);\n var values = new Int32Array(2 * treeLength - 1);\n for (var i = 0; i < treeLength; i++) {\n var node = arrTree[i];\n var iIndex = 2 * i;\n child[iIndex] = node;\n child[iIndex + 1] = -1;\n values[i] = (this.codeFrequency[node] << 8);\n arrTree[i] = i;\n }\n this.constructHuffmanTree(arrTree, treeLength, values, nodesCount, child);\n this.buildLength(child);\n };\n CompressorHuffmanTree.prototype.constructHuffmanTree = function (arrTree, treeLength, values, nodesCount, child) {\n do {\n var first = arrTree[0];\n var last = arrTree[--treeLength];\n var lastVal = values[last];\n var pPos = 0;\n var path = 1;\n while (path < treeLength) {\n if (path + 1 < treeLength && values[arrTree[path]] > values[arrTree[path + 1]]) {\n path++;\n }\n arrTree[pPos] = arrTree[path];\n pPos = path;\n path = pPos * 2 + 1;\n }\n while ((path = pPos) > 0 && values[arrTree[pPos = Math.floor((path - 1) / 2)]] > lastVal) {\n arrTree[path] = arrTree[pPos];\n }\n arrTree[path] = last;\n var second = arrTree[0];\n last = nodesCount++;\n child[2 * last] = first;\n child[2 * last + 1] = second;\n var minDepth = Math.min(values[first] & 0xff, values[second] & 0xff);\n values[last] = lastVal = values[first] + values[second] - minDepth + 1;\n pPos = 0;\n path = 1;\n /* tslint:disable */\n while (path < treeLength) {\n if (path + 1 < treeLength && values[arrTree[path]] > values[arrTree[path + 1]]) {\n path++;\n }\n arrTree[pPos] = arrTree[path];\n pPos = path;\n path = pPos * 2 + 1;\n } /* tslint:disable */\n while ((path = pPos) > 0 && values[arrTree[pPos = Math.floor((path - 1) / 2)]] > lastVal) {\n arrTree[path] = arrTree[pPos];\n }\n arrTree[path] = last;\n } while (treeLength > 1);\n };\n CompressorHuffmanTree.prototype.buildLength = function (child) {\n this.codeLength = new Uint8Array(this.codeFrequency.length);\n var numNodes = Math.floor(child.length / 2);\n var numLeafs = Math.floor((numNodes + 1) / 2);\n var overflow = 0;\n for (var i = 0; i < this.maxLength; i++) {\n this.lengthCount[i] = 0;\n }\n overflow = this.calculateOptimalCodeLength(child, overflow, numNodes);\n if (overflow === 0) {\n return;\n }\n var iIncreasableLength = this.maxLength - 1;\n do {\n while (this.lengthCount[--iIncreasableLength] === 0) {\n /* tslint:disable */\n }\n do {\n this.lengthCount[iIncreasableLength]--;\n this.lengthCount[++iIncreasableLength]++;\n overflow -= (1 << (this.maxLength - 1 - iIncreasableLength));\n } while (overflow > 0 && iIncreasableLength < this.maxLength - 1);\n } while (overflow > 0);\n this.recreateTree(child, overflow, numLeafs);\n };\n CompressorHuffmanTree.prototype.recreateTree = function (child, overflow, numLeafs) {\n this.lengthCount[this.maxLength - 1] += overflow;\n this.lengthCount[this.maxLength - 2] -= overflow;\n var nodePtr = 2 * numLeafs;\n for (var bits = this.maxLength; bits !== 0; bits--) {\n var n = this.lengthCount[bits - 1];\n while (n > 0) {\n var childPtr = 2 * child[nodePtr++];\n if (child[childPtr + 1] === -1) {\n this.codeLength[child[childPtr]] = bits;\n n--;\n }\n }\n }\n };\n CompressorHuffmanTree.prototype.calculateOptimalCodeLength = function (child, overflow, numNodes) {\n var lengths = new Int32Array(numNodes);\n lengths[numNodes - 1] = 0;\n for (var i = numNodes - 1; i >= 0; i--) {\n var childIndex = 2 * i + 1;\n if (child[childIndex] !== -1) {\n var bitLength = lengths[i] + 1;\n if (bitLength > this.maxLength) {\n bitLength = this.maxLength;\n overflow++;\n }\n lengths[child[childIndex - 1]] = lengths[child[childIndex]] = bitLength;\n }\n else {\n var bitLength = lengths[i];\n this.lengthCount[bitLength - 1]++;\n this.codeLength[child[childIndex - 1]] = lengths[i];\n }\n }\n return overflow;\n };\n CompressorHuffmanTree.reverseBits = [0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15];\n CompressorHuffmanTree.huffCodeLengthOrders = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];\n return CompressorHuffmanTree;\n}());\nexport { CompressorHuffmanTree };\n/**\n * Checksum calculator, based on Adler32 algorithm.\n */\nvar ChecksumCalculator = /** @class */ (function () {\n function ChecksumCalculator() {\n }\n /**\n * Updates checksum by calculating checksum of the\n * given buffer and adding it to current value.\n * @param {number} checksum - current checksum.\n * @param {Uint8Array} buffer - data byte array.\n * @param {number} offset - offset in the buffer.\n * @param {number} length - length of data to be used from the stream.\n * @returns {number}\n */\n ChecksumCalculator.checksumUpdate = function (checksum, buffer, offset, length) {\n var uint = new Uint32Array(1);\n uint[0] = checksum;\n var checksum_uint = uint[0];\n var s1 = uint[0] = checksum_uint & 65535;\n var s2 = uint[0] = checksum_uint >> ChecksumCalculator.checkSumBitOffset;\n while (length > 0) {\n var steps = Math.min(length, ChecksumCalculator.checksumIterationCount);\n length -= steps;\n while (--steps >= 0) {\n s1 = s1 + (uint[0] = (buffer[offset++] & 255));\n s2 = s2 + s1;\n }\n s1 %= ChecksumCalculator.checksumBase;\n s2 %= ChecksumCalculator.checksumBase;\n }\n checksum_uint = (s2 << ChecksumCalculator.checkSumBitOffset) | s1;\n return checksum_uint;\n };\n ChecksumCalculator.checkSumBitOffset = 16;\n ChecksumCalculator.checksumBase = 65521;\n ChecksumCalculator.checksumIterationCount = 3800;\n return ChecksumCalculator;\n}());\nexport { ChecksumCalculator };\n/**\n * Huffman Tree literal calculation\n */\n(function () {\n var i = 0;\n while (i < 144) {\n arrLiteralCodes[i] = CompressorHuffmanTree.bitReverse((0x030 + i) << 8);\n arrLiteralLengths[i++] = 8;\n }\n while (i < 256) {\n arrLiteralCodes[i] = CompressorHuffmanTree.bitReverse((0x190 - 144 + i) << 7);\n arrLiteralLengths[i++] = 9;\n }\n while (i < 280) {\n arrLiteralCodes[i] = CompressorHuffmanTree.bitReverse((0x000 - 256 + i) << 9);\n arrLiteralLengths[i++] = 7;\n }\n while (i < 286) {\n arrLiteralCodes[i] = CompressorHuffmanTree.bitReverse((0x0c0 - 280 + i) << 8);\n arrLiteralLengths[i++] = 8;\n }\n for (i = 0; i < 30; i++) {\n arrDistanceCodes[i] = CompressorHuffmanTree.bitReverse(i << 11);\n arrDistanceLengths[i] = 5;\n }\n})();\n","import { CompressedStreamWriter } from './compression-writer';\nimport { Save } from '@syncfusion/ej2-file-utils';\nvar crc32Table = [];\n/**\n * class provide compression library\n * ```typescript\n * let archive = new ZipArchive();\n * archive.compressionLevel = 'Normal';\n * let archiveItem = new ZipArchiveItem(archive, 'directoryName\\fileName.txt');\n * archive.addItem(archiveItem);\n * archive.save(fileName.zip);\n * ```\n */\nvar ZipArchive = /** @class */ (function () {\n /**\n * constructor for creating ZipArchive instance\n */\n function ZipArchive() {\n this.files = [];\n this.level = 'Normal';\n Save.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n }\n Object.defineProperty(ZipArchive.prototype, \"compressionLevel\", {\n /**\n * gets compression level\n */\n get: function () {\n return this.level;\n },\n /**\n * sets compression level\n */\n set: function (level) {\n this.level = level;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ZipArchive.prototype, \"length\", {\n /**\n * gets items count\n */\n get: function () {\n if (this.files === undefined) {\n return 0;\n }\n return this.files.length;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * add new item to archive\n * @param {ZipArchiveItem} item - item to be added\n * @returns {void}\n */\n ZipArchive.prototype.addItem = function (item) {\n if (item === null || item === undefined) {\n throw new Error('ArgumentException: item cannot be null or undefined');\n }\n for (var i = 0; i < this.files.length; i++) {\n var file = this.files[i];\n if (file instanceof ZipArchiveItem) {\n if (file.name === item.name) {\n throw new Error('item with same name already exist');\n }\n }\n }\n this.files.push(item);\n };\n /**\n * add new directory to archive\n * @param directoryName directoryName to be created\n * @returns {void}\n */\n ZipArchive.prototype.addDirectory = function (directoryName) {\n if (directoryName === null || directoryName === undefined) {\n throw new Error('ArgumentException: string cannot be null or undefined');\n }\n if (directoryName.length === 0) {\n throw new Error('ArgumentException: string cannot be empty');\n }\n if (directoryName.slice(-1) !== '/') {\n directoryName += '/';\n }\n if (this.files.indexOf(directoryName) !== -1) {\n throw new Error('item with same name already exist');\n }\n this.files.push(directoryName);\n };\n /**\n * gets item at specified index\n * @param {number} index - item index\n * @returns {ZipArchiveItem}\n */\n ZipArchive.prototype.getItem = function (index) {\n if (index >= 0 && index < this.files.length) {\n return this.files[index];\n }\n return undefined;\n };\n /**\n * determines whether an element is in the collection\n * @param {string | ZipArchiveItem} item - item to search\n * @returns {boolean}\n */\n ZipArchive.prototype.contains = function (item) {\n return this.files.indexOf(item) !== -1 ? true : false;\n };\n /**\n * save archive with specified file name\n * @param {string} fileName save archive with specified file name\n * @returns {Promise}\n */\n ZipArchive.prototype.save = function (fileName) {\n if (fileName === null || fileName === undefined || fileName.length === 0) {\n throw new Error('ArgumentException: fileName cannot be null or undefined');\n }\n if (this.files.length === 0) {\n throw new Error('InvalidOperation');\n }\n var zipArchive = this;\n var promise;\n return promise = new Promise(function (resolve, reject) {\n zipArchive.saveInternal(fileName, false).then(function () {\n resolve(zipArchive);\n });\n });\n };\n /**\n * Save archive as blob\n * @return {Promise}\n */\n ZipArchive.prototype.saveAsBlob = function () {\n var zipArchive = this;\n var promise;\n return promise = new Promise(function (resolve, reject) {\n zipArchive.saveInternal('', true).then(function (blob) {\n resolve(blob);\n });\n });\n };\n ZipArchive.prototype.saveInternal = function (fileName, skipFileSave) {\n var _this = this;\n var zipArchive = this;\n var promise;\n return promise = new Promise(function (resolve, reject) {\n var zipData = [];\n var dirLength = 0;\n for (var i = 0; i < zipArchive.files.length; i++) {\n var compressedObject = _this.getCompressedData(_this.files[i]);\n compressedObject.then(function (data) {\n dirLength = zipArchive.constructZippedObject(zipData, data, dirLength, data.isDirectory);\n if (zipData.length === zipArchive.files.length) {\n var blob = zipArchive.writeZippedContent(fileName, zipData, dirLength, skipFileSave);\n resolve(blob);\n }\n });\n }\n });\n };\n /**\n * release allocated un-managed resource\n * @returns {void}\n */\n ZipArchive.prototype.destroy = function () {\n if (this.files !== undefined && this.files.length > 0) {\n for (var i = 0; i < this.files.length; i++) {\n var file = this.files[i];\n if (file instanceof ZipArchiveItem) {\n file.destroy();\n }\n file = undefined;\n }\n this.files = [];\n }\n this.files = undefined;\n this.level = undefined;\n };\n ZipArchive.prototype.getCompressedData = function (item) {\n var zipArchive = this;\n var promise = new Promise(function (resolve, reject) {\n if (item instanceof ZipArchiveItem) {\n var reader_1 = new FileReader();\n reader_1.onload = function () {\n var input = new Uint8Array(reader_1.result);\n var data = {\n fileName: item.name, crc32Value: 0, compressedData: [],\n compressedSize: undefined, uncompressedDataSize: input.length, compressionType: undefined,\n isDirectory: false\n };\n if (zipArchive.level === 'Normal') {\n zipArchive.compressData(input, data, crc32Table);\n var length_1 = 0;\n for (var i = 0; i < data.compressedData.length; i++) {\n length_1 += data.compressedData[i].length;\n }\n data.compressedSize = length_1;\n data.compressionType = '\\x08\\x00'; //Deflated = 8\n }\n else {\n data.compressedSize = input.length;\n data.crc32Value = zipArchive.calculateCrc32Value(0, input, crc32Table);\n data.compressionType = '\\x00\\x00'; // Stored = 0\n data.compressedData.push(input);\n }\n resolve(data);\n };\n reader_1.readAsArrayBuffer(item.data);\n }\n else {\n var data = {\n fileName: item, crc32Value: 0, compressedData: '', compressedSize: 0, uncompressedDataSize: 0,\n compressionType: '\\x00\\x00', isDirectory: true\n };\n resolve(data);\n }\n });\n return promise;\n };\n ZipArchive.prototype.compressData = function (input, data, crc32Table) {\n var compressor = new CompressedStreamWriter(true);\n var currentIndex = 0;\n var nextIndex = 0;\n do {\n if (currentIndex >= input.length) {\n compressor.close();\n break;\n }\n nextIndex = Math.min(input.length, currentIndex + 16384);\n var subArray = input.subarray(currentIndex, nextIndex);\n data.crc32Value = this.calculateCrc32Value(data.crc32Value, subArray, crc32Table);\n compressor.write(subArray, 0, nextIndex - currentIndex);\n currentIndex = nextIndex;\n } while (currentIndex <= input.length);\n data.compressedData = compressor.compressedData;\n compressor.destroy();\n };\n ZipArchive.prototype.constructZippedObject = function (zipParts, data, dirLength, isDirectory) {\n var extFileAttr = 0;\n var date = new Date();\n if (isDirectory) {\n extFileAttr = extFileAttr | 0x00010; // directory flag\n }\n extFileAttr = extFileAttr | (0 & 0x3F);\n var header = this.writeHeader(data, date);\n var localHeader = 'PK\\x03\\x04' + header + data.fileName;\n var centralDir = this.writeCentralDirectory(data, header, dirLength, extFileAttr);\n zipParts.push({ localHeader: localHeader, centralDir: centralDir, compressedData: data });\n return dirLength + localHeader.length + data.compressedSize;\n };\n ZipArchive.prototype.writeHeader = function (data, date) {\n var zipHeader = '';\n zipHeader += '\\x0A\\x00' + '\\x00\\x00'; // version needed to extract & general purpose bit flag\n zipHeader += data.compressionType; // compression method Deflate=8,Stored=0\n zipHeader += this.getBytes(this.getModifiedTime(date), 2); // last modified Time\n zipHeader += this.getBytes(this.getModifiedDate(date), 2); // last modified date\n zipHeader += this.getBytes(data.crc32Value, 4); // crc-32 value\n zipHeader += this.getBytes(data.compressedSize, 4); // compressed file size\n zipHeader += this.getBytes(data.uncompressedDataSize, 4); // uncompressed file size\n zipHeader += this.getBytes(data.fileName.length, 2); // file name length\n zipHeader += this.getBytes(0, 2); // extra field length\n return zipHeader;\n };\n ZipArchive.prototype.writeZippedContent = function (fileName, zipData, localDirLen, skipFileSave) {\n var cenDirLen = 0;\n var buffer = [];\n for (var i = 0; i < zipData.length; i++) {\n var item = zipData[i];\n cenDirLen += item.centralDir.length;\n buffer.push(this.getArrayBuffer(item.localHeader));\n while (item.compressedData.compressedData.length) {\n buffer.push(item.compressedData.compressedData.shift().buffer);\n }\n }\n for (var i = 0; i < zipData.length; i++) {\n buffer.push(this.getArrayBuffer(zipData[i].centralDir));\n }\n buffer.push(this.getArrayBuffer(this.writeFooter(zipData, cenDirLen, localDirLen)));\n var blob = new Blob(buffer, { type: 'application/zip' });\n if (!skipFileSave) {\n Save.save(fileName, blob);\n }\n return blob;\n };\n ZipArchive.prototype.writeCentralDirectory = function (data, localHeader, offset, externalFileAttribute) {\n var directoryHeader = 'PK\\x01\\x02' +\n this.getBytes(0x0014, 2) + localHeader + // inherit from file header\n this.getBytes(0, 2) + // comment length\n '\\x00\\x00' + '\\x00\\x00' + // internal file attributes \n this.getBytes(externalFileAttribute, 4) + // external file attributes\n this.getBytes(offset, 4) + // local fileHeader relative offset\n data.fileName;\n return directoryHeader;\n };\n ZipArchive.prototype.writeFooter = function (zipData, centralLength, localLength) {\n var dirEnd = 'PK\\x05\\x06' + '\\x00\\x00' + '\\x00\\x00' +\n this.getBytes(zipData.length, 2) + this.getBytes(zipData.length, 2) +\n this.getBytes(centralLength, 4) + this.getBytes(localLength, 4) +\n this.getBytes(0, 2);\n return dirEnd;\n };\n ZipArchive.prototype.getArrayBuffer = function (input) {\n var a = new Uint8Array(input.length);\n for (var j = 0; j < input.length; ++j) {\n a[j] = input.charCodeAt(j) & 0xFF;\n }\n return a.buffer;\n };\n ZipArchive.prototype.getBytes = function (value, offset) {\n var bytes = '';\n for (var i = 0; i < offset; i++) {\n bytes += String.fromCharCode(value & 0xff);\n value = value >>> 8;\n }\n return bytes;\n };\n ZipArchive.prototype.getModifiedTime = function (date) {\n var modTime = date.getHours();\n modTime = modTime << 6;\n modTime = modTime | date.getMinutes();\n modTime = modTime << 5;\n return modTime = modTime | date.getSeconds() / 2;\n };\n ZipArchive.prototype.getModifiedDate = function (date) {\n var modiDate = date.getFullYear() - 1980;\n modiDate = modiDate << 4;\n modiDate = modiDate | (date.getMonth() + 1);\n modiDate = modiDate << 5;\n return modiDate = modiDate | date.getDate();\n };\n ZipArchive.prototype.calculateCrc32Value = function (crc32Value, input, crc32Table) {\n crc32Value ^= -1;\n for (var i = 0; i < input.length; i++) {\n crc32Value = (crc32Value >>> 8) ^ crc32Table[(crc32Value ^ input[i]) & 0xFF];\n }\n return (crc32Value ^ (-1));\n };\n return ZipArchive;\n}());\nexport { ZipArchive };\n/**\n * Class represent unique ZipArchive item\n * ```typescript\n * let archiveItem = new ZipArchiveItem(archive, 'directoryName\\fileName.txt');\n * ```\n */\nvar ZipArchiveItem = /** @class */ (function () {\n /**\n * constructor for creating {ZipArchiveItem} instance\n * @param {Blob|ArrayBuffer} data file data\n * @param {itemName} itemName absolute file path\n */\n function ZipArchiveItem(data, itemName) {\n if (data === null || data === undefined) {\n throw new Error('ArgumentException: data cannot be null or undefined');\n }\n if (itemName === null || itemName === undefined) {\n throw new Error('ArgumentException: string cannot be null or undefined');\n }\n if (itemName.length === 0) {\n throw new Error('string cannot be empty');\n }\n this.data = data;\n this.name = itemName;\n }\n Object.defineProperty(ZipArchiveItem.prototype, \"name\", {\n /**\n * Get the name of archive item\n * @returns string\n */\n get: function () {\n return this.fileName;\n },\n /**\n * Set the name of archive item\n * @param {string} value\n */\n set: function (value) {\n this.fileName = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * release allocated un-managed resource\n * @returns {void}\n */\n ZipArchiveItem.prototype.destroy = function () {\n this.fileName = undefined;\n this.data = undefined;\n };\n return ZipArchiveItem;\n}());\nexport { ZipArchiveItem };\n/**\n * construct cyclic redundancy code table\n */\n(function () {\n var i;\n for (var j = 0; j < 256; j++) {\n i = j;\n for (var k = 0; k < 8; k++) {\n i = ((i & 1) ? (0xEDB88320 ^ (i >>> 1)) : (i >>> 1));\n }\n crc32Table[j] = i;\n }\n})();\n","/**\n * Dictionary.ts class for EJ2-PDF\n * @private\n * @hidden\n */\nimport { defaultToString } from './utils';\n/**\n * @private\n * @hidden\n */\nvar Dictionary = /** @class */ (function () {\n /**\n * @private\n * @hidden\n */\n function Dictionary(toStringFunction) {\n this.table = {};\n this.nElements = 0;\n this.toStr = toStringFunction || defaultToString;\n }\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.getValue = function (key) {\n var pair = this.table['$' + this.toStr(key)];\n if (typeof pair === 'undefined') {\n return undefined;\n }\n return pair.value;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.setValue = function (key, value) {\n // if (typeof key === 'undefined' || typeof value === 'undefined') {\n // return undefined;\n // }\n var ret;\n var k = '$' + this.toStr(key);\n var previousElement = this.table[k];\n // if (typeof previousElement === 'undefined') {\n this.nElements++;\n ret = undefined;\n // }\n this.table[k] = {\n key: key,\n value: value\n };\n return ret;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.remove = function (key) {\n var k = '$' + this.toStr(key);\n var previousElement = this.table[k];\n // if (typeof previousElement !== 'undefined') {\n delete this.table[k];\n this.nElements--;\n return previousElement.value;\n // }\n // return undefined;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.keys = function () {\n var keysArray = [];\n var namesOfKeys = Object.keys(this.table);\n for (var index1 = 0; index1 < namesOfKeys.length; index1++) {\n // if (Object.prototype.hasOwnProperty.call(this.table, namesOfKeys[index1])) {\n var pair1 = this.table[namesOfKeys[index1]];\n keysArray.push(pair1.key);\n // }\n }\n return keysArray;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.values = function () {\n var valuesArray = [];\n var namesOfValues = Object.keys(this.table);\n for (var index2 = 0; index2 < namesOfValues.length; index2++) {\n // if (Object.prototype.hasOwnProperty.call(this.table, namesOfValues[index2])) {\n var pair2 = this.table[namesOfValues[index2]];\n valuesArray.push(pair2.value);\n // }\n }\n return valuesArray;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.containsKey = function (key) {\n var retutnValue = true;\n if (typeof this.getValue(key) === 'undefined') {\n retutnValue = true;\n }\n else {\n retutnValue = false;\n }\n return !retutnValue;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.clear = function () {\n this.table = {};\n this.nElements = 0;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.size = function () {\n return this.nElements;\n };\n return Dictionary;\n}()); // End of dictionary\nexport { Dictionary };\n","/**\n * `PdfString` class is used to perform string related primitive operations.\n * @private\n */\nexport var InternalEnum;\n(function (InternalEnum) {\n //Internals\n /**\n * public Enum for `ForceEncoding`.\n * @private\n */\n var ForceEncoding;\n (function (ForceEncoding) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n ForceEncoding[ForceEncoding[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Ascii`.\n * @private\n */\n ForceEncoding[ForceEncoding[\"Ascii\"] = 1] = \"Ascii\";\n /**\n * Specifies the type of `Unicode`.\n * @private\n */\n ForceEncoding[ForceEncoding[\"Unicode\"] = 2] = \"Unicode\";\n })(ForceEncoding = InternalEnum.ForceEncoding || (InternalEnum.ForceEncoding = {}));\n /**\n * public Enum for `SourceType`.\n * @private\n */\n var SourceType;\n (function (SourceType) {\n /**\n * Specifies the type of `StringValue`.\n * @private\n */\n SourceType[SourceType[\"StringValue\"] = 0] = \"StringValue\";\n /**\n * Specifies the type of `ByteBuffer`.\n * @private\n */\n SourceType[SourceType[\"ByteBuffer\"] = 1] = \"ByteBuffer\";\n })(SourceType || (SourceType = {}));\n})(InternalEnum || (InternalEnum = {}));\nvar PdfString = /** @class */ (function () {\n function PdfString(value) {\n /**\n * Value indicating whether the string was converted to hex.\n * @default false\n * @private\n */\n this.bHex = false;\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position1 = -1;\n /**\n * Internal variable to hold `cloned object`.\n * @default null\n * @private\n */\n this.clonedObject1 = null;\n /**\n * `Shows` if the data of the stream was decrypted.\n * @default false\n * @private\n */\n this.bDecrypted = false;\n /**\n * Shows if the data of the stream `was decrypted`.\n * @default false\n * @private\n */\n this.isParentDecrypted = false;\n /**\n * Gets a value indicating whether the object is `packed or not`.\n * @default false\n * @private\n */\n this.isPacked = false;\n /**\n * @hidden\n * @private\n */\n this.isFormField = false;\n /**\n * @hidden\n * @private\n */\n this.isColorSpace = false;\n /**\n * @hidden\n * @private\n */\n this.isHexString = true;\n if (typeof value === 'undefined') {\n this.bHex = false;\n }\n else {\n if (!(value.length > 0 && value[0] === '0xfeff')) {\n this.stringValue = value;\n this.data = [];\n for (var i = 0; i < value.length; ++i) {\n this.data.push(value.charCodeAt(i));\n }\n }\n }\n }\n Object.defineProperty(PdfString.prototype, \"hex\", {\n //Property\n /**\n * Gets a value indicating whether string is in `hex`.\n * @private\n */\n get: function () {\n return this.bHex;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"value\", {\n /**\n * Gets or sets string `value` of the object.\n * @private\n */\n get: function () {\n return this.stringValue;\n },\n set: function (value) {\n this.stringValue = value;\n this.data = null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"status\", {\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status1;\n },\n set: function (value) {\n this.status1 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving1;\n },\n set: function (value) {\n this.isSaving1 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index1;\n },\n set: function (value) {\n this.index1 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return this.clonedObject1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position1;\n },\n set: function (value) {\n this.position1 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"CrossTable\", {\n /**\n * Returns `PdfCrossTable` associated with the object.\n * @private\n */\n get: function () {\n return this.crossTable;\n },\n enumerable: true,\n configurable: true\n });\n //Methods\n /**\n * Converts `bytes to string using hex format` for representing string.\n * @private\n */\n PdfString.bytesToHex = function (bytes) {\n if (bytes == null) {\n return '';\n }\n var builder = '';\n return builder;\n };\n /**\n * `Saves` the object using the specified writer.\n * @private\n */\n PdfString.prototype.save = function (writer) {\n if (writer === null) {\n throw new Error('ArgumentNullException : writer');\n }\n writer.write(PdfString.stringMark[0] + this.value + PdfString.stringMark[1]);\n };\n /**\n * Creates a `copy of PdfString`.\n * @private\n */\n PdfString.prototype.clone = function (crossTable) {\n if (this.clonedObject1 !== null && this.clonedObject1.CrossTable === crossTable) {\n return this.clonedObject1;\n }\n else {\n this.clonedObject1 = null;\n }\n var newString = new PdfString(this.stringValue);\n newString.bHex = this.bHex;\n newString.crossTable = crossTable;\n newString.isColorSpace = this.isColorSpace;\n this.clonedObject1 = newString;\n return newString;\n };\n //constants = ;\n /**\n * `General markers` for string.\n * @private\n */\n PdfString.stringMark = '()';\n /**\n * `Hex markers` for string.\n * @private\n */\n PdfString.hexStringMark = '<>';\n /**\n * Format of password data.\n * @private\n */\n PdfString.hexFormatPattern = '{0:X2}';\n return PdfString;\n}());\nexport { PdfString };\n","/**\n * `PdfName` class is used to perform name (element names) related primitive operations.\n * @private\n */\nvar PdfName = /** @class */ (function () {\n function PdfName(value) {\n /**\n * `Start symbol` of the name object.\n * @default /\n * @private\n */\n this.stringStartMark = '/';\n /**\n * `Value` of the element.\n * @private\n */\n this.internalValue = '';\n /**\n * Indicates if the object is currently in `saving state or not`.\n * @default false\n * @private\n */\n this.isSaving6 = false;\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position6 = -1;\n this.internalValue = this.normalizeValue(value);\n }\n Object.defineProperty(PdfName.prototype, \"status\", {\n //property\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status6;\n },\n set: function (value) {\n this.status6 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving6;\n },\n set: function (value) {\n this.isSaving6 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index6;\n },\n set: function (value) {\n this.index6 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position6;\n },\n set: function (value) {\n this.position6 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"value\", {\n /**\n * Gets or sets the `value` of the object.\n * @private\n */\n get: function () {\n return this.internalValue;\n },\n set: function (value) {\n // if (value !== this.value) {\n var val = value;\n if (value !== null && value.length > 0) {\n // val = (value.substring(0, 1) === this.stringStartMark) ? value.substring(1) : value;\n val = value;\n this.internalValue = this.normalizeValue(val);\n }\n else {\n this.internalValue = val;\n }\n // }\n },\n enumerable: true,\n configurable: true\n });\n //public methods\n /**\n * `Saves` the name using the specified writer.\n * @private\n */\n PdfName.prototype.save = function (writer) {\n // if (writer === null) {\n // throw new Error('ArgumentNullException : writer');\n // }\n writer.write(this.toString());\n };\n /**\n * Gets `string` representation of the primitive.\n * @private\n */\n PdfName.prototype.toString = function () {\n return (this.stringStartMark + this.escapeString(this.value));\n };\n /**\n * Creates a `copy of PdfName`.\n * @private\n */\n PdfName.prototype.clone = function (crossTable) {\n var newName = new PdfName();\n newName.value = this.internalValue;\n return newName;\n };\n /**\n * Replace some characters with its `escape sequences`.\n * @private\n */\n PdfName.prototype.escapeString = function (stringValue) {\n // if (str === null) {\n // throw new Error('ArgumentNullException : str');\n // }\n // if (str === '') {\n // return str;\n // }\n var result = '';\n var len = 0;\n for (var i = 0, len_1 = stringValue.length; i < len_1; i++) {\n var ch = stringValue[i];\n var index = PdfName.delimiters.indexOf(ch);\n // switch (ch) {\n // case '\\r' :\n // result = result + '\\\\r';\n // break;\n // case '\\n' :\n // result = result + '\\n';\n // break;\n // case '(' :\n // case ')' :\n // case '\\\\' :\n // //result.Append( '\\\\' ).Append( ch );\n // result = result + ch;\n // break;\n // default :\n // result = result + ch;\n // break;\n // }\n result = result + ch;\n }\n return result;\n };\n //methiods\n /**\n * Replace a symbol with its code with the precedence of the `sharp sign`.\n * @private\n */\n PdfName.prototype.normalizeValue = function (value, c) {\n // if (typeof c === undefined) {\n // let str : string = value;\n // for (let i : number = 0; i < PdfName.replacements.length; i++) {\n // str = this.normalizeValue(str, c);\n // }\n // return str;\n // } else {\n var strFormat = '#{0:X}';\n //return value.replace(c.toString(),String.format(strFormat,c));\n return value;\n // }\n };\n /**\n * PDF `special characters`.\n * @private\n */\n PdfName.delimiters = '()<>[]{}/%}';\n /**\n * The symbols that are not allowed in PDF names and `should be replaced`.\n * @private\n */\n PdfName.replacements = [' ', '\\t', '\\n', '\\r'];\n return PdfName;\n}());\nexport { PdfName };\n","/**\n * PdfOperators.ts class for EJ2-PDF\n * Class of string PDF common operators.\n * @private\n */\nvar Operators = /** @class */ (function () {\n /**\n * Create an instance of `PdfOperator` class.\n * @private\n */\n function Operators() {\n /**\n * Specifies the value of `test`.\n * @private\n */\n this.forTest = 'test';\n this.forTest = Operators.obj;\n }\n /**\n * Specifies the value of `obj`.\n * @private\n */\n Operators.obj = 'obj';\n /**\n * Specifies the value of `endObj`.\n * @private\n */\n Operators.endObj = 'endobj';\n /**\n * Specifies the value of `R`.\n * @private\n */\n Operators.r = 'R';\n /**\n * Specifies the value of ` `.\n * @private\n */\n Operators.whiteSpace = ' ';\n /**\n * Specifies the value of `/`.\n * @private\n */\n Operators.slash = '/';\n /**\n * Specifies the value of `\\r\\n`.\n * @private\n */\n Operators.newLine = '\\r\\n';\n /**\n * Specifies the value of `stream`.\n * @private\n */\n Operators.stream = 'stream';\n /**\n * Specifies the value of `endStream`.\n * @private\n */\n Operators.endStream = 'endstream';\n /**\n * Specifies the value of `xref`.\n * @private\n */\n Operators.xref = 'xref';\n /**\n * Specifies the value of `f`.\n * @private\n */\n Operators.f = 'f';\n /**\n * Specifies the value of `n`.\n * @private\n */\n Operators.n = 'n';\n /**\n * Specifies the value of `trailer`.\n * @private\n */\n Operators.trailer = 'trailer';\n /**\n * Specifies the value of `startxref`.\n * @private\n */\n Operators.startxref = 'startxref';\n /**\n * Specifies the value of `eof`.\n * @private\n */\n Operators.eof = '%%EOF';\n /**\n * Specifies the value of `header`.\n * @private\n */\n Operators.header = '%PDF-1.5';\n /**\n * Specifies the value of `beginText`.\n * @private\n */\n Operators.beginText = 'BT';\n /**\n * Specifies the value of `endText`.\n * @private\n */\n Operators.endText = 'ET';\n /**\n * Specifies the value of `m`.\n * @private\n */\n Operators.beginPath = 'm';\n /**\n * Specifies the value of `l`.\n * @private\n */\n Operators.appendLineSegment = 'l';\n /**\n * Specifies the value of `S`.\n * @private\n */\n Operators.stroke = 'S';\n /**\n * Specifies the value of `f`.\n * @private\n */\n Operators.fill = 'f';\n /**\n * Specifies the value of `f*`.\n * @private\n */\n Operators.fillEvenOdd = 'f*';\n /**\n * Specifies the value of `B`.\n * @private\n */\n Operators.fillStroke = 'B';\n /**\n * Specifies the value of `B*`.\n * @private\n */\n Operators.fillStrokeEvenOdd = 'B*';\n /**\n * Specifies the value of `c`.\n * @private\n */\n Operators.appendbeziercurve = 'c';\n /**\n * Specifies the value of `re`.\n * @private\n */\n Operators.appendRectangle = 're';\n /**\n * Specifies the value of `q`.\n * @private\n */\n Operators.saveState = 'q';\n /**\n * Specifies the value of `Q`.\n * @private\n */\n Operators.restoreState = 'Q';\n /**\n * Specifies the value of `Do`.\n * @private\n */\n Operators.paintXObject = 'Do';\n /**\n * Specifies the value of `cm`.\n * @private\n */\n Operators.modifyCtm = 'cm';\n /**\n * Specifies the value of `Tm`.\n * @private\n */\n Operators.modifyTM = 'Tm';\n /**\n * Specifies the value of `w`.\n * @private\n */\n Operators.setLineWidth = 'w';\n /**\n * Specifies the value of `J`.\n * @private\n */\n Operators.setLineCapStyle = 'J';\n /**\n * Specifies the value of `j`.\n * @private\n */\n Operators.setLineJoinStyle = 'j';\n /**\n * Specifies the value of `d`.\n * @private\n */\n Operators.setDashPattern = 'd';\n /**\n * Specifies the value of `i`.\n * @private\n */\n Operators.setFlatnessTolerance = 'i';\n /**\n * Specifies the value of `h`.\n * @private\n */\n Operators.closePath = 'h';\n /**\n * Specifies the value of `s`.\n * @private\n */\n Operators.closeStrokePath = 's';\n /**\n * Specifies the value of `b`.\n * @private\n */\n Operators.closeFillStrokePath = 'b';\n /**\n * Specifies the value of `setCharacterSpace`.\n * @private\n */\n Operators.setCharacterSpace = 'Tc';\n /**\n * Specifies the value of `setWordSpace`.\n * @private\n */\n Operators.setWordSpace = 'Tw';\n /**\n * Specifies the value of `setHorizontalScaling`.\n * @private\n */\n Operators.setHorizontalScaling = 'Tz';\n /**\n * Specifies the value of `setTextLeading`.\n * @private\n */\n Operators.setTextLeading = 'TL';\n /**\n * Specifies the value of `setFont`.\n * @private\n */\n Operators.setFont = 'Tf';\n /**\n * Specifies the value of `setRenderingMode`.\n * @private\n */\n Operators.setRenderingMode = 'Tr';\n /**\n * Specifies the value of `setTextRise`.\n * @private\n */\n Operators.setTextRise = 'Ts';\n /**\n * Specifies the value of `setTextScaling`.\n * @private\n */\n Operators.setTextScaling = 'Tz';\n /**\n * Specifies the value of `setCoords`.\n * @private\n */\n Operators.setCoords = 'Td';\n /**\n * Specifies the value of `goToNextLine`.\n * @private\n */\n Operators.goToNextLine = 'T*';\n /**\n * Specifies the value of `setText`.\n * @private\n */\n Operators.setText = 'Tj';\n /**\n * Specifies the value of `setTextWithFormatting`.\n * @private\n */\n Operators.setTextWithFormatting = 'TJ';\n /**\n * Specifies the value of `setTextOnNewLine`.\n * @private\n */\n Operators.setTextOnNewLine = '\\'';\n /**\n * Specifies the value of `selectcolorspaceforstroking`.\n * @private\n */\n Operators.selectcolorspaceforstroking = 'CS';\n /**\n * Specifies the value of `selectcolorspacefornonstroking`.\n * @private\n */\n Operators.selectcolorspacefornonstroking = 'cs';\n /**\n * Specifies the value of `setrbgcolorforstroking`.\n * @private\n */\n Operators.setrbgcolorforstroking = 'RG';\n /**\n * Specifies the value of `setrbgcolorfornonstroking`.\n * @private\n */\n Operators.setrbgcolorfornonstroking = 'rg';\n /**\n * Specifies the value of `K`.\n * @private\n */\n Operators.setcmykcolorforstroking = 'K';\n /**\n * Specifies the value of `k`.\n * @private\n */\n Operators.setcmykcolorfornonstroking = 'k';\n /**\n * Specifies the value of `G`.\n * @private\n */\n Operators.setgraycolorforstroking = 'G';\n /**\n * Specifies the value of `g`.\n * @private\n */\n Operators.setgraycolorfornonstroking = 'g';\n /**\n * Specifies the value of `W`.\n * @private\n */\n Operators.clipPath = 'W';\n /**\n * Specifies the value of `clipPathEvenOdd`.\n * @private\n */\n Operators.clipPathEvenOdd = 'W*';\n /**\n * Specifies the value of `n`.\n * @private\n */\n Operators.endPath = 'n';\n /**\n * Specifies the value of `setGraphicsState`.\n * @private\n */\n Operators.setGraphicsState = 'gs';\n /**\n * Specifies the value of `%`.\n * @private\n */\n Operators.comment = '%';\n /**\n * Specifies the value of `*`.\n * @private\n */\n Operators.evenOdd = '*';\n /**\n * Specifies the value of `M`.\n * @private\n */\n Operators.setMiterLimit = 'M';\n return Operators;\n}());\nexport { Operators };\n","/**\n * dictionaryProperties.ts class for EJ2-PDF\n * PDF dictionary properties.\n * @private\n */\nvar DictionaryProperties = /** @class */ (function () {\n /**\n * Initialize an instance for `PdfDictionaryProperties` class.\n * @private\n */\n function DictionaryProperties() {\n /**\n * Specifies the value of `Pages`.\n * @private\n */\n this.pages = 'Pages';\n /**\n * Specifies the value of `Kids`.\n * @private\n */\n this.kids = 'Kids';\n /**\n * Specifies the value of `Count`.\n * @private\n */\n this.count = 'Count';\n /**\n * Specifies the value of `Resources`.\n * @private\n */\n this.resources = 'Resources';\n /**\n * Specifies the value of `Type`.\n * @private\n */\n this.type = 'Type';\n /**\n * Specifies the value of `Size`.\n * @private\n */\n this.size = 'Size';\n /**\n * Specifies the value of `MediaBox`.\n * @private\n */\n this.mediaBox = 'MediaBox';\n /**\n * Specifies the value of `Parent`.\n * @private\n */\n this.parent = 'Parent';\n /**\n * Specifies the value of `Root`.\n * @private\n */\n this.root = 'Root';\n /**\n * Specifies the value of `DecodeParms`.\n * @private\n */\n this.decodeParms = 'DecodeParms';\n /**\n * Specifies the value of `Filter`.\n * @private\n */\n this.filter = 'Filter';\n /**\n * Specifies the value of `Font`.\n * @private\n */\n this.font = 'Font';\n /**\n * Specifies the value of `Type1`.\n * @private\n */\n this.type1 = 'Type1';\n /**\n * Specifies the value of `BaseFont`.\n * @private\n */\n this.baseFont = 'BaseFont';\n /**\n * Specifies the value of `Encoding`.\n * @private\n */\n this.encoding = 'Encoding';\n /**\n * Specifies the value of `Subtype`.\n * @private\n */\n this.subtype = 'Subtype';\n /**\n * Specifies the value of `Contents`.\n * @private\n */\n this.contents = 'Contents';\n /**\n * Specifies the value of `ProcSet`.\n * @private\n */\n this.procset = 'ProcSet';\n /**\n * Specifies the value of `ColorSpace`.\n * @private\n */\n this.colorSpace = 'ColorSpace';\n /**\n * Specifies the value of `ExtGState`.\n * @private\n */\n this.extGState = 'ExtGState';\n /**\n * Specifies the value of `Pattern`.\n * @private\n */\n this.pattern = 'Pattern';\n /**\n * Specifies the value of `XObject`.\n * @private\n */\n this.xObject = 'XObject';\n /**\n * Specifies the value of `Length`.\n * @private\n */\n this.length = 'Length';\n /**\n * Specifies the value of `Width`.\n * @private\n */\n this.width = 'Width';\n /**\n * Specifies the value of `Height`.\n * @private\n */\n this.height = 'Height';\n /**\n * Specifies the value of `BitsPerComponent`.\n * @private\n */\n this.bitsPerComponent = 'BitsPerComponent';\n /**\n * Specifies the value of `Image`.\n * @private\n */\n this.image = 'Image';\n /**\n * Specifies the value of `dctdecode`.\n * @private\n */\n this.dctdecode = 'DCTDecode';\n /**\n * Specifies the value of `Columns`.\n * @private\n */\n this.columns = 'Columns';\n /**\n * Specifies the value of `BlackIs1`.\n * @private\n */\n this.blackIs1 = 'BlackIs1';\n /**\n * Specifies the value of `K`.\n * @private\n */\n this.k = 'K';\n /**\n * Specifies the value of `S`.\n * @private\n */\n this.s = 'S';\n /**\n * Specifies the value of `Predictor`.\n * @private\n */\n this.predictor = 'Predictor';\n /**\n * Specifies the value of `DeviceRGB`.\n * @private\n */\n this.deviceRgb = 'DeviceRGB';\n /**\n * Specifies the value of `Next`.\n * @private\n */\n this.next = 'Next';\n /**\n * Specifies the value of `Action`.\n * @private\n */\n this.action = 'Action';\n /**\n * Specifies the value of `Link`.\n * @private\n */\n this.link = 'Link';\n /**\n *\n * Specifies the value of `A`.\n * @private\n */\n this.a = 'A';\n /**\n * Specifies the value of `Annot`.\n * @private\n */\n this.annot = 'Annot';\n /**\n * Specifies the value of `P`.\n * @private\n */\n this.p = 'P';\n /**\n * Specifies the value of `C`.\n * @private\n */\n this.c = 'C';\n /**\n * Specifies the value of `Rect`.\n * @private\n */\n this.rect = 'Rect';\n /**\n * Specifies the value of `URI`.\n * @private\n */\n this.uri = 'URI';\n /**\n * Specifies the value of `Annots`.\n * @private\n */\n this.annots = 'Annots';\n /**\n * Specifies the value of `ca`.\n * @private\n */\n this.ca = 'ca';\n /**\n * Specifies the value of `CA`.\n * @private\n */\n this.CA = 'CA';\n /**\n * Specifies the value of `XYZ`.\n * @private\n */\n this.xyz = 'XYZ';\n /**\n * Specifies the value of `Fit`.\n * @private\n */\n this.fit = 'Fit';\n /**\n * Specifies the value of `Dest`.\n * @private\n */\n this.dest = 'Dest';\n /**\n * Specifies the value of `BM`.\n * @private\n */\n this.BM = 'BM';\n /**\n * Specifies the value of `flatedecode`.\n * @private\n */\n this.flatedecode = 'FlateDecode';\n /**\n * Specifies the value of `Rotate`.\n * @private\n */\n this.rotate = 'Rotate';\n /**\n * Specifies the value of 'bBox'.\n * @private\n */\n this.bBox = 'BBox';\n /**\n * Specifies the value of 'form'.\n * @private\n */\n this.form = 'Form';\n //\n }\n return DictionaryProperties;\n}());\nexport { DictionaryProperties };\n","import { Dictionary } from './../collections/dictionary';\nimport { PdfName } from './pdf-name';\nimport { Operators } from './../input-output/pdf-operators';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\n/**\n * `PdfDictionary` class is used to perform primitive operations.\n * @private\n */\nvar PdfDictionary = /** @class */ (function () {\n function PdfDictionary(dictionary) {\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position7 = -1;\n /**\n * The `IPdfSavable` with the specified key.\n * @private\n */\n this.primitiveItems = new Dictionary();\n /**\n * `Start marker` for dictionary.\n * @private\n */\n this.prefix = '<<';\n /**\n * `End marker` for dictionary.\n * @private\n */\n this.suffix = '>>';\n /**\n * @hidden\n * @private\n */\n this.resources = [];\n /**\n * Internal variable to hold `cloned object`.\n * @default null\n * @private\n */\n this.object = null;\n /**\n * Flag for PDF file formar 1.5 is dictionary `archiving` needed.\n * @default true\n * @private\n */\n this.archive = true;\n if (typeof dictionary === 'undefined') {\n this.primitiveItems = new Dictionary();\n this.encrypt = true;\n this.dictionaryProperties = new DictionaryProperties();\n }\n else {\n this.primitiveItems = new Dictionary();\n var keys = dictionary.items.keys();\n var values = dictionary.items.values();\n for (var index = 0; index < dictionary.items.size(); index++) {\n this.primitiveItems.setValue(keys[index], values[index]);\n }\n this.status = dictionary.status;\n this.freezeChanges(this);\n this.encrypt = true;\n this.dictionaryProperties = new DictionaryProperties();\n }\n }\n Object.defineProperty(PdfDictionary.prototype, \"items\", {\n //Properties\n /**\n * Gets or sets the `IPdfSavable` with the specified key.\n * @private\n */\n get: function () {\n return this.primitiveItems;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"status\", {\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status7;\n },\n set: function (value) {\n this.status7 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving7;\n },\n set: function (value) {\n this.isSaving7 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index7;\n },\n set: function (value) {\n this.index7 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return this.object;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position7;\n },\n set: function (value) {\n this.position7 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"Count\", {\n /**\n * Gets the `count`.\n * @private\n */\n get: function () {\n return this.primitiveItems.size();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"Dictionary\", {\n /**\n * Collection of `items` in the object.\n * @private\n */\n get: function () {\n return this;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Get flag if need to `archive` dictionary.\n * @private\n */\n PdfDictionary.prototype.getArchive = function () {\n return this.archive;\n };\n /**\n * Set flag if need to `archive` dictionary.\n * @private\n */\n PdfDictionary.prototype.setArchive = function (value) {\n this.archive = value;\n };\n /**\n * Sets flag if `encryption` is needed.\n * @private\n */\n PdfDictionary.prototype.setEncrypt = function (value) {\n this.encrypt = value;\n this.modify();\n };\n /**\n * Gets flag if `encryption` is needed.\n * @private\n */\n PdfDictionary.prototype.getEncrypt = function () {\n return this.encrypt;\n };\n /**\n * `Freezes` the changes.\n * @private\n */\n PdfDictionary.prototype.freezeChanges = function (freezer) {\n this.bChanged = false;\n };\n /**\n * Creates a `copy of PdfDictionary`.\n * @private\n */\n PdfDictionary.prototype.clone = function (crossTable) {\n //Need to add more codings\n var newDict = new PdfDictionary();\n return newDict;\n };\n /**\n * `Mark` this instance modified.\n * @private\n */\n PdfDictionary.prototype.modify = function () {\n this.bChanged = true;\n };\n /**\n * `Removes` the specified key.\n * @private\n */\n PdfDictionary.prototype.remove = function (key) {\n if (typeof key !== 'string') {\n this.primitiveItems.remove(key.value);\n this.modify();\n }\n else {\n this.remove(new PdfName(key));\n }\n };\n /**\n * `Determines` whether the dictionary contains the key.\n * @private\n */\n PdfDictionary.prototype.containsKey = function (key) {\n var returnValue = false;\n returnValue = this.primitiveItems.containsKey(key.toString());\n return returnValue;\n };\n /**\n * Raises event `BeginSave`.\n * @private\n */\n PdfDictionary.prototype.onBeginSave = function () {\n this.beginSave.sender.beginSave();\n };\n /**\n * Raises event 'BeginSave'.\n * @private\n */\n PdfDictionary.prototype.onTemplateBeginSave = function () {\n this.pageBeginDrawTemplate.sender.pageBeginSave();\n };\n /**\n * Raises event `BeginSave`.\n * @private\n */\n PdfDictionary.prototype.onBeginAnnotationSave = function () {\n this.annotationBeginSave.sender.beginSave();\n };\n /**\n * Raises event `BeginSave`.\n * @private\n */\n PdfDictionary.prototype.onSectionBeginSave = function (writer) {\n var saveEvent = this.sectionBeginSave;\n saveEvent.sender.beginSave(saveEvent.state, writer);\n };\n PdfDictionary.prototype.save = function (writer, bRaiseEvent) {\n if (typeof bRaiseEvent === 'undefined') {\n this.save(writer, true);\n }\n else {\n writer.write(this.prefix);\n if (typeof this.beginSave !== 'undefined') {\n this.onBeginSave();\n }\n if (typeof this.annotationBeginSave !== 'undefined') {\n this.onBeginAnnotationSave();\n }\n if (typeof this.sectionBeginSave !== 'undefined') {\n this.onSectionBeginSave(writer);\n }\n if (typeof this.pageBeginDrawTemplate !== 'undefined') {\n this.onTemplateBeginSave();\n }\n // }\n if (this.Count > 0) {\n this.saveItems(writer);\n }\n writer.write(this.suffix);\n writer.write(Operators.newLine);\n }\n };\n /**\n * `Save dictionary items`.\n * @private\n */\n PdfDictionary.prototype.saveItems = function (writer) {\n writer.write(Operators.newLine);\n var keys = this.primitiveItems.keys();\n var values = this.primitiveItems.values();\n for (var index = 0; index < keys.length; index++) {\n var key = keys[index];\n var name_1 = new PdfName(key);\n name_1.save(writer);\n writer.write(Operators.whiteSpace);\n var resources = values[index];\n resources.save(writer);\n writer.write(Operators.newLine);\n }\n };\n return PdfDictionary;\n}());\nexport { PdfDictionary };\nvar SaveSectionCollectionEventHandler = /** @class */ (function () {\n /**\n * New instance for `save section collection event handler` class.\n * @private\n */\n function SaveSectionCollectionEventHandler(sender) {\n this.sender = sender;\n }\n return SaveSectionCollectionEventHandler;\n}());\nexport { SaveSectionCollectionEventHandler };\nvar SaveAnnotationEventHandler = /** @class */ (function () {\n /**\n * New instance for `save annotation event handler` class.\n * @private\n */\n function SaveAnnotationEventHandler(sender) {\n this.sender = sender;\n }\n return SaveAnnotationEventHandler;\n}());\nexport { SaveAnnotationEventHandler };\nvar SaveSectionEventHandler = /** @class */ (function () {\n // constructors\n /**\n * New instance for `save section event handler` class.\n * @private\n */\n function SaveSectionEventHandler(sender, state) {\n this.sender = sender;\n this.state = state;\n }\n return SaveSectionEventHandler;\n}());\nexport { SaveSectionEventHandler };\n/**\n * SaveTemplateEventHandler class used to store information about template elements.\n * @private\n * @hidden\n */\nvar SaveTemplateEventHandler = /** @class */ (function () {\n /**\n * New instance for save section collection event handler class.\n * @public\n */\n function SaveTemplateEventHandler(sender) {\n this.sender = sender;\n }\n return SaveTemplateEventHandler;\n}());\nexport { SaveTemplateEventHandler };\n","/**\n * `PdfNumber` class is used to perform number related primitive operations.\n * @private\n */\nvar PdfNumber = /** @class */ (function () {\n /**\n * Initializes a new instance of the `PdfNumber` class.\n * @private\n */\n function PdfNumber(value) {\n /**\n * Sotres the `position`.\n * @default -1\n * @private\n */\n this.position5 = -1;\n this.value = value;\n }\n Object.defineProperty(PdfNumber.prototype, \"intValue\", {\n /**\n * Gets or sets the `integer` value.\n * @private\n */\n get: function () {\n return this.value;\n },\n set: function (value) {\n this.value = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"isInteger\", {\n /**\n * Gets or sets a value indicating whether this instance `is integer`.\n * @private\n */\n get: function () {\n return this.integer;\n },\n set: function (value) {\n this.integer = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"status\", {\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status5;\n },\n set: function (value) {\n this.status5 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving5;\n },\n set: function (value) {\n this.isSaving5 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index5;\n },\n set: function (value) {\n this.index5 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position5;\n },\n set: function (value) {\n this.position5 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n var rValue = null;\n return rValue;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Saves the object`.\n * @private\n */\n PdfNumber.prototype.save = function (writer) {\n writer.write(this.intValue.toString()); //tostring(CultureInfo.InletiantCulture)\n };\n /**\n * Creates a `copy of PdfNumber`.\n * @private\n */\n PdfNumber.prototype.clone = function (crossTable) {\n var newNumber = new PdfNumber(this.value);\n return newNumber;\n };\n /**\n * Converts a `float value to a string` using Adobe PDF rules.\n * @private\n */\n PdfNumber.floatToString = function (number) {\n // let tempString1 : string = number.toString();\n // let tempString2 : string = tempString1.indexOf('.') != -1 ? tempString1.substring(0, tempString1.indexOf('.')) : tempString1;\n var returnString = number.toFixed(2);\n if (returnString === '0.00') {\n returnString = '.00';\n }\n // let prefixLength : number = (22 - tempString2.length) >= 0 ? (22 - tempString2.length) : 0;\n // for (let index : number = 0; index < prefixLength; index++) {\n // returnString += '0';\n // }\n // returnString += tempString2 + '.00';\n // returnString += (tempString3.length > 6) ? tempString3.substring(0,6) : tempString3;\n // let suffixLength : number = (6 - tempString3.length) >= 0 ? (6 - tempString3.length) : 0;\n // for (let index : number = 0; index < suffixLength; index++) {\n // returnString += '0';\n // }\n return returnString;\n };\n /**\n * Determines the `minimum of the three values`.\n * @private\n */\n PdfNumber.min = function (x, y, z) {\n var r = Math.min(x, y);\n return Math.min(z, r);\n };\n return PdfNumber;\n}());\nexport { PdfNumber };\n","import { PdfNumber } from './pdf-number';\nimport { Operators } from './../input-output/pdf-operators';\n/**\n * `PdfArray` class is used to perform array related primitive operations.\n * @private\n */\nvar PdfArray = /** @class */ (function () {\n function PdfArray(array) {\n //Fields\n /**\n * `startMark` - '['\n * @private\n */\n this.startMark = '[';\n /**\n * `endMark` - ']'.\n * @private\n */\n this.endMark = ']';\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position9 = -1;\n /**\n * Internal variable to hold `cloned object`.\n * @default null\n * @private\n */\n this.clonedObject9 = null;\n if (typeof array === 'undefined') {\n this.internalElements = [];\n }\n else {\n if (typeof array !== 'undefined' && !(array instanceof PdfArray)) {\n var tempNumberArray = array;\n for (var index = 0; index < tempNumberArray.length; index++) {\n var pdfNumber = new PdfNumber(tempNumberArray[index]);\n this.add(pdfNumber);\n }\n // } else if (typeof array !== 'undefined' && (array instanceof PdfArray)) {\n }\n else {\n var tempArray = array;\n // if (tempArray.Elements.length > 0) {\n this.internalElements = [];\n for (var index = 0; index < tempArray.elements.length; index++) {\n this.internalElements.push(tempArray.elements[index]);\n }\n // }\n }\n }\n }\n //property\n /**\n * Gets the `IPdfSavable` at the specified index.\n * @private\n */\n PdfArray.prototype.items = function (index) {\n // if (index < 0 || index >= this.Count) {\n // throw new Error('ArgumentOutOfRangeException : index, The index can\"t be less then zero or greater then Count.');\n // }\n return this.internalElements[index];\n };\n Object.defineProperty(PdfArray.prototype, \"count\", {\n /**\n * Gets the `count`.\n * @private\n */\n get: function () {\n return this.internalElements.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"status\", {\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status9;\n },\n set: function (value) {\n this.status9 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving9;\n },\n set: function (value) {\n this.isSaving9 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return this.clonedObject9;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position9;\n },\n set: function (value) {\n this.position9 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index9;\n },\n set: function (value) {\n this.index9 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"CrossTable\", {\n /**\n * Returns `PdfCrossTable` associated with the object.\n * @private\n */\n get: function () {\n return this.pdfCrossTable;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"elements\", {\n /**\n * Gets the `elements` of the Pdf Array.\n * @private\n */\n get: function () {\n return this.internalElements;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Adds` the specified element to the PDF array.\n * @private\n */\n PdfArray.prototype.add = function (element) {\n // if (element === null) {\n // throw new Error('ArgumentNullException : obj');\n // }\n if (typeof this.internalElements === 'undefined') {\n this.internalElements = [];\n }\n this.internalElements.push(element);\n this.markedChange();\n };\n /**\n * `Marks` the object changed.\n * @private\n */\n PdfArray.prototype.markedChange = function () {\n this.bChanged = true;\n };\n /**\n * `Determines` whether the specified element is within the array.\n * @private\n */\n PdfArray.prototype.contains = function (element) {\n var returnValue = false;\n for (var index = 0; index < this.internalElements.length; index++) {\n var tempElement = this.internalElements[index];\n var inputElement = element;\n if (tempElement != null && typeof tempElement !== 'undefined' && inputElement != null && typeof inputElement !== 'undefined') {\n if (tempElement.value === inputElement.value) {\n return true;\n }\n }\n // if (this.internalElements[index] === element) {\n // returnValue = true;\n // }\n }\n return returnValue;\n };\n /**\n * Returns the `primitive object` of input index.\n * @private\n */\n PdfArray.prototype.getItems = function (index) {\n // if (index < 0 || index >= this.Count) {\n // throw new Error('ArgumentOutOfRangeException : index , The index can\"t be less then zero or greater then Count.');\n // }\n return this.internalElements[index];\n };\n /**\n * `Saves` the object using the specified writer.\n * @private\n */\n PdfArray.prototype.save = function (writer) {\n // if (writer === null) {\n // throw new Error('ArgumentNullException : writer');\n // }\n writer.write(this.startMark);\n for (var i = 0, len = this.count; i < len; i++) {\n this.getItems(i).save(writer);\n if (i + 1 !== len) {\n writer.write(Operators.whiteSpace);\n }\n }\n writer.write(this.endMark);\n };\n /**\n * Creates a `copy of PdfArray`.\n * @private\n */\n PdfArray.prototype.clone = function (crossTable) {\n // if (this.clonedObject9 !== null && this.clonedObject9.CrossTable === crossTable) {\n // return this.clonedObject9;\n // } else {\n this.clonedObject9 = null;\n // Else clone the object.\n var newArray = new PdfArray();\n for (var index = 0; index < this.internalElements.length; index++) {\n var obj = this.internalElements[index];\n newArray.add(obj.clone(crossTable));\n }\n newArray.pdfCrossTable = crossTable;\n this.clonedObject9 = newArray;\n return newArray;\n };\n /**\n * Creates filled PDF array `from the rectangle`.\n * @private\n */\n PdfArray.fromRectangle = function (bounds) {\n var values = [bounds.x, bounds.y, bounds.width, bounds.height];\n var array = new PdfArray(values);\n return array;\n };\n // /**\n // * Creates the rectangle from filled PDF array.\n // * @private\n // */\n // public ToRectangle() : RectangleF {\n // if (this.Count < 4) {\n // throw Error('InvalidOperationException-Can not convert to rectangle.');\n // }\n // let x1 : number;\n // let x2 : number;\n // let y1 : number;\n // let y2 : number;\n // let num : PdfNumber = this.getItems(0) as PdfNumber;\n // x1 = num.IntValue;\n // num = this.getItems(1) as PdfNumber;\n // y1 = num.IntValue;\n // num = this.getItems(2) as PdfNumber;\n // x2 = num.IntValue;\n // num = this.getItems(3) as PdfNumber;\n // y2 = num.IntValue;\n // let x : number = Math.min(x1, x2);\n // let y : number = Math.min(y1, y2);\n // let width : number = Math.abs(x1 - x2);\n // let height : number = Math.abs(y1 - y2);\n // let rect : RectangleF = new RectangleF(new PointF(x, y), new SizeF(width, height));\n // return rect;\n // }\n /**\n * `Inserts` the element into the array.\n * @private\n */\n PdfArray.prototype.insert = function (index, element) {\n if (index < this.internalElements.length && index > 0) {\n var tempElements = [];\n for (var i = 0; i < index; i++) {\n tempElements.push(this.internalElements[i]);\n }\n tempElements.push(element);\n for (var i = index; i < this.internalElements.length; i++) {\n tempElements.push(this.internalElements[i]);\n }\n this.internalElements = tempElements;\n }\n else {\n this.internalElements.push(element);\n }\n this.markChanged();\n };\n /**\n * `Checks whether array contains the element`.\n * @private\n */\n PdfArray.prototype.indexOf = function (element) {\n return this.internalElements.indexOf(element);\n };\n /**\n * `Removes` element from the array.\n * @private\n */\n PdfArray.prototype.remove = function (element) {\n // if (element === null) {\n // throw new Error('ArgumentNullException : element');\n // }\n var index = this.internalElements.indexOf(element);\n // if (index >= 0 && index < this.internalElements.length) {\n this.internalElements[index] = null;\n // }\n this.markChanged();\n };\n /**\n * `Remove` the element from the array by its index.\n * @private\n */\n PdfArray.prototype.removeAt = function (index) {\n // this.internalElements.RemoveAt(index);\n if (this.internalElements.length > index) {\n var tempArray = [];\n for (var i = 0; i < index; i++) {\n tempArray.push(this.internalElements[i]);\n }\n for (var i = index + 1; i < this.internalElements.length; i++) {\n tempArray.push(this.internalElements[i]);\n }\n this.internalElements = tempArray;\n }\n this.markChanged();\n };\n /**\n * `Clear` the array.\n * @private\n */\n PdfArray.prototype.clear = function () {\n this.internalElements = [];\n this.markChanged();\n };\n /**\n * `Marks` the object changed.\n * @private\n */\n PdfArray.prototype.markChanged = function () {\n this.bChanged = true;\n };\n return PdfArray;\n}());\nexport { PdfArray };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfDictionary } from './pdf-dictionary';\nimport { PdfNumber } from './pdf-number';\nimport { Operators } from './../input-output/pdf-operators';\nimport { PdfName } from './pdf-name';\nimport { PdfArray } from './pdf-array';\nimport { PdfReferenceHolder } from './pdf-reference';\nimport { CompressedStreamWriter } from '@syncfusion/ej2-compression';\n/**\n * `PdfStream` class is used to perform stream related primitive operations.\n * @private\n */\nvar PdfStream = /** @class */ (function (_super) {\n __extends(PdfStream, _super);\n function PdfStream(dictionary, data) {\n var _this = _super.call(this, dictionary) || this;\n //Constants\n /**\n * @hidden\n * @private\n */\n _this.dicPrefix = 'stream';\n /**\n * @hidden\n * @private\n */\n _this.dicSuffix = 'endstream';\n /**\n * Internal variable to hold `cloned object`.\n * @private\n */\n _this.clonedObject2 = null;\n /**\n * @hidden\n * @private\n */\n _this.bCompress = true;\n /**\n * @hidden\n * @private\n */\n _this.isImageStream = false;\n if (typeof dictionary !== 'undefined' || typeof data !== 'undefined') {\n _this.dataStream2 = [];\n _this.dataStream2 = data;\n _this.bCompress2 = false;\n }\n else {\n _this.dataStream2 = [];\n _this.bCompress2 = true;\n //Pending\n }\n return _this;\n }\n Object.defineProperty(PdfStream.prototype, \"internalStream\", {\n /**\n * Gets the `internal` stream.\n * @private\n */\n get: function () {\n return this.dataStream2;\n },\n set: function (value) {\n this.dataStream2 = [];\n this.dataStream2 = value;\n this.modify();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStream.prototype, \"isImage\", {\n /**\n * Gets or sets 'is image' flag.\n * @private\n */\n get: function () {\n return this.isImageStream;\n },\n set: function (value) {\n this.isImageStream = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStream.prototype, \"compress\", {\n /**\n * Gets or sets `compression` flag.\n * @private\n */\n get: function () {\n return this.bCompress;\n },\n set: function (value) {\n this.bCompress = value;\n this.modify();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStream.prototype, \"data\", {\n /**\n * Gets or sets the `data`.\n * @private\n */\n get: function () {\n return this.dataStream2;\n },\n set: function (value) {\n this.dataStream2 = [];\n this.dataStream2 = value;\n this.modify();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Clear` the internal stream.\n * @private\n */\n PdfStream.prototype.clearStream = function () {\n this.internalStream = [];\n this.remove(this.dictionaryProperties.filter);\n this.bCompress = true;\n this.modify();\n };\n /**\n * `Writes` the specified string.\n * @private\n */\n PdfStream.prototype.write = function (text) {\n if (text == null) {\n throw new Error('ArgumentNullException:text');\n }\n if (text.length <= 0) {\n throw new Error('ArgumentException: Can not write an empty string, text');\n }\n this.dataStream2.push(text);\n this.modify();\n };\n /**\n * `Compresses the content` if it's required.\n * @private\n */\n PdfStream.prototype.compressContent = function (data, writer) {\n if (this.bCompress) {\n var sw = new CompressedStreamWriter();\n // data = 'Hello World!!!';\n sw.write(data, 0, data.length);\n sw.close();\n data = sw.getCompressedString;\n this.addFilter(this.dictionaryProperties.flatedecode);\n }\n return data;\n };\n /**\n * `Adds a filter` to the filter array.\n * @private\n */\n PdfStream.prototype.addFilter = function (filterName) {\n var obj = this.items.getValue(this.dictionaryProperties.filter);\n if (obj instanceof PdfReferenceHolder) {\n var rh = obj;\n obj = rh.object;\n }\n var array = obj;\n var name = obj;\n if (name != null) {\n array = new PdfArray();\n array.insert(0, name);\n this.items.setValue(this.dictionaryProperties.filter, array);\n }\n name = new PdfName(filterName);\n if (array == null) {\n this.items.setValue(this.dictionaryProperties.filter, name);\n }\n else {\n array.insert(0, name);\n }\n };\n /**\n * `Saves` the object using the specified writer.\n * @private\n */\n PdfStream.prototype.save = function (writer) {\n var data = '';\n for (var i = 0; i < this.data.length; i++) {\n data = data + this.data[i];\n }\n if (data.length > 1 && !this.isImage) {\n data = 'q\\r\\n' + data + 'Q\\r\\n';\n }\n data = this.compressContent(data, writer);\n var length = data.length;\n this.items.setValue(this.dictionaryProperties.length, new PdfNumber(length));\n _super.prototype.save.call(this, writer, false);\n writer.write(this.dicPrefix);\n writer.write(Operators.newLine);\n if (data.length > 0) {\n writer.write(data);\n }\n writer.write(Operators.newLine);\n writer.write(this.dicSuffix);\n writer.write(Operators.newLine);\n };\n /**\n * Converts `bytes to string`.\n * @private\n */\n PdfStream.bytesToString = function (byteArray) {\n var output = '';\n for (var i = 0; i < byteArray.length; i++) {\n output = output + String.fromCharCode(byteArray[i]);\n }\n return output;\n };\n return PdfStream;\n}(PdfDictionary));\nexport { PdfStream };\n","/**\n * public Enum for `PdfHorizontalAlignment`.\n * @private\n */\nexport var PdfHorizontalAlignment;\n(function (PdfHorizontalAlignment) {\n /**\n * Specifies the type of `Left`.\n * @private\n */\n PdfHorizontalAlignment[PdfHorizontalAlignment[\"Left\"] = 0] = \"Left\";\n /**\n * Specifies the type of `Center`.\n * @private\n */\n PdfHorizontalAlignment[PdfHorizontalAlignment[\"Center\"] = 1] = \"Center\";\n /**\n * Specifies the type of `Right`.\n * @private\n */\n PdfHorizontalAlignment[PdfHorizontalAlignment[\"Right\"] = 2] = \"Right\";\n})(PdfHorizontalAlignment || (PdfHorizontalAlignment = {}));\n/**\n * public Enum for `PdfVerticalAlignment`.\n * @private\n */\nexport var PdfVerticalAlignment;\n(function (PdfVerticalAlignment) {\n /**\n * Specifies the type of `Top`.\n * @private\n */\n PdfVerticalAlignment[PdfVerticalAlignment[\"Top\"] = 0] = \"Top\";\n /**\n * Specifies the type of `Middle`.\n * @private\n */\n PdfVerticalAlignment[PdfVerticalAlignment[\"Middle\"] = 1] = \"Middle\";\n /**\n * Specifies the type of `Bottom`.\n * @private\n */\n PdfVerticalAlignment[PdfVerticalAlignment[\"Bottom\"] = 2] = \"Bottom\";\n})(PdfVerticalAlignment || (PdfVerticalAlignment = {}));\n/**\n * public Enum for `public`.\n * @private\n */\nexport var PdfTextAlignment;\n(function (PdfTextAlignment) {\n /**\n * Specifies the type of `Left`.\n * @private\n */\n PdfTextAlignment[PdfTextAlignment[\"Left\"] = 0] = \"Left\";\n /**\n * Specifies the type of `Center`.\n * @private\n */\n PdfTextAlignment[PdfTextAlignment[\"Center\"] = 1] = \"Center\";\n /**\n * Specifies the type of `Right`.\n * @private\n */\n PdfTextAlignment[PdfTextAlignment[\"Right\"] = 2] = \"Right\";\n /**\n * Specifies the type of `Justify`.\n * @private\n */\n PdfTextAlignment[PdfTextAlignment[\"Justify\"] = 3] = \"Justify\";\n})(PdfTextAlignment || (PdfTextAlignment = {}));\n/**\n * public Enum for `TextRenderingMode`.\n * @private\n */\nexport var TextRenderingMode;\n(function (TextRenderingMode) {\n /**\n * Specifies the type of `Fill`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"Fill\"] = 0] = \"Fill\";\n /**\n * Specifies the type of `Stroke`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"Stroke\"] = 1] = \"Stroke\";\n /**\n * Specifies the type of `FillStroke`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"FillStroke\"] = 2] = \"FillStroke\";\n /**\n * Specifies the type of `None`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"None\"] = 3] = \"None\";\n /**\n * Specifies the type of `ClipFlag`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"ClipFlag\"] = 4] = \"ClipFlag\";\n /**\n * Specifies the type of `ClipFill`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"ClipFill\"] = 4] = \"ClipFill\";\n /**\n * Specifies the type of `ClipStroke`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"ClipStroke\"] = 5] = \"ClipStroke\";\n /**\n * Specifies the type of `ClipFillStroke`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"ClipFillStroke\"] = 6] = \"ClipFillStroke\";\n /**\n * Specifies the type of `Clip`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"Clip\"] = 7] = \"Clip\";\n})(TextRenderingMode || (TextRenderingMode = {}));\n/**\n * public Enum for `PdfLineJoin`.\n * @private\n */\nexport var PdfLineJoin;\n(function (PdfLineJoin) {\n /**\n * Specifies the type of `Miter`.\n * @private\n */\n PdfLineJoin[PdfLineJoin[\"Miter\"] = 0] = \"Miter\";\n /**\n * Specifies the type of `Round`.\n * @private\n */\n PdfLineJoin[PdfLineJoin[\"Round\"] = 1] = \"Round\";\n /**\n * Specifies the type of `Bevel`.\n * @private\n */\n PdfLineJoin[PdfLineJoin[\"Bevel\"] = 2] = \"Bevel\";\n})(PdfLineJoin || (PdfLineJoin = {}));\n/**\n * public Enum for `PdfLineCap`.\n * @private\n */\nexport var PdfLineCap;\n(function (PdfLineCap) {\n /**\n * Specifies the type of `Flat`.\n * @private\n */\n PdfLineCap[PdfLineCap[\"Flat\"] = 0] = \"Flat\";\n /**\n * Specifies the type of `Round`.\n * @private\n */\n PdfLineCap[PdfLineCap[\"Round\"] = 1] = \"Round\";\n /**\n * Specifies the type of `Square`.\n * @private\n */\n PdfLineCap[PdfLineCap[\"Square\"] = 2] = \"Square\";\n})(PdfLineCap || (PdfLineCap = {}));\n/**\n * public Enum for `PdfDashStyle`.\n * @private\n */\nexport var PdfDashStyle;\n(function (PdfDashStyle) {\n /**\n * Specifies the type of `Solid`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"Solid\"] = 0] = \"Solid\";\n /**\n * Specifies the type of `Dash`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"Dash\"] = 1] = \"Dash\";\n /**\n * Specifies the type of `Dot`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"Dot\"] = 2] = \"Dot\";\n /**\n * Specifies the type of `DashDot`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"DashDot\"] = 3] = \"DashDot\";\n /**\n * Specifies the type of `DashDotDot`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"DashDotDot\"] = 4] = \"DashDotDot\";\n /**\n * Specifies the type of `Custom`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"Custom\"] = 5] = \"Custom\";\n})(PdfDashStyle || (PdfDashStyle = {}));\n/**\n * public Enum for `PdfFillMode`.\n * @private\n */\nexport var PdfFillMode;\n(function (PdfFillMode) {\n /**\n * Specifies the type of `Winding`.\n * @private\n */\n PdfFillMode[PdfFillMode[\"Winding\"] = 0] = \"Winding\";\n /**\n * Specifies the type of `Alternate`.\n * @private\n */\n PdfFillMode[PdfFillMode[\"Alternate\"] = 1] = \"Alternate\";\n})(PdfFillMode || (PdfFillMode = {}));\n/**\n * public Enum for `PdfColorSpace`.\n * @private\n */\nexport var PdfColorSpace;\n(function (PdfColorSpace) {\n /**\n * Specifies the type of `Rgb`.\n * @private\n */\n PdfColorSpace[PdfColorSpace[\"Rgb\"] = 0] = \"Rgb\";\n /**\n * Specifies the type of `Cmyk`.\n * @private\n */\n PdfColorSpace[PdfColorSpace[\"Cmyk\"] = 1] = \"Cmyk\";\n /**\n * Specifies the type of `GrayScale`.\n * @private\n */\n PdfColorSpace[PdfColorSpace[\"GrayScale\"] = 2] = \"GrayScale\";\n /**\n * Specifies the type of `Indexed`.\n * @private\n */\n PdfColorSpace[PdfColorSpace[\"Indexed\"] = 3] = \"Indexed\";\n})(PdfColorSpace || (PdfColorSpace = {}));\n/**\n * public Enum for `PdfBlendMode`.\n * @private\n */\nexport var PdfBlendMode;\n(function (PdfBlendMode) {\n /**\n * Specifies the type of `Normal`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Normal\"] = 0] = \"Normal\";\n /**\n * Specifies the type of `Multiply`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Multiply\"] = 1] = \"Multiply\";\n /**\n * Specifies the type of `Screen`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Screen\"] = 2] = \"Screen\";\n /**\n * Specifies the type of `Overlay`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Overlay\"] = 3] = \"Overlay\";\n /**\n * Specifies the type of `Darken`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Darken\"] = 4] = \"Darken\";\n /**\n * Specifies the type of `Lighten`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Lighten\"] = 5] = \"Lighten\";\n /**\n * Specifies the type of `ColorDodge`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"ColorDodge\"] = 6] = \"ColorDodge\";\n /**\n * Specifies the type of `ColorBurn`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"ColorBurn\"] = 7] = \"ColorBurn\";\n /**\n * Specifies the type of `HardLight`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"HardLight\"] = 8] = \"HardLight\";\n /**\n * Specifies the type of `SoftLight`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"SoftLight\"] = 9] = \"SoftLight\";\n /**\n * Specifies the type of `Difference`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Difference\"] = 10] = \"Difference\";\n /**\n * Specifies the type of `Exclusion`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Exclusion\"] = 11] = \"Exclusion\";\n /**\n * Specifies the type of `Hue`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Hue\"] = 12] = \"Hue\";\n /**\n * Specifies the type of `Saturation`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Saturation\"] = 13] = \"Saturation\";\n /**\n * Specifies the type of `Color`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Color\"] = 14] = \"Color\";\n /**\n * Specifies the type of `Luminosity`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Luminosity\"] = 15] = \"Luminosity\";\n})(PdfBlendMode || (PdfBlendMode = {}));\n/**\n * public Enum for `PdfGraphicsUnit`.\n * @private\n */\nexport var PdfGraphicsUnit;\n(function (PdfGraphicsUnit) {\n /**\n * Specifies the type of `Centimeter`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Centimeter\"] = 0] = \"Centimeter\";\n /**\n * Specifies the type of `Pica`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Pica\"] = 1] = \"Pica\";\n /**\n * Specifies the type of `Pixel`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Pixel\"] = 2] = \"Pixel\";\n /**\n * Specifies the type of `Point`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Point\"] = 3] = \"Point\";\n /**\n * Specifies the type of `Inch`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Inch\"] = 4] = \"Inch\";\n /**\n * Specifies the type of `Document`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Document\"] = 5] = \"Document\";\n /**\n * Specifies the type of `Millimeter`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Millimeter\"] = 6] = \"Millimeter\";\n})(PdfGraphicsUnit || (PdfGraphicsUnit = {}));\n/**\n * public Enum for `PdfGridImagePosition`.\n * @private\n */\nexport var PdfGridImagePosition;\n(function (PdfGridImagePosition) {\n /**\n * Specifies the type of `Fit`.\n * @private\n */\n PdfGridImagePosition[PdfGridImagePosition[\"Fit\"] = 0] = \"Fit\";\n /**\n * Specifies the type of `Center`.\n * @private\n */\n PdfGridImagePosition[PdfGridImagePosition[\"Center\"] = 1] = \"Center\";\n /**\n * Specifies the type of `Stretch`.\n * @private\n */\n PdfGridImagePosition[PdfGridImagePosition[\"Stretch\"] = 2] = \"Stretch\";\n /**\n * Specifies the type of `Tile`.\n * @private\n */\n PdfGridImagePosition[PdfGridImagePosition[\"Tile\"] = 3] = \"Tile\";\n})(PdfGridImagePosition || (PdfGridImagePosition = {}));\n","import { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfStream } from './../primitives/pdf-stream';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { PdfString } from './../primitives/pdf-string';\n/**\n * `PdfReference` class is used to perform reference related primitive operations.\n * @private\n */\nvar PdfReference = /** @class */ (function () {\n function PdfReference(objNumber, genNumber) {\n /**\n * Holds the `index` number of the object.\n * @default -1\n * @private\n */\n this.index3 = -1;\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position3 = -1;\n /**\n * Holds the `object number`.\n * @default 0\n * @private\n */\n this.objNumber = 0;\n /**\n * Holds the `generation number` of the object.\n * @default 0\n * @private\n */\n this.genNumber = 0;\n if (typeof objNumber === 'number' && typeof genNumber === 'number') {\n this.objNumber = objNumber;\n this.genNumber = genNumber;\n // } else if (typeof objNum === 'string' && typeof genNum === 'string') {\n }\n else {\n this.objNumber = Number(objNumber);\n this.genNumber = Number(genNumber);\n }\n }\n Object.defineProperty(PdfReference.prototype, \"status\", {\n //Property\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status3;\n },\n set: function (value) {\n this.status3 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReference.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving3;\n },\n set: function (value) {\n this.isSaving3 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReference.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index3;\n },\n set: function (value) {\n this.index3 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReference.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position3;\n },\n set: function (value) {\n this.position3 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReference.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n var returnObject3 = null;\n return returnObject3;\n },\n enumerable: true,\n configurable: true\n });\n //IPdfPrimitives methods\n /**\n * `Saves` the object.\n * @private\n */\n PdfReference.prototype.save = function (writer) {\n writer.write(this.toString());\n };\n /**\n * Returns a `string` representing the object.\n * @private\n */\n PdfReference.prototype.toString = function () {\n return this.objNumber.toString() + ' ' + this.genNumber.toString() + ' R';\n };\n /**\n * Creates a `deep copy` of the IPdfPrimitive object.\n * @private\n */\n PdfReference.prototype.clone = function (crossTable) {\n return null;\n };\n return PdfReference;\n}());\nexport { PdfReference };\n/**\n * `PdfReferenceHolder` class is used to perform reference holder related primitive operations.\n * @private\n */\nvar PdfReferenceHolder = /** @class */ (function () {\n function PdfReferenceHolder(obj1, obj2) {\n /**\n * Holds the `index` number of the object.\n * @default -1\n * @private\n */\n this.index4 = -1;\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position4 = -1;\n /**\n * The `index` of the object within the object collection.\n * @default -1\n * @private\n */\n this.objectIndex = -1;\n /**\n * @hidden\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n // if (typeof obj2 === 'undefined') {\n if (obj1 instanceof PdfArray\n || obj1 instanceof PdfDictionary\n || obj1 instanceof PdfName\n || obj1 instanceof PdfNumber\n || obj1 instanceof PdfStream\n || obj1 instanceof PdfReference\n || obj1 instanceof PdfString) {\n // if (obj1 === null) {\n // throw new Error('ArgumentNullException : obj');\n // }\n this.primitiveObject = obj1;\n // } else if (obj1 instanceof PdfPageBase\n // || obj1 instanceof PdfPage\n // || obj1 instanceof PdfSection\n // || obj1 instanceof PdfSectionCollection) {\n }\n else {\n var tempObj = obj1;\n this.constructor(tempObj.element);\n }\n // }\n // else {\n // if (obj2 === null) {\n // throw new Error('ArgumentNullException : crossTable');\n // }\n // if (obj1 === null) {\n // throw new Error('ArgumentNullException : reference');\n // }\n // this.crossTable = obj2;\n // let tempObj1 : PdfReference = obj1;\n // this.reference = tempObj1;\n // }\n }\n Object.defineProperty(PdfReferenceHolder.prototype, \"status\", {\n //Properties\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status4;\n },\n set: function (value) {\n this.status4 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving4;\n },\n set: function (value) {\n this.isSaving4 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index4;\n },\n set: function (value) {\n this.index4 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position4;\n },\n set: function (value) {\n this.position4 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"object\", {\n /**\n * Gets the `object` the reference is of.\n * @private\n */\n get: function () {\n // if ((this.reference != null) || (this.object == null)) {\n // this.object = this.GetterObject();\n // }\n return this.primitiveObject;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"reference\", {\n /**\n * Gets the `reference`.\n * @private\n */\n get: function () {\n return this.pdfReference;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"index\", {\n /**\n * Gets the `index` of the object.\n * @private\n */\n get: function () {\n // let items : PdfMainObjectCollection = this.crossTable.PdfObjects;\n // this.objectIndex = items.GetObjectIndex(this.reference);\n // if (this.objectIndex < 0) {\n // let obj : IPdfPrimitive = this.crossTable.GetObject(this.reference);\n // this.objectIndex = items.Count - 1;\n // }\n return this.objectIndex;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"element\", {\n /**\n * Gets the `element`.\n * @private\n */\n get: function () {\n return this.primitiveObject;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Writes` a reference into a PDF document.\n * @private\n */\n PdfReferenceHolder.prototype.save = function (writer) {\n // if (writer == null) {\n // throw new Error('ArgumentNullException : writer');\n // }\n var position = writer.position;\n var cTable = writer.document.crossTable;\n // if (cTable.Document instanceof PdfDocument) {\n this.object.isSaving = true;\n // }\n var reference = null;\n // if (writer.Document.FileStructure.IncrementalUpdate === true && writer.Document.isStreamCopied === true) {\n // if (this.reference === null) {\n // reference = cTable.GetReference(this.Object);\n // } else {\n // reference = this.reference;\n // }\n // } else {\n // reference = cTable.GetReference(this.Object);\n // }\n // if (!(writer.Document.FileStructure.IncrementalUpdate === true && writer.Document.isStreamCopied === true)) {\n reference = cTable.getReference(this.object);\n // }\n // if (writer.Position !== position) {\n // writer.Position = position;\n // }\n reference.save(writer);\n };\n /**\n * Creates a `copy of PdfReferenceHolder`.\n * @private\n */\n PdfReferenceHolder.prototype.clone = function (crossTable) {\n var refHolder = null;\n var temp = null;\n var refNum = '';\n var reference = null;\n // Restricts addition of same object multiple time.\n /* if (this.Reference != null && this.crossTable != null && this.crossTable.PageCorrespondance.containsKey(this.Reference)) {\n refHolder = new PdfReferenceHolder(this.crossTable.PageCorrespondance.getValue(this.Reference) as PdfReference, crossTable);\n return refHolder;\n }\n if (Object instanceof PdfNumber) {\n return new PdfNumber((Object as PdfNumber).IntValue);\n }\n */\n // if (Object instanceof PdfDictionary) {\n // // Meaning the referenced page is not available for import.\n // let type : PdfName = new PdfName(this.dictionaryProperties.type);\n // let dict : PdfDictionary = Object as PdfDictionary;\n // if (dict.ContainsKey(type)) {\n // let pageName : PdfName = dict.Items.getValue(type.Value) as PdfName;\n // if (pageName !== null) {\n // if (pageName.Value === 'Page') {\n // return new PdfNull();\n // }\n // }\n // }\n // }\n /* if (Object instanceof PdfName) {\n return new PdfName ((Object as PdfName ).Value);\n }\n */\n // Resolves circular references.\n // if (crossTable.PrevReference !== null && (crossTable.PrevReference.indexOf(this.Reference) !== -1)) {\n // let obj : IPdfPrimitive = this.crossTable.GetObject(this.Reference).ClonedObject;\n // if (obj !== null) {\n // reference = crossTable.GetReference(obj);\n // return new PdfReferenceHolder(reference, crossTable);\n // } else {\n // return new PdfNull();\n // }\n // }\n /*if (this.Reference !== null) {\n crossTable.PrevReference.push(this.Reference);\n }\n reference = crossTable.GetReference(temp);\n refHolder = new PdfReferenceHolder(reference, crossTable);\n return refHolder;\n */\n return null;\n };\n return PdfReferenceHolder;\n}());\nexport { PdfReferenceHolder };\n","import { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfName } from './../primitives/pdf-name';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\n/**\n * `PdfAction` class represents base class for all action types.\n * @private\n */\nvar PdfAction = /** @class */ (function () {\n // Constructors\n /**\n * Initialize instance for `Action` class.\n * @private\n */\n function PdfAction() {\n /**\n * Specifies the Next `action` to perform.\n * @private\n */\n this.action = null;\n /**\n * Specifies the Internal variable to store `dictionary properties`.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n // super(); -> Object()\n this.initialize();\n }\n Object.defineProperty(PdfAction.prototype, \"next\", {\n // Properties\n /**\n * Gets and Sets the `Next` action to perform.\n * @private\n */\n get: function () {\n return this.action;\n },\n set: function (value) {\n // if (this.action !== value) {\n this.action = value;\n this.dictionary.items.setValue(this.dictionaryProperties.next, new PdfReferenceHolder(this.action));\n // }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAction.prototype, \"dictionary\", {\n /**\n * Gets and Sets the instance of PdfDictionary class for `Dictionary`.\n * @private\n */\n get: function () {\n if (typeof this.pdfDictionary === 'undefined') {\n this.pdfDictionary = new PdfDictionary();\n }\n return this.pdfDictionary;\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Initialize` the action type.\n * @private\n */\n PdfAction.prototype.initialize = function () {\n this.dictionary.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.action));\n };\n Object.defineProperty(PdfAction.prototype, \"element\", {\n // IPdfWrapper Members\n /**\n * Gets the `Element` as IPdfPrimitive class.\n * @private\n */\n get: function () {\n return this.dictionary;\n },\n enumerable: true,\n configurable: true\n });\n return PdfAction;\n}());\nexport { PdfAction };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfAction } from './action';\nimport { PdfString } from './../primitives/pdf-string';\nimport { PdfName } from './../primitives/pdf-name';\n/**\n * `PdfUriAction` class for initialize the uri related internals.\n * @private\n */\nvar PdfUriAction = /** @class */ (function (_super) {\n __extends(PdfUriAction, _super);\n function PdfUriAction(uri) {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Specifies the `uri` string.\n * @default ''.\n * @private\n */\n _this.uniformResourceIdentifier = '';\n return _this;\n }\n Object.defineProperty(PdfUriAction.prototype, \"uri\", {\n // Properties\n /**\n * Gets and Sets the value of `Uri`.\n * @private\n */\n get: function () {\n return this.uniformResourceIdentifier;\n },\n set: function (value) {\n this.uniformResourceIdentifier = value;\n this.dictionary.items.setValue(this.dictionaryProperties.uri, new PdfString(this.uniformResourceIdentifier));\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Initialize` the internals.\n * @private\n */\n PdfUriAction.prototype.initialize = function () {\n _super.prototype.initialize.call(this);\n this.dictionary.items.setValue(this.dictionaryProperties.s, new PdfName(this.dictionaryProperties.uri));\n };\n return PdfUriAction;\n}(PdfAction));\nexport { PdfUriAction };\n","import { PdfColorSpace } from './enum';\nimport { Operators } from './../input-output/pdf-operators';\nimport { Dictionary } from './../collections/dictionary';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfArray } from './../primitives/pdf-array';\n/**\n * Implements structures and routines working with `color`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * //\n * // set color\n * let brushColor : PdfColor = new PdfColor(0, 0, 0);\n * //\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(brushColor);\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @default black color\n */\nvar PdfColor = /** @class */ (function () {\n function PdfColor(color1, color2, color3, color4) {\n if (color1 instanceof PdfColor) {\n this.redColor = color1.r;\n this.greenColor = color1.g;\n this.blueColor = color1.b;\n this.grayColor = color1.gray;\n this.alpha = color1.alpha;\n this.filled = (this.alpha !== 0);\n }\n else if (typeof color1 === 'number' && typeof color2 === 'number' && typeof color3 === 'number' &&\n typeof color4 === 'undefined') {\n this.constructor(PdfColor.maxColourChannelValue, color1, color2, color3); //doubt-byte/float\n }\n else if (typeof color1 === 'number' && typeof color2 === 'number' && typeof color3 === 'number' && typeof color4 === 'number') {\n this.redColor = color2;\n this.cyanColor = 0;\n this.greenColor = color3;\n this.magentaColor = 0;\n this.blueColor = color4;\n this.yellowColor = 0;\n this.blackColor = 0;\n this.grayColor = 0;\n this.alpha = color1;\n this.filled = true;\n this.assignCMYK(color2, color3, color4);\n }\n }\n /**\n * `Calculate and assign` cyan, megenta, yellow colors from rgb values..\n * @private\n */\n PdfColor.prototype.assignCMYK = function (r, g, b) {\n var red = r / PdfColor.maxColourChannelValue;\n var green = g / PdfColor.maxColourChannelValue;\n var blue = b / PdfColor.maxColourChannelValue;\n var black = PdfNumber.min(1 - red, 1 - green, 1 - blue);\n var cyan = (black === 1.0) ? 0 : (1 - red - black) / (1 - black);\n var magenta = (black === 1.0) ? 0 : (1 - green - black) / (1 - black);\n var yellow = (black === 1.0) ? 0 : (1 - blue - black) / (1 - black);\n this.blackColor = black;\n this.cyanColor = cyan;\n this.magentaColor = magenta;\n this.yellowColor = yellow;\n };\n Object.defineProperty(PdfColor.prototype, \"r\", {\n //Properties\n // public static get Empty():PdfColor\n // {\n // return this.s_emptyColor\n // }\n /**\n * Gets or sets `Red` channel value.\n * @private\n */\n get: function () {\n return this.redColor;\n },\n set: function (value) {\n this.redColor = value;\n this.assignCMYK(this.redColor, this.greenColor, this.blueColor);\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"red\", {\n /**\n * Gets the `Red` color\n * @private\n */\n get: function () {\n return (this.r / PdfColor.maxColourChannelValue);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"b\", {\n /**\n * Gets or sets `Blue` channel value.\n * @private\n */\n get: function () {\n return this.blueColor;\n },\n set: function (value) {\n this.blueColor = value;\n this.assignCMYK(this.redColor, this.greenColor, this.blueColor);\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"blue\", {\n /**\n * Gets the `blue` color.\n * @private\n */\n get: function () {\n return (this.b / PdfColor.maxColourChannelValue);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"g\", {\n /**\n * Gets or sets `Green` channel value.\n * @private\n */\n get: function () {\n return this.greenColor;\n },\n set: function (value) {\n this.greenColor = value;\n this.assignCMYK(this.redColor, this.greenColor, this.blueColor);\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"green\", {\n /**\n * Gets the `Green` color.\n * @private\n */\n get: function () {\n return (this.g / PdfColor.maxColourChannelValue);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"gray\", {\n /**\n * Gets or sets `Gray` channel value.\n * @private\n */\n get: function () {\n return ((((this.redColor + this.greenColor) + this.blueColor)) / (PdfColor.maxColourChannelValue * 3));\n },\n set: function (value) {\n if (value < 0) {\n this.grayColor = 0;\n }\n else if (value > 1) {\n this.grayColor = 1;\n }\n else {\n this.grayColor = value;\n }\n this.r = (this.grayColor * PdfColor.maxColourChannelValue);\n this.g = (this.grayColor * PdfColor.maxColourChannelValue);\n this.b = (this.grayColor * PdfColor.maxColourChannelValue);\n this.assignCMYK(this.redColor, this.greenColor, this.blueColor);\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"isEmpty\", {\n /**\n * Gets whether the PDFColor `is Empty` or not.\n * @private\n */\n get: function () {\n return !this.filled;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"a\", {\n /**\n * Gets or sets `Alpha` channel value.\n * @private\n */\n get: function () {\n return this.alpha;\n },\n set: function (value) {\n if (value < 0) {\n this.alpha = 0;\n }\n else {\n // if (this.alpha !== value) {\n this.alpha = value;\n // }\n }\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n //Public methods\n /**\n * Converts `PDFColor to PDF string` representation.\n * @private\n */\n PdfColor.prototype.toString = function (colorSpace, stroke) {\n if (this.isEmpty) {\n return '';\n }\n return this.rgbToString(stroke);\n };\n /**\n * Sets `RGB` color.\n * @private\n */\n PdfColor.prototype.rgbToString = function (ifStroking) {\n var r = this.r;\n var g = this.g;\n var b = this.b;\n var key = (r << 16) + (g << 8) + b;\n if (ifStroking) {\n key += 1 << 24;\n }\n var colour = '';\n var obj = null;\n if (PdfColor.rgbStrings.containsKey(key)) {\n obj = PdfColor.rgbStrings.getValue(key);\n }\n if (obj == null) {\n var red = r / PdfColor.maxColourChannelValue;\n var green = g / PdfColor.maxColourChannelValue;\n var blue = b / PdfColor.maxColourChannelValue;\n if (ifStroking) {\n colour = red.toString() + ' ' + green.toString() + ' ' + blue.toString() + ' RG';\n }\n else {\n colour = red.toString() + ' ' + green.toString() + ' ' + blue.toString() + ' rg';\n }\n PdfColor.rgbStrings.setValue(key, colour);\n }\n else {\n colour = obj.toString();\n }\n return colour + Operators.newLine;\n };\n /**\n * Converts `colour to a PDF array`.\n * @private\n */\n PdfColor.prototype.toArray = function (colorSpace) {\n var array = new PdfArray();\n switch (colorSpace) {\n case PdfColorSpace.Rgb:\n array.add(new PdfNumber(this.red));\n array.add(new PdfNumber(this.green));\n array.add(new PdfNumber(this.blue));\n break;\n default:\n throw new Error('NotSupportedException : Unsupported colour space.');\n }\n return array;\n };\n //Fields\n /**\n * Holds `RGB colors` converted into strings.\n * @private\n */\n PdfColor.rgbStrings = new Dictionary();\n /**\n * Holds Gray scale colors converted into strings for `stroking`.\n * @private\n */\n PdfColor.grayStringsSroke = new Dictionary();\n /**\n * Holds Gray scale colors converted into strings for `filling`.\n * @private\n */\n PdfColor.grayStringsFill = new Dictionary();\n /**\n * `Max value` of color channel.\n * @private\n */\n PdfColor.maxColourChannelValue = 255.0;\n return PdfColor;\n}());\nexport { PdfColor };\n","/**\n * public Enum for `PdfFontStyle`.\n * @private\n */\nexport var PdfFontStyle;\n(function (PdfFontStyle) {\n /**\n * Specifies the type of `Regular`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Regular\"] = 0] = \"Regular\";\n /**\n * Specifies the type of `Bold`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Bold\"] = 1] = \"Bold\";\n /**\n * Specifies the type of `Italic`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Italic\"] = 2] = \"Italic\";\n /**\n * Specifies the type of `Underline`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Underline\"] = 4] = \"Underline\";\n /**\n * Specifies the type of `Strikeout`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Strikeout\"] = 8] = \"Strikeout\";\n})(PdfFontStyle || (PdfFontStyle = {}));\n/**\n * Specifies the font family from the standard font.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // create new standard font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * ```\n */\nexport var PdfFontFamily;\n(function (PdfFontFamily) {\n /**\n * Specifies the `Helvetica` font.\n */\n PdfFontFamily[PdfFontFamily[\"Helvetica\"] = 0] = \"Helvetica\";\n /**\n * Specifies the `Courier` font.\n */\n PdfFontFamily[PdfFontFamily[\"Courier\"] = 1] = \"Courier\";\n /**\n * Specifies the `TimesRoman` font.\n */\n PdfFontFamily[PdfFontFamily[\"TimesRoman\"] = 2] = \"TimesRoman\";\n /**\n * Specifies the `Symbol` font.\n */\n PdfFontFamily[PdfFontFamily[\"Symbol\"] = 3] = \"Symbol\";\n /**\n * Specifies the `ZapfDingbats` font.\n */\n PdfFontFamily[PdfFontFamily[\"ZapfDingbats\"] = 4] = \"ZapfDingbats\";\n})(PdfFontFamily || (PdfFontFamily = {}));\n/**\n * public Enum for `PdfFontType`.\n * @private\n */\nexport var PdfFontType;\n(function (PdfFontType) {\n /**\n * Specifies the type of `Standard`.\n * @private\n */\n PdfFontType[PdfFontType[\"Standard\"] = 0] = \"Standard\";\n /**\n * Specifies the type of `TrueType`.\n * @private\n */\n PdfFontType[PdfFontType[\"TrueType\"] = 1] = \"TrueType\";\n /**\n * Specifies the type of `TrueTypeEmbedded`.\n * @private\n */\n PdfFontType[PdfFontType[\"TrueTypeEmbedded\"] = 2] = \"TrueTypeEmbedded\";\n})(PdfFontType || (PdfFontType = {}));\n/**\n * public Enum for `PdfWordWrapType`.\n * @private\n */\nexport var PdfWordWrapType;\n(function (PdfWordWrapType) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfWordWrapType[PdfWordWrapType[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Word`.\n * @private\n */\n PdfWordWrapType[PdfWordWrapType[\"Word\"] = 1] = \"Word\";\n /**\n * Specifies the type of `WordOnly`.\n * @private\n */\n PdfWordWrapType[PdfWordWrapType[\"WordOnly\"] = 2] = \"WordOnly\";\n /**\n * Specifies the type of `Character`.\n * @private\n */\n PdfWordWrapType[PdfWordWrapType[\"Character\"] = 3] = \"Character\";\n})(PdfWordWrapType || (PdfWordWrapType = {}));\n/**\n * public Enum for `PdfSubSuperScript`.\n * @private\n */\nexport var PdfSubSuperScript;\n(function (PdfSubSuperScript) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfSubSuperScript[PdfSubSuperScript[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `SuperScript`.\n * @private\n */\n PdfSubSuperScript[PdfSubSuperScript[\"SuperScript\"] = 1] = \"SuperScript\";\n /**\n * Specifies the type of `SubScript`.\n * @private\n */\n PdfSubSuperScript[PdfSubSuperScript[\"SubScript\"] = 2] = \"SubScript\";\n})(PdfSubSuperScript || (PdfSubSuperScript = {}));\n/**\n * public Enum for `FontEncoding`.\n * @private\n */\nexport var FontEncoding;\n(function (FontEncoding) {\n /**\n * Specifies the type of `Unknown`.\n * @private\n */\n FontEncoding[FontEncoding[\"Unknown\"] = 0] = \"Unknown\";\n /**\n * Specifies the type of `StandardEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"StandardEncoding\"] = 1] = \"StandardEncoding\";\n /**\n * Specifies the type of `MacRomanEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"MacRomanEncoding\"] = 2] = \"MacRomanEncoding\";\n /**\n * Specifies the type of `MacExpertEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"MacExpertEncoding\"] = 3] = \"MacExpertEncoding\";\n /**\n * Specifies the type of `WinAnsiEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"WinAnsiEncoding\"] = 4] = \"WinAnsiEncoding\";\n /**\n * Specifies the type of `PdfDocEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"PdfDocEncoding\"] = 5] = \"PdfDocEncoding\";\n /**\n * Specifies the type of `IdentityH`.\n * @private\n */\n FontEncoding[FontEncoding[\"IdentityH\"] = 6] = \"IdentityH\";\n})(FontEncoding || (FontEncoding = {}));\n","/**\n * Coordinates of Position for `PointF`.\n * @private\n */\nvar PointF = /** @class */ (function () {\n function PointF(x, y) {\n if (typeof x === 'undefined') {\n this.x = 0;\n this.y = 0;\n }\n else {\n if (x !== null) {\n this.x = x;\n }\n else {\n this.x = 0;\n }\n if (y !== null) {\n this.y = y;\n }\n else {\n this.y = 0;\n }\n }\n }\n return PointF;\n}());\nexport { PointF };\n/**\n * Width and Height as `Size`.\n * @private\n */\nvar SizeF = /** @class */ (function () {\n function SizeF(width, height) {\n if (typeof height === 'undefined') {\n this.height = 0;\n this.width = 0;\n }\n else {\n if (height !== null) {\n this.height = height;\n }\n else {\n this.height = 0;\n }\n if (width !== null) {\n this.width = width;\n }\n else {\n this.width = 0;\n }\n }\n }\n return SizeF;\n}());\nexport { SizeF };\n/**\n * `RectangleF` with Position and size.\n * @private\n */\nvar RectangleF = /** @class */ (function () {\n function RectangleF(arg1, arg2, arg3, arg4) {\n if (typeof arg1 === typeof arg1 && typeof arg1 === 'undefined') {\n this.x = 0;\n this.y = 0;\n this.height = 0;\n this.width = 0;\n }\n else {\n if (arg1 instanceof PointF && arg2 instanceof SizeF && typeof arg3 === 'undefined') {\n var pointf = arg1;\n this.x = pointf.x;\n this.y = pointf.y;\n var sizef = arg2;\n this.height = sizef.height;\n this.width = sizef.width;\n }\n else {\n var x = arg1;\n var y = arg2;\n var width = arg3;\n var height = arg4;\n this.x = x;\n this.y = y;\n this.height = height;\n this.width = width;\n }\n }\n }\n return RectangleF;\n}());\nexport { RectangleF };\n","/**\n * `PdfBrush` class provides objects used to fill the interiors of graphical shapes such as rectangles,\n * ellipses, pies, polygons, and paths.\n * @private\n */\nvar PdfBrush = /** @class */ (function () {\n /**\n * Creates instanceof `PdfBrush` class.\n * @hidden\n * @private\n */\n function PdfBrush() {\n //\n }\n return PdfBrush;\n}());\nexport { PdfBrush };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfColor } from './../pdf-color';\nimport { PdfColorSpace } from './../enum';\nimport { PdfBrush } from './pdf-brush';\n/**\n * Represents a brush that fills any object with a solid color.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfSolidBrush = /** @class */ (function (_super) {\n __extends(PdfSolidBrush, _super);\n //Constructors\n /**\n * Initializes a new instance of the `PdfSolidBrush` class.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @param color color of the brush\n */\n function PdfSolidBrush(color) {\n var _this = _super.call(this) || this;\n _this.pdfColor = color;\n return _this;\n }\n Object.defineProperty(PdfSolidBrush.prototype, \"color\", {\n //Properties\n /**\n * Gets or sets the `color` of the brush.\n * @private\n */\n get: function () {\n return this.pdfColor;\n },\n set: function (value) {\n this.pdfColor = value;\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Monitors` the changes of the brush and modify PDF state respectively.\n * @private\n */\n PdfSolidBrush.prototype.monitorChanges = function (brush, streamWriter, getResources, saveChanges, currentColorSpace) {\n if (streamWriter == null) {\n throw new Error('ArgumentNullException:streamWriter');\n }\n var diff = false;\n if (brush == null) {\n diff = true;\n streamWriter.setColorAndSpace(this.pdfColor, currentColorSpace, false);\n return diff;\n }\n else {\n var sBrush = brush;\n diff = true;\n streamWriter.setColorAndSpace(this.pdfColor, currentColorSpace, false);\n return diff;\n }\n };\n /**\n * `Resets` the changes, which were made by the brush.\n * @private\n */\n PdfSolidBrush.prototype.resetChanges = function (streamWriter) {\n streamWriter.setColorAndSpace(new PdfColor(0, 0, 0), PdfColorSpace.Rgb, false);\n };\n return PdfSolidBrush;\n}(PdfBrush));\nexport { PdfSolidBrush };\n","/**\n * PdfStringFormat.ts class for EJ2-PDF\n */\nimport { PdfVerticalAlignment } from './../../graphics/enum';\nimport { PdfSubSuperScript, PdfWordWrapType } from './../../graphics/fonts/enum';\n/**\n * `PdfStringFormat` class represents the text layout information on PDF.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set the text alignment\n * stringFormat.alignment = PdfTextAlignment.Center;\n * // set the vertical alignment\n * stringFormat.lineAlignment = PdfVerticalAlignment.Middle;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfStringFormat = /** @class */ (function () {\n function PdfStringFormat(arg1, arg2) {\n /**\n * The `scaling factor` of the text being drawn.\n * @private\n */\n this.scalingFactor = 100.0;\n if (typeof arg1 === 'undefined') {\n this.internalLineLimit = true;\n this.wordWrapType = PdfWordWrapType.Word;\n }\n else if (typeof arg1 === 'string') {\n this.constructor();\n }\n else {\n if (typeof arg2 === 'undefined') {\n this.constructor();\n this.textAlignment = arg1;\n }\n else {\n this.constructor(arg1);\n this.verticalAlignment = arg2;\n }\n }\n }\n Object.defineProperty(PdfStringFormat.prototype, \"alignment\", {\n //Properties\n /**\n * Gets or sets the `horizontal` text alignment\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set the text alignment\n * stringFormat.alignment = PdfTextAlignment.Center;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.textAlignment;\n },\n set: function (value) {\n this.textAlignment = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"lineAlignment\", {\n /**\n * Gets or sets the `vertical` text alignment.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set the vertical alignment\n * stringFormat.lineAlignment = PdfVerticalAlignment.Middle;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n if (typeof this.verticalAlignment === 'undefined' || this.verticalAlignment == null) {\n return PdfVerticalAlignment.Top;\n }\n else {\n return this.verticalAlignment;\n }\n },\n set: function (value) {\n this.verticalAlignment = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"rightToLeft\", {\n /**\n * Gets or sets the value that indicates text `direction` mode.\n * @private\n */\n get: function () {\n if (typeof this.isRightToLeft === 'undefined' || this.isRightToLeft == null) {\n return false;\n }\n else {\n return this.isRightToLeft;\n }\n },\n set: function (value) {\n this.isRightToLeft = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"characterSpacing\", {\n /**\n * Gets or sets value that indicates a `size` among the characters in the text.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set character spacing\n * stringFormat.characterSpacing = 10;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n if (typeof this.internalCharacterSpacing === 'undefined' || this.internalCharacterSpacing == null) {\n return 0;\n }\n else {\n return this.internalCharacterSpacing;\n }\n },\n set: function (value) {\n this.internalCharacterSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"wordSpacing\", {\n /**\n * Gets or sets value that indicates a `size` among the words in the text.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set word spacing\n * stringFormat.wordSpacing = 10;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n if (typeof this.internalWordSpacing === 'undefined' || this.internalWordSpacing == null) {\n return 0;\n }\n else {\n return this.internalWordSpacing;\n }\n },\n set: function (value) {\n this.internalWordSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"lineSpacing\", {\n /**\n * Gets or sets value that indicates the `vertical distance` between the baselines of adjacent lines of text.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // set string\n * let text : string = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor\n * incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitati';\n * // set rectangle bounds\n * let rectangle : RectangleF = new RectangleF({x : 0, y : 0}, {width : 300, height : 100})\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set line spacing\n * stringFormat.lineSpacing = 10;\n * //\n * // draw the text\n * page1.graphics.drawString(text, font, blackBrush, rectangle, stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n if (typeof this.leading === 'undefined' || this.leading == null) {\n return 0;\n }\n else {\n return this.leading;\n }\n },\n set: function (value) {\n this.leading = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"clipPath\", {\n /**\n * Gets or sets a value indicating whether the text is `clipped` or not.\n * @private\n */\n get: function () {\n if (typeof this.clip === 'undefined' || this.clip == null) {\n return false;\n }\n else {\n return this.clip;\n }\n },\n set: function (value) {\n this.clip = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"subSuperScript\", {\n /**\n * Gets or sets value indicating whether the text is in `subscript or superscript` mode.\n * @private\n */\n get: function () {\n if (typeof this.pdfSubSuperScript === 'undefined' || this.pdfSubSuperScript == null) {\n return PdfSubSuperScript.None;\n }\n else {\n return this.pdfSubSuperScript;\n }\n },\n set: function (value) {\n this.pdfSubSuperScript = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"paragraphIndent\", {\n /**\n * Gets or sets the `indent` of the first line in the paragraph.\n * @private\n */\n get: function () {\n if (typeof this.internalParagraphIndent === 'undefined' || this.internalParagraphIndent == null) {\n return 0;\n }\n else {\n return this.internalParagraphIndent;\n }\n },\n set: function (value) {\n this.internalParagraphIndent = value;\n this.firstLineIndent = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"lineLimit\", {\n /**\n * Gets or sets a value indicating whether [`line limit`].\n * @private\n */\n get: function () {\n return this.internalLineLimit;\n },\n set: function (value) {\n this.internalLineLimit = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"measureTrailingSpaces\", {\n /**\n * Gets or sets a value indicating whether [`measure trailing spaces`].\n * @private\n */\n get: function () {\n if (typeof this.trailingSpaces === 'undefined' || this.trailingSpaces == null) {\n return false;\n }\n else {\n return this.trailingSpaces;\n }\n },\n set: function (value) {\n this.trailingSpaces = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"noClip\", {\n /**\n * Gets or sets a value indicating whether [`no clip`].\n * @private\n */\n get: function () {\n if (typeof this.isNoClip === 'undefined' || this.isNoClip == null) {\n return false;\n }\n else {\n return this.isNoClip;\n }\n },\n set: function (value) {\n this.isNoClip = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"wordWrap\", {\n /**\n * Gets or sets value indicating type of the text `wrapping`.\n * @private\n */\n get: function () {\n // if (typeof this.wrapType === 'undefined' || this.wrapType == null) {\n // return PdfWordWrapType.Word;\n // } else {\n return this.wordWrapType;\n // }\n },\n set: function (value) {\n this.wordWrapType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"horizontalScalingFactor\", {\n /**\n * Gets or sets the `scaling factor`.\n * @private\n */\n get: function () {\n // if (typeof this.scalingFactor === 'undefined' || this.scalingFactor == null) {\n // return 100;\n // } else {\n return this.scalingFactor;\n // }\n },\n set: function (value) {\n if (value <= 0) {\n throw new Error('ArgumentOutOfRangeException:The scaling factor cant be less of equal to zero, ScalingFactor');\n }\n this.scalingFactor = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"firstLineIndent\", {\n /**\n * Gets or sets the `indent` of the first line in the text.\n * @private\n */\n get: function () {\n if (typeof this.initialLineIndent === 'undefined' || this.initialLineIndent == null) {\n return 0;\n }\n else {\n return this.initialLineIndent;\n }\n },\n set: function (value) {\n this.initialLineIndent = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Clones` the object.\n * @private\n */\n //IClonable implementation\n PdfStringFormat.prototype.clone = function () {\n var format = this;\n return format;\n };\n return PdfStringFormat;\n}());\nexport { PdfStringFormat };\n","import { SizeF, RectangleF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfWordWrapType } from './enum';\nimport { StringTokenizer } from './string-tokenizer';\n/**\n * Class `lay outing the text`.\n */\nvar PdfStringLayouter = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `StringLayouter` class.\n * @private\n */\n function PdfStringLayouter() {\n /**\n * Checks whether the x co-ordinate is need to set as client size or not.\n * @hidden\n * @private\n */\n this.isOverloadWithPosition = false;\n //\n }\n PdfStringLayouter.prototype.layout = function (arg1, arg2, arg3, arg4, arg5, arg6, arg7) {\n if (arg4 instanceof RectangleF) {\n this.initialize(arg1, arg2, arg3, arg4, arg5);\n this.isOverloadWithPosition = arg6;\n this.clientSize = arg7;\n var result = this.doLayout();\n this.clear();\n return result;\n }\n else {\n this.initialize(arg1, arg2, arg3, arg4);\n this.isOverloadWithPosition = arg5;\n this.clientSize = arg6;\n var result = this.doLayout();\n this.clear();\n return result;\n }\n };\n PdfStringLayouter.prototype.initialize = function (text, font, format, rectSize, pageHeight) {\n if (typeof pageHeight === 'number') {\n if (text == null) {\n throw new Error('ArgumentNullException:text');\n }\n if (font == null) {\n throw new Error('ArgumentNullException:font');\n }\n this.text = text;\n this.font = font;\n this.format = format;\n this.size = new SizeF(rectSize.width, rectSize.height);\n this.rectangle = rectSize;\n this.pageHeight = pageHeight;\n this.reader = new StringTokenizer(text);\n }\n else {\n this.initialize(text, font, format, new RectangleF(new PointF(0, 0), rectSize), 0);\n }\n };\n /**\n * `Clear` all resources.\n * @private\n */\n PdfStringLayouter.prototype.clear = function () {\n this.font = null;\n this.format = null;\n this.reader.close();\n this.reader = null;\n this.text = null;\n };\n /**\n * `Layouts` the text.\n * @private\n */\n PdfStringLayouter.prototype.doLayout = function () {\n var result = new PdfStringLayoutResult();\n var lineResult = new PdfStringLayoutResult();\n var lines = [];\n var line = this.reader.peekLine();\n var lineIndent = this.getLineIndent(true);\n while (line != null) {\n lineResult = this.layoutLine(line, lineIndent);\n // if (!lineResult.Empty) {\n var numSymbolsInserted = 0;\n /* tslint:disable */\n var returnedValue = this.copyToResult(result, lineResult, lines, /*out*/ numSymbolsInserted);\n /* tslint:enable */\n var success = returnedValue.success;\n numSymbolsInserted = returnedValue.numInserted;\n this.reader.readLine();\n line = this.reader.peekLine();\n lineIndent = this.getLineIndent(false);\n }\n this.finalizeResult(result, lines);\n return result;\n };\n /**\n * Returns `line indent` for the line.\n * @private\n */\n PdfStringLayouter.prototype.getLineIndent = function (firstLine) {\n var lineIndent = 0;\n if (this.format != null) {\n lineIndent = (firstLine) ? this.format.firstLineIndent : this.format.paragraphIndent;\n lineIndent = (this.size.width > 0) ? Math.min(this.size.width, lineIndent) : lineIndent;\n }\n return lineIndent;\n };\n /**\n * Calculates `height` of the line.\n * @private\n */\n PdfStringLayouter.prototype.getLineHeight = function () {\n var height = this.font.height;\n if (this.format != null && this.format.lineSpacing !== 0) {\n height = this.format.lineSpacing + this.font.height;\n }\n return height;\n };\n /**\n * Calculates `width` of the line.\n * @private\n */\n PdfStringLayouter.prototype.getLineWidth = function (line) {\n var width = this.font.getLineWidth(line, this.format);\n return width;\n };\n // tslint:disable\n /**\n * `Layouts` line.\n * @private\n */\n PdfStringLayouter.prototype.layoutLine = function (line, lineIndent) {\n var lineResult = new PdfStringLayoutResult();\n lineResult.layoutLineHeight = this.getLineHeight();\n var lines = [];\n var maxWidth = this.size.width;\n var lineWidth = this.getLineWidth(line) + lineIndent;\n var lineType = LineType.FirstParagraphLine;\n var readWord = true;\n // line is in bounds.\n if (maxWidth <= 0 || Math.round(lineWidth) <= Math.round(maxWidth)) {\n this.addToLineResult(lineResult, lines, line, lineWidth, LineType.NewLineBreak | lineType);\n }\n else {\n var builder = '';\n var curLine = '';\n lineWidth = lineIndent;\n var curIndent = lineIndent;\n var reader = new StringTokenizer(line);\n var word = reader.peekWord();\n var isSingleWord = false;\n while (word != null) {\n curLine = curLine + word;\n var curLineWidth = this.getLineWidth(curLine.toString()) + curIndent /*)*/;\n if (curLineWidth > maxWidth) {\n if (this.getWrapType() == PdfWordWrapType.None)\n break;\n if (this.getWrapType() != PdfWordWrapType.Character || !readWord) {\n var ln = builder.toString();\n if (ln.indexOf(' ') === -1) {\n isSingleWord = true;\n this.addToLineResult(lineResult, lines, curLine, lineWidth, LineType.LayoutBreak | lineType);\n }\n else {\n this.addToLineResult(lineResult, lines, ln, lineWidth, LineType.LayoutBreak | lineType);\n }\n if (this.isOverloadWithPosition) {\n maxWidth = this.clientSize.width;\n }\n curLine = '';\n builder = '';\n lineWidth = 0;\n curIndent = 0;\n curLineWidth = 0;\n lineType = LineType.None;\n if (isSingleWord) {\n reader.readWord();\n readWord = false;\n }\n word = (readWord) ? word : reader.peekWord();\n isSingleWord = false;\n readWord = true;\n }\n else {\n readWord = false;\n curLine = curLine + builder.toString();\n word = reader.peek().toString();\n }\n continue;\n }\n builder = builder + word;\n lineWidth = curLineWidth;\n if (readWord) {\n reader.readWord();\n word = reader.peekWord();\n isSingleWord = false;\n }\n else {\n reader.read();\n word = reader.peek().toString();\n }\n }\n if (builder.length > 0) {\n var ln = builder.toString();\n this.addToLineResult(lineResult, lines, ln, lineWidth, LineType.NewLineBreak | LineType.LastParagraphLine);\n }\n reader.close();\n }\n lineResult.layoutLines = [];\n for (var index = 0; index < lines.length; index++) {\n lineResult.layoutLines.push(lines[index]);\n }\n lines = [];\n return lineResult;\n };\n /**\n * `Adds` line to line result.\n * @private\n */\n PdfStringLayouter.prototype.addToLineResult = function (lineResult, lines, line, lineWidth, breakType) {\n var info = new LineInfo();\n info.text = line;\n info.width = lineWidth;\n info.lineType = breakType;\n lines.push(info);\n var size = lineResult.actualSize;\n size.height += this.getLineHeight();\n size.width = Math.max(size.width, lineWidth);\n lineResult.size = size;\n };\n /**\n * `Copies` layout result from line result to entire result. Checks whether we can proceed lay outing or not.\n * @private\n */\n PdfStringLayouter.prototype.copyToResult = function (result, lineResult, lines, \n /*out*/ numInserted) {\n var success = true;\n var allowPartialLines = (this.format != null && !this.format.lineLimit);\n var height = result.actualSize.height;\n var maxHeight = this.size.height;\n if ((this.pageHeight > 0) && (maxHeight + this.rectangle.y > this.pageHeight)) {\n maxHeight = this.rectangle.y - this.pageHeight;\n maxHeight = Math.max(maxHeight, -maxHeight);\n }\n numInserted = 0;\n for (var i = 0, len = lineResult.lines.length; i < len; i++) {\n var expHeight = height + lineResult.lineHeight;\n var info = lineResult.lines[i];\n numInserted += info.text.length;\n info = this.trimLine(info, (lines.length === 0));\n lines.push(info);\n // Update width.\n var size_1 = result.actualSize;\n size_1.width = Math.max(size_1.width, info.width);\n result.size = size_1;\n height = expHeight;\n }\n var size = result.actualSize;\n size.height = height;\n result.size = size;\n return { success: success, numInserted: numInserted };\n };\n /**\n * `Finalizes` final result.\n * @private\n */\n PdfStringLayouter.prototype.finalizeResult = function (result, lines) {\n result.layoutLines = [];\n for (var index = 0; index < lines.length; index++) {\n result.layoutLines.push(lines[index]);\n }\n result.layoutLineHeight = this.getLineHeight();\n lines = [];\n };\n /**\n * `Trims` whitespaces at the line.\n * @private\n */\n PdfStringLayouter.prototype.trimLine = function (info, firstLine) {\n var line = info.text;\n var lineWidth = info.width;\n // Trim start whitespaces if the line is not a start of the paragraph only.\n // let trimStartSpaces : boolean = ((info.LineType & LineType.FirstParagraphLine) === 0);\n var start = (this.format == null || !this.format.rightToLeft);\n var spaces = StringTokenizer.spaces;\n line = (start) ? line.trim() : line.trim();\n // Recalculate line width.\n if (line.length !== info.text.length) {\n lineWidth = this.getLineWidth(line);\n lineWidth += this.getLineIndent(firstLine);\n }\n info.text = line;\n info.width = lineWidth;\n return info;\n };\n /**\n * Returns `wrap` type.\n * @private\n */\n PdfStringLayouter.prototype.getWrapType = function () {\n var wrapType = (this.format != null) ? this.format.wordWrap : PdfWordWrapType.Word;\n return wrapType;\n };\n return PdfStringLayouter;\n}());\nexport { PdfStringLayouter };\n//Internal declaration\nvar PdfStringLayoutResult = /** @class */ (function () {\n function PdfStringLayoutResult() {\n }\n Object.defineProperty(PdfStringLayoutResult.prototype, \"remainder\", {\n // Properties\n /**\n * Gets the `text` which is not lay outed.\n * @private\n */\n get: function () {\n return this.textRemainder;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"actualSize\", {\n /**\n * Gets the actual layout text `bounds`.\n * @private\n */\n get: function () {\n if (typeof this.size === 'undefined') {\n this.size = new SizeF(0, 0);\n }\n return this.size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"lines\", {\n /**\n * Gets layout `lines` information.\n * @private\n */\n get: function () {\n return this.layoutLines;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"lineHeight\", {\n /**\n * Gets the `height` of the line.\n * @private\n */\n get: function () {\n return this.layoutLineHeight;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"empty\", {\n /**\n * Gets value that indicates whether any layout text [`empty`].\n * @private\n */\n get: function () {\n return (this.layoutLines == null || this.layoutLines.length === 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"lineCount\", {\n /**\n * Gets `number of` the layout lines.\n * @private\n */\n get: function () {\n var count = (!this.empty) ? this.layoutLines.length : 0;\n return count;\n },\n enumerable: true,\n configurable: true\n });\n return PdfStringLayoutResult;\n}());\nexport { PdfStringLayoutResult };\nvar LineInfo = /** @class */ (function () {\n function LineInfo() {\n }\n Object.defineProperty(LineInfo.prototype, \"lineType\", {\n //Properties\n /**\n * Gets the `type` of the line text.\n * @private\n */\n get: function () {\n return this.type;\n },\n set: function (value) {\n this.type = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineInfo.prototype, \"text\", {\n /**\n * Gets the line `text`.\n * @private\n */\n get: function () {\n return this.content;\n },\n set: function (value) {\n this.content = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineInfo.prototype, \"width\", {\n /**\n * Gets `width` of the line text.\n * @private\n */\n get: function () {\n return this.lineWidth;\n },\n set: function (value) {\n this.lineWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n return LineInfo;\n}());\nexport { LineInfo };\n/**\n* Break type of the `line`.\n* @private\n*/\nexport var LineType;\n(function (LineType) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n LineType[LineType[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `NewLineBreak`.\n * @private\n */\n LineType[LineType[\"NewLineBreak\"] = 1] = \"NewLineBreak\";\n /**\n * Specifies the type of `LayoutBreak`.\n * @private\n */\n LineType[LineType[\"LayoutBreak\"] = 2] = \"LayoutBreak\";\n /**\n * Specifies the type of `FirstParagraphLine`.\n * @private\n */\n LineType[LineType[\"FirstParagraphLine\"] = 4] = \"FirstParagraphLine\";\n /**\n * Specifies the type of `LastParagraphLine`.\n * @private\n */\n LineType[LineType[\"LastParagraphLine\"] = 8] = \"LastParagraphLine\";\n})(LineType || (LineType = {}));\n","/**\n * StringTokenizer.ts class for EJ2-PDF\n * Utility class for working with strings.\n * @private\n */\nvar StringTokenizer = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `StringTokenizer` class.\n * @private\n */\n function StringTokenizer(textValue) {\n /**\n * Current `position`.\n * @private\n */\n this.currentPosition = 0;\n if (textValue == null) {\n throw new Error('ArgumentNullException:text');\n }\n this.text = textValue;\n }\n Object.defineProperty(StringTokenizer.prototype, \"length\", {\n // Properties\n /**\n * Gets text `length`.\n * @private\n */\n get: function () {\n return this.text.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StringTokenizer.prototype, \"position\", {\n /**\n * Gets or sets the position.\n * @private\n */\n get: function () {\n return this.currentPosition;\n },\n set: function (value) {\n this.currentPosition = value;\n },\n enumerable: true,\n configurable: true\n });\n StringTokenizer.getCharsCount = function (text, symbols) {\n if (typeof symbols === 'string') {\n if (text == null) {\n throw new Error('ArgumentNullException:wholeText');\n }\n var numSymbols = 0;\n var curIndex = 0;\n for (;;) {\n curIndex = text.indexOf(symbols, curIndex);\n if (curIndex === -1) {\n break;\n }\n else {\n numSymbols++;\n curIndex++;\n }\n }\n return numSymbols;\n }\n else {\n if (text == null) {\n throw new Error('ArgumentNullException:text');\n }\n if (symbols == null) {\n throw new Error('ArgumentNullException:symbols');\n }\n var count = 0;\n for (var i = 0, len = text.length; i < len; i++) {\n var ch = text[i];\n if (this.contains(symbols, ch)) {\n count++;\n }\n }\n return count;\n }\n };\n /**\n * Reads line of the text.\n * @private\n */\n StringTokenizer.prototype.readLine = function () {\n var pos = this.currentPosition;\n while (pos < this.length) {\n var ch = this.text[pos];\n switch (ch) {\n case '\\r':\n case '\\n': {\n var text = this.text.substring(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos + 1;\n this.currentPosition++;\n return text;\n }\n }\n pos++;\n }\n // The remaining text.\n if (pos > this.currentPosition) {\n var text2 = this.text.substring(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos;\n return text2;\n }\n return null;\n };\n /**\n * Reads line of the text.\n * @private\n */\n StringTokenizer.prototype.peekLine = function () {\n var pos = this.currentPosition;\n var line = this.readLine();\n this.currentPosition = pos;\n return line;\n };\n /**\n * Reads a word from the text.\n * @private\n */\n StringTokenizer.prototype.readWord = function () {\n var pos = this.currentPosition;\n while (pos < this.length) {\n var ch = this.text[pos];\n switch (ch) {\n case '\\r':\n case '\\n':\n var textValue = this.text.substr(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos + 1;\n if (((ch === '\\r') && (this.currentPosition < this.length)) && (this.text[this.currentPosition] === '\\n')) {\n this.currentPosition++;\n }\n return textValue;\n case ' ':\n case '\\t': {\n if (pos === this.currentPosition) {\n pos++;\n }\n var text = this.text.substr(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos;\n return text;\n }\n }\n pos++;\n }\n // The remaining text.\n if (pos > this.currentPosition) {\n var text2 = this.text.substr(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos;\n return text2;\n }\n return null;\n };\n /**\n * Peeks a word from the text.\n * @private\n */\n StringTokenizer.prototype.peekWord = function () {\n var pos = this.currentPosition;\n var word = this.readWord();\n this.currentPosition = pos;\n return word;\n };\n StringTokenizer.prototype.read = function (count) {\n if (typeof count === 'undefined') {\n var ch = '0';\n return ch;\n }\n else {\n var num = 0;\n var builder = '';\n return builder;\n }\n };\n /**\n * Peeks char form the data.\n * @private\n */\n StringTokenizer.prototype.peek = function () {\n var ch = '0';\n return ch;\n };\n /**\n * Closes a reader.\n * @private\n */\n StringTokenizer.prototype.close = function () {\n this.text = null;\n };\n //Implementation\n /**\n * Checks whether array contains a symbol.\n * @private\n */\n StringTokenizer.contains = function (array, symbol) {\n var contains = false;\n for (var i = 0; i < array.length; i++) {\n if (array[i] === symbol) {\n contains = true;\n break;\n }\n }\n return contains;\n };\n // Constants\n /**\n * `Whitespace` symbol.\n * @private\n */\n StringTokenizer.whiteSpace = ' ';\n /**\n * `tab` symbol.\n * @private\n */\n StringTokenizer.tab = '\\t';\n /**\n * Array of `spaces`.\n * @private\n */\n StringTokenizer.spaces = [StringTokenizer.whiteSpace, StringTokenizer.tab];\n /**\n * `Pattern` for WhiteSpace.\n * @private\n */\n StringTokenizer.whiteSpacePattern = '^[ \\t]+$';\n return StringTokenizer;\n}());\nexport { StringTokenizer };\n","/**\n * PdfFont.ts class for EJ2-PDF\n */\nimport { PdfFontStyle } from './enum';\nimport { SizeF } from './../../drawing/pdf-drawing';\nimport { PdfStringFormat } from './pdf-string-format';\nimport { PdfStringLayouter } from './string-layouter';\nimport { StringTokenizer } from './string-tokenizer';\n/**\n * Defines a particular format for text, including font face, size, and style attributes.\n * @private\n */\nvar PdfFont = /** @class */ (function () {\n function PdfFont(size, style) {\n /**\n * `Style` of the font.\n * @private\n */\n this.fontStyle = PdfFontStyle.Regular;\n if (typeof size === 'number' && typeof style === 'undefined') {\n this.fontSize = size;\n }\n else {\n this.fontSize = size;\n this.setStyle(style);\n }\n }\n Object.defineProperty(PdfFont.prototype, \"name\", {\n //Properties\n /**\n * Gets the face name of this Font.\n * @private\n */\n get: function () {\n return this.metrics.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"size\", {\n /**\n * Gets the size of this font.\n * @private\n */\n get: function () {\n return this.fontSize;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"height\", {\n /**\n * Gets the height of the font in points.\n * @private\n */\n get: function () {\n return this.metrics.getHeight(null);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"style\", {\n /**\n * Gets the style information for this font.\n * @private\n */\n get: function () {\n return this.fontStyle;\n },\n set: function (value) {\n this.fontStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"bold\", {\n /**\n * Gets a value indicating whether this `PdfFont` is `bold`.\n * @private\n */\n get: function () {\n return ((this.style & PdfFontStyle.Bold) > 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"italic\", {\n /**\n * Gets a value indicating whether this `PdfFont` has the `italic` style applied.\n * @private\n */\n get: function () {\n return ((this.style & PdfFontStyle.Italic) > 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"strikeout\", {\n /**\n * Gets a value indicating whether this `PdfFont` is `strikeout`.\n * @private\n */\n get: function () {\n return ((this.style & PdfFontStyle.Strikeout) > 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"underline\", {\n /**\n * Gets a value indicating whether this `PdfFont` is `underline`.\n * @private\n */\n get: function () {\n return ((this.style & PdfFontStyle.Underline) > 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"metrics\", {\n /**\n * Gets or sets the `metrics` for this font.\n * @private\n */\n get: function () {\n return this.fontMetrics;\n },\n set: function (value) {\n this.fontMetrics = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"element\", {\n // /**\n // * Gets and Sets the font `internals`.\n // * @private\n // */\n // public get fontInternal() : IPdfPrimitive {\n // return this.pdfFontInternals;\n // }\n // public set fontInternal(value : IPdfPrimitive) {\n // this.pdfFontInternals = value;\n // }\n //IPdfWrapper Members\n /**\n * Gets the `element` representing the font.\n * @private\n */\n get: function () {\n return this.pdfFontInternals;\n },\n enumerable: true,\n configurable: true\n });\n PdfFont.prototype.measureString = function (text, arg2, arg3, arg4, arg5) {\n if (typeof text === 'string' && typeof arg2 === 'undefined') {\n return this.measureString(text, null);\n }\n else if (typeof text === 'string' && (arg2 instanceof PdfStringFormat || arg2 == null) && typeof arg3 === 'undefined' && typeof arg4 === 'undefined') {\n var temparg2 = arg2;\n var charactersFitted = 0;\n var linesFilled = 0;\n return this.measureString(text, temparg2, charactersFitted, linesFilled);\n }\n else if (typeof text === 'string' && (arg2 instanceof PdfStringFormat || arg2 == null) && typeof arg3 === 'number' && typeof arg4 === 'number') {\n var temparg2 = arg2;\n return this.measureString(text, 0, temparg2, arg3, arg4);\n // } else if (typeof text === 'string' && typeof arg2 === 'number' && typeof arg3 === 'undefined') {\n // return this.measureString(text, arg2, null);\n // } else if (typeof text === 'string' && typeof arg2 === 'number' && (arg3 instanceof PdfStringFormat || arg3 == null) && typeof arg4 === 'undefined' && typeof arg5 === 'undefined') {\n // let temparg3 : PdfStringFormat = arg3 as PdfStringFormat;\n // let charactersFitted : number = 0;\n // let linesFilled : number = 0;\n // return this.measureString(text, arg2, temparg3, charactersFitted, linesFilled);\n }\n else if (typeof text === 'string' && typeof arg2 === 'number' && (arg3 instanceof PdfStringFormat || arg3 == null) && typeof arg4 === 'number' && typeof arg5 === 'number') {\n var layoutArea = new SizeF(arg2, 0);\n var temparg3 = arg3;\n return this.measureString(text, layoutArea, temparg3, arg4, arg5);\n // } else if (typeof text === 'string' && arg2 instanceof SizeF && typeof arg3 === 'undefined') {\n // return this.measureString(text, arg2, null);\n // } else if (typeof text === 'string' && arg2 instanceof SizeF && (arg3 instanceof PdfStringFormat || arg3 == null) && typeof arg4 === 'undefined' && typeof arg5 === 'undefined') {\n // let temparg3 : PdfStringFormat = arg3 as PdfStringFormat;\n // let charactersFitted : number = 0;\n // let linesFilled : number = 0;\n // return this.measureString(text, arg2, temparg3, charactersFitted, linesFilled);\n }\n else {\n if (text == null) {\n throw Error(\"ArgumentNullException(\\\"text\\\")\");\n }\n var temparg2 = arg2;\n var temparg3 = arg3;\n var layouter = new PdfStringLayouter();\n var result = layouter.layout(text, this, temparg3, temparg2, false, new SizeF(0, 0));\n // arg4 = (result.Remainder == null) ? text.length : text.length - result.Remainder.length;\n arg4 = text.length;\n arg5 = (result.empty) ? 0 : result.lines.length;\n return result.actualSize;\n }\n };\n /* tslint:enable */\n //IPdfCache Members\n /**\n * `Checks` whether the object is similar to another object.\n * @private\n */\n PdfFont.prototype.equalsTo = function (obj) {\n var result = this.equalsToFont(obj);\n return result;\n };\n /**\n * Returns `internals` of the object.\n * @private\n */\n PdfFont.prototype.getInternals = function () {\n return this.pdfFontInternals;\n };\n /**\n * Sets `internals` to the object.\n * @private\n */\n PdfFont.prototype.setInternals = function (internals) {\n if (internals == null) {\n throw new Error('ArgumentNullException:internals');\n }\n this.pdfFontInternals = internals;\n };\n /**\n * Sets the `style` of the font.\n * @private\n */\n PdfFont.prototype.setStyle = function (style) {\n this.fontStyle = style;\n };\n /**\n * Applies `settings` to the default line width.\n * @private\n */\n PdfFont.prototype.applyFormatSettings = function (line, format, width) {\n // if (line == null) {\n // throw new Error(`ArgumentNullException:line`);\n // }\n var realWidth = width;\n if (format != null && width > 0) {\n // Space among characters is not default.\n if (format.characterSpacing !== 0) {\n realWidth += (line.length - 1) * format.characterSpacing;\n }\n // Space among words is not default.\n if (format.wordSpacing !== 0) {\n var symbols = StringTokenizer.spaces;\n var whitespacesCount = StringTokenizer.getCharsCount(line, symbols);\n realWidth += whitespacesCount * format.wordSpacing;\n }\n }\n return realWidth;\n };\n //Constants\n /**\n * `Multiplier` of the symbol width.\n * @default 0.001\n * @private\n */\n PdfFont.charSizeMultiplier = 0.001;\n /**\n * `Synchronization` object.\n * @private\n */\n PdfFont.syncObject = new Object();\n return PdfFont;\n}());\nexport { PdfFont };\n","/**\n * public Enum for `CompositeFontType`.\n * @private\n */\nexport var ObjectStatus;\n(function (ObjectStatus) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n ObjectStatus[ObjectStatus[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Registered`.\n * @private\n */\n ObjectStatus[ObjectStatus[\"Registered\"] = 1] = \"Registered\";\n})(ObjectStatus || (ObjectStatus = {}));\n","/**\n * Used to `write a string` into output file.\n * @private\n */\nvar PdfWriter = /** @class */ (function () {\n /**\n * Initialize an instance of `PdfWriter` class.\n * @private\n */\n function PdfWriter(stream) {\n this.streamWriter = stream;\n }\n Object.defineProperty(PdfWriter.prototype, \"document\", {\n //properties\n /**\n * Gets and Sets the `document`.\n * @private\n */\n get: function () {\n return this.pdfDocument;\n },\n set: function (value) {\n this.pdfDocument = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfWriter.prototype, \"position\", {\n /**\n * Gets the `position`.\n * @private\n */\n get: function () {\n return this.streamWriter.buffer.size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfWriter.prototype, \"length\", {\n /**\n * Gets the `length` of the stream'.\n * @private\n */\n get: function () {\n return this.streamWriter.buffer.size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfWriter.prototype, \"stream\", {\n /**\n * Gets the `stream`.\n * @private\n */\n get: function () {\n var result = this.streamWriter;\n return result;\n },\n enumerable: true,\n configurable: true\n });\n //public Methods\n /**\n * `Writes the specified data`.\n * @private\n */\n PdfWriter.prototype.write = function (overload) {\n var data = [];\n var tempOverload = overload;\n this.streamWriter.write(tempOverload);\n };\n return PdfWriter;\n}());\nexport { PdfWriter };\n","/**\n * PdfMainObjectCollection.ts class for EJ2-PDF\n */\nimport { Dictionary } from './../collections/dictionary';\nimport { ObjectStatus } from './enum';\n/**\n * The collection of all `objects` within a PDF document.\n * @private\n */\nvar PdfMainObjectCollection = /** @class */ (function () {\n function PdfMainObjectCollection() {\n //Fields\n /**\n * The collection of the `indirect objects`.\n * @default []\n * @private\n */\n this.objectCollections = [];\n /**\n * The collection of the `Indirect objects`.\n * @default new Dictionary()\n * @private\n */\n this.mainObjectCollection = new Dictionary();\n /**\n * The collection of `primitive objects`.\n * @private\n */\n this.primitiveObjectCollection = new Dictionary();\n }\n Object.defineProperty(PdfMainObjectCollection.prototype, \"count\", {\n //Properties\n /**\n * Gets the `count`.\n * @private\n */\n get: function () {\n return this.objectCollections.length;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the value of `ObjectInfo` from object collection.\n * @private\n */\n PdfMainObjectCollection.prototype.items = function (index) {\n return this.objectCollections[index];\n };\n Object.defineProperty(PdfMainObjectCollection.prototype, \"outIsNew\", {\n //Methods\n /**\n * Specifies the value of `IsNew`.\n * @private\n */\n get: function () {\n return this.isNew;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Adds` the specified element.\n * @private\n */\n PdfMainObjectCollection.prototype.add = function (element) {\n var objInfo = new ObjectInfo(element);\n this.objectCollections.push(objInfo);\n if (!this.primitiveObjectCollection.containsKey(element)) {\n this.primitiveObjectCollection.setValue(element, this.objectCollections.length - 1);\n }\n element.position = this.index = this.objectCollections.length - 1;\n element.status = ObjectStatus.Registered;\n };\n /**\n * `Looks` through the collection for the object specified.\n * @private\n */\n PdfMainObjectCollection.prototype.lookFor = function (obj) {\n var index = -1;\n if (obj.position !== -1) {\n return obj.position;\n }\n if (this.primitiveObjectCollection.containsKey(obj) && this.count === this.primitiveObjectCollection.size()) {\n index = this.primitiveObjectCollection.getValue(obj);\n }\n else {\n for (var i = this.count - 1; i >= 0; i--) {\n var oi = this.objectCollections[i];\n if (oi.object === obj) {\n index = i;\n break;\n }\n }\n }\n return index;\n };\n /**\n * Gets the `reference of the object`.\n * @private\n */\n PdfMainObjectCollection.prototype.getReference = function (index, isNew) {\n this.index = this.lookFor(index);\n var reference;\n this.isNew = false;\n var oi = this.objectCollections[this.index];\n reference = oi.reference;\n var obj = { reference: reference, wasNew: isNew };\n return obj;\n };\n /**\n * Tries to set the `reference to the object`.\n * @private\n */\n PdfMainObjectCollection.prototype.trySetReference = function (obj, reference, found) {\n var result = true;\n found = true;\n this.index = this.lookFor(obj);\n var oi = this.objectCollections[this.index];\n oi.setReference(reference);\n return result;\n };\n PdfMainObjectCollection.prototype.destroy = function () {\n for (var _i = 0, _a = this.objectCollections; _i < _a.length; _i++) {\n var obj = _a[_i];\n if (obj !== undefined) {\n obj.pdfObject.position = -1;\n obj.pdfObject.isSaving = undefined;\n obj.pdfObject.objectCollectionIndex = undefined;\n obj.pdfObject.position = undefined;\n }\n }\n this.objectCollections = [];\n this.mainObjectCollection = new Dictionary();\n this.primitiveObjectCollection = new Dictionary();\n };\n return PdfMainObjectCollection;\n}());\nexport { PdfMainObjectCollection };\nvar ObjectInfo = /** @class */ (function () {\n function ObjectInfo(obj, reference) {\n this.pdfObject = obj;\n this.pdfReference = reference;\n }\n Object.defineProperty(ObjectInfo.prototype, \"object\", {\n //Properties\n /**\n * Gets the `object`.\n * @private\n */\n get: function () {\n return this.pdfObject;\n },\n set: function (value) {\n this.pdfObject = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ObjectInfo.prototype, \"reference\", {\n /**\n * Gets the `reference`.\n * @private\n */\n get: function () {\n return this.pdfReference;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Sets the `reference`.\n * @private\n */\n ObjectInfo.prototype.setReference = function (reference) {\n this.pdfReference = reference;\n };\n return ObjectInfo;\n}());\nexport { ObjectInfo };\n","/**\n * public Enum for `ObjectType`.\n * @private\n */\nexport var ObjectType;\n(function (ObjectType) {\n /**\n * Specifies the type of `Free`.\n * @private\n */\n ObjectType[ObjectType[\"Free\"] = 0] = \"Free\";\n /**\n * Specifies the type of `Normal`.\n * @private\n */\n ObjectType[ObjectType[\"Normal\"] = 1] = \"Normal\";\n /**\n * Specifies the type of `Packed`.\n * @private\n */\n ObjectType[ObjectType[\"Packed\"] = 2] = \"Packed\";\n})(ObjectType || (ObjectType = {}));\n","import { StreamWriter } from '@syncfusion/ej2-file-utils';\nimport { Encoding } from '@syncfusion/ej2-file-utils';\nimport { PdfDocument } from './pdf-document';\n/**\n * `PdfDocumentBase` class represent common properties of PdfDocument classes.\n * @private\n */\nvar PdfDocumentBase = /** @class */ (function () {\n function PdfDocumentBase(document) {\n /**\n * If the stream is copied, then it specifies true.\n * @private\n */\n this.isStreamCopied = false;\n if (document instanceof PdfDocument) {\n this.document = document;\n }\n }\n Object.defineProperty(PdfDocumentBase.prototype, \"pdfObjects\", {\n //Prpperties\n /**\n * Gets the `PDF objects` collection, which stores all objects and references to it..\n * @private\n */\n get: function () {\n return this.objects;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentBase.prototype, \"crossTable\", {\n /**\n * Gets the `cross-reference` table.\n * @private\n */\n get: function () {\n return this.pdfCrossTable;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentBase.prototype, \"currentSavingObj\", {\n /**\n * Gets or sets the current saving `object number`.\n * @private\n */\n get: function () {\n return this.currentSavingObject;\n },\n set: function (value) {\n this.currentSavingObject = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentBase.prototype, \"catalog\", {\n /**\n * Gets the PDF document `catalog`.\n * @private\n */\n get: function () {\n return this.pdfCatalog;\n },\n set: function (value) {\n this.pdfCatalog = value;\n },\n enumerable: true,\n configurable: true\n });\n //Public methods\n /**\n * Sets the `main object collection`.\n * @private\n */\n PdfDocumentBase.prototype.setMainObjectCollection = function (mainObjectCollection) {\n this.objects = mainObjectCollection;\n };\n /**\n * Sets the `cross table`.\n * @private\n */\n PdfDocumentBase.prototype.setCrossTable = function (cTable) {\n this.pdfCrossTable = cTable;\n };\n /**\n * Sets the `catalog`.\n * @private\n */\n PdfDocumentBase.prototype.setCatalog = function (catalog) {\n this.pdfCatalog = catalog;\n };\n PdfDocumentBase.prototype.save = function (filename) {\n var _this = this;\n var encoding = new Encoding(true);\n var SW = new StreamWriter(encoding);\n if (typeof filename === 'undefined') {\n var encoding_1 = new Encoding(true);\n var SW_1 = new StreamWriter(encoding_1);\n return new Promise(function (resolve, reject) {\n /* tslint:disable-next-line:no-any */\n var obj = {};\n obj.blobData = new Blob([_this.document.docSave(SW_1, true)], { type: 'application/pdf' });\n resolve(obj);\n });\n }\n else {\n this.document.docSave(SW, filename, true);\n }\n };\n /**\n * `Clone` of parent object - PdfDocument.\n * @private\n */\n PdfDocumentBase.prototype.clone = function () {\n return this.document;\n };\n return PdfDocumentBase;\n}());\nexport { PdfDocumentBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfCatalog.ts class for EJ2-PDF\n */\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\n/**\n * `PdfCatalog` class represents internal catalog of the Pdf document.\n * @private\n */\nvar PdfCatalog = /** @class */ (function (_super) {\n __extends(PdfCatalog, _super);\n //constructor\n /**\n * Initializes a new instance of the `PdfCatalog` class.\n * @private\n */\n function PdfCatalog() {\n var _this = _super.call(this) || this;\n //fields\n /**\n * Internal variable to store collection of `sections`.\n * @default null\n * @private\n */\n _this.sections = null;\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @private\n */\n _this.tempDictionaryProperties = new DictionaryProperties();\n _this.items.setValue(new DictionaryProperties().type, new PdfName('Catalog'));\n return _this;\n }\n Object.defineProperty(PdfCatalog.prototype, \"pages\", {\n //Properties\n /**\n * Gets or sets the sections, which contain `pages`.\n * @private\n */\n get: function () {\n return this.sections;\n },\n set: function (value) {\n var dictionary = value.element;\n // if (this.sections !== value) {\n // this.sections = value;\n // this.Items.setValue(this.tempDictionaryProperties.pages, new PdfReferenceHolder(value));\n // }\n this.sections = value;\n this.items.setValue(this.tempDictionaryProperties.pages, new PdfReferenceHolder(value));\n },\n enumerable: true,\n configurable: true\n });\n return PdfCatalog;\n}(PdfDictionary));\nexport { PdfCatalog };\n","/**\n * public Enum for `PdfPageOrientation`.\n * @private\n */\nexport var PdfPageOrientation;\n(function (PdfPageOrientation) {\n /**\n * Specifies the type of `Portrait`.\n * @private\n */\n PdfPageOrientation[PdfPageOrientation[\"Portrait\"] = 0] = \"Portrait\";\n /**\n * Specifies the type of `Landscape`.\n * @private\n */\n PdfPageOrientation[PdfPageOrientation[\"Landscape\"] = 1] = \"Landscape\";\n})(PdfPageOrientation || (PdfPageOrientation = {}));\n/**\n * public Enum for `PdfPageRotateAngle`.\n * @private\n */\nexport var PdfPageRotateAngle;\n(function (PdfPageRotateAngle) {\n /**\n * Specifies the type of `RotateAngle0`.\n * @private\n */\n PdfPageRotateAngle[PdfPageRotateAngle[\"RotateAngle0\"] = 0] = \"RotateAngle0\";\n /**\n * Specifies the type of `RotateAngle90`.\n * @private\n */\n PdfPageRotateAngle[PdfPageRotateAngle[\"RotateAngle90\"] = 1] = \"RotateAngle90\";\n /**\n * Specifies the type of `RotateAngle180`.\n * @private\n */\n PdfPageRotateAngle[PdfPageRotateAngle[\"RotateAngle180\"] = 2] = \"RotateAngle180\";\n /**\n * Specifies the type of `RotateAngle270`.\n * @private\n */\n PdfPageRotateAngle[PdfPageRotateAngle[\"RotateAngle270\"] = 3] = \"RotateAngle270\";\n})(PdfPageRotateAngle || (PdfPageRotateAngle = {}));\n/**\n * public Enum for `PdfNumberStyle`.\n * @private\n */\nexport var PdfNumberStyle;\n(function (PdfNumberStyle) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Numeric`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"Numeric\"] = 1] = \"Numeric\";\n /**\n * Specifies the type of `LowerLatin`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"LowerLatin\"] = 2] = \"LowerLatin\";\n /**\n * Specifies the type of `LowerRoman`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"LowerRoman\"] = 3] = \"LowerRoman\";\n /**\n * Specifies the type of `UpperLatin`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"UpperLatin\"] = 4] = \"UpperLatin\";\n /**\n * Specifies the type of `UpperRoman`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"UpperRoman\"] = 5] = \"UpperRoman\";\n})(PdfNumberStyle || (PdfNumberStyle = {}));\n/**\n * public Enum for `PdfDockStyle`.\n * @private\n */\nexport var PdfDockStyle;\n(function (PdfDockStyle) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Bottom`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Bottom\"] = 1] = \"Bottom\";\n /**\n * Specifies the type of `Top`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Top\"] = 2] = \"Top\";\n /**\n * Specifies the type of `Left`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Left\"] = 3] = \"Left\";\n /**\n * Specifies the type of `Right`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Right\"] = 4] = \"Right\";\n /**\n * Specifies the type of `Fill`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Fill\"] = 5] = \"Fill\";\n})(PdfDockStyle || (PdfDockStyle = {}));\n/**\n * public Enum for `PdfAlignmentStyle`.\n * @private\n */\nexport var PdfAlignmentStyle;\n(function (PdfAlignmentStyle) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `TopLeft`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"TopLeft\"] = 1] = \"TopLeft\";\n /**\n * Specifies the type of `TopCenter`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"TopCenter\"] = 2] = \"TopCenter\";\n /**\n * Specifies the type of `TopRight`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"TopRight\"] = 3] = \"TopRight\";\n /**\n * Specifies the type of `MiddleLeft`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"MiddleLeft\"] = 4] = \"MiddleLeft\";\n /**\n * Specifies the type of `MiddleCenter`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"MiddleCenter\"] = 5] = \"MiddleCenter\";\n /**\n * Specifies the type of `MiddleRight`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"MiddleRight\"] = 6] = \"MiddleRight\";\n /**\n * Specifies the type of `BottomLeft`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"BottomLeft\"] = 7] = \"BottomLeft\";\n /**\n * Specifies the type of `BottomCenter`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"BottomCenter\"] = 8] = \"BottomCenter\";\n /**\n * Specifies the type of `BottomRight`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"BottomRight\"] = 9] = \"BottomRight\";\n})(PdfAlignmentStyle || (PdfAlignmentStyle = {}));\n/**\n * public Enum for `TemplateType`.\n * @private\n */\nexport var TemplateType;\n(function (TemplateType) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n TemplateType[TemplateType[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Top`.\n * @private\n */\n TemplateType[TemplateType[\"Top\"] = 1] = \"Top\";\n /**\n * Specifies the type of `Bottom`.\n * @private\n */\n TemplateType[TemplateType[\"Bottom\"] = 2] = \"Bottom\";\n /**\n * Specifies the type of `Left`.\n * @private\n */\n TemplateType[TemplateType[\"Left\"] = 3] = \"Left\";\n /**\n * Specifies the type of `Right`.\n * @private\n */\n TemplateType[TemplateType[\"Right\"] = 4] = \"Right\";\n})(TemplateType || (TemplateType = {}));\n","import { ObjectStatus } from './../input-output/enum';\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { DictionaryProperties } from './pdf-dictionary-properties';\nimport { Operators } from './pdf-operators';\nimport { Dictionary } from './../collections/dictionary';\nimport { PdfReference } from './../primitives/pdf-reference';\nimport { ObjectType } from './cross-table';\nimport { PdfStream } from './../primitives/pdf-stream';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfCatalog } from './../document/pdf-catalog';\n/**\n * `PdfCrossTable` is responsible for intermediate level parsing\n * and savingof a PDF document.\n * @private\n */\nvar PdfCrossTable = /** @class */ (function () {\n function PdfCrossTable() {\n /**\n * The modified `objects` that should be saved.\n * @private\n */\n this.objects = new Dictionary();\n /**\n * Holds `maximal generation number` or offset to object.\n * @default 0\n * @private\n */\n this.maxGenNumIndex = 0;\n /**\n * The `number of the objects`.\n * @default 0\n * @private\n */\n this.objectCount = 0;\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @default new PdfDictionaryProperties()\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n }\n Object.defineProperty(PdfCrossTable.prototype, \"isMerging\", {\n //Properties\n /**\n * Gets or sets if the document `is merged`.\n * @private\n */\n get: function () {\n return this.merging;\n },\n set: function (value) {\n this.merging = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"trailer\", {\n /**\n * Gets the `trailer`.\n * @private\n */\n get: function () {\n if (this.internalTrailer == null) {\n this.internalTrailer = new PdfStream();\n }\n return this.internalTrailer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"document\", {\n /**\n * Gets or sets the main `PdfDocument` class instance.\n * @private\n */\n get: function () {\n return this.pdfDocument;\n },\n set: function (value) {\n this.pdfDocument = value;\n this.items = this.pdfDocument.pdfObjects;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"pdfObjects\", {\n /**\n * Gets the catched `PDF object` main collection.\n * @private\n */\n get: function () {\n return this.items;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"objectCollection\", {\n /**\n * Gets the `object collection`.\n * @private\n */\n get: function () {\n return this.pdfDocument.pdfObjects;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"count\", {\n /**\n * Gets or sets the `number of the objects` within the document.\n * @private\n */\n get: function () {\n return this.objectCount;\n },\n set: function (value) {\n this.objectCount = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"nextObjNumber\", {\n /**\n * Returns `next available object number`.\n * @private\n */\n get: function () {\n this.count = this.count + 1;\n return this.count;\n },\n enumerable: true,\n configurable: true\n });\n PdfCrossTable.prototype.save = function (writer, filename) {\n this.saveHead(writer);\n var state = false;\n this.mappedReferences = null;\n this.objects.clear();\n this.markTrailerReferences();\n this.saveObjects(writer);\n var saveCount = this.count;\n var xrefPos = writer.position;\n this.registerObject(0, new PdfReference(0, -1), true);\n var prevXRef = 0;\n writer.write(Operators.xref);\n writer.write(Operators.newLine);\n this.saveSections(writer);\n this.saveTrailer(writer, this.count, prevXRef);\n this.saveTheEndess(writer, xrefPos);\n this.count = saveCount;\n for (var i = 0; i < this.objectCollection.count; ++i) {\n var oi = this.objectCollection.items(i);\n oi.object.isSaving = false;\n }\n if (typeof filename === 'undefined') {\n return writer.stream.buffer;\n }\n else {\n writer.stream.save(filename);\n }\n };\n /**\n * `Saves the endess` of the file.\n * @private\n */\n PdfCrossTable.prototype.saveTheEndess = function (writer, xrefPos) {\n writer.write(Operators.newLine + Operators.startxref + Operators.newLine);\n writer.write(xrefPos.toString() + Operators.newLine);\n writer.write(Operators.eof + Operators.newLine);\n };\n /**\n * `Saves the new trailer` dictionary.\n * @private\n */\n PdfCrossTable.prototype.saveTrailer = function (writer, count, prevXRef) {\n writer.write(Operators.trailer + Operators.newLine);\n // Save the dictionary.\n var trailer = this.trailer;\n trailer.items.setValue(this.dictionaryProperties.size, new PdfNumber(this.objectCount + 1));\n trailer = new PdfDictionary(trailer); // Make it real dictionary.\n trailer.setEncrypt(false);\n trailer.save(writer);\n };\n /**\n * `Saves the xref section`.\n * @private\n */\n PdfCrossTable.prototype.saveSections = function (writer) {\n var objectNum = 0;\n var count = 0;\n do {\n count = this.prepareSubsection(objectNum);\n this.saveSubsection(writer, objectNum, count);\n objectNum += count;\n } while (count !== 0);\n };\n /**\n * `Saves a subsection`.\n * @private\n */\n PdfCrossTable.prototype.saveSubsection = function (writer, objectNum, count) {\n if (count <= 0 || objectNum >= this.count) {\n return;\n }\n var subsectionHead = '{0} {1}{2}';\n writer.write(objectNum + ' ' + (count + 1) + Operators.newLine);\n for (var i = objectNum; i <= objectNum + count; ++i) {\n var obj = this.objects.getValue(i);\n var str = '';\n if (obj.type === ObjectType.Free) {\n str = this.getItem(obj.offset, 65535, true);\n }\n else {\n str = this.getItem(obj.offset, obj.generation, false);\n }\n writer.write(str);\n }\n };\n /**\n * Generates string for `xref table item`.\n * @private\n */\n PdfCrossTable.prototype.getItem = function (offset, genNumber, isFree) {\n var returnString = '';\n var addOffsetLength = 10 - offset.toString().length;\n if (genNumber <= 0) {\n genNumber = 0;\n }\n var addGenNumberLength = (5 - genNumber.toString().length) <= 0 ? 0 : (5 - genNumber.toString().length);\n for (var index = 0; index < addOffsetLength; index++) {\n returnString = returnString + '0';\n }\n returnString = returnString + offset.toString() + ' ';\n for (var index = 0; index < addGenNumberLength; index++) {\n returnString = returnString + '0';\n }\n returnString = returnString + genNumber.toString() + ' ';\n returnString = returnString + ((isFree) ? Operators.f : Operators.n) + Operators.newLine;\n return returnString;\n };\n /**\n * `Prepares a subsection` of the current section within the cross-reference table.\n * @private\n */\n PdfCrossTable.prototype.prepareSubsection = function (objectNum) {\n var count = 0;\n var i;\n var total = this.count;\n for (var k = 0; k < this.document.pdfObjects.count; k++) {\n var reference = this.document.pdfObjects.items(k).reference;\n var refString = reference.toString();\n var refArray = refString.split(' ');\n }\n if (objectNum >= total) {\n return count;\n }\n // search for first changed indirect object.\n for (i = objectNum; i < total; ++i) {\n break;\n }\n objectNum = i;\n // look up for all indirect objects in one subsection.\n for (; i < total; ++i) {\n ++count;\n }\n return count;\n };\n /**\n * `Marks the trailer references` being saved.\n * @private\n */\n PdfCrossTable.prototype.markTrailerReferences = function () {\n var tempArray;\n var keys = this.trailer.items.keys();\n var values = this.trailer.items.values();\n };\n /**\n * `Saves the head`.\n * @private\n */\n PdfCrossTable.prototype.saveHead = function (writer) {\n var version = this.generateFileVersion(writer.document);\n writer.write('%PDF-' + version);\n writer.write(Operators.newLine);\n };\n /**\n * Generates the `version` of the file.\n * @private\n */\n PdfCrossTable.prototype.generateFileVersion = function (document) {\n var iVersion = 4;\n var version = '1.' + iVersion.toString();\n return version;\n };\n PdfCrossTable.prototype.getReference = function (obj, bNew) {\n if (typeof bNew === 'undefined') {\n var wasNew = false;\n return this.getReference(obj, wasNew);\n }\n else {\n //code splitted for reducing lines of code exceeds 100.\n return this.getSubReference(obj, bNew);\n }\n };\n /**\n * Retrieves the `reference` of the object given.\n * @private\n */\n PdfCrossTable.prototype.getSubReference = function (obj, bNew) {\n var isNew = false;\n var wasNew;\n var reference = null;\n // if (obj.IsSaving) {\n if (this.items.count > 0 && obj.objectCollectionIndex > 0 && this.items.count > obj.objectCollectionIndex - 1) {\n var tempObj = this.document.pdfObjects.getReference(obj, wasNew);\n reference = tempObj.reference;\n wasNew = tempObj.wasNew;\n }\n if (reference == null) {\n if (obj.status === ObjectStatus.Registered) {\n wasNew = false;\n }\n else {\n wasNew = true;\n }\n }\n else {\n wasNew = false;\n }\n // need to add mapped reference code\n if (reference == null) {\n var objnumber = this.nextObjNumber;\n reference = new PdfReference(objnumber, 0);\n var found = void 0;\n if (wasNew) {\n this.document.pdfObjects.add(obj);\n this.document.pdfObjects.trySetReference(obj, reference, found);\n var tempIndex = this.document.pdfObjects.count - 1;\n var tempkey = this.document.pdfObjects.objectCollections[tempIndex].reference.objNumber;\n var tempvalue = this.document.pdfObjects.objectCollections[this.document.pdfObjects.count - 1];\n this.document.pdfObjects.mainObjectCollection.setValue(tempkey, tempvalue);\n obj.position = -1;\n }\n else {\n this.document.pdfObjects.trySetReference(obj, reference, found);\n }\n obj.objectCollectionIndex = reference.objNumber;\n obj.status = ObjectStatus.None;\n isNew = true;\n }\n bNew = isNew || this.bForceNew;\n return reference;\n };\n /**\n * `Saves all objects` in the collection.\n * @private\n */\n PdfCrossTable.prototype.saveObjects = function (writer) {\n var objectCollection = this.objectCollection;\n for (var i = 0; i < objectCollection.count; ++i) {\n var oi = objectCollection.items(i);\n var obj = oi.object;\n obj.isSaving = true;\n this.saveIndirectObject(obj, writer);\n }\n };\n /**\n * `Saves indirect object`.\n * @private\n */\n PdfCrossTable.prototype.saveIndirectObject = function (obj, writer) {\n var reference = this.getReference(obj);\n if (obj instanceof PdfCatalog) {\n this.trailer.items.setValue(this.dictionaryProperties.root, reference);\n }\n // NOTE : This is needed for correct string objects encryption.\n this.pdfDocument.currentSavingObj = reference;\n var tempArchive = false;\n tempArchive = obj.getArchive();\n var allowedType = !((obj instanceof PdfStream) || !tempArchive || (obj instanceof PdfCatalog));\n var sigFlag = false;\n this.registerObject(writer.position, reference);\n this.doSaveObject(obj, reference, writer);\n };\n /**\n * Performs `real saving` of the save object.\n * @private\n */\n PdfCrossTable.prototype.doSaveObject = function (obj, reference, writer) {\n var correctPosition = writer.length;\n writer.write(reference.objNumber.toString());\n writer.write(Operators.whiteSpace);\n writer.write(reference.genNumber.toString());\n writer.write(Operators.whiteSpace);\n writer.write(Operators.obj);\n writer.write(Operators.newLine);\n obj.save(writer);\n var stream = writer.stream;\n writer.write(Operators.endObj);\n writer.write(Operators.newLine);\n };\n PdfCrossTable.prototype.registerObject = function (offset, reference, free) {\n if (typeof free === 'boolean') {\n // Register the object by its number.\n this.objects.setValue(reference.objNumber, new RegisteredObject(offset, reference, free));\n this.maxGenNumIndex = Math.max(this.maxGenNumIndex, reference.genNumber);\n }\n else if (typeof free === 'undefined') {\n // Register the object by its number.\n this.objects.setValue(reference.objNumber, new RegisteredObject(offset, reference));\n this.maxGenNumIndex = Math.max(this.maxGenNumIndex, reference.genNumber);\n }\n };\n /**\n * `Dereferences` the specified primitive object.\n * @private\n */\n PdfCrossTable.dereference = function (obj) {\n var rh = obj;\n if (rh != null) {\n obj = rh.object;\n }\n return obj;\n };\n return PdfCrossTable;\n}());\nexport { PdfCrossTable };\nvar RegisteredObject = /** @class */ (function () {\n function RegisteredObject(offset, reference, free) {\n if (typeof free === 'undefined') {\n var tempOffset = offset;\n this.offsetNumber = tempOffset;\n var tempReference = reference;\n this.generation = tempReference.genNumber;\n this.object = tempReference.objNumber;\n this.type = ObjectType.Normal;\n }\n else {\n var tempOffset = offset;\n var tempReference = reference;\n this.constructor(tempOffset, tempReference);\n var tempFree = free;\n this.type = ObjectType.Free;\n }\n }\n Object.defineProperty(RegisteredObject.prototype, \"objectNumber\", {\n //Properties\n /**\n * Gets the `object number`.\n * @private\n */\n get: function () {\n return this.object;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RegisteredObject.prototype, \"offset\", {\n /**\n * Gets the `offset`.\n * @private\n */\n get: function () {\n var result;\n result = this.offsetNumber;\n return result;\n },\n enumerable: true,\n configurable: true\n });\n return RegisteredObject;\n}());\nexport { RegisteredObject };\n","/**\n * PdfPageSize.ts class for EJ2-PDF\n */\nimport { SizeF } from './../drawing/pdf-drawing';\n/**\n * Represents information about various predefined `page sizes`.\n */\nvar PdfPageSize = /** @class */ (function () {\n //constructor\n /**\n * Initialize an instance for `PdfPageSize` class.\n * @private\n */\n function PdfPageSize() {\n // \n }\n /**\n * Specifies the size of `letter`.\n * @private\n */\n PdfPageSize.letter = new SizeF(612, 792);\n /**\n * Specifies the size of `note`.\n * @private\n */\n PdfPageSize.note = new SizeF(540, 720);\n /**\n * Specifies the size of `legal`.\n * @private\n */\n PdfPageSize.legal = new SizeF(612, 1008);\n /**\n * Specifies the size of `a0`.\n * @private\n */\n PdfPageSize.a0 = new SizeF(2380, 3368);\n /**\n * Specifies the size of `a1`.\n * @private\n */\n PdfPageSize.a1 = new SizeF(1684, 2380);\n /**\n * Specifies the size of `a2`.\n * @private\n */\n PdfPageSize.a2 = new SizeF(1190, 1684);\n /**\n * Specifies the size of `a3`.\n * @private\n */\n PdfPageSize.a3 = new SizeF(842, 1190);\n /**\n * Specifies the size of `a4`.\n * @private\n */\n PdfPageSize.a4 = new SizeF(595, 842);\n /**\n * Specifies the size of `a5`.\n * @private\n */\n PdfPageSize.a5 = new SizeF(421, 595);\n /**\n * Specifies the size of `a6`.\n * @private\n */\n PdfPageSize.a6 = new SizeF(297, 421);\n /**\n * Specifies the size of `a7`.\n * @private\n */\n PdfPageSize.a7 = new SizeF(210, 297);\n /**\n * Specifies the size of `a8`.\n * @private\n */\n PdfPageSize.a8 = new SizeF(148, 210);\n /**\n * Specifies the size of `a9`.\n * @private\n */\n PdfPageSize.a9 = new SizeF(105, 148);\n /**\n * Specifies the size of `a10`.\n * @private\n */\n PdfPageSize.a10 = new SizeF(74, 105);\n /**\n * Specifies the size of `b0`.\n * @private\n */\n PdfPageSize.b0 = new SizeF(2836, 4008);\n /**\n * Specifies the size of `b1`.\n * @private\n */\n PdfPageSize.b1 = new SizeF(2004, 2836);\n /**\n * Specifies the size of `b2`.\n * @private\n */\n PdfPageSize.b2 = new SizeF(1418, 2004);\n /**\n * Specifies the size of `b3`.\n * @private\n */\n PdfPageSize.b3 = new SizeF(1002, 1418);\n /**\n * Specifies the size of `b4`.\n * @private\n */\n PdfPageSize.b4 = new SizeF(709, 1002);\n /**\n * Specifies the size of `b5`.\n * @private\n */\n PdfPageSize.b5 = new SizeF(501, 709);\n /**\n * Specifies the size of `archE`.\n * @private\n */\n PdfPageSize.archE = new SizeF(2592, 3456);\n /**\n * Specifies the size of `archD`.\n * @private\n */\n PdfPageSize.archD = new SizeF(1728, 2592);\n /**\n * Specifies the size of `archC`.\n * @private\n */\n PdfPageSize.archC = new SizeF(1296, 1728);\n /**\n * Specifies the size of `archB`.\n * @private\n */\n PdfPageSize.archB = new SizeF(864, 1296);\n /**\n * Specifies the size of `archA`.\n * @private\n */\n PdfPageSize.archA = new SizeF(648, 864);\n /**\n * Specifies the size of `flsa`.\n * @private\n */\n PdfPageSize.flsa = new SizeF(612, 936);\n /**\n * Specifies the size of `halfLetter`.\n * @private\n */\n PdfPageSize.halfLetter = new SizeF(396, 612);\n /**\n * Specifies the size of `letter11x17`.\n * @private\n */\n PdfPageSize.letter11x17 = new SizeF(792, 1224);\n /**\n * Specifies the size of `ledger`.\n * @private\n */\n PdfPageSize.ledger = new SizeF(1224, 792);\n return PdfPageSize;\n}());\nexport { PdfPageSize };\n","/**\n * PdfMargins.ts class for EJ2-PDF\n * A class representing PDF page margins.\n */\nvar PdfMargins = /** @class */ (function () {\n /**\n * Initializes a new instance of the `PdfMargins` class.\n * @private\n */\n function PdfMargins() {\n /**\n * Represents the `Default Page Margin` value.\n * @default 0.0\n * @private\n */\n this.pdfMargin = 40.0;\n this.setMargins(this.pdfMargin);\n }\n Object.defineProperty(PdfMargins.prototype, \"left\", {\n //Properties\n /**\n * Gets or sets the `left margin` size.\n * @private\n */\n get: function () {\n return this.leftMargin;\n },\n set: function (value) {\n this.leftMargin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfMargins.prototype, \"top\", {\n /**\n * Gets or sets the `top margin` size.\n * @private\n */\n get: function () {\n return this.topMargin;\n },\n set: function (value) {\n this.topMargin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfMargins.prototype, \"right\", {\n /**\n * Gets or sets the `right margin` size.\n * @private\n */\n get: function () {\n return this.rightMargin;\n },\n set: function (value) {\n this.rightMargin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfMargins.prototype, \"bottom\", {\n /**\n * Gets or sets the `bottom margin` size.\n * @private\n */\n get: function () {\n return this.bottomMargin;\n },\n set: function (value) {\n this.bottomMargin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfMargins.prototype, \"all\", {\n /**\n * Sets the `margins`.\n * @private\n */\n set: function (value) {\n this.setMargins(value);\n },\n enumerable: true,\n configurable: true\n });\n PdfMargins.prototype.setMargins = function (margin1, margin2, margin3, margin4) {\n if (typeof margin2 === 'undefined') {\n this.leftMargin = this.topMargin = this.rightMargin = this.bottomMargin = margin1;\n }\n else {\n if (typeof margin3 === 'undefined') {\n this.leftMargin = this.rightMargin = margin1;\n this.bottomMargin = this.topMargin = margin2;\n }\n else {\n this.leftMargin = margin1;\n this.topMargin = margin2;\n this.rightMargin = margin3;\n this.bottomMargin = margin4;\n }\n }\n };\n /**\n * `Clones` the object.\n * @private\n */\n PdfMargins.prototype.clone = function () {\n return this;\n };\n return PdfMargins;\n}());\nexport { PdfMargins };\n","/**\n * ImageDecoder class\n */\nimport { ByteArray } from './byte-array';\nimport { PdfStream } from './../../primitives/pdf-stream';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { PdfName } from './../../primitives/pdf-name';\nimport { PdfNumber } from './../../primitives/pdf-number';\nimport { PdfBoolean } from './../../primitives/pdf-boolean';\nimport { PdfDictionary } from './../../primitives/pdf-dictionary';\n/**\n * Specifies the image `format`.\n * @private\n */\nexport var ImageFormat;\n(function (ImageFormat) {\n /**\n * Specifies the type of `Unknown`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Unknown\"] = 0] = \"Unknown\";\n /**\n * Specifies the type of `Bmp`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Bmp\"] = 1] = \"Bmp\";\n /**\n * Specifies the type of `Emf`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Emf\"] = 2] = \"Emf\";\n /**\n * Specifies the type of `Gif`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Gif\"] = 3] = \"Gif\";\n /**\n * Specifies the type of `Jpeg`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Jpeg\"] = 4] = \"Jpeg\";\n /**\n * Specifies the type of `Png`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Png\"] = 5] = \"Png\";\n /**\n * Specifies the type of `Wmf`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Wmf\"] = 6] = \"Wmf\";\n /**\n * Specifies the type of `Icon`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Icon\"] = 7] = \"Icon\";\n})(ImageFormat || (ImageFormat = {}));\n/**\n * `Decode the image stream`.\n * @private\n */\nvar ImageDecoder = /** @class */ (function () {\n /**\n * Initialize the new instance for `image-decoder` class.\n * @private\n */\n function ImageDecoder(stream) {\n /**\n * Specifies `format` of image.\n * @hidden\n * @private\n */\n this.mFormat = ImageFormat.Unknown;\n /**\n * `Bits per component`.\n * @default 8\n * @hidden\n * @private\n */\n this.mbitsPerComponent = 8;\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @hidden\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n this.mStream = stream;\n this.initialize();\n }\n Object.defineProperty(ImageDecoder.prototype, \"height\", {\n /**\n * Gets the `height` of image.\n * @hidden\n * @private\n */\n get: function () {\n return this.mHeight;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"width\", {\n /**\n * Gets the `width` of image.\n * @hidden\n * @private\n */\n get: function () {\n return this.mWidth;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"bitsPerComponent\", {\n /**\n * Gets `bits per component`.\n * @hidden\n * @private\n */\n get: function () {\n return this.mbitsPerComponent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"size\", {\n /**\n * Gets the `size` of an image data.\n * @hidden\n * @private\n */\n get: function () {\n return this.mImageData.count;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"imageData\", {\n /**\n * Gets the value of an `image data`.\n * @hidden\n * @private\n */\n get: function () {\n return this.mImageData;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"imageDataAsNumberArray\", {\n /**\n * Gets the value of an `image data as number array`.\n * @hidden\n * @private\n */\n get: function () {\n return this.mImageData.internalBuffer.buffer;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Initialize` image data and image stream.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.initialize = function () {\n if (this.mFormat === ImageFormat.Unknown && this.checkIfJpeg()) {\n this.mFormat = ImageFormat.Jpeg;\n this.parseJpegImage();\n }\n this.reset();\n this.mImageData = new ByteArray(this.mStream.count);\n this.mStream.read(this.mImageData, 0, this.mImageData.count);\n };\n /**\n * `Reset` stream position into 0.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.reset = function () {\n this.mStream.position = 0;\n };\n /**\n * `Parse` Jpeg image.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.parseJpegImage = function () {\n this.reset();\n var imgData = new ByteArray(this.mStream.count);\n this.mStream.read(imgData, 0, imgData.count);\n var i = 4;\n /* tslint:disable */\n if (String.fromCharCode(imgData.getBuffer(i + 2)) === 'J' && String.fromCharCode(imgData.getBuffer(i + 3)) === 'F' && String.fromCharCode(imgData.getBuffer(i + 4)) === 'I' && String.fromCharCode(imgData.getBuffer(i + 5)) === 'F' && imgData.getBuffer(i + 6) === 0) {\n var length_1 = imgData.getBuffer(i) * 256 + imgData.getBuffer(i + 1);\n while (i + length_1 < imgData.count) {\n i += length_1;\n if (imgData.getBuffer(i + 1) === 192) {\n this.mHeight = imgData.getBuffer(i + 5) * 256 + imgData.getBuffer(i + 6);\n this.mWidth = imgData.getBuffer(i + 7) * 256 + imgData.getBuffer(i + 8);\n return;\n }\n else {\n i += 2;\n length_1 = imgData.getBuffer(i) * 256 + imgData.getBuffer(i + 1);\n }\n }\n }\n /* tslint:enable */\n };\n Object.defineProperty(ImageDecoder.prototype, \"format\", {\n /**\n * Gets the image `format`.\n * @private\n * @hidden\n */\n get: function () {\n return this.mFormat;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Checks if JPG`.\n * @private\n * @hidden\n */\n ImageDecoder.prototype.checkIfJpeg = function () {\n this.reset();\n for (var i = 0; i < ImageDecoder.mJpegHeader.length; i++) {\n if (ImageDecoder.mJpegHeader[i] !== this.mStream.readByte(i)) {\n return false;\n }\n this.mStream.position++;\n }\n return true;\n };\n /**\n * Return image `dictionary`.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.getImageDictionary = function () {\n if (this.mFormat === ImageFormat.Jpeg) {\n var tempArrayBuffer = this.imageData.internalBuffer.length;\n this.imageStream = new PdfStream();\n this.imageStream.isImage = true;\n var tempString = '';\n var decodedString = '';\n for (var i = 0; i < this.imageDataAsNumberArray.byteLength; i++) {\n tempString += String.fromCharCode(null, this.mStream.readByte(i));\n }\n for (var i = 0; i < tempString.length; i++) {\n if (i % 2 !== 0) {\n decodedString += tempString[i];\n }\n }\n this.imageStream.data = [decodedString];\n this.imageStream.compress = false;\n this.imageStream.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.xObject));\n this.imageStream.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.image));\n this.imageStream.items.setValue(this.dictionaryProperties.width, new PdfNumber(this.width));\n this.imageStream.items.setValue(this.dictionaryProperties.height, new PdfNumber(this.height));\n this.imageStream.items.setValue(this.dictionaryProperties.bitsPerComponent, new PdfNumber(this.bitsPerComponent));\n this.imageStream.items.setValue(this.dictionaryProperties.filter, new PdfName(this.dictionaryProperties.dctdecode));\n this.imageStream.items.setValue(this.dictionaryProperties.colorSpace, new PdfName(this.getColorSpace()));\n this.imageStream.items.setValue(this.dictionaryProperties.decodeParms, this.getDecodeParams());\n return this.imageStream;\n }\n else {\n return this.imageStream;\n }\n };\n /**\n * Return `colorSpace` of an image.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.getColorSpace = function () {\n return this.dictionaryProperties.deviceRgb;\n };\n /**\n * Return `decode parameters` of an image.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.getDecodeParams = function () {\n var decodeParams = new PdfDictionary();\n decodeParams.items.setValue(this.dictionaryProperties.columns, new PdfNumber(this.width));\n decodeParams.items.setValue(this.dictionaryProperties.blackIs1, new PdfBoolean(true));\n decodeParams.items.setValue(this.dictionaryProperties.k, new PdfNumber(-1));\n decodeParams.items.setValue(this.dictionaryProperties.predictor, new PdfNumber(15));\n decodeParams.items.setValue(this.dictionaryProperties.bitsPerComponent, new PdfNumber(this.bitsPerComponent));\n return decodeParams;\n };\n /**\n * Number array for `png header`.\n * @hidden\n * @private\n */\n ImageDecoder.mPngHeader = [137, 80, 78, 71, 13, 10, 26, 10];\n /**\n * Number Array for `jpeg header`.\n * @hidden\n * @private\n */\n ImageDecoder.mJpegHeader = [255, 216];\n /**\n * Number array for `gif header`.\n * @hidden\n * @private\n */\n ImageDecoder.GIF_HEADER = 'G,I,F,8';\n /**\n * Number array for `bmp header.`\n * @hidden\n * @private\n */\n ImageDecoder.BMP_HEADER = 'B,M';\n return ImageDecoder;\n}());\nexport { ImageDecoder };\n","/**\n * PdfPageSettings.ts class for EJ2-PDF\n */\nimport { SizeF, PointF } from './../drawing/pdf-drawing';\nimport { PdfPageSize } from './pdf-page-size';\nimport { PdfPageRotateAngle, PdfPageOrientation } from './enum';\nimport { PdfMargins } from './../graphics/pdf-margins';\n/**\n * The class provides various `setting` related with PDF pages.\n */\nvar PdfPageSettings = /** @class */ (function () {\n function PdfPageSettings(margins) {\n //Fields\n /**\n * The page `margins`.\n * @private\n */\n this.pageMargins = new PdfMargins();\n /**\n * The page `size`.\n * @default a4\n * @private\n */\n this.pageSize = PdfPageSize.a4;\n /**\n * The page `rotation angle`.\n * @default PdfPageRotateAngle.RotateAngle0\n * @private\n */\n this.rotateAngle = PdfPageRotateAngle.RotateAngle0;\n /**\n * The page `orientation`.\n * @default PdfPageOrientation.Portrait\n * @private\n */\n this.pageOrientation = PdfPageOrientation.Portrait;\n /**\n * The page `origin`.\n * @default 0,0\n * @private\n */\n this.pageOrigin = new PointF(0, 0);\n /**\n * Checks the Whether the `rotation` is applied or not.\n * @default false\n * @private\n */\n this.isRotation = false;\n if (typeof margins === 'number') {\n this.pageMargins.setMargins(margins);\n }\n }\n Object.defineProperty(PdfPageSettings.prototype, \"size\", {\n //Properties\n /**\n * Gets or sets the `size` of the page.\n * @private\n */\n get: function () {\n return this.pageSize;\n },\n set: function (value) {\n this.setSize(value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"orientation\", {\n /**\n * Gets or sets the page `orientation`.\n * @private\n */\n get: function () {\n return this.pageOrientation;\n },\n set: function (orientation) {\n if (this.pageOrientation !== orientation) {\n this.pageOrientation = orientation;\n this.updateSize(orientation);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"margins\", {\n /**\n * Gets or sets the `margins` of the page.\n * @private\n */\n get: function () {\n return this.pageMargins;\n },\n set: function (value) {\n this.pageMargins = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"width\", {\n /**\n * Gets or sets the `width` of the page.\n * @private\n */\n get: function () {\n return this.pageSize.width;\n },\n set: function (value) {\n this.pageSize.width = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"height\", {\n /**\n * Gets or sets the `height` of the page.\n * @private\n */\n get: function () {\n return this.pageSize.height;\n },\n set: function (value) {\n this.pageSize.height = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"origin\", {\n /**\n * Gets or sets the `origin` of the page.\n * @private\n */\n get: function () {\n return this.pageOrigin;\n },\n set: function (value) {\n this.pageOrigin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"rotate\", {\n /**\n * Gets or sets the number of degrees by which the page should be `rotated` clockwise when displayed or printed.\n * @private\n */\n get: function () {\n return this.rotateAngle;\n },\n set: function (value) {\n this.rotateAngle = value;\n this.isRotation = true;\n },\n enumerable: true,\n configurable: true\n });\n //Methods\n /**\n * `Update page size` depending on orientation.\n * @private\n */\n PdfPageSettings.prototype.updateSize = function (orientation) {\n var min = Math.min(this.pageSize.width, this.pageSize.height);\n var max = Math.max(this.pageSize.width, this.pageSize.height);\n switch (orientation) {\n case PdfPageOrientation.Portrait:\n this.pageSize = new SizeF(min, max);\n break;\n case PdfPageOrientation.Landscape:\n this.pageSize = new SizeF(max, min);\n break;\n }\n };\n /**\n * Creates a `clone` of the object.\n * @private\n */\n PdfPageSettings.prototype.clone = function () {\n var settings = this;\n settings.pageMargins = this.pageMargins.clone();\n // if (GetTransition() != null)\n // {\n // settings.Transition = (PdfPageTransition)Transition.clone();\n // }\n return settings;\n };\n /**\n * Returns `size`, shrinked by the margins.\n * @private\n */\n PdfPageSettings.prototype.getActualSize = function () {\n var width = this.width - (this.margins.left + this.margins.right);\n var height = this.height - (this.margins.top + this.margins.bottom);\n var size = new SizeF(width, height);\n return size;\n };\n /**\n * Sets `size` to the page aaccording to the orientation.\n * @private\n */\n PdfPageSettings.prototype.setSize = function (size) {\n var min = Math.min(size.width, size.height);\n var max = Math.max(size.width, size.height);\n if (this.orientation === PdfPageOrientation.Portrait) {\n this.pageSize = new SizeF(min, max);\n }\n else {\n this.pageSize = new SizeF(max, min);\n }\n };\n return PdfPageSettings;\n}());\nexport { PdfPageSettings };\n","import { Operators } from './pdf-operators';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PointF, RectangleF } from './../drawing/pdf-drawing';\nimport { PdfString } from './../primitives/pdf-string';\nimport { PdfName } from './../primitives/pdf-name';\n/**\n * Helper class to `write PDF graphic streams` easily.\n * @private\n */\nvar PdfStreamWriter = /** @class */ (function () {\n /**\n * Initialize an instance of `PdfStreamWriter` class.\n * @private\n */\n function PdfStreamWriter(stream) {\n if (stream == null) {\n throw new Error('ArgumentNullException:stream');\n }\n this.stream = stream;\n }\n //Implementation\n /**\n * `Clear` the stream.\n * @public\n */\n PdfStreamWriter.prototype.clear = function () {\n this.stream.clearStream();\n };\n PdfStreamWriter.prototype.setGraphicsState = function (dictionaryName) {\n if (dictionaryName instanceof PdfName) {\n this.stream.write(dictionaryName.toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setGraphicsState);\n }\n else {\n this.stream.write(Operators.slash);\n this.stream.write(dictionaryName);\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setGraphicsState);\n }\n };\n /**\n * `Executes the XObject`.\n * @private\n */\n PdfStreamWriter.prototype.executeObject = function (name) {\n this.stream.write(name.toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.paintXObject);\n this.stream.write(Operators.newLine);\n };\n /**\n * `Closes path object`.\n * @private\n */\n PdfStreamWriter.prototype.closePath = function () {\n this.writeOperator(Operators.closePath);\n };\n /**\n * `Clips the path`.\n * @private\n */\n PdfStreamWriter.prototype.clipPath = function (useEvenOddRule) {\n this.stream.write(Operators.clipPath);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n }\n this.stream.write(Operators.whiteSpace);\n this.stream.write(Operators.endPath);\n this.stream.write(Operators.newLine);\n };\n /**\n * `Closes, then fills and strokes the path`.\n * @private\n */\n PdfStreamWriter.prototype.closeFillStrokePath = function (useEvenOddRule) {\n this.stream.write(Operators.closeFillStrokePath);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Fills and strokes path`.\n * @private\n */\n PdfStreamWriter.prototype.fillStrokePath = function (useEvenOddRule) {\n this.stream.write(Operators.fillStroke);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Fills path`.\n * @private\n */\n PdfStreamWriter.prototype.fillPath = function (useEvenOddRule) {\n this.stream.write(Operators.fill);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Ends the path`.\n * @private\n */\n PdfStreamWriter.prototype.endPath = function () {\n this.writeOperator(Operators.n);\n };\n /**\n * `Closes and fills the path`.\n * @private\n */\n PdfStreamWriter.prototype.closeFillPath = function (useEvenOddRule) {\n this.writeOperator(Operators.closePath);\n this.stream.write(Operators.fill);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Closes and strokes the path`.\n * @private\n */\n PdfStreamWriter.prototype.closeStrokePath = function () {\n this.writeOperator(Operators.closeStrokePath);\n };\n /**\n * `Sets the text scaling`.\n * @private\n */\n PdfStreamWriter.prototype.setTextScaling = function (textScaling) {\n this.stream.write(PdfNumber.floatToString(textScaling));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setTextScaling);\n };\n /**\n * `Strokes path`.\n * @private\n */\n PdfStreamWriter.prototype.strokePath = function () {\n this.writeOperator(Operators.stroke);\n };\n /**\n * `Restores` the graphics state.\n * @private\n */\n PdfStreamWriter.prototype.restoreGraphicsState = function () {\n this.writeOperator(Operators.restoreState);\n };\n /**\n * `Saves` the graphics state.\n * @private\n */\n PdfStreamWriter.prototype.saveGraphicsState = function () {\n this.writeOperator(Operators.saveState);\n };\n PdfStreamWriter.prototype.startNextLine = function (arg1, arg2) {\n if (typeof arg1 === 'undefined') {\n this.writeOperator(Operators.goToNextLine);\n }\n else if (arg1 instanceof PointF) {\n this.writePoint(arg1);\n this.writeOperator(Operators.setCoords);\n }\n else {\n this.writePoint(arg1, arg2);\n this.writeOperator(Operators.setCoords);\n }\n };\n /**\n * Sets `text leading`.\n * @private\n */\n PdfStreamWriter.prototype.setLeading = function (leading) {\n this.stream.write(PdfNumber.floatToString(leading));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setTextLeading);\n };\n /**\n * `Begins the path`.\n * @private\n */\n PdfStreamWriter.prototype.beginPath = function (x, y) {\n this.writePoint(x, y);\n this.writeOperator(Operators.beginPath);\n };\n /**\n * `Begins text`.\n * @private\n */\n PdfStreamWriter.prototype.beginText = function () {\n this.writeOperator(Operators.beginText);\n };\n /**\n * `Ends text`.\n * @private\n */\n PdfStreamWriter.prototype.endText = function () {\n this.writeOperator(Operators.endText);\n };\n PdfStreamWriter.prototype.appendRectangle = function (arg1, arg2, arg3, arg4) {\n if (arg1 instanceof RectangleF) {\n this.appendRectangle(arg1.x, arg1.y, arg1.width, arg1.height);\n }\n else {\n this.writePoint(arg1, arg2);\n this.writePoint(arg3, arg4);\n this.writeOperator(Operators.appendRectangle);\n }\n };\n PdfStreamWriter.prototype.appendLineSegment = function (arg1, arg2) {\n if (arg1 instanceof PointF) {\n this.appendLineSegment(arg1.x, arg1.y);\n }\n else {\n this.writePoint(arg1, arg2);\n this.writeOperator(Operators.appendLineSegment);\n }\n };\n /**\n * Sets the `text rendering mode`.\n * @private\n */\n PdfStreamWriter.prototype.setTextRenderingMode = function (renderingMode) {\n this.stream.write(renderingMode.toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setRenderingMode);\n };\n /**\n * Sets the `character spacing`.\n * @private\n */\n PdfStreamWriter.prototype.setCharacterSpacing = function (charSpacing) {\n this.stream.write(PdfNumber.floatToString(charSpacing));\n this.stream.write(Operators.whiteSpace);\n this.stream.write(Operators.setCharacterSpace);\n this.stream.write(Operators.newLine);\n };\n /**\n * Sets the `word spacing`.\n * @private\n */\n PdfStreamWriter.prototype.setWordSpacing = function (wordSpacing) {\n this.stream.write(PdfNumber.floatToString(wordSpacing));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setWordSpace);\n };\n PdfStreamWriter.prototype.showNextLineText = function (arg1, arg2) {\n if (arg1 instanceof PdfString) {\n this.checkTextParam(arg1);\n this.writeText(arg1);\n this.writeOperator(Operators.setTextOnNewLine);\n }\n else {\n this.checkTextParam(arg1);\n this.writeText(arg1, arg2);\n this.writeOperator(Operators.setTextOnNewLine);\n }\n };\n PdfStreamWriter.prototype.setColorSpace = function (arg1, arg2) {\n if (arg1 instanceof PdfName && typeof arg2 === 'boolean') {\n var temparg1 = arg1;\n var temparg2 = arg2;\n // if (temparg1 == null) {\n // throw new Error('ArgumentNullException:name');\n // }\n var op = (temparg2) ? Operators.selectcolorspaceforstroking : Operators.selectcolorspacefornonstroking;\n this.stream.write(temparg1.toString());\n this.stream.write(Operators.whiteSpace);\n this.stream.write(op);\n this.stream.write(Operators.newLine);\n }\n else {\n var temparg1 = arg1;\n var temparg2 = arg2;\n this.setColorSpace(new PdfName(temparg1), temparg2);\n }\n };\n /**\n * Modifies current `transformation matrix`.\n * @private\n */\n PdfStreamWriter.prototype.modifyCtm = function (matrix) {\n if (matrix == null) {\n throw new Error('ArgumentNullException:matrix');\n }\n this.stream.write(matrix.toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.modifyCtm);\n };\n PdfStreamWriter.prototype.setFont = function (font, name, size) {\n if (typeof name === 'string') {\n this.setFont(font, new PdfName(name), size);\n }\n else {\n if (font == null) {\n throw new Error('ArgumentNullException:font');\n }\n this.stream.write(name.toString());\n this.stream.write(Operators.whiteSpace);\n this.stream.write(PdfNumber.floatToString(size));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setFont);\n }\n };\n /**\n * `Writes the operator`.\n * @private\n */\n PdfStreamWriter.prototype.writeOperator = function (opcode) {\n this.stream.write(opcode);\n this.stream.write(Operators.newLine);\n };\n PdfStreamWriter.prototype.checkTextParam = function (text) {\n if (text == null) {\n throw new Error('ArgumentNullException:text');\n }\n if (typeof text === 'string' && text === '') {\n throw new Error('ArgumentException:The text can not be an empty string, text');\n }\n };\n PdfStreamWriter.prototype.writeText = function (arg1, arg2) {\n if ((arg1 instanceof PdfString) && (typeof arg2 === 'undefined')) {\n this.stream.write(arg1.value);\n }\n else {\n var start = void 0;\n var end = void 0;\n if (arg2) {\n start = PdfString.hexStringMark[0];\n end = PdfString.hexStringMark[1];\n }\n else {\n start = PdfString.stringMark[0];\n end = PdfString.stringMark[1];\n }\n this.stream.write(start);\n this.stream.write(arg1);\n this.stream.write(end);\n }\n };\n PdfStreamWriter.prototype.writePoint = function (arg1, arg2) {\n if ((arg1 instanceof PointF) && (typeof arg2 === 'undefined')) {\n this.writePoint(arg1.x, arg1.y);\n }\n else {\n var temparg1 = arg1;\n this.stream.write(PdfNumber.floatToString(temparg1));\n this.stream.write(Operators.whiteSpace);\n // NOTE: Change Y co-ordinate because we shifted co-ordinate system only.\n arg2 = this.updateY(arg2);\n this.stream.write(PdfNumber.floatToString(arg2));\n this.stream.write(Operators.whiteSpace);\n }\n };\n /**\n * `Updates y` co-ordinate.\n * @private\n */\n PdfStreamWriter.prototype.updateY = function (arg) {\n return -arg;\n };\n /**\n * `Writes string` to the file.\n * @private\n */\n PdfStreamWriter.prototype.write = function (string) {\n var builder = '';\n builder += string;\n builder += Operators.newLine;\n this.writeOperator(builder);\n };\n /**\n * `Writes comment` to the file.\n * @private\n */\n PdfStreamWriter.prototype.writeComment = function (comment) {\n if (comment != null && comment.length > 0) {\n var builder = '';\n builder += Operators.comment;\n builder += Operators.whiteSpace;\n builder += comment;\n //builder.Append( Operators.NewLine );\n this.writeOperator(builder);\n }\n else {\n throw new Error('Invalid comment');\n }\n };\n /**\n * Sets the `color and space`.\n * @private\n */\n PdfStreamWriter.prototype.setColorAndSpace = function (color, colorSpace, forStroking) {\n if (!color.isEmpty) {\n // bool test = color is PdfExtendedColor;\n this.stream.write(color.toString(colorSpace, forStroking));\n this.stream.write(Operators.newLine);\n }\n };\n // public setLineDashPattern(pattern : number[], patternOffset : number) : void\n // {\n // let pat : PdfArray = new PdfArray(pattern);\n // let off : PdfNumber = new PdfNumber(patternOffset);\n // this.setLineDashPatternHelper(pat, off);\n // }\n // private setLineDashPatternHelper(pattern : PdfArray, patternOffset : PdfNumber) : void\n // {\n // pattern.Save(this);\n // this.m_stream.write(Operators.whiteSpace);\n // patternOffset.Save(this);\n // this.m_stream.write(Operators.whiteSpace);\n // this.writeOperator(Operators.setDashPattern);\n // }\n /**\n * Sets the `line dash pattern`.\n * @private\n */\n PdfStreamWriter.prototype.setLineDashPattern = function (pattern, patternOffset) {\n // let pat : PdfArray = new PdfArray(pattern);\n // let off : PdfNumber = new PdfNumber(patternOffset);\n // this.setLineDashPatternHelper(pat, off);\n this.setLineDashPatternHelper(pattern, patternOffset);\n };\n /**\n * Sets the `line dash pattern`.\n * @private\n */\n PdfStreamWriter.prototype.setLineDashPatternHelper = function (pattern, patternOffset) {\n var tempPattern = '[';\n if (pattern.length > 1) {\n for (var index = 0; index < pattern.length; index++) {\n if (index === pattern.length - 1) {\n tempPattern += pattern[index].toString();\n }\n else {\n tempPattern += pattern[index].toString() + ' ';\n }\n }\n }\n tempPattern += '] ';\n tempPattern += patternOffset.toString();\n tempPattern += ' ' + Operators.setDashPattern;\n this.stream.write(tempPattern);\n this.stream.write(Operators.newLine);\n };\n /**\n * Sets the `miter limit`.\n * @private\n */\n PdfStreamWriter.prototype.setMiterLimit = function (miterLimit) {\n this.stream.write(PdfNumber.floatToString(miterLimit));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setMiterLimit);\n };\n /**\n * Sets the `width of the line`.\n * @private\n */\n PdfStreamWriter.prototype.setLineWidth = function (width) {\n this.stream.write(PdfNumber.floatToString(width));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setLineWidth);\n };\n /**\n * Sets the `line cap`.\n * @private\n */\n PdfStreamWriter.prototype.setLineCap = function (lineCapStyle) {\n this.stream.write((lineCapStyle).toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setLineCapStyle);\n };\n /**\n * Sets the `line join`.\n * @private\n */\n PdfStreamWriter.prototype.setLineJoin = function (lineJoinStyle) {\n this.stream.write((lineJoinStyle).toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setLineJoinStyle);\n };\n Object.defineProperty(PdfStreamWriter.prototype, \"position\", {\n //IPdfWriter members\n /**\n * Gets or sets the current `position` within the stream.\n * @private\n */\n get: function () {\n return this.stream.position;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStreamWriter.prototype, \"length\", {\n /**\n * Gets `stream length`.\n * @private\n */\n get: function () {\n var returnValue = 0;\n if (this.stream.data.length !== 0 && this.stream.data.length !== -1) {\n for (var index = 0; index < this.stream.data.length; index++) {\n returnValue += this.stream.data[index].length;\n }\n }\n return returnValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStreamWriter.prototype, \"document\", {\n /**\n * Gets and Sets the `current document`.\n * @private\n */\n get: function () {\n return null;\n },\n enumerable: true,\n configurable: true\n });\n return PdfStreamWriter;\n}());\nexport { PdfStreamWriter };\n","/**\n * PdfPen.ts class for EJ2-PDF\n */\nimport { PdfColor } from './pdf-color';\nimport { PdfDashStyle, PdfColorSpace } from './enum';\nimport { PdfBrush } from './brushes/pdf-brush';\n/**\n * `PdfPen` class defining settings for drawing operations, that determines the color,\n * width, and style of the drawing elements.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // set pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * // draw rectangle\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 0, y : 0}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfPen = /** @class */ (function () {\n function PdfPen(arg1, arg2) {\n //Fields\n /**\n * Specifies the `color of the pen`.\n * @default new PdfColor()\n * @private\n */\n this.pdfColor = new PdfColor(0, 0, 0);\n /**\n * Specifies the `dash offset of the pen`.\n * @default 0\n * @private\n */\n this.dashOffsetValue = 0;\n /**\n * Specifies the `dash pattern of the pen`.\n * @default [0]\n * @private\n */\n this.penDashPattern = [0];\n /**\n * Specifies the `dash style of the pen`.\n * @default Solid\n * @private\n */\n this.pdfDashStyle = PdfDashStyle.Solid;\n /**\n * Specifies the `line cap of the pen`.\n * @default 0\n * @private\n */\n this.pdfLineCap = 0;\n /**\n * Specifies the `line join of the pen`.\n * @default 0\n * @private\n */\n this.pdfLineJoin = 0;\n /**\n * Specifies the `width of the pen`.\n * @default 1.0\n * @private\n */\n this.penWidth = 1.0;\n /**\n * Specifies the `mitter limit of the pen`.\n * @default 0.0\n * @private\n */\n this.internalMiterLimit = 0.0;\n /**\n * Stores the `colorspace` value.\n * @default Rgb\n * @private\n */\n this.colorSpace = PdfColorSpace.Rgb;\n if (typeof arg2 === 'number') {\n this.constructor(arg1);\n this.width = arg2;\n }\n else if (typeof arg2 === 'undefined' && arg1 instanceof PdfBrush) {\n this.setBrush(arg1);\n }\n else if (typeof arg2 === 'undefined' && arg1 instanceof PdfColor) {\n this.color = arg1;\n }\n }\n Object.defineProperty(PdfPen.prototype, \"color\", {\n //Properties\n /**\n * Gets or sets the `color of the pen`.\n * @private\n */\n get: function () {\n return this.pdfColor;\n },\n set: function (value) {\n this.pdfColor = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"dashOffset\", {\n /**\n * Gets or sets the `dash offset of the pen`.\n * @private\n */\n get: function () {\n if (typeof this.dashOffsetValue === 'undefined' || this.dashOffsetValue == null) {\n return 0;\n }\n else {\n return this.dashOffsetValue;\n }\n },\n set: function (value) {\n this.dashOffsetValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"dashPattern\", {\n /**\n * Gets or sets the `dash pattern of the pen`.\n * @private\n */\n get: function () {\n return this.penDashPattern;\n },\n set: function (value) {\n this.penDashPattern = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"dashStyle\", {\n /**\n * Gets or sets the `dash style of the pen`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // set pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // set pen style\n * pen.dashStyle = PdfDashStyle.DashDot;\n * // get pen style\n * let style : PdfDashStyle = pen.dashStyle;\n * //\n * // draw rectangle\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 0, y : 0}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.pdfDashStyle;\n },\n set: function (value) {\n if (this.pdfDashStyle !== value) {\n this.pdfDashStyle = value;\n switch (this.pdfDashStyle) {\n case PdfDashStyle.Custom:\n break;\n case PdfDashStyle.Dash:\n this.penDashPattern = [3, 1];\n break;\n case PdfDashStyle.Dot:\n this.penDashPattern = [1, 1];\n break;\n case PdfDashStyle.DashDot:\n this.penDashPattern = [3, 1, 1, 1];\n break;\n case PdfDashStyle.DashDotDot:\n this.penDashPattern = [3, 1, 1, 1, 1, 1];\n break;\n case PdfDashStyle.Solid:\n break;\n default:\n this.pdfDashStyle = PdfDashStyle.Solid;\n this.penDashPattern = [0];\n break;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"lineCap\", {\n /**\n * Gets or sets the `line cap of the pen`.\n * @private\n */\n get: function () {\n return this.pdfLineCap;\n },\n set: function (value) {\n this.pdfLineCap = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"lineJoin\", {\n /**\n * Gets or sets the `line join style of the pen`.\n * @private\n */\n get: function () {\n return this.pdfLineJoin;\n },\n set: function (value) {\n this.pdfLineJoin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"miterLimit\", {\n /**\n * Gets or sets the `miter limit`.\n * @private\n */\n get: function () {\n return this.internalMiterLimit;\n },\n set: function (value) {\n this.internalMiterLimit = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"width\", {\n /**\n * Gets or sets the `width of the pen`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // set pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // set pen width\n * pen.width = 2;\n * //\n * // draw rectangle\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 0, y : 0}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.penWidth;\n },\n set: function (value) {\n this.penWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n //Helper\n /**\n * `Clones` this instance of PdfPen class.\n * @private\n */\n PdfPen.prototype.clone = function () {\n var pen = this;\n return pen;\n };\n /**\n * `Sets the brush`.\n * @private\n */\n PdfPen.prototype.setBrush = function (brush) {\n var sBrush = brush;\n this.color = sBrush.color;\n this.pdfBrush = sBrush;\n };\n /**\n * `Monitors the changes`.\n * @private\n */\n PdfPen.prototype.monitorChanges = function (currentPen, streamWriter, getResources, saveState, currentColorSpace, matrix) {\n var diff = false;\n saveState = true;\n if (currentPen == null) {\n diff = true;\n }\n diff = this.dashControl(currentPen, saveState, streamWriter);\n streamWriter.setLineWidth(this.width);\n streamWriter.setLineJoin(this.lineJoin);\n streamWriter.setLineCap(this.lineCap);\n var miterLimit = this.miterLimit;\n if (miterLimit > 0) {\n streamWriter.setMiterLimit(miterLimit);\n diff = true;\n }\n var brush = this.pdfBrush;\n streamWriter.setColorAndSpace(this.color, currentColorSpace, true);\n diff = true;\n return diff;\n };\n /**\n * `Controls the dash style` and behaviour of each line.\n * @private\n */\n PdfPen.prototype.dashControl = function (pen, saveState, streamWriter) {\n saveState = true;\n var lineWidth = this.width;\n var pattern = this.getPattern();\n streamWriter.setLineDashPattern(pattern, this.dashOffset * lineWidth);\n return saveState;\n };\n /**\n * `Gets the pattern` of PdfPen.\n * @private\n */\n PdfPen.prototype.getPattern = function () {\n var pattern = this.dashPattern;\n for (var i = 0; i < pattern.length; ++i) {\n pattern[i] *= this.width;\n }\n return pattern;\n };\n return PdfPen;\n}());\nexport { PdfPen };\n","/**\n * PdfTransformationMatrix.ts class for EJ2-PDF\n */\nimport { PointF } from './../drawing/pdf-drawing';\nimport { PdfNumber } from './../primitives/pdf-number';\n/**\n * Class for representing Root `transformation matrix`.\n */\nvar PdfTransformationMatrix = /** @class */ (function () {\n function PdfTransformationMatrix(value) {\n /**\n * Value for `angle converting`.\n * @default 180.0 / Math.PI\n * @private\n */\n this.radDegFactor = 180.0 / Math.PI;\n if (typeof value === 'undefined') {\n this.transformationMatrix = new Matrix(1.00, 0.00, 0.00, 1.00, 0.00, 0.00);\n }\n else {\n this.transformationMatrix = new Matrix(1.00, 0.00, 0.00, -1.00, 0.00, 0.00);\n }\n }\n Object.defineProperty(PdfTransformationMatrix.prototype, \"matrix\", {\n // Properties\n /**\n * Gets or sets the `internal matrix object`.\n * @private\n */\n get: function () {\n return this.transformationMatrix;\n },\n set: function (value) {\n this.transformationMatrix = value;\n },\n enumerable: true,\n configurable: true\n });\n // Public methods\n /**\n * `Translates` coordinates by specified coordinates.\n * @private\n */\n PdfTransformationMatrix.prototype.translate = function (offsetX, offsetY) {\n this.transformationMatrix.translate(offsetX, offsetY);\n };\n /**\n * `Scales` coordinates by specified coordinates.\n * @private\n */\n PdfTransformationMatrix.prototype.scale = function (scaleX, scaleY) {\n this.transformationMatrix.elements[0] = scaleX;\n this.transformationMatrix.elements[3] = scaleY;\n };\n /**\n * `Rotates` coordinate system in counterclockwise direction.\n * @private\n */\n PdfTransformationMatrix.prototype.rotate = function (angle) {\n //Convert from degree to radian \n angle = (angle * Math.PI) / 180;\n //Rotation \n this.transformationMatrix.elements[0] = Math.cos(angle);\n this.transformationMatrix.elements[1] = Math.sin(angle);\n this.transformationMatrix.elements[2] = -Math.sin(angle);\n this.transformationMatrix.elements[3] = Math.cos(angle);\n };\n // Overrides\n /**\n * Gets `PDF representation`.\n * @private\n */\n PdfTransformationMatrix.prototype.toString = function () {\n var builder = '';\n var whitespace = ' ';\n for (var i = 0, len = this.transformationMatrix.elements.length; i < len; i++) {\n var temp = this.matrix.elements[i];\n builder += PdfNumber.floatToString(this.transformationMatrix.elements[i]);\n builder += whitespace;\n }\n return builder;\n };\n // Implementation\n /**\n * `Multiplies` matrices (changes coordinate system.)\n * @private\n */\n PdfTransformationMatrix.prototype.multiply = function (matrix) {\n this.transformationMatrix.multiply(matrix.matrix);\n };\n /**\n * Converts `degrees to radians`.\n * @private\n */\n PdfTransformationMatrix.degreesToRadians = function (degreesX) {\n return this.degRadFactor * degreesX;\n };\n /**\n * Converts `radians to degrees`.\n * @private\n */\n PdfTransformationMatrix.prototype.radiansToDegrees = function (radians) {\n return this.radDegFactor * radians;\n };\n /**\n * `Clones` this instance of PdfTransformationMatrix.\n * @private\n */\n PdfTransformationMatrix.prototype.clone = function () {\n return this;\n };\n // Constants\n /**\n * Value for `angle converting`.\n * @default Math.PI / 180.0\n * @private\n */\n PdfTransformationMatrix.degRadFactor = Math.PI / 180.0;\n return PdfTransformationMatrix;\n}());\nexport { PdfTransformationMatrix };\nvar Matrix = /** @class */ (function () {\n function Matrix(arg1, arg2, arg3, arg4, arg5, arg6) {\n if (typeof arg1 === 'undefined') {\n this.metrixElements = [];\n }\n else if (typeof arg1 === 'number') {\n this.constructor();\n this.metrixElements.push(arg1);\n this.metrixElements.push(arg2);\n this.metrixElements.push(arg3);\n this.metrixElements.push(arg4);\n this.metrixElements.push(arg5);\n this.metrixElements.push(arg6);\n }\n else {\n this.metrixElements = arg1;\n }\n }\n Object.defineProperty(Matrix.prototype, \"elements\", {\n // Properties\n /**\n * Gets the `elements`.\n * @private\n */\n get: function () {\n return this.metrixElements;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Matrix.prototype, \"offsetX\", {\n /**\n * Gets the off set `X`.\n * @private\n */\n get: function () {\n return this.metrixElements[4];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Matrix.prototype, \"offsetY\", {\n /**\n * Gets the off set `Y`.\n * @private\n */\n get: function () {\n return this.metrixElements[5];\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Translates` coordinates by specified coordinates.\n * @private\n */\n Matrix.prototype.translate = function (offsetX, offsetY) {\n this.metrixElements[4] = offsetX;\n this.metrixElements[5] = offsetY;\n };\n /**\n * `Translates` the specified offset X.\n * @private\n */\n Matrix.prototype.transform = function (point) {\n var x = point.x;\n var y = point.y;\n var x2 = x * this.elements[0] + y * this.elements[2] + this.offsetX;\n var y2 = x * this.elements[1] + y * this.elements[3] + this.offsetY;\n return new PointF(x2, y2);\n };\n /**\n * `Multiplies matrices` (changes coordinate system.)\n * @private\n */\n Matrix.prototype.multiply = function (matrix) {\n var tempMatrix = [];\n tempMatrix.push(this.elements[0] * matrix.elements[0] + this.elements[1] * matrix.elements[2]);\n tempMatrix[1] = (this.elements[0] * matrix.elements[1] + this.elements[1] * matrix.elements[3]);\n tempMatrix[2] = (this.elements[2] * matrix.elements[0] + this.elements[3] * matrix.elements[2]);\n tempMatrix[3] = (this.elements[2] * matrix.elements[1] + this.elements[3] * matrix.elements[3]);\n tempMatrix[4] = (this.offsetX * matrix.elements[0] + this.offsetY * matrix.elements[2] + matrix.offsetX);\n tempMatrix[5] = (this.offsetX * matrix.elements[1] + this.offsetY * matrix.elements[3] + matrix.offsetY);\n for (var i = 0; i < tempMatrix.length; i++) {\n this.elements[i] = tempMatrix[i];\n }\n };\n // IDisposable Members\n /**\n * `Dispose` this instance of PdfTransformationMatrix class.\n * @private\n */\n Matrix.prototype.dispose = function () {\n this.metrixElements = null;\n };\n // ICloneable Members\n /**\n * `Clones` this instance of PdfTransformationMatrix class.\n * @private\n */\n Matrix.prototype.clone = function () {\n var m = new Matrix(this.metrixElements);\n return m;\n };\n return Matrix;\n}());\nexport { Matrix };\n","/**\n * `constants.ts` class for EJ2-PDF\n * @private\n */\nvar ProcedureSets = /** @class */ (function () {\n function ProcedureSets() {\n /**\n * Specifies the `PDF` procedure set.\n * @private\n */\n this.pdf = 'PDF';\n /**\n * Specifies the `Text` procedure set.\n * @private\n */\n this.text = 'Text';\n /**\n * Specifies the `ImageB` procedure set.\n * @private\n */\n this.imageB = 'ImageB';\n /**\n * Specifies the `ImageC` procedure set.\n * @private\n */\n this.imageC = 'ImageC';\n /**\n * Specifies the `ImageI` procedure set.\n * @private\n */\n this.imageI = 'ImageI';\n }\n return ProcedureSets;\n}());\nexport { ProcedureSets };\n","/**\n * Dictionary class\n * @private\n * @hidden\n */\nvar TemporaryDictionary = /** @class */ (function () {\n function TemporaryDictionary() {\n /**\n * @hidden\n * @private\n */\n this.mKeys = [];\n /**\n * @hidden\n * @private\n */\n this.mValues = [];\n }\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.size = function () {\n return this.mKeys.length;\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.add = function (key, value) {\n if (key === undefined || key === null || value === undefined || value === null) {\n throw new ReferenceError('Provided key or value is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n this.mKeys.push(key);\n this.mValues.push(value);\n return 1;\n }\n else {\n throw new RangeError('An item with the same key has already been added.');\n }\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.keys = function () {\n return this.mKeys;\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.values = function () {\n return this.mValues;\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.getValue = function (key) {\n if (key === undefined || key === null) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n throw new RangeError('No item with the specified key has been added.');\n }\n else {\n return this.mValues[index];\n }\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.setValue = function (key, value) {\n if (key === undefined || key === null) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n this.mKeys.push(key);\n this.mValues.push(value);\n }\n else {\n this.mValues[index] = value;\n }\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.remove = function (key) {\n if (key === undefined || key === null) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n throw new RangeError('No item with the specified key has been added.');\n }\n else {\n this.mKeys.splice(index, 1);\n this.mValues.splice(index, 1);\n return true;\n }\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.containsKey = function (key) {\n if (key === undefined || key === null) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n return false;\n }\n return true;\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.clear = function () {\n this.mKeys = [];\n this.mValues = [];\n };\n return TemporaryDictionary;\n}());\nexport { TemporaryDictionary };\n","import { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfName } from './../primitives/pdf-name';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\n/**\n * Represents a simple `transparency`.\n * @private\n */\nvar PdfTransparency = /** @class */ (function () {\n // Properties\n // /**\n // * Gets the `stroke` operation alpha value.\n // * @private\n // */\n // public get stroke() : number {\n // let result : number = this.getNumber(this.dictionaryProperties.CA);\n // return result;\n // }\n // /**\n // * Gets the `fill` operation alpha value.\n // * @private\n // */\n // public get fill() : number {\n // let result : number = this.getNumber(this.dictionaryProperties.ca);\n // return result;\n // }\n // /**\n // * Gets the `blend mode`.\n // * @private\n // */\n // public get mode() : PdfBlendMode {\n // let result : string = this.getName(this.dictionaryProperties.ca);\n // return PdfBlendMode.Normal;\n // }\n // Constructors\n /**\n * Initializes a new instance of the `Transparency` class.\n * @private\n */\n function PdfTransparency(stroke, fill, mode) {\n // Fields\n /**\n * Internal variable to store `dictionary`.\n * @default new PdfDictionary()\n * @private\n */\n this.dictionary = new PdfDictionary();\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @default new DictionaryProperties()\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n this.dictionary.items.setValue(this.dictionaryProperties.CA, new PdfNumber(stroke));\n this.dictionary.items.setValue(this.dictionaryProperties.ca, new PdfNumber(fill));\n this.dictionary.items.setValue(this.dictionaryProperties.BM, new PdfName(mode.toString()));\n }\n Object.defineProperty(PdfTransparency.prototype, \"element\", {\n // // Implementation\n // /**\n // * Gets the `number value`.\n // * @private\n // */\n // private getNumber(keyName : string) : number {\n // let result : number = 0.0;\n // let numb : PdfNumber = this.dictionary.items.getValue(keyName) as PdfNumber;\n // result = numb.intValue;\n // return result;\n // }\n // /**\n // * Gets the `name value`.\n // * @private\n // */\n // private getName(keyName : string) : string {\n // let result : string = null;\n // let name : PdfName = this.dictionary.items.getValue(keyName) as PdfName;\n // result = name.value;\n // return result;\n // }\n // IPdfWrapper Members\n /**\n * Gets the `element`.\n * @private\n */\n get: function () {\n return this.dictionary;\n },\n enumerable: true,\n configurable: true\n });\n return PdfTransparency;\n}());\nexport { PdfTransparency };\n","/**\n * Represent a `collection of automatic fields information`.\n * @private\n */\nvar PdfAutomaticFieldInfoCollection = /** @class */ (function () {\n /**\n * Initializes a new instance of the 'PdfPageNumberFieldInfoCollection' class.\n * @private\n */\n function PdfAutomaticFieldInfoCollection() {\n /**\n * Internal variable to store instance of `pageNumberFields` class.\n * @private\n */\n this.automaticFieldsInformation = [];\n //\n }\n Object.defineProperty(PdfAutomaticFieldInfoCollection.prototype, \"automaticFields\", {\n /**\n * Gets the `page number fields collection`.\n * @private\n */\n get: function () {\n return this.automaticFieldsInformation;\n },\n enumerable: true,\n configurable: true\n });\n // Public methods\n /// Adds the specified field info.\n /**\n * Add page number field into collection.\n * @private\n */\n PdfAutomaticFieldInfoCollection.prototype.add = function (fieldInfo) {\n return this.automaticFields.push(fieldInfo);\n };\n return PdfAutomaticFieldInfoCollection;\n}());\nexport { PdfAutomaticFieldInfoCollection };\n","/**\n * Represents a base class for all page graphics elements.\n */\nvar PdfGraphicsElement = /** @class */ (function () {\n // Constructors\n function PdfGraphicsElement() {\n //\n }\n /**\n * `Draws` the page number field.\n * @public\n */\n PdfGraphicsElement.prototype.drawHelper = function (graphics, x, y) {\n var bNeedSave = (x !== 0 || y !== 0);\n var gState = null;\n // Translate co-ordinates.\n if (bNeedSave) {\n // Save state.\n gState = graphics.save();\n graphics.translateTransform(x, y);\n }\n this.drawInternal(graphics);\n if (bNeedSave) {\n // Restore state.\n graphics.restore(gState);\n }\n };\n return PdfGraphicsElement;\n}());\nexport { PdfGraphicsElement };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfAutomaticField.ts class for EJ2-PDF\n */\nimport { RectangleF, SizeF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfSolidBrush } from './../../graphics/brushes/pdf-solid-brush';\nimport { PdfColor } from './../../graphics/pdf-color';\nimport { PdfDocument } from './../pdf-document';\nimport { PdfGraphicsElement } from './../../graphics/figures/base/graphics-element';\nimport { PdfAutomaticFieldInfo } from './automatic-field-info';\n/**\n * Represents a fields which is calculated before the document saves.\n */\nvar PdfAutomaticField = /** @class */ (function (_super) {\n __extends(PdfAutomaticField, _super);\n // Constructors\n function PdfAutomaticField() {\n var _this = _super.call(this) || this;\n // Fields\n _this.internalBounds = new RectangleF(0, 0, 0, 0);\n _this.internalTemplateSize = new SizeF(0, 0);\n return _this;\n }\n Object.defineProperty(PdfAutomaticField.prototype, \"bounds\", {\n // Properties\n get: function () {\n return this.internalBounds;\n },\n set: function (value) {\n this.internalBounds = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"size\", {\n get: function () {\n return new SizeF(this.bounds.width, this.bounds.height);\n },\n set: function (value) {\n this.bounds.width = value.width;\n this.bounds.height = value.height;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"location\", {\n get: function () {\n return new PointF(this.bounds.x, this.bounds.y);\n },\n set: function (value) {\n this.bounds.x = value.x;\n this.bounds.y = value.y;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"font\", {\n get: function () {\n return this.internalFont;\n },\n set: function (value) {\n this.internalFont = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"brush\", {\n get: function () {\n return this.internalBrush;\n },\n set: function (value) {\n this.internalBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"pen\", {\n get: function () {\n return this.internalPen;\n },\n set: function (value) {\n this.internalPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"stringFormat\", {\n get: function () {\n return this.internalStringFormat;\n },\n set: function (value) {\n this.internalStringFormat = value;\n },\n enumerable: true,\n configurable: true\n });\n PdfAutomaticField.prototype.performDrawHelper = function (graphics, location, scalingX, scalingY) {\n if (this.bounds.height === 0 || this.bounds.width === 0) {\n var text = this.getValue(graphics);\n this.internalTemplateSize = this.getFont().measureString(text, this.size, this.stringFormat);\n }\n };\n PdfAutomaticField.prototype.draw = function (arg1, arg2, arg3) {\n if (typeof arg2 === 'undefined') {\n var location_1 = new PointF(0, 0);\n this.draw(arg1, location_1);\n }\n else if (arg2 instanceof PointF) {\n this.draw(arg1, arg2.x, arg2.y);\n }\n else {\n this.drawHelper(arg1, arg2, arg3);\n var info = new PdfAutomaticFieldInfo(this, new PointF(arg2, arg3));\n arg1.automaticFields.add(info);\n }\n };\n PdfAutomaticField.prototype.getSize = function () {\n if (this.bounds.height === 0 || this.bounds.width === 0) {\n return this.internalTemplateSize;\n }\n else {\n return this.size;\n }\n };\n PdfAutomaticField.prototype.drawInternal = function (graphics) {\n //\n };\n /* tslint:disable */\n PdfAutomaticField.prototype.getBrush = function () {\n return (typeof this.internalBrush === 'undefined' || this.internalBrush == null) ? new PdfSolidBrush(new PdfColor(0, 0, 0)) : this.internalBrush;\n };\n PdfAutomaticField.prototype.getFont = function () {\n return (typeof this.internalFont === 'undefined' || this.internalFont == null) ? PdfDocument.defaultFont : this.internalFont;\n };\n /* tslint:enable */\n PdfAutomaticField.prototype.getPageFromGraphics = function (graphics) {\n if (typeof graphics.page !== 'undefined' && graphics.page !== null) {\n var page = graphics.page;\n return page;\n }\n else {\n var page = graphics.currentPage;\n return page;\n }\n };\n return PdfAutomaticField;\n}(PdfGraphicsElement));\nexport { PdfAutomaticField };\n","/**\n * PdfAutomaticFieldInfo.ts class for EJ2-PDF\n * @private\n */\nimport { PointF } from './../../drawing/pdf-drawing';\nimport { PdfAutomaticField } from './automatic-field';\n/**\n * Represents information about the automatic field.\n * @private\n */\nvar PdfAutomaticFieldInfo = /** @class */ (function () {\n function PdfAutomaticFieldInfo(field, location, scaleX, scaleY) {\n // Fields\n /**\n * Internal variable to store location of the field.\n * @private\n */\n this.pageNumberFieldLocation = new PointF();\n /**\n * Internal variable to store field.\n * @private\n */\n this.pageNumberField = null;\n /**\n * Internal variable to store x scaling factor.\n * @private\n */\n this.scaleX = 1;\n /**\n * Internal variable to store y scaling factor.\n * @private\n */\n this.scaleY = 1;\n if (typeof location === 'undefined' && field instanceof PdfAutomaticFieldInfo) {\n this.pageNumberField = field.field;\n this.pageNumberFieldLocation = field.location;\n this.scaleX = field.scalingX;\n this.scaleY = field.scalingY;\n }\n else if (typeof scaleX === 'undefined' && location instanceof PointF && field instanceof PdfAutomaticField) {\n this.pageNumberField = field;\n this.pageNumberFieldLocation = location;\n }\n else {\n this.pageNumberField = field;\n this.pageNumberFieldLocation = location;\n this.scaleX = scaleX;\n this.scaleY = scaleY;\n }\n }\n Object.defineProperty(PdfAutomaticFieldInfo.prototype, \"location\", {\n /* tslint:enable */\n // Properties\n /**\n * Gets or sets the location.\n * @private\n */\n get: function () {\n return this.pageNumberFieldLocation;\n },\n set: function (value) {\n this.pageNumberFieldLocation = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticFieldInfo.prototype, \"field\", {\n /**\n * Gets or sets the field.\n * @private\n */\n get: function () {\n return this.pageNumberField;\n },\n set: function (value) {\n this.pageNumberField = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticFieldInfo.prototype, \"scalingX\", {\n /**\n * Gets or sets the scaling X factor.\n * @private\n */\n get: function () {\n return this.scaleX;\n },\n set: function (value) {\n this.scaleX = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticFieldInfo.prototype, \"scalingY\", {\n /**\n * Gets or sets the scaling Y factor.\n * @private\n */\n get: function () {\n return this.scaleY;\n },\n set: function (value) {\n this.scaleY = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfAutomaticFieldInfo;\n}());\nexport { PdfAutomaticFieldInfo };\n","/**\n * PdfGraphics.ts class for EJ2-PDF\n */\nimport { PdfColorSpace, TextRenderingMode, PdfFillMode, PdfTextAlignment } from './enum';\nimport { PdfVerticalAlignment, PdfBlendMode } from './enum';\nimport { PdfSubSuperScript } from './fonts/enum';\nimport { PdfStreamWriter } from './../input-output/pdf-stream-writer';\nimport { PdfPen } from './pdf-pen';\nimport { PdfBrush } from './brushes/pdf-brush';\nimport { PdfSolidBrush } from './brushes/pdf-solid-brush';\nimport { PdfFont } from './fonts/pdf-font';\nimport { PdfTransformationMatrix } from './pdf-transformation-matrix';\nimport { PointF, SizeF, RectangleF } from './../drawing/pdf-drawing';\nimport { ProcedureSets } from './constants';\nimport { PdfString } from './../primitives/pdf-string';\nimport { PdfStringFormat } from './fonts/pdf-string-format';\nimport { TemporaryDictionary } from './../collections/object-object-pair/dictionary';\nimport { PdfTransparency } from './pdf-transparency';\nimport { PdfStringLayouter, LineType } from './fonts/string-layouter';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { StringTokenizer } from './fonts/string-tokenizer';\nimport { PdfAutomaticFieldInfoCollection } from './../document/automatic-fields/automatic-field-info-collection';\nimport { PdfAutomaticFieldInfo } from './../document/automatic-fields/automatic-field-info';\nimport { Operators } from './../input-output/pdf-operators';\n/**\n * `PdfGraphics` class represents a graphics context of the objects.\n * It's used for performing all the graphics operations.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * //graphics of the page\n * let page1Graphics : PdfGraphics = page1.graphics;\n * // draw the text on the page1 graphics\n * page1Graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * //\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfGraphics = /** @class */ (function () {\n function PdfGraphics(arg1, arg2, arg3) {\n /**\n * Represents the `Current color space`.\n * @private\n */\n this.currentColorSpace = PdfColorSpace.Rgb;\n /**\n * Stores `previous rendering mode`.\n * @private\n */\n this.previousTextRenderingMode = TextRenderingMode.Fill;\n /**\n * Previous `character spacing` value or 0.\n * @private\n */\n this.previousCharacterSpacing = 0.0;\n /**\n * Previous `word spacing` value or 0.\n * @private\n */\n this.previousWordSpacing = 0.0;\n /**\n * The `previously used text scaling` value.\n * @private\n */\n this.previousTextScaling = 100.0;\n /**\n * Instance of `ProcedureSets` class.\n * @private\n */\n this.procedureSets = new ProcedureSets();\n /**\n * To check wihether it is a `direct text rendering`.\n * @default true\n * @private\n */\n this.isNormalRender = true;\n /**\n * check whether to `use font size` to calculate the shift.\n * @default false\n * @private\n */\n this.isUseFontSize = false;\n /**\n * check whether the font is in `italic type`.\n * @default false\n * @private\n */\n this.isItalic = false;\n /**\n * Check whether it is an `emf Text Matrix`.\n * @default false\n * @private\n */\n this.isEmfTextScaled = false;\n /**\n * Check whether it is an `emf` call.\n * @default false\n * @private\n */\n this.isEmf = false;\n /**\n * Check whether it is an `emf plus` call.\n * @default false\n * @private\n */\n this.isEmfPlus = false;\n /**\n * Check whether it is in `base line format`.\n * @default true\n * @private\n */\n this.isBaselineFormat = true;\n /**\n * Emf Text `Scaling Factor`.\n * @private\n */\n this.emfScalingFactor = new SizeF(0, 0);\n /**\n * To check whether the `last color space` of document and garphics is saved.\n * @private\n */\n this.colorSpaceChanged = false;\n /**\n * Stores an instance of `DictionaryProperties`.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * Checks whether the x co-ordinate is need to set as client size or not.\n * @hidden\n * @private\n */\n this.isOverloadWithPosition = false;\n /**\n * Checks whether the x co-ordinate is need to set as client size or not.\n * @hidden\n * @private\n */\n this.isPointOverload = false;\n /**\n * Current colorspaces.\n * @hidden\n * @private\n */\n this.currentColorSpaces = ['RGB', 'CMYK', 'GrayScale', 'Indexed'];\n /**\n * Checks the current image `is optimized` or not.\n * @default false.\n * @private\n */\n this.isImageOptimized = false;\n /**\n * Stores the `graphics states`.\n * @private\n */\n this.graphicsState = [];\n /**\n * Indicates whether the object `had trasparency`.\n * @default false\n * @private\n */\n this.istransparencySet = false;\n /**\n * Stores the instance of `PdfAutomaticFieldInfoCollection` class .\n * @default null\n * @private\n */\n this.internalAutomaticFields = null;\n /**\n * Stores the index of the start line that should draw with in the next page.\n * @private\n */\n this.startCutIndex = -1;\n if (arg3 instanceof PdfStreamWriter) {\n this.pdfStreamWriter = arg3;\n this.getResources = arg2;\n this.canvasSize = arg1;\n this.initialize();\n }\n else {\n this.constructor(arg1, arg2, new PdfStreamWriter(arg3));\n }\n }\n Object.defineProperty(PdfGraphics.prototype, \"stringLayoutResult\", {\n // Properties\n /**\n * Returns the `result` after drawing string.\n * @private\n */\n get: function () {\n return this.pdfStringLayoutResult;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"size\", {\n /**\n * Gets the `size` of the canvas.\n * @private\n */\n get: function () {\n return this.canvasSize;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"mediaBoxUpperRightBound\", {\n /**\n * Gets and Sets the value of `MediaBox upper right bound`.\n * @private\n */\n get: function () {\n if (typeof this.internalMediaBoxUpperRightBound === 'undefined') {\n this.internalMediaBoxUpperRightBound = 0;\n }\n return this.internalMediaBoxUpperRightBound;\n },\n set: function (value) {\n this.internalMediaBoxUpperRightBound = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"clientSize\", {\n /**\n * Gets the `size` of the canvas reduced by margins and page templates.\n * @private\n */\n get: function () {\n return new SizeF(this.clipBounds.width, this.clipBounds.height);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"colorSpace\", {\n /**\n * Gets or sets the current `color space` of the document\n * @private\n */\n get: function () {\n return this.currentColorSpace;\n },\n set: function (value) {\n this.currentColorSpace = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"streamWriter\", {\n /**\n * Gets the `stream writer`.\n * @private\n */\n get: function () {\n return this.pdfStreamWriter;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"matrix\", {\n /**\n * Gets the `transformation matrix` reflecting current transformation.\n * @private\n */\n get: function () {\n if (this.transformationMatrix == null) {\n this.transformationMatrix = new PdfTransformationMatrix();\n }\n return this.transformationMatrix;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"layer\", {\n /**\n * Gets the `layer` for the graphics, if exists.\n * @private\n */\n get: function () {\n return this.pageLayer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"page\", {\n /**\n * Gets the `page` for this graphics, if exists.\n * @private\n */\n get: function () {\n return this.pageLayer.page;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"automaticFields\", {\n get: function () {\n if (this.internalAutomaticFields == null || typeof this.internalAutomaticFields === 'undefined') {\n this.internalAutomaticFields = new PdfAutomaticFieldInfoCollection();\n }\n return this.internalAutomaticFields;\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Initializes` this instance.\n * @private\n */\n PdfGraphics.prototype.initialize = function () {\n this.bStateSaved = false;\n this.currentPen = null;\n this.currentBrush = null;\n this.currentFont = null;\n this.currentColorSpace = PdfColorSpace.Rgb;\n this.bCSInitialized = false;\n this.transformationMatrix = null;\n this.previousTextRenderingMode = (-1); //.Fill;\n this.previousCharacterSpacing = -1.0;\n this.previousWordSpacing = -1.0;\n this.previousTextScaling = -100.0;\n // this.m_trasparencies = null;\n this.currentStringFormat = null;\n this.clipBounds = new RectangleF(new PointF(0, 0), this.size);\n this.getResources.getResources().requireProcedureSet(this.procedureSets.pdf);\n };\n PdfGraphics.prototype.drawPdfTemplate = function (template, location, size) {\n if (typeof size === 'undefined') {\n if (template == null) {\n throw Error('ArgumentNullException-template');\n }\n this.drawPdfTemplate(template, location, template.size);\n }\n else {\n // let crossTable : PdfCrossTable = null;\n // if (this.pageLayer != null) {\n // crossTable = (this.page as PdfPage).section.parentDocument.crossTable;\n // }\n if (template == null) {\n throw Error('ArgumentNullException-template');\n }\n var scaleX = (template.width > 0) ? size.width / template.width : 1;\n var scaleY = (template.height > 0) ? size.height / template.height : 1;\n var bNeedScale = !(scaleX === 1 && scaleY === 1);\n // Save state.\n var state = this.save();\n // Take into consideration that rect location is bottom/left.\n var matrix = new PdfTransformationMatrix();\n if (this.pageLayer != null) {\n this.getTranslateTransform(location.x, location.y + size.height, matrix);\n }\n if (bNeedScale) {\n this.getScaleTransform(scaleX, scaleY, matrix);\n }\n this.pdfStreamWriter.modifyCtm(matrix);\n // Output template.\n var resources = this.getResources.getResources();\n var name_1 = resources.getName(template);\n this.pdfStreamWriter.executeObject(name_1);\n // Restore state.\n this.restore(state);\n //Transfer automatic fields from template.\n var g = template.graphics;\n if (g != null) {\n for (var index = 0; index < g.automaticFields.automaticFields.length; index++) {\n var fieldInfo = g.automaticFields.automaticFields[index];\n var newLocation = new PointF(fieldInfo.location.x + location.x, fieldInfo.location.y + location.y);\n var scalingX = template.size.width == 0 ? 0 : size.width / template.size.width;\n var scalingY = template.size.height == 0 ? 0 : size.height / template.size.height;\n this.automaticFields.add(new PdfAutomaticFieldInfo(fieldInfo.field, newLocation, scalingX, scalingY));\n this.page.dictionary.modify();\n }\n }\n this.getResources.getResources().requireProcedureSet(this.procedureSets.imageB);\n this.getResources.getResources().requireProcedureSet(this.procedureSets.imageC);\n this.getResources.getResources().requireProcedureSet(this.procedureSets.imageI);\n this.getResources.getResources().requireProcedureSet(this.procedureSets.text);\n }\n };\n /* tslint:disable */\n /**\n * @public\n */\n PdfGraphics.prototype.drawString = function (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) {\n if (typeof arg1 === 'string' && arg2 instanceof PdfFont && (arg3 instanceof PdfPen || arg3 === null) && (arg4 instanceof PdfBrush || arg4 === null) && typeof arg5 === 'number' && typeof arg6 === 'number' && (arg7 instanceof PdfStringFormat || arg7 === null) && typeof arg8 === 'undefined') {\n this.isOverloadWithPosition = true;\n this.drawString(arg1, arg2, arg3, arg4, arg5, arg6, (this.clientSize.width - arg5), 0, arg7);\n }\n else {\n var temparg3 = arg3;\n var temparg4 = arg4;\n var temparg5 = arg5;\n var temparg6 = arg6;\n var temparg7 = arg7;\n var temparg8 = arg8;\n var temparg9 = arg9;\n var layouter = new PdfStringLayouter();\n var result = layouter.layout(arg1, arg2, temparg9, new SizeF(temparg7, 0), this.isOverloadWithPosition, this.clientSize);\n if (!result.empty) {\n var rect = this.checkCorrectLayoutRectangle(result.actualSize, temparg5, temparg6, temparg9);\n if (temparg7 <= 0) {\n temparg5 = rect.x;\n temparg7 = rect.width;\n }\n if (temparg8 <= 0) {\n temparg6 = rect.y;\n temparg8 = rect.height;\n }\n this.drawStringLayoutResult(result, arg2, temparg3, temparg4, new RectangleF(temparg5, temparg6, temparg7, temparg8), temparg9);\n this.isEmfTextScaled = false;\n this.emfScalingFactor = new SizeF(0, 0);\n }\n this.getResources.getResources().requireProcedureSet(this.procedureSets.text);\n this.isNormalRender = true;\n this.pdfStringLayoutResult = result;\n this.isUseFontSize = false;\n }\n }; /* tslint:enable */\n PdfGraphics.prototype.drawLine = function (arg1, arg2, arg3, arg4, arg5) {\n if (arg2 instanceof PointF) {\n var temparg2 = arg2;\n var temparg3 = arg3;\n this.drawLine(arg1, temparg2.x, temparg2.y, temparg3.x, temparg3.y);\n }\n else {\n var temparg2 = arg2;\n var temparg3 = arg3;\n var temparg4 = arg4;\n var temparg5 = arg5;\n this.stateControl(arg1, null, null);\n var sw = this.streamWriter;\n sw.beginPath(temparg2, temparg3);\n sw.appendLineSegment(temparg4, temparg5);\n sw.strokePath();\n this.getResources.getResources().requireProcedureSet(this.procedureSets.pdf);\n }\n };\n /* tslint:disable */\n PdfGraphics.prototype.drawRectangle = function (arg1, arg2, arg3, arg4, arg5, arg6) {\n if (arg1 instanceof PdfPen && typeof arg2 === 'number') {\n var temparg3 = arg3;\n this.drawRectangle(arg1, null, arg2, temparg3, arg4, arg5);\n }\n else if (arg1 instanceof PdfBrush && typeof arg2 === 'number') {\n var temparg3 = arg3;\n this.drawRectangle(null, arg1, arg2, temparg3, arg4, arg5);\n }\n else {\n var temparg3 = arg3;\n var temparg4 = arg4;\n var temparg5 = arg5;\n var temparg6 = arg6;\n if (arg2 instanceof PdfSolidBrush && arg2.color.isEmpty) {\n arg2 = null;\n }\n var temparg1 = arg1;\n var temparg2 = arg2;\n this.stateControl(temparg1, temparg2, null);\n this.streamWriter.appendRectangle(temparg3, temparg4, temparg5, temparg6);\n this.drawPath(temparg1, temparg2, false);\n }\n };\n PdfGraphics.prototype.drawPath = function (arg1, arg2, arg3, arg4) {\n if (typeof arg3 === 'boolean') {\n var temparg3 = arg3;\n this.drawPath(arg1, arg2, PdfFillMode.Winding, temparg3);\n }\n else {\n var temparg3 = arg3;\n var temparg4 = arg4;\n var isPen = arg1 != null;\n var isBrush = arg2 != null;\n var isEvenOdd = (temparg3 === PdfFillMode.Alternate);\n if (isPen && isBrush) {\n this.streamWriter.fillStrokePath(isEvenOdd);\n }\n else if (!isPen && !isBrush) {\n this.streamWriter.endPath();\n }\n else if (isPen) {\n this.streamWriter.strokePath();\n }\n else {\n this.streamWriter.fillPath(isEvenOdd);\n }\n }\n };\n /* tslint:disable */\n PdfGraphics.prototype.drawImage = function (arg1, arg2, arg3, arg4, arg5) {\n if (typeof arg2 === 'number' && typeof arg3 === 'number' && typeof arg4 === 'undefined') {\n var size = arg1.physicalDimension;\n this.drawImage(arg1, arg2, arg3, size.width, size.height);\n }\n else {\n var temparg2 = arg2;\n var temparg3 = arg3;\n var temparg4 = arg4;\n var temparg5 = arg5;\n arg1.save();\n var matrix = new PdfTransformationMatrix();\n this.getTranslateTransform(temparg2, (temparg3 + temparg5), matrix);\n this.getScaleTransform(arg4, arg5, matrix);\n this.pdfStreamWriter.write('q');\n this.pdfStreamWriter.modifyCtm(matrix);\n // Output template.\n var resources = this.getResources.getResources();\n if (typeof this.pageLayer !== 'undefined' && this.page != null) {\n resources.document = this.page.document;\n }\n var name_2 = resources.getName(arg1);\n if (typeof this.pageLayer !== 'undefined') {\n this.page.setResources(resources);\n }\n this.pdfStreamWriter.executeObject(name_2);\n this.pdfStreamWriter.write(Operators.restoreState);\n this.pdfStreamWriter.write(Operators.newLine);\n var resource = this.getResources.getResources();\n resource.requireProcedureSet(this.procedureSets.imageB);\n resource.requireProcedureSet(this.procedureSets.imageC);\n resource.requireProcedureSet(this.procedureSets.imageI);\n resource.requireProcedureSet(this.procedureSets.text);\n }\n };\n //Implementation\n /* tslint:disable */\n /**\n * Returns `bounds` of the line info.\n * @private\n */\n PdfGraphics.prototype.getLineBounds = function (lineIndex, result, font, layoutRectangle, format) {\n var bounds;\n if (!result.empty && lineIndex < result.lineCount && lineIndex >= 0) {\n var line = result.lines[lineIndex];\n var vShift = this.getTextVerticalAlignShift(result.actualSize.height, layoutRectangle.height, format);\n var y = vShift + layoutRectangle.y + (result.lineHeight * lineIndex);\n var lineWidth = line.width;\n var hShift = this.getHorizontalAlignShift(lineWidth, layoutRectangle.width, format);\n var lineIndent = this.getLineIndent(line, format, layoutRectangle, (lineIndex === 0));\n hShift += (!this.rightToLeft(format)) ? lineIndent : 0;\n var x = layoutRectangle.x + hShift;\n /* tslint:disable */\n var width = (!this.shouldJustify(line, layoutRectangle.width, format)) ? lineWidth - lineIndent : layoutRectangle.width - lineIndent; /* tslint:enable */\n var height = result.lineHeight;\n bounds = new RectangleF(x, y, width, height);\n }\n else {\n bounds = new RectangleF(0, 0, 0, 0);\n }\n return bounds;\n };\n /**\n * Creates `lay outed rectangle` depending on the text settings.\n * @private\n */\n PdfGraphics.prototype.checkCorrectLayoutRectangle = function (textSize, x, y, format) {\n var layoutedRectangle = new RectangleF(x, y, textSize.width, textSize.width);\n if (format != null) {\n switch (format.alignment) {\n case PdfTextAlignment.Center:\n layoutedRectangle.x -= layoutedRectangle.width / 2;\n break;\n case PdfTextAlignment.Right:\n layoutedRectangle.x -= layoutedRectangle.width;\n break;\n }\n switch (format.lineAlignment) {\n case PdfVerticalAlignment.Middle:\n layoutedRectangle.y -= layoutedRectangle.height / 2;\n break;\n case PdfVerticalAlignment.Bottom:\n layoutedRectangle.y -= layoutedRectangle.height;\n break;\n }\n }\n return layoutedRectangle;\n };\n /**\n * Sets the `layer` for the graphics.\n * @private\n */\n PdfGraphics.prototype.setLayer = function (layer) {\n this.pageLayer = layer;\n var page = layer.page;\n if (page != null && typeof page !== 'undefined') {\n page.beginSave = this.pageSave;\n }\n };\n /**\n * Adding page number field before page saving.\n * @private\n */\n /* tslint:disable */\n PdfGraphics.prototype.pageSave = function (page) {\n if (page.graphics.automaticFields != null) {\n for (var i = 0; i < page.graphics.automaticFields.automaticFields.length; i++) {\n var fieldInfo = page.graphics.automaticFields.automaticFields[i];\n fieldInfo.field.performDraw(page.graphics, fieldInfo.location, fieldInfo.scalingX, fieldInfo.scalingY);\n }\n }\n };\n /**\n * `Draws a layout result`.\n * @private\n */\n PdfGraphics.prototype.drawStringLayoutResult = function (result, font, pen, brush, layoutRectangle, format) {\n if (!result.empty) {\n this.applyStringSettings(font, pen, brush, format, layoutRectangle);\n // Set text scaling\n var textScaling = (format != null) ? format.horizontalScalingFactor : 100.0;\n if (textScaling !== this.previousTextScaling && !this.isEmfTextScaled) {\n this.pdfStreamWriter.setTextScaling(textScaling);\n this.previousTextScaling = textScaling;\n }\n var height = (format == null || format.lineSpacing === 0) ? font.height : format.lineSpacing + font.height;\n var subScript = (format != null && format.subSuperScript === PdfSubSuperScript.SubScript);\n var shift = 0;\n shift = (subScript) ? height - (font.height + font.metrics.getDescent(format)) : (height - font.metrics.getAscent(format));\n this.shift = shift;\n this.pdfStreamWriter.startNextLine(layoutRectangle.x, layoutRectangle.y - shift);\n this.pdfStreamWriter.setLeading(+height);\n var resultHeight = 0;\n var remainingString = '';\n for (var i = 0; i < result.lines.length; i++) {\n resultHeight += result.lineHeight;\n if ((layoutRectangle.y + resultHeight) > this.clientSize.height) {\n this.startCutIndex = i;\n break;\n }\n }\n for (var j = this.startCutIndex; (j < result.lines.length && j >= 0); j++) {\n remainingString += result.lines[j].text;\n }\n var bounds = new RectangleF(layoutRectangle.x, layoutRectangle.y, layoutRectangle.width, layoutRectangle.height);\n this.drawLayoutResult(result, font, format, layoutRectangle);\n this.underlineStrikeoutText(pen, brush, result, font, bounds, format);\n this.isEmfPlus = false;\n this.isUseFontSize = false;\n if (this.startCutIndex !== -1) {\n var page = this.getNextPage();\n page.graphics.drawString(remainingString, font, pen, brush, layoutRectangle.x, 0, layoutRectangle.width, 0, format);\n }\n }\n else {\n throw new Error('ArgumentNullException:result');\n }\n };\n /**\n * Gets the `next page`.\n * @private\n */\n PdfGraphics.prototype.getNextPage = function () {\n var section = this.currentPage.section;\n var nextPage = null;\n var index = section.indexOf(this.currentPage);\n if (index === section.count - 1) {\n nextPage = section.add();\n }\n else {\n nextPage = section.getPages()[index + 1];\n }\n return nextPage;\n };\n PdfGraphics.prototype.setClip = function (rectangle, mode) {\n if (typeof mode === 'undefined') {\n this.setClip(rectangle, PdfFillMode.Winding);\n }\n else {\n this.pdfStreamWriter.appendRectangle(rectangle);\n this.pdfStreamWriter.clipPath((mode === PdfFillMode.Alternate));\n }\n };\n /**\n * Applies all the `text settings`.\n * @private\n */\n PdfGraphics.prototype.applyStringSettings = function (font, pen, brush, format, bounds) {\n var setLineWidth = false;\n var tm = this.getTextRenderingMode(pen, brush, format);\n this.stateControl(pen, brush, font, format);\n this.pdfStreamWriter.beginText();\n if ((tm) !== this.previousTextRenderingMode) {\n this.pdfStreamWriter.setTextRenderingMode(tm);\n this.previousTextRenderingMode = tm;\n }\n // Set character spacing.\n var cs = (format != null) ? format.characterSpacing : 0;\n if (cs !== this.previousCharacterSpacing && !this.isEmfTextScaled) {\n this.pdfStreamWriter.setCharacterSpacing(cs);\n this.previousCharacterSpacing = cs;\n }\n // Set word spacing.\n // NOTE: it works only if the space code is equal to 32 (0x20).\n var ws = (format != null) ? format.wordSpacing : 0;\n if (ws !== this.previousWordSpacing) {\n this.pdfStreamWriter.setWordSpacing(ws);\n this.previousWordSpacing = ws;\n }\n };\n /**\n * Calculates `shift value` if the text is vertically aligned.\n * @private\n */\n PdfGraphics.prototype.getTextVerticalAlignShift = function (textHeight, boundsHeight, format) {\n var shift = 0;\n if (boundsHeight >= 0 && format != null && format.lineAlignment !== PdfVerticalAlignment.Top) {\n switch (format.lineAlignment) {\n case PdfVerticalAlignment.Middle:\n shift = (boundsHeight - textHeight) / 2;\n break;\n case PdfVerticalAlignment.Bottom:\n shift = boundsHeight - textHeight;\n break;\n }\n }\n return shift;\n };\n /* tslint:disable */\n /**\n * `Draws layout result`.\n * @private\n */\n PdfGraphics.prototype.drawLayoutResult = function (result, font, format, layoutRectangle) {\n var vAlignShift = this.getTextVerticalAlignShift(result.actualSize.height, layoutRectangle.height, format);\n if (vAlignShift !== 0) {\n this.pdfStreamWriter.startNextLine(0, vAlignShift);\n }\n var lines = result.lines;\n for (var i = 0, len = lines.length; (i < len && i !== this.startCutIndex); i++) {\n var lineInfo = lines[i];\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var hAlignShift = this.getHorizontalAlignShift(lineWidth, layoutRectangle.width, format);\n var lineIndent = this.getLineIndent(lineInfo, format, layoutRectangle, (i === 0));\n hAlignShift += (!this.rightToLeft(format)) ? lineIndent : 0;\n if (hAlignShift !== 0 && !this.isEmfTextScaled) {\n this.pdfStreamWriter.startNextLine(hAlignShift, 0);\n }\n this.drawAsciiLine(lineInfo, layoutRectangle, font, format);\n if (hAlignShift !== 0 && !this.isEmfTextScaled) {\n this.pdfStreamWriter.startNextLine(-hAlignShift, 0);\n }\n if (this.isOverloadWithPosition && lines.length > 1) {\n this.pdfStreamWriter.startNextLine(-(layoutRectangle.x), 0);\n layoutRectangle.x = 0;\n layoutRectangle.width = this.clientSize.width;\n this.isOverloadWithPosition = false;\n this.isPointOverload = true;\n }\n }\n this.getResources.getResources().requireProcedureSet(this.procedureSets.text);\n if (vAlignShift !== 0) {\n this.pdfStreamWriter.startNextLine(0, -(vAlignShift - result.lineHeight));\n }\n this.pdfStreamWriter.endText();\n };\n /**\n * `Draws Ascii line`.\n * @private\n */\n PdfGraphics.prototype.drawAsciiLine = function (lineInfo, layoutRectangle, font, format) {\n this.justifyLine(lineInfo, layoutRectangle.width, format);\n var value = '';\n if (lineInfo.text.indexOf('(') !== -1 || lineInfo.text.indexOf(')') !== -1) {\n for (var i = 0; i < lineInfo.text.length; i++) {\n if (lineInfo.text[i] === '(') {\n value += '\\\\\\(';\n }\n else if (lineInfo.text[i] === ')') {\n value += '\\\\\\)';\n }\n else {\n value += lineInfo.text[i];\n }\n }\n }\n if (value === '') {\n value = lineInfo.text;\n }\n var line = '(' + value + ')';\n this.pdfStreamWriter.showNextLineText(new PdfString(line));\n };\n /**\n * `Justifies` the line if needed.\n * @private\n */\n PdfGraphics.prototype.justifyLine = function (lineInfo, boundsWidth, format) {\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var shouldJustify = this.shouldJustify(lineInfo, boundsWidth, format);\n var hasWordSpacing = (format != null && format.wordSpacing !== 0);\n var symbols = StringTokenizer.spaces;\n var whitespacesCount = StringTokenizer.getCharsCount(line, symbols);\n var wordSpace = 0;\n if (shouldJustify) {\n // Correct line width.\n if (hasWordSpacing) {\n lineWidth -= (whitespacesCount * format.wordSpacing);\n }\n var difference = boundsWidth - lineWidth;\n wordSpace = difference / whitespacesCount;\n this.pdfStreamWriter.setWordSpacing(wordSpace);\n }\n else {\n // If there is justifying, but the line shouldn't be justified, restore default word spacing.\n if (hasWordSpacing) {\n this.pdfStreamWriter.setWordSpacing(format.wordSpacing);\n }\n else {\n this.pdfStreamWriter.setWordSpacing(0);\n }\n }\n return wordSpace;\n };\n /**\n * `Reset` or reinitialize the current graphic value.\n * @private\n */\n PdfGraphics.prototype.reset = function (size) {\n this.canvasSize = size;\n this.streamWriter.clear();\n this.initialize();\n this.initializeCoordinates();\n };\n /**\n * Checks whether the line should be `justified`.\n * @private\n */\n PdfGraphics.prototype.shouldJustify = function (lineInfo, boundsWidth, format) {\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var justifyStyle = (format != null && format.alignment === PdfTextAlignment.Justify);\n var goodWidth = (boundsWidth >= 0 && lineWidth < boundsWidth);\n var symbols = StringTokenizer.spaces;\n var whitespacesCount = StringTokenizer.getCharsCount(line, symbols);\n var hasSpaces = (whitespacesCount > 0 && line[0] !== StringTokenizer.whiteSpace);\n var goodLineBreakStyle = ((lineInfo.lineType & LineType.LayoutBreak) > 0);\n /* tslint:disable */\n var shouldJustify = (justifyStyle && goodWidth && hasSpaces && (goodLineBreakStyle || format.alignment === PdfTextAlignment.Justify)); /* tslint:enable */\n return shouldJustify;\n };\n /* tslint:disable */\n /**\n * Emulates `Underline, Strikeout` of the text if needed.\n * @private\n */\n PdfGraphics.prototype.underlineStrikeoutText = function (pen, brush, result, font, layoutRectangle, format) {\n if (font.underline || font.strikeout) {\n // Calculate line width.\n var linePen = this.createUnderlineStikeoutPen(pen, brush, font, format);\n if (linePen != null) {\n // Approximate line positions.\n var vShift = this.getTextVerticalAlignShift(result.actualSize.height, layoutRectangle.height, format);\n var underlineYOffset = 0;\n underlineYOffset = layoutRectangle.y + vShift + font.metrics.getAscent(format) + 1.5 * linePen.width;\n var strikeoutYOffset = layoutRectangle.y + vShift + font.metrics.getHeight(format) / 2 + 1.5 * linePen.width;\n var lines = result.lines;\n // Run through the text and draw lines.\n for (var i = 0, len = result.lineCount; i < len; i++) {\n var lineInfo = lines[i];\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var hShift = this.getHorizontalAlignShift(lineWidth, layoutRectangle.width, format);\n var lineIndent = this.getLineIndent(lineInfo, format, layoutRectangle, (i === 0));\n hShift += (!this.rightToLeft(format)) ? lineIndent : 0;\n var x1 = layoutRectangle.x + hShift;\n /* tslint:disable */\n var x2 = (!this.shouldJustify(lineInfo, layoutRectangle.width, format)) ? x1 + lineWidth - lineIndent : x1 + layoutRectangle.width - lineIndent;\n /* tslint:enable */\n if (font.underline) {\n var y = underlineYOffset;\n this.drawLine(linePen, x1, y, x2, y);\n underlineYOffset += result.lineHeight;\n }\n if (font.strikeout) {\n var y = strikeoutYOffset;\n this.drawLine(linePen, x1, y, x2, y);\n strikeoutYOffset += result.lineHeight;\n }\n if (this.isPointOverload && lines.length > 1) {\n layoutRectangle.x = 0;\n layoutRectangle.width = this.clientSize.width;\n }\n }\n this.isPointOverload = false;\n }\n }\n };\n /**\n * `Creates a pen` for drawing lines in the text.\n * @private\n */\n PdfGraphics.prototype.createUnderlineStikeoutPen = function (pen, brush, font, format) {\n // Calculate line width.\n var lineWidth = font.metrics.getSize(format) / 20;\n var linePen = null;\n // Create a pen fo the lines.\n if (pen != null) {\n linePen = new PdfPen(pen.color, lineWidth);\n }\n else if (brush != null) {\n linePen = new PdfPen(brush, lineWidth);\n }\n return linePen;\n };\n /**\n * Return `text rendering mode`.\n * @private\n */\n PdfGraphics.prototype.getTextRenderingMode = function (pen, brush, format) {\n var tm = TextRenderingMode.None;\n if (pen != null && brush != null) {\n tm = TextRenderingMode.FillStroke;\n }\n else if (pen != null) {\n tm = TextRenderingMode.Stroke;\n }\n else {\n tm = TextRenderingMode.Fill;\n }\n if (format != null && format.clipPath) {\n tm |= TextRenderingMode.ClipFlag;\n }\n return tm;\n };\n /**\n * Returns `line indent` for the line.\n * @private\n */\n PdfGraphics.prototype.getLineIndent = function (lineInfo, format, layoutBounds, firstLine) {\n var lineIndent = 0;\n var firstParagraphLine = ((lineInfo.lineType & LineType.FirstParagraphLine) > 0);\n if (format != null && firstParagraphLine) {\n lineIndent = (firstLine) ? format.firstLineIndent : format.paragraphIndent;\n lineIndent = (layoutBounds.width > 0) ? Math.min(layoutBounds.width, lineIndent) : lineIndent;\n }\n return lineIndent;\n };\n /**\n * Calculates shift value if the line is `horizontaly aligned`.\n * @private\n */\n PdfGraphics.prototype.getHorizontalAlignShift = function (lineWidth, boundsWidth, format) {\n var shift = 0;\n if (boundsWidth >= 0 && format != null && format.alignment !== PdfTextAlignment.Left) {\n switch (format.alignment) {\n case PdfTextAlignment.Center:\n shift = (boundsWidth - lineWidth) / 2;\n break;\n case PdfTextAlignment.Right:\n shift = boundsWidth - lineWidth;\n break;\n }\n }\n return shift;\n };\n /**\n * Gets or sets the value that indicates `text direction` mode.\n * @private\n */\n PdfGraphics.prototype.rightToLeft = function (format) {\n var rtl = (format != null && format.rightToLeft);\n return rtl;\n };\n PdfGraphics.prototype.stateControl = function (pen, brush, font, format) {\n if (typeof format === 'undefined') {\n this.stateControl(pen, brush, font, null);\n }\n else {\n var saveState = false;\n if (brush !== null) {\n var solidBrush = brush;\n if (typeof this.pageLayer !== 'undefined' && this.pageLayer != null) {\n if (this.colorSpaceChanged === false) {\n this.lastDocumentCS = this.pageLayer.page.document.colorSpace;\n this.lastGraphicsCS = this.pageLayer.page.graphics.colorSpace;\n this.colorSpace = this.pageLayer.page.document.colorSpace;\n this.currentColorSpace = this.pageLayer.page.document.colorSpace;\n this.colorSpaceChanged = true;\n }\n }\n this.initCurrentColorSpace(this.currentColorSpace);\n }\n else if (pen != null) {\n var pdfPen = pen;\n if (typeof this.pageLayer !== 'undefined' && this.pageLayer != null) {\n /* tslint:disable */\n this.colorSpace = this.pageLayer.page.document.colorSpace;\n this.currentColorSpace = this.pageLayer.page.document.colorSpace;\n }\n this.initCurrentColorSpace(this.currentColorSpace);\n }\n this.penControl(pen, saveState);\n this.brushControl(brush, saveState);\n this.fontControl(font, format, saveState);\n }\n };\n /**\n * Initializes the `current color space`.\n * @private\n */\n PdfGraphics.prototype.initCurrentColorSpace = function (colorspace) {\n var re = this.getResources.getResources();\n if (!this.bCSInitialized) {\n this.pdfStreamWriter.setColorSpace('Device' + this.currentColorSpaces[this.currentColorSpace], true);\n this.pdfStreamWriter.setColorSpace('Device' + this.currentColorSpaces[this.currentColorSpace], false);\n this.bCSInitialized = true;\n }\n };\n /**\n * Controls the `pen state`.\n * @private\n */\n PdfGraphics.prototype.penControl = function (pen, saveState) {\n if (pen != null) {\n this.currentPen = pen;\n this.colorSpace = PdfColorSpace.Rgb;\n /* tslint:disable */\n pen.monitorChanges(this.currentPen, this.pdfStreamWriter, this.getResources, saveState, this.colorSpace, this.matrix.clone());\n /* tslint:enable */\n this.currentPen = pen.clone();\n }\n };\n /**\n * Controls the `brush state`.\n * @private\n */\n PdfGraphics.prototype.brushControl = function (brush, saveState) {\n if (brush != null) {\n this.currentBrush = brush;\n /* tslint:disable */\n brush.monitorChanges(this.currentBrush, this.pdfStreamWriter, this.getResources, saveState, this.colorSpace);\n /* tslint:enable */\n this.currentBrush = brush;\n brush = null;\n }\n };\n /**\n * Saves the font and other `font settings`.\n * @private\n */\n PdfGraphics.prototype.fontControl = function (font, format, saveState) {\n if (font != null) {\n var curSubSuper = (format != null) ? format.subSuperScript : PdfSubSuperScript.None;\n /* tslint:disable */\n var prevSubSuper = (this.currentStringFormat != null) ? this.currentStringFormat.subSuperScript : PdfSubSuperScript.None; /* tslint:enable */\n if (saveState || font !== this.currentFont || curSubSuper !== prevSubSuper) {\n var resources = this.getResources.getResources();\n this.currentFont = font;\n this.currentStringFormat = format;\n var size = font.metrics.getSize(format);\n /* tslint:disable */\n this.isEmfTextScaled = false;\n var fontName = resources.getName(font);\n this.pdfStreamWriter.setFont(font, fontName, size);\n }\n }\n };\n PdfGraphics.prototype.setTransparency = function (arg1, arg2, arg3) {\n if (typeof arg2 === 'undefined') {\n this.istransparencySet = true;\n this.setTransparency(arg1, arg1, PdfBlendMode.Normal);\n }\n else if (typeof arg2 === 'number' && typeof arg3 === 'undefined') {\n this.setTransparency(arg1, arg2, PdfBlendMode.Normal);\n }\n else {\n if (this.trasparencies == null) {\n this.trasparencies = new TemporaryDictionary();\n }\n var transp = null;\n var td = new TransparencyData(arg1, arg2, arg3);\n if (this.trasparencies.containsKey(td)) {\n transp = this.trasparencies.getValue(td);\n }\n if (transp == null) {\n transp = new PdfTransparency(arg1, arg2, arg3);\n this.trasparencies.setValue(td, transp);\n }\n var resources = this.getResources.getResources();\n var name_3 = resources.getName(transp);\n var sw = this.streamWriter;\n sw.setGraphicsState(name_3);\n }\n };\n PdfGraphics.prototype.clipTranslateMargins = function (x, y, left, top, right, bottom) {\n if (x instanceof RectangleF && typeof y === 'undefined') {\n this.clipBounds = x;\n this.pdfStreamWriter.writeComment('Clip margins.');\n this.pdfStreamWriter.appendRectangle(x);\n this.pdfStreamWriter.closePath();\n this.pdfStreamWriter.clipPath(false);\n this.pdfStreamWriter.writeComment('Translate co-ordinate system.');\n this.translateTransform(x.x, x.y);\n }\n else if (typeof x === 'number') {\n var clipArea = new RectangleF(left, top, this.size.width - left - right, this.size.height - top - bottom);\n this.clipBounds = clipArea;\n this.pdfStreamWriter.writeComment(\"Clip margins.\");\n this.pdfStreamWriter.appendRectangle(clipArea);\n this.pdfStreamWriter.closePath();\n this.pdfStreamWriter.clipPath(false);\n this.pdfStreamWriter.writeComment(\"Translate co-ordinate system.\");\n this.translateTransform(x, y);\n }\n };\n /**\n * `Updates y` co-ordinate.\n * @private\n */\n PdfGraphics.prototype.updateY = function (y) {\n return -y;\n };\n /**\n * Used to `translate the transformation`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // set pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // set translate transform\n * page1.graphics.translateTransform(100, 100);\n * //\n * // draw the rectangle after applying translate transform\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 0, y : 0}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @param offsetX The x-coordinate of the translation.\n * @param offsetY The y-coordinate of the translation.\n */\n PdfGraphics.prototype.translateTransform = function (offsetX, offsetY) {\n var matrix = new PdfTransformationMatrix();\n this.getTranslateTransform(offsetX, offsetY, matrix);\n this.pdfStreamWriter.modifyCtm(matrix);\n this.matrix.multiply(matrix);\n };\n /**\n * `Translates` coordinates of the input matrix.\n * @private\n */\n PdfGraphics.prototype.getTranslateTransform = function (x, y, input) {\n input.translate(x, this.updateY(y));\n return input;\n };\n /* tslint:disable */\n /**\n * Applies the specified `scaling operation` to the transformation matrix of this Graphics by prepending it to the object's transformation matrix.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // create pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // apply scaling trasformation\n * page1.graphics.scaleTransform(1.5, 2);\n * //\n * // draw the rectangle after applying scaling transform\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 100, y : 100}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @param scaleX Scale factor in the x direction.\n * @param scaleY Scale factor in the y direction.\n */\n /* tslint:enable */\n PdfGraphics.prototype.scaleTransform = function (scaleX, scaleY) {\n var matrix = new PdfTransformationMatrix();\n this.getScaleTransform(scaleX, scaleY, matrix);\n this.pdfStreamWriter.modifyCtm(matrix);\n this.matrix.multiply(matrix);\n };\n /**\n * `Scales` coordinates of the input matrix.\n * @private\n */\n PdfGraphics.prototype.getScaleTransform = function (x, y, input) {\n if (input == null) {\n input = new PdfTransformationMatrix();\n }\n input.scale(x, y);\n return input;\n };\n /**\n * Applies the specified `rotation` to the transformation matrix of this Graphics.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // create pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // set RotateTransform with 25 degree of angle\n * page1.graphics.rotateTransform(25);\n * //\n * // draw the rectangle after RotateTransformation\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 100, y : 100}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @param angle Angle of rotation in degrees.\n */\n PdfGraphics.prototype.rotateTransform = function (angle) {\n var matrix = new PdfTransformationMatrix();\n this.getRotateTransform(angle, matrix);\n this.pdfStreamWriter.modifyCtm(matrix);\n this.matrix.multiply(matrix);\n };\n /**\n * `Initializes coordinate system`.\n * @private\n */\n PdfGraphics.prototype.initializeCoordinates = function () {\n // Matrix equation: TM(T-1)=M', where T=[1 0 0 -1 0 h]\n this.pdfStreamWriter.writeComment('Change co-ordinate system to left/top.');\n // Translate co-ordinates only, don't flip.\n if (this.mediaBoxUpperRightBound !== -(this.size.height)) {\n if (this.cropBox == null) {\n if (this.mediaBoxUpperRightBound === this.size.height || this.mediaBoxUpperRightBound === 0) {\n this.translateTransform(0, this.updateY(this.size.height));\n }\n else {\n this.translateTransform(0, this.updateY(this.mediaBoxUpperRightBound));\n }\n }\n }\n };\n /**\n * `Rotates` coordinates of the input matrix.\n * @private\n */\n PdfGraphics.prototype.getRotateTransform = function (angle, input) {\n if (input == null || typeof input === 'undefined') {\n input = new PdfTransformationMatrix();\n }\n input.rotate(this.updateY(angle));\n return input;\n };\n /**\n * `Saves` the current state of this Graphics and identifies the saved state with a GraphicsState.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // create pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // save the graphics state\n * let state1 : PdfGraphicsState = page1.graphics.save();\n * //\n * page1.graphics.scaleTransform(1.5, 2);\n * // draw the rectangle\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 100, y : 100}, {width : 100, height : 50}));\n * // restore the graphics state\n * page1.graphics.restore(state1);\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n PdfGraphics.prototype.save = function () {\n var state = new PdfGraphicsState(this, this.matrix.clone());\n state.brush = this.currentBrush;\n state.pen = this.currentPen;\n state.font = this.currentFont;\n state.colorSpace = this.currentColorSpace;\n state.characterSpacing = this.previousCharacterSpacing;\n state.wordSpacing = this.previousWordSpacing;\n state.textScaling = this.previousTextScaling;\n state.textRenderingMode = this.previousTextRenderingMode;\n this.graphicsState.push(state);\n this.pdfStreamWriter.saveGraphicsState();\n return state;\n };\n PdfGraphics.prototype.restore = function (state) {\n if (typeof state === 'undefined') {\n if (this.graphicsState.length > 0) {\n this.doRestoreState();\n }\n }\n else {\n if (this.graphicsState.indexOf(state) !== -1) {\n for (;;) {\n if (this.graphicsState.length === 0) {\n break;\n }\n var popState = this.doRestoreState();\n if (popState === state) {\n break;\n }\n }\n }\n }\n };\n /**\n * `Restores graphics state`.\n * @private\n */\n PdfGraphics.prototype.doRestoreState = function () {\n var state = this.graphicsState.pop();\n this.transformationMatrix = state.matrix;\n this.currentBrush = state.brush;\n this.currentPen = state.pen;\n this.currentFont = state.font;\n this.currentColorSpace = state.colorSpace;\n this.previousCharacterSpacing = state.characterSpacing;\n this.previousWordSpacing = state.wordSpacing;\n this.previousTextScaling = state.textScaling;\n this.previousTextRenderingMode = state.textRenderingMode;\n this.pdfStreamWriter.restoreGraphicsState();\n return state;\n };\n // Constants\n /**\n * Specifies the mask of `path type values`.\n * @private\n */\n PdfGraphics.pathTypesValuesMask = 0xf;\n /**\n * Checks whether the object is `transparencyObject`.\n * @hidden\n * @private\n */\n PdfGraphics.transparencyObject = false;\n return PdfGraphics;\n}());\nexport { PdfGraphics };\n/**\n * `GetResourceEventHandler` class is alternate for event handlers and delegates.\n * @private\n * @hidden\n */\nvar GetResourceEventHandler = /** @class */ (function () {\n /**\n * Initialize instance of `GetResourceEventHandler` class.\n * Alternate for event handlers and delegates.\n * @private\n */\n function GetResourceEventHandler(sender) {\n this.sender = sender;\n }\n /**\n * Return the instance of `PdfResources` class.\n * @private\n */\n GetResourceEventHandler.prototype.getResources = function () {\n return this.sender.getResources();\n };\n return GetResourceEventHandler;\n}());\nexport { GetResourceEventHandler };\nvar PdfGraphicsState = /** @class */ (function () {\n function PdfGraphicsState(graphics, matrix) {\n /**\n * Stores `previous rendering mode`.\n * @default TextRenderingMode.Fill\n * @private\n */\n this.internalTextRenderingMode = TextRenderingMode.Fill;\n /**\n * `Previous character spacing` value or 0.\n * @default 0.0\n * @private\n */\n this.internalCharacterSpacing = 0.0;\n /**\n * `Previous word spacing` value or 0.\n * @default 0.0\n * @private\n */\n this.internalWordSpacing = 0.0;\n /**\n * The previously used `text scaling value`.\n * @default 100.0\n * @private\n */\n this.internalTextScaling = 100.0;\n /**\n * `Current color space`.\n * @default PdfColorSpace.Rgb\n * @private\n */\n this.pdfColorSpace = PdfColorSpace.Rgb;\n if (typeof graphics !== 'undefined') {\n this.pdfGraphics = graphics;\n this.transformationMatrix = matrix;\n }\n }\n Object.defineProperty(PdfGraphicsState.prototype, \"graphics\", {\n // Properties\n /**\n * Gets the parent `graphics object`.\n * @private\n */\n get: function () {\n return this.pdfGraphics;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"matrix\", {\n /**\n * Gets the `current matrix`.\n * @private\n */\n get: function () {\n return this.transformationMatrix;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"characterSpacing\", {\n /**\n * Gets or sets the `current character spacing`.\n * @private\n */\n get: function () {\n return this.internalCharacterSpacing;\n },\n set: function (value) {\n this.internalCharacterSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"wordSpacing\", {\n /**\n * Gets or sets the `word spacing` value.\n * @private\n */\n get: function () {\n return this.internalWordSpacing;\n },\n set: function (value) {\n this.internalWordSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"textScaling\", {\n /**\n * Gets or sets the `text scaling` value.\n * @private\n */\n get: function () {\n return this.internalTextScaling;\n },\n set: function (value) {\n this.internalTextScaling = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"pen\", {\n /**\n * Gets or sets the `current pen` object.\n * @private\n */\n get: function () {\n return this.pdfPen;\n },\n set: function (value) {\n this.pdfPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"brush\", {\n /**\n * Gets or sets the `brush`.\n * @private\n */\n get: function () {\n return this.pdfBrush;\n },\n set: function (value) {\n this.pdfBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"font\", {\n /**\n * Gets or sets the `current font` object.\n * @private\n */\n get: function () {\n return this.pdfFont;\n },\n set: function (value) {\n this.pdfFont = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"colorSpace\", {\n /**\n * Gets or sets the `current color space` value.\n * @private\n */\n get: function () {\n return this.pdfColorSpace;\n },\n set: function (value) {\n this.pdfColorSpace = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"textRenderingMode\", {\n /**\n * Gets or sets the `text rendering mode`.\n * @private\n */\n get: function () {\n return this.internalTextRenderingMode;\n },\n set: function (value) {\n this.internalTextRenderingMode = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGraphicsState;\n}());\nexport { PdfGraphicsState };\nvar TransparencyData = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `TransparencyData` class.\n * @private\n */\n function TransparencyData(alphaPen, alphaBrush, blendMode) {\n this.alphaPen = alphaPen;\n this.alphaBrush = alphaBrush;\n this.blendMode = blendMode;\n }\n return TransparencyData;\n}());\n","import { PdfStream } from './../primitives/pdf-stream';\nimport { PdfGraphics, GetResourceEventHandler } from './../graphics/pdf-graphics';\nimport { PdfPageLayerCollection } from './pdf-page-layer-collection';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfColorSpace } from './../graphics/enum';\n/**\n * The `PdfPageLayer` used to create layers in PDF document.\n * @private\n */\nvar PdfPageLayer = /** @class */ (function () {\n function PdfPageLayer(page, streamClipPageTemplates) {\n // private bSaved : boolean;\n /**\n * Local Variable to store the `color space` of the document.\n * @private\n */\n this.pdfColorSpace = PdfColorSpace.Rgb;\n /**\n * Local Variable to set `visibility`.\n * @default true\n * @private\n */\n this.isVisible = true;\n /**\n * Indicates if `Sublayer` is present.\n * @default false\n * @private\n */\n this.sublayer = false;\n /**\n * Local variable to store `length` of the graphics.\n * @default 0\n * @private\n */\n this.contentLength = 0;\n /**\n * Instance for `PdfDictionaryProperties` Class.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n if (typeof streamClipPageTemplates === 'undefined') {\n this.pdfPage = page;\n this.clipPageTemplates = true;\n this.content = new PdfStream();\n }\n else if (streamClipPageTemplates instanceof PdfStream || streamClipPageTemplates === null) {\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n if (streamClipPageTemplates == null) {\n throw new Error('ArgumentNullException:stream');\n }\n this.pdfPage = page;\n this.content = streamClipPageTemplates;\n }\n else {\n this.constructor(page);\n this.clipPageTemplates = streamClipPageTemplates;\n }\n }\n Object.defineProperty(PdfPageLayer.prototype, \"colorSpace\", {\n // Properties\n /**\n * Get or set the `color space`.\n * @private\n */\n get: function () {\n return this.pdfColorSpace;\n },\n set: function (value) {\n this.pdfColorSpace = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"page\", {\n /**\n * Gets parent `page` of the layer.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"layerId\", {\n /**\n * Gets and Sets the `id of the layer`.\n * @private\n */\n get: function () {\n return this.layerid;\n },\n set: function (value) {\n this.layerid = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"name\", {\n /**\n * Gets or sets the `name` of the layer.\n * @private\n */\n get: function () {\n return this.layerName;\n },\n set: function (value) {\n this.layerName = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"visible\", {\n /**\n * Gets or sets the `visibility` of the layer.\n * @private\n */\n get: function () {\n return this.isVisible;\n },\n set: function (value) {\n this.isVisible = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"graphics\", {\n /**\n * Gets `Graphics` context of the layer, used to draw various graphical content on layer.\n * @private\n */\n get: function () {\n if ((this.pdfGraphics == null)) {\n this.initializeGraphics(this.page);\n }\n return this.pdfGraphics;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"layers\", {\n /**\n * Gets the collection of `PdfPageLayer`, this collection handle by the class 'PdfPageLayerCollection'.\n * @private\n */\n get: function () {\n if (this.layer == null) {\n this.layer = new PdfPageLayerCollection(this.page);\n this.layer.sublayer = true;\n return this.layer;\n }\n else {\n return this.layer;\n }\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Adds` a new PDF Page layer.\n * @private\n */\n PdfPageLayer.prototype.add = function () {\n var layer = new PdfPageLayer(this.pdfPage);\n layer.name = '';\n return layer;\n };\n /**\n * Returns a value indicating the `sign` of a single-precision floating-point number.\n * @private\n */\n PdfPageLayer.prototype.sign = function (number) {\n if (number === 0) {\n return 0;\n }\n else if (number > 0) {\n return 1;\n }\n else {\n return -1;\n }\n };\n /**\n * `Initializes Graphics context` of the layer.\n * @private\n */\n PdfPageLayer.prototype.initializeGraphics = function (page) {\n var oPage = page;\n var gr = new GetResourceEventHandler(this.page);\n var cropBox = null;\n this.pdfGraphics = new PdfGraphics(page.size, gr, this.content);\n this.pdfGraphics.mediaBoxUpperRightBound = 0;\n if (oPage != null) {\n var sc = oPage.section.parent;\n if (sc != null) {\n this.pdfGraphics.colorSpace = sc.document.colorSpace;\n this.colorSpace = sc.document.colorSpace;\n }\n }\n // Transform coordinates to the left/top and activate margins.\n var isSame = (this.sign(page.origin.y) === this.sign(page.origin.x));\n // if (page != null) {\n if (page.origin.x >= 0 && page.origin.y >= 0 || !(isSame)) {\n this.pdfGraphics.initializeCoordinates();\n }\n else {\n // this.m_graphics.InitializeCoordinates(page);\n }\n var clipRect = oPage.section.getActualBounds(oPage, true);\n var margins = oPage.section.pageSettings.margins;\n if (this.clipPageTemplates) {\n if (page.origin.x >= 0 && page.origin.y >= 0) {\n this.pdfGraphics.clipTranslateMargins(clipRect);\n }\n }\n else {\n this.graphics.clipTranslateMargins(clipRect.x, clipRect.y, margins.left, margins.top, margins.right, margins.bottom);\n }\n this.pdfGraphics.setLayer(this);\n // this.bSaved = false;\n };\n Object.defineProperty(PdfPageLayer.prototype, \"element\", {\n // IPdfWrapper Members\n /**\n * Gets the wrapped `element`.\n * @private\n */\n get: function () {\n return this.content;\n },\n enumerable: true,\n configurable: true\n });\n return PdfPageLayer;\n}());\nexport { PdfPageLayer };\n","/**\n * PdfCollection.ts class for EJ2-PDF\n * The class used to handle the collection of PdF objects.\n */\nvar PdfCollection = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `Collection` class.\n * @private\n */\n function PdfCollection() {\n //\n }\n Object.defineProperty(PdfCollection.prototype, \"count\", {\n // Properties\n /**\n * Gets the `Count` of stored objects.\n * @private\n */\n get: function () {\n if (typeof this.collection === 'undefined') {\n this.collection = [];\n }\n return this.collection.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCollection.prototype, \"list\", {\n /**\n * Gets the `list` of stored objects.\n * @private\n */\n get: function () {\n if (typeof this.collection === 'undefined') {\n this.collection = [];\n }\n return this.collection;\n },\n enumerable: true,\n configurable: true\n });\n return PdfCollection;\n}());\nexport { PdfCollection };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfPageLayerCollection.ts class for EJ2-PDF\n */\nimport { PdfPageBase } from './pdf-page-base';\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { PdfPageLayer } from './pdf-page-layer';\nimport { PdfCollection } from './../general/pdf-collection';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfStream } from './../primitives/pdf-stream';\n/**\n * The class provides methods and properties to handle the collections of `PdfPageLayer`.\n */\nvar PdfPageLayerCollection = /** @class */ (function (_super) {\n __extends(PdfPageLayerCollection, _super);\n function PdfPageLayerCollection(page) {\n var _this = _super.call(this) || this;\n /**\n * Stores the `number of first level layers` in the document.\n * @default 0\n * @private\n */\n _this.parentLayerCount = 0;\n /**\n * Indicates if `Sublayer` is present.\n * @default false\n * @private\n */\n _this.sublayer = false;\n /**\n * Stores the `optional content dictionary`.\n * @private\n */\n _this.optionalContent = new PdfDictionary();\n if (page instanceof PdfPageBase) {\n // if (page == null) {\n // throw new Error('ArgumentNullException:page');\n // }\n _this.page = page;\n var lPage = page;\n // if (lPage != null) {\n _this.parseLayers(lPage);\n // }\n }\n return _this;\n }\n PdfPageLayerCollection.prototype.items = function (index, value) {\n if (typeof index === 'number' && typeof value === 'undefined') {\n var obj = this.list[index];\n return obj;\n }\n else {\n if (value == null) {\n throw new Error('ArgumentNullException: layer');\n }\n if (value.page !== this.page) {\n throw new Error('ArgumentException: The layer belongs to another page');\n }\n // // Add/remove the layer.\n // let layer : PdfPageLayer = this.items(index);\n // if (layer != null) {\n // this.RemoveLayer(layer);\n // }\n // this.List[index] = value;\n // this.InsertLayer(index, value);\n }\n };\n PdfPageLayerCollection.prototype.add = function (firstArgument, secondArgument) {\n if (typeof firstArgument === 'undefined') {\n var layer = new PdfPageLayer(this.page);\n layer.name = '';\n this.add(layer);\n return layer;\n }\n else if (firstArgument instanceof PdfPageLayer) {\n // if (layer == null)\n // throw new ArgumentNullException(\"layer\");\n // if (layer.Page != m_page)\n // throw new ArgumentException(\"The layer belongs to another page\");\n var index = this.list.push(firstArgument);\n // Register layer.\n this.addLayer(index, firstArgument);\n return index;\n }\n else {\n return 0;\n }\n };\n /**\n * Registers `layer` at the page.\n * @private\n */\n PdfPageLayerCollection.prototype.addLayer = function (index, layer) {\n var reference = new PdfReferenceHolder(layer);\n this.page.contents.add(reference);\n };\n // private RemoveLayer(layer : PdfPageLayer) : void {\n // if (layer == null) {\n // throw new Error('ArgumentNullException:layer');\n // }\n // let reference : PdfReferenceHolder = new PdfReferenceHolder(layer);\n // if (this.page != null) {\n // this.page.Contents.Remove(reference);\n // }\n // }\n /**\n * Inserts `PdfPageLayer` into the collection at specified index.\n * @private\n */\n PdfPageLayerCollection.prototype.insert = function (index, layer) {\n // if (index < 0)\n // throw new ArgumentOutOfRangeException(\"index\", \"Value can not be less 0\");\n // if (layer == null)\n // throw new ArgumentNullException(\"layer\");\n // if (layer.Page != m_page)\n // throw new ArgumentException(\"The layer belongs to another page\");\n var list = [];\n var length = this.list.length;\n for (var i = index; i < length; i++) {\n list.push(this.list.pop());\n }\n this.list.push(layer);\n for (var i = 0; i < list.length; i++) {\n this.list.push(list[i]);\n }\n // Register layer.\n this.insertLayer(index, layer);\n };\n /**\n * Registers layer at the page.\n * @private\n */\n PdfPageLayerCollection.prototype.insertLayer = function (index, layer) {\n if (layer == null) {\n throw new Error('ArgumentNullException:layer');\n }\n var reference = new PdfReferenceHolder(layer);\n this.page.contents.insert(index, reference);\n };\n // tslint:disable\n /**\n * `Parses the layers`.\n * @private\n */\n PdfPageLayerCollection.prototype.parseLayers = function (loadedPage) {\n // if (loadedPage == null) {\n // throw new Error('ArgumentNullException:loadedPage');\n // }\n var contents = this.page.contents;\n var resource = this.page.getResources();\n var crossTable = null;\n var ocproperties = null;\n var propertie = null;\n var isLayerAdded = false;\n // if (loadedPage instanceof PdfPage) {\n crossTable = loadedPage.crossTable;\n // } else {\n // crossTable = (loadedPage as PdfLoadedPage).CrossTable;\n // Propertie = PdfCrossTable.Dereference(Resource[DictionaryProperties.Properties]) as PdfDictionary;\n // ocproperties = PdfCrossTable.Dereference((loadedPage as PdfLoadedPage).\n // Document.Catalog[DictionaryProperties.OCProperties]) as PdfDictionary;\n // }\n var saveStream = new PdfStream();\n var restoreStream = new PdfStream();\n var saveState = 'q';\n var newLine = '\\n';\n var restoreState = 'Q';\n // for (let index : number = 0; index < contents.Items.length; index++) {\n // let obj : IPdfPrimitive = contents[index];\n // let stream : PdfStream = crossTable.GetObject(obj) as PdfStream;\n // if (stream == null)\n // throw new PdfDocumentException(\"Invalid contents array.\");\n // // if (stream.Compress)\n // {\n // if (!loadedPage.Imported)\n // stream.Decompress();\n // }\n // byte[] contentId = stream.Data;\n // string str = PdfString.ByteToString(contentId);\n // if (!loadedPage.Imported && (contents.Count == 1) && ((stream.Data[stream.Data.Length - 2] ==\n // RestoreState) || (stream.Data[stream.Data.Length - 1] == RestoreState)))\n // {\n // byte[] content = stream.Data;\n // byte[] data = new byte[content.Length + 4];\n // data[0] = SaveState;\n // data[1] = NewLine;\n // content.CopyTo(data, 2);\n // data[data.Length - 2] = NewLine;\n // data[data.Length - 1] = RestoreState;\n // stream.Data = data;\n // }\n // if (ocproperties != null)\n // {\n // if (Propertie != null)\n // {\n // foreach (KeyValuePair prop in Propertie.Items)\n // {\n // String Key = prop.Key.ToString();\n // PdfReferenceHolder refh = prop.Value as PdfReferenceHolder;\n // PdfDictionary Dict = null;\n // if (refh != null)\n // {\n // Dict = refh.Object as PdfDictionary;\n // }\n // else\n // {\n // Dict = prop.Value as PdfDictionary;\n // }\n // PdfDictionary m_usage = PdfCrossTable.Dereference(Dict[DictionaryProperties.Usage]) as PdfDictionary;\n // if (m_usage != null)\n // {\n // if (str.Contains(Key))\n // {\n // PdfPageLayer layer = new PdfPageLayer(loadedPage, stream);\n // PdfDictionary printoption = PdfCrossTable.Dereference(m_usage[DictionaryProperties.Print])\n // as PdfDictionary;\n // if (printoption != null)\n // {\n // layer.m_printOption = printoption;\n // foreach (KeyValuePair value in printoption.Items)\n // {\n // if (value.Key.Value.Equals(DictionaryProperties.PrintState))\n // {\n // string printState = (value.Value as PdfName).Value;\n // if (printState.Equals(DictionaryProperties.OCGON))\n // {\n // layer.PrintState = PdfPrintState.AlwaysPrint;\n // break;\n // }\n // else\n // {\n // layer.PrintState = PdfPrintState.NeverPrint;\n // break;\n // }\n // }\n // }\n // }\n // PdfString layerName = PdfCrossTable.Dereference(Dict[DictionaryProperties.Name]) as PdfString;\n // layer.Name = layerName.Value;\n // List.add(layer);\n // isLayerAdded = true;\n // if(!str.Contains(\"EMC\"))\n // break;\n // }\n // }\n // else\n // {\n // if (str.Contains(Key))\n // {\n // PdfPageLayer layer = new PdfPageLayer(loadedPage, stream);\n // List.add(layer);\n // if(Dict.ContainsKey(DictionaryProperties.Name))\n // {\n // PdfString layerName = PdfCrossTable.Dereference(Dict[DictionaryProperties.Name]) as PdfString;\n // layer.Name = layerName.Value;\n // }\n // isLayerAdded = true;\n // break;\n // }\n // }\n // }\n // }\n // }\n // if (!isLayerAdded)\n // {\n // PdfPageLayer layer = new PdfPageLayer(loadedPage, stream);\n // List.add(layer);\n // }\n // else\n // isLayerAdded = false;\n // }\n var saveData = [];\n saveData.push(saveState);\n saveStream.data = saveData;\n contents.insert(0, new PdfReferenceHolder(saveStream));\n saveData = [];\n saveData.push(restoreState);\n restoreStream.data = saveData;\n contents.insert(contents.count, new PdfReferenceHolder(restoreStream));\n };\n /**\n * Returns `index of` the `PdfPageLayer` in the collection if exists, -1 otherwise.\n * @private\n */\n PdfPageLayerCollection.prototype.indexOf = function (layer) {\n if (layer == null) {\n throw new Error('ArgumentNullException: layer');\n }\n var index = this.list.indexOf(layer);\n return index;\n };\n return PdfPageLayerCollection;\n}(PdfCollection));\nexport { PdfPageLayerCollection };\n","/**\n * PdfTemplate.ts class for EJ2-PDF\n */\nimport { PdfStream } from './../../primitives/pdf-stream';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { PdfArray } from './../../primitives/pdf-array';\nimport { PdfGraphics } from './../pdf-graphics';\nimport { PdfResources } from './../pdf-resources';\nimport { PdfName } from './../../primitives/pdf-name';\nimport { PointF, SizeF, RectangleF } from './../../drawing/pdf-drawing';\nimport { GetResourceEventHandler } from './../pdf-graphics';\n/**\n * Represents `Pdf Template` object.\n * @private\n */\nvar PdfTemplate = /** @class */ (function () {\n function PdfTemplate(arg1, arg2) {\n /**\n * Initialize an instance for `DictionaryProperties` class.\n * @private\n * @hidden\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * Checks whether the transformation 'is performed'.\n * @default true\n * @private\n */\n this.writeTransformation = true;\n if (typeof arg1 === 'undefined') {\n //\n }\n else if (arg1 instanceof SizeF && typeof arg2 === 'undefined') {\n this.content = new PdfStream();\n var tempSize = new SizeF(arg1.width, arg1.height);\n this.setSize(tempSize);\n this.initialize();\n }\n else {\n this.content = new PdfStream();\n this.setSize(new SizeF(arg1, arg2));\n this.initialize();\n }\n }\n Object.defineProperty(PdfTemplate.prototype, \"size\", {\n //Properties\n /**\n * Gets the size of the 'PdfTemplate'.\n */\n get: function () {\n return this.templateSize;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTemplate.prototype, \"width\", {\n /**\n * Gets the width of the 'PdfTemplate'.\n */\n get: function () {\n return this.size.width;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTemplate.prototype, \"height\", {\n /**\n * Gets the height of the 'PdfTemplate'.\n */\n get: function () {\n return this.size.height;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTemplate.prototype, \"graphics\", {\n /**\n * Gets the `graphics` of the 'PdfTemplate'.\n */\n get: function () {\n if (this.pdfGraphics == null || typeof this.pdfGraphics === 'undefined') {\n var gr = new GetResourceEventHandler(this);\n var g = new PdfGraphics(this.size, gr, this.content);\n this.pdfGraphics = g;\n // if(this.writeTransformation) {\n // Transform co-ordinates to Top/Left.\n this.pdfGraphics.initializeCoordinates();\n // }\n }\n return this.pdfGraphics;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the resources and modifies the template dictionary.\n * @private\n */\n PdfTemplate.prototype.getResources = function () {\n if (this.resources == null) {\n this.resources = new PdfResources();\n this.content.items.setValue(this.dictionaryProperties.resources, this.resources);\n }\n return this.resources;\n };\n // Public methods\n /**\n * `Initialize` the type and subtype of the template.\n * @private\n */\n PdfTemplate.prototype.initialize = function () {\n this.addType();\n this.addSubType();\n };\n /**\n * `Adds type key`.\n * @private\n */\n PdfTemplate.prototype.addType = function () {\n var value = new PdfName(this.dictionaryProperties.xObject);\n this.content.items.setValue(this.dictionaryProperties.type, value);\n };\n /**\n * `Adds SubType key`.\n * @private\n */\n PdfTemplate.prototype.addSubType = function () {\n var value = new PdfName(this.dictionaryProperties.form);\n this.content.items.setValue(this.dictionaryProperties.subtype, value);\n };\n PdfTemplate.prototype.reset = function (size) {\n if (typeof size === 'undefined') {\n if (this.resources != null) {\n this.resources = null;\n this.content.remove(this.dictionaryProperties.resources);\n }\n if (this.graphics != null) {\n this.graphics.reset(this.size);\n }\n }\n else {\n this.setSize(size);\n this.reset();\n }\n };\n /**\n * `Set the size` of the 'PdfTemplate'.\n * @private\n */\n PdfTemplate.prototype.setSize = function (size) {\n var rect = new RectangleF(new PointF(0, 0), size);\n var val = PdfArray.fromRectangle(rect);\n this.content.items.setValue(this.dictionaryProperties.bBox, val);\n this.templateSize = size;\n };\n Object.defineProperty(PdfTemplate.prototype, \"element\", {\n // /**\n // * Returns the value of current graphics.\n // * @private\n // */\n // public GetGraphics(g : PdfGraphics) : PdfGraphics {\n // if (this.graphics == null || typeof this.graphics === 'undefined') {\n // this.graphics = g;\n // this.graphics.Size = this.Size;\n // this.graphics.StreamWriter = new PdfStreamWriter(this.content)\n // this.graphics.Initialize();\n // if(this.writeTransformation) {\n // this.graphics.InitializeCoordinates();\n // }\n // }\n // return this.graphics;\n // }\n // IPdfWrapper Members\n /**\n * Gets the `content stream` of 'PdfTemplate' class.\n * @private\n */\n get: function () {\n return this.content;\n },\n enumerable: true,\n configurable: true\n });\n return PdfTemplate;\n}());\nexport { PdfTemplate };\n","/**\n * ByteArray class\n * Used to keep information about image stream as byte array.\n * @private\n */\nvar ByteArray = /** @class */ (function () {\n /**\n * Initialize the new instance for `byte-array` class\n * @hidden\n * @private\n */\n function ByteArray(length) {\n /**\n * Current stream `position`.\n * @default 0\n * @private\n */\n this.mPosition = 0;\n this.buffer = new Uint8Array(length);\n this.dataView = new DataView(this.buffer.buffer);\n }\n Object.defineProperty(ByteArray.prototype, \"position\", {\n /**\n * Gets and Sets a current `position` of byte array.\n * @hidden\n * @private\n */\n get: function () {\n return this.mPosition;\n },\n set: function (value) {\n this.mPosition = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Read` from current stream position.\n * @default 0\n * @hidden\n * @private\n */\n ByteArray.prototype.read = function (buffer, offset, count) {\n for (var index = offset; index < count; index++) {\n var position = this.position;\n buffer.buffer[index] = this.readByte(position);\n this.position++;\n }\n };\n /**\n * @hidden\n */\n ByteArray.prototype.getBuffer = function (index) {\n return this.buffer[index];\n };\n /**\n * @hidden\n */\n ByteArray.prototype.writeFromBase64String = function (base64) {\n var arr = this.encodedString(base64);\n this.buffer = arr;\n };\n /**\n * @hidden\n */\n ByteArray.prototype.encodedString = function (input) {\n var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var chr1;\n var chr2;\n var chr3;\n var enc1;\n var enc2;\n var enc3;\n var enc4;\n var i = 0;\n var resultIndex = 0;\n var dataUrlPrefix = 'data:';\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n var totalLength = input.length * 3 / 4;\n if (input.charAt(input.length - 1) === keyStr.charAt(64)) {\n totalLength--;\n }\n var output = new Uint8Array(totalLength | 0);\n while (i < input.length) {\n enc1 = keyStr.indexOf(input.charAt(i++));\n enc2 = keyStr.indexOf(input.charAt(i++));\n enc3 = keyStr.indexOf(input.charAt(i++));\n enc4 = keyStr.indexOf(input.charAt(i++));\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n output[resultIndex++] = chr1;\n output[resultIndex++] = chr2;\n output[resultIndex++] = chr3;\n }\n return output;\n };\n /**\n * @hidden\n */\n ByteArray.prototype.readByte = function (offset) {\n return (this.buffer[offset]);\n };\n Object.defineProperty(ByteArray.prototype, \"internalBuffer\", {\n /**\n * @hidden\n */\n get: function () {\n return this.buffer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ByteArray.prototype, \"count\", {\n /**\n * @hidden\n */\n get: function () {\n return this.buffer.byteLength;\n },\n enumerable: true,\n configurable: true\n });\n return ByteArray;\n}());\nexport { ByteArray };\n","/**\n * `PdfBoolean` class is used to perform boolean related primitive operations.\n * @private\n */\nvar PdfBoolean = /** @class */ (function () {\n //constructor\n /**\n * Initializes a new instance of the `PdfBoolean` class.\n * @private\n */\n function PdfBoolean(value) {\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.currentPosition = -1;\n this.value = value;\n }\n Object.defineProperty(PdfBoolean.prototype, \"status\", {\n //Properties\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.objectStatus;\n },\n set: function (value) {\n this.objectStatus = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBoolean.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.saving;\n },\n set: function (value) {\n this.saving = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBoolean.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index;\n },\n set: function (value) {\n this.index = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBoolean.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.currentPosition;\n },\n set: function (value) {\n this.currentPosition = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBoolean.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n var rValue = null;\n return rValue;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Saves` the object using the specified writer.\n * @private\n */\n PdfBoolean.prototype.save = function (writer) {\n writer.write(this.boolToStr(this.value));\n };\n /**\n * Creates a `copy of PdfBoolean`.\n * @private\n */\n PdfBoolean.prototype.clone = function (crossTable) {\n var newNumber = new PdfBoolean(this.value);\n return newNumber;\n };\n // Implementation\n /**\n * Converts `boolean to string` - 0/1 'true'/'false'.\n * @private\n */\n PdfBoolean.prototype.boolToStr = function (value) {\n return value ? 'true' : 'false';\n };\n return PdfBoolean;\n}());\nexport { PdfBoolean };\n","/**\n * public Enum for `PdfLayoutType`.\n * @private\n */\nexport var PdfLayoutType;\n(function (PdfLayoutType) {\n /**\n * Specifies the type of `Paginate`.\n * @private\n */\n PdfLayoutType[PdfLayoutType[\"Paginate\"] = 0] = \"Paginate\";\n /**\n * Specifies the type of `OnePage`.\n * @private\n */\n PdfLayoutType[PdfLayoutType[\"OnePage\"] = 1] = \"OnePage\";\n})(PdfLayoutType || (PdfLayoutType = {}));\n/**\n * public Enum for `PdfLayoutBreakType`.\n * @private\n */\nexport var PdfLayoutBreakType;\n(function (PdfLayoutBreakType) {\n /**\n * Specifies the type of `FitPage`.\n * @private\n */\n PdfLayoutBreakType[PdfLayoutBreakType[\"FitPage\"] = 0] = \"FitPage\";\n /**\n * Specifies the type of `FitElement`.\n * @private\n */\n PdfLayoutBreakType[PdfLayoutBreakType[\"FitElement\"] = 1] = \"FitElement\";\n /**\n * Specifies the type of `FitColumnsToPage`.\n * @private\n */\n PdfLayoutBreakType[PdfLayoutBreakType[\"FitColumnsToPage\"] = 2] = \"FitColumnsToPage\";\n})(PdfLayoutBreakType || (PdfLayoutBreakType = {}));\n","/**\n * Used to perform `convertion between pixels and points`.\n * @private\n */\nvar PdfUnitConverter = /** @class */ (function () {\n //constructors\n /**\n * Initializes a new instance of the `UnitConvertor` class with DPI value.\n * @private\n */\n function PdfUnitConverter(dpi) {\n this.updateProportionsHelper(dpi);\n }\n /**\n * `Converts` the value, from one graphics unit to another graphics unit.\n * @private\n */\n PdfUnitConverter.prototype.convertUnits = function (value, from, to) {\n return this.convertFromPixels(this.convertToPixels(value, from), to);\n };\n /**\n * Converts the value `to pixel` from specified graphics unit.\n * @private\n */\n PdfUnitConverter.prototype.convertToPixels = function (value, from) {\n var index = from;\n var result = (value * this.proportions[index]);\n return result;\n };\n /**\n * Converts value, to specified graphics unit `from Pixel`.\n * @private\n */\n PdfUnitConverter.prototype.convertFromPixels = function (value, to) {\n var index = to;\n var result = (value / this.proportions[index]);\n return result;\n };\n /**\n * `Update proportions` matrix according to Graphics settings.\n * @private\n */\n PdfUnitConverter.prototype.updateProportionsHelper = function (pixelPerInch) {\n this.proportions = [\n pixelPerInch / 2.54,\n pixelPerInch / 6.0,\n 1,\n pixelPerInch / 72.0,\n pixelPerInch,\n pixelPerInch / 300.0,\n pixelPerInch / 25.4 // Millimeter\n ];\n };\n //Fields\n /**\n * Indicates default `horizontal resolution`.\n * @default 96\n * @private\n */\n PdfUnitConverter.horizontalResolution = 96;\n /**\n * Indicates default `vertical resolution`.\n * @default 96\n * @private\n */\n PdfUnitConverter.verticalResolution = 96;\n return PdfUnitConverter;\n}());\nexport { PdfUnitConverter };\n","import { SizeF } from './../../drawing/pdf-drawing';\nimport { PdfGraphicsUnit } from './../enum';\nimport { PdfUnitConverter } from './../unit-convertor';\n/**\n * `PdfImage` class represents the base class for images and provides functionality for the 'PdfBitmap' class.\n * @private\n */\nvar PdfImage = /** @class */ (function () {\n function PdfImage() {\n }\n Object.defineProperty(PdfImage.prototype, \"width\", {\n /**\n * Gets and Sets the `width` of an image.\n * @private\n */\n get: function () {\n return this.imageWidth;\n },\n set: function (value) {\n this.imageWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfImage.prototype, \"height\", {\n /**\n * Gets and Sets the `height` of an image.\n * @private\n */\n get: function () {\n return this.imageHeight;\n },\n set: function (value) {\n this.imageHeight = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfImage.prototype, \"size\", {\n /**\n * Gets or sets the size of the image.\n * @private\n */\n set: function (value) {\n this.width = value.width;\n this.height = value.height;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfImage.prototype, \"physicalDimension\", {\n /**\n * Gets the `physical dimension` of an image.\n * @private\n */\n get: function () {\n this.imagePhysicalDimension = this.getPointSize(this.width, this.height, this.horizontalResolution, this.verticalResolution);\n return new SizeF(this.width, this.height);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfImage.prototype, \"element\", {\n // /**\n // * Gets the `image stream as string`.\n // * @private\n // */\n // public static fromString(string : string) : PdfImage {\n // let image : PdfImage = new PdfBitmap(string);\n // return image;\n // }\n /**\n * Gets the `element` image stream.\n * @private\n */\n get: function () {\n return this.imageStream;\n },\n enumerable: true,\n configurable: true\n });\n PdfImage.prototype.getPointSize = function (width, height, horizontalResolution, verticalResolution) {\n if (typeof horizontalResolution === 'undefined') {\n var dpiX = PdfUnitConverter.horizontalResolution;\n var dpiY = PdfUnitConverter.verticalResolution;\n var size = this.getPointSize(width, height, dpiX, dpiY);\n return size;\n }\n else {\n var ucX = new PdfUnitConverter(horizontalResolution);\n var ucY = new PdfUnitConverter(verticalResolution);\n var ptWidth = ucX.convertUnits(width, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point);\n var ptHeight = ucY.convertUnits(height, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point);\n var size = new SizeF(ptWidth, ptHeight);\n return size;\n }\n };\n return PdfImage;\n}());\nexport { PdfImage };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfBitmap.ts class for EJ2-PDF\n */\nimport { ImageDecoder } from './../../graphics/images/image-decoder';\nimport { ByteArray } from './../../graphics/images/byte-array';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { PdfImage } from './pdf-image';\n/**\n * The 'PdfBitmap' contains methods and properties to handle the Bitmap images.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // base64 string of an image\n * let imageString : string = '/9j/3+2w7em7HzY/KiijFw … 1OEYRUYrQ45yc5OUtz/9k=';\n * // load the image from the base64 string of original image.\n * let image : PdfBitmap = new PdfBitmap(imageString);\n * // draw the image\n * page1.graphics.drawImage(image, new RectangleF({x : 10, y : 10}, {width : 200, height : 200}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfBitmap = /** @class */ (function (_super) {\n __extends(PdfBitmap, _super);\n /**\n * Create an instance for `PdfBitmap` class.\n * @param encodedString Base64 string of an image.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // base64 string of an image\n * let imageString : string = '/9j/3+2w7em7HzY/KiijFw … 1OEYRUYrQ45yc5OUtz/9k=';\n * //\n * // load the image from the base64 string of original image.\n * let image : PdfBitmap = new PdfBitmap(imageString);\n * //\n * // draw the image\n * page1.graphics.drawImage(image, new RectangleF({x : 10, y : 10}, {width : 200, height : 200}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n function PdfBitmap(encodedString) {\n var _this = _super.call(this) || this;\n //Fields\n /**\n * Specifies the `status` of an image.\n * @default true.\n * @hidden\n * @private\n */\n _this.imageStatus = true;\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @hidden\n * @private\n */\n _this.dictionaryProperties = new DictionaryProperties();\n _this.loadImage(encodedString);\n return _this;\n }\n /**\n * `Load image`.\n * @hidden\n * @private\n */\n PdfBitmap.prototype.loadImage = function (encodedString) {\n var task = this.initializeAsync(encodedString);\n };\n /**\n * `Initialize` image parameters.\n * @private\n */\n PdfBitmap.prototype.initializeAsync = function (encodedString) {\n var byteArray = new ByteArray(encodedString.length);\n byteArray.writeFromBase64String(encodedString);\n this.decoder = new ImageDecoder(byteArray);\n this.height = this.decoder.height;\n this.width = this.decoder.width;\n // FrameCount = BitmapImageDecoder.FrameCount;\n this.bitsPerComponent = this.decoder.bitsPerComponent;\n };\n /**\n * `Saves` the image into stream.\n * @private\n */\n PdfBitmap.prototype.save = function () {\n this.imageStatus = true;\n this.imageStream = this.decoder.getImageDictionary();\n };\n return PdfBitmap;\n}(PdfImage));\nexport { PdfBitmap };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfResources.ts class for EJ2-PDF\n */\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { TemporaryDictionary } from './../collections/object-object-pair/dictionary';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfCrossTable } from './../input-output/pdf-cross-table';\nimport { PdfFont } from './fonts/pdf-font';\nimport { PdfTemplate } from './figures/pdf-template';\nimport { PdfBrush } from './brushes/pdf-brush';\nimport { PdfTransparency } from './pdf-transparency';\nimport { PdfBitmap } from './../graphics/images/pdf-bitmap';\nimport { PdfImage } from './../graphics/images/pdf-image';\n/**\n * `PdfResources` class used to set resource contents like font, image.\n * @private\n */\nvar PdfResources = /** @class */ (function (_super) {\n __extends(PdfResources, _super);\n function PdfResources(baseDictionary) {\n var _this = _super.call(this) || this;\n /**\n * Dictionary for the `properties names`.\n * @private\n */\n _this.properties = new PdfDictionary();\n if (baseDictionary instanceof PdfDictionary) {\n _this = _super.call(this, baseDictionary) || this;\n }\n return _this;\n }\n Object.defineProperty(PdfResources.prototype, \"names\", {\n //Properties\n /**\n * Gets the `font names`.\n * @private\n */\n get: function () {\n return this.getNames();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfResources.prototype, \"document\", {\n /**\n * Get or set the `page document`.\n * @private\n */\n get: function () {\n return this.pdfDocument;\n },\n set: function (value) {\n this.pdfDocument = value;\n },\n enumerable: true,\n configurable: true\n });\n //Public Methods\n /**\n * `Generates name` for the object and adds to the resource if the object is new.\n * @private\n */\n PdfResources.prototype.getName = function (obj) {\n var primitive = obj.element;\n var name = null;\n if (this.names.containsKey(primitive)) {\n name = this.names.getValue(primitive);\n }\n // Object is new.\n if (name == null) {\n var sName = this.generateName();\n name = new PdfName(sName);\n this.names.setValue(primitive, name);\n if (obj instanceof PdfFont) {\n this.add(obj, name);\n }\n else if (obj instanceof PdfTemplate) {\n this.add(obj, name);\n }\n else if (obj instanceof PdfTransparency) {\n this.add(obj, name);\n }\n else if (obj instanceof PdfImage || obj instanceof PdfBitmap) {\n this.add(obj, name);\n }\n }\n return name;\n };\n /**\n * Gets `resource names` to font dictionaries.\n * @private\n */\n PdfResources.prototype.getNames = function () {\n if (this.pdfNames == null) {\n this.pdfNames = new TemporaryDictionary();\n }\n var fonts = this.items.getValue(this.dictionaryProperties.font);\n if (fonts != null) {\n var reference = fonts;\n var dictionary = fonts;\n dictionary = PdfCrossTable.dereference(fonts);\n }\n return this.pdfNames;\n };\n /**\n * Add `RequireProcedureSet` into procset array.\n * @private\n */\n PdfResources.prototype.requireProcedureSet = function (procedureSetName) {\n if (procedureSetName == null) {\n throw new Error('ArgumentNullException:procedureSetName');\n }\n var procSets = this.items.getValue(this.dictionaryProperties.procset);\n if (procSets == null) {\n procSets = new PdfArray();\n this.items.setValue(this.dictionaryProperties.procset, procSets);\n }\n var name = new PdfName(procedureSetName);\n if (!procSets.contains(name)) {\n procSets.add(name);\n }\n };\n //Helper Methods\n /**\n * `Remove font` from array.\n * @private\n */\n PdfResources.prototype.removeFont = function (name) {\n var key = null;\n var keys = this.pdfNames.keys();\n for (var index = 0; index < this.pdfNames.size(); index++) {\n if (this.pdfNames.getValue(keys[index]) === new PdfName(name)) {\n key = keys[index];\n break;\n }\n }\n if (key != null) {\n this.pdfNames.remove(key);\n }\n };\n /**\n * Generates `Unique string name`.\n * @private\n */\n PdfResources.prototype.generateName = function () {\n var name = Guid.getNewGuidString();\n return name;\n };\n PdfResources.prototype.add = function (arg1, arg2) {\n if (arg1 instanceof PdfFont) {\n var dictionary = null;\n var fonts = this.items.getValue(this.dictionaryProperties.font);\n if (fonts != null) {\n var reference = fonts;\n dictionary = fonts;\n dictionary = fonts;\n }\n else {\n dictionary = new PdfDictionary();\n this.items.setValue(this.dictionaryProperties.font, dictionary);\n }\n dictionary.items.setValue(arg2.value, new PdfReferenceHolder(arg1.element));\n }\n else if (arg1 instanceof PdfTemplate) {\n var xobjects = void 0;\n xobjects = this.items.getValue(this.dictionaryProperties.xObject);\n // Create fonts dictionary.\n if (xobjects == null) {\n xobjects = new PdfDictionary();\n this.items.setValue(this.dictionaryProperties.xObject, xobjects);\n }\n xobjects.items.setValue(arg2.value, new PdfReferenceHolder(arg1.element));\n }\n else if (arg1 instanceof PdfBrush) {\n // let savable : IPdfPrimitive = (arg1 as IPdfWrapper).Element;\n // if (savable != null)\n // {\n // let pattern : PdfDictionary = this.Items.getValue(this.dictionaryProperties.pattern) as PdfDictionary;\n // // Create a new pattern dictionary.\n // if (pattern == null) {\n // pattern = new PdfDictionary();\n // this.Items.setValue(this.dictionaryProperties.pattern, pattern);\n // }\n // pattern.Items.setValue(name, new PdfReferenceHolder(savable));\n // }\n }\n else if (arg1 instanceof PdfTransparency) {\n var savable = arg1.element;\n var transDic = null;\n transDic = this.items.getValue(this.dictionaryProperties.extGState);\n // Create a new pattern dictionary.\n if (transDic == null) {\n transDic = new PdfDictionary();\n this.items.setValue(this.dictionaryProperties.extGState, transDic);\n }\n transDic.items.setValue(arg2.value, new PdfReferenceHolder(savable));\n }\n else {\n /* tslint:disable */\n var xobjects = this.Dictionary.items.getValue(this.dictionaryProperties.xObject);\n var parentXObjects = void 0;\n if (typeof this.pdfDocument !== 'undefined') {\n parentXObjects = this.pdfDocument.sections.element.items.getValue(this.dictionaryProperties.resources).items.getValue(this.dictionaryProperties.xObject);\n }\n var values = this.Dictionary.items.values();\n var hasSameImageStream = false;\n var oldReference = void 0;\n if (typeof this.pdfDocument !== 'undefined' && (typeof parentXObjects === undefined || parentXObjects == null)) {\n parentXObjects = new PdfDictionary();\n this.pdfDocument.sections.element.items.getValue(this.dictionaryProperties.resources).items.setValue(this.dictionaryProperties.xObject, parentXObjects);\n }\n else if (typeof this.pdfDocument !== 'undefined') {\n var values_1 = parentXObjects.items.values();\n for (var i = 0; i < values_1.length; i++) {\n if (typeof values_1[i] !== 'undefined' && typeof values_1[i].element !== 'undefined') {\n if (values_1[i].element.data[0] === arg1.element.data[0]) {\n oldReference = values_1[i];\n hasSameImageStream = true;\n }\n }\n }\n }\n if (xobjects == null) {\n xobjects = new PdfDictionary();\n this.Dictionary.items.setValue(this.dictionaryProperties.xObject, xobjects);\n }\n if (hasSameImageStream && typeof oldReference !== 'undefined') {\n xobjects.items.setValue(arg2.value, oldReference);\n }\n else {\n var reference = new PdfReferenceHolder(arg1.element);\n xobjects.items.setValue(arg2.value, reference);\n if (typeof this.pdfDocument !== 'undefined') {\n parentXObjects.items.setValue(arg2.value, reference);\n }\n }\n /* tslint:enable */\n }\n };\n return PdfResources;\n}(PdfDictionary));\nexport { PdfResources };\n/**\n * Used to create new guid for resources.\n * @private\n */\nvar Guid = /** @class */ (function () {\n /**\n * Initialize an `instance of GUID` class.\n * @private\n */\n function Guid(stringValue) {\n this.stringValue = stringValue || Guid.getNewGuidString();\n }\n Object.defineProperty(Guid, \"randomNumber\", {\n /**\n * Generate `Random number` for GUID.\n * @private\n */\n get: function () {\n Guid.guid = Guid.guid + 1;\n Guid.guid = Guid.guid > 999999999999 ? 0 : Guid.guid;\n return Guid.guid;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Return the value of `GUID as string`.\n * @private\n */\n Guid.prototype.toString = function () {\n return this.stringValue;\n };\n /**\n * Generate `new GUID`.\n * @private\n */\n Guid.getNewGuidString = function () {\n var guid = 'abc7def4-ghi9-jkl2-m6n3-';\n var temproaryString = 'opqrstuvwxyz';\n var randomString = Guid.randomNumber.toString();\n randomString = guid + temproaryString.substr(0, (12 - randomString.length)) + randomString;\n return randomString;\n };\n /**\n * static field to store `endding value of current GUID`.\n * @private\n */\n Guid.guid = 0;\n return Guid;\n}());\nexport { Guid };\n","import { PdfArray } from './../primitives/pdf-array';\nimport { PdfPageLayerCollection } from './pdf-page-layer-collection';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfResources } from './../graphics/pdf-resources';\n/**\n * The abstract base class for all pages,\n * `PdfPageBase` class provides methods and properties to create PDF pages and its elements.\n * @private\n */\nvar PdfPageBase = /** @class */ (function () {\n //constructors\n /**\n * Initializes a new instance of the `PdfPageBase` class.\n * @private\n */\n function PdfPageBase(dictionary) {\n /**\n * `Index` of the default layer.\n * @default -1.\n * @private\n */\n this.defLayerIndex = -1;\n /**\n * Local variable to store if page `updated`.\n * @default false.\n * @private\n */\n this.modified = false;\n /**\n * Instance of `DictionaryProperties` class.\n * @hidden\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n this.pageDictionary = dictionary;\n }\n Object.defineProperty(PdfPageBase.prototype, \"section\", {\n //Properties\n /**\n * Gets the `section` of a page.\n * @private\n */\n get: function () {\n // if (this.pdfSection === null) {\n // throw new Error('PdfException : Page must be added to some section before using.');\n // }\n return this.pdfSection;\n },\n set: function (value) {\n this.pdfSection = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageBase.prototype, \"dictionary\", {\n /**\n * Gets the page `dictionary`.\n * @private\n */\n get: function () {\n return this.pageDictionary;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageBase.prototype, \"element\", {\n /**\n * Gets the wrapped `element`.\n * @private\n */\n get: function () {\n return this.pageDictionary;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageBase.prototype, \"defaultLayer\", {\n /**\n * Gets the `default layer` of the page (Read only).\n * @private\n */\n get: function () {\n var layer = this.layers;\n var index = this.defaultLayerIndex;\n var returnlayer = layer.items(index);\n return returnlayer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageBase.prototype, \"defaultLayerIndex\", {\n /**\n * Gets or sets `index of the default layer`.\n * @private\n */\n get: function () {\n if (this.layerCollection.count === 0 || this.defLayerIndex === -1) {\n var layer = this.layerCollection.add();\n this.defLayerIndex = this.layerCollection.indexOf(layer);\n }\n return this.defLayerIndex;\n },\n /**\n * Gets or sets` index of the default layer`.\n * @private\n */\n set: function (value) {\n if (value < 0 || value > this.layers.count - 1) {\n throw new Error('ArgumentOutOfRangeException : value, Index can not be less 0 and greater Layers.Count - 1');\n }\n else {\n this.defLayerIndex = value;\n this.modified = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageBase.prototype, \"layers\", {\n /**\n * Gets the collection of the page's `layers` (Read only).\n * @private\n */\n get: function () {\n if (this.layerCollection == null || typeof this.layerCollection === 'undefined') {\n this.layerCollection = new PdfPageLayerCollection(this);\n }\n return this.layerCollection;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Return an instance of `PdfResources` class.\n * @private\n */\n PdfPageBase.prototype.getResources = function () {\n if (this.resources == null) {\n this.resources = new PdfResources();\n this.dictionary.items.setValue(this.dictionaryProperties.resources, this.resources);\n }\n return this.resources;\n };\n Object.defineProperty(PdfPageBase.prototype, \"contents\", {\n /**\n * Gets `array of page's content`.\n * @private\n */\n get: function () {\n var obj = this.pageDictionary.items.getValue(this.dictionaryProperties.contents);\n var contents = obj;\n var rh = obj;\n if (contents == null) {\n contents = new PdfArray();\n this.pageDictionary.items.setValue(this.dictionaryProperties.contents, contents);\n }\n return contents;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Sets the `resources`.\n * @private\n */\n PdfPageBase.prototype.setResources = function (res) {\n this.resources = res;\n this.dictionary.items.setValue(this.dictionaryProperties.resources, this.resources);\n this.modified = true;\n };\n return PdfPageBase;\n}());\nexport { PdfPageBase };\n","import { PdfArray } from './../primitives/pdf-array';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { SizeF, RectangleF, PointF } from './../drawing/pdf-drawing';\nimport { PdfStringLayouter } from './../graphics/fonts/string-layouter';\nimport { PdfColorSpace } from './../graphics/enum';\n/**\n * `PdfAnnotationCollection` class represents the collection of 'PdfAnnotation' objects.\n * @private\n */\nvar PdfAnnotationCollection = /** @class */ (function () {\n function PdfAnnotationCollection(page) {\n // Constants\n /**\n * `Error` constant message.\n * @private\n */\n this.alreadyExistsAnnotationError = 'This annotatation had been already added to page';\n /**\n * `Error` constant message.\n * @private\n */\n this.missingAnnotationException = 'Annotation is not contained in collection.';\n /**\n * Specifies the Internal variable to store fields of `PdfDictionaryProperties`.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * Array of the `annotations`.\n * @private\n */\n this.internalAnnotations = new PdfArray();\n /**\n * privte `list` for the annotations.\n * @private\n */\n this.lists = [];\n if (typeof page !== 'undefined') {\n this.page = page;\n }\n }\n Object.defineProperty(PdfAnnotationCollection.prototype, \"annotations\", {\n /**\n * Gets the `PdfAnnotation` object at the specified index. Read-Only.\n * @private\n */\n get: function () {\n return this.internalAnnotations;\n },\n set: function (value) {\n this.internalAnnotations = value;\n },\n enumerable: true,\n configurable: true\n });\n // Public methods\n /**\n * `Adds` a new annotation to the collection.\n * @private\n */\n PdfAnnotationCollection.prototype.add = function (annotation) {\n // this.SetPrint(annotation);\n this.doAdd(annotation);\n };\n /**\n * `Adds` a Annotation to collection.\n * @private\n */\n /* tslint:disable */\n PdfAnnotationCollection.prototype.doAdd = function (annotation) {\n if (typeof annotation.destination !== 'undefined') {\n var layout = new PdfStringLayouter();\n var layoutResult = layout.layout(annotation.text, annotation.font, annotation.stringFormat, new SizeF((annotation.bounds.width), 0), false, new SizeF(0, 0));\n var lastPosition = annotation.bounds.y;\n if (layoutResult.lines.length === 1) {\n var size = annotation.font.measureString(layoutResult.lines[0].text);\n annotation.bounds = new RectangleF(new PointF(annotation.bounds.x, lastPosition), size);\n annotation.text = layoutResult.lines[0].text;\n //Draw Annotation Text.\n this.page.graphics.drawString(annotation.text, annotation.font, null, annotation.brush, annotation.bounds.x, annotation.bounds.y, annotation.bounds.width, annotation.bounds.height, null);\n //Add annotation to dictionary.\n annotation.setPage(this.page);\n this.setColor(annotation);\n this.internalAnnotations.add(new PdfReferenceHolder(annotation));\n this.lists.push(annotation);\n }\n else {\n for (var i = 0; i < layoutResult.lines.length; i++) {\n var size = annotation.font.measureString(layoutResult.lines[i].text);\n if (i === 0) {\n annotation.bounds = new RectangleF(annotation.bounds.x, lastPosition, size.width, size.height);\n annotation.text = layoutResult.lines[i].text;\n //Draw Annotation Text.\n this.page.graphics.drawString(annotation.text, annotation.font, null, annotation.brush, annotation.bounds.x, lastPosition, size.width, size.height, null);\n //Add annotation to dictionary.\n annotation.setPage(this.page);\n this.setColor(annotation);\n this.internalAnnotations.add(new PdfReferenceHolder(annotation));\n this.lists.push(annotation);\n //Update y for drawing next line of the text.\n lastPosition += annotation.bounds.height;\n }\n else {\n var annot = annotation.clone();\n annot.bounds = new RectangleF(new PointF(annotation.bounds.x, lastPosition), size);\n annot.text = layoutResult.lines[i].text;\n //Draw Annotation Text.\n this.page.graphics.drawString(annot.text, annot.font, null, annot.brush, annot.bounds.x, annot.bounds.y, annot.bounds.width, annot.bounds.height, null);\n //Add annotation to dictionary.\n annot.setPage(this.page);\n this.setColor(annot);\n this.internalAnnotations.add(new PdfReferenceHolder(annot));\n this.lists.push(annot);\n //Update y for drawing next line of the text.\n lastPosition += annot.bounds.height;\n }\n }\n }\n }\n else {\n annotation.setPage(this.page);\n this.internalAnnotations.add(new PdfReferenceHolder(annotation));\n return this.lists.push(annotation);\n }\n };\n /* tslint:enable */\n /**\n * `Set a color of an annotation`.\n * @private\n */\n PdfAnnotationCollection.prototype.setColor = function (annotation) {\n var cs = PdfColorSpace.Rgb;\n var colours = annotation.color.toArray(cs);\n annotation.dictionary.items.setValue(this.dictionaryProperties.c, colours);\n };\n Object.defineProperty(PdfAnnotationCollection.prototype, \"element\", {\n // IPdfWrapper Members\n /**\n * Gets the `Element` representing this object.\n * @private\n */\n get: function () {\n return this.internalAnnotations;\n },\n enumerable: true,\n configurable: true\n });\n return PdfAnnotationCollection;\n}());\nexport { PdfAnnotationCollection };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfPageBase } from './pdf-page-base';\nimport { PdfDictionary, SaveTemplateEventHandler } from './../primitives/pdf-dictionary';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { SizeF } from './../drawing/pdf-drawing';\nimport { PdfAnnotationCollection } from './../annotations/annotation-collection';\nimport { PdfPageLayer } from './pdf-page-layer';\n/**\n * Provides methods and properties to create pages and its elements.\n * `PdfPage` class inherited from the `PdfPageBase` class.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * //\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * //\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfPage = /** @class */ (function (_super) {\n __extends(PdfPage, _super);\n //constructors\n /**\n * Initialize the new instance for `PdfPage` class.\n * @private\n */\n function PdfPage() {\n var _this = _super.call(this, new PdfDictionary()) || this;\n /**\n * Stores the instance of `PdfAnnotationCollection` class.\n * @hidden\n * @default null\n * @private\n */\n _this.annotationCollection = null;\n /**\n * Stores the instance of `PageBeginSave` event for Page Number Field.\n * @default null\n * @private\n */\n _this.beginSave = null;\n _this.initialize();\n return _this;\n }\n Object.defineProperty(PdfPage.prototype, \"document\", {\n //Properties\n /**\n * Gets current `document`.\n * @private\n */\n get: function () {\n if (this.section !== null && this.section.parent !== null) {\n return this.section.parent.document;\n }\n else {\n return null;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPage.prototype, \"graphics\", {\n /**\n * Get the current `graphics`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * //\n * // get graphics\n * let graphics : PdfGraphics = page1.graphics;\n * //\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n var result = this.defaultLayer.graphics;\n result.currentPage = this;\n return result;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPage.prototype, \"crossTable\", {\n /**\n * Gets the `cross table`.\n * @private\n */\n get: function () {\n if (this.section === null) {\n throw new Error('PdfDocumentException : Page is not created');\n }\n return this.section.parent === null ? this.section.parentDocument.crossTable : this.section.parent.document.crossTable;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPage.prototype, \"size\", {\n /**\n * Gets the size of the PDF page- Read only.\n * @public\n */\n get: function () {\n return this.section.pageSettings.size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPage.prototype, \"origin\", {\n /**\n * Gets the `origin` of the page.\n * @private\n */\n get: function () {\n return this.section.pageSettings.origin;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPage.prototype, \"annotations\", {\n /**\n * Gets a collection of the `annotations` of the page- Read only.\n * @private\n */\n get: function () {\n if (this.annotationCollection == null) {\n this.annotationCollection = new PdfAnnotationCollection(this);\n // if (!this.Dictionary.ContainsKey(this.dictionaryProperties.annots)) {\n this.dictionary.items.setValue(this.dictionaryProperties.annots, this.annotationCollection.element);\n // }\n this.annotationCollection.annotations = this.dictionary.items.getValue(this.dictionaryProperties.annots);\n }\n return this.annotationCollection;\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Initializes` a page.\n * @private\n */\n PdfPage.prototype.initialize = function () {\n this.dictionary.items.setValue(this.dictionaryProperties.type, new PdfName('Page'));\n this.dictionary.pageBeginDrawTemplate = new SaveTemplateEventHandler(this);\n };\n /**\n * Sets parent `section` to the page.\n * @private\n */\n PdfPage.prototype.setSection = function (section) {\n this.section = section;\n this.dictionary.items.setValue(this.dictionaryProperties.parent, new PdfReferenceHolder(section));\n };\n /**\n * `Resets the progress`.\n * @private\n */\n PdfPage.prototype.resetProgress = function () {\n this.isProgressOn = false;\n };\n /**\n * Get the page size reduced by page margins and page template dimensions.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // create new standard font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the specified point using `getClientSize` method\n * let point : PointF = new PointF(page1.getClientSize().width - 200, page1.getClientSize().height - 200);\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, point);\n * //\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n PdfPage.prototype.getClientSize = function () {\n var returnValue = this.section.getActualBounds(this, true);\n return new SizeF(returnValue.width, returnValue.height);\n };\n /**\n * Helper method to retrive the instance of `PageBeginSave` event for header and footer elements.\n * @private\n */\n PdfPage.prototype.pageBeginSave = function () {\n var doc = this.document;\n if (typeof doc !== undefined && doc != null) {\n this.drawPageTemplates(doc);\n }\n if (this.beginSave != null && typeof this.beginSave !== 'undefined') {\n this.beginSave(this);\n }\n };\n /**\n * Helper method to draw template elements.\n * @private\n */\n PdfPage.prototype.drawPageTemplates = function (document) {\n // Draw Background templates.\n var hasBackTemplates = this.section.containsTemplates(document, this, false);\n if (hasBackTemplates) {\n var backLayer = new PdfPageLayer(this, false);\n this.layers.insert(0, backLayer);\n this.section.drawTemplates(this, backLayer, document, false);\n if (backLayer.graphics !== null && typeof backLayer.graphics !== 'undefined') {\n for (var i = 0; i < backLayer.graphics.automaticFields.automaticFields.length; i++) {\n var fieldInfo = backLayer.graphics.automaticFields.automaticFields[i];\n fieldInfo.field.performDraw(backLayer.graphics, fieldInfo.location, fieldInfo.scalingX, fieldInfo.scalingY);\n }\n }\n }\n // Draw Foreground templates.\n var hasFrontTemplates = this.section.containsTemplates(document, this, true);\n if (hasFrontTemplates) {\n var frontLayer = new PdfPageLayer(this, false);\n this.layers.add(frontLayer);\n this.section.drawTemplates(this, frontLayer, document, true);\n }\n };\n return PdfPage;\n}(PdfPageBase));\nexport { PdfPage };\n","/**\n * Provides data for `PageAddedEventHandler` event.\n * This event raises when adding the new PDF page to the PDF document.\n */\nvar PageAddedEventArgs = /** @class */ (function () {\n function PageAddedEventArgs(page) {\n if (typeof page !== 'undefined') {\n this.pdfPage = page;\n }\n else {\n this.pdfPage = null;\n }\n }\n Object.defineProperty(PageAddedEventArgs.prototype, \"page\", {\n /**\n * Gets the `newly added page`.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n enumerable: true,\n configurable: true\n });\n return PageAddedEventArgs;\n}());\nexport { PageAddedEventArgs };\n","/**\n * Represents the `collection of pages in a section`.\n * @private\n */\nvar PdfSectionPageCollection = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `PdfSectionPageCollection` class.\n * @private\n */\n function PdfSectionPageCollection(section) {\n // Fields\n /**\n * @hidden\n * @private\n */\n this.pdfSection = null;\n if (section == null) {\n throw Error('ArgumentNullException(\"section\")');\n }\n this.section = section;\n }\n Object.defineProperty(PdfSectionPageCollection.prototype, \"section\", {\n // Properties\n /**\n * Gets the `PdfPage` at the specified index.\n * @private\n */\n get: function () {\n return this.pdfSection;\n },\n set: function (value) {\n this.pdfSection = value;\n },\n enumerable: true,\n configurable: true\n });\n // Public Methods\n /**\n * `Determines` whether the specified page is within the collection.\n * @private\n */\n PdfSectionPageCollection.prototype.contains = function (page) {\n return this.section.contains(page);\n };\n /**\n * `Removes` the specified page from collection.\n * @private\n */\n PdfSectionPageCollection.prototype.remove = function (page) {\n this.section.remove(page);\n };\n /**\n * `Adds` a new page from collection.\n * @private\n */\n PdfSectionPageCollection.prototype.add = function () {\n return this.section.add();\n };\n return PdfSectionPageCollection;\n}());\nexport { PdfSectionPageCollection };\n","import { TemplateType } from './../pages/enum';\n// import { PdfStampCollection } from `./../Pages/PdfStampCollection`;\n/**\n * `PdfDocumentTemplate` class encapsulates a page template for all the pages in the document.\n * @private\n */\nvar PdfDocumentTemplate = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `PdfDocumentTemplate` class.\n * @public\n */\n function PdfDocumentTemplate() {\n //\n }\n Object.defineProperty(PdfDocumentTemplate.prototype, \"left\", {\n // private m_stamps : PdfStampCollection;\n // Properties\n /**\n * `Left` page template object.\n * @public\n */\n get: function () {\n return this.leftTemplate;\n },\n set: function (value) {\n this.leftTemplate = this.checkElement(value, TemplateType.Left);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"top\", {\n /**\n * `Top` page template object.\n * @public\n */\n get: function () {\n return this.topTemplate;\n },\n set: function (value) {\n this.topTemplate = this.checkElement(value, TemplateType.Top);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"right\", {\n /**\n * `Right` page template object.\n * @public\n */\n get: function () {\n return this.rightTemplate;\n },\n set: function (value) {\n this.rightTemplate = this.checkElement(value, TemplateType.Right);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"bottom\", {\n /**\n * `Bottom` page template object.\n * @public\n */\n get: function () {\n return this.bottomTemplate;\n },\n set: function (value) {\n this.bottomTemplate = this.checkElement(value, TemplateType.Bottom);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"EvenLeft\", {\n /**\n * `EvenLeft` page template object.\n * @public\n */\n get: function () {\n return this.evenLeft;\n },\n set: function (value) {\n this.evenLeft = this.checkElement(value, TemplateType.Left);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"EvenTop\", {\n /**\n * `EvenTop` page template object.\n * @public\n */\n get: function () {\n return this.evenTop;\n },\n set: function (value) {\n this.evenTop = this.checkElement(value, TemplateType.Top);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"EvenRight\", {\n /**\n * `EvenRight` page template object.\n * @public\n */\n get: function () {\n return this.evenRight;\n },\n set: function (value) {\n this.evenRight = this.checkElement(value, TemplateType.Right);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"EvenBottom\", {\n /**\n * `EvenBottom` page template object.\n * @public\n */\n get: function () {\n return this.evenBottom;\n },\n set: function (value) {\n this.evenBottom = this.checkElement(value, TemplateType.Bottom);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"OddLeft\", {\n /**\n * `OddLeft` page template object.\n * @public\n */\n get: function () {\n return this.oddLeft;\n },\n set: function (value) {\n this.oddLeft = this.checkElement(value, TemplateType.Left);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"OddTop\", {\n /**\n * `OddTop` page template object.\n * @public\n */\n get: function () {\n return this.oddTop;\n },\n set: function (value) {\n this.oddTop = this.checkElement(value, TemplateType.Top);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"OddRight\", {\n /**\n * `OddRight` page template object.\n * @public\n */\n get: function () {\n return this.oddRight;\n },\n set: function (value) {\n this.oddRight = this.checkElement(value, TemplateType.Right);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"OddBottom\", {\n /**\n * `OddBottom` page template object.\n * @public\n */\n get: function () {\n return this.oddBottom;\n },\n set: function (value) {\n this.oddBottom = this.checkElement(value, TemplateType.Bottom);\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * Returns `left` template.\n * @public\n */\n PdfDocumentTemplate.prototype.getLeft = function (page) {\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var template = null;\n // if (page.Document.Pages != null) {\n var even = this.isEven(page);\n if (even) {\n template = (this.EvenLeft != null) ? this.EvenLeft : this.left;\n }\n else {\n template = (this.OddLeft != null) ? this.OddLeft : this.left;\n }\n // }\n return template;\n };\n /**\n * Returns `top` template.\n * @public\n */\n PdfDocumentTemplate.prototype.getTop = function (page) {\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var template = null;\n // if (page.Document.Pages != null) {\n var even = this.isEven(page);\n if (even) {\n template = (this.EvenTop != null) ? this.EvenTop : this.top;\n }\n else {\n template = (this.OddTop != null) ? this.OddTop : this.top;\n }\n // }\n return template;\n };\n /**\n * Returns `right` template.\n * @public\n */\n PdfDocumentTemplate.prototype.getRight = function (page) {\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var template = null;\n // if (page.Document.Pages != null) {\n var even = this.isEven(page);\n if (even) {\n template = (this.EvenRight != null) ? this.EvenRight : this.right;\n }\n else {\n template = (this.OddRight != null) ? this.OddRight : this.right;\n }\n // }\n return template;\n };\n /**\n * Returns `bottom` template.\n * @public\n */\n PdfDocumentTemplate.prototype.getBottom = function (page) {\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var template = null;\n // if (page.Document.Pages != null) {\n var even = this.isEven(page);\n if (even) {\n template = (this.EvenBottom != null) ? this.EvenBottom : this.bottom;\n }\n else {\n template = (this.OddBottom != null) ? this.OddBottom : this.bottom;\n }\n // }\n return template;\n };\n /**\n * Checks whether the page `is even`.\n * @private\n */\n PdfDocumentTemplate.prototype.isEven = function (page) {\n var pages = page.section.document.pages;\n var index = 0;\n if (pages.pageCollectionIndex.containsKey(page)) {\n index = pages.pageCollectionIndex.getValue(page) + 1;\n }\n else {\n index = pages.indexOf(page) + 1;\n }\n var even = ((index % 2) === 0);\n return even;\n };\n /**\n * Checks a `template element`.\n * @private\n */\n PdfDocumentTemplate.prototype.checkElement = function (templateElement, type) {\n if (templateElement != null) {\n if ((typeof templateElement.type !== 'undefined') && (templateElement.type !== TemplateType.None)) {\n throw new Error('NotSupportedException:Can not reassign the template element. Please, create new one.');\n }\n templateElement.type = type;\n }\n return templateElement;\n };\n return PdfDocumentTemplate;\n}());\nexport { PdfDocumentTemplate };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfSectionTemplate.ts class for EJ2-PDF\n */\nimport { PdfDocumentTemplate } from './../document/pdf-document-template';\n/**\n * Represents a `page template` for all the pages in the section.\n */\nvar PdfSectionTemplate = /** @class */ (function (_super) {\n __extends(PdfSectionTemplate, _super);\n // Constructors\n /**\n * `Creates a new object`.\n * @private\n */\n function PdfSectionTemplate() {\n var _this = _super.call(this) || this;\n _this.leftValue = _this.topValue = _this.rightValue = _this.bottomValue = _this.stampValue = true;\n return _this;\n }\n Object.defineProperty(PdfSectionTemplate.prototype, \"applyDocumentLeftTemplate\", {\n // Properties\n /**\n * Gets or sets value indicating whether parent `Left page template should be used or not`.\n * @private\n */\n get: function () {\n return this.leftValue;\n },\n set: function (value) {\n this.leftValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionTemplate.prototype, \"applyDocumentTopTemplate\", {\n /**\n * Gets or sets value indicating whether parent `Top page template should be used or not`.\n * @private\n */\n get: function () {\n return this.topValue;\n },\n set: function (value) {\n this.topValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionTemplate.prototype, \"applyDocumentRightTemplate\", {\n /**\n * Gets or sets value indicating whether parent `Right page template should be used or not`.\n * @private\n */\n get: function () {\n return this.rightValue;\n },\n set: function (value) {\n this.rightValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionTemplate.prototype, \"applyDocumentBottomTemplate\", {\n /**\n * Gets or sets value indicating whether parent `Bottom page template should be used or not`.\n * @private\n */\n get: function () {\n return this.bottomValue;\n },\n set: function (value) {\n this.bottomValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionTemplate.prototype, \"applyDocumentStamps\", {\n /**\n * Gets or sets value indicating whether the `stamp value` is true or not.\n * @private\n */\n get: function () {\n return this.stampValue;\n },\n set: function (value) {\n this.stampValue = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfSectionTemplate;\n}(PdfDocumentTemplate));\nexport { PdfSectionTemplate };\n","import { PdfPage } from './pdf-page';\nimport { PageAddedEventArgs } from './page-added-event-arguments';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { SaveSectionEventHandler } from './../primitives/pdf-dictionary';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfSectionCollection } from './pdf-section-collection';\nimport { PdfSectionPageCollection } from './pdf-section-page-collection';\nimport { RectangleF } from './../drawing/pdf-drawing';\nimport { PdfSectionTemplate } from './pdf-section-templates';\n/**\n * Represents a `section` entity. A section it's a set of the pages with similar page settings.\n */\nvar PdfSection = /** @class */ (function () {\n function PdfSection(document, pageSettings) {\n //Fields\n //public PageAdded() : PageAddedEventArgs.PageAddedEventHandler = new PageAddedEventArgs.PageAddedEventHandler(Object,args)\n /**\n * @hidden\n * @private\n */\n this.pageAdded = new PageAddedEventArgs();\n /**\n * @hidden\n * @private\n */\n this.pdfPages = [];\n /**\n * @hidden\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n if (typeof pageSettings === 'undefined') {\n this.constructor(document, document.pageSettings);\n }\n else {\n this.pdfDocument = document;\n this.settings = pageSettings.clone();\n this.initialSettings = this.settings.clone();\n this.initialize();\n }\n }\n Object.defineProperty(PdfSection.prototype, \"parent\", {\n //Property\n /**\n * Gets or sets the `parent`.\n * @private\n */\n get: function () {\n return this.sectionCollection;\n },\n set: function (value) {\n this.sectionCollection = value;\n this.section.items.setValue(this.dictionaryProperties.parent, new PdfReferenceHolder(value));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"parentDocument\", {\n /**\n * Gets the `parent document`.\n * @private\n */\n get: function () {\n return this.pdfDocument;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"pageSettings\", {\n /**\n * Gets or sets the `page settings` of the section.\n * @private\n */\n get: function () {\n return this.settings;\n },\n set: function (value) {\n if (value != null) {\n this.settings = value;\n }\n else {\n throw Error('Value can not be null.');\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"element\", {\n /**\n * Gets the wrapped `element`.\n * @private\n */\n get: function () {\n return this.section;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"count\", {\n /**\n * Gets the `count` of the pages in the section.\n * @private\n */\n get: function () {\n return this.pagesReferences.count;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"template\", {\n /**\n * Gets or sets a `template` for the pages in the section.\n * @private\n */\n get: function () {\n if (this.pageTemplate == null) {\n this.pageTemplate = new PdfSectionTemplate();\n }\n return this.pageTemplate;\n },\n set: function (value) {\n this.pageTemplate = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"document\", {\n /**\n * Gets the `document`.\n * @private\n */\n get: function () {\n return this.sectionCollection.document;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"pages\", {\n /**\n * Gets the collection of `pages` in a section (Read only)\n * @private\n */\n get: function () {\n if (this.pagesCollection == null || typeof this.pagesCollection === 'undefined') {\n this.pagesCollection = new PdfSectionPageCollection(this);\n }\n return this.pagesCollection;\n },\n enumerable: true,\n configurable: true\n });\n //methods\n /**\n * `Return the page collection` of current section.\n * @private\n */\n PdfSection.prototype.getPages = function () {\n return this.pdfPages;\n };\n /**\n * `Translates` point into native coordinates of the page.\n * @private\n */\n PdfSection.prototype.pointToNativePdf = function (page, point) {\n var bounds = this.getActualBounds(page, true);\n point.x += bounds.x;\n point.y = this.pageSettings.height - (point.y);\n return point;\n };\n /**\n * Sets the page setting of the current section.\n * @public\n * @param settings Instance of `PdfPageSettings`\n */\n PdfSection.prototype.setPageSettings = function (settings) {\n this.settings = settings;\n this.state.orientation = settings.orientation;\n this.state.rotate = settings.rotate;\n this.state.size = settings.size;\n this.state.origin = settings.origin;\n };\n /**\n * `Initializes` the object.\n * @private\n */\n PdfSection.prototype.initialize = function () {\n this.pagesReferences = new PdfArray();\n this.section = new PdfDictionary();\n this.state = new PageSettingsState(this.pdfDocument);\n this.section.sectionBeginSave = new SaveSectionEventHandler(this, this.state);\n this.pageCount = new PdfNumber(0);\n this.section.items.setValue(this.dictionaryProperties.count, this.pageCount);\n this.section.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.pages));\n this.section.items.setValue(this.dictionaryProperties.kids, this.pagesReferences);\n };\n /**\n * Checks whether any template should be printed on this layer.\n * @private\n * @param document The parent document.\n * @param page The parent page.\n * @param foreground Layer z-order.\n * @returns True - if some content should be printed on the layer, False otherwise.\n */\n PdfSection.prototype.containsTemplates = function (document, page, foreground) {\n var documentHeaders = this.getDocumentTemplates(document, page, true, foreground);\n var documentTemplates = this.getDocumentTemplates(document, page, false, foreground);\n var contains = (documentHeaders.length > 0 || documentTemplates.length > 0);\n return contains;\n };\n /**\n * Returns array of the document templates.\n * @private\n * @param document The parent document.\n * @param page The parent page.\n * @param headers If true - return headers/footers, if false - return simple templates.\n * @param foreground If true - return foreground templates, if false - return background templates.\n * @returns Returns array of the document templates.\n */\n /* tslint:disable */\n PdfSection.prototype.getDocumentTemplates = function (document, page, headers, foreground) {\n var templates = [];\n if (headers) {\n if (this.template.applyDocumentTopTemplate && document.template.getTop(page) != null) {\n if ((!(document.template.getTop(page).foreground || foreground)) || (document.template.getTop(page).foreground && foreground)) {\n templates.push(document.template.getTop(page));\n }\n }\n if (this.template.applyDocumentBottomTemplate && document.template.getBottom(page) != null) {\n if ((!(document.template.getBottom(page).foreground || foreground)) || (document.template.getBottom(page).foreground && foreground)) {\n templates.push(document.template.getBottom(page));\n }\n }\n if (this.template.applyDocumentLeftTemplate && document.template.getLeft(page) != null) {\n if ((!(document.template.getLeft(page).foreground || foreground)) || (document.template.getLeft(page).foreground && foreground)) {\n templates.push(document.template.getLeft(page));\n }\n }\n if (this.template.applyDocumentRightTemplate && document.template.getRight(page) != null) {\n if ((!(document.template.getRight(page).foreground || foreground)) || (document.template.getRight(page).foreground && foreground)) {\n templates.push(document.template.getRight(page));\n }\n }\n }\n return templates;\n };\n /* tslint:enable */\n /**\n * `Adds` the specified page.\n * @private\n */\n PdfSection.prototype.add = function (page) {\n if (typeof page === 'undefined') {\n var page_1 = new PdfPage();\n this.add(page_1);\n return page_1;\n }\n else {\n var r = this.checkPresence(page);\n this.pdfPages.push(page);\n this.pagesReferences.add(r);\n page.setSection(this);\n page.resetProgress();\n this.pageAddedMethod(page);\n }\n };\n /**\n * `Checks the presence`.\n * @private\n */\n PdfSection.prototype.checkPresence = function (page) {\n var rh = new PdfReferenceHolder(page);\n var contains = false;\n var sc = this.parent;\n for (var index = 0; index < sc.section.length; index++) {\n var section = sc.section[index];\n contains = contains || section.contains(page);\n }\n return rh;\n };\n /**\n * `Determines` whether the page in within the section.\n * @private\n */\n PdfSection.prototype.contains = function (page) {\n var index = this.indexOf(page);\n return (0 <= index);\n };\n /**\n * Get the `index of` the page.\n * @private\n */\n PdfSection.prototype.indexOf = function (page) {\n for (var index = 0; index < this.pdfPages.length; index++) {\n if (this.pdfPages[index] === page) {\n return this.pdfPages.indexOf(page);\n }\n }\n var r = new PdfReferenceHolder(page);\n return this.pagesReferences.indexOf(r);\n };\n /**\n * Call two event's methods.\n * @hidden\n * @private\n */\n PdfSection.prototype.pageAddedMethod = function (page) {\n //Create event's arguments\n var args = new PageAddedEventArgs(page);\n this.onPageAdded(args);\n var parent = this.parent;\n parent.document.pages.onPageAdded(args);\n this.pageCount.intValue = this.count;\n };\n /**\n * Called when the page has been added.\n * @hidden\n * @private\n */\n PdfSection.prototype.onPageAdded = function (args) {\n //\n };\n PdfSection.prototype.getActualBounds = function (arg1, arg2, arg3) {\n if (arg1 instanceof PdfPage && typeof arg2 === 'boolean') {\n var result = void 0;\n var document_1 = this.parent.document;\n result = this.getActualBounds(document_1, arg1, arg2);\n return result;\n }\n else {\n arg1 = arg1;\n arg2 = arg2;\n arg3 = arg3;\n var bounds = new RectangleF(0, 0, 0, 0);\n bounds.height = (arg3) ? this.pageSettings.size.height : this.pageSettings.getActualSize().height;\n bounds.width = (arg3) ? this.pageSettings.size.width : this.pageSettings.getActualSize().width;\n var left = this.getLeftIndentWidth(arg1, arg2, arg3);\n var top_1 = this.getTopIndentHeight(arg1, arg2, arg3);\n var right = this.getRightIndentWidth(arg1, arg2, arg3);\n var bottom = this.getBottomIndentHeight(arg1, arg2, arg3);\n bounds.x += left;\n bounds.y += top_1;\n bounds.width -= (left + right);\n bounds.height -= (top_1 + bottom);\n return bounds;\n }\n };\n /**\n * Calculates width of the `left indent`.\n * @private\n */\n PdfSection.prototype.getLeftIndentWidth = function (document, page, includeMargins) {\n if (document == null) {\n throw new Error('ArgumentNullException:document');\n }\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var value = (includeMargins) ? this.pageSettings.margins.left : 0;\n var templateWidth = (this.template.getLeft(page) != null) ? this.template.getLeft(page).width : 0;\n var docTemplateWidth = (document.template.getLeft(page) != null) ? document.template.getLeft(page).width : 0;\n value += (this.template.applyDocumentLeftTemplate) ? Math.max(templateWidth, docTemplateWidth) : templateWidth;\n return value;\n };\n /**\n * Calculates `Height` of the top indent.\n * @private\n */\n PdfSection.prototype.getTopIndentHeight = function (document, page, includeMargins) {\n if (document == null) {\n throw new Error('ArgumentNullException:document');\n }\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var value = (includeMargins) ? this.pageSettings.margins.top : 0;\n var templateHeight = (this.template.getTop(page) != null) ? this.template.getTop(page).height : 0;\n var docTemplateHeight = (document.template.getTop(page) != null) ? document.template.getTop(page).height : 0;\n value += (this.template.applyDocumentTopTemplate) ? Math.max(templateHeight, docTemplateHeight) : templateHeight;\n return value;\n };\n /**\n * Calculates `width` of the right indent.\n * @private\n */\n PdfSection.prototype.getRightIndentWidth = function (document, page, includeMargins) {\n if (document == null) {\n throw new Error('ArgumentNullException:document');\n }\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var value = (includeMargins) ? this.pageSettings.margins.right : 0;\n var templateWidth = (this.template.getRight(page) != null) ? this.template.getRight(page).width : 0;\n var docTemplateWidth = (document.template.getRight(page) != null) ? document.template.getRight(page).width : 0;\n value += (this.template.applyDocumentRightTemplate) ? Math.max(templateWidth, docTemplateWidth) : templateWidth;\n return value;\n };\n /**\n * Calculates `Height` of the bottom indent.\n * @private\n */\n PdfSection.prototype.getBottomIndentHeight = function (document, page, includeMargins) {\n if (document == null) {\n throw new Error('ArgumentNullException:document');\n }\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var value = (includeMargins) ? this.pageSettings.margins.bottom : 0;\n var templateHeight = (this.template.getBottom(page) != null) ? this.template.getBottom(page).height : 0;\n var docTemplateHeight = (document.template.getBottom(page) != null) ? document.template.getBottom(page).height : 0;\n value += (this.template.applyDocumentBottomTemplate) ? Math.max(templateHeight, docTemplateHeight) : templateHeight;\n return value;\n };\n /**\n * `Removes` the page from the section.\n * @private\n */\n PdfSection.prototype.remove = function (page) {\n if (page == null) {\n throw Error('ArgumentNullException(\"page\")');\n }\n var index = this.pdfPages.indexOf(page);\n this.pagesReferences.removeAt(index);\n var temproaryPages = [];\n for (var j = 0; j < index; j++) {\n temproaryPages.push(this.pdfPages[j]);\n }\n for (var j = index + 1; j < this.pdfPages.length; j++) {\n temproaryPages.push(this.pdfPages[j]);\n }\n this.pdfPages = temproaryPages;\n };\n /**\n * In fills dictionary by the data from `Page settings`.\n * @private\n */\n PdfSection.prototype.applyPageSettings = function (container, parentSettings, state) {\n var bounds = new RectangleF(state.origin, state.size);\n container.items.setValue(this.dictionaryProperties.mediaBox, PdfArray.fromRectangle(bounds));\n var rotate = 0;\n rotate = PdfSectionCollection.rotateFactor * state.rotate;\n var angle = new PdfNumber(rotate);\n container.items.setValue(this.dictionaryProperties.rotate, angle);\n };\n /**\n * Catches the Save event of the dictionary.\n * @hidden\n * @private\n */\n PdfSection.prototype.beginSave = function (state, writer) {\n var doc = writer.document;\n this.applyPageSettings(this.section, doc.pageSettings, state);\n };\n /**\n * Draws page templates on the page.\n * @private\n */\n PdfSection.prototype.drawTemplates = function (page, layer, document, foreground) {\n var documentHeaders = this.getDocumentTemplates(document, page, true, foreground);\n var documentTemplates = this.getDocumentTemplates(document, page, false, foreground);\n if (foreground) {\n this.drawTemplatesHelper(layer, document, documentHeaders);\n this.drawTemplatesHelper(layer, document, documentTemplates);\n }\n else {\n this.drawTemplatesHelper(layer, document, documentHeaders);\n this.drawTemplatesHelper(layer, document, documentTemplates);\n }\n };\n /**\n * Draws page templates on the page.\n * @private\n */\n PdfSection.prototype.drawTemplatesHelper = function (layer, document, templates) {\n if (templates != null && templates.length > 0) {\n var len = templates.length;\n for (var i = 0; i < len; i++) {\n var template = templates[i];\n template.draw(layer, document);\n }\n }\n };\n return PdfSection;\n}());\nexport { PdfSection };\nvar PageSettingsState = /** @class */ (function () {\n //Public Constructor\n /**\n * New instance to store the `PageSettings`.\n * @private\n */\n function PageSettingsState(document) {\n this.pageOrientation = document.pageSettings.orientation;\n this.pageRotate = document.pageSettings.rotate;\n this.pageSize = document.pageSettings.size;\n this.pageOrigin = document.pageSettings.origin;\n }\n Object.defineProperty(PageSettingsState.prototype, \"orientation\", {\n //public Properties\n /**\n * @hidden\n * @private\n */\n get: function () {\n return this.pageOrientation;\n },\n set: function (value) {\n this.pageOrientation = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PageSettingsState.prototype, \"rotate\", {\n /**\n * @hidden\n * @private\n */\n get: function () {\n return this.pageRotate;\n },\n set: function (value) {\n this.pageRotate = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PageSettingsState.prototype, \"size\", {\n /**\n * @hidden\n * @private\n */\n get: function () {\n return this.pageSize;\n },\n set: function (value) {\n this.pageSize = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PageSettingsState.prototype, \"origin\", {\n /**\n * @hidden\n * @private\n */\n get: function () {\n return this.pageOrigin;\n },\n set: function (value) {\n this.pageOrigin = value;\n },\n enumerable: true,\n configurable: true\n });\n return PageSettingsState;\n}());\nexport { PageSettingsState };\n","import { PdfNumber } from './../primitives/pdf-number';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfDictionary, SaveSectionCollectionEventHandler } from './../primitives/pdf-dictionary';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { RectangleF, PointF } from './../drawing/pdf-drawing';\nimport { PdfSection } from './pdf-section';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\n/**\n * Represents the `collection of the sections`.\n * @private\n */\nvar PdfSectionCollection = /** @class */ (function () {\n //constructor\n /**\n * Initializes a new instance of the `PdfSectionCollection` class.\n * @private\n */\n function PdfSectionCollection(document) {\n /**\n * @hidden\n * @private\n */\n this.sections = [];\n /**\n * @hidden\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n // if (document === null) {\n // throw new Error('ArgumentNullException : document');\n // }\n this.pdfDocument = document.clone();\n this.initialize();\n }\n Object.defineProperty(PdfSectionCollection.prototype, \"section\", {\n //Properties\n /**\n * Gets the `Section` collection.\n */\n get: function () {\n return this.sections;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionCollection.prototype, \"document\", {\n /**\n * Gets a parent `document`.\n * @private\n */\n get: function () {\n return this.pdfDocument;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionCollection.prototype, \"count\", {\n /**\n * Gets the `number of sections` in a document.\n * @private\n */\n get: function () {\n return this.sections.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionCollection.prototype, \"element\", {\n /**\n * Gets the wrapped `element`.\n * @private\n */\n get: function () {\n return this.pages;\n },\n enumerable: true,\n configurable: true\n });\n //Methods\n /**\n * `Initializes the object`.\n * @private\n */\n PdfSectionCollection.prototype.initialize = function () {\n this.sectionCount = new PdfNumber(0);\n this.sectionCollection = new PdfArray();\n this.pages = new PdfDictionary();\n this.pages.beginSave = new SaveSectionCollectionEventHandler(this);\n this.pages.items.setValue(this.dictionaryProperties.type, new PdfName('Pages'));\n this.pages.items.setValue(this.dictionaryProperties.kids, this.sectionCollection);\n this.pages.items.setValue(this.dictionaryProperties.count, this.sectionCount);\n this.pages.items.setValue(this.dictionaryProperties.resources, new PdfDictionary());\n this.setPageSettings(this.pages, this.pdfDocument.pageSettings);\n };\n /**\n * Initializes a new instance of the `PdfSectionCollection` class.\n * @private\n */\n PdfSectionCollection.prototype.pdfSectionCollection = function (index) {\n if (index < 0 || index >= this.count) {\n throw new Error('IndexOutOfRangeException()');\n }\n return this.sections[index];\n };\n /**\n * In fills dictionary by the data from `Page settings`.\n * @private\n */\n PdfSectionCollection.prototype.setPageSettings = function (container, pageSettings) {\n // if (container === null) {\n // throw new Error('ArgumentNullException : container');\n // }\n // if (pageSettings === null) {\n // throw new Error('ArgumentNullException : pageSettings');\n // }\n var bounds = new RectangleF(new PointF(), pageSettings.size);\n container.items.setValue(this.dictionaryProperties.mediaBox, PdfArray.fromRectangle(bounds));\n };\n /**\n * `Adds` the specified section.\n * @private\n */\n PdfSectionCollection.prototype.add = function (section) {\n if (typeof section === 'undefined') {\n var section_1 = new PdfSection(this.pdfDocument);\n this.add(section_1);\n return section_1;\n }\n else {\n // if (section === null) {\n // throw new Error('ArgumentNullException : section');\n // }\n var r = this.checkSection(section);\n this.sections.push(section);\n section.parent = this;\n this.sectionCollection.add(r);\n return this.sections.indexOf(section);\n }\n };\n /**\n * `Checks` if the section is within the collection.\n * @private\n */\n PdfSectionCollection.prototype.checkSection = function (section) {\n var r = new PdfReferenceHolder(section);\n var contains = this.sectionCollection.contains(r);\n // if (contains) {\n // throw new Error('ArgumentException : The object can not be added twice to the collection,section');\n // }\n return r;\n };\n /**\n * Catches the Save event of the dictionary to `count the pages`.\n * @private\n */\n PdfSectionCollection.prototype.countPages = function () {\n var count = 0;\n this.sections.forEach(function (n) { return (count += n.count); });\n return count;\n };\n /**\n * Catches the Save event of the dictionary to `count the pages`.\n * @hidden\n * @private\n */\n PdfSectionCollection.prototype.beginSave = function () {\n this.sectionCount.intValue = this.countPages();\n };\n //Fields\n /**\n * Rotate factor for page `rotation`.\n * @default 90\n * @private\n */\n PdfSectionCollection.rotateFactor = 90;\n return PdfSectionCollection;\n}());\nexport { PdfSectionCollection };\n","import { PdfPage } from './pdf-page';\nimport { Dictionary } from './../collections/dictionary';\nimport { PdfPageOrientation } from './enum';\n/**\n * Represents a virtual collection of all the pages in the document.\n * @private\n */\nvar PdfDocumentPageCollection = /** @class */ (function () {\n //constructor\n /**\n * Initializes a new instance of the `PdfPageCollection` class.\n * @private\n */\n function PdfDocumentPageCollection(document) {\n /**\n * It holds the page collection with the `index`.\n * @private\n */\n this.pdfPageCollectionIndex = new Dictionary();\n /**\n * Stores the previous pages's `orientation`.\n * @default PdfPageOrientation.Portrait\n * @private\n */\n this.previousPageOrientation = PdfPageOrientation.Portrait;\n this.document = document;\n }\n Object.defineProperty(PdfDocumentPageCollection.prototype, \"count\", {\n //Property\n /**\n * Gets the total `number of the pages`.\n * @private\n */\n get: function () {\n return this.countPages();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentPageCollection.prototype, \"pageCollectionIndex\", {\n /**\n * Gets a `page index` from the document.\n * @private\n */\n get: function () {\n return this.pdfPageCollectionIndex;\n },\n enumerable: true,\n configurable: true\n });\n PdfDocumentPageCollection.prototype.add = function (page) {\n if (typeof page === 'undefined') {\n var page_1 = new PdfPage();\n this.add(page_1);\n return page_1;\n }\n else {\n var section = this.getLastSection();\n if (section.pageSettings.orientation !== this.previousPageOrientation) {\n section = this.document.sections.add();\n section.pageSettings.orientation = this.document.pageSettings.orientation;\n }\n section.add(page);\n }\n };\n /**\n * Returns `last section` in the document.\n * @private\n */\n PdfDocumentPageCollection.prototype.getLastSection = function () {\n var sc = this.document.sections;\n if (sc.section.length === 0) {\n sc.add();\n }\n var section = sc.section[sc.section.length - 1];\n return section;\n };\n /**\n * Called when `new page has been added`.\n * @private\n */\n PdfDocumentPageCollection.prototype.onPageAdded = function (args) {\n // if (PageAdded !== null)\n // {\n // PageAdded(this, args);\n // }\n };\n /**\n * Gets the `total number of pages`.\n * @private\n */\n PdfDocumentPageCollection.prototype.countPages = function () {\n var sc = this.document.sections;\n var count = 0;\n for (var index = 0; index < sc.section.length; index++) {\n count += sc.section[index].count;\n }\n return count;\n };\n /**\n * Gets the `page object` from page index.\n * @private\n */\n PdfDocumentPageCollection.prototype.getPageByIndex = function (index) {\n return this.getPage(index);\n };\n /**\n * Gets a page by its `index` in the document.\n * @private\n */\n PdfDocumentPageCollection.prototype.getPage = function (index) {\n if ((index < 0) || (index >= this.count)) {\n throw Error('ArgumentOutOfRangeException(\"index\", \"Value can not be less 0\")');\n }\n var page = null;\n var sectionStartIndex = 0;\n var sectionCount = 0;\n var pageIndex = 0;\n var length = this.document.sections.count;\n for (var i = 0; i < length; i++) {\n var section = this.document.sections.section[i];\n sectionCount = section.count;\n pageIndex = index - sectionStartIndex;\n // We found a section containing the page.\n if ((index >= sectionStartIndex && pageIndex < sectionCount)) {\n page = section.getPages()[pageIndex];\n break;\n }\n sectionStartIndex += sectionCount;\n }\n return page;\n };\n /**\n * Gets the `index of` the page in the document.\n * @private\n */\n PdfDocumentPageCollection.prototype.indexOf = function (page) {\n var index = -1;\n if (page == null) {\n throw new Error('ArgumentNullException: page');\n }\n else {\n var numPages = 0;\n for (var i = 0, len = this.document.sections.count; i < len; i++) {\n var section = this.document.sections.pdfSectionCollection(i);\n index = section.indexOf(page);\n if (index >= 0) {\n index += numPages;\n break;\n }\n else {\n index = -1;\n }\n numPages += section.count;\n }\n }\n return index;\n };\n /**\n * `Removes` the specified page.\n * @private\n */\n PdfDocumentPageCollection.prototype.remove = function (page) {\n if (page == null) {\n throw Error('ArgumentNullException(\"page\")');\n }\n var section = null;\n var len;\n for (var i = 0, len_1 = this.document.sections.count; i < len_1; i++) {\n section = this.document.sections.pdfSectionCollection(i);\n if (section.pages.contains(page)) {\n section.pages.remove(page);\n break;\n }\n }\n return section;\n };\n return PdfDocumentPageCollection;\n}());\nexport { PdfDocumentPageCollection };\n","/**\n * PdfCacheCollection.ts class for EJ2-PDF\n */\nimport { Dictionary } from './../collections/dictionary';\n/**\n * `Collection of the cached objects`.\n * @private\n */\nvar PdfCacheCollection = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `PdfCacheCollection` class.\n * @private\n */\n function PdfCacheCollection() {\n this.referenceObjects = [];\n this.pdfFontCollection = new Dictionary();\n }\n // Public methods\n /**\n * `Searches` for the similar cached object. If is not found - adds the object to the cache.\n * @private\n */\n PdfCacheCollection.prototype.search = function (obj) {\n var result = null;\n var group = this.createNewGroup();\n group.push(obj);\n return result;\n };\n // Implementation\n /**\n * `Creates` a new group.\n * @private\n */\n PdfCacheCollection.prototype.createNewGroup = function () {\n var group = [];\n this.referenceObjects.push(group);\n return group;\n };\n PdfCacheCollection.prototype.destroy = function () {\n this.pdfFontCollection = undefined;\n this.referenceObjects = undefined;\n };\n return PdfCacheCollection;\n}());\nexport { PdfCacheCollection };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfWriter } from './../input-output/pdf-writer';\nimport { PdfMainObjectCollection } from './../input-output/pdf-main-object-collection';\nimport { PdfDocumentBase } from './pdf-document-base';\nimport { PdfCrossTable } from './../input-output/pdf-cross-table';\nimport { PdfCatalog } from './pdf-catalog';\nimport { PdfPageSettings } from './../pages/pdf-page-settings';\nimport { PdfSectionCollection } from './../pages/pdf-section-collection';\nimport { PdfDocumentPageCollection } from './../pages/pdf-document-page-collection';\nimport { PdfCacheCollection } from './../general/pdf-cache-collection';\nimport { PdfColorSpace } from './../graphics/enum';\nimport { PdfDocumentTemplate } from './pdf-document-template';\nimport { PdfFontFamily } from './../graphics/fonts/enum';\nimport { PdfStandardFont } from './../graphics/fonts/pdf-standard-font';\n/**\n * Represents a PDF document and can be used to create a new PDF document from the scratch.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfDocument = /** @class */ (function (_super) {\n __extends(PdfDocument, _super);\n function PdfDocument(isMerging) {\n var _this = _super.call(this) || this;\n /**\n * Default `margin` value.\n * @default 40.0\n * @private\n */\n _this.defaultMargin = 40.0;\n /**\n * Internal variable to store instance of `StreamWriter` classes..\n * @default null\n * @private\n */\n _this.streamWriter = null;\n _this = _super.call(this, _this) || this;\n if (isMerging === true || isMerging === false || typeof isMerging !== 'undefined') {\n var objects = new PdfMainObjectCollection();\n _this.setMainObjectCollection(objects);\n var crossTable = new PdfCrossTable();\n crossTable.isMerging = isMerging;\n crossTable.document = _this;\n _this.setCrossTable(crossTable);\n var catalog = new PdfCatalog();\n _this.setCatalog(catalog);\n objects.add(catalog);\n catalog.position = -1;\n _this.sectionCollection = new PdfSectionCollection(_this);\n _this.documentPageCollection = new PdfDocumentPageCollection(_this);\n catalog.pages = _this.sectionCollection;\n }\n else {\n PdfDocument.cacheCollection = new PdfCacheCollection();\n _this.constructor(false);\n }\n return _this;\n }\n Object.defineProperty(PdfDocument, \"defaultFont\", {\n //Properties\n /**\n * Gets the `default font`. It is used for complex objects when font is not explicitly defined.\n * @private\n */\n get: function () {\n if (this.defaultStandardFont == null) {\n this.defaultStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 8);\n }\n return this.defaultStandardFont;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"sections\", {\n /**\n * Gets the collection of the `sections` in the document.\n * @private\n */\n get: function () {\n return this.sectionCollection;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"pageSettings\", {\n /**\n * Gets the document's page setting.\n * @public\n */\n get: function () {\n if (this.settings == null) {\n this.settings = new PdfPageSettings(this.defaultMargin);\n }\n return this.settings;\n },\n /**\n * Sets the document's page setting.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n *\n * // sets the right margin of the page\n * document.pageSettings.margins.right = 0;\n * // set the page size.\n * document.pageSettings.size = new SizeF(500, 500);\n * // change the page orientation to landscape\n * document.pageSettings.orientation = PdfPageOrientation.Landscape;\n * // apply 90 degree rotation on the page\n * document.pageSettings.rotate = PdfPageRotateAngle.RotateAngle90;\n *\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // set the specified Point\n * let point : PointF = new PointF(page1.getClientSize().width - 200, page1.getClientSize().height - 200);\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, point);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n set: function (value) {\n this.settings = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"pages\", {\n /**\n * Represents the collection of pages in the PDF document.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * //\n * // get the collection of pages in the document\n * let pageCollection : PdfDocumentPageCollection = document.pages;\n * //\n * // add pages\n * let page1 : PdfPage = pageCollection.add();\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.documentPageCollection;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument, \"cache\", {\n /**\n * Gets collection of the `cached objects`.\n * @private\n */\n get: function () {\n if (typeof PdfDocument.cacheCollection === 'undefined' || PdfDocument.cacheCollection == null) {\n return new PdfCacheCollection();\n }\n return PdfDocument.cacheCollection;\n },\n /**\n * Sets collection of the `cached objects`.\n * @private\n */\n set: function (value) {\n this.cacheCollection = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"colorSpace\", {\n /* tslint:disable */\n /**\n * Gets or sets the `color space` of the document. This property can be used to create PDF document in RGB, Gray scale or CMYK color spaces.\n * @private\n */\n get: function () {\n if ((this.pdfColorSpace === PdfColorSpace.Rgb) || ((this.pdfColorSpace === PdfColorSpace.Cmyk)\n || (this.pdfColorSpace === PdfColorSpace.GrayScale))) {\n return this.pdfColorSpace;\n }\n else {\n return PdfColorSpace.Rgb;\n }\n },\n set: function (value) {\n if ((value === PdfColorSpace.Rgb) || ((value === PdfColorSpace.Cmyk) ||\n (value === PdfColorSpace.GrayScale))) {\n this.pdfColorSpace = value;\n }\n else {\n this.pdfColorSpace = PdfColorSpace.Rgb;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"template\", {\n /* tslint:enable */\n /**\n * Gets or sets a `template` to all pages in the document.\n * @private\n */\n get: function () {\n if (this.pageTemplate == null) {\n this.pageTemplate = new PdfDocumentTemplate();\n }\n return this.pageTemplate;\n },\n set: function (value) {\n this.pageTemplate = value;\n },\n enumerable: true,\n configurable: true\n });\n PdfDocument.prototype.docSave = function (stream, arg2, arg3) {\n this.checkPagesPresence();\n if (stream === null) {\n throw new Error('ArgumentNullException : stream');\n }\n this.streamWriter = stream;\n var writer = new PdfWriter(stream);\n writer.document = this;\n if (typeof arg2 === 'boolean' && typeof arg3 === 'undefined') {\n return this.crossTable.save(writer);\n }\n else {\n this.crossTable.save(writer, arg2);\n }\n };\n /**\n * Checks the pages `presence`.\n * @private\n */\n PdfDocument.prototype.checkPagesPresence = function () {\n if (this.pages.count === 0) {\n this.pages.add();\n }\n };\n /**\n * disposes the current instance of `PdfDocument` class.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n PdfDocument.prototype.destroy = function () {\n this.catalog = undefined;\n this.colorSpace = undefined;\n this.currentSavingObj = undefined;\n this.documentPageCollection = undefined;\n this.isStreamCopied = undefined;\n this.pageSettings = undefined;\n this.pageTemplate = undefined;\n this.pdfColorSpace = undefined;\n this.sectionCollection = undefined;\n PdfDocument.cache.destroy();\n this.crossTable.pdfObjects.destroy();\n PdfDocument.cache = undefined;\n this.streamWriter.destroy();\n };\n /**\n * `Font` used in complex objects to draw strings and text when it is not defined explicitly.\n * @default null\n * @private\n */\n PdfDocument.defaultStandardFont = null;\n return PdfDocument;\n}(PdfDocumentBase));\nexport { PdfDocument };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfFont } from './pdf-font';\nimport { PdfSubSuperScript } from './enum';\nimport { PdfArray } from './../../primitives/pdf-array';\n/**\n * `Metrics` of the font.\n * @private\n */\nvar PdfFontMetrics = /** @class */ (function () {\n function PdfFontMetrics() {\n /**\n * `Line gap`.\n * @private\n */\n this.lineGap = 0;\n }\n // Public methods\n /**\n * Returns `ascent` taking into consideration font`s size.\n * @private\n */\n PdfFontMetrics.prototype.getAscent = function (format) {\n var returnValue = this.ascent * PdfFont.charSizeMultiplier * this.getSize(format);\n return returnValue;\n };\n /**\n * Returns `descent` taking into consideration font`s size.\n * @private\n */\n PdfFontMetrics.prototype.getDescent = function (format) {\n var returnValue = this.descent * PdfFont.charSizeMultiplier * this.getSize(format);\n return returnValue;\n };\n /**\n * Returns `Line gap` taking into consideration font`s size.\n * @private\n */\n PdfFontMetrics.prototype.getLineGap = function (format) {\n var returnValue = this.lineGap * PdfFont.charSizeMultiplier * this.getSize(format);\n return returnValue;\n };\n /**\n * Returns `height` taking into consideration font`s size.\n * @private\n */\n PdfFontMetrics.prototype.getHeight = function (format) {\n var height;\n var clearTypeFonts = ['cambria', 'candara', 'constantia', 'corbel', 'cariadings'];\n var clearTypeFontCollection = [];\n for (var index = 0; index < clearTypeFonts.length; index++) {\n var font = clearTypeFonts[index];\n clearTypeFontCollection.push(font);\n }\n if (this.getDescent(format) < 0) {\n // if ((clearTypeFontCollection.indexOf(this.name.toLowerCase()) !== -1) && !this.isUnicodeFont) {\n // height = (this.GetAscent(format) - this.GetDescent(format) - this.GetLineGap(format));\n // } else {\n height = (this.getAscent(format) - this.getDescent(format) + this.getLineGap(format));\n // }\n }\n else {\n height = (this.getAscent(format) + this.getDescent(format) + this.getLineGap(format));\n }\n return height;\n };\n /**\n * Calculates `size` of the font depending on the subscript/superscript value.\n * @private\n */\n PdfFontMetrics.prototype.getSize = function (format) {\n var size = this.size;\n if (format != null) {\n switch (format.subSuperScript) {\n case PdfSubSuperScript.SubScript:\n size /= this.subScriptSizeFactor;\n break;\n case PdfSubSuperScript.SuperScript:\n size /= this.superscriptSizeFactor;\n break;\n }\n }\n return size;\n };\n /**\n * `Clones` the metrics.\n * @private\n */\n PdfFontMetrics.prototype.clone = function () {\n var metrics = this;\n metrics.widthTable = WidthTable.clone();\n return metrics;\n };\n Object.defineProperty(PdfFontMetrics.prototype, \"widthTable\", {\n // Properies\n /**\n * Gets or sets the `width table`.\n * @private\n */\n get: function () {\n return this.internalWidthTable;\n },\n set: function (value) {\n this.internalWidthTable = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfFontMetrics;\n}());\nexport { PdfFontMetrics };\nvar WidthTable = /** @class */ (function () {\n function WidthTable() {\n }\n /**\n * Static `clones` this instance of the WidthTable class.\n * @private\n */\n WidthTable.clone = function () {\n return null;\n };\n return WidthTable;\n}());\nexport { WidthTable };\nvar StandardWidthTable = /** @class */ (function (_super) {\n __extends(StandardWidthTable, _super);\n // Constructors\n /**\n * Initializes a new instance of the `StandardWidthTable` class.\n * @private\n */\n function StandardWidthTable(widths) {\n var _this = _super.call(this) || this;\n if (widths == null) {\n throw new Error('ArgumentNullException:widths');\n }\n _this.widths = widths;\n return _this;\n }\n //Properties\n /**\n * Gets the `32 bit number` at the specified index.\n * @private\n */\n StandardWidthTable.prototype.items = function (index) {\n if (index < 0 || index >= this.widths.length) {\n throw new Error('ArgumentOutOfRangeException:index, The character is not supported by the font.');\n }\n var result = this.widths[index];\n return result;\n };\n Object.defineProperty(StandardWidthTable.prototype, \"length\", {\n /**\n * Gets the `length` of the internal array.\n * @private\n */\n get: function () {\n return this.widths.length;\n },\n enumerable: true,\n configurable: true\n });\n //Overrides\n /**\n * `Clones` this instance of the WidthTable class.\n * @private\n */\n StandardWidthTable.prototype.clone = function () {\n var swt = this;\n swt.widths = this.widths;\n return swt;\n };\n /**\n * Converts width table to a `PDF array`.\n * @private\n */\n StandardWidthTable.prototype.toArray = function () {\n var arr = new PdfArray(this.widths);\n return arr;\n };\n return StandardWidthTable;\n}(WidthTable));\nexport { StandardWidthTable };\n","/**\n * PdfStandardFontMetricsFactory.ts class for EJ2-PDF\n */\nimport { PdfFontStyle, PdfFontFamily } from './enum';\nimport { PdfFontMetrics, StandardWidthTable } from './pdf-font-metrics';\n/**\n * @private\n * `Factory of the standard fonts metrics`.\n */\nvar PdfStandardFontMetricsFactory = /** @class */ (function () {\n function PdfStandardFontMetricsFactory() {\n }\n /**\n * Returns `metrics` of the font.\n * @private\n */\n PdfStandardFontMetricsFactory.getMetrics = function (fontFamily, fontStyle, size) {\n var metrics = null;\n switch (fontFamily) {\n case PdfFontFamily.Helvetica:\n metrics = this.getHelveticaMetrics(fontFamily, fontStyle, size);\n break;\n case PdfFontFamily.Courier:\n metrics = this.getCourierMetrics(fontFamily, fontStyle, size);\n break;\n case PdfFontFamily.TimesRoman:\n metrics = this.getTimesMetrics(fontFamily, fontStyle, size);\n break;\n case PdfFontFamily.Symbol:\n metrics = this.getSymbolMetrics(fontFamily, fontStyle, size);\n break;\n case PdfFontFamily.ZapfDingbats:\n metrics = this.getZapfDingbatsMetrics(fontFamily, fontStyle, size);\n break;\n default:\n metrics = this.getHelveticaMetrics(PdfFontFamily.Helvetica, fontStyle, size);\n break;\n }\n metrics.name = fontFamily.toString();\n metrics.subScriptSizeFactor = this.subSuperScriptFactor;\n metrics.superscriptSizeFactor = this.subSuperScriptFactor;\n return metrics;\n };\n // Implementation\n /**\n * Creates `Helvetica font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getHelveticaMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n if ((fontStyle & PdfFontStyle.Bold) > 0 && (fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.helveticaBoldItalicAscent;\n metrics.descent = this.helveticaBoldItalicDescent;\n metrics.postScriptName = this.helveticaBoldItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.arialBoldWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Bold) > 0) {\n metrics.ascent = this.helveticaBoldAscent;\n metrics.descent = this.helveticaBoldDescent;\n metrics.postScriptName = this.helveticaBoldName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.arialBoldWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.helveticaItalicAscent;\n metrics.descent = this.helveticaItalicDescent;\n metrics.postScriptName = this.helveticaItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.arialWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else {\n metrics.ascent = this.helveticaAscent;\n metrics.descent = this.helveticaDescent;\n metrics.postScriptName = this.helveticaName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.arialWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n return metrics;\n };\n /**\n * Creates `Courier font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getCourierMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n if ((fontStyle & PdfFontStyle.Bold) > 0 && (fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.courierBoldItalicAscent;\n metrics.descent = this.courierBoldItalicDescent;\n metrics.postScriptName = this.courierBoldItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.fixedWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Bold) > 0) {\n metrics.ascent = this.courierBoldAscent;\n metrics.descent = this.courierBoldDescent;\n metrics.postScriptName = this.courierBoldName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.fixedWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.courierItalicAscent;\n metrics.descent = this.courierItalicDescent;\n metrics.postScriptName = this.courierItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.fixedWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else {\n metrics.ascent = this.courierAscent;\n metrics.descent = this.courierDescent;\n metrics.postScriptName = this.courierName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.fixedWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n return metrics;\n };\n /**\n * Creates `Times font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getTimesMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n if ((fontStyle & PdfFontStyle.Bold) > 0 && (fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.timesBoldItalicAscent;\n metrics.descent = this.timesBoldItalicDescent;\n metrics.postScriptName = this.timesBoldItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.timesRomanBoldItalicWidths);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Bold) > 0) {\n metrics.ascent = this.timesBoldAscent;\n metrics.descent = this.timesBoldDescent;\n metrics.postScriptName = this.timesBoldName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.timesRomanBoldWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.timesItalicAscent;\n metrics.descent = this.timesItalicDescent;\n metrics.postScriptName = this.timesItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.timesRomanItalicWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else {\n metrics.ascent = this.timesAscent;\n metrics.descent = this.timesDescent;\n metrics.postScriptName = this.timesName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.timesRomanWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n return metrics;\n };\n /**\n * Creates `Symbol font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getSymbolMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n metrics.ascent = this.symbolAscent;\n metrics.descent = this.symbolDescent;\n metrics.postScriptName = this.symbolName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.symbolWidth);\n metrics.height = metrics.ascent - metrics.descent;\n return metrics;\n };\n /**\n * Creates `ZapfDingbats font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getZapfDingbatsMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n metrics.ascent = this.zapfDingbatsAscent;\n metrics.descent = this.zapfDingbatsDescent;\n metrics.postScriptName = this.zapfDingbatsName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.zapfDingbatsWidth);\n metrics.height = metrics.ascent - metrics.descent;\n return metrics;\n };\n /**\n * `Multiplier` os subscript superscript.\n * @private\n */\n PdfStandardFontMetricsFactory.subSuperScriptFactor = 1.52;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaAscent = 931;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaDescent = -225;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaName = 'Helvetica';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldAscent = 962;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldDescent = -228;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldName = 'Helvetica-Bold';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaItalicAscent = 931;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaItalicDescent = -225;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaItalicName = 'Helvetica-Oblique';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldItalicAscent = 962;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldItalicDescent = -228;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldItalicName = 'Helvetica-BoldOblique';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierAscent = 805;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierDescent = -250;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.courierName = 'Courier';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldAscent = 801;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldDescent = -250;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldName = 'Courier-Bold';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierItalicAscent = 805;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierItalicDescent = -250;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.courierItalicName = 'Courier-Oblique';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldItalicAscent = 801;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldItalicDescent = -250;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldItalicName = 'Courier-BoldOblique';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesAscent = 898;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesDescent = -218;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.timesName = 'Times-Roman';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldAscent = 935;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldDescent = -218;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldName = 'Times-Bold';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesItalicAscent = 883;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesItalicDescent = -217;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.timesItalicName = 'Times-Italic';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldItalicAscent = 921;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldItalicDescent = -218;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldItalicName = 'Times-BoldItalic';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.symbolAscent = 1010;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.symbolDescent = -293;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.symbolName = 'Symbol';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.zapfDingbatsAscent = 820;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.zapfDingbatsDescent = -143;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.zapfDingbatsName = 'ZapfDingbats';\n /**\n * `Arial` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.arialWidth = [\n 278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, 278, 333,\n 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, 278, 584, 584,\n 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, 556, 833,\n 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 278, 278, 278,\n 469, 556, 333, 556, 556, 500, 556, 556, 278, 556, 556, 222, 222, 500, 222, 833,\n 556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, 334, 260, 334,\n 584, 0, 556, 0, 222, 556, 333, 1000, 556, 556, 333, 1000, 667, 333, 1000, 0,\n 611, 0, 0, 222, 222, 333, 333, 350, 556, 1000, 333, 1000, 500, 333, 944, 0,\n 500, 667, 0, 333, 556, 556, 556, 556, 260, 556, 333, 737, 370, 556, 584, 0,\n 737, 333, 400, 584, 333, 333, 333, 556, 537, 278, 333, 333, 365, 556, 834, 834,\n 834, 611, 667, 667, 667, 667, 667, 667, 1000, 722, 667, 667, 667, 667, 278, 278,\n 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667,\n 667, 611, 556, 556, 556, 556, 556, 556, 889, 500, 556, 556, 556, 556, 278, 278,\n 278, 278, 556, 556, 556, 556, 556, 556, 556, 584, 611, 556, 556, 556, 556, 500,\n 556, 500\n ];\n /**\n * `Arial bold` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.arialBoldWidth = [\n 278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, 278, 333,\n 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333, 584, 584,\n 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833,\n 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 333, 278, 333,\n 584, 556, 333, 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, 278, 889,\n 611, 611, 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, 389, 280, 389,\n 584, 0, 556, 0, 278, 556, 500, 1000, 556, 556, 333, 1000, 667, 333, 1000, 0,\n 611, 0, 0, 278, 278, 500, 500, 350, 556, 1000, 333, 1000, 556, 333, 944, 0,\n 500, 667, 0, 333, 556, 556, 556, 556, 280, 556, 333, 737, 370, 556, 584, 0,\n 737, 333, 400, 584, 333, 333, 333, 611, 556, 278, 333, 333, 365, 556, 834, 834,\n 834, 611, 722, 722, 722, 722, 722, 722, 1000, 722, 667, 667, 667, 667, 278, 278,\n 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667,\n 667, 611, 556, 556, 556, 556, 556, 556, 889, 556, 556, 556, 556, 556, 278, 278,\n 278, 278, 611, 611, 611, 611, 611, 611, 611, 584, 611, 611, 611, 611, 611, 556,\n 611, 556\n ];\n /**\n * `Fixed` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.fixedWidth = [\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600\n ];\n /**\n * `Times` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.timesRomanWidth = [\n 250, 333, 408, 500, 500, 833, 778, 180, 333, 333, 500, 564, 250, 333,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 278, 278, 564, 564,\n 564, 444, 921, 722, 667, 667, 722, 611, 556, 722, 722, 333, 389, 722, 611, 889,\n 722, 722, 556, 722, 667, 556, 611, 722, 722, 944, 722, 722, 611, 333, 278, 333,\n 469, 500, 333, 444, 500, 444, 500, 444, 333, 500, 500, 278, 278, 500, 278, 778,\n 500, 500, 500, 500, 333, 389, 278, 500, 500, 722, 500, 500, 444, 480, 200, 480,\n 541, 0, 500, 0, 333, 500, 444, 1000, 500, 500, 333, 1000, 556, 333, 889, 0,\n 611, 0, 0, 333, 333, 444, 444, 350, 500, 1000, 333, 980, 389, 333, 722, 0,\n 444, 722, 0, 333, 500, 500, 500, 500, 200, 500, 333, 760, 276, 500, 564, 0,\n 760, 333, 400, 564, 300, 300, 333, 500, 453, 250, 333, 300, 310, 500, 750, 750,\n 750, 444, 722, 722, 722, 722, 722, 722, 889, 667, 611, 611, 611, 611, 333, 333,\n 333, 333, 722, 722, 722, 722, 722, 722, 722, 564, 722, 722, 722, 722, 722, 722,\n 556, 500, 444, 444, 444, 444, 444, 444, 667, 444, 444, 444, 444, 444, 278, 278,\n 278, 278, 500, 500, 500, 500, 500, 500, 500, 564, 500, 500, 500, 500, 500, 500,\n 500, 500\n ];\n /**\n * `Times bold` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.timesRomanBoldWidth = [\n 250, 333, 555, 500, 500, 1000, 833, 278, 333, 333, 500, 570, 250, 333,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 333, 333, 570, 570,\n 570, 500, 930, 722, 667, 722, 722, 667, 611, 778, 778, 389, 500, 778, 667, 944,\n 722, 778, 611, 778, 722, 556, 667, 722, 722, 1000, 722, 722, 667, 333, 278, 333,\n 581, 500, 333, 500, 556, 444, 556, 444, 333, 500, 556, 278, 333, 556, 278, 833,\n 556, 500, 556, 556, 444, 389, 333, 556, 500, 722, 500, 500, 444, 394, 220, 394,\n 520, 0, 500, 0, 333, 500, 500, 1000, 500, 500, 333, 1000, 556, 333, 1000, 0,\n 667, 0, 0, 333, 333, 500, 500, 350, 500, 1000, 333, 1000, 389, 333, 722, 0,\n 444, 722, 0, 333, 500, 500, 500, 500, 220, 500, 333, 747, 300, 500, 570, 0,\n 747, 333, 400, 570, 300, 300, 333, 556, 540, 250, 333, 300, 330, 500, 750, 750,\n 750, 500, 722, 722, 722, 722, 722, 722, 1000, 722, 667, 667, 667, 667, 389, 389,\n 389, 389, 722, 722, 778, 778, 778, 778, 778, 570, 778, 722, 722, 722, 722, 722,\n 611, 556, 500, 500, 500, 500, 500, 500, 722, 444, 444, 444, 444, 444, 278, 278,\n 278, 278, 500, 556, 500, 500, 500, 500, 500, 570, 500, 556, 556, 556, 556, 500,\n 556, 500\n ];\n /**\n * `Times italic` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.timesRomanItalicWidth = [\n 250, 333, 420, 500, 500, 833, 778, 214, 333, 333, 500, 675, 250, 333,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 333, 333, 675, 675,\n 675, 500, 920, 611, 611, 667, 722, 611, 611, 722, 722, 333, 444, 667, 556, 833,\n 667, 722, 611, 722, 611, 500, 556, 722, 611, 833, 611, 556, 556, 389, 278, 389,\n 422, 500, 333, 500, 500, 444, 500, 444, 278, 500, 500, 278, 278, 444, 278, 722,\n 500, 500, 500, 500, 389, 389, 278, 500, 444, 667, 444, 444, 389, 400, 275, 400,\n 541, 0, 500, 0, 333, 500, 556, 889, 500, 500, 333, 1000, 500, 333, 944, 0,\n 556, 0, 0, 333, 333, 556, 556, 350, 500, 889, 333, 980, 389, 333, 667, 0,\n 389, 556, 0, 389, 500, 500, 500, 500, 275, 500, 333, 760, 276, 500, 675, 0,\n 760, 333, 400, 675, 300, 300, 333, 500, 523, 250, 333, 300, 310, 500, 750, 750,\n 750, 500, 611, 611, 611, 611, 611, 611, 889, 667, 611, 611, 611, 611, 333, 333,\n 333, 333, 722, 667, 722, 722, 722, 722, 722, 675, 722, 722, 722, 722, 722, 556,\n 611, 500, 500, 500, 500, 500, 500, 500, 667, 444, 444, 444, 444, 444, 278, 278,\n 278, 278, 500, 500, 500, 500, 500, 500, 500, 675, 500, 500, 500, 500, 500, 444,\n 500, 444\n ];\n /**\n * `Times bold italic` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.timesRomanBoldItalicWidths = [\n 250, 389, 555, 500, 500, 833, 778, 278, 333, 333, 500, 570, 250, 333,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 333, 333, 570, 570,\n 570, 500, 832, 667, 667, 667, 722, 667, 667, 722, 778, 389, 500, 667, 611, 889,\n 722, 722, 611, 722, 667, 556, 611, 722, 667, 889, 667, 611, 611, 333, 278, 333,\n 570, 500, 333, 500, 500, 444, 500, 444, 333, 500, 556, 278, 278, 500, 278, 778,\n 556, 500, 500, 500, 389, 389, 278, 556, 444, 667, 500, 444, 389, 348, 220, 348,\n 570, 0, 500, 0, 333, 500, 500, 1000, 500, 500, 333, 1000, 556, 333, 944, 0,\n 611, 0, 0, 333, 333, 500, 500, 350, 500, 1000, 333, 1000, 389, 333, 722, 0,\n 389, 611, 0, 389, 500, 500, 500, 500, 220, 500, 333, 747, 266, 500, 606, 0,\n 747, 333, 400, 570, 300, 300, 333, 576, 500, 250, 333, 300, 300, 500, 750, 750,\n 750, 500, 667, 667, 667, 667, 667, 667, 944, 667, 667, 667, 667, 667, 389, 389,\n 389, 389, 722, 722, 722, 722, 722, 722, 722, 570, 722, 722, 722, 722, 722, 611,\n 611, 500, 500, 500, 500, 500, 500, 500, 722, 444, 444, 444, 444, 444, 278, 278,\n 278, 278, 500, 556, 500, 500, 500, 500, 500, 570, 500, 556, 556, 556, 556, 444,\n 500, 444\n ];\n /**\n * `Symbol` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.symbolWidth = [\n 250, 333, 713, 500, 549, 833, 778, 439, 333, 333, 500, 549, 250, 549,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 278, 278,\n 549, 549, 549, 444, 549, 722, 667, 722, 612, 611, 763, 603, 722, 333,\n 631, 722, 686, 889, 722, 722, 768, 741, 556, 592, 611, 690, 439, 768,\n 645, 795, 611, 333, 863, 333, 658, 500, 500, 631, 549, 549, 494, 439,\n 521, 411, 603, 329, 603, 549, 549, 576, 521, 549, 549, 521, 549, 603,\n 439, 576, 713, 686, 493, 686, 494, 480, 200, 480, 549, 750, 620, 247,\n 549, 167, 713, 500, 753, 753, 753, 753, 1042, 987, 603, 987, 603, 400,\n 549, 411, 549, 549, 713, 494, 460, 549, 549, 549, 549, 1000, 603, 1000,\n 658, 823, 686, 795, 987, 768, 768, 823, 768, 768, 713, 713, 713, 713,\n 713, 713, 713, 768, 713, 790, 790, 890, 823, 549, 250, 713, 603, 603,\n 1042, 987, 603, 987, 603, 494, 329, 790, 790, 786, 713, 384, 384, 384,\n 384, 384, 384, 494, 494, 494, 494, 329, 274, 686, 686, 686, 384, 384,\n 384, 384, 384, 384, 494, 494, 494, -1\n ];\n /**\n * `Zip dingbats` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.zapfDingbatsWidth = [\n 278, 974, 961, 974, 980, 719, 789, 790, 791, 690, 960, 939, 549, 855,\n 911, 933, 911, 945, 974, 755, 846, 762, 761, 571, 677, 763, 760, 759,\n 754, 494, 552, 537, 577, 692, 786, 788, 788, 790, 793, 794, 816, 823,\n 789, 841, 823, 833, 816, 831, 923, 744, 723, 749, 790, 792, 695, 776,\n 768, 792, 759, 707, 708, 682, 701, 826, 815, 789, 789, 707, 687, 696,\n 689, 786, 787, 713, 791, 785, 791, 873, 761, 762, 762, 759, 759, 892,\n 892, 788, 784, 438, 138, 277, 415, 392, 392, 668, 668, 390, 390, 317,\n 317, 276, 276, 509, 509, 410, 410, 234, 234, 334, 334, 732, 544, 544,\n 910, 667, 760, 760, 776, 595, 694, 626, 788, 788, 788, 788, 788, 788,\n 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788,\n 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788,\n 788, 788, 788, 788, 788, 788, 894, 838, 1016, 458, 748, 924, 748, 918,\n 927, 928, 928, 834, 873, 828, 924, 924, 917, 930, 931, 463, 883, 836,\n 836, 867, 867, 696, 696, 874, 874, 760, 946, 771, 865, 771, 888, 967,\n 888, 831, 873, 927, 970, 918\n ];\n return PdfStandardFontMetricsFactory;\n}());\nexport { PdfStandardFontMetricsFactory };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfFontFamily, PdfFontStyle, FontEncoding } from './enum';\nimport { PdfFont } from './pdf-font';\nimport { PdfDocument } from './../../document/pdf-document';\nimport { PdfStandardFontMetricsFactory } from './pdf-standard-font-metrics-factory';\nimport { PdfDictionary } from './../../primitives/pdf-dictionary';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { PdfName } from './../../primitives/pdf-name';\n/**\n * Represents one of the 14 standard fonts.\n * It's used to create a standard PDF font to draw the text in to the PDF.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * //\n * // create new standard font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * //\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfStandardFont = /** @class */ (function (_super) {\n __extends(PdfStandardFont, _super);\n function PdfStandardFont(fontFamilyPrototype, size, style) {\n var _this = _super.call(this, size, style) || this;\n /**\n * Gets `ascent` of the font.\n * @private\n */\n _this.dictionaryProperties = new DictionaryProperties();\n /**\n * Gets `encodings` for internal class use.\n * @hidden\n * @private\n */\n _this.encodings = ['Unknown', 'StandardEncoding', 'MacRomanEncoding', 'MacExpertEncoding',\n 'WinAnsiEncoding', 'PDFDocEncoding', 'IdentityH'];\n if ((typeof fontFamilyPrototype === 'number') && (typeof style === 'undefined')) {\n _this.constructor(fontFamilyPrototype, size, PdfFontStyle.Regular);\n }\n else if ((typeof fontFamilyPrototype === 'number') && (typeof style !== 'undefined')) {\n _this = _super.call(this, size, style) || this;\n _this.pdfFontFamily = fontFamilyPrototype;\n _this.checkStyle();\n _this.initializeInternals();\n }\n else if ((fontFamilyPrototype instanceof PdfStandardFont) && (typeof style === 'undefined')) {\n _this.constructor(fontFamilyPrototype.fontFamily, size, fontFamilyPrototype.style);\n }\n else if ((fontFamilyPrototype instanceof PdfStandardFont) && (typeof style !== 'undefined')) {\n _this.constructor(fontFamilyPrototype.fontFamily, size, style);\n }\n return _this;\n }\n Object.defineProperty(PdfStandardFont.prototype, \"fontFamily\", {\n //Properties\n /**\n * Gets the `FontFamily`.\n * @private\n */\n get: function () {\n return this.pdfFontFamily;\n },\n enumerable: true,\n configurable: true\n });\n //methods\n /**\n * Checks font `style` of the font.\n * @private\n */\n PdfStandardFont.prototype.checkStyle = function () {\n if (this.fontFamily === PdfFontFamily.Symbol || this.fontFamily === PdfFontFamily.ZapfDingbats) {\n var style = this.style;\n style &= ~(PdfFontStyle.Bold | PdfFontStyle.Italic);\n this.setStyle(style);\n }\n };\n /**\n * Returns `width` of the line.\n * @public\n */\n PdfStandardFont.prototype.getLineWidth = function (line, format) {\n if (line == null) {\n throw new Error('ArgumentNullException:line');\n }\n var width = 0;\n var name = this.name;\n line = PdfStandardFont.convert(line);\n for (var i = 0, len = line.length; i < len; i++) {\n var ch = line[i];\n var charWidth = this.getCharWidthInternal(ch, format);\n width += charWidth;\n }\n var size = this.metrics.getSize(format);\n width *= (PdfFont.charSizeMultiplier * size);\n width = this.applyFormatSettings(line, format, width);\n return width;\n };\n /**\n * Checks whether fonts are `equals`.\n * @private\n */\n PdfStandardFont.prototype.equalsToFont = function (font) {\n var equal = false;\n var stFont = font;\n if (stFont != null) {\n var fontFamilyEqual = (this.fontFamily === stFont.fontFamily);\n var lineReducer = (~(PdfFontStyle.Underline | PdfFontStyle.Strikeout));\n var styleEqual = (this.style & lineReducer) === (stFont.style & lineReducer);\n equal = (fontFamilyEqual && styleEqual);\n }\n return equal;\n };\n /**\n * `Initializes` font internals..\n * @private\n */\n PdfStandardFont.prototype.initializeInternals = function () {\n var equalFont = null;\n // if (PdfDocument.EnableCache) {\n equalFont = PdfDocument.cache.search(this);\n // }\n var internals = null;\n // if (equalFont == null) {\n // Create font metrics.\n var metrics = PdfStandardFontMetricsFactory.getMetrics(this.pdfFontFamily, this.style, this.size);\n this.metrics = metrics;\n internals = this.createInternals();\n this.setInternals(internals);\n };\n /**\n * `Creates` font`s dictionary.\n * @private\n */\n PdfStandardFont.prototype.createInternals = function () {\n var dictionary = new PdfDictionary();\n dictionary.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.font));\n dictionary.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.type1));\n dictionary.items.setValue(this.dictionaryProperties.baseFont, new PdfName(this.metrics.postScriptName));\n if (this.fontFamily !== PdfFontFamily.Symbol && this.fontFamily !== PdfFontFamily.ZapfDingbats) {\n var encoding = this.encodings[FontEncoding.WinAnsiEncoding];\n dictionary.items.setValue(this.dictionaryProperties.encoding, new PdfName(encoding));\n }\n return dictionary;\n };\n /**\n * Returns `width` of the char. This methods doesn`t takes into consideration font`s size.\n * @private\n */\n PdfStandardFont.prototype.getCharWidthInternal = function (charCode, format) {\n var width = 0;\n var code = 0;\n code = charCode.charCodeAt(0);\n if (this.name === '0' || this.name === '1' || this.name === '2' ||\n this.name === '3' || this.name === '4') {\n code = code - PdfStandardFont.charOffset;\n }\n code = (code >= 0 && code !== 128) ? code : 0;\n var metrics = this.metrics;\n var widthTable = metrics.widthTable;\n width = widthTable.items(code);\n return width;\n };\n /**\n * `Converts` the specified text.\n * @private\n */\n PdfStandardFont.convert = function (text) {\n return text;\n };\n //Constants\n /**\n * First character `position`.\n * @private\n */\n PdfStandardFont.charOffset = 32;\n return PdfStandardFont;\n}(PdfFont));\nexport { PdfStandardFont };\n","import { PdfColor } from './../graphics/pdf-color';\nimport { RectangleF, PointF } from './../drawing/pdf-drawing';\nimport { PdfDictionary, SaveAnnotationEventHandler } from './../primitives/pdf-dictionary';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfString } from './../primitives/pdf-string';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfSolidBrush } from './../graphics/brushes/pdf-solid-brush';\nimport { PdfStandardFont } from './../graphics/fonts/pdf-standard-font';\nimport { PdfFontFamily } from './../graphics/fonts/enum';\nimport { PdfStringFormat } from './../graphics/fonts/pdf-string-format';\nimport { PdfTextAlignment } from './../graphics/enum';\n/**\n * `PdfAnnotation` class represents the base class for annotation objects.\n * @private\n */\nvar PdfAnnotation = /** @class */ (function () {\n function PdfAnnotation(arg1) {\n // Fields\n /**\n * Specifies the Internal variable to store fields of `PdfDictionaryProperties`.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * `Color` of the annotation\n * @private\n */\n this.pdfColor = new PdfColor(255, 255, 255);\n /**\n * `Bounds` of the annotation.\n * @private\n */\n this.rectangle = new RectangleF(0, 0, 0, 0);\n /**\n * Parent `page` of the annotation.\n * @private\n */\n this.pdfPage = null;\n /**\n * `Brush of the text` of the annotation.\n * @default new PdfSolidBrush(new PdfColor(0, 0, 0))\n * @private\n */\n this.textBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n /**\n * `Font of the text` of the annotation.\n * @default new PdfStandardFont(PdfFontFamily.TimesRoman, 10)\n * @private\n */\n this.textFont = new PdfStandardFont(PdfFontFamily.TimesRoman, 10);\n /**\n * `StringFormat of the text` of the annotation.\n * @default new PdfStringFormat(PdfTextAlignment.Left)\n * @private\n */\n this.format = new PdfStringFormat(PdfTextAlignment.Left);\n /**\n * `Text` of the annotation.\n * @private\n */\n this.content = '';\n /**\n * Internal variable to store `dictionary`.\n * @private\n */\n this.pdfDictionary = new PdfDictionary();\n /**\n * To specifying the `Inner color` with which to fill the annotation\n * @private\n */\n this.internalColor = new PdfColor();\n /**\n * `opacity or darkness` of the annotation.\n * @private\n * @default 1.0\n */\n this.darkness = 1.0;\n if (typeof arg1 === 'undefined') {\n this.initialize();\n }\n else {\n this.initialize();\n this.bounds = arg1;\n }\n }\n Object.defineProperty(PdfAnnotation.prototype, \"color\", {\n // Properties\n /**\n * `Color` of the annotation\n * @private\n */\n get: function () {\n return this.pdfColor;\n },\n set: function (value) {\n this.pdfColor = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"innerColor\", {\n /**\n * To specifying the `Inner color` with which to fill the annotation\n * @private\n */\n get: function () {\n return this.internalColor;\n },\n set: function (value) {\n this.internalColor = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"bounds\", {\n /**\n * `bounds` of the annotation.\n * @private\n */\n get: function () {\n return this.rectangle;\n },\n set: function (value) {\n this.rectangle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"page\", {\n /**\n * Parent `page` of the annotation.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"font\", {\n /**\n * To specifying the `Font of the text` in the annotation.\n * @private\n */\n get: function () {\n return this.textFont;\n },\n set: function (value) {\n this.textFont = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"stringFormat\", {\n /**\n * To specifying the `StringFormat of the text` in the annotation.\n * @private\n */\n get: function () {\n return this.format;\n },\n set: function (value) {\n this.format = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"brush\", {\n /**\n * To specifying the `Brush of the text` in the annotation.\n * @private\n */\n get: function () {\n return this.textBrush;\n },\n set: function (value) {\n this.textBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"text\", {\n /**\n * `Text` of the annotation.\n * @private\n */\n get: function () {\n return this.content;\n },\n set: function (value) {\n this.content = value;\n this.dictionary.items.setValue(this.dictionaryProperties.contents, new PdfString(this.content));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAnnotation.prototype, \"dictionary\", {\n /**\n * Internal variable to store `dictionary`.\n * @hidden\n */\n get: function () {\n return this.pdfDictionary;\n },\n set: function (value) {\n this.pdfDictionary = value;\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Initialize` the annotation event handler and specifies the type of the annotation.\n * @private\n */\n PdfAnnotation.prototype.initialize = function () {\n this.pdfDictionary.annotationBeginSave = new SaveAnnotationEventHandler(this);\n this.pdfDictionary.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.annot));\n };\n /**\n * Sets related `page` of the annotation.\n * @private\n */\n PdfAnnotation.prototype.setPage = function (page) {\n this.pdfPage = page;\n this.pdfDictionary.items.setValue(this.dictionaryProperties.p, new PdfReferenceHolder(this.pdfPage));\n };\n /**\n * Handles the `BeginSave` event of the Dictionary.\n * @private\n */\n PdfAnnotation.prototype.beginSave = function () {\n this.save();\n };\n /**\n * `Saves` an annotation.\n * @private\n */\n /* tslint:disable */\n PdfAnnotation.prototype.save = function () {\n var nativeRectangle = new RectangleF(this.rectangle.x, this.rectangle.y, this.rectangle.width, this.rectangle.height);\n var section = this.pdfPage.section;\n var initialHeight = nativeRectangle.height;\n var tempLoacation = section.pointToNativePdf(this.page, new PointF(nativeRectangle.x, nativeRectangle.y));\n nativeRectangle.x = tempLoacation.x;\n nativeRectangle.width = tempLoacation.x + nativeRectangle.width;\n nativeRectangle.y = (tempLoacation.y - this.page.document.pageSettings.margins.top);\n nativeRectangle.height = nativeRectangle.y - initialHeight;\n this.pdfDictionary.items.setValue(this.dictionaryProperties.rect, PdfArray.fromRectangle(nativeRectangle));\n this.dictionary.items.setValue(this.dictionaryProperties.ca, new PdfNumber(this.darkness));\n };\n Object.defineProperty(PdfAnnotation.prototype, \"element\", {\n /* tslint:enable */\n // IPdfWrapper Members\n /**\n * Gets the `element`.\n * @private\n */\n get: function () {\n return this.pdfDictionary;\n },\n enumerable: true,\n configurable: true\n });\n return PdfAnnotation;\n}());\nexport { PdfAnnotation };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfAnnotation } from './annotation';\nimport { PdfName } from './../primitives/pdf-name';\n/**\n * `PdfLinkAnnotation` class represents the ink annotation class.\n * @private\n */\nvar PdfLinkAnnotation = /** @class */ (function (_super) {\n __extends(PdfLinkAnnotation, _super);\n function PdfLinkAnnotation(rectangle) {\n var _this = this;\n if (typeof rectangle === 'undefined') {\n _this = _super.call(this) || this;\n }\n else {\n _this = _super.call(this, rectangle) || this;\n }\n return _this;\n }\n // Implementation\n /**\n * `Initializes` annotation object.\n * @private\n */\n PdfLinkAnnotation.prototype.initialize = function () {\n _super.prototype.initialize.call(this);\n this.dictionary.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.link));\n };\n return PdfLinkAnnotation;\n}(PdfAnnotation));\nexport { PdfLinkAnnotation };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfLinkAnnotation } from './link-annotation';\n/**\n * Represents base class for `link annotations` with associated action.\n * @private\n */\nvar PdfActionLinkAnnotation = /** @class */ (function (_super) {\n __extends(PdfActionLinkAnnotation, _super);\n // Constructors\n /**\n * Specifies the constructor for `ActionLinkAnnotation`.\n * @private\n */\n function PdfActionLinkAnnotation(rectangle) {\n var _this = _super.call(this, rectangle) || this;\n // Fields\n /**\n * Internal variable to store annotation's `action`.\n * @default null\n * @private\n */\n _this.pdfAction = null;\n return _this;\n }\n //Public method\n /**\n * get and set the `action`.\n * @hidden\n */\n PdfActionLinkAnnotation.prototype.getSetAction = function (value) {\n if (typeof value === 'undefined') {\n return this.pdfAction;\n }\n else {\n this.pdfAction = value;\n }\n };\n return PdfActionLinkAnnotation;\n}(PdfLinkAnnotation));\nexport { PdfActionLinkAnnotation };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfLinkAnnotation } from './link-annotation';\n/**\n * `PdfDocumentLinkAnnotation` class represents an annotation object with holds link on another location within a document.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create new pages\n * let page1 : PdfPage = document.pages.add();\n * let page2 : PdfPage = document.pages.add();\n * // create a new rectangle\n * let bounds : RectangleF = new RectangleF({x : 10, y : 200}, {width : 300, height : 25});\n * //\n * // create a new document link annotation\n * let documentLinkAnnotation : PdfDocumentLinkAnnotation = new PdfDocumentLinkAnnotation(bounds);\n * // set the annotation text\n * documentLinkAnnotation.text = 'Document link annotation';\n * // set the destination\n * documentLinkAnnotation.destination = new PdfDestination(page2);\n * // set the documentlink annotation location\n * documentLinkAnnotation.destination.location = new PointF(10, 0);\n * // add this annotation to a new page\n * page1.annotations.add(documentLinkAnnotation);\n * //\n * // save the document to disk\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfDocumentLinkAnnotation = /** @class */ (function (_super) {\n __extends(PdfDocumentLinkAnnotation, _super);\n function PdfDocumentLinkAnnotation(rectangle, destination) {\n var _this = _super.call(this, rectangle) || this;\n // Fields\n /**\n * `Destination` of the annotation.\n * @default null\n * @private\n */\n _this.pdfDestination = null;\n if (typeof destination !== 'undefined') {\n _this.destination = destination;\n }\n return _this;\n }\n Object.defineProperty(PdfDocumentLinkAnnotation.prototype, \"destination\", {\n // Properties\n /**\n * Gets or sets the `destination` of the annotation.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create new pages\n * let page1 : PdfPage = document.pages.add();\n * let page2 : PdfPage = document.pages.add();\n * // create a new rectangle\n * let bounds : RectangleF = new RectangleF({x : 10, y : 200}, {width : 300, height : 25});\n * //\n * // create a new document link annotation\n * let documentLinkAnnotation : PdfDocumentLinkAnnotation = new PdfDocumentLinkAnnotation(bounds);\n * // set the annotation text\n * documentLinkAnnotation.text = 'Document link annotation';\n * // set the destination\n * documentLinkAnnotation.destination = new PdfDestination(page2);\n * // set the documentlink annotation location\n * documentLinkAnnotation.destination.location = new PointF(10, 0);\n * // add this annotation to a new page\n * page1.annotations.add(documentLinkAnnotation);\n * //\n * // save the document to disk\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @default null\n */\n get: function () {\n return this.pdfDestination;\n },\n set: function (value) {\n // if (this.pdfDestination !== value) {\n this.pdfDestination = value;\n // }\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Saves` annotation object.\n * @private\n */\n PdfDocumentLinkAnnotation.prototype.save = function () {\n _super.prototype.save.call(this);\n if (this.pdfDestination != null) {\n this.dictionary.items.setValue(this.dictionaryProperties.dest, this.pdfDestination.element);\n }\n };\n /**\n * `Clone` the document link annotation.\n * @private\n */\n PdfDocumentLinkAnnotation.prototype.clone = function () {\n var annot = new PdfDocumentLinkAnnotation(this.bounds, this.destination);\n annot.color = this.color;\n annot.brush = this.brush;\n annot.destination = this.destination;\n annot.font = this.font;\n return annot;\n };\n return PdfDocumentLinkAnnotation;\n}(PdfLinkAnnotation));\nexport { PdfDocumentLinkAnnotation };\n","/**\n * ElementLayouter.ts class for EJ2-PDF\n */\nimport { RectangleF } from './../../../drawing/pdf-drawing';\nimport { PdfLayoutType, PdfLayoutBreakType } from './../enum';\n/**\n * Base class for `elements lay outing`.\n * @private\n */\nvar ElementLayouter = /** @class */ (function () {\n // Constructor\n /**\n * Initializes a new instance of the `ElementLayouter` class.\n * @private\n */\n function ElementLayouter(element) {\n this.layoutElement = element;\n }\n Object.defineProperty(ElementLayouter.prototype, \"elements\", {\n // Properties\n /**\n * Gets the `element`.\n * @private\n */\n get: function () {\n return this.layoutElement;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the `element`.\n * @private\n */\n ElementLayouter.prototype.getElement = function () {\n return this.layoutElement;\n };\n ElementLayouter.prototype.layout = function (param, isBoundsChanged) {\n if (typeof isBoundsChanged === 'boolean' && isBoundsChanged === true) {\n return this.layoutInternal(param, true);\n }\n else {\n return this.layoutInternal(param);\n }\n };\n /**\n * Returns the `next page`.\n * @private\n */\n ElementLayouter.prototype.getNextPage = function (currentPage) {\n var section = currentPage.section;\n var nextPage = section.add();\n return nextPage;\n };\n return ElementLayouter;\n}());\nexport { ElementLayouter };\nvar PdfLayoutFormat = /** @class */ (function () {\n function PdfLayoutFormat(baseFormat) {\n if (typeof baseFormat === 'undefined') {\n //\n }\n else {\n this.break = baseFormat.break;\n this.layout = baseFormat.layout;\n this.paginateBounds = baseFormat.paginateBounds;\n this.boundsSet = baseFormat.usePaginateBounds;\n }\n }\n Object.defineProperty(PdfLayoutFormat.prototype, \"layout\", {\n // Properties\n /**\n * Gets or sets `layout` type of the element.\n * @private\n */\n get: function () {\n if (typeof this.layoutType === 'undefined' || this.layoutType == null) {\n this.layoutType = PdfLayoutType.Paginate;\n }\n return this.layoutType;\n },\n set: function (value) {\n this.layoutType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutFormat.prototype, \"break\", {\n /**\n * Gets or sets `break` type of the element.\n * @private\n */\n get: function () {\n if (typeof this.breakType === 'undefined' || this.boundsSet == null) {\n this.breakType = PdfLayoutBreakType.FitPage;\n }\n return this.breakType;\n },\n set: function (value) {\n this.breakType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutFormat.prototype, \"paginateBounds\", {\n /**\n * Gets or sets the `bounds` on the next page.\n * @private\n */\n get: function () {\n if (typeof this.layoutPaginateBounds === 'undefined' && this.layoutPaginateBounds == null) {\n this.layoutPaginateBounds = new RectangleF(0, 0, 0, 0);\n }\n return this.layoutPaginateBounds;\n },\n set: function (value) {\n this.layoutPaginateBounds = value;\n this.boundsSet = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutFormat.prototype, \"usePaginateBounds\", {\n /**\n * Gets a value indicating whether [`use paginate bounds`].\n * @private\n */\n get: function () {\n if (typeof this.boundsSet === 'undefined' || this.boundsSet == null) {\n this.boundsSet = false;\n }\n return this.boundsSet;\n },\n enumerable: true,\n configurable: true\n });\n return PdfLayoutFormat;\n}());\nexport { PdfLayoutFormat };\nvar PdfLayoutParams = /** @class */ (function () {\n function PdfLayoutParams() {\n }\n Object.defineProperty(PdfLayoutParams.prototype, \"page\", {\n // Properties\n /**\n * Gets or sets the layout `page` for the element.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n set: function (value) {\n this.pdfPage = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutParams.prototype, \"bounds\", {\n /**\n * Gets or sets layout `bounds` for the element.\n * @private\n */\n get: function () {\n return new RectangleF(this.layoutBounds.x, this.layoutBounds.y, this.layoutBounds.width, this.layoutBounds.height);\n },\n set: function (value) {\n this.layoutBounds = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutParams.prototype, \"format\", {\n /**\n * Gets or sets `layout settings` for the element.\n * @private\n */\n get: function () {\n return this.layoutFormat;\n },\n set: function (value) {\n this.layoutFormat = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfLayoutParams;\n}());\nexport { PdfLayoutParams };\nvar PdfLayoutResult = /** @class */ (function () {\n // Constructors\n /**\n * Initializes the new instance of `PdfLayoutResult` class.\n * @private\n */\n function PdfLayoutResult(page, bounds) {\n this.pdfPage = page;\n this.layoutBounds = bounds;\n }\n Object.defineProperty(PdfLayoutResult.prototype, \"page\", {\n // Properties\n /**\n * Gets the last `page` where the element was drawn.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfLayoutResult.prototype, \"bounds\", {\n /**\n * Gets the `bounds` of the element on the last page where it was drawn.\n * @private\n */\n get: function () {\n return this.layoutBounds;\n },\n enumerable: true,\n configurable: true\n });\n return PdfLayoutResult;\n}());\nexport { PdfLayoutResult };\n","/**\n * public Enum for `PdfDestinationMode`.\n * @private\n */\nexport var PdfDestinationMode;\n(function (PdfDestinationMode) {\n /**\n * Specifies the type of `Location`.\n * @private\n */\n PdfDestinationMode[PdfDestinationMode[\"Location\"] = 0] = \"Location\";\n /**\n * Specifies the type of `FitToPage`.\n * @private\n */\n PdfDestinationMode[PdfDestinationMode[\"FitToPage\"] = 1] = \"FitToPage\";\n /**\n * Specifies the type of `FitR`.\n * @private\n */\n PdfDestinationMode[PdfDestinationMode[\"FitR\"] = 2] = \"FitR\";\n})(PdfDestinationMode || (PdfDestinationMode = {}));\n","import { RectangleF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfLayoutParams, PdfLayoutFormat } from './base/element-layouter';\n/**\n * `PdfLayoutElement` class represents the base class for all elements that can be layout on the pages.\n * @private\n */\nvar PdfLayoutElement = /** @class */ (function () {\n function PdfLayoutElement() {\n }\n PdfLayoutElement.prototype.drawHelper = function (arg2, arg3, arg4, arg5) {\n if (arg3 instanceof PointF && typeof arg3.width === 'undefined' && typeof arg3 === 'undefined') {\n return this.drawHelper(arg2, arg3.x, arg3.y);\n }\n else if (typeof arg3 === 'number' && typeof arg4 === 'number' && typeof arg5 === 'undefined') {\n return this.drawHelper(arg2, arg3, arg4, null);\n }\n else if (arg3 instanceof RectangleF && typeof arg3.width !== 'undefined' && typeof arg4 === 'undefined') {\n return this.drawHelper(arg2, arg3, null);\n }\n else if (arg3 instanceof PointF && typeof arg3.width === 'undefined' && arg4 instanceof PdfLayoutFormat) {\n return this.drawHelper(arg2, arg3.x, arg3.y, arg4);\n }\n else if (typeof arg3 === 'number' && typeof arg4 === 'number' && (arg5 instanceof PdfLayoutFormat || arg5 == null)) {\n var width = (arg2.graphics.clientSize.width - arg3);\n var layoutRectangle = new RectangleF(arg3, arg4, width, 0);\n return this.drawHelper(arg2, layoutRectangle, arg5);\n }\n else if (arg3 instanceof RectangleF && typeof arg3.width !== 'undefined' && typeof arg4 === 'boolean') {\n this.bEmbedFonts = arg4;\n return this.drawHelper(arg2, arg3, null);\n }\n else {\n var param = new PdfLayoutParams();\n var temparg3 = arg3;\n var temparg4 = arg4;\n param.page = arg2;\n param.bounds = temparg3;\n param.format = (temparg4 != null) ? temparg4 : new PdfLayoutFormat();\n var result = this.layout(param);\n return result;\n }\n };\n return PdfLayoutElement;\n}());\nexport { PdfLayoutElement };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * TextLayouter.ts class for EJ2-PDF\n */\nimport { ElementLayouter, PdfLayoutResult } from './element-layouter';\nimport { RectangleF, SizeF } from './../../../drawing/pdf-drawing';\nimport { PdfStringLayouter } from './../../fonts/string-layouter';\nimport { PdfLayoutBreakType } from './../../figures/enum';\nimport { PdfColor } from './../../pdf-color';\nimport { PdfTextWebLink } from './../../../annotations/pdf-text-web-link';\n/**\n * Class that `layouts the text`.\n * @private\n */\nvar TextLayouter = /** @class */ (function (_super) {\n __extends(TextLayouter, _super);\n // Constructors\n /**\n * Initializes a new instance of the `TextLayouter` class.\n * @private\n */\n function TextLayouter(element) {\n return _super.call(this, element) || this;\n }\n Object.defineProperty(TextLayouter.prototype, \"element\", {\n /**\n * Gets the layout `element`.\n * @private\n */\n get: function () {\n return _super.prototype.getElement.call(this);\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Layouts` the element.\n * @private\n */\n TextLayouter.prototype.layoutInternal = function (param) {\n /* tslint:disable */\n this.format = (this.element.stringFormat != null && typeof this.element.stringFormat !== 'undefined') ? this.element.stringFormat : null;\n var currentPage = param.page;\n var currentBounds = param.bounds;\n var text = this.element.value;\n var result = null;\n var pageResult = new TextPageLayoutResult();\n pageResult.page = currentPage;\n pageResult.remainder = text;\n for (;;) {\n pageResult = this.layoutOnPage(text, currentPage, currentBounds, param);\n result = this.getLayoutResult(pageResult);\n break;\n }\n /* tslint:enable */\n return result;\n };\n /**\n * Raises `PageLayout` event if needed.\n * @private\n */\n TextLayouter.prototype.getLayoutResult = function (pageResult) {\n var result = new PdfTextLayoutResult(pageResult.page, pageResult.bounds, pageResult.remainder, pageResult.lastLineBounds);\n return result;\n };\n /* tslint:disable */\n /**\n * `Layouts` the text on the page.\n * @private\n */\n TextLayouter.prototype.layoutOnPage = function (text, currentPage, currentBounds, param) {\n var result = new TextPageLayoutResult();\n result.remainder = text;\n result.page = currentPage;\n currentBounds = this.checkCorrectBounds(currentPage, currentBounds);\n var layouter = new PdfStringLayouter();\n var stringResult = layouter.layout(text, this.element.font, this.format, currentBounds, currentPage.getClientSize().height, false, new SizeF(0, 0));\n var textFinished = (stringResult.remainder == null);\n var doesntFit = (param.format.break === PdfLayoutBreakType.FitElement);\n var canDraw = !(doesntFit || stringResult.empty);\n // Draw the text.\n var graphics = currentPage.graphics;\n var brush = this.element.getBrush();\n if (this.element instanceof PdfTextWebLink) {\n brush.color = new PdfColor(0, 0, 255);\n }\n graphics.drawStringLayoutResult(stringResult, this.element.font, this.element.pen, brush, currentBounds, this.format);\n var lineInfo = stringResult.lines[stringResult.lineCount - 1];\n result.lastLineBounds = graphics.getLineBounds(stringResult.lineCount - 1, stringResult, this.element.font, currentBounds, this.format);\n result.bounds = this.getTextPageBounds(currentPage, currentBounds, stringResult);\n result.remainder = stringResult.remainder;\n result.end = (textFinished);\n return result;\n };\n /* tslint:enable */\n /**\n * `Corrects current bounds` on the page.\n * @private\n */\n TextLayouter.prototype.checkCorrectBounds = function (currentPage, currentBounds) {\n var pageSize = currentPage.graphics.clientSize;\n currentBounds.height = (currentBounds.height > 0) ? currentBounds.height : pageSize.height - currentBounds.y;\n return currentBounds;\n };\n /**\n * Returns a `rectangle` where the text was printed on the page.\n * @private\n */\n /* tslint:disable */\n TextLayouter.prototype.getTextPageBounds = function (currentPage, currentBounds, stringResult) {\n var textSize = stringResult.actualSize;\n var x = currentBounds.x;\n var y = currentBounds.y;\n var width = (currentBounds.width > 0) ? currentBounds.width : textSize.width;\n var height = textSize.height;\n var shiftedRect = currentPage.graphics.checkCorrectLayoutRectangle(textSize, currentBounds.x, currentBounds.y, this.format);\n // if (currentBounds.width <= 0) {\n x = shiftedRect.x;\n // }\n var verticalShift = currentPage.graphics.getTextVerticalAlignShift(textSize.height, currentBounds.height, this.format);\n y += verticalShift;\n var bounds = new RectangleF(x, y, width, height);\n return bounds;\n };\n return TextLayouter;\n}(ElementLayouter));\nexport { TextLayouter };\nvar TextPageLayoutResult = /** @class */ (function () {\n function TextPageLayoutResult() {\n }\n return TextPageLayoutResult;\n}());\nexport { TextPageLayoutResult };\nvar PdfTextLayoutResult = /** @class */ (function (_super) {\n __extends(PdfTextLayoutResult, _super);\n // Constructors\n /**\n * Initializes the new instance of `PdfTextLayoutResult` class.\n * @private\n */\n function PdfTextLayoutResult(page, bounds, remainder, lastLineBounds) {\n var _this = _super.call(this, page, bounds) || this;\n _this.remainderText = remainder;\n _this.lastLineTextBounds = lastLineBounds;\n return _this;\n }\n Object.defineProperty(PdfTextLayoutResult.prototype, \"remainder\", {\n // Properties\n /**\n * Gets a value that contains the `text` that was not printed.\n * @private\n */\n get: function () {\n return this.remainderText;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextLayoutResult.prototype, \"lastLineBounds\", {\n /**\n * Gets a value that indicates the `bounds` of the last line that was printed on the page.\n * @private\n */\n get: function () {\n return this.lastLineTextBounds;\n },\n enumerable: true,\n configurable: true\n });\n return PdfTextLayoutResult;\n}(PdfLayoutResult));\nexport { PdfTextLayoutResult };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfTextElement.ts class for EJ2-PDF\n */\nimport { PdfLayoutElement } from './../figures/layout-element';\nimport { PdfBrush } from './../brushes/pdf-brush';\nimport { PdfFont } from './../fonts/pdf-font';\nimport { PdfStandardFont } from './../fonts/pdf-standard-font';\nimport { PdfPen } from './../pdf-pen';\nimport { PdfLayoutParams } from './../figures/base/element-layouter';\nimport { TextLayouter } from './base/text-layouter';\nimport { PdfSolidBrush } from './../brushes/pdf-solid-brush';\nimport { PdfColor } from './../pdf-color';\nimport { RectangleF, SizeF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfLayoutFormat } from './base/element-layouter';\nimport { PdfStringLayouter } from './../fonts/string-layouter';\nimport { PdfTextAlignment } from './../enum';\n/**\n * `PdfTextElement` class represents the text area with the ability to span several pages\n * and inherited from the 'PdfLayoutElement' class.\n * @private\n */\nvar PdfTextElement = /** @class */ (function (_super) {\n __extends(PdfTextElement, _super);\n function PdfTextElement(arg1, arg2, arg3, arg4, arg5) {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * `Text` data.\n * @private\n */\n _this.content = '';\n /**\n * `Value` of text data.\n * @private\n */\n _this.elementValue = '';\n /**\n * indicate whether the drawText with PointF overload is called or not.\n * @default false\n * @private\n */\n _this.hasPointOverload = false;\n /**\n * indicate whether the PdfGridCell value is `PdfTextElement`\n * @default false\n * @private\n */\n _this.isPdfTextElement = false;\n if (typeof arg1 === 'undefined') {\n //\n }\n else if (typeof arg1 === 'string' && typeof arg2 === 'undefined') {\n _this = _super.call(this) || this;\n _this.content = arg1;\n _this.elementValue = arg1;\n }\n else if (typeof arg1 === 'string' && arg2 instanceof PdfFont && typeof arg3 === 'undefined') {\n _this = _super.call(this) || this;\n _this.content = arg1;\n _this.elementValue = arg1;\n _this.pdfFont = arg2;\n }\n else if (typeof arg1 === 'string' && arg2 instanceof PdfFont && arg3 instanceof PdfPen && typeof arg4 === 'undefined') {\n _this = _super.call(this) || this;\n _this.content = arg1;\n _this.elementValue = arg1;\n _this.pdfFont = arg2;\n _this.pdfPen = arg3;\n }\n else if (typeof arg1 === 'string' && arg2 instanceof PdfFont && arg3 instanceof PdfBrush && typeof arg4 === 'undefined') {\n _this = _super.call(this) || this;\n _this.content = arg1;\n _this.elementValue = arg1;\n _this.pdfFont = arg2;\n _this.pdfBrush = arg3;\n }\n else {\n _this = _super.call(this) || this;\n _this.content = arg1;\n _this.elementValue = arg1;\n _this.pdfFont = arg2;\n _this.pdfPen = arg3;\n _this.pdfBrush = arg4;\n _this.format = arg5;\n }\n return _this;\n }\n Object.defineProperty(PdfTextElement.prototype, \"text\", {\n // Properties\n /**\n * Gets or sets a value indicating the `text` that should be printed.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // create the font\n * let font : PdfFont = new PdfStandardFont(PdfFontFamily.Helvetica, 12);\n * // create the Text Web Link\n * let textLink : PdfTextWebLink = new PdfTextWebLink();\n * // set the hyperlink\n * textLink.url = 'http://www.google.com';\n * //\n * // set the link text\n * textLink.text = 'Google';\n * //\n * // set the font\n * textLink.font = font;\n * // draw the hyperlink in PDF page\n * textLink.draw(page1, new PointF(10, 40));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.content;\n },\n set: function (value) {\n this.elementValue = value;\n this.content = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextElement.prototype, \"value\", {\n //get value\n /**\n * Gets or sets a `value` indicating the text that should be printed.\n * @private\n */\n get: function () {\n return this.elementValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextElement.prototype, \"pen\", {\n //get pen\n /**\n * Gets or sets a `PdfPen` that determines the color, width, and style of the text\n * @private\n */\n get: function () {\n return this.pdfPen;\n },\n //Set pen value\n set: function (value) {\n this.pdfPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextElement.prototype, \"brush\", {\n //get brush\n /**\n * Gets or sets the `PdfBrush` that will be used to draw the text with color and texture.\n * @private\n */\n get: function () {\n return this.pdfBrush;\n },\n //Set brush value\n set: function (value) {\n this.pdfBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextElement.prototype, \"font\", {\n //get font\n /**\n * Gets or sets a `PdfFont` that defines the text format.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // create the font\n * let font : PdfFont = new PdfStandardFont(PdfFontFamily.Helvetica, 12);\n * // create the Text Web Link\n * let textLink : PdfTextWebLink = new PdfTextWebLink();\n * // set the hyperlink\n * textLink.url = 'http://www.google.com';\n * // set the link text\n * textLink.text = 'Google';\n * //\n * // set the font\n * textLink.font = font;\n * //\n * // draw the hyperlink in PDF page\n * textLink.draw(page1, new PointF(10, 40));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.pdfFont;\n },\n set: function (value) {\n this.pdfFont = value;\n if (this.pdfFont instanceof PdfStandardFont && this.content != null) {\n this.elementValue = PdfStandardFont.convert(this.content);\n }\n else {\n this.elementValue = this.content;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTextElement.prototype, \"stringFormat\", {\n /**\n * Gets or sets the `PdfStringFormat` that will be used to set the string format\n * @private\n */\n get: function () {\n return this.format;\n },\n set: function (value) {\n this.format = value;\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * Gets a `brush` for drawing.\n * @private\n */\n PdfTextElement.prototype.getBrush = function () {\n return (this.pdfBrush == null || typeof this.pdfBrush === 'undefined') ? new PdfSolidBrush(new PdfColor(0, 0, 0)) : this.pdfBrush;\n };\n // /**\n // * `Draws` an element on the Graphics.\n // * @private\n // */\n // public drawInternal(graphics : PdfGraphics) : void {\n // graphics.drawString(this.elementValue, this.pdfFont, this.pdfPen, this.getBrush(), 0, 0, this.stringFormat);\n // }\n /**\n * `Layouts` the element.\n * @private\n */\n PdfTextElement.prototype.layout = function (param) {\n var layouter = new TextLayouter(this);\n var result = layouter.layout(param);\n return result;\n };\n PdfTextElement.prototype.drawText = function (arg2, arg3, arg4, arg5) {\n if (arg3 instanceof PointF && typeof arg3.width === 'undefined' && typeof arg4 === 'undefined') {\n this.hasPointOverload = true;\n return this.drawText(arg2, arg3.x, arg3.y);\n }\n else if (typeof arg3 === 'number' && typeof arg4 === 'number' && typeof arg5 === 'undefined') {\n this.hasPointOverload = true;\n return this.drawText(arg2, arg3, arg4, null);\n }\n else if (arg3 instanceof RectangleF && typeof arg3.width !== 'undefined' && typeof arg4 === 'undefined') {\n return this.drawText(arg2, arg3, null);\n }\n else if (arg3 instanceof PointF && typeof arg3.width === 'undefined' && arg4 instanceof PdfLayoutFormat) {\n this.hasPointOverload = true;\n return this.drawText(arg2, arg3.x, arg3.y, arg4);\n }\n else if (typeof arg3 === 'number' && typeof arg4 === 'number' && (arg5 instanceof PdfLayoutFormat || arg5 == null)) {\n this.hasPointOverload = true;\n var width = (arg2.graphics.clientSize.width - arg3);\n var layoutRectangle = new RectangleF(arg3, arg4, width, 0);\n return this.drawText(arg2, layoutRectangle, arg5);\n }\n else if (arg3 instanceof RectangleF && typeof arg3.width !== 'undefined' && typeof arg4 === 'boolean') {\n return this.drawText(arg2, arg3, null);\n }\n else {\n var layout = new PdfStringLayouter();\n if (this.hasPointOverload) {\n var stringLayoutResult = layout.layout(this.value, this.font, this.stringFormat, new SizeF((arg2.graphics.clientSize.width - arg3.x), 0), true, arg2.graphics.clientSize);\n var layoutResult = void 0;\n var param = new PdfLayoutParams();\n var temparg3 = arg3;\n var temparg4 = arg4;\n param.page = arg2;\n var previousPage = arg2;\n param.bounds = temparg3;\n param.format = (temparg4 != null) ? temparg4 : new PdfLayoutFormat();\n if (stringLayoutResult.lines.length > 1) {\n this.text = stringLayoutResult.layoutLines[0].text;\n if (param.bounds.y <= param.page.graphics.clientSize.height) {\n var previousPosition = new PointF(param.bounds.x, param.bounds.y);\n layoutResult = this.layout(param);\n var bounds = new RectangleF(0, layoutResult.bounds.y + stringLayoutResult.lineHeight, arg2.graphics.clientSize.width, stringLayoutResult.lineHeight);\n var isPaginate = false;\n for (var i = 1; i < stringLayoutResult.lines.length; i++) {\n param.page = layoutResult.page;\n param.bounds = new RectangleF(new PointF(bounds.x, bounds.y), new SizeF(bounds.width, bounds.height));\n this.text = stringLayoutResult.layoutLines[i].text;\n if (bounds.y + stringLayoutResult.lineHeight > layoutResult.page.graphics.clientSize.height) {\n isPaginate = true;\n param.page = param.page.graphics.getNextPage();\n if (previousPosition.y > (layoutResult.page.graphics.clientSize.height - layoutResult.bounds.height)) {\n bounds = new RectangleF(0, layoutResult.bounds.height, layoutResult.page.graphics.clientSize.width, stringLayoutResult.lineHeight);\n }\n else {\n bounds = new RectangleF(0, 0, layoutResult.page.graphics.clientSize.width, stringLayoutResult.lineHeight);\n }\n param.bounds = bounds;\n }\n layoutResult = this.layout(param);\n if (i !== (stringLayoutResult.lines.length - 1)) {\n bounds = new RectangleF(0, layoutResult.bounds.y + stringLayoutResult.lineHeight, layoutResult.page.graphics.clientSize.width, stringLayoutResult.lineHeight);\n }\n else {\n var lineWidth = this.font.measureString(this.text, this.format).width;\n layoutResult = this.calculateResultBounds(layoutResult, lineWidth, layoutResult.page.graphics.clientSize.width, 0);\n }\n }\n }\n return layoutResult;\n }\n else {\n var lineSize = this.font.measureString(this.text, this.format);\n if (param.bounds.y <= param.page.graphics.clientSize.height) {\n layoutResult = this.layout(param);\n layoutResult = this.calculateResultBounds(layoutResult, lineSize.width, layoutResult.page.graphics.clientSize.width, 0);\n }\n return layoutResult;\n }\n }\n else {\n var layoutResult = layout.layout(this.value, this.font, this.stringFormat, new SizeF(arg3.width, 0), false, arg2.graphics.clientSize);\n var result = void 0;\n var param = new PdfLayoutParams();\n var temparg3 = arg3;\n var temparg4 = arg4;\n param.page = arg2;\n param.bounds = temparg3;\n param.format = (temparg4 != null) ? temparg4 : new PdfLayoutFormat();\n if (layoutResult.lines.length > 1) {\n this.text = layoutResult.layoutLines[0].text;\n if (param.bounds.y <= param.page.graphics.clientSize.height) {\n var previousPosition = new PointF(param.bounds.x, param.bounds.y);\n result = this.layout(param);\n var bounds = new RectangleF(temparg3.x, result.bounds.y + layoutResult.lineHeight, temparg3.width, layoutResult.lineHeight);\n var isPaginate = false;\n for (var i = 1; i < layoutResult.lines.length; i++) {\n param.page = result.page;\n param.bounds = new RectangleF(bounds.x, bounds.y, bounds.width, bounds.height);\n this.text = layoutResult.layoutLines[i].text;\n if (bounds.y + layoutResult.lineHeight > result.page.graphics.clientSize.height) {\n isPaginate = true;\n param.page = param.page.graphics.getNextPage();\n if (previousPosition.y > (result.page.graphics.clientSize.height - result.bounds.height)) {\n bounds = new RectangleF(temparg3.x, layoutResult.lineHeight, temparg3.width, layoutResult.lineHeight);\n }\n else {\n bounds = new RectangleF(temparg3.x, 0, temparg3.width, layoutResult.lineHeight);\n }\n param.bounds = bounds;\n }\n result = this.layout(param);\n if (i !== (layoutResult.lines.length - 1)) {\n bounds = new RectangleF(temparg3.x, result.bounds.y + layoutResult.lineHeight, temparg3.width, layoutResult.lineHeight);\n }\n else {\n var lineWidth = this.font.measureString(this.text, this.format).width;\n result = this.calculateResultBounds(result, lineWidth, temparg3.width, temparg3.x);\n }\n }\n }\n return result;\n }\n else {\n var lineSize = this.font.measureString(this.text, this.format);\n if (param.bounds.y <= param.page.graphics.clientSize.height) {\n result = this.layout(param);\n result = this.calculateResultBounds(result, lineSize.width, temparg3.width, temparg3.x);\n }\n return result;\n }\n }\n }\n };\n PdfTextElement.prototype.calculateResultBounds = function (result, lineWidth, maximumWidth, startPosition) {\n var shift = 0;\n if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Center) {\n result.bounds.x = startPosition + (maximumWidth - lineWidth) / 2;\n result.bounds.width = lineWidth;\n }\n else if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Right) {\n result.bounds.x = startPosition + (maximumWidth - lineWidth);\n result.bounds.width = lineWidth;\n }\n else if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Justify) {\n result.bounds.x = startPosition;\n result.bounds.width = maximumWidth;\n }\n else {\n result.bounds.width = startPosition;\n result.bounds.width = lineWidth;\n }\n return result;\n };\n return PdfTextElement;\n}(PdfLayoutElement));\nexport { PdfTextElement };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfActionLinkAnnotation } from './action-link-annotation';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfUriAction } from './../actions/uri-action';\n/**\n * `PdfUriAnnotation` class represents the Uri annotation.\n * @private\n */\nvar PdfUriAnnotation = /** @class */ (function (_super) {\n __extends(PdfUriAnnotation, _super);\n function PdfUriAnnotation(rectangle, uri) {\n var _this = _super.call(this, rectangle) || this;\n if (typeof uri !== 'undefined') {\n _this.uri = uri;\n }\n return _this;\n }\n Object.defineProperty(PdfUriAnnotation.prototype, \"uriAction\", {\n /**\n * Get `action` of the annotation.\n * @private\n */\n get: function () {\n if (typeof this.pdfUriAction === 'undefined') {\n this.pdfUriAction = new PdfUriAction();\n }\n return this.pdfUriAction;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfUriAnnotation.prototype, \"uri\", {\n // Properties\n /**\n * Gets or sets the `Uri` address.\n * @private\n */\n get: function () {\n return this.uriAction.uri;\n },\n set: function (value) {\n if (this.uriAction.uri !== value) {\n this.uriAction.uri = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfUriAnnotation.prototype, \"action\", {\n /**\n * Gets or sets the `action`.\n * @private\n */\n get: function () {\n return this.getSetAction();\n },\n set: function (value) {\n this.getSetAction(value);\n this.uriAction.next = value;\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Initializes` annotation object.\n * @private\n */\n PdfUriAnnotation.prototype.initialize = function () {\n _super.prototype.initialize.call(this);\n this.dictionary.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.link));\n var tempPrimitive = this.uriAction.element;\n this.dictionary.items.setValue(this.dictionaryProperties.a, this.uriAction.element);\n };\n return PdfUriAnnotation;\n}(PdfActionLinkAnnotation));\nexport { PdfUriAnnotation };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfPage } from './../pages/pdf-page';\nimport { PointF, RectangleF, SizeF } from './../drawing/pdf-drawing';\nimport { PdfTextElement } from './../graphics/figures/text-element';\nimport { PdfUriAnnotation } from './uri-annotation';\nimport { PdfStringLayouter } from './../graphics/fonts/string-layouter';\nimport { PdfFontStyle } from './../graphics/fonts/enum';\nimport { PdfTextAlignment } from './../graphics/enum';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfNumber } from './../primitives/pdf-number';\n/**\n * `PdfTextWebLink` class represents the class for text web link annotation.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // create the font\n * let font : PdfFont = new PdfStandardFont(PdfFontFamily.Helvetica, 12);\n * //\n * // create the Text Web Link\n * let textLink : PdfTextWebLink = new PdfTextWebLink();\n * // set the hyperlink\n * textLink.url = 'http://www.google.com';\n * // set the link text\n * textLink.text = 'Google';\n * // set the font\n * textLink.font = font;\n * // draw the hyperlink in PDF page\n * textLink.draw(page1, new PointF(10, 40));\n * //\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfTextWebLink = /** @class */ (function (_super) {\n __extends(PdfTextWebLink, _super);\n // Constructors\n /**\n * Initializes a new instance of the `PdfTextWebLink` class.\n * @private\n */\n function PdfTextWebLink() {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Internal variable to store `Url`.\n * @default ''\n * @private\n */\n _this.uniformResourceLocator = '';\n /**\n * Internal variable to store `Uri Annotation` object.\n * @default null\n * @private\n */\n _this.uriAnnotation = null;\n /**\n * Checks whether the drawTextWebLink method with `PointF` overload is called or not.\n * If it set as true, then the start position of each lines excluding firest line is changed as (0, Y).\n * @private\n * @hidden\n */\n _this.recalculateBounds = false;\n _this.defaultBorder = new PdfArray();\n for (var i = 0; i < 3; i++) {\n _this.defaultBorder.add(new PdfNumber(0));\n }\n return _this;\n }\n Object.defineProperty(PdfTextWebLink.prototype, \"url\", {\n // Properties\n /**\n * Gets or sets the `Uri address`.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // create the font\n * let font : PdfFont = new PdfStandardFont(PdfFontFamily.Helvetica, 12);\n * // create the Text Web Link\n * let textLink : PdfTextWebLink = new PdfTextWebLink();\n * //\n * // set the hyperlink\n * textLink.url = 'http://www.google.com';\n * //\n * // set the link text\n * textLink.text = 'Google';\n * // set the font\n * textLink.font = font;\n * // draw the hyperlink in PDF page\n * textLink.draw(page1, new PointF(10, 40));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.uniformResourceLocator;\n },\n set: function (value) {\n if (value.length === 0) {\n throw new Error('ArgumentException : Url - string can not be empty');\n }\n this.uniformResourceLocator = value;\n },\n enumerable: true,\n configurable: true\n });\n PdfTextWebLink.prototype.draw = function (arg1, arg2) {\n if (arg1 instanceof PdfPage) {\n var layout = new PdfStringLayouter();\n var previousFontStyle = this.font.style;\n if (arg2 instanceof PointF) {\n this.recalculateBounds = true;\n this.font.style = PdfFontStyle.Underline;\n var layoutResult = layout.layout(this.value, this.font, this.stringFormat, new SizeF((arg1.graphics.clientSize.width - arg2.x), 0), true, arg1.graphics.clientSize);\n if (layoutResult.lines.length === 1) {\n var textSize = this.font.measureString(this.value);\n var rect = new RectangleF(arg2, textSize);\n rect = this.calculateBounds(rect, textSize.width, arg1.graphics.clientSize.width, arg2.x);\n this.uriAnnotation = new PdfUriAnnotation(rect, this.url);\n this.uriAnnotation.dictionary.items.setValue('Border', this.defaultBorder);\n arg1.annotations.add(this.uriAnnotation);\n var result = this.drawText(arg1, arg2);\n this.font.style = previousFontStyle;\n return result;\n }\n else {\n var result = this.drawMultipleLineWithPoint(layoutResult, arg1, arg2);\n this.font.style = previousFontStyle;\n return result;\n }\n }\n else {\n var layoutResult = layout.layout(this.value, this.font, this.stringFormat, new SizeF(arg2.width, 0), false, new SizeF(0, 0));\n this.font.style = PdfFontStyle.Underline;\n if (layoutResult.lines.length === 1) {\n var textSize = this.font.measureString(this.value);\n var rect = new RectangleF(new PointF(arg2.x, arg2.y), textSize);\n rect = this.calculateBounds(rect, textSize.width, arg2.width, arg2.x);\n this.uriAnnotation = new PdfUriAnnotation(rect, this.url);\n this.uriAnnotation.dictionary.items.setValue('Border', this.defaultBorder);\n arg1.annotations.add(this.uriAnnotation);\n var returnValue = this.drawText(arg1, arg2);\n this.font.style = previousFontStyle;\n return returnValue;\n }\n else {\n var returnValue = this.drawMultipleLineWithBounds(layoutResult, arg1, arg2);\n this.font.style = previousFontStyle;\n return returnValue;\n }\n }\n }\n else {\n var page = new PdfPage();\n page = arg1.page;\n return this.draw(page, arg2);\n }\n };\n /* tslint:enable */\n //Private methods\n /**\n * Helper method `Draw` a Multiple Line Text Web Link on the Graphics with the specified location.\n * @private\n */\n PdfTextWebLink.prototype.drawMultipleLineWithPoint = function (result, page, location) {\n var layoutResult;\n for (var i = 0; i < result.layoutLines.length; i++) {\n var size = this.font.measureString(result.lines[i].text);\n var bounds = new RectangleF(location, size);\n if (i !== 0) {\n bounds.x = 0;\n }\n this.text = result.lines[i].text;\n if (bounds.y + size.height > page.graphics.clientSize.height) {\n if (i !== 0) {\n page = page.graphics.getNextPage();\n bounds = new RectangleF(0, 0, page.graphics.clientSize.width, size.height);\n location.y = 0;\n }\n else {\n break;\n }\n }\n bounds = this.calculateBounds(bounds, size.width, page.graphics.clientSize.width, bounds.x);\n this.uriAnnotation = new PdfUriAnnotation(bounds, this.url);\n this.uriAnnotation.dictionary.items.setValue('Border', this.defaultBorder);\n page.annotations.add(this.uriAnnotation);\n if (i !== 0) {\n layoutResult = this.drawText(page, new PointF(0, bounds.y));\n }\n else {\n layoutResult = this.drawText(page, bounds.x, bounds.y);\n }\n location.y += size.height;\n }\n return layoutResult;\n };\n /**\n * Helper method `Draw` a Multiple Line Text Web Link on the Graphics with the specified bounds.\n * @private\n */\n PdfTextWebLink.prototype.drawMultipleLineWithBounds = function (result, page, bounds) {\n var layoutResult;\n for (var i = 0; i < result.layoutLines.length; i++) {\n var size = this.font.measureString(result.lines[i].text);\n var internalBounds = new RectangleF(new PointF(bounds.x, bounds.y), size);\n internalBounds = this.calculateBounds(internalBounds, size.width, bounds.width, bounds.x);\n this.text = result.lines[i].text;\n if (bounds.y + size.height > page.graphics.clientSize.height) {\n if (i !== 0) {\n page = page.graphics.getNextPage();\n bounds = new RectangleF(bounds.x, 0, bounds.width, size.height);\n internalBounds.y = 0;\n }\n else {\n break;\n }\n }\n this.uriAnnotation = new PdfUriAnnotation(internalBounds, this.url);\n this.uriAnnotation.dictionary.items.setValue('Border', this.defaultBorder);\n page.annotations.add(this.uriAnnotation);\n layoutResult = this.drawText(page, bounds);\n bounds.y += size.height;\n }\n return layoutResult;\n };\n /* tslint:disable */\n PdfTextWebLink.prototype.calculateBounds = function (currentBounds, lineWidth, maximumWidth, startPosition) {\n var shift = 0;\n if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Center) {\n currentBounds.x = startPosition + (maximumWidth - lineWidth) / 2;\n currentBounds.width = lineWidth;\n }\n else if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Right) {\n currentBounds.x = startPosition + (maximumWidth - lineWidth);\n currentBounds.width = lineWidth;\n }\n else if (this.stringFormat != null && typeof this.stringFormat !== 'undefined' && this.stringFormat.alignment === PdfTextAlignment.Justify) {\n currentBounds.x = startPosition;\n currentBounds.width = maximumWidth;\n }\n else {\n currentBounds.width = startPosition;\n currentBounds.width = lineWidth;\n }\n return currentBounds;\n };\n return PdfTextWebLink;\n}(PdfTextElement));\nexport { PdfTextWebLink };\n","/**\n * PdfNumbersConvertor.ts class for EJ2-PDF\n * @private\n */\nimport { PdfNumberStyle } from './../../pages/enum';\n/**\n * `PdfNumbersConvertor` for convert page number into numbers, roman letters, etc.,\n * @private\n */\nvar PdfNumbersConvertor = /** @class */ (function () {\n function PdfNumbersConvertor() {\n }\n // Static methods\n /**\n * Convert string value from page number with correct format.\n * @private\n */\n PdfNumbersConvertor.convert = function (intArabic, numberStyle) {\n var result = '';\n switch (numberStyle) {\n case PdfNumberStyle.None:\n result = '';\n break;\n case PdfNumberStyle.Numeric:\n result = intArabic.toString();\n break;\n case PdfNumberStyle.LowerLatin:\n result = this.arabicToLetter(intArabic).toLowerCase();\n break;\n case PdfNumberStyle.LowerRoman:\n result = this.arabicToRoman(intArabic).toLowerCase();\n break;\n case PdfNumberStyle.UpperLatin:\n result = this.arabicToLetter(intArabic);\n break;\n case PdfNumberStyle.UpperRoman:\n result = this.arabicToRoman(intArabic);\n break;\n }\n return result;\n };\n /**\n * Converts `arabic to roman` letters.\n * @private\n */\n PdfNumbersConvertor.arabicToRoman = function (intArabic) {\n var retval = '';\n retval += this.generateNumber(intArabic, 1000, 'M');\n retval += this.generateNumber(intArabic, 900, 'CM');\n retval += this.generateNumber(intArabic, 500, 'D');\n retval += this.generateNumber(intArabic, 400, 'CD');\n retval += this.generateNumber(intArabic, 100, 'C');\n retval += this.generateNumber(intArabic, 90, 'XC');\n retval += this.generateNumber(intArabic, 50, 'L');\n retval += this.generateNumber(intArabic, 40, 'XL');\n retval += this.generateNumber(intArabic, 10, 'X');\n retval += this.generateNumber(intArabic, 9, 'IX');\n retval += this.generateNumber(intArabic, 5, 'V');\n retval += this.generateNumber(intArabic, 4, 'IV');\n retval += this.generateNumber(intArabic, 1, 'I');\n return retval.toString();\n };\n /**\n * Converts `arabic to normal letters`.\n * @private\n */\n PdfNumbersConvertor.arabicToLetter = function (arabic) {\n var stack = this.convertToLetter(arabic);\n var result = '';\n while (stack.length > 0) {\n var num = stack.pop();\n result = this.appendChar(result, num);\n }\n return result.toString();\n };\n /**\n * Generate a string value of an input number.\n * @private\n */\n PdfNumbersConvertor.generateNumber = function (value, magnitude, letter) {\n var numberstring = '';\n while (value >= magnitude) {\n value -= magnitude;\n numberstring += letter;\n }\n return numberstring.toString();\n };\n /**\n * Convert a input number into letters.\n * @private\n */\n PdfNumbersConvertor.convertToLetter = function (arabic) {\n if (arabic <= 0) {\n throw Error('ArgumentOutOfRangeException-arabic, Value can not be less 0');\n }\n var stack = [];\n while (arabic > this.letterLimit) {\n var remainder = arabic % this.letterLimit;\n if (remainder === 0.0) {\n arabic = arabic / this.letterLimit - 1;\n remainder = this.letterLimit;\n }\n else {\n arabic /= this.letterLimit;\n }\n stack.push(remainder);\n }\n stack.push(arabic);\n return stack;\n };\n /**\n * Convert number to actual string value.\n * @private\n */\n PdfNumbersConvertor.appendChar = function (builder, value) {\n var letter = String.fromCharCode(PdfNumbersConvertor.acsiiStartIndex + value);\n builder += letter;\n return builder;\n };\n // Fields\n /**\n * numbers of letters in english [readonly].\n * @default = 26.0\n * @private\n */\n PdfNumbersConvertor.letterLimit = 26.0;\n /**\n * Resturns `acsii start index` value.\n * @default 64\n * @private\n */\n PdfNumbersConvertor.acsiiStartIndex = (65 - 1);\n return PdfNumbersConvertor;\n}());\nexport { PdfNumbersConvertor };\n","/**\n * Represent class to store information about `template and value pairs`.\n * @private\n */\nvar PdfTemplateValuePair = /** @class */ (function () {\n function PdfTemplateValuePair(template, value) {\n // Fields\n /**\n * Internal variable to store template.\n * @default null\n * @private\n */\n this.pdfTemplate = null;\n /**\n * Intenal variable to store value.\n * @private\n */\n this.content = '';\n if (typeof template === 'undefined') {\n //\n }\n else {\n this.template = template;\n this.value = value;\n }\n }\n Object.defineProperty(PdfTemplateValuePair.prototype, \"template\", {\n // Properties\n /**\n * Gets or sets the template.\n * @private\n */\n get: function () {\n return this.pdfTemplate;\n },\n set: function (value) {\n this.pdfTemplate = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTemplateValuePair.prototype, \"value\", {\n /**\n * Gets or sets the value.\n * @private\n */\n get: function () {\n return this.content;\n },\n set: function (value) {\n this.content = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfTemplateValuePair;\n}());\nexport { PdfTemplateValuePair };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfAutomaticField.ts class for EJ2-PDF\n */\nimport { PdfAutomaticField } from './automatic-field';\nimport { TemporaryDictionary } from './../../collections/object-object-pair/dictionary';\nimport { PdfTemplateValuePair } from './pdf-template-value-pair';\nimport { SizeF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfTemplate } from './../../graphics/figures/pdf-template';\n/**\n * Represents automatic field which has the same value within the `PdfGraphics`.\n */\nvar PdfMultipleValueField = /** @class */ (function (_super) {\n __extends(PdfMultipleValueField, _super);\n function PdfMultipleValueField() {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Stores the instance of dictionary values of `graphics and template value pair`.\n * @private\n */\n _this.list = new TemporaryDictionary();\n return _this;\n }\n // Implementation\n /* tslint:disable */\n PdfMultipleValueField.prototype.performDraw = function (graphics, location, scalingX, scalingY) {\n _super.prototype.performDrawHelper.call(this, graphics, location, scalingX, scalingY);\n var value = this.getValue(graphics);\n var template = new PdfTemplate(this.getSize());\n this.list.setValue(graphics, new PdfTemplateValuePair(template, value));\n var g = template.graphics;\n var size = this.getSize();\n template.graphics.drawString(value, this.getFont(), this.pen, this.getBrush(), 0, 0, size.width, size.height, this.stringFormat);\n var drawLocation = new PointF(location.x + this.location.x, location.y + this.location.y);\n graphics.drawPdfTemplate(template, drawLocation, new SizeF(template.width * scalingX, template.height * scalingY));\n };\n return PdfMultipleValueField;\n}(PdfAutomaticField));\nexport { PdfMultipleValueField };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfBrush } from './../../graphics/brushes/pdf-brush';\nimport { PdfNumberStyle } from './../../pages/enum';\nimport { PdfNumbersConvertor } from './pdf-numbers-convertor';\nimport { PdfMultipleValueField } from './multiple-value-field';\n/**\n * Represents PDF document `page number field`.\n * @public\n */\nvar PdfPageNumberField = /** @class */ (function (_super) {\n __extends(PdfPageNumberField, _super);\n function PdfPageNumberField(font, arg2) {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Stores the number style of the page number field.\n * @private\n */\n _this.internalNumberStyle = PdfNumberStyle.Numeric;\n if (typeof arg2 === 'undefined') {\n _this.font = font;\n }\n else if (arg2 instanceof PdfBrush) {\n _this.font = font;\n _this.brush = arg2;\n }\n else {\n _this.font = font;\n _this.bounds = arg2;\n }\n return _this;\n }\n Object.defineProperty(PdfPageNumberField.prototype, \"numberStyle\", {\n // Properties\n /**\n * Gets and sets the number style of the page number field.\n * @private\n */\n get: function () {\n return this.internalNumberStyle;\n },\n set: function (value) {\n this.internalNumberStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Return the `string` value of page number field.\n * @public\n */\n PdfPageNumberField.prototype.getValue = function (graphics) {\n var result = null;\n var page = this.getPageFromGraphics(graphics);\n result = this.internalGetValue(page);\n return result;\n };\n /**\n * Internal method to `get actual value of page number`.\n * @private\n */\n PdfPageNumberField.prototype.internalGetValue = function (page) {\n var document = page.document;\n var pageIndex = document.pages.indexOf(page) + 1;\n return PdfNumbersConvertor.convert(pageIndex, this.numberStyle);\n };\n return PdfPageNumberField;\n}(PdfMultipleValueField));\nexport { PdfPageNumberField };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfCompositeField.ts class for EJ2-PDF\n */\nimport { PdfMultipleValueField } from './multiple-value-field';\n/**\n * Represents class which can concatenate multiple automatic fields into single string.\n */\nvar PdfCompositeField = /** @class */ (function (_super) {\n __extends(PdfCompositeField, _super);\n // Constructor\n /**\n * Initialize a new instance of `PdfCompositeField` class.\n * @param font Font of the field.\n * @param brush Color of the field.\n * @param text Content of the field.\n * @param list List of the automatic fields in specific order based on the text content.\n */\n function PdfCompositeField(font, brush, text) {\n var list = [];\n for (var _i = 3; _i < arguments.length; _i++) {\n list[_i - 3] = arguments[_i];\n }\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Stores the array of automatic fields.\n * @private\n */\n _this.internalAutomaticFields = null;\n /**\n * Stores the text value of the field.\n * @private\n */\n _this.internalText = '';\n _this.font = font;\n _this.brush = brush;\n _this.text = text;\n _this.automaticFields = list;\n return _this;\n }\n Object.defineProperty(PdfCompositeField.prototype, \"text\", {\n // Properties\n /**\n * Gets and sets the content of the field.\n * @public\n */\n get: function () {\n return this.internalText;\n },\n set: function (value) {\n this.internalText = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCompositeField.prototype, \"automaticFields\", {\n /**\n * Gets and sets the list of the field to drawn.\n * @public\n */\n get: function () {\n return this.internalAutomaticFields;\n },\n set: function (value) {\n this.internalAutomaticFields = value;\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * Return the actual value generated from the list of automatic fields.\n * @public\n */\n PdfCompositeField.prototype.getValue = function (graphics) {\n var values = [];\n var text = this.text.toString();\n if (typeof this.automaticFields !== 'undefined' && this.automaticFields != null && this.automaticFields.length > 0) {\n for (var i = 0; i < this.automaticFields.length; i++) {\n var automaticField = this.automaticFields[i];\n text = text.replace('{' + i + '}', automaticField.getValue(graphics));\n }\n }\n return text;\n };\n return PdfCompositeField;\n}(PdfMultipleValueField));\nexport { PdfCompositeField };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfSingleValueField.ts class for EJ2-PDF\n */\nimport { PdfAutomaticField } from './automatic-field';\nimport { TemporaryDictionary } from './../../collections/object-object-pair/dictionary';\nimport { PdfTemplateValuePair } from './pdf-template-value-pair';\nimport { PointF, SizeF } from './../../drawing/pdf-drawing';\nimport { PdfTemplate } from './../../graphics/figures/pdf-template';\n/**\n * Represents automatic field which has the same value in the whole document.\n */\nvar PdfSingleValueField = /** @class */ (function (_super) {\n __extends(PdfSingleValueField, _super);\n // Constructors\n function PdfSingleValueField() {\n var _this = _super.call(this) || this;\n // Fields\n /* tslint:disable */\n _this.list = new TemporaryDictionary();\n /* tslint:enable */\n _this.painterGraphics = [];\n return _this;\n }\n PdfSingleValueField.prototype.performDraw = function (graphics, location, scalingX, scalingY) {\n _super.prototype.performDrawHelper.call(this, graphics, location, scalingX, scalingY);\n var page = this.getPageFromGraphics(graphics);\n var document = page.document;\n var textValue = this.getValue(graphics);\n /* tslint:disable */\n if (this.list.containsKey(document)) {\n var pair = this.list.getValue(document);\n var drawLocation = new PointF(location.x + this.location.x, location.y + this.location.y);\n graphics.drawPdfTemplate(pair.template, drawLocation, new SizeF(pair.template.width * scalingX, pair.template.height * scalingY));\n this.painterGraphics.push(graphics);\n }\n else {\n var size = this.getSize();\n var template = new PdfTemplate(size);\n this.list.setValue(document, new PdfTemplateValuePair(template, textValue));\n template.graphics.drawString(textValue, this.getFont(), this.pen, this.getBrush(), 0, 0, size.width, size.height, this.stringFormat);\n var drawLocation = new PointF(location.x + this.location.x, location.y + this.location.y);\n graphics.drawPdfTemplate(template, drawLocation, new SizeF(template.width * scalingX, template.height * scalingY));\n this.painterGraphics.push(graphics);\n }\n /* tslint:enable */\n };\n return PdfSingleValueField;\n}(PdfAutomaticField));\nexport { PdfSingleValueField };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfPageCountField.ts class for EJ2-PDF\n */\nimport { PdfSingleValueField } from './single-value-field';\nimport { PdfNumberStyle } from './../../pages/enum';\nimport { PdfBrush } from './../../graphics/brushes/pdf-brush';\nimport { PdfNumbersConvertor } from './pdf-numbers-convertor';\n/**\n * Represents total PDF document page count automatic field.\n */\nvar PdfPageCountField = /** @class */ (function (_super) {\n __extends(PdfPageCountField, _super);\n function PdfPageCountField(font, arg2) {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Stores the number style of the field.\n * @private\n */\n _this.internalNumberStyle = PdfNumberStyle.Numeric;\n if (typeof arg2 === 'undefined') {\n _this.font = font;\n }\n else if (arg2 instanceof PdfBrush) {\n _this.font = font;\n _this.brush = arg2;\n }\n else {\n _this.font = font;\n _this.bounds = arg2;\n }\n return _this;\n }\n Object.defineProperty(PdfPageCountField.prototype, \"numberStyle\", {\n // Properties\n /**\n * Gets and sets the number style of the field.\n * @public\n */\n get: function () {\n return this.internalNumberStyle;\n },\n set: function (value) {\n this.internalNumberStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * Return the actual value of the content to drawn.\n * @public\n */\n PdfPageCountField.prototype.getValue = function (graphics) {\n var result = null;\n var page = this.getPageFromGraphics(graphics);\n var document = page.section.parent.document;\n var count = document.pages.count;\n result = PdfNumbersConvertor.convert(count, this.numberStyle);\n return result;\n };\n return PdfPageCountField;\n}(PdfSingleValueField));\nexport { PdfPageCountField };\n","import { PointF, RectangleF } from './../drawing/pdf-drawing';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfPageRotateAngle } from './../pages/enum';\nimport { PdfDestinationMode } from './../general/enum';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\n/**\n * `PdfDestination` class represents an anchor in the document\n * where bookmarks or annotations can direct when clicked.\n */\nvar PdfDestination = /** @class */ (function () {\n function PdfDestination(arg1, arg2) {\n // Fields\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * Type of the `destination`.\n * @private\n */\n this.destinationMode = PdfDestinationMode.Location;\n /**\n * `Zoom` factor.\n * @private\n * @default 0\n */\n this.zoomFactor = 0;\n /**\n * `Location` of the destination.\n * @default new PointF() with 0 ,0 as co-ordinates\n * @private\n */\n this.destinationLocation = new PointF(0, 0);\n /**\n * `Bounds` of the destination as RectangleF.\n * @default RectangleF.Empty\n * @private\n */\n this.bounds = new RectangleF();\n /**\n * Pdf primitive representing `this` object.\n * @private\n */\n this.array = new PdfArray();\n if (typeof arg2 === 'undefined') {\n var angle = PdfPageRotateAngle.RotateAngle0;\n this.destinationLocation = new PointF(0, this.destinationLocation.y);\n this.pdfPage = arg1;\n }\n else if (arg2 instanceof PointF) {\n this.constructor(arg1);\n this.destinationLocation = arg2;\n }\n else {\n this.constructor(arg1);\n this.bounds = arg2;\n }\n }\n Object.defineProperty(PdfDestination.prototype, \"zoom\", {\n // Properties\n /**\n * Gets and Sets the `zoom` factor.\n * @private\n */\n get: function () {\n return this.zoomFactor;\n },\n set: function (value) {\n this.zoomFactor = value;\n this.initializePrimitive();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDestination.prototype, \"page\", {\n /**\n * Gets and Sets the `page` object.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n set: function (value) {\n this.pdfPage = value;\n this.initializePrimitive();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDestination.prototype, \"mode\", {\n /**\n * Gets and Sets the destination `mode`.\n * @private\n */\n get: function () {\n return this.destinationMode;\n },\n set: function (value) {\n this.destinationMode = value;\n this.initializePrimitive();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDestination.prototype, \"location\", {\n /**\n * Gets and Sets the `location`.\n * @private\n */\n get: function () {\n return this.destinationLocation;\n },\n set: function (value) {\n this.destinationLocation = value;\n this.initializePrimitive();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Translates` co-ordinates to PDF co-ordinate system (lower/left).\n * @private\n */\n PdfDestination.prototype.pointToNativePdf = function (page, point) {\n var section = page.section;\n return section.pointToNativePdf(page, point);\n };\n /**\n * `In fills` array by correct values.\n * @private\n */\n PdfDestination.prototype.initializePrimitive = function () {\n this.array.clear();\n this.array.add(new PdfReferenceHolder(this.pdfPage));\n switch (this.destinationMode) {\n case PdfDestinationMode.Location:\n var simplePage = this.pdfPage;\n var point = new PointF();\n point = this.pointToNativePdf(simplePage, this.destinationLocation);\n this.array.add(new PdfName(this.dictionaryProperties.xyz));\n this.array.add(new PdfNumber(point.x));\n this.array.add(new PdfNumber(point.y));\n this.array.add(new PdfNumber(this.zoomFactor));\n break;\n case PdfDestinationMode.FitToPage:\n this.array.add(new PdfName(this.dictionaryProperties.fit));\n break;\n }\n };\n Object.defineProperty(PdfDestination.prototype, \"element\", {\n /**\n * Gets the `element` representing this object.\n * @private\n */\n get: function () {\n this.initializePrimitive();\n return this.array;\n },\n enumerable: true,\n configurable: true\n });\n return PdfDestination;\n}());\nexport { PdfDestination };\n","/**\n * public Enum for `PdfBorderOverlapStyle`.\n * @private\n */\nexport var PdfBorderOverlapStyle;\n(function (PdfBorderOverlapStyle) {\n /**\n * Specifies the type of `Overlap`.\n * @private\n */\n PdfBorderOverlapStyle[PdfBorderOverlapStyle[\"Overlap\"] = 0] = \"Overlap\";\n /**\n * Specifies the type of `Inside`.\n * @private\n */\n PdfBorderOverlapStyle[PdfBorderOverlapStyle[\"Inside\"] = 1] = \"Inside\";\n})(PdfBorderOverlapStyle || (PdfBorderOverlapStyle = {}));\n","/**\n * PdfPageTemplateElement.ts class for EJ2-Pdf\n */\nimport { PdfDockStyle, PdfAlignmentStyle, TemplateType } from './enum';\nimport { PointF, SizeF } from './../drawing/pdf-drawing';\nimport { PdfTemplate } from './../graphics/figures/pdf-template';\nimport { PdfPage } from './pdf-page';\nimport { RectangleF } from './../drawing/pdf-drawing';\n/**\n * Describes a `page template` object that can be used as header/footer, watermark or stamp.\n */\nvar PdfPageTemplateElement = /** @class */ (function () {\n /* tslint:disable */\n function PdfPageTemplateElement(arg1, arg2, arg3, arg4, arg5) {\n if (arg1 instanceof RectangleF && typeof arg2 === 'undefined') {\n this.constructor(arg1.x, arg1.y, arg1.width, arg1.height);\n }\n else if (arg1 instanceof RectangleF && arg2 instanceof PdfPage && typeof arg3 === 'undefined') {\n this.constructor(arg1.x, arg1.y, arg1.width, arg1.height, arg2);\n }\n else if (arg1 instanceof PointF && arg2 instanceof SizeF && typeof arg3 === 'undefined') {\n this.constructor(arg1.x, arg1.y, arg2.width, arg2.height);\n }\n else if (arg1 instanceof PointF && arg2 instanceof SizeF && arg3 instanceof PdfPage && typeof arg4 === 'undefined') {\n this.constructor(arg1.x, arg1.y, arg2.width, arg2.height, arg3);\n }\n else if (arg1 instanceof SizeF && typeof arg2 === 'undefined') {\n this.constructor(arg1.width, arg1.height);\n }\n else if (typeof arg1 === 'number' && typeof arg2 === 'number' && typeof arg3 === 'undefined') {\n this.constructor(0, 0, arg1, arg2);\n }\n else if (typeof arg1 === 'number' && typeof arg2 === 'number' && arg3 instanceof PdfPage && typeof arg4 === 'undefined') {\n this.constructor(0, 0, arg1, arg2, arg3);\n }\n else if (typeof arg1 === 'number' && typeof arg2 === 'number' && typeof arg3 === 'number' && typeof arg4 === 'number' && typeof arg5 === 'undefined') {\n this.x = arg1;\n this.y = arg2;\n this.pdfTemplate = new PdfTemplate(arg3, arg4);\n }\n else {\n this.x = arg1;\n this.y = arg2;\n this.pdfTemplate = new PdfTemplate(arg3, arg4);\n // this.graphics.colorSpace = this.page.document.colorSpace;\n }\n /* tslint:enable */\n }\n Object.defineProperty(PdfPageTemplateElement.prototype, \"dock\", {\n // Properties\n /**\n * Gets or sets the `dock style` of the page template element.\n * @private\n */\n get: function () {\n return this.dockStyle;\n },\n set: function (value) {\n // if (this.dockStyle !== value && this.Type === TemplateType.None) {\n this.dockStyle = value;\n // Reset alignment.\n this.resetAlignment();\n // }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"alignment\", {\n /**\n * Gets or sets `alignment` of the page template element.\n * @private\n */\n get: function () {\n return this.alignmentStyle;\n },\n set: function (value) {\n // if (this.alignmentStyle !== value) {\n this.setAlignment(value);\n // }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"foreground\", {\n /**\n * Indicates whether the page template is located `in front of the page layers or behind of it`.\n * @private\n */\n get: function () {\n return this.isForeground;\n },\n set: function (value) {\n // if (this.foreground !== value) {\n this.isForeground = value;\n // }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"background\", {\n /**\n * Indicates whether the page template is located `behind of the page layers or in front of it`.\n * @private\n */\n get: function () {\n return !this.isForeground;\n },\n set: function (value) {\n this.isForeground = !value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"location\", {\n /**\n * Gets or sets `location` of the page template element.\n * @private\n */\n get: function () {\n return this.currentLocation;\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.currentLocation = value;\n }\n else {\n //\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"x\", {\n /**\n * Gets or sets `X` co-ordinate of the template element on the page.\n * @private\n */\n get: function () {\n var value = (typeof this.currentLocation !== 'undefined') ? this.currentLocation.x : 0;\n return value;\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.currentLocation.x = value;\n }\n else {\n //\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"y\", {\n /**\n * Gets or sets `Y` co-ordinate of the template element on the page.\n * @private\n */\n get: function () {\n var value = (typeof this.currentLocation !== 'undefined') ? this.currentLocation.y : 0;\n return value;\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.currentLocation.y = value;\n }\n else {\n //\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"size\", {\n /**\n * Gets or sets `size` of the page template element.\n * @private\n */\n get: function () {\n return this.template.size;\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.template.reset(value);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"width\", {\n /**\n * Gets or sets `width` of the page template element.\n * @private\n */\n get: function () {\n return this.template.width;\n },\n set: function (value) {\n if (this.template.width !== value && this.type === TemplateType.None) {\n var size = this.template.size;\n size.width = value;\n this.template.reset(size);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"height\", {\n /**\n * Gets or sets `height` of the page template element.\n * @private\n */\n get: function () {\n return this.template.height;\n },\n set: function (value) {\n if (this.template.height !== value && this.type === TemplateType.None) {\n var size = this.template.size;\n size.height = value;\n this.template.reset(size);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"graphics\", {\n /**\n * Gets `graphics` context of the page template element.\n * @private\n */\n get: function () {\n return this.template.graphics;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"template\", {\n /**\n * Gets Pdf `template` object.\n * @private\n */\n get: function () {\n // if (typeof this.pdfTemplate === 'undefined' || this.pdfTemplate == null) {\n // this.pdfTemplate = new PdfTemplate(this.size);\n // }\n return this.pdfTemplate;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"type\", {\n /**\n * Gets or sets `type` of the usage of this page template.\n * @private\n */\n get: function () {\n return this.templateType;\n },\n set: function (value) {\n this.updateDocking(value);\n this.templateType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"bounds\", {\n /**\n * Gets or sets `bounds` of the page template.\n * @public\n */\n get: function () {\n return new RectangleF(new PointF(this.x, this.y), this.size);\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.location = new PointF(value.x, value.y);\n this.size = new SizeF(value.width, value.height);\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Updates Dock` property if template is used as header/footer.\n * @private\n */\n PdfPageTemplateElement.prototype.updateDocking = function (type) {\n if (type !== TemplateType.None) {\n switch (type) {\n case TemplateType.Top:\n this.dock = PdfDockStyle.Top;\n break;\n case TemplateType.Bottom:\n this.dock = PdfDockStyle.Bottom;\n break;\n case TemplateType.Left:\n this.dock = PdfDockStyle.Left;\n break;\n case TemplateType.Right:\n this.dock = PdfDockStyle.Right;\n break;\n }\n this.resetAlignment();\n }\n };\n /**\n * `Resets alignment` of the template.\n * @private\n */\n PdfPageTemplateElement.prototype.resetAlignment = function () {\n this.alignment = PdfAlignmentStyle.None;\n };\n /**\n * `Sets alignment` of the template.\n * @private\n */\n PdfPageTemplateElement.prototype.setAlignment = function (alignment) {\n if (this.dock === PdfDockStyle.None) {\n this.alignmentStyle = alignment;\n }\n else {\n // Template is docked and alignment has been changed.\n var canBeSet = false;\n switch (this.dock) {\n case PdfDockStyle.Left:\n canBeSet = (alignment === PdfAlignmentStyle.TopLeft || alignment === PdfAlignmentStyle.MiddleLeft ||\n alignment === PdfAlignmentStyle.BottomLeft || alignment === PdfAlignmentStyle.None);\n break;\n case PdfDockStyle.Top:\n canBeSet = (alignment === PdfAlignmentStyle.TopLeft || alignment === PdfAlignmentStyle.TopCenter ||\n alignment === PdfAlignmentStyle.TopRight || alignment === PdfAlignmentStyle.None);\n break;\n case PdfDockStyle.Right:\n canBeSet = (alignment === PdfAlignmentStyle.TopRight || alignment === PdfAlignmentStyle.MiddleRight ||\n alignment === PdfAlignmentStyle.BottomRight || alignment === PdfAlignmentStyle.None);\n break;\n case PdfDockStyle.Bottom:\n canBeSet = (alignment === PdfAlignmentStyle.BottomLeft || alignment === PdfAlignmentStyle.BottomCenter\n || alignment === PdfAlignmentStyle.BottomRight || alignment === PdfAlignmentStyle.None);\n break;\n case PdfDockStyle.Fill:\n canBeSet = (alignment === PdfAlignmentStyle.MiddleCenter || alignment === PdfAlignmentStyle.None);\n break;\n }\n if (canBeSet) {\n this.alignmentStyle = alignment;\n }\n }\n };\n /**\n * Draws the template.\n * @private\n */\n PdfPageTemplateElement.prototype.draw = function (layer, document) {\n var page = layer.page;\n var bounds = this.calculateBounds(page, document);\n if (bounds.x === -0) {\n bounds.x = 0;\n }\n layer.graphics.drawPdfTemplate(this.template, new PointF(bounds.x, bounds.y), new SizeF(bounds.width, bounds.height));\n };\n /**\n * Calculates bounds of the page template.\n * @private\n */\n PdfPageTemplateElement.prototype.calculateBounds = function (page, document) {\n var result = this.bounds;\n if (this.alignmentStyle !== PdfAlignmentStyle.None) {\n result = this.getAlignmentBounds(page, document);\n }\n else if (this.dockStyle !== PdfDockStyle.None) {\n result = this.getDockBounds(page, document);\n }\n return result;\n };\n /**\n * Calculates bounds according to the alignment.\n * @private\n */\n PdfPageTemplateElement.prototype.getAlignmentBounds = function (page, document) {\n var result = this.bounds;\n if (this.type === TemplateType.None) {\n result = this.getSimpleAlignmentBounds(page, document);\n }\n else {\n result = this.getTemplateAlignmentBounds(page, document);\n }\n return result;\n };\n /**\n * Calculates bounds according to the alignment.\n * @private\n */\n PdfPageTemplateElement.prototype.getSimpleAlignmentBounds = function (page, document) {\n var bounds = this.bounds;\n var pdfSection = page.section;\n var actualBounds = pdfSection.getActualBounds(document, page, false);\n var x = this.x;\n var y = this.y;\n switch (this.alignmentStyle) {\n case PdfAlignmentStyle.TopLeft:\n x = 0;\n y = 0;\n break;\n case PdfAlignmentStyle.TopCenter:\n x = (actualBounds.width - this.width) / 2;\n y = 0;\n break;\n case PdfAlignmentStyle.TopRight:\n x = actualBounds.width - this.width;\n y = 0;\n break;\n case PdfAlignmentStyle.MiddleLeft:\n x = 0;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.MiddleCenter:\n x = (actualBounds.width - this.width) / 2;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.MiddleRight:\n x = actualBounds.width - this.width;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.BottomLeft:\n x = 0;\n y = actualBounds.height - this.height;\n break;\n case PdfAlignmentStyle.BottomCenter:\n x = (actualBounds.width - this.width) / 2;\n y = actualBounds.height - this.height;\n break;\n case PdfAlignmentStyle.BottomRight:\n x = actualBounds.width - this.width;\n y = actualBounds.height - this.height;\n break;\n }\n bounds.x = x;\n bounds.y = y;\n return bounds;\n };\n /**\n * Calculates bounds according to the alignment.\n * @private\n */\n PdfPageTemplateElement.prototype.getTemplateAlignmentBounds = function (page, document) {\n var result = this.bounds;\n var section = page.section;\n var actualBounds = section.getActualBounds(document, page, false);\n var x = this.x;\n var y = this.y;\n switch (this.alignmentStyle) {\n case PdfAlignmentStyle.TopLeft:\n if (this.type === TemplateType.Left) {\n x = -actualBounds.x;\n y = 0;\n }\n else if (this.type === TemplateType.Top) {\n x = -actualBounds.x;\n y = -actualBounds.y;\n }\n break;\n case PdfAlignmentStyle.TopCenter:\n x = (actualBounds.width - this.width) / 2;\n y = -actualBounds.y;\n break;\n case PdfAlignmentStyle.TopRight:\n if (this.type === TemplateType.Right) {\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = 0;\n }\n else if (this.type === TemplateType.Top) {\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = -actualBounds.y;\n }\n break;\n case PdfAlignmentStyle.MiddleLeft:\n x = -actualBounds.x;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.MiddleCenter:\n x = (actualBounds.width - this.width) / 2;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.MiddleRight:\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.BottomLeft:\n if (this.type === TemplateType.Left) {\n x = -actualBounds.x;\n y = actualBounds.height - this.height;\n }\n else if (this.type === TemplateType.Bottom) {\n x = -actualBounds.x;\n y = actualBounds.height + section.getBottomIndentHeight(document, page, false) - this.height;\n }\n break;\n case PdfAlignmentStyle.BottomCenter:\n x = (actualBounds.width - this.width) / 2;\n y = actualBounds.height + section.getBottomIndentHeight(document, page, false) - this.height;\n break;\n case PdfAlignmentStyle.BottomRight:\n if (this.type === TemplateType.Right) {\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = actualBounds.height - this.height;\n }\n else if (this.type === TemplateType.Bottom) {\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = actualBounds.height + section.getBottomIndentHeight(document, page, false) - this.height;\n }\n break;\n }\n result.x = x;\n result.y = y;\n return result;\n };\n /**\n * Calculates bounds according to the docking.\n * @private\n */\n PdfPageTemplateElement.prototype.getDockBounds = function (page, document) {\n var result = this.bounds;\n if (this.type === TemplateType.None) {\n result = this.getSimpleDockBounds(page, document);\n }\n else {\n result = this.getTemplateDockBounds(page, document);\n }\n return result;\n };\n /**\n * Calculates bounds according to the docking.\n * @private\n */\n PdfPageTemplateElement.prototype.getSimpleDockBounds = function (page, document) {\n var result = this.bounds;\n var section = page.section;\n var actualBounds = section.getActualBounds(document, page, false);\n var x = this.x;\n var y = this.y;\n var width = this.width;\n var height = this.height;\n switch (this.dockStyle) {\n case PdfDockStyle.Left:\n x = 0;\n y = 0;\n width = this.width;\n height = actualBounds.height;\n break;\n case PdfDockStyle.Top:\n x = 0;\n y = 0;\n width = actualBounds.width;\n height = this.height;\n break;\n case PdfDockStyle.Right:\n x = actualBounds.width - this.width;\n y = 0;\n width = this.width;\n height = actualBounds.height;\n break;\n case PdfDockStyle.Bottom:\n x = 0;\n y = actualBounds.height - this.height;\n width = actualBounds.width;\n height = this.height;\n break;\n case PdfDockStyle.Fill:\n x = 0;\n x = 0;\n width = actualBounds.width;\n height = actualBounds.height;\n break;\n }\n result = new RectangleF(x, y, width, height);\n return result;\n };\n /**\n * Calculates template bounds basing on docking if template is a page template.\n * @private\n */\n PdfPageTemplateElement.prototype.getTemplateDockBounds = function (page, document) {\n var result = this.bounds;\n var section = page.section;\n var actualBounds = section.getActualBounds(document, page, false);\n var actualSize = section.pageSettings.getActualSize();\n var x = this.x;\n var y = this.y;\n var width = this.width;\n var height = this.height;\n switch (this.dockStyle) {\n case PdfDockStyle.Left:\n x = -actualBounds.x;\n y = 0;\n width = this.width;\n height = actualBounds.height;\n break;\n case PdfDockStyle.Top:\n x = -actualBounds.x;\n y = -actualBounds.y;\n width = actualSize.width;\n height = this.height;\n if (actualBounds.height < 0) {\n y = -actualBounds.y + actualSize.height;\n }\n break;\n case PdfDockStyle.Right:\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = 0;\n width = this.width;\n height = actualBounds.height;\n break;\n case PdfDockStyle.Bottom:\n x = -actualBounds.x;\n y = actualBounds.height + section.getBottomIndentHeight(document, page, false) - this.height;\n width = actualSize.width;\n height = this.height;\n if (actualBounds.height < 0) {\n y -= actualSize.height;\n }\n break;\n case PdfDockStyle.Fill:\n x = 0;\n x = 0;\n width = actualBounds.width;\n height = actualBounds.height;\n break;\n }\n result = new RectangleF(x, y, width, height);\n return result;\n };\n return PdfPageTemplateElement;\n}());\nexport { PdfPageTemplateElement };\n","/**\n * PdfBorders.ts class for EJ2-PDF\n */\nimport { PdfPen } from './../../../graphics/pdf-pen';\nimport { PdfDashStyle } from './../../../graphics/enum';\nimport { PdfColor } from './../../../graphics/pdf-color';\n/**\n * `PdfBorders` class used represents the cell border of the PDF grid.\n */\nvar PdfBorders = /** @class */ (function () {\n // Constructor\n /**\n * Create a new instance for `PdfBorders` class.\n * @private\n */\n function PdfBorders() {\n var defaultBorderPenLeft = new PdfPen(new PdfColor(0, 0, 0));\n defaultBorderPenLeft.dashStyle = PdfDashStyle.Solid;\n var defaultBorderPenRight = new PdfPen(new PdfColor(0, 0, 0));\n defaultBorderPenRight.dashStyle = PdfDashStyle.Solid;\n var defaultBorderPenTop = new PdfPen(new PdfColor(0, 0, 0));\n defaultBorderPenTop.dashStyle = PdfDashStyle.Solid;\n var defaultBorderPenBottom = new PdfPen(new PdfColor(0, 0, 0));\n defaultBorderPenBottom.dashStyle = PdfDashStyle.Solid;\n this.leftPen = defaultBorderPenLeft;\n this.rightPen = defaultBorderPenRight;\n this.topPen = defaultBorderPenTop;\n this.bottomPen = defaultBorderPenBottom;\n }\n Object.defineProperty(PdfBorders.prototype, \"left\", {\n // Properties\n /**\n * Gets or sets the `Left`.\n * @private\n */\n get: function () {\n return this.leftPen;\n },\n set: function (value) {\n this.leftPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders.prototype, \"right\", {\n /**\n * Gets or sets the `Right`.\n * @private\n */\n get: function () {\n return this.rightPen;\n },\n set: function (value) {\n this.rightPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders.prototype, \"top\", {\n /**\n * Gets or sets the `Top`.\n * @private\n */\n get: function () {\n return this.topPen;\n },\n set: function (value) {\n this.topPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders.prototype, \"bottom\", {\n /**\n * Gets or sets the `Bottom`.\n * @private\n */\n get: function () {\n return this.bottomPen;\n },\n set: function (value) {\n this.bottomPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders.prototype, \"all\", {\n /**\n * sets the `All`.\n * @private\n */\n set: function (value) {\n this.leftPen = this.rightPen = this.topPen = this.bottomPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders.prototype, \"isAll\", {\n /**\n * Gets a value indicating whether this instance `is all`.\n * @private\n */\n get: function () {\n return ((this.leftPen === this.rightPen) && (this.leftPen === this.topPen) && (this.leftPen === this.bottomPen));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBorders, \"default\", {\n /**\n * Gets the `default`.\n * @private\n */\n get: function () {\n return new PdfBorders();\n },\n enumerable: true,\n configurable: true\n });\n return PdfBorders;\n}());\nexport { PdfBorders };\nvar PdfPaddings = /** @class */ (function () {\n function PdfPaddings(left, right, top, bottom) {\n if (typeof left === 'undefined') {\n //5.76 and 0 are taken from ms-word default table margins.\n this.leftPad = this.rightPad = 5.76;\n //0.5 is set for top and bottom by default.\n this.bottom = this.topPad = 0.5;\n }\n else {\n this.leftPad = left;\n this.rightPad = right;\n this.topPad = top;\n this.bottomPad = bottom;\n }\n }\n Object.defineProperty(PdfPaddings.prototype, \"left\", {\n // Properties\n /**\n * Gets or sets the `left` value of the edge\n * @private\n */\n get: function () {\n return this.leftPad;\n },\n set: function (value) {\n this.leftPad = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPaddings.prototype, \"right\", {\n /**\n * Gets or sets the `right` value of the edge.\n * @private\n */\n get: function () {\n return this.rightPad;\n },\n set: function (value) {\n this.rightPad = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPaddings.prototype, \"top\", {\n /**\n * Gets or sets the `top` value of the edge\n * @private\n */\n get: function () {\n return this.topPad;\n },\n set: function (value) {\n this.topPad = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPaddings.prototype, \"bottom\", {\n /**\n * Gets or sets the `bottom` value of the edge.\n * @private\n */\n get: function () {\n return this.bottomPad;\n },\n set: function (value) {\n this.bottomPad = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPaddings.prototype, \"all\", {\n /**\n * Sets value to all sides `left,right,top and bottom`.s\n * @private\n */\n set: function (value) {\n this.leftPad = this.rightPad = this.topPad = this.bottomPad = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfPaddings;\n}());\nexport { PdfPaddings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfBorders, PdfPaddings } from './pdf-borders';\nimport { PdfBorderOverlapStyle } from './../../tables/light-tables/enum';\n/**\n * Base class for the `grid style`,\n */\nvar PdfGridStyleBase = /** @class */ (function () {\n function PdfGridStyleBase() {\n }\n Object.defineProperty(PdfGridStyleBase.prototype, \"backgroundBrush\", {\n // Properties\n /**\n * Gets or sets the `background brush`.\n * @private\n */\n get: function () {\n return this.gridBackgroundBrush;\n },\n set: function (value) {\n this.gridBackgroundBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyleBase.prototype, \"textBrush\", {\n /**\n * Gets or sets the `text brush`.\n * @private\n */\n get: function () {\n return this.gridTextBrush;\n },\n set: function (value) {\n this.gridTextBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyleBase.prototype, \"textPen\", {\n /**\n * Gets or sets the `text pen`.\n * @private\n */\n get: function () {\n return this.gridTextPen;\n },\n set: function (value) {\n this.gridTextPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyleBase.prototype, \"font\", {\n /**\n * Gets or sets the `font`.\n * @private\n */\n get: function () {\n return this.gridFont;\n },\n set: function (value) {\n this.gridFont = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridStyleBase;\n}());\nexport { PdfGridStyleBase };\n/**\n * `PdfGridStyle` class provides customization of the appearance for the 'PdfGrid'.\n */\nvar PdfGridStyle = /** @class */ (function (_super) {\n __extends(PdfGridStyle, _super);\n //constructor\n /**\n * Initialize a new instance for `PdfGridStyle` class.\n * @private\n */\n function PdfGridStyle() {\n var _this = _super.call(this) || this;\n _this.gridBorderOverlapStyle = PdfBorderOverlapStyle.Overlap;\n _this.bAllowHorizontalOverflow = false;\n _this.gridHorizontalOverflowType = PdfHorizontalOverflowType.LastPage;\n return _this;\n }\n Object.defineProperty(PdfGridStyle.prototype, \"cellSpacing\", {\n //Properties\n /**\n * Gets or sets the `cell spacing` of the 'PdfGrid'.\n * @private\n */\n get: function () {\n if (typeof this.gridCellSpacing === 'undefined') {\n this.gridCellSpacing = 0;\n }\n return this.gridCellSpacing;\n },\n set: function (value) {\n this.gridCellSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyle.prototype, \"horizontalOverflowType\", {\n /**\n * Gets or sets the type of the `horizontal overflow` of the 'PdfGrid'.\n * @private\n */\n get: function () {\n return this.gridHorizontalOverflowType;\n },\n set: function (value) {\n this.gridHorizontalOverflowType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyle.prototype, \"allowHorizontalOverflow\", {\n /**\n * Gets or sets a value indicating whether to `allow horizontal overflow`.\n * @private\n */\n get: function () {\n return this.bAllowHorizontalOverflow;\n },\n set: function (value) {\n this.bAllowHorizontalOverflow = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyle.prototype, \"cellPadding\", {\n /**\n * Gets or sets the `cell padding`.\n * @private\n */\n get: function () {\n if (typeof this.gridCellPadding === 'undefined') {\n this.gridCellPadding = new PdfPaddings();\n }\n return this.gridCellPadding;\n },\n set: function (value) {\n if (typeof this.gridCellPadding === 'undefined') {\n this.gridCellPadding = new PdfPaddings();\n this.gridCellPadding = value;\n }\n else {\n this.gridCellPadding = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridStyle.prototype, \"borderOverlapStyle\", {\n /**\n * Gets or sets the `border overlap style` of the 'PdfGrid'.\n * @private\n */\n get: function () {\n return this.gridBorderOverlapStyle;\n },\n set: function (value) {\n this.gridBorderOverlapStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridStyle;\n}(PdfGridStyleBase));\nexport { PdfGridStyle };\n/**\n * `PdfGridCellStyle` class provides customization of the appearance for the 'PdfGridCell'.\n */\nvar PdfGridCellStyle = /** @class */ (function (_super) {\n __extends(PdfGridCellStyle, _super);\n /**\n * Initializes a new instance of the `PdfGridCellStyle` class.\n * @private\n */\n function PdfGridCellStyle() {\n var _this = _super.call(this) || this;\n /**\n * @hidden\n * @private\n */\n _this.gridCellBorders = PdfBorders.default;\n return _this;\n }\n Object.defineProperty(PdfGridCellStyle.prototype, \"stringFormat\", {\n //Properties\n /**\n * Gets the `string format` of the 'PdfGridCell'.\n * @private\n */\n get: function () {\n return this.format;\n },\n set: function (value) {\n this.format = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCellStyle.prototype, \"borders\", {\n /**\n * Gets or sets the `border` of the 'PdfGridCell'.\n * @private\n */\n get: function () {\n return this.gridCellBorders;\n },\n set: function (value) {\n this.gridCellBorders = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCellStyle.prototype, \"cellPadding\", {\n /**\n * Gets or sets the `cell padding`.\n * @private\n */\n get: function () {\n return this.gridCellPadding;\n },\n set: function (value) {\n if (this.gridCellPadding == null || typeof this.gridCellPadding === 'undefined') {\n this.gridCellPadding = new PdfPaddings();\n }\n this.gridCellPadding = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridCellStyle;\n}(PdfGridStyleBase));\nexport { PdfGridCellStyle };\n/**\n * `PdfGridRowStyle` class provides customization of the appearance for the `PdfGridRow`.\n */\nvar PdfGridRowStyle = /** @class */ (function () {\n // Constructor\n /**\n * Initializes a new instance of the `PdfGridRowStyle` class.\n * @private\n */\n function PdfGridRowStyle() {\n //\n }\n Object.defineProperty(PdfGridRowStyle.prototype, \"backgroundBrush\", {\n /**\n * Determine the value of the border is changed or not.\n * @private\n */\n // Properties\n /**\n * Gets or sets the `background brush`.\n * @private\n */\n get: function () {\n return this.gridRowBackgroundBrush;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setBackgroundBrush = function (value) {\n this.gridRowBackgroundBrush = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.backgroundBrush = value;\n }\n }\n };\n Object.defineProperty(PdfGridRowStyle.prototype, \"textBrush\", {\n /**\n * Gets or sets the `text brush`.\n * @private\n */\n get: function () {\n return this.gridRowTextBrush;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setTextBrush = function (value) {\n this.gridRowTextBrush = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.textBrush = value;\n }\n }\n };\n Object.defineProperty(PdfGridRowStyle.prototype, \"textPen\", {\n /**\n * Gets or sets the `text pen`.\n * @private\n */\n get: function () {\n return this.gridRowTextPen;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setTextPen = function (value) {\n this.gridRowTextPen = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.textPen = value;\n }\n }\n };\n Object.defineProperty(PdfGridRowStyle.prototype, \"font\", {\n /**\n * Gets or sets the `font`.\n * @private\n */\n get: function () {\n return this.gridRowFont;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setFont = function (value) {\n this.gridRowFont = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.font = value;\n }\n }\n };\n Object.defineProperty(PdfGridRowStyle.prototype, \"border\", {\n /**\n * Gets or sets the `border` of the current row.\n * @private\n */\n get: function () {\n if (typeof this.gridRowBorder === 'undefined') {\n this.setBorder(new PdfBorders());\n }\n return this.gridRowBorder;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowStyle.prototype.setBorder = function (value) {\n this.gridRowBorder = value;\n if (typeof this.parent !== 'undefined') {\n for (var i = 0; i < this.parent.cells.count; i++) {\n this.parent.cells.getCell(i).style.borders = value;\n }\n }\n };\n /**\n * sets the `parent row` of the current object.\n * @private\n */\n PdfGridRowStyle.prototype.setParent = function (parent) {\n this.parent = parent;\n };\n return PdfGridRowStyle;\n}());\nexport { PdfGridRowStyle };\n/**\n * public Enum for `PdfHorizontalOverflowType`.\n * @private\n */\nexport var PdfHorizontalOverflowType;\n(function (PdfHorizontalOverflowType) {\n /**\n * Specifies the type of `NextPage`.\n * @private\n */\n PdfHorizontalOverflowType[PdfHorizontalOverflowType[\"NextPage\"] = 0] = \"NextPage\";\n /**\n * Specifies the type of `LastPage`.\n * @private\n */\n PdfHorizontalOverflowType[PdfHorizontalOverflowType[\"LastPage\"] = 1] = \"LastPage\";\n})(PdfHorizontalOverflowType || (PdfHorizontalOverflowType = {}));\n","import { PdfGridCellStyle } from './styles/style';\nimport { PdfStringLayouter } from './../../graphics/fonts/string-layouter';\nimport { PdfDocument } from './../../document/pdf-document';\nimport { PdfStringFormat } from './../../graphics/fonts/pdf-string-format';\nimport { RectangleF, PointF, SizeF } from './../../drawing/pdf-drawing';\nimport { PdfDashStyle, PdfLineCap } from './../../graphics/enum';\nimport { PdfBorderOverlapStyle } from './../tables/light-tables/enum';\nimport { PdfSolidBrush } from './../../graphics/brushes/pdf-solid-brush';\nimport { PdfColor } from './../../graphics/pdf-color';\nimport { PdfImage } from './../../graphics/images/pdf-image';\nimport { PdfBitmap } from './../../graphics/images/pdf-bitmap';\nimport { PdfTextWebLink } from './../../annotations/pdf-text-web-link';\n/**\n * `PdfGridCell` class represents the schema of a cell in a 'PdfGrid'.\n */\nvar PdfGridCell = /** @class */ (function () {\n function PdfGridCell(row) {\n /**\n * `Width` of the cell.\n * @default 0\n * @private\n */\n this.cellWidth = 0;\n /**\n * `Height` of the cell.\n * @default 0\n * @private\n */\n this.cellHeight = 0;\n /**\n * Specifies weather the `cell is drawn`.\n * @default true\n * @private\n */\n this.finsh = true;\n /**\n * The `remaining height` of row span.\n * @default 0\n * @private\n */\n this.rowSpanRemainingHeight = 0;\n if (typeof row === 'undefined') {\n this.gridRowSpan = 1;\n this.colSpan = 1;\n }\n else {\n this.constructor();\n this.gridRow = row;\n }\n }\n Object.defineProperty(PdfGridCell.prototype, \"isCellMergeContinue\", {\n //Properties\n get: function () {\n return this.internalIsCellMergeContinue;\n },\n set: function (value) {\n this.internalIsCellMergeContinue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"isRowMergeContinue\", {\n get: function () {\n return this.internalIsRowMergeContinue;\n },\n set: function (value) {\n this.internalIsRowMergeContinue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"isCellMergeStart\", {\n get: function () {\n return this.internalIsCellMergeStart;\n },\n set: function (value) {\n this.internalIsCellMergeStart = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"isRowMergeStart\", {\n get: function () {\n return this.internalIsRowMergeStart;\n },\n set: function (value) {\n this.internalIsRowMergeStart = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"remainingString\", {\n /**\n * Gets or sets the `remaining string` after the row split between pages.\n * @private\n */\n get: function () {\n return this.remaining;\n },\n set: function (value) {\n this.remaining = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"stringFormat\", {\n /**\n * Gets or sets the `string format`.\n * @private\n */\n get: function () {\n if (this.format == null) {\n this.format = new PdfStringFormat();\n }\n return this.format;\n },\n set: function (value) {\n this.format = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"row\", {\n /**\n * Gets or sets the parent `row`.\n * @private\n */\n get: function () {\n return this.gridRow;\n },\n set: function (value) {\n this.gridRow = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"value\", {\n /**\n * Gets or sets the `value` of the cell.\n * @private\n */\n get: function () {\n return this.objectValue;\n },\n set: function (value) {\n this.objectValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"rowSpan\", {\n /**\n * Gets or sets a value that indicates the total number of rows that cell `spans` within a PdfGrid.\n * @private\n */\n get: function () {\n return this.gridRowSpan;\n },\n set: function (value) {\n if (value < 1) {\n throw new Error('ArgumentException : Invalid span specified, must be greater than or equal to 1');\n }\n else {\n this.gridRowSpan = value;\n this.row.rowSpanExists = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"style\", {\n /**\n * Gets or sets the cell `style`.\n * @private\n */\n get: function () {\n if (this.cellStyle == null) {\n this.cellStyle = new PdfGridCellStyle();\n }\n return this.cellStyle;\n },\n set: function (value) {\n this.cellStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"height\", {\n /**\n * Gets the `height` of the PdfGrid cell.[Read-Only].\n * @private\n */\n get: function () {\n if (this.cellHeight === 0) {\n this.cellHeight = this.measureHeight();\n }\n return this.cellHeight;\n },\n set: function (value) {\n this.cellHeight = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"columnSpan\", {\n /**\n * Gets or sets a value that indicates the total number of columns that cell `spans` within a PdfGrid.\n * @private\n */\n get: function () {\n return this.colSpan;\n },\n set: function (value) {\n if (value < 1) {\n throw Error('Invalid span specified, must be greater than or equal to 1');\n }\n else {\n this.colSpan = value;\n this.row.columnSpanExists = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridCell.prototype, \"width\", {\n /**\n * Gets the `width` of the PdfGrid cell.[Read-Only].\n * @private\n */\n get: function () {\n if (this.cellWidth === 0 || this.row.grid.isComplete) {\n this.cellWidth = this.measureWidth();\n }\n return this.cellWidth;\n },\n set: function (value) {\n this.cellWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Calculates the width`.\n * @private\n */\n PdfGridCell.prototype.measureWidth = function () {\n // .. Calculate the cell text width.\n // .....Add border widths, cell spacings and paddings to the width.\n var width = 0;\n var layouter = new PdfStringLayouter();\n if (typeof this.objectValue === 'string') {\n /* tslint:disable */\n var slr = layouter.layout(this.objectValue, this.getTextFont(), this.stringFormat, new SizeF(0, 0), false, new SizeF(0, 0));\n width += slr.actualSize.width;\n width += (this.style.borders.left.width + this.style.borders.right.width) * 2;\n }\n else if (this.objectValue instanceof PdfImage || this.objectValue instanceof PdfBitmap) {\n width += this.objectValue.width;\n }\n else if (this.objectValue instanceof PdfTextWebLink) {\n var webLink = this.objectValue;\n var result = layouter.layout(webLink.text, webLink.font, webLink.stringFormat, new SizeF(0, 0), false, new SizeF(0, 0));\n /* tslint:enable */\n width += result.actualSize.width;\n width += (this.style.borders.left.width + this.style.borders.right.width) * 2;\n }\n width += (this.row.grid.style.cellPadding.left + this.row.grid.style.cellPadding.right);\n width += this.row.grid.style.cellSpacing;\n return width;\n };\n /**\n * Draw the `cell background`.\n * @private\n */\n PdfGridCell.prototype.drawCellBackground = function (graphics, bounds) {\n var backgroundBrush = this.getBackgroundBrush();\n if (backgroundBrush != null) {\n graphics.drawRectangle(backgroundBrush, bounds.x, bounds.y, bounds.width, bounds.height);\n }\n };\n /**\n * `Adjusts the text layout area`.\n * @private\n */\n /* tslint:disable */\n PdfGridCell.prototype.adjustContentLayoutArea = function (bounds) {\n //Add Padding value to its Cell Bounds\n var returnBounds = new RectangleF(bounds.x, bounds.y, bounds.width, bounds.height);\n if (typeof this.style.cellPadding === 'undefined' || this.style.cellPadding == null) {\n returnBounds.x += this.gridRow.grid.style.cellPadding.left + this.cellStyle.borders.left.width;\n returnBounds.y += this.gridRow.grid.style.cellPadding.top + this.cellStyle.borders.top.width;\n returnBounds.width -= (this.gridRow.grid.style.cellPadding.right + this.gridRow.grid.style.cellPadding.left);\n returnBounds.width -= (this.cellStyle.borders.left.width + this.cellStyle.borders.right.width);\n returnBounds.height -= (this.gridRow.grid.style.cellPadding.bottom + this.gridRow.grid.style.cellPadding.top);\n returnBounds.height -= (this.cellStyle.borders.top.width + this.cellStyle.borders.bottom.width);\n if (this.rowSpan === 1) {\n returnBounds.width -= (this.style.borders.left.width);\n }\n }\n else {\n returnBounds.x += this.style.cellPadding.left + this.cellStyle.borders.left.width;\n returnBounds.y += this.style.cellPadding.top + this.cellStyle.borders.top.width;\n returnBounds.width -= (this.style.cellPadding.right + this.style.cellPadding.left);\n returnBounds.width -= (this.cellStyle.borders.left.width + this.cellStyle.borders.right.width);\n returnBounds.height -= (this.style.cellPadding.bottom + this.style.cellPadding.top);\n returnBounds.height -= (this.cellStyle.borders.top.width + this.cellStyle.borders.bottom.width);\n if (this.rowSpan === 1) {\n returnBounds.width -= (this.style.borders.left.width);\n }\n }\n return returnBounds;\n };\n /**\n * `Draws` the specified graphics.\n * @private\n */\n PdfGridCell.prototype.draw = function (graphics, bounds, cancelSubsequentSpans) {\n var isrowbreak = false;\n var result = null;\n if (this.internalIsCellMergeContinue || this.internalIsRowMergeContinue) {\n if (this.internalIsCellMergeContinue && this.row.grid.style.allowHorizontalOverflow) {\n if ((this.row.rowOverflowIndex > 0 && (this.row.cells.indexOf(this) != this.row.rowOverflowIndex + 1)) || (this.row.rowOverflowIndex == 0 && this.internalIsCellMergeContinue)) {\n return result;\n }\n }\n else {\n return result;\n }\n }\n //Adjust bounds with Row and Column Spacing\n bounds = this.adjustOuterLayoutArea(bounds, graphics);\n var textPen = this.getTextPen();\n var textBrush = this.getTextBrush();\n if (typeof textPen === 'undefined' && typeof textBrush === 'undefined') {\n textBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n }\n var font = this.getTextFont();\n var strFormat = this.getStringFormat();\n var innerLayoutArea = this.adjustContentLayoutArea(bounds);\n this.drawCellBackground(graphics, bounds);\n if (typeof this.objectValue === 'string' || typeof this.remaining === 'string') {\n var temp = void 0;\n temp = this.remaining === '' ? this.remaining : this.objectValue;\n graphics.drawString(temp, font, textPen, textBrush, innerLayoutArea.x, innerLayoutArea.y, innerLayoutArea.width, innerLayoutArea.height, strFormat);\n result = graphics.stringLayoutResult;\n }\n else if (this.objectValue instanceof PdfImage || this.objectValue instanceof PdfBitmap) {\n var imageBounds = void 0;\n if (this.objectValue.width <= innerLayoutArea.width) {\n imageBounds = new RectangleF(innerLayoutArea.x, innerLayoutArea.y, this.objectValue.width, innerLayoutArea.height);\n }\n else {\n imageBounds = innerLayoutArea;\n }\n graphics.drawImage(this.objectValue, imageBounds.x, imageBounds.y, imageBounds.width, imageBounds.height);\n }\n else if (this.objectValue instanceof PdfTextWebLink) {\n this.objectValue.draw(graphics.currentPage, innerLayoutArea);\n }\n if (this.style.borders != null) {\n this.drawCellBorders(graphics, bounds);\n }\n return result;\n };\n /* tslint:enable */\n /**\n * Draws the `cell border` constructed by drawing lines.\n * @private\n */\n PdfGridCell.prototype.drawCellBorders = function (graphics, bounds) {\n if (this.row.grid.style.borderOverlapStyle === PdfBorderOverlapStyle.Inside) {\n bounds.x += this.style.borders.left.width;\n bounds.y += this.style.borders.top.width;\n bounds.width -= this.style.borders.right.width;\n bounds.height -= this.style.borders.bottom.width;\n }\n var p1 = new PointF(bounds.x, bounds.y + bounds.height);\n var p2 = new PointF(bounds.x, bounds.y);\n var pen = this.cellStyle.borders.left;\n if (this.cellStyle.borders.left.dashStyle === PdfDashStyle.Solid) {\n pen.lineCap = PdfLineCap.Square;\n }\n // SetTransparency(ref graphics, pen);\n graphics.drawLine(pen, p1, p2);\n p1 = new PointF(bounds.x + bounds.width, bounds.y);\n p2 = new PointF(bounds.x + bounds.width, bounds.y + bounds.height);\n pen = this.cellStyle.borders.right;\n if ((bounds.x + bounds.width) > (graphics.clientSize.width - (pen.width / 2))) {\n p1 = new PointF(graphics.clientSize.width - (pen.width / 2), bounds.y);\n p2 = new PointF(graphics.clientSize.width - (pen.width / 2), bounds.y + bounds.height);\n }\n if (this.cellStyle.borders.right.dashStyle === PdfDashStyle.Solid) {\n pen.lineCap = PdfLineCap.Square;\n }\n graphics.drawLine(pen, p1, p2);\n p1 = new PointF(bounds.x, bounds.y);\n p2 = new PointF(bounds.x + bounds.width, bounds.y);\n pen = this.cellStyle.borders.top;\n if (this.cellStyle.borders.top.dashStyle === PdfDashStyle.Solid) {\n pen.lineCap = PdfLineCap.Square;\n }\n graphics.drawLine(pen, p1, p2);\n p1 = new PointF(bounds.x + bounds.width, bounds.y + bounds.height);\n p2 = new PointF(bounds.x, bounds.y + bounds.height);\n pen = this.cellStyle.borders.bottom;\n // if ((bounds.y + bounds.height) > (graphics.clientSize.height - (pen.width / 2))) {\n // p1 = new PointF((bounds.x + bounds.width), (graphics.clientSize.height - (pen.width / 2)));\n // p2 = new PointF(bounds.x, (graphics.clientSize.height - (pen.width / 2)));\n // }\n if (this.cellStyle.borders.bottom.dashStyle === PdfDashStyle.Solid) {\n pen.lineCap = PdfLineCap.Square;\n }\n graphics.drawLine(pen, p1, p2);\n };\n /**\n * `Adjusts the outer layout area`.\n * @private\n */\n /* tslint:disable */\n PdfGridCell.prototype.adjustOuterLayoutArea = function (bounds, g) {\n var isHeader = false;\n var cellSpacing = this.row.grid.style.cellSpacing;\n if (cellSpacing > 0) {\n bounds = new RectangleF(bounds.x + cellSpacing, bounds.y + cellSpacing, bounds.width - cellSpacing, bounds.height - cellSpacing);\n }\n var currentColIndex = this.row.cells.indexOf(this);\n if (this.columnSpan > 1) {\n var span = this.columnSpan;\n var totalWidth = 0;\n for (var i = currentColIndex; i < currentColIndex + span; i++) {\n if (this.row.grid.style.allowHorizontalOverflow) {\n var width = void 0;\n var compWidth = this.row.grid.size.width < g.clientSize.width ? this.row.grid.size.width : g.clientSize.width;\n if (this.row.grid.size.width > g.clientSize.width) {\n width = bounds.x + totalWidth + this.row.grid.columns.getColumn(i).width;\n }\n else {\n width = totalWidth + this.row.grid.columns.getColumn(i).width;\n }\n if (width > compWidth) {\n break;\n }\n }\n totalWidth += this.row.grid.columns.getColumn(i).width;\n }\n totalWidth -= this.row.grid.style.cellSpacing;\n bounds.width = totalWidth;\n }\n if (this.rowSpan > 1 || this.row.rowSpanExists) {\n var span = this.rowSpan;\n var currentRowIndex = this.row.grid.rows.rowCollection.indexOf(this.row);\n if (currentRowIndex == -1) {\n currentRowIndex = this.row.grid.headers.indexOf(this.row);\n if (currentRowIndex != -1) {\n isHeader = true;\n }\n }\n var totalHeight = 0;\n var max = 0;\n for (var i = currentRowIndex; i < currentRowIndex + span; i++) {\n totalHeight += (isHeader ? this.row.grid.headers.getHeader(i).height : this.row.grid.rows.getRow(i).height);\n var row = this.row.grid.rows.getRow(i);\n var rowIndex = this.row.grid.rows.rowCollection.indexOf(row);\n }\n var cellIndex = this.row.cells.indexOf(this);\n totalHeight -= this.row.grid.style.cellSpacing;\n // if (this.row.cells.getCell(cellIndex).height > totalHeight && (!this.row.grid.rows.getRow((currentRowIndex + span) - 1).isRowHeightSet)) {\n // this.row.grid.rows.getRow((currentRowIndex + span) - 1).cells.getCell(cellIndex).rowSpanRemainingHeight = this.row.cells.getCell(cellIndex).height - totalHeight;\n // totalHeight = this.row.cells.getCell(cellIndex).height;\n // bounds.height = totalHeight;\n // } else {\n bounds.height = totalHeight;\n // }\n if (!this.row.rowMergeComplete) {\n bounds.height = totalHeight;\n }\n }\n return bounds;\n };\n /* tslint:enable */\n /**\n * Gets the `text font`.\n * @private\n */\n PdfGridCell.prototype.getTextFont = function () {\n if (typeof this.style.font !== 'undefined' && this.style.font != null) {\n return this.style.font;\n }\n else if (typeof this.row.style.font !== 'undefined' && this.row.style.font != null) {\n return this.row.style.font;\n }\n else if (typeof this.row.grid.style.font !== 'undefined' && this.row.grid.style.font != null) {\n return this.row.grid.style.font;\n }\n else {\n return PdfDocument.defaultFont;\n }\n };\n /**\n * Gets the `text brush`.\n * @private\n */\n PdfGridCell.prototype.getTextBrush = function () {\n if (typeof this.style.textBrush !== 'undefined' && this.style.textBrush != null) {\n return this.style.textBrush;\n }\n else if (typeof this.row.style.textBrush !== 'undefined' && this.row.style.textBrush != null) {\n return this.row.style.textBrush;\n }\n else {\n return this.row.grid.style.textBrush;\n }\n };\n /**\n * Gets the `text pen`.\n * @private\n */\n PdfGridCell.prototype.getTextPen = function () {\n if (typeof this.style.textPen !== 'undefined' && this.style.textPen != null) {\n return this.style.textPen;\n }\n else if (typeof this.row.style.textPen !== 'undefined' && this.row.style.textPen != null) {\n return this.row.style.textPen;\n }\n else {\n return this.row.grid.style.textPen;\n }\n };\n /**\n * Gets the `background brush`.\n * @private\n */\n PdfGridCell.prototype.getBackgroundBrush = function () {\n if (typeof this.style.backgroundBrush !== 'undefined' && this.style.backgroundBrush != null) {\n return this.style.backgroundBrush;\n }\n else if (typeof this.row.style.backgroundBrush !== 'undefined' && this.row.style.backgroundBrush != null) {\n return this.row.style.backgroundBrush;\n }\n else {\n return this.row.grid.style.backgroundBrush;\n }\n };\n /**\n * Gets the current `StringFormat`.\n * @private\n */\n PdfGridCell.prototype.getStringFormat = function () {\n if (typeof this.style.stringFormat !== 'undefined' && this.style.stringFormat != null) {\n return this.style.stringFormat;\n }\n else {\n return this.stringFormat;\n }\n };\n /**\n * Calculates the `height`.\n * @private\n */\n PdfGridCell.prototype.measureHeight = function () {\n // .. Calculate the cell text height.\n // .....Add border widths, cell spacings and paddings to the height.\n var width = this.calculateWidth();\n // //check whether the Current PdfGridCell has padding\n if (this.style.cellPadding == null || typeof this.style.cellPadding === 'undefined') {\n width -= (this.gridRow.grid.style.cellPadding.right + this.gridRow.grid.style.cellPadding.left);\n width -= (this.style.borders.left.width + this.style.borders.right.width);\n }\n else {\n width -= (this.style.cellPadding.right + this.style.cellPadding.left);\n width -= (this.style.borders.left.width + this.style.borders.right.width);\n }\n var height = 0;\n var layouter = new PdfStringLayouter();\n if (typeof this.objectValue === 'string' || typeof this.remainingString === 'string') {\n var currentValue = this.objectValue;\n /* tslint:disable */\n var slr = layouter.layout(currentValue, this.getTextFont(), this.stringFormat, new SizeF(width, 0), false, new SizeF(0, 0));\n /* tslint:enable */\n height += slr.actualSize.height;\n }\n else if (this.objectValue instanceof PdfImage || this.objectValue instanceof PdfBitmap) {\n height += this.objectValue.height;\n }\n else if (this.objectValue instanceof PdfTextWebLink) {\n var webLink = this.objectValue;\n /* tslint:disable */\n var slr = layouter.layout(webLink.text, webLink.font, webLink.stringFormat, new SizeF(width, 0), false, new SizeF(0, 0));\n /* tslint:enable */\n height += slr.actualSize.height;\n }\n height += (this.style.borders.top.width + this.style.borders.bottom.width) * 2;\n //Add padding top and bottom value to height\n if (this.style.cellPadding == null || typeof this.style.cellPadding === 'undefined') {\n height += (this.row.grid.style.cellPadding.top + this.row.grid.style.cellPadding.bottom);\n }\n else {\n height += (this.style.cellPadding.top + this.style.cellPadding.bottom);\n }\n height += this.row.grid.style.cellSpacing;\n return height;\n };\n /**\n * return the calculated `width` of the cell.\n * @private\n */\n PdfGridCell.prototype.calculateWidth = function () {\n var cellIndex = this.row.cells.indexOf(this);\n var columnSpan = this.columnSpan;\n var width = 0;\n for (var i = 0; i < columnSpan; i++) {\n width += this.row.grid.columns.getColumn(cellIndex + i).width;\n }\n return width;\n };\n return PdfGridCell;\n}());\nexport { PdfGridCell };\n/**\n * `PdfGridCellCollection` class provides access to an ordered,\n * strongly typed collection of 'PdfGridCell' objects.\n * @private\n */\nvar PdfGridCellCollection = /** @class */ (function () {\n //Constructor\n /**\n * Initializes a new instance of the `PdfGridCellCollection` class with the row.\n * @private\n */\n function PdfGridCellCollection(row) {\n /**\n * @hidden\n * @private\n */\n this.cells = [];\n this.gridRow = row;\n }\n //Properties\n /**\n * Gets the current `cell`.\n * @private\n */\n PdfGridCellCollection.prototype.getCell = function (index) {\n if (index < 0 || index >= this.count) {\n throw new Error('IndexOutOfRangeException');\n }\n return this.cells[index];\n };\n Object.defineProperty(PdfGridCellCollection.prototype, \"count\", {\n /**\n * Gets the cells `count`.[Read-Only].\n * @private\n */\n get: function () {\n return this.cells.length;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridCellCollection.prototype.add = function (cell) {\n if (typeof cell === 'undefined') {\n var tempcell = new PdfGridCell();\n this.add(tempcell);\n return cell;\n }\n else {\n cell.row = this.gridRow;\n this.cells.push(cell);\n }\n };\n /**\n * Returns the `index of` a particular cell in the collection.\n * @private\n */\n PdfGridCellCollection.prototype.indexOf = function (cell) {\n return this.cells.indexOf(cell);\n };\n return PdfGridCellCollection;\n}());\nexport { PdfGridCellCollection };\n","import { PdfGridCell } from './pdf-grid-cell';\nimport { PdfStringFormat } from './../../graphics/fonts/pdf-string-format';\n/**\n * `PdfGridColumn` class represents the schema of a column in a 'PdfGrid'.\n */\nvar PdfGridColumn = /** @class */ (function () {\n //Constructors\n /**\n * Initializes a new instance of the `PdfGridColumn` class with the parent grid.\n * @private\n */\n function PdfGridColumn(grid) {\n /**\n * The `width` of the column.\n * @default 0\n * @private\n */\n this.columnWidth = 0;\n this.grid = grid;\n }\n Object.defineProperty(PdfGridColumn.prototype, \"width\", {\n /**\n * Gets or sets the `width` of the 'PdfGridColumn'.\n * @private\n */\n get: function () {\n return this.columnWidth;\n },\n set: function (value) {\n this.isCustomWidth = true;\n this.columnWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridColumn.prototype, \"format\", {\n /**\n * Gets or sets the information about the text `formatting`.\n * @private\n */\n get: function () {\n if (this.stringFormat == null) {\n this.stringFormat = new PdfStringFormat(); //GetDefaultFormat();\n }\n return this.stringFormat;\n },\n set: function (value) {\n this.stringFormat = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridColumn;\n}());\nexport { PdfGridColumn };\n/**\n * `PdfGridColumnCollection` class provides access to an ordered,\n * strongly typed collection of 'PdfGridColumn' objects.\n * @private\n */\nvar PdfGridColumnCollection = /** @class */ (function () {\n //properties\n //Constructors\n /**\n * Initializes a new instance of the `PdfGridColumnCollection` class with the parent grid.\n * @private\n */\n function PdfGridColumnCollection(grid) {\n /**\n * @hidden\n * @private\n */\n this.internalColumns = [];\n /**\n * @hidden\n * @private\n */\n this.columnWidth = 0;\n this.grid = grid;\n this.internalColumns = [];\n }\n //Iplementation\n /**\n * `Add` a new column to the 'PdfGrid'.\n * @private\n */\n PdfGridColumnCollection.prototype.add = function (count) {\n // public add(column : PdfGridColumn) : void\n // public add(arg : number|PdfGridColumn) : void {\n // if (typeof arg === 'number') {\n for (var i = 0; i < count; i++) {\n this.internalColumns.push(new PdfGridColumn(this.grid));\n for (var index = 0; index < this.grid.rows.count; index++) {\n var row = this.grid.rows.getRow(index);\n var cell = new PdfGridCell();\n cell.value = '';\n row.cells.add(cell);\n }\n }\n // } else {\n // let column : PdfGridColumn = new PdfGridColumn(this.grid);\n // this.columns.push(column);\n // return column;\n // }\n };\n Object.defineProperty(PdfGridColumnCollection.prototype, \"count\", {\n /**\n * Gets the `number of columns` in the 'PdfGrid'.[Read-Only].\n * @private\n */\n get: function () {\n return this.internalColumns.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridColumnCollection.prototype, \"width\", {\n /**\n * Gets the `widths`.\n * @private\n */\n get: function () {\n if (this.columnWidth === 0) {\n this.columnWidth = this.measureColumnsWidth();\n }\n if (this.grid.initialWidth !== 0 && this.columnWidth !== this.grid.initialWidth && !this.grid.style.allowHorizontalOverflow) {\n this.columnWidth = this.grid.initialWidth;\n this.grid.isPageWidth = true;\n }\n return this.columnWidth;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridColumnCollection.prototype, \"columns\", {\n /**\n * Gets the `array of PdfGridColumn`.[Read-Only]\n * @private\n */\n get: function () {\n return this.internalColumns;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the `PdfGridColumn` from the specified index.[Read-Only]\n * @private\n */\n PdfGridColumnCollection.prototype.getColumn = function (index) {\n if (index >= 0 && index <= this.columns.length) {\n return this.columns[index];\n }\n else {\n throw Error('can not get the column from the index: ' + index);\n }\n };\n //Implementation\n /**\n * `Calculates the column widths`.\n * @private\n */\n PdfGridColumnCollection.prototype.measureColumnsWidth = function () {\n var totalWidth = 0;\n // this.m_grid.measureColumnsWidth();\n for (var i = 0, count = this.internalColumns.length; i < count; i++) {\n totalWidth += this.internalColumns[i].width;\n }\n return totalWidth;\n };\n /**\n * Gets the `widths of the columns`.\n * @private\n */\n PdfGridColumnCollection.prototype.getDefaultWidths = function (totalWidth) {\n var widths = [];\n var summ = 0.0;\n var subFactor = this.count;\n for (var i = 0; i < this.count; i++) {\n if (this.grid.isPageWidth && totalWidth >= 0 && !this.internalColumns[i].isCustomWidth) {\n this.internalColumns[i].width = 0;\n }\n else {\n widths[i] = this.internalColumns[i].width;\n if (this.internalColumns[i].width > 0 && this.internalColumns[i].isCustomWidth) {\n totalWidth -= this.internalColumns[i].width;\n subFactor--;\n }\n else {\n widths[i] = 0;\n }\n }\n }\n for (var i = 0; i < this.count; i++) {\n var width = totalWidth / subFactor;\n if (widths[i] <= 0) {\n widths[i] = width;\n }\n }\n return widths;\n };\n return PdfGridColumnCollection;\n}());\nexport { PdfGridColumnCollection };\n","import { PdfGridCell, PdfGridCellCollection } from './pdf-grid-cell';\nimport { PdfGridRowStyle } from './styles/style';\n/**\n * `PdfGridRow` class provides customization of the settings for the particular row.\n */\nvar PdfGridRow = /** @class */ (function () {\n //Constructor\n /**\n * Initializes a new instance of the `PdfGridRow` class with the parent grid.\n * @private\n */\n function PdfGridRow(grid) {\n /**\n * Stores the index of the overflowing row.\n * @private\n */\n this.gridRowOverflowIndex = 0;\n /**\n * Check whether the row height `is set explicitly`.\n * @default false\n * @private\n */\n this.isRowHeightSet = false;\n /**\n * Check weather the row merge `is completed` or not.\n * @default true\n * @private\n */\n this.isRowMergeComplete = true;\n this.pdfGrid = grid;\n }\n Object.defineProperty(PdfGridRow.prototype, \"rowSpanExists\", {\n //Properties\n /**\n * Gets or sets a value indicating [`row span exists`].\n * @private\n */\n get: function () {\n return this.bRowSpanExists;\n },\n set: function (value) {\n this.bRowSpanExists = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"cells\", {\n /**\n * Gets the `cells` from the selected row.[Read-Only].\n * @private\n */\n get: function () {\n if (this.gridCells == null) {\n this.gridCells = new PdfGridCellCollection(this);\n }\n return this.gridCells;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"grid\", {\n /**\n * Gets or sets the parent `grid`.\n * @private\n */\n get: function () {\n return this.pdfGrid;\n },\n set: function (value) {\n this.pdfGrid = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"style\", {\n /**\n * Gets or sets the row `style`.\n * @private\n */\n get: function () {\n if (typeof this.rowStyle === 'undefined') {\n this.rowStyle = new PdfGridRowStyle();\n this.rowStyle.setParent(this);\n }\n return this.rowStyle;\n },\n set: function (value) {\n this.rowStyle = value;\n for (var i = 0; i < this.cells.count; i++) {\n this.cells.getCell(i).style.borders = value.border;\n if (typeof value.font !== 'undefined') {\n this.cells.getCell(i).style.font = value.font;\n }\n if (typeof value.backgroundBrush !== 'undefined') {\n this.cells.getCell(i).style.backgroundBrush = value.backgroundBrush;\n }\n if (typeof value.textBrush !== 'undefined') {\n this.cells.getCell(i).style.textBrush = value.textBrush;\n }\n if (typeof value.textPen !== 'undefined') {\n this.cells.getCell(i).style.textPen = value.textPen;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"rowBreakHeight\", {\n /**\n * `Height` of the row yet to be drawn after split.\n * @private\n */\n get: function () {\n if (typeof this.gridRowBreakHeight === 'undefined') {\n this.gridRowBreakHeight = 0;\n }\n return this.gridRowBreakHeight;\n },\n set: function (value) {\n this.gridRowBreakHeight = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"rowOverflowIndex\", {\n get: function () {\n return this.gridRowOverflowIndex;\n },\n set: function (value) {\n this.gridRowOverflowIndex = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"height\", {\n /**\n * Gets or sets the `height` of the row.\n * @private\n */\n get: function () {\n if (!this.isRowHeightSet) {\n this.rowHeight = this.measureHeight();\n }\n return this.rowHeight;\n },\n set: function (value) {\n this.rowHeight = value;\n this.isRowHeightSet = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"columnSpanExists\", {\n /**\n * Gets or sets a value indicating [`column span exists`].\n * @private\n */\n get: function () {\n return this.bColumnSpanExists;\n },\n set: function (value) {\n this.bColumnSpanExists = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"rowMergeComplete\", {\n /**\n * Check whether the Row `has row span or row merge continue`.\n * @private\n */\n get: function () {\n return this.isRowMergeComplete;\n },\n set: function (value) {\n this.isRowMergeComplete = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRow.prototype, \"rowIndex\", {\n /**\n * Returns `index` of the row.\n * @private\n */\n get: function () {\n return this.grid.rows.rowCollection.indexOf(this);\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Calculates the height`.\n * @private\n */\n PdfGridRow.prototype.measureHeight = function () {\n var rowSpanRemainingHeight = 0;\n var rowHeight;\n var maxHeight = 0;\n // if(this.cells.getCell(0).RowSpan > 1) {\n // rowHeight=0;\n // } else {\n rowHeight = this.cells.getCell(0).height;\n // }\n for (var i = 0; i < this.cells.count; i++) {\n var cell = this.cells.getCell(i);\n //get the maximum rowspan remaining height.\n if (cell.rowSpanRemainingHeight > rowSpanRemainingHeight) {\n rowSpanRemainingHeight = cell.rowSpanRemainingHeight;\n }\n //skip the cell if row spanned.\n // if (cell.IsRowMergeContinue)\n // continue; \n // if (!cell.IsRowMergeContinue)\n this.rowMergeComplete = false;\n if (cell.rowSpan > 1) {\n if (maxHeight < cell.height) {\n maxHeight = cell.height;\n }\n continue;\n }\n rowHeight = Math.max(rowHeight, cell.height);\n }\n if (rowHeight === 0) {\n rowHeight = maxHeight;\n }\n else if (rowSpanRemainingHeight > 0) {\n rowHeight += rowSpanRemainingHeight;\n }\n return rowHeight;\n };\n return PdfGridRow;\n}());\nexport { PdfGridRow };\n/**\n * `PdfGridRowCollection` class provides access to an ordered, strongly typed collection of 'PdfGridRow' objects.\n * @private\n */\nvar PdfGridRowCollection = /** @class */ (function () {\n // Constructor\n /**\n * Initializes a new instance of the `PdfGridRowCollection` class with the parent grid.\n * @private\n */\n function PdfGridRowCollection(grid) {\n this.rows = [];\n this.grid = grid;\n }\n Object.defineProperty(PdfGridRowCollection.prototype, \"count\", {\n //Properties\n /**\n * Gets the number of header in the `PdfGrid`.[Read-Only].\n * @private\n */\n get: function () {\n return this.rows.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridRowCollection.prototype, \"rowCollection\", {\n //Implementation\n /**\n * Return the row collection of the `grid`.\n * @private\n */\n get: function () {\n return this.rows;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridRowCollection.prototype.addRow = function (arg) {\n if (typeof arg === 'undefined') {\n var temprow = new PdfGridRow(this.grid);\n this.addRow(temprow);\n return temprow;\n }\n else {\n arg.style.setBackgroundBrush(this.grid.style.backgroundBrush);\n arg.style.setFont(this.grid.style.font);\n arg.style.setTextBrush(this.grid.style.textBrush);\n arg.style.setTextPen(this.grid.style.textPen);\n if (arg.cells.count === 0) {\n for (var i = 0; i < this.grid.columns.count; i++) {\n arg.cells.add(new PdfGridCell());\n }\n }\n this.rows.push(arg);\n }\n };\n /**\n * Return the row by index.\n * @private\n */\n PdfGridRowCollection.prototype.getRow = function (index) {\n return this.rows[index];\n };\n return PdfGridRowCollection;\n}());\nexport { PdfGridRowCollection };\n/**\n * `PdfGridHeaderCollection` class provides customization of the settings for the header.\n * @private\n */\nvar PdfGridHeaderCollection = /** @class */ (function () {\n //constructor\n /**\n * Initializes a new instance of the `PdfGridHeaderCollection` class with the parent grid.\n * @private\n */\n function PdfGridHeaderCollection(grid) {\n /**\n * The array to store the `rows` of the grid header.\n * @private\n */\n this.rows = [];\n this.grid = grid;\n this.rows = [];\n }\n //Properties\n /**\n * Gets a 'PdfGridRow' object that represents the `header` row in a 'PdfGridHeaderCollection' control.[Read-Only].\n * @private\n */\n PdfGridHeaderCollection.prototype.getHeader = function (index) {\n // if (index < 0 || index >= Count) {\n // throw new IndexOutOfRangeException();\n // }\n return (this.rows[index]);\n };\n Object.defineProperty(PdfGridHeaderCollection.prototype, \"count\", {\n /**\n * Gets the `number of header` in the 'PdfGrid'.[Read-Only]\n * @private\n */\n get: function () {\n return this.rows.length;\n },\n enumerable: true,\n configurable: true\n });\n PdfGridHeaderCollection.prototype.add = function (arg) {\n if (typeof arg === 'number') {\n var row = void 0;\n for (var i = 0; i < arg; i++) {\n row = new PdfGridRow(this.grid);\n for (var j = 0; j < this.grid.columns.count; j++) {\n row.cells.add(new PdfGridCell());\n }\n this.rows.push(row);\n }\n return this.rows;\n }\n else {\n this.rows.push(arg);\n }\n };\n PdfGridHeaderCollection.prototype.indexOf = function (row) {\n return this.rows.indexOf(row);\n };\n return PdfGridHeaderCollection;\n}());\nexport { PdfGridHeaderCollection };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfGrid.ts class for EJ2-PDF\n */\nimport { PdfGridColumnCollection } from './pdf-grid-column';\nimport { PdfGridRowCollection, PdfGridHeaderCollection } from './pdf-grid-row';\nimport { RectangleF, SizeF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfLayoutElement } from './../../graphics/figures/layout-element';\nimport { PdfLayoutResult, PdfLayoutFormat } from './../../graphics/figures/base/element-layouter';\nimport { PdfBorders } from './styles/pdf-borders';\nimport { PdfGridStyle } from './styles/style';\nimport { PdfLayoutType } from './../../graphics/figures/enum';\nimport { PdfHorizontalOverflowType } from './styles/style';\nimport { TemporaryDictionary } from './../../collections/object-object-pair/dictionary';\nimport { PdfStringFormat } from './../../graphics/fonts/pdf-string-format';\n/**\n * `PdfGridLayoutFormat` class represents a flexible grid that consists of columns and rows.\n */\nvar PdfGridLayoutFormat = /** @class */ (function (_super) {\n __extends(PdfGridLayoutFormat, _super);\n /**\n * Initializes a new instance of the `PdfGridLayoutFormat` class.\n * @private\n */\n function PdfGridLayoutFormat(baseFormat) {\n var _this = this;\n if (typeof baseFormat === 'undefined') {\n _this = _super.call(this) || this;\n }\n else {\n _this = _super.call(this, baseFormat) || this;\n }\n return _this;\n }\n return PdfGridLayoutFormat;\n}(PdfLayoutFormat));\nexport { PdfGridLayoutFormat };\nvar PdfGrid = /** @class */ (function (_super) {\n __extends(PdfGrid, _super);\n //constructor\n /**\n * Initialize a new instance for `PdfGrid` class.\n * @private\n */\n function PdfGrid() {\n var _this = _super.call(this) || this;\n /**\n * @hidden\n * @private\n */\n _this.gridSize = new SizeF(0, 0);\n /**\n * @hidden\n * @private\n */\n _this.isRearranged = false;\n /**\n * @hidden\n * @private\n */\n _this.pageBounds = new RectangleF();\n /**\n * @hidden\n * @private\n */\n _this.listOfNavigatePages = [];\n /**\n * @hidden\n * @private\n */\n _this.flag = true;\n /**\n * @hidden\n * @private\n */\n _this.columnRanges = [];\n /**\n * @hidden\n * @private\n */\n _this.currentLocation = new PointF(0, 0);\n /**\n * @hidden\n * @private\n */\n _this.breakRow = true;\n return _this;\n }\n Object.defineProperty(PdfGrid.prototype, \"raiseBeginCellDraw\", {\n //Properties\n /**\n * Gets a value indicating whether the `start cell layout event` should be raised.\n * @private\n */\n get: function () {\n return (typeof this.beginCellDraw !== 'undefined' && typeof this.beginCellDraw !== null);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"raiseEndCellDraw\", {\n /**\n * Gets a value indicating whether the `end cell layout event` should be raised.\n * @private\n */\n get: function () {\n return (typeof this.endCellDraw !== 'undefined' && typeof this.endCellDraw !== null);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"raiseBeginPageLayout\", {\n /**\n * Gets a value indicating whether the `start page layout event` should be raised.\n * @private\n */\n get: function () {\n return (typeof this.beginPageLayout !== 'undefined');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"raiseEndPageLayout\", {\n /**\n * Gets a value indicating whether the `ending page layout event` should be raised.\n * @private\n */\n get: function () {\n return (typeof this.endPageLayout !== 'undefined');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"repeatHeader\", {\n /**\n * Gets or sets a value indicating whether to `repeat header`.\n * @private\n */\n get: function () {\n if (this.bRepeatHeader == null || typeof this.bRepeatHeader === 'undefined') {\n this.bRepeatHeader = false;\n }\n return this.bRepeatHeader;\n },\n set: function (value) {\n this.bRepeatHeader = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"allowRowBreakAcrossPages\", {\n /**\n * Gets or sets a value indicating whether to split or cut rows that `overflow a page`.\n * @private\n */\n get: function () {\n return this.breakRow;\n },\n set: function (value) {\n this.breakRow = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"columns\", {\n /**\n * Gets the `column` collection of the PdfGrid.[Read-Only]\n * @private\n */\n get: function () {\n if (this.gridColumns == null || typeof this.gridColumns === 'undefined') {\n this.gridColumns = new PdfGridColumnCollection(this);\n }\n return this.gridColumns;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"rows\", {\n /**\n * Gets the `row` collection from the PdfGrid.[Read-Only]\n * @private\n */\n get: function () {\n if (this.gridRows == null) {\n this.gridRows = new PdfGridRowCollection(this);\n }\n return this.gridRows;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"headers\", {\n /**\n * Gets the `headers` collection from the PdfGrid.[Read-Only]\n * @private\n */\n get: function () {\n if (this.gridHeaders == null || typeof this.gridHeaders === 'undefined') {\n this.gridHeaders = new PdfGridHeaderCollection(this);\n }\n return this.gridHeaders;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"initialWidth\", {\n /**\n * Indicating `initial width` of the page.\n * @private\n */\n get: function () {\n return this.gridInitialWidth;\n },\n set: function (value) {\n this.gridInitialWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"style\", {\n /**\n * Gets or sets the `grid style`.\n * @private\n */\n get: function () {\n if (this.gridStyle == null) {\n this.gridStyle = new PdfGridStyle();\n }\n return this.gridStyle;\n },\n set: function (value) {\n if (this.gridStyle == null) {\n this.gridStyle = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"isPageWidth\", {\n /**\n * Gets a value indicating whether the grid column width is considered to be `page width`.\n * @private\n */\n get: function () {\n return this.pageWidth;\n },\n set: function (value) {\n this.pageWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"isChildGrid\", {\n /**\n * Gets or set if grid `is nested grid`.\n * @private\n */\n get: function () {\n return this.childGrid;\n },\n set: function (value) {\n this.childGrid = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGrid.prototype, \"size\", {\n /**\n * Gets the `size`.\n * @private\n */\n get: function () {\n if (this.gridSize.width === 0 && this.gridSize.height === 0) {\n this.gridSize = this.measure();\n return this.gridSize;\n }\n else {\n return this.gridSize;\n }\n },\n set: function (value) {\n this.gridSize = value;\n },\n enumerable: true,\n configurable: true\n });\n PdfGrid.prototype.draw = function (arg1, arg2, arg3, arg4) {\n if (arg2 instanceof PointF && typeof arg2.width === 'undefined' && typeof arg3 === 'undefined') {\n return this.drawHelper(arg1, arg2.x, arg2.y);\n }\n else if (typeof arg2 === 'number' && typeof arg3 === 'number' && typeof arg4 === 'undefined') {\n return this.drawHelper(arg1, arg2, arg3, null);\n }\n else if (arg2 instanceof RectangleF && typeof arg2.width !== 'undefined' && typeof arg3 === 'undefined') {\n return this.drawHelper(arg1, arg2, null);\n }\n else if (arg2 instanceof PointF && typeof arg2.width === 'undefined' && arg3 instanceof PdfLayoutFormat) {\n return this.drawHelper(arg1, arg2.x, arg2.y, arg3);\n }\n else if (typeof arg2 === 'number' && typeof arg3 === 'number' && (arg4 instanceof PdfLayoutFormat || arg4 == null)) {\n var width = (arg1.graphics.clientSize.width - arg2);\n var layoutRectangle = new RectangleF(arg2, arg3, width, 0);\n return this.drawHelper(arg1, layoutRectangle, arg4);\n }\n else if (arg2 instanceof RectangleF && typeof arg2.width !== 'undefined' && typeof arg3 === 'boolean') {\n return this.drawHelper(arg1, arg2, null);\n }\n else {\n return this.drawHelper(arg1, arg2, arg3);\n }\n };\n /**\n * `measures` this instance.\n * @private\n */\n PdfGrid.prototype.measure = function () {\n var height = 0;\n var width = this.columns.width;\n for (var i = 0; i < this.headers.count; i++) {\n var row = this.headers.getHeader(i);\n height += row.height;\n }\n for (var i = 0; i < this.rows.count; i++) {\n var row = this.rows.getRow(i);\n height += row.height;\n }\n return new SizeF(width, height);\n };\n PdfGrid.prototype.layout = function (param, isGridLayouter) {\n if (typeof isGridLayouter === 'undefined') {\n this.setSpan();\n this.layoutFormat = param.format;\n this.gridLocation = param.bounds;\n var result = this.layout(param, true);\n return result;\n }\n else {\n return this.layoutInternal(param);\n }\n };\n PdfGrid.prototype.setSpan = function () {\n var colSpan;\n var rowSpan = 1;\n var currentCellIndex;\n var currentRowIndex = 0;\n var rowCount = this.headers.count;\n for (var i = 0; i < rowCount; i++) {\n var row = this.headers.getHeader(i);\n var colCount = row.cells.count;\n for (var j = 0; j < colCount; j++) {\n var cell = row.cells.getCell(j);\n //Skip setting span map for already coverted rows/columns.\n if (!cell.isCellMergeContinue && !cell.isRowMergeContinue && (cell.columnSpan > 1 || cell.rowSpan > 1)) {\n if (cell.columnSpan + j > row.cells.count) {\n throw new Error('Invalid span specified at row ' + j.toString() + ' column ' + i.toString());\n }\n if (cell.rowSpan + i > this.headers.count) {\n throw new Error('Invalid span specified at Header ' + j.toString() + ' column ' + i.toString());\n }\n // if (this.rows.count !== 0 && cell.rowSpan + i > this.rows.count) {\n // throw new Error('Invalid span specified at row ' + j.toString() + ' column ' + i.toString());\n // }\n if (cell.columnSpan > 1 && cell.rowSpan > 1) {\n colSpan = cell.columnSpan;\n rowSpan = cell.rowSpan;\n currentCellIndex = j;\n currentRowIndex = i;\n cell.isCellMergeStart = true;\n cell.isRowMergeStart = true;\n //Set Column merges for first row\n while (colSpan > 1) {\n currentCellIndex++;\n row.cells.getCell(currentCellIndex).isCellMergeContinue = true;\n row.cells.getCell(currentCellIndex).isRowMergeContinue = true;\n row.cells.getCell(currentCellIndex).rowSpan = rowSpan;\n colSpan--;\n }\n currentCellIndex = j;\n colSpan = cell.columnSpan;\n //Set Row Merges and column merges foreach subsequent rows.\n while (rowSpan > 1) {\n currentRowIndex++;\n this.headers.getHeader(currentRowIndex).cells.getCell(j).isRowMergeContinue = true;\n this.headers.getHeader(currentRowIndex).cells.getCell(currentCellIndex).isRowMergeContinue = true;\n rowSpan--;\n while (colSpan > 1) {\n currentCellIndex++;\n this.headers.getHeader(currentRowIndex).cells.getCell(currentCellIndex).isCellMergeContinue = true;\n this.headers.getHeader(currentRowIndex).cells.getCell(currentCellIndex).isRowMergeContinue = true;\n colSpan--;\n }\n colSpan = cell.columnSpan;\n currentCellIndex = j;\n }\n }\n else if (cell.columnSpan > 1 && cell.rowSpan === 1) {\n colSpan = cell.columnSpan;\n currentCellIndex = j;\n cell.isCellMergeStart = true;\n //Set Column merges.\n while (colSpan > 1) {\n currentCellIndex++;\n row.cells.getCell(currentCellIndex).isCellMergeContinue = true;\n colSpan--;\n }\n }\n else if (cell.columnSpan === 1 && cell.rowSpan > 1) {\n rowSpan = cell.rowSpan;\n currentRowIndex = i;\n //Set row Merges.\n while (rowSpan > 1) {\n currentRowIndex++;\n this.headers.getHeader(currentRowIndex).cells.getCell(j).isRowMergeContinue = true;\n rowSpan--;\n }\n }\n }\n }\n }\n };\n /**\n * Gets the `format`.\n * @private\n */\n PdfGrid.prototype.getFormat = function (format) {\n var f = format;\n return f;\n };\n /**\n * `Layouts` the element.\n * @private\n */\n PdfGrid.prototype.layoutInternal = function (param) {\n this.initialWidth = param.bounds.width;\n var format = this.getFormat(param.format);\n this.currentPage = param.page;\n if (this.currentPage !== null) {\n var pageHeight = this.currentPage.getClientSize().height;\n var pageWidth = this.currentPage.getClientSize().width;\n this.currentPageBounds = this.currentPage.getClientSize();\n }\n else {\n throw Error('Can not set page as null');\n }\n this.currentGraphics = this.currentPage.graphics;\n var index = 0;\n index = this.currentGraphics.page.section.indexOf(this.currentGraphics.page);\n this.listOfNavigatePages.push(index);\n this.currentBounds = new RectangleF(new PointF(param.bounds.x, param.bounds.y), this.currentGraphics.clientSize);\n if (this.rows.count !== 0) {\n this.currentBounds.width = (param.bounds.width > 0) ? param.bounds.width :\n (this.currentBounds.width - this.rows.getRow(0).cells.getCell(0).style.borders.left.width / 2);\n }\n else if (this.headers.count !== 0) {\n this.currentBounds.width = param.bounds.width;\n }\n else {\n throw Error('Please add row or header into grid');\n }\n this.startLocation = new PointF(param.bounds.x, param.bounds.y);\n if (param.bounds.height > 0 && !this.isChildGrid) {\n this.currentBounds.height = param.bounds.height;\n }\n this.hType = this.style.horizontalOverflowType;\n if (!this.style.allowHorizontalOverflow) {\n this.measureColumnsWidth(this.currentBounds);\n this.columnRanges.push([0, this.columns.count - 1]);\n }\n else {\n this.measureColumnsWidth();\n this.determineColumnDrawRanges();\n }\n var result = this.layoutOnPage(param);\n return result;\n };\n PdfGrid.prototype.measureColumnsWidth = function (bounds) {\n if (typeof bounds !== 'undefined') {\n var widths = this.columns.getDefaultWidths(bounds.width);\n var tempWidth = this.columns.getColumn(0).width;\n for (var i = 0, count = this.columns.count; i < count; i++) {\n this.columns.getColumn(i).width = widths[i];\n }\n }\n else {\n var widths = [];\n var cellWidth = 0;\n var cellWidths = 0;\n if (this.headers.count > 0) {\n var colCount = this.headers.getHeader(0).cells.count;\n var rowCount = this.headers.count;\n for (var i = 0; i < colCount; i++) {\n cellWidth = 0;\n for (var j = 0; j < rowCount; j++) {\n var rowWidth = Math.min(this.initialWidth, this.headers.getHeader(j).cells.getCell(i).width);\n cellWidth = Math.max(cellWidth, rowWidth);\n }\n widths[i] = cellWidth;\n }\n }\n else {\n var colCount = this.rows.getRow(0).cells.count;\n var rowCount = this.rows.count;\n for (var i = 0; i < colCount; i++) {\n cellWidth = 0;\n for (var j = 0; j < rowCount; j++) {\n var rowWidth = Math.min(this.initialWidth, this.rows.getRow(j).cells.getCell(i).width);\n cellWidth = Math.max(cellWidth, rowWidth);\n }\n widths[i] = cellWidth;\n }\n }\n cellWidth = 0;\n for (var i = 0, colCount = this.columns.count; i < colCount; i++) {\n for (var j = 0, rowCount = this.rows.count; j < rowCount; j++) {\n if (this.rows.getRow(j).cells.getCell(i).columnSpan == 1 || this.rows.getRow(j).cells.getCell(i).value !== null || this.rows.getRow(j).cells.getCell(i).rowSpan >= 1) {\n if (this.rows.getRow(j).cells.getCell(i).value !== null &&\n !this.rows.getRow(j).grid.style.allowHorizontalOverflow) {\n var value = this.rows.getRow(j).grid.style.cellPadding.right +\n this.rows.getRow(j).grid.style.cellPadding.left\n + this.rows.getRow(j).cells.getCell(i).style.borders.left.width / 2\n + this.gridLocation.x;\n this.rows.getRow(j).cells.getCell(i).value.initialWidth = this.initialWidth - value;\n }\n var rowWidth = 0;\n var internalWidth = this.rows.getRow(j).cells.getCell(i).width;\n internalWidth += this.rows.getRow(j).cells.getCell(i).style.borders.left.width;\n internalWidth += this.rows.getRow(j).cells.getCell(i).style.borders.right.width;\n var internalHeight = this.rows.getRow(j).cells.getCell(i).height;\n internalHeight += (this.rows.getRow(j).cells.getCell(i).style.borders.top.width);\n internalHeight += (this.rows.getRow(j).cells.getCell(i).style.borders.bottom.width);\n var isCorrectWidth = (internalWidth + this.gridLocation.x) > this.currentGraphics.clientSize.width;\n var isCorrectHeight = (internalHeight + this.gridLocation.y) > this.currentGraphics.clientSize.height;\n if (isCorrectWidth || isCorrectHeight) {\n throw Error('Image size exceeds client size of the page. Can not insert this image');\n }\n rowWidth = Math.min(this.initialWidth, this.rows.getRow(j).cells.getCell(i).width);\n cellWidth = Math.max(widths[i], Math.max(cellWidth, rowWidth));\n cellWidth = Math.max(this.columns.getColumn(i).width, cellWidth);\n }\n }\n widths[i] = cellWidth;\n cellWidth = 0;\n }\n for (var i = 0, count = this.columns.count; i < count; i++) {\n this.columns.getColumn(i).width = widths[i];\n }\n }\n };\n /* tslint:enable */\n /**\n * `Determines the column draw ranges`.\n * @private\n */\n PdfGrid.prototype.determineColumnDrawRanges = function () {\n var startColumn = 0;\n var endColumn = 0;\n var cellWidths = 0;\n var availableWidth = this.currentGraphics.clientSize.width - this.currentBounds.x;\n for (var i = 0; i < this.columns.count; i++) {\n cellWidths += this.columns.getColumn(i).width;\n if (cellWidths >= availableWidth) {\n var subWidths = 0;\n for (var j = startColumn; j <= i; j++) {\n subWidths += this.columns.getColumn(j).width;\n if (subWidths > availableWidth) {\n break;\n }\n endColumn = j;\n }\n this.columnRanges.push([startColumn, endColumn]);\n startColumn = endColumn + 1;\n endColumn = startColumn;\n cellWidths = (endColumn <= i) ? this.columns.getColumn(i).width : 0;\n }\n }\n // if (startColumn !== this.columns.Count) {\n this.columnRanges.push([startColumn, this.columns.count - 1]);\n // }\n };\n /**\n * `Layouts the on page`.\n * @private\n */\n PdfGrid.prototype.layoutOnPage = function (param) {\n /* tslint:disable */\n this.pageBounds.x = param.bounds.x;\n this.pageBounds.y = param.bounds.y;\n this.pageBounds.height = param.bounds.height;\n var format = this.getFormat(param.format);\n var endArgs = null;\n var result = null;\n var layoutedPages = new TemporaryDictionary();\n var startPage = param.page;\n var isParentCell = false;\n var cellBounds = [];\n for (var index = 0; index < this.columnRanges.length; index++) {\n var range = this.columnRanges[index];\n this.cellStartIndex = range[0];\n this.cellEndIndex = range[1];\n var returnObject = this.raiseBeforePageLayout(this.currentPage, this.currentBounds, this.currentRowIndex);\n this.currentBounds = returnObject.currentBounds;\n this.currentRowIndex = returnObject.currentRowIndex;\n // if (returnObject.returnValue) {\n // result = new PdfGridLayoutResult(this.currentPage, this.currentBounds);\n // break;\n // }\n //Draw Headers.\n var drawHeader = void 0;\n for (var i_1 = 0; i_1 < this.headers.count; i_1++) {\n var row = this.headers.getHeader(i_1);\n var headerHeight = this.currentBounds.y;\n // RowLayoutResult\n var headerResult = this.drawRow(row);\n // if (headerHeight === this.currentBounds.y) {\n // drawHeader = true;\n // if (PdfGrid.repeatRowIndex === -1) {\n // PdfGrid.repeatRowIndex = this.rows.getRow.indexOf(row);\n // }\n // } else {\n drawHeader = false;\n // }\n }\n var i = 0;\n var length_1 = this.rows.count;\n var repeatRow = void 0;\n var startingHeight = 0;\n var flag = true;\n //Here is to draw parent Grid and Cells\n cellBounds = [];\n //Draw row by row with the specified cell range.\n for (var j = 0; j < this.rows.count; j++) {\n var row = this.rows.getRow(j);\n i++;\n this.currentRowIndex = i - 1;\n var originalHeight = this.currentBounds.y;\n startPage = this.currentPage;\n PdfGrid.repeatRowIndex = -1;\n var rowResult = this.drawRow(row);\n cellBounds.push(rowResult.bounds.width);\n //if height remains same, it is understood that row is not drawn in the page\n if (originalHeight === this.currentBounds.y) {\n repeatRow = true;\n PdfGrid.repeatRowIndex = this.rows.rowCollection.indexOf(row);\n }\n else {\n repeatRow = false;\n PdfGrid.repeatRowIndex = -1;\n }\n if (!rowResult.isFinish && startPage !== null && format.layout !== PdfLayoutType.OnePage && repeatRow) {\n // During pagination, cell position is maintained here.\n this.startLocation.x = this.currentBounds.x;\n var isAddNextPage = false;\n this.currentPage = this.getNextPage(format);\n if ((param.format !== null) && !param.format.usePaginateBounds && param.bounds !== null &&\n param.bounds.height > 0 && !this.isChildGrid) {\n this.currentBounds.height = param.bounds.height;\n }\n if ((param.format !== null) && !param.format.usePaginateBounds && param.bounds !== null &&\n param.bounds.y > 0 && !this.isChildGrid) {\n this.currentBounds.y = param.bounds.y;\n }\n this.startLocation.y = this.currentBounds.y;\n if ((format.paginateBounds.x === format.paginateBounds.y) &&\n (format.paginateBounds.y === format.paginateBounds.height) &&\n (format.paginateBounds.height === format.paginateBounds.width) && (format.paginateBounds.width === 0)) {\n this.currentBounds.x += this.startLocation.x;\n }\n if (this.currentBounds.x === PdfBorders.default.left.width / 2) {\n this.currentBounds.y += this.startLocation.x;\n }\n if (this.repeatHeader) {\n for (var i_2 = 0; i_2 < this.headers.count; i_2++) {\n var header = this.headers.getHeader(i_2);\n this.drawRow(header);\n }\n }\n this.drawRow(row);\n if (this.currentPage !== null && !layoutedPages.containsKey(this.currentPage)) {\n layoutedPages.add(this.currentPage, range);\n }\n }\n }\n var isPdfGrid = false;\n var maximumCellBoundsWidth = 0;\n if (cellBounds.length > 0) {\n maximumCellBoundsWidth = cellBounds[0];\n }\n var largeNavigatePage = [[0, 0]];\n if (!isPdfGrid && cellBounds.length > 0) {\n for (var c = 0; c < i - 1; c++) {\n if (maximumCellBoundsWidth < cellBounds[c]) {\n maximumCellBoundsWidth = cellBounds[c];\n }\n }\n this.rowLayoutBoundsWidth = maximumCellBoundsWidth;\n }\n else {\n this.rowLayoutBoundsWidth = largeNavigatePage[0][1];\n }\n if (this.columnRanges.length - 1 !== index && this.columnRanges.length > 1 && format.layout !== PdfLayoutType.OnePage) {\n this.currentPage = this.getNextPage(format);\n if ((format.paginateBounds.x === format.paginateBounds.y) && (format.paginateBounds.y === format.paginateBounds.height)\n && (format.paginateBounds.height === format.paginateBounds.width) && (format.paginateBounds.width === 0)) {\n this.currentBounds.x += this.startLocation.x;\n this.currentBounds.y += this.startLocation.y;\n // this.currentBounds.height = this.pageBounds.height;\n }\n }\n }\n result = this.getLayoutResult();\n if (this.style.allowHorizontalOverflow && this.style.horizontalOverflowType == PdfHorizontalOverflowType.NextPage) {\n this.reArrangePages(layoutedPages);\n }\n this.raisePageLayouted(result);\n return result;\n }; /* tslint:enable */\n /**\n * Gets the `next page`.\n * @private\n */\n PdfGrid.prototype.getNextPage = function (format) {\n var section = this.currentPage.section;\n var nextPage = null;\n var index = section.indexOf(this.currentPage);\n this.flag = false;\n if (index === section.count - 1) {\n nextPage = section.add();\n }\n else {\n nextPage = section.getPages()[index + 1];\n }\n this.currentGraphics = nextPage.graphics;\n var pageindex = this.currentGraphics.page.section.indexOf(this.currentGraphics.page);\n if (!(this.listOfNavigatePages.indexOf(pageindex) !== -1)) {\n this.listOfNavigatePages.push(pageindex);\n }\n this.currentBounds = new RectangleF(new PointF(0, 0), nextPage.getClientSize());\n // if ((format.PaginateBounds.x !== format.PaginateBounds.y) && (format.PaginateBounds.y !== format.PaginateBounds.height)\n // && (format.PaginateBounds.height !== format.PaginateBounds.width) && (format.PaginateBounds.width !== 0)) {\n // this.currentBounds.x = format.PaginateBounds.x;\n // this.currentBounds.y = format.PaginateBounds.y;\n // this.currentBounds.height = format.PaginateBounds.height;\n // }\n return nextPage;\n };\n /**\n * Gets the `layout result`.\n * @private\n */\n PdfGrid.prototype.getLayoutResult = function () {\n var bounds;\n /* tslint:disable */\n bounds = new RectangleF(this.startLocation, new SizeF(this.currentBounds.width, this.currentBounds.y - this.startLocation.y));\n /* tslint:enable */\n return new PdfGridLayoutResult(this.currentPage, bounds);\n };\n /**\n * `Recalculate row height` for the split cell to be drawn.\n * @private\n */\n PdfGrid.prototype.ReCalculateHeight = function (row, height) {\n var newHeight = 0.0;\n // for (let i : number = this.cellStartIndex; i <= this.cellEndIndex; i++) {\n // if (!(row.cells.getCell(i).RemainingString === null || row.cells.getCell(i).RemainingString === '' ||\n // typeof row.cells.getCell(i).RemainingString === 'undefined')) {\n // newHeight = Math.max(newHeight, row.cells.getCell(i).MeasureHeight());\n // }\n // }\n return Math.max(height, newHeight);\n };\n /**\n * `Raises BeforePageLayout event`.\n * @private\n */\n PdfGrid.prototype.raiseBeforePageLayout = function (currentPage, currentBounds, currentRow) {\n var cancel = false;\n if (this.raiseBeginPageLayout) {\n var args = new PdfGridBeginPageLayoutEventArgs(currentBounds, currentPage, currentRow);\n this.beginPageLayout(this, args);\n // if (currentBounds !== args.Bounds) {\n // this.isChanged = true;\n // this.currentLocation = new PointF(args.Bounds.x, args.Bounds.y);\n // this.measureColumnsWidth(new RectangleF(new PointF(args.Bounds.x, args.Bounds.y) ,\n // new SizeF(args.Bounds.width + args.Bounds.x ,\n // args.Bounds.height)));\n // }\n cancel = args.cancel;\n currentBounds = args.bounds;\n currentRow = args.startRowIndex;\n }\n return { returnValue: cancel, currentBounds: currentBounds, currentRowIndex: currentRow };\n };\n /**\n * `Raises PageLayout event` if needed.\n * @private\n */\n PdfGrid.prototype.raisePageLayouted = function (result) {\n var args = new PdfGridEndPageLayoutEventArgs(result);\n if (this.raiseEndPageLayout) {\n this.endPageLayout(this, args);\n }\n return args;\n };\n PdfGrid.prototype.drawRow = function (row, result, height) {\n if (typeof result === 'undefined') {\n //.. Check if required space available.\n //.....If the row conains spans which falls through more than one page, then draw the row to next page.\n var result_1 = new RowLayoutResult();\n var rowHeightWithSpan = 0;\n var location_1 = new PointF(0, 0);\n var size = new SizeF(0, 0);\n var isHeader = false;\n if (row.rowSpanExists) {\n var maxSpan = 0;\n var currRowIndex = this.rows.rowCollection.indexOf(row);\n if (currRowIndex === -1) {\n currRowIndex = this.headers.indexOf(row);\n if (currRowIndex !== -1) {\n isHeader = true;\n }\n }\n for (var i = 0; i < row.cells.count; i++) {\n var cell = row.cells.getCell(i);\n maxSpan = Math.max(maxSpan, cell.rowSpan);\n }\n for (var i = currRowIndex; i < currRowIndex + maxSpan; i++) {\n rowHeightWithSpan += (isHeader ? this.headers.getHeader(i).height : this.rows.getRow(i).height);\n }\n var rowMaxHeight = rowHeightWithSpan;\n for (var i = 0; i < row.cells.count; i++) {\n rowMaxHeight = rowMaxHeight > row.cells.getCell(i).height ? rowMaxHeight : row.cells.getCell(i).height;\n }\n var nextRow = this.headers.getHeader(this.headers.indexOf(row) + 1);\n var flag = true;\n for (var i = 0; i < nextRow.cells.count; i++) {\n if (nextRow.cells.getCell(i).value !== '' && nextRow.cells.getCell(i).value !== undefined) {\n flag = false;\n break;\n }\n }\n if ((rowMaxHeight > rowHeightWithSpan) && flag) {\n row.height += (rowMaxHeight - rowHeightWithSpan);\n }\n }\n var calculatedHeight = row.rowBreakHeight > 0.0 ? row.rowBreakHeight : row.height;\n if (this.currentBounds.y + calculatedHeight > this.currentPageBounds.height ||\n this.currentBounds.y + calculatedHeight > (this.currentBounds.height + this.startLocation.y) ||\n this.currentBounds.y + rowHeightWithSpan > this.currentPageBounds.height) {\n // If a row is repeated and still cannot fit in page, proceed draw.\n // if (PdfGrid.repeatRowIndex > -1 && PdfGrid.repeatRowIndex === row.RowIndex) {\n // if (this.AllowRowBreakAcrossPages) {\n // result.IsFinish = true;\n // // this.DrawRowWithBreak(ref result, row, height);\n // } else {\n // result.IsFinish = false;\n // this.drawRow(row, result, height);\n // }\n // } else {\n result_1.isFinish = false;\n // }\n }\n else {\n result_1.isFinish = true;\n this.drawRow(row, result_1, calculatedHeight);\n }\n return result_1;\n }\n else {\n var skipcell = false;\n var location_2 = new PointF(this.currentBounds.x, this.currentBounds.y);\n result.bounds = new RectangleF(location_2, new SizeF(0, 0));\n height = this.ReCalculateHeight(row, height);\n for (var i = this.cellStartIndex; i <= this.cellEndIndex; i++) {\n var cancelSpans = ((i > this.cellEndIndex + 1) && (row.cells.getCell(i).columnSpan > 1));\n // let cancelSpans : boolean = false;\n if (!cancelSpans) {\n for (var j = 1; j < row.cells.getCell(i).columnSpan; j++) {\n row.cells.getCell(i + j).isCellMergeContinue = true;\n }\n }\n var size = new SizeF(this.columns.getColumn(i).width, height);\n // if (size.width > this.currentGraphics.ClientSize.width) {\n // size.width = this.currentGraphics.ClientSize.width;\n // }\n // if (this.IsChildGrid && this.style.AllowHorizontalOverflow) {\n // if (size.width >= this.currentGraphics.ClientSize.width) {\n // size.width -= 2 * this.currentBounds.x;\n // }\n // }\n /* tslint:disable */\n if (!this.CheckIfDefaultFormat(this.columns.getColumn(i).format) &&\n this.CheckIfDefaultFormat(row.cells.getCell(i).stringFormat)) {\n row.cells.getCell(i).stringFormat = this.columns.getColumn(i).format;\n }\n var cellstyle = row.cells.getCell(i).style;\n var tempValue = ((typeof row.cells.getCell(i).value === 'string' &&\n row.cells.getCell(i).value !== null) ? row.cells.getCell(i).value : '');\n row.cells.getCell(i).style = this.RaiseBeforeCellDraw(this.currentGraphics, this.currentRowIndex, i, new RectangleF(location_2, size), tempValue, cellstyle);\n // if (!skipcell) {\n // let stringResult : PdfStringLayoutResult = row.cells.getCell(i).draw(this.currentGraphics, new RectangleF(location, size), cancelSpans);\n var stringResult = row.cells.getCell(i).draw(this.currentGraphics, new RectangleF(location_2, size), cancelSpans);\n if (row.grid.style.allowHorizontalOverflow && (row.cells.getCell(i).columnSpan > this.cellEndIndex || i + row.cells.getCell(i).columnSpan > this.cellEndIndex + 1) && this.cellEndIndex < row.cells.count - 1) {\n row.rowOverflowIndex = this.cellEndIndex;\n }\n if (row.grid.style.allowHorizontalOverflow && (row.rowOverflowIndex > 0 && (row.cells.getCell(i).columnSpan > this.cellEndIndex || i + row.cells.getCell(i).columnSpan > this.cellEndIndex + 1)) && row.cells.getCell(i).columnSpan - this.cellEndIndex + i - 1 > 0) {\n row.cells.getCell(row.rowOverflowIndex + 1).value = stringResult !== null ? (stringResult.remainder !== undefined) ? stringResult.remainder : '' : '';\n row.cells.getCell(row.rowOverflowIndex + 1).stringFormat = row.cells.getCell(i).stringFormat;\n row.cells.getCell(row.rowOverflowIndex + 1).style = row.cells.getCell(i).style;\n row.cells.getCell(row.rowOverflowIndex + 1).columnSpan = row.cells.getCell(i).columnSpan - this.cellEndIndex + i - 1;\n }\n // }\n /* tslint:enable */\n tempValue = ((typeof row.cells.getCell(i).value === 'string' &&\n row.cells.getCell(i).value !== null) ? row.cells.getCell(i).value : '');\n this.RaiseAfterCellDraw(this.currentGraphics, this.currentRowIndex, i, new RectangleF(location_2, size), tempValue, row.cells.getCell(i).style);\n location_2.x += this.columns.getColumn(i).width;\n }\n // if (!row.RowMergeComplete || row.isRowHeightSet) {\n this.currentBounds.y += height;\n // }\n result.bounds = new RectangleF(new PointF(result.bounds.x, result.bounds.y), new SizeF(location_2.x, location_2.y));\n }\n };\n /**\n * Checks if the given format `is default format` or not.\n * @private\n */\n PdfGrid.prototype.CheckIfDefaultFormat = function (format) {\n var defaultFormat = new PdfStringFormat();\n return (format.alignment === defaultFormat.alignment && format.characterSpacing === defaultFormat.characterSpacing &&\n format.clipPath === defaultFormat.clipPath && format.firstLineIndent === defaultFormat.firstLineIndent &&\n format.horizontalScalingFactor === defaultFormat.horizontalScalingFactor &&\n format.lineAlignment === defaultFormat.lineAlignment\n && format.lineLimit === defaultFormat.lineLimit && format.lineSpacing === defaultFormat.lineSpacing &&\n format.measureTrailingSpaces === defaultFormat.measureTrailingSpaces && format.noClip === defaultFormat.noClip &&\n format.paragraphIndent === defaultFormat.paragraphIndent && format.rightToLeft === defaultFormat.rightToLeft &&\n format.subSuperScript === defaultFormat.subSuperScript && format.wordSpacing === defaultFormat.wordSpacing &&\n format.wordWrap === defaultFormat.wordWrap);\n };\n /**\n * `Raises BeforeCellDraw event`.\n * @private\n */\n PdfGrid.prototype.RaiseBeforeCellDraw = function (graphics, rowIndex, cellIndex, bounds, value, style) {\n var args = null;\n if (this.raiseBeginCellDraw) {\n args = new PdfGridBeginCellDrawEventArgs(graphics, rowIndex, cellIndex, bounds, value, style);\n this.beginCellDraw(this, args);\n style = args.style;\n }\n return style;\n };\n /**\n * `Raises AfterCellDraw event`.\n * @private\n */\n PdfGrid.prototype.RaiseAfterCellDraw = function (graphics, rowIndex, cellIndex, bounds, value, cellstyle) {\n var args = null;\n if (this.raiseEndCellDraw) {\n args = new PdfGridEndCellDrawEventArgs(graphics, rowIndex, cellIndex, bounds, value, cellstyle);\n this.endCellDraw(this, args);\n }\n };\n /**\n * `Rearranges the pages`.\n * @private\n */\n PdfGrid.prototype.reArrangePages = function (layoutedPages) {\n var document = this.currentPage.document;\n var pages = [];\n var keys = layoutedPages.keys();\n var values = layoutedPages.values();\n for (var i = 0; i < keys.length; i++) {\n var page = keys[i];\n page.section = null;\n pages.push(page);\n document.pages.remove(page);\n }\n /* tslint:disable */\n for (var i = 0; i < layoutedPages.size(); i++) {\n var count = 0;\n for (var j = i, count_1 = (layoutedPages.size() / this.columnRanges.length); j < layoutedPages.size(); j += count_1) {\n var page = pages[j];\n if (document.pages.indexOf(page) === -1) {\n document.pages.add(page);\n }\n }\n }\n /* tslint:enable */\n };\n /**\n * @hidden\n * @private\n */\n PdfGrid.repeatRowIndex = -1;\n return PdfGrid;\n}(PdfLayoutElement));\nexport { PdfGrid };\n/**\n * `GridCellEventArgs` class is alternate for grid events.\n */\nvar GridCellEventArgs = /** @class */ (function () {\n // Constructors\n /**\n * Initialize a new instance for `GridCellEventArgs` class.\n * @private\n */\n function GridCellEventArgs(graphics, rowIndex, cellIndex, bounds, value) {\n this.gridRowIndex = rowIndex;\n this.gridCellIndex = cellIndex;\n this.internalValue = value;\n this.gridBounds = bounds;\n this.pdfGraphics = graphics;\n }\n Object.defineProperty(GridCellEventArgs.prototype, \"rowIndex\", {\n // Properties\n /**\n * Gets the value of current `row index`.\n * @private\n */\n get: function () {\n return this.gridRowIndex;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GridCellEventArgs.prototype, \"cellIndex\", {\n /**\n * Gets the value of current `cell index`.\n * @private\n */\n get: function () {\n return this.gridCellIndex;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GridCellEventArgs.prototype, \"value\", {\n /**\n * Gets the actual `value` of current cell.\n * @private\n */\n get: function () {\n return this.internalValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GridCellEventArgs.prototype, \"bounds\", {\n /**\n * Gets the `bounds` of current cell.\n * @private\n */\n get: function () {\n return this.gridBounds;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GridCellEventArgs.prototype, \"graphics\", {\n /**\n * Gets the instance of `current graphics`.\n * @private\n */\n get: function () {\n return this.pdfGraphics;\n },\n enumerable: true,\n configurable: true\n });\n return GridCellEventArgs;\n}());\nexport { GridCellEventArgs };\n/**\n * `PdfGridBeginCellDrawEventArgs` class is alternate for begin cell draw events.\n */\nvar PdfGridBeginCellDrawEventArgs = /** @class */ (function (_super) {\n __extends(PdfGridBeginCellDrawEventArgs, _super);\n // Constructors\n /**\n * Initializes a new instance of the `StartCellLayoutEventArgs` class.\n * @private\n */\n function PdfGridBeginCellDrawEventArgs(graphics, rowIndex, cellIndex, bounds, value, style) {\n var _this = _super.call(this, graphics, rowIndex, cellIndex, bounds, value) || this;\n _this.style = style;\n return _this;\n }\n Object.defineProperty(PdfGridBeginCellDrawEventArgs.prototype, \"skip\", {\n // Properties\n /**\n * Gets or sets a value indicating whether the value of this cell should be `skipped`.\n * @private\n */\n get: function () {\n return this.bSkip;\n },\n set: function (value) {\n this.bSkip = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGridBeginCellDrawEventArgs.prototype, \"style\", {\n /**\n * Gets or sets a `style` value of the cell.\n * @private\n */\n get: function () {\n return this.cellStyle;\n },\n set: function (value) {\n this.cellStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridBeginCellDrawEventArgs;\n}(GridCellEventArgs));\nexport { PdfGridBeginCellDrawEventArgs };\n/**\n * `PdfGridEndCellDrawEventArgs` class is alternate for end cell draw events.\n */\nvar PdfGridEndCellDrawEventArgs = /** @class */ (function (_super) {\n __extends(PdfGridEndCellDrawEventArgs, _super);\n // Constructors\n /**\n * Initializes a new instance of the `PdfGridEndCellLayoutEventArgs` class.\n * @private\n */\n function PdfGridEndCellDrawEventArgs(graphics, rowIndex, cellIndex, bounds, value, style) {\n var _this = _super.call(this, graphics, rowIndex, cellIndex, bounds, value) || this;\n _this.cellStyle = style;\n return _this;\n }\n Object.defineProperty(PdfGridEndCellDrawEventArgs.prototype, \"style\", {\n // Propertise\n /**\n * Get the `PdfGridCellStyle`.\n * @private\n */\n get: function () {\n return this.cellStyle;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridEndCellDrawEventArgs;\n}(GridCellEventArgs));\nexport { PdfGridEndCellDrawEventArgs };\n/**\n * `PdfGridCancelEventArgs` class is alternate for cancel events.\n */\nvar PdfCancelEventArgs = /** @class */ (function () {\n function PdfCancelEventArgs() {\n }\n Object.defineProperty(PdfCancelEventArgs.prototype, \"cancel\", {\n // Properties\n /**\n * Gets and Sets the value of `cancel`.\n * @private\n */\n get: function () {\n return this.isCancel;\n },\n set: function (value) {\n this.isCancel = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfCancelEventArgs;\n}());\nexport { PdfCancelEventArgs };\n/**\n * `BeginPageLayoutEventArgs` class is alternate for begin page layout events.\n */\nvar BeginPageLayoutEventArgs = /** @class */ (function (_super) {\n __extends(BeginPageLayoutEventArgs, _super);\n // Constructors\n /**\n * Initializes a new instance of the `BeginPageLayoutEventArgs` class with the specified rectangle and page.\n * @private\n */\n function BeginPageLayoutEventArgs(bounds, page) {\n var _this = _super.call(this) || this;\n _this.bounds = bounds;\n _this.pdfPage = page;\n return _this;\n }\n Object.defineProperty(BeginPageLayoutEventArgs.prototype, \"bounds\", {\n // Properties\n /**\n * Gets or sets value that indicates the lay outing `bounds` on the page.\n * @private\n */\n get: function () {\n return this.cellBounds;\n },\n set: function (value) {\n this.cellBounds = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BeginPageLayoutEventArgs.prototype, \"page\", {\n /**\n * Gets the `page` where the lay outing should start.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n enumerable: true,\n configurable: true\n });\n return BeginPageLayoutEventArgs;\n}(PdfCancelEventArgs));\nexport { BeginPageLayoutEventArgs };\n/**\n * `EndPageLayoutEventArgs` class is alternate for end page layout events.\n */\nvar EndPageLayoutEventArgs = /** @class */ (function (_super) {\n __extends(EndPageLayoutEventArgs, _super);\n // Constructors\n /**\n * Initializes a new instance of the `EndPageLayoutEventArgs` class. with the specified 'PdfLayoutResult'.\n * @private\n */\n function EndPageLayoutEventArgs(result) {\n var _this = _super.call(this) || this;\n _this.layoutResult = result;\n return _this;\n }\n Object.defineProperty(EndPageLayoutEventArgs.prototype, \"result\", {\n // Properties\n /**\n * Gets the lay outing `result` of the page.\n * @private\n */\n get: function () {\n return this.layoutResult;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EndPageLayoutEventArgs.prototype, \"nextPage\", {\n /**\n * Gets or sets a value indicating the `next page` where the element should be layout.\n * @private\n */\n get: function () {\n return this.nextPdfPage;\n },\n set: function (value) {\n this.nextPdfPage = value;\n },\n enumerable: true,\n configurable: true\n });\n return EndPageLayoutEventArgs;\n}(PdfCancelEventArgs));\nexport { EndPageLayoutEventArgs };\n/**\n * `PdfGridBeginPageLayoutEventArgs` class is alternate for begin page layout events.\n */\nvar PdfGridBeginPageLayoutEventArgs = /** @class */ (function (_super) {\n __extends(PdfGridBeginPageLayoutEventArgs, _super);\n // Constructors\n /**\n * Initialize a new instance of `PdfGridBeginPageLayoutEventArgs` class.\n * @private\n */\n function PdfGridBeginPageLayoutEventArgs(bounds, page, startRow) {\n var _this = _super.call(this, bounds, page) || this;\n _this.startRow = startRow;\n return _this;\n }\n Object.defineProperty(PdfGridBeginPageLayoutEventArgs.prototype, \"startRowIndex\", {\n // Properties\n /**\n * Gets the `start row index`.\n * @private\n */\n get: function () {\n return this.startRow;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGridBeginPageLayoutEventArgs;\n}(BeginPageLayoutEventArgs));\nexport { PdfGridBeginPageLayoutEventArgs };\n/**\n * `PdfGridEndPageLayoutEventArgs` class is alternate for begin page layout events.\n */\nvar PdfGridEndPageLayoutEventArgs = /** @class */ (function (_super) {\n __extends(PdfGridEndPageLayoutEventArgs, _super);\n // Constructors\n /**\n * Initialize a new instance of `PdfGridEndPageLayoutEventArgs` class.\n * @private\n */\n function PdfGridEndPageLayoutEventArgs(result) {\n return _super.call(this, result) || this;\n }\n return PdfGridEndPageLayoutEventArgs;\n}(EndPageLayoutEventArgs));\nexport { PdfGridEndPageLayoutEventArgs };\n/**\n * `RowLayoutResult` class to store layout result of rows.\n */\nvar RowLayoutResult = /** @class */ (function () {\n //Constructors\n /**\n * Initializes a new instance of the `RowLayoutResult` class.\n * @private\n */\n function RowLayoutResult() {\n this.layoutedBounds = new RectangleF(0, 0, 0, 0);\n }\n Object.defineProperty(RowLayoutResult.prototype, \"isFinish\", {\n /**\n * Gets or sets a value indicating whether this instance `is finish`.\n * @private\n */\n get: function () {\n return this.bIsFinished;\n },\n set: function (value) {\n this.bIsFinished = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RowLayoutResult.prototype, \"bounds\", {\n /**\n * Gets or sets the `bounds`.\n * @private\n */\n get: function () {\n return this.layoutedBounds;\n },\n set: function (value) {\n this.layoutedBounds = value;\n },\n enumerable: true,\n configurable: true\n });\n return RowLayoutResult;\n}());\nexport { RowLayoutResult };\n/**\n * `PdfGridLayoutResult` class represents the results of the PdfGrid including bounds and resultant page.\n */\nvar PdfGridLayoutResult = /** @class */ (function (_super) {\n __extends(PdfGridLayoutResult, _super);\n // Constructor\n /**\n * Initializes a new instance of the `PdfGridLayoutResult` class with the current page and bounds.\n * @private\n */\n function PdfGridLayoutResult(page, bounds) {\n return _super.call(this, page, bounds) || this;\n }\n return PdfGridLayoutResult;\n}(PdfLayoutResult));\nexport { PdfGridLayoutResult };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { Theme } from '../model/theme';\n/**\n * Defines the appearance of the connectors\n */\nvar Connector = /** @class */ (function (_super) {\n __extends(Connector, _super);\n function Connector() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Line')\n ], Connector.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Connector.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], Connector.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Connector.prototype, \"length\", void 0);\n __decorate([\n Property('')\n ], Connector.prototype, \"dashArray\", void 0);\n return Connector;\n}(ChildProperty));\nexport { Connector };\n/**\n * Configures the fonts in charts.\n */\nvar Font = /** @class */ (function (_super) {\n __extends(Font, _super);\n function Font() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('16px')\n ], Font.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], Font.prototype, \"color\", void 0);\n __decorate([\n Property('Segoe UI')\n ], Font.prototype, \"fontFamily\", void 0);\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontWeight\", void 0);\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontStyle\", void 0);\n __decorate([\n Property(1)\n ], Font.prototype, \"opacity\", void 0);\n __decorate([\n Property('Center')\n ], Font.prototype, \"textAlignment\", void 0);\n __decorate([\n Property('Trim')\n ], Font.prototype, \"textOverflow\", void 0);\n return Font;\n}(ChildProperty));\nexport { Font };\n/**\n * Configures the borders in the chart.\n */\nvar Border = /** @class */ (function (_super) {\n __extends(Border, _super);\n function Border() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Border.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], Border.prototype, \"width\", void 0);\n return Border;\n}(ChildProperty));\nexport { Border };\n/**\n * Configures the chart area.\n */\nvar ChartArea = /** @class */ (function (_super) {\n __extends(ChartArea, _super);\n function ChartArea() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({}, Border)\n ], ChartArea.prototype, \"border\", void 0);\n __decorate([\n Property('transparent')\n ], ChartArea.prototype, \"background\", void 0);\n __decorate([\n Property(1)\n ], ChartArea.prototype, \"opacity\", void 0);\n return ChartArea;\n}(ChildProperty));\nexport { ChartArea };\n/**\n * Configures the chart margins.\n */\nvar Margin = /** @class */ (function (_super) {\n __extends(Margin, _super);\n function Margin() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(10)\n ], Margin.prototype, \"left\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"right\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"top\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"bottom\", void 0);\n return Margin;\n}(ChildProperty));\nexport { Margin };\n/**\n * Configures the animation behavior for chart series.\n */\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], Animation.prototype, \"enable\", void 0);\n __decorate([\n Property(1000)\n ], Animation.prototype, \"duration\", void 0);\n __decorate([\n Property(0)\n ], Animation.prototype, \"delay\", void 0);\n return Animation;\n}(ChildProperty));\nexport { Animation };\n/** @private */\nvar Indexes = /** @class */ (function (_super) {\n __extends(Indexes, _super);\n function Indexes() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], Indexes.prototype, \"series\", void 0);\n __decorate([\n Property(0)\n ], Indexes.prototype, \"point\", void 0);\n return Indexes;\n}(ChildProperty));\nexport { Indexes };\n/**\n * Column series rounded corner options\n */\nvar CornerRadius = /** @class */ (function (_super) {\n __extends(CornerRadius, _super);\n function CornerRadius() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], CornerRadius.prototype, \"topLeft\", void 0);\n __decorate([\n Property(0)\n ], CornerRadius.prototype, \"topRight\", void 0);\n __decorate([\n Property(0)\n ], CornerRadius.prototype, \"bottomLeft\", void 0);\n __decorate([\n Property(0)\n ], CornerRadius.prototype, \"bottomRight\", void 0);\n return CornerRadius;\n}(ChildProperty));\nexport { CornerRadius };\n/**\n * @private\n */\nvar Index = /** @class */ (function () {\n function Index(seriesIndex, pointIndex) {\n this.series = seriesIndex;\n this.point = pointIndex;\n }\n return Index;\n}());\nexport { Index };\n/**\n * Configures the Empty Points of series\n */\nvar EmptyPointSettings = /** @class */ (function (_super) {\n __extends(EmptyPointSettings, _super);\n function EmptyPointSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], EmptyPointSettings.prototype, \"fill\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 0 }, Border)\n ], EmptyPointSettings.prototype, \"border\", void 0);\n __decorate([\n Property('Gap')\n ], EmptyPointSettings.prototype, \"mode\", void 0);\n return EmptyPointSettings;\n}(ChildProperty));\nexport { EmptyPointSettings };\n/**\n * Configures the ToolTips in the chart.\n */\nvar TooltipSettings = /** @class */ (function (_super) {\n __extends(TooltipSettings, _super);\n function TooltipSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], TooltipSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(false)\n ], TooltipSettings.prototype, \"shared\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"header\", void 0);\n __decorate([\n Property(0.75)\n ], TooltipSettings.prototype, \"opacity\", void 0);\n __decorate([\n Complex(Theme.tooltipLabelFont, Font)\n ], TooltipSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], TooltipSettings.prototype, \"enableAnimation\", void 0);\n __decorate([\n Complex({ color: '#cccccc', width: 0.5 }, Border)\n ], TooltipSettings.prototype, \"border\", void 0);\n return TooltipSettings;\n}(ChildProperty));\nexport { TooltipSettings };\n","/**\n * Numeric Range.\n * @private\n */\nvar DoubleRange = /** @class */ (function () {\n function DoubleRange(start, end) {\n /*\n if (!isNaN(start) && !isNaN(end)) {\n this.mIsEmpty = true;\n } else {\n this.mIsEmpty = false;\n }*/\n if (start < end) {\n this.mStart = start;\n this.mEnd = end;\n }\n else {\n this.mStart = end;\n this.mEnd = start;\n }\n }\n Object.defineProperty(DoubleRange.prototype, \"start\", {\n //private mIsEmpty: boolean;\n /** @private */\n get: function () {\n return this.mStart;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DoubleRange.prototype, \"end\", {\n /** @private */\n get: function () {\n return this.mEnd;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DoubleRange.prototype, \"delta\", {\n /*\n get isEmpty(): boolean {\n return this.mIsEmpty;\n }*/\n /** @private */\n get: function () {\n return (this.mEnd - this.mStart);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DoubleRange.prototype, \"median\", {\n /** @private */\n get: function () {\n return this.mStart + (this.mEnd - this.mStart) / 2;\n },\n enumerable: true,\n configurable: true\n });\n return DoubleRange;\n}());\nexport { DoubleRange };\n","import { getMinPointsDelta } from '../../common/utils/helper';\nimport { DoubleRange } from '../utils/double-range';\nimport { withIn, logBase } from '../../common/utils/helper';\n/**\n * Numeric module is used to render numeric axis.\n */\nvar Double = /** @class */ (function () {\n /**\n * Constructor for the dateTime module.\n * @private\n */\n function Double(chart) {\n this.chart = chart;\n }\n /**\n * Numeric Nice Interval for the axis.\n * @private\n */\n Double.prototype.calculateNumericNiceInterval = function (axis, delta, size) {\n var actualDesiredIntervalsCount = axis.getActualDesiredIntervalsCount(size);\n var niceInterval = delta / actualDesiredIntervalsCount;\n if (axis.desiredIntervals != null) {\n return niceInterval;\n }\n var minInterval = Math.pow(10, Math.floor(logBase(niceInterval, 10)));\n for (var _i = 0, _a = axis.intervalDivs; _i < _a.length; _i++) {\n var interval = _a[_i];\n var currentInterval = minInterval * interval;\n if (actualDesiredIntervalsCount < (delta / currentInterval)) {\n break;\n }\n niceInterval = currentInterval;\n }\n return niceInterval;\n };\n /**\n * Actual Range for the axis.\n * @private\n */\n Double.prototype.getActualRange = function (axis, size) {\n this.initializeDoubleRange(axis);\n axis.actualRange.interval = axis.interval || this.calculateNumericNiceInterval(axis, axis.doubleRange.delta, size);\n axis.actualRange.min = axis.doubleRange.start;\n axis.actualRange.max = axis.doubleRange.end;\n };\n /**\n * Range for the axis.\n * @private\n */\n Double.prototype.initializeDoubleRange = function (axis) {\n //Axis Min\n if (axis.minimum !== null) {\n this.min = axis.minimum;\n }\n else if (this.min === null || this.min === Number.POSITIVE_INFINITY) {\n this.min = 0;\n }\n // Axis Max\n if (axis.maximum !== null) {\n this.max = axis.maximum;\n }\n else if (this.max === null || this.max === Number.NEGATIVE_INFINITY) {\n this.max = 5;\n }\n if (this.min === this.max) {\n this.max = axis.valueType.indexOf('Category') > -1 ? this.max : this.min + 1;\n }\n axis.doubleRange = new DoubleRange(this.min, this.max);\n axis.actualRange = {};\n };\n /**\n * The function to calculate the range and labels for the axis.\n * @return {void}\n * @private\n */\n Double.prototype.calculateRangeAndInterval = function (size, axis) {\n this.calculateRange(axis, size);\n this.getActualRange(axis, size);\n this.applyRangePadding(axis, size);\n this.calculateVisibleLabels(axis, this.chart);\n };\n /**\n * Calculate Range for the axis.\n * @private\n */\n Double.prototype.calculateRange = function (axis, size) {\n /*! Generate axis range */\n var series;\n this.min = null;\n this.max = null;\n if (!axis.setRange()) {\n for (var _i = 0, _a = axis.series; _i < _a.length; _i++) {\n var series_1 = _a[_i];\n if (!series_1.visible) {\n continue;\n }\n this.paddingInterval = 0;\n if ((series_1.type.indexOf('Column') > -1 && axis.orientation === 'Horizontal')\n || (series_1.type.indexOf('Bar') > -1 && axis.orientation === 'Vertical')) {\n if ((series_1.xAxis.valueType === 'Double' || series_1.xAxis.valueType === 'DateTime')\n && series_1.xAxis.rangePadding === 'Auto') {\n this.paddingInterval = getMinPointsDelta(series_1.xAxis, axis.series) / 2;\n }\n }\n //For xRange\n if (axis.orientation === 'Horizontal') {\n if (this.chart.requireInvertedAxis) {\n this.findMinMax(series_1.yMin, series_1.yMax);\n }\n else {\n this.findMinMax(series_1.xMin - this.paddingInterval, series_1.xMax + this.paddingInterval);\n }\n }\n // For yRange\n if (axis.orientation === 'Vertical') {\n if (this.chart.requireInvertedAxis) {\n this.findMinMax(series_1.xMin - this.paddingInterval, series_1.xMax + this.paddingInterval);\n }\n else {\n this.findMinMax(series_1.yMin, series_1.yMax);\n }\n }\n }\n }\n };\n Double.prototype.findMinMax = function (min, max) {\n if (this.min === null || this.min > min) {\n this.min = min;\n }\n if (this.max === null || this.max < max) {\n this.max = max;\n }\n };\n /**\n * Apply padding for the range.\n * @private\n */\n Double.prototype.applyRangePadding = function (axis, size) {\n var range;\n var start = axis.actualRange.min;\n var end = axis.actualRange.max;\n if (!axis.setRange()) {\n var interval = axis.actualRange.interval;\n var padding = axis.getRangePadding(this.chart);\n if (padding === 'Additional' || padding === 'Round') {\n this.findAdditional(axis, start, end, interval);\n }\n else if (padding === 'Normal') {\n this.findNormal(axis, start, end, interval, size);\n }\n else {\n this.updateActualRange(axis, start, end, interval);\n }\n }\n axis.actualRange.delta = axis.actualRange.max - axis.actualRange.min;\n this.calculateVisibleRange(size, axis);\n };\n Double.prototype.updateActualRange = function (axis, minimum, maximum, interval) {\n axis.actualRange.min = axis.minimum != null ? axis.minimum : minimum;\n axis.actualRange.max = axis.maximum != null ? axis.maximum : maximum;\n axis.actualRange.interval = axis.interval != null ? axis.interval : interval;\n };\n Double.prototype.findAdditional = function (axis, start, end, interval) {\n var minimum;\n var maximum;\n minimum = Math.floor(start / interval) * interval;\n maximum = Math.ceil(end / interval) * interval;\n if (axis.rangePadding === 'Additional') {\n minimum -= interval;\n maximum += interval;\n }\n this.updateActualRange(axis, minimum, maximum, interval);\n };\n Double.prototype.findNormal = function (axis, start, end, interval, size) {\n var remaining;\n var minimum;\n var maximum;\n var startValue = start;\n if (start < 0) {\n startValue = 0;\n minimum = start + (start / 20);\n remaining = interval + (minimum % interval);\n if ((0.365 * interval) >= remaining) {\n minimum -= interval;\n }\n if (minimum % interval < 0) {\n minimum = (minimum - interval) - (minimum % interval);\n }\n }\n else {\n minimum = start < ((5.0 / 6.0) * end) ? 0 : (start - (end - start) / 2);\n if (minimum % interval > 0) {\n minimum -= (minimum % interval);\n }\n }\n maximum = (end > 0) ? (end + (end - startValue) / 20) : (end - (end - startValue) / 20);\n remaining = interval - (maximum % interval);\n if ((0.365 * interval) >= remaining) {\n maximum += interval;\n }\n if (maximum % interval > 0) {\n maximum = (maximum + interval) - (maximum % interval);\n }\n axis.doubleRange = new DoubleRange(minimum, maximum);\n if (minimum === 0) {\n interval = this.calculateNumericNiceInterval(axis, axis.doubleRange.delta, size);\n maximum = Math.ceil(maximum / interval) * interval;\n }\n this.updateActualRange(axis, minimum, maximum, interval);\n };\n /**\n * Calculate visible range for axis.\n * @private\n */\n Double.prototype.calculateVisibleRange = function (size, axis) {\n axis.visibleRange = {\n max: axis.actualRange.max, min: axis.actualRange.min,\n delta: axis.actualRange.delta, interval: axis.actualRange.interval\n };\n if (axis.zoomFactor < 1 || axis.zoomPosition > 0) {\n axis.calculateVisibleRange(size);\n axis.visibleRange.interval = (axis.enableAutoIntervalOnZooming && axis.valueType !== 'Category') ?\n this.calculateNumericNiceInterval(axis, axis.doubleRange.delta, size)\n : axis.visibleRange.interval;\n }\n axis.triggerRangeRender(this.chart, axis.visibleRange.min, axis.visibleRange.max, axis.visibleRange.interval);\n };\n /**\n * Calculate label for the axis.\n * @private\n */\n Double.prototype.calculateVisibleLabels = function (axis, chart) {\n /*! Generate axis labels */\n axis.visibleLabels = [];\n var tempInterval = axis.visibleRange.min;\n if (axis.zoomFactor < 1 || axis.zoomPosition > 0 || this.paddingInterval) {\n tempInterval = axis.visibleRange.min - (axis.visibleRange.min % axis.visibleRange.interval);\n }\n var format = this.getFormat(axis);\n var isCustom = format.match('{value}') !== null;\n axis.format = chart.intl.getNumberFormat({\n format: isCustom ? '' : format,\n useGrouping: chart.useGroupingSeparator\n });\n axis.startLabel = axis.format(axis.visibleRange.min);\n axis.endLabel = axis.format(axis.visibleRange.max);\n for (; tempInterval <= axis.visibleRange.max; tempInterval += axis.visibleRange.interval) {\n if (withIn(tempInterval, axis.visibleRange)) {\n axis.triggerLabelRender(chart, tempInterval, this.formatValue(axis, isCustom, format, tempInterval), axis.labelStyle);\n }\n }\n axis.getMaxLabelWidth(chart);\n };\n /**\n * Format of the axis label.\n * @private\n */\n Double.prototype.getFormat = function (axis) {\n if (axis.labelFormat) {\n return axis.labelFormat;\n }\n return axis.isStack100 ? '{value}%' : '';\n };\n /**\n * Formatted the axis label.\n * @private\n */\n Double.prototype.formatValue = function (axis, isCustom, format, tempInterval) {\n return isCustom ? format.replace('{value}', axis.format(tempInterval))\n : axis.format(tempInterval);\n };\n return Double;\n}());\nexport { Double };\n","/**\n * Specifies the chart constant value\n */\n/** @private */\nexport var loaded = 'loaded';\n/** @private */\nexport var load = 'load';\n/** @private */\nexport var animationComplete = 'animationComplete';\n/** @private */\nexport var legendRender = 'legendRender';\n/** @private */\nexport var textRender = 'textRender';\n/** @private */\nexport var pointRender = 'pointRender';\n/** @private */\nexport var seriesRender = 'seriesRender';\n/** @private */\nexport var axisLabelRender = 'axisLabelRender';\n/** @private */\nexport var axisRangeCalculated = 'axisRangeCalculated';\n/** @private */\nexport var axisMultiLabelRender = 'axisMultiLabelRender';\n/** @private */\nexport var tooltipRender = 'tooltipRender';\n/** @private */\nexport var chartMouseMove = 'chartMouseMove';\n/** @private */\nexport var chartMouseClick = 'chartMouseClick';\n/** @private */\nexport var pointClick = 'pointClick';\n/** @private */\nexport var pointMove = 'pointMove';\n/** @private */\nexport var chartMouseLeave = 'chartMouseLeave';\n/** @private */\nexport var chartMouseDown = 'chartMouseDown';\n/** @private */\nexport var chartMouseUp = 'chartMouseUp';\n/** @private */\nexport var zoomComplete = 'zoomComplete';\n/** @private */\nexport var dragComplete = 'dragComplete';\n/** @private */\nexport var resized = 'resized';\n/** @private */\nexport var beforePrint = 'beforePrint';\n/** @private */\nexport var annotationRender = 'annotationRender';\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Complex, Collection } from '@syncfusion/ej2-base';\nimport { Theme } from '../../common/model/theme';\nimport { Font, Border } from '../../common/model/base';\n/**\n * Configures the Annotation for chart.\n */\nvar ChartAnnotationSettings = /** @class */ (function (_super) {\n __extends(ChartAnnotationSettings, _super);\n function ChartAnnotationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('0')\n ], ChartAnnotationSettings.prototype, \"x\", void 0);\n __decorate([\n Property('0')\n ], ChartAnnotationSettings.prototype, \"y\", void 0);\n __decorate([\n Property(null)\n ], ChartAnnotationSettings.prototype, \"content\", void 0);\n __decorate([\n Property('Center')\n ], ChartAnnotationSettings.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Pixel')\n ], ChartAnnotationSettings.prototype, \"coordinateUnits\", void 0);\n __decorate([\n Property('Chart')\n ], ChartAnnotationSettings.prototype, \"region\", void 0);\n __decorate([\n Property('Middle')\n ], ChartAnnotationSettings.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property(null)\n ], ChartAnnotationSettings.prototype, \"xAxisName\", void 0);\n __decorate([\n Property(null)\n ], ChartAnnotationSettings.prototype, \"yAxisName\", void 0);\n __decorate([\n Property(null)\n ], ChartAnnotationSettings.prototype, \"description\", void 0);\n return ChartAnnotationSettings;\n}(ChildProperty));\nexport { ChartAnnotationSettings };\n/**\n * label border properties.\n */\nvar LabelBorder = /** @class */ (function (_super) {\n __extends(LabelBorder, _super);\n function LabelBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], LabelBorder.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], LabelBorder.prototype, \"width\", void 0);\n __decorate([\n Property('Rectangle')\n ], LabelBorder.prototype, \"type\", void 0);\n return LabelBorder;\n}(ChildProperty));\nexport { LabelBorder };\n/**\n * categories for multi level labels\n */\nvar MultiLevelCategories = /** @class */ (function (_super) {\n __extends(MultiLevelCategories, _super);\n function MultiLevelCategories() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], MultiLevelCategories.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], MultiLevelCategories.prototype, \"end\", void 0);\n __decorate([\n Property('')\n ], MultiLevelCategories.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], MultiLevelCategories.prototype, \"maximumTextWidth\", void 0);\n return MultiLevelCategories;\n}(ChildProperty));\nexport { MultiLevelCategories };\n/**\n * Strip line properties\n */\nvar StripLineSettings = /** @class */ (function (_super) {\n __extends(StripLineSettings, _super);\n function StripLineSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], StripLineSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(false)\n ], StripLineSettings.prototype, \"startFromAxis\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"end\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"size\", void 0);\n __decorate([\n Property('#808080')\n ], StripLineSettings.prototype, \"color\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 1 }, Border)\n ], StripLineSettings.prototype, \"border\", void 0);\n __decorate([\n Property('')\n ], StripLineSettings.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"rotation\", void 0);\n __decorate([\n Property('Middle')\n ], StripLineSettings.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Middle')\n ], StripLineSettings.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Complex(Theme.stripLineLabelFont, Font)\n ], StripLineSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property('Behind')\n ], StripLineSettings.prototype, \"zIndex\", void 0);\n __decorate([\n Property(1)\n ], StripLineSettings.prototype, \"opacity\", void 0);\n return StripLineSettings;\n}(ChildProperty));\nexport { StripLineSettings };\n/**\n * MultiLevelLabels properties\n */\nvar MultiLevelLabels = /** @class */ (function (_super) {\n __extends(MultiLevelLabels, _super);\n function MultiLevelLabels() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Center')\n ], MultiLevelLabels.prototype, \"alignment\", void 0);\n __decorate([\n Property('Wrap')\n ], MultiLevelLabels.prototype, \"overflow\", void 0);\n __decorate([\n Complex(Theme.axisLabelFont, Font)\n ], MultiLevelLabels.prototype, \"textStyle\", void 0);\n __decorate([\n Complex({ color: null, width: 1, type: 'Rectangle' }, LabelBorder)\n ], MultiLevelLabels.prototype, \"border\", void 0);\n __decorate([\n Collection([], MultiLevelCategories)\n ], MultiLevelLabels.prototype, \"categories\", void 0);\n return MultiLevelLabels;\n}(ChildProperty));\nexport { MultiLevelLabels };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty, Collection, extend } from '@syncfusion/ej2-base';\nimport { Font, Border } from '../../common/model/base';\nimport { Size, Rect, measureText, rotateTextSize, firstToLowerCase, valueToCoefficient, inside } from '../../common/utils/helper';\nimport { DoubleRange } from '../utils/double-range';\nimport { Double } from '../axis/double-axis';\nimport { Theme } from '../../common/model/theme';\nimport { axisLabelRender, axisRangeCalculated } from '../../common/model/constants';\nimport { StripLineSettings, MultiLevelLabels, LabelBorder } from '../model/chart-base';\nimport { textWrap } from '../../common/utils/helper';\nvar axisPadding = 10;\n/**\n * Configures the `rows` of the chart.\n */\nvar Row = /** @class */ (function (_super) {\n __extends(Row, _super);\n function Row() {\n /**\n * The height of the row as a string accept input both as '100px' and '100%'.\n * If specified as '100%, row renders to the full height of its chart.\n * @default '100%'\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.axes = [];\n /** @private */\n _this.nearSizes = [];\n /** @private */\n _this.farSizes = [];\n return _this;\n }\n /**\n * Measure the row size\n * @return {void}\n * @private\n */\n Row.prototype.computeSize = function (axis, clipRect) {\n var width = 0;\n var innerPadding = 5;\n if (axis.visible) {\n width += (axis.findTickSize(axis.crossInAxis) +\n axis.findLabelSize(axis.crossInAxis, innerPadding) + axis.lineStyle.width / 2);\n }\n if (axis.opposedPosition) {\n this.farSizes.push(width);\n }\n else {\n this.nearSizes.push(width);\n }\n };\n __decorate([\n Property('100%')\n ], Row.prototype, \"height\", void 0);\n __decorate([\n Complex({}, Border)\n ], Row.prototype, \"border\", void 0);\n return Row;\n}(ChildProperty));\nexport { Row };\n/**\n * Configures the `columns` of the chart.\n */\nvar Column = /** @class */ (function (_super) {\n __extends(Column, _super);\n function Column() {\n /**\n * The width of the column as a string accepts input both as like '100px' or '100%'.\n * If specified as '100%, column renders to the full width of its chart.\n * @default '100%'\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.axes = [];\n /** @private */\n _this.nearSizes = [];\n /** @private */\n _this.farSizes = [];\n /** @private */\n _this.padding = 0;\n return _this;\n }\n /**\n * Measure the column size\n * @return {void}\n * @private\n */\n Column.prototype.computeSize = function (axis, clipRect) {\n var height = 0;\n var innerPadding = 5;\n if (axis.visible) {\n height += (axis.findTickSize(axis.crossInAxis) +\n axis.findLabelSize(axis.crossInAxis, innerPadding) + axis.lineStyle.width / 2);\n }\n if (axis.opposedPosition) {\n this.farSizes.push(height);\n }\n else {\n this.nearSizes.push(height);\n }\n };\n __decorate([\n Property('100%')\n ], Column.prototype, \"width\", void 0);\n __decorate([\n Complex({}, Border)\n ], Column.prototype, \"border\", void 0);\n return Column;\n}(ChildProperty));\nexport { Column };\n/**\n * Configures the major grid lines in the `axis`.\n */\nvar MajorGridLines = /** @class */ (function (_super) {\n __extends(MajorGridLines, _super);\n function MajorGridLines() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], MajorGridLines.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], MajorGridLines.prototype, \"dashArray\", void 0);\n __decorate([\n Property(null)\n ], MajorGridLines.prototype, \"color\", void 0);\n return MajorGridLines;\n}(ChildProperty));\nexport { MajorGridLines };\n/**\n * Configures the minor grid lines in the `axis`.\n */\nvar MinorGridLines = /** @class */ (function (_super) {\n __extends(MinorGridLines, _super);\n function MinorGridLines() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0.7)\n ], MinorGridLines.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], MinorGridLines.prototype, \"dashArray\", void 0);\n __decorate([\n Property(null)\n ], MinorGridLines.prototype, \"color\", void 0);\n return MinorGridLines;\n}(ChildProperty));\nexport { MinorGridLines };\n/**\n * Configures the axis line of a chart.\n */\nvar AxisLine = /** @class */ (function (_super) {\n __extends(AxisLine, _super);\n function AxisLine() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], AxisLine.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], AxisLine.prototype, \"dashArray\", void 0);\n __decorate([\n Property(null)\n ], AxisLine.prototype, \"color\", void 0);\n return AxisLine;\n}(ChildProperty));\nexport { AxisLine };\n/**\n * Configures the major tick lines.\n */\nvar MajorTickLines = /** @class */ (function (_super) {\n __extends(MajorTickLines, _super);\n function MajorTickLines() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], MajorTickLines.prototype, \"width\", void 0);\n __decorate([\n Property(5)\n ], MajorTickLines.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], MajorTickLines.prototype, \"color\", void 0);\n return MajorTickLines;\n}(ChildProperty));\nexport { MajorTickLines };\n/**\n * Configures the minor tick lines.\n */\nvar MinorTickLines = /** @class */ (function (_super) {\n __extends(MinorTickLines, _super);\n function MinorTickLines() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0.7)\n ], MinorTickLines.prototype, \"width\", void 0);\n __decorate([\n Property(5)\n ], MinorTickLines.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], MinorTickLines.prototype, \"color\", void 0);\n return MinorTickLines;\n}(ChildProperty));\nexport { MinorTickLines };\n/**\n * Configures the crosshair ToolTip.\n */\nvar CrosshairTooltip = /** @class */ (function (_super) {\n __extends(CrosshairTooltip, _super);\n function CrosshairTooltip() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], CrosshairTooltip.prototype, \"enable\", void 0);\n __decorate([\n Property(null)\n ], CrosshairTooltip.prototype, \"fill\", void 0);\n __decorate([\n Complex(Theme.crosshairLabelFont, Font)\n ], CrosshairTooltip.prototype, \"textStyle\", void 0);\n return CrosshairTooltip;\n}(ChildProperty));\nexport { CrosshairTooltip };\n/**\n * Configures the axes in the chart.\n */\nvar Axis = /** @class */ (function (_super) {\n __extends(Axis, _super);\n function Axis() {\n /**\n * Options to customize the axis label.\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.visibleLabels = [];\n /** @private */\n _this.series = [];\n /** @private */\n _this.rect = new Rect(undefined, undefined, 0, 0);\n /** @private */\n _this.axisBottomLine = null;\n /** @private */\n _this.intervalDivs = [10, 5, 2, 1];\n /** @private */\n _this.angle = _this.labelRotation;\n /** @private */\n _this.isStack100 = false;\n /** @private */\n _this.crossAt = null;\n /** @private */\n _this.updatedRect = null;\n /** @private */\n _this.multiLevelLabelHeight = 0;\n return _this;\n }\n /**\n * The function used to find tick size.\n * @return {number}\n * @private\n */\n Axis.prototype.findTickSize = function (crossAxis) {\n if (this.tickPosition === 'Inside') {\n return 0;\n }\n if (crossAxis && (!crossAxis.visibleRange || this.isInside(crossAxis.visibleRange))) {\n return 0;\n }\n return this.majorTickLines.height;\n };\n /**\n * The function used to find axis position.\n * @return {number}\n * @private\n */\n Axis.prototype.isInside = function (range) {\n return (inside(this.crossAt, range) ||\n (!this.opposedPosition && this.crossAt >= range.max) || (this.opposedPosition && this.crossAt <= range.min));\n };\n /**\n * The function used to find label Size.\n * @return {number}\n * @private\n */\n Axis.prototype.findLabelSize = function (crossAxis, innerPadding) {\n var titleSize = 0;\n if (this.title) {\n titleSize = measureText(this.title, this.titleStyle).height + innerPadding;\n }\n if (this.labelPosition === 'Inside') {\n return titleSize + innerPadding;\n }\n var diff;\n var value;\n var labelSize = titleSize + innerPadding + axisPadding +\n ((this.orientation === 'Vertical') ? this.maxLabelSize.width : this.maxLabelSize.height) + this.multiLevelLabelHeight;\n if (crossAxis && this.placeNextToAxisLine) {\n var range = crossAxis.visibleRange;\n var size = (crossAxis.orientation === 'Horizontal') ? crossAxis.rect.width : crossAxis.rect.height;\n if (!range || !size) {\n return 0;\n }\n else if (this.isInside(range)) {\n value = this.findDifference(crossAxis);\n diff = (value) * (size / range.delta);\n diff = (value) * ((size - (diff < labelSize ? (labelSize - diff) : 0)) / range.delta);\n labelSize = (diff < labelSize) ? (labelSize - diff) : 0;\n }\n }\n return labelSize;\n };\n /**\n * The function used to find axis position.\n * @return {number}\n * @private\n */\n Axis.prototype.updateCrossValue = function (chart) {\n var value = this.crossAt;\n if (value === null || !this.isInside(this.crossInAxis.visibleRange)) {\n this.updatedRect = this.rect;\n return null;\n }\n var range = this.crossInAxis.visibleRange;\n if (!this.opposedPosition) {\n if (this.crossAt > range.max) {\n value = range.max;\n }\n }\n else {\n if (this.crossAt < range.min) {\n value = range.min;\n }\n }\n this.updatedRect = extend({}, this.rect, null, true);\n if (this.orientation === 'Horizontal') {\n value = this.crossInAxis.rect.height - (valueToCoefficient(value, this.crossInAxis) * this.crossInAxis.rect.height);\n this.updatedRect.y = this.crossInAxis.rect.y + value;\n }\n else {\n value = valueToCoefficient(value, this.crossInAxis) * this.crossInAxis.rect.width;\n this.updatedRect.x = this.crossInAxis.rect.x + value;\n }\n };\n Axis.prototype.findDifference = function (crossAxis) {\n var value = 0;\n if (this.opposedPosition) {\n value = crossAxis.isInversed ? crossAxis.visibleRange.min : crossAxis.visibleRange.max;\n }\n else {\n value = crossAxis.isInversed ? crossAxis.visibleRange.max : crossAxis.visibleRange.min;\n }\n return Math.abs(this.crossAt - value);\n };\n /**\n * The function used to find whether the range is set.\n * @return {boolean}\n * @private\n */\n Axis.prototype.setRange = function () {\n if (this.minimum != null && this.maximum != null) {\n return true;\n }\n return false;\n };\n /**\n * Calculate visible range for axis.\n * @return {void}\n * @private\n */\n Axis.prototype.calculateVisibleRange = function (size) {\n if (this.zoomFactor < 1 || this.zoomPosition > 0) {\n var baseRange = this.actualRange;\n var start = void 0;\n var end = void 0;\n if (!this.isInversed) {\n start = this.actualRange.min + this.zoomPosition * this.actualRange.delta;\n end = start + this.zoomFactor * this.actualRange.delta;\n }\n else {\n start = this.actualRange.max - (this.zoomPosition * this.actualRange.delta);\n end = start - (this.zoomFactor * this.actualRange.delta);\n }\n if (start < baseRange.min) {\n end = end + (baseRange.min - start);\n start = baseRange.min;\n }\n if (end > baseRange.max) {\n start = start - (end - baseRange.max);\n end = baseRange.max;\n }\n this.doubleRange = new DoubleRange(start, end);\n this.visibleRange.min = this.doubleRange.start;\n this.visibleRange.max = this.doubleRange.end;\n this.visibleRange.delta = this.doubleRange.delta;\n }\n };\n /**\n * Calculate desired interval for the axis.\n * @return {void}\n * @private\n */\n Axis.prototype.getActualDesiredIntervalsCount = function (availableSize) {\n var size = this.orientation === 'Horizontal' ? availableSize.width : availableSize.height;\n if (this.desiredIntervals === null) {\n var desiredIntervalsCount = (this.orientation === 'Horizontal' ? 0.533 : 1) * this.maximumLabels;\n desiredIntervalsCount = Math.max((size * (desiredIntervalsCount / 100)), 1);\n return desiredIntervalsCount;\n }\n else {\n return this.desiredIntervals;\n }\n };\n /**\n * Triggers the event.\n * @return {void}\n * @private\n */\n Axis.prototype.triggerLabelRender = function (chart, tempInterval, text, labelStyle) {\n var argsData;\n argsData = {\n cancel: false, name: axisLabelRender, axis: this,\n text: text, value: tempInterval, labelStyle: labelStyle\n };\n chart.trigger(axisLabelRender, argsData);\n if (!argsData.cancel) {\n this.visibleLabels.push(new VisibleLabels(argsData.text, argsData.value, argsData.labelStyle));\n }\n };\n /**\n * Triggers the event.\n * @return {void}\n * @private\n */\n Axis.prototype.triggerRangeRender = function (chart, minimum, maximum, interval) {\n var argsData;\n argsData = {\n cancel: false, name: axisRangeCalculated, axis: this,\n minimum: minimum, maximum: maximum, interval: interval\n };\n chart.trigger(axisRangeCalculated, argsData);\n if (!argsData.cancel) {\n this.visibleRange.min = argsData.minimum;\n this.visibleRange.max = argsData.maximum;\n this.visibleRange.interval = argsData.interval;\n this.visibleRange.delta = argsData.maximum - argsData.minimum;\n }\n };\n /**\n * Calculate padding for the axis.\n * @return {string}\n * @private\n */\n Axis.prototype.getRangePadding = function (chart) {\n var padding = this.rangePadding;\n if (padding !== 'Auto') {\n return padding;\n }\n switch (this.orientation) {\n case 'Horizontal':\n if (chart.requireInvertedAxis) {\n padding = (this.isStack100 ? 'Round' : 'Normal');\n }\n else {\n padding = 'None';\n }\n break;\n case 'Vertical':\n if (!chart.requireInvertedAxis) {\n padding = (this.isStack100 ? 'Round' : 'Normal');\n }\n else {\n padding = 'None';\n }\n break;\n }\n return padding;\n };\n /**\n * Calculate maximum label width for the axis.\n * @return {void}\n * @private\n */\n Axis.prototype.getMaxLabelWidth = function (chart) {\n var prevSize = new Size(0, 0);\n var rotatedLabel;\n var pointX;\n var previousEnd = 0;\n var isIntersect = false;\n this.angle = this.labelRotation;\n this.maxLabelSize = new Size(0, 0);\n var action = this.labelIntersectAction;\n var label;\n for (var i = 0; i < this.visibleLabels.length; i++) {\n label = this.visibleLabels[i];\n label.size = measureText(label.text, this.labelStyle);\n if (label.size.width > this.maxLabelSize.width) {\n this.maxLabelSize.width = label.size.width;\n this.rotatedLabel = label.text;\n }\n if (label.size.height > this.maxLabelSize.height) {\n this.maxLabelSize.height = label.size.height;\n }\n if (action === 'None' || action === 'Hide' || action === 'Trim') {\n continue;\n }\n if ((action !== 'None' || this.angle % 360 === 0) && this.orientation === 'Horizontal' &&\n this.rect.width > 0 && !isIntersect) {\n pointX = (valueToCoefficient(label.value, this) * this.rect.width) + this.rect.x;\n pointX -= label.size.width / 2;\n if (this.edgeLabelPlacement === 'Shift') {\n if (i === 0 && pointX < this.rect.x) {\n pointX = this.rect.x;\n }\n if (i === this.visibleLabels.length - 1 && ((pointX + label.size.width) > (this.rect.x + this.rect.width))) {\n pointX = this.rect.x + this.rect.width - label.size.width;\n }\n }\n switch (action) {\n case 'MultipleRows':\n if (i > 0) {\n this.findMultiRows(i, pointX, label);\n }\n break;\n case 'Rotate45':\n case 'Rotate90':\n if (i > 0 && (!this.isInversed ? pointX <= previousEnd : pointX + label.size.width >= previousEnd)) {\n this.angle = (action === 'Rotate45') ? 45 : 90;\n isIntersect = true;\n }\n break;\n default:\n label.text = textWrap(label.text, this.rect.width / this.visibleLabels.length, this.labelStyle);\n var height = (label.size.height * label.text.length);\n if (height > this.maxLabelSize.height) {\n this.maxLabelSize.height = height;\n }\n break;\n }\n previousEnd = this.isInversed ? pointX : pointX + label.size.width;\n }\n }\n if (this.angle !== 0 && this.orientation === 'Horizontal') {\n this.maxLabelSize = rotateTextSize(this.labelStyle, this.rotatedLabel, this.angle, chart);\n }\n if (chart.multiLevelLabelModule && this.multiLevelLabels.length > 0) {\n chart.multiLevelLabelModule.getMultilevelLabelsHeight(this);\n }\n };\n /**\n * Finds the multiple rows for axis.\n * @return {void}\n */\n Axis.prototype.findMultiRows = function (length, currentX, currentLabel) {\n var label;\n var pointX;\n var store = [];\n var isMultiRows;\n for (var i = length - 1; i >= 0; i--) {\n label = this.visibleLabels[i];\n pointX = (valueToCoefficient(label.value, this) * this.rect.width) + this.rect.x;\n isMultiRows = !this.isInversed ? currentX < (pointX + label.size.width / 2) :\n currentX + currentLabel.size.width > (pointX - label.size.width / 2);\n if (isMultiRows) {\n store.push(label.index);\n currentLabel.index = (currentLabel.index > label.index) ? currentLabel.index : label.index + 1;\n }\n else {\n currentLabel.index = store.indexOf(label.index) > -1 ? currentLabel.index : label.index;\n }\n }\n var height = (currentLabel.size.height * currentLabel.index) + (5 * (currentLabel.index - 1));\n if (height > this.maxLabelSize.height) {\n this.maxLabelSize.height = height;\n }\n };\n /**\n * Finds the default module for axis.\n * @return {void}\n * @private\n */\n Axis.prototype.getModule = function (chart) {\n if (this.valueType === 'Double') {\n this.baseModule = new Double(chart);\n }\n else {\n this.baseModule = chart[firstToLowerCase(this.valueType) + 'Module'];\n }\n };\n __decorate([\n Complex(Theme.axisLabelFont, Font)\n ], Axis.prototype, \"labelStyle\", void 0);\n __decorate([\n Complex({}, CrosshairTooltip)\n ], Axis.prototype, \"crosshairTooltip\", void 0);\n __decorate([\n Property('')\n ], Axis.prototype, \"title\", void 0);\n __decorate([\n Complex(Theme.axisTitleFont, Font)\n ], Axis.prototype, \"titleStyle\", void 0);\n __decorate([\n Property('')\n ], Axis.prototype, \"labelFormat\", void 0);\n __decorate([\n Property('')\n ], Axis.prototype, \"skeleton\", void 0);\n __decorate([\n Property('DateTime')\n ], Axis.prototype, \"skeletonType\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"plotOffset\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"isIndexed\", void 0);\n __decorate([\n Property(10)\n ], Axis.prototype, \"logBase\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"columnIndex\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"rowIndex\", void 0);\n __decorate([\n Property(1)\n ], Axis.prototype, \"span\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"desiredIntervals\", void 0);\n __decorate([\n Property(3)\n ], Axis.prototype, \"maximumLabels\", void 0);\n __decorate([\n Property(1)\n ], Axis.prototype, \"zoomFactor\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"zoomPosition\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"opposedPosition\", void 0);\n __decorate([\n Property(true)\n ], Axis.prototype, \"enableAutoIntervalOnZooming\", void 0);\n __decorate([\n Property('Auto')\n ], Axis.prototype, \"rangePadding\", void 0);\n __decorate([\n Property('Double')\n ], Axis.prototype, \"valueType\", void 0);\n __decorate([\n Property('None')\n ], Axis.prototype, \"edgeLabelPlacement\", void 0);\n __decorate([\n Property('Auto')\n ], Axis.prototype, \"intervalType\", void 0);\n __decorate([\n Property('BetweenTicks')\n ], Axis.prototype, \"labelPlacement\", void 0);\n __decorate([\n Property('Outside')\n ], Axis.prototype, \"tickPosition\", void 0);\n __decorate([\n Property('Outside')\n ], Axis.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('')\n ], Axis.prototype, \"name\", void 0);\n __decorate([\n Property(true)\n ], Axis.prototype, \"visible\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"minorTicksPerInterval\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"labelRotation\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"crossesAt\", void 0);\n __decorate([\n Property(true)\n ], Axis.prototype, \"placeNextToAxisLine\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"crossesInAxis\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"minimum\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"maximum\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"interval\", void 0);\n __decorate([\n Complex({}, MajorTickLines)\n ], Axis.prototype, \"majorTickLines\", void 0);\n __decorate([\n Complex({}, MinorTickLines)\n ], Axis.prototype, \"minorTickLines\", void 0);\n __decorate([\n Complex({}, MajorGridLines)\n ], Axis.prototype, \"majorGridLines\", void 0);\n __decorate([\n Complex({}, MinorGridLines)\n ], Axis.prototype, \"minorGridLines\", void 0);\n __decorate([\n Complex({}, AxisLine)\n ], Axis.prototype, \"lineStyle\", void 0);\n __decorate([\n Property('Trim')\n ], Axis.prototype, \"labelIntersectAction\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"isInversed\", void 0);\n __decorate([\n Property(100)\n ], Axis.prototype, \"coefficient\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"startAngle\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"description\", void 0);\n __decorate([\n Property(2)\n ], Axis.prototype, \"tabIndex\", void 0);\n __decorate([\n Collection([], StripLineSettings)\n ], Axis.prototype, \"stripLines\", void 0);\n __decorate([\n Collection([], MultiLevelLabels)\n ], Axis.prototype, \"multiLevelLabels\", void 0);\n __decorate([\n Complex({ color: null, width: 0, type: 'Rectangle' }, LabelBorder)\n ], Axis.prototype, \"border\", void 0);\n return Axis;\n}(ChildProperty));\nexport { Axis };\n/** @private */\nvar VisibleLabels = /** @class */ (function () {\n function VisibleLabels(text, value, labelStyle, size, index) {\n if (size === void 0) { size = new Size(0, 0); }\n if (index === void 0) { index = 1; }\n this.text = text;\n this.originalText = text;\n this.value = value;\n this.labelStyle = labelStyle;\n this.size = size;\n this.index = 1;\n }\n return VisibleLabels;\n}());\nexport { VisibleLabels };\n","import { DataUtil } from '@syncfusion/ej2-data';\nimport { subtractThickness, valueToCoefficient, sum, subArray, TextOption, inside, measureText } from '../../common/utils/helper';\nimport { Size, Rect, Thickness, PathOption, logBase, createZoomingLabels, getElement, rotateTextSize } from '../../common/utils/helper';\nimport { textElement, textTrim } from '../../common/utils/helper';\n/**\n * Specifies the Cartesian Axis Layout.\n */\nvar axisPadding = 10;\nvar CartesianAxisLayoutPanel = /** @class */ (function () {\n /** @private */\n function CartesianAxisLayoutPanel(chartModule) {\n this.chart = chartModule;\n this.padding = 5;\n }\n /**\n * Measure the axis size.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.measureAxis = function (rect) {\n var chart = this.chart;\n this.crossAt(chart);\n this.seriesClipRect = new Rect(rect.x, rect.y, rect.width, rect.height);\n this.initialClipRect = rect;\n this.leftSize = 0;\n this.rightSize = 0;\n this.topSize = 0;\n this.bottomSize = 0;\n //Measure Axis size with initial Rect\n this.measureRowAxis(chart, this.initialClipRect);\n this.initialClipRect = subtractThickness(this.initialClipRect, new Thickness(this.leftSize, this.rightSize, 0, 0));\n this.measureColumnAxis(chart, this.initialClipRect);\n this.initialClipRect = subtractThickness(this.initialClipRect, new Thickness(0, 0, this.topSize, this.bottomSize));\n if (!this.chart.delayRedraw) {\n this.calculateAxisSize(this.initialClipRect);\n }\n this.leftSize = 0;\n this.rightSize = 0;\n this.topSize = 0;\n this.bottomSize = 0;\n //Measure Axis size with series Rect\n this.measureRowAxis(chart, this.initialClipRect);\n this.seriesClipRect = subtractThickness(this.seriesClipRect, new Thickness(this.leftSize, this.rightSize, 0, 0));\n this.measureColumnAxis(chart, this.initialClipRect);\n this.seriesClipRect = subtractThickness(this.seriesClipRect, new Thickness(0, 0, this.topSize, this.bottomSize));\n if (!this.chart.delayRedraw) {\n chart.refreshAxis();\n this.calculateAxisSize(this.seriesClipRect);\n }\n };\n CartesianAxisLayoutPanel.prototype.measureRowAxis = function (chart, rect) {\n var row;\n this.calculateRowSize(rect);\n for (var _i = 0, _a = chart.rows; _i < _a.length; _i++) {\n var item = _a[_i];\n row = item;\n row.nearSizes = [];\n row.farSizes = [];\n this.arrangeAxis(row);\n this.measureDefinition(row, chart, new Size(chart.availableSize.width, row.computedHeight), rect);\n if (this.leftSize < sum(row.nearSizes)) {\n this.leftSize = sum(row.nearSizes);\n }\n if (this.rightSize < sum(row.farSizes)) {\n this.rightSize = sum(row.farSizes);\n }\n }\n };\n CartesianAxisLayoutPanel.prototype.measureColumnAxis = function (chart, rect) {\n var column;\n this.calculateColumnSize(rect);\n for (var _i = 0, _a = chart.columns; _i < _a.length; _i++) {\n var item = _a[_i];\n column = item;\n column.farSizes = [];\n column.nearSizes = [];\n this.arrangeAxis(column);\n this.measureDefinition(column, chart, new Size(column.computedWidth, chart.availableSize.height), rect);\n if (this.bottomSize < sum(column.nearSizes)) {\n this.bottomSize = sum(column.nearSizes);\n }\n if (this.topSize < sum(column.farSizes)) {\n this.topSize = sum(column.farSizes);\n }\n }\n };\n /**\n * Measure the column and row in chart.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.measureDefinition = function (definition, chart, size, clipRect) {\n var axis;\n var axisType;\n for (var _i = 0, _a = definition.axes; _i < _a.length; _i++) {\n var axis_1 = _a[_i];\n axis_1.getModule(chart);\n axis_1.baseModule.calculateRangeAndInterval(size, axis_1);\n definition.computeSize(axis_1, clipRect);\n }\n if (definition.farSizes.length > 0) {\n definition.farSizes[definition.farSizes.length - 1] -= axisPadding;\n }\n if (definition.nearSizes.length > 0) {\n definition.nearSizes[definition.nearSizes.length - 1] -= axisPadding;\n }\n };\n /**\n * Measure the axis.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.calculateAxisSize = function (rect) {\n var chart = this.chart;\n var row;\n var column;\n var definition;\n var axis;\n var nearCount = 0;\n var farCount = 0;\n var size = 0;\n var x;\n var y;\n this.calculateRowSize(rect);\n for (var i = 0, len = chart.rows.length; i < len; i++) {\n row = chart.rows[i];\n nearCount = 0;\n farCount = 0;\n for (var j = 0, len_1 = row.axes.length; j < len_1; j++) {\n axis = row.axes[j];\n if (axis.rect.height === 0) {\n axis.rect.height = row.computedHeight;\n size = 0;\n for (var k = i + 1, len_2 = i + axis.span; k < len_2; k++) {\n definition = chart.rows[k];\n size += definition.computedHeight;\n }\n axis.rect.y = (row.computedTop - size) + axis.plotOffset;\n axis.rect.height = (axis.rect.height + size) - (2 * axis.plotOffset);\n axis.rect.width = 0;\n }\n if (axis.opposedPosition) {\n x = rect.x + rect.width + sum(subArray(row.farSizes, farCount));\n axis.rect.x = axis.rect.x >= x ? axis.rect.x : x;\n farCount++;\n }\n else {\n x = rect.x - sum(subArray(row.nearSizes, nearCount));\n axis.rect.x = axis.rect.x <= x ? axis.rect.x : x;\n nearCount++;\n }\n }\n }\n this.calculateColumnSize(rect);\n for (var i = 0, len = chart.columns.length; i < len; i++) {\n column = chart.columns[i];\n nearCount = 0;\n farCount = 0;\n for (var j = 0, len_3 = column.axes.length; j < len_3; j++) {\n axis = column.axes[j];\n if (axis.rect.width === 0) {\n for (var k = i, len_4 = (i + axis.span); k < len_4; k++) {\n definition = chart.columns[k];\n axis.rect.width += definition.computedWidth;\n }\n axis.rect.x = column.computedLeft + axis.plotOffset;\n axis.rect.width -= (2 * axis.plotOffset);\n axis.rect.height = 0;\n }\n if (axis.opposedPosition) {\n y = rect.y - sum(subArray(column.farSizes, farCount));\n axis.rect.y = axis.rect.y <= y ? axis.rect.y : y;\n farCount++;\n }\n else {\n y = rect.y + rect.height + sum(subArray(column.nearSizes, nearCount));\n axis.rect.y = axis.rect.y >= y ? axis.rect.y : y;\n nearCount++;\n }\n }\n }\n };\n /**\n * Measure the axis.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.measure = function () {\n var chart = this.chart;\n var row;\n var column;\n var definition;\n var axis;\n var actualIndex;\n var span;\n var axisLength;\n for (var _i = 0, _a = chart.axisCollections; _i < _a.length; _i++) {\n var axis_2 = _a[_i];\n //definition.Axes = axis;\n if (axis_2.orientation === 'Vertical') {\n chart.verticalAxes.push(axis_2);\n actualIndex = this.getActualRow(axis_2);\n row = chart.rows[actualIndex];\n this.pushAxis(row, axis_2);\n span = ((actualIndex + axis_2.span) > chart.rows.length ? chart.rows.length : (actualIndex + axis_2.span));\n for (var j = actualIndex + 1; j < span; j++) {\n definition = chart.rows[j];\n definition.axes[row.axes.length - 1] = axis_2;\n chart.rows[j] = definition;\n }\n chart.rows[actualIndex] = row;\n }\n else {\n chart.horizontalAxes.push(axis_2);\n actualIndex = this.getActualColumn(axis_2);\n column = chart.columns[actualIndex];\n this.pushAxis(column, axis_2);\n span = ((actualIndex + axis_2.span) > chart.columns.length ? chart.columns.length : (actualIndex + axis_2.span));\n for (var j = actualIndex + 1; j < span; j++) {\n definition = chart.columns[j];\n definition.axes[column.axes.length - 1] = axis_2;\n chart.columns[j] = definition;\n }\n chart.columns[actualIndex] = column;\n }\n }\n };\n CartesianAxisLayoutPanel.prototype.crossAt = function (chart) {\n for (var _i = 0, _a = chart.axisCollections; _i < _a.length; _i++) {\n var axis = _a[_i];\n if (axis.crossesAt === null) {\n continue;\n }\n var isTransposed = chart.isTransposed;\n if (!axis.crossesInAxis) {\n if (chart.requireInvertedAxis) {\n axis.crossInAxis = ((axis.orientation === 'Horizontal')) ? chart.primaryXAxis : chart.primaryYAxis;\n }\n else {\n axis.crossInAxis = ((axis.orientation === 'Horizontal')) ? chart.primaryYAxis : chart.primaryXAxis;\n }\n axis.crossAt = this.updateCrossAt(axis.crossInAxis, axis.crossesAt);\n continue;\n }\n else {\n for (var i = 2, len = chart.axisCollections.length; i < len; i++) {\n if (axis.crossesInAxis === chart.axisCollections[i].name) {\n axis.crossInAxis = chart.axisCollections[i];\n axis.crossAt = this.updateCrossAt(axis.crossInAxis, axis.crossesAt);\n continue;\n }\n }\n }\n }\n };\n CartesianAxisLayoutPanel.prototype.updateCrossAt = function (axis, crossAt) {\n switch (axis.valueType) {\n case 'DateTime':\n var option = {\n skeleton: 'full',\n type: 'dateTime'\n };\n var dateParser = this.chart.intl.getDateParser(option);\n var dateFormatter = this.chart.intl.getDateFormat(option);\n return Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: crossAt }).val))));\n case 'Category':\n return parseFloat(crossAt) ? parseFloat(crossAt) : axis.labels.indexOf(crossAt);\n case 'Logarithmic':\n return logBase(crossAt, axis.logBase);\n default:\n return crossAt;\n }\n };\n CartesianAxisLayoutPanel.prototype.pushAxis = function (definition, axis) {\n for (var i = 0, len = definition.axes.length; i <= len; i++) {\n if (!definition.axes[i]) {\n definition.axes[i] = axis;\n break;\n }\n }\n };\n CartesianAxisLayoutPanel.prototype.arrangeAxis = function (definition) {\n var axisCollection = [];\n for (var i = 0, len = definition.axes.length; i <= len; i++) {\n if (definition.axes[i]) {\n axisCollection.push(definition.axes[i]);\n }\n }\n definition.axes = axisCollection;\n };\n CartesianAxisLayoutPanel.prototype.getActualColumn = function (axis) {\n var actualLength = this.chart.columns.length;\n var pos = axis.columnIndex;\n var result = pos >= actualLength ? actualLength - 1 : (pos < 0 ? 0 : pos);\n return result;\n };\n CartesianAxisLayoutPanel.prototype.getActualRow = function (axis) {\n var actualLength = this.chart.rows.length;\n var pos = axis.rowIndex;\n var result = pos >= actualLength ? actualLength - 1 : (pos < 0 ? 0 : pos);\n return result;\n };\n /**\n * Measure the row size.\n * @return {void}\n */\n CartesianAxisLayoutPanel.prototype.calculateRowSize = function (rect) {\n /*! Calculate row size */\n var chart = this.chart;\n var row;\n var rowTop = rect.y + rect.height;\n var height = 0;\n var remainingHeight = Math.max(0, rect.height);\n for (var i = 0, len = chart.rows.length; i < len; i++) {\n row = chart.rows[i];\n if (row.height.indexOf('%') !== -1) {\n height = Math.min(remainingHeight, (rect.height * parseInt(row.height, 10) / 100));\n }\n else {\n height = Math.min(remainingHeight, parseInt(row.height, 10));\n }\n height = (i !== (len - 1)) ? height : remainingHeight;\n row.computedHeight = height;\n rowTop -= height;\n row.computedTop = rowTop;\n remainingHeight -= height;\n }\n };\n /**\n * Measure the row size.\n * @return {void}\n */\n CartesianAxisLayoutPanel.prototype.calculateColumnSize = function (rect) {\n /*! Calculate column size */\n var chart = this.chart;\n var column;\n var columnLeft = rect.x;\n var width = 0;\n var remainingWidth = Math.max(0, rect.width);\n for (var i = 0, len = chart.columns.length; i < len; i++) {\n column = chart.columns[i];\n if (column.width.indexOf('%') !== -1) {\n width = Math.min(remainingWidth, (rect.width * parseInt(column.width, 10) / 100));\n }\n else {\n width = Math.min(remainingWidth, parseInt(column.width, 10));\n }\n width = (i !== (len - 1)) ? width : remainingWidth;\n column.computedWidth = width;\n column.computedLeft = columnLeft;\n columnLeft += width;\n remainingWidth -= width;\n }\n };\n /**\n * To render the axis element.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.renderAxes = function () {\n var chart = this.chart;\n var axis;\n var axisElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisInsideCollection' });\n var axisLineElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisOutsideCollection' });\n var outsideElement;\n var isInside;\n for (var i = 0, len = chart.axisCollections.length; i < len; i++) {\n axis = chart.axisCollections[i];\n this.element = chart.renderer.createGroup({ id: chart.element.id + 'AxisGroup' + i + 'Inside' });\n outsideElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisGroup' + i + 'Outside' });\n isInside = this.findAxisPosition(axis);\n if (axis.orientation === 'Horizontal') {\n axis.updateCrossValue(chart);\n if (axis.visible && axis.lineStyle.width > 0) {\n this.drawAxisLine(axis, i, axis.plotOffset, 0, isInside ? outsideElement : this.element, axis.updatedRect);\n }\n if (axis.majorGridLines.width > 0 || axis.majorTickLines.width > 0) {\n this.drawXAxisGridLine(axis, i, (isInside || axis.tickPosition === 'Inside') ? outsideElement : this.element, axis.updatedRect);\n }\n if (axis.visible) {\n this.drawXAxisLabels(axis, i, (isInside || axis.labelPosition === 'Inside') ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n this.drawXAxisBorder(axis, i, (isInside || axis.labelPosition === 'Inside') ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n this.drawXAxisTitle(axis, i, isInside ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n }\n }\n else {\n axis.updateCrossValue(chart);\n if (axis.visible && axis.lineStyle.width > 0) {\n this.drawAxisLine(axis, i, 0, axis.plotOffset, isInside ? outsideElement : this.element, axis.updatedRect);\n }\n if (axis.majorGridLines.width > 0 || axis.majorTickLines.width > 0) {\n this.drawYAxisGridLine(axis, i, (isInside || axis.tickPosition === 'Inside') ? outsideElement : this.element, axis.updatedRect);\n }\n if (axis.visible) {\n this.drawYAxisLabels(axis, i, (isInside || axis.labelPosition === 'Inside') ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n this.drawYAxisBorder(axis, i, (isInside || axis.labelPosition === 'Inside') ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n this.drawYAxisTitle(axis, i, isInside ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n }\n }\n axisElement.appendChild(this.element);\n if (outsideElement && outsideElement.childNodes.length > 0) {\n axisLineElement.appendChild(outsideElement);\n }\n }\n this.element = chart.renderer.createGroup({ id: chart.element.id + 'DefinitionLine' });\n for (var j = 0, len = chart.rows.length; j < len; j++) {\n var row = chart.rows[j];\n if (row.border.color) {\n this.drawBottomLine(row, j, true);\n }\n }\n for (var j = 0, len = chart.columns.length; j < len; j++) {\n var column = chart.columns[j];\n if (column.border.color) {\n this.drawBottomLine(column, j, false);\n }\n }\n axisElement.appendChild(this.element);\n chart.svgObject.appendChild(axisElement);\n return axisLineElement;\n };\n CartesianAxisLayoutPanel.prototype.findAxisPosition = function (axis) {\n return axis.crossAt !== null && axis.isInside(axis.crossInAxis.visibleRange);\n };\n CartesianAxisLayoutPanel.prototype.drawBottomLine = function (definition, index, isRow) {\n var chart = this.chart;\n var optionsLine = {};\n var x1;\n var x2;\n var y1;\n var y2;\n var definitionName;\n if (isRow) {\n definition = definition;\n y1 = y2 = definition.computedTop + definition.computedHeight;\n x1 = this.seriesClipRect.x;\n x2 = x1 + this.seriesClipRect.width;\n definitionName = 'Row';\n }\n else {\n definition = definition;\n x1 = x2 = definition.computedLeft;\n y1 = this.seriesClipRect.y;\n y2 = y1 + this.seriesClipRect.height;\n definitionName = 'Column';\n }\n optionsLine = {\n 'id': chart.element.id + '_AxisBottom_' + definitionName + index,\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2,\n 'stroke-width': definition.border.width,\n 'stroke': definition.border.color,\n };\n this.htmlObject = chart.renderer.drawLine(optionsLine);\n this.element.appendChild(this.htmlObject);\n };\n CartesianAxisLayoutPanel.prototype.drawAxisLine = function (axis, index, plotX, plotY, parent, rect) {\n var chart = this.chart;\n var optionsLine = {};\n optionsLine = {\n 'id': chart.element.id + 'AxisLine_' + index,\n x1: rect.x - plotX,\n y1: rect.y - plotY,\n x2: rect.x + rect.width + plotX,\n y2: rect.y + rect.height + plotY,\n 'stroke-dasharray': axis.lineStyle.dashArray,\n 'stroke-width': axis.lineStyle.width,\n 'stroke': axis.lineStyle.color || chart.themeStyle.axisLine\n };\n this.htmlObject = chart.renderer.drawLine(optionsLine);\n parent.appendChild(this.htmlObject);\n };\n CartesianAxisLayoutPanel.prototype.drawYAxisGridLine = function (axis, index, parent, rect) {\n var chart = this.chart;\n var tempInterval;\n var pointY = 0;\n var majorGrid = '';\n var majorTick = '';\n var minorGird = '';\n var minorTick = '';\n var minorDirection;\n var tickSize = axis.opposedPosition ? axis.majorTickLines.height : -axis.majorTickLines.height;\n var axisLineSize = (axis.opposedPosition) ? axis.lineStyle.width / 2 : -axis.lineStyle.width / 2;\n var ticksbwtLabel = (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') ?\n 0.5 : 0;\n var ticks = axis.tickPosition === 'Inside' ? (rect.x - tickSize - axisLineSize) : (rect.x + tickSize + axisLineSize);\n var length = axis.visibleLabels.length;\n if (axis.valueType.indexOf('Category') && axis.labelPlacement === 'BetweenTicks' && length > 0) {\n length += 1;\n }\n //Gridlines\n for (var i = 0; i < length; i++) {\n tempInterval = !axis.visibleLabels[i] ? (axis.visibleLabels[i - 1].value + axis.visibleRange.interval) - ticksbwtLabel\n : axis.visibleLabels[i].value - ticksbwtLabel;\n pointY = valueToCoefficient(tempInterval, axis) * rect.height;\n pointY = (pointY * -1) + (rect.y + rect.height);\n if (pointY >= rect.y && (rect.y + rect.height) >= pointY) {\n if ((inside(tempInterval, axis.visibleRange)) || this.isBorder(axis, i, pointY)) {\n majorGrid = majorGrid.concat('M ' + this.seriesClipRect.x + ' ' + (pointY) +\n ' L ' + (this.seriesClipRect.x + this.seriesClipRect.width) + ' ' + pointY + ' ');\n }\n majorTick = majorTick.concat('M ' + (rect.x + axisLineSize) + ' ' + pointY +\n ' L ' + (ticks) + ' ' + pointY + ' ');\n }\n if ((axis.minorGridLines.width > 0 || axis.minorTickLines.width > 0) && axis.minorTicksPerInterval > 0) {\n minorDirection = this.drawAxisMinorLine(axis, tempInterval, minorGird, minorTick, rect, i);\n minorGird = minorDirection[0];\n minorTick = minorDirection[1];\n }\n }\n this.renderGridLine(axis, index, majorGrid, minorGird);\n this.renderTickLine(axis, index, majorTick, minorTick, parent);\n };\n CartesianAxisLayoutPanel.prototype.isBorder = function (axis, index, value) {\n var chart = this.chart;\n var border = chart.chartArea.border;\n var rect = this.seriesClipRect;\n var orientation = axis.orientation;\n var start = (orientation === 'Horizontal') ? rect.x : rect.y;\n var size = (orientation === 'Horizontal') ? rect.width : rect.height;\n var startIndex = (orientation === 'Horizontal') ? 0 : axis.visibleLabels.length - 1;\n var endIndex = (orientation === 'Horizontal') ? axis.visibleLabels.length - 1 : 0;\n if (axis.plotOffset > 0) {\n return true;\n }\n else if ((value === start || value === (start + size)) && (border.width <= 0 || border.color === 'transparent')) {\n return true;\n }\n else if ((value !== start && index === startIndex) || (value !== (start + size) && index === endIndex)) {\n return true;\n }\n return false;\n };\n /**\n * To render the axis label.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.drawYAxisLabels = function (axis, index, parent, rect) {\n var chart = this.chart;\n var pointX = 0;\n var pointY = 0;\n var elementSize;\n var options;\n var isLabelInside = axis.labelPosition === 'Inside';\n var isTickInside = axis.tickPosition === 'Inside';\n var isOpposed = axis.opposedPosition;\n var tickSpace = axis.labelPosition === axis.tickPosition ? axis.majorTickLines.height : 0;\n var padding = tickSpace + this.padding + axis.lineStyle.width / 2;\n padding = (axis.opposedPosition) ? padding : -padding;\n var anchor = ((isOpposed && isLabelInside) || (!isOpposed && !isLabelInside)) ? 'end' : 'start';\n var labelElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisLabels' + index });\n for (var i = 0, len = axis.visibleLabels.length; i < len; i++) {\n pointX = isLabelInside ? (rect.x - padding) : (rect.x + padding);\n elementSize = axis.visibleLabels[i].size;\n pointY = valueToCoefficient(axis.visibleLabels[i].value, axis) * rect.height;\n pointY = Math.floor((pointY * -1) + (rect.y + rect.height));\n options = new TextOption(chart.element.id + index + '_AxisLabel_' + i, pointX, pointY + (elementSize.height / 4), anchor, axis.visibleLabels[i].text);\n if (axis.edgeLabelPlacement) {\n switch (axis.edgeLabelPlacement) {\n case 'None':\n break;\n case 'Hide':\n if (((i === 0 || (axis.isInversed && i === len - 1)) && options.y > rect.y + rect.height) ||\n (((i === len - 1) || (axis.isInversed && i === 0)) && options.y - elementSize.height / 2 < rect.y)) {\n options.text = '';\n }\n break;\n case 'Shift':\n if ((i === 0 || (axis.isInversed && i === len - 1)) && options.y > rect.y + rect.height) {\n options.y = pointY = rect.y + rect.height;\n }\n else if (((i === len - 1) || (axis.isInversed && i === 0)) && (options.y - elementSize.height / 2 < rect.y)) {\n options.y = pointY = rect.y + elementSize.height / 2;\n }\n break;\n }\n }\n textElement(options, axis.labelStyle, axis.labelStyle.color || chart.themeStyle.axisLabel, labelElement);\n }\n if (!chart.delayRedraw) {\n parent.appendChild(labelElement);\n }\n else if (axis.visible) {\n this.createZoomingLabel(this.chart, labelElement, axis, index, rect);\n }\n };\n /**\n * To render the axis label border.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.drawYAxisBorder = function (axis, index, parent, rect) {\n if (axis.border.width > 0) {\n var startY = void 0;\n var pointY = void 0;\n var gap = (rect.height / axis.visibleRange.delta) * (axis.valueType === 'DateTime' ? axis.dateTimeInterval\n : axis.visibleRange.interval);\n var endY = void 0;\n var length_1 = axis.maxLabelSize.width + 10 + ((axis.tickPosition === axis.labelPosition) ?\n axis.majorTickLines.height : 0);\n var labelBorder = '';\n var ticksbwtLabel = (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') ? -0.5 : 0;\n var endX = ((axis.opposedPosition && axis.labelPosition === 'Inside') ||\n (!axis.opposedPosition && axis.labelPosition === 'Outside')) ? rect.x - length_1 : rect.x + length_1;\n for (var i = 0; i < axis.visibleLabels.length; i++) {\n pointY = valueToCoefficient(axis.visibleLabels[i].value + ticksbwtLabel, axis);\n pointY = (axis.isInversed ? (1 - pointY) : pointY) * rect.height;\n if (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') {\n startY = Math.floor((pointY * -1) + (rect.y + rect.height));\n endY = Math.floor((pointY * -1) - (gap) + (rect.y + rect.height));\n }\n else {\n startY = Math.floor((pointY * -1) + gap / 2 + (rect.y + rect.height));\n endY = Math.floor((pointY * -1) - gap / 2 + (rect.y + rect.height));\n }\n switch (axis.border.type) {\n case 'Rectangle':\n case 'WithoutTopBorder':\n if (startY > (rect.y + rect.height)) {\n labelBorder += ('M' + ' ' + endX + ' ' + (rect.y + rect.height) + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ');\n }\n else if (Math.floor(rect.y) > (endY)) {\n labelBorder += ('M' + ' ' + rect.x + ' ' + startY + ' ' + 'L' + ' ' + endX\n + ' ' + startY + ' ' + 'L' + ' ' + endX + ' ' + (rect.y) + ' ');\n }\n else {\n labelBorder += ('M' + ' ' + rect.x + ' ' + startY + ' ' + 'L' + ' ' + endX +\n ' ' + startY + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ');\n if (i === axis.visibleLabels.length - 1) {\n labelBorder += ('M' + ' ' + rect.x + ' ' + endY + ' ' + 'L' + ' ' +\n endX + ' ' + endY + ' ');\n }\n }\n break;\n case 'WithoutTopandBottomBorder':\n if (!(startY > rect.y + rect.height) && !((endY) < Math.floor(rect.y))) {\n labelBorder += ('M' + ' ' + rect.x + ' ' + startY + ' ' + 'L' + ' ' + endX +\n ' ' + startY + ' ' + 'M' + ' ' + endX + ' ' + endY + ' ' +\n 'L' + ' ' + rect.x + ' ' + endY);\n }\n break;\n }\n }\n labelBorder += (axis.border.type === 'Rectangle') ? ('M' + ' ' + rect.x + ' ' + rect.y + ' ' + 'L' + ' ' +\n rect.x + ' ' + (rect.y + rect.height) + ' ') : '';\n if (labelBorder !== '') {\n this.createAxisBorderElement(axis, index, labelBorder, parent);\n }\n }\n if (axis.multiLevelLabels.length > 0 && this.chart.multiLevelLabelModule) {\n this.chart.multiLevelLabelModule.renderYAxisMultiLevelLabels(axis, index, parent, rect);\n }\n };\n CartesianAxisLayoutPanel.prototype.drawYAxisTitle = function (axis, index, parent, rect) {\n var chart = this.chart;\n var labelRotation = (axis.opposedPosition) ? 90 : -90;\n var elementSize = measureText(axis.title, axis.titleStyle);\n var padding = (axis.tickPosition === 'Inside' ? 0 : axis.majorTickLines.height + this.padding) +\n (axis.labelPosition === 'Inside' ? 0 :\n (axis.maxLabelSize.width + axis.multiLevelLabelHeight + this.padding));\n padding = axis.opposedPosition ? padding : -padding;\n var x = rect.x + padding;\n var y = rect.y + rect.height / 2;\n var options = new TextOption(chart.element.id + '_AxisTitle_' + index, x, y - this.padding, 'middle', axis.title, 'rotate(' + labelRotation + ',' + (x) + ',' + (y) + ')');\n var element = textElement(options, axis.titleStyle, axis.titleStyle.color || chart.themeStyle.axisTitle, parent);\n element.setAttribute('aria-label', axis.description || axis.title);\n element.setAttribute('tabindex', axis.tabIndex.toString());\n };\n CartesianAxisLayoutPanel.prototype.drawXAxisGridLine = function (axis, index, parent, rect) {\n var chart = this.chart;\n var tempInterval;\n var pointX = 0;\n var majorGrid = '';\n var majorTick = '';\n var minorGird = '';\n var minorTick = '';\n var minorDirection;\n var tickSize = (axis.opposedPosition) ? -axis.majorTickLines.height : axis.majorTickLines.height;\n var axisLineSize = (axis.opposedPosition) ? -axis.lineStyle.width / 2 : axis.lineStyle.width / 2;\n var ticksbwtLabel = (axis.valueType.indexOf('Category') > -1 && axis.labelPlacement === 'BetweenTicks') ?\n 0.5 : 0;\n var length = axis.visibleLabels.length;\n var ticks = axis.tickPosition === 'Inside' ? (rect.y - tickSize - axisLineSize) : (rect.y + tickSize + axisLineSize);\n if (axis.valueType.indexOf('Category') > -1 && length > 0 && axis.labelPlacement === 'BetweenTicks') {\n length += 1;\n }\n //Gridlines\n for (var i = 0; i < length; i++) {\n if (axis.valueType !== 'DateTimeCategory') {\n tempInterval = axis.visibleLabels[i] ? axis.visibleLabels[i].value - ticksbwtLabel\n : (axis.visibleLabels[i - 1].value + axis.visibleRange.interval) - ticksbwtLabel;\n }\n else {\n tempInterval = axis.visibleLabels[i] ?\n axis.visibleLabels[i].value - ticksbwtLabel : axis.visibleRange.max;\n }\n pointX = (valueToCoefficient(tempInterval, axis) * rect.width) + rect.x;\n if (pointX >= rect.x && (rect.x + rect.width) >= pointX) {\n if (inside(tempInterval, axis.visibleRange) || this.isBorder(axis, i, pointX)) {\n majorGrid = majorGrid.concat('M ' + pointX + ' ' + (this.seriesClipRect.y + this.seriesClipRect.height) +\n ' L ' + pointX + ' ' + this.seriesClipRect.y + ' ');\n }\n majorTick = majorTick.concat('M ' + (pointX) + ' ' + (rect.y + axisLineSize) +\n ' L ' + (pointX) + ' ' + ticks + ' ');\n }\n if (axis.minorTicksPerInterval > 0 && (axis.minorGridLines.width > 0 || axis.minorTickLines.width > 0)) {\n minorDirection = this.drawAxisMinorLine(axis, tempInterval, minorGird, minorTick, rect, i);\n minorGird = minorDirection[0];\n minorTick = minorDirection[1];\n }\n }\n this.renderGridLine(axis, index, majorGrid, minorGird);\n this.renderTickLine(axis, index, majorTick, minorTick, parent);\n };\n CartesianAxisLayoutPanel.prototype.drawAxisMinorLine = function (axis, tempInterval, minorGird, minorTick, rect, labelIndex) {\n var value = tempInterval;\n var coor = 0;\n var position = 0;\n var range = axis.visibleRange;\n var isTickInside = axis.tickPosition === 'Inside';\n var direction = [];\n var tickSize = axis.opposedPosition ? -axis.minorTickLines.height : axis.minorTickLines.height;\n var logStart;\n var logEnd;\n var logInterval = 1;\n var logPosition = 1;\n var ticksX = isTickInside ? (rect.y - tickSize) : (rect.y + tickSize);\n var ticksY = isTickInside ? (rect.x + tickSize) : (rect.x - tickSize);\n if (axis.valueType === 'Logarithmic') {\n logStart = Math.pow(axis.logBase, value - range.interval);\n logEnd = Math.pow(axis.logBase, value);\n logInterval = (logEnd - logStart) / (axis.minorTicksPerInterval + 1);\n logPosition = logStart + logInterval;\n }\n if (axis.orientation === 'Horizontal') {\n for (var j = 0; j < axis.minorTicksPerInterval; j++) {\n value = this.findLogNumeric(axis, logPosition, logInterval, value, labelIndex);\n logPosition += logInterval;\n if (inside(value, range)) {\n position = ((value - range.min) / (range.max - range.min));\n position = Math.ceil((axis.isInversed ? (1 - position) : position) * rect.width);\n coor = (Math.floor(position + rect.x));\n minorGird = minorGird.concat('M' + ' ' + coor + ' ' + (this.seriesClipRect.y)\n + 'L ' + coor + ' ' + (this.seriesClipRect.y + this.seriesClipRect.height));\n coor = (Math.floor(position + rect.x));\n minorTick = minorTick.concat('M' + ' ' + coor + ' ' + (rect.y)\n + 'L ' + coor + ' ' + ticksX);\n }\n }\n }\n else {\n tickSize = axis.opposedPosition ? axis.minorTickLines.height : -axis.minorTickLines.height;\n for (var j = 0; j < axis.minorTicksPerInterval; j++) {\n value = this.findLogNumeric(axis, logPosition, logInterval, value, labelIndex);\n if (inside(value, range)) {\n position = Math.ceil(((value - range.min) / (range.max - range.min)) * rect.height) * -1;\n coor = (Math.floor(position + rect.y + rect.height));\n minorGird = minorGird.concat('M' + ' ' + (this.seriesClipRect.x) + ' ' + coor\n + 'L ' + (this.seriesClipRect.x + this.seriesClipRect.width) + ' ' + coor);\n coor = (Math.floor(position + rect.y + rect.height));\n minorTick = minorTick.concat('M' + ' ' + rect.x + ' ' + coor + 'L ' + ticksY + ' ' + coor);\n }\n logPosition += logInterval;\n }\n }\n direction.push(minorGird);\n direction.push(minorTick);\n return direction;\n };\n CartesianAxisLayoutPanel.prototype.findLogNumeric = function (axis, logPosition, logInterval, value, labelIndex) {\n var range = axis.visibleRange;\n if (axis.valueType === 'Logarithmic') {\n value = logBase(logPosition, axis.logBase);\n }\n else if (axis.valueType === 'DateTime') {\n value += axis.dateTimeInterval / (axis.minorTicksPerInterval + 1);\n }\n else if (axis.valueType === 'DateTimeCategory') {\n var padding = axis.labelPlacement === 'BetweenTicks' ? 0.5 : 0;\n value += ((axis.visibleLabels[labelIndex + 1] ?\n axis.visibleLabels[labelIndex + 1].value - padding : axis.visibleRange.max) -\n (axis.visibleLabels[labelIndex] ?\n axis.visibleLabels[labelIndex].value - padding : axis.visibleRange.min)) /\n (axis.minorTicksPerInterval + 1);\n }\n else {\n value += range.interval / (axis.minorTicksPerInterval + 1);\n }\n return value;\n };\n /**\n * To render the axis label.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.drawXAxisLabels = function (axis, index, parent, rect) {\n var chart = this.chart;\n var pointX = 0;\n var pointY = 0;\n var elementSize;\n var labelElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisLabels' + index });\n var labelPosition = axis.labelPosition;\n var islabelInside = axis.labelPosition === 'Inside';\n var isTickInside = axis.tickPosition === 'Inside';\n var isOpposed = axis.opposedPosition;\n var tickSpace = axis.labelPosition === axis.tickPosition ? axis.majorTickLines.height : 0;\n var labelPadding;\n var padding = tickSpace + this.padding + axis.lineStyle.width / 2;\n var rotateSize;\n var diffHeight;\n var angle;\n var anglePadding = ((axis.angle === 90 || axis.angle === -90)) ? -2 : 0;\n var options;\n var yLocation;\n var previousEnd = axis.isInversed ? (rect.x + rect.width) : rect.x;\n var width = 0;\n var length = axis.visibleLabels.length;\n var intervalLength;\n var label;\n for (var i = 0, len = length; i < len; i++) {\n label = axis.visibleLabels[i];\n pointX = (valueToCoefficient(label.value, axis) * rect.width) + rect.x;\n elementSize = label.size;\n intervalLength = rect.width / length;\n width = ((axis.labelIntersectAction === 'Trim' || axis.labelIntersectAction === 'Wrap')\n && elementSize.width > intervalLength) ? intervalLength : elementSize.width;\n pointX -= width / 2;\n if (islabelInside && axis.angle) {\n pointY = isOpposed ? (rect.y + padding) : (rect.y - padding);\n }\n else {\n labelPadding = (isOpposed && !islabelInside) || (!isOpposed && islabelInside) ?\n -(padding + (axis.angle ? (3 * (elementSize.height / 4) + (2 * axis.maxLabelSize.height / 5)) :\n (label.index > 1 ? (2 * (elementSize.height / 4)) : 0)))\n : padding + (axis.angle ? (3 * (elementSize.height / 4)) + (2 * axis.maxLabelSize.height / 5)\n : (3 * (elementSize.height / 4)));\n pointY = (rect.y + (labelPadding * label.index));\n }\n options = new TextOption(chart.element.id + index + '_AxisLabel_' + i, pointX, pointY, '');\n if (axis.edgeLabelPlacement) {\n switch (axis.edgeLabelPlacement) {\n case 'None':\n break;\n case 'Hide':\n if (((i === 0 || (axis.isInversed && i === len - 1)) && options.x < rect.x) ||\n ((i === len - 1 || (axis.isInversed && i === 0)) && (options.x + width > rect.x + rect.width))) {\n continue;\n }\n break;\n case 'Shift':\n if ((i === 0 || (axis.isInversed && i === len - 1)) && options.x < rect.x) {\n intervalLength -= (rect.x - options.x);\n options.x = pointX = rect.x;\n }\n else if ((i === len - 1 || (axis.isInversed && i === 0)) && ((options.x + width) > rect.x + rect.width)) {\n if (elementSize.width > intervalLength && axis.labelIntersectAction === 'Trim') {\n intervalLength -= (options.x + width - (rect.x + rect.width));\n }\n else {\n intervalLength = width;\n }\n options.x = pointX = rect.x + rect.width - intervalLength;\n }\n break;\n }\n }\n options.text = this.findAxisLabel(axis, label.text, intervalLength);\n if (axis.angle % 360 === 0 && axis.labelIntersectAction === 'Hide' && i !== 0 &&\n (!axis.isInversed ? options.x <= previousEnd : options.x + width >= previousEnd)) {\n continue;\n }\n previousEnd = axis.isInversed ? options.x : options.x + width;\n if (axis.angle !== 0) {\n angle = (axis.angle > 360) ? axis.angle % 360 : axis.angle;\n rotateSize = rotateTextSize(axis.labelStyle, label.text, angle, chart);\n diffHeight = islabelInside ? rotateSize.height :\n axis.maxLabelSize.height - Math.ceil(rotateSize.height - elementSize.height);\n yLocation = axis.opposedPosition ? diffHeight / 2 : -diffHeight / 2;\n options.transform = 'rotate(' + angle + ',' + (pointX + width / 2 + anglePadding) + ','\n + (pointY + yLocation) + ')';\n options.y += yLocation;\n }\n textElement(options, axis.labelStyle, axis.labelStyle.color || chart.themeStyle.axisLabel, labelElement, (axis.opposedPosition !== (axis.labelPosition === 'Inside'))).setAttribute('style', 'cursor: default');\n }\n if (!chart.delayRedraw) {\n parent.appendChild(labelElement);\n }\n else if (axis.visible) {\n this.createZoomingLabel(this.chart, labelElement, axis, index, rect);\n }\n };\n /**\n * To render the axis label border.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.drawXAxisBorder = function (axis, index, parent, axisRect) {\n if (axis.border.width > 0) {\n var startX = void 0;\n var startY = axisRect.y;\n var padding = 10;\n var pointX = void 0;\n var gap = (axisRect.width / axis.visibleRange.delta) * (axis.valueType === 'DateTime' ? axis.dateTimeInterval\n : axis.visibleRange.interval);\n var endX = void 0;\n var length_2 = axis.maxLabelSize.height +\n ((axis.tickPosition === axis.labelPosition) ? axis.majorTickLines.height : 0);\n var labelBorder = '';\n var ticksbwtLabel = (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') ? -0.5 : 0;\n var endY = ((axis.opposedPosition && axis.labelPosition === 'Inside') ||\n (!axis.opposedPosition && axis.labelPosition === 'Outside')) ?\n (axisRect.y + length_2 + padding) : (axisRect.y - length_2 - padding);\n for (var i = 0; i < axis.visibleLabels.length; i++) {\n pointX = valueToCoefficient(axis.visibleLabels[i].value + ticksbwtLabel, axis);\n pointX = (axis.isInversed ? (1 - pointX) : pointX) * axisRect.width;\n if (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') {\n startX = pointX + axisRect.x;\n endX = pointX + (gap) + axisRect.x;\n }\n else {\n startX = pointX - gap / 2 + axisRect.x;\n endX = pointX + gap / 2 + axisRect.x;\n }\n switch (axis.border.type) {\n case 'Rectangle':\n case 'WithoutTopBorder':\n if (startX < axisRect.x) {\n labelBorder += ('M' + ' ' + axisRect.x + ' ' + endY + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ');\n }\n else if (Math.floor(endX) > axisRect.width + axisRect.x) {\n labelBorder += ('M' + ' ' + startX + ' ' + startY + ' ' + 'L' + ' ' + startX + ' ' + endY + ' ' +\n 'L' + ' ' + (axisRect.width + axisRect.x) + ' ' + endY + ' ');\n }\n else {\n labelBorder += ('M' + ' ' + startX + ' ' + startY + ' ' + 'L' + ' ' + startX + ' ' +\n endY + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ');\n if (i === axis.visibleLabels.length - 1) {\n labelBorder += ('M' + ' ' + endX + ' ' + startY + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ' +\n 'M ' + endX + ' ' + endY + ' L ' + (axisRect.width + axisRect.x) + ' ' + endY);\n }\n }\n break;\n case 'WithoutTopandBottomBorder':\n if (!(startX < axisRect.x) && !(Math.floor(endX) > axisRect.width + axisRect.x)) {\n labelBorder += ('M' + ' ' + startX + ' ' + startY + ' ' + 'L' + ' ' + startX + ' ' + endY + ' ' +\n 'M ' + endX + ' ' + startY + ' L ' + endX + ' ' + endY);\n }\n break;\n }\n }\n labelBorder += (axis.border.type === 'Rectangle' ? ('M ' + ' ' + axisRect.x + ' ' + startY + 'L' + ' ' +\n (axisRect.x + axisRect.width) + ' ' + startY) : '');\n if (labelBorder !== '') {\n this.createAxisBorderElement(axis, index, labelBorder, parent);\n }\n }\n if (this.chart.multiLevelLabelModule && axis.multiLevelLabels.length > 0) {\n this.chart.multiLevelLabelModule.renderXAxisMultiLevelLabels(axis, index, parent, axisRect);\n }\n };\n /**\n * To create border element for axis.\n * @return {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.createAxisBorderElement = function (axis, index, labelBorder, parent) {\n var borderElement = this.chart.renderer.drawPath(new PathOption(this.chart.element.id + '_BorderLine_' + index, 'transparent', axis.border.width, axis.border.color || this.chart.themeStyle.axisLine, 1, '', labelBorder));\n borderElement.setAttribute('style', 'pointer-events: none');\n parent.appendChild(borderElement);\n };\n CartesianAxisLayoutPanel.prototype.findAxisLabel = function (axis, label, width) {\n switch (axis.labelIntersectAction) {\n case 'Trim':\n return textTrim(width, label, axis.labelStyle);\n default:\n return label;\n }\n };\n CartesianAxisLayoutPanel.prototype.drawXAxisTitle = function (axis, index, parent, rect) {\n var chart = this.chart;\n var elementSize = measureText(axis.title, axis.titleStyle);\n var padding = (axis.tickPosition === 'Inside' ? 0 : axis.majorTickLines.height + this.padding) +\n (axis.labelPosition === 'Inside' ? 0 :\n axis.maxLabelSize.height + axis.multiLevelLabelHeight + this.padding);\n padding = axis.opposedPosition ? -(padding + elementSize.height / 4) : (padding + (3 * elementSize.height / 4));\n var options = new TextOption(chart.element.id + '_AxisTitle_' + index, rect.x + rect.width / 2, rect.y + padding, 'middle', axis.title);\n var element = textElement(options, axis.titleStyle, axis.titleStyle.color || chart.themeStyle.axisTitle, parent);\n element.setAttribute('aria-label', axis.description || axis.title);\n element.setAttribute('tabindex', axis.tabIndex.toString());\n };\n CartesianAxisLayoutPanel.prototype.renderTickLine = function (axis, index, majorTick, minorTick, parent) {\n var options;\n var chart = this.chart;\n if (axis.majorTickLines.width > 0 && axis.visible) {\n options = new PathOption(chart.element.id + '_MajorTickLine_' + index, 'transparent', axis.majorTickLines.width, axis.majorTickLines.color || chart.themeStyle.majorTickLine, null, null, majorTick);\n this.htmlObject = chart.renderer.drawPath(options);\n parent.appendChild(this.htmlObject);\n }\n if (axis.minorTickLines.width > 0 && axis.visible) {\n options = new PathOption(chart.element.id + '_MinorTickLine_' + index, 'transparent', axis.minorTickLines.width, axis.minorTickLines.color || chart.themeStyle.minorTickLine, null, null, minorTick);\n this.htmlObject = chart.renderer.drawPath(options);\n parent.appendChild(this.htmlObject);\n }\n };\n CartesianAxisLayoutPanel.prototype.renderGridLine = function (axis, index, majorGrid, minorGird) {\n var chart = this.chart;\n var options;\n if (axis.majorGridLines.width > 0) {\n options = new PathOption(chart.element.id + '_MajorGridLine_' + index, 'transparent', axis.majorGridLines.width, axis.majorGridLines.color || chart.themeStyle.majorGridLine, null, axis.majorGridLines.dashArray, majorGrid);\n this.htmlObject = chart.renderer.drawPath(options);\n this.element.appendChild(this.htmlObject);\n }\n if (axis.minorGridLines.width > 0) {\n options = new PathOption(chart.element.id + '_MinorGridLine_' + index, 'transparent', axis.minorGridLines.width, axis.minorGridLines.color || chart.themeStyle.minorGridLine, null, axis.minorGridLines.dashArray, minorGird);\n this.htmlObject = chart.renderer.drawPath(options);\n this.element.appendChild(this.htmlObject);\n }\n };\n CartesianAxisLayoutPanel.prototype.findParentNode = function (chart, label, axis, index) {\n if (axis.crossAt === null) {\n return document.getElementById(chart.element.id + 'AxisGroup' + index + 'Inside');\n }\n if (document.getElementById(chart.element.id + 'AxisGroup' + index + 'Inside').contains(document.getElementById(label.id))) {\n return document.getElementById(chart.element.id + 'AxisGroup' + index + 'Inside');\n }\n else {\n return document.getElementById(chart.element.id + 'AxisGroup' + index + 'Outside');\n }\n };\n CartesianAxisLayoutPanel.prototype.createZoomingLabel = function (chart, labelElement, axis, index, rect) {\n var parentNode = this.findParentNode(chart, labelElement, axis, index);\n labelElement.setAttribute('opacity', '0.3');\n var zoomElement = chart.renderer.createGroup({\n id: chart.element.id + 'AxisLabels_Zoom' + index\n });\n zoomElement = createZoomingLabels(chart, axis, zoomElement, index, axis.orientation === 'Vertical', rect);\n parentNode.replaceChild(labelElement, document.getElementById(labelElement.id));\n if (getElement(chart.element.id + 'AxisLabels_Zoom' + index)) {\n parentNode.replaceChild(zoomElement, document.getElementById(zoomElement.id));\n }\n else {\n parentNode.appendChild(zoomElement);\n }\n };\n return CartesianAxisLayoutPanel;\n}());\nexport { CartesianAxisLayoutPanel };\n","import { withInBounds, PointData, Rect, getValueXByPoint, getValueYByPoint } from '../../common/utils/helper';\n/**\n * To get the data on mouse move.\n * @private\n */\nvar ChartData = /** @class */ (function () {\n /**\n * Constructor for the data.\n * @private\n */\n function ChartData(chart) {\n /** @private */\n this.currentPoints = [];\n /** @private */\n this.previousPoints = [];\n this.chart = chart;\n this.lierIndex = 0;\n }\n /**\n * Method to get the Data.\n * @private\n */\n ChartData.prototype.getData = function () {\n var chart = this.chart;\n var point = null;\n var series = null;\n var width;\n var height;\n for (var len = chart.visibleSeries.length, i = len - 1; i >= 0; i--) {\n series = chart.visibleSeries[i];\n width = (series.type === 'Scatter' || series.drawType === 'Scatter' || (!series.isRectSeries && series.marker.visible))\n ? (series.marker.height + 5) / 2 : 0;\n height = (series.type === 'Scatter' || series.drawType === 'Scatter' || (!series.isRectSeries && series.marker.visible))\n ? (series.marker.width + 5) / 2 : 0;\n if (series.visible && withInBounds(chart.mouseX, chart.mouseY, series.clipRect, width, height)) {\n point = this.getRectPoint(series, series.clipRect, chart.mouseX, chart.mouseY);\n }\n if (point) {\n return new PointData(point, series);\n }\n }\n return new PointData(point, series);\n };\n ChartData.prototype.isSelected = function (chart) {\n return (chart.selectionMode.indexOf('Drag') > -1 && chart.selectionModule && chart.selectionModule.rectPoints !== null);\n };\n ChartData.prototype.getRectPoint = function (series, rect, x, y) {\n var currentRect;\n var fromCenterX;\n var fromCenterY;\n var clickAngle;\n var arcAngle = 0;\n var startAngle;\n var endAngle;\n var distanceFromCenter;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (!point.regionData) {\n if (!point.regions || !point.regions.length) {\n continue;\n }\n }\n if (point.regionData && this.chart.chartAreaType === 'PolarRadar' && series.drawType.indexOf('Column') > -1) {\n fromCenterX = x - (series.clipRect.width / 2 + series.clipRect.x);\n fromCenterY = y - (series.clipRect.height / 2 + series.clipRect.y);\n arcAngle = 2 * Math.PI * (point.regionData.currentXPosition < 0 ? 1 + point.regionData.currentXPosition\n : point.regionData.currentXPosition);\n clickAngle = (Math.atan2(fromCenterY, fromCenterX) + 0.5 * Math.PI - arcAngle) % (2 * Math.PI);\n clickAngle = clickAngle < 0 ? 2 * Math.PI + clickAngle : clickAngle;\n clickAngle = clickAngle + 2 * Math.PI * series.chart.primaryXAxis.startAngle;\n startAngle = point.regionData.startAngle;\n startAngle -= arcAngle;\n startAngle = startAngle < 0 ? 2 * Math.PI + startAngle : startAngle;\n endAngle = point.regionData.endAngle;\n endAngle -= arcAngle;\n endAngle = endAngle < 0 ? 2 * Math.PI + endAngle : endAngle;\n distanceFromCenter = Math.sqrt(Math.pow(Math.abs(fromCenterX), 2) + Math.pow(Math.abs(fromCenterY), 2));\n if (clickAngle >= startAngle && clickAngle <= endAngle &&\n (((distanceFromCenter >= point.regionData.innerRadius && distanceFromCenter <= point.regionData.radius) ||\n (distanceFromCenter <= point.regionData.innerRadius && distanceFromCenter >= point.regionData.radius))\n && distanceFromCenter <= series.chart.radius)) {\n return point;\n }\n }\n else if (this.checkRegionContainsPoint(point.regions, rect, x, y)) {\n return point;\n }\n }\n return null;\n };\n /**\n * Checks whether the region contains a point\n */\n ChartData.prototype.checkRegionContainsPoint = function (regionRect, rect, x, y) {\n var _this = this;\n return regionRect.some(function (region, index) {\n _this.lierIndex = index;\n return withInBounds(x, y, new Rect((_this.chart.chartAreaType === 'Cartesian' ? rect.x : 0) + region.x, (_this.chart.chartAreaType === 'Cartesian' ? rect.y : 0) + region.y, region.width, region.height));\n });\n };\n ChartData.prototype.getClosest = function (series, value) {\n var xData = series.xData;\n var closest;\n if (value >= series.xMin - 0.5 && value <= series.xMax + 0.5) {\n for (var _i = 0, xData_1 = xData; _i < xData_1.length; _i++) {\n var data = xData_1[_i];\n if (closest == null || Math.abs(data - value) < Math.abs(closest - value)) {\n closest = data;\n }\n }\n }\n return closest;\n };\n ChartData.prototype.getClosestX = function (chart, series) {\n var value;\n var rect = series.clipRect;\n if (!chart.requireInvertedAxis) {\n value = getValueXByPoint(chart.mouseX - rect.x, rect.width, series.xAxis);\n }\n else {\n value = getValueYByPoint(chart.mouseY - rect.y, rect.height, series.xAxis);\n }\n var closest = this.getClosest(series, value);\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (closest === point.xValue && point.visible) {\n return new PointData(point, series);\n }\n }\n return null;\n };\n return ChartData;\n}());\nexport { ChartData };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex, Collection } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { StackValues, RectOption } from '../../common/utils/helper';\nimport { firstToLowerCase, Rect, logBase, CircleOption } from '../../common/utils/helper';\nimport { Border, Font, Margin, Animation, EmptyPointSettings, CornerRadius, Connector } from '../../common/model/base';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { seriesRender } from '../../common/model/constants';\n/**\n * Configures the data label in the series.\n */\nvar DataLabelSettings = /** @class */ (function (_super) {\n __extends(DataLabelSettings, _super);\n function DataLabelSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], DataLabelSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], DataLabelSettings.prototype, \"name\", void 0);\n __decorate([\n Property('transparent')\n ], DataLabelSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], DataLabelSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property('Auto')\n ], DataLabelSettings.prototype, \"position\", void 0);\n __decorate([\n Property(5)\n ], DataLabelSettings.prototype, \"rx\", void 0);\n __decorate([\n Property(5)\n ], DataLabelSettings.prototype, \"ry\", void 0);\n __decorate([\n Property('Center')\n ], DataLabelSettings.prototype, \"alignment\", void 0);\n __decorate([\n Complex({ width: null, color: null }, Border)\n ], DataLabelSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ left: 5, right: 5, top: 5, bottom: 5 }, Margin)\n ], DataLabelSettings.prototype, \"margin\", void 0);\n __decorate([\n Complex({ size: '11px', color: null }, Font)\n ], DataLabelSettings.prototype, \"font\", void 0);\n __decorate([\n Property(null)\n ], DataLabelSettings.prototype, \"template\", void 0);\n return DataLabelSettings;\n}(ChildProperty));\nexport { DataLabelSettings };\n/**\n * Configures the marker in the series.\n */\nvar MarkerSettings = /** @class */ (function (_super) {\n __extends(MarkerSettings, _super);\n function MarkerSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], MarkerSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('Circle')\n ], MarkerSettings.prototype, \"shape\", void 0);\n __decorate([\n Property('')\n ], MarkerSettings.prototype, \"imageUrl\", void 0);\n __decorate([\n Property(5)\n ], MarkerSettings.prototype, \"height\", void 0);\n __decorate([\n Property(5)\n ], MarkerSettings.prototype, \"width\", void 0);\n __decorate([\n Complex({ width: 2, color: null }, Border)\n ], MarkerSettings.prototype, \"border\", void 0);\n __decorate([\n Property(null)\n ], MarkerSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], MarkerSettings.prototype, \"opacity\", void 0);\n __decorate([\n Complex({}, DataLabelSettings)\n ], MarkerSettings.prototype, \"dataLabel\", void 0);\n return MarkerSettings;\n}(ChildProperty));\nexport { MarkerSettings };\n/**\n * Points model for the series.\n * @private\n */\nvar Points = /** @class */ (function () {\n function Points() {\n this.symbolLocations = null;\n this.regions = null;\n this.regionData = null;\n this.marker = {\n visible: true\n };\n }\n return Points;\n}());\nexport { Points };\n/**\n * Defines the behavior of the Trendlines\n */\nvar Trendline = /** @class */ (function (_super) {\n __extends(Trendline, _super);\n function Trendline() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.clipRect = new Rect(0, 0, 0, 0);\n return _this;\n }\n /** @private */\n Trendline.prototype.setDataSource = function (series, chart) {\n if (series) {\n this.points = series.points;\n }\n var type = firstToLowerCase(this.type);\n chart.trendLineModule.initDataSource(this, chart);\n chart.visibleSeriesCount++;\n };\n __decorate([\n Property('')\n ], Trendline.prototype, \"name\", void 0);\n __decorate([\n Property('Linear')\n ], Trendline.prototype, \"type\", void 0);\n __decorate([\n Property(2)\n ], Trendline.prototype, \"period\", void 0);\n __decorate([\n Property(2)\n ], Trendline.prototype, \"polynomialOrder\", void 0);\n __decorate([\n Property(0)\n ], Trendline.prototype, \"backwardForecast\", void 0);\n __decorate([\n Property(0)\n ], Trendline.prototype, \"forwardForecast\", void 0);\n __decorate([\n Complex({}, Animation)\n ], Trendline.prototype, \"animation\", void 0);\n __decorate([\n Complex({}, MarkerSettings)\n ], Trendline.prototype, \"marker\", void 0);\n __decorate([\n Property(true)\n ], Trendline.prototype, \"enableTooltip\", void 0);\n __decorate([\n Property(null)\n ], Trendline.prototype, \"intercept\", void 0);\n __decorate([\n Property('')\n ], Trendline.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], Trendline.prototype, \"width\", void 0);\n __decorate([\n Property('SeriesType')\n ], Trendline.prototype, \"legendShape\", void 0);\n return Trendline;\n}(ChildProperty));\nexport { Trendline };\n/**\n * Configures Error bar in series.\n */\nvar ErrorBarCapSettings = /** @class */ (function (_super) {\n __extends(ErrorBarCapSettings, _super);\n function ErrorBarCapSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], ErrorBarCapSettings.prototype, \"width\", void 0);\n __decorate([\n Property(10)\n ], ErrorBarCapSettings.prototype, \"length\", void 0);\n __decorate([\n Property(null)\n ], ErrorBarCapSettings.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarCapSettings.prototype, \"opacity\", void 0);\n return ErrorBarCapSettings;\n}(ChildProperty));\nexport { ErrorBarCapSettings };\nvar ChartSegment = /** @class */ (function (_super) {\n __extends(ChartSegment, _super);\n function ChartSegment() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ChartSegment.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], ChartSegment.prototype, \"color\", void 0);\n __decorate([\n Property('0')\n ], ChartSegment.prototype, \"dashArray\", void 0);\n return ChartSegment;\n}(ChildProperty));\nexport { ChartSegment };\nvar ErrorBarSettings = /** @class */ (function (_super) {\n __extends(ErrorBarSettings, _super);\n function ErrorBarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], ErrorBarSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('Fixed')\n ], ErrorBarSettings.prototype, \"type\", void 0);\n __decorate([\n Property('Both')\n ], ErrorBarSettings.prototype, \"direction\", void 0);\n __decorate([\n Property('Vertical')\n ], ErrorBarSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(null)\n ], ErrorBarSettings.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"verticalError\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"width\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"horizontalError\", void 0);\n __decorate([\n Property(3)\n ], ErrorBarSettings.prototype, \"verticalPositiveError\", void 0);\n __decorate([\n Property(3)\n ], ErrorBarSettings.prototype, \"verticalNegativeError\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"horizontalPositiveError\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"horizontalNegativeError\", void 0);\n __decorate([\n Complex(null, ErrorBarCapSettings)\n ], ErrorBarSettings.prototype, \"errorBarCap\", void 0);\n return ErrorBarSettings;\n}(ChildProperty));\nexport { ErrorBarSettings };\n/**\n * Defines the common behavior of Series and Technical Indicators\n */\nvar SeriesBase = /** @class */ (function (_super) {\n __extends(SeriesBase, _super);\n function SeriesBase() {\n /**\n * The DataSource field that contains the x value.\n * It is applicable for series and technical indicators\n * @default ''\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.currentViewData = [];\n /** @private */\n _this.clipRect = new Rect(0, 0, 0, 0);\n /** @private */\n _this.seriesType = 'XY';\n return _this;\n }\n /**\n * Process data for the series.\n * @hidden\n */\n SeriesBase.prototype.processJsonData = function () {\n var i = 0;\n var len = Object.keys(this.currentViewData).length;\n var point = new Points();\n var textMappingName = this instanceof Series && this.marker.dataLabel.name ?\n this.marker.dataLabel.name : '';\n if (this instanceof Series && this.type === 'Waterfall') {\n this.chart[firstToLowerCase(this.type) + 'SeriesModule'].\n processWaterfallData(this.currentViewData, this);\n }\n this.points = [];\n this.xMin = Infinity;\n this.xMax = -Infinity;\n this.yMin = Infinity;\n this.yMax = -Infinity;\n this.sizeMax = -Infinity;\n this.getSeriesType();\n if (this.xAxis.valueType === 'Category') {\n while (i < len) {\n point = this.dataPoint(i, textMappingName);\n this.pushCategoryData(point, i, point.x);\n this.pushData(point, i);\n this.setEmptyPoint(point, i);\n i++;\n }\n }\n else if (this.xAxis.valueType.indexOf('DateTime') > -1) {\n var option = {\n skeleton: 'full',\n type: 'dateTime'\n };\n var dateParser = this.chart.intl.getDateParser(option);\n var dateFormatter = this.chart.intl.getDateFormat(option);\n while (i < len) {\n point = this.dataPoint(i, textMappingName);\n point.x = new Date(DataUtil.parse.parseJson({ val: point.x }).val);\n if (this.xAxis.valueType === 'DateTime') {\n point.xValue = Date.parse(dateParser(dateFormatter(point.x)));\n }\n else {\n this.pushCategoryData(point, i, Date.parse(dateParser(dateFormatter(point.x))).toString());\n }\n this.pushData(point, i);\n this.setEmptyPoint(point, i);\n i++;\n }\n }\n else {\n while (i < len) {\n point = this.dataPoint(i, textMappingName);\n point.xValue = point.x;\n this.pushData(point, i);\n this.setEmptyPoint(point, i);\n i++;\n }\n }\n if (this instanceof Series) {\n if (this.type.indexOf('Spline') > -1 || (this.drawType.indexOf('Spline') > -1 && this.chart.chartAreaType === 'PolarRadar')) {\n var isArea = (this.type.indexOf('Area') > -1 || this.drawType === 'Area');\n this.chart['spline' + (isArea ? 'Area' : '') + 'SeriesModule'].findSplinePoint(this);\n }\n }\n };\n SeriesBase.prototype.pushData = function (point, i) {\n point.index = i;\n point.yValue = point.y;\n // To find the min, max for the axis range.\n this.xMin = Math.min(this.xMin, point.xValue);\n this.xMax = Math.max(this.xMax, point.xValue);\n this.xData.push(point.xValue);\n };\n /** @private */\n SeriesBase.prototype.dataPoint = function (i, textMappingName) {\n var point;\n this.points[i] = new Points();\n point = this.points[i];\n var currentViewData = this.currentViewData;\n point.x = getValue(this.xName, currentViewData[i]);\n point.high = getValue(this.high, currentViewData[i]);\n point.low = getValue(this.low, currentViewData[i]);\n point.open = getValue(this.open, currentViewData[i]);\n point.close = getValue(this.close, currentViewData[i]);\n point.volume = getValue(this.volume, currentViewData[i]);\n point.interior = getValue(this.pointColorMapping, currentViewData[i]);\n if (this instanceof Series) {\n point.y = getValue(this.yName, currentViewData[i]);\n point.size = getValue(this.size, currentViewData[i]);\n point.text = getValue(textMappingName, currentViewData[i]);\n }\n return point;\n };\n /**\n * To set empty point value based on empty point mode\n * @private\n */\n SeriesBase.prototype.setEmptyPoint = function (point, i) {\n if (!this.findVisibility(point)) {\n point.visible = true;\n return null;\n }\n point.isEmpty = true;\n var mode = this instanceof Series ? this.emptyPointSettings.mode : 'Drop';\n switch (mode) {\n case 'Zero':\n point.visible = true;\n if (this instanceof Series && this.seriesType.indexOf('HighLow') > -1) {\n point.high = point.low = 0;\n if (this.seriesType.indexOf('HighLowOpenClose') > -1) {\n point.open = point.close = 0;\n }\n }\n else {\n point.y = point.yValue = this.yData[i] = 0;\n }\n break;\n case 'Average':\n if (this instanceof Series) {\n if (this.seriesType.indexOf('HighLow') > -1) {\n point.high = (isNullOrUndefined(point.high) || isNaN(+point.high)) ? this.getAverage(this.high, i) : point.high;\n point.low = (isNullOrUndefined(point.low) || isNaN(+point.low)) ? this.getAverage(this.low, i) : point.low;\n if (this.seriesType.indexOf('HighLowOpenClose') > -1) {\n point.open = (isNullOrUndefined(point.open) || isNaN(+point.open)) ? this.getAverage(this.open, i) : point.open;\n point.close = (isNullOrUndefined(point.close) || isNaN(+point.close)) ? this.getAverage(this.close, i) :\n point.close;\n }\n }\n else {\n point.y = point.yValue = this.yData[i] = this.getAverage(this.yName, i);\n }\n }\n point.visible = true;\n break;\n case 'Drop':\n case 'Gap':\n this.yData[i] = null;\n point.visible = false;\n break;\n }\n };\n SeriesBase.prototype.findVisibility = function (point) {\n var type = this instanceof Series ? this.seriesType : 'HighLowOpenClose';\n var yValues;\n switch (type) {\n case 'XY':\n this.setXYMinMax(point.yValue);\n this.yData.push(point.yValue);\n if (this instanceof Series && this.type === 'Bubble') {\n this.sizeMax = Math.max(this.sizeMax, (isNullOrUndefined(point.size) || isNaN(+point.size)) ? this.sizeMax\n : point.size);\n }\n return isNullOrUndefined(point.x) || (isNullOrUndefined(point.y) || isNaN(+point.y));\n case 'HighLow':\n this.setHiloMinMax(point.high, point.low);\n return isNullOrUndefined(point.x) || (isNullOrUndefined(point.low) || isNaN(+point.low)) ||\n (isNullOrUndefined(point.high) || isNaN(+point.high));\n case 'HighLowOpenClose':\n this.setHiloMinMax(point.high, point.low);\n return isNullOrUndefined(point.x) || (isNullOrUndefined(point.low) || isNaN(+point.low)) ||\n (isNullOrUndefined(point.open) || isNaN(+point.open)) || (isNullOrUndefined(point.close) || isNaN(+point.close))\n || (isNullOrUndefined(point.high) || isNaN(+point.high));\n case 'BoxPlot':\n yValues = (point.y || [null]).filter(function (value) {\n return !isNullOrUndefined(value) && !isNaN(value);\n }).sort(function (a, b) {\n return a - b;\n });\n point.y = yValues;\n this.yMin = Math.min(this.yMin, Math.min.apply(Math, yValues));\n this.yMax = Math.max(this.yMax, Math.max.apply(Math, yValues));\n return !yValues.length;\n }\n };\n /**\n * To get Y min max for the provided point seriesType XY\n */\n SeriesBase.prototype.setXYMinMax = function (yValue) {\n this.yMin = Math.min(this.yMin, (isNullOrUndefined(yValue) || isNaN(yValue)) ? this.yMin : yValue);\n this.yMax = Math.max(this.yMax, (isNullOrUndefined(yValue) || isNaN(yValue)) ? this.yMax : yValue);\n };\n /**\n * To get Y min max for the provided point seriesType XY\n */\n SeriesBase.prototype.setHiloMinMax = function (high, low) {\n this.yMin = Math.min(this.yMin, Math.min((isNullOrUndefined(low) || isNaN(low)) ? this.yMin : low, (isNullOrUndefined(high) || isNaN(high)) ? this.yMin : high));\n this.yMax = Math.max(this.yMax, Math.max((isNullOrUndefined(low) || isNaN(low)) ? this.yMax : low, (isNullOrUndefined(high) || isNaN(high)) ? this.yMax : high));\n };\n /**\n * Finds the type of the series\n * @private\n */\n SeriesBase.prototype.getSeriesType = function () {\n var type;\n if (this instanceof Series) {\n var seriesType = this.chart.chartAreaType === 'PolarRadar' ? this.drawType : this.type;\n if (seriesType) {\n switch (seriesType) {\n case 'RangeColumn':\n case 'RangeArea':\n case 'Hilo':\n type = 'HighLow';\n break;\n case 'HiloOpenClose':\n case 'Candle':\n type = 'HighLowOpenClose';\n break;\n case 'BoxAndWhisker':\n type = 'BoxPlot';\n break;\n default:\n type = 'XY';\n }\n }\n }\n this.seriesType = type;\n };\n /** @private */\n SeriesBase.prototype.pushCategoryData = function (point, index, pointX) {\n if (!this.xAxis.isIndexed) {\n if (this.xAxis.labels.indexOf(pointX) < 0) {\n this.xAxis.labels.push(pointX);\n }\n point.xValue = this.xAxis.labels.indexOf(pointX);\n }\n else {\n this.xAxis.labels[index] ? this.xAxis.labels[index] += ', ' + pointX :\n this.xAxis.labels.push(pointX);\n point.xValue = index;\n }\n };\n /**\n * To find average of given property\n */\n SeriesBase.prototype.getAverage = function (member, i, data) {\n if (data === void 0) { data = this.currentViewData; }\n var previous = data[i - 1] ? (data[i - 1][member] || 0) : 0;\n var next = data[i + 1] ? (data[i + 1][member] || 0) : 0;\n return (previous + next) / 2;\n };\n /**\n * To find the control points for spline.\n * @return {void}\n * @private\n */\n SeriesBase.prototype.refreshDataManager = function (chart) {\n var _this = this;\n this.chart = chart;\n if (isNullOrUndefined(this.query) && !isNullOrUndefined(this.dataSource)) {\n this.dataManagerSuccess({ result: this.dataSource, count: this.dataSource.length }, chart, false);\n return;\n }\n var dataManager = this.dataModule.getData(this.dataModule.generateQuery().requiresCount());\n dataManager.then(function (e) { return _this.dataManagerSuccess(e, chart); });\n };\n SeriesBase.prototype.dataManagerSuccess = function (e, chart, isRemoteData) {\n if (isRemoteData === void 0) { isRemoteData = true; }\n this.currentViewData = e.result !== '' ? e.result : [];\n if (this instanceof Series) {\n var argsData = {\n name: seriesRender, series: this, data: this.currentViewData, fill: this.interior\n };\n this.chart.trigger(seriesRender, argsData);\n this.interior = argsData.fill;\n this.currentViewData = argsData.data;\n }\n this.processJsonData();\n this.recordsCount = e.count;\n this.refreshChart(isRemoteData);\n };\n SeriesBase.prototype.refreshChart = function (isRemoteData) {\n var chart = this.chart;\n if (this instanceof Series) {\n chart.visibleSeriesCount += isRemoteData ? 1 : 0;\n }\n chart.refreshTechnicalIndicator(this);\n if (this instanceof Series && this.category !== 'TrendLine') {\n for (var _i = 0, _a = this.trendlines; _i < _a.length; _i++) {\n var trendline = _a[_i];\n trendline.setDataSource(this, chart);\n }\n }\n //if (chart.visibleSeries.length === (chart.visibleSeriesCount - chart.indicators.length)) {\n if (chart.visibleSeries.length === (chart.visibleSeriesCount)) {\n chart.refreshBound();\n chart.trigger('loaded', { chart: chart });\n }\n if (this instanceof Series) {\n chart.visibleSeriesCount += isRemoteData ? 0 : 1;\n }\n };\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"xName\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"high\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"low\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"open\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"close\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"volume\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"pointColorMapping\", void 0);\n __decorate([\n Property(null)\n ], SeriesBase.prototype, \"xAxisName\", void 0);\n __decorate([\n Property(null)\n ], SeriesBase.prototype, \"yAxisName\", void 0);\n __decorate([\n Complex(null, Animation)\n ], SeriesBase.prototype, \"animation\", void 0);\n __decorate([\n Property(null)\n ], SeriesBase.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], SeriesBase.prototype, \"width\", void 0);\n __decorate([\n Property('0')\n ], SeriesBase.prototype, \"dashArray\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], SeriesBase.prototype, \"query\", void 0);\n __decorate([\n Collection([], ChartSegment)\n ], SeriesBase.prototype, \"segments\", void 0);\n __decorate([\n Property('X')\n ], SeriesBase.prototype, \"segmentAxis\", void 0);\n return SeriesBase;\n}(ChildProperty));\nexport { SeriesBase };\n/**\n * Configures the series in charts.\n */\nvar Series = /** @class */ (function (_super) {\n __extends(Series, _super);\n // tslint:disable-next-line:no-any\n function Series(parent, propName, defaultValue, isArray) {\n var _this = _super.call(this, parent, propName, defaultValue, isArray) || this;\n _this.visibleSeriesCount = 0;\n /** @private */\n _this.category = 'Series';\n /** @private */\n _this.isRectSeries = false;\n /** @private */\n _this.drawPoints = [];\n /** @private */\n _this.delayedAnimation = false;\n return _this;\n }\n /**\n * Refresh the axis label.\n * @return {boolean}\n * @private\n */\n Series.prototype.refreshAxisLabel = function () {\n if (this.xAxis.valueType !== 'Category') {\n return null;\n }\n this.xAxis.labels = [];\n for (var _i = 0, _a = this.xAxis.series; _i < _a.length; _i++) {\n var item = _a[_i];\n if (item.visible) {\n item.xMin = Infinity;\n item.xMax = -Infinity;\n for (var _b = 0, _c = item.points; _b < _c.length; _b++) {\n var point = _c[_b];\n item.pushCategoryData(point, point.index, point.x);\n item.xMin = Math.min(item.xMin, point.xValue);\n item.xMax = Math.max(item.xMax, point.xValue);\n }\n }\n }\n };\n /**\n * To get the series collection.\n * @return {void}\n * @private\n */\n Series.prototype.findSeriesCollection = function (column, row, isStack) {\n var seriesCollection = [];\n for (var _i = 0, _a = row.axes; _i < _a.length; _i++) {\n var rowAxis = _a[_i];\n for (var _b = 0, _c = rowAxis.series; _b < _c.length; _b++) {\n var rowSeries = _c[_b];\n for (var _d = 0, _e = column.axes; _d < _e.length; _d++) {\n var axis = _e[_d];\n for (var _f = 0, _g = axis.series; _f < _g.length; _f++) {\n var series = _g[_f];\n if (series === rowSeries && series.visible && this.rectSeriesInChart(series, isStack)) {\n seriesCollection.push(series);\n }\n }\n }\n }\n }\n return seriesCollection;\n };\n /**\n * To get the column type series.\n * @return {void}\n * @private\n */\n Series.prototype.rectSeriesInChart = function (series, isStack) {\n var type = (series.type).toLowerCase();\n return (type.indexOf('column') !== -1 || type.indexOf('bar') !== -1 ||\n type.indexOf('hiloopenclose') !== -1 || type.indexOf('candle') !== -1 ||\n type.indexOf('hilo') !== -1 || series.drawType.indexOf('Column') !== -1 ||\n type.indexOf('waterfall') !== -1 || type.indexOf('boxandwhisker') !== -1 || isStack);\n };\n /**\n * To calculate the stacked values.\n * @return {void}\n * @private\n */\n Series.prototype.calculateStackedValue = function (isStacking100, chart) {\n var axisSeries;\n for (var _i = 0, _a = chart.columns; _i < _a.length; _i++) {\n var columnItem = _a[_i];\n for (var _b = 0, _c = chart.rows; _b < _c.length; _b++) {\n var item = _c[_b];\n this.calculateStackingValues(this.findSeriesCollection(columnItem, item, true), isStacking100);\n }\n }\n };\n Series.prototype.calculateStackingValues = function (seriesCollection, isStacking100) {\n var startValues;\n var endValues;\n var yValues = [];\n var lastPositive = [];\n var lastNegative = [];\n var stackingGroup;\n var lastValue;\n var value;\n var frequencies = [];\n if (isStacking100) {\n frequencies = this.findFrequencies(seriesCollection);\n }\n for (var _i = 0, seriesCollection_1 = seriesCollection; _i < seriesCollection_1.length; _i++) {\n var series = seriesCollection_1[_i];\n if (series.type.indexOf('Stacking') !== -1 || (series.drawType.indexOf('Stacking') !== -1 &&\n (series.chart.chartAreaType === 'PolarRadar'))) {\n stackingGroup = (series.type.indexOf('StackingArea') !== -1) ? 'StackingArea100' : series.stackingGroup;\n if (!lastPositive[stackingGroup]) {\n lastPositive[stackingGroup] = [];\n lastNegative[stackingGroup] = [];\n }\n yValues = series.yData;\n startValues = [];\n endValues = [];\n for (var j = 0, pointsLength = series.points.length; j < pointsLength; j++) {\n lastValue = 0;\n value = yValues[j];\n if (lastPositive[stackingGroup][series.points[j].xValue] === undefined) {\n lastPositive[stackingGroup][series.points[j].xValue] = 0;\n }\n if (lastNegative[stackingGroup][series.points[j].xValue] === undefined) {\n lastNegative[stackingGroup][series.points[j].xValue] = 0;\n }\n if (isStacking100) {\n value = value / frequencies[stackingGroup][series.points[j].xValue] * 100;\n value = !isNaN(value) ? value : 0;\n series.points[j].percent = value.toFixed(2);\n }\n if (value >= 0) {\n lastValue = lastPositive[stackingGroup][series.points[j].xValue];\n lastPositive[stackingGroup][series.points[j].xValue] += value;\n }\n else {\n lastValue = lastNegative[stackingGroup][series.points[j].xValue];\n lastNegative[stackingGroup][series.points[j].xValue] += value;\n }\n startValues.push(lastValue);\n endValues.push(value + lastValue);\n if (isStacking100 && (endValues[j] > 100)) {\n endValues[j] = 100;\n }\n }\n series.stackedValues = new StackValues(startValues, endValues);\n series.yMin = Math.min.apply(0, startValues);\n series.yMax = Math.max.apply(0, endValues);\n if (series.yMin > Math.min.apply(0, endValues)) {\n series.yMin = (isStacking100) ? -100 : Math.min.apply(0, endValues);\n }\n if (series.yMax < Math.max.apply(0, startValues)) {\n series.yMax = 0;\n }\n }\n }\n };\n Series.prototype.findFrequencies = function (seriesCollection) {\n var frequencies = [];\n var stackingGroup;\n for (var _i = 0, seriesCollection_2 = seriesCollection; _i < seriesCollection_2.length; _i++) {\n var series = seriesCollection_2[_i];\n series.yAxis.isStack100 = series.type.indexOf('100') !== -1 ? true : false;\n if (series.type.indexOf('Stacking') !== -1) {\n stackingGroup = (series.type.indexOf('StackingArea') !== -1) ? 'StackingArea100' : series.stackingGroup;\n if (!frequencies[stackingGroup]) {\n frequencies[stackingGroup] = [];\n }\n for (var j = 0, pointsLength = series.points.length; j < pointsLength; j++) {\n if (frequencies[stackingGroup][series.points[j].xValue] === undefined) {\n frequencies[stackingGroup][series.points[j].xValue] = 0;\n }\n if (series.yData[j] > 0) {\n frequencies[stackingGroup][series.points[j].xValue] += series.yData[j];\n }\n else {\n frequencies[stackingGroup][series.points[j].xValue] -= series.yData[j];\n }\n }\n }\n }\n return frequencies;\n };\n /**\n * To find the log values.\n * @return {void}\n * @private\n */\n Series.prototype.logWithIn = function (value, axis) {\n if (axis.valueType === 'Logarithmic') {\n value = logBase(value, axis.logBase);\n }\n else {\n value = value;\n }\n return value;\n };\n /* private dataManagerFailure(e: { result: Object[] }): void {\n this.currentViewData = [];\n this.refreshChart();\n }*/\n /** @private */\n Series.prototype.renderSeries = function (chart, index) {\n var seriesType = firstToLowerCase(this.type);\n if (seriesType.indexOf('100') !== -1) {\n seriesType = seriesType.replace('100', '');\n }\n if (chart[seriesType + 'SeriesModule']) {\n if (this.category !== 'Indicator' && this.category !== 'TrendLine') {\n this.createSeriesElements(chart);\n }\n chart[seriesType + 'SeriesModule'].render(this, this.xAxis, this.yAxis, chart.requireInvertedAxis);\n if (this.category !== 'Indicator') {\n if (this.errorBar.visible) {\n this.chart.errorBarModule.render(this);\n }\n if (this.marker.dataLabel.visible) {\n chart.dataLabelModule.render(this, this.chart, this.marker.dataLabel);\n }\n this.appendSeriesElement(chart.seriesElements, chart);\n }\n this.performAnimation(chart, seriesType, this.errorBar, this.marker, this.marker.dataLabel);\n }\n };\n /**\n * To create seris element.\n * @return {void}\n * @private\n */\n Series.prototype.createSeriesElements = function (chart) {\n if (this.category !== 'Indicator') {\n var elementId = chart.element.id;\n var xAxisRect = this.xAxis.rect;\n // 8 for extend border value 5 for extend size value\n var explodeValue = this.marker.border.width + 8 + 5;\n var yAxisRect = this.yAxis.rect;\n var marker = this.marker;\n var render = chart.renderer;\n var index = this.index;\n var markerHeight = (this.type === 'Scatter') ? (this.marker.height + explodeValue) / 2 : 0;\n var markerWidth = (this.type === 'Scatter') ? (this.marker.width + explodeValue) / 2 : 0;\n if (chart.chartAreaType === 'PolarRadar') {\n this.clipRectElement = render.drawCircularClipPath(new CircleOption(elementId + '_ChartSeriesClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, this.clipRect.width / 2 + this.clipRect.x, this.clipRect.height / 2 + this.clipRect.y, chart.radius));\n }\n else {\n this.clipRectElement = render.drawClipPath(new RectOption(elementId + '_ChartSeriesClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: -markerWidth, y: -markerHeight,\n width: this.clipRect.width + markerWidth * 2,\n height: this.clipRect.height + markerHeight * 2\n }));\n }\n var transform = void 0;\n transform = chart.chartAreaType === 'Cartesian' ? 'translate(' + this.clipRect.x + ',' + (this.clipRect.y) + ')' : '';\n this.symbolElement = null;\n this.seriesElement = render.createGroup({\n 'id': elementId + 'SeriesGroup' + index,\n 'transform': transform,\n 'clip-path': 'url(#' + elementId + '_ChartSeriesClipRect_' + index + ')'\n });\n this.seriesElement.appendChild(this.clipRectElement);\n }\n };\n /**\n * To append the series.\n * @return {void}\n * @private\n */\n Series.prototype.appendSeriesElement = function (element, chart) {\n var marker = this.marker;\n var dataLabel = marker.dataLabel;\n if (this.category !== 'TrendLine') {\n chart.seriesElements.appendChild(this.seriesElement);\n var errorBar = this.errorBar;\n if (errorBar.visible) {\n if (chart.chartAreaType === 'PolarRadar') {\n chart.seriesElements.appendChild(this.seriesElement);\n }\n else {\n chart.seriesElements.appendChild(this.errorBarElement);\n }\n }\n if (this.type === 'Scatter' || this.type === 'Bubble') {\n chart.seriesElements.appendChild(this.seriesElement);\n }\n }\n if (marker.visible && ((chart.chartAreaType === 'Cartesian' && (!this.isRectSeries || this.type === 'BoxAndWhisker'))\n || ((this.drawType !== 'Scatter' && !this.isRectSeries) && chart.chartAreaType === 'PolarRadar')) &&\n this.type !== 'Scatter' && this.type !== 'Bubble') {\n chart.seriesElements.appendChild(this.symbolElement);\n }\n if (dataLabel.visible) {\n chart.dataLabelElements.appendChild(this.shapeElement);\n chart.dataLabelElements.appendChild(this.textElement);\n }\n if (chart.dataLabelElements.hasChildNodes()) {\n chart.seriesElements.appendChild(chart.dataLabelElements);\n }\n };\n /**\n * To perform animation for chart series.\n * @return {void}\n * @private\n */\n Series.prototype.performAnimation = function (chart, type, errorBar, marker, dataLabel) {\n if (this.animation.enable && chart.animateSeries) {\n chart[type + 'SeriesModule'].doAnimation(this);\n if (errorBar.visible) {\n chart.errorBarModule.doErrorBarAnimation(this);\n }\n if (marker.visible) {\n chart.markerRender.doMarkerAnimation(this);\n }\n if (dataLabel.visible) {\n chart.dataLabelModule.doDataLabelAnimation(this);\n }\n }\n };\n /**\n * To set border color for empty point\n * @private\n */\n Series.prototype.setPointColor = function (point, color) {\n color = point.interior || color;\n return point.isEmpty ? (this.emptyPointSettings.fill || color) : color;\n };\n /**\n * To set border color for empty point\n * @private\n */\n Series.prototype.setBorderColor = function (point, border) {\n border.width = point.isEmpty ? (this.emptyPointSettings.border.width || border.width) : border.width;\n border.color = point.isEmpty ? (this.emptyPointSettings.border.color || border.color) : border.color;\n return border;\n };\n __decorate([\n Property('')\n ], Series.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], Series.prototype, \"yName\", void 0);\n __decorate([\n Property('Line')\n ], Series.prototype, \"drawType\", void 0);\n __decorate([\n Property(true)\n ], Series.prototype, \"isClosed\", void 0);\n __decorate([\n Property('#2ecd71')\n ], Series.prototype, \"bearFillColor\", void 0);\n __decorate([\n Property('#e74c3d')\n ], Series.prototype, \"bullFillColor\", void 0);\n __decorate([\n Property(false)\n ], Series.prototype, \"enableSolidCandles\", void 0);\n __decorate([\n Property('')\n ], Series.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], Series.prototype, \"stackingGroup\", void 0);\n __decorate([\n Property(true)\n ], Series.prototype, \"visible\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 0 }, Border)\n ], Series.prototype, \"border\", void 0);\n __decorate([\n Property(1)\n ], Series.prototype, \"opacity\", void 0);\n __decorate([\n Property('Line')\n ], Series.prototype, \"type\", void 0);\n __decorate([\n Complex(null, ErrorBarSettings)\n ], Series.prototype, \"errorBar\", void 0);\n __decorate([\n Complex(null, MarkerSettings)\n ], Series.prototype, \"marker\", void 0);\n __decorate([\n Collection([], Trendline)\n ], Series.prototype, \"trendlines\", void 0);\n __decorate([\n Property(true)\n ], Series.prototype, \"enableTooltip\", void 0);\n __decorate([\n Property('SeriesType')\n ], Series.prototype, \"legendShape\", void 0);\n __decorate([\n Property(null)\n ], Series.prototype, \"selectionStyle\", void 0);\n __decorate([\n Property(1)\n ], Series.prototype, \"minRadius\", void 0);\n __decorate([\n Property(3)\n ], Series.prototype, \"maxRadius\", void 0);\n __decorate([\n Property('Natural')\n ], Series.prototype, \"splineType\", void 0);\n __decorate([\n Property(0.5)\n ], Series.prototype, \"cardinalSplineTension\", void 0);\n __decorate([\n Complex(null, EmptyPointSettings)\n ], Series.prototype, \"emptyPointSettings\", void 0);\n __decorate([\n Property(true)\n ], Series.prototype, \"showMean\", void 0);\n __decorate([\n Property('Normal')\n ], Series.prototype, \"boxPlotMode\", void 0);\n __decorate([\n Property(0.7)\n ], Series.prototype, \"columnWidth\", void 0);\n __decorate([\n Property(0)\n ], Series.prototype, \"columnSpacing\", void 0);\n __decorate([\n Property('#C64E4A')\n ], Series.prototype, \"negativeFillColor\", void 0);\n __decorate([\n Property('#4E81BC')\n ], Series.prototype, \"summaryFillColor\", void 0);\n __decorate([\n Property()\n ], Series.prototype, \"intermediateSumIndexes\", void 0);\n __decorate([\n Property()\n ], Series.prototype, \"sumIndexes\", void 0);\n __decorate([\n Complex({ color: 'black', width: 2 }, Connector)\n ], Series.prototype, \"connector\", void 0);\n __decorate([\n Complex(null, CornerRadius)\n ], Series.prototype, \"cornerRadius\", void 0);\n return Series;\n}(SeriesBase));\nexport { Series };\n","import { Query, DataManager } from '@syncfusion/ej2-data';\n/**\n * data module is used to generate query and dataSource\n */\nvar Data = /** @class */ (function () {\n /**\n * Constructor for data module\n * @private\n */\n function Data(dataSource, query) {\n this.initDataManager(dataSource, query);\n }\n /**\n * The function used to initialize dataManager and query\n * @return {void}\n * @private\n */\n Data.prototype.initDataManager = function (dataSource, query) {\n this.dataManager = dataSource instanceof DataManager ? dataSource : new DataManager(dataSource);\n this.query = query instanceof Query ? query : new Query();\n };\n /**\n * The function used to generate updated Query from chart model\n * @return {void}\n * @private\n */\n Data.prototype.generateQuery = function () {\n var query = this.query.clone();\n return query;\n };\n /**\n * The function used to get dataSource by executing given Query\n * @param {Query} query - A Query that specifies to generate dataSource\n * @return {void}\n * @private\n */\n Data.prototype.getData = function (query) {\n return this.dataManager.executeQuery(query);\n };\n return Data;\n}());\nexport { Data };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { drawSymbol, PathOption, Size } from '../../common/utils/helper';\nimport { Browser, extend, remove } from '@syncfusion/ej2-base';\nimport { ChartData } from '../../chart/utils/get-data';\nimport { withInBounds, PointData, stopTimer } from '../../common/utils/helper';\nimport { colorNameToHex, convertHexToColor } from '../../common/utils/helper';\n/**\n * Marker Module used to render the marker for line type series.\n */\nvar MarkerExplode = /** @class */ (function (_super) {\n __extends(MarkerExplode, _super);\n /**\n * Constructor for the marker module.\n * @private\n */\n function MarkerExplode(chart) {\n var _this = _super.call(this, chart) || this;\n _this.addEventListener();\n _this.elementId = chart.element.id;\n return _this;\n }\n /**\n * @hidden\n */\n MarkerExplode.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n this.chart.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.chart.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n };\n /**\n * @hidden\n */\n /* public removeEventListener(): void {\n if (this.chart.isDestroyed) { return; }\n this.chart.off(Browser.touchMoveEvent, this.mouseMoveHandler);\n }*/\n /**\n * @hidden\n */\n MarkerExplode.prototype.mouseUpHandler = function () {\n var chart = this.chart;\n if (chart.isTouch && !chart.crosshair.enable && !this.isSelected(chart)) {\n this.markerMove(true);\n }\n };\n /**\n * @hidden\n */\n MarkerExplode.prototype.mouseMoveHandler = function () {\n var chart = this.chart;\n if ((!chart.crosshair.enable || (chart.tooltip.enable)) && (!chart.isTouch || chart.startMove) && !this.isSelected(chart)) {\n this.markerMove(false);\n }\n };\n MarkerExplode.prototype.markerMove = function (remove) {\n var _this = this;\n var chart = this.chart;\n this.currentPoints = [];\n var data;\n var previous;\n var explodeSeries;\n if (!chart.tooltip.shared || !chart.tooltip.enable) {\n data = this.getData();\n previous = this.previousPoints[0];\n explodeSeries = data.series && (data.series.type === 'BoxAndWhisker' || data.series.type === 'Bubble' || data.series.drawType === 'Scatter'\n || data.series.type === 'Scatter' || (!data.series.isRectSeries && data.series.marker.visible));\n data.lierIndex = this.lierIndex;\n if (data.point && explodeSeries && ((!previous || (previous.point !== data.point)) ||\n (previous && previous.lierIndex > 3 && previous.lierIndex !== this.lierIndex))) {\n this.currentPoints.push(data);\n }\n }\n else {\n if (!withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n return null;\n }\n if (chart.tooltip.enable) {\n var pointData = chart.chartAreaType === 'PolarRadar' ? this.getData() : null;\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var chartSeries = _a[_i];\n if (!chartSeries.enableTooltip || chartSeries.category === 'Indicator') {\n continue;\n }\n if (chart.chartAreaType === 'Cartesian' && chartSeries.visible) {\n data = this.getClosestX(chart, chartSeries);\n }\n else if (chart.chartAreaType === 'PolarRadar' && chartSeries.visible && pointData.point !== null) {\n data = new PointData(chartSeries.points[pointData.point.index], chartSeries);\n }\n if (data) {\n this.currentPoints.push(data);\n data = null;\n }\n }\n }\n }\n var length = this.previousPoints.length;\n if (this.currentPoints.length > 0) {\n if (length === 0 || (length > 0 && this.previousPoints[0].point !== this.currentPoints[0].point)) {\n if (this.previousPoints.length > 0) {\n this.removeHighlightedMarker();\n }\n var _loop_1 = function (data_1) {\n if (data_1 && data_1.point &&\n (!data_1.series.isRectSeries || data_1.series.type === 'BoxAndWhisker')) {\n stopTimer(this_1.markerExplode);\n this_1.isRemove = true;\n data_1.point.symbolLocations.map(function (location, index) {\n if (data_1.point.marker.visible) {\n _this.drawTrackBall(data_1.series, data_1.point, location, index);\n }\n });\n }\n };\n var this_1 = this;\n for (var _b = 0, _c = this.currentPoints; _b < _c.length; _b++) {\n var data_1 = _c[_b];\n _loop_1(data_1);\n }\n this.previousPoints = extend([], this.currentPoints, null, true);\n }\n }\n if (!chart.tooltip.enable && ((this.currentPoints.length === 0 && this.isRemove) || (remove && this.isRemove) ||\n !withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect))) {\n this.isRemove = false;\n this.markerExplode = setTimeout(function () {\n _this.removeHighlightedMarker();\n }, 2000);\n }\n this.currentPoints = [];\n };\n MarkerExplode.prototype.drawTrackBall = function (series, point, location, index) {\n var marker = point.marker;\n var seriesMarker = series.marker;\n var shape = marker.shape || seriesMarker.shape;\n var element = series.symbolElement || series.seriesElement;\n var symbolId = this.elementId + '_Series_' + series.index + '_Point_' + point.index + '_Trackball' +\n (index ? index : '');\n var size = new Size((marker.width || seriesMarker.width) + 5, (marker.height || seriesMarker.height) + 5);\n var border = (marker.border || series.border);\n var explodeSeries = (series.type === 'BoxAndWhisker' || series.type === 'Bubble' || series.type === 'Scatter');\n var borderColor = (border.color && border.color !== 'transparent') ? border.color :\n marker.fill || point.interior || (explodeSeries ? point.color : series.interior);\n var colorValue = convertHexToColor(colorNameToHex(borderColor));\n var borderWidth = marker.border ? marker.border.width : seriesMarker.border.width;\n var markerShadow = series.chart.themeStyle.markerShadow ||\n 'rgba(' + colorValue.r + ',' + colorValue.g + ',' + colorValue.b + ',0.2)';\n for (var i = 0; i < 2; i++) {\n var options = new PathOption(symbolId + '_' + i, i ? (marker.fill || point.color || (explodeSeries ? series.interior : '#ffffff')) : 'transparent', borderWidth + (i ? 0 : 8), i ? borderColor : markerShadow, (marker.opacity || seriesMarker.opacity), null, null);\n var symbol = drawSymbol(location, shape, size, seriesMarker.imageUrl, options, '');\n symbol.setAttribute('style', 'pointer-events:none');\n symbol.setAttribute('class', 'EJ2-Trackball');\n element.appendChild(symbol);\n }\n };\n /**\n * @hidden\n */\n MarkerExplode.prototype.removeHighlightedMarker = function () {\n var elements = document.getElementsByClassName('EJ2-Trackball');\n for (var i = 0, len = elements.length; i < len; i++) {\n remove(elements[0]);\n }\n this.previousPoints = [];\n };\n return MarkerExplode;\n}(ChartData));\nexport { MarkerExplode };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { drawSymbol, PathOption, Size, markerAnimate, CircleOption, RectOption } from '../../common/utils/helper';\nimport { findlElement } from '../../common/utils/helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { pointRender } from '../../common/model/constants';\nimport { MarkerExplode } from './marker-explode';\nimport { getSaturationColor } from '../../common/utils/helper';\n/**\n * Marker module used to render the marker for line type series.\n */\nvar Marker = /** @class */ (function (_super) {\n __extends(Marker, _super);\n /**\n * Constructor for the marker module.\n * @private\n */\n function Marker(chart) {\n var _this = _super.call(this, chart) || this;\n _this.addEventListener();\n return _this;\n }\n /**\n * Render the marker for series.\n * @return {void}\n * @private\n */\n Marker.prototype.render = function (series) {\n var _this = this;\n this.createElement(series);\n var _loop_1 = function (point) {\n if (point.visible && point.symbolLocations.length) {\n point.symbolLocations.map(function (location, index) {\n _this.renderMarker(series, point, location, index);\n });\n }\n };\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n _loop_1(point);\n }\n };\n Marker.prototype.renderMarker = function (series, point, location, index) {\n var seriesIndex = series.index;\n var marker = series.marker;\n var border = {\n color: marker.border.color,\n width: marker.border.width\n };\n var borderColor = marker.border.color;\n var symbolId;\n var shapeOption;\n var isBoxPlot = series.type === 'BoxAndWhisker';\n var fill = marker.fill || (isBoxPlot ? point.interior || series.interior : '#ffffff');\n var argsData;\n var parentElement = isBoxPlot ?\n findlElement(series.seriesElement.childNodes, 'Series_' + series.index + '_Point_' + point.index)\n : series.symbolElement;\n border.color = borderColor || series.setPointColor(point, series.interior);\n symbolId = this.elementId + '_Series_' + seriesIndex + '_Point_' + point.index + '_Symbol' +\n (index ? index : '');\n argsData = {\n cancel: false, name: pointRender, series: series, point: point,\n fill: point.isEmpty ? (series.emptyPointSettings.fill || fill) : fill,\n border: {\n color: series.type === 'BoxAndWhisker' ?\n (!isNullOrUndefined(borderColor) && borderColor !== 'transparent') ? borderColor :\n getSaturationColor(fill, -0.6)\n : border.color,\n width: border.width\n },\n height: marker.height,\n width: marker.width,\n shape: marker.shape\n };\n argsData.border = series.setBorderColor(point, { width: argsData.border.width, color: argsData.border.color });\n this.chart.trigger(pointRender, argsData);\n point.color = argsData.fill;\n if (!argsData.cancel) {\n var y = void 0;\n if (series.type === 'RangeArea') {\n y = index ? point.low : point.high;\n }\n else if (isBoxPlot) {\n y = point.outliers[index];\n }\n else {\n y = point.y;\n }\n shapeOption = new PathOption(symbolId, argsData.fill, argsData.border.width, argsData.border.color, marker.opacity, null);\n if (parentElement !== undefined && parentElement !== null) {\n parentElement.appendChild(drawSymbol(location, argsData.shape, new Size(argsData.width, argsData.height), marker.imageUrl, shapeOption, point.x.toString() + ':' + y.toString()));\n }\n point.marker = {\n border: argsData.border,\n fill: argsData.fill,\n height: argsData.height,\n visible: true,\n shape: argsData.shape,\n width: argsData.width\n };\n }\n else {\n location = null;\n point.marker = {\n visible: false\n };\n }\n };\n Marker.prototype.createElement = function (series) {\n var markerClipRect;\n var marker = series.marker;\n // 8 for extend border value 5 for extend size value\n var explodeValue = marker.border.width + 8 + 5;\n var render = series.chart.renderer;\n var transform;\n transform = series.chart.chartAreaType === 'Cartesian' ? 'translate(' + series.clipRect.x + ',' + (series.clipRect.y) + ')' : '';\n if (marker.visible) {\n var markerHeight = (marker.height + explodeValue) / 2;\n var markerWidth = (marker.width + explodeValue) / 2;\n if (series.chart.chartAreaType === 'Cartesian') {\n markerClipRect = render.drawClipPath(new RectOption(this.elementId + '_ChartMarkerClipRect_' + series.index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: -markerWidth, y: -markerHeight,\n width: series.clipRect.width + markerWidth * 2,\n height: series.clipRect.height + markerHeight * 2\n }));\n }\n else {\n markerClipRect = render.drawCircularClipPath(new CircleOption(this.elementId + '_ChartMarkerClipRect_' + series.index, 'transparent', { width: 1, color: 'Gray' }, 1, series.clipRect.width / 2 + series.clipRect.x, series.clipRect.height / 2 + series.clipRect.y, series.chart.radius + Math.max(markerHeight, markerWidth)));\n }\n series.symbolElement = render.createGroup({\n 'id': this.elementId + 'SymbolGroup' + series.index,\n 'transform': transform,\n 'clip-path': 'url(#' + this.elementId + '_ChartMarkerClipRect_' + series.index + ')'\n });\n series.symbolElement.appendChild(markerClipRect);\n }\n };\n Marker.prototype.getRangeLowPoint = function (region, series) {\n var x = region.x;\n var y = region.y;\n if (series.chart.requireInvertedAxis) {\n y += region.height / 2;\n x += series.yAxis.isInversed ? region.width : 0;\n }\n else {\n y += series.yAxis.isInversed ? 0 : region.height;\n x += region.width / 2;\n }\n return { x: x, y: y };\n };\n /**\n * Animates the marker.\n * @return {void}.\n * @private\n */\n Marker.prototype.doMarkerAnimation = function (series) {\n if (!(series.isRectSeries || series.type === 'Scatter' || series.type === 'Bubble' ||\n (series.chart.chartAreaType === 'PolarRadar' && (series.drawType === 'Scatter' || series.drawType.indexOf('Column') > -1)))) {\n var markerElements = series.symbolElement.childNodes;\n var delay = series.animation.delay + series.animation.duration;\n var j = 1;\n var incFactor = series.type === 'RangeArea' ? 2 : 1;\n for (var i = 0; i < series.points.length; i++) {\n if (!series.points[i].symbolLocations.length || !markerElements[j]) {\n continue;\n }\n markerAnimate(markerElements[j], delay, 200, series, i, series.points[i].symbolLocations[0], false);\n if (incFactor === 2) {\n var lowPoint = this.getRangeLowPoint(series.points[i].regions[0], series);\n markerAnimate(markerElements[j + 1], delay, 200, series, i, lowPoint, false);\n }\n j += incFactor;\n }\n }\n };\n return Marker;\n}(MarkerExplode));\nexport { Marker };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty } from '@syncfusion/ej2-base';\nimport { Font, Border } from '../model/base';\nimport { Theme } from '../model/theme';\nimport { Size, Rect, subtractThickness, Thickness, drawSymbol, measureText, ChartLocation, PathOption } from '../utils/helper';\nimport { RectOption, TextOption, textElement, stringToNumber, removeElement, showTooltip, getElement } from '../utils/helper';\n/**\n * Configures the location for the legend.\n */\nvar Location = /** @class */ (function (_super) {\n __extends(Location, _super);\n function Location() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], Location.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], Location.prototype, \"y\", void 0);\n return Location;\n}(ChildProperty));\nexport { Location };\n/**\n * Configures the legends in charts.\n */\nvar LegendSettings = /** @class */ (function (_super) {\n __extends(LegendSettings, _super);\n function LegendSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], LegendSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"width\", void 0);\n __decorate([\n Complex({ x: 0, y: 0 }, Location)\n ], LegendSettings.prototype, \"location\", void 0);\n __decorate([\n Property('Auto')\n ], LegendSettings.prototype, \"position\", void 0);\n __decorate([\n Property(8)\n ], LegendSettings.prototype, \"padding\", void 0);\n __decorate([\n Property('Center')\n ], LegendSettings.prototype, \"alignment\", void 0);\n __decorate([\n Complex(Theme.legendLabelFont, Font)\n ], LegendSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(10)\n ], LegendSettings.prototype, \"shapeHeight\", void 0);\n __decorate([\n Property(10)\n ], LegendSettings.prototype, \"shapeWidth\", void 0);\n __decorate([\n Complex({}, Border)\n ], LegendSettings.prototype, \"border\", void 0);\n __decorate([\n Property(5)\n ], LegendSettings.prototype, \"shapePadding\", void 0);\n __decorate([\n Property('transparent')\n ], LegendSettings.prototype, \"background\", void 0);\n __decorate([\n Property(1)\n ], LegendSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(true)\n ], LegendSettings.prototype, \"toggleVisibility\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"description\", void 0);\n __decorate([\n Property(3)\n ], LegendSettings.prototype, \"tabIndex\", void 0);\n return LegendSettings;\n}(ChildProperty));\nexport { LegendSettings };\n/**\n * Legend base class for Chart and Accumulation chart.\n * @private\n */\nvar BaseLegend = /** @class */ (function () {\n /**\n * Constructor for the dateTime module.\n * @private\n */\n function BaseLegend(chart) {\n this.rowCount = 0; // legend row counts per page \n this.columnCount = 0; // legend column counts per page \n this.pageButtonSize = 8;\n this.pageXCollections = []; // pages of x locations\n this.maxColumns = 0;\n this.isTrimmed = false;\n this.maxWidth = 0;\n this.currentPage = 1;\n this.chart = chart;\n this.legend = chart.legendSettings;\n this.legendID = chart.element.id + '_chart_legend';\n this.isChartControl = (chart.getModuleName() === 'chart');\n }\n /**\n * Calculate the bounds for the legends.\n * @return {void}\n * @private\n */\n BaseLegend.prototype.calculateLegendBounds = function (rect, availableSize) {\n var legend = this.legend;\n this.getPosition(legend.position, availableSize);\n this.legendBounds = new Rect(rect.x, rect.y, 0, 0);\n this.isVertical = (this.position === 'Left' || this.position === 'Right');\n if (this.isVertical) {\n this.legendBounds.height = stringToNumber(legend.height, availableSize.height - (rect.y - this.chart.margin.top)) || rect.height;\n this.legendBounds.width = stringToNumber(legend.width || '20%', availableSize.width);\n }\n else {\n this.legendBounds.width = stringToNumber(legend.width, availableSize.width) || rect.width;\n this.legendBounds.height = stringToNumber(legend.height || '20%', availableSize.height);\n }\n this.library.getLegendBounds(availableSize, this.legendBounds, legend);\n this.getLocation(this.position, legend.alignment, this.legendBounds, rect, availableSize);\n };\n /**\n * To find legend position based on available size for chart and accumulation chart\n */\n BaseLegend.prototype.getPosition = function (position, availableSize) {\n if (this.isChartControl) {\n this.position = (position !== 'Auto') ? position : 'Bottom';\n }\n else {\n if (position === 'Auto' && this.chart.visibleSeries &&\n (this.chart.visibleSeries[0].type === 'Funnel' || this.chart.visibleSeries[0].type === 'Pyramid')) {\n position = 'Top';\n }\n this.position = (position !== 'Auto') ? position :\n (availableSize.width > availableSize.height ? 'Right' : 'Bottom');\n }\n };\n /**\n * To set bounds for chart and accumulation chart\n */\n BaseLegend.prototype.setBounds = function (computedWidth, computedHeight, legend, legendBounds) {\n computedWidth = computedWidth < legendBounds.width ? computedWidth : legendBounds.width;\n computedHeight = computedHeight < legendBounds.height ? computedHeight : legendBounds.height;\n legendBounds.width = !legend.width ? computedWidth : legendBounds.width;\n legendBounds.height = !legend.height ? computedHeight : legendBounds.height;\n this.rowCount = Math.max(1, Math.ceil((legendBounds.height - legend.padding) / (this.maxItemHeight + legend.padding)));\n };\n /**\n * To find legend location based on position, alignment for chart and accumulation chart\n */\n BaseLegend.prototype.getLocation = function (position, alignment, legendBounds, rect, availableSize) {\n var padding = this.legend.border.width;\n var legendHeight = legendBounds.height + padding;\n var legendWidth = legendBounds.width + padding;\n var marginBottom = this.chart.margin.bottom;\n if (position === 'Bottom') {\n legendBounds.x = this.alignLegend(legendBounds.x, availableSize.width, legendBounds.width, alignment);\n legendBounds.y = rect.y + (rect.height - legendHeight) + padding;\n subtractThickness(rect, new Thickness(0, 0, 0, legendHeight));\n }\n else if (position === 'Top') {\n legendBounds.x = this.alignLegend(legendBounds.x, availableSize.width, legendBounds.width, alignment);\n legendBounds.y = rect.y + padding;\n subtractThickness(rect, new Thickness(0, 0, legendHeight, 0));\n }\n else if (position === 'Right') {\n legendBounds.x = rect.x + (rect.width - legendBounds.width);\n legendBounds.y = rect.y + this.alignLegend(0, availableSize.height - (rect.y + marginBottom), legendBounds.height, alignment);\n subtractThickness(rect, new Thickness(0, legendWidth, 0, 0));\n }\n else if (position === 'Left') {\n legendBounds.y = rect.y + this.alignLegend(0, availableSize.height - (rect.y + marginBottom), legendBounds.height, alignment);\n subtractThickness(rect, new Thickness(legendWidth, 0, 0, 0));\n }\n else {\n legendBounds.x = this.legend.location.x;\n legendBounds.y = this.legend.location.y;\n subtractThickness(rect, new Thickness(0, 0, 0, 0));\n }\n };\n /**\n * To find legend alignment for chart and accumulation chart\n */\n BaseLegend.prototype.alignLegend = function (start, size, legendSize, alignment) {\n switch (alignment) {\n case 'Far':\n start = (size - legendSize) - start;\n break;\n case 'Center':\n start = ((size - legendSize) / 2);\n break;\n }\n return start;\n };\n /**\n * Renders the legend.\n * @return {void}\n * @private\n */\n BaseLegend.prototype.renderLegend = function (chart, legend, legendBounds) {\n var firstLegend = this.findFirstLegendPosition(this.legendCollections);\n var padding = legend.padding;\n this.maxItemHeight = Math.max(this.legendCollections[0].textSize.height, legend.shapeHeight);\n var legendGroup = chart.renderer.createGroup({ id: this.legendID + '_g' });\n var legendTranslateGroup = this.createLegendElements(chart, legendBounds, legendGroup, legend, this.legendID);\n if (firstLegend !== this.legendCollections.length) {\n var legendSeriesGroup = void 0; // legendItem group for each series group element\n var start = void 0; // starting shape center x,y position && to resolve lint error used new line for declaration\n start = new ChartLocation(legendBounds.x + padding + (legend.shapeWidth / 2), legendBounds.y + padding + this.maxItemHeight / 2);\n var textOptions = new TextOption('', start.x, start.y, 'start');\n // initialization for totalPages legend click totalpage again calculate\n this.totalPages = this.isChartControl ? this.totalPages : 0;\n var textPadding = legend.shapePadding + padding + legend.shapeWidth;\n var count = 0;\n this.pageXCollections = [];\n this.legendCollections[firstLegend].location = start;\n var previousLegend = this.legendCollections[firstLegend];\n for (var _i = 0, _a = this.legendCollections; _i < _a.length; _i++) {\n var legendOption = _a[_i];\n if (legendOption.render && legendOption.text !== '') {\n legendSeriesGroup = chart.renderer.createGroup({\n id: this.legendID + this.generateId(legendOption, '_g_', count)\n });\n legendSeriesGroup.setAttribute('tabindex', legend.tabIndex.toString());\n legendSeriesGroup.setAttribute('aria-label', legend.description || 'Click to show or hide the ' + legendOption.text + ' series');\n this.library.getRenderPoint(legendOption, start, textPadding, previousLegend, legendBounds, count, firstLegend);\n this.renderSymbol(legendOption, legendSeriesGroup, count);\n this.renderText(chart, legendOption, legendSeriesGroup, textOptions, count);\n legendSeriesGroup.setAttribute('style', 'cursor: ' + ((!legend.toggleVisibility && chart.selectionMode === 'None') ? 'auto' : 'pointer'));\n legendTranslateGroup.appendChild(legendSeriesGroup);\n previousLegend = legendOption;\n }\n count++;\n }\n if (this.isPaging) {\n this.renderPagingElements(chart, legendBounds, textOptions, legendGroup);\n }\n }\n chart.svgObject.appendChild(legendGroup);\n };\n /**\n * To find first valid legend text index for chart and accumulation chart\n */\n BaseLegend.prototype.findFirstLegendPosition = function (legendCollection) {\n var count = 0;\n for (var _i = 0, legendCollection_1 = legendCollection; _i < legendCollection_1.length; _i++) {\n var legend = legendCollection_1[_i];\n if (legend.render && legend.text !== '') {\n break;\n }\n count++;\n }\n return count;\n };\n /**\n * To create legend rendering elements for chart and accumulation chart\n */\n BaseLegend.prototype.createLegendElements = function (chart, legendBounds, legendGroup, legend, id) {\n var padding = legend.padding;\n var options = new RectOption(id + '_element', legend.background, legend.border, legend.opacity, legendBounds);\n legendGroup.appendChild(chart.renderer.drawRectangle(options));\n var legendItemsGroup = chart.renderer.createGroup({ id: id + '_collections' });\n legendGroup.appendChild(legendItemsGroup);\n this.legendTranslateGroup = chart.renderer.createGroup({ id: id + '_translate_g' });\n legendItemsGroup.appendChild(this.legendTranslateGroup);\n var clippath = chart.renderer.createClipPath({ id: id + '_clipPath' });\n options.y += padding;\n options.id += '_clipPath_rect';\n options.width = (!this.isChartControl && this.isVertical) ? this.maxWidth - padding : legendBounds.width;\n this.clipRect = chart.renderer.drawRectangle(options);\n clippath.appendChild(this.clipRect);\n chart.svgObject.appendChild(clippath);\n legendItemsGroup.setAttribute('style', 'clip-path:url(#' + clippath.id + ')');\n return this.legendTranslateGroup;\n };\n /**\n * To render legend symbols for chart and accumulation chart\n */\n BaseLegend.prototype.renderSymbol = function (legendOption, group, i) {\n var symbolColor = legendOption.visible ? legendOption.fill : '#D3D3D3';\n var shape = (legendOption.shape === 'SeriesType') ? legendOption.type : legendOption.shape;\n shape = shape === 'Scatter' ? legendOption.markerShape : shape;\n var symbolOption = new PathOption(this.legendID + this.generateId(legendOption, '_shape_', i), symbolColor, 1, symbolColor, 1, '', '');\n group.appendChild(drawSymbol(legendOption.location, shape, new Size(this.legend.shapeWidth, this.legend.shapeHeight), '', symbolOption, 'Click to show or hide the ' + legendOption.text + ' series'));\n if (shape === 'Line' && legendOption.markerVisibility && legendOption.markerShape !== 'Image' ||\n legendOption.type === 'Doughnut') {\n symbolOption.id = this.legendID + this.generateId(legendOption, '_shape_marker_', i);\n shape = legendOption.type === 'Doughnut' ? 'Circle' : legendOption.markerShape;\n symbolOption.fill = legendOption.type === 'Doughnut' ? '#FFFFFF' : symbolOption.fill;\n group.appendChild(drawSymbol(legendOption.location, shape, new Size(this.legend.shapeWidth / 2, this.legend.shapeHeight / 2), '', symbolOption, 'Click to show or hide the ' + legendOption.text + ' series'));\n }\n };\n /**\n * To render legend text for chart and accumulation chart\n */\n BaseLegend.prototype.renderText = function (chart, legendOption, group, textOptions, i) {\n var legend = chart.legendSettings;\n var hiddenColor = '#D3D3D3';\n textOptions.id = this.legendID + this.generateId(legendOption, '_text_', i);\n var fontcolor = legendOption.visible ? legend.textStyle.color || chart.themeStyle.legendLabel : hiddenColor;\n textOptions.text = legendOption.text;\n textOptions.x = legendOption.location.x + (legend.shapeWidth / 2) + legend.shapePadding;\n textOptions.y = legendOption.location.y + this.maxItemHeight / 4;\n var element = textElement(textOptions, legend.textStyle, fontcolor, group);\n element.setAttribute('aria-label', legend.description || 'Click to show or hide the ' + legendOption.text + ' series');\n };\n /**\n * To render legend paging elements for chart and accumulation chart\n */\n BaseLegend.prototype.renderPagingElements = function (chart, bounds, textOption, legendGroup) {\n var paginggroup = chart.renderer.createGroup({ id: this.legendID + '_navigation' });\n legendGroup.appendChild(paginggroup);\n var grayColor = '#545454';\n var legend = chart.legendSettings; // to solve parameter lint error, legend declaration is here\n var padding = 8; // const padding for paging elements\n if (this.isChartControl || !this.isVertical) {\n this.totalPages = Math.ceil(this.totalPages / Math.max(1, this.rowCount - 1));\n }\n else {\n this.totalPages = Math.ceil(this.totalPages / this.maxColumns);\n }\n var symbolOption = new PathOption(this.legendID + '_pageup', 'transparent', 5, grayColor, 1, '', '');\n var iconSize = this.pageButtonSize;\n paginggroup.setAttribute('style', 'cursor: pointer');\n // Page left arrow drawing calculation started here\n this.clipPathHeight = (this.rowCount - 1) * (this.maxItemHeight + legend.padding);\n this.clipRect.setAttribute('height', this.clipPathHeight.toString());\n var x = bounds.x + iconSize / 2;\n var y = bounds.y + this.clipPathHeight + ((bounds.height - this.clipPathHeight) / 2);\n paginggroup.appendChild(drawSymbol({ x: x, y: y }, 'LeftArrow', new Size(iconSize, iconSize), '', symbolOption, 'LeftArrow'));\n // Page numbering rendering calculation started here\n textOption.x = x + (iconSize / 2) + padding;\n var size = measureText(this.totalPages + '/' + this.totalPages, legend.textStyle);\n textOption.y = y + (size.height / 4);\n textOption.id = this.legendID + '_pagenumber';\n textOption.text = '1/' + this.totalPages;\n var pageTextElement = textElement(textOption, legend.textStyle, legend.textStyle.color, paginggroup);\n // Page right arrow rendering calculation started here\n x = (textOption.x + padding + (iconSize / 2) + size.width);\n symbolOption.id = this.legendID + '_pagedown';\n paginggroup.appendChild(drawSymbol({ x: x, y: y }, 'RightArrow', new Size(iconSize, iconSize), '', symbolOption, 'RightArrow'));\n // placing the navigation buttons and page numbering in legend right corner\n paginggroup.setAttribute('transform', 'translate(' + (bounds.width - (2 * (iconSize + padding) +\n padding + size.width)) + ', ' + 0 + ')');\n this.translatePage(pageTextElement, this.currentPage - 1, this.currentPage);\n };\n /**\n * To translate legend pages for chart and accumulation chart\n */\n BaseLegend.prototype.translatePage = function (pagingText, page, pageNumber) {\n var size = (this.clipPathHeight) * page;\n var translate = 'translate(0,-' + size + ')';\n if (!this.isChartControl && this.isVertical) {\n var pageLength = page * this.maxColumns;\n size = this.pageXCollections[page * this.maxColumns] - this.legendBounds.x;\n size = size < 0 ? 0 : size; // to avoid small pixel variation\n translate = 'translate(-' + size + ',0)';\n }\n this.legendTranslateGroup.setAttribute('transform', translate);\n pagingText.textContent = (pageNumber) + '/' + this.totalPages;\n this.currentPage = pageNumber;\n };\n /**\n * To change legend pages for chart and accumulation chart\n */\n BaseLegend.prototype.changePage = function (event, pageUp) {\n var pageText = document.getElementById(this.legendID + '_pagenumber');\n var page = parseInt(pageText.textContent.split('/')[0], 10);\n if (pageUp && page > 1) {\n this.translatePage(pageText, (page - 2), (page - 1));\n }\n else if (!pageUp && page < this.totalPages) {\n this.translatePage(pageText, page, (page + 1));\n }\n };\n /**\n * To find legend elements id based on chart or accumulation chart\n * @private\n */\n BaseLegend.prototype.generateId = function (option, prefix, count) {\n if (this.isChartControl) {\n return prefix + count;\n }\n else {\n return prefix + option.pointIndex;\n }\n };\n /**\n * To show or hide trimmed text tooltip for legend.\n * @return {void}\n * @private\n */\n BaseLegend.prototype.move = function (event) {\n var _this = this;\n var x = this.chart.mouseX;\n var y = this.chart.mouseY;\n if (event.target.textContent.indexOf('...') > -1) {\n var targetId = event.target.id.split(this.legendID + '_text_');\n if (targetId.length === 2) {\n var index = parseInt(targetId[1], 10);\n var element = this.chart.element;\n if (!isNaN(index)) {\n if (this.chart.isTouch) {\n removeElement(this.chart.element.id + '_EJ2_Legend_Tooltip');\n }\n if (this.isChartControl) {\n showTooltip(this.chart.series[index].name, x, y, element.offsetWidth, element.id + '_EJ2_Legend_Tooltip', getElement(this.chart.element.id + '_Secondary_Element'));\n }\n else {\n showTooltip(this.chart.visibleSeries[0].points[index].x.toString(), x + 10, y + 10, element.offsetWidth, element.id + '_EJ2_Legend_Tooltip', getElement(this.chart.element.id + '_Secondary_Element'));\n }\n }\n }\n }\n else {\n removeElement(this.chart.element.id + '_EJ2_Legend_Tooltip');\n }\n if (this.chart.isTouch) {\n clearTimeout(this.clearTooltip);\n this.clearTooltip = setTimeout(function () { removeElement(_this.chart.element.id + '_EJ2_Legend_Tooltip'); }, 1000);\n }\n };\n return BaseLegend;\n}());\nexport { BaseLegend };\n/**\n * Class for legend options\n * @private\n */\nvar LegendOptions = /** @class */ (function () {\n function LegendOptions(text, fill, shape, visible, type, markerShape, markerVisibility, pointIndex, seriesIndex) {\n this.location = { x: 0, y: 0 };\n this.text = text;\n this.fill = fill;\n this.shape = shape;\n this.visible = visible;\n this.type = type;\n this.markerVisibility = markerVisibility;\n this.markerShape = markerShape;\n this.pointIndex = pointIndex;\n this.seriesIndex = seriesIndex;\n }\n return LegendOptions;\n}());\nexport { LegendOptions };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { Property, Complex } from '@syncfusion/ej2-base';\nimport { Connector } from '../../common/model/base';\nimport { SeriesBase } from '../series/chart-series';\nimport { Rect, firstToLowerCase } from '../../common/utils/helper';\n/**\n * Defines how to represent the market trend using technical indicators\n */\nvar TechnicalIndicator = /** @class */ (function (_super) {\n __extends(TechnicalIndicator, _super);\n function TechnicalIndicator() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.clipRect = new Rect(0, 0, 0, 0);\n return _this;\n }\n /** @private */\n TechnicalIndicator.prototype.setDataSource = function (series, chart) {\n if (series) {\n this.xData = series.xData;\n this.yData = series.yData;\n this.points = series.points;\n }\n var type = firstToLowerCase(this.type);\n chart[type + 'IndicatorModule'].initDataSource(this, chart);\n chart.visibleSeriesCount += this.targetSeries.length;\n };\n __decorate([\n Property('Sma')\n ], TechnicalIndicator.prototype, \"type\", void 0);\n __decorate([\n Property(14)\n ], TechnicalIndicator.prototype, \"period\", void 0);\n __decorate([\n Property(14)\n ], TechnicalIndicator.prototype, \"kPeriod\", void 0);\n __decorate([\n Property(3)\n ], TechnicalIndicator.prototype, \"dPeriod\", void 0);\n __decorate([\n Property(80)\n ], TechnicalIndicator.prototype, \"overBought\", void 0);\n __decorate([\n Property(20)\n ], TechnicalIndicator.prototype, \"overSold\", void 0);\n __decorate([\n Property(2)\n ], TechnicalIndicator.prototype, \"standardDeviation\", void 0);\n __decorate([\n Property('Close')\n ], TechnicalIndicator.prototype, \"field\", void 0);\n __decorate([\n Property(12)\n ], TechnicalIndicator.prototype, \"slowPeriod\", void 0);\n __decorate([\n Property(26)\n ], TechnicalIndicator.prototype, \"fastPeriod\", void 0);\n __decorate([\n Property(true)\n ], TechnicalIndicator.prototype, \"showZones\", void 0);\n __decorate([\n Complex({ color: '#ff9933', width: 2 }, Connector)\n ], TechnicalIndicator.prototype, \"macdLine\", void 0);\n __decorate([\n Property('Both')\n ], TechnicalIndicator.prototype, \"macdType\", void 0);\n __decorate([\n Property('#2ecd71')\n ], TechnicalIndicator.prototype, \"macdPositiveColor\", void 0);\n __decorate([\n Property('#e74c3d')\n ], TechnicalIndicator.prototype, \"macdNegativeColor\", void 0);\n __decorate([\n Property('rgba(211,211,211,0.25)')\n ], TechnicalIndicator.prototype, \"bandColor\", void 0);\n __decorate([\n Complex({ color: '#ffb735', width: 1 }, Connector)\n ], TechnicalIndicator.prototype, \"upperLine\", void 0);\n __decorate([\n Complex({ color: '#f2ec2f', width: 1 }, Connector)\n ], TechnicalIndicator.prototype, \"lowerLine\", void 0);\n __decorate([\n Complex({ color: '#f2ec2f', width: 1 }, Connector)\n ], TechnicalIndicator.prototype, \"periodLine\", void 0);\n __decorate([\n Property('')\n ], TechnicalIndicator.prototype, \"seriesName\", void 0);\n return TechnicalIndicator;\n}(SeriesBase));\nexport { TechnicalIndicator };\n","import { print as printWindow, createElement, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { getElement } from '../utils/helper';\nimport { beforePrint } from '../model/constants';\nimport { PdfPageOrientation, PdfDocument, PdfBitmap } from '@syncfusion/ej2-pdf-export';\n/**\n * Annotation Module handles the Annotation for chart and accumulation series.\n */\nvar ExportUtils = /** @class */ (function () {\n /**\n * Constructor for chart and accumulation annotation\n * @param control\n */\n function ExportUtils(control) {\n this.control = control;\n }\n /**\n * To print the accumulation and chart elements\n * @param elements\n */\n ExportUtils.prototype.print = function (elements) {\n this.printWindow = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth + ',tabbar=no');\n this.printWindow.moveTo(0, 0);\n this.printWindow.resizeTo(screen.availWidth, screen.availHeight);\n var argsData = {\n cancel: false, htmlContent: this.getHTMLContent(elements), name: beforePrint\n };\n this.control.trigger(beforePrint, argsData);\n if (!argsData.cancel) {\n printWindow(argsData.htmlContent, this.printWindow);\n }\n };\n /**\n * To get the html string of the chart and accumulation\n * @param elements\n * @private\n */\n ExportUtils.prototype.getHTMLContent = function (elements) {\n var div = createElement('div');\n if (elements) {\n if (elements instanceof Array) {\n elements.forEach(function (value) {\n div.appendChild(getElement(value).cloneNode(true));\n });\n }\n else if (elements instanceof Element) {\n div.appendChild(elements.cloneNode(true));\n }\n else {\n div.appendChild(getElement(elements).cloneNode(true));\n }\n }\n else {\n div.appendChild(this.control.element.cloneNode(true));\n }\n return div;\n };\n /**\n * To export the file as image/svg format\n * @param type\n * @param fileName\n */\n ExportUtils.prototype.export = function (type, fileName, orientation) {\n var _this = this;\n var element = createElement('canvas', {\n id: 'ej2-canvas',\n attrs: {\n 'width': this.control.availableSize.width.toString(),\n 'height': this.control.availableSize.height.toString()\n }\n });\n var isDownload = !(Browser.userAgent.toString().indexOf('HeadlessChrome') > -1);\n orientation = isNullOrUndefined(orientation) ? PdfPageOrientation.Landscape : orientation;\n var svgData = '' +\n this.control.svgObject.outerHTML +\n '';\n var url = window.URL.createObjectURL(new Blob(type === 'SVG' ? [svgData] :\n [(new XMLSerializer()).serializeToString(this.control.svgObject)], { type: 'image/svg+xml' }));\n if (type === 'SVG') {\n this.triggerDownload(fileName, type, url, isDownload);\n }\n else {\n var image_1 = new Image();\n var ctx_1 = element.getContext('2d');\n image_1.onload = (function () {\n ctx_1.drawImage(image_1, 0, 0);\n window.URL.revokeObjectURL(url);\n if (type === 'PDF') {\n var document_1 = new PdfDocument();\n var imageString = element.toDataURL('image/jpeg').replace('image/jpeg', 'image/octet-stream');\n document_1.pageSettings.orientation = orientation;\n imageString = imageString.slice(imageString.indexOf(',') + 1);\n document_1.pages.add().graphics.drawImage(new PdfBitmap(imageString), 0, 0, _this.control.availableSize.width, _this.control.availableSize.height);\n if (isDownload) {\n document_1.save(fileName + '.pdf');\n document_1.destroy();\n }\n }\n else {\n if (window.navigator.msSaveOrOpenBlob) {\n window.navigator.msSaveOrOpenBlob(element.msToBlob(), fileName + '.' + type.toLocaleLowerCase());\n }\n else {\n _this.triggerDownload(fileName, type, element.toDataURL('image/png').replace('image/png', 'image/octet-stream'), isDownload);\n }\n }\n });\n image_1.src = url;\n }\n };\n /**\n * To trigger the download element\n * @param fileName\n * @param type\n * @param url\n */\n ExportUtils.prototype.triggerDownload = function (fileName, type, url, isDownload) {\n createElement('a', {\n attrs: {\n 'download': fileName + '.' + type.toLocaleLowerCase(),\n 'href': url\n }\n }).dispatchEvent(new MouseEvent(isDownload ? 'click' : 'move', {\n view: window,\n bubbles: false,\n cancelable: true\n }));\n };\n return ExportUtils;\n}());\nexport { ExportUtils };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, NotifyPropertyChanges, Internationalization } from '@syncfusion/ej2-base';\nimport { L10n, createElement } from '@syncfusion/ej2-base';\nimport { ChildProperty } from '@syncfusion/ej2-base';\nimport { remove, extend } from '@syncfusion/ej2-base';\nimport { Browser, Touch } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, Complex, Collection } from '@syncfusion/ej2-base';\nimport { findClipRect, measureText, TextOption, showTooltip, removeElement } from '../common/utils/helper';\nimport { textElement, RectOption, createSvg, firstToLowerCase, titlePositionX } from '../common/utils/helper';\nimport { getSeriesColor, Theme, getThemeColor } from '../common/model/theme';\nimport { Margin, Border, ChartArea, Font, Indexes, TooltipSettings } from '../common/model/base';\nimport { Row, Column, Axis } from './axis/axis';\nimport { CartesianAxisLayoutPanel } from './axis/cartesian-panel';\nimport { Rect } from '../common/utils/helper';\nimport { ChartData } from './utils/get-data';\nimport { Series } from './series/chart-series';\nimport { Data } from '../common/model/data';\nimport { Marker } from './series/marker';\nimport { LegendSettings } from '../common/legend/legend';\nimport { TechnicalIndicator } from './technical-indicators/technical-indicator';\nimport { chartMouseClick, pointClick, pointMove, chartMouseLeave } from '../common/model/constants';\nimport { chartMouseDown, chartMouseMove, chartMouseUp, load } from '../common/model/constants';\nimport { ExportUtils } from '../common/utils/export';\nimport { ChartAnnotationSettings } from './model/chart-base';\nimport { getElement, getTitle } from '../common/utils/helper';\n/**\n * Configures the crosshair in the chart.\n */\nvar CrosshairSettings = /** @class */ (function (_super) {\n __extends(CrosshairSettings, _super);\n function CrosshairSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], CrosshairSettings.prototype, \"enable\", void 0);\n __decorate([\n Complex({ color: null, width: 1 }, Border)\n ], CrosshairSettings.prototype, \"line\", void 0);\n __decorate([\n Property('Both')\n ], CrosshairSettings.prototype, \"lineType\", void 0);\n return CrosshairSettings;\n}(ChildProperty));\nexport { CrosshairSettings };\n/**\n * Configures the zooming behavior for the chart.\n */\nvar ZoomSettings = /** @class */ (function (_super) {\n __extends(ZoomSettings, _super);\n function ZoomSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"enableSelectionZooming\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"enablePinchZooming\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"enableMouseWheelZooming\", void 0);\n __decorate([\n Property(true)\n ], ZoomSettings.prototype, \"enableDeferredZooming\", void 0);\n __decorate([\n Property('XY')\n ], ZoomSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(['Zoom', 'ZoomIn', 'ZoomOut', 'Pan', 'Reset'])\n ], ZoomSettings.prototype, \"toolbarItems\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"enablePan\", void 0);\n return ZoomSettings;\n}(ChildProperty));\nexport { ZoomSettings };\n/**\n * Represents the Chart control.\n * ```html\n *
\n * \n * ```\n */\nvar Chart = /** @class */ (function (_super) {\n __extends(Chart, _super);\n /**\n * Constructor for creating the widget\n * @hidden\n */\n function Chart(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private */\n _this.chartAreaType = 'Cartesian';\n return _this;\n }\n /**\n * Initialize the event handler.\n */\n Chart.prototype.preRender = function () {\n this.unWireEvents();\n this.initPrivateVariable();\n this.setCulture();\n this.wireEvents();\n };\n Chart.prototype.initPrivateVariable = function () {\n this.animateSeries = true;\n this.delayRedraw = false;\n this.horizontalAxes = [];\n this.verticalAxes = [];\n this.refreshAxis();\n this.refreshDefinition(this.rows);\n this.refreshDefinition(this.columns);\n if (this.tooltipModule) {\n this.tooltipModule.previousPoints = [];\n }\n };\n /**\n * To Initialize the control rendering.\n */\n Chart.prototype.render = function () {\n this.trigger(load, { chart: this });\n this.createChartSvg();\n this.setTheme();\n this.markerRender = new Marker(this);\n this.calculateAreaType();\n this.calculateVisibleSeries();\n this.initTechnicalIndicators();\n this.initTrendLines();\n this.calculateVisibleAxis();\n this.processData();\n };\n /**\n * Gets the localized label by locale keyword.\n * @param {string} key\n * @return {string}\n */\n Chart.prototype.getLocalizedLabel = function (key) {\n return this.localeObject.getConstant(key);\n };\n /**\n * Refresh the chart bounds.\n * @private\n */\n Chart.prototype.refreshBound = function () {\n if (this.legendModule && this.legendSettings.visible) {\n this.legendModule.getLegendOptions(this.visibleSeries, this);\n }\n var isCalculateStacking = false;\n var series;\n for (var i = 0, len = this.visibleSeries.length; i < len; i++) {\n series = this.visibleSeries[i];\n series.position = series.rectCount = undefined;\n if (((series.type.indexOf('Stacking') !== -1) || (series.drawType.indexOf('Stacking') !== -1\n && this.chartAreaType === 'PolarRadar')) && !isCalculateStacking) {\n series.calculateStackedValue(series.type.indexOf('100') > -1, this);\n isCalculateStacking = true;\n }\n }\n this.calculateBounds();\n this.renderElements();\n };\n Chart.prototype.renderElements = function () {\n this.renderBorder();\n this.renderTitle();\n this.renderAreaBorder();\n var axisElement = this.renderAxes();\n this.renderSeriesElements(axisElement);\n this.renderLegend();\n this.applyZoomkit();\n this.performSelection();\n this.setSecondaryElementPosition();\n this.renderAnnotation();\n };\n /**\n * To render the legend\n */\n Chart.prototype.renderAxes = function () {\n this.yAxisElements = this.renderer.createGroup({ id: this.element.id + 'yAxisCollection' });\n var axisElement;\n if (this.rows.length > 0 && this.columns.length > 0) {\n axisElement = this.chartAxisLayoutPanel.renderAxes();\n }\n if (this.stripLineModule) {\n this.stripLineModule.renderStripLine(this, 'Behind', this.axisCollections);\n }\n return axisElement;\n };\n /**\n * To render the legend\n */\n Chart.prototype.renderLegend = function () {\n if (this.legendModule && this.legendModule.legendCollections.length) {\n this.legendModule.renderLegend(this, this.legendSettings, this.legendModule.legendBounds);\n }\n this.element.appendChild(this.svgObject);\n };\n /**\n * To set the left and top position for data label template for center aligned chart\n */\n Chart.prototype.setSecondaryElementPosition = function () {\n var element = getElement(this.element.id + '_Secondary_Element');\n if (!element) {\n return;\n }\n var rect = this.element.getBoundingClientRect();\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n element.style.left = Math.max(svgRect.left - rect.left, 0) + 'px';\n element.style.top = Math.max(svgRect.top - rect.top, 0) + 'px';\n };\n Chart.prototype.initializeModuleElements = function () {\n this.dataLabelCollections = [];\n this.seriesElements = this.renderer.createGroup({ id: this.element.id + 'SeriesCollection' });\n if (this.indicators.length) {\n this.indicatorElements = this.renderer.createGroup({ id: this.element.id + 'IndicatorCollection' });\n }\n if (this.hasTrendlines()) {\n this.trendLineElements = this.renderer.createGroup({ id: this.element.id + 'TrendLineCollection' });\n }\n this.dataLabelElements = this.renderer.createGroup({ id: this.element.id + 'DataLabelCollection' });\n };\n Chart.prototype.hasTrendlines = function () {\n var isTrendline;\n for (var _i = 0, _a = this.series; _i < _a.length; _i++) {\n var series = _a[_i];\n isTrendline = series.trendlines.length ? true : false;\n if (isTrendline) {\n break;\n }\n }\n return isTrendline;\n };\n Chart.prototype.renderSeriesElements = function (axisElement) {\n // Initialize the series elements values\n this.initializeModuleElements();\n var tooltipDiv = document.createElement('div');\n tooltipDiv.id = this.element.id + '_Secondary_Element';\n tooltipDiv.setAttribute('style', 'position: relative');\n this.element.appendChild(tooltipDiv);\n // For userInteraction\n if (this.tooltip.enable) {\n this.svgObject.appendChild(this.renderer.createGroup({ id: this.element.id + '_UserInteraction', style: 'pointer-events:none;' }));\n }\n if (this.rows.length > 0 && this.columns.length > 0) {\n this.initializeIndicator();\n this.initializeTrendLine();\n this.renderSeries();\n this.appendElementsAfterSeries(axisElement);\n }\n };\n Chart.prototype.renderSeries = function () {\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var item = _a[_i];\n if (item.visible) {\n findClipRect(item);\n item.renderSeries(this, item.index);\n }\n }\n var clipRect = this.renderer.drawClipPath({\n 'id': this.element.id + '_ChartAreaClipRect_',\n 'x': this.chartAxisLayoutPanel.seriesClipRect.x,\n 'y': this.chartAxisLayoutPanel.seriesClipRect.y,\n 'width': this.chartAxisLayoutPanel.seriesClipRect.width,\n 'height': this.chartAxisLayoutPanel.seriesClipRect.height,\n 'fill': 'transparent',\n 'stroke-width': 1,\n 'stroke': 'Gray'\n });\n this.seriesElements.appendChild(clipRect);\n this.svgObject.appendChild(this.seriesElements);\n };\n Chart.prototype.initializeIndicator = function () {\n for (var _i = 0, _a = this.indicators; _i < _a.length; _i++) {\n var indicator = _a[_i];\n if (this[firstToLowerCase(indicator.type) + 'IndicatorModule']) {\n this[firstToLowerCase(indicator.type) + 'IndicatorModule'].createIndicatorElements(this, indicator, indicator.index);\n }\n }\n if (this.indicatorElements) {\n this.svgObject.appendChild(this.indicatorElements);\n }\n };\n Chart.prototype.initializeTrendLine = function () {\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n if (series.trendlines.length) {\n this.trendLineModule.getTrendLineElements(series, this);\n }\n }\n if (this.trendLineElements) {\n this.svgObject.appendChild(this.trendLineElements);\n }\n };\n Chart.prototype.appendElementsAfterSeries = function (axisElement) {\n if (this.chartAreaType === 'PolarRadar') {\n this.svgObject.appendChild(this.yAxisElements);\n }\n this.svgObject.appendChild(axisElement);\n if (this.stripLineModule) {\n this.stripLineModule.renderStripLine(this, 'Over', this.axisCollections);\n }\n if (!this.tooltip.enable) {\n this.svgObject.appendChild(this.renderer.createGroup({ id: this.element.id + '_UserInteraction', style: 'pointer-events:none;' }));\n }\n };\n Chart.prototype.applyZoomkit = function () {\n if (this.zoomModule && this.zoomModule.isZoomed && (!this.zoomSettings.enablePan || this.zoomModule.performedUI)) {\n this.zoomModule.applyZoomToolkit(this, this.axisCollections);\n }\n };\n Chart.prototype.renderAnnotation = function () {\n if (this.annotationModule) {\n this.annotationModule.renderAnnotations(getElement(this.element.id + '_Secondary_Element'));\n }\n };\n Chart.prototype.performSelection = function () {\n var selectedDataIndexes = [];\n if (this.selectionModule) {\n selectedDataIndexes = extend([], this.selectionModule.selectedDataIndexes, null, true);\n this.selectionModule.invokeSelection(this);\n }\n if (selectedDataIndexes.length > 0) {\n this.selectionModule.selectedDataIndexes = selectedDataIndexes;\n this.selectionModule.redrawSelection(this, this.selectionMode);\n }\n };\n Chart.prototype.processData = function () {\n var series;\n this.visibleSeriesCount = 0;\n var check = true;\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series_1 = _a[_i];\n if (!series_1.visible && !this.legendSettings.visible) {\n this.visibleSeriesCount++;\n continue;\n }\n if (series_1.category !== 'Indicator' && series_1.category !== 'TrendLine') {\n this.initializeDataModule(series_1);\n }\n }\n for (var _b = 0, _c = this.indicators; _b < _c.length; _b++) {\n var indicator = _c[_b];\n if (indicator.dataSource) {\n var techIndicator = indicator;\n this.initializeDataModule(techIndicator);\n check = false;\n }\n }\n if (!this.visibleSeries.length || this.visibleSeriesCount === this.visibleSeries.length && check) {\n this.refreshBound();\n this.trigger('loaded', { chart: this });\n }\n };\n Chart.prototype.initializeDataModule = function (series) {\n series.xData = [];\n series.yData = [];\n series.dataModule = new Data(series.dataSource, series.query);\n series.points = [];\n series.refreshDataManager(this);\n };\n Chart.prototype.calculateBounds = function () {\n var margin = this.margin;\n // Title Height;\n var titleHeight = 0;\n var padding = 15;\n var left = margin.left;\n var width = this.availableSize.width - left - margin.right - this.border.width;\n this.titleCollection = [];\n if (this.title) {\n this.titleCollection = getTitle(this.title, this.titleStyle, width);\n titleHeight = (measureText(this.title, this.titleStyle).height * this.titleCollection.length) + padding;\n }\n var top = margin.top + titleHeight + this.chartArea.border.width / 2;\n var height = this.availableSize.height - top - this.border.width - margin.bottom;\n this.initialClipRect = new Rect(left, top, width, height);\n if (this.legendModule) {\n this.legendModule.calculateLegendBounds(this.initialClipRect, this.availableSize);\n }\n this.chartAxisLayoutPanel.measureAxis(this.initialClipRect);\n };\n /**\n * Handles the print method for chart control.\n */\n Chart.prototype.print = function (id) {\n var exportChart = new ExportUtils(this);\n exportChart.print(id);\n };\n /**\n * Handles the export method for chart control.\n * @param type\n * @param fileName\n */\n Chart.prototype.export = function (type, fileName, orientation) {\n var exportChart = new ExportUtils(this);\n exportChart.export(type, fileName, orientation);\n };\n /**\n * Defines the trendline initialization\n */\n Chart.prototype.initTrendLines = function () {\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n var trendIndex = 0;\n for (var _b = 0, _c = series.trendlines; _b < _c.length; _b++) {\n var trendline = _c[_b];\n var trendLine = trendline;\n var type = firstToLowerCase(trendLine.type);\n if (this.trendLineModule) {\n trendLine.index = trendIndex;\n trendLine.sourceIndex = series.index;\n this.trendLineModule.initSeriesCollection(trendLine, this);\n if (trendLine.targetSeries) {\n trendLine.targetSeries.xAxisName = series.xAxisName;\n trendLine.targetSeries.yAxisName = series.yAxisName;\n this.visibleSeries.push(trendLine.targetSeries);\n }\n }\n trendIndex++;\n }\n }\n };\n Chart.prototype.calculateAreaType = function () {\n var series = this.series[0];\n if (series) {\n this.requireInvertedAxis = ((series.type.indexOf('Bar') !== -1) && !this.isTransposed) ||\n ((series.type.indexOf('Bar') === -1) && this.isTransposed && this.chartAreaType !== 'PolarRadar');\n }\n this.chartAxisLayoutPanel = this.chartAreaType === 'PolarRadar' ? (this.polarSeriesModule || this.radarSeriesModule)\n : new CartesianAxisLayoutPanel(this);\n };\n Chart.prototype.calculateVisibleAxis = function () {\n var axis;\n var series;\n var axes = [this.primaryXAxis, this.primaryYAxis];\n axes = this.chartAreaType === 'Cartesian' ? axes.concat(this.axes) : axes;\n this.axisCollections = [];\n if (this.zoomModule) {\n this.zoomModule.isPanning = this.zoomModule.isAxisZoomed(axes) && this.zoomSettings.enablePan;\n this.svgObject.setAttribute('cursor', this.zoomModule.isPanning ? 'pointer' : 'auto');\n }\n for (var i = 0, len = axes.length; i < len; i++) {\n axis = axes[i];\n axis.series = [];\n axis.labels = [];\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series_2 = _a[_i];\n this.initAxis(series_2, axis, true);\n }\n for (var _b = 0, _c = this.indicators; _b < _c.length; _b++) {\n var indicator = _c[_b];\n this.initAxis(indicator, axis, false);\n }\n if (axis.orientation != null) {\n this.axisCollections.push(axis);\n }\n }\n if (this.rows.length > 0 && this.columns.length > 0) {\n this.chartAxisLayoutPanel.measure();\n }\n };\n Chart.prototype.initAxis = function (series, axis, isSeries) {\n if (series.xAxisName === axis.name || (series.xAxisName == null && axis.name === 'primaryXAxis')) {\n axis.orientation = this.requireInvertedAxis ? 'Vertical' : 'Horizontal';\n series.xAxis = axis;\n if (isSeries) {\n axis.series.push(series);\n }\n }\n else if (series.yAxisName === axis.name || (series.yAxisName == null && axis.name === 'primaryYAxis')) {\n axis.orientation = this.requireInvertedAxis ? 'Horizontal' : 'Vertical';\n series.yAxis = axis;\n if (isSeries) {\n axis.series.push(series);\n }\n }\n };\n Chart.prototype.initTechnicalIndicators = function () {\n var i = 0;\n for (var _i = 0, _a = this.indicators; _i < _a.length; _i++) {\n var indicator = _a[_i];\n var techIndicator = indicator;\n var type = firstToLowerCase(techIndicator.type);\n if (this[type + 'IndicatorModule']) {\n techIndicator.index = i;\n this[type + 'IndicatorModule'].initSeriesCollection(techIndicator, this);\n for (var _b = 0, _c = techIndicator.targetSeries; _b < _c.length; _b++) {\n var targetSeries = _c[_b];\n if (indicator.seriesName || indicator.dataSource) {\n this.visibleSeries.push(targetSeries);\n }\n }\n }\n i++;\n }\n };\n /** @private */\n Chart.prototype.refreshTechnicalIndicator = function (series) {\n if (this.indicators.length) {\n var targetIndicator = null;\n if (series instanceof Series && series.category !== 'Indicator') {\n for (var _i = 0, _a = this.indicators; _i < _a.length; _i++) {\n var indicator = _a[_i];\n if (indicator.seriesName === series.name && !indicator.dataSource) {\n targetIndicator = indicator;\n targetIndicator.setDataSource(series, this);\n }\n }\n }\n else if (series instanceof TechnicalIndicator) {\n targetIndicator = series;\n targetIndicator.setDataSource(series instanceof Series ? series : null, this);\n }\n }\n };\n Chart.prototype.calculateVisibleSeries = function () {\n var series;\n this.visibleSeries = [];\n var colors = this.palettes.length ? this.palettes : getSeriesColor(this.theme);\n var count = colors.length;\n for (var i = 0, len = this.series.length; i < len; i++) {\n series = this.series[i];\n series.index = i;\n series.interior = series.fill || colors[i % count];\n switch (series.type) {\n case 'Bar':\n case 'StackingBar':\n case 'StackingBar100':\n if (this.series[0].type.indexOf('Bar') === -1) {\n continue;\n }\n break;\n case 'Polar':\n case 'Radar':\n if (this.chartAreaType !== 'PolarRadar') {\n continue;\n }\n if (this.chartAreaType === 'PolarRadar' && ((series.xAxisName === null && series.yAxisName !== null) ||\n (series.xAxisName !== null && series.yAxisName === null) ||\n (series.xAxisName !== null && series.yAxisName !== null))) {\n continue;\n }\n break;\n default:\n if (this.chartAreaType === 'PolarRadar' || this.series[0].type.indexOf('Bar') > -1) {\n continue;\n }\n break;\n }\n this.visibleSeries.push(series);\n this.series[i] = series;\n }\n };\n Chart.prototype.renderTitle = function () {\n if (this.title) {\n var anchor = this.titleStyle.textAlignment === 'Near' ? 'start' :\n this.titleStyle.textAlignment === 'Far' ? 'end' : 'middle';\n this.elementSize = measureText(this.title, this.titleStyle);\n var options = new TextOption(this.element.id + '_ChartTitle', titlePositionX(this.availableSize, this.margin.left, this.margin.right, this.titleStyle), this.margin.top + ((this.elementSize.height) * 3 / 4), anchor, this.titleCollection, '', 'auto');\n var element = textElement(options, this.titleStyle, this.titleStyle.color || this.themeStyle.chartTitle, this.svgObject);\n element.setAttribute('aria-label', this.description || this.title);\n element.setAttribute('tabindex', this.tabIndex.toString());\n }\n };\n Chart.prototype.renderBorder = function () {\n var width = this.border.width;\n var rect = new RectOption(this.element.id + '_ChartBorder', this.background || this.themeStyle.background, this.border, 1, new Rect(width / 2, width / 2, this.availableSize.width - width, this.availableSize.height - width));\n this.htmlObject = this.renderer.drawRectangle(rect);\n this.svgObject.appendChild(this.htmlObject);\n };\n Chart.prototype.renderAreaBorder = function () {\n if (this.chartAreaType === 'PolarRadar') {\n return null;\n }\n else {\n var rect = new RectOption(this.element.id + '_ChartAreaBorder', this.chartArea.background, { width: this.chartArea.border.width, color: this.chartArea.border.color || this.themeStyle.areaBorder }, this.chartArea.opacity, this.chartAxisLayoutPanel.seriesClipRect);\n this.htmlObject = this.renderer.drawRectangle(rect);\n this.svgObject.appendChild(this.htmlObject);\n }\n };\n /**\n * To add series for the chart\n * @param {SeriesModel[]} seriesCollection - Defines the series collection to be added in chart.\n * @return {void}.\n */\n Chart.prototype.addSeries = function (seriesCollection) {\n for (var _i = 0, seriesCollection_1 = seriesCollection; _i < seriesCollection_1.length; _i++) {\n var series = seriesCollection_1[_i];\n series = new Series(this, 'series', series);\n this.series.push(series);\n }\n this.refresh();\n };\n /**\n * To Remove series for the chart\n * @param index - Defines the series index to be remove in chart series\n * @return {void}\n */\n Chart.prototype.removeSeries = function (index) {\n this.series.splice(index, 1);\n this.refresh();\n };\n /**\n * To destroy the widget\n * @method destroy\n * @return {void}.\n * @member of Chart\n */\n Chart.prototype.destroy = function () {\n this.unWireEvents();\n _super.prototype.destroy.call(this);\n this.element.classList.remove('e-chart');\n };\n /**\n * Get component name\n */\n Chart.prototype.getModuleName = function () {\n return 'chart';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Chart.prototype.getPersistData = function () {\n var keyEntity = ['loaded', 'animationComplete'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Method to create SVG element.\n */\n Chart.prototype.createChartSvg = function () {\n this.removeSvg();\n createSvg(this);\n };\n /**\n * Method to bind events for chart\n */\n Chart.prototype.unWireEvents = function () {\n /*! Find the Events type */\n var startEvent = Browser.touchStartEvent;\n var moveEvent = Browser.touchMoveEvent;\n var stopEvent = Browser.touchEndEvent;\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n /*! UnBind the Event handler */\n EventHandler.remove(this.element, startEvent, this.chartOnMouseDown);\n EventHandler.remove(this.element, moveEvent, this.mouseMove);\n EventHandler.remove(this.element, stopEvent, this.mouseEnd);\n EventHandler.remove(this.element, 'click', this.chartOnMouseClick);\n EventHandler.remove(this.element, 'contextmenu', this.chartRightClick);\n EventHandler.remove(this.element, cancelEvent, this.mouseLeave);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.chartResize);\n };\n Chart.prototype.wireEvents = function () {\n /*! Find the Events type */\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n /*! Bind the Event handler */\n EventHandler.add(this.element, Browser.touchStartEvent, this.chartOnMouseDown, this);\n EventHandler.add(this.element, Browser.touchMoveEvent, this.mouseMove, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.mouseEnd, this);\n EventHandler.add(this.element, 'click', this.chartOnMouseClick, this);\n EventHandler.add(this.element, 'contextmenu', this.chartRightClick, this);\n EventHandler.add(this.element, cancelEvent, this.mouseLeave, this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.chartResize.bind(this));\n this.longPress = this.longPress.bind(this);\n new Touch(this.element, { tapHold: this.longPress, tapHoldThreshold: 500 });\n /*! Apply the style for chart */\n this.setStyle(this.element);\n };\n Chart.prototype.chartRightClick = function (event) {\n if (this.crosshair.enable && this.crosshairModule &&\n (event.buttons === 2 || event.which === 0 || event.pointerType === 'touch')) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n return true;\n };\n Chart.prototype.setStyle = function (element) {\n var zooming = this.zoomSettings;\n var disableScroll = zooming.enableSelectionZooming || zooming.enableMouseWheelZooming || zooming.enablePinchZooming ||\n this.selectionMode !== 'None' || this.crosshair.enable;\n element.style.touchAction = disableScroll ? 'none' : 'element';\n element.style.msTouchAction = disableScroll ? 'none' : 'element';\n element.style.msContentZooming = 'none';\n element.style.msUserSelect = 'none';\n element.style.webkitUserSelect = 'none';\n element.style.position = 'relative';\n element.style.display = 'block';\n };\n /**\n * Finds the orientation.\n * @return {boolean}\n * @private\n */\n Chart.prototype.isOrientation = function () {\n return ('orientation' in window && 'onorientationchange' in window);\n };\n /**\n * Handles the long press on chart.\n * @return {boolean}\n * @private\n */\n Chart.prototype.longPress = function (e) {\n this.mouseX = (e && e.originalEvent.changedTouches) ? (e.originalEvent.changedTouches[0].clientX) : 0;\n this.mouseY = (e && e.originalEvent.changedTouches) ? (e.originalEvent.changedTouches[0].clientY) : 0;\n this.startMove = true;\n this.setMouseXY(this.mouseX, this.mouseY);\n this.notify('tapHold', e);\n return false;\n };\n /**\n * To find mouse x, y for aligned chart element svg position\n */\n Chart.prototype.setMouseXY = function (pageX, pageY) {\n var rect = this.element.getBoundingClientRect();\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n this.mouseX = (pageX - rect.left) - Math.max(svgRect.left - rect.left, 0);\n this.mouseY = (pageY - rect.top) - Math.max(svgRect.top - rect.top, 0);\n };\n /**\n * Handles the chart resize.\n * @return {boolean}\n * @private\n */\n Chart.prototype.chartResize = function (e) {\n var _this = this;\n this.animateSeries = false;\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n this.resizeTo = setTimeout(function () {\n if (_this.isDestroyed) {\n clearTimeout(_this.resizeTo);\n return;\n }\n _this.createChartSvg();\n _this.refreshAxis();\n _this.refreshBound();\n _this.trigger('loaded', { chart: _this });\n }, 500);\n return false;\n };\n /**\n * Handles the mouse move.\n * @return {boolean}\n * @private\n */\n Chart.prototype.mouseMove = function (e) {\n var pageX;\n var pageY;\n var touchArg;\n if (e.type === 'touchmove') {\n this.isTouch = true;\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n pageY = touchArg.changedTouches[0].clientY;\n }\n else {\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2' || this.isTouch;\n pageX = e.clientX;\n pageY = e.clientY;\n }\n this.setMouseXY(pageX, pageY);\n this.chartOnMouseMove(e);\n return false;\n };\n /**\n * Handles the mouse leave.\n * @return {boolean}\n * @private\n */\n Chart.prototype.mouseLeave = function (e) {\n var pageX;\n var pageY;\n var touchArg;\n if (e.type === 'touchleave') {\n this.isTouch = true;\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n pageY = touchArg.changedTouches[0].clientY;\n }\n else {\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2';\n pageX = e.clientX;\n pageY = e.clientY;\n }\n this.setMouseXY(pageX, pageY);\n this.chartOnMouseLeave(e);\n return false;\n };\n /**\n * Handles the mouse leave on chart.\n * @return {boolean}\n * @private\n */\n Chart.prototype.chartOnMouseLeave = function (e) {\n var element = e.target;\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n this.trigger(chartMouseLeave, { target: element.id, x: this.mouseX, y: this.mouseY });\n this.isChartDrag = false;\n this.notify(cancelEvent, e);\n return false;\n };\n /**\n * Handles the mouse click on chart.\n * @return {boolean}\n * @private\n */\n Chart.prototype.chartOnMouseClick = function (e) {\n var element = e.target;\n this.trigger(chartMouseClick, { target: element.id, x: this.mouseX, y: this.mouseY });\n if (this.pointClick) {\n this.triggerPointEvent(pointClick);\n }\n this.notify('click', e);\n return false;\n };\n Chart.prototype.triggerPointEvent = function (event) {\n var data = new ChartData(this);\n var pointData = data.getData();\n if (pointData.series && pointData.point) {\n this.trigger(event, { series: pointData.series,\n point: pointData.point,\n seriesIndex: pointData.series.index, pointIndex: pointData.point.index,\n x: this.mouseX, y: this.mouseY });\n }\n };\n /**\n * Handles the mouse move on chart.\n * @return {boolean}\n * @private\n */\n Chart.prototype.chartOnMouseMove = function (e) {\n var element = e.target;\n this.trigger(chartMouseMove, { target: element.id, x: this.mouseX, y: this.mouseY });\n if (this.pointMove) {\n this.triggerPointEvent(pointMove);\n }\n // Tooltip for chart series.\n if (!this.isTouch) {\n this.titleTooltip(e, this.mouseX, this.mouseY);\n this.axisTooltip(e, this.mouseX, this.mouseY);\n }\n this.notify(Browser.touchMoveEvent, e);\n this.isTouch = false;\n return false;\n };\n Chart.prototype.titleTooltip = function (event, x, y, isTouch) {\n var targetId = event.target.id;\n if ((targetId === (this.element.id + '_ChartTitle')) && (event.target.textContent.indexOf('...') > -1)) {\n showTooltip(this.title, x, y, this.element.offsetWidth, this.element.id + '_EJ2_Title_Tooltip', getElement(this.element.id + '_Secondary_Element'), isTouch);\n }\n else {\n removeElement(this.element.id + '_EJ2_Title_Tooltip');\n }\n };\n Chart.prototype.axisTooltip = function (event, x, y, isTouch) {\n var targetId = event.target.id;\n if (((targetId.indexOf('AxisLabel') > -1) || targetId.indexOf('Axis_MultiLevelLabel') > -1) &&\n (event.target.textContent.indexOf('...') > -1)) {\n showTooltip(this.findAxisLabel(targetId), x, y, this.element.offsetWidth, this.element.id + '_EJ2_AxisLabel_Tooltip', getElement(this.element.id + '_Secondary_Element'), isTouch);\n }\n else {\n removeElement(this.element.id + '_EJ2_AxisLabel_Tooltip');\n }\n };\n Chart.prototype.findAxisLabel = function (text) {\n var texts;\n if (text.indexOf('AxisLabel') > -1) {\n texts = ((text.replace(this.element.id, '')).replace('AxisLabel_', '')).split('_');\n return this.axisCollections[parseInt(texts[0], 10)].visibleLabels[parseInt(texts[1], 10)].originalText;\n }\n else {\n texts = ((text.replace(this.element.id, '')).replace('Axis_MultiLevelLabel_Level_', '').replace('Text_', '')).split('_');\n return (this.axisCollections[parseInt(texts[0], 10)].multiLevelLabels[parseInt(texts[1], 10)]\n .categories[parseInt(texts[2], 10)].text);\n }\n };\n /**\n * Handles the mouse down on chart.\n * @return {boolean}\n * @private\n */\n Chart.prototype.chartOnMouseDown = function (e) {\n var pageX;\n var pageY;\n var target;\n var touchArg;\n var offset = Browser.isDevice ? 20 : 30;\n var rect = this.element.getBoundingClientRect();\n var element = e.target;\n this.trigger(chartMouseDown, { target: element.id, x: this.mouseX, y: this.mouseY });\n if (e.type === 'touchstart') {\n this.isTouch = true;\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n pageY = touchArg.changedTouches[0].clientY;\n target = touchArg.target;\n }\n else {\n this.isTouch = e.pointerType === 'touch';\n pageX = e.clientX;\n pageY = e.clientY;\n target = e.target;\n }\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n this.mouseDownX = this.previousMouseMoveX = (pageX - rect.left) - Math.max(svgRect.left - rect.left, 0);\n this.mouseDownY = this.previousMouseMoveY = (pageY - rect.top) - Math.max(svgRect.top - rect.top, 0);\n if (this.isTouch) {\n this.isDoubleTap = (new Date().getTime() < this.threshold && target.id.indexOf(this.element.id + '_Zooming_') === -1 &&\n (this.mouseDownX - offset >= this.mouseX || this.mouseDownX + offset >= this.mouseX) &&\n (this.mouseDownY - offset >= this.mouseY || this.mouseDownY + offset >= this.mouseY) &&\n (this.mouseX - offset >= this.mouseDownX || this.mouseX + offset >= this.mouseDownX) &&\n (this.mouseY - offset >= this.mouseDownY || this.mouseY + offset >= this.mouseDownY));\n }\n this.notify(Browser.touchStartEvent, e);\n return false;\n };\n /**\n * Handles the mouse up.\n * @return {boolean}\n * @private\n */\n Chart.prototype.mouseEnd = function (e) {\n var pageY;\n var pageX;\n var touchArg;\n if (e.type === 'touchend') {\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n this.isTouch = true;\n pageY = touchArg.changedTouches[0].clientY;\n }\n else {\n pageY = e.clientY;\n pageX = e.clientX;\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2';\n }\n this.setMouseXY(pageX, pageY);\n this.chartOnMouseUp(e);\n return false;\n };\n /**\n * Handles the mouse up.\n * @return {boolean}\n * @private\n */\n Chart.prototype.chartOnMouseUp = function (e) {\n var element = e.target;\n this.trigger(chartMouseUp, { target: element.id, x: this.mouseX, y: this.mouseY });\n this.isChartDrag = false;\n if (this.isTouch) {\n this.titleTooltip(e, this.mouseX, this.mouseY, this.isTouch);\n this.axisTooltip(e, this.mouseX, this.mouseY, this.isTouch);\n this.threshold = new Date().getTime() + 300;\n }\n this.seriesElements.removeAttribute('clip-path');\n this.notify(Browser.touchEndEvent, e);\n return false;\n };\n /**\n * Method to set culture for chart\n */\n Chart.prototype.setCulture = function () {\n this.intl = new Internationalization();\n this.setLocaleConstants();\n this.localeObject = new L10n(this.getModuleName(), this.defaultLocalConstants, this.locale);\n };\n /**\n * Method to set the annotation content dynamically for chart.\n */\n Chart.prototype.setAnnotationValue = function (annotationIndex, content) {\n var parentNode = getElement(this.element.id + '_Annotation_Collections');\n var annotation = this.annotations[annotationIndex];\n var element;\n if (content !== null) {\n annotation.content = content;\n if (parentNode) {\n removeElement(this.element.id + '_Annotation_' + annotationIndex);\n element = createElement('div');\n this.annotationModule.processAnnotation(annotation, annotationIndex, element);\n parentNode.appendChild(element.children[0]);\n }\n else {\n this.annotationModule.renderAnnotations(getElement(this.element.id + '_Secondary_Element'));\n }\n }\n };\n /**\n * Method to set locale constants\n */\n Chart.prototype.setLocaleConstants = function () {\n this.defaultLocalConstants = {\n ZoomIn: 'ZoomIn',\n Zoom: 'Zoom',\n ZoomOut: 'ZoomOut',\n Pan: 'Pan',\n Reset: 'Reset',\n ResetZoom: 'Reset Zoom'\n };\n };\n /**\n * Theming for chart\n */\n Chart.prototype.setTheme = function () {\n /*! Set theme */\n this.themeStyle = getThemeColor(this.theme);\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n Chart.prototype.requiredModules = function () {\n var _this = this;\n var modules = [];\n var series = this.series;\n var enableAnnotation = false;\n var moduleName;\n var errorBarVisible = false;\n var dataLabelEnable = false;\n var zooming = this.zoomSettings;\n this.chartAreaType = (series.length > 0 && (series[0].type === 'Polar' || series[0].type === 'Radar')) ? 'PolarRadar' : 'Cartesian';\n if (this.tooltip.enable) {\n modules.push({\n member: 'Tooltip',\n args: [this]\n });\n }\n series.map(function (value) {\n _this.isLegend = (_this.legendSettings.visible && ((value.name !== '') || !!_this.isLegend));\n moduleName = value.type.indexOf('100') !== -1 ? value.type.replace('100', '') + 'Series' : value.type + 'Series';\n errorBarVisible = value.errorBar.visible || errorBarVisible;\n dataLabelEnable = value.marker.dataLabel.visible || dataLabelEnable;\n if (!modules.some(function (currentModule) {\n return currentModule.member === moduleName;\n })) {\n modules.push({\n member: moduleName,\n args: [_this, series]\n });\n }\n if (_this.chartAreaType === 'PolarRadar') {\n modules.push({\n member: value.drawType + 'Series',\n args: [_this, series]\n });\n }\n });\n this.findIndicatorModules(modules);\n this.findTrendLineModules(modules);\n modules = this.findAxisModule(modules);\n enableAnnotation = this.annotations.some(function (value) {\n return (value.content !== null);\n });\n if (errorBarVisible) {\n modules.push({\n member: 'ErrorBar',\n args: [this, series]\n });\n }\n if (this.isLegend) {\n modules.push({\n member: 'Legend',\n args: [this]\n });\n }\n if (this.chartAreaType !== 'PolarRadar' && (zooming.enableSelectionZooming\n || zooming.enableMouseWheelZooming || zooming.enablePinchZooming || zooming.enablePan)) {\n modules.push({\n member: 'Zoom',\n args: [this, this.zoomSettings]\n });\n }\n if (this.selectionMode !== 'None' && !(this.chartAreaType === 'PolarRadar' &&\n this.selectionMode.indexOf('Drag') > -1)) {\n modules.push({\n member: 'Selection',\n args: [this]\n });\n }\n if (dataLabelEnable) {\n modules.push({\n member: 'DataLabel',\n args: [this, series]\n });\n }\n if (enableAnnotation) {\n modules.push({\n member: 'Annotation',\n args: [this]\n });\n }\n if (this.chartAreaType !== 'PolarRadar' && this.crosshair.enable) {\n modules.push({\n member: 'Crosshair',\n args: [this]\n });\n }\n return modules;\n };\n Chart.prototype.findAxisModule = function (modules) {\n var axisCollections = [];\n axisCollections.push(this.primaryXAxis);\n axisCollections.push(this.primaryYAxis);\n axisCollections = axisCollections.concat(this.axes);\n var datetimeEnabled = false;\n var categoryEnabled = false;\n var logarithmicEnabled = false;\n var striplineEnabled = false;\n var dateTimeCategoryEnabled = false;\n var multiLevelEnabled = false;\n for (var _i = 0, axisCollections_1 = axisCollections; _i < axisCollections_1.length; _i++) {\n var axis = axisCollections_1[_i];\n datetimeEnabled = axis.valueType === 'DateTime' || datetimeEnabled;\n categoryEnabled = axis.valueType === 'Category' || categoryEnabled;\n logarithmicEnabled = axis.valueType === 'Logarithmic' || logarithmicEnabled;\n dateTimeCategoryEnabled = axis.valueType === 'DateTimeCategory' || dateTimeCategoryEnabled;\n striplineEnabled = this.findStriplineVisibility(axis.stripLines) || striplineEnabled;\n multiLevelEnabled = axis.multiLevelLabels.length > 0 || multiLevelEnabled;\n }\n if (datetimeEnabled) {\n modules.push({\n member: 'DateTime',\n args: [this]\n });\n }\n if (categoryEnabled) {\n modules.push({\n member: 'Category',\n args: [this]\n });\n }\n if (logarithmicEnabled) {\n modules.push({\n member: 'Logarithmic',\n args: [this]\n });\n }\n if (striplineEnabled) {\n modules.push({\n member: 'StripLine',\n args: [this]\n });\n }\n if (multiLevelEnabled) {\n modules.push({\n member: 'MultiLevelLabel',\n args: [this]\n });\n }\n if (dateTimeCategoryEnabled) {\n modules.push({\n member: 'DateTimeCategory',\n args: [this]\n });\n }\n return modules;\n };\n Chart.prototype.findIndicatorModules = function (modules) {\n var macdEnable;\n var bandEnable;\n var indicators = this.indicators;\n if (this.indicators.length) {\n modules.push({\n member: 'LineSeries',\n args: [this]\n });\n indicators.map(function (indicator) {\n macdEnable = macdEnable || indicator.type === 'Macd';\n bandEnable = bandEnable || indicator.type === 'BollingerBands';\n });\n if (macdEnable) {\n modules.push({\n member: 'ColumnSeries',\n args: [this]\n });\n }\n if (bandEnable) {\n modules.push({\n member: 'RangeAreaSeries',\n args: [this]\n });\n }\n for (var _i = 0, _a = this.indicators; _i < _a.length; _i++) {\n var indicator = _a[_i];\n modules.push({\n member: indicator.type + 'Indicator',\n args: [this]\n });\n }\n }\n };\n Chart.prototype.findTrendLineModules = function (modules) {\n var isLine;\n var isSpline;\n var _loop_1 = function (series) {\n var markerEnable;\n series.trendlines.map(function (trendline) {\n markerEnable = markerEnable || trendline.marker.visible;\n isLine = isLine || (trendline.type === 'Linear' || trendline.type === 'MovingAverage') ? true : false;\n isSpline = isSpline || !isLine ? true : false;\n });\n if (markerEnable) {\n modules.push({\n member: 'Marker',\n args: [this_1, series]\n });\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = this.series; _i < _a.length; _i++) {\n var series = _a[_i];\n _loop_1(series);\n }\n if (isLine || isSpline) {\n modules.push({\n member: 'TrendLine',\n args: [this]\n });\n }\n if (isLine) {\n modules.push({\n member: 'LineSeries',\n args: [this]\n });\n }\n if (isSpline) {\n modules.push({\n member: 'SplineSeries',\n args: [this]\n });\n }\n };\n Chart.prototype.findStriplineVisibility = function (striplines) {\n var visible = false;\n for (var _i = 0, striplines_1 = striplines; _i < striplines_1.length; _i++) {\n var stripline = striplines_1[_i];\n if (stripline.visible) {\n visible = true;\n break;\n }\n }\n return visible;\n };\n /**\n * To Remove the SVG.\n * @return {boolean}\n * @private\n */\n Chart.prototype.removeSvg = function () {\n if (document.getElementById(this.element.id + '_Secondary_Element')) {\n remove(document.getElementById(this.element.id + '_Secondary_Element'));\n }\n var removeLength = 0;\n if (this.zoomModule && this.zoomModule.pinchTarget) {\n this.zoomModule.pinchTarget.id = '';\n this.zoomModule.pinchTarget.setAttribute('opacity', '0');\n this.svgObject.appendChild(this.zoomModule.pinchTarget);\n removeLength = 1;\n }\n if (this.svgObject) {\n while (this.svgObject.childNodes.length > removeLength) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode) {\n remove(this.svgObject);\n }\n }\n };\n Chart.prototype.refreshDefinition = function (definitions) {\n for (var _i = 0, definitions_1 = definitions; _i < definitions_1.length; _i++) {\n var item = definitions_1[_i];\n item.axes = [];\n }\n };\n /**\n * Refresh the axis default value.\n * @return {boolean}\n * @private\n */\n Chart.prototype.refreshAxis = function () {\n var axis = this.primaryXAxis;\n axis.rect = new Rect(undefined, undefined, 0, 0);\n axis = this.primaryYAxis;\n axis.isStack100 = false;\n axis.rect = new Rect(undefined, undefined, 0, 0);\n for (var _i = 0, _a = this.axes; _i < _a.length; _i++) {\n var item = _a[_i];\n axis = item;\n axis.rect = new Rect(undefined, undefined, 0, 0);\n axis.isStack100 = false;\n }\n };\n Chart.prototype.axisChange = function (axis) {\n if (!axis.name && !axis.valueType) {\n return false;\n }\n this.refreshDefinition(this.columns);\n this.refreshDefinition(this.rows);\n this.calculateVisibleAxis();\n this.processData();\n return true;\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n // tslint:disable-next-line:max-func-body-length\n Chart.prototype.onPropertyChanged = function (newProp, oldProp) {\n var renderer = false;\n var refreshBounds = false;\n if (Object.keys(newProp).length === 1 && Object.keys(newProp)[0] === 'indicators') {\n //add valid check, it should happen only when property change is triggered for target series\n return;\n }\n this.animateSeries = false;\n if (!this.delayRedraw) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'primaryXAxis':\n refreshBounds = this.axisChange(newProp.primaryXAxis);\n if (newProp.primaryXAxis.edgeLabelPlacement) {\n renderer = true;\n }\n if (!newProp.primaryXAxis.crosshairTooltip) {\n refreshBounds = true;\n }\n break;\n case 'primaryYAxis':\n refreshBounds = this.axisChange(newProp.primaryYAxis);\n if (newProp.primaryYAxis.edgeLabelPlacement) {\n renderer = true;\n }\n if (!newProp.primaryYAxis.crosshairTooltip) {\n refreshBounds = true;\n }\n break;\n case 'height':\n case 'width':\n this.createChartSvg();\n refreshBounds = true;\n break;\n case 'title':\n refreshBounds = true;\n break;\n case 'titleStyle':\n if (newProp.titleStyle && (newProp.titleStyle.size || newProp.titleStyle.textOverflow)) {\n refreshBounds = true;\n }\n else {\n renderer = true;\n }\n break;\n case 'border':\n renderer = true;\n break;\n case 'zoomSettings':\n case 'background':\n renderer = true;\n break;\n case 'chartArea':\n if (newProp.chartArea.border && newProp.chartArea.border.width) {\n refreshBounds = true;\n }\n renderer = true;\n break;\n case 'legendSettings':\n if (!newProp.legendSettings.background || !newProp.legendSettings.opacity) {\n refreshBounds = true;\n }\n renderer = true;\n break;\n case 'palettes':\n this.calculateVisibleSeries();\n renderer = true;\n break;\n case 'selectedDataIndexes':\n case 'selectionMode':\n if (this.selectionModule && newProp.selectionMode && newProp.selectionMode.indexOf('Drag') === -1) {\n this.selectionModule.redrawSelection(this, oldProp.selectionMode);\n }\n break;\n case 'isMultiSelect':\n if (this.selectionModule && !newProp.isMultiSelect && this.selectionModule.selectedDataIndexes.length > 1) {\n this.selectionModule.redrawSelection(this, oldProp.selectionMode);\n }\n break;\n case 'theme':\n this.animateSeries = true;\n break;\n case 'locale':\n case 'currencyCode':\n _super.prototype.refresh.call(this);\n break;\n case 'tooltip':\n this.tooltipModule.previousPoints = [];\n break;\n }\n }\n if (!refreshBounds && renderer) {\n this.removeSvg();\n this.renderElements();\n this.trigger('loaded', { chart: this });\n }\n if (refreshBounds) {\n this.removeSvg();\n this.refreshAxis();\n this.refreshBound();\n this.trigger('loaded', { chart: this });\n }\n }\n };\n __decorate([\n Property(null)\n ], Chart.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Chart.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], Chart.prototype, \"title\", void 0);\n __decorate([\n Complex(Theme.chartTitleFont, Font)\n ], Chart.prototype, \"titleStyle\", void 0);\n __decorate([\n Complex({}, Margin)\n ], Chart.prototype, \"margin\", void 0);\n __decorate([\n Complex({ color: '#DDDDDD', width: 0 }, Border)\n ], Chart.prototype, \"border\", void 0);\n __decorate([\n Property(null)\n ], Chart.prototype, \"background\", void 0);\n __decorate([\n Complex({ border: { color: null, width: 0.5 }, background: 'transparent' }, ChartArea)\n ], Chart.prototype, \"chartArea\", void 0);\n __decorate([\n Complex({ name: 'primaryXAxis' }, Axis)\n ], Chart.prototype, \"primaryXAxis\", void 0);\n __decorate([\n Complex({ name: 'primaryYAxis' }, Axis)\n ], Chart.prototype, \"primaryYAxis\", void 0);\n __decorate([\n Collection([{}], Row)\n ], Chart.prototype, \"rows\", void 0);\n __decorate([\n Collection([{}], Column)\n ], Chart.prototype, \"columns\", void 0);\n __decorate([\n Collection([{}], Axis)\n ], Chart.prototype, \"axes\", void 0);\n __decorate([\n Collection([{}], Series)\n ], Chart.prototype, \"series\", void 0);\n __decorate([\n Collection([{}], ChartAnnotationSettings)\n ], Chart.prototype, \"annotations\", void 0);\n __decorate([\n Property([])\n ], Chart.prototype, \"palettes\", void 0);\n __decorate([\n Property('Material')\n ], Chart.prototype, \"theme\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], Chart.prototype, \"tooltip\", void 0);\n __decorate([\n Complex({}, CrosshairSettings)\n ], Chart.prototype, \"crosshair\", void 0);\n __decorate([\n Complex({}, LegendSettings)\n ], Chart.prototype, \"legendSettings\", void 0);\n __decorate([\n Complex({}, ZoomSettings)\n ], Chart.prototype, \"zoomSettings\", void 0);\n __decorate([\n Property('None')\n ], Chart.prototype, \"selectionMode\", void 0);\n __decorate([\n Property(false)\n ], Chart.prototype, \"isMultiSelect\", void 0);\n __decorate([\n Collection([], Indexes)\n ], Chart.prototype, \"selectedDataIndexes\", void 0);\n __decorate([\n Property(false)\n ], Chart.prototype, \"useGroupingSeparator\", void 0);\n __decorate([\n Property(false)\n ], Chart.prototype, \"isTransposed\", void 0);\n __decorate([\n Collection([], TechnicalIndicator)\n ], Chart.prototype, \"indicators\", void 0);\n __decorate([\n Property(null)\n ], Chart.prototype, \"description\", void 0);\n __decorate([\n Property(1)\n ], Chart.prototype, \"tabIndex\", void 0);\n __decorate([\n Property(true)\n ], Chart.prototype, \"enableSideBySidePlacement\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"annotationRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"legendRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"textRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"pointRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"seriesRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"axisLabelRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"axisRangeCalculated\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"axisMultiLabelRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"chartMouseMove\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"chartMouseClick\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"pointClick\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"pointMove\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"chartMouseLeave\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"chartMouseDown\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"chartMouseUp\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"dragComplete\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"zoomComplete\", void 0);\n __decorate([\n Property('USD')\n ], Chart.prototype, \"currencyCode\", void 0);\n Chart = __decorate([\n NotifyPropertyChanges\n ], Chart);\n return Chart;\n}(Component));\nexport { Chart };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Double } from '../axis/double-axis';\n/**\n * Common axis classes\n * @private\n */\nvar NiceInterval = /** @class */ (function (_super) {\n __extends(NiceInterval, _super);\n function NiceInterval() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Method to calculate numeric datetime interval\n */\n NiceInterval.prototype.calculateDateTimeNiceInterval = function (axis, size, start, end) {\n var oneDay = 24 * 60 * 60 * 1000;\n var startDate = new Date(start);\n var endDate = new Date(end);\n //var axisInterval ;\n var totalDays = (Math.abs((startDate.getTime() - endDate.getTime()) / (oneDay)));\n var interval;\n axis.actualIntervalType = axis.intervalType;\n switch (axis.intervalType) {\n case 'Years':\n interval = this.calculateNumericNiceInterval(axis, totalDays / 365, size);\n break;\n case 'Months':\n interval = this.calculateNumericNiceInterval(axis, totalDays / 30, size);\n break;\n case 'Days':\n interval = this.calculateNumericNiceInterval(axis, totalDays, size);\n break;\n case 'Hours':\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24, size);\n break;\n case 'Minutes':\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24 * 60, size);\n break;\n case 'Seconds':\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24 * 60 * 60, size);\n break;\n case 'Auto':\n interval = this.calculateNumericNiceInterval(axis, totalDays / 365, size);\n if (interval >= 1) {\n axis.actualIntervalType = 'Years';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, totalDays / 30, size);\n if (interval >= 1) {\n axis.actualIntervalType = 'Months';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, totalDays, size);\n if (interval >= 1) {\n axis.actualIntervalType = 'Days';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24, size);\n if (interval >= 1) {\n axis.actualIntervalType = 'Hours';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24 * 60, size);\n if (interval >= 1) {\n axis.actualIntervalType = 'Minutes';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24 * 60 * 60, size);\n axis.actualIntervalType = 'Seconds';\n return interval;\n }\n return interval;\n };\n /**\n * To get the skeleton for the DateTime axis.\n * @return {string}\n * @private\n */\n NiceInterval.prototype.getSkeleton = function (axis) {\n var skeleton;\n if (axis.skeleton) {\n return axis.skeleton;\n }\n if (axis.actualIntervalType === 'Years') {\n skeleton = 'yMMM';\n }\n else if (axis.actualIntervalType === 'Months') {\n skeleton = 'MMMd';\n }\n else if (axis.actualIntervalType === 'Days') {\n skeleton = 'yMd';\n }\n else if (axis.actualIntervalType === 'Hours') {\n skeleton = 'EHm';\n }\n else if (axis.actualIntervalType === 'Minutes' || axis.actualIntervalType === 'Seconds') {\n skeleton = 'Hms';\n }\n else {\n skeleton = 'Hms';\n }\n return skeleton;\n };\n return NiceInterval;\n}(Double));\nexport { NiceInterval };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { DoubleRange } from '../utils/double-range';\nimport { withIn, firstToLowerCase } from '../../common/utils/helper';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { NiceInterval } from '../axis/axis-helper';\n/**\n * `DateTime` module is used to render datetime axis.\n */\nvar DateTime = /** @class */ (function (_super) {\n __extends(DateTime, _super);\n /**\n * Constructor for the dateTime module.\n * @private\n */\n function DateTime(chart) {\n return _super.call(this, chart) || this;\n }\n /**\n * The function to calculate the range and labels for the axis.\n * @return {void}\n */\n DateTime.prototype.calculateRangeAndInterval = function (size, axis) {\n this.calculateRange(axis, size);\n this.getActualRange(axis, size);\n this.applyRangePadding(axis, size);\n this.calculateVisibleLabels(axis);\n };\n /**\n * Actual Range for the axis.\n * @private\n */\n DateTime.prototype.getActualRange = function (axis, size) {\n var option = {\n skeleton: 'full',\n type: 'dateTime'\n };\n var dateParser = this.chart.intl.getDateParser(option);\n var dateFormatter = this.chart.intl.getDateFormat(option);\n // Axis min\n if ((axis.minimum) !== null) {\n this.min = Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: axis.minimum }).val))));\n }\n else if (this.min === null || this.min === Number.POSITIVE_INFINITY) {\n this.min = Date.parse(dateParser(dateFormatter(new Date(1970, 1, 1))));\n }\n // Axis Max\n if ((axis.maximum) !== null) {\n this.max = Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: axis.maximum }).val))));\n }\n else if (this.max === null || this.max === Number.NEGATIVE_INFINITY) {\n this.max = Date.parse(dateParser(dateFormatter(new Date(1970, 5, 1))));\n }\n if (this.min === this.max) {\n this.max = this.max + 2592000000;\n this.min = this.min - 2592000000;\n }\n axis.actualRange = {};\n axis.doubleRange = new DoubleRange(this.min, this.max);\n var datetimeInterval = this.calculateDateTimeNiceInterval(axis, size, axis.doubleRange.start, axis.doubleRange.end);\n if (!axis.interval) {\n axis.actualRange.interval = datetimeInterval;\n }\n else {\n axis.actualRange.interval = axis.interval;\n }\n axis.actualRange.min = axis.doubleRange.start;\n axis.actualRange.max = axis.doubleRange.end;\n };\n /**\n * Apply padding for the range.\n * @private\n */\n DateTime.prototype.applyRangePadding = function (axis, size) {\n this.start = (axis.actualRange.min);\n this.end = (axis.actualRange.max);\n var minimum;\n var maximum;\n var interval = axis.actualRange.interval;\n if (!axis.setRange()) {\n var rangePadding = axis.getRangePadding(this.chart);\n minimum = new Date(this.start);\n maximum = new Date(this.end);\n var intervalType = axis.actualIntervalType;\n if (rangePadding === 'None') {\n this.start = minimum.getTime();\n this.end = maximum.getTime();\n }\n else if (rangePadding === 'Additional' || rangePadding === 'Round') {\n switch (intervalType) {\n case 'Years':\n this.getYear(minimum, maximum, rangePadding, interval);\n break;\n case 'Months':\n this.getMonth(minimum, maximum, rangePadding, interval);\n break;\n case 'Days':\n this.getDay(minimum, maximum, rangePadding, interval);\n break;\n case 'Hours':\n this.getHour(minimum, maximum, rangePadding, interval);\n break;\n case 'Minutes':\n var minute = (minimum.getMinutes() / interval) * interval;\n var endMinute = maximum.getMinutes() + (minimum.getMinutes() - minute);\n if (rangePadding === 'Round') {\n this.start = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), minimum.getHours(), minute, 0)).getTime();\n this.end = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), maximum.getHours(), endMinute, 59)).getTime();\n }\n else {\n this.start = (new Date(minimum.getFullYear(), maximum.getMonth(), minimum.getDate(), minimum.getHours(), minute + (-interval), 0)).getTime();\n this.end = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), maximum.getHours(), endMinute + (interval), 0)).getTime();\n }\n break;\n case 'Seconds':\n var second = (minimum.getSeconds() / interval) * interval;\n var endSecond = maximum.getSeconds() + (minimum.getSeconds() - second);\n if (rangePadding === 'Round') {\n this.start = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), minimum.getHours(), minimum.getMinutes(), second, 0)).getTime();\n this.end = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), maximum.getHours(), maximum.getMinutes(), endSecond, 0)).getTime();\n }\n else {\n this.start = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), minimum.getHours(), minimum.getMinutes(), second + (-interval), 0)).getTime();\n this.end = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), maximum.getHours(), maximum.getMinutes(), endSecond + (interval), 0)).getTime();\n }\n break;\n }\n }\n }\n axis.actualRange.min = (axis.minimum != null) ? this.min : this.start;\n axis.actualRange.max = (axis.maximum != null) ? this.max : this.end;\n axis.actualRange.delta = (axis.actualRange.max - axis.actualRange.min);\n axis.doubleRange = new DoubleRange(axis.actualRange.min, axis.actualRange.max);\n this.calculateVisibleRange(size, axis);\n };\n DateTime.prototype.getYear = function (minimum, maximum, rangePadding, interval) {\n var startYear = minimum.getFullYear();\n var endYear = maximum.getFullYear();\n if (rangePadding === 'Additional') {\n this.start = (new Date(startYear - interval, 1, 1, 0, 0, 0)).getTime();\n this.end = (new Date(endYear + interval, 1, 1, 0, 0, 0)).getTime();\n }\n else {\n this.start = new Date(startYear, 0, 0, 0, 0, 0).getTime();\n this.end = new Date(endYear, 11, 30, 23, 59, 59).getTime();\n }\n };\n DateTime.prototype.getMonth = function (minimum, maximum, rangePadding, interval) {\n var month = minimum.getMonth();\n var endMonth = maximum.getMonth();\n if (rangePadding === 'Round') {\n this.start = (new Date(minimum.getFullYear(), month, 0, 0, 0, 0)).getTime();\n this.end = (new Date(maximum.getFullYear(), endMonth, new Date(maximum.getFullYear(), maximum.getMonth(), 0).getDate(), 23, 59, 59)).getTime();\n }\n else {\n this.start = (new Date(minimum.getFullYear(), month + (-interval), 1, 0, 0, 0)).getTime();\n this.end = (new Date(maximum.getFullYear(), endMonth + (interval), endMonth === 2 ? 28 : 30, 0, 0, 0)).getTime();\n }\n };\n DateTime.prototype.getDay = function (minimum, maximum, rangePadding, interval) {\n var day = minimum.getDate();\n var endDay = maximum.getDate();\n if (rangePadding === 'Round') {\n this.start = (new Date(minimum.getFullYear(), minimum.getMonth(), day, 0, 0, 0)).getTime();\n this.end = (new Date(maximum.getFullYear(), maximum.getMonth(), endDay, 23, 59, 59)).getTime();\n }\n else {\n this.start = (new Date(minimum.getFullYear(), minimum.getMonth(), day + (-interval), 0, 0, 0)).getTime();\n this.end = (new Date(maximum.getFullYear(), maximum.getMonth(), endDay + (interval), 0, 0, 0)).getTime();\n }\n };\n DateTime.prototype.getHour = function (minimum, maximum, rangePadding, interval) {\n var hour = (minimum.getHours() / interval) * interval;\n var endHour = maximum.getHours() + (minimum.getHours() - hour);\n if (rangePadding === 'Round') {\n this.start = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), hour, 0, 0)).getTime();\n this.end = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), endHour, 59, 59)).getTime();\n }\n else {\n this.start = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), hour + (-interval), 0, 0)).getTime();\n this.end = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), endHour + (interval), 0, 0)).getTime();\n }\n };\n /**\n * Calculate visible range for axis.\n * @private\n */\n DateTime.prototype.calculateVisibleRange = function (size, axis) {\n axis.visibleRange = {\n min: axis.actualRange.min,\n max: axis.actualRange.max,\n interval: axis.actualRange.interval,\n delta: axis.actualRange.delta,\n };\n if (axis.zoomFactor < 1 || axis.zoomPosition > 0) {\n axis.calculateVisibleRange(size);\n axis.visibleRange.interval = (axis.enableAutoIntervalOnZooming) ?\n this.calculateDateTimeNiceInterval(axis, size, axis.visibleRange.min, axis.visibleRange.max)\n : axis.visibleRange.interval;\n }\n axis.dateTimeInterval = this.increaseDateTimeInterval(axis, axis.visibleRange.min, axis.visibleRange.interval).getTime()\n - axis.visibleRange.min;\n axis.triggerRangeRender(this.chart, axis.visibleRange.min, axis.visibleRange.max, axis.visibleRange.interval);\n };\n /**\n * Calculate visible labels for the axis.\n * @private\n */\n DateTime.prototype.calculateVisibleLabels = function (axis) {\n axis.visibleLabels = [];\n var tempInterval = axis.visibleRange.min;\n if (!axis.setRange()) {\n tempInterval = this.alignRangeStart(axis, tempInterval, axis.visibleRange.interval, axis.actualIntervalType).getTime();\n }\n axis.format = this.chart.intl.getDateFormat({\n format: axis.labelFormat, type: firstToLowerCase(axis.skeletonType), skeleton: this.getSkeleton(axis)\n });\n axis.startLabel = axis.format(new Date(axis.visibleRange.min));\n axis.endLabel = axis.format(new Date(axis.visibleRange.max));\n while (tempInterval <= axis.visibleRange.max) {\n if (withIn(tempInterval, axis.visibleRange)) {\n axis.triggerLabelRender(this.chart, tempInterval, axis.format(new Date(tempInterval)), axis.labelStyle);\n }\n tempInterval = this.increaseDateTimeInterval(axis, tempInterval, axis.visibleRange.interval).getTime();\n }\n axis.getMaxLabelWidth(this.chart);\n };\n /** @private */\n DateTime.prototype.increaseDateTimeInterval = function (axis, value, interval) {\n var result = new Date(value);\n interval = Math.ceil(interval);\n switch (axis.actualIntervalType) {\n case 'Years':\n result.setFullYear(result.getFullYear() + interval);\n return result;\n case 'Months':\n result.setMonth(result.getMonth() + interval);\n return result;\n case 'Days':\n result.setDate(result.getDate() + interval);\n return result;\n case 'Hours':\n result.setHours(result.getHours() + interval);\n return result;\n case 'Minutes':\n result.setMinutes(result.getMinutes() + interval);\n return result;\n case 'Seconds':\n result.setSeconds(result.getSeconds() + interval);\n return result;\n }\n return result;\n };\n DateTime.prototype.alignRangeStart = function (axis, sDate, intervalSize, intervalType) {\n var sResult = new Date(sDate);\n switch (axis.actualIntervalType) {\n case 'Years':\n var year = Math.floor(Math.floor(sResult.getFullYear() / intervalSize) * intervalSize);\n sResult = new Date(year, sResult.getMonth(), sResult.getDate(), 0, 0, 0);\n return sResult;\n case 'Months':\n var month = Math.floor(Math.floor((sResult.getMonth()) / intervalSize) * intervalSize);\n sResult = new Date(sResult.getFullYear(), month, sResult.getDate(), 0, 0, 0);\n return sResult;\n case 'Days':\n var day = Math.floor(Math.floor((sResult.getDate()) / intervalSize) * intervalSize);\n sResult = new Date(sResult.getFullYear(), sResult.getMonth(), day, 0, 0, 0);\n return sResult;\n case 'Hours':\n var hour = Math.floor(Math.floor((sResult.getHours()) / intervalSize) * intervalSize);\n sResult = new Date(sResult.getFullYear(), sResult.getMonth(), sResult.getDate(), hour, 0, 0);\n return sResult;\n case 'Minutes':\n var minutes = Math.floor(Math.floor((sResult.getMinutes()) / intervalSize) * intervalSize);\n sResult = new Date(sResult.getFullYear(), sResult.getMonth(), sResult.getDate(), sResult.getHours(), minutes, 0, 0);\n return sResult;\n case 'Seconds':\n var seconds = Math.floor(Math.floor((sResult.getSeconds()) / intervalSize) * intervalSize);\n sResult = new Date(sResult.getFullYear(), sResult.getMonth(), sResult.getDate(), sResult.getHours(), sResult.getMinutes(), seconds, 0);\n return sResult;\n }\n return sResult;\n };\n /**\n * Get module name\n */\n DateTime.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'DateTime';\n };\n /**\n * To destroy the category axis.\n * @return {void}\n * @private\n */\n DateTime.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return DateTime;\n}(NiceInterval));\nexport { DateTime };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { DoubleRange } from '../utils/double-range';\nimport { withIn } from '../../common/utils/helper';\nimport { NiceInterval } from '../axis/axis-helper';\n/**\n * `Category` module is used to render category axis.\n */\nvar Category = /** @class */ (function (_super) {\n __extends(Category, _super);\n /**\n * Constructor for the category module.\n * @private\n */\n function Category(chart) {\n return _super.call(this, chart) || this;\n }\n /**\n * The function to calculate the range and labels for the axis.\n * @return {void}\n */\n Category.prototype.calculateRangeAndInterval = function (size, axis) {\n this.calculateRange(axis, size);\n this.getActualRange(axis, size);\n this.applyRangePadding(axis, size);\n this.calculateVisibleLabels(axis);\n };\n /**\n * Actual Range for the axis.\n * @private\n */\n Category.prototype.getActualRange = function (axis, size) {\n this.initializeDoubleRange(axis);\n // axis.doubleRange = new DoubleRange(this.min, this.max);\n axis.actualRange = {};\n if (!axis.interval) {\n axis.actualRange.interval = Math.max(1, Math.floor(axis.doubleRange.delta / axis.getActualDesiredIntervalsCount(size)));\n }\n else {\n axis.actualRange.interval = Math.ceil(axis.interval);\n }\n axis.actualRange.min = axis.doubleRange.start;\n axis.actualRange.max = axis.doubleRange.end;\n axis.actualRange.delta = axis.doubleRange.delta;\n };\n /**\n * Padding for the axis.\n * @private\n */\n Category.prototype.applyRangePadding = function (axis, size) {\n var ticks = (axis.labelPlacement === 'BetweenTicks' && this.chart.chartAreaType !== 'PolarRadar') ? 0.5 : 0;\n if (ticks > 0) {\n axis.actualRange.min -= ticks;\n axis.actualRange.max += ticks;\n }\n else {\n axis.actualRange.max += axis.actualRange.max ? 0 : 0.5;\n }\n axis.doubleRange = new DoubleRange(axis.actualRange.min, axis.actualRange.max);\n axis.actualRange.delta = axis.doubleRange.delta;\n this.calculateVisibleRange(size, axis);\n };\n /**\n * Calculate label for the axis.\n * @private\n */\n Category.prototype.calculateVisibleLabels = function (axis) {\n /*! Generate axis labels */\n axis.visibleLabels = [];\n var tempInterval = Math.ceil(axis.visibleRange.min);\n if (axis.zoomFactor < 1 || axis.zoomPosition > 0) {\n tempInterval = axis.visibleRange.min - (axis.visibleRange.min % axis.visibleRange.interval);\n }\n var position;\n axis.startLabel = axis.labels[Math.round(axis.visibleRange.min)];\n axis.endLabel = axis.labels[Math.floor(axis.visibleRange.max)];\n for (; tempInterval <= axis.visibleRange.max; tempInterval += axis.visibleRange.interval) {\n if (withIn(tempInterval, axis.visibleRange) && axis.labels.length > 0) {\n position = Math.round(tempInterval);\n axis.triggerLabelRender(this.chart, position, axis.labels[position] ? axis.labels[position] : position.toString(), axis.labelStyle);\n }\n }\n axis.getMaxLabelWidth(this.chart);\n };\n /**\n * Get module name\n */\n Category.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Category';\n };\n /**\n * To destroy the category axis.\n * @return {void}\n * @private\n */\n Category.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return Category;\n}(NiceInterval));\nexport { Category };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Double } from '../axis/double-axis';\nimport { logBase, withIn } from '../../common/utils/helper';\n/**\n * `Logarithmic` module is used to render log axis.\n */\nvar Logarithmic = /** @class */ (function (_super) {\n __extends(Logarithmic, _super);\n /**\n * Constructor for the logerithmic module.\n * @private\n */\n function Logarithmic(chart) {\n return _super.call(this, chart) || this;\n }\n /**\n * The method to calculate the range and labels for the axis.\n * @return {void}\n */\n Logarithmic.prototype.calculateRangeAndInterval = function (size, axis) {\n this.calculateRange(axis, size);\n this.getActualRange(axis, size);\n this.calculateVisibleRange(size, axis);\n this.calculateVisibleLabels(axis, this.chart);\n };\n /**\n * Calculates actual range for the axis.\n * @private\n */\n Logarithmic.prototype.getActualRange = function (axis, size) {\n this.initializeDoubleRange(axis);\n this.min = this.min < 0 ? 0 : this.min;\n var logStart = logBase(this.min, axis.logBase);\n logStart = isFinite(logStart) ? logStart : this.min;\n var logEnd = logBase(this.max, axis.logBase);\n logEnd = isFinite(logStart) ? logEnd : this.max;\n this.min = Math.floor(logStart / 1);\n this.max = Math.ceil(logEnd / 1);\n axis.actualRange.interval = axis.interval || this.calculateLogNiceInterval(this.max - this.min, size, axis);\n axis.actualRange.min = this.min;\n axis.actualRange.max = this.max;\n axis.actualRange.delta = this.max - this.min;\n };\n /**\n * Calculates visible range for the axis.\n * @private\n */\n Logarithmic.prototype.calculateVisibleRange = function (size, axis) {\n axis.visibleRange = {\n interval: axis.actualRange.interval, max: axis.actualRange.max,\n min: axis.actualRange.min, delta: axis.actualRange.delta\n };\n if (axis.zoomFactor < 1 || axis.zoomPosition > 0) {\n axis.calculateVisibleRange(size);\n axis.visibleRange.interval = (axis.enableAutoIntervalOnZooming) ?\n this.calculateLogNiceInterval(axis.doubleRange.delta, size, axis)\n : axis.visibleRange.interval;\n axis.visibleRange.interval = Math.floor(axis.visibleRange.interval) === 0 ? 1 : Math.floor(axis.visibleRange.interval);\n axis.triggerRangeRender(this.chart, axis.visibleRange.min, axis.visibleRange.max, axis.visibleRange.interval);\n }\n };\n /**\n * Calculates log iInteval for the axis.\n * @private\n */\n Logarithmic.prototype.calculateLogNiceInterval = function (delta, size, axis) {\n var actualDesiredIntervalsCount = axis.getActualDesiredIntervalsCount(size);\n var niceInterval = delta;\n var minInterval = Math.pow(10, Math.floor(logBase(niceInterval, 10)));\n for (var j = 0, len = axis.intervalDivs.length; j < len; j++) {\n var currentInterval = minInterval * axis.intervalDivs[j];\n if (actualDesiredIntervalsCount < (delta / currentInterval)) {\n break;\n }\n niceInterval = currentInterval;\n }\n return niceInterval;\n };\n /**\n * Calculates labels for the axis.\n * @private\n */\n Logarithmic.prototype.calculateVisibleLabels = function (axis, chart) {\n /*! Generate axis labels */\n var tempInterval = axis.visibleRange.min;\n axis.visibleLabels = [];\n if (axis.zoomFactor < 1 || axis.zoomPosition > 0) {\n tempInterval = axis.visibleRange.min - (axis.visibleRange.min % axis.visibleRange.interval);\n }\n var axisFormat = this.getFormat(axis);\n var isCustomFormat = axisFormat.match('{value}') !== null;\n axis.format = chart.intl.getNumberFormat({\n format: isCustomFormat ? '' : axisFormat,\n useGrouping: chart.useGroupingSeparator\n });\n axis.startLabel = axis.format(Math.pow(axis.logBase, axis.visibleRange.min));\n axis.endLabel = axis.format(Math.pow(axis.logBase, axis.visibleRange.max));\n for (; tempInterval <= axis.visibleRange.max; tempInterval += axis.visibleRange.interval) {\n if (withIn(tempInterval, axis.visibleRange)) {\n axis.triggerLabelRender(this.chart, tempInterval, this.formatValue(axis, isCustomFormat, axisFormat, Math.pow(axis.logBase, tempInterval)), axis.labelStyle);\n }\n }\n axis.getMaxLabelWidth(this.chart);\n };\n /**\n * Get module name\n */\n Logarithmic.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Logarithmic';\n };\n /**\n * To destroy the category axis.\n * @return {void}\n * @private\n */\n Logarithmic.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return Logarithmic;\n}(Double));\nexport { Logarithmic };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Category } from '../axis/category-axis';\nimport { withIn, firstToLowerCase } from '../../common/utils/helper';\n/**\n * Category module is used to render category axis.\n */\nvar DateTimeCategory = /** @class */ (function (_super) {\n __extends(DateTimeCategory, _super);\n /**\n * Constructor for the category module.\n * @private\n */\n function DateTimeCategory(chart) {\n return _super.call(this, chart) || this;\n }\n /**\n * The function to calculate the range and labels for the axis.\n * @return {void}\n * @private\n */\n DateTimeCategory.prototype.calculateRangeAndInterval = function (size, axis) {\n this.axisSize = size;\n this.calculateRange(axis, size);\n this.getActualRange(axis, size);\n this.applyRangePadding(axis, size);\n this.calculateVisibleLabels(axis);\n };\n /**\n * Calculate label for the axis.\n * @private\n */\n DateTimeCategory.prototype.calculateVisibleLabels = function (axis) {\n /*! Generate axis labels */\n axis.visibleLabels = [];\n var padding = axis.labelPlacement === 'BetweenTicks' ? 0.5 : 0;\n if (axis.intervalType === 'Auto') {\n this.calculateDateTimeNiceInterval(axis, this.axisSize, parseInt(axis.labels[0], 10), parseInt(axis.labels[axis.labels.length - 1], 10));\n }\n else {\n axis.actualIntervalType = axis.intervalType;\n }\n axis.format = this.chart.intl.getDateFormat({\n format: axis.labelFormat, type: firstToLowerCase(axis.skeletonType), skeleton: this.getSkeleton(axis)\n });\n for (var i = 0; i < axis.labels.length; i++) {\n if (!this.sameInterval(axis.labels.map(Number)[i], axis.labels.map(Number)[i - 1], axis.actualIntervalType, i)) {\n if (withIn(i - padding, axis.visibleRange)) {\n axis.triggerLabelRender(this.chart, i, axis.format(new Date(axis.labels.map(Number)[i])), axis.labelStyle);\n }\n }\n }\n axis.getMaxLabelWidth(this.chart);\n };\n /**\n * get same interval\n */\n DateTimeCategory.prototype.sameInterval = function (currentDate, previousDate, type, index) {\n var sameValue;\n if (index === 0) {\n sameValue = false;\n }\n else {\n switch (type) {\n case 'Years':\n sameValue = new Date(currentDate).getFullYear() === new Date(previousDate).getFullYear();\n break;\n case 'Months':\n sameValue = new Date(currentDate).getFullYear() === new Date(previousDate).getFullYear() &&\n new Date(currentDate).getMonth() === new Date(previousDate).getMonth();\n break;\n case 'Days':\n sameValue = (Math.abs(currentDate - previousDate) < 24 * 60 * 60 * 1000 &&\n new Date(currentDate).getDay() === new Date(previousDate).getDay());\n break;\n case 'Hours':\n sameValue = (Math.abs(currentDate - previousDate) < 60 * 60 * 1000 &&\n new Date(currentDate).getDay() === new Date(previousDate).getDay());\n break;\n case 'Minutes':\n sameValue = (Math.abs(currentDate - previousDate) < 60 * 1000 &&\n new Date(currentDate).getMinutes() === new Date(previousDate).getMinutes());\n break;\n case 'Seconds':\n sameValue = (Math.abs(currentDate - previousDate) < 1000 &&\n new Date(currentDate).getDay() === new Date(previousDate).getDay());\n break;\n }\n }\n return sameValue;\n };\n /**\n * Get module name\n */\n DateTimeCategory.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'DateTimeCategory';\n };\n /**\n * To destroy the category axis.\n * @return {void}\n * @private\n */\n DateTimeCategory.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return DateTimeCategory;\n}(Category));\nexport { DateTimeCategory };\n","/**\n * StripLine src\n */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Rect, TextOption, measureText, valueToCoefficient, textElement, logBase, RectOption } from '../../common/utils/helper';\n/**\n * `StripLine` module is used to render the stripLine in chart.\n */\nvar StripLine = /** @class */ (function () {\n function StripLine() {\n }\n StripLine.prototype.measureStripLine = function (axis, stripline, seriesClipRect) {\n var actualStart;\n var actualEnd;\n if (axis.valueType === 'DateTimeCategory') {\n var start = stripline.start;\n var end = stripline.end;\n actualStart = start ? axis.labels.indexOf(start.getTime().toString()) : null;\n actualEnd = end ? axis.labels.indexOf(end.getTime().toString()) : null;\n }\n else {\n actualStart = stripline.start;\n actualEnd = stripline.end;\n }\n var rect = this.getFromTovalue(actualStart, actualEnd, stripline.size, stripline.startFromAxis, axis);\n var height = (axis.orientation === 'Vertical') ? (rect.to - rect.from) * axis.rect.height : seriesClipRect.height;\n var width = (axis.orientation === 'Horizontal') ? (rect.to - rect.from) * axis.rect.width : seriesClipRect.width;\n var x = (axis.orientation === 'Vertical') ? seriesClipRect.x : ((rect.from * axis.rect.width) + axis.rect.x);\n var y = (axis.orientation === 'Horizontal') ? seriesClipRect.y : (axis.rect.y + axis.rect.height -\n (rect.to * axis.rect.height));\n if (height !== 0 && width !== 0) {\n return new Rect(x, y, width, height);\n }\n return new Rect(0, 0, 0, 0);\n };\n /**\n * To get from to value from start, end, size, start from axis\n */\n StripLine.prototype.getFromTovalue = function (start, end, size, startFromAxis, axis) {\n var from = startFromAxis ? axis.visibleRange.min : this.findValue(Math.min(start, isNullOrUndefined(end) ? start : end), axis);\n var to = this.findValue(this.getToValue(Math.max(start, isNullOrUndefined(end) ? start : end), from, size, axis, end), axis);\n return { from: valueToCoefficient(axis.isInversed ? to : from, axis), to: valueToCoefficient(axis.isInversed ? from : to, axis) };\n };\n StripLine.prototype.getToValue = function (to, from, size, axis, end) {\n if (axis.valueType === 'DateTime') {\n return (isNullOrUndefined(end) ? new Date(new Date(from).getTime() + size) : to);\n }\n else {\n return isNullOrUndefined(end) ? (axis.valueType === 'Logarithmic' ? Math.pow(axis.logBase, from) : from) + size : to;\n }\n };\n StripLine.prototype.findValue = function (value, axis) {\n if (axis.valueType === 'Logarithmic') {\n value = logBase(value, axis.logBase);\n }\n if (value < axis.visibleRange.min) {\n value = axis.visibleRange.min;\n }\n else if (value > axis.visibleRange.max) {\n value = axis.visibleRange.max;\n }\n return value;\n };\n /**\n * To render striplines based start and end.\n * @private\n * @param chart\n * @param position\n * @param axes\n */\n StripLine.prototype.renderStripLine = function (chart, position, axes) {\n var id = chart.element.id + '_stripline_' + position + '_';\n var striplineGroup = chart.renderer.createGroup({ id: id + 'collections' });\n var seriesClipRect = chart.chartAxisLayoutPanel.seriesClipRect;\n var rect;\n var count = 0;\n for (var _i = 0, axes_1 = axes; _i < axes_1.length; _i++) {\n var axis = axes_1[_i];\n for (var _a = 0, _b = axis.stripLines; _a < _b.length; _a++) {\n var stripline = _b[_a];\n if (stripline.visible && stripline.zIndex === position) {\n rect = this.measureStripLine(axis, stripline, seriesClipRect);\n this.renderRectangle(stripline, rect, id + 'rect_' + count, striplineGroup, chart);\n this.renderText(stripline, rect, id + 'text_' + count, striplineGroup, chart, axis);\n count++;\n }\n }\n }\n chart.svgObject.appendChild(striplineGroup);\n };\n StripLine.prototype.renderRectangle = function (stripline, rect, id, parent, chart) {\n parent.appendChild(chart.renderer.drawRectangle(new RectOption(id, stripline.color, stripline.border, stripline.opacity, rect, 0, 0, '', '')));\n };\n StripLine.prototype.renderText = function (stripline, rect, id, parent, chart, axis) {\n var textSize = measureText(stripline.text, stripline.textStyle);\n var textMid = 3 * (textSize.height / 8);\n var ty = rect.y + (rect.height / 2) + textMid;\n var rotation = (stripline.rotation === null) ? ((axis.orientation === 'Vertical') ? 0 : -90) : stripline.rotation;\n var tx = rect.x + (rect.width / 2);\n var alignment;\n var anchor;\n var padding = 5;\n if (axis.orientation === 'Horizontal') {\n tx = this.getTextStart(tx + (textMid * this.factor(stripline.horizontalAlignment)), rect.width, stripline.horizontalAlignment);\n ty = this.getTextStart(ty - textMid, rect.height, stripline.verticalAlignment);\n alignment = this.invertAlignment(stripline.horizontalAlignment);\n }\n else {\n tx = this.getTextStart(tx, rect.width, stripline.horizontalAlignment);\n ty = this.getTextStart(ty + (textMid * this.factor(stripline.verticalAlignment)) - padding, rect.height, stripline.verticalAlignment);\n alignment = stripline.verticalAlignment;\n }\n anchor = alignment;\n textElement(new TextOption(id, tx, ty, anchor, stripline.text, 'rotate(' + rotation + ' ' + tx + ',' + ty + ')', 'middle'), stripline.textStyle, stripline.textStyle.color, parent);\n };\n StripLine.prototype.invertAlignment = function (anchor) {\n switch (anchor) {\n case 'Start':\n anchor = 'Start';\n break;\n case 'End':\n anchor = 'End';\n break;\n }\n return anchor;\n };\n StripLine.prototype.factor = function (anchor) {\n var factor = 0;\n switch (anchor) {\n case 'Start':\n factor = 1;\n break;\n case 'End':\n factor = -1;\n break;\n }\n return factor;\n };\n StripLine.prototype.getTextStart = function (xy, size, textAlignment) {\n var padding = 5;\n switch (textAlignment) {\n case 'Start':\n xy = xy - (size / 2) + padding;\n break;\n case 'End':\n xy = xy + (size / 2) - padding;\n break;\n }\n return xy;\n };\n /**\n * To get the module name for `StripLine`.\n * @private\n */\n StripLine.prototype.getModuleName = function () {\n return 'StripLine';\n };\n /**\n * To destroy the `StripLine` module.\n * @private\n */\n StripLine.prototype.destroy = function () {\n // destroy peform here\n };\n return StripLine;\n}());\nexport { StripLine };\n","import { Rect, getAnimationFunction } from '../../common/utils/helper';\nimport { Animation } from '@syncfusion/ej2-base';\n/**\n * Base for line type series.\n */\nvar LineBase = /** @class */ (function () {\n /** @private */\n function LineBase(chartModule) {\n this.chart = chartModule;\n this.padding = 5;\n }\n /**\n * To improve the chart performance.\n * @return {void}\n * @private\n */\n LineBase.prototype.improveChartPerformance = function (series) {\n var tempPoints = [];\n var xVisibleRange = series.xAxis.visibleRange;\n var yVisibleRange = series.yAxis.visibleRange;\n var seriesPoints = series.points;\n var areaBounds = series.clipRect;\n var xTolerance = Math.abs(xVisibleRange.delta / areaBounds.width);\n var yTolerance = Math.abs(yVisibleRange.delta / areaBounds.height);\n var prevXValue = (seriesPoints[0] && seriesPoints[0].x > xTolerance) ? 0 : xTolerance;\n var prevYValue = (seriesPoints[0] && seriesPoints[0].y > yTolerance) ? 0 : yTolerance;\n var xVal = 0;\n var yVal = 0;\n var currentPoint;\n for (var _i = 0, seriesPoints_1 = seriesPoints; _i < seriesPoints_1.length; _i++) {\n var currentPoint_1 = seriesPoints_1[_i];\n currentPoint_1.symbolLocations = [];\n xVal = currentPoint_1.xValue ? currentPoint_1.xValue : xVisibleRange.min;\n yVal = currentPoint_1.yValue ? currentPoint_1.yValue : yVisibleRange.min;\n if (Math.abs(prevXValue - xVal) >= xTolerance || Math.abs(prevYValue - yVal) >= yTolerance) {\n tempPoints.push(currentPoint_1);\n prevXValue = xVal;\n prevYValue = yVal;\n }\n }\n return tempPoints;\n };\n /**\n * To generate the line path direction\n * @param firstPoint\n * @param secondPoint\n * @param series\n * @param isInverted\n * @param getPointLocation\n * @param startPoint\n */\n LineBase.prototype.getLineDirection = function (firstPoint, secondPoint, series, isInverted, getPointLocation, startPoint) {\n var direction = '';\n if (firstPoint != null) {\n var point1 = getPointLocation(firstPoint.xValue, firstPoint.yValue, series.xAxis, series.yAxis, isInverted, series);\n var point2 = getPointLocation(secondPoint.xValue, secondPoint.yValue, series.xAxis, series.yAxis, isInverted, series);\n direction = startPoint + ' ' + (point1.x) + ' ' + (point1.y) + ' ' +\n 'L' + ' ' + (point2.x) + ' ' + (point2.y) + ' ';\n }\n return direction;\n };\n /**\n * To append the line path.\n * @return {void}\n * @private\n */\n LineBase.prototype.appendLinePath = function (options, series, clipRect) {\n var htmlObject = series.chart.renderer.drawPath(options);\n htmlObject.setAttribute('clip-path', clipRect);\n series.pathElement = htmlObject;\n series.seriesElement.appendChild(htmlObject);\n series.isRectSeries = false;\n };\n /**\n * To render the marker for the series.\n * @return {void}\n * @private\n */\n LineBase.prototype.renderMarker = function (series) {\n if (series.marker.visible) {\n series.chart.markerRender.render(series);\n }\n };\n /**\n * To do the progressive animation.\n * @return {void}\n * @private\n */\n LineBase.prototype.doProgressiveAnimation = function (series, option) {\n var animation = new Animation({});\n var path = series.pathElement;\n var strokeDashArray = path.getAttribute('stroke-dasharray');\n var pathLength = series.pathElement.getTotalLength();\n var currentTime;\n path.style.visibility = 'hidden';\n animation.animate(path, {\n duration: option.duration,\n delay: option.delay,\n progress: function (args) {\n if (args.timeStamp >= args.delay) {\n path.style.visibility = 'visible';\n currentTime = Math.abs(Math.round(((args.timeStamp - args.delay) * pathLength) / args.duration));\n path.setAttribute('stroke-dasharray', currentTime + ',' + pathLength);\n }\n },\n end: function (model) {\n path.setAttribute('stroke-dasharray', strokeDashArray);\n series.chart.trigger('animationComplete', { series: series });\n }\n });\n };\n /**\n * To store the symbol location and region\n * @param point\n * @param series\n * @param isInverted\n * @param getLocation\n */\n LineBase.prototype.storePointLocation = function (point, series, isInverted, getLocation) {\n point.symbolLocations.push(getLocation(point.xValue, point.yValue, series.xAxis, series.yAxis, isInverted, series));\n point.regions.push(new Rect(point.symbolLocations[0].x - series.marker.width, point.symbolLocations[0].y - series.marker.height, 2 * series.marker.width, 2 * series.marker.height));\n };\n /**\n * To do the linear animation.\n * @return {void}\n * @private\n */\n LineBase.prototype.doLinearAnimation = function (series, animation) {\n var clipRect = series.clipRectElement.childNodes[0].childNodes[0];\n var effect = getAnimationFunction('Linear');\n var elementHeight = +clipRect.getAttribute('height');\n var elementWidth = +clipRect.getAttribute('width');\n var xCenter = +clipRect.getAttribute('x');\n var yCenter = series.chart.requireInvertedAxis ? +clipRect.getAttribute('height') + +clipRect.getAttribute('y') :\n +clipRect.getAttribute('y');\n var value;\n clipRect.style.visibility = 'hidden';\n new Animation({}).animate(clipRect, {\n duration: animation.duration,\n delay: animation.delay,\n progress: function (args) {\n if (args.timeStamp >= args.delay) {\n clipRect.style.visibility = 'visible';\n if (series.chart.requireInvertedAxis) {\n value = effect(args.timeStamp - args.delay, 0, elementHeight, args.duration);\n clipRect.setAttribute('transform', 'translate(' + xCenter + ' ' + yCenter +\n ') scale(1,' + (value / elementHeight) + ') translate(' + (-xCenter) + ' ' + (-yCenter) + ')');\n }\n else {\n value = effect(args.timeStamp - args.delay, 0, elementWidth, args.duration);\n clipRect.setAttribute('transform', 'translate(' + xCenter + ' ' + yCenter +\n ') scale(' + (value / elementWidth) + ', 1) translate(' + (-xCenter) + ' ' + (-yCenter) + ')');\n }\n }\n },\n end: function (model) {\n clipRect.setAttribute('transform', 'translate(0,0)');\n series.chart.trigger('animationComplete', { series: series });\n }\n });\n };\n return LineBase;\n}());\nexport { LineBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange, getPoint, PathOption, TransformToVisible } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\n/**\n * `LineSeries` module used to render the line series.\n */\nvar LineSeries = /** @class */ (function (_super) {\n __extends(LineSeries, _super);\n function LineSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Line Series.\n * @return {void}.\n * @private\n */\n LineSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var point1;\n var point2;\n var direction = '';\n var prevPoint = null;\n var startPoint = 'M';\n var options;\n var getCoordinate = series.chart.chartAreaType === 'PolarRadar' ? TransformToVisible : getPoint;\n var visiblePoints = this.improveChartPerformance(series);\n for (var _i = 0, visiblePoints_1 = visiblePoints; _i < visiblePoints_1.length; _i++) {\n var point = visiblePoints_1[_i];\n point.regions = [];\n if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n direction += this.getLineDirection(prevPoint, point, series, isInverted, getCoordinate, startPoint);\n startPoint = prevPoint ? 'L' : startPoint;\n prevPoint = point;\n this.storePointLocation(point, series, isInverted, getCoordinate);\n }\n else {\n prevPoint = (series.emptyPointSettings.mode === 'Drop') ? prevPoint : null;\n startPoint = (series.emptyPointSettings.mode === 'Drop') ? startPoint : 'M';\n point.symbolLocations = [];\n }\n }\n if (series.chart.chartAreaType === 'PolarRadar') {\n if (series.isClosed) {\n point2 = getCoordinate(visiblePoints[visiblePoints.length - 1].xValue, visiblePoints[visiblePoints.length - 1].yValue, xAxis, yAxis, isInverted, series);\n point1 = getCoordinate(visiblePoints[0].xValue, visiblePoints[0].yValue, xAxis, yAxis, isInverted, series);\n direction = direction.concat(startPoint + ' ' + point2.x + ' ' + point2.y + ' ' + 'L' + ' ' + point1.x + ' ' + point1.y);\n }\n }\n var name = series.category === 'Indicator' ? series.chart.element.id + '_Indicator_' + series.index + '_' + series.name :\n series.category === 'TrendLine' ? series.chart.element.id + '_Series_' + series.sourceIndex + '_TrendLine_' + series.index :\n series.chart.element.id + '_Series_' + series.index;\n options = new PathOption(name, 'none', series.width, series.interior, series.opacity, series.dashArray, direction);\n this.appendLinePath(options, series, '');\n this.renderMarker(series);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n LineSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doProgressiveAnimation(series, option);\n };\n /**\n * Get module name.\n */\n LineSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'LineSeries';\n };\n /**\n * To destroy the line series.\n * @return {void}\n * @private\n */\n LineSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return LineSeries;\n}(LineBase));\nexport { LineSeries };\n","import { Animation } from '@syncfusion/ej2-base';\nimport { DoubleRange } from '../utils/double-range';\nimport { Rect, valueToCoefficient, getMinPointsDelta, PathOption } from '../../common/utils/helper';\nimport { getAnimationFunction, getPoint } from '../../common/utils/helper';\nimport { pointRender } from '../../common/model/constants';\n/**\n * Column Series Base\n */\nvar ColumnBase = /** @class */ (function () {\n function ColumnBase() {\n }\n /**\n * To get the position of the column series.\n * @return {DoubleRange}\n * @private\n */\n ColumnBase.prototype.getSideBySideInfo = function (series) {\n if (series.chart.enableSideBySidePlacement && !series.position) {\n this.getSideBySidePositions(series);\n }\n var position = !series.chart.enableSideBySidePlacement ? 0 : series.position;\n var rectCount = !series.chart.enableSideBySidePlacement ? 1 : series.rectCount;\n series.isRectSeries = true;\n var visibleSeries = series.chart.visibleSeries;\n var seriesSpacing = series.chart.enableSideBySidePlacement ? series.columnSpacing : 0; // Column Spacing\n var pointSpacing = series.columnWidth; // Column width\n var minimumPointDelta = getMinPointsDelta(series.xAxis, visibleSeries);\n var width = minimumPointDelta * pointSpacing;\n var radius;\n var location = (position) / rectCount - 0.5;\n var doubleRange = new DoubleRange(location, location + (1 / rectCount));\n if (!(isNaN(doubleRange.start) || isNaN(doubleRange.end))) {\n doubleRange = new DoubleRange(doubleRange.start * width, doubleRange.end * width);\n radius = seriesSpacing * doubleRange.delta;\n doubleRange = new DoubleRange(doubleRange.start + radius / 2, doubleRange.end - radius / 2);\n }\n return doubleRange;\n };\n /**\n * To get the rect values.\n * @return {Rect}\n * @private\n */\n ColumnBase.prototype.getRectangle = function (x1, y1, x2, y2, series) {\n var point1 = getPoint(x1, y1, series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n var point2 = getPoint(x2, y2, series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n return new Rect(Math.min(point1.x, point2.x), Math.min(point1.y, point2.y), Math.abs(point2.x - point1.x), Math.abs(point2.y - point1.y));\n };\n /**\n * To get the position of each series.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.getSideBySidePositions = function (series) {\n var chart = series.chart;\n var seriesCollection = [];\n for (var _i = 0, _a = chart.columns; _i < _a.length; _i++) {\n var columnItem = _a[_i];\n for (var _b = 0, _c = chart.rows; _b < _c.length; _b++) {\n var item = _c[_b];\n this.findRectPosition(series.findSeriesCollection(columnItem, item, false));\n }\n }\n };\n ColumnBase.prototype.findRectPosition = function (seriesCollection) {\n var stackingGroup = [];\n var vSeries = { rectCount: 0, position: null };\n seriesCollection.forEach(function (value) {\n if (value.type.indexOf('Stacking') !== -1) {\n if (value.stackingGroup) {\n if (stackingGroup[value.stackingGroup] === undefined) {\n value.position = vSeries.rectCount;\n stackingGroup[value.stackingGroup] = vSeries.rectCount++;\n }\n else {\n value.position = stackingGroup[value.stackingGroup];\n }\n }\n else {\n if (vSeries.position === null) {\n value.position = vSeries.rectCount;\n vSeries.position = vSeries.rectCount++;\n }\n else {\n value.position = vSeries.position;\n }\n }\n }\n else {\n value.position = vSeries.rectCount++;\n }\n });\n seriesCollection.forEach(function (value) {\n value.rectCount = vSeries.rectCount;\n });\n };\n /**\n * Updates the symbollocation for points\n * @return void\n * @private\n */\n ColumnBase.prototype.updateSymbolLocation = function (point, rect, series) {\n if (!series.chart.requireInvertedAxis) {\n this.updateXRegion(point, rect, series);\n }\n else {\n this.updateYRegion(point, rect, series);\n }\n };\n /**\n * Update the region for the point.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.updateXRegion = function (point, rect, series) {\n point.regions.push(rect);\n point.symbolLocations.push({\n x: rect.x + (rect.width) / 2,\n y: (series.seriesType === 'BoxPlot' || series.seriesType.indexOf('HighLow') !== -1 ||\n (point.yValue >= 0 === !series.yAxis.isInversed)) ? rect.y : (rect.y + rect.height)\n });\n };\n /**\n * Update the region for the point in bar series.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.updateYRegion = function (point, rect, series) {\n point.regions.push(rect);\n point.symbolLocations.push({\n x: (series.seriesType === 'BoxPlot' || series.seriesType.indexOf('HighLow') !== -1 ||\n (point.yValue >= 0 === !series.yAxis.isInversed)) ? rect.x + rect.width : rect.x,\n y: rect.y + rect.height / 2\n });\n };\n /**\n * To trigger the point rendering event.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.triggerEvent = function (series, point, fill, border) {\n var argsData = {\n cancel: false, name: pointRender, series: series, point: point,\n fill: series.setPointColor(point, fill),\n border: series.setBorderColor(point, border)\n };\n series.chart.trigger(pointRender, argsData);\n point.color = argsData.fill;\n return argsData;\n };\n /**\n * To draw the rectangle for points.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.drawRectangle = function (series, point, rect, argsData) {\n var check = series.chart.requireInvertedAxis ? rect.height : rect.width;\n if (check <= 0) {\n return null;\n }\n var direction = this.calculateRoundedRectPath(rect, series.cornerRadius.topLeft, series.cornerRadius.topRight, series.cornerRadius.bottomLeft, series.cornerRadius.bottomRight);\n var name = series.category === 'Indicator' ? series.chart.element.id + '_Indicator_' + series.index + '_' + series.name +\n '_Point_' + point.index : series.chart.element.id + '_Series_' + series.index + '_Point_' + point.index;\n var options = new PathOption(name, argsData.fill, argsData.border.width, argsData.border.color, series.opacity, series.dashArray, direction);\n var element = series.chart.renderer.drawPath(options);\n switch (series.seriesType) {\n case 'XY':\n element.setAttribute('aria-label', point.x.toString() + ':' + point.yValue.toString());\n break;\n case 'HighLow':\n element.setAttribute('aria-label', point.x.toString() + ':' + point.high.toString() + ':' + point.low.toString());\n break;\n }\n series.seriesElement.appendChild(element);\n };\n /**\n * To animate the series.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.animate = function (series) {\n var rectElements = series.seriesElement.childNodes;\n var count = series.category === 'Indicator' ? 0 : 1;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (!point.symbolLocations.length && !(series.type === 'BoxAndWhisker' && point.regions.length)) {\n continue;\n }\n this.animateRect(rectElements[count], series, point);\n count++;\n }\n };\n /**\n * To animate the series.\n * @return {void}\n * @private\n */\n ColumnBase.prototype.animateRect = function (element, series, point) {\n var option = series.animation;\n var effect = getAnimationFunction('Linear');\n var isPlot = point.yValue < 0;\n var x;\n var y;\n var elementHeight = +point.regions[0].height;\n var elementWidth = +point.regions[0].width;\n var centerX;\n var centerY;\n if (!series.chart.requireInvertedAxis) {\n x = +point.regions[0].x;\n if (series.type.indexOf('Stacking') > -1) {\n y = (1 - valueToCoefficient(0, series.yAxis)) * (series.yAxis.rect.height);\n centerX = x;\n centerY = y;\n }\n else {\n y = +point.regions[0].y;\n centerY = (series.seriesType.indexOf('HighLow') !== -1 || series.type.indexOf('Waterfall') !== -1) ? y + elementHeight / 2 :\n (isPlot !== series.yAxis.isInversed) ? y : y + elementHeight;\n centerX = isPlot ? x : x + elementWidth;\n }\n }\n else {\n y = +point.regions[0].y;\n if (series.type.indexOf('Stacking') > -1) {\n x = (valueToCoefficient(0, series.yAxis)) * series.yAxis.rect.width;\n centerX = x;\n centerY = y;\n }\n else {\n x = +point.regions[0].x;\n centerY = isPlot ? y : y + elementHeight;\n centerX = (series.seriesType.indexOf('HighLow') !== -1 || series.type.indexOf('Waterfall') !== -1) ? x + elementWidth / 2 :\n (isPlot !== series.yAxis.isInversed) ? x + elementWidth : x;\n }\n }\n var value;\n element.style.visibility = 'hidden';\n new Animation({}).animate(element, {\n duration: option.duration,\n delay: option.delay,\n progress: function (args) {\n if (args.timeStamp >= args.delay) {\n element.style.visibility = 'visible';\n if (!series.chart.requireInvertedAxis) {\n elementHeight = elementHeight ? elementHeight : 1;\n value = effect(args.timeStamp - args.delay, 0, elementHeight, args.duration);\n element.setAttribute('transform', 'translate(' + centerX + ' ' + centerY +\n ') scale(1,' + (value / elementHeight) + ') translate(' + (-centerX) + ' ' + (-centerY) + ')');\n }\n else {\n elementWidth = elementWidth ? elementWidth : 1;\n value = effect(args.timeStamp - args.delay, 0, elementWidth, args.duration);\n element.setAttribute('transform', 'translate(' + centerX + ' ' + centerY +\n ') scale(' + (value / elementWidth) + ', 1) translate(' + (-centerX) + ' ' + (-centerY) + ')');\n }\n }\n },\n end: function (model) {\n element.setAttribute('transform', 'translate(0,0)');\n var seriesElement = series.seriesElement;\n if (element === seriesElement.lastElementChild || point.index === series.points.length - 1 ||\n (series.type === 'Waterfall' && element === seriesElement.children[seriesElement.childElementCount - 2])) {\n series.chart.trigger('animationComplete', { series: series });\n if (series.type === 'Waterfall') {\n var rectElements = seriesElement.childNodes;\n for (var i = 0; i < rectElements.length; i++) {\n if (rectElements[i].id.indexOf('Connector') !== -1) {\n rectElements[i].style.visibility = 'visible';\n rectElements[i].setAttribute('transform', 'translate(0,0)');\n }\n }\n }\n }\n }\n });\n };\n /**\n * To get rounded rect path direction\n */\n ColumnBase.prototype.calculateRoundedRectPath = function (rect, topLeft, topRight, bottomLeft, bottomRight) {\n return 'M' + ' ' + rect.x + ' ' + (topLeft + rect.y) +\n ' Q ' + rect.x + ' ' + rect.y + ' ' + (rect.x + topLeft) + ' ' +\n rect.y + ' ' + 'L' + ' ' + (rect.x + rect.width - topRight) + ' ' + rect.y +\n ' Q ' + (rect.x + rect.width) + ' ' + rect.y + ' ' +\n (rect.x + rect.width) + ' ' + (rect.y + topRight) + ' ' + 'L ' +\n (rect.x + rect.width) + ' ' + (rect.y + rect.height - bottomRight)\n + ' Q ' + (rect.x + rect.width) + ' ' + (rect.y + rect.height) + ' ' + (rect.x + rect.width - bottomRight) + ' ' +\n (rect.y + rect.height) + ' ' + 'L ' + (rect.x + bottomLeft) + ' ' + (rect.y + rect.height) + ' Q ' + rect.x + ' ' +\n (rect.y + rect.height) + ' ' + rect.x + ' ' + (rect.y + rect.height - bottomLeft) + ' ' + 'L' + ' ' + rect.x + ' ' +\n (topLeft + rect.y) + ' ' + 'Z';\n };\n return ColumnBase;\n}());\nexport { ColumnBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `ColumnSeries` Module used to render the column series.\n */\nvar ColumnSeries = /** @class */ (function (_super) {\n __extends(ColumnSeries, _super);\n function ColumnSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Column series.\n * @return {void}\n * @private\n */\n ColumnSeries.prototype.render = function (series) {\n var rect;\n var sideBySideInfo = this.getSideBySideInfo(series);\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var argsData;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var pointColumn = _a[_i];\n pointColumn.symbolLocations = [];\n pointColumn.regions = [];\n if (pointColumn.visible && withInRange(series.points[pointColumn.index - 1], pointColumn, series.points[pointColumn.index + 1], series)) {\n rect = this.getRectangle(pointColumn.xValue + sideBySideInfo.start, pointColumn.yValue, pointColumn.xValue + sideBySideInfo.end, origin, series);\n var color = series.category === 'Indicator' ? pointColumn.color : series.interior;\n argsData = this.triggerEvent(series, pointColumn, color, { width: series.border.width, color: series.border.color });\n if (!argsData.cancel) {\n this.updateSymbolLocation(pointColumn, rect, series);\n this.drawRectangle(series, pointColumn, rect, argsData);\n }\n }\n }\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n ColumnSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * Get module name.\n */\n ColumnSeries.prototype.getModuleName = function () {\n return 'ColumnSeries';\n /**\n * return the module name\n */\n };\n /**\n * To destroy the column series.\n * @return {void}\n * @private\n */\n ColumnSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return ColumnSeries;\n}(ColumnBase));\nexport { ColumnSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { getPoint } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\nimport { RectOption } from '../../common/utils/helper';\nimport { DataUtil } from '@syncfusion/ej2-data';\n/**\n * Base class for multi colored series\n */\nvar MultiColoredSeries = /** @class */ (function (_super) {\n __extends(MultiColoredSeries, _super);\n function MultiColoredSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * To Generate the area path direction\n * @param xValue\n * @param yValue\n * @param series\n * @param isInverted\n * @param getPointLocation\n * @param startPoint\n * @param startPath\n */\n MultiColoredSeries.prototype.getAreaPathDirection = function (xValue, yValue, series, isInverted, getPointLocation, startPoint, startPath) {\n var direction = '';\n var firstPoint;\n if (startPoint === null) {\n firstPoint = getPointLocation(xValue, yValue, series.xAxis, series.yAxis, isInverted, series);\n direction += (startPath + ' ' + (firstPoint.x) + ' ' + (firstPoint.y) + ' ');\n }\n return direction;\n };\n /**\n * To Generate the empty point direction\n * @param firstPoint\n * @param secondPoint\n * @param series\n * @param isInverted\n * @param getPointLocation\n */\n MultiColoredSeries.prototype.getAreaEmptyDirection = function (firstPoint, secondPoint, series, isInverted, getPointLocation) {\n var direction = '';\n direction += this.getAreaPathDirection(firstPoint.x, firstPoint.y, series, isInverted, getPointLocation, null, 'L');\n direction += this.getAreaPathDirection(secondPoint.x, secondPoint.y, series, isInverted, getPointLocation, null, 'L');\n return direction;\n };\n /**\n * To set point color\n * @param points\n */\n MultiColoredSeries.prototype.setPointColor = function (currentPoint, previous, series, isXSegment, segments) {\n if (series.pointColorMapping === '') {\n var segment = void 0;\n var value = void 0;\n for (var i = 0; i < segments.length; i++) {\n segment = segments[i];\n value = isXSegment ? currentPoint.xValue : currentPoint.yValue;\n if (value <= this.getAxisValue(segment.value, isXSegment ? series.xAxis : series.yAxis, series.chart) || !segment.value) {\n currentPoint.interior = segment.color;\n break;\n }\n }\n if (currentPoint.interior == null) {\n currentPoint.interior = series.interior;\n }\n return false;\n }\n else {\n if (previous) {\n return series.setPointColor(currentPoint, series.interior) !== series.setPointColor(previous, series.interior);\n }\n else {\n return false;\n }\n }\n };\n MultiColoredSeries.prototype.sortSegments = function (series, chartSegments) {\n var axis = series.segmentAxis === 'X' ? series.xAxis : series.yAxis;\n var segments = [].concat(chartSegments);\n var access = this;\n return segments.sort(function (a, b) {\n return access.getAxisValue(a.value, axis, series.chart) - access.getAxisValue(b.value, axis, series.chart);\n });\n };\n /**\n * Segment calculation performed here\n * @param series\n * @param options\n * @param chartSegments\n */\n MultiColoredSeries.prototype.applySegmentAxis = function (series, options, segments) {\n var _this = this;\n if (series.pointColorMapping !== '') {\n options.map(function (option) {\n _this.appendLinePath(option, series, '');\n });\n return null;\n }\n var isXSegment = series.segmentAxis === 'X';\n var axis = isXSegment ? series.xAxis : series.yAxis;\n var chart = series.chart;\n var segment;\n this.includeSegment(segments, axis, series, segments.length);\n var length = segments.length;\n var value;\n var clipPath;\n var _loop_1 = function (index) {\n segment = segments[index];\n value = this_1.getAxisValue(segment.value, axis, series.chart);\n clipPath = this_1.createClipRect(index ? this_1.getAxisValue(segments[index - 1].value, axis, series.chart)\n : axis.visibleRange.min, value, series, index, isXSegment);\n if (clipPath) {\n options.map(function (option) {\n series.seriesElement.appendChild(chart.renderer.drawPath({\n 'clip-path': clipPath,\n 'stroke-dasharray': segment.dashArray,\n 'opacity': option.opacity,\n 'stroke': series.type.indexOf('Line') > -1 ? segment.color || series.interior : series.border.color,\n 'stroke-width': option['stroke-width'],\n 'fill': series.type.indexOf('Line') > -1 ? 'none' : segment.color || series.interior,\n 'id': option.id + '_Segment_' + index,\n 'd': option.d\n }));\n });\n }\n };\n var this_1 = this;\n for (var index = 0; index < length; index++) {\n _loop_1(index);\n }\n };\n MultiColoredSeries.prototype.includeSegment = function (segments, axis, series, length) {\n if (length <= 0) {\n segments.push({ value: axis.visibleRange.max, color: series.interior });\n return null;\n }\n if (this.getAxisValue(segments[length - 1].value, axis, series.chart) < axis.visibleRange.max) {\n segments.push({ value: axis.visibleRange.max, color: series.interior });\n }\n };\n /**\n * To create clip rect for segment axis\n * @param startValue\n * @param endValue\n * @param series\n * @param index\n * @param isX\n * @param chart\n */\n MultiColoredSeries.prototype.createClipRect = function (startValue, endValue, series, index, isX) {\n var isRequired = series.chart.requireInvertedAxis;\n var startPointLocation = getPoint(isX ? startValue : series.xAxis.visibleRange.min, isX ? series.yAxis.visibleRange.max : endValue, series.xAxis, series.yAxis, isRequired);\n var endPointLocation = getPoint(isX ? endValue : series.xAxis.visibleRange.max, isX ? series.yAxis.visibleRange.min : startValue, series.xAxis, series.yAxis, isRequired);\n endPointLocation = isRequired ?\n [startPointLocation, startPointLocation = endPointLocation][0] : endPointLocation;\n if ((endPointLocation.x - startPointLocation.x > 0) && (endPointLocation.y - startPointLocation.y > 0)) {\n series.seriesElement.appendChild(series.chart.renderer.drawClipPath(new RectOption(series.chart.element.id + '_ChartSegmentClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: startPointLocation.x,\n y: startPointLocation.y,\n width: endPointLocation.x - startPointLocation.x,\n height: endPointLocation.y - startPointLocation.y\n })));\n return 'url(#' + series.chart.element.id + '_ChartSegmentClipRect_' + index + ')';\n }\n return null;\n };\n /**\n * To get exact value from segment value\n * @param segmentValue\n * @param axis\n * @param chart\n */\n MultiColoredSeries.prototype.getAxisValue = function (segmentValue, axis, chart) {\n if (segmentValue === null) {\n segmentValue = axis.visibleRange.max;\n }\n if (axis.valueType === 'DateTime') {\n var option = { skeleton: 'full', type: 'dateTime' };\n return Date.parse(chart.intl.getDateParser(option)(chart.intl.getDateFormat(option)(new Date(DataUtil.parse.parseJson({ val: segmentValue }).val))));\n }\n else if (axis.valueType.indexOf('Category') > -1) {\n var xValue = axis.valueType === 'DateTimeCategory' ?\n (segmentValue.getTime()).toString() :\n segmentValue;\n return (axis.labels.indexOf(xValue) < 0) ? +segmentValue : axis.labels.indexOf(xValue);\n }\n else {\n return +segmentValue;\n }\n };\n return MultiColoredSeries;\n}(LineBase));\nexport { MultiColoredSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { getPoint, withInRange, ChartLocation, PathOption, TransformToVisible } from '../../common/utils/helper';\nimport { MultiColoredSeries } from './multi-colored-base';\n/**\n * `AreaSeries` module is used to render the area series.\n */\nvar AreaSeries = /** @class */ (function (_super) {\n __extends(AreaSeries, _super);\n function AreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Area series.\n * @return {void}\n * @private\n */\n AreaSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var _this = this;\n var startPoint = null;\n var direction = '';\n var origin = series.chart.chartAreaType === 'PolarRadar' ? series.points[0].yValue :\n Math.max(series.yAxis.visibleRange.min, 0);\n var currentXValue;\n var getCoordinate = series.chart.chartAreaType === 'PolarRadar' ? TransformToVisible : getPoint;\n series.points.map(function (point, i, seriesPoints) {\n currentXValue = point.xValue;\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(seriesPoints[i - 1], point, seriesPoints[i + 1], series)) {\n direction += _this.getAreaPathDirection(currentXValue, origin, series, isInverted, getCoordinate, startPoint, 'M');\n startPoint = startPoint || new ChartLocation(currentXValue, origin);\n // First Point to draw the area path\n direction += _this.getAreaPathDirection(currentXValue, point.yValue, series, isInverted, getCoordinate, null, 'L');\n if (seriesPoints[i + 1] && !seriesPoints[i + 1].visible && series.emptyPointSettings.mode !== 'Drop') {\n direction += _this.getAreaEmptyDirection({ 'x': currentXValue, 'y': origin }, startPoint, series, isInverted, getCoordinate);\n startPoint = null;\n }\n _this.storePointLocation(point, series, isInverted, getPoint);\n }\n });\n this.appendLinePath(new PathOption(series.chart.element.id + '_Series_' + series.index, series.interior, series.border.width, series.border.color, series.opacity, series.dashArray, (series.points.length > 1 ? (direction + this.getAreaPathDirection(series.points[series.points.length - 1].xValue, series.chart.chartAreaType === 'PolarRadar' ?\n series.points[series.points.length - 1].yValue : origin, series, isInverted, getCoordinate, null, 'L')) : '')), series, '');\n this.renderMarker(series);\n };\n /**\n * To destroy the area series.\n * @return {void}\n * @private\n */\n AreaSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n /**\n * Get module name\n */\n AreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'AreaSeries';\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n AreaSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n return AreaSeries;\n}(MultiColoredSeries));\nexport { AreaSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `BarSeries` module is used to render the bar series.\n */\nvar BarSeries = /** @class */ (function (_super) {\n __extends(BarSeries, _super);\n function BarSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Bar series.\n * @return {void}\n * @private\n */\n BarSeries.prototype.render = function (series) {\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var sideBySideInfo = this.getSideBySideInfo(series);\n var rect;\n var argsData;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var pointBar = _a[_i];\n pointBar.symbolLocations = [];\n pointBar.regions = [];\n if (pointBar.visible && withInRange(series.points[pointBar.index - 1], pointBar, series.points[pointBar.index + 1], series)) {\n rect = this.getRectangle(pointBar.xValue + sideBySideInfo.start, pointBar.yValue, pointBar.xValue + sideBySideInfo.end, origin, series);\n argsData = this.triggerEvent(series, pointBar, series.interior, { width: series.border.width, color: series.border.color });\n if (!argsData.cancel) {\n this.updateSymbolLocation(pointBar, rect, series);\n this.drawRectangle(series, pointBar, rect, argsData);\n }\n }\n }\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n BarSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * To destroy the bar series.\n * @return {void}\n * @private\n */\n BarSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name\n */\n BarSeries.prototype.getModuleName = function () {\n return 'BarSeries';\n };\n return BarSeries;\n}(ColumnBase));\nexport { BarSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { valueToCoefficient, TextOption, inside, measureText } from '../../common/utils/helper';\nimport { Size, Rect, PathOption, CircleOption } from '../../common/utils/helper';\nimport { LineBase } from '../series/line-base';\nimport { textElement, valueToPolarCoefficient, CoefficientToVector } from '../../common/utils/helper';\n/**\n * Specifies the Polar Axis Layout.\n */\nvar axisPadding = 10;\nvar PolarRadarPanel = /** @class */ (function (_super) {\n __extends(PolarRadarPanel, _super);\n function PolarRadarPanel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Measure the polar radar axis size.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.measureAxis = function (rect) {\n var chart = this.chart;\n this.initialClipRect = rect;\n this.seriesClipRect = new Rect(rect.x, rect.y, rect.width, rect.height);\n //Measure axis size calculation\n this.measureRowAxis(chart, this.initialClipRect);\n this.measureColumnAxis(chart, this.initialClipRect);\n this.calculateAxisSize();\n };\n PolarRadarPanel.prototype.measureRowAxis = function (chart, rect) {\n this.calculateRowSize(rect);\n var row = chart.rows[0];\n this.measureDefinition(row, chart, new Size(chart.availableSize.width, row.computedHeight), rect);\n };\n PolarRadarPanel.prototype.measureColumnAxis = function (chart, rect) {\n this.calculateColumnSize(rect);\n var column = chart.columns[0];\n this.measureDefinition(column, chart, new Size(column.computedWidth, chart.availableSize.height), rect);\n };\n /**\n * Measure the column and row in chart.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.measureDefinition = function (definition, chart, size, clipRect) {\n for (var _i = 0, _a = definition.axes; _i < _a.length; _i++) {\n var axis = _a[_i];\n axis.getModule(chart);\n axis.baseModule.calculateRangeAndInterval(size, axis);\n }\n };\n /**\n * Measure the axis.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.calculateAxisSize = function () {\n var chart = this.chart;\n var axis;\n var padding = 5;\n this.centerX = this.initialClipRect.width * 0.5 + this.initialClipRect.x;\n this.centerY = this.initialClipRect.height * 0.5 + this.initialClipRect.y;\n chart.radius = Math.min(this.initialClipRect.width, this.initialClipRect.height) / 2 - padding -\n chart.primaryXAxis.majorTickLines.height - chart.primaryXAxis.maxLabelSize.height;\n chart.radius = (chart.primaryXAxis.coefficient * chart.radius) / 100;\n this.seriesClipRect.y = this.centerY - chart.radius;\n this.seriesClipRect.x = this.centerX - chart.radius;\n this.seriesClipRect.height = 2 * chart.radius;\n this.seriesClipRect.width = 2 * chart.radius;\n this.calculateRowSize(this.seriesClipRect);\n axis = chart.primaryYAxis;\n axis.rect = this.seriesClipRect;\n this.calculateColumnSize(this.seriesClipRect);\n axis = chart.primaryXAxis;\n axis.rect = this.seriesClipRect;\n };\n /**\n * Measure the axis.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.measure = function () {\n var chart = this.chart;\n chart.verticalAxes.push(chart.primaryYAxis);\n var row = chart.rows[0];\n row.axes[0] = chart.primaryYAxis;\n chart.rows[0] = row;\n chart.horizontalAxes.push(chart.primaryXAxis);\n var column = chart.columns[0];\n column.axes[0] = chart.primaryXAxis;\n chart.columns[0] = column;\n };\n /**\n * Measure the row size.\n * @return {void}\n */\n PolarRadarPanel.prototype.calculateRowSize = function (rect) {\n /*! Calculate row size */\n var chart = this.chart;\n var row = chart.rows[0];\n row.computedHeight = rect.height / 2;\n row.computedTop = rect.y;\n chart.rows[0] = row;\n };\n /**\n * Measure the row size.\n * @return {void}\n */\n PolarRadarPanel.prototype.calculateColumnSize = function (rect) {\n /*! Calculate column size */\n var chart = this.chart;\n var column = chart.columns[0];\n column.computedLeft = rect.x;\n column.computedWidth = rect.width;\n chart.columns[0] = column;\n };\n /**\n * To render the axis element.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.renderAxes = function () {\n var axis;\n var chart = this.chart;\n this.startAngle = chart.primaryXAxis.startAngle;\n var axisElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisCollection' });\n var axisLineElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisOutsideCollection' });\n for (var i = 0, len = chart.axisCollections.length; i < len; i++) {\n this.element = chart.renderer.createGroup({ id: chart.element.id + 'AxisGroup' + i });\n axis = chart.axisCollections[i];\n if (axis.orientation === 'Horizontal') {\n if (axis.majorGridLines.width > 0 || axis.majorTickLines.width > 0) {\n this.drawXAxisGridLine(axis, i);\n }\n if (axis.visible) {\n this.drawXAxisLabels(axis, i);\n }\n }\n else {\n this.drawYAxisGridLine(axis, i);\n if (axis.lineStyle.width > 0) {\n this.drawYAxisLine(axis, i, axis.plotOffset, 0);\n }\n if (axis.visible) {\n this.drawYAxisLabels(axis, i);\n }\n }\n axisElement.appendChild(this.element);\n }\n axisElement.appendChild(this.element);\n chart.svgObject.appendChild(axisElement);\n return axisLineElement;\n };\n PolarRadarPanel.prototype.drawYAxisLine = function (axis, index, plotX, plotY) {\n var chart = this.chart;\n var optionsLine = {};\n var vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[0].value, axis), this.startAngle);\n var axisLine = 'M ' + this.centerX + ' ' + this.centerY + 'L ' +\n (this.centerX + chart.radius * vector.x) + ' ' + (this.centerY + chart.radius * vector.y);\n optionsLine = {\n 'id': chart.element.id + 'AxisLine_' + index,\n 'd': axisLine,\n 'stroke-dasharray': axis.lineStyle.dashArray,\n 'stroke-width': axis.lineStyle.width,\n 'stroke': axis.lineStyle.color || chart.themeStyle.axisLine\n };\n chart.yAxisElements.appendChild(chart.renderer.drawPath(optionsLine));\n };\n PolarRadarPanel.prototype.drawYAxisLabels = function (axis, index) {\n var chart = this.chart;\n var elementSize;\n var options;\n var pointX = 0;\n var pointY = 0;\n var vector;\n var angle = this.startAngle < 0 ? this.startAngle + 360 : this.startAngle;\n var anchor = 'middle';\n var radius;\n var padding = 5;\n var labelElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisLabels' + index });\n vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[0].value, axis), this.startAngle);\n for (var i = 0, len = axis.visibleLabels.length; i < len; i++) {\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[i].value, axis);\n elementSize = axis.visibleLabels[i].size;\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[i].value, axis);\n pointX = (this.centerX + radius * vector.x) + ((axis.majorTickLines.height + elementSize.width / 2 + padding / 2)\n * (Math.cos(angle * Math.PI / 180)) * (axis.labelPosition === 'Inside' ? 1 : -1));\n pointY = (this.centerY + radius * vector.y) + ((axis.majorTickLines.height + elementSize.height / 2)\n * (Math.sin(angle * Math.PI / 180)) * (axis.labelPosition === 'Inside' ? 1 : -1));\n options = new TextOption(chart.element.id + index + '_AxisLabel_' + i, pointX, pointY + (elementSize.height / 4), anchor, axis.visibleLabels[i].text);\n textElement(options, axis.labelStyle, axis.labelStyle.color || chart.themeStyle.axisLabel, labelElement);\n }\n chart.yAxisElements.appendChild(labelElement);\n };\n PolarRadarPanel.prototype.drawYAxisGridLine = function (axis, index) {\n var chart = this.chart;\n var options;\n var radius;\n var majorTick = '';\n var majorGrid = '';\n var vector;\n var vector2;\n var angle = this.startAngle < 0 ? this.startAngle + 360 : this.startAngle;\n var rect = axis.rect;\n var x1;\n var y1;\n var x2;\n var y2;\n var border = {\n color: axis.majorGridLines.color || chart.themeStyle.majorGridLine,\n width: axis.majorGridLines.width\n };\n if (axis.majorGridLines.width > 0) {\n if (chart.visibleSeries[0].type === 'Polar') {\n for (var j = 0; j < axis.visibleLabels.length; j++) {\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[j].value, axis);\n options = new CircleOption(chart.element.id + '_MajorGridLine_' + index, 'transparent', border, axis.majorGridLines.width, this.centerX, this.centerY, radius);\n this.element.appendChild(chart.renderer.drawCircle(options));\n }\n }\n else {\n for (var j = 0; j < axis.visibleLabels.length; j++) {\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[j].value, axis);\n for (var i = 0, len = chart.primaryXAxis.visibleLabels.length; i < len; i++) {\n vector = CoefficientToVector(valueToPolarCoefficient(chart.primaryXAxis.visibleLabels[i].value, chart.primaryXAxis), this.startAngle);\n if (i + 1 < len) {\n vector2 = CoefficientToVector(valueToPolarCoefficient(chart.primaryXAxis.visibleLabels[i + 1].value, chart.primaryXAxis), this.startAngle);\n }\n else {\n vector2 = CoefficientToVector(valueToPolarCoefficient(chart.primaryXAxis.visibleLabels[0].value, chart.primaryXAxis), this.startAngle);\n }\n x1 = this.centerX + radius * vector.x;\n y1 = this.centerY + radius * vector.y;\n x2 = this.centerX + radius * vector2.x;\n y2 = this.centerY + radius * vector2.y;\n majorGrid = majorGrid.concat('M' + ' ' + x1 + ' ' + y1 + ' ' + 'L' + ' ' + x2 + ' ' + y2 + ' ');\n }\n }\n options = new PathOption(chart.element.id + '_MajorGridLine_' + index, 'transparent', axis.majorGridLines.width, axis.majorGridLines.color || chart.themeStyle.majorGridLine, null, null, majorGrid);\n this.element.appendChild(chart.renderer.drawPath(options));\n }\n }\n if (axis.majorTickLines.width > 0) {\n vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[0].value, axis), this.startAngle);\n for (var i = 0; i < axis.visibleLabels.length; i++) {\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[i].value, axis);\n x1 = this.centerX + radius * vector.x;\n y1 = this.centerY + radius * vector.y;\n x2 = x1 + (axis.majorTickLines.height * (Math.cos(angle * Math.PI / 180)) * (axis.tickPosition === 'Inside' ? 1 : -1));\n y2 = y1 + (axis.majorTickLines.height * (Math.sin(angle * Math.PI / 180)) * (axis.tickPosition === 'Inside' ? 1 : -1));\n majorTick = majorTick.concat('M ' + x1 + ' ' + y1 +\n ' L ' + x2 + ' ' + y2 + ' ');\n }\n }\n this.renderTickLine(axis, index, majorTick, '');\n };\n PolarRadarPanel.prototype.drawXAxisGridLine = function (axis, index) {\n var chart = this.chart;\n var tempInterval;\n var vector;\n var majorGrid = '';\n var majorTick = '';\n var minorGirdLine = '';\n var minorTickLine = '';\n var x1 = this.centerX;\n var x2;\n var y1 = this.centerY;\n var y2;\n var minorDirection;\n var tickSize = axis.majorTickLines.height;\n var rect = axis.rect;\n var length = axis.visibleLabels.length;\n //Gridlines\n for (var i = 0; i < length; i++) {\n tempInterval = axis.visibleLabels[i].value;\n vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[i].value, axis), this.startAngle);\n x2 = this.centerX + chart.radius * vector.x;\n y2 = this.centerY + chart.radius * vector.y;\n var xLoc = x2 + (axis.majorTickLines.height * vector.x * (axis.tickPosition === 'Inside' ? -1 : 1));\n var yLoc = y2 + (axis.majorTickLines.height * vector.y * (axis.tickPosition === 'Inside' ? -1 : 1));\n majorGrid = majorGrid.concat('M ' + x1 + ' ' + y1 + ' ' + 'L' + x2 + ' ' + y2);\n majorTick = majorTick.concat('M ' + x2 + ' ' + y2 +\n ' L ' + xLoc + ' ' + yLoc + ' ');\n if (axis.minorTicksPerInterval > 0 && (axis.minorGridLines.width > 0 || axis.minorTickLines.width > 0)\n && axis.valueType !== 'Category' && chart.visibleSeries[0].type !== 'Radar') {\n minorDirection = this.drawAxisMinorLine(axis, tempInterval, minorGirdLine, minorTickLine);\n minorGirdLine = minorDirection[0];\n minorTickLine = minorDirection[1];\n }\n }\n this.renderTickLine(axis, index, majorTick, minorTickLine);\n this.renderGridLine(axis, index, majorGrid, minorGirdLine);\n };\n PolarRadarPanel.prototype.drawAxisMinorLine = function (axis, tempInterval, minorGird, minorTick) {\n var value = tempInterval;\n var x;\n var y;\n var vector;\n var range = axis.visibleRange;\n var direction = [];\n var tickSize = axis.minorTickLines.height;\n var rect = axis.rect;\n for (var j = 0; j < axis.minorTicksPerInterval; j++) {\n value += (axis.valueType === 'DateTime' ? axis.dateTimeInterval : axis.visibleRange.interval) /\n (axis.minorTicksPerInterval + 1);\n if (inside(value, range)) {\n vector = CoefficientToVector(valueToPolarCoefficient(value, axis), this.startAngle);\n x = this.centerX + this.chart.radius * vector.x;\n y = this.centerY + this.chart.radius * vector.y;\n var tickXSize = x + (axis.minorTickLines.height * vector.x * (axis.tickPosition === 'Inside' ? -1 : 1));\n var tickYSize = y + (axis.minorTickLines.height * vector.y * (axis.tickPosition === 'Inside' ? -1 : 1));\n minorGird = minorGird.concat('M' + ' ' + this.centerX + ' ' + this.centerY\n + 'L ' + x + ' ' + y);\n minorTick = minorTick.concat('M' + ' ' + x + ' ' + y + 'L' + ' ' + (tickXSize) + ' ' +\n (tickYSize));\n }\n }\n direction.push(minorGird);\n direction.push(minorTick);\n return direction;\n };\n /**\n * To render the axis label.\n * @return {void}\n * @private\n */\n PolarRadarPanel.prototype.drawXAxisLabels = function (axis, index) {\n var chart = this.chart;\n var pointX = 0;\n var elementSize;\n var pointY = 0;\n var labelElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisLabels' + index });\n var options;\n var vector;\n var labelText;\n var firstLabelX;\n var islabelInside = axis.labelPosition === 'Inside';\n var padding = 5;\n var lastLabelX;\n var textAnchor = '';\n var ticksbwtLabel = axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks'\n && chart.visibleSeries[0].type !== 'Radar' ? 0.5 : 0;\n var radius = chart.radius + axis.majorTickLines.height;\n radius = (islabelInside) ? -radius : radius;\n for (var i = 0, len = axis.visibleLabels.length; i < len; i++) {\n vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[i].value + ticksbwtLabel, axis), this.startAngle);\n if (!isNaN(vector.x) && !isNaN(vector.y)) {\n pointX = this.centerX + (radius + axis.majorTickLines.height + padding) * vector.x;\n pointY = this.centerY + (radius + axis.majorTickLines.height + padding) * vector.y;\n textAnchor = parseFloat(pointX.toFixed(1)) === parseFloat(this.centerX.toFixed(1)) ? 'middle' :\n ((pointX < this.centerX && !islabelInside) || (pointX > this.centerX && islabelInside)) ? 'end' : 'start';\n }\n labelText = axis.visibleLabels[i].text;\n if (i === 0) {\n firstLabelX = pointX;\n }\n else if (i === axis.visibleLabels.length - 1 && axis.valueType !== 'Category') {\n lastLabelX = measureText(labelText, axis.labelStyle).height;\n lastLabelX += pointX;\n labelText = (lastLabelX > firstLabelX) ? '' : labelText;\n }\n options = new TextOption(chart.element.id + index + '_AxisLabel_' + i, pointX, pointY, textAnchor, labelText, '', 'central');\n textElement(options, axis.labelStyle, axis.labelStyle.color || chart.themeStyle.axisLabel, labelElement);\n }\n this.element.appendChild(labelElement);\n };\n PolarRadarPanel.prototype.renderTickLine = function (axis, index, majorTickLine, minorTickLine) {\n var tickOptions;\n var chart = this.chart;\n if (axis.majorTickLines.width > 0) {\n tickOptions = new PathOption(chart.element.id + '_MajorTickLine_' + index, 'transparent', axis.majorTickLines.width, axis.majorTickLines.color || chart.themeStyle.majorTickLine, null, null, majorTickLine);\n chart.yAxisElements.appendChild(chart.renderer.drawPath(tickOptions));\n }\n if (axis.minorTickLines.width > 0) {\n tickOptions = new PathOption(chart.element.id + '_MinorTickLine_' + index, 'transparent', axis.minorTickLines.width, axis.minorTickLines.color || chart.themeStyle.minorTickLine, null, null, minorTickLine);\n chart.yAxisElements.appendChild(chart.renderer.drawPath(tickOptions));\n }\n };\n PolarRadarPanel.prototype.renderGridLine = function (axis, index, majorGrid, minorGird) {\n var chart = this.chart;\n var gridOptions;\n if (axis.majorGridLines.width > 0) {\n gridOptions = new PathOption(chart.element.id + '_MajorGridLine_' + index, 'transparent', axis.majorGridLines.width, axis.majorGridLines.color || chart.themeStyle.majorGridLine, null, axis.majorGridLines.dashArray, majorGrid);\n this.element.appendChild(chart.renderer.drawPath(gridOptions));\n }\n if (axis.minorGridLines.width > 0) {\n gridOptions = new PathOption(chart.element.id + '_MinorGridLine_' + index, 'transparent', axis.minorGridLines.width, axis.minorGridLines.color || chart.themeStyle.minorGridLine, null, axis.minorGridLines.dashArray, minorGird);\n this.element.appendChild(chart.renderer.drawPath(gridOptions));\n }\n };\n return PolarRadarPanel;\n}(LineBase));\nexport { PolarRadarPanel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange, PathOption, logBase, markerAnimate, PolarArc, valueToCoefficient, firstToLowerCase } from '../../common/utils/helper';\nimport { PolarRadarPanel } from '../axis/polar-radar-panel';\nimport { pointRender } from '../../common/model/constants';\nimport { Animation } from '@syncfusion/ej2-base';\n/**\n * `PolarSeries` module is used to render the polar series.\n */\nvar PolarSeries = /** @class */ (function (_super) {\n __extends(PolarSeries, _super);\n function PolarSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Polar Series.\n * @return {void}.\n * @private\n */\n PolarSeries.prototype.render = function (series) {\n var seriesType = firstToLowerCase(series.drawType);\n if (series.drawType.indexOf('Column') > -1) {\n this.columnDrawTypeRender(series);\n }\n else {\n series.chart[seriesType + 'SeriesModule'].render(series, series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n }\n };\n /**\n * Render Column DrawType.\n * @return {void}.\n * @private\n */\n PolarSeries.prototype.columnDrawTypeRender = function (series) {\n var visiblePoints = series.points;\n var rect;\n var options;\n var argsData;\n var startAngle;\n var endAngle;\n var itemCurrentXPos;\n var radius;\n var pointStartAngle;\n var pointEndAngle;\n var x1;\n var x2;\n var y1;\n var y2;\n var startValue;\n var endValue;\n var innerRadius;\n var centerX = (series.clipRect.width / 2) + series.clipRect.x;\n var dStartX;\n var dStartY;\n var centerY = (series.clipRect.height / 2) + series.clipRect.y;\n var dEndX;\n var dEndY;\n var axisInversed = series.xAxis.isInversed ? 1 : 0;\n var direction = '';\n var sumofYValues = 0;\n var interval = (series.points[1] ? series.points[1].xValue : 2 * series.points[0].xValue) - series.points[0].xValue;\n var ticks = series.xAxis.valueType === 'Category' && series.xAxis.labelPlacement === 'BetweenTicks' ? 0 : interval / 2;\n var rangeInterval = series.xAxis.valueType === 'DateTime' ? series.xAxis.dateTimeInterval : 1;\n var min = series.xAxis.actualRange.min;\n var inversedValue;\n this.getSeriesPosition(series);\n var position = series.xAxis.isInversed ? (series.rectCount - 1 - series.position) : series.position;\n var ticksbwtLabel = series.xAxis.valueType === 'Category' && series.xAxis.labelPlacement === 'BetweenTicks' ? 0.5\n : 0.5 - (series.rectCount / 2);\n do {\n sumofYValues += rangeInterval;\n min += rangeInterval;\n } while (min <= series.xAxis.actualRange.max - (series.xAxis.valueType === 'Category' ? 0 : 1));\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n inversedValue = series.xAxis.isInversed ? (series.xAxis.visibleRange.max - point.xValue) :\n point.xValue - series.xAxis.visibleRange.min;\n itemCurrentXPos = (inversedValue) +\n ((interval / series.rectCount) * position - ticks) + (sumofYValues / 360 * series.xAxis.startAngle);\n itemCurrentXPos = (((itemCurrentXPos) / (sumofYValues)));\n startAngle = 2 * Math.PI * (itemCurrentXPos + series.xAxis.startAngle);\n endAngle = 2 * Math.PI * ((itemCurrentXPos + series.xAxis.startAngle) + (interval / series.rectCount) / (sumofYValues));\n pointStartAngle = startAngle;\n pointEndAngle = endAngle;\n startAngle = (startAngle - 0.5 * Math.PI);\n endAngle = (endAngle - 0.5 * Math.PI) - 0.000001;\n if (series.drawType === 'StackingColumn' || series.drawType === 'RangeColumn') {\n startValue = series.drawType === 'RangeColumn' ? point.low : series.stackedValues.startValues[point.index];\n endValue = series.drawType === 'RangeColumn' ? point.high : series.stackedValues.endValues[point.index];\n endValue = (series.yAxis.valueType === 'Logarithmic' ?\n logBase(endValue === 0 ? 1 : endValue, series.yAxis.logBase) : endValue);\n endValue = endValue > series.yAxis.actualRange.max ? series.yAxis.actualRange.max : endValue;\n radius = startValue === endValue ? 0 : series.chart.radius * valueToCoefficient(endValue, series.yAxis);\n x1 = centerX + radius * Math.cos(startAngle);\n x2 = centerX + radius * Math.cos(endAngle);\n y1 = centerY + radius * Math.sin(startAngle);\n y2 = centerY + radius * Math.sin(endAngle);\n innerRadius = series.chart.radius * valueToCoefficient((startValue === 0 && series.yAxis.visibleRange.min !== 0) ? series.yAxis.visibleRange.min : startValue, series.yAxis);\n dStartX = centerX + innerRadius * Math.cos(startAngle);\n dStartY = centerY + innerRadius * Math.sin(startAngle);\n dEndX = centerX + innerRadius * Math.cos(endAngle);\n dEndY = centerY + innerRadius * Math.sin(endAngle);\n if (series.type === 'Polar') {\n direction = ('M' + ' ' + x1 + ' ' + y1 + ' ' + 'A' + ' ' + radius + ' ' + radius + ' ' + '0' + ' '\n + '0' + ' ' + 1 + ' ' + x2 + ' ' + y2 + ' ' + 'L' + ' ' + dEndX + ' ' + dEndY + ' ' +\n 'A' + ' ' + innerRadius + ' ' + innerRadius + ' ' + '1' + ' ' + '0' + ' ' + '0' + ' '\n + dStartX + ' ' + dStartY + ' ' + 'z');\n }\n else {\n direction = ('M' + ' ' + x1 + ' ' + y1 + ' ' + 'L' + ' ' + x2 + ' ' + y2 + ' ' + 'L'\n + dEndX + ' ' + dEndY + ' ' + 'L' + ' ' + dStartX + ' ' + dStartY + ' ' + 'z');\n }\n point.regionData = new PolarArc(pointStartAngle, pointEndAngle, innerRadius, radius, itemCurrentXPos);\n }\n else {\n endValue = point.yValue > series.yAxis.actualRange.max ? series.yAxis.actualRange.max : point.yValue;\n radius = series.chart.radius * valueToCoefficient((series.yAxis.valueType === 'Logarithmic' ? logBase(endValue, series.yAxis.logBase) : endValue), series.yAxis);\n x1 = centerX + radius * Math.cos(startAngle);\n x2 = centerX + radius * Math.cos(endAngle);\n y1 = centerY + radius * Math.sin(startAngle);\n y2 = centerY + radius * Math.sin(endAngle);\n if (series.type === 'Polar') {\n direction = ('M' + ' ' + x1 + ' ' + y1 + ' ' + 'A' + ' ' + radius + ' ' + radius + ' ' + '0' + ' ' +\n '0' + ' ' + 1 + ' ' + x2 + ' ' + y2 + ' ' + 'L' + ' ' + centerX + ' ' +\n centerY + ' ' + 'z');\n }\n else {\n direction = ('M' + ' ' + x1 + ' ' + y1 + ' ' + 'L' + ' ' + x2 + ' ' + y2 + ' ' + 'L' + ' '\n + centerX + ' ' + centerY + ' ' + 'z');\n }\n point.regionData = new PolarArc(pointStartAngle, pointEndAngle, 0, radius, itemCurrentXPos);\n }\n argsData = this.triggerEvent(series.chart, series, point);\n options = new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + point.index, argsData.fill, argsData.border.width, argsData.border.color, series.opacity, series.dashArray, direction);\n if (!argsData.cancel) {\n this.appendLinePath(options, series, '');\n if (series.type === 'Polar') {\n point.symbolLocations.push({\n x: centerX + radius * Math.cos((startAngle + (endAngle - startAngle) / 2)),\n y: centerY + radius * Math.sin((startAngle + (endAngle - startAngle) / 2))\n });\n }\n else {\n point.symbolLocations.push({ x: (x1 + x2) / 2, y: (y1 + y2) / 2 });\n }\n }\n }\n }\n series.isRectSeries = true;\n };\n /**\n * To trigger the point rendering event.\n * @return {void}\n * @private\n */\n PolarSeries.prototype.triggerEvent = function (chart, series, point) {\n var argsData = {\n cancel: false, name: pointRender, series: series, point: point,\n fill: series.setPointColor(point, series.interior),\n border: series.setBorderColor(point, { width: series.border.width, color: series.border.color })\n };\n chart.trigger(pointRender, argsData);\n point.color = argsData.fill;\n return argsData;\n };\n /** get position for column drawtypes\n * @return {void}.\n * @private\n */\n PolarSeries.prototype.getSeriesPosition = function (series) {\n var chart = series.chart;\n var seriesCollection = [];\n var stackingGroup = [];\n var vSeries = { rectCount: 0, position: null };\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series_1 = _a[_i];\n if (series_1.visible && (series_1.type === 'Polar' || series_1.type === 'Radar') && series_1.drawType.indexOf('Column') !== -1) {\n seriesCollection.push(series_1);\n }\n }\n seriesCollection.forEach(function (series) {\n if (series.drawType.indexOf('Stacking') !== -1) {\n if (series.stackingGroup) {\n if (stackingGroup[series.stackingGroup] === undefined) {\n series.position = vSeries.rectCount;\n stackingGroup[series.stackingGroup] = vSeries.rectCount++;\n }\n else {\n series.position = stackingGroup[series.stackingGroup];\n }\n }\n else {\n if (vSeries.position === null) {\n series.position = vSeries.rectCount;\n vSeries.position = vSeries.rectCount++;\n }\n else {\n series.position = vSeries.position;\n }\n }\n }\n else {\n series.position = vSeries.rectCount++;\n }\n });\n seriesCollection.forEach(function (value) {\n value.rectCount = vSeries.rectCount;\n });\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n PolarSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n var duration = series.animation.duration;\n var delay = series.animation.delay;\n var rectElements = series.seriesElement.childNodes;\n var count = 1;\n if (series.drawType === 'Scatter') {\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (!point.symbolLocations.length || !rectElements[count]) {\n continue;\n }\n markerAnimate(rectElements[count], delay, duration, series, point.index, point.symbolLocations[0], false);\n count++;\n }\n }\n else {\n for (count = 1; count < rectElements.length; count++) {\n this.doPolarRadarAnimation(rectElements[count], delay, duration, series);\n }\n }\n };\n /**\n * To do the Polar Radar draw type column animation.\n * @return {void}\n * @private\n */\n PolarSeries.prototype.doPolarRadarAnimation = function (animateElement, delay, duration, series) {\n var chartcenterX = series.clipRect.width / 2 + series.clipRect.x;\n var chartcenterY = series.clipRect.height / 2 + series.clipRect.y;\n var elementHeight = 0;\n animateElement.style.visibility = 'hidden';\n new Animation({}).animate(animateElement, {\n duration: duration,\n delay: delay,\n progress: function (args) {\n if (args.timeStamp > args.delay) {\n args.element.style.visibility = 'visible';\n elementHeight = ((args.timeStamp - args.delay) / args.duration);\n animateElement.setAttribute('transform', 'translate(' + chartcenterX\n + ' ' + chartcenterY + ') scale(' + elementHeight + ') translate(' + (-chartcenterX) + ' ' + (-chartcenterY) + ')');\n }\n },\n end: function (model) {\n animateElement.style.visibility = 'visible';\n animateElement.removeAttribute('transform');\n series.chart.trigger('animationComplete', { series: series });\n }\n });\n };\n /**\n * Get module name.\n */\n PolarSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'PolarSeries';\n };\n /**\n * To destroy the polar series.\n * @return {void}\n * @private\n */\n PolarSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return PolarSeries;\n}(PolarRadarPanel));\nexport { PolarSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { firstToLowerCase } from '../../common/utils/helper';\nimport { PolarSeries } from '../series/polar-series';\n/**\n * `RadarSeries` module is used to render the radar series.\n */\nvar RadarSeries = /** @class */ (function (_super) {\n __extends(RadarSeries, _super);\n function RadarSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render radar Series.\n * @return {void}.\n * @private\n */\n RadarSeries.prototype.render = function (series) {\n var seriesType = firstToLowerCase(series.drawType);\n if (series.drawType.indexOf('Column') === -1) {\n series.chart[seriesType + 'SeriesModule'].render(series, series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n }\n else {\n this.columnDrawTypeRender(series);\n }\n };\n /**\n * Get module name.\n */\n RadarSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'RadarSeries';\n };\n /**\n * To destroy the radar series.\n * @return {void}\n * @private\n */\n RadarSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return RadarSeries;\n}(PolarSeries));\nexport { RadarSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `StackingBarSeries` module is used to render the stacking bar series.\n */\nvar StackingBarSeries = /** @class */ (function (_super) {\n __extends(StackingBarSeries, _super);\n function StackingBarSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the Stacking bar series.\n * @return {void}\n * @private\n */\n StackingBarSeries.prototype.render = function (series) {\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var sideBySideInfo = this.getSideBySideInfo(series);\n var stackedValue = series.stackedValues;\n var rect;\n var argsData;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var pointStack = _a[_i];\n pointStack.symbolLocations = [];\n pointStack.regions = [];\n if (pointStack.visible && withInRange(series.points[pointStack.index - 1], pointStack, series.points[pointStack.index + 1], series)) {\n rect = this.getRectangle(pointStack.xValue + sideBySideInfo.start, stackedValue.endValues[pointStack.index], pointStack.xValue + sideBySideInfo.end, stackedValue.startValues[pointStack.index], series);\n argsData = this.triggerEvent(series, pointStack, series.interior, { width: series.border.width, color: series.border.color });\n if (!argsData.cancel) {\n this.drawRectangle(series, pointStack, rect, argsData);\n this.updateSymbolLocation(pointStack, rect, series);\n }\n }\n }\n };\n /**\n * To destroy the stacking bar.\n * @return {void}\n * @private\n */\n StackingBarSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name.\n */\n StackingBarSeries.prototype.getModuleName = function () {\n return 'StackingBarSeries';\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n StackingBarSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n return StackingBarSeries;\n}(ColumnBase));\nexport { StackingBarSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange, PathOption } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `CandleSeries` module is used to render the candle series.\n */\nvar CandleSeries = /** @class */ (function (_super) {\n __extends(CandleSeries, _super);\n function CandleSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Candle series.\n * @return {void}\n * @private\n */\n CandleSeries.prototype.render = function (series) {\n var sideBySideInfo = this.getSideBySideInfo(series);\n var argsData;\n var borderWidth = Math.max(series.border.width, 1);\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n var direction = '';\n var centerRegion = void 0;\n var tickRegion = void 0;\n var midPoint = void 0;\n midPoint = (sideBySideInfo.start + sideBySideInfo.end) / 2;\n //initializing after zooming and also normal initialization\n point.regions = [];\n point.symbolLocations = [];\n if (point.visible && withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n //region to cover the top and bottom ticks\n tickRegion = this.getRectangle((point.xValue + sideBySideInfo.median), Math.max(point.high, point.low), (point.xValue + sideBySideInfo.median), Math.min(point.high, point.low), series);\n if (!series.chart.requireInvertedAxis) {\n tickRegion.x -= borderWidth / 2;\n tickRegion.width = borderWidth;\n }\n else {\n tickRegion.y -= borderWidth / 2;\n tickRegion.height = borderWidth;\n }\n //get middleRect\n centerRegion = this.getRectangle((point.xValue + sideBySideInfo.start), Math.max(point.open, point.close), (point.xValue + sideBySideInfo.end), Math.min(point.open, point.close), series);\n direction = this.getPathString(tickRegion, centerRegion, series);\n argsData = this.triggerPointRenderEvent(series, point);\n if (!argsData.cancel) {\n this.drawCandle(series, point, centerRegion, argsData, direction);\n this.updateSymbolLocation(point, tickRegion, series);\n this.updateSymbolLocation(point, centerRegion, series);\n }\n }\n }\n };\n /**\n * Trigger point rendering event\n */\n CandleSeries.prototype.triggerPointRenderEvent = function (series, point) {\n var fill;\n fill = this.getCandleColor(point, series);\n var border = { color: series.border.color, width: Math.max(series.border.width, 1) };\n return this.triggerEvent(series, point, fill, border);\n };\n /**\n * Find the color of the candle\n * @param series\n * @private\n */\n CandleSeries.prototype.getCandleColor = function (point, series) {\n var currentPoint = point;\n var previousPoint = series.points[point.index - 1];\n if (series.enableSolidCandles === false) {\n if (!previousPoint) {\n return series.bearFillColor;\n }\n else {\n return previousPoint.close > point.close ? series.bullFillColor :\n series.bearFillColor;\n }\n }\n else {\n return point.open > point.close ? series.bullFillColor :\n series.bearFillColor;\n }\n };\n /**\n * Finds the path of the candle shape\n * @param Series\n * @private\n */\n CandleSeries.prototype.getPathString = function (topRect, midRect, series) {\n var direction = '';\n var width = series.chart.requireInvertedAxis ? topRect.height : topRect.width;\n var center = series.chart.requireInvertedAxis ? topRect.y + topRect.height / 2 :\n topRect.x + topRect.width / 2;\n //tick 1 segment\n direction += !series.chart.requireInvertedAxis ?\n 'M' + ' ' + (center) + ' ' + (topRect.y) + ' ' + 'L' + ' ' + (center) + ' ' + midRect.y :\n 'M' + ' ' + (topRect.x) + ' ' + (center) + ' ' + 'L' + ' ' + (midRect.x) + ' ' + center;\n direction = direction.concat(' M' + ' ' + (midRect.x) + ' ' + (midRect.y) + ' ' +\n 'L' + ' ' + (midRect.x + midRect.width) + ' ' + (midRect.y) + ' ' +\n 'L' + ' ' + (midRect.x + midRect.width) + ' ' +\n (midRect.y + midRect.height) + ' ' +\n 'L' + ' ' + (midRect.x) + ' ' + (midRect.y + midRect.height) +\n ' ' + 'Z');\n direction += !series.chart.requireInvertedAxis ?\n ' M' + ' ' + (center) + ' ' + (midRect.y + midRect.height) + ' ' + 'L' + ' ' + (center) + ' ' + (topRect.y +\n topRect.height) :\n ' M' + ' ' + (midRect.x + midRect.width) + ' ' + (center) + ' ' + 'L' + ' ' +\n (topRect.x + topRect.width) + ' ' + center;\n return direction;\n };\n /**\n * Draws the candle shape\n * @param series\n * @private\n */\n CandleSeries.prototype.drawCandle = function (series, point, rect, argsData, direction) {\n var check = series.chart.requireInvertedAxis ? rect.height : rect.width;\n if (check <= 0) {\n return null;\n }\n var fill = !series.enableSolidCandles ?\n (point.open > point.close ? argsData.fill : 'transparent') : argsData.fill;\n argsData.border.color = argsData.fill;\n var options = new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + point.index, fill, argsData.border.width, argsData.border.color, series.opacity, series.dashArray, direction);\n var candleElement = series.chart.renderer.drawPath(options);\n candleElement.setAttribute('aria-label', point.x.toString() + ':' + point.high.toString()\n + ':' + point.low.toString() + ':' + point.close.toString() + ':' + point.open.toString());\n series.seriesElement.appendChild(candleElement);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n CandleSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * Get module name.\n */\n CandleSeries.prototype.getModuleName = function () {\n return 'CandleSeries';\n /**\n * return the module name\n */\n };\n /**\n * To destroy the candle series.\n * @return {void}\n * @private\n */\n CandleSeries.prototype.destroy = function (chart) {\n /**\n * Destroys the candle series.\n */\n };\n return CandleSeries;\n}(ColumnBase));\nexport { CandleSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `StackingColumnSeries` module used to render the stacking column series.\n */\nvar StackingColumnSeries = /** @class */ (function (_super) {\n __extends(StackingColumnSeries, _super);\n function StackingColumnSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the Stacking column series.\n * @return {void}\n * @private\n */\n StackingColumnSeries.prototype.render = function (series) {\n series.isRectSeries = true;\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var sideBySideInfo = this.getSideBySideInfo(series);\n var rect;\n var argsData;\n var stackedValue = series.stackedValues;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n rect = this.getRectangle(point.xValue + sideBySideInfo.start, stackedValue.endValues[point.index], point.xValue + sideBySideInfo.end, stackedValue.startValues[point.index], series);\n argsData = this.triggerEvent(series, point, series.interior, { width: series.border.width, color: series.border.color });\n if (!argsData.cancel) {\n this.drawRectangle(series, point, rect, argsData);\n this.updateSymbolLocation(point, rect, series);\n }\n }\n }\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n StackingColumnSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * To destroy the stacking column.\n * @return {void}\n * @private\n */\n StackingColumnSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n /**\n * Get module name.\n */\n StackingColumnSeries.prototype.getModuleName = function () {\n return 'StackingColumnSeries';\n };\n return StackingColumnSeries;\n}(ColumnBase));\nexport { StackingColumnSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PathOption, getPoint, withInRange } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\n/**\n * `StepLineSeries` module is used to render the step line series.\n */\nvar StepLineSeries = /** @class */ (function (_super) {\n __extends(StepLineSeries, _super);\n function StepLineSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the Step line series.\n * @return {void}\n * @private\n */\n StepLineSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var direction = '';\n var startPoint = 'M';\n var prevPoint = null;\n var pathOptions;\n var lineLength;\n var point1;\n var point2;\n var visiblePoints = this.improveChartPerformance(series);\n if (xAxis.valueType === 'Category' && xAxis.labelPlacement === 'BetweenTicks') {\n lineLength = 0.5;\n }\n else {\n lineLength = 0;\n }\n for (var _i = 0, visiblePoints_1 = visiblePoints; _i < visiblePoints_1.length; _i++) {\n var point = visiblePoints_1[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n if (prevPoint != null) {\n point2 = getPoint(point.xValue, point.yValue, xAxis, yAxis, isInverted);\n point1 = getPoint(prevPoint.xValue, prevPoint.yValue, xAxis, yAxis, isInverted);\n direction = direction.concat(startPoint + ' ' + (point1.x) + ' ' + (point1.y) + ' ' + 'L' + ' ' +\n (point2.x) + ' ' + (point1.y) + 'L' + ' ' + (point2.x) + ' ' + (point2.y) + ' ');\n startPoint = 'L';\n }\n else {\n point1 = getPoint(point.xValue - lineLength, point.yValue, xAxis, yAxis, isInverted);\n direction = direction.concat(startPoint + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n startPoint = 'L';\n }\n this.storePointLocation(point, series, isInverted, getPoint);\n prevPoint = point;\n }\n else {\n prevPoint = series.emptyPointSettings.mode === 'Drop' ? prevPoint : null;\n startPoint = series.emptyPointSettings.mode === 'Drop' ? startPoint : 'M';\n }\n }\n point1 = getPoint(visiblePoints[visiblePoints.length - 1].xValue + lineLength, visiblePoints[visiblePoints.length - 1].yValue, xAxis, yAxis, isInverted);\n direction = direction.concat(startPoint + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n pathOptions = new PathOption(series.chart.element.id + '_Series_' + series.index, 'transparent', series.width, series.interior, series.opacity, series.dashArray, direction);\n this.appendLinePath(pathOptions, series, '');\n this.renderMarker(series);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n StepLineSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n /**\n * To destroy the step line series.\n * @return {void}\n * @private\n */\n StepLineSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n /**\n * Get module name.\n */\n StepLineSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'StepLineSeries';\n };\n return StepLineSeries;\n}(LineBase));\nexport { StepLineSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { getPoint, withInRange, ChartLocation, PathOption } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\n/**\n * `StepAreaSeries` Module used to render the step area series.\n */\nvar StepAreaSeries = /** @class */ (function (_super) {\n __extends(StepAreaSeries, _super);\n function StepAreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render StepArea series.\n * @return {void}\n * @private\n */\n StepAreaSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var currentPoint;\n var secondPoint;\n var start = null;\n var direction = '';\n var pointsLength = series.points.length;\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var options;\n var point;\n var xValue;\n var lineLength;\n var prevPoint = null;\n if (xAxis.valueType === 'Category' && xAxis.labelPlacement === 'BetweenTicks') {\n lineLength = 0.5;\n }\n else {\n lineLength = 0;\n }\n for (var i = 0; i < pointsLength; i++) {\n point = series.points[i];\n xValue = point.xValue;\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(series.points[i - 1], point, series.points[i + 1], series)) {\n if (start === null) {\n start = new ChartLocation(xValue, 0);\n // Start point for the current path\n currentPoint = getPoint(xValue - lineLength, origin, xAxis, yAxis, isInverted);\n direction += ('M' + ' ' + (currentPoint.x) + ' ' + (currentPoint.y) + ' ');\n currentPoint = getPoint(xValue - lineLength, point.yValue, xAxis, yAxis, isInverted);\n direction += ('L' + ' ' + (currentPoint.x) + ' ' + (currentPoint.y) + ' ');\n }\n // First Point to draw the Steparea path\n if (prevPoint != null) {\n currentPoint = getPoint(point.xValue, point.yValue, xAxis, yAxis, isInverted);\n secondPoint = getPoint(prevPoint.xValue, prevPoint.yValue, xAxis, yAxis, isInverted);\n direction += ('L' + ' ' +\n (currentPoint.x) + ' ' + (secondPoint.y) + 'L' + ' ' + (currentPoint.x) + ' ' + (currentPoint.y) + ' ');\n }\n else if (series.emptyPointSettings.mode === 'Gap') {\n currentPoint = getPoint(point.xValue, point.yValue, xAxis, yAxis, isInverted);\n direction += 'L' + ' ' + (currentPoint.x) + ' ' + (currentPoint.y) + ' ';\n }\n this.storePointLocation(point, series, isInverted, getPoint);\n prevPoint = point;\n }\n if (series.points[i + 1] && !series.points[i + 1].visible && series.emptyPointSettings.mode !== 'Drop') {\n // current start point\n currentPoint = getPoint(xValue + lineLength, origin, xAxis, yAxis, isInverted);\n direction += ('L' + ' ' + (currentPoint.x) + ' ' + (currentPoint.y));\n start = null;\n prevPoint = null;\n }\n }\n if (pointsLength > 1) {\n start = { 'x': series.points[pointsLength - 1].xValue + lineLength, 'y': series.points[pointsLength - 1].yValue };\n secondPoint = getPoint(start.x, start.y, xAxis, yAxis, isInverted);\n direction += ('L' + ' ' + (secondPoint.x) + ' ' + (secondPoint.y) + ' ');\n start = { 'x': series.points[pointsLength - 1].xValue + lineLength, 'y': origin };\n secondPoint = getPoint(start.x, start.y, xAxis, yAxis, isInverted);\n direction += ('L' + ' ' + (secondPoint.x) + ' ' + (secondPoint.y) + ' ');\n }\n options = new PathOption(series.chart.element.id + '_Series_' + series.index, series.interior, series.border.width, series.border.color, series.opacity, series.dashArray, direction);\n this.appendLinePath(options, series, '');\n this.renderMarker(series);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n StepAreaSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n /**\n * To destroy the step Area series.\n * @return {void}\n * @private\n */\n StepAreaSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n /**\n * Get module name.\n */\n StepAreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'StepAreaSeries';\n };\n return StepAreaSeries;\n}(LineBase));\nexport { StepAreaSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PathOption, getPoint, withInRange, Rect, TransformToVisible } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\n/**\n * `StackingAreaSeries` module used to render the Stacking Area series.\n */\nvar StackingAreaSeries = /** @class */ (function (_super) {\n __extends(StackingAreaSeries, _super);\n function StackingAreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the Stacking area series.\n * @return {void}\n * @private\n */\n StackingAreaSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var polarAreaType = series.chart.chartAreaType === 'PolarRadar';\n var getCoordinate = polarAreaType ? TransformToVisible : getPoint;\n var lineDirection = '';\n var visiblePoints = series.points;\n var pointsLength = visiblePoints.length;\n var stackedvalue = series.stackedValues;\n var origin = polarAreaType ?\n Math.max(series.yAxis.visibleRange.min, stackedvalue.endValues[0]) :\n Math.max(series.yAxis.visibleRange.min, stackedvalue.startValues[0]);\n var border = series.border;\n var options;\n var startPoint = 0;\n var point1 = getCoordinate(visiblePoints[0].xValue, origin, xAxis, yAxis, isInverted, series);\n var point2;\n lineDirection = lineDirection.concat('M' + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n for (var i = 0; i < pointsLength; i++) {\n visiblePoints[i].symbolLocations = [];\n visiblePoints[i].regions = [];\n if (visiblePoints[i].visible && withInRange(visiblePoints[i - 1], visiblePoints[i], visiblePoints[i + 1], series)) {\n point1 = getCoordinate(visiblePoints[i].xValue, stackedvalue.endValues[i], xAxis, yAxis, isInverted, series);\n lineDirection = lineDirection.concat('L' + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n visiblePoints[i].symbolLocations.push(getCoordinate(visiblePoints[i].xValue, stackedvalue.endValues[i], xAxis, yAxis, isInverted, series));\n visiblePoints[i].regions.push(new Rect(visiblePoints[i].symbolLocations[0].x - series.marker.width, visiblePoints[i].symbolLocations[0].y - series.marker.height, 2 * series.marker.width, 2 * series.marker.height));\n }\n else {\n if (series.emptyPointSettings.mode !== 'Drop') {\n for (var j = i - 1; j >= startPoint; j--) {\n point2 = getCoordinate(visiblePoints[j].xValue, stackedvalue.startValues[j], xAxis, yAxis, isInverted, series);\n lineDirection = lineDirection.concat('L' + ' ' + (point2.x) + ' ' + (point2.y) + ' ');\n }\n if (visiblePoints[i + 1] && visiblePoints[i + 1].visible) {\n point1 = getCoordinate(visiblePoints[i + 1].xValue, stackedvalue.startValues[i + 1], xAxis, yAxis, isInverted, series);\n lineDirection = lineDirection.concat('M' + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n }\n startPoint = i + 1;\n }\n }\n }\n if (series.chart.chartAreaType === 'PolarRadar' && visiblePoints.length > 1) {\n point1 = { 'x': series.points[0].xValue, 'y': stackedvalue.endValues[0] };\n point2 = getCoordinate(point1.x, point1.y, xAxis, yAxis, isInverted, series);\n lineDirection += ('L' + ' ' + (point2.x) + ' ' + (point2.y) + ' ');\n }\n for (var j = pointsLength - 1; j >= startPoint; j--) {\n var previousSeries = this.getPreviousSeries(series);\n if (previousSeries.emptyPointSettings.mode !== 'Drop' || !previousSeries.points[j].isEmpty) {\n point2 = getCoordinate(visiblePoints[j].xValue, stackedvalue.startValues[j], xAxis, yAxis, isInverted, series);\n lineDirection = lineDirection.concat(((j === (pointsLength - 1) && polarAreaType) ? 'M' : 'L')\n + ' ' + (point2.x) + ' ' + (point2.y) + ' ');\n }\n }\n options = new PathOption(series.chart.element.id + '_Series_' + series.index, series.interior, series.border.width, series.border.color, series.opacity, series.dashArray, lineDirection);\n this.appendLinePath(options, series, '');\n this.renderMarker(series);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n StackingAreaSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n /**\n * To destroy the stacking area.\n * @return {void}\n * @private\n */\n StackingAreaSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n /**\n * Get module name.\n */\n StackingAreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'StackingAreaSeries';\n };\n /**\n * To find previous visible series\n */\n StackingAreaSeries.prototype.getPreviousSeries = function (series) {\n var seriesCollection = series.chart.visibleSeries;\n for (var i = 0, length_1 = seriesCollection.length; i < length_1; i++) {\n if (series.index === seriesCollection[i].index && i !== 0) {\n return seriesCollection[i - 1];\n }\n }\n return seriesCollection[0];\n };\n return StackingAreaSeries;\n}(LineBase));\nexport { StackingAreaSeries };\n","import { withInRange, getPoint, PathOption, drawSymbol, Size, Rect, markerAnimate, TransformToVisible } from '../../common/utils/helper';\nimport { pointRender } from '../../common/model/constants';\n/**\n * `ScatterSeries` module is used to render the scatter series.\n */\nvar ScatterSeries = /** @class */ (function () {\n function ScatterSeries() {\n }\n /**\n * Render the scatter series.\n * @return {void}\n * @private\n */\n ScatterSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var seriesIndex = series.index;\n var marker = series.marker;\n var border = series.border;\n var visiblePoints = series.points;\n var pointIndex;\n var symbolId;\n var shapeOption;\n var argsData;\n var getCoordinate = series.chart.chartAreaType === 'PolarRadar' ? TransformToVisible : getPoint;\n for (var _i = 0, visiblePoints_1 = visiblePoints; _i < visiblePoints_1.length; _i++) {\n var point = visiblePoints_1[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n symbolId = series.chart.element.id + '_Series_' + seriesIndex + '_Point_' + point.index;\n argsData = {\n cancel: false, name: pointRender, series: series, point: point,\n fill: series.setPointColor(point, series.interior),\n border: series.setBorderColor(point, { width: series.border.width, color: series.border.color }),\n height: marker.height, width: marker.width, shape: marker.shape\n };\n series.chart.trigger(pointRender, argsData);\n if (!argsData.cancel) {\n point.symbolLocations.push(getCoordinate(point.xValue, point.yValue, xAxis, yAxis, isInverted, series));\n point.color = argsData.fill;\n shapeOption = new PathOption(symbolId, argsData.fill, argsData.border.width, argsData.border.color, series.opacity, null);\n series.seriesElement.appendChild(drawSymbol(point.symbolLocations[0], argsData.shape, new Size(argsData.width, argsData.height), marker.imageUrl, shapeOption, point.x.toString() + ':' + point.yValue.toString()));\n point.regions.push(new Rect(point.symbolLocations[0].x - marker.width, point.symbolLocations[0].y - marker.height, 2 * marker.width, 2 * marker.height));\n point.marker = {\n border: argsData.border, fill: argsData.fill,\n height: argsData.height, visible: true,\n width: argsData.width, shape: argsData.shape\n };\n }\n else {\n point.marker = { visible: true };\n }\n }\n }\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n ScatterSeries.prototype.doAnimation = function (series) {\n var duration = series.animation.duration;\n var delay = series.animation.delay;\n var rectElements = series.seriesElement.childNodes;\n var count = 1;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (!point.symbolLocations.length || !rectElements[count]) {\n continue;\n }\n markerAnimate(rectElements[count], delay, duration, series, point.index, point.symbolLocations[0], false);\n count++;\n }\n };\n /**\n * Get module name.\n */\n ScatterSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'ScatterSeries';\n };\n /**\n * To destroy the scatter.\n * @return {void}\n */\n ScatterSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n return ScatterSeries;\n}());\nexport { ScatterSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `RangeColumnSeries` module is used to render the range column series.\n */\nvar RangeColumnSeries = /** @class */ (function (_super) {\n __extends(RangeColumnSeries, _super);\n function RangeColumnSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Range Column series.\n * @return {void}\n * @private\n */\n RangeColumnSeries.prototype.render = function (series) {\n var rect;\n var sideBySideInfo = this.getSideBySideInfo(series);\n //let origin: number = Math.max(series.yAxis.visibleRange.min, 0);\n var argsData;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var rangePoint = _a[_i];\n rangePoint.symbolLocations = [];\n rangePoint.regions = [];\n if (rangePoint.visible && withInRange(series.points[rangePoint.index - 1], rangePoint, series.points[rangePoint.index + 1], series)) {\n rect = this.getRectangle(rangePoint.xValue + sideBySideInfo.start, rangePoint.high, rangePoint.xValue + sideBySideInfo.end, rangePoint.low, series);\n argsData = this.triggerEvent(series, rangePoint, series.interior, { width: series.border.width, color: series.border.color });\n if (!argsData.cancel) {\n this.updateSymbolLocation(rangePoint, rect, series);\n this.drawRectangle(series, rangePoint, rect, argsData);\n }\n }\n }\n };\n /**\n * Get module name.\n */\n RangeColumnSeries.prototype.getModuleName = function () {\n return 'RangeColumnSeries';\n /**\n * return the module name\n */\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n RangeColumnSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * To destroy the range column series.\n * @return {void}\n * @private\n */\n RangeColumnSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return RangeColumnSeries;\n}(ColumnBase));\nexport { RangeColumnSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PathOption, withInRange, subArraySum } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `WaterfallSeries` module is used to render the waterfall series.\n */\nvar WaterfallSeries = /** @class */ (function (_super) {\n __extends(WaterfallSeries, _super);\n function WaterfallSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render waterfall series.\n * @return {void}\n * @private\n */\n WaterfallSeries.prototype.render = function (series) {\n var rect;\n var sideBySideInfo = this.getSideBySideInfo(series);\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var argsData;\n var prevEndValue = 0;\n var direction = '';\n var currentEndValue = 0;\n var originValue;\n var prevRegion = null;\n var y;\n var isInversed = series.chart.requireInvertedAxis;\n var intermediateOrigin = 0;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n //Calcute the current point value to render waterfall series.\n var isSum = this.isIntermediateSum(series, point.index);\n var totalSum = this.isSumIndex(series, point.index);\n currentEndValue += isSum || totalSum === true ? 0 : point.yValue;\n //Calcute the origin value for points\n originValue = (isSum === true ? intermediateOrigin : ((prevEndValue !== null && !totalSum) ? prevEndValue : origin));\n rect = this.getRectangle(point.xValue + sideBySideInfo.start, currentEndValue, point.xValue + sideBySideInfo.end, originValue, series);\n argsData = this.triggerPointRenderEvent(series, point);\n //intermediateOrigin is used only for imtermediate data \n if (isSum) {\n intermediateOrigin = currentEndValue;\n }\n prevEndValue = currentEndValue;\n if (!argsData.cancel) {\n this.updateSymbolLocation(point, rect, series);\n this.drawRectangle(series, point, rect, argsData);\n }\n var currentRegion = point.regions[0];\n if (prevRegion !== null) {\n var prevLeft = isInversed ? prevRegion.x : prevRegion.y;\n var currentLeft = isInversed ? currentRegion.x : currentRegion.y;\n var prevBottom = isInversed ? prevRegion.x + prevRegion.width : prevRegion.y + prevRegion.height;\n var currentBottom = isInversed ?\n currentRegion.x + currentRegion.width : currentRegion.y + currentRegion.height;\n if (Math.round(prevLeft) === Math.round(currentLeft) ||\n Math.round(prevBottom) === Math.round(currentLeft)) {\n y = isInversed ? currentRegion.x : currentRegion.y;\n }\n else {\n y = currentBottom;\n }\n if (isInversed) {\n direction = direction.concat('M' + ' ' + y + ' ' + (prevRegion.y + prevRegion.height) + ' ' +\n 'L' + ' ' + y + ' ' + currentRegion.y + ' ');\n }\n else {\n direction = direction.concat('M' + ' ' + prevRegion.x + ' ' + y + ' ' +\n 'L' + ' ' + (currentRegion.x + currentRegion.width) + ' ' + y + ' ');\n }\n }\n prevRegion = point.regions[0];\n }\n }\n var options = new PathOption(series.chart.element.id + '_Series_' + series.index + '_Connector_', 'none', series.connector.width, series.connector.color, series.opacity, series.connector.dashArray, direction);\n var element = series.chart.renderer.drawPath(options);\n if (series.chart.animateSeries) {\n element.style.visibility = 'hidden';\n }\n series.seriesElement.appendChild(element);\n };\n /**\n * To check intermediateSumIndex in waterfall series.\n * @return boolean\n * @private\n */\n WaterfallSeries.prototype.isIntermediateSum = function (series, index) {\n if (series.intermediateSumIndexes !== undefined && series.intermediateSumIndexes.indexOf(index) !== -1) {\n return true;\n }\n return false;\n };\n /**\n * To check sumIndex in waterfall series.\n * @return boolean\n * @private\n */\n WaterfallSeries.prototype.isSumIndex = function (series, index) {\n if (series.sumIndexes !== undefined && series.sumIndexes.indexOf(index) !== -1) {\n return true;\n }\n return false;\n };\n /**\n * To trigger the point rendering event for waterfall series.\n * @return IPointRenderEventArgs\n * @private\n */\n WaterfallSeries.prototype.triggerPointRenderEvent = function (series, point) {\n var color;\n var isSum = this.isIntermediateSum(series, point.index);\n var totalSum = this.isSumIndex(series, point.index);\n if (isSum || totalSum) {\n color = series.summaryFillColor;\n }\n else if (point.y < 0) {\n color = series.negativeFillColor;\n }\n else {\n color = series.interior;\n }\n return this.triggerEvent(series, point, color, { color: series.border.color, width: series.border.width });\n };\n /**\n * Add sumIndex and intermediateSumIndex data.\n * @return {object[]}\n * @private\n */\n WaterfallSeries.prototype.processWaterfallData = function (json, series) {\n var data = json;\n var length = json.length;\n var index;\n var intermediateSum = series.intermediateSumIndexes;\n var sumIndex = series.sumIndexes;\n if (intermediateSum !== undefined && intermediateSum.length > 0) {\n for (var i = 0; i < intermediateSum.length; i++) {\n for (var j = 0; j < data.length; j++) {\n if (j === intermediateSum[i]) {\n if (i === 0) {\n index = subArraySum(data, -1, intermediateSum[i], null, series);\n }\n else {\n index = subArraySum(data, intermediateSum[i - 1], intermediateSum[i], null, series);\n }\n data[j][series.yName] = index;\n }\n }\n }\n }\n if (sumIndex !== undefined && sumIndex.length > 0) {\n for (var k = 0; k < sumIndex.length; k++) {\n for (var j = 0; j < data.length; j++) {\n if (j === sumIndex[k]) {\n if (intermediateSum !== undefined) {\n index = subArraySum(data, -1, sumIndex[k], sumIndex, series);\n }\n else {\n index = subArraySum(data, -1, sumIndex[k], null, series);\n }\n data[j][series.yName] = index;\n }\n }\n }\n }\n return data;\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n WaterfallSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * Get module name.\n */\n WaterfallSeries.prototype.getModuleName = function () {\n return 'WaterfallSeries';\n /**\n * return the module name\n */\n };\n /**\n * To destroy the waterfall series.\n * @return {void}\n * @private\n */\n WaterfallSeries.prototype.destroy = function (chart) {\n /**\n * Destroys the waterfall series.\n */\n };\n return WaterfallSeries;\n}(ColumnBase));\nexport { WaterfallSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `HiloSeries` module is used to render the hilo series.\n */\nvar HiloSeries = /** @class */ (function (_super) {\n __extends(HiloSeries, _super);\n function HiloSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Hiloseries.\n * @return {void}\n * @private\n */\n HiloSeries.prototype.render = function (series) {\n var region;\n var sideBySideInfo = this.getSideBySideInfo(series);\n var argsData;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible &&\n withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n region = this.getRectangle(point.xValue + sideBySideInfo.median, point.high, point.xValue + sideBySideInfo.median, point.low, series);\n argsData = this.triggerPointRenderEvent(series, point);\n if (!argsData.cancel) {\n if (!series.chart.requireInvertedAxis) {\n region.width = argsData.border.width;\n region.x = region.x - (region.width / 2);\n }\n else {\n region.height = argsData.border.width;\n region.y = region.y - (region.height / 2);\n }\n argsData.border.width = 0;\n this.updateSymbolLocation(point, region, series);\n this.drawRectangle(series, point, region, argsData);\n }\n }\n }\n };\n /**\n * To trigger the point rendering event.\n * @return {void}\n * @private\n */\n HiloSeries.prototype.triggerPointRenderEvent = function (series, point) {\n var border = { color: series.fill, width: Math.max(series.border.width, 2) };\n return _super.prototype.triggerEvent.call(this, series, point, series.interior, border);\n };\n /**\n * Get module name.\n */\n HiloSeries.prototype.getModuleName = function () {\n return 'HiloSeries';\n /**\n * return the module name\n */\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n HiloSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * To destroy the Hilo series.\n * @return {void}\n * @private\n */\n HiloSeries.prototype.destroy = function (chart) {\n /**\n * Destroys the Hilo Series\n */\n };\n return HiloSeries;\n}(ColumnBase));\nexport { HiloSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange, PathOption } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `HiloOpenCloseSeries` module is used to render the hiloOpenClose series.\n */\nvar HiloOpenCloseSeries = /** @class */ (function (_super) {\n __extends(HiloOpenCloseSeries, _super);\n function HiloOpenCloseSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render HiloOpenCloseSeries series.\n * @return {void}\n * @private\n */\n HiloOpenCloseSeries.prototype.render = function (series) {\n var highLowRect;\n var open;\n var close;\n var sideBySideInfo = this.getSideBySideInfo(series);\n var argsData;\n var borderWidth = Math.max(series.border.width, 2);\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible &&\n withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n //highlow\n highLowRect = this.getRectangle(point.xValue + sideBySideInfo.start, Math.max(point.high, point.low), point.xValue + sideBySideInfo.end, Math.min(point.high, point.low), series);\n point.regions.push(this.getRectangle(point.xValue + sideBySideInfo.median, Math.max(point.high, point.low), point.xValue + sideBySideInfo.median, Math.min(point.high, point.low), series));\n this.updateTickRegion(!series.chart.requireInvertedAxis, point.regions[0], borderWidth);\n //open\n point.regions.push(this.getRectangle(point.xValue + sideBySideInfo.start, Math.max(point.open, point.close), point.xValue + sideBySideInfo.median, Math.max(point.open, point.close), series));\n //close\n point.regions.push(this.getRectangle(point.xValue + sideBySideInfo.median, Math.min(point.open, point.close), point.xValue + sideBySideInfo.end, Math.min(point.open, point.close), series));\n argsData = this.triggerPointRenderEvent(series, point);\n if (!argsData.cancel) {\n this.updateSymbolLocation(point, point.regions[0], series);\n var open_1 = { x: point.regions[1].x, y: point.regions[1].y };\n var close_1 = { x: point.regions[2].x, y: point.regions[2].y };\n this.drawHiloOpenClosePath(series, point, open_1, close_1, highLowRect, argsData);\n }\n this.updateTickRegion(series.chart.requireInvertedAxis, point.regions[1], borderWidth);\n this.updateTickRegion(series.chart.requireInvertedAxis, point.regions[2], borderWidth);\n }\n }\n };\n /**\n * Updates the tick region\n */\n HiloOpenCloseSeries.prototype.updateTickRegion = function (horizontal, region, borderWidth) {\n if (horizontal) {\n region.x -= borderWidth / 2;\n region.width = borderWidth;\n }\n else {\n region.y -= borderWidth / 2;\n region.height = borderWidth;\n }\n };\n /**\n * Trigger point rendering event\n */\n HiloOpenCloseSeries.prototype.triggerPointRenderEvent = function (series, point) {\n var fill = (point.open <= point.close) ? series.bearFillColor : series.bullFillColor;\n var border = { color: series.border.color, width: Math.max(series.border.width, 1) };\n return this.triggerEvent(series, point, fill, border);\n };\n /**\n * To draw the rectangle for points.\n * @return {void}\n * @private\n */\n HiloOpenCloseSeries.prototype.drawHiloOpenClosePath = function (series, point, open, close, rect, argsData) {\n // region highlow\n var direction;\n var options;\n if (series.chart.requireInvertedAxis) {\n direction = ('M' + ' ' + (rect.x) + ' ' + (rect.y + rect.height / 2) + ' ' +\n 'L' + ' ' + (rect.x + rect.width) + ' ' + (rect.y + rect.height / 2) + ' ');\n direction += ('M' + ' ' + (open.x) + ' ' + (rect.y + rect.height / 2) + ' ' +\n 'L' + ' ' + (open.x) + ' ' + (rect.y + rect.height) + ' ');\n direction += ('M' + ' ' + (close.x) + ' ' + (rect.y + rect.height / 2) + ' ' +\n 'L' + ' ' + (close.x) + ' ' + (rect.y) + ' ');\n }\n else {\n direction = ('M' + ' ' + (rect.x + rect.width / 2) + ' ' + (rect.y + rect.height) + ' ' +\n 'L' + ' ' + (rect.x + rect.width / 2) + ' ' + (rect.y) + ' ');\n //region opentick\n direction += ('M' + ' ' + (rect.x) + ' ' + (open.y) + ' ' +\n 'L' + ' ' + (rect.x + rect.width / 2) + ' ' + (open.y) + ' ');\n //region closetick\n direction += ('M' + ' ' + (rect.x + rect.width / 2) + ' ' + (close.y) + ' ' +\n 'L' + ' ' + (rect.x + rect.width) + ' ' + (close.y) + ' ');\n }\n options = new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + point.index, argsData.fill, argsData.border.width, argsData.fill, series.opacity, series.dashArray, direction);\n var element = series.chart.renderer.drawPath(options);\n element.setAttribute('aria-label', point.x.toString() + ':' + point.high.toString()\n + ':' + point.low.toString() + ':' + point.close.toString() + ':' + point.open.toString());\n series.seriesElement.appendChild(element);\n };\n /**\n * Get module name.\n */\n HiloOpenCloseSeries.prototype.getModuleName = function () {\n return 'HiloOpenCloseSeries';\n /**\n * return the module name\n */\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n HiloOpenCloseSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * To destroy the column series.\n * @return {void}\n * @private\n */\n HiloOpenCloseSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return HiloOpenCloseSeries;\n}(ColumnBase));\nexport { HiloOpenCloseSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange, getPoint, PathOption, Rect } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\n/**\n * `RangeAreaSeries` module is used to render the range area series.\n */\nvar RangeAreaSeries = /** @class */ (function (_super) {\n __extends(RangeAreaSeries, _super);\n function RangeAreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render RangeArea Series.\n * @return {void}.\n * @private\n */\n RangeAreaSeries.prototype.render = function (series) {\n var point;\n var direction = '';\n var command = 'M';\n var closed = undefined;\n var visiblePoints = this.improveChartPerformance(series);\n for (var i = 0, length_1 = visiblePoints.length; i < length_1; i++) {\n point = visiblePoints[i];\n point.symbolLocations = [];\n point.regions = [];\n var low = Math.min(point.low, point.high);\n var high = Math.max(point.low, point.high);\n if (series.yAxis.isInversed) {\n var temp = low;\n low = high;\n high = temp;\n }\n var lowPoint = getPoint(point.xValue, low, series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n var highPoint = getPoint(point.xValue, high, series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n point.symbolLocations.push(highPoint);\n point.symbolLocations.push(lowPoint);\n var rect = new Rect(Math.min(lowPoint.x, highPoint.x), Math.min(lowPoint.y, highPoint.y), Math.max(Math.abs(highPoint.x - lowPoint.x), series.marker.width), Math.max(Math.abs(highPoint.y - lowPoint.y), series.marker.width));\n if (!series.chart.requireInvertedAxis) {\n rect.x -= series.marker.width / 2;\n }\n else {\n rect.y -= series.marker.width / 2;\n }\n point.regions.push(rect);\n //Path to connect the high points\n if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n direction = direction.concat(command + ' ' + (lowPoint.x) + ' ' + (lowPoint.y) + ' ');\n closed = false;\n if ((i + 1 < visiblePoints.length && !visiblePoints[i + 1].visible)\n || i === visiblePoints.length - 1) {\n // Path to connect the low points\n direction = this.closeRangeAreaPath(visiblePoints, point, series, direction, i);\n command = 'M';\n direction = direction.concat(' ' + 'Z');\n closed = true;\n }\n command = 'L';\n }\n else {\n if (closed === false && i !== 0) {\n direction = this.closeRangeAreaPath(visiblePoints, point, series, direction, i);\n closed = true;\n }\n command = 'M';\n point.symbolLocations = [];\n }\n }\n var name = series.category === 'Indicator' ? series.chart.element.id + '_Indicator_' + series.index + '_' + series.name :\n series.chart.element.id + '_Series_' + series.index;\n var options = new PathOption(name, series.interior, series.border.width, series.border.color, series.opacity, series.dashArray, direction);\n this.appendLinePath(options, series, '');\n this.renderMarker(series);\n };\n /**\n * path for rendering the low points\n * @return {void}.\n * @private\n */\n RangeAreaSeries.prototype.closeRangeAreaPath = function (visiblePoints, point, series, direction, i) {\n for (var j = i; j >= 0; j--) {\n if (visiblePoints[j].visible && visiblePoints[j].symbolLocations[0]) {\n point = visiblePoints[j];\n direction += 'L' + ' ' + (point.symbolLocations[0].x) + ' ' + ((point.symbolLocations[0].y)) + ' ';\n }\n else {\n break;\n }\n }\n return direction;\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n RangeAreaSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n /**\n * Get module name.\n */\n RangeAreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'RangeAreaSeries';\n };\n /**\n * To destroy the line series.\n * @return {void}\n * @private\n */\n RangeAreaSeries.prototype.destroy = function (chart) {\n /**\n * Destroys range area series\n */\n };\n return RangeAreaSeries;\n}(LineBase));\nexport { RangeAreaSeries };\n","import { withInRange, getPoint, PathOption, drawSymbol, Size, Rect, markerAnimate } from '../../common/utils/helper';\nimport { pointRender } from '../../common/model/constants';\n/**\n * `BubbleSeries` module is used to render the bubble series.\n */\nvar BubbleSeries = /** @class */ (function () {\n function BubbleSeries() {\n }\n /**\n * Render the Bubble series.\n * @return {void}\n * @private\n */\n BubbleSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var marker = series.marker;\n var visiblePoints = series.points;\n var shapeOption;\n var argsData;\n //let bubbleMode: RadiusMode = bubbleOptions.radiusMode;\n var segmentRadius;\n var radius;\n var value = Math.max(series.chart.initialClipRect.height, series.chart.initialClipRect.width);\n var percentChange = value / 100;\n var maxRadius = series.maxRadius * percentChange;\n var minRadius = series.minRadius * percentChange;\n var maximumSize = null;\n var maxValue = null;\n if ((series.maxRadius === null || series.minRadius === null)) {\n for (var _i = 0, _a = series.chart.visibleSeries; _i < _a.length; _i++) {\n var value_1 = _a[_i];\n if (value_1.type === 'Bubble' && value_1.visible === true && (value_1.maxRadius === null || value_1.minRadius === null)) {\n maximumSize = value_1.sizeMax > maximumSize ? value_1.sizeMax : maximumSize;\n }\n }\n maxValue = (value / 5) / 2;\n minRadius = maxRadius = 1;\n radius = maxValue * maxRadius;\n }\n else {\n maximumSize = series.sizeMax;\n radius = maxRadius - minRadius;\n }\n for (var _b = 0, visiblePoints_1 = visiblePoints; _b < visiblePoints_1.length; _b++) {\n var bubblePoint = visiblePoints_1[_b];\n bubblePoint.symbolLocations = [];\n bubblePoint.regions = [];\n if (bubblePoint.visible &&\n withInRange(visiblePoints[bubblePoint.index - 1], bubblePoint, visiblePoints[bubblePoint.index + 1], series)) {\n if ((series.maxRadius === null || series.minRadius === null)) {\n segmentRadius = radius * Math.abs(+bubblePoint.size / maximumSize);\n }\n else {\n segmentRadius = minRadius + radius * Math.abs(+bubblePoint.size / maximumSize);\n }\n segmentRadius = segmentRadius || minRadius;\n argsData = {\n cancel: false, name: pointRender, series: series, point: bubblePoint,\n fill: series.setPointColor(bubblePoint, series.interior),\n border: series.setBorderColor(bubblePoint, { width: series.border.width, color: series.border.color }),\n height: 2 * segmentRadius, width: 2 * segmentRadius\n };\n series.chart.trigger(pointRender, argsData);\n if (!argsData.cancel) {\n bubblePoint.symbolLocations.push(getPoint(bubblePoint.xValue, bubblePoint.yValue, xAxis, yAxis, isInverted));\n bubblePoint.color = argsData.fill;\n shapeOption = new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + bubblePoint.index, argsData.fill, argsData.border.width, argsData.border.color, series.opacity, null);\n series.seriesElement.appendChild(drawSymbol(bubblePoint.symbolLocations[0], 'Circle', new Size(argsData.width, argsData.height), marker.imageUrl, shapeOption, bubblePoint.x.toString() + ':' + bubblePoint.yValue.toString()));\n bubblePoint.regions.push(new Rect(bubblePoint.symbolLocations[0].x - segmentRadius, bubblePoint.symbolLocations[0].y - segmentRadius, 2 * segmentRadius, 2 * segmentRadius));\n bubblePoint.marker = {\n border: argsData.border, fill: argsData.fill,\n height: argsData.height, visible: true,\n shape: 'Circle', width: argsData.width\n };\n }\n else {\n bubblePoint.marker = { visible: false };\n }\n }\n }\n };\n /**\n * To destroy the Bubble.\n * @return {void}\n * @private\n */\n BubbleSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n /**\n * Get module name.\n */\n BubbleSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'BubbleSeries';\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n BubbleSeries.prototype.doAnimation = function (series) {\n var duration = series.animation.duration;\n var delay = series.animation.delay;\n var rectElements = series.seriesElement.childNodes;\n var count = 1;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var bubblePoint = _a[_i];\n if (!bubblePoint.symbolLocations.length) {\n continue;\n }\n markerAnimate(rectElements[count], delay, duration, series, bubblePoint.index, bubblePoint.symbolLocations[0], false);\n count++;\n }\n };\n return BubbleSeries;\n}());\nexport { BubbleSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ChartLocation, ControlPoints } from '../../common/utils/helper';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { LineBase } from './line-base';\n/**\n * render Line series\n */\nvar SplineBase = /** @class */ (function (_super) {\n __extends(SplineBase, _super);\n /** @private */\n function SplineBase(chartModule) {\n var _this = _super.call(this, chartModule) || this;\n _this.splinePoints = [];\n return _this;\n }\n /**\n * To find the control points for spline.\n * @return {void}\n * @private\n */\n SplineBase.prototype.findSplinePoint = function (series) {\n var value;\n var points = this.filterEmptyPoints(series);\n this.splinePoints = this.findSplineCoefficients(points, series);\n if (points.length > 1) {\n series.drawPoints = [];\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n if (point.index !== 0) {\n var previous = this.getPreviousIndex(points, point.index - 1, series);\n value = this.getControlPoints(points[previous], point, this.splinePoints[previous], this.splinePoints[point.index], series);\n series.drawPoints.push(value);\n if (point.yValue && value.controlPoint1.y && value.controlPoint2.y) {\n series.yMin = Math.floor(Math.min(series.yMin, point.yValue, value.controlPoint1.y, value.controlPoint2.y));\n series.yMax = Math.ceil(Math.max(series.yMax, point.yValue, value.controlPoint1.y, value.controlPoint2.y));\n }\n }\n }\n }\n };\n SplineBase.prototype.getPreviousIndex = function (points, i, series) {\n if (series.emptyPointSettings.mode !== 'Drop') {\n return i;\n }\n while (isNullOrUndefined(points[i]) && i > -1) {\n i = i - 1;\n }\n return i;\n };\n SplineBase.prototype.getNextIndex = function (points, i, series) {\n if (series.emptyPointSettings.mode !== 'Drop') {\n return i;\n }\n while (isNullOrUndefined(points[i]) && i < points.length) {\n i = i + 1;\n }\n return i;\n };\n SplineBase.prototype.filterEmptyPoints = function (series) {\n if (series.emptyPointSettings.mode !== 'Drop') {\n return series.points;\n }\n var points = extend([], series.points, null, true);\n for (var i = 0; i < points.length; i++) {\n points[i].index = i;\n if (points[i].isEmpty) {\n points[i].symbolLocations = [];\n points[i].regions = [];\n points.splice(i, 1);\n i--;\n }\n }\n return points;\n };\n /**\n * To find the natural spline.\n * @return {void}\n * @private\n */\n SplineBase.prototype.findSplineCoefficients = function (points, series) {\n var count = points.length;\n var ySpline = [];\n var ySplineDuplicate = [];\n var coefficient1;\n var coefficient2;\n var coefficient3;\n var dy1;\n var dy2;\n var dx = [];\n var dy = [];\n var slope = [];\n var interPoint;\n var slopeLength;\n var cardinalSplineTension = series.cardinalSplineTension ? series.cardinalSplineTension : 0.5;\n cardinalSplineTension = cardinalSplineTension < 0 ? 0 : cardinalSplineTension > 1 ? 1 : cardinalSplineTension;\n switch (series.splineType) {\n case 'Monotonic':\n for (var i = 0; i < count - 1; i++) {\n dx[i] = points[i + 1].xValue - points[i].xValue;\n dy[i] = points[i + 1].yValue - points[i].yValue;\n slope[i] = dy[i] / dx[i];\n }\n //interpolant points\n slopeLength = slope.length;\n // to find the first and last co-efficient value\n ySpline[0] = slope[0];\n ySpline[count - 1] = slope[slopeLength - 1];\n //to find the other co-efficient values\n for (var j = 0; j < dx.length; j++) {\n if (slopeLength > j + 1) {\n if (slope[j] * slope[j + 1] <= 0) {\n ySpline[j + 1] = 0;\n }\n else {\n interPoint = dx[j] + dx[j + 1];\n ySpline[j + 1] = 3 * interPoint / ((interPoint + dx[j + 1]) / slope[j] + (interPoint + dx[j]) / slope[j + 1]);\n }\n }\n }\n break;\n case 'Cardinal':\n for (var i = 0; i < count; i++) {\n if (i === 0) {\n ySpline[i] = (count > 2) ? (cardinalSplineTension * (points[i + 2].xValue - points[i].xValue)) : 0;\n }\n else if (i === (count - 1)) {\n ySpline[i] = (count > 2) ? (cardinalSplineTension * (points[count - 1].xValue - points[count - 3].xValue)) : 0;\n }\n else {\n ySpline[i] = (cardinalSplineTension * (points[i + 1].xValue - points[i - 1].xValue));\n }\n }\n break;\n default:\n if (series.splineType === 'Clamped') {\n var firstIndex = (points[1].yValue - points[0].yValue) / (points[1].xValue - points[0].xValue);\n var lastIndex = (points[count - 1].xValue - points[count - 2].xValue) /\n (points[count - 1].yValue - points[count - 2].yValue);\n ySpline[0] = (3 * (points[1].yValue - points[0].yValue)) / (points[1].xValue - points[0].xValue) - 3;\n ySplineDuplicate[0] = 0.5;\n ySpline[points.length - 1] = (3 * (points[points.length - 1].yValue - points[points.length - 2].yValue)) /\n (points[points.length - 1].xValue - points[points.length - 2].xValue);\n ySpline[0] = ySplineDuplicate[0] = Math.abs(ySpline[0]) === Infinity ? 0 : ySpline[0];\n ySpline[points.length - 1] = ySplineDuplicate[points.length - 1] = Math.abs(ySpline[points.length - 1]) === Infinity ?\n 0 : ySpline[points.length - 1];\n }\n else {\n // assigning the first and last value as zero\n ySpline[0] = ySplineDuplicate[0] = 0;\n ySpline[points.length - 1] = 0;\n }\n for (var i = 1; i < count - 1; i++) {\n coefficient1 = points[i].xValue - points[i - 1].xValue;\n coefficient2 = points[i + 1].xValue - points[i - 1].xValue;\n coefficient3 = points[i + 1].xValue - points[i].xValue;\n dy1 = points[i + 1].yValue - points[i].yValue || null;\n dy2 = points[i].yValue - points[i - 1].yValue || null;\n if (coefficient1 === 0 || coefficient2 === 0 || coefficient3 === 0) {\n ySpline[i] = 0;\n ySplineDuplicate[i] = 0;\n }\n else {\n var p = 1 / (coefficient1 * ySpline[i - 1] + 2 * coefficient2);\n ySpline[i] = -p * coefficient3;\n ySplineDuplicate[i] = p * (6 * (dy1 / coefficient3 - dy2 / coefficient1) - coefficient1 * ySplineDuplicate[i - 1]);\n }\n }\n for (var k = count - 2; k >= 0; k--) {\n ySpline[k] = ySpline[k] * ySpline[k + 1] + ySplineDuplicate[k];\n }\n break;\n }\n return ySpline;\n };\n /**\n * To find the control points for spline.\n * @return {void}\n * @private\n */\n SplineBase.prototype.getControlPoints = function (point1, point2, ySpline1, ySpline2, series) {\n var controlPoint1;\n var controlPoint2;\n var point;\n var ySplineDuplicate1 = ySpline1;\n var ySplineDuplicate2 = ySpline2;\n switch (series.splineType) {\n case 'Cardinal':\n if (series.xAxis.valueType === 'DateTime') {\n ySplineDuplicate1 = ySpline1 / this.dateTimeInterval(series);\n ySplineDuplicate2 = ySpline2 / this.dateTimeInterval(series);\n }\n controlPoint1 = new ChartLocation(point1.xValue + ySpline1 / 3, point1.yValue + ySplineDuplicate1 / 3);\n controlPoint2 = new ChartLocation(point2.xValue - ySpline2 / 3, point2.yValue - ySplineDuplicate2 / 3);\n point = new ControlPoints(controlPoint1, controlPoint2);\n break;\n case 'Monotonic':\n var value = (point2.xValue - point1.xValue) / 3;\n controlPoint1 = new ChartLocation(point1.xValue + value, point1.yValue + ySpline1 * value);\n controlPoint2 = new ChartLocation(point2.xValue - value, point2.yValue - ySpline2 * value);\n point = new ControlPoints(controlPoint1, controlPoint2);\n break;\n default:\n var one3 = 1 / 3.0;\n var deltaX2 = (point2.xValue - point1.xValue);\n deltaX2 = deltaX2 * deltaX2;\n var y1 = one3 * (((2 * point1.yValue) + point2.yValue) - one3 * deltaX2 * (ySpline1 + 0.5 * ySpline2));\n var y2 = one3 * ((point1.yValue + (2 * point2.yValue)) - one3 * deltaX2 * (0.5 * ySpline1 + ySpline2));\n controlPoint1 = new ChartLocation((2 * (point1.xValue) + (point2.xValue)) * one3, y1);\n controlPoint2 = new ChartLocation(((point1.xValue) + 2 * (point2.xValue)) * one3, y2);\n point = new ControlPoints(controlPoint1, controlPoint2);\n break;\n }\n return point;\n };\n /**\n * calculate datetime interval in hours\n *\n */\n SplineBase.prototype.dateTimeInterval = function (series) {\n var interval = series.xAxis.actualIntervalType;\n var intervalInMilliseconds;\n if (interval === 'Years') {\n intervalInMilliseconds = 365 * 24 * 60 * 60 * 1000;\n }\n else if (interval === 'Months') {\n intervalInMilliseconds = 30 * 24 * 60 * 60 * 1000;\n }\n else if (interval === 'Days') {\n intervalInMilliseconds = 24 * 60 * 60 * 1000;\n }\n else if (interval === 'Hours') {\n intervalInMilliseconds = 60 * 60 * 1000;\n }\n else if (interval === 'Minutes') {\n intervalInMilliseconds = 60 * 1000;\n }\n else if (interval === 'Seconds') {\n intervalInMilliseconds = 1000;\n }\n else {\n intervalInMilliseconds = 30 * 24 * 60 * 60 * 1000;\n }\n return intervalInMilliseconds;\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n SplineBase.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n return SplineBase;\n}(LineBase));\nexport { SplineBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PathOption, getPoint, withInRange, TransformToVisible } from '../../common/utils/helper';\nimport { SplineBase } from './spline-base';\n/**\n * `SplineSeries` module is used to render the spline series.\n */\nvar SplineSeries = /** @class */ (function (_super) {\n __extends(SplineSeries, _super);\n function SplineSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the spline series.\n * @return {void}\n * @private\n */\n SplineSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var chart = series.chart;\n var marker = series.marker;\n var ySpline;\n var options;\n var firstPoint = null;\n var secondPoint = null;\n var direction = '';\n var pt1;\n var pt2;\n var bpt1;\n var bpt2;\n var data;\n var controlPointCount = 0;\n var controlPoint1;\n var controlPoint2;\n var startPoint = 'M';\n var points = this.filterEmptyPoints(series);\n var previous;\n var getCoordinate = series.chart.chartAreaType === 'PolarRadar' ? TransformToVisible : getPoint;\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n previous = this.getPreviousIndex(points, point.index - 1, series);\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(points[previous], point, points[this.getNextIndex(points, point.index - 1, series)], series)) {\n if (firstPoint !== null) {\n data = series.drawPoints[previous];\n controlPoint1 = data.controlPoint1;\n controlPoint2 = data.controlPoint2;\n pt1 = getCoordinate(firstPoint.xValue, firstPoint.yValue, xAxis, yAxis, isInverted, series);\n pt2 = getCoordinate(point.xValue, point.yValue, xAxis, yAxis, isInverted, series);\n bpt1 = getCoordinate(controlPoint1.x, controlPoint1.y, xAxis, yAxis, isInverted, series);\n bpt2 = getCoordinate(controlPoint2.x, controlPoint2.y, xAxis, yAxis, isInverted, series);\n direction = direction.concat((startPoint + ' ' + (pt1.x) + ' ' + (pt1.y) + ' ' + 'C' + ' ' + (bpt1.x) + ' '\n + (bpt1.y) + ' ' + (bpt2.x) + ' ' + (bpt2.y) + ' ' + (pt2.x) + ' ' + (pt2.y) + ' '));\n startPoint = 'L';\n }\n firstPoint = point;\n this.storePointLocation(point, series, isInverted, getCoordinate);\n }\n else {\n startPoint = 'M';\n firstPoint = null;\n point.symbolLocations = [];\n }\n }\n var name = series.category === 'TrendLine' ? series.chart.element.id + '_Series_' + series.sourceIndex + '_TrendLine_' + series.index :\n series.chart.element.id + '_Series_' + series.index;\n options = new PathOption(name, 'transparent', series.width, series.interior, series.opacity, series.dashArray, direction);\n this.appendLinePath(options, series, '');\n this.renderMarker(series);\n };\n /**\n * Get module name.\n */\n SplineSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'SplineSeries';\n };\n /**\n * To destroy the spline.\n * @return {void}\n * @private\n */\n SplineSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n return SplineSeries;\n}(SplineBase));\nexport { SplineSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PathOption, getPoint, withInRange, TransformToVisible } from '../../common/utils/helper';\nimport { SplineBase } from './spline-base';\n/**\n * `SplineAreaSeries` module used to render the spline area series.\n */\nvar SplineAreaSeries = /** @class */ (function (_super) {\n __extends(SplineAreaSeries, _super);\n function SplineAreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the splineArea series.\n * @return {void}\n * @private\n */\n SplineAreaSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var firstPoint = null;\n var direction = '';\n var startPoint = null;\n var startPoint1 = null;\n var pt1;\n var pt2;\n var bpt1;\n var bpt2;\n var controlPt1;\n var controlPt2;\n var points = this.filterEmptyPoints(series);\n var pointsLength = series.points.length;\n var point;\n var previous;\n var getCoordinate = series.chart.chartAreaType === 'PolarRadar' ? TransformToVisible : getPoint;\n var origin = series.chart.chartAreaType === 'PolarRadar' ? series.points[0].yValue :\n Math.max(series.yAxis.visibleRange.min, 0);\n for (var i = 0; i < pointsLength; i++) {\n point = series.points[i];\n point.symbolLocations = [];\n point.regions = [];\n previous = this.getPreviousIndex(points, point.index - 1, series);\n if (point.visible &&\n withInRange(points[previous], point, points[this.getNextIndex(points, point.index - 1, series)], series)) {\n if (firstPoint) {\n controlPt1 = series.drawPoints[previous].controlPoint1;\n controlPt2 = series.drawPoints[previous].controlPoint2;\n pt1 = getCoordinate(firstPoint.xValue, firstPoint.yValue, xAxis, yAxis, isInverted, series);\n pt2 = getCoordinate(point.xValue, point.yValue, xAxis, yAxis, isInverted, series);\n bpt1 = getCoordinate(controlPt1.x, controlPt1.y, xAxis, yAxis, isInverted, series);\n bpt2 = getCoordinate(controlPt2.x, controlPt2.y, xAxis, yAxis, isInverted, series);\n direction = direction.concat(' C' + bpt1.x + ' '\n + bpt1.y + ' ' + bpt2.x + ' ' + bpt2.y + ' ' + pt2.x + ' ' + pt2.y + ' ');\n }\n else {\n // Start point for the current path\n startPoint = getCoordinate(point.xValue, origin, xAxis, yAxis, isInverted, series);\n direction += ('M ' + startPoint.x + ' ' + startPoint.y + ' ');\n // First Point to draw the area path\n startPoint1 = getCoordinate(point.xValue, point.yValue, xAxis, yAxis, isInverted, series);\n direction += ('L ' + startPoint1.x + ' ' + startPoint1.y + ' ');\n }\n this.storePointLocation(point, series, isInverted, getCoordinate);\n firstPoint = point;\n }\n else {\n firstPoint = null;\n point.symbolLocations = [];\n }\n if (((i + 1 < pointsLength && !series.points[i + 1].visible) || i === pointsLength - 1)\n && pt2 && startPoint) {\n startPoint = getCoordinate(point.xValue, origin, xAxis, yAxis, isInverted, series);\n direction = direction.concat('L ' + (startPoint.x) + ' ' + (startPoint.y));\n }\n }\n this.appendLinePath(new PathOption(series.chart.element.id + '_Series_' + series.index, series.interior, series.border.width, series.border.color, series.opacity, series.dashArray, direction), series, '');\n this.renderMarker(series);\n };\n /**\n * Get module name.\n */\n SplineAreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'SplineAreaSeries';\n };\n /**\n * To destroy the spline.\n * @return {void}\n * @private\n */\n SplineAreaSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n return SplineAreaSeries;\n}(SplineBase));\nexport { SplineAreaSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { LineBase } from '../series/line-base';\nimport { Series, Points } from '../series/chart-series';\nimport { RectOption, Rect } from '../../common/utils/helper';\nimport { findClipRect } from '../../common/utils/helper';\n/**\n * Technical Analysis module helps to predict the market trend\n */\nvar TechnicalAnalysis = /** @class */ (function (_super) {\n __extends(TechnicalAnalysis, _super);\n function TechnicalAnalysis() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the collection of series, that are used to represent the given technical indicator\n * @private\n */\n TechnicalAnalysis.prototype.initSeriesCollection = function (indicator, chart) {\n indicator.targetSeries = [];\n var signalLine = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(signalLine, indicator, 'SignalLine', indicator.fill, indicator.width, chart);\n };\n /**\n * Initializes the properties of the given series\n * @private\n */\n TechnicalAnalysis.prototype.setSeriesProperties = function (series, indicator, name, fill, width, chart) {\n series.name = name;\n series.xName = 'x';\n series.yName = 'y';\n series.fill = fill || '#606eff';\n series.dashArray = indicator.dashArray;\n series.width = width;\n series.xAxisName = indicator.xAxisName;\n series.animation = indicator.animation;\n series.yAxisName = indicator.yAxisName;\n series.clipRectElement = indicator.clipRectElement;\n series.points = [];\n series.enableTooltip = true;\n series.interior = series.fill;\n series.category = 'Indicator';\n series.index = indicator.index;\n series.chart = chart;\n series.xMin = Infinity;\n series.xMax = -Infinity;\n series.yMin = Infinity;\n series.yMax = -Infinity;\n series.xData = [];\n series.yData = [];\n series.marker.visible = false;\n indicator.targetSeries.push(series);\n };\n /**\n * Creates the elements of a technical indicator\n * @private\n */\n TechnicalAnalysis.prototype.createIndicatorElements = function (chart, indicator, index) {\n if (indicator.seriesName || indicator.dataSource) {\n findClipRect(indicator.targetSeries[0]);\n }\n var clipRect = new Rect(0, 0, 0, 0);\n if (indicator.seriesName || indicator.dataSource) {\n clipRect = indicator.targetSeries[0].clipRect;\n }\n //defines the clip rect element\n var clipRectElement = chart.renderer.drawClipPath(new RectOption(chart.element.id + '_ChartIndicatorClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: 0, y: 0, width: clipRect.width,\n height: clipRect.height,\n }));\n //creates the group for an indicator\n indicator.indicatorElement = chart.renderer.createGroup({\n 'id': chart.element.id + 'IndicatorGroup' + index,\n 'transform': 'translate(' + clipRect.x + ',' + clipRect.y + ')',\n 'clip-path': 'url(#' + chart.element.id + '_ChartIndicatorClipRect_' + index + ')'\n });\n indicator.indicatorElement.appendChild(clipRectElement);\n //Defines a group for each series in a technical indicator\n for (var _i = 0, _a = indicator.targetSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n series.clipRectElement = clipRectElement;\n var element = series.chart.renderer.createGroup({\n 'id': series.chart.element.id + '_Indicator_' +\n indicator.index + '_' + series.name + '_Group'\n });\n indicator.indicatorElement.appendChild(element);\n series.seriesElement = element;\n }\n chart.indicatorElements.appendChild(indicator.indicatorElement);\n };\n TechnicalAnalysis.prototype.getDataPoint = function (x, y, sourcePoint, series, index, indicator) {\n if (indicator === void 0) { indicator = null; }\n var point = new Points();\n point.x = x;\n point.y = y;\n point.xValue = sourcePoint.xValue;\n point.color = series.fill;\n point.index = index;\n point.yValue = y;\n point.visible = true;\n series.xMin = Math.min(series.xMin, point.xValue);\n series.yMin = Math.min(series.yMin, point.yValue);\n series.xMax = Math.max(series.xMax, point.xValue);\n series.yMax = Math.max(series.yMax, point.yValue);\n series.xData.push(point.xValue);\n if (indicator && indicator.type === 'Macd' && series.type === 'Column') {\n if (point.y >= 0) {\n point.color = indicator.macdPositiveColor;\n }\n else {\n point.color = indicator.macdNegativeColor;\n }\n }\n return point;\n };\n TechnicalAnalysis.prototype.getRangePoint = function (x, high, low, sourcePoint, series, index, indicator) {\n if (indicator === void 0) { indicator = null; }\n var point = new Points();\n point.x = x;\n point.high = high;\n point.low = low;\n point.xValue = sourcePoint.xValue;\n point.color = series.fill;\n point.index = index;\n point.visible = true;\n series.xData.push(point.xValue);\n return point;\n };\n TechnicalAnalysis.prototype.setSeriesRange = function (points, indicator, series) {\n if (series === void 0) { series = null; }\n if (!series) {\n indicator.targetSeries[0].points = points;\n }\n else {\n series.points = points;\n }\n };\n return TechnicalAnalysis;\n}(LineBase));\nexport { TechnicalAnalysis };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { firstToLowerCase } from '../../common/utils/helper';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `SmaIndicator` module is used to render SMA indicator.\n */\nvar SmaIndicator = /** @class */ (function (_super) {\n __extends(SmaIndicator, _super);\n function SmaIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the predictions based on SMA approach\n * @private\n */\n SmaIndicator.prototype.initDataSource = function (indicator, chart) {\n var smaPoints = [];\n var points = indicator.points;\n if (points && points.length) {\n //prepare data\n var validData = points;\n var field = firstToLowerCase(indicator.field);\n var xField = 'x';\n var signalSeries = indicator.targetSeries[0];\n if (validData && validData.length && validData.length >= indicator.period) {\n //find initial average\n var average = 0;\n var sum = 0;\n for (var i = 0; i < indicator.period; i++) {\n sum += validData[i][field];\n }\n average = sum / indicator.period;\n smaPoints.push(this.getDataPoint(validData[indicator.period - 1][xField], average, validData[indicator.period - 1], signalSeries, smaPoints.length));\n var index = indicator.period;\n while (index < validData.length) {\n sum -= validData[index - indicator.period][field];\n sum += validData[index][field];\n average = sum / indicator.period;\n smaPoints.push(this.getDataPoint(validData[index][xField], average, validData[index], signalSeries, smaPoints.length));\n index++;\n }\n }\n this.setSeriesRange(smaPoints, indicator);\n }\n };\n /**\n * To destroy the SMA indicator\n * @return {void}\n * @private\n */\n SmaIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the SMA indicator\n */\n };\n /**\n * Get module name.\n */\n SmaIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'SmaIndicator';\n };\n return SmaIndicator;\n}(TechnicalAnalysis));\nexport { SmaIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { firstToLowerCase } from '../../common/utils/helper';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `EmaIndicator` module is used to render EMA indicator.\n */\nvar EmaIndicator = /** @class */ (function (_super) {\n __extends(EmaIndicator, _super);\n function EmaIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the predictions based on EMA approach\n * @private\n */\n EmaIndicator.prototype.initDataSource = function (indicator, chart) {\n var field = firstToLowerCase(indicator.field);\n var xField = 'x';\n var emaPoints = [];\n var signalSeries = indicator.targetSeries[0];\n //prepare data\n var validData = indicator.points;\n if (validData && validData.length && validData.length >= indicator.period) {\n //find initial average\n var sum = 0;\n var average = 0;\n //smoothing factor\n var k = (2 / (indicator.period + 1));\n for (var i = 0; i < indicator.period; i++) {\n sum += validData[i][field];\n }\n average = sum / indicator.period;\n emaPoints.push(this.getDataPoint(validData[indicator.period - 1][xField], average, validData[indicator.period - 1], signalSeries, emaPoints.length));\n var index = indicator.period;\n while (index < validData.length) {\n //previous average\n var prevAverage = emaPoints[index - indicator.period][signalSeries.yName];\n var yValue = (validData[index][field] - prevAverage) * k + prevAverage;\n emaPoints.push(this.getDataPoint(validData[index][xField], yValue, validData[index], signalSeries, emaPoints.length));\n index++;\n }\n }\n this.setSeriesRange(emaPoints, indicator);\n };\n /**\n * To destroy the EMA Indicator\n * @return {void}\n * @private\n */\n EmaIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the EMA Indicator\n */\n };\n /**\n * Get module name.\n */\n EmaIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'EmaIndicator';\n };\n return EmaIndicator;\n}(TechnicalAnalysis));\nexport { EmaIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { firstToLowerCase } from '../../common/utils/helper';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `TmaIndicator` module is used to render TMA indicator.\n */\nvar TmaIndicator = /** @class */ (function (_super) {\n __extends(TmaIndicator, _super);\n function TmaIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the predictions based on TMA approach\n * @private\n */\n TmaIndicator.prototype.initDataSource = function (indicator, chart) {\n var tmaPoints = [];\n var field = firstToLowerCase(indicator.field);\n var xField = 'x';\n var signalSeries = indicator.targetSeries[0];\n //prepare data\n var validData = indicator.points;\n if (validData && validData.length && validData.length >= indicator.period) {\n var signalSeries_1 = indicator.targetSeries[0];\n //prepare data\n var validData_1 = indicator.points;\n if (validData_1.length && validData_1.length >= indicator.period) {\n //smoothing factor\n var k = (2 / (indicator.period + 1));\n //find initial average\n var average = 0;\n var sum = 0;\n var sumOfSMA = 0;\n var averageSMA = 0;\n var smaValues = [];\n //sma values\n var index = 0;\n var length_1 = validData_1.length;\n var period = indicator.period;\n while (length_1 >= period) {\n sum = 0;\n index = validData_1.length - length_1;\n for (var j = index; j < index + period; j++) {\n sum = sum + validData_1[j][field];\n }\n sum = sum / period;\n smaValues.push(sum);\n length_1--;\n }\n //initial values\n for (var k_1 = 0; k_1 < period - 1; k_1++) {\n sum = 0;\n for (var j = 0; j < k_1 + 1; j++) {\n sum = sum + validData_1[j][field];\n }\n sum = sum / (k_1 + 1);\n smaValues.splice(k_1, 0, sum);\n }\n index = indicator.period;\n while (index <= smaValues.length) {\n sum = 0;\n for (var j = index - indicator.period; j < index; j++) {\n sum = sum + smaValues[j];\n }\n sum = sum / indicator.period;\n tmaPoints.push(this.getDataPoint(validData_1[index - 1][xField], sum, validData_1[index - 1], signalSeries_1, tmaPoints.length));\n index++;\n }\n }\n }\n this.setSeriesRange(tmaPoints, indicator);\n };\n /**\n * To destroy the TMA indicator.\n * @return {void}\n * @private\n */\n TmaIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the TMA Indicator\n */\n };\n /**\n * Get module name.\n */\n TmaIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'TmaIndicator';\n };\n return TmaIndicator;\n}(TechnicalAnalysis));\nexport { TmaIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `AccumulationDistributionIndicator` module is used to render accumulation distribution indicator.\n */\nvar AccumulationDistributionIndicator = /** @class */ (function (_super) {\n __extends(AccumulationDistributionIndicator, _super);\n function AccumulationDistributionIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the predictions using accumulation distribution approach\n * @private\n */\n AccumulationDistributionIndicator.prototype.initDataSource = function (indicator, chart) {\n var sourceSeries = indicator.sourceSeries;\n var adPoints = [];\n var validData = indicator.points;\n if (validData.length > 0 && validData.length > indicator.period) {\n adPoints = this.calculateADPoints(indicator, validData);\n }\n this.setSeriesRange(adPoints, indicator);\n };\n /**\n * Calculates the Accumulation Distribution values\n * @private\n */\n AccumulationDistributionIndicator.prototype.calculateADPoints = function (indicator, validData) {\n var temp = [];\n var sum = 0;\n var i = 0;\n var value = 0;\n var high = 0;\n var low = 0;\n var close = 0;\n var signalSeries = indicator.targetSeries[0];\n for (i = 0; i < validData.length; i++) {\n high = Number(validData[i].high);\n low = Number(validData[i].low);\n close = Number(validData[i].close);\n /**\n * Money Flow Multiplier = [(Close - Low) - (High - Close)] /(High - Low)\n * Money Flow Volume = Money Flow Multiplier x Volume for the Period\n * ADL = Previous ADL + Current Period's Money Flow Volume\n */\n value = ((close - low) - (high - close)) / (high - low);\n /**\n * Sum is to calculate the Y values of the Accumulation distribution indicator\n */\n sum = sum + value * Number(validData[i].volume);\n /**\n * To calculate the x and y values for the Accumulation distribution indicator\n */\n temp[i] = this.getDataPoint(validData[i].x, sum, validData[i], signalSeries, temp.length);\n }\n return temp;\n };\n /**\n * To destroy the Accumulation Distribution Technical Indicator.\n * @return {void}\n * @private\n */\n AccumulationDistributionIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the Accumulation Distribution Technical indicator\n */\n };\n /**\n * Get module name.\n */\n AccumulationDistributionIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the Indicator\n */\n return 'AccumulationDistributionIndicator';\n };\n return AccumulationDistributionIndicator;\n}(TechnicalAnalysis));\nexport { AccumulationDistributionIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `AtrIndicator` module is used to render ATR indicator.\n */\nvar AtrIndicator = /** @class */ (function (_super) {\n __extends(AtrIndicator, _super);\n function AtrIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the predictions using Average True Range approach\n * @private\n */\n AtrIndicator.prototype.initDataSource = function (indicator, chart) {\n var sourceSeries = indicator.sourceSeries;\n var atrPoints = [];\n var validData = indicator.points;\n if (validData.length > 0 && validData.length > indicator.period) {\n this.calculateATRPoints(indicator, validData);\n }\n };\n /**\n * To calculate Average True Range indicator points\n * @private\n */\n AtrIndicator.prototype.calculateATRPoints = function (indicator, validData) {\n var average = 0;\n var highLow = 0;\n var highClose = 0;\n var lowClose = 0;\n var trueRange = 0;\n var points = [];\n var temp = [];\n var period = indicator.period;\n var sum = 0;\n var y = 'y';\n var signalSeries = indicator.targetSeries[0];\n for (var i = 0; i < validData.length; i++) {\n /**\n * Current High less the current Low\n * Current High less the previous Close (absolute value)\n * Current Low less the previous Close (absolute value)\n */\n highLow = Number(validData[i].high) - Number(validData[i].low);\n if (i > 0) {\n //\n highClose = Math.abs(Number(validData[i].high) - Number(validData[i - 1].close));\n lowClose = Math.abs(Number(validData[i].low) - Number(validData[i - 1].close));\n }\n /**\n * To find the maximum of highLow, highClose, lowClose\n */\n trueRange = Math.max(highLow, highClose, lowClose);\n sum = sum + trueRange;\n /**\n * Push the x and y values for the Average true range indicator\n */\n if (i >= period) {\n average = (Number(temp[i - 1][y]) * (period - 1) + trueRange) / period;\n points.push(this.getDataPoint(validData[i].x, average, validData[i], signalSeries, points.length));\n }\n else {\n average = sum / period;\n if (i === period - 1) {\n points.push(this.getDataPoint(validData[i].x, average, validData[i], signalSeries, points.length));\n }\n }\n temp[i] = { x: validData[i].x, y: average };\n }\n this.setSeriesRange(points, indicator);\n };\n /**\n * To destroy the Average true range indicator.\n * @return {void}\n * @private\n */\n AtrIndicator.prototype.destroy = function (chart) {\n /**\n * Destroy the Average true range indicator\n */\n };\n /**\n * Get module name.\n */\n AtrIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the Indicator\n */\n return 'AtrIndicator';\n };\n return AtrIndicator;\n}(TechnicalAnalysis));\nexport { AtrIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Series } from '../series/chart-series';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `MomentumIndicator` module is used to render Momentum indicator.\n */\nvar MomentumIndicator = /** @class */ (function (_super) {\n __extends(MomentumIndicator, _super);\n function MomentumIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the collection of series to represent a momentum indicator\n * @private\n */\n MomentumIndicator.prototype.initSeriesCollection = function (indicator, chart) {\n _super.prototype.initSeriesCollection.call(this, indicator, chart);\n var upperLine = new Series(indicator, 'targetSeries', {}, true);\n _super.prototype.setSeriesProperties.call(this, upperLine, indicator, 'UpperLine', indicator.upperLine.color, indicator.upperLine.width, chart);\n };\n /**\n * Defines the predictions using momentum approach\n * @private\n */\n MomentumIndicator.prototype.initDataSource = function (indicator, chart) {\n var upperCollection = [];\n var signalCollection = [];\n var validData = indicator.points;\n if (validData && validData.length) {\n var upperSeries = indicator.targetSeries[1];\n var signalSeries = indicator.targetSeries[0];\n var length_1 = indicator.period;\n if (validData.length >= indicator.period) {\n for (var i = 0; i < validData.length; i++) {\n upperCollection.push(this.getDataPoint(validData[i].x, 100, validData[i], upperSeries, upperCollection.length));\n if (!(i < length_1)) {\n signalCollection.push(this.getDataPoint(validData[i].x, (Number(validData[i].close) / Number(validData[i - length_1].close) * 100), validData[i], signalSeries, signalCollection.length));\n }\n }\n }\n this.setSeriesRange(signalCollection, indicator, indicator.targetSeries[0]);\n this.setSeriesRange(upperCollection, indicator, indicator.targetSeries[1]);\n }\n };\n /**\n * To destroy the momentum indicator\n * @return {void}\n * @private\n */\n MomentumIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the momentum indicator\n */\n };\n /**\n * Get module name.\n */\n MomentumIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'MomentumIndicator';\n };\n return MomentumIndicator;\n}(TechnicalAnalysis));\nexport { MomentumIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Series } from '../series/chart-series';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `RsiIndicator` module is used to render RSI indicator.\n */\nvar RsiIndicator = /** @class */ (function (_super) {\n __extends(RsiIndicator, _super);\n function RsiIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Initializes the series collection to represent the RSI Indicator\n * @private\n */\n RsiIndicator.prototype.initSeriesCollection = function (indicator, chart) {\n _super.prototype.initSeriesCollection.call(this, indicator, chart);\n if (indicator.showZones) {\n var lowerLine = new Series(indicator, 'targetSeries', {}, true);\n _super.prototype.setSeriesProperties.call(this, lowerLine, indicator, 'LowerLine', indicator.lowerLine.color, indicator.lowerLine.width, chart);\n var upperLine = new Series(indicator, 'targetSeries', {}, true);\n _super.prototype.setSeriesProperties.call(this, upperLine, indicator, 'UpperLine', indicator.upperLine.color, indicator.upperLine.width, chart);\n }\n };\n /**\n * Defines the predictions using RSI approach\n * @private\n */\n RsiIndicator.prototype.initDataSource = function (indicator, chart) {\n var signalCollection = [];\n var lowerCollection = [];\n var upperCollection = [];\n var signalSeries = indicator.targetSeries[0];\n //prepare data\n var validData = indicator.points;\n if (validData.length && validData.length >= indicator.period) {\n //Find upper band and lower band values\n if (indicator.showZones) {\n for (var i = 0; i < validData.length; i++) {\n upperCollection.push(this.getDataPoint(validData[i].x, indicator.overBought, validData[i], indicator.targetSeries[1], upperCollection.length));\n lowerCollection.push(this.getDataPoint(validData[i].x, indicator.overSold, validData[i], indicator.targetSeries[2], lowerCollection.length));\n }\n }\n //Find signal line value\n var prevClose = Number(validData[0].close);\n var gain = 0;\n var loss = 0;\n for (var i = 1; i <= indicator.period; i++) {\n var close_1 = Number(validData[i].close);\n if (close_1 > prevClose) {\n gain += close_1 - prevClose;\n }\n else {\n loss += prevClose - close_1;\n }\n prevClose = close_1;\n }\n gain = gain / indicator.period;\n loss = loss / indicator.period;\n signalCollection.push(this.getDataPoint(validData[indicator.period].x, 100 - (100 / (1 + gain / loss)), validData[indicator.period], signalSeries, signalCollection.length));\n for (var j = indicator.period + 1; j < validData.length; j++) {\n var close_2 = Number(validData[j].close);\n if (close_2 > prevClose) {\n gain = (gain * (indicator.period - 1) + (close_2 - prevClose)) / indicator.period;\n loss = (loss * (indicator.period - 1)) / indicator.period;\n }\n else if (close_2 < prevClose) {\n loss = (loss * (indicator.period - 1) + (prevClose - close_2)) / indicator.period;\n gain = (gain * (indicator.period - 1)) / indicator.period;\n }\n prevClose = close_2;\n signalCollection.push(this.getDataPoint(validData[j].x, 100 - (100 / (1 + gain / loss)), validData[j], signalSeries, signalCollection.length));\n }\n }\n this.setSeriesRange(signalCollection, indicator, indicator.targetSeries[0]);\n if (indicator.showZones) {\n this.setSeriesRange(upperCollection, indicator, indicator.targetSeries[1]);\n this.setSeriesRange(lowerCollection, indicator, indicator.targetSeries[2]);\n }\n };\n /**\n * To destroy the RSI Indicator.\n * @return {void}\n * @private\n */\n RsiIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the RSI Indicator\n */\n };\n /**\n * Get module name.\n */\n RsiIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the indicator.\n */\n return 'RsiIndicator';\n };\n return RsiIndicator;\n}(TechnicalAnalysis));\nexport { RsiIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Series } from '../series/chart-series';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `StochasticIndicator` module is used to render stochastic indicator.\n */\nvar StochasticIndicator = /** @class */ (function (_super) {\n __extends(StochasticIndicator, _super);\n function StochasticIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the collection of series that represents the stochastic indicator\n * @private\n */\n StochasticIndicator.prototype.initSeriesCollection = function (indicator, chart) {\n _super.prototype.initSeriesCollection.call(this, indicator, chart);\n var periodLine = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(periodLine, indicator, 'PeriodLine', indicator.periodLine.color, indicator.periodLine.width, chart);\n if (indicator.showZones) {\n var upperSeries = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(upperSeries, indicator, 'UpperLine', indicator.upperLine.color, indicator.upperLine.width, chart);\n var lowerSeries = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(lowerSeries, indicator, 'LowerLine', indicator.lowerLine.color, indicator.lowerLine.width, chart);\n }\n };\n /**\n * Defines the predictions based on stochastic approach\n * @private\n */\n StochasticIndicator.prototype.initDataSource = function (indicator, chart) {\n var signalCollection = [];\n var upperCollection = [];\n var lowerCollection = [];\n var periodCollection = [];\n var source = [];\n var sourceSeries = indicator.sourceSeries;\n var point = {};\n //prepare data\n var validData = indicator.points;\n if (validData.length && validData.length >= indicator.period) {\n if (indicator.showZones) {\n for (var i = 0; i < validData.length; i++) {\n upperCollection.push(this.getDataPoint(validData[i].x, indicator.overBought, validData[i], indicator.targetSeries[2], upperCollection.length));\n lowerCollection.push(this.getDataPoint(validData[i].x, indicator.overSold, validData[i], indicator.targetSeries[3], lowerCollection.length));\n }\n }\n source = this.calculatePeriod(indicator.period, indicator.kPeriod, validData, indicator.targetSeries[1]);\n periodCollection = this.smaCalculation(indicator.period, indicator.kPeriod, source, indicator.targetSeries[1]);\n signalCollection = this.smaCalculation(indicator.period + indicator.kPeriod - 1, indicator.dPeriod, source, indicator.targetSeries[0]);\n }\n this.setSeriesRange(signalCollection, indicator, indicator.targetSeries[0]);\n this.setSeriesRange(periodCollection, indicator, indicator.targetSeries[1]);\n if (indicator.showZones) {\n this.setSeriesRange(upperCollection, indicator, indicator.targetSeries[2]);\n this.setSeriesRange(lowerCollection, indicator, indicator.targetSeries[3]);\n }\n };\n /**\n * Calculates the SMA Values\n * @private\n */\n StochasticIndicator.prototype.smaCalculation = function (period, kPeriod, data, sourceSeries) {\n var pointCollection = [];\n if (data.length >= period + kPeriod) {\n var count = period + (kPeriod - 1);\n var temp = [];\n var values = [];\n for (var i = 0; i < data.length; i++) {\n var value = Number(data[i].y);\n temp.push(value);\n }\n var length_1 = temp.length;\n while (length_1 >= count) {\n var sum = 0;\n for (var i = period - 1; i < (period + kPeriod - 1); i++) {\n sum = sum + temp[i];\n }\n sum = sum / kPeriod;\n values.push(sum.toFixed(2));\n temp.splice(0, 1);\n length_1 = temp.length;\n }\n var len = count - 1;\n for (var i = 0; i < data.length; i++) {\n if (!(i < len)) {\n pointCollection.push(this.getDataPoint(data[i].x, Number(values[i - len]), data[i], sourceSeries, pointCollection.length));\n data[i].y = Number((values[i - len]));\n }\n }\n }\n return pointCollection;\n };\n /**\n * Calculates the period line values.\n * @private\n */\n StochasticIndicator.prototype.calculatePeriod = function (period, kPeriod, data, series) {\n var lowValues = [];\n var highValues = [];\n var closeValues = [];\n var modifiedSource = [];\n for (var j = 0; j < data.length; j++) {\n lowValues[j] = data[j].low;\n highValues[j] = data[j].high;\n closeValues[j] = data[j].close;\n }\n if (data.length > period) {\n var totalPeriod = period + kPeriod;\n var mins = [];\n var maxs = [];\n for (var i = 0; i < period - 1; ++i) {\n maxs.push(0);\n mins.push(0);\n modifiedSource.push(this.getDataPoint(data[i].x, data[i].close, data[i], series, modifiedSource.length));\n }\n for (var i = period - 1; i < data.length; ++i) {\n var min = Number.MAX_VALUE;\n var max = Number.MIN_VALUE;\n for (var j = 0; j < period; ++j) {\n min = Math.min(min, lowValues[i - j]);\n max = Math.max(max, highValues[i - j]);\n }\n maxs.push(max);\n mins.push(min);\n }\n for (var i = period - 1; i < data.length; ++i) {\n var top_1 = 0;\n var bottom = 0;\n top_1 += closeValues[i] - mins[i];\n bottom += maxs[i] - mins[i];\n modifiedSource.push(this.getDataPoint(data[i].x, (top_1 / bottom) * 100, data[i], series, modifiedSource.length));\n }\n }\n return modifiedSource;\n };\n /**\n * To destroy the Stocastic Indicator.\n * @return {void}\n * @private\n */\n StochasticIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the stochastic indicator\n */\n };\n /**\n * Get module name.\n */\n StochasticIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the indicator.\n */\n return 'StochasticIndicator';\n };\n return StochasticIndicator;\n}(TechnicalAnalysis));\nexport { StochasticIndicator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Series } from '../series/chart-series';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `BollingerBands` module is used to render bollinger band indicator.\n */\nvar BollingerBands = /** @class */ (function (_super) {\n __extends(BollingerBands, _super);\n function BollingerBands() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Initializes the series collection to represent bollinger band\n */\n BollingerBands.prototype.initSeriesCollection = function (indicator, chart) {\n indicator.targetSeries = [];\n var rangeArea = new Series(indicator, 'targetSeries', {}, true);\n rangeArea.type = 'RangeArea';\n if (indicator.bandColor !== 'transparent' && indicator.bandColor !== 'none') {\n this.setSeriesProperties(rangeArea, indicator, 'BollingerBand', indicator.bandColor, 0, chart);\n }\n var signalLine = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(signalLine, indicator, 'SignalLine', indicator.fill, indicator.width, chart);\n var upperLine = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(upperLine, indicator, 'UpperLine', indicator.upperLine.color, indicator.upperLine.width, chart);\n var lowerLine = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(lowerLine, indicator, 'LowerLine', indicator.lowerLine.color, indicator.lowerLine.width, chart);\n };\n /**\n * Defines the predictions using Bollinger Band Approach\n * @private\n */\n BollingerBands.prototype.initDataSource = function (indicator, chart) {\n var enableBand = indicator.bandColor !== 'transparent' && indicator.bandColor !== 'none';\n var start = enableBand ? 1 : 0;\n var signalCollection = [];\n var upperCollection = [];\n var lowerCollection = [];\n var bandCollection = [];\n var upperSeries = indicator.targetSeries[start + 1];\n var lowerSeries = indicator.targetSeries[start + 2];\n var signalSeries = indicator.targetSeries[start];\n var rangeAreaSeries = enableBand ? indicator.targetSeries[0] : null;\n //prepare data\n var validData = indicator.points;\n if (validData.length && validData.length >= indicator.period) {\n var sum = 0;\n var deviationSum = 0;\n var multiplier = indicator.standardDeviation;\n var limit = validData.length;\n var length_1 = Math.round(indicator.period);\n var smaPoints = [];\n var deviations = [];\n var bollingerPoints = [];\n for (var i_1 = 0; i_1 < length_1; i_1++) {\n sum += Number(validData[i_1].close);\n }\n var sma = sum / indicator.period;\n for (var i_2 = 0; i_2 < limit; i_2++) {\n var y = Number(validData[i_2].close);\n if (i_2 >= length_1 - 1 && i_2 < limit) {\n if (i_2 - indicator.period >= 0) {\n var diff = y - Number(validData[i_2 - length_1].close);\n sum = sum + diff;\n sma = sum / (indicator.period);\n smaPoints[i_2] = sma;\n deviations[i_2] = Math.pow(y - sma, 2);\n deviationSum += deviations[i_2] - deviations[i_2 - length_1];\n }\n else {\n smaPoints[i_2] = sma;\n deviations[i_2] = Math.pow(y - sma, 2);\n deviationSum += deviations[i_2];\n }\n var range = Math.sqrt(deviationSum / (indicator.period));\n var lowerBand = smaPoints[i_2] - (multiplier * range);\n var upperBand = smaPoints[i_2] + (multiplier * range);\n if (i_2 + 1 === length_1) {\n for (var j_1 = 0; j_1 < length_1 - 1; j_1++) {\n bollingerPoints[j_1] = {\n 'X': validData[j_1].x, 'mb': smaPoints[i_2],\n 'lb': lowerBand, 'ub': upperBand, visible: true\n };\n }\n }\n bollingerPoints[i_2] = {\n 'X': validData[i_2].x, 'mb': smaPoints[i_2],\n 'lb': lowerBand, 'ub': upperBand, visible: true\n };\n }\n else {\n if (i_2 < indicator.period - 1) {\n smaPoints[i_2] = sma;\n deviations[i_2] = Math.pow(y - sma, 2);\n deviationSum += deviations[i_2];\n }\n }\n }\n var i = -1;\n var j = -1;\n for (var k = 0; k < limit; k++) {\n if (k >= (length_1 - 1)) {\n var ub = 'ub';\n var lb = 'lb';\n var mb = 'mb';\n upperCollection.push(this.getDataPoint(validData[k].x, bollingerPoints[k][ub], validData[k], upperSeries, upperCollection.length));\n lowerCollection.push(this.getDataPoint(validData[k].x, bollingerPoints[k][lb], validData[k], lowerSeries, lowerCollection.length));\n signalCollection.push(this.getDataPoint(validData[k].x, bollingerPoints[k][mb], validData[k], signalSeries, signalCollection.length));\n if (enableBand) {\n bandCollection.push(this.getRangePoint(validData[k].x, upperCollection[++i].y, lowerCollection[++j].y, validData[k], rangeAreaSeries, bandCollection.length));\n }\n }\n }\n }\n if (enableBand) {\n this.setSeriesRange(bandCollection, indicator, indicator.targetSeries[0]);\n }\n this.setSeriesRange(signalCollection, indicator, indicator.targetSeries[start]);\n this.setSeriesRange(upperCollection, indicator, indicator.targetSeries[start + 1]);\n this.setSeriesRange(lowerCollection, indicator, indicator.targetSeries[start + 2]);\n };\n /**\n * To destroy the Bollinger Band.\n * @return {void}\n * @private\n */\n BollingerBands.prototype.destroy = function (chart) {\n /**\n * Destroys the bollinger band\n */\n };\n /**\n * Get module name.\n */\n BollingerBands.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'BollingerBandsIndicator';\n };\n return BollingerBands;\n}(TechnicalAnalysis));\nexport { BollingerBands };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Series } from '../series/chart-series';\nimport { TechnicalAnalysis } from './indicator-base';\n/**\n * `MacdIndicator` module is used to render MACD indicator.\n */\nvar MacdIndicator = /** @class */ (function (_super) {\n __extends(MacdIndicator, _super);\n function MacdIndicator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the collection of series to represent the MACD indicator\n * @private\n */\n MacdIndicator.prototype.initSeriesCollection = function (indicator, chart) {\n _super.prototype.initSeriesCollection.call(this, indicator, chart);\n if (indicator.macdType === 'Line' || indicator.macdType === 'Both') {\n var macdSeries = new Series(indicator, 'targetSeries', {}, true);\n this.setSeriesProperties(macdSeries, indicator, 'MacdLine', indicator.macdLine.color, indicator.macdLine.width, chart);\n }\n if (indicator.macdType === 'Histogram' || indicator.macdType === 'Both') {\n var histogramSeries = new Series(indicator, 'targetSeries', {}, true);\n histogramSeries.type = 'Column';\n this.setSeriesProperties(histogramSeries, indicator, 'Histogram', indicator.macdPositiveColor, indicator.width, chart);\n }\n };\n /**\n * Defines the predictions using MACD approach\n * @private\n */\n MacdIndicator.prototype.initDataSource = function (indicator, chart) {\n var signalCollection = [];\n var fastPeriod = indicator.fastPeriod;\n var slowPeriod = indicator.slowPeriod;\n var trigger = indicator.period;\n var length = fastPeriod + trigger;\n var macdCollection = [];\n var histogramCollection = [];\n var validData = indicator.points;\n var signalSeries = indicator.targetSeries[0];\n var histogramSeries;\n var macdLineSeries;\n if (indicator.macdType === 'Histogram') {\n histogramSeries = indicator.targetSeries[1];\n }\n else {\n macdLineSeries = indicator.targetSeries[1];\n if (indicator.macdType === 'Both') {\n histogramSeries = indicator.targetSeries[2];\n }\n }\n if (validData && length < validData.length && slowPeriod <= fastPeriod &&\n slowPeriod > 0 && (length - 2) >= 0) {\n var shortEMA = this.calculateEMAValues(slowPeriod, validData, 'close');\n var longEMA = this.calculateEMAValues(fastPeriod, validData, 'close');\n var macdValues = this.getMACDVales(indicator, shortEMA, longEMA);\n macdCollection = this.getMACDPoints(indicator, macdValues, validData, macdLineSeries || signalSeries);\n var signalEMA = this.calculateEMAValues(trigger, macdCollection, 'y');\n signalCollection = this.getSignalPoints(indicator, signalEMA, validData, signalSeries);\n if (histogramSeries) {\n histogramCollection = this.getHistogramPoints(indicator, macdValues, signalEMA, validData, histogramSeries);\n }\n }\n this.setSeriesRange(signalCollection, indicator, indicator.targetSeries[0]);\n if (histogramSeries) {\n this.setSeriesRange(histogramCollection, indicator, histogramSeries);\n }\n if (macdLineSeries) {\n this.setSeriesRange(macdCollection, indicator, macdLineSeries);\n }\n };\n /**\n * Calculates the EMA values for the given period\n */\n MacdIndicator.prototype.calculateEMAValues = function (period, validData, field) {\n var sum = 0;\n var initialEMA = 0;\n var emaValues = [];\n var emaPercent = (2 / (period + 1));\n for (var i = 0; i < period; i++) {\n sum += Number(validData[i][field]);\n }\n initialEMA = (sum / period);\n emaValues.push(initialEMA);\n var emaAvg = initialEMA;\n for (var j = period; j < validData.length; j++) {\n emaAvg = (Number(validData[j][field]) - emaAvg) * emaPercent + emaAvg;\n emaValues.push(emaAvg);\n }\n return emaValues;\n };\n /**\n * Defines the MACD Points\n */\n MacdIndicator.prototype.getMACDPoints = function (indicator, macdPoints, validData, series) {\n var macdCollection = [];\n var dataMACDIndex = indicator.fastPeriod - 1;\n var macdIndex = 0;\n while (dataMACDIndex < validData.length) {\n macdCollection.push(this.getDataPoint(validData[dataMACDIndex].x, macdPoints[macdIndex], validData[dataMACDIndex], series, macdCollection.length));\n dataMACDIndex++;\n macdIndex++;\n }\n return macdCollection;\n };\n /**\n * Calculates the signal points\n */\n MacdIndicator.prototype.getSignalPoints = function (indicator, signalEma, validData, series) {\n var dataSignalIndex = indicator.fastPeriod + indicator.period - 2;\n var signalIndex = 0;\n var signalCollection = [];\n while (dataSignalIndex < validData.length) {\n signalCollection.push(this.getDataPoint(validData[dataSignalIndex].x, signalEma[signalIndex], validData[dataSignalIndex], series, signalCollection.length));\n dataSignalIndex++;\n signalIndex++;\n }\n return signalCollection;\n };\n /**\n * Calculates the MACD values\n */\n MacdIndicator.prototype.getMACDVales = function (indicator, shortEma, longEma) {\n var macdPoints = [];\n var diff = indicator.fastPeriod - indicator.slowPeriod;\n for (var i = 0; i < longEma.length; i++) {\n macdPoints.push((shortEma[i + diff] - longEma[i]));\n }\n return macdPoints;\n };\n /**\n * Calculates the Histogram Points\n */\n MacdIndicator.prototype.getHistogramPoints = function (indicator, macdPoints, signalEma, validData, series) {\n var dataHistogramIndex = indicator.fastPeriod + indicator.period - 2;\n var histogramIndex = 0;\n var histogramCollection = [];\n while (dataHistogramIndex < validData.length) {\n histogramCollection.push(this.getDataPoint(validData[dataHistogramIndex].x, macdPoints[histogramIndex + (indicator.period - 1)] - signalEma[histogramIndex], validData[dataHistogramIndex], series, histogramCollection.length, indicator));\n dataHistogramIndex++;\n histogramIndex++;\n }\n return histogramCollection;\n };\n /**\n * To destroy the MACD Indicator.\n * @return {void}\n * @private\n */\n MacdIndicator.prototype.destroy = function (chart) {\n /**\n * Destroys the MACD indicator\n */\n };\n /**\n * Get module name.\n */\n MacdIndicator.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'MacdIndicator';\n };\n return MacdIndicator;\n}(TechnicalAnalysis));\nexport { MacdIndicator };\n","import { Series, Points } from '../series/chart-series';\nimport { findClipRect, RectOption } from '../../common/utils/helper';\n/**\n * `Trendline` module is used to render 6 types of trendlines in chart.\n */\nvar Trendlines = /** @class */ (function () {\n function Trendlines() {\n }\n /**\n * Defines the collection of series, that are used to represent a trendline\n * @private\n */\n Trendlines.prototype.initSeriesCollection = function (trendline, chart) {\n var trendLineSeries = new Series(trendline, 'targetSeries', {}, true);\n if (trendline.type === 'Linear' || trendline.type === 'MovingAverage') {\n trendLineSeries.type = 'Line';\n }\n else {\n trendLineSeries.type = 'Spline';\n }\n this.setSeriesProperties(trendLineSeries, trendline, trendline.type, trendline.fill, trendline.width, chart);\n };\n /**\n * Initializes the properties of the trendline series\n */\n Trendlines.prototype.setSeriesProperties = function (series, trendline, name, fill, width, chart) {\n series.name = trendline.name;\n series.xName = 'x';\n series.yName = 'y';\n series.fill = fill || 'blue';\n series.width = width;\n series.clipRectElement = trendline.clipRectElement;\n series.points = [];\n series.enableTooltip = trendline.enableTooltip;\n series.index = trendline.index;\n series.sourceIndex = trendline.sourceIndex;\n series.interior = series.fill;\n series.animation = trendline.animation;\n series.legendShape = 'HorizontalLine';\n series.marker = trendline.marker;\n series.category = 'TrendLine';\n series.chart = chart;\n series.xMin = Infinity;\n series.xMax = -Infinity;\n series.yMin = Infinity;\n series.yMax = -Infinity;\n series.xData = [];\n series.yData = [];\n trendline.targetSeries = series;\n };\n /**\n * Creates the elements of a trendline\n */\n Trendlines.prototype.createTrendLineElements = function (chart, trendline, index, element, clipRectElement) {\n trendline.trendLineElement = element;\n trendline.targetSeries.clipRectElement = clipRectElement;\n trendline.targetSeries.seriesElement = element;\n chart.trendLineElements.appendChild(trendline.trendLineElement);\n };\n /**\n * Defines the data point of trendline\n */\n Trendlines.prototype.getDataPoint = function (x, y, sourcePoint, series, index) {\n var trendPoint = new Points();\n trendPoint.x = x;\n trendPoint.y = y;\n trendPoint.xValue = Number(x);\n trendPoint.color = series.fill;\n trendPoint.index = index;\n trendPoint.yValue = Number(y);\n trendPoint.visible = true;\n series.xMin = Math.min(series.xMin, trendPoint.xValue);\n series.yMin = Math.min(series.yMin, trendPoint.yValue);\n series.xMax = Math.max(series.xMax, trendPoint.xValue);\n series.yMax = Math.max(series.yMax, trendPoint.yValue);\n series.xData.push(trendPoint.xValue);\n return trendPoint;\n };\n /**\n * Finds the slope and intercept of trendline\n */\n Trendlines.prototype.findSlopeIntercept = function (xValues, yValues, trendline, points) {\n var xAvg = 0;\n var yAvg = 0;\n var xyAvg = 0;\n var xxAvg = 0;\n var yyAvg = 0;\n var index = 0;\n var slope = 0;\n var intercept = 0;\n while (index < points.length) {\n xAvg += xValues[index];\n yAvg += yValues[index];\n xyAvg += xValues[index] * yValues[index];\n xxAvg += xValues[index] * xValues[index];\n yyAvg += yValues[index] * yValues[index];\n index++;\n }\n var type = trendline.type;\n if (trendline.intercept && (type === 'Linear' || type === 'Exponential')) {\n intercept = trendline.intercept;\n switch (type) {\n case 'Linear':\n slope = ((xyAvg) - (trendline.intercept * xAvg)) / xxAvg;\n break;\n case 'Exponential':\n slope = ((xyAvg) - (Math.log(Math.abs(trendline.intercept)) * xAvg)) / xxAvg;\n break;\n }\n }\n else {\n slope = ((points.length * xyAvg) - (xAvg * yAvg)) / ((points.length * xxAvg) - (xAvg * xAvg));\n if (type === 'Exponential' || type === 'Power') {\n intercept = Math.exp((yAvg - (slope * xAvg)) / points.length);\n }\n else {\n intercept = (yAvg - (slope * xAvg)) / points.length;\n }\n }\n return { slope: slope, intercept: intercept };\n };\n /**\n * Defines the points to draw the trendlines\n */\n Trendlines.prototype.initDataSource = function (trendline, chart) {\n var points = trendline.points;\n if (points && points.length) {\n //prepare data\n var trendlineSeries = trendline.targetSeries;\n switch (trendline.type) {\n case 'Linear':\n this.setLinearRange(points, trendline, trendlineSeries);\n break;\n case 'Exponential':\n this.setExponentialRange(points, trendline, trendlineSeries);\n break;\n case 'MovingAverage':\n this.setMovingAverageRange(points, trendline, trendlineSeries);\n break;\n case 'Polynomial':\n this.setPolynomialRange(points, trendline, trendlineSeries);\n break;\n case 'Power':\n this.setPowerRange(points, trendline, trendlineSeries);\n break;\n case 'Logarithmic':\n this.setLogarithmicRange(points, trendline, trendlineSeries);\n break;\n }\n if (trendline.type !== 'Linear' && trendline.type !== 'MovingAverage') {\n trendlineSeries.chart.splineSeriesModule.findSplinePoint(trendlineSeries);\n }\n }\n };\n /**\n * Calculation of exponential points\n */\n Trendlines.prototype.setExponentialRange = function (points, trendline, series) {\n var xValue = [];\n var yValue = [];\n var index = 0;\n var slopeIntercept;\n while (index < points.length) {\n var point = points[index];\n xValue.push(point.xValue);\n yValue.push(Math.log(point.yValue));\n index++;\n }\n slopeIntercept = this.findSlopeIntercept(xValue, yValue, trendline, points);\n series.points = this.getExponentialPoints(trendline, points, xValue, yValue, series, slopeIntercept);\n };\n /**\n * Calculation of logarithmic points\n */\n Trendlines.prototype.setLogarithmicRange = function (points, trendline, series) {\n var xLogValue = [];\n var yLogValue = [];\n var xPointsLgr = [];\n var slopeIntercept;\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n xPointsLgr.push(point.xValue);\n xLogValue.push(Math.log(point.xValue));\n yLogValue.push(point.yValue);\n index++;\n }\n slopeIntercept = this.findSlopeIntercept(xLogValue, yLogValue, trendline, points);\n series.points = this.getLogarithmicPoints(trendline, points, xPointsLgr, yLogValue, series, slopeIntercept);\n };\n /**\n * Calculation of polynomial points\n */\n Trendlines.prototype.setPolynomialRange = function (points, trendline, series) {\n var xPolyValues = [];\n var yPolyValues = [];\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n xPolyValues.push(point.xValue);\n yPolyValues.push(point.yValue);\n index++;\n }\n series.points = this.getPolynomialPoints(trendline, points, xPolyValues, yPolyValues, series);\n };\n /**\n * Calculation of power points\n */\n Trendlines.prototype.setPowerRange = function (points, trendline, series) {\n var xValues = [];\n var yValues = [];\n var powerPoints = [];\n var slopeIntercept;\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n powerPoints.push(point.xValue);\n xValues.push(Math.log(point.xValue));\n yValues.push(Math.log(point.yValue));\n index++;\n }\n slopeIntercept = this.findSlopeIntercept(xValues, yValues, trendline, points);\n series.points = this.getPowerPoints(trendline, points, powerPoints, yValues, series, slopeIntercept);\n };\n /**\n * Calculation of linear points\n */\n Trendlines.prototype.setLinearRange = function (points, trendline, series) {\n var xValues = [];\n var yValues = [];\n var slopeIntercept;\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n xValues.push(point.xValue);\n yValues.push(point.yValue);\n index++;\n }\n slopeIntercept = this.findSlopeIntercept(xValues, yValues, trendline, points);\n series.points = this.getLinearPoints(trendline, points, xValues, yValues, series, slopeIntercept);\n };\n /**\n * Calculation of moving average points\n */\n Trendlines.prototype.setMovingAverageRange = function (points, trendline, series) {\n var xValues = [];\n var yValues = [];\n var xAvgValues = [];\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n xAvgValues.push(point.xValue);\n xValues.push(index + 1);\n yValues.push(point.yValue);\n index++;\n }\n series.points = this.getMovingAveragePoints(trendline, points, xAvgValues, yValues, series);\n };\n /**\n * Calculation of logarithmic points\n */\n Trendlines.prototype.getLogarithmicPoints = function (trendline, points, xValues, yValues, series, slopeInterceptLog) {\n var midPoint = Math.round((points.length / 2));\n var pts = [];\n var x1Log = xValues[0] - trendline.backwardForecast;\n var y1Log = slopeInterceptLog.intercept + (slopeInterceptLog.slope * Math.log(x1Log));\n var x2Log = xValues[midPoint - 1];\n var y2Log = slopeInterceptLog.intercept + (slopeInterceptLog.slope * Math.log(x2Log));\n var x3Log = xValues[xValues.length - 1] + trendline.forwardForecast;\n var y3Log = slopeInterceptLog.intercept + (slopeInterceptLog.slope * Math.log(x3Log));\n pts.push(this.getDataPoint(x1Log, y1Log, points[0], series, pts.length));\n pts.push(this.getDataPoint(x2Log, y2Log, points[midPoint - 1], series, pts.length));\n pts.push(this.getDataPoint(x3Log, y3Log, points[points.length - 1], series, pts.length));\n return pts;\n };\n /**\n * Defines the points based on data point\n */\n Trendlines.prototype.getPowerPoints = function (trendline, points, xValues, yValues, series, slopeInterceptPower) {\n var midPoint = Math.round((points.length / 2));\n var pts = [];\n var x1 = xValues[0] - trendline.backwardForecast;\n x1 = x1 > -1 ? x1 : 0;\n var y1 = slopeInterceptPower.intercept * Math.pow(x1, slopeInterceptPower.slope);\n var x2 = xValues[midPoint - 1];\n var y2 = slopeInterceptPower.intercept * Math.pow(x2, slopeInterceptPower.slope);\n var x3 = xValues[xValues.length - 1] + trendline.forwardForecast;\n var y3 = slopeInterceptPower.intercept * Math.pow(x3, slopeInterceptPower.slope);\n pts.push(this.getDataPoint(x1, y1, points[0], series, pts.length));\n pts.push(this.getDataPoint(x2, y2, points[midPoint - 1], series, pts.length));\n pts.push(this.getDataPoint(x3, y3, points[points.length - 1], series, pts.length));\n return pts;\n };\n /**\n * Get the polynomial points based on polynomial slopes\n */\n Trendlines.prototype.getPolynomialPoints = function (trendline, points, xValues, yValues, series) {\n var midPoint = Math.round((points.length / 2));\n var pts = [];\n var polynomialOrder = points.length <= trendline.polynomialOrder ? points.length : trendline.polynomialOrder;\n polynomialOrder = Math.max(2, polynomialOrder);\n polynomialOrder = Math.min(6, polynomialOrder);\n trendline.polynomialOrder = polynomialOrder;\n trendline.polynomialSlopes = [];\n trendline.polynomialSlopes.length = trendline.polynomialOrder + 1;\n var index = 0;\n while (index < xValues.length) {\n var xVal = xValues[index];\n var yVal = yValues[index];\n var subIndex = 0;\n while (subIndex <= trendline.polynomialOrder) {\n if (!trendline.polynomialSlopes[subIndex]) {\n trendline.polynomialSlopes[subIndex] = 0;\n }\n trendline.polynomialSlopes[subIndex] += Math.pow(xVal, subIndex) * yVal;\n ++subIndex;\n }\n index++;\n }\n var numArray = [];\n numArray.length = 1 + 2 * trendline.polynomialOrder;\n var matrix = [];\n matrix.length = trendline.polynomialOrder + 1;\n var newIndex = 0;\n while (newIndex < (trendline.polynomialOrder + 1)) {\n matrix[newIndex] = [];\n matrix[newIndex].length = 3;\n newIndex++;\n }\n var nIndex = 0;\n var num1 = 0;\n while (nIndex < xValues.length) {\n var d = xValues[nIndex];\n var num2 = 1.0;\n var nIndex2 = 0;\n while (nIndex2 < numArray.length) {\n if (!numArray[nIndex2]) {\n numArray[nIndex2] = 0;\n }\n numArray[nIndex2] += num2;\n num2 *= d;\n ++num1;\n ++nIndex2;\n }\n ++nIndex;\n }\n var nnIndex = 0;\n while (nnIndex <= trendline.polynomialOrder) {\n var nnIndex2 = 0;\n while (nnIndex2 <= trendline.polynomialOrder) {\n matrix[nnIndex][nnIndex2] = numArray[nnIndex + nnIndex2];\n ++nnIndex2;\n }\n ++nnIndex;\n }\n if (!this.gaussJordanElimination(matrix, trendline.polynomialSlopes)) {\n trendline.polynomialSlopes = null;\n }\n pts = this.getPoints(trendline, points, xValues, yValues, series);\n return pts;\n };\n /**\n * Defines the moving average points\n */\n Trendlines.prototype.getMovingAveragePoints = function (trendline, points, xValues, yValues, series) {\n var pts = [];\n var period = trendline.period >= points.length ? points.length - 1 : trendline.period;\n period = Math.max(2, period);\n var index = 0;\n var y;\n var x;\n var count;\n var nullCount;\n while (index < points.length - 1) {\n y = count = nullCount = 0;\n for (var j = index; count < period; j++) {\n count++;\n if (!yValues[j]) {\n nullCount++;\n }\n y += yValues[j];\n }\n y = period - nullCount <= 0 ? null : y / (period - nullCount);\n if (y && !isNaN(y)) {\n x = xValues[period - 1 + index];\n pts.push(this.getDataPoint(x, y, points[period - 1 + index], series, pts.length));\n }\n index++;\n }\n return pts;\n };\n /**\n * Defines the linear points\n */\n Trendlines.prototype.getLinearPoints = function (trendline, points, xValues, yValues, series, slopeInterceptLinear) {\n var pts = [];\n var x1Linear = xValues[0] - trendline.backwardForecast;\n var y1Linear = slopeInterceptLinear.slope * x1Linear + slopeInterceptLinear.intercept;\n var x2Linear = xValues[xValues.length - 1] + trendline.forwardForecast;\n var y2Linear = slopeInterceptLinear.slope * x2Linear + slopeInterceptLinear.intercept;\n pts.push(this.getDataPoint(x1Linear, y1Linear, points[0], series, pts.length));\n pts.push(this.getDataPoint(x2Linear, y2Linear, points[points.length - 1], series, pts.length));\n return pts;\n };\n /**\n * Defines the exponential points\n */\n Trendlines.prototype.getExponentialPoints = function (trendline, points, xValues, yValues, series, slopeInterceptExp) {\n var midPoint = Math.round((points.length / 2));\n var ptsExp = [];\n var x1 = xValues[0] - trendline.backwardForecast;\n var y1 = slopeInterceptExp.intercept * Math.exp(slopeInterceptExp.slope * x1);\n var x2 = xValues[midPoint - 1];\n var y2 = slopeInterceptExp.intercept * Math.exp(slopeInterceptExp.slope * x2);\n var x3 = xValues[xValues.length - 1] + trendline.forwardForecast;\n var y3 = slopeInterceptExp.intercept * Math.exp(slopeInterceptExp.slope * x3);\n ptsExp.push(this.getDataPoint(x1, y1, points[0], series, ptsExp.length));\n ptsExp.push(this.getDataPoint(x2, y2, points[midPoint - 1], series, ptsExp.length));\n ptsExp.push(this.getDataPoint(x3, y3, points[points.length - 1], series, ptsExp.length));\n return ptsExp;\n };\n /**\n * Defines the points based on data point\n */\n Trendlines.prototype.getPoints = function (trendline, points, xValues, yValues, series) {\n var midPoint = Math.round((points.length / 2));\n var polynomialSlopes = trendline.polynomialSlopes;\n var pts = [];\n var x1 = 1;\n var index = 1;\n var xValue;\n var yValue;\n while (index <= polynomialSlopes.length) {\n if (index === 1) {\n xValue = xValues[0] - trendline.backwardForecast;\n yValue = this.getPolynomialYValue(polynomialSlopes, xValue);\n pts.push(this.getDataPoint(xValue, yValue, points[0], series, pts.length));\n }\n else if (index === polynomialSlopes.length) {\n xValue = xValues[points.length - 1] + trendline.forwardForecast;\n yValue = this.getPolynomialYValue(polynomialSlopes, xValue);\n pts.push(this.getDataPoint(xValue, yValue, points[points.length - 1], series, pts.length));\n }\n else {\n x1 += (points.length + trendline.forwardForecast) / polynomialSlopes.length;\n xValue = xValues[parseInt(x1.toString(), 10) - 1];\n yValue = this.getPolynomialYValue(polynomialSlopes, xValue);\n pts.push(this.getDataPoint(xValue, yValue, points[parseInt(x1.toString(), 10) - 1], series, pts.length));\n }\n index++;\n }\n return pts;\n };\n /**\n * Defines the polynomial value of y\n */\n Trendlines.prototype.getPolynomialYValue = function (slopes, x) {\n var sum = 0;\n var index = 0;\n while (index < slopes.length) {\n sum += slopes[index] * Math.pow(x, index);\n index++;\n }\n return sum;\n };\n /**\n * Defines the gauss jordan elimination\n */\n Trendlines.prototype.gaussJordanElimination = function (matrix, polynomialSlopes) {\n var length = matrix.length;\n var numArray1 = [];\n var numArray2 = [];\n var numArray3 = [];\n numArray1.length = length;\n numArray2.length = length;\n numArray3.length = length;\n var index = 0;\n while (index < length) {\n numArray3[index] = 0;\n ++index;\n }\n var index1 = 0;\n while (index1 < length) {\n var num1 = 0;\n var index2 = 0;\n var index3 = 0;\n var index4 = 0;\n while (index4 < length) {\n if (numArray3[index4] !== 1) {\n var index5 = 0;\n while (index5 < length) {\n if (numArray3[index5] === 0 && Math.abs(matrix[index4][index5]) >= num1) {\n num1 = Math.abs(matrix[index4][index5]);\n index2 = index4;\n index3 = index5;\n }\n ++index5;\n }\n }\n ++index4;\n }\n ++numArray3[index3];\n if (index2 !== index3) {\n var index4_1 = 0;\n while (index4_1 < length) {\n var num2 = matrix[index2][index4_1];\n matrix[index2][index4_1] = matrix[index3][index4_1];\n matrix[index3][index4_1] = num2;\n ++index4_1;\n }\n var num3 = polynomialSlopes[index2];\n polynomialSlopes[index2] = polynomialSlopes[index3];\n polynomialSlopes[index3] = num3;\n }\n numArray2[index1] = index2;\n numArray1[index1] = index3;\n if (matrix[index3][index3] === 0.0) {\n return false;\n }\n var num4 = 1.0 / matrix[index3][index3];\n matrix[index3][index3] = 1.0;\n var iindex4 = 0;\n while (iindex4 < length) {\n matrix[index3][iindex4] *= num4;\n ++iindex4;\n }\n polynomialSlopes[index3] *= num4;\n var iandex4 = 0;\n while (iandex4 < length) {\n if (iandex4 !== index3) {\n var num2 = matrix[iandex4][index3];\n matrix[iandex4][index3] = 0.0;\n var index5 = 0;\n while (index5 < length) {\n matrix[iandex4][index5] -= matrix[index3][index5] * num2;\n ++index5;\n }\n polynomialSlopes[iandex4] -= polynomialSlopes[index3] * num2;\n }\n ++iandex4;\n }\n ++index1;\n }\n var iindex1 = length - 1;\n while (iindex1 >= 0) {\n if (numArray2[iindex1] !== numArray1[iindex1]) {\n var iindex2 = 0;\n while (iindex2 < length) {\n var num = matrix[iindex2][numArray2[iindex1]];\n matrix[iindex2][numArray2[iindex1]] = matrix[iindex2][numArray1[iindex1]];\n matrix[iindex2][numArray1[iindex1]] = num;\n ++iindex2;\n }\n }\n --iindex1;\n }\n return true;\n };\n /**\n * Defines the trendline elements\n */\n Trendlines.prototype.getTrendLineElements = function (series, chart) {\n findClipRect(series);\n var clipRect = series.clipRect;\n var clipRectElement = chart.renderer.drawClipPath(new RectOption(chart.element.id + '_ChartTrendlineClipRect_' + series.index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: 0, y: 0, width: clipRect.width,\n height: clipRect.height,\n }));\n var element;\n element = chart.renderer.createGroup({\n 'id': chart.element.id + 'TrendlineSeriesGroup' + series.index,\n 'transform': 'translate(' + clipRect.x + ',' + clipRect.y + ')',\n 'clip-path': 'url(#' + chart.element.id + '_ChartTrendlineClipRect_' + series.index + ')'\n });\n //defines the clip rect element\n element.appendChild(clipRectElement);\n for (var _i = 0, _a = series.trendlines; _i < _a.length; _i++) {\n var trendline = _a[_i];\n this.createTrendLineElements(chart, trendline, trendline.index, element, clipRectElement);\n }\n };\n /**\n * To destroy the trendline\n */\n Trendlines.prototype.destroy = function (chart) {\n /**\n * Destroys the Linear Trendline\n */\n };\n /**\n * Get module name\n */\n Trendlines.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'TrendLine';\n };\n return Trendlines;\n}());\nexport { Trendlines };\n","import { Animation, Browser } from '@syncfusion/ej2-base';\nimport { measureText, findDirection, textElement, getValueXByPoint, stopTimer, getValueYByPoint, TextOption, Rect, ChartLocation, PathOption, withInBounds, removeElement } from '../../common/utils/helper';\n/**\n * `Crosshair` module is used to render the crosshair for chart.\n */\nvar Crosshair = /** @class */ (function () {\n /**\n * Constructor for crosshair module.\n * @private\n */\n function Crosshair(chart) {\n this.arrowLocation = new ChartLocation(0, 0);\n this.rx = 2;\n this.ry = 2;\n this.chart = chart;\n this.elementID = this.chart.element.id;\n this.addEventListener();\n }\n /**\n * @hidden\n */\n Crosshair.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n this.chart.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.chart.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n this.chart.on(cancelEvent, this.mouseLeaveHandler, this);\n this.chart.on('tapHold', this.longPress, this);\n };\n Crosshair.prototype.mouseUpHandler = function () {\n if (this.chart.startMove) {\n this.removeCrosshair(2000);\n }\n };\n Crosshair.prototype.mouseLeaveHandler = function () {\n this.removeCrosshair(1000);\n };\n Crosshair.prototype.mouseMoveHandler = function (event) {\n var chart = this.chart;\n if (event.type === 'touchmove' && (Browser.isIos || Browser.isIos7) && chart.startMove && event.preventDefault) {\n event.preventDefault();\n }\n // Tooltip for chart series.\n if (!chart.disableTrackTooltip) {\n if (withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n if (chart.startMove || !chart.isTouch) {\n this.crosshair();\n }\n }\n else {\n this.removeCrosshair(1000);\n }\n }\n };\n /**\n * Handles the long press on chart.\n * @return {boolean}\n * @private\n */\n Crosshair.prototype.longPress = function () {\n var chart = this.chart;\n if (withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n this.crosshair();\n }\n return false;\n };\n /**\n * Renders the crosshair.\n * @return {void}\n */\n Crosshair.prototype.crosshair = function () {\n var chart = this.chart;\n var horizontalCross = '';\n var verticalCross = '';\n var options;\n var crosshair = chart.crosshair;\n var chartRect = chart.chartAxisLayoutPanel.seriesClipRect;\n var crossGroup = document.getElementById(this.elementID + '_UserInteraction');\n this.stopAnimation();\n if (chart.tooltip.enable && !withInBounds(chart.tooltipModule.valueX, chart.tooltipModule.valueY, chartRect)) {\n return null;\n }\n this.valueX = chart.tooltip.enable ? chart.tooltipModule.valueX : chart.mouseX;\n this.valueY = chart.tooltip.enable ? chart.tooltipModule.valueY : chart.mouseY;\n crossGroup.setAttribute('opacity', '1');\n if (crosshair.lineType === 'Both' || crosshair.lineType === 'Horizontal') {\n horizontalCross += 'M ' + chartRect.x + ' ' + this.valueY +\n ' L ' + (chartRect.x + chartRect.width) + ' ' + this.valueY;\n }\n if (crosshair.lineType === 'Both' || crosshair.lineType === 'Vertical') {\n verticalCross += 'M ' + this.valueX + ' ' + chartRect.y +\n ' L ' + this.valueX + ' ' + (chartRect.y + chartRect.height);\n }\n if (crossGroup.childNodes.length === 0) {\n var axisTooltipGroup = chart.renderer.createGroup({ 'id': this.elementID + '_crosshair_axis' });\n options = new PathOption(this.elementID + '_HorizontalLine', 'none', crosshair.line.width, crosshair.line.color || chart.themeStyle.crosshairLine, 1, null, horizontalCross);\n this.renderCrosshairLine(options, crossGroup);\n options.d = verticalCross;\n options.id = this.elementID + '_VerticalLine';\n this.renderCrosshairLine(options, crossGroup);\n crossGroup.appendChild(axisTooltipGroup);\n this.renderAxisTooltip(chart, chartRect, crossGroup.lastChild);\n }\n else {\n document.getElementById(this.elementID + '_HorizontalLine').setAttribute('d', horizontalCross);\n document.getElementById(this.elementID + '_VerticalLine').setAttribute('d', verticalCross);\n this.renderAxisTooltip(chart, chartRect, crossGroup.lastChild);\n }\n };\n Crosshair.prototype.renderCrosshairLine = function (options, crossGroup) {\n var htmlObject = this.chart.renderer.drawPath(options);\n crossGroup.appendChild(htmlObject);\n };\n Crosshair.prototype.renderAxisTooltip = function (chart, chartRect, axisGroup) {\n var axis;\n var text;\n var rect;\n var pathElement;\n var textElem;\n var options;\n var padding = 5;\n var direction;\n var axisRect;\n for (var k = 0, length_1 = chart.axisCollections.length; k < length_1; k++) {\n axis = chart.axisCollections[k];\n axisRect = !axis.placeNextToAxisLine ? axis.rect : axis.updatedRect;\n if (axis.crosshairTooltip.enable) {\n if ((this.valueX <= (axisRect.x + axisRect.width) && axisRect.x <= this.valueX) ||\n (this.valueY <= (axisRect.y + axisRect.height) && axisRect.y <= this.valueY)) {\n pathElement = document.getElementById(this.elementID + '_axis_tooltip_' + k);\n textElem = document.getElementById(this.elementID + '_axis_tooltip_text_' + k);\n text = this.getAxisText(axis);\n if (!text) {\n continue;\n }\n rect = this.tooltipLocation(text, axis, chartRect, axisRect);\n if (pathElement === null) {\n pathElement = chart.renderer.drawPath({\n 'id': this.elementID + '_axis_tooltip_' + k,\n 'fill': axis.crosshairTooltip.fill || chart.themeStyle.crosshairFill\n });\n axisGroup.appendChild(pathElement);\n options = new TextOption(this.elementID + '_axis_tooltip_text_' + k, 0, 0, 'start', text);\n textElem = textElement(options, axis.crosshairTooltip.textStyle, axis.crosshairTooltip.textStyle.color || chart.themeStyle.crosshairLabel, axisGroup);\n }\n direction = findDirection(this.rx, this.ry, rect, this.arrowLocation, 10, this.isTop, this.isBottom, this.isLeft, this.valueX, this.valueY);\n pathElement.setAttribute('d', direction);\n textElem.textContent = text;\n textElem.setAttribute('x', (rect.x + padding).toString());\n textElem.setAttribute('y', (rect.y + padding + 3 * this.elementSize.height / 4).toString());\n }\n else {\n removeElement(this.elementID + '_axis_tooltip_' + k);\n removeElement(this.elementID + '_axis_tooltip_text_' + k);\n }\n }\n }\n };\n Crosshair.prototype.getAxisText = function (axis) {\n var value;\n this.isBottom = false;\n this.isTop = false;\n this.isLeft = false;\n this.isRight = false;\n var labelValue = (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks')\n ? 0.5 : 0;\n if (axis.orientation === 'Horizontal') {\n value = getValueXByPoint(Math.abs(this.valueX - axis.rect.x), axis.rect.width, axis) + labelValue;\n this.isBottom = !axis.opposedPosition;\n this.isTop = axis.opposedPosition;\n }\n else {\n value = getValueYByPoint(Math.abs(this.valueY - axis.rect.y), axis.rect.height, axis) + labelValue;\n this.isRight = axis.opposedPosition;\n this.isLeft = !axis.opposedPosition;\n }\n if (axis.valueType === 'DateTime') {\n return axis.format(new Date(value));\n }\n else if (axis.valueType === 'Category') {\n return axis.labels[Math.floor(value)];\n }\n else if (axis.valueType === 'Logarithmic') {\n return value = axis.format(Math.pow(axis.logBase, value));\n }\n else {\n var customLabelFormat = axis.labelFormat && axis.labelFormat.match('{value}') !== null;\n return customLabelFormat ? axis.labelFormat.replace('{value}', axis.format(value)) : axis.format(value);\n }\n };\n Crosshair.prototype.tooltipLocation = function (text, axis, bounds, axisRect) {\n var isBottom = false;\n var isLeft = false;\n var padding = 5;\n var arrowPadding = 10;\n var tooltipRect;\n var boundsX = bounds.x;\n var boundsY = bounds.y;\n var islabelInside = axis.labelPosition === 'Inside';\n this.elementSize = measureText(text, axis.crosshairTooltip.textStyle);\n if (axis.orientation === 'Horizontal') {\n var yLocation = islabelInside ? axisRect.y - this.elementSize.height - (padding * 2 + arrowPadding) : axisRect.y;\n var height = islabelInside ? axisRect.y - this.elementSize.height - arrowPadding : axisRect.y + arrowPadding;\n this.arrowLocation = new ChartLocation(this.valueX, yLocation);\n tooltipRect = new Rect((this.valueX - (this.elementSize.width / 2) - padding), height, this.elementSize.width + padding * 2, this.elementSize.height + padding * 2);\n if (axis.opposedPosition) {\n tooltipRect.y = islabelInside ? axisRect.y : axisRect.y - (this.elementSize.height + padding * 2 + arrowPadding);\n }\n if (tooltipRect.x < boundsX) {\n tooltipRect.x = boundsX;\n }\n if (tooltipRect.x + tooltipRect.width > boundsX + bounds.width) {\n tooltipRect.x -= ((tooltipRect.x + tooltipRect.width) - (boundsX + bounds.width));\n }\n if (this.arrowLocation.x + arrowPadding / 2 > tooltipRect.x + tooltipRect.width - this.rx) {\n this.arrowLocation.x = tooltipRect.x + tooltipRect.width - this.rx - arrowPadding / 2;\n }\n if (this.arrowLocation.x - arrowPadding / 2 < tooltipRect.x + this.rx) {\n this.arrowLocation.x = tooltipRect.x + this.rx + arrowPadding / 2;\n }\n }\n else {\n this.arrowLocation = new ChartLocation(axisRect.x, this.valueY);\n var width = islabelInside ? axisRect.x : axisRect.x - (this.elementSize.width) - (padding * 2 + arrowPadding);\n tooltipRect = new Rect(width, this.valueY - (this.elementSize.height / 2) - padding, this.elementSize.width + (padding * 2), this.elementSize.height + padding * 2);\n if (axis.opposedPosition) {\n tooltipRect.x = islabelInside ? axisRect.x - this.elementSize.width - arrowPadding : axisRect.x + arrowPadding;\n if ((tooltipRect.x + tooltipRect.width) > this.chart.availableSize.width) {\n this.arrowLocation.x -= ((tooltipRect.x + tooltipRect.width) - this.chart.availableSize.width);\n tooltipRect.x -= ((tooltipRect.x + tooltipRect.width) - this.chart.availableSize.width);\n }\n }\n else {\n if (tooltipRect.x < 0) {\n this.arrowLocation.x -= tooltipRect.x;\n tooltipRect.x = 0;\n }\n }\n if (tooltipRect.y < boundsY) {\n tooltipRect.y = boundsY;\n }\n if (tooltipRect.y + tooltipRect.height >= boundsY + bounds.height) {\n tooltipRect.y -= ((tooltipRect.y + tooltipRect.height) - (boundsY + bounds.height));\n }\n if (this.arrowLocation.y + arrowPadding / 2 > tooltipRect.y + tooltipRect.height - this.ry) {\n this.arrowLocation.y = tooltipRect.y + tooltipRect.height - this.ry - arrowPadding / 2;\n }\n if (this.arrowLocation.y - arrowPadding / 2 < tooltipRect.y + this.ry) {\n this.arrowLocation.y = tooltipRect.y + this.ry + arrowPadding / 2;\n }\n }\n return tooltipRect;\n };\n Crosshair.prototype.stopAnimation = function () {\n stopTimer(this.crosshairInterval);\n };\n /**\n * Removes the crosshair on mouse leave.\n * @return {void}\n * @private\n */\n Crosshair.prototype.removeCrosshair = function (duration) {\n var chart = this.chart;\n var crosshair = document.getElementById(this.elementID + '_UserInteraction');\n this.stopAnimation();\n if (crosshair && crosshair.getAttribute('opacity') !== '0') {\n this.crosshairInterval = setTimeout(function () {\n new Animation({}).animate(crosshair, {\n duration: 200,\n progress: function (args) {\n // crosshair.removeAttribute('e-animate');\n crosshair.style.animation = '';\n crosshair.setAttribute('opacity', (1 - (args.timeStamp / args.duration)).toString());\n },\n end: function (model) {\n crosshair.setAttribute('opacity', '0');\n chart.startMove = false;\n if (chart.tooltipModule) {\n chart.tooltipModule.valueX = null;\n chart.tooltipModule.valueY = null;\n }\n }\n });\n }, duration);\n }\n };\n /**\n * Get module name.\n */\n Crosshair.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Crosshair';\n };\n /**\n * To destroy the crosshair.\n * @return {void}\n * @private\n */\n Crosshair.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return Crosshair;\n}());\nexport { Crosshair };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement, extend, Browser } from '@syncfusion/ej2-base';\nimport { Animation, compile as templateComplier } from '@syncfusion/ej2-base';\nimport { measureText, TextOption, Size, Rect, ChartLocation, textElement } from '../../common/utils/helper';\nimport { findDirection, stopTimer, removeElement } from '../../common/utils/helper';\nimport { ChartData } from '../../chart/utils/get-data';\nimport { tooltipRender } from '../../common/model/constants';\nimport { Theme } from '../../common/model/theme';\n/**\n * Tooltip Module used to render the tooltip for series.\n */\nvar BaseTooltip = /** @class */ (function (_super) {\n __extends(BaseTooltip, _super);\n /**\n * Constructor for tooltip module.\n * @private.\n */\n function BaseTooltip(chart) {\n var _this = _super.call(this, chart) || this;\n _this.padding = 5;\n _this.arrowPadding = 12;\n _this.rx = 2;\n _this.ry = 2;\n _this.markerPoint = [];\n _this.element = _this.chart.element;\n _this.textStyle = chart.tooltip.textStyle;\n _this.control = chart;\n return _this;\n }\n BaseTooltip.prototype.getElement = function (id) {\n return document.getElementById(id);\n };\n /**\n * Renders the tooltip.\n * @return {void}\n * @private\n */\n BaseTooltip.prototype.getTooltipElement = function (isTooltip) {\n this.inverted = this.chart.requireInvertedAxis;\n this.updateTemplateFn(this.control);\n this.formattedText = [];\n this.header = (this.control.tooltip.header === null) ?\n ((this.control.tooltip.shared) ? '${point.x}' : '${series.name}')\n : (this.control.tooltip.header);\n if (!isTooltip) {\n var elementCollection = document.getElementsByClassName('ejSVGTooltip');\n for (var i = elementCollection.length - 1; i >= 0; i--) {\n if (!this.getElement(this.element.id).contains(elementCollection[i])) {\n elementCollection[i].remove();\n }\n }\n return this.createElement(this.control);\n }\n return null;\n };\n BaseTooltip.prototype.createElement = function (chart) {\n this.textElements = [];\n var tooltipDiv = document.createElement('div');\n tooltipDiv.id = this.element.id + '_tooltip';\n tooltipDiv.className = 'ejSVGTooltip';\n tooltipDiv.setAttribute('style', 'pointer-events:none; position:absolute;z-index: 1');\n if (!chart.tooltip.template || chart.tooltip.shared) {\n // SVG element for tooltip\n var svgObject = chart.renderer.createSvg({ id: this.element.id + '_tooltip_svg' });\n tooltipDiv.appendChild(svgObject);\n // Group to hold text and path.\n var groupElement = chart.renderer.createGroup({ id: this.element.id + '_tooltip_group' });\n svgObject.appendChild(groupElement);\n var pathElement = chart.renderer.drawPath({\n 'id': this.element.id + '_tooltip_path', 'stroke-width': chart.tooltip.border.width,\n 'fill': chart.tooltip.fill || chart.themeStyle.tooltipFill, 'opacity': chart.tooltip.opacity,\n 'stroke': chart.tooltip.border.color\n });\n groupElement.appendChild(pathElement);\n }\n return tooltipDiv;\n };\n BaseTooltip.prototype.pushData = function (data, isFirst, tooltipDiv, isChart) {\n if (data.series.enableTooltip) {\n if (isChart) {\n this.currentPoints.push(data);\n }\n else {\n this.currentPoints.push(data);\n }\n this.stopAnimation();\n if (isFirst) {\n document.getElementById(this.element.id + '_Secondary_Element').appendChild(tooltipDiv);\n }\n return true;\n }\n return false;\n };\n BaseTooltip.prototype.renderTooltip = function (data, areaRect, location, textCollection, isFirst, cartesain) {\n if (this.triggerEvent(data, isFirst, textCollection)) {\n this.renderText(isFirst, this.control);\n this.removeHighlight(this.control);\n this.highlightPoints(data);\n return this.renderTooltipElement(this.control, data, areaRect, location, cartesain, isFirst);\n }\n else {\n this.removeHighlight(this.control);\n this.getElement(this.element.id + '_tooltip').remove();\n return null;\n }\n };\n BaseTooltip.prototype.renderTemplate = function (data, rect, location, point, isFirst) {\n this.removeHighlight(this.control);\n this.createTemplate(point, data, rect, location, this.getElement(this.element.id + '_tooltip'), isFirst);\n };\n BaseTooltip.prototype.renderTooltipElement = function (chart, pointData, areaRect, location, cartesain, isFirst) {\n var tooltipDiv = this.getElement(this.element.id + '_tooltip');\n var arrowLocation = new ChartLocation(0, 0);\n var tipLocation = new ChartLocation(0, 0);\n var textHeights;\n var svgObject = this.getElement(this.element.id + '_tooltip_svg');\n var groupElement = this.getElement(this.element.id + '_tooltip_group');\n var pathElement = this.getElement(this.element.id + '_tooltip_path');\n var rect;\n var isTop = false;\n var isLeft = false;\n var isBottom = false;\n var x = 0;\n var y = 0;\n this.tipRadius = 1;\n var series = pointData.series;\n if (this.header !== '') {\n this.elementSize.height += 5;\n }\n if (this.currentPoints.length > 1) {\n this.arrowPadding = 0;\n rect = this.sharedTooltipLocation(areaRect, this.valueX, this.valueY);\n isTop = true;\n }\n else {\n this.arrowPadding = 12;\n rect = this.seriesTooltipLocation(pointData, areaRect, location, arrowLocation, tipLocation);\n if (!this.inverted || !series.isRectSeries) {\n isTop = (rect.y < (location.y + (cartesain ? series.clipRect.y : 0)));\n isBottom = !isTop;\n y = (isTop ? 0 : this.arrowPadding);\n }\n else {\n isLeft = (rect.x < (location.x + series.clipRect.x));\n x = (isLeft ? 0 : this.arrowPadding);\n }\n }\n if (this.header !== '') {\n var headerSize = measureText(this.header, chart.tooltip.textStyle).height + (this.padding * 2) +\n (isBottom ? this.arrowPadding : 0); //header padding;\n var xLength = (this.padding * 3) + (!isLeft && !isTop && !isBottom ? this.arrowPadding : 0);\n var direction = 'M ' + xLength + ' ' + headerSize +\n 'L ' + (rect.width + (!isLeft && !isTop && !isBottom ? this.arrowPadding : 0) - (this.padding * 2)) +\n ' ' + headerSize;\n var pathElement_1 = this.chart.renderer.drawPath({\n 'id': this.element.id + '_header_path', 'stroke-width': 1,\n 'fill': null, 'opacity': 0.8, 'stroke': chart.themeStyle.tooltipHeaderLine, 'd': direction\n });\n groupElement.appendChild(pathElement_1);\n }\n var start = chart.tooltip.border.width / 2;\n var pointRect = new Rect(start + x, start + y, rect.width - start, rect.height - start);\n groupElement.setAttribute('opacity', '1');\n if (chart.tooltip.enableAnimation && !chart.tooltip.shared && !isFirst && !this.isComplete) {\n this.animateTooltipDiv(tooltipDiv, rect);\n }\n else {\n this.updateDiv(tooltipDiv, rect.x, rect.y);\n }\n this.isComplete = false;\n svgObject.setAttribute('height', (rect.height + chart.tooltip.border.width + (!((!this.inverted) ||\n (!pointData.series.isRectSeries)) ? 0 : this.arrowPadding)).toString());\n svgObject.setAttribute('width', (rect.width + chart.tooltip.border.width + (((!this.inverted) ||\n (!pointData.series.isRectSeries)) ? 0 : this.arrowPadding)).toString());\n svgObject.setAttribute('opacity', '1');\n pathElement.setAttribute('d', findDirection(this.rx, this.ry, pointRect, arrowLocation, this.arrowPadding, isTop, isBottom, isLeft, tipLocation.x, tipLocation.y, this.tipRadius));\n pathElement.setAttribute('filter', Browser.isIE ? '' : 'url(#chart_shadow_tooltip)');\n var shadowElement = '';\n shadowElement += '';\n shadowElement += '';\n var defElement = chart.renderer.createDefs();\n defElement.setAttribute('id', 'chart_tooltip_definition');\n groupElement.appendChild(defElement);\n defElement.innerHTML = shadowElement;\n pathElement.setAttribute('stroke', chart.tooltip.border.color);\n this.changeText(new ChartLocation(x, y), isBottom, !isLeft && !isTop && !isBottom, rect);\n return new Side(isBottom, !isLeft && !isTop && !isBottom);\n };\n BaseTooltip.prototype.changeText = function (point, isBottom, isRight, rect) {\n var element = document.getElementById(this.element.id + '_tooltip_text');\n if (isBottom) {\n element.setAttribute('transform', 'translate(0,' + this.arrowPadding + ')');\n }\n if (isRight) {\n element.setAttribute('transform', 'translate(' + this.arrowPadding + ' 0)');\n }\n };\n BaseTooltip.prototype.renderText = function (isRender, chart) {\n var height = 0;\n var width = 0; // Padding for text;\n var subWidth = 0;\n var size;\n var lines;\n var key = 'properties';\n var font = extend({}, this.chart.tooltip.textStyle, null, true)[key];\n var groupElement = this.getElement(this.element.id + '_tooltip_group');\n var tspanElement;\n var tspanStyle = '';\n var line;\n var tspanOption;\n this.header = this.header.replace(//g, '').replace(/<\\/b>/g, '').trim();\n var headerSpace = (this.header !== '' && this.formattedText[0] !== '') ? 5 : 0;\n var isRow = true;\n var isColumn = true;\n this.markerPoint = [];\n var markerSize = 10;\n var spaceWidth = 4;\n var dy = (22 / parseFloat(Theme.tooltipLabelFont.size)) * (parseFloat(font.size));\n if (!isRender) {\n removeElement(this.element.id + '_tooltip_text');\n removeElement(this.element.id + '_header_path');\n removeElement(this.element.id + '_tooltip_trackball_group');\n removeElement('chart_tooltip_definition');\n }\n var options = new TextOption(this.element.id + '_tooltip_text', this.padding * 2, this.padding * 4, 'start', '');\n var parentElement = textElement(options, font, null, groupElement, false);\n for (var k = 0, pointsLength = this.formattedText.length; k < pointsLength; k++) {\n var textCollection = this.formattedText[k].replace(/<(b|strong)>/g, '')\n .replace(/<\\/(b|strong)>/g, '')\n .split(//g);\n size = measureText(this.formattedText[k], font);\n if ((k !== 0) || (this.header === '')) {\n this.markerPoint.push((this.header !== '' ? (this.padding) : 0) + options.y + height);\n }\n for (var i = 0, len = textCollection.length; i < len; i++) {\n lines = textCollection[i].replace(//g, '
').replace(/<\\/b>/g, '
').split('
');\n subWidth = 0;\n isColumn = true;\n height += dy;\n for (var k_1 = 0, len_1 = lines.length; k_1 < len_1; k_1++) {\n line = lines[k_1];\n if (line.replace(//g, '').replace(/<\\/b>/g, '').trim() !== '') {\n subWidth += spaceWidth;\n if (isColumn && !isRow) {\n tspanOption = { x: (this.padding * 2) + (markerSize + 5), dy: dy + ((isColumn) ? headerSpace : 0), fill: '' };\n headerSpace = null;\n }\n else {\n if (isRow && isColumn) {\n tspanOption = { x: (this.header === '') ? ((this.padding * 2) + (markerSize + 5)) : (this.padding * 2) };\n }\n else {\n tspanOption = {};\n }\n }\n isColumn = false;\n tspanElement = chart.renderer.createTSpan(tspanOption, '');\n parentElement.appendChild(tspanElement);\n if (line.indexOf('') > -1) {\n tspanStyle = 'font-weight:bold';\n font.fontWeight = 'bold';\n (tspanElement).setAttribute('fill', chart.tooltip.textStyle.color || chart.themeStyle.tooltipBoldLabel);\n }\n else {\n tspanStyle = '';\n font.fontWeight = 'Normal';\n (tspanElement).setAttribute('fill', chart.tooltip.textStyle.color || chart.themeStyle.tooltipLightLabel);\n }\n (tspanElement).textContent = line = line.replace(/<[a-zA-Z\\/](.|\\n)*?>/g, '');\n subWidth += measureText(line, font).width;\n if (tspanStyle !== '') {\n tspanElement.setAttribute('style', tspanStyle);\n }\n isRow = false;\n }\n }\n subWidth -= spaceWidth;\n width = Math.max(width, subWidth);\n }\n }\n height -= (this.header ? this.padding : 0);\n this.elementSize = new Size(width + (width > 0 ? (2 * this.padding) : 0), height + (this.header !== '' ? this.padding : 0));\n this.elementSize.width += (markerSize + 5); // marker size + marker Spacing\n var element = (parentElement.childNodes[0]);\n if (this.header !== '' && element) {\n font.fontWeight = 'bold';\n var width_1 = (this.elementSize.width + (2 * this.padding)) / 2 - measureText(this.header, font).width / 2;\n element.setAttribute('x', width_1.toString());\n }\n };\n BaseTooltip.prototype.createTemplate = function (point, data, areaRect, location, parent, isFirst) {\n var chart = this.control;\n this.highlightPoints(data);\n var argsData = { cancel: false, name: tooltipRender, point: data.point, series: data.series, };\n this.chart.trigger(tooltipRender, argsData);\n var firstElement = this.getElement(this.element.id + '_tooltip').firstChild;\n if (firstElement) {\n firstElement.remove();\n }\n if (!argsData.cancel) {\n var templateElement = this.templateFn(point);\n var elem = createElement('div');\n while (templateElement.length > 0) {\n elem.appendChild(templateElement[0]);\n }\n parent.appendChild(elem);\n var rect = parent.getBoundingClientRect();\n this.padding = 0;\n this.elementSize = new Size(rect.width, rect.height);\n var tooltipRect = this.seriesTooltipLocation(data, areaRect, location, new ChartLocation(0, 0), new ChartLocation(0, 0));\n if (chart.tooltip.enableAnimation && !chart.tooltip.shared && !isFirst && !this.isComplete) {\n this.animateTooltipDiv(parent, tooltipRect);\n }\n else {\n this.updateDiv(parent, tooltipRect.x, tooltipRect.y);\n }\n this.isComplete = false;\n }\n else {\n this.removeHighlight(chart);\n this.getElement(this.element.id + '_tooltip').remove();\n }\n };\n BaseTooltip.prototype.sharedTooltipLocation = function (bounds, x, y) {\n var width = this.elementSize.width + (2 * this.padding);\n var height = this.elementSize.height + (2 * this.padding);\n var tooltipRect = new Rect(x + 2 * this.padding, y - height - this.padding, width, height);\n if (tooltipRect.y < bounds.y) {\n tooltipRect.y += (tooltipRect.height + 2 * this.padding);\n }\n if (tooltipRect.x + tooltipRect.width > bounds.x + bounds.width) {\n tooltipRect.x -= (tooltipRect.width + 4 * this.padding);\n }\n return tooltipRect;\n };\n BaseTooltip.prototype.seriesTooltipLocation = function (pointData, bounds, symbolLocation, arrowLocation, tipLocation) {\n var series = pointData.series;\n var location = new ChartLocation(symbolLocation.x, symbolLocation.y);\n if (series.type === 'RangeArea' && pointData.point.regions[0]) {\n if (!series.chart.requireInvertedAxis) {\n location.y = pointData.point.regions[0].y + pointData.point.regions[0].height / 2;\n }\n else {\n location.x = pointData.point.regions[0].x + pointData.point.regions[0].width / 2;\n }\n }\n var width = this.elementSize.width + (2 * this.padding);\n var height = this.elementSize.height + (2 * this.padding);\n var markerHeight = 0;\n if (!series.isRectSeries) {\n var chartSeries = pointData.series;\n markerHeight = (this.chart.tooltip.shared || chartSeries.marker.visible || series.type === 'Scatter'\n || chartSeries.drawType === 'Scatter') ? ((chartSeries.marker.height + 2) / 2 + (2 * chartSeries.marker.border.width)) : 0;\n }\n var clipX = this.chart.chartAreaType === 'PolarRadar' ? 0 : series.clipRect.x;\n var clipY = this.chart.chartAreaType === 'PolarRadar' ? 0 : series.clipRect.y;\n var boundsX = bounds.x;\n var boundsY = bounds.y;\n if (!this.inverted || !series.isRectSeries) {\n location.y = (series.type === 'Waterfall' && pointData.point.y < 0) ?\n location.y - pointData.point.regions[0].height : location.y;\n location = new ChartLocation(location.x + clipX - this.elementSize.width / 2 - this.padding, location.y + clipY - this.elementSize.height - (2 * this.padding) - this.arrowPadding - markerHeight);\n arrowLocation.x = tipLocation.x = width / 2;\n if (location.y < boundsY || (series.isRectSeries && pointData.point.y < 0 && series.type !== 'Waterfall')) {\n location.y = (symbolLocation.y < 0 ? 0 : symbolLocation.y) + clipY + markerHeight;\n }\n if (location.y + height + this.arrowPadding > boundsY + bounds.height) {\n location.y = (symbolLocation.y > bounds.height ? bounds.height : symbolLocation.y)\n + clipY - this.elementSize.height - (2 * this.padding) - this.arrowPadding - markerHeight;\n }\n tipLocation.x = width / 2;\n if (location.x < boundsX) {\n arrowLocation.x -= (boundsX - location.x);\n tipLocation.x -= (boundsX - location.x);\n location.x = boundsX;\n }\n if (location.x + width > boundsX + bounds.width) {\n arrowLocation.x += ((location.x + width) - (boundsX + bounds.width));\n tipLocation.x += ((location.x + width) - (boundsX + bounds.width));\n location.x -= ((location.x + width) - (boundsX + bounds.width));\n }\n if (arrowLocation.x + this.arrowPadding / 2 > width - this.rx) {\n arrowLocation.x = width - this.rx - this.arrowPadding / 2;\n tipLocation.x = width;\n this.tipRadius = 0;\n }\n if (arrowLocation.x - this.arrowPadding / 2 < this.rx) {\n arrowLocation.x = this.rx + this.arrowPadding / 2;\n tipLocation.x = 0;\n this.tipRadius = 0;\n }\n }\n else {\n location.x = (series.type === 'Waterfall' && pointData.point.y < 0) ?\n location.x + pointData.point.regions[0].width : location.x;\n location = new ChartLocation(location.x + clipX + markerHeight, location.y + clipY - this.elementSize.height / 2 - (this.padding));\n arrowLocation.y = tipLocation.y = height / 2;\n if ((location.x + width + this.arrowPadding > boundsX + bounds.width) || (series.isRectSeries &&\n pointData.point.y < 0 && series.type !== 'Waterfall')) {\n location.x = (symbolLocation.x > bounds.width ? bounds.width : symbolLocation.x)\n + clipX - markerHeight - (width + this.arrowPadding);\n }\n if (location.x < boundsX) {\n location.x = (symbolLocation.x < 0 ? 0 : symbolLocation.x) + clipX + markerHeight;\n }\n if (location.y <= boundsY) {\n arrowLocation.y -= (boundsY - location.y);\n tipLocation.y -= (boundsY - location.y);\n location.y = boundsY;\n }\n if (location.y + height >= boundsY + bounds.height) {\n arrowLocation.y += ((location.y + height) - (boundsY + bounds.height));\n tipLocation.y += ((location.y + height) - (boundsY + bounds.height));\n location.y -= ((location.y + height) - (boundsY + bounds.height));\n }\n if (arrowLocation.y + this.arrowPadding / 2 > height - this.ry) {\n arrowLocation.y = height - this.ry - this.arrowPadding / 2;\n tipLocation.y = height;\n this.tipRadius = 0;\n }\n if (arrowLocation.y - this.arrowPadding / 2 < this.ry) {\n arrowLocation.y = this.ry + this.arrowPadding / 2;\n tipLocation.y = 0;\n this.tipRadius = 0;\n }\n }\n return new Rect(location.x, location.y, width, height);\n };\n /*\n * @hidden\n */\n BaseTooltip.prototype.progressAnimation = function (element, tooltipGroup, series, opacity, rectOpacity, timeStamp, isRect, shared) {\n tooltipGroup.style.animation = '';\n tooltipGroup.setAttribute('opacity', (opacity - timeStamp).toString());\n if (element && isRect && !shared) {\n element.setAttribute('opacity', (rectOpacity + (rectOpacity * timeStamp)).toString());\n }\n };\n /*\n * @hidden\n */\n BaseTooltip.prototype.endAnimation = function (element, tooltipGroup, series, shared) {\n this.currentPoints = [];\n if (element && series.isRectSeries) {\n element.setAttribute('opacity', series.opacity.toString());\n }\n this.removeHighlight(this.control);\n tooltipGroup.setAttribute('opacity', '0');\n if (this.control.tooltip.template && !shared) {\n tooltipGroup.style.display = 'none';\n }\n this.isComplete = true;\n this.control.trigger('animationComplete', {});\n };\n BaseTooltip.prototype.removeHighlight = function (chart) {\n var item;\n var series;\n for (var i = 0, len = this.previousPoints.length; i < len; i++) {\n item = this.previousPoints[i];\n if (item.series.isRectSeries) {\n if (item.series.visible) {\n this.highlightPoint(item.series, item.point.index, false);\n }\n continue;\n }\n series = item.series;\n if (!series.marker.visible && item.series.type !== 'Scatter' && item.series.type !== 'Bubble') {\n this.previousPoints.shift();\n len -= 1;\n }\n }\n };\n BaseTooltip.prototype.highlightPoint = function (series, pointIndex, highlight) {\n var element = this.getElement(this.element.id + '_Series_' + series.index + '_Point_' + pointIndex);\n if (element) {\n element.setAttribute('opacity', (highlight ? series.opacity / 2 : series.opacity).toString());\n }\n };\n BaseTooltip.prototype.highlightPoints = function (item) {\n if (item.series.isRectSeries) {\n this.highlightPoint(item.series, item.point.index, true);\n return null;\n }\n };\n BaseTooltip.prototype.animateTooltipDiv = function (tooltipDiv, rect) {\n var _this = this;\n var x = parseFloat(tooltipDiv.style.left);\n var y = parseFloat(tooltipDiv.style.top);\n var currenDiff;\n new Animation({}).animate(tooltipDiv, {\n duration: 300,\n progress: function (args) {\n currenDiff = (args.timeStamp / args.duration);\n tooltipDiv.style.animation = null;\n tooltipDiv.style.left = (x + currenDiff * (rect.x - x)) + 'px';\n tooltipDiv.style.top = (y + currenDiff * (rect.y - y)) + 'px';\n },\n end: function (model) {\n _this.updateDiv(tooltipDiv, rect.x, rect.y);\n }\n });\n };\n BaseTooltip.prototype.updateDiv = function (tooltipDiv, x, y) {\n tooltipDiv.style.left = x + 'px';\n tooltipDiv.style.top = y + 'px';\n };\n BaseTooltip.prototype.triggerEvent = function (point, isFirst, textCollection, firstText) {\n if (firstText === void 0) { firstText = true; }\n var argsData = {\n cancel: false, name: tooltipRender, text: textCollection,\n point: point.point, series: point.series, textStyle: this.textStyle\n };\n this.chart.trigger(tooltipRender, argsData);\n if (!argsData.cancel) {\n if (point.series.type === 'BoxAndWhisker') {\n this.removeText();\n isFirst = true;\n }\n this.formattedText = this.formattedText.concat(argsData.text);\n }\n return !argsData.cancel;\n };\n BaseTooltip.prototype.removeText = function () {\n this.textElements = [];\n var element = this.getElement(this.element.id + '_tooltip_group');\n if (element.childNodes.length > 0) {\n while (element.lastChild && element.childNodes.length !== 1) {\n element.removeChild(element.lastChild);\n }\n }\n };\n BaseTooltip.prototype.updateTemplateFn = function (chart) {\n if (chart.tooltip.template) {\n var e = void 0;\n try {\n if (document.querySelectorAll(chart.tooltip.template).length) {\n this.templateFn = templateComplier(document.querySelector(chart.tooltip.template).innerHTML.trim());\n }\n }\n catch (e) {\n this.templateFn = templateComplier(chart.tooltip.template);\n }\n }\n };\n BaseTooltip.prototype.stopAnimation = function () {\n stopTimer(this.toolTipInterval);\n };\n return BaseTooltip;\n}(ChartData));\nexport { BaseTooltip };\nvar Side = /** @class */ (function () {\n function Side(bottom, right) {\n this.isRight = right;\n this.isBottom = bottom;\n }\n return Side;\n}());\nexport { Side };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { extend, Browser } from '@syncfusion/ej2-base';\nimport { Animation } from '@syncfusion/ej2-base';\nimport { Size, PointData, ChartLocation } from '../../common/utils/helper';\nimport { drawSymbol, PathOption, valueToCoefficient, removeElement, valueToPolarCoefficient, withInBounds } from '../../common/utils/helper';\nimport { BaseTooltip } from '../../common/user-interaction/tooltip';\n/**\n * `Tooltip` module is used to render the tooltip for chart series.\n */\nvar Tooltip = /** @class */ (function (_super) {\n __extends(Tooltip, _super);\n /**\n * Constructor for tooltip module.\n * @private.\n */\n function Tooltip(chart) {\n var _this = _super.call(this, chart) || this;\n _this.addEventListener();\n return _this;\n }\n /**\n * @hidden\n */\n Tooltip.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n this.chart.on(cancelEvent, this.mouseLeaveHandler, this);\n this.chart.on('tapHold', this.longPress, this);\n this.chart.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.chart.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n };\n Tooltip.prototype.mouseUpHandler = function () {\n var chart = this.control;\n if (chart.isTouch && !this.isSelected(chart) &&\n ((withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect) && chart.tooltip.shared)\n || !chart.tooltip.shared)) {\n if (!chart.crosshair.enable) {\n this.tooltip();\n this.removeTooltip(2000);\n }\n else if (chart.startMove) {\n this.removeTooltip(2000);\n }\n }\n };\n Tooltip.prototype.mouseLeaveHandler = function () {\n this.removeTooltip(1000);\n };\n Tooltip.prototype.mouseMoveHandler = function () {\n var chart = this.chart;\n // Tooltip for chart series.\n if (!chart.disableTrackTooltip && !this.isSelected(chart)) {\n if (!chart.tooltip.shared && (!chart.isTouch || (chart.startMove))) {\n this.tooltip();\n }\n if (withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n if (chart.tooltip.shared && (!chart.isTouch || (chart.startMove))) {\n this.tooltip();\n }\n }\n else {\n if (chart.tooltip.shared) {\n this.removeTooltip(1000);\n }\n }\n }\n };\n /**\n * Handles the long press on chart.\n * @return {boolean}\n * @private\n */\n Tooltip.prototype.longPress = function () {\n var chart = this.chart;\n if (chart.crosshair.enable && withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n this.tooltip();\n }\n return false;\n };\n /**\n * Renders the tooltip.\n * @return {void}\n */\n Tooltip.prototype.tooltip = function () {\n var isTooltip = this.getElement(this.element.id + '_tooltip');\n var tooltipDiv = this.getTooltipElement(isTooltip);\n if (!this.chart.tooltip.shared) {\n this.renderSeriesTooltip(this.chart, !isTooltip, tooltipDiv);\n }\n else {\n this.renderGroupedTooltip(this.chart, !isTooltip, tooltipDiv);\n }\n };\n Tooltip.prototype.findHeader = function (data) {\n this.header = this.parseTemplate(data.point, data.series, this.header, data.series.xAxis, data.series.yAxis);\n if (this.header.replace(//g, '').replace(/<\\/b>/g, '').trim() !== '') {\n this.formattedText = this.formattedText.concat(this.header);\n }\n };\n Tooltip.prototype.renderSeriesTooltip = function (chart, isFirst, tooltipDiv) {\n var data = this.getData();\n var markerSide;\n data.lierIndex = this.lierIndex;\n var rect = chart.chartAxisLayoutPanel.seriesClipRect;\n this.currentPoints = [];\n if (this.findData(data, this.previousPoints[0])) {\n if (this.pushData(data, isFirst, tooltipDiv, true)) {\n var text = this.getTooltipText(data);\n if (!chart.tooltip.template) {\n if (this.header !== '') {\n this.findHeader(data);\n }\n markerSide = this.renderTooltip(data, rect, this.getSymbolLocation(data), text, isFirst, chart.chartAreaType === 'Cartesian');\n if (markerSide) {\n this.drawMarker(markerSide.isBottom, markerSide.isRight, 10);\n }\n }\n else {\n this.renderTemplate(data, rect, this.getSymbolLocation(data), this.getTemplateText(data), isFirst);\n }\n this.isRemove = true;\n }\n this.previousPoints = extend([], this.currentPoints, null, true);\n }\n else {\n if (!data.point && this.isRemove) {\n this.removeTooltip(1000);\n this.isRemove = false;\n }\n else {\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n if (series.visible) {\n data = this.getClosestX(chart, series) || data;\n }\n }\n }\n }\n if (data && data.point) {\n this.findMouseValue(data, chart);\n }\n };\n Tooltip.prototype.findData = function (data, previous) {\n return data.point && ((!previous || (previous.point !== data.point)) ||\n (previous && previous.lierIndex > 3 && previous.lierIndex !== this.lierIndex));\n };\n Tooltip.prototype.getSymbolLocation = function (data) {\n return data.series.type === 'BoxAndWhisker' ?\n this.getBoxLocation(data) : data.point.symbolLocations[0];\n };\n Tooltip.prototype.getTooltipText = function (pointData) {\n var series = pointData.series;\n var text;\n return this.parseTemplate(pointData.point, series, this.getFormat(this.chart, series), series.xAxis, series.yAxis);\n };\n Tooltip.prototype.getTemplateText = function (data) {\n var point = extend({}, data.point);\n point.x = this.formatPointValue(data.point, data.series.xAxis, 'x', true, false);\n if ((data.series.seriesType === 'XY')) {\n point.y = this.formatPointValue(data.point, data.series.yAxis, 'y', false, true);\n }\n else {\n point.low = this.formatPointValue(data.point, data.series.yAxis, 'low', false, true);\n point.high = this.formatPointValue(data.point, data.series.yAxis, 'high', false, true);\n }\n return point;\n };\n Tooltip.prototype.findMouseValue = function (data, chart) {\n if (!chart.requireInvertedAxis) {\n if (chart.chartAreaType === 'PolarRadar') {\n this.valueX = valueToPolarCoefficient(data.point.xValue, data.series.xAxis) * data.series.xAxis.rect.width\n + data.series.xAxis.rect.x;\n }\n else {\n this.valueX = valueToCoefficient(data.point.xValue, data.series.xAxis) * data.series.xAxis.rect.width\n + data.series.xAxis.rect.x;\n }\n this.valueY = chart.mouseY;\n }\n else {\n this.valueY = (1 - valueToCoefficient(data.point.xValue, data.series.xAxis)) * data.series.xAxis.rect.height\n + data.series.xAxis.rect.y;\n this.valueX = chart.mouseX;\n }\n };\n Tooltip.prototype.renderGroupedTooltip = function (chart, isFirst, tooltipDiv) {\n var data;\n var height = 0;\n var width = 0;\n var pointData = chart.chartAreaType === 'PolarRadar' ? this.getData() : null;\n this.stopAnimation();\n this.removeHighlight(chart);\n this.currentPoints = [];\n var extraPoints = [];\n var markerSide;\n if (isFirst) {\n document.getElementById(this.element.id + '_Secondary_Element').appendChild(tooltipDiv);\n }\n this.removeText();\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n if (!series.enableTooltip) {\n continue;\n }\n if (chart.chartAreaType === 'Cartesian' && series.visible) {\n data = this.getClosestX(chart, series);\n }\n else if (chart.chartAreaType === 'PolarRadar' && series.visible && pointData.point !== null) {\n data = new PointData(series.points[pointData.point.index], series);\n }\n if (data && this.header !== '' && this.currentPoints.length === 0) {\n this.findHeader(data);\n }\n if (data && this.triggerEvent(data, isFirst, this.getTooltipText(data))) {\n if (series.category === 'Series') {\n this.highlightPoints(data);\n }\n this.findMouseValue(data, chart);\n this.currentPoints.push(data);\n data = null;\n }\n else if (data) {\n extraPoints.push(data);\n }\n }\n if (this.currentPoints.length > 0) {\n this.renderText(isFirst, chart);\n markerSide = this.renderTooltipElement(chart, this.currentPoints[0], chart.chartAxisLayoutPanel.seriesClipRect, this.getSymbolLocation(this.currentPoints[0]), chart.chartAreaType === 'Cartesian', isFirst);\n this.drawMarker(markerSide.isBottom, markerSide.isRight, 10);\n }\n else {\n this.getElement(this.element.id + '_tooltip_path').setAttribute('d', '');\n }\n this.currentPoints = this.currentPoints.concat(extraPoints);\n this.previousPoints = extend([], this.currentPoints, null, true);\n };\n Tooltip.prototype.getBoxLocation = function (data) {\n var location;\n location = this.lierIndex > 3 ? data.point.symbolLocations[this.lierIndex - 4] :\n {\n x: data.point.regions[0].x + (data.point.regions[0].width / 2),\n y: data.point.regions[0].y + (data.point.regions[0].height / 2)\n };\n return location;\n };\n Tooltip.prototype.drawMarker = function (isBottom, isRight, size) {\n var shapeOption;\n var count = 0;\n var series;\n var markerGroup = this.chart.renderer.createGroup({ id: this.element.id + '_tooltip_trackball_group' });\n var groupElement = this.getElement(this.element.id + '_tooltip_group');\n var x = (this.padding * 2) + (size / 2) + (isRight ? this.arrowPadding : 0);\n for (var _i = 0, _a = this.currentPoints; _i < _a.length; _i++) {\n var data = _a[_i];\n series = data.series;\n if (series.visible && series.enableTooltip && data.point.visible) {\n shapeOption = new PathOption(this.element.id + '_Tooltip_Trackball_' + series.index, this.findColor(data, series) || series.interior, 1, '#cccccc', series.opacity, null);\n markerGroup.appendChild(drawSymbol(new ChartLocation(x, this.markerPoint[count] - this.padding + (isBottom ? this.arrowPadding : 0)), data.point.marker.shape || series.marker.shape, new Size(size, size), series.marker.imageUrl, shapeOption, null));\n count++;\n }\n }\n groupElement.appendChild(markerGroup);\n };\n Tooltip.prototype.findColor = function (data, series) {\n if (series.isRectSeries) {\n return data.point.color;\n }\n else {\n return (data.point.color && data.point.color !== '#ffffff' ? data.point.color : data.point.interior) || series.marker.fill;\n }\n };\n Tooltip.prototype.parseTemplate = function (point, series, format, xAxis, yAxis) {\n var val;\n var textValue;\n var xFormat;\n var customLabelFormat;\n var chart = this.chart;\n for (var _i = 0, _a = Object.keys(point); _i < _a.length; _i++) {\n var dataValue = _a[_i];\n val = new RegExp('${point' + '.' + dataValue + '}', 'gm');\n format = format.replace(val.source, this.formatPointValue(point, val.source === '${point.x}' ? xAxis : yAxis, dataValue, val.source === '${point.x}', (val.source === '${point.high}' ||\n val.source === '${point.open}' ||\n val.source === '${point.close}' ||\n val.source === '${point.low}' ||\n val.source === '${point.y}' ||\n val.source === '${point.minimum}' ||\n val.source === '${point.maximum}' ||\n val.source === '${point.outliers}' ||\n val.source === '${point.upperQuartile}' ||\n val.source === '${point.lowerQuartile}' ||\n val.source === '${point.median}')));\n }\n for (var _b = 0, _c = Object.keys(Object.getPrototypeOf(series)); _b < _c.length; _b++) {\n var dataValue = _c[_b];\n val = new RegExp('${series' + '.' + dataValue + '}', 'gm');\n textValue = series[dataValue];\n format = format.replace(val.source, textValue);\n }\n return format;\n };\n Tooltip.prototype.formatPointValue = function (point, axis, dataValue, isXPoint, isYPoint) {\n var textValue;\n var customLabelFormat;\n var value;\n if (axis.valueType !== 'Category' && isXPoint) {\n customLabelFormat = axis.labelFormat && axis.labelFormat.match('{value}') !== null;\n textValue = customLabelFormat ? axis.labelFormat.replace('{value}', axis.format(point[dataValue])) :\n axis.format(point[dataValue]);\n }\n else if (isYPoint) {\n customLabelFormat = axis.labelFormat && axis.labelFormat.match('{value}') !== null;\n value = dataValue === 'outliers' ? axis.format(point[dataValue][this.lierIndex - 4]) :\n axis.format(point[dataValue]);\n textValue = customLabelFormat ? axis.labelFormat.replace('{value}', value) : value;\n }\n else {\n textValue = point[dataValue];\n }\n return textValue;\n };\n Tooltip.prototype.getFormat = function (chart, series) {\n if (chart.tooltip.format) {\n if (series.seriesType === 'XY' && series.category === 'Indicator') {\n return this.getIndicatorTooltipFormat(series, chart, chart.tooltip.format);\n }\n return chart.tooltip.format;\n }\n var format = !chart.tooltip.shared ? '${point.x}' : '${series.name}';\n switch (series.seriesType) {\n case 'XY':\n if (series.category === 'Indicator') {\n this.getIndicatorTooltipFormat(series, chart, chart.tooltip.format);\n }\n return format + ' : ' + ((series.type === 'Bubble') ? '${point.y} Size : ${point.size}'\n : '${point.y}');\n case 'HighLow':\n return format + ('
High : ${point.high}
Low : ${point.low}');\n case 'HighLowOpenClose':\n return format + ('
High : ${point.high}
Low : ${point.low}
' +\n 'Open : ${point.open}
Close : ${point.close}');\n case 'BoxPlot': {\n return format + '
' + (this.lierIndex > 3 ? 'Outliers : ${point.outliers}' :\n 'Maximum : ${point.maximum}
Q1 : ${point.upperQuartile}
' +\n 'Median : ${point.median}
Q3 : ${point.lowerQuartile}
Minimum : ${point.minimum}');\n }\n }\n return '';\n };\n Tooltip.prototype.getIndicatorTooltipFormat = function (series, chart, format) {\n var toolTip;\n var points = [];\n if (series.seriesType === 'XY') {\n toolTip = series.name + ' : ${point.y}';\n }\n else {\n toolTip = format;\n }\n return toolTip;\n };\n /*\n * @hidden\n */\n Tooltip.prototype.removeHighlightedMarker = function (data) {\n for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {\n var item = data_1[_i];\n removeElement(this.element.id + '_Series_' + item.series.index +\n '_Point_' + item.point.index + '_Trackball');\n }\n if (this.chart.markerRender) {\n this.chart.markerRender.removeHighlightedMarker();\n }\n this.previousPoints = [];\n };\n /**\n * Removes the tooltip on mouse leave.\n * @return {void}\n * @private\n */\n Tooltip.prototype.removeTooltip = function (duration) {\n var _this = this;\n var chart = this.chart;\n var tooltipElement = this.getElement(this.element.id + '_tooltip');\n this.stopAnimation();\n if (tooltipElement && this.previousPoints.length > 0) {\n var data_2 = this.previousPoints;\n this.toolTipInterval = setTimeout(function () {\n var rectOpacity;\n var tooltipGroup = tooltipElement.firstChild;\n var series = data_2[0].series;\n var element = _this.getElement(chart.element.id + '_Series_' + data_2[0].series.index\n + '_Point_' + data_2[0].point.index);\n var opacity = parseFloat(tooltipGroup.getAttribute('opacity')) || 1;\n if (element && series.isRectSeries && !chart.tooltip.shared) {\n rectOpacity = parseFloat(element.getAttribute('opacity'));\n }\n new Animation({}).animate(tooltipGroup, {\n duration: 200,\n progress: function (args) {\n // tooltipGroup.removeAttribute('e-animate');\n _this.progressAnimation(element, tooltipGroup, series, opacity, rectOpacity, (args.timeStamp / args.duration), series.isRectSeries, !chart.tooltip.shared);\n },\n end: function (model) {\n _this.valueX = null;\n _this.valueY = null;\n _this.endAnimation(element, tooltipGroup, series, chart.tooltip.shared);\n _this.removeHighlightedMarker(data_2);\n }\n });\n }, duration);\n }\n };\n /**\n * Get module name.\n */\n Tooltip.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Tooltip';\n };\n /**\n * To destroy the tooltip.\n * @return {void}\n * @private\n */\n Tooltip.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return Tooltip;\n}(BaseTooltip));\nexport { Tooltip };\n","import { EventHandler } from '@syncfusion/ej2-base';\nimport { remove } from '@syncfusion/ej2-base';\nimport { removeElement, measureText, RectOption, Rect, PolygonOption, PathOption, createTooltip, minMax } from '../../common/utils/helper';\nimport { textElement, TextOption } from '../../common/utils/helper';\n/**\n * Zooming Toolkit created here\n * @private\n */\nvar Toolkit = /** @class */ (function () {\n /** @private */\n function Toolkit(chart) {\n this.chart = chart;\n this.elementId = chart.element.id;\n this.selectionColor = '#ff4081';\n this.fillColor = '#737373';\n }\n /**\n * To create the pan button.\n * @return {void}\n * @private\n */\n Toolkit.prototype.createPanButton = function (childElement, parentElement, chart) {\n var render = this.chart.renderer;\n var fillColor = this.chart.zoomModule.isPanning ? this.selectionColor : this.fillColor;\n var direction = 'M5,3h2.3L7.275,5.875h1.4L8.65,3H11L8,0L5,3z M3,11V8.7l2.875,0.025v-1.4L3,7.35V5L0,8L3,';\n direction += '11z M11,13H8.7l0.025-2.875h-1.4L7.35,13H5l3,3L11,13z M13,5v2.3l-2.875-0.025v1.4L13,8.65V11l3-3L13,5z';\n childElement.id = this.elementId + '_Zooming_Pan';\n childElement.setAttribute('aria-label', this.chart.getLocalizedLabel('Pan'));\n this.panElements = childElement;\n childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_Pan_1', 'transparent', {}, 1, new Rect(0, 0, 16, 16))));\n childElement.appendChild(render.drawPath(new PathOption(this.elementId + '_Zooming_Pan_2', fillColor, null, null, 1, null, direction)));\n parentElement.appendChild(childElement);\n this.wireEvents(childElement, this.pan);\n };\n /**\n * To create the zoom button.\n * @return {void}\n * @private\n */\n Toolkit.prototype.createZoomButton = function (childElement, parentElement, chart) {\n var render = this.chart.renderer;\n var fillColor = this.chart.zoomModule.isPanning ? this.fillColor : this.selectionColor;\n var direction = 'M0.001,14.629L1.372,16l4.571-4.571v-0.685l0.228-0.274c1.051,0.868,2.423,1.417,3.885,1.417c3.291,0,';\n direction += '5.943-2.651,5.943-5.943S13.395,0,10.103,0S4.16,2.651,4.16,5.943c0,1.508,0.503,2.834,1.417,3.885l-0.274,0.228H4.571';\n direction = direction + 'L0.001,14.629L0.001,14.629z M5.943,5.943c0-2.285,1.828-4.114,4.114-4.114s4.114,1.828,4.114,';\n childElement.id = this.elementId + '_Zooming_Zoom';\n childElement.setAttribute('aria-label', this.chart.getLocalizedLabel('Zoom'));\n this.zoomElements = childElement;\n childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_Zoom_1', 'transparent', {}, 1, new Rect(0, 0, 16, 16))));\n childElement.appendChild(render.drawPath(new PathOption(this.elementId + '_Zooming_Zoom_3', fillColor, null, null, 1, null, direction + '4.114s-1.828,4.114-4.114,4.114S5.943,8.229,5.943,5.943z')));\n parentElement.appendChild(childElement);\n this.wireEvents(childElement, this.zoom);\n };\n /**\n * To create the ZoomIn button.\n * @return {void}\n * @private\n */\n Toolkit.prototype.createZoomInButton = function (childElement, parentElement, chart) {\n var render = this.chart.renderer;\n var fillColor = this.fillColor;\n var direction = 'M10.103,0C6.812,0,4.16,2.651,4.16,5.943c0,1.509,0.503,2.834,1.417,3.885l-0.274,0.229H4.571L0,';\n direction += '14.628l0,0L1.372,16l4.571-4.572v-0.685l0.228-0.275c1.052,0.868,2.423,1.417,3.885,1.417c3.291,0,5.943-2.651,';\n direction += '5.943-5.943C16,2.651,13.395,0,10.103,0z M10.058,10.058c-2.286,0-4.114-1.828-4.114-4.114c0-2.286,1.828-4.114,';\n childElement.id = this.elementId + '_Zooming_ZoomIn';\n childElement.setAttribute('aria-label', this.chart.getLocalizedLabel('ZoomIn'));\n var polygonDirection = '12.749,5.466 10.749,5.466 10.749,3.466 9.749,3.466 9.749,5.466 7.749,5.466 7.749,6.466';\n childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_ZoomIn_1', 'transparent', {}, 1, new Rect(0, 0, 16, 16))));\n childElement.appendChild(render.drawPath(new PathOption(this.elementId + '_Zooming_ZoomIn_2', fillColor, null, null, 1, null, direction + '4.114-4.114c2.286,0,4.114,1.828,4.114,4.114C14.172,8.229,12.344,10.058,10.058,10.058z')));\n childElement.appendChild(render.drawPolygon(new PolygonOption(this.elementId + '_Zooming_ZoomIn_3', polygonDirection + ' 9.749,6.466 9.749,8.466 10.749,8.466 10.749,6.466 12.749,6.466', fillColor)));\n this.zoomInElements = childElement;\n this.elementOpacity = chart.zoomModule.isPanning ? '0.2' : '1';\n childElement.setAttribute('opacity', this.elementOpacity);\n parentElement.appendChild(childElement);\n this.wireEvents(childElement, this.zoomIn);\n };\n /**\n * To create the ZoomOut button.\n * @return {void}\n * @private\n */\n Toolkit.prototype.createZoomOutButton = function (childElement, parentElement, chart) {\n var render = this.chart.renderer;\n var fillColor = this.fillColor;\n var direction = 'M0,14.622L1.378,16l4.533-4.533v-0.711l0.266-0.266c1.022,0.889,2.4,1.422,3.866,';\n direction += '1.422c3.289,0,5.955-2.666,5.955-5.955S13.333,0,10.044,0S4.089,2.667,4.134,5.911c0,1.466,0.533,2.844,';\n direction += '1.422,3.866l-0.266,0.266H4.578L0,14.622L0,14.622z M5.911,5.911c0-2.311,1.822-4.133,4.133-4.133s4.133,1.822,4.133,';\n childElement.id = this.elementId + '_Zooming_ZoomOut';\n childElement.setAttribute('aria-label', this.chart.getLocalizedLabel('ZoomOut'));\n childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_ZoomOut_1', 'transparent', {}, 1, new Rect(0, 0, 16, 16))));\n childElement.appendChild(render.drawPath(new PathOption(this.elementId + '_Zooming_ZoomOut_2', fillColor, null, null, 1, null, direction + '4.133s-1.866,4.133-4.133,4.133S5.911,8.222,5.911,5.911z M12.567,6.466h-5v-1h5V6.466z')));\n this.zoomOutElements = childElement;\n this.elementOpacity = chart.zoomModule.isPanning ? '0.2' : '1';\n childElement.setAttribute('opacity', this.elementOpacity);\n parentElement.appendChild(childElement);\n this.wireEvents(childElement, this.zoomOut);\n };\n /**\n * To create the Reset button.\n * @return {void}\n * @private\n */\n Toolkit.prototype.createResetButton = function (childElement, parentElement, chart, isDevice) {\n var render = this.chart.renderer;\n var fillColor = this.fillColor;\n var size;\n var direction = 'M12.364,8h-2.182l2.909,3.25L16,8h-2.182c0-3.575-2.618-6.5-5.818-6.5c-1.128,0-2.218,0.366-3.091,';\n direction += '1.016l1.055,1.178C6.581,3.328,7.272,3.125,8,3.125C10.4,3.125,12.363,5.319,12.364,8L12.364,8z M11.091,';\n direction += '13.484l-1.055-1.178C9.419,12.672,8.728,12.875,8,12.875c-2.4,0-4.364-2.194-4.364-4.875h2.182L2.909,4.75L0,8h2.182c0,';\n childElement.id = this.elementId + '_Zooming_Reset';\n childElement.setAttribute('aria-label', this.chart.getLocalizedLabel('Reset'));\n if (!isDevice) {\n childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_Reset_1', 'transparent', {}, 1, new Rect(0, 0, 16, 16))));\n childElement.appendChild(render.drawPath(new PathOption(this.elementId + '_Zooming_Reset_2', fillColor, null, null, 1, null, direction + '3.575,2.618,6.5,5.818,6.5C9.128,14.5,10.219,14.134,11.091,13.484L11.091,13.484z')));\n }\n else {\n size = measureText(this.chart.getLocalizedLabel('ResetZoom'), { size: '12px' });\n childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_Reset_1', 'transparent', {}, 1, new Rect(0, 0, size.width, size.height))));\n textElement(new TextOption(this.elementId + '_Zooming_Reset_2', 0 + size.width / 2, 0 + size.height * 3 / 4, 'middle', this.chart.getLocalizedLabel('ResetZoom'), 'rotate(0,' + (0) + ',' + (0) + ')', 'auto'), { size: '12px' }, 'black', childElement);\n }\n parentElement.appendChild(childElement);\n this.wireEvents(childElement, this.reset);\n };\n /**\n * To bind events.\n * @return {void}\n * @private\n */\n Toolkit.prototype.wireEvents = function (element, process) {\n EventHandler.add(element, 'mousedown touchstart', process, this);\n EventHandler.add(element, 'mouseover', this.showTooltip, this);\n EventHandler.add(element, 'mouseout', this.removeTooltip, this);\n };\n /**\n * To show tooltip.\n * @return {void}\n * @private\n */\n Toolkit.prototype.showTooltip = function (event) {\n var text = event.currentTarget.id.split('_Zooming_')[1];\n var left = (event.pageX - (measureText(text, { size: '10px' }).width + 5));\n if (!this.chart.isTouch) {\n createTooltip('EJ2_Chart_ZoomTip', this.chart.getLocalizedLabel(text), (event.pageY + 10), left, '10px');\n }\n };\n /** @private */\n Toolkit.prototype.removeTooltip = function () {\n removeElement('EJ2_Chart_ZoomTip');\n };\n // Toolkit events function calculation here.\n /** @private */\n Toolkit.prototype.reset = function () {\n var chart = this.chart;\n if (!chart.zoomModule.isDevice) {\n remove(chart.zoomModule.toolkitElements);\n }\n this.removeTooltip();\n chart.svgObject.setAttribute('cursor', 'auto');\n chart.axisCollections.forEach(function (axis) {\n axis.zoomFactor = 1;\n axis.zoomPosition = 0;\n });\n chart.disableTrackTooltip = false;\n chart.zoomModule.isZoomed = chart.zoomModule.isPanning = chart.isChartDrag = chart.delayRedraw = false;\n chart.zoomModule.touchMoveList = chart.zoomModule.touchStartList = [];\n chart.zoomModule.pinchTarget = null;\n chart.removeSvg();\n chart.refreshAxis();\n chart.refreshBound();\n this.elementOpacity = '1';\n return false;\n };\n Toolkit.prototype.zoomIn = function (e) {\n this.zoomInOutCalculation(1, this.chart, this.chart.axisCollections, this.chart.zoomSettings.mode);\n return false;\n };\n Toolkit.prototype.zoomOut = function (e) {\n this.zoomInOutCalculation(-1, this.chart, this.chart.axisCollections, this.chart.zoomSettings.mode);\n return false;\n };\n Toolkit.prototype.zoom = function (e) {\n this.chart.zoomModule.isPanning = false;\n var zoomModule = this.chart.zoomModule;\n this.elementOpacity = '1';\n this.chart.svgObject.setAttribute('cursor', 'auto');\n this.zoomInElements.setAttribute('opacity', this.elementOpacity);\n this.zoomOutElements.setAttribute('opacity', this.elementOpacity);\n this.applySelection(this.zoomElements.childNodes, this.selectionColor);\n this.applySelection(this.panElements.childNodes, '#737373');\n return false;\n };\n /** @private */\n Toolkit.prototype.pan = function () {\n var zoomModule = this.chart.zoomModule;\n var element;\n this.chart.zoomModule.isPanning = true;\n this.chart.svgObject.setAttribute('cursor', 'pointer');\n this.elementOpacity = '0.2';\n element = this.zoomInElements ? this.zoomInElements.setAttribute('opacity', this.elementOpacity) : null;\n element = this.zoomOutElements ? this.zoomOutElements.setAttribute('opacity', this.elementOpacity) : null;\n element = this.panElements ? this.applySelection(this.panElements.childNodes, this.selectionColor) : null;\n element = this.zoomElements ? this.applySelection(this.zoomElements.childNodes, '#737373') : null;\n return false;\n };\n Toolkit.prototype.zoomInOutCalculation = function (scale, chart, axes, mode) {\n if (!chart.zoomModule.isPanning && this.elementOpacity !== '0.2') {\n var zoomFactor_1;\n var zoomPosition_1;\n var cumulative_1;\n chart.disableTrackTooltip = true;\n chart.delayRedraw = true;\n axes.forEach(function (axis) {\n if ((axis.orientation === 'Horizontal' && mode !== 'Y') ||\n (axis.orientation === 'Vertical' && mode !== 'X')) {\n cumulative_1 = Math.max(Math.max(1 / minMax(axis.zoomFactor, 0, 1), 1) + (0.25 * scale), 1);\n zoomFactor_1 = (cumulative_1 === 1) ? 1 : minMax(1 / cumulative_1, 0, 1);\n zoomPosition_1 = (cumulative_1 === 1) ? 0 : axis.zoomPosition + ((axis.zoomFactor - zoomFactor_1) * 0.5);\n if (axis.zoomPosition !== zoomPosition_1 || axis.zoomFactor !== zoomFactor_1) {\n zoomFactor_1 = (zoomPosition_1 + zoomFactor_1) > 1 ? (1 - zoomPosition_1) : zoomFactor_1;\n }\n axis.zoomFactor = zoomFactor_1;\n axis.zoomPosition = zoomPosition_1;\n }\n });\n }\n };\n Toolkit.prototype.applySelection = function (elements, color) {\n for (var i = 1, length_1 = elements.length; i < length_1; i++) {\n elements[i].setAttribute('fill', color);\n }\n };\n return Toolkit;\n}());\nexport { Toolkit };\n","import { EventHandler, Browser } from '@syncfusion/ej2-base';\nimport { getRectLocation, minMax, getElement, ChartLocation, Rect, RectOption, measureText } from '../../common/utils/helper';\nimport { Toolkit } from './zooming-toolkit';\nimport { zoomComplete } from '../../common/model/constants';\nimport { withInBounds } from '../../common/utils/helper';\n/**\n * `Zooming` module handles the zooming for chart.\n */\nvar Zoom = /** @class */ (function () {\n /**\n * Constructor for Zooming module.\n * @private.\n */\n function Zoom(chart) {\n this.chart = chart;\n this.isPointer = Browser.isPointer;\n this.browserName = Browser.info.name;\n this.wheelEvent = this.browserName === 'mozilla' ? (this.isPointer ? 'mousewheel' : 'DOMMouseScroll') : 'mousewheel';\n this.cancelEvent = this.isPointer ? 'pointerleave' : 'mouseleave';\n this.addEventListener();\n this.isDevice = Browser.isDevice;\n var zooming = chart.zoomSettings;\n this.toolkit = new Toolkit(chart);\n this.zooming = zooming;\n this.elementId = chart.element.id;\n this.zoomingRect = new Rect(0, 0, 0, 0);\n this.zoomAxes = [];\n this.zoomkitOpacity = 0.3;\n this.isIOS = Browser.isIos || Browser.isIos7;\n this.isZoomed = this.performedUI = this.zooming.enablePan && this.zooming.enableSelectionZooming;\n }\n /**\n * Function that handles the Rectangular zooming.\n * @return {void}\n */\n Zoom.prototype.renderZooming = function (e, chart, isTouch) {\n this.calculateZoomAxesRange(chart, chart.axisCollections);\n if (this.zooming.enableSelectionZooming && (!isTouch\n || (chart.isDoubleTap && this.touchStartList.length === 1)) && (!this.isPanning || chart.isDoubleTap)) {\n this.isPanning = this.isDevice ? true : this.isPanning;\n this.performedUI = true;\n this.drawZoomingRectangle(chart);\n }\n else if (this.isPanning && chart.isChartDrag) {\n if (!isTouch || (isTouch && this.touchStartList.length === 1)) {\n this.pinchTarget = isTouch ? e.target : null;\n this.doPan(chart, chart.axisCollections);\n }\n }\n };\n // Zooming rectangle drawn here\n Zoom.prototype.drawZoomingRectangle = function (chart) {\n var areaBounds = chart.chartAxisLayoutPanel.seriesClipRect;\n var startLocation = new ChartLocation(chart.previousMouseMoveX, chart.previousMouseMoveY);\n var endLocation = new ChartLocation(chart.mouseX, chart.mouseY);\n var rect = this.zoomingRect = getRectLocation(startLocation, endLocation, areaBounds);\n if (rect.width > 0 && rect.height > 0) {\n this.isZoomed = true;\n chart.disableTrackTooltip = true;\n chart.svgObject.setAttribute('cursor', 'crosshair');\n if (this.zooming.mode === 'X') {\n rect.height = areaBounds.height;\n rect.y = areaBounds.y;\n }\n else if (this.zooming.mode === 'Y') {\n rect.width = areaBounds.width;\n rect.x = areaBounds.x;\n }\n chart.svgObject.appendChild(chart.renderer.drawRectangle(new RectOption(this.elementId + '_ZoomArea', chart.themeStyle.selectionRectFill, { color: chart.themeStyle.selectionRectStroke, width: 1 }, 1, rect, 0, 0, '', '3')));\n }\n };\n // Panning performed here\n Zoom.prototype.doPan = function (chart, axes) {\n if (chart.startMove && chart.crosshair.enable) {\n return null;\n }\n var currentScale;\n var offset;\n this.isZoomed = true;\n var translateX;\n var translateY;\n this.offset = !chart.delayRedraw ? chart.chartAxisLayoutPanel.seriesClipRect : this.offset;\n chart.delayRedraw = true;\n chart.disableTrackTooltip = true;\n axes.forEach(function (axis) {\n currentScale = Math.max(1 / minMax(axis.zoomFactor, 0, 1), 1);\n if (axis.orientation === 'Horizontal') {\n offset = (chart.previousMouseMoveX - chart.mouseX) / axis.rect.width / currentScale;\n axis.zoomPosition = minMax(axis.zoomPosition + offset, 0, (1 - axis.zoomFactor));\n }\n else {\n offset = (chart.previousMouseMoveY - chart.mouseY) / axis.rect.height / currentScale;\n axis.zoomPosition = minMax(axis.zoomPosition - offset, 0, (1 - axis.zoomFactor));\n }\n });\n if (this.zooming.enableDeferredZooming) {\n translateX = chart.mouseX - chart.mouseDownX;\n translateY = chart.mouseY - chart.mouseDownY;\n switch (this.zooming.mode) {\n case 'X':\n translateY = 0;\n break;\n case 'Y':\n translateX = 0;\n break;\n }\n this.setTransform(translateX, translateY, null, null, chart, false);\n this.refreshAxis(chart.chartAxisLayoutPanel, chart, chart.axisCollections);\n }\n else {\n this.performZoomRedraw(chart);\n }\n chart.previousMouseMoveX = chart.mouseX;\n chart.previousMouseMoveY = chart.mouseY;\n };\n /**\n * Redraw the chart on zooming.\n * @return {void}\n * @private\n */\n Zoom.prototype.performZoomRedraw = function (chart) {\n var rect = this.zoomingRect;\n chart.animateSeries = false;\n if (this.isZoomed) {\n if (rect.width > 0 && rect.height > 0) {\n this.performedUI = true;\n chart.svgObject.setAttribute('cursor', 'auto');\n this.doZoom(chart, chart.axisCollections, chart.chartAxisLayoutPanel.seriesClipRect);\n chart.isDoubleTap = false;\n }\n else if (chart.disableTrackTooltip) {\n chart.disableTrackTooltip = false;\n chart.delayRedraw = false;\n chart.removeSvg();\n chart.refreshAxis();\n chart.refreshBound();\n }\n }\n };\n Zoom.prototype.refreshAxis = function (layout, chart, axes) {\n var mode = chart.zoomSettings.mode;\n layout.measureAxis(new Rect(chart.initialClipRect.x, chart.initialClipRect.y, chart.initialClipRect.width, chart.initialClipRect.height));\n axes.map(function (axis, index) {\n if (axis.orientation === 'Horizontal' && mode !== 'Y') {\n layout.drawXAxisLabels(axis, index, null, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n }\n if (axis.orientation === 'Vertical' && mode !== 'X') {\n layout.drawYAxisLabels(axis, index, null, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n }\n });\n };\n // Rectangular zoom calculated here performed here\n Zoom.prototype.doZoom = function (chart, axes, bounds) {\n var zoomRect = this.zoomingRect;\n var mode = this.zooming.mode;\n var argsData;\n var previousZF;\n var previousZP;\n var currentZF;\n var currentZP;\n this.isPanning = chart.zoomSettings.enablePan || this.isPanning;\n axes.forEach(function (axis) {\n previousZF = currentZF = axis.zoomFactor;\n previousZP = currentZP = axis.zoomPosition;\n argsData = {\n cancel: false, name: zoomComplete, axis: axis, previousZoomFactor: previousZF, previousZoomPosition: previousZP,\n currentZoomFactor: currentZF, currentZoomPosition: currentZP\n };\n if (axis.orientation === 'Horizontal') {\n if (mode !== 'Y') {\n currentZP += Math.abs((zoomRect.x - bounds.x) / (bounds.width)) * axis.zoomFactor;\n currentZF *= (zoomRect.width / bounds.width);\n argsData.currentZoomPosition = currentZP;\n argsData.currentZoomFactor = currentZF;\n chart.trigger(zoomComplete, argsData);\n }\n }\n else {\n if (mode !== 'X') {\n currentZP += (1 - Math.abs((zoomRect.height + (zoomRect.y - bounds.y)) / (bounds.height))) * axis.zoomFactor;\n currentZF *= (zoomRect.height / bounds.height);\n argsData.currentZoomFactor = currentZF;\n argsData.currentZoomPosition = currentZP;\n chart.trigger(zoomComplete, argsData);\n }\n }\n if (!argsData.cancel) {\n axis.zoomFactor = argsData.currentZoomFactor;\n axis.zoomPosition = argsData.currentZoomPosition;\n }\n });\n this.zoomingRect = new Rect(0, 0, 0, 0);\n this.performZoomRedraw(chart);\n };\n /**\n * Function that handles the Mouse wheel zooming.\n * @return {void}\n * @private\n */\n Zoom.prototype.performMouseWheelZooming = function (e, mouseX, mouseY, chart, axes) {\n var direction = (this.browserName === 'mozilla' && !this.isPointer) ?\n -(e.detail) / 3 > 0 ? 1 : -1 : (e.wheelDelta / 120) > 0 ? 1 : -1;\n var mode = this.zooming.mode;\n var origin = 0.5;\n var cumulative;\n var zoomFactor;\n var zoomPosition;\n this.isZoomed = true;\n this.calculateZoomAxesRange(chart, chart.axisCollections);\n chart.disableTrackTooltip = true;\n this.performedUI = true;\n this.isPanning = chart.zoomSettings.enablePan || this.isPanning;\n axes.forEach(function (axis) {\n if ((axis.orientation === 'Vertical' && mode !== 'X') ||\n (axis.orientation === 'Horizontal' && mode !== 'Y')) {\n cumulative = Math.max(Math.max(1 / minMax(axis.zoomFactor, 0, 1), 1) + (0.25 * direction), 1);\n if (cumulative >= 1) {\n origin = axis.orientation === 'Horizontal' ? mouseX / axis.rect.width : 1 - (mouseY / axis.rect.height);\n origin = origin > 1 ? 1 : origin < 0 ? 0 : origin;\n zoomFactor = (cumulative === 1) ? 1 : minMax(1 / cumulative, 0, 1);\n zoomPosition = (cumulative === 1) ? 0 : axis.zoomPosition + ((axis.zoomFactor - zoomFactor) * origin);\n if (axis.zoomPosition !== zoomPosition || axis.zoomFactor !== zoomFactor) {\n zoomFactor = (zoomPosition + zoomFactor) > 1 ? (1 - zoomPosition) : zoomFactor;\n }\n }\n axis.zoomFactor = zoomFactor;\n axis.zoomPosition = zoomPosition;\n }\n });\n this.performZoomRedraw(chart);\n };\n /**\n * Function that handles the Pinch zooming.\n * @return {void}\n * @private\n */\n Zoom.prototype.performPinchZooming = function (e, chart) {\n if ((this.zoomingRect.width > 0 && this.zoomingRect.height > 0) || (chart.startMove && chart.crosshair.enable)) {\n return false;\n }\n this.calculateZoomAxesRange(chart, chart.axisCollections);\n this.isZoomed = true;\n this.isPanning = true;\n this.performedUI = true;\n this.offset = !chart.delayRedraw ? chart.chartAxisLayoutPanel.seriesClipRect : this.offset;\n chart.delayRedraw = true;\n chart.disableTrackTooltip = true;\n var elementOffset = chart.element.getBoundingClientRect();\n var touchDown = this.touchStartList;\n var touchMove = this.touchMoveList;\n var touch0StartX = touchDown[0].pageX - elementOffset.left;\n var touch0StartY = touchDown[0].pageY - elementOffset.top;\n var touch0EndX = touchMove[0].pageX - elementOffset.left;\n var touch0EndY = touchMove[0].pageY - elementOffset.top;\n var touch1StartX = touchDown[1].pageX - elementOffset.left;\n var touch1StartY = touchDown[1].pageY - elementOffset.top;\n var touch1EndX = touchMove[1].pageX - elementOffset.left;\n var touch1EndY = touchMove[1].pageY - elementOffset.top;\n var scaleX;\n var scaleY;\n var translateXValue;\n var translateYValue;\n var pinchRect;\n var clipX;\n var clipY;\n scaleX = Math.abs(touch0EndX - touch1EndX) / Math.abs(touch0StartX - touch1StartX);\n scaleY = Math.abs(touch0EndY - touch1EndY) / Math.abs(touch0StartY - touch1StartY);\n clipX = ((this.offset.x - touch0EndX) / scaleX) + touch0StartX;\n clipY = ((this.offset.y - touch0EndY) / scaleY) + touch0StartY;\n pinchRect = new Rect(clipX, clipY, this.offset.width / scaleX, this.offset.height / scaleY);\n translateXValue = (touch0EndX - (scaleX * touch0StartX));\n translateYValue = (touch0EndY - (scaleY * touch0StartY));\n if (!isNaN(scaleX - scaleX) && !isNaN(scaleY - scaleY)) {\n switch (this.zooming.mode) {\n case 'XY':\n this.setTransform(translateXValue, translateYValue, scaleX, scaleY, chart, true);\n break;\n case 'X':\n this.setTransform(translateXValue, 0, scaleX, 1, chart, true);\n break;\n case 'Y':\n this.setTransform(0, translateYValue, 1, scaleY, chart, true);\n break;\n }\n }\n this.calculatePinchZoomFactor(chart, pinchRect);\n this.refreshAxis(chart.chartAxisLayoutPanel, chart, chart.axisCollections);\n return true;\n };\n Zoom.prototype.calculatePinchZoomFactor = function (chart, pinchRect) {\n var _this = this;\n var mode = this.zooming.mode;\n var selectionMin;\n var selectionMax;\n var rangeMin;\n var rangeMax;\n var value;\n var axisTrans;\n chart.axisCollections.forEach(function (axis, index) {\n if ((axis.orientation === 'Horizontal' && mode !== 'Y') ||\n (axis.orientation === 'Vertical' && mode !== 'X')) {\n if (axis.orientation === 'Horizontal') {\n value = pinchRect.x - _this.offset.x;\n axisTrans = axis.rect.width / _this.zoomAxes[index].delta;\n rangeMin = value / axisTrans + _this.zoomAxes[index].min;\n value = pinchRect.x + pinchRect.width - _this.offset.x;\n rangeMax = value / axisTrans + _this.zoomAxes[index].min;\n }\n else {\n value = pinchRect.y - _this.offset.y;\n axisTrans = axis.rect.height / _this.zoomAxes[index].delta;\n rangeMin = (value * -1 + axis.rect.height) / axisTrans + _this.zoomAxes[index].min;\n value = pinchRect.y + pinchRect.height - _this.offset.y;\n rangeMax = (value * -1 + axis.rect.height) / axisTrans + _this.zoomAxes[index].min;\n }\n selectionMin = Math.min(rangeMin, rangeMax);\n selectionMax = Math.max(rangeMin, rangeMax);\n axis.zoomPosition = (selectionMin - _this.zoomAxes[index].actualMin) / _this.zoomAxes[index].actualDelta;\n axis.zoomFactor = (selectionMax - selectionMin) / _this.zoomAxes[index].actualDelta;\n axis.zoomPosition = axis.zoomPosition < 0 ? 0 : axis.zoomPosition;\n axis.zoomFactor = axis.zoomFactor > 1 ? 1 : axis.zoomFactor;\n }\n });\n };\n // Series transformation style applied here.\n Zoom.prototype.setTransform = function (transX, transY, scaleX, scaleY, chart, isPinch) {\n chart.seriesElements.setAttribute('clip-path', 'url(#' + this.elementId + '_ChartAreaClipRect_)');\n if (chart.indicatorElements) {\n chart.indicatorElements.setAttribute('clip-path', 'url(#' + this.elementId + '_ChartAreaClipRect_)');\n }\n var translate;\n var xAxisLoc;\n var yAxisLoc;\n var element;\n if (transX !== null && transY !== null) {\n chart.visibleSeries.forEach(function (value) {\n xAxisLoc = chart.requireInvertedAxis ? value.yAxis.rect.x : value.xAxis.rect.x;\n yAxisLoc = chart.requireInvertedAxis ? value.xAxis.rect.y : value.yAxis.rect.y;\n translate = 'translate(' + (transX + (isPinch ? (scaleX * xAxisLoc) : xAxisLoc)) +\n ',' + (transY + (isPinch ? (scaleY * yAxisLoc) : yAxisLoc)) + ')';\n translate = (scaleX || scaleY) ? translate + ' scale(' + scaleX + ' ' + scaleY + ')' : translate;\n if (value.category === 'Indicator') {\n value.seriesElement.parentElement.setAttribute('transform', translate);\n }\n else {\n value.seriesElement.setAttribute('transform', translate);\n }\n element = getElement(chart.element.id + '_Series_' + value.index + '_DataLabelCollections');\n if (value.errorBarElement) {\n value.errorBarElement.setAttribute('transform', translate);\n }\n if (value.symbolElement) {\n value.symbolElement.setAttribute('transform', translate);\n }\n if (value.textElement) {\n value.textElement.setAttribute('visibility', 'hidden');\n value.shapeElement.setAttribute('visibility', 'hidden');\n }\n if (element) {\n element.style.visibility = 'hidden';\n }\n });\n }\n };\n Zoom.prototype.calculateZoomAxesRange = function (chart, axes) {\n var _this = this;\n var range;\n var axisRange;\n chart.axisCollections.forEach(function (axis, index) {\n axisRange = axis.visibleRange;\n if (_this.zoomAxes[index]) {\n if (!chart.delayRedraw) {\n _this.zoomAxes[index].min = axisRange.min;\n _this.zoomAxes[index].delta = axisRange.delta;\n }\n }\n else {\n range = {\n actualMin: axis.actualRange.min,\n actualDelta: axis.actualRange.delta,\n min: axisRange.min,\n delta: axisRange.delta\n };\n _this.zoomAxes[index] = range;\n }\n });\n };\n // Zooming Toolkit created here\n Zoom.prototype.showZoomingToolkit = function (chart) {\n var toolboxItems = this.zooming.toolbarItems;\n var areaBounds = chart.chartAxisLayoutPanel.seriesClipRect;\n var spacing = 5;\n var render = chart.renderer;\n var length = this.isDevice ? 1 : toolboxItems.length;\n var iconSize = this.isDevice ? measureText('Reset Zoom', { size: '12px' }).width : 16;\n var height = this.isDevice ? measureText('Reset Zoom', { size: '12px' }).height : 22;\n var width = (length * iconSize) + ((length + 1) * spacing) + ((length - 1) * spacing);\n var transX = areaBounds.x + areaBounds.width - width - spacing;\n var transY = (areaBounds.y + spacing);\n var xPosition = spacing;\n var outerElement;\n var toolkit = this.toolkit;\n var element;\n var shadowElement = '';\n shadowElement += '';\n shadowElement += '';\n if (length === 0 || getElement(this.elementId + '_Zooming_KitCollection')) {\n return false;\n }\n var defElement = render.createDefs();\n toolboxItems = this.isDevice ? ['Reset'] : toolboxItems;\n defElement.innerHTML = shadowElement;\n this.toolkitElements = render.createGroup({\n id: this.elementId + '_Zooming_KitCollection',\n transform: 'translate(' + transX + ',' + transY + ')'\n });\n this.toolkitElements.appendChild(defElement);\n this.toolkitElements.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_Rect', '#fafafa', { color: 'transparent', width: 1 }, 1, new Rect(0, 0, width, (height + (spacing * 2))), 0, 0)));\n outerElement = render.drawRectangle(new RectOption(this.elementId + '_Zooming_Rect', '#fafafa', { color: 'transparent', width: 1 }, 0.1, new Rect(0, 0, width, (height + (spacing * 2))), 0, 0));\n outerElement.setAttribute('filter', 'url(#chart_shadow)');\n this.toolkitElements.appendChild(outerElement);\n var currentItem;\n for (var i = 1; i <= length; i++) {\n currentItem = toolboxItems[i - 1];\n element = render.createGroup({\n transform: 'translate(' + xPosition + ',' + (this.isDevice ? spacing : (spacing + 3)) + ')'\n });\n // for desktop toolkit hight is 32 and top padding is 8 icon size 16\n switch (currentItem) {\n case 'Pan':\n toolkit.createPanButton(element, this.toolkitElements, chart);\n break;\n case 'Zoom':\n toolkit.createZoomButton(element, this.toolkitElements, chart);\n break;\n case 'ZoomIn':\n toolkit.createZoomInButton(element, this.toolkitElements, chart);\n break;\n case 'ZoomOut':\n toolkit.createZoomOutButton(element, this.toolkitElements, chart);\n break;\n case 'Reset':\n toolkit.createResetButton(element, this.toolkitElements, chart, this.isDevice);\n break;\n }\n xPosition += iconSize + (spacing * 2);\n }\n this.toolkitElements.setAttribute('opacity', this.isDevice ? '1' : '' + this.zoomkitOpacity);\n this.toolkitElements.setAttribute('cursor', 'auto');\n chart.svgObject.appendChild(this.toolkitElements);\n if (!this.isDevice) {\n EventHandler.add(this.toolkitElements, 'mousemove touchstart', this.zoomToolkitMove, this);\n EventHandler.add(this.toolkitElements, 'mouseleave touchend', this.zoomToolkitLeave, this);\n if (this.isPanning) {\n toolkit.pan();\n }\n }\n return true;\n };\n /**\n * To the show the zooming toolkit.\n * @return {void}\n * @private\n */\n Zoom.prototype.applyZoomToolkit = function (chart, axes) {\n var showToolkit = this.isAxisZoomed(axes);\n if (showToolkit) {\n this.showZoomingToolkit(chart);\n this.isZoomed = true;\n }\n else {\n this.toolkit.removeTooltip();\n this.isPanning = false;\n this.isZoomed = false;\n chart.svgObject.setAttribute('cursor', 'auto');\n }\n };\n /**\n * Return boolean property to show zooming toolkit.\n * @return {void}\n * @private\n */\n Zoom.prototype.isAxisZoomed = function (axes) {\n var showToolkit = false;\n axes.forEach(function (axis) {\n showToolkit = (showToolkit || (axis.zoomFactor !== 1 || axis.zoomPosition !== 0));\n });\n return showToolkit;\n };\n Zoom.prototype.zoomToolkitMove = function (e) {\n var element = this.toolkitElements;\n var opacity = +element.getAttribute('opacity');\n this.zoomkitOpacity = 1;\n element.setAttribute('opacity', '' + this.zoomkitOpacity);\n return false;\n };\n Zoom.prototype.zoomToolkitLeave = function (e) {\n var element = this.toolkitElements;\n this.zoomkitOpacity = 0.3;\n element.setAttribute('opacity', '' + this.zoomkitOpacity);\n return false;\n };\n /**\n * @hidden\n */\n Zoom.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n EventHandler.add(this.chart.element, this.wheelEvent, this.chartMouseWheel, this);\n this.chart.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.chart.on(Browser.touchStartEvent, this.mouseDownHandler, this);\n this.chart.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n this.chart.on(this.cancelEvent, this.mouseCancelHandler, this);\n };\n /**\n * @hidden\n */\n Zoom.prototype.removeEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n EventHandler.remove(this.chart.element, this.wheelEvent, this.chartMouseWheel);\n this.chart.off(Browser.touchMoveEvent, this.mouseMoveHandler);\n this.chart.off(Browser.touchStartEvent, this.mouseDownHandler);\n this.chart.off(Browser.touchEndEvent, this.mouseUpHandler);\n this.chart.off(this.cancelEvent, this.mouseCancelHandler);\n };\n /**\n * Handles the mouse wheel on chart.\n * @return {boolean}\n * @private\n */\n Zoom.prototype.chartMouseWheel = function (e) {\n var chart = this.chart;\n var offset = chart.element.getBoundingClientRect();\n var svgRect = getElement(chart.element.id + '_svg').getBoundingClientRect();\n var mouseX = (e.clientX - offset.left) - Math.max(svgRect.left - offset.left, 0);\n var mouseY = (e.clientY - offset.top) - Math.max(svgRect.top - offset.top, 0);\n if (this.zooming.enableMouseWheelZooming &&\n withInBounds(mouseX, mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n e.preventDefault();\n this.performMouseWheelZooming(e, mouseX, mouseY, chart, chart.axisCollections);\n }\n return false;\n };\n /**\n * @hidden\n */\n Zoom.prototype.mouseMoveHandler = function (e) {\n //Zooming for chart\n var chart = this.chart;\n var touches = null;\n if (e.type === 'touchmove') {\n if (e.preventDefault && this.isIOS &&\n (this.isPanning || (chart.isDoubleTap)\n || (this.zooming.enablePinchZooming && this.touchStartList.length > 1))) {\n e.preventDefault();\n }\n touches = e.touches;\n }\n if (chart.isChartDrag) {\n if (chart.isTouch) {\n this.touchMoveList = this.addTouchPointer(this.touchMoveList, e, touches);\n if (this.zooming.enablePinchZooming && this.touchMoveList.length > 1\n && this.touchStartList.length > 1) {\n this.performPinchZooming(e, chart);\n }\n }\n this.renderZooming(e, chart, chart.isTouch);\n }\n };\n /**\n * @hidden\n */\n Zoom.prototype.mouseDownHandler = function (e) {\n //Zooming for chart\n var chart = this.chart;\n var touches = null;\n var target;\n if (e.type === 'touchstart') {\n touches = e.touches;\n target = e.target;\n }\n else {\n target = e.target;\n }\n if (target.id.indexOf(chart.element.id + '_Zooming_') === -1 &&\n withInBounds(chart.previousMouseMoveX, chart.previousMouseMoveY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n chart.isChartDrag = true;\n }\n if (chart.isTouch) {\n this.touchStartList = this.addTouchPointer(this.touchStartList, e, touches);\n }\n };\n /**\n * @hidden\n */\n Zoom.prototype.mouseUpHandler = function (e) {\n var chart = this.chart;\n var performZoomRedraw = e.target.id.indexOf(chart.element.id + '_ZoomOut_') === -1 ||\n e.target.id.indexOf(chart.element.id + '_ZoomIn_') === -1;\n if (chart.isChartDrag || performZoomRedraw) {\n this.performZoomRedraw(chart);\n }\n if (chart.isTouch) {\n if (chart.isDoubleTap && withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)\n && this.touchStartList.length === 1 && this.isZoomed) {\n this.toolkit.reset();\n }\n this.touchStartList = [];\n chart.isDoubleTap = false;\n }\n };\n /**\n * @hidden\n */\n Zoom.prototype.mouseCancelHandler = function (e) {\n if (this.isZoomed) {\n this.performZoomRedraw(this.chart);\n }\n this.pinchTarget = null;\n this.touchStartList = [];\n this.touchMoveList = [];\n };\n /**\n * Handles the touch pointer.\n * @return {boolean}\n * @private\n */\n Zoom.prototype.addTouchPointer = function (touchList, e, touches) {\n if (touches) {\n touchList = [];\n for (var i = 0, length_1 = touches.length; i < length_1; i++) {\n touchList.push({ pageX: touches[i].clientX, pageY: touches[i].clientY, pointerId: null });\n }\n }\n else {\n touchList = touchList ? touchList : [];\n if (touchList.length === 0) {\n touchList.push({ pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId });\n }\n else {\n for (var i = 0, length_2 = touchList.length; i < length_2; i++) {\n if (touchList[i].pointerId === e.pointerId) {\n touchList[i] = { pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId };\n }\n else {\n touchList.push({ pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId });\n }\n }\n }\n }\n return touchList;\n };\n /**\n * Get module name.\n */\n Zoom.prototype.getModuleName = function () {\n // Returns te module name\n return 'Zoom';\n };\n /**\n * To destroy the zooming.\n * @return {void}\n * @private\n */\n Zoom.prototype.destroy = function (chart) {\n // Destroy method performed here\n this.removeEventListener();\n };\n return Zoom;\n}());\nexport { Zoom };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Selection Module handles the selection for chart.\n * @private\n */\nvar BaseSelection = /** @class */ (function () {\n function BaseSelection(control) {\n this.control = control;\n }\n /**\n * To create selection styles for series\n */\n BaseSelection.prototype.seriesStyles = function () {\n var seriesclass;\n var style = document.getElementById(this.styleId);\n if (isNullOrUndefined(style)) {\n style = document.createElement('style');\n style.setAttribute('id', this.styleId);\n for (var _i = 0, _a = this.control.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n seriesclass = series.selectionStyle || this.styleId + '_series_' + series.index;\n style.innerHTML += series.selectionStyle ? '' : '.' + seriesclass + ' { } ';\n }\n style.innerHTML += '.' + this.unselected + ' { opacity:' + (0.3) + ';} ';\n document.body.appendChild(style);\n }\n };\n /**\n * To concat indexes\n */\n BaseSelection.prototype.concatIndexes = function (userIndexes, localIndexes) {\n return userIndexes.concat(localIndexes);\n };\n /**\n * Selected points series visibility checking on legend click\n */\n BaseSelection.prototype.checkVisibility = function (selectedIndexes) {\n var visible = false;\n var uniqueSeries = [];\n for (var _i = 0, selectedIndexes_1 = selectedIndexes; _i < selectedIndexes_1.length; _i++) {\n var index = selectedIndexes_1[_i];\n if (uniqueSeries.indexOf(index.series) === -1) {\n uniqueSeries.push(index.series);\n }\n }\n for (var _a = 0, uniqueSeries_1 = uniqueSeries; _a < uniqueSeries_1.length; _a++) {\n var index = uniqueSeries_1[_a];\n if (this.control.series[index].visible) {\n visible = true;\n break;\n }\n }\n return visible;\n };\n /**\n * To add svg element style class\n * @private\n */\n BaseSelection.prototype.addSvgClass = function (element, className) {\n var elementClassName = element.getAttribute('class') || '';\n elementClassName += ((elementClassName !== '') ? ' ' : '');\n if (elementClassName.indexOf(className) === -1) {\n element.setAttribute('class', elementClassName + className);\n }\n };\n /**\n * To remove svg element style class\n * @private\n */\n BaseSelection.prototype.removeSvgClass = function (element, className) {\n var elementClassName = element.getAttribute('class') || '';\n if (elementClassName.indexOf(className) > -1) {\n element.setAttribute('class', elementClassName.replace(className, ''));\n }\n };\n /**\n * To get children from parent element\n */\n BaseSelection.prototype.getChildren = function (parent) {\n var children = [];\n for (var i = 0; i < parent.childNodes.length; i++) {\n if (parent.childNodes[i].tagName !== 'defs') {\n children.push(parent.childNodes[i]);\n }\n }\n return children;\n };\n return BaseSelection;\n}());\nexport { BaseSelection };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Selection src file\n */\nimport { Browser } from '@syncfusion/ej2-base';\nimport { remove } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ChartLocation, Rect, RectOption, CircleOption, withInBounds, getDraggedRectLocation, removeElement, getElement } from '../../common/utils/helper';\nimport { Index } from '../../common/model/base';\nimport { dragComplete } from '../../common/model/constants';\nimport { BaseSelection } from '../../common/user-interaction/selection';\n/**\n * `Selection` module handles the selection for chart.\n * @private\n */\nvar Selection = /** @class */ (function (_super) {\n __extends(Selection, _super);\n /**\n * Constructor for selection module.\n * @private.\n */\n function Selection(chart) {\n var _this = _super.call(this, chart) || this;\n _this.chart = chart;\n _this.renderer = chart.renderer;\n _this.addEventListener();\n return _this;\n }\n /**\n * Binding events for selection module.\n */\n Selection.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n this.chart.on(Browser.touchMoveEvent, this.mouseMove, this);\n this.chart.on(cancelEvent, this.completeSelection, this);\n this.chart.on('click', this.calculateSelectedElements, this);\n this.chart.on(Browser.touchStartEvent, this.mousedown, this);\n this.chart.on(Browser.touchEndEvent, this.completeSelection, this);\n };\n /**\n * Chart mouse down\n */\n Selection.prototype.mousedown = function (e) {\n var chart = this.chart;\n if (chart.selectionMode === 'None' || chart.isChartDrag) {\n return;\n }\n if (chart.isDoubleTap || !chart.isTouch || this.rectPoints) {\n this.dragStart(chart, chart.chartAxisLayoutPanel.seriesClipRect, chart.mouseDownX, chart.mouseDownY, e);\n }\n };\n /**\n * UnBinding events for selection module.\n */\n Selection.prototype.removeEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n this.chart.off(Browser.touchMoveEvent, this.mouseMove);\n this.chart.off('pointerleave' || 'mouseleave', this.completeSelection);\n this.chart.off('click', this.calculateSelectedElements);\n this.chart.off(Browser.touchStartEvent, this.mousedown);\n this.chart.off(Browser.touchEndEvent, this.completeSelection);\n };\n /**\n * To find private variable values\n */\n Selection.prototype.initPrivateVariables = function (chart) {\n this.styleId = chart.element.id + '_ej2_chart_selection';\n this.unselected = chart.element.id + '_ej2_deselected';\n this.closeIconId = chart.element.id + '_ej2_drag_close';\n this.draggedRectGroup = chart.element.id + '_ej2_drag_group';\n this.draggedRect = chart.element.id + '_ej2_drag_rect';\n this.selectedDataIndexes = [];\n this.rectPoints = null;\n this.isSeriesMode = chart.selectionMode === 'Series';\n };\n /**\n * Method to select the point and series.\n * @return {void}\n */\n Selection.prototype.invokeSelection = function (chart) {\n this.initPrivateVariables(chart);\n this.series = extend({}, chart.visibleSeries, null, true);\n this.seriesStyles();\n if (!(chart.selectionMode.indexOf('Drag') > -1)) {\n this.selectDataIndex(chart, this.concatIndexes(chart.selectedDataIndexes, this.selectedDataIndexes));\n }\n };\n Selection.prototype.generateStyle = function (series) {\n if (series) {\n return (series.selectionStyle || this.styleId + '_series_' + series.index);\n }\n return 'undefined';\n };\n Selection.prototype.selectDataIndex = function (chart, indexes) {\n for (var _i = 0, indexes_1 = indexes; _i < indexes_1.length; _i++) {\n var index = indexes_1[_i];\n this.performSelection(index, chart, this.getElementByIndex(chart, index)[0]);\n }\n };\n Selection.prototype.getElementByIndex = function (chart, index, suffix) {\n if (suffix === void 0) { suffix = ''; }\n var elementId = chart.element.id + '_Series_' + index.series + '_Point' + '_' + index.point;\n var series = chart.series[index.series];\n elementId = (!series.isRectSeries && series.type !== 'Scatter' && series.type !== 'Bubble' &&\n series.marker.visible) ? (elementId + '_Symbol' + suffix) : elementId;\n return [getElement(elementId), (series.type === 'RangeArea' && series.marker.visible) ? getElement(elementId + '1') : null];\n };\n Selection.prototype.getClusterElements = function (chart, index) {\n var clusters = [];\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n index = new Index(series.index, index.point);\n clusters.push(this.getElementByIndex(chart, index)[0]);\n }\n return clusters;\n };\n Selection.prototype.findElements = function (chart, series, index, suffix) {\n if (suffix === void 0) { suffix = ''; }\n if (this.isSeriesMode) {\n return this.getSeriesElements(series);\n }\n else if (chart.selectionMode === 'Cluster') {\n return this.getClusterElements(chart, index);\n }\n else {\n return this.getElementByIndex(chart, index, suffix);\n }\n };\n /**\n * To find the selected element.\n * @return {void}\n * @private\n */\n Selection.prototype.calculateSelectedElements = function (event) {\n if (this.chart.selectionMode === 'None' || event.target.id.indexOf(this.chart.element.id + '_') === -1) {\n return;\n }\n if (event.target.id.indexOf('_Series_') > -1) {\n this.performSelection(this.indexFinder(event.target.id), this.chart, event.target);\n }\n };\n Selection.prototype.performSelection = function (index, chart, element) {\n this.isSeriesMode = chart.selectionMode === 'Series';\n if (chart.series[index.series].type === 'BoxAndWhisker' &&\n element.id === chart.element.id + '_Series_' + index.series + '_Point_' + index.point + '_BoxPath') {\n element = element.parentElement;\n }\n switch (chart.selectionMode) {\n case 'Series':\n this.selection(chart, index, this.getSeriesElements(chart.series[index.series]));\n this.blurEffect(chart.element.id, chart.visibleSeries);\n break;\n case 'Point':\n if (!isNaN(index.point)) {\n this.selection(chart, index, [element]);\n this.blurEffect(chart.element.id, chart.visibleSeries);\n }\n break;\n case 'Cluster':\n if (!isNaN(index.point)) {\n this.clusterSelection(chart, chart.series, index);\n this.blurEffect(chart.element.id, chart.visibleSeries);\n }\n break;\n }\n };\n Selection.prototype.selection = function (chart, index, selectedElements) {\n if (!chart.isMultiSelect && (chart.selectionMode.indexOf('Drag') === -1)) {\n this.removeMultiSelectEelments(chart, this.selectedDataIndexes, index, chart.series);\n }\n var className = selectedElements[0] && (selectedElements[0].getAttribute('class') || '');\n if (selectedElements[0] && className.indexOf(this.getSelectionClass(selectedElements[0].id)) > -1) {\n this.removeStyles(selectedElements);\n this.addOrRemoveIndex(this.selectedDataIndexes, index);\n }\n else {\n this.applyStyles(selectedElements);\n this.addOrRemoveIndex(this.selectedDataIndexes, index, true);\n }\n };\n Selection.prototype.clusterSelection = function (chart, series, index) {\n this.selection(chart, index, this.getClusterElements(chart, new Index(index.series, index.point)));\n };\n Selection.prototype.removeMultiSelectEelments = function (chart, index, currentIndex, seriesCollection) {\n var series;\n for (var i = 0; i < index.length; i++) {\n series = seriesCollection[index[i].series];\n if ((this.isSeriesMode && !this.toEquals(index[i], currentIndex, this.isSeriesMode)) ||\n (this.control.selectionMode === 'Cluster' && !this.toEquals(index[i], currentIndex, false)) ||\n (!this.isSeriesMode && this.toEquals(index[i], currentIndex, true) && !this.toEquals(index[i], currentIndex, false))) {\n this.removeStyles(this.findElements(chart, series, index[i]));\n index.splice(i, 1);\n i--;\n }\n }\n };\n Selection.prototype.blurEffect = function (chartId, visibleSeries) {\n var visibility = this.checkVisibility(this.selectedDataIndexes); // legend click scenario\n for (var _i = 0, visibleSeries_1 = visibleSeries; _i < visibleSeries_1.length; _i++) {\n var series = visibleSeries_1[_i];\n if (series.visible) {\n this.checkSelectionElements(getElement(chartId + 'SeriesGroup' + series.index), this.generateStyle(series), visibility);\n if (!isNullOrUndefined(getElement(chartId + 'SymbolGroup' + series.index))) {\n this.checkSelectionElements(getElement(chartId + 'SymbolGroup' + series.index), this.generateStyle(series), visibility);\n }\n }\n }\n };\n Selection.prototype.checkSelectionElements = function (element, className, visibility) {\n var children = (this.isSeriesMode ? [element] : element.childNodes);\n var elementClassName;\n var parentClassName;\n var legendShape;\n var selectElement = element;\n for (var i = 0; i < children.length; i++) {\n elementClassName = children[i].getAttribute('class') || '';\n parentClassName = children[i].parentNode.getAttribute('class') || '';\n if (elementClassName.indexOf(className) === -1 &&\n parentClassName.indexOf(className) === -1 && visibility) {\n this.addSvgClass(children[i], this.unselected);\n }\n else {\n selectElement = children[i];\n this.removeSvgClass(children[i], this.unselected);\n }\n }\n if (this.control.legendModule && this.control.legendSettings.visible) {\n legendShape = document.getElementById(this.control.element.id + '_chart_legend_shape_' + className.split('_series_')[1]);\n if (legendShape) {\n elementClassName = selectElement.getAttribute('class') || '';\n parentClassName = selectElement.parentNode.getAttribute('class') || '';\n if (elementClassName.indexOf(className) === -1 && parentClassName.indexOf(className) === -1 && visibility) {\n this.addSvgClass(legendShape, this.unselected);\n }\n else {\n this.removeSvgClass(legendShape, this.unselected);\n }\n }\n }\n };\n Selection.prototype.applyStyles = function (elements) {\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element = elements_1[_i];\n if (element) {\n this.removeSvgClass(element.parentNode, this.unselected);\n this.removeSvgClass(element, this.unselected);\n this.addSvgClass(element, this.getSelectionClass(element.id));\n }\n }\n };\n Selection.prototype.getSelectionClass = function (id) {\n return this.generateStyle(this.control.series[this.indexFinder(id).series]);\n };\n Selection.prototype.removeStyles = function (elements) {\n for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) {\n var element = elements_2[_i];\n if (element) {\n this.removeSvgClass(element, this.getSelectionClass(element.id));\n }\n }\n };\n Selection.prototype.addOrRemoveIndex = function (indexes, index, add) {\n for (var i = 0; i < indexes.length; i++) {\n if (this.toEquals(indexes[i], index, this.isSeriesMode)) {\n indexes.splice(i, 1);\n i--;\n }\n }\n if (add) {\n indexes.push(index);\n }\n };\n Selection.prototype.toEquals = function (first, second, checkSeriesOnly) {\n return ((first.series === second.series || (this.control.selectionMode === 'Cluster' && !checkSeriesOnly))\n && (checkSeriesOnly || (first.point === second.point)));\n };\n /**\n * To redraw the selected points.\n * @return {void}\n * @private\n */\n Selection.prototype.redrawSelection = function (chart, oldMode) {\n this.isSeriesMode = oldMode === 'Series';\n var selectedDataIndexes = extend([], this.selectedDataIndexes, null, true);\n this.removeSelectedElements(chart, this.selectedDataIndexes, chart.series);\n this.blurEffect(chart.element.id, chart.visibleSeries);\n this.selectDataIndex(chart, selectedDataIndexes);\n };\n /** @private */\n Selection.prototype.legendSelection = function (chart, series) {\n var seriesStyle = this.generateStyle(chart.visibleSeries[series]);\n var selectedElements = document.getElementsByClassName(seriesStyle);\n this.isSeriesMode = chart.selectionMode === 'Series';\n var isBlurEffectNeeded = true;\n if (selectedElements.length > 0) {\n var elements = [];\n for (var i = 0; i < selectedElements.length; i++) {\n elements.push(selectedElements[i]);\n }\n this.removeStyles(elements);\n this.isSeriesMode = true;\n this.addOrRemoveIndex(this.selectedDataIndexes, new Index(series, NaN));\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series_1 = _a[_i];\n seriesStyle = this.generateStyle(series_1);\n if (document.getElementsByClassName(seriesStyle).length > 0) {\n for (var _b = 0, elements_3 = elements; _b < elements_3.length; _b++) {\n var element = elements_3[_b];\n this.checkSelectionElements(element, seriesStyle, true);\n }\n isBlurEffectNeeded = false;\n break;\n }\n }\n if (isBlurEffectNeeded) {\n this.isSeriesMode = chart.selectionMode === 'Series';\n this.blurEffect(chart.element.id, chart.visibleSeries);\n }\n }\n else {\n var seriesElements = this.getSeriesElements(chart.visibleSeries[series]);\n for (var _c = 0, seriesElements_1 = seriesElements; _c < seriesElements_1.length; _c++) {\n var seriesElement = seriesElements_1[_c];\n this.checkSelectionElements(seriesElement, seriesStyle, false);\n }\n this.isSeriesMode = true;\n this.selection(chart, new Index(series, NaN), seriesElements);\n this.isSeriesMode = chart.selectionMode === 'Series';\n this.blurEffect(chart.element.id, chart.visibleSeries);\n }\n };\n Selection.prototype.getSeriesElements = function (series) {\n var seriesElements = [series.seriesElement];\n if (series.marker.visible && series.type !== 'Scatter' && series.type !== 'Bubble' && !series.isRectSeries) {\n seriesElements.push(series.symbolElement);\n }\n return seriesElements;\n };\n Selection.prototype.indexFinder = function (id) {\n var ids = ['NaN', 'NaN'];\n if (id.indexOf('SeriesGroup') > -1) {\n ids = id.split('SeriesGroup');\n ids[0] = ids[1];\n }\n else if (id.indexOf('SymbolGroup') > -1) {\n ids = id.split('SymbolGroup');\n ids[0] = ids[1];\n }\n else if (id.indexOf('_Point_') > -1) {\n ids = id.split('_Series_')[1].split('_Point_');\n }\n else if (id.indexOf('_Series_') > -1) {\n ids[0] = id.split('_Series_')[1];\n }\n return new Index(parseInt(ids[0], 10), parseInt(ids[1], 10));\n };\n /**\n * Drag selection that returns the selected data.\n * @return {void}\n * @private\n */\n Selection.prototype.calculateDragSelectedElements = function (chart, dragRect) {\n this.removeSelectedElements(chart, this.selectedDataIndexes, chart.series);\n var rect = new Rect(dragRect.x, dragRect.y, dragRect.width, dragRect.height);\n var axisOffset = new ChartLocation(chart.chartAxisLayoutPanel.seriesClipRect.x, chart.chartAxisLayoutPanel.seriesClipRect.y);\n this.removeOffset(rect, axisOffset);\n var points;\n var index;\n var selectedPointValues = [];\n var selectedSeriesValues = [];\n this.isSeriesMode = false;\n var symbolLocation;\n var _loop_1 = function (series) {\n if (series.visible) {\n points = series.points;\n selectedPointValues = [];\n var xAxisOffset_1;\n var yAxisOffset_1;\n if ((chart.isTransposed || series.type.indexOf('Bar') !== -1) &&\n !(chart.isTransposed && series.type.indexOf('Bar') !== -1)) {\n xAxisOffset_1 = series.xAxis.rect.y - axisOffset.y;\n yAxisOffset_1 = series.yAxis.rect.x - axisOffset.x;\n }\n else {\n xAxisOffset_1 = series.xAxis.rect.x - axisOffset.x;\n yAxisOffset_1 = series.yAxis.rect.y - axisOffset.y;\n }\n for (var j = 0; j < points.length; j++) {\n var yValue = series.type !== 'RangeArea' ? points[j].yValue :\n points[j].regions[0].y;\n var isCurrentPoint = void 0;\n if (series.type === 'BoxAndWhisker') {\n isCurrentPoint = points[j].regions.some(function (region) {\n return withInBounds(region.x + xAxisOffset_1, region.y + yAxisOffset_1, rect);\n });\n }\n else {\n isCurrentPoint = points[j].symbolLocations.some(function (location) {\n return location && withInBounds(location.x + xAxisOffset_1, location.y + yAxisOffset_1, rect);\n });\n }\n if (isCurrentPoint && series.category !== 'Indicator') {\n index = new Index(series.index, points[j].index);\n this_1.selection(chart, index, this_1.findElements(chart, series, index));\n selectedPointValues.push({ x: points[j].xValue.toString(), y: yValue });\n }\n if (isCurrentPoint && series.type === 'RangeArea') {\n selectedPointValues.push({ x: points[j].xValue.toString(), y: points[j].regions[0].y });\n }\n }\n selectedSeriesValues.push(selectedPointValues);\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n _loop_1(series);\n }\n this.blurEffect(chart.element.id, chart.visibleSeries);\n this.rectPoints = new Rect(dragRect.x, dragRect.y, dragRect.width, dragRect.height);\n this.createCloseButton((dragRect.x + dragRect.width), dragRect.y);\n var args = {\n name: dragComplete,\n selectedDataValues: selectedSeriesValues,\n cancel: false\n };\n chart.trigger(dragComplete, args);\n };\n Selection.prototype.removeOffset = function (rect, clip) {\n rect.x -= clip.x;\n rect.y -= clip.y;\n };\n /**\n * Method to draw dragging rect.\n * @return {void}\n * @private\n */\n Selection.prototype.drawDraggingRect = function (chart, dragRect) {\n var cartesianLayout = chart.chartAxisLayoutPanel.seriesClipRect;\n switch (chart.selectionMode) {\n case 'DragX':\n dragRect.y = cartesianLayout.y;\n dragRect.height = cartesianLayout.height;\n break;\n case 'DragY':\n dragRect.x = cartesianLayout.x;\n dragRect.width = cartesianLayout.width;\n break;\n }\n if (dragRect.width < 5 || dragRect.height < 5) {\n return null;\n }\n var element = getElement(this.draggedRect);\n if (this.closeIcon) {\n removeElement(this.closeIconId);\n }\n if (element) {\n this.setAttributes(element, dragRect);\n }\n else {\n var dragGroup = chart.renderer.createGroup({ id: this.draggedRectGroup });\n chart.svgObject.appendChild(dragGroup);\n element = chart.renderer.drawRectangle(new RectOption(this.draggedRect, chart.themeStyle.selectionRectFill, { color: chart.themeStyle.selectionRectStroke, width: 1 }, 1, dragRect));\n element.setAttribute('style', 'cursor:move;');\n dragGroup.appendChild(element);\n }\n };\n Selection.prototype.createCloseButton = function (x, y) {\n var closeIcon = this.chart.renderer.createGroup({\n id: this.closeIconId,\n style: 'cursor:pointer; visibility: visible;'\n });\n closeIcon.appendChild(this.chart.renderer.drawCircle(new CircleOption(this.closeIconId + '_circle', '#FFFFFF', { color: this.chart.themeStyle.selectionCircleStroke, width: 1 }, 1, x, y, 10)));\n var direction = 'M ' + (x - 4) + ' ' + (y - 4) + ' L ' + (x + 4) + ' ' + (y + 4) + ' M ' + (x - 4) + ' ' + (y + 4) +\n ' L ' + (x + 4) + ' ' + (y - 4);\n closeIcon.appendChild(this.chart.renderer.drawPath({\n id: this.closeIconId + '_cross', d: direction,\n stroke: this.chart.themeStyle.selectionCircleStroke,\n 'stroke-width': 2, fill: this.chart.themeStyle.selectionCircleStroke\n }));\n this.closeIcon = closeIcon;\n getElement(this.draggedRectGroup).appendChild(closeIcon);\n };\n /**\n * Method to remove dragged element.\n * @return {void}\n * @private\n */\n Selection.prototype.removeDraggedElements = function (chart, event) {\n if ((event.target.id.indexOf(this.closeIconId) > -1) && (event.type.indexOf('move') === -1)) {\n this.removeSelectedElements(chart, this.selectedDataIndexes, chart.series);\n this.blurEffect(chart.element.id, chart.visibleSeries);\n remove(getElement(this.draggedRectGroup));\n this.changeCursorStyle(false, chart.svgObject, 'auto');\n this.rectPoints = null;\n }\n };\n /**\n * Method to resize the drag rect.\n * @return {void}\n * @private\n */\n Selection.prototype.resizingSelectionRect = function (chart, location, tapped) {\n var rect = new Rect(this.rectPoints.x, this.rectPoints.y, this.rectPoints.width, this.rectPoints.height);\n var resize = this.findResizeMode(chart.svgObject, rect, location);\n if (this.resizing) {\n rect = getDraggedRectLocation(rect.x, rect.y, (rect.x + rect.width), (rect.y + rect.height), chart.chartAxisLayoutPanel.seriesClipRect);\n this.drawDraggingRect(chart, rect);\n this.dragRect = rect;\n }\n if (tapped) {\n this.resizing = resize;\n }\n };\n Selection.prototype.findResizeMode = function (chartSvgObject, rect, location) {\n var cursorStyle = 'se-resize';\n var resize = false;\n if (!this.resizing) {\n var resizeEdges = [new Rect(rect.x, (rect.y - 10), rect.width - 5, 20),\n new Rect((rect.x - 10), rect.y, 20, rect.height),\n new Rect(rect.x, (rect.y + rect.height - 10), rect.width - 10, 20),\n new Rect((rect.x + rect.width - 10), rect.y + 5, 20, rect.height - 15),\n new Rect((rect.x + rect.width - 10), (rect.y + rect.height - 10), 20, 20)]; //corner\n for (var i = 0; i < resizeEdges.length; i++) {\n if (withInBounds(location.x, location.y, resizeEdges[i])) {\n cursorStyle = (i === 4) ? cursorStyle : (i % 2 === 0) ? 'ns-resize' : 'ew-resize';\n resize = true;\n this.resizeMode = i;\n break;\n }\n }\n }\n else {\n var x = rect.x;\n var y = rect.y;\n var width = (location.x - x);\n var height = (location.y - y);\n switch (this.resizeMode) {\n case 0:\n height = Math.abs((rect.height + rect.y) - location.y);\n rect.y = Math.min((rect.height + rect.y), location.y);\n rect.height = height;\n break;\n case 1:\n width = Math.abs((rect.width + rect.x) - location.x);\n rect.x = Math.min((rect.width + rect.x), location.x);\n rect.width = width;\n break;\n case 2:\n rect.height = Math.abs(height);\n rect.y = Math.min(location.y, y);\n break;\n case 3:\n rect.width = Math.abs(width);\n rect.x = Math.min(location.x, x);\n break;\n case 4:\n rect.width = Math.abs(width);\n rect.height = Math.abs(height);\n rect.x = Math.min(location.x, x);\n rect.y = Math.min(location.y, y);\n break;\n }\n }\n this.changeCursorStyle(resize, getElement(this.draggedRect), cursorStyle);\n this.changeCursorStyle(resize, chartSvgObject, cursorStyle);\n return resize;\n };\n Selection.prototype.changeCursorStyle = function (isResize, rectelement, cursorStyle) {\n cursorStyle = isResize ? cursorStyle : (this.control.svgObject === rectelement) ? 'auto' : 'move';\n rectelement.setAttribute('style', 'cursor:' + cursorStyle + ';');\n };\n Selection.prototype.removeSelectedElements = function (chart, index, seriesCollection) {\n index.splice(0, index.length);\n var seriesElements;\n for (var _i = 0, seriesCollection_1 = seriesCollection; _i < seriesCollection_1.length; _i++) {\n var series = seriesCollection_1[_i];\n seriesElements = this.getSeriesElements(series);\n this.removeStyles(seriesElements);\n for (var _a = 0, seriesElements_2 = seriesElements; _a < seriesElements_2.length; _a++) {\n var seriesElement = seriesElements_2[_a];\n this.removeStyles(this.getChildren(seriesElement));\n }\n }\n };\n Selection.prototype.setAttributes = function (ele, object) {\n var keys = Object.keys(object);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n ele.setAttribute(key, object[key]);\n }\n };\n /**\n * Method to move the dragged rect.\n * @return {void}\n * @private\n */\n Selection.prototype.draggedRectMoved = function (chart, grabbedPoint, doDrawing) {\n var rect = new Rect(this.rectPoints.x, this.rectPoints.y, this.rectPoints.width, this.rectPoints.height);\n rect.x -= (grabbedPoint.x - chart.mouseX);\n rect.y -= (grabbedPoint.y - chart.mouseY);\n rect = getDraggedRectLocation(rect.x, rect.y, rect.x + rect.width, rect.height + rect.y, chart.chartAxisLayoutPanel.seriesClipRect);\n if (doDrawing) {\n this.drawDraggingRect(chart, rect);\n }\n else {\n this.calculateDragSelectedElements(chart, rect);\n }\n };\n /**\n * To complete the selection.\n * @return {void}\n * @private\n */\n Selection.prototype.completeSelection = function (e) {\n var chart = this.chart;\n if (chart.selectionMode === 'None') {\n return;\n }\n if ((this.dragging || this.resizing) && this.dragRect.width > 5 && this.dragRect.height > 5) {\n this.calculateDragSelectedElements(chart, this.dragRect);\n }\n else if (this.rectGrabbing && this.rectPoints.width && this.rectPoints.height) {\n this.draggedRectMoved(chart, this.dragRect);\n }\n this.dragging = false;\n this.rectGrabbing = false;\n this.resizing = false;\n this.removeDraggedElements(chart, e);\n };\n Selection.prototype.getDragRect = function (chart, seriesClipRect) {\n return getDraggedRectLocation(chart.mouseDownX, chart.mouseDownY, chart.mouseX, chart.mouseY, seriesClipRect);\n };\n /** @private */\n Selection.prototype.dragStart = function (chart, seriesClipRect, mouseDownX, mouseDownY, event) {\n this.dragging = (chart.selectionMode.indexOf('Drag') > -1) && (chart.isDoubleTap || !chart.isTouch) &&\n chart.chartAreaType !== 'PolarRadar';\n if (this.dragging) {\n this.dragRect = new Rect(chart.mouseDownX, chart.mouseDownY, 0, 0);\n if (chart.mouseDownX < seriesClipRect.x || chart.mouseDownX > (seriesClipRect.x + seriesClipRect.width) ||\n chart.mouseDownY < seriesClipRect.y || chart.mouseDownY > (seriesClipRect.y + seriesClipRect.height)) {\n this.dragging = false;\n }\n }\n if (this.rectPoints) {\n this.dragRect = new Rect(chart.mouseDownX, chart.mouseDownY, 0, 0);\n this.resizingSelectionRect(chart, new ChartLocation(mouseDownX, mouseDownY), true);\n this.rectGrabbing = withInBounds(mouseDownX, mouseDownY, this.rectPoints);\n }\n };\n /** @private */\n Selection.prototype.mouseMove = function (event) {\n var chart = this.chart;\n if (chart.selectionMode === 'None') {\n return;\n }\n if (event.type === 'touchmove' && (Browser.isIos || Browser.isIos7) && this.dragging && event.preventDefault) {\n event.preventDefault();\n }\n var insideMoving = withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect);\n if (insideMoving) {\n if (this.rectGrabbing && !this.resizing) {\n this.draggedRectMoved(chart, this.dragRect, true);\n }\n else if (this.dragging && !this.resizing) {\n this.dragRect = this.getDragRect(chart, chart.chartAxisLayoutPanel.seriesClipRect);\n this.drawDraggingRect(chart, this.dragRect);\n }\n if (this.rectPoints) {\n this.resizingSelectionRect(chart, new ChartLocation(chart.mouseX, chart.mouseY));\n }\n }\n else {\n this.completeSelection(event);\n }\n };\n /**\n * Get module name.\n * @private\n */\n Selection.prototype.getModuleName = function () {\n return 'Selection';\n };\n /**\n * To destroy the selection.\n * @return {void}\n * @private\n */\n Selection.prototype.destroy = function (chart) {\n this.removeEventListener();\n // Destroy method performed here\n };\n return Selection;\n}(BaseSelection));\nexport { Selection };\n","import { ChartLocation, Rect, TextOption, RectOption, isCollide, markerAnimate } from '../../common/utils/helper';\nimport { getLabelText, measureText, convertHexToColor, calculateRect, textElement, colorNameToHex } from '../../common/utils/helper';\nimport { textRender } from '../../common/model/constants';\nimport { createTemplate, getFontStyle, getElement, measureElementRect, templateAnimate, withIn } from '../../common/utils/helper';\nimport { createElement } from '@syncfusion/ej2-base';\nimport { getPoint } from '../../common/utils/helper';\n/**\n * `DataLabel` module is used to render data label for the data point.\n */\nvar DataLabel = /** @class */ (function () {\n /**\n * Constructor for the data label module.\n * @private\n */\n function DataLabel(chart) {\n this.errorHeight = 0;\n this.chart = chart;\n }\n DataLabel.prototype.initPrivateVariables = function (series, marker) {\n var transform;\n var render = series.chart.renderer;\n transform = series.chart.chartAreaType === 'Cartesian' ? 'translate(' + series.clipRect.x + ',' + (series.clipRect.y) + ')' : '';\n if (marker.dataLabel.visible) {\n series.shapeElement = render.createGroup({\n 'id': this.chart.element.id + 'ShapeGroup' + series.index,\n 'transform': transform,\n 'clip-path': 'url(#' + this.chart.element.id + '_ChartSeriesClipRect_' + series.index + ')'\n });\n series.textElement = render.createGroup({\n 'id': this.chart.element.id + 'TextGroup' + series.index,\n 'transform': transform,\n 'clip-path': 'url(#' + this.chart.element.id + '_ChartSeriesClipRect_' + series.index + ')'\n });\n }\n this.markerHeight = ((series.type === 'Scatter' || marker.visible) && !this.isRectSeries(series)) ? (marker.height / 2) : 0;\n this.commonId = this.chart.element.id + '_Series_' + series.index + '_Point_';\n this.calculateErrorHeight(series, series.marker.dataLabel.position);\n this.chartBackground = this.chart.chartArea.background === 'trasparent' ?\n this.chart.background || this.chart.themeStyle.background : this.chart.chartArea.background;\n };\n DataLabel.prototype.calculateErrorHeight = function (series, position) {\n if (!series.errorBar.visible) {\n return null;\n }\n else if (series.errorBar.visible && this.chart.chartAreaType !== 'PolarRadar') {\n var direction = series.errorBar.direction;\n var positiveHeight = this.chart.errorBarModule.positiveHeight;\n var negativeHeight = this.chart.errorBarModule.negativeHeight;\n if (this.isRectSeries(series)) {\n if (position === 'Top' || position === 'Auto') {\n if (direction === 'Both' || direction === 'Minus') {\n this.errorHeight = negativeHeight;\n }\n else {\n this.errorHeight = 0;\n }\n }\n if (position === 'Outer' || position === 'Auto') {\n if (direction === 'Both' || direction === 'Plus') {\n this.errorHeight = positiveHeight;\n }\n else {\n this.errorHeight = 0;\n }\n }\n }\n else {\n if (position === 'Top' || position === 'Outer' || position === 'Auto') {\n if ((direction === 'Both' || direction === 'Plus') && (!series.chart.isTransposed)) {\n this.errorHeight = positiveHeight;\n }\n else {\n this.errorHeight = 0;\n }\n }\n if (position === 'Bottom' || position === 'Auto') {\n if (direction === 'Both' || direction === 'Minus') {\n this.errorHeight = negativeHeight;\n }\n else {\n this.errorHeight = 0;\n }\n }\n }\n }\n else {\n this.errorHeight = 0;\n }\n };\n DataLabel.prototype.isRectSeries = function (series) {\n return series.isRectSeries || series.type === 'RangeArea';\n };\n /**\n * Render the data label for series.\n * @return {void}\n */\n DataLabel.prototype.render = function (series, chart, dataLabel) {\n var _this = this;\n // initialize the private variable\n this.initPrivateVariables(series, series.marker);\n var rect;\n var rgbValue;\n var contrast;\n var argsData;\n var border;\n var textSize;\n this.inverted = chart.requireInvertedAxis;\n this.yAxisInversed = series.yAxis.isInversed;\n var element = createElement('div', {\n id: chart.element.id + '_Series_' + series.index + '_DataLabelCollections'\n });\n // Data label point iteration started\n series.points.map(function (point, index) {\n _this.margin = dataLabel.margin;\n var labelText = [];\n var labelLength;\n var clip = series.clipRect;\n border = { width: dataLabel.border.width, color: dataLabel.border.color };\n if ((point.symbolLocations.length && point.symbolLocations[0]) ||\n (series.type === 'BoxAndWhisker' && point.regions.length)) {\n labelText = getLabelText(point, series, chart);\n labelLength = labelText.length;\n for (var i = 0; i < labelLength; i++) {\n argsData = {\n cancel: false, name: textRender, series: series,\n point: point, text: labelText[i], border: border,\n color: dataLabel.fill, template: dataLabel.template\n };\n chart.trigger(textRender, argsData);\n if (!argsData.cancel) {\n _this.fontBackground = argsData.color;\n _this.isDataLabelShape(argsData);\n _this.markerHeight = series.type === 'Bubble' ? (point.regions[0].height / 2) : _this.markerHeight;\n if (argsData.template !== null) {\n _this.createDataLabelTemplate(element, series, dataLabel, point, argsData, i);\n }\n else {\n textSize = measureText(argsData.text, dataLabel.font);\n rect = _this.calculateTextPosition(point, series, textSize, dataLabel, i);\n if (!isCollide(rect, chart.dataLabelCollections, clip)) {\n chart.dataLabelCollections.push(new Rect(rect.x + clip.x, rect.y + clip.y, rect.width, rect.height));\n if (_this.isShape) {\n series.shapeElement.appendChild(chart.renderer.drawRectangle(new RectOption(_this.commonId + index + '_TextShape_' + i, argsData.color, argsData.border, dataLabel.opacity, rect, dataLabel.rx, dataLabel.ry)));\n }\n // Checking the font color\n rgbValue = convertHexToColor(colorNameToHex(_this.fontBackground));\n contrast = Math.round((rgbValue.r * 299 + rgbValue.g * 587 + rgbValue.b * 114) / 1000);\n textElement(new TextOption(_this.commonId + index + '_Text_' + i, rect.x + _this.margin.left + textSize.width / 2, rect.y + _this.margin.top + textSize.height * 3 / 4, 'middle', argsData.text, 'rotate(0,' + (rect.x) + ',' + (rect.y) + ')', 'auto'), dataLabel.font, dataLabel.font.color ||\n ((contrast >= 128 || series.type === 'Hilo') ? 'black' : 'white'), series.textElement);\n }\n }\n }\n }\n }\n });\n if (element.childElementCount) {\n getElement(chart.element.id + '_Secondary_Element').appendChild(element);\n }\n };\n /**\n * Render the data label template.\n * @return {void}\n * @private\n */\n DataLabel.prototype.createDataLabelTemplate = function (parentElement, series, dataLabel, point, data, labelIndex) {\n this.margin = { left: 0, right: 0, bottom: 0, top: 0 };\n var clip = series.clipRect;\n var childElement = createTemplate(createElement('div', {\n id: this.chart.element.id + '_Series_' + series.index + '_DataLabel_'\n + point.index + (labelIndex ? ('_' + labelIndex) : ''),\n styles: 'position: absolute;background-color:' + data.color + ';' +\n getFontStyle(dataLabel.font) + ';border:' + data.border.width + 'px solid ' + data.border.color + ';'\n }), point.index, data.template, this.chart, point, series);\n var elementRect = measureElementRect(childElement);\n var rect = this.calculateTextPosition(point, series, { width: elementRect.width, height: elementRect.height }, dataLabel, labelIndex);\n childElement.style.left = ((this.chart.chartAreaType === 'PolarRadar' ? 0 : series.clipRect.x) + rect.x) + 'px';\n childElement.style.top = ((this.chart.chartAreaType === 'PolarRadar' ? 0 : series.clipRect.y) + rect.y) + 'px';\n var rgbValue = convertHexToColor(colorNameToHex(this.fontBackground));\n var vAxis = series.chart.requireInvertedAxis ? series.xAxis : series.yAxis;\n var hAxis = series.chart.requireInvertedAxis ? series.yAxis : series.xAxis;\n childElement.style.color = dataLabel.font.color ||\n ((Math.round((rgbValue.r * 299 + rgbValue.g * 587 + rgbValue.b * 114) / 1000)) >= 128 ? 'black' : 'white');\n if (childElement.childElementCount && !isCollide(rect, this.chart.dataLabelCollections, clip)\n && (series.seriesType !== 'XY' || point.yValue === undefined || withIn(point.yValue, series.yAxis.visibleRange) ||\n (series.type.indexOf('100') > -1 && withIn(series.stackedValues.endValues[point.index], series.yAxis.visibleRange)))\n && withIn(point.xValue, series.xAxis.visibleRange) && parseFloat(childElement.style.top) >= vAxis.rect.y &&\n parseFloat(childElement.style.left) >= hAxis.rect.x && parseFloat(childElement.style.top) <= vAxis.rect.y + vAxis.rect.height &&\n parseFloat(childElement.style.left) <= hAxis.rect.x + hAxis.rect.width) {\n this.chart.dataLabelCollections.push(new Rect(rect.x + clip.x, rect.y + clip.y, rect.width, rect.height));\n parentElement.appendChild(childElement);\n if (series.animation.enable && this.chart.animateSeries) {\n this.doDataLabelAnimation(series, childElement);\n }\n }\n };\n DataLabel.prototype.calculateTextPosition = function (point, series, textSize, dataLabel, labelIndex) {\n var labelRegion = labelIndex > 1 ? (series.type === 'Candle') ? point.regions[1] : point.regions[0] : point.regions[0];\n if (labelIndex > 1 && series.type === 'HiloOpenClose') {\n labelRegion = (labelIndex === 2) ? point.regions[1] : point.regions[2];\n }\n var location;\n location = this.getLabelLocation(point, series, textSize, labelIndex);\n var padding = 5;\n var clipRect = series.clipRect;\n var rect;\n // calculating alignment\n if (!this.chart.requireInvertedAxis || !this.isRectSeries(series) || series.type === 'BoxAndWhisker') {\n this.locationX = location.x;\n var alignmentValue = textSize.height + (this.borderWidth * 2) + this.markerHeight +\n this.margin.bottom + this.margin.top + padding;\n location.y = (dataLabel.position === 'Auto') ? location.y :\n this.calculateAlignment(alignmentValue, location.y, dataLabel.alignment, this.isRectSeries(series) ? point.yValue < 0 : false);\n // calculating position\n location.y = (!this.isRectSeries(series) || series.type === 'BoxAndWhisker') ?\n this.calculatePathPosition(location.y, dataLabel.position, series, point, textSize, labelIndex) :\n this.calculateRectPosition(location.y, labelRegion, point.yValue < 0 !== this.yAxisInversed, dataLabel.position, series, textSize, labelIndex, point);\n if (this.isRectSeries(series) && this.chart.chartAreaType === 'PolarRadar') {\n location = this.calculatePolarRectPosition(location, dataLabel.position, series, point, textSize, labelIndex);\n }\n }\n else {\n this.locationY = location.y;\n var alignmentValue = textSize.width + this.borderWidth + this.margin.left + this.margin.right - padding;\n location.x = dataLabel.position === 'Auto' ? location.x :\n this.calculateAlignment(alignmentValue, location.x, dataLabel.alignment, point.yValue < 0);\n location.x = this.calculateRectPosition(location.x, labelRegion, point.yValue < 0 !== this.yAxisInversed, dataLabel.position, series, textSize, labelIndex, point);\n }\n rect = calculateRect(location, textSize, this.margin);\n // Checking the condition whether data Label has been exist the clip rect\n if (!((rect.y > clipRect.height) || (rect.x > clipRect.width) ||\n (rect.x + rect.width < 0) || (rect.y + rect.height < 0))) {\n rect.x = rect.x < 0 ? padding : rect.x;\n rect.y = rect.y < 0 ? padding : rect.y;\n rect.x -= (rect.x + rect.width) > clipRect.width ? (rect.x + rect.width) - clipRect.width + padding : 0;\n rect.y -= (rect.y + rect.height) > clipRect.height ? (rect.y + rect.height) - clipRect.height + padding : 0;\n this.fontBackground = this.fontBackground === 'transparent' ? this.chartBackground : this.fontBackground;\n }\n return rect;\n };\n // Calculation label location for polar column draw types\n DataLabel.prototype.calculatePolarRectPosition = function (location, position, series, point, size, labelIndex) {\n var padding = 5;\n var columnRadius;\n var angle = (point.regionData.startAngle - 0.5 * Math.PI) + (point.regionData.endAngle - point.regionData.startAngle) / 2;\n if (labelIndex === 0) {\n columnRadius = point.regionData.radius < point.regionData.innerRadius ? point.regionData.innerRadius\n : point.regionData.radius;\n }\n else {\n columnRadius = point.regionData.radius > point.regionData.innerRadius ? point.regionData.innerRadius\n : point.regionData.radius;\n }\n this.fontBackground = this.fontBackground === 'transparent' ? this.chartBackground : this.fontBackground;\n if (series.drawType.indexOf('Stacking') > -1) {\n position = position === 'Outer' ? 'Top' : position;\n }\n else if (series.drawType.indexOf('Range') > -1) {\n position = (position === 'Outer' || position === 'Top') ? position : 'Auto';\n }\n if (position === 'Outer') {\n columnRadius = labelIndex === 0 ? columnRadius + 2 * padding : columnRadius - 2 * padding;\n }\n else if (position === 'Middle') {\n columnRadius = columnRadius / 2 + padding;\n }\n else if (position === 'Top') {\n columnRadius = labelIndex === 0 ? columnRadius - 2 * padding : columnRadius + 2 * padding;\n }\n else if (position === 'Bottom') {\n columnRadius = padding;\n }\n else {\n if (labelIndex === 0) {\n columnRadius = columnRadius >= series.chart.radius ? columnRadius - padding :\n series.drawType === 'StackingColumn' ? columnRadius - 2 * padding : columnRadius + 2 * padding;\n }\n else {\n columnRadius = columnRadius >= series.chart.radius ? columnRadius + padding : columnRadius - 2 * padding;\n }\n }\n location.x = series.clipRect.width / 2 + series.clipRect.x + columnRadius * Math.cos(angle);\n location.y = series.clipRect.height / 2 + series.clipRect.y + columnRadius * Math.sin(angle);\n return location;\n };\n /**\n * Get the label location\n */\n DataLabel.prototype.getLabelLocation = function (point, series, textSize, labelIndex) {\n var location = new ChartLocation(0, 0);\n var labelRegion = (series.type === 'Candle' && labelIndex > 1) ? point.regions[1] : point.regions[0];\n if (series.type === 'HiloOpenClose') {\n labelRegion = (labelIndex === 2) ? point.regions[1] : point.regions[2];\n }\n var xAxis = series.xAxis;\n var yAxis = series.yAxis;\n var isInverted = series.chart.requireInvertedAxis;\n if (series.type === 'BoxAndWhisker') {\n this.markerHeight = 0;\n switch (labelIndex) {\n case 0:\n location = getPoint(point.xValue, point.median, xAxis, yAxis, isInverted);\n break;\n case 1:\n location = getPoint(point.xValue, point.maximum, xAxis, yAxis, isInverted);\n break;\n case 2:\n location = getPoint(point.xValue, point.minimum, xAxis, yAxis, isInverted);\n break;\n case 3:\n location = getPoint(point.xValue, point.upperQuartile, xAxis, yAxis, isInverted);\n break;\n case 4:\n location = getPoint(point.xValue, point.lowerQuartile, xAxis, yAxis, isInverted);\n break;\n default: {\n location = getPoint(point.xValue, point.outliers[labelIndex - 5], xAxis, yAxis, isInverted);\n this.markerHeight = series.marker.height / 2;\n break;\n }\n }\n }\n else if (labelIndex === 0 || labelIndex === 1) {\n location = new ChartLocation(point.symbolLocations[0].x, point.symbolLocations[0].y);\n }\n else if ((labelIndex === 2 || labelIndex === 3) && series.type === 'Candle') {\n location = new ChartLocation(point.symbolLocations[1].x, point.symbolLocations[1].y);\n }\n else if (isInverted) {\n location = { x: labelRegion.x + (labelRegion.width) / 2, y: labelRegion.y };\n }\n else {\n location = { x: labelRegion.x + labelRegion.width, y: labelRegion.y + (labelRegion.height) / 2 };\n }\n //Aligning the label at the beginning of the tick, when tick size is less than text size\n if (labelIndex > 1 && series.type === 'HiloOpenClose') {\n if (series.chart.requireInvertedAxis) {\n var height = labelRegion.height;\n location.y = labelRegion.y + height / 2 + 2 * (labelIndex === 2 ? 1 : -1);\n }\n else {\n var width = labelRegion.width;\n location.x = labelRegion.x + width / 2 + 2 * (labelIndex === 2 ? 1 : -1);\n }\n }\n return location;\n };\n DataLabel.prototype.calculateRectPosition = function (labelLocation, rect, isMinus, position, series, textSize, labelIndex, point) {\n if (series.chart.chartAreaType === 'PolarRadar') {\n return null;\n }\n var padding = 5;\n var margin = this.margin;\n var textLength = !this.inverted ? textSize.height : textSize.width;\n var extraSpace = this.borderWidth + textLength / 2 + padding;\n if (series.type.indexOf('Stacking') > -1) {\n position = position === 'Outer' ? 'Top' : position;\n }\n else if (series.type.indexOf('Range') > -1) {\n position = (position === 'Outer' || position === 'Top') ? position : 'Auto';\n }\n else if (series.type === 'Waterfall') {\n position = position === 'Auto' ? 'Middle' : position;\n }\n switch (position) {\n case 'Bottom':\n labelLocation = !this.inverted ?\n isMinus ? (labelLocation - rect.height + extraSpace + margin.top) :\n (labelLocation + rect.height - extraSpace - margin.bottom) :\n isMinus ? (labelLocation + rect.width - extraSpace - margin.left) :\n (labelLocation - rect.width + extraSpace + margin.right);\n break;\n case 'Middle':\n labelLocation = labelLocation = !this.inverted ?\n (isMinus ? labelLocation - (rect.height / 2) : labelLocation + (rect.height / 2)) :\n (isMinus ? labelLocation + (rect.width / 2) : labelLocation - (rect.width / 2));\n break;\n case 'Auto':\n labelLocation = this.calculateRectActualPosition(labelLocation, rect, isMinus, series, textSize, labelIndex, point);\n break;\n default:\n extraSpace += this.errorHeight;\n labelLocation = this.calculateTopAndOuterPosition(labelLocation, rect, position, series, labelIndex, extraSpace, isMinus);\n break;\n }\n var check = !this.inverted ? (labelLocation < rect.y || labelLocation > rect.y + rect.height) :\n (labelLocation < rect.x || labelLocation > rect.x + rect.width);\n this.fontBackground = check ?\n (this.fontBackground === 'transparent' ? this.chartBackground : this.fontBackground)\n : this.fontBackground === 'transparent' ? (point.color || series.interior) : this.fontBackground;\n return labelLocation;\n };\n DataLabel.prototype.calculatePathPosition = function (labelLocation, position, series, point, size, labelIndex) {\n var padding = 5;\n if ((series.type.indexOf('Area') > -1 && series.type !== 'RangeArea')\n && this.yAxisInversed && series.marker.dataLabel.position !== 'Auto') {\n position = position === 'Top' ? 'Bottom' : position === 'Bottom' ? 'Top' : position;\n }\n this.fontBackground = this.fontBackground === 'transparent' ? this.chartBackground : this.fontBackground;\n switch (position) {\n case 'Top':\n case 'Outer':\n labelLocation = labelLocation - this.markerHeight - this.borderWidth - size.height / 2 - this.margin.bottom - padding -\n this.errorHeight;\n break;\n case 'Bottom':\n labelLocation = labelLocation + this.markerHeight + this.borderWidth + size.height / 2 + this.margin.top + padding +\n this.errorHeight;\n break;\n case 'Auto':\n labelLocation = this.calculatePathActualPosition(labelLocation, this.markerHeight, series, point, size, labelIndex);\n break;\n }\n return labelLocation;\n };\n DataLabel.prototype.isDataLabelShape = function (style) {\n this.isShape = (style.color !== 'transparent' || style.border.width > 0);\n this.borderWidth = style.border.width;\n if (!this.isShape) {\n this.margin = { left: 0, right: 0, bottom: 0, top: 0 };\n }\n };\n DataLabel.prototype.calculateRectActualPosition = function (labelLocation, rect, isMinus, series, size, labelIndex, point) {\n var location;\n var labelRect;\n var isOverLap = true;\n var position = 0;\n var collection = this.chart.dataLabelCollections;\n var finalPosition = series.type.indexOf('Range') !== -1 || series.type === 'Hilo' ? 2 : 4;\n while (isOverLap && position < finalPosition) {\n location = this.calculateRectPosition(labelLocation, rect, isMinus, this.getPosition(position), series, size, labelIndex, point);\n if (!this.inverted) {\n labelRect = calculateRect(new ChartLocation(this.locationX, location), size, this.margin);\n isOverLap = labelRect.y < 0 || isCollide(labelRect, collection, series.clipRect) || labelRect.y > series.clipRect.height;\n }\n else {\n labelRect = calculateRect(new ChartLocation(location, this.locationY), size, this.margin);\n isOverLap = labelRect.x < 0 || isCollide(labelRect, collection, series.clipRect) ||\n labelRect.x + labelRect.width > series.clipRect.width;\n }\n position++;\n }\n return location;\n };\n // alignment calculation assigned here\n DataLabel.prototype.calculateAlignment = function (value, labelLocation, alignment, isMinus) {\n switch (alignment) {\n case 'Far':\n labelLocation = !this.inverted ? (isMinus ? labelLocation + value : labelLocation - value) :\n (isMinus ? labelLocation - value : labelLocation + value);\n break;\n case 'Near':\n labelLocation = !this.inverted ? (isMinus ? labelLocation - value : labelLocation + value) :\n (isMinus ? labelLocation + value : labelLocation - value);\n break;\n case 'Center':\n labelLocation = labelLocation;\n break;\n }\n return labelLocation;\n };\n //calculation for top and outer position of datalabel for rect series\n DataLabel.prototype.calculateTopAndOuterPosition = function (location, rect, position, series, index, extraSpace, isMinus) {\n var margin = this.margin;\n var top;\n switch (series.type) {\n case 'RangeColumn':\n case 'RangeArea':\n case 'Hilo':\n top = (index === 0 && !this.yAxisInversed) || (index === 1 && this.yAxisInversed);\n location = this.updateLabelLocation(position, location, extraSpace, margin, rect, top);\n break;\n case 'Candle':\n top = (index === 0 || index === 2) && !this.yAxisInversed\n || (index === 1 || index === 3) && this.yAxisInversed;\n location = this.updateLabelLocation(position, location, extraSpace, margin, rect, top, index > 1);\n break;\n case 'HiloOpenClose':\n if (index <= 1) {\n top = (index === 0 && !this.yAxisInversed) || (index === 1 && this.yAxisInversed);\n location = this.updateLabelLocation(position, location, extraSpace, margin, rect, top);\n }\n else {\n if (this.yAxisInversed) {\n location = !this.inverted ? location + extraSpace + margin.top : location - extraSpace - margin.right;\n }\n else {\n location = !this.inverted ? location - extraSpace - margin.bottom : location + extraSpace + margin.left;\n }\n }\n break;\n default:\n if ((isMinus && position === 'Top') || (!isMinus && position === 'Outer')) {\n location = !this.inverted ? location - extraSpace - margin.bottom : location + extraSpace + margin.left;\n }\n else {\n location = !this.inverted ? location + extraSpace + margin.top : location - extraSpace - margin.right;\n }\n break;\n }\n return location;\n };\n /**\n * Updates the label location\n */\n DataLabel.prototype.updateLabelLocation = function (position, location, extraSpace, margin, rect, top, inside) {\n if (inside === void 0) { inside = false; }\n if (!this.inverted) {\n if (top) {\n location = (position === 'Outer' && !inside) ? location - extraSpace - margin.bottom : location + extraSpace + margin.top;\n }\n else {\n location = (position === 'Outer' && !inside) ? location + rect.height + extraSpace + margin.top :\n location + rect.height - extraSpace - margin.bottom;\n }\n }\n else {\n if (top) {\n location = (position === 'Outer' && !inside) ? location + extraSpace + margin.left : location - extraSpace - margin.right;\n }\n else {\n location = (position === 'Outer' && !inside) ? location - rect.width - extraSpace - margin.right :\n location - rect.width + extraSpace + margin.left;\n }\n }\n return location;\n };\n DataLabel.prototype.calculatePathActualPosition = function (y, markerSize, series, point, size, labelIndex) {\n var points = series.points;\n var index = point.index;\n var yValue = points[index].yValue;\n var position;\n var nextPoint = points.length - 1 > index ? points[index + 1] : null;\n var previousPoint = index > 0 ? points[index - 1] : null;\n var yLocation;\n var isOverLap = true;\n var labelRect;\n var isBottom;\n var positionIndex;\n var collection = this.chart.dataLabelCollections;\n if (series.type === 'Bubble') {\n position = 'Top';\n }\n else if (series.type.indexOf('Step') > -1) {\n position = 'Top';\n if (index) {\n position = (!previousPoint || !previousPoint.visible || (yValue > previousPoint.yValue !== this.yAxisInversed)\n || yValue === previousPoint.yValue) ? 'Top' : 'Bottom';\n }\n }\n else if (series.type === 'BoxAndWhisker') {\n if (labelIndex === 1 || labelIndex === 3 || labelIndex > 4) {\n position = series.yAxis.isInversed ? 'Bottom' : 'Top';\n }\n else if (labelIndex === 2 || labelIndex === 4) {\n position = series.yAxis.isInversed ? 'Top' : 'Bottom';\n }\n else {\n isOverLap = false;\n position = 'Middle';\n yLocation = this.calculatePathPosition(y, position, series, point, size, labelIndex);\n }\n }\n else {\n if (index === 0) {\n position = (!nextPoint || !nextPoint.visible || yValue > nextPoint.yValue ||\n (yValue < nextPoint.yValue && this.yAxisInversed)) ? 'Top' : 'Bottom';\n }\n else if (index === points.length - 1) {\n position = (!previousPoint || !previousPoint.visible || yValue > previousPoint.yValue ||\n (yValue < previousPoint.yValue && this.yAxisInversed)) ? 'Top' : 'Bottom';\n }\n else {\n if (!nextPoint.visible && !(previousPoint && previousPoint.visible)) {\n position = 'Top';\n }\n else if (!nextPoint.visible || !previousPoint) {\n position = (nextPoint.yValue > yValue || (previousPoint && previousPoint.yValue > yValue)) ?\n 'Bottom' : 'Top';\n }\n else {\n var slope = (nextPoint.yValue - previousPoint.yValue) / 2;\n var intersectY = (slope * index) + (nextPoint.yValue - (slope * (index + 1)));\n position = !this.yAxisInversed ? intersectY < yValue ? 'Top' : 'Bottom' :\n intersectY < yValue ? 'Bottom' : 'Top';\n }\n }\n }\n isBottom = position === 'Bottom';\n positionIndex = ['Outer', 'Top', 'Bottom', 'Middle', 'Auto'].indexOf(position);\n while (isOverLap && positionIndex < 4) {\n yLocation = this.calculatePathPosition(y, this.getPosition(positionIndex), series, point, size, labelIndex);\n labelRect = calculateRect(new ChartLocation(this.locationX, yLocation), size, this.margin);\n isOverLap = labelRect.y < 0 || isCollide(labelRect, collection, series.clipRect)\n || (labelRect.y + labelRect.height) > series.clipRect.height;\n positionIndex = isBottom ? positionIndex - 1 : positionIndex + 1;\n isBottom = false;\n }\n return yLocation;\n };\n /**\n * Animates the data label.\n * @param {Series} series - Data label of the series gets animated.\n * @return {void}\n */\n DataLabel.prototype.doDataLabelAnimation = function (series, element) {\n var shapeElements = series.shapeElement.childNodes;\n var textNode = series.textElement.childNodes;\n var delay = series.animation.delay + series.animation.duration;\n var location;\n var length = element ? 1 : textNode.length;\n for (var i = 0; i < length; i++) {\n if (element) {\n element.style.visibility = 'hidden';\n templateAnimate(element, delay, 200, 'ZoomIn');\n }\n else {\n location = new ChartLocation((+textNode[i].getAttribute('x')) + ((+textNode[i].getAttribute('width')) / 2), (+textNode[i].getAttribute('y')) + ((+textNode[i].getAttribute('height')) / 2));\n markerAnimate(textNode[i], delay, 200, series, null, location, true);\n if (shapeElements[i]) {\n location = new ChartLocation((+shapeElements[i].getAttribute('x')) + ((+shapeElements[i].getAttribute('width')) / 2), (+shapeElements[i].getAttribute('y')) + ((+shapeElements[i].getAttribute('height')) / 2));\n markerAnimate(shapeElements[i], delay, 200, series, null, location, true);\n }\n }\n }\n };\n DataLabel.prototype.getPosition = function (index) {\n return (['Outer', 'Top', 'Bottom', 'Middle', 'Auto'][index]);\n };\n /**\n * Get module name.\n */\n DataLabel.prototype.getModuleName = function () {\n // Returns the module name\n return 'DataLabel';\n };\n /**\n * To destroy the dataLabel for series.\n * @return {void}\n * @private\n */\n DataLabel.prototype.destroy = function (chart) {\n // Destroy method performed here\n };\n return DataLabel;\n}());\nexport { DataLabel };\n","import { Mean, RectOption } from '../../common/utils/helper';\nimport { getPoint, PathOption, sum, templateAnimate } from '../../common/utils/helper';\n/**\n * `ErrorBar` module is used to render the error bar for series.\n */\nvar ErrorBar = /** @class */ (function () {\n /**\n * Constructor for the error bar module.\n * @private\n */\n function ErrorBar(chart) {\n this.chart = chart;\n }\n /**\n * Render the error bar for series.\n * @return {void}\n */\n ErrorBar.prototype.render = function (series) {\n if (this.chart.chartAreaType === 'PolarRadar') {\n return null;\n }\n this.createElement(series);\n this.renderErrorBar(series);\n };\n ErrorBar.prototype.renderErrorBar = function (series) {\n var seriesIndex = series.index;\n var point;\n var symbolId;\n var capId;\n var errorbar = series.errorBar;\n var errorBarCap = series.errorBar.errorBarCap;\n var border = series.border;\n var start;\n var mid;\n var end;\n var isInverted;\n var isVert;\n var errorDirection = ['', ''];\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point_1 = _a[_i];\n if (point_1.visible && point_1.symbolLocations[0]) {\n var errorX = 0;\n var errorY = 0;\n switch (errorbar.mode) {\n case 'Vertical':\n errorY = errorbar.verticalError;\n break;\n case 'Horizontal':\n errorX = errorbar.horizontalError;\n break;\n case 'Both':\n errorX = errorbar.horizontalError;\n errorY = errorbar.verticalError;\n break;\n }\n errorDirection = this['calculate' + errorbar.type + 'Value'](point_1, series, this.chart.requireInvertedAxis, errorX, errorY);\n symbolId = this.chart.element.id + '_Series_' + '_ErrorBarGroup_' + seriesIndex + '_Point_' + point_1.index;\n capId = this.chart.element.id + '_Series_' + '_ErrorBarCap_' + seriesIndex + '_Point_' + point_1.index;\n var shapeOption = new PathOption(symbolId, '', errorbar.width, errorbar.color || this.chart.themeStyle.errorBar, null, '', errorDirection[0]);\n var path = this.chart.renderer.drawPath(shapeOption);\n series.errorBarElement.appendChild(path);\n var capOption = new PathOption(capId, '', errorBarCap.width, errorBarCap.color || this.chart.themeStyle.errorBar, null, '', errorDirection[1]);\n var capPath = this.chart.renderer.drawPath(capOption);\n series.errorBarElement.appendChild(capPath);\n }\n }\n };\n // path calculation for error bar\n ErrorBar.prototype.findLocation = function (point, series, isInverted, x1, y1) {\n var errorbar = series.errorBar;\n var direction = errorbar.direction;\n var location = [];\n var stackedValue = series.stackedValues;\n var yValue = series.type.indexOf('Stacking') > -1 ? series.stackedValues.endValues[point.index] :\n (series.seriesType === 'HighLow' || series.seriesType === 'HighLowOpenClose') ? (series.points[point.index].high) :\n point.yValue;\n var startPoint = getPoint(point.xValue + ((direction === 'Plus' || direction === 'Both') ? (errorbar.type === 'Custom' &&\n (errorbar.mode === 'Horizontal' || errorbar.mode === 'Both')) ? x1 = errorbar.horizontalPositiveError : x1 : 0), yValue + ((direction === 'Plus' || direction === 'Both') ? (errorbar.type === 'Custom' &&\n (errorbar.mode === 'Vertical' || errorbar.mode === 'Both')) ? y1 = errorbar.verticalPositiveError : y1 : 0), series.xAxis, series.yAxis, isInverted);\n location.push(startPoint);\n if (series.isRectSeries) {\n var midPoint = point.symbolLocations[0];\n location.push(midPoint);\n }\n else {\n var midPoint = getPoint(point.xValue, point.yValue, series.xAxis, series.yAxis, isInverted);\n location.push(midPoint);\n }\n var endPoint = getPoint(point.xValue - ((direction === 'Minus' || direction === 'Both') ? (errorbar.type === 'Custom' &&\n (errorbar.mode === 'Horizontal' || errorbar.mode === 'Both')) ? x1 = errorbar.horizontalNegativeError : x1 : 0), yValue - ((direction === 'Minus' || direction === 'Both') ? (errorbar.type === 'Custom' &&\n (errorbar.mode === 'Vertical' || errorbar.mode === 'Both')) ? y1 = errorbar.verticalNegativeError : y1 : 0), series.xAxis, series.yAxis, isInverted);\n location.push(endPoint);\n // calculate error height for datalabel position alignment\n point.error = (errorbar.mode === 'Vertical') ? errorbar.verticalError : errorbar.horizontalError;\n this.negativeHeight = (errorbar.mode === 'Vertical' || errorbar.mode === 'Both') ? (isInverted ? (location[1].x - location[2].x) :\n (location[2].y - location[1].y)) : 0;\n this.positiveHeight = (errorbar.mode === 'Vertical' || errorbar.mode === 'Both') ? (isInverted ? (location[0].x - location[1].x) :\n (location[1].y - location[0].y)) : 0;\n return this.getErrorDirection(location[0], location[1], location[2], series, isInverted);\n };\n // calculations for eror bar types\n ErrorBar.prototype.calculateFixedValue = function (point, series, isInverted, errorX, errorY, xAxis, yAxis) {\n var errorbar = series.errorBar;\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.calculatePercentageValue = function (point, series, isInverted, errorX, errorY, xAxis, yAxis) {\n errorX = (errorX / 100) * point.xValue;\n errorY = (errorY / 100) * point.yValue;\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.calculateStandardDeviationValue = function (point, series, isInverted, errorX, errorY, xAxis, yAxis) {\n var getMean = this.meanCalculation(series, series.errorBar.mode);\n errorX = errorX * (getMean.horizontalSquareRoot + getMean.horizontalMean);\n errorY = errorY * (getMean.verticalSquareRoot + getMean.verticalMean);\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.calculateStandardErrorValue = function (point, series, isInverted, errorX, errorY, xAxis, yAxis) {\n var length = series.points.length;\n var getMean = this.meanCalculation(series, series.errorBar.mode);\n errorX = ((errorX * getMean.horizontalSquareRoot) / Math.sqrt(length));\n errorY = ((errorY * getMean.verticalSquareRoot) / Math.sqrt(length));\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.calculateCustomValue = function (point, series, isInverted, errorX, errorY, xAxis, yAxis) {\n var errorbar = series.errorBar;\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.getHorizontalDirection = function (start, mid, end, direction, errorMode, capLength) {\n var path = '';\n var capDirection = '';\n path += ' M ' + start.x + ' ' + mid.y + ' L ' + end.x + ' ' + mid.y;\n capDirection += (direction === 'Plus' || direction === 'Both') ? ' M ' + (start.x) + ' ' + (mid.y - capLength) + ' L '\n + (start.x) + ' ' + (mid.y + capLength) : '';\n capDirection += (direction === 'Minus' || direction === 'Both') ? ' M ' + (end.x) + ' ' + (mid.y - capLength) + ' L '\n + (end.x) + ' ' + (mid.y + capLength) : ' ';\n return [path, capDirection];\n };\n ErrorBar.prototype.getVerticalDirection = function (start, mid, end, direction, errorMode, capLength) {\n var path = '';\n var capDirection = '';\n path += ' M ' + mid.x + ' ' + start.y + ' L ' + mid.x + ' ' + end.y;\n capDirection += (direction === 'Plus' || direction === 'Both') ? ' M ' + (mid.x - capLength) + ' ' + start.y + ' L '\n + (mid.x + capLength) + ' ' + start.y : '';\n capDirection += (direction === 'Minus' || direction === 'Both') ? ' M ' + (mid.x - capLength) + ' ' + end.y + ' L '\n + (mid.x + capLength) + ' ' + end.y : '';\n return [path, capDirection];\n };\n ErrorBar.prototype.getBothDirection = function (start, mid, end, direction, errorMode, capLength) {\n var capDirection = '';\n var path = '';\n var pathH = this.getHorizontalDirection(start, mid, end, direction, errorMode, capLength);\n var pathV = this.getVerticalDirection(start, mid, end, direction, errorMode, capLength);\n path = pathH[0].concat(pathV[0]);\n capDirection = pathH[1].concat(pathV[1]);\n return [path, capDirection];\n };\n ErrorBar.prototype.getErrorDirection = function (start, mid, end, series, isInverted) {\n var direction = series.errorBar.direction;\n var mode = series.errorBar.mode;\n var capLength = series.errorBar.errorBarCap.length;\n var path = '';\n var paths;\n var capDirection = '';\n var errorMode = mode;\n switch (mode) {\n case 'Both':\n errorMode = mode;\n break;\n case 'Horizontal':\n errorMode = (isInverted) ? 'Vertical' : mode;\n break;\n case 'Vertical':\n errorMode = (isInverted) ? 'Horizontal' : mode;\n break;\n }\n switch (errorMode) {\n case 'Horizontal':\n paths = this.getHorizontalDirection(start, mid, end, direction, errorMode, capLength);\n break;\n case 'Vertical':\n paths = this.getVerticalDirection(start, mid, end, direction, errorMode, capLength);\n break;\n case 'Both':\n paths = this.getBothDirection(start, mid, end, direction, errorMode, capLength);\n break;\n }\n return [paths[0], paths[1]];\n };\n // mean calculation for standard deviation and standard error\n ErrorBar.prototype.meanCalculation = function (series, mode) {\n var sumOfX = 0;\n var sumOfY = 0;\n var verticalMean = 0;\n var horizontalMean = 0;\n var horSquareDev;\n var verStandardMean;\n var horStandardMean;\n var verSquareTotal;\n var horSquareTotal;\n var verSquareRoot;\n var horSquareRoot;\n var length = series.points.length;\n switch (mode) {\n case 'Vertical':\n sumOfY = sum(series.yData);\n verticalMean = sumOfY / length;\n break;\n case 'Horizontal':\n sumOfX = sum(series.xData);\n horizontalMean = sumOfX / length;\n break;\n case 'Both':\n sumOfY = sum(series.yData);\n verticalMean = sumOfY / length;\n sumOfX = sum(series.xData);\n horizontalMean = sumOfX / length;\n }\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (mode === 'Vertical') {\n sumOfY = sumOfY + Math.pow((point.yValue - verticalMean), 2);\n }\n else if (mode === 'Horizontal') {\n sumOfX = sumOfX + Math.pow((point.xValue - horizontalMean), 2);\n }\n else {\n sumOfY = sumOfY + Math.pow((point.yValue - verticalMean), 2);\n sumOfX = sumOfX + Math.pow((point.xValue - horizontalMean), 2);\n }\n }\n verStandardMean = sumOfY / (length - 1);\n verSquareRoot = Math.sqrt(sumOfY / (length - 1));\n horStandardMean = sumOfX / (length - 1);\n horSquareRoot = Math.sqrt(sumOfX / (length - 1));\n return new Mean(verStandardMean, verSquareRoot, horStandardMean, horSquareRoot, verticalMean, horizontalMean);\n };\n ErrorBar.prototype.createElement = function (series) {\n var explodeValue = 5;\n var render = series.chart.renderer;\n var transform;\n transform = series.chart.chartAreaType === 'Cartesian' ? 'translate(' + series.clipRect.x + ',' + (series.clipRect.y) + ')' : '';\n var markerHeight = (series.marker.height + explodeValue) / 2;\n var markerWidth = (series.marker.width + explodeValue) / 2;\n if (series.chart.chartAreaType === 'Cartesian') {\n var errorBarClipRect = render.drawClipPath(new RectOption(this.chart.element.id + '_ChartErrorBarClipRect_' + series.index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: -markerWidth, y: -markerHeight,\n width: series.clipRect.width + markerWidth * 2, height: series.clipRect.height + markerHeight * 2\n }));\n series.errorBarElement = render.createGroup({\n 'id': this.chart.element.id + 'ErrorBarGroup' + series.index,\n 'transform': transform,\n 'clip-path': 'url(#' + this.chart.element.id + '_ChartErrorBarClipRect_' + series.index + ')'\n });\n series.errorBarElement.appendChild(errorBarClipRect);\n }\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n ErrorBar.prototype.doErrorBarAnimation = function (series) {\n var errorBarElements = series.errorBarElement.childNodes;\n if (!errorBarElements) {\n return null;\n }\n var delay = series.animation.delay + series.animation.duration;\n var j = 1;\n while (j < errorBarElements.length) {\n for (var i = 0; i < series.points.length; i++) {\n if (!series.points[i].symbolLocations[0]) {\n continue;\n }\n errorBarElements[j].style.visibility = 'hidden';\n templateAnimate(errorBarElements[j], delay, 350, series.chart.requireInvertedAxis ? 'SlideLeftIn' : 'SlideBottomIn', false);\n }\n j++;\n }\n };\n /**\n * Get module name.\n */\n ErrorBar.prototype.getModuleName = function () {\n // Returns the module name\n return 'ErrorBar';\n };\n /**\n * To destroy the errorBar for series.\n * @return {void}\n * @private\n */\n ErrorBar.prototype.destroy = function (chart) {\n // Destroy method performed here\n };\n return ErrorBar;\n}());\nexport { ErrorBar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Chart legend\n */\nimport { remove, Browser } from '@syncfusion/ej2-base';\nimport { extend } from '@syncfusion/ej2-base';\nimport { LegendOptions, BaseLegend } from '../../common/legend/legend';\nimport { measureText, textTrim } from '../../common/utils/helper';\nimport { legendRender } from '../../common/model/constants';\n/**\n * `Legend` module is used to render legend for the chart.\n */\nvar Legend = /** @class */ (function (_super) {\n __extends(Legend, _super);\n function Legend(chart) {\n var _this = _super.call(this, chart) || this;\n _this.library = _this;\n _this.addEventListener();\n return _this;\n }\n /**\n * Binding events for legend module.\n */\n Legend.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n this.chart.on(Browser.touchMoveEvent, this.mouseMove, this);\n this.chart.on('click', this.click, this);\n this.chart.on(Browser.touchEndEvent, this.mouseEnd, this);\n };\n /**\n * UnBinding events for legend module.\n */\n Legend.prototype.removeEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n this.chart.off(Browser.touchMoveEvent, this.mouseMove);\n this.chart.off('click', this.click);\n this.chart.off(Browser.touchEndEvent, this.mouseEnd);\n };\n /**\n * To handle mosue move for legend module\n */\n Legend.prototype.mouseMove = function (e) {\n if (this.chart.legendSettings.visible && !this.chart.isTouch) {\n this.move(e);\n }\n };\n /**\n * To handle mosue end for legend module\n */\n Legend.prototype.mouseEnd = function (e) {\n if (this.chart.legendSettings.visible && this.chart.isTouch) {\n this.move(e);\n }\n };\n /**\n * Get the legend options.\n * @return {void}\n * @private\n */\n Legend.prototype.getLegendOptions = function (visibleSeriesCollection, chart) {\n this.legendCollections = [];\n var seriesType;\n for (var _i = 0, visibleSeriesCollection_1 = visibleSeriesCollection; _i < visibleSeriesCollection_1.length; _i++) {\n var series = visibleSeriesCollection_1[_i];\n if (series.category !== 'Indicator') {\n seriesType = (chart.chartAreaType === 'PolarRadar') ? series.drawType :\n series.type;\n this.legendCollections.push(new LegendOptions(series.name, series.interior, series.legendShape, series.visible, seriesType, series.marker.shape, series.marker.visible));\n }\n }\n };\n /** @private */\n Legend.prototype.getLegendBounds = function (availableSize, legendBounds, legend) {\n var padding = legend.padding;\n var extraHeight = 0;\n var extraWidth = 0;\n if (!this.isVertical) {\n extraHeight = !legend.height ? ((availableSize.height / 100) * 5) : 0;\n }\n else {\n extraWidth = !legend.width ? ((availableSize.width / 100) * 5) : 0;\n }\n legendBounds.height += extraHeight;\n legendBounds.width += extraWidth;\n var shapeHeight = legend.shapeHeight;\n var shapeWidth = legend.shapeWidth;\n var shapePadding = legend.shapePadding;\n var maximumWidth = 0;\n var rowWidth = 0;\n var legendWidth = 0;\n var columnHeight = 0;\n var rowCount = 0;\n var legendEventArgs;\n this.maxItemHeight = Math.max(measureText('MeasureText', legend.textStyle).height, legend.shapeHeight);\n var render = false;\n for (var _i = 0, _a = this.legendCollections; _i < _a.length; _i++) {\n var legendOption = _a[_i];\n legendEventArgs = {\n fill: legendOption.fill, text: legendOption.text, shape: legendOption.shape,\n markerShape: legendOption.markerShape, name: legendRender, cancel: false\n };\n this.chart.trigger(legendRender, legendEventArgs);\n legendOption.render = !legendEventArgs.cancel;\n legendOption.text = legendEventArgs.text;\n legendOption.fill = legendEventArgs.fill;\n legendOption.shape = legendEventArgs.shape;\n legendOption.markerShape = legendEventArgs.markerShape;\n legendOption.textSize = measureText(legendOption.text, legend.textStyle);\n if (legendOption.render && legendOption.text !== '') {\n render = true;\n legendWidth = shapeWidth + shapePadding + legendOption.textSize.width + padding;\n rowWidth = rowWidth + legendWidth;\n if (legendBounds.width < (padding + rowWidth) || this.isVertical) {\n maximumWidth = Math.max(maximumWidth, (rowWidth + padding - (this.isVertical ? 0 : legendWidth)));\n if (rowCount === 0 && (legendWidth !== rowWidth)) {\n rowCount = 1;\n }\n rowWidth = this.isVertical ? 0 : legendWidth;\n rowCount++;\n columnHeight = (rowCount * (this.maxItemHeight + padding)) + padding;\n }\n }\n }\n columnHeight = Math.max(columnHeight, (this.maxItemHeight + padding) + padding);\n this.isPaging = legendBounds.height < columnHeight;\n this.totalPages = rowCount;\n if (render) {\n this.setBounds(Math.max((rowWidth + padding), maximumWidth), columnHeight, legend, legendBounds);\n }\n else {\n this.setBounds(0, 0, legend, legendBounds);\n }\n };\n /** @private */\n Legend.prototype.getRenderPoint = function (legendOption, start, textPadding, prevLegend, rect, count, firstLegend) {\n var padding = this.legend.padding;\n var previousBound = (prevLegend.location.x + textPadding + prevLegend.textSize.width);\n if ((previousBound + (legendOption.textSize.width + textPadding)) > (rect.x + rect.width + this.legend.shapeWidth / 2) ||\n this.isVertical) {\n legendOption.location.x = start.x;\n legendOption.location.y = (count === firstLegend) ? prevLegend.location.y :\n prevLegend.location.y + this.maxItemHeight + padding;\n }\n else {\n legendOption.location.x = (count === firstLegend) ? prevLegend.location.x : previousBound;\n legendOption.location.y = prevLegend.location.y;\n }\n var availwidth = (this.legendBounds.x + this.legendBounds.width) - (legendOption.location.x +\n textPadding - this.legend.shapeWidth / 2);\n legendOption.text = textTrim(+availwidth.toFixed(4), legendOption.text, this.legend.textStyle);\n };\n /** @private */\n Legend.prototype.LegendClick = function (seriesIndex) {\n var chart = this.chart;\n var series = chart.visibleSeries[seriesIndex];\n var legend = this.legendCollections[seriesIndex];\n var selectedDataIndexes = [];\n if (chart.selectionModule) {\n selectedDataIndexes = extend([], chart.selectionModule.selectedDataIndexes, null, true);\n }\n if (chart.legendSettings.toggleVisibility) {\n if (!series.visible) {\n series.visible = true;\n }\n else {\n series.visible = false;\n }\n legend.visible = (series.visible);\n if (chart.svgObject.childNodes.length > 0) {\n while (chart.svgObject.lastChild) {\n chart.svgObject.removeChild(chart.svgObject.lastChild);\n }\n remove(chart.svgObject);\n }\n chart.animateSeries = false;\n chart.removeSvg();\n chart.refreshAxis();\n series.refreshAxisLabel();\n this.refreshSeries(chart.visibleSeries);\n chart.refreshBound();\n if (selectedDataIndexes.length > 0) {\n chart.selectionModule.selectedDataIndexes = selectedDataIndexes;\n chart.selectionModule.redrawSelection(chart, chart.selectionMode);\n }\n }\n else if (chart.selectionModule) {\n chart.selectionModule.legendSelection(chart, seriesIndex);\n }\n };\n Legend.prototype.refreshSeries = function (seriesCollection) {\n for (var _i = 0, seriesCollection_1 = seriesCollection; _i < seriesCollection_1.length; _i++) {\n var series = seriesCollection_1[_i];\n series.position = undefined;\n }\n };\n /**\n * To show the tooltip for the trimmed text in legend.\n * @return {void}\n */\n Legend.prototype.click = function (event) {\n if (!this.chart.legendSettings.visible) {\n return;\n }\n var targetId = event.target.id;\n var legendItemsId = [this.legendID + '_text_', this.legendID + '_shape_marker_',\n this.legendID + '_shape_'];\n var seriesIndex;\n for (var _i = 0, legendItemsId_1 = legendItemsId; _i < legendItemsId_1.length; _i++) {\n var id = legendItemsId_1[_i];\n if (targetId.indexOf(id) > -1) {\n seriesIndex = parseInt(targetId.split(id)[1], 10);\n this.LegendClick(seriesIndex);\n }\n }\n if (targetId.indexOf(this.legendID + '_pageup') > -1) {\n this.changePage(event, true);\n }\n else if (targetId.indexOf(this.legendID + '_pagedown') > -1) {\n this.changePage(event, false);\n }\n };\n /**\n * Get module name\n */\n Legend.prototype.getModuleName = function () {\n return 'Legend';\n };\n /**\n * To destroy the Legend.\n * @return {void}\n * @private\n */\n Legend.prototype.destroy = function (chart) {\n this.removeEventListener();\n };\n return Legend;\n}(BaseLegend));\nexport { Legend };\n","import { createTemplate, measureElementRect, logBase } from '../utils/helper';\nimport { ChartLocation, stringToNumber, appendElement, withIn, Rect } from '../utils/helper';\nimport { getPoint } from '../utils/helper';\nimport { createElement } from '@syncfusion/ej2-base';\nimport { annotationRender } from '../model/constants';\nimport { DataUtil } from '@syncfusion/ej2-data';\n/**\n * Annotation Module handles the Annotation for chart and accumulation series.\n */\nvar AnnotationBase = /** @class */ (function () {\n /**\n * Constructor for chart and accumulation annotation\n * @param control\n */\n function AnnotationBase(control) {\n this.control = control;\n }\n /**\n * Method to render the annotation for chart and accumulation series.\n * @private\n * @param annotation\n * @param index\n */\n AnnotationBase.prototype.render = function (annotation, index) {\n this.isChart = this.control.getModuleName() === 'chart';\n this.annotation = annotation;\n var childElement = createTemplate(createElement('div', {\n id: this.control.element.id + '_Annotation_' + index,\n styles: 'position: absolute;'\n }), index, annotation.content, this.control);\n return childElement;\n };\n /**\n * Method to calculate the location for annotation - coordinate unit as pixel.\n * @private\n * @param location\n */\n AnnotationBase.prototype.setAnnotationPixelValue = function (location) {\n var rect;\n rect = this.annotation.region === 'Chart' ?\n new Rect(0, 0, this.control.availableSize.width, this.control.availableSize.height) :\n this.isChart ?\n this.control.chartAxisLayoutPanel.seriesClipRect :\n this.control.series[0].accumulationBound;\n location.x = ((typeof this.annotation.x !== 'string') ?\n ((typeof this.annotation.x === 'number') ? this.annotation.x : 0) :\n stringToNumber(this.annotation.x, rect.width)) + rect.x;\n location.y = ((typeof this.annotation.y === 'number') ? this.annotation.y :\n stringToNumber(this.annotation.y, rect.height)) + rect.y;\n return true;\n };\n /**\n * Method to calculate the location for annotation - coordinate unit as point.\n * @private\n * @param location\n */\n AnnotationBase.prototype.setAnnotationPointValue = function (location) {\n var symbolLocation = new ChartLocation(0, 0);\n if (this.isChart) {\n var xAxis = void 0;\n var yAxis = void 0;\n var chart = this.control;\n var annotation = this.annotation;\n var xValue = void 0;\n var isLog = false;\n var xAxisName = annotation.xAxisName;\n var yAxisName = annotation.yAxisName;\n var isInverted = chart.requireInvertedAxis;\n for (var _i = 0, _a = chart.axisCollections; _i < _a.length; _i++) {\n var axis = _a[_i];\n if (xAxisName === axis.name || (xAxisName == null && axis.name === 'primaryXAxis')) {\n xAxis = axis;\n if (xAxis.valueType.indexOf('Category') > -1) {\n var xAnnotation = xAxis.valueType === 'DateTimeCategory' ? (annotation.x.getTime()).toString() :\n annotation.x;\n if (xAxis.labels.indexOf(xAnnotation) < 0) {\n return false;\n }\n else {\n xValue = xAxis.labels.indexOf(xAnnotation);\n }\n }\n else if (xAxis.valueType === 'DateTime') {\n var option = { skeleton: 'full', type: 'dateTime' };\n xValue = (typeof this.annotation.x === 'object') ?\n Date.parse(chart.intl.getDateParser(option)(chart.intl.getDateFormat(option)(new Date(DataUtil.parse.parseJson({ val: annotation.x }).val)))) : 0;\n }\n else {\n xValue = +annotation.x;\n }\n }\n else if (yAxisName === axis.name || (yAxisName == null && axis.name === 'primaryYAxis')) {\n yAxis = axis;\n isLog = yAxis.valueType === 'Logarithmic';\n }\n }\n if (xAxis && yAxis && withIn(xAxis.valueType === 'Logarithmic' ? logBase(xValue, xAxis.logBase) : xValue, xAxis.visibleRange)) {\n symbolLocation = getPoint(xValue, withIn((isLog ? logBase(+this.annotation.y, yAxis.logBase) : +this.annotation.y), yAxis.visibleRange) ? +annotation.y :\n isLog ? Math.pow(yAxis.logBase, yAxis.visibleRange.max) :\n +annotation.y > yAxis.visibleRange.max ? yAxis.visibleRange.max : yAxis.visibleRange.min, xAxis, yAxis, isInverted);\n location.x = symbolLocation.x + (isInverted ? yAxis.rect.x : xAxis.rect.x);\n location.y = symbolLocation.y + (isInverted ? xAxis.rect.y : yAxis.rect.y);\n }\n else {\n return false;\n }\n return true;\n }\n else {\n return this.setAccumulationPointValue(location);\n }\n };\n /**\n * To process the annotation for accumulation chart\n * @param annotation\n * @param index\n * @param parentElement\n */\n AnnotationBase.prototype.processAnnotation = function (annotation, index, parentElement) {\n var annotationElement;\n var location;\n location = new ChartLocation(0, 0);\n annotationElement = this.render(annotation, index);\n if (this['setAnnotation' + annotation.coordinateUnits + 'Value'](location)) {\n this.setElementStyle(location, annotationElement, parentElement);\n }\n };\n /**\n * Method to calculate the location for annotation - coordinate unit as point in accumulation chart.\n * @private\n * @param location\n */\n AnnotationBase.prototype.setAccumulationPointValue = function (location) {\n var accumulation = this.control;\n var point;\n for (var _i = 0, _a = accumulation.visibleSeries[0].points; _i < _a.length; _i++) {\n var accPoint = _a[_i];\n if (typeof accPoint.x === 'object') {\n if (Date.parse(accPoint.x) === Date.parse(this.annotation.x) &&\n accPoint.y === this.annotation.y) {\n point = accPoint;\n break;\n }\n }\n else {\n if (accPoint.x === this.annotation.x && accPoint.y === this.annotation.y) {\n point = accPoint;\n break;\n }\n }\n }\n if (point && point.visible) {\n location.x = point.symbolLocation.x;\n location.y = point.symbolLocation.y;\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * Method to set the element style for accumulation / chart annotation.\n * @private\n * @param location\n * @param element\n * @param parentElement\n */\n AnnotationBase.prototype.setElementStyle = function (location, element, parentElement) {\n var elementRect = measureElementRect(element);\n var argsData = {\n cancel: false, name: annotationRender, content: element,\n location: location\n };\n this.control.trigger(annotationRender, argsData);\n if (!argsData.cancel) {\n argsData.content.style.left = this.setAlignmentValue(this.annotation.horizontalAlignment, elementRect.width, argsData.location.x) + 'px';\n argsData.content.style.top = this.setAlignmentValue(this.annotation.verticalAlignment, elementRect.height, argsData.location.y) + 'px';\n argsData.content.setAttribute('aria-label', this.annotation.description || 'Annotation');\n appendElement(argsData.content, parentElement);\n }\n };\n /**\n * Method to calculate the alignment value for annotation.\n * @private\n * @param alignment\n * @param size\n * @param value\n */\n AnnotationBase.prototype.setAlignmentValue = function (alignment, size, value) {\n switch (alignment) {\n case 'Top':\n case 'Near':\n value -= size;\n break;\n case 'Bottom':\n case 'Far':\n value += 0;\n break;\n case 'Middle':\n case 'Center':\n value -= (size / 2);\n break;\n }\n return value;\n };\n return AnnotationBase;\n}());\nexport { AnnotationBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { AnnotationBase } from '../../common/annotation/annotation';\nimport { appendElement } from '../../common/utils/helper';\nimport { createElement } from '@syncfusion/ej2-base';\n/**\n * `ChartAnnotation` module handles the annotation for chart.\n */\nvar ChartAnnotation = /** @class */ (function (_super) {\n __extends(ChartAnnotation, _super);\n /**\n * Constructor for chart annotation.\n * @private.\n */\n function ChartAnnotation(control, annotations) {\n var _this = _super.call(this, control) || this;\n _this.chart = control;\n return _this;\n }\n /**\n * Method to render the annotation for chart\n * @param element\n * @private\n */\n ChartAnnotation.prototype.renderAnnotations = function (element) {\n var _this = this;\n this.annotations = this.chart.annotations;\n this.parentElement = createElement('div', {\n id: this.chart.element.id + '_Annotation_Collections'\n });\n this.annotations.map(function (annotation, index) {\n _this.processAnnotation(annotation, index, _this.parentElement);\n });\n appendElement(this.parentElement, element);\n };\n /**\n * To destroy the annotation.\n * @return {void}\n * @private\n */\n ChartAnnotation.prototype.destroy = function (control) {\n // Destroy method performed here\n };\n /**\n * Get module name.\n */\n ChartAnnotation.prototype.getModuleName = function () {\n // Returns te module name\n return 'Annotation';\n };\n return ChartAnnotation;\n}(AnnotationBase));\nexport { ChartAnnotation };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange, PathOption, sum } from '../../common/utils/helper';\nimport { Size, getSaturationColor, getPoint } from '../../common/utils/helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ColumnBase } from './column-base';\nimport { getMedian } from '../../common/utils/helper';\n/**\n * `BoxAndWhiskerSeries` module is used to render the box and whisker series.\n */\nvar BoxAndWhiskerSeries = /** @class */ (function (_super) {\n __extends(BoxAndWhiskerSeries, _super);\n function BoxAndWhiskerSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render BoxAndWhisker series.\n * @return {void}\n * @private\n */\n BoxAndWhiskerSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var sideBySideInfo = this.getSideBySideInfo(series);\n var argsData;\n var centerRegion;\n var borderWidth = series.border.width || 1;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n var centerRegion_1 = void 0;\n if (point.visible && withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n this.findBoxPlotValues(point.y, point, series.boxPlotMode);\n //region to cover the top and bottom ticks\n this.updateTipRegion(series, point, sideBySideInfo);\n //get middle rect\n centerRegion_1 = this.getRectangle((point.xValue + sideBySideInfo.start), point.upperQuartile, (point.xValue + sideBySideInfo.end), point.lowerQuartile, series);\n point.regions.push(centerRegion_1);\n argsData = this.triggerEvent(series, point, series.interior, {\n color: (!isNullOrUndefined(series.border.color) && series.border.color !== 'transparent') ? series.border.color :\n getSaturationColor(series.interior, -0.6),\n width: series.border.width ? series.border.width : 1\n });\n if (!argsData.cancel) {\n this.renderBoxAndWhisker(series, point, centerRegion_1, argsData, this.getPathString(point, series, getPoint(point.xValue, point.median, xAxis, yAxis, isInverted), getPoint(point.xValue, point.average, xAxis, yAxis, isInverted)));\n }\n }\n }\n if (series.marker.visible) {\n series.chart.markerRender.render(series);\n }\n };\n /**\n * update the tip region fo box plot\n * @param series\n * @param point\n * @param sideBySideInfo\n */\n BoxAndWhiskerSeries.prototype.updateTipRegion = function (series, point, sideBySideInfo) {\n var tipRegion = this.getRectangle((point.xValue + sideBySideInfo.median), point.maximum, (point.xValue + sideBySideInfo.median), point.minimum, series);\n this.updateTipSize(series, point, tipRegion, series.chart.requireInvertedAxis);\n };\n /**\n * Update tip size to tip regions\n * @param series\n * @param point\n * @param region\n * @param isInverted\n */\n BoxAndWhiskerSeries.prototype.updateTipSize = function (series, point, region, isInverted) {\n var borderWidth = series.border.width || 1;\n if (!isInverted) {\n region.x -= borderWidth / 2;\n region.width = region.width || borderWidth;\n }\n else {\n region.y -= borderWidth / 2;\n region.height = region.height || borderWidth;\n }\n point.regions.push(region);\n };\n /**\n * Calculation for path direction performed here\n * @param point\n * @param series\n * @param median\n * @param average\n */\n BoxAndWhiskerSeries.prototype.getPathString = function (point, series, median, average) {\n var topRect = point.regions[0];\n var midRect = point.regions[1];\n var direction = '';\n var width = series.chart.requireInvertedAxis ? topRect.height : topRect.width;\n var center = series.chart.requireInvertedAxis ? topRect.y + topRect.height / 2 :\n topRect.x + topRect.width / 2;\n var midWidth = midRect.x + midRect.width;\n var midHeight = midRect.y + midRect.height;\n var topWidth = topRect.x + topRect.width;\n var topHeight = topRect.y + topRect.height;\n if (!series.chart.requireInvertedAxis) {\n this.updateTipSize(series, point, { x: midRect.x, y: topRect.y, width: midWidth - midRect.x, height: 0 }, true);\n this.updateTipSize(series, point, { x: midRect.x, y: topHeight, width: midWidth - midRect.x, height: 0 }, true);\n direction += 'M ' + midRect.x + ' ' + topRect.y + ' ' + ' L ' + midWidth + ' ' + topRect.y;\n direction += ' M ' + center + ' ' + topRect.y + ' ' + ' L ' + center + ' ' + midRect.y;\n direction += ' M ' + midRect.x + ' ' + midRect.y + ' ' + ' L ' + midWidth + ' ' + midRect.y +\n ' L ' + midWidth + ' ' + midHeight + ' L ' + midRect.x + ' ' + midHeight + ' Z';\n direction += ' M ' + center + ' ' + midHeight + ' L ' + center + ' ' + topHeight;\n direction += ' M ' + midRect.x + ' ' + topHeight + ' L ' + midWidth + ' ' + topHeight;\n direction += ' M ' + midRect.x + ' ' + median.y + ' L ' + midWidth + ' ' + median.y;\n direction += series.showMean ?\n ' M ' + (average.x - 5) + ' ' + (average.y - 5) + ' L ' + (average.x + 5) + ' ' + (average.y + 5) +\n ' M ' + (average.x + 5) + ' ' + (average.y - 5) + ' L ' + (average.x - 5) + ' ' + (average.y + 5) : '';\n }\n else {\n this.updateTipSize(series, point, { x: topRect.x, y: midRect.y, width: 0, height: midHeight - midRect.y }, false);\n this.updateTipSize(series, point, { x: topWidth, y: midRect.y, width: 0, height: midHeight - midRect.y }, true);\n direction += 'M ' + topRect.x + ' ' + midRect.y + ' L ' + topRect.x + ' ' + midHeight;\n direction += 'M ' + topRect.x + ' ' + center + ' ' + ' L ' + midRect.x + ' ' + center;\n direction += ' M ' + midRect.x + ' ' + midRect.y + ' ' + ' L ' + midWidth + ' ' + midRect.y +\n ' L ' + midWidth + ' ' + midHeight + ' L ' + midRect.x + ' ' + midHeight + ' Z';\n direction += ' M ' + midWidth + ' ' + center + ' L ' + topWidth + ' ' + center;\n direction += ' M ' + topWidth + ' ' + midRect.y + ' L ' + topWidth + ' ' + midHeight;\n direction += ' M ' + median.x + ' ' + midRect.y + ' ' + ' L ' + median.x + ' ' + midHeight;\n direction += series.showMean ?\n 'M ' + (average.x + 5) + ' ' + (average.y - 5) + ' L ' + (average.x - 5) + ' ' + (average.y + 5) +\n 'M ' + (average.x - 5) + ' ' + (average.y - 5) + ' L ' + (average.x + 5) + ' ' + (average.y + 5) : '';\n }\n return direction;\n };\n /**\n * Rendering for box and whisker append here.\n * @param series\n * @param point\n * @param rect\n * @param argsData\n * @param direction\n */\n BoxAndWhiskerSeries.prototype.renderBoxAndWhisker = function (series, point, rect, argsData, direction) {\n var location;\n var size;\n var symbolId = series.chart.element.id + '_Series_' + series.index + '_Point_' + point.index;\n var element = series.chart.renderer.drawPath(new PathOption(symbolId + '_BoxPath', argsData.fill, argsData.border.width, argsData.border.color, series.opacity, series.dashArray, direction));\n element.setAttribute('aria-label', point.x.toString() + ':' + point.maximum.toString()\n + ':' + point.minimum.toString() + ':' + point.lowerQuartile.toString() + ':' + point.upperQuartile.toString());\n var parentElement = series.chart.renderer.createGroup({\n 'id': symbolId\n });\n parentElement.appendChild(element);\n for (var i = 0; i < point.outliers.length; i++) {\n location = getPoint(point.xValue, point.outliers[i], series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n size = new Size(series.marker.width, series.marker.height);\n point.symbolLocations.push(location);\n this.updateTipSize(series, point, {\n x: location.x - (size.width / 2), y: location.y - (size.height / 2),\n width: size.width, height: size.height\n }, true);\n }\n series.seriesElement.appendChild(parentElement);\n };\n /**\n * To find the box plot values\n * @param yValues\n * @param point\n * @param mode\n */\n BoxAndWhiskerSeries.prototype.findBoxPlotValues = function (yValues, point, mode) {\n var yCount = yValues.length;\n var quartile = {\n average: sum(yValues) / yCount,\n lowerQuartile: 0, upperQuartile: 0,\n maximum: 0, minimum: 0,\n median: 0, outliers: []\n };\n if (mode === 'Exclusive') {\n quartile.lowerQuartile = this.getExclusiveQuartileValue(yValues, yCount, 0.25);\n quartile.upperQuartile = this.getExclusiveQuartileValue(yValues, yCount, 0.75);\n quartile.median = this.getExclusiveQuartileValue(yValues, yCount, 0.5);\n }\n else if (mode === 'Inclusive') {\n quartile.lowerQuartile = this.getInclusiveQuartileValue(yValues, yCount, 0.25);\n quartile.upperQuartile = this.getInclusiveQuartileValue(yValues, yCount, 0.75);\n quartile.median = this.getInclusiveQuartileValue(yValues, yCount, 0.5);\n }\n else {\n quartile.median = getMedian(yValues);\n this.getQuartileValues(yValues, yCount, quartile);\n }\n this.getMinMaxOutlier(yValues, yCount, quartile);\n point.minimum = quartile.minimum;\n point.maximum = quartile.maximum;\n point.lowerQuartile = quartile.lowerQuartile;\n point.upperQuartile = quartile.upperQuartile;\n point.median = quartile.median;\n point.outliers = quartile.outliers;\n point.average = quartile.average;\n };\n /**\n * to find the exclusive quartile values\n * @param yValues\n * @param count\n * @param percentile\n */\n BoxAndWhiskerSeries.prototype.getExclusiveQuartileValue = function (yValues, count, percentile) {\n if (count === 0) {\n return 0;\n }\n else if (count === 1) {\n return yValues[0];\n }\n var value = 0;\n var rank = percentile * (count + 1);\n var integerRank = Math.floor(Math.abs(rank));\n var fractionRank = rank - integerRank;\n if (integerRank === 0) {\n value = yValues[0];\n }\n else if (integerRank > count - 1) {\n value = yValues[count - 1];\n }\n else {\n value = fractionRank * (yValues[integerRank] - yValues[integerRank - 1]) + yValues[integerRank - 1];\n }\n return value;\n };\n /**\n * to find the inclusive quartile values\n * @param yValues\n * @param count\n * @param percentile\n */\n BoxAndWhiskerSeries.prototype.getInclusiveQuartileValue = function (yValues, count, percentile) {\n if (count === 0) {\n return 0;\n }\n else if (count === 1) {\n return yValues[0];\n }\n var value = 0;\n var rank = percentile * (count - 1);\n var integerRank = Math.floor(Math.abs(rank));\n var fractionRank = rank - integerRank;\n value = fractionRank * (yValues[integerRank + 1] - yValues[integerRank]) + yValues[integerRank];\n return value;\n };\n /**\n * To find the quartile values\n * @param yValues\n * @param count\n * @param lowerQuartile\n * @param upperQuartile\n */\n BoxAndWhiskerSeries.prototype.getQuartileValues = function (yValues, count, quartile) {\n if (count === 1) {\n quartile.lowerQuartile = yValues[0];\n quartile.upperQuartile = yValues[0];\n return null;\n }\n var isEvenList = count % 2 === 0;\n var halfLength = count / 2;\n var lowerQuartileArray = yValues.slice(0, halfLength);\n var upperQuartileArray = yValues.slice(isEvenList ? halfLength : halfLength + 1, count);\n quartile.lowerQuartile = getMedian(lowerQuartileArray);\n quartile.upperQuartile = getMedian(upperQuartileArray);\n };\n /**\n * To find the min, max and outlier values\n * @param yValues\n * @param lowerQuartile\n * @param upperQuartile\n * @param minimum\n * @param maximum\n * @param outliers\n */\n BoxAndWhiskerSeries.prototype.getMinMaxOutlier = function (yValues, count, quartile) {\n var interquartile = quartile.upperQuartile - quartile.lowerQuartile;\n var rangeIQR = 1.5 * interquartile;\n for (var i = 0; i < count; i++) {\n if (yValues[i] < quartile.lowerQuartile - rangeIQR) {\n quartile.outliers.push(yValues[i]);\n }\n else {\n quartile.minimum = yValues[i];\n break;\n }\n }\n for (var i = count - 1; i >= 0; i--) {\n if (yValues[i] > quartile.upperQuartile + rangeIQR) {\n quartile.outliers.push(yValues[i]);\n }\n else {\n quartile.maximum = yValues[i];\n break;\n }\n }\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n BoxAndWhiskerSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * Get module name.\n */\n BoxAndWhiskerSeries.prototype.getModuleName = function () {\n return 'BoxAndWhiskerSeries';\n /**\n * return the module name\n */\n };\n /**\n * To destroy the candle series.\n * @return {void}\n * @private\n */\n BoxAndWhiskerSeries.prototype.destroy = function (chart) {\n /**\n * Destroys the candle series.\n */\n };\n return BoxAndWhiskerSeries;\n}(ColumnBase));\nexport { BoxAndWhiskerSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { getPoint, withInRange, ChartLocation, PathOption } from '../../common/utils/helper';\nimport { MultiColoredSeries } from './multi-colored-base';\n/**\n * `MultiColoredAreaSeries` module used to render the area series with multi color.\n */\nvar MultiColoredAreaSeries = /** @class */ (function (_super) {\n __extends(MultiColoredAreaSeries, _super);\n function MultiColoredAreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Area series.\n * @return {void}\n * @private\n */\n MultiColoredAreaSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var _this = this;\n var firstPoint;\n var startPoint = null;\n var direction = '';\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n var options = [];\n var startRegion;\n var previous;\n var color;\n var rendered;\n var segments = this.sortSegments(series, series.segments);\n series.points.map(function (point, i, seriesPoints) {\n point.symbolLocations = [];\n point.regions = [];\n rendered = false;\n if (point.visible && withInRange(seriesPoints[i - 1], point, seriesPoints[i + 1], series)) {\n direction += _this.getAreaPathDirection(point.xValue, origin, series, isInverted, getPoint, startPoint, 'M');\n startPoint = startPoint || new ChartLocation(point.xValue, origin);\n firstPoint = getPoint(point.xValue, point.yValue, xAxis, yAxis, isInverted, series);\n if (previous && _this.setPointColor(point, previous, series, series.segmentAxis === 'X', segments)) {\n rendered = true;\n startRegion = getPoint(startPoint.x, origin, xAxis, yAxis, isInverted, series);\n direction += ('L' + ' ' + (firstPoint.x) + ' ' + (firstPoint.y) + ' ');\n direction += ('L' + ' ' + (firstPoint.x) + ' ' + (startRegion.y) + ' ');\n _this.generatePathOption(options, series, previous, direction, '_Point_' + previous.index);\n direction = 'M' + ' ' + (firstPoint.x) + ' ' + (startRegion.y) + ' ' + 'L' + ' ' +\n (firstPoint.x) + ' ' + (firstPoint.y) + ' ';\n }\n else {\n direction += ('L' + ' ' + (firstPoint.x) + ' ' + (firstPoint.y) + ' ');\n _this.setPointColor(point, null, series, series.segmentAxis === 'X', segments);\n }\n if (seriesPoints[i + 1] && !seriesPoints[i + 1].visible && series.emptyPointSettings.mode !== 'Drop') {\n direction += _this.getAreaEmptyDirection({ 'x': point.xValue, 'y': origin }, startPoint, series, isInverted, getPoint);\n startPoint = null;\n }\n previous = point;\n _this.storePointLocation(point, series, isInverted, getPoint);\n }\n });\n if (!rendered) {\n direction = series.points.length > 1 ?\n (direction + this.getAreaPathDirection(previous.xValue, origin, series, isInverted, getPoint, null, 'L')) : '';\n this.generatePathOption(options, series, previous, direction, '');\n }\n this.applySegmentAxis(series, options, segments);\n this.renderMarker(series);\n };\n /**\n * To Store the path directions of the area\n */\n MultiColoredAreaSeries.prototype.generatePathOption = function (options, series, point, direction, id) {\n options.push(new PathOption(series.chart.element.id + '_Series_' + series.index + id, series.setPointColor(point, series.interior), series.border.width, series.border.color, series.opacity, series.dashArray, direction));\n };\n /**\n * To destroy the area series.\n * @return {void}\n * @private\n */\n MultiColoredAreaSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n /**\n * Get module name\n */\n MultiColoredAreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'MultiColoredAreaSeries';\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n MultiColoredAreaSeries.prototype.doAnimation = function (series) {\n this.doLinearAnimation(series, series.animation);\n };\n return MultiColoredAreaSeries;\n}(MultiColoredSeries));\nexport { MultiColoredAreaSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange, getPoint, PathOption } from '../../common/utils/helper';\nimport { MultiColoredSeries } from './multi-colored-base';\n/**\n * `MultiColoredLineSeries` used to render the line series with multi color.\n */\nvar MultiColoredLineSeries = /** @class */ (function (_super) {\n __extends(MultiColoredLineSeries, _super);\n function MultiColoredLineSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render Line Series.\n * @return {void}.\n * @private\n */\n MultiColoredLineSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var previous = null;\n var startPoint = 'M';\n var visiblePoints = this.improveChartPerformance(series);\n var options = [];\n var direction = '';\n var segments = this.sortSegments(series, series.segments);\n for (var _i = 0, visiblePoints_1 = visiblePoints; _i < visiblePoints_1.length; _i++) {\n var point = visiblePoints_1[_i];\n point.regions = [];\n if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n direction += this.getLineDirection(previous, point, series, isInverted, getPoint, startPoint);\n if (previous != null) {\n if (this.setPointColor(point, previous, series, series.segmentAxis === 'X', segments)) {\n options.push(new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + previous.index, 'none', series.width, series.setPointColor(previous, series.interior), series.opacity, series.dashArray, direction));\n startPoint = 'M';\n direction = '';\n }\n else {\n startPoint = 'L';\n }\n }\n else {\n this.setPointColor(point, null, series, series.segmentAxis === 'X', segments);\n }\n previous = point;\n this.storePointLocation(point, series, isInverted, getPoint);\n }\n else {\n previous = (series.emptyPointSettings.mode === 'Drop') ? previous : null;\n startPoint = (series.emptyPointSettings.mode === 'Drop') ? startPoint : 'M';\n point.symbolLocations = [];\n }\n }\n if (direction !== '') {\n options.push(new PathOption(series.chart.element.id + '_Series_' + series.index, 'none', series.width, series.setPointColor(visiblePoints[visiblePoints.length - 1], series.interior), series.opacity, series.dashArray, direction));\n }\n this.applySegmentAxis(series, options, segments);\n this.renderMarker(series);\n };\n /**\n * Animates the series.\n * @param {Series} series - Defines the series to animate.\n * @return {void}\n */\n MultiColoredLineSeries.prototype.doAnimation = function (series) {\n this.doLinearAnimation(series, series.animation);\n };\n /**\n * Get module name.\n */\n MultiColoredLineSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'MultiColoredLineSeries';\n };\n /**\n * To destroy the line series.\n * @return {void}\n * @private\n */\n MultiColoredLineSeries.prototype.destroy = function (chart) {\n /**\n * Destroy method performed here\n */\n };\n return MultiColoredLineSeries;\n}(MultiColoredSeries));\nexport { MultiColoredLineSeries };\n","import { textWrap, TextOption, PathOption } from '../../common/utils/helper';\nimport { valueToCoefficient, measureText, textTrim, textElement } from '../../common/utils/helper';\nimport { axisMultiLabelRender } from '../../common/model/constants';\n/**\n * `MultiLevelLabel` module is used to render the multi level label in chart.\n */\nvar MultiLevelLabel = /** @class */ (function () {\n /**\n * Constructor for the logerithmic module.\n * @private\n */\n function MultiLevelLabel(chart) {\n /** @private */\n this.xAxisPrevHeight = [];\n /** @private */\n this.xAxisMultiLabelHeight = [];\n /** @private */\n this.yAxisPrevHeight = [];\n /** @private */\n this.yAxisMultiLabelHeight = [];\n this.chart = chart;\n }\n /**\n * Finds multilevel label height\n * @return {void}\n */\n MultiLevelLabel.prototype.getMultilevelLabelsHeight = function (axis) {\n var value = 0;\n var multiLevelLabelsHeight = [];\n var prevHeight = [];\n var isVertical = axis.orientation === 'Vertical';\n var axisValue = isVertical ? axis.rect.height : axis.rect.width;\n var labelSize;\n var height;\n var padding = 10;\n var gap;\n axis.multiLevelLabels.map(function (multiLevel, index) {\n multiLevel.categories.map(function (categoryLabel) {\n if (categoryLabel.text !== '' && categoryLabel.start !== null && categoryLabel.end !== null) {\n labelSize = measureText(categoryLabel.text, multiLevel.textStyle);\n height = isVertical ? labelSize.width : labelSize.height;\n height += 2 * multiLevel.border.width +\n (multiLevel.border.type === 'CurlyBrace' ? padding : 0);\n gap = (categoryLabel.maximumTextWidth !== null) ? categoryLabel.maximumTextWidth :\n (valueToCoefficient(typeof categoryLabel.end === 'string' ? Number(new Date(categoryLabel.end)) :\n categoryLabel.end, axis) * axisValue) -\n (valueToCoefficient(typeof categoryLabel.start === 'string' ? Number(new Date(categoryLabel.start)) :\n categoryLabel.start, axis) * axisValue);\n if ((labelSize.width > gap - padding) && gap > 0 && (multiLevel.overflow === 'Wrap') && !isVertical) {\n height = (height * (textWrap(categoryLabel.text, gap - padding, multiLevel.textStyle).length));\n }\n multiLevelLabelsHeight[index] = !multiLevelLabelsHeight[index] ? height :\n ((multiLevelLabelsHeight[index] < height) ? height : multiLevelLabelsHeight[index]);\n }\n });\n prevHeight[index] = value;\n value += multiLevelLabelsHeight[index] ? (multiLevelLabelsHeight[index] + padding) : 0;\n });\n axis.multiLevelLabelHeight = value + ((axis.title !== '' || (this.chart.legendModule && this.chart.legendSettings.visible))\n ? padding / 2 : 0);\n if (isVertical) {\n this.yAxisMultiLabelHeight = multiLevelLabelsHeight;\n this.yAxisPrevHeight = prevHeight;\n }\n else {\n this.xAxisMultiLabelHeight = multiLevelLabelsHeight;\n this.xAxisPrevHeight = prevHeight;\n }\n };\n /**\n * render x axis multi level labels\n * @private\n * @return {void}\n */\n MultiLevelLabel.prototype.renderXAxisMultiLevelLabels = function (axis, index, parent, axisRect) {\n var _this = this;\n var x;\n var y;\n var padding = 10;\n var startX;\n var startY = (axis.labelPosition === axis.tickPosition ? axis.majorTickLines.height : 0) +\n (axis.maxLabelSize.height) + padding;\n var endX;\n var endY;\n var pathRect = '';\n var start;\n var end;\n var labelSize;\n var clipY;\n var isOutside = axis.labelPosition === 'Outside';\n var gap;\n var anchor;\n var isInversed = axis.isInversed;\n var argsData;\n var labelElement;\n var opposedPosition = axis.opposedPosition;\n clipY = ((opposedPosition && !isOutside) || (!opposedPosition && isOutside)) ?\n (axisRect.y + startY - axis.majorTickLines.width) : (axisRect.y - startY - axis.multiLevelLabelHeight);\n this.createClipRect(axisRect.x - axis.majorTickLines.width, clipY, axis.multiLevelLabelHeight + padding, axisRect.width + 2 * axis.majorTickLines.width, this.chart.element.id + '_XAxis_Clippath_' + index, this.chart.element.id + 'XAxisMultiLevelLabel' + index);\n axis.multiLevelLabels.map(function (multiLevel, level) {\n pathRect = '';\n multiLevel.categories.map(function (categoryLabel, i) {\n labelElement = _this.chart.renderer.createGroup({ id: _this.chart.element.id + index + '_MultiLevelLabel' + level });\n start = typeof categoryLabel.start === 'string' ? Number(new Date(categoryLabel.start)) : categoryLabel.start;\n end = typeof categoryLabel.end === 'string' ? Number(new Date(categoryLabel.end)) : categoryLabel.end;\n if (((start >= axis.visibleRange.min && start <= axis.visibleRange.max)\n || (end >= axis.visibleRange.min && end <= axis.visibleRange.max))) {\n argsData = _this.triggerMultiLabelRender(axis, categoryLabel.text, axis.multiLevelLabels[level].textStyle, axis.multiLevelLabels[level].alignment);\n if (!argsData.cancel) {\n startX = valueToCoefficient(start, axis) * axisRect.width;\n endX = valueToCoefficient(end, axis) * axisRect.width;\n endX = isInversed ? [startX, startX = endX][0] : endX;\n labelSize = measureText(argsData.text, argsData.textStyle);\n gap = ((categoryLabel.maximumTextWidth === null) ? endX - startX : categoryLabel.maximumTextWidth) - padding;\n x = startX + axisRect.x + padding;\n y = ((opposedPosition && !isOutside) || (!opposedPosition && isOutside)) ? (startY + axisRect.y +\n labelSize.height / 2 + padding + _this.xAxisPrevHeight[level]) : (axisRect.y - startY + labelSize.height / 2 -\n _this.xAxisMultiLabelHeight[level] - _this.xAxisPrevHeight[level]);\n if (argsData.alignment === 'Center') {\n x += (endX - startX - padding) / 2;\n anchor = 'middle';\n }\n else if (argsData.alignment === 'Far') {\n x = x + (endX - startX - padding) - multiLevel.border.width / 2;\n anchor = 'end';\n }\n else {\n anchor = 'start';\n x += multiLevel.border.width / 2;\n }\n y = multiLevel.border.type === 'CurlyBrace' ?\n (((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) ? y + padding : y - padding / 2) : y;\n var options = new TextOption(_this.chart.element.id + index + '_Axis_MultiLevelLabel_Level_' + level + '_Text_' + i, x, y, anchor, argsData.text);\n if (multiLevel.overflow !== 'None') {\n options.text = (multiLevel.overflow === 'Wrap') ?\n textWrap(argsData.text, gap, argsData.textStyle) : textTrim(gap, argsData.text, argsData.textStyle);\n options.x = options.x - padding / 2;\n }\n textElement(options, argsData.textStyle, argsData.textStyle.color || _this.chart.themeStyle.axisLabel, labelElement);\n if (multiLevel.border.width > 0 && multiLevel.border.type !== 'WithoutBorder') {\n pathRect = _this.renderXAxisLabelBorder(level, endX - startX - padding, axis, startX, startY, labelSize, options, axisRect, argsData.alignment, pathRect, isOutside, opposedPosition);\n }\n _this.multiElements.appendChild(labelElement);\n }\n }\n });\n if (pathRect !== '') {\n _this.createBorderElement(level, index, axis, pathRect);\n }\n });\n parent.appendChild(this.multiElements);\n };\n /**\n * render x axis multi level labels border\n * @private\n * @return {void}\n */\n MultiLevelLabel.prototype.renderXAxisLabelBorder = function (labelIndex, gap, axis, startX, startY, labelSize, textOptions, axisRect, alignment, path, isOutside, opposedPosition) {\n var padding = 10;\n var padding1;\n var padding2;\n var value;\n var value1;\n var groupLabel = axis.multiLevelLabels[labelIndex];\n var width = gap + padding;\n var height = this.xAxisMultiLabelHeight[labelIndex] + padding;\n var x = startX + axisRect.x;\n var y = ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) ?\n (startY + axisRect.y + this.xAxisPrevHeight[labelIndex]) : (axisRect.y - startY - this.xAxisPrevHeight[labelIndex]);\n switch (groupLabel.border.type) {\n case 'WithoutTopandBottomBorder':\n case 'Rectangle':\n case 'WithoutTopBorder':\n height = ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) ? height : -height;\n path += 'M' + x + ' ' + y + 'L' + x + ' ' + (y + height) +\n 'M' + (x + width) + ' ' + y + 'L' + (x + width) + ' ' + (y + height);\n path += (groupLabel.border.type !== 'WithoutTopandBottomBorder') ? ('L' + ' ' + (x) + ' ' + (y + height) + ' ') : ' ';\n path += groupLabel.border.type === 'Rectangle' ? ('M' + x + ' ' + y + 'L' + (x + width) + ' ' + y) : ' ';\n break;\n case 'Brace':\n if (alignment === 'Near') {\n value = textOptions.x;\n value1 = textOptions.x + labelSize.width + 2;\n }\n else if (alignment === 'Center') {\n value = textOptions.x - labelSize.width / 2 - 2;\n value1 = textOptions.x + labelSize.width / 2 + 2;\n }\n else {\n value = textOptions.x - labelSize.width - 2;\n value1 = textOptions.x;\n }\n height = ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) ? height : -height;\n path += 'M' + x + ' ' + y + 'L' + x + ' ' + (y + height / 2) +\n 'M' + x + ' ' + (y + height / 2) + 'L' + (value - 2) + ' ' + (y + height / 2) +\n 'M' + (value1) + ' ' + (y + height / 2) + 'L' + (x + width) + ' ' + (y + height / 2) +\n 'M' + (x + width) + ' ' + (y + height / 2) + 'L' + (x + width) + ' ' + (y);\n break;\n case 'CurlyBrace':\n if ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) {\n padding = 10;\n padding1 = 15;\n padding2 = 5;\n }\n else {\n padding = -10;\n padding1 = -15;\n padding2 = -5;\n }\n if (alignment === 'Center') {\n path += 'M' + x + ' ' + y + ' C ' + x + ' ' + y + ' ' + (x + 5) + ' ' + (y + padding) + ' ' + (x + 10) + ' ' +\n (y + padding) + 'L' + (x + width / 2 - 5) + ' ' + (y + padding) + 'L' + (x + width / 2) + ' ' + (y + padding1) +\n 'L' + (x + width / 2 + 5) + ' ' + (y + padding) + 'L' + (x + width - 10) + ' ' + (y + padding) + ' C ' +\n (x + width - 10) + ' ' + (y + padding) + ' ' + (x + width) + ' ' + (y + padding2) + ' ' + (x + width) + ' ' + (y);\n }\n else if (alignment === 'Near') {\n path += 'M' + x + ' ' + y + ' C ' + x + ' ' + y + ' ' + (x + 5) + ' ' + (y + padding) + ' ' + (x + 10) + ' ' +\n (y + padding) + 'L' + (x + 15) + ' ' + (y + padding1) + 'L' + (x + 20) + ' ' + (y + padding) + 'L' +\n (x + width - 10) + ' ' + (y + padding) + ' C ' + (x + width - 10) + ' ' + (y + padding) + ' ' + (x + width) + ' '\n + (y + padding2) + ' ' + (x + width) + ' ' + (y);\n }\n else {\n path += 'M' + x + ' ' + y + ' C ' + x + ' ' + y + ' ' + (x + 5) + ' ' + (y + padding) + ' ' + (x + 10) + ' ' +\n (y + padding) + 'L' + (x + width - 20) + ' ' + (y + padding) + 'L' + (x + width - 15) + ' ' + (y + padding1) +\n 'L' + (x + width - 10) + ' ' + (y + padding) + 'L' + (x + width - 10) + ' ' + (y + padding) + ' C '\n + (x + width - 10) + ' ' + (y + padding) + ' ' + (x + width) + ' ' + (y + padding2) + ' ' + (x + width) + ' ' + (y);\n }\n break;\n }\n return path;\n };\n /**\n * render y axis multi level labels\n * @private\n * @return {void}\n */\n MultiLevelLabel.prototype.renderYAxisMultiLevelLabels = function (axis, index, parent, rect) {\n var _this = this;\n var labelSize;\n var clipX;\n var isOutside = axis.labelPosition === 'Outside';\n var x;\n var y;\n var padding = 10;\n var startX = (axis.tickPosition === axis.labelPosition ? axis.majorTickLines.height : 0) +\n (axis.maxLabelSize.width) + padding;\n var startY;\n var path = '';\n var labelElement;\n var endY;\n var argsData;\n var isInversed = axis.isInversed;\n var start;\n var end;\n var gap;\n var anchor = 'middle';\n var opposedPosition = axis.opposedPosition;\n clipX = ((opposedPosition && !isOutside) || (!opposedPosition && isOutside)) ?\n (rect.x - axis.multiLevelLabelHeight - startX - padding) : (rect.x + startX);\n this.createClipRect(clipX, rect.y - axis.majorTickLines.width, rect.height + 2 * axis.majorTickLines.width, axis.multiLevelLabelHeight + padding, this.chart.element.id + '_YAxis_Clippath_' + index, this.chart.element.id + 'YAxisMultiLevelLabel' + index);\n axis.multiLevelLabels.map(function (multiLevel, level) {\n path = '';\n multiLevel.categories.map(function (categoryLabel, i) {\n labelElement = _this.chart.renderer.createGroup({ id: _this.chart.element.id + index + '_MultiLevelLabel' + level });\n end = typeof categoryLabel.end === 'string' ? Number(new Date(categoryLabel.end)) : categoryLabel.end;\n start = typeof categoryLabel.start === 'string' ? Number(new Date(categoryLabel.start)) : categoryLabel.start;\n if (((start >= axis.visibleRange.min && start <= axis.visibleRange.max)\n || (end >= axis.visibleRange.min && end <= axis.visibleRange.max))) {\n startY = valueToCoefficient((start), axis) * (rect.height);\n endY = valueToCoefficient((end), axis) * (rect.height);\n endY = isInversed ? [startY, startY = endY][0] : endY;\n argsData = _this.triggerMultiLabelRender(axis, categoryLabel.text, multiLevel.textStyle, multiLevel.alignment);\n if (!argsData.cancel) {\n labelSize = measureText(argsData.text, argsData.textStyle);\n gap = endY - startY;\n x = rect.x - startX - _this.yAxisPrevHeight[level] -\n (_this.yAxisMultiLabelHeight[level] / 2) - padding / 2;\n y = rect.height + rect.y - startY - (gap / 2);\n if (opposedPosition) {\n x = isOutside ? rect.x + startX + padding / 2 + (_this.yAxisMultiLabelHeight[level] / 2) +\n _this.yAxisPrevHeight[level] : rect.x - startX - (_this.yAxisMultiLabelHeight[level] / 2) -\n _this.yAxisPrevHeight[level] - padding / 2;\n }\n else {\n x = isOutside ? x : rect.x + startX + padding / 2 + (_this.yAxisMultiLabelHeight[level] / 2) +\n _this.yAxisPrevHeight[level];\n }\n if (argsData.alignment === 'Center') {\n y += labelSize.height / 4;\n }\n else if (argsData.alignment === 'Far') {\n y += gap / 2 - labelSize.height / 2;\n }\n else {\n y = y - gap / 2 + labelSize.height;\n }\n x = multiLevel.border.type === 'CurlyBrace' ? (((!opposedPosition && isOutside) ||\n (opposedPosition && !isOutside)) ? x - padding : x + padding) : x;\n var options = new TextOption(_this.chart.element.id + index + '_Axis_MultiLevelLabel_Level_' + level + '_Text_' + i, x, y, anchor, argsData.text);\n options.text = (multiLevel.overflow === 'Trim') ?\n textTrim((categoryLabel.maximumTextWidth === null ? _this.yAxisMultiLabelHeight[level] :\n categoryLabel.maximumTextWidth), argsData.text, argsData.textStyle) : options.text;\n textElement(options, argsData.textStyle, argsData.textStyle.color || _this.chart.themeStyle.axisLabel, labelElement);\n if (multiLevel.border.width > 0 && multiLevel.border.type !== 'WithoutBorder') {\n path = _this.renderYAxisLabelBorder(level, gap, axis, endY, startX, startY, labelSize, options, rect, argsData.alignment, path, isOutside, opposedPosition);\n }\n _this.multiElements.appendChild(labelElement);\n }\n }\n });\n if (path !== '') {\n _this.createBorderElement(level, index, axis, path);\n }\n });\n parent.appendChild(this.multiElements);\n };\n /**\n * render y axis multi level labels border\n * @private\n * @return {void}\n */\n MultiLevelLabel.prototype.renderYAxisLabelBorder = function (labelIndex, gap, axis, endY, startX, startY, labelSize, textOptions, rect, alignment, path, isOutside, opposedPosition) {\n var height = endY - startY;\n var padding = 10;\n var padding1;\n var padding2;\n var groupLabel = axis.multiLevelLabels[labelIndex];\n var y = rect.y + rect.height - endY;\n var width = this.yAxisMultiLabelHeight[labelIndex] + padding;\n var x = ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) ? rect.x - startX -\n this.yAxisPrevHeight[labelIndex] : rect.x + startX + this.yAxisPrevHeight[labelIndex];\n switch (groupLabel.border.type) {\n case 'WithoutTopandBottomBorder':\n case 'Rectangle':\n case 'WithoutTopBorder':\n width = ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) ? -width : width;\n path += 'M' + x + ' ' + y + 'L' + (x + width) + ' ' + y +\n 'M' + x + ' ' + (y + height) + 'L' + (x + width) + ' ' + (y + height);\n path += (groupLabel.border.type !== 'WithoutTopandBottomBorder') ? ('L' + ' ' + (x + width) + ' ' + y + ' ') : ' ';\n path += (groupLabel.border.type === 'Rectangle') ? ('M' + (x) + ' ' + (y + height) + 'L' + ' ' + (x) + ' ' + y + ' ') : ' ';\n break;\n case 'Brace':\n width = ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) ? width : -width;\n path += 'M ' + (x) + ' ' + y + ' L ' + (x - width / 2) + ' ' + y + ' L ' + (x - width / 2) + ' ' +\n (textOptions.y - labelSize.height / 2 - 4) + ' M ' + (x - width / 2) + ' ' +\n (textOptions.y + labelSize.height / 4 + 2) +\n ' L ' + (x - width / 2) + ' ' + (y + height) + ' L ' + (x) + ' ' + (y + height);\n break;\n case 'CurlyBrace':\n if ((!opposedPosition && isOutside) || (opposedPosition && !isOutside)) {\n padding = -10;\n padding1 = -15;\n padding2 = -5;\n }\n else {\n padding = 10;\n padding1 = 15;\n padding2 = 5;\n }\n if (alignment === 'Center') {\n path += 'M ' + x + ' ' + y + ' C ' + x + ' ' + y + ' ' + (x + padding) + ' ' + y + ' ' + (x + padding) + ' ' + (y + 10)\n + ' L ' + (x + padding) + ' ' + (y + (height - 10) / 2) + ' L ' + (x + padding1) + ' ' + (y + (height - 10) / 2 + 5)\n + ' L ' + (x + padding) + ' ' + (y + (height - 10) / 2 + 10) + ' L ' + (x + padding) + ' ' + (y + (height - 10)) +\n ' C ' + (x + padding) + ' ' + (y + (height - 10)) + ' ' + (x + padding2) + ' ' + (y + height) + ' '\n + x + ' ' + (y + height);\n }\n else if (alignment === 'Far') {\n path += 'M ' + x + ' ' + y + ' C ' + x + ' ' + y + ' ' + (x + padding) + ' ' + y + ' ' + (x + padding) + ' ' + (y + 10)\n + ' L ' + (x + padding) + ' ' + (y + height - 20) + ' ' + ' L ' + (x + padding1) + ' ' + (y + (height - 15)) +\n ' L ' + (x + padding) + ' ' + (y + (height - 10)) + ' L ' + (x + padding) + ' ' + (y + (height - 10)) +\n ' C' + (x + padding) + ' ' + (y + (height - 10)) + ' ' + (x + padding) + ' ' + (y + height) + ' ' + x + ' '\n + (y + height);\n }\n else {\n path += 'M ' + x + ' ' + y + ' C ' + x + ' ' + y + ' ' + (x + padding) + ' ' + y + ' ' + (x + padding) + ' ' + (y + 10)\n + ' L ' + (x + padding1) + ' ' + (y + 15) +\n ' L ' + (x + padding) + ' ' + (y + 20) + ' L ' + (x + padding) + ' ' + (y + (height - 10)) +\n ' C' + (x + padding) + ' ' + (y + (height - 10)) + ' ' + (x + padding2) + ' ' + (y + height) + ' ' + x +\n ' ' + (y + height);\n }\n break;\n }\n return path;\n };\n /**\n * create cliprect\n * @return {void}\n * @private\n */\n MultiLevelLabel.prototype.createClipRect = function (x, y, height, width, clipId, axisId) {\n this.multiElements = this.chart.renderer.createGroup({\n 'id': axisId,\n 'clip-path': 'url(#' + clipId + ')'\n });\n this.multiElements.appendChild(this.chart.renderer.drawClipPath({\n 'id': clipId,\n 'x': x,\n 'y': y,\n 'width': width,\n 'height': height,\n 'fill': 'white',\n 'stroke-width': 1, 'stroke': 'Gray'\n }));\n };\n /**\n * create borer element\n * @return {void}\n * @private\n */\n MultiLevelLabel.prototype.createBorderElement = function (borderIndex, axisIndex, axis, path) {\n var borderElement = this.chart.renderer.drawPath(new PathOption(this.chart.element.id + axisIndex + '_Axis_MultiLevelLabel_Rect_' + borderIndex, 'Transparent', axis.multiLevelLabels[borderIndex].border.width, axis.multiLevelLabels[borderIndex].border.color || this.chart.themeStyle.axisLine, 1, '', path));\n borderElement.setAttribute('style', 'pointer-events: none');\n this.multiElements.appendChild(borderElement);\n };\n /**\n * Triggers the event.\n * @return {void}\n * @private\n */\n MultiLevelLabel.prototype.triggerMultiLabelRender = function (axis, text, textStyle, textAlignment) {\n var argsData;\n argsData = {\n cancel: false, name: axisMultiLabelRender, axis: axis,\n text: text, textStyle: textStyle, alignment: textAlignment\n };\n this.chart.trigger(axisMultiLabelRender, argsData);\n return argsData;\n };\n /**\n * To get the module name for `MultiLevelLabel`.\n * @private\n */\n MultiLevelLabel.prototype.getModuleName = function () {\n return 'MultiLevelLabel';\n };\n /**\n * To destroy the `MultiLevelLabel` module.\n * @private\n */\n MultiLevelLabel.prototype.destroy = function () {\n // destroy peform here\n };\n return MultiLevelLabel;\n}());\nexport { MultiLevelLabel };\n","/**\n * Defines the common functionalities of accumulation series\n */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { degreeToLocation, getElement, indexFinder } from '../../common/utils/helper';\nimport { pointByIndex } from '../model/acc-base';\n/**\n * Accumulation Base used to do some base calculation for accumulation chart.\n */\nvar AccumulationBase = /** @class */ (function () {\n /** @private */\n function AccumulationBase(accumulation) {\n this.accumulation = accumulation;\n }\n Object.defineProperty(AccumulationBase.prototype, \"center\", {\n /**\n * Gets the center of the pie\n * @private\n */\n get: function () {\n return this.pieCenter || (this.accumulation.visibleSeries[0].type === 'Pie' ?\n this.accumulation.pieSeriesModule.center : null);\n },\n /**\n * Sets the center of the pie\n * @private\n */\n set: function (value) {\n this.pieCenter = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AccumulationBase.prototype, \"radius\", {\n /**\n * Gets the radius of the pie\n * @private\n */\n get: function () {\n return this.pieRadius !== undefined ? this.pieRadius :\n this.accumulation.pieSeriesModule.radius;\n },\n /**\n * Sets the radius of the pie\n * @private\n */\n set: function (value) {\n this.pieRadius = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AccumulationBase.prototype, \"labelRadius\", {\n /**\n * Gets the label radius of the pie\n * @private\n */\n get: function () {\n return this.pieLabelRadius !== undefined ? this.pieLabelRadius :\n this.accumulation.pieSeriesModule.labelRadius;\n },\n /**\n * Sets the label radius of the pie\n * @private\n */\n set: function (value) {\n this.pieLabelRadius = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Checks whether the series is circular or not\n * @private\n */\n AccumulationBase.prototype.isCircular = function () {\n return this.accumulation.type === 'Pie';\n };\n /**\n * To process the explode on accumulation chart loading\n * @private\n */\n AccumulationBase.prototype.processExplode = function (event) {\n if (event.target.id.indexOf('_Series_') > -1 || event.target.id.indexOf('_datalabel_') > -1) {\n var pointIndex = indexFinder(event.target.id).point;\n if (isNaN(pointIndex) || (event.target.id.indexOf('_datalabel_') > -1 &&\n this.accumulation.visibleSeries[0].points[pointIndex].labelPosition === 'Outside')) {\n return null;\n }\n this.explodePoints(pointIndex, this.accumulation);\n this.deExplodeAll(pointIndex);\n }\n };\n /**\n * To invoke the explode on accumulation chart loading\n * @private\n */\n AccumulationBase.prototype.invokeExplode = function () {\n if (this.accumulation.visibleSeries[0].explodeAll) {\n for (var _i = 0, _a = this.accumulation.visibleSeries[0].points; _i < _a.length; _i++) {\n var point = _a[_i];\n this.explodePoints(point.index, this.accumulation);\n }\n }\n else if (!isNullOrUndefined(this.accumulation.visibleSeries[0].explodeIndex)) {\n this.explodePoints(this.accumulation.visibleSeries[0].explodeIndex, this.accumulation);\n }\n if (this.accumulation.accumulationSelectionModule && this.accumulation.selectionMode !== 'None' &&\n this.accumulation.accumulationSelectionModule.selectedDataIndexes.length) {\n for (var _b = 0, _c = this.accumulation.accumulationSelectionModule.selectedDataIndexes; _b < _c.length; _b++) {\n var index = _c[_b];\n this.explodePoints(index.point, this.accumulation, true);\n this.deExplodeAll(index.point);\n }\n }\n };\n /**\n * To deExplode all points in the series\n */\n AccumulationBase.prototype.deExplodeAll = function (index) {\n var pointId = this.accumulation.element.id + '_Series_0_Point_';\n var points = this.accumulation.visibleSeries[0].points;\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var currentPoint = points_1[_i];\n if (index !== currentPoint.index) {\n this.deExplodeSlice(currentPoint.index, pointId, this.center);\n }\n }\n };\n /**\n * To explode point by index\n * @private\n */\n AccumulationBase.prototype.explodePoints = function (index, chart, explode) {\n if (explode === void 0) { explode = false; }\n var pointId = this.accumulation.element.id + '_Series_0_Point_';\n var translate;\n var points = this.accumulation.visibleSeries[0].points;\n var point = pointByIndex(index, this.accumulation.visibleSeries[0].points);\n if (isNullOrUndefined(point)) {\n return null;\n }\n if (!this.isCircular()) {\n translate = { x: chart.explodeDistance, y: 0 };\n }\n else {\n translate = degreeToLocation(point.midAngle, chart.explodeDistance, this.center);\n }\n if (this.isExplode(pointId + index) || explode) {\n this.explodeSlice(index, translate, pointId, this.center || { x: 0, y: 0 });\n }\n else {\n this.deExplodeSlice(index, pointId, this.center);\n }\n };\n /**\n * To check point is exploded by id\n */\n AccumulationBase.prototype.isExplode = function (id) {\n var element = getElement(id);\n if (element && (element.getAttribute('transform') === 'translate(0, 0)' || element.getAttribute('transform') === null ||\n element.getAttribute('transform') === 'translate(0)')) {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * To deExplode the point by index\n */\n AccumulationBase.prototype.deExplodeSlice = function (index, sliceId, center) {\n var position = 'translate(0, 0)';\n this.setTranslate(index, sliceId, position);\n };\n /**\n * To translate the point elements by index and position\n */\n AccumulationBase.prototype.setTranslate = function (index, sliceId, position) {\n this.setElementTransform(sliceId + index, position);\n if (this.accumulation.visibleSeries[0].dataLabel.visible) {\n sliceId = this.accumulation.element.id + '_datalabel_Series_0_';\n this.setElementTransform(sliceId + 'shape_' + index, position);\n this.setElementTransform(sliceId + 'text_' + index, position);\n this.setElementTransform(sliceId + 'connector_' + index, position);\n }\n };\n /**\n * To translate the point element by id and position\n */\n AccumulationBase.prototype.setElementTransform = function (id, position) {\n var element = getElement(id);\n if (element) {\n element.setAttribute('transform', position);\n }\n };\n /**\n * To translate the point elements by index position\n */\n AccumulationBase.prototype.explodeSlice = function (index, translate, sliceId, center) {\n var position = 'translate(' + (translate.x - center.x) + ', ' + (translate.y - center.y) + ')';\n this.setTranslate(index, sliceId, position);\n };\n return AccumulationBase;\n}());\nexport { AccumulationBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Accumulation charts base file\n */\nimport { Animation } from '@syncfusion/ej2-base';\nimport { stringToNumber, ChartLocation, degreeToLocation, Rect, getAnimationFunction, getElement } from '../../common/utils/helper';\nimport { animationComplete } from '../../common/model/constants';\nimport { AccumulationBase } from './accumulation-base';\n/**\n * PieBase class used to do pie base calculations.\n */\nvar PieBase = /** @class */ (function (_super) {\n __extends(PieBase, _super);\n function PieBase() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * To initialize the property values.\n * @private\n */\n PieBase.prototype.initProperties = function (chart, series) {\n this.accumulation = chart;\n var size = Math.min(chart.initialClipRect.width, chart.initialClipRect.height);\n this.initAngles(series);\n this.radius = stringToNumber(series.radius, size / 2);\n this.innerRadius = stringToNumber(series.innerRadius, this.radius);\n this.labelRadius = series.dataLabel.position === 'Inside' ? (((this.radius - this.innerRadius) / 2) + this.innerRadius) :\n (this.radius + stringToNumber(series.dataLabel.connectorStyle.length || '4%', size / 2));\n chart.explodeDistance = series.explode ? stringToNumber(series.explodeOffset, this.radius) : 0;\n this.findCenter(chart, series);\n this.defaultLabelBound(series, series.dataLabel.visible, series.dataLabel.position);\n this.totalAngle -= 0.001;\n };\n /**\n * To find the center of the accumulation.\n * @private\n */\n PieBase.prototype.findCenter = function (accumulation, series) {\n this.accumulation = accumulation;\n this.center = {\n x: stringToNumber('50%', accumulation.initialClipRect.width) + (accumulation.initialClipRect.x),\n y: stringToNumber('50%', accumulation.initialClipRect.height) + (accumulation.initialClipRect.y)\n };\n var accumulationRect = this.getSeriesBound(series);\n var accumulationRectCenter = new ChartLocation(accumulationRect.x + accumulationRect.width / 2, accumulationRect.y + accumulationRect.height / 2);\n this.center.x += (this.center.x - accumulationRectCenter.x);\n this.center.y += (this.center.y - accumulationRectCenter.y);\n this.accumulation.center = this.center;\n };\n /**\n * To find angles from series.\n */\n PieBase.prototype.initAngles = function (series) {\n this.totalAngle = (series.endAngle - series.startAngle) % 360;\n this.startAngle = series.startAngle - 90;\n this.totalAngle = this.totalAngle <= 0 ? (360 + this.totalAngle) : this.totalAngle;\n this.startAngle = (this.startAngle < 0 ? (this.startAngle + 360) : this.startAngle) % 360;\n };\n /**\n * To calculate data-label bound\n * @private\n */\n PieBase.prototype.defaultLabelBound = function (series, visible, position) {\n var accumulationBound = this.getSeriesBound(series);\n series.accumulationBound = accumulationBound;\n series.labelBound = new Rect(accumulationBound.x, accumulationBound.y, accumulationBound.width + accumulationBound.x, accumulationBound.height + accumulationBound.y);\n if (visible && position === 'Outside') {\n series.labelBound = new Rect(Infinity, Infinity, -Infinity, -Infinity);\n }\n };\n /**\n * To calculate series bound\n * @private\n */\n PieBase.prototype.getSeriesBound = function (series) {\n var rect = new Rect(Infinity, Infinity, -Infinity, -Infinity);\n this.initAngles(series);\n var start = this.startAngle;\n var total = this.totalAngle;\n var end = (this.startAngle + total) % 360;\n end = (end === 0) ? 360 : end;\n series.findMaxBounds(rect, this.getRectFromAngle(start));\n series.findMaxBounds(rect, this.getRectFromAngle(end));\n series.findMaxBounds(rect, new Rect(this.center.x, this.center.y, 0, 0));\n var nextQuandrant = (Math.floor(start / 90) * 90 + 90) % 360;\n var lastQuadrant = (Math.floor(end / 90) * 90) % 360;\n lastQuadrant = (lastQuadrant === 0) ? 360 : lastQuadrant;\n if (total >= 90 || lastQuadrant === nextQuandrant) {\n series.findMaxBounds(rect, this.getRectFromAngle(nextQuandrant));\n series.findMaxBounds(rect, this.getRectFromAngle(lastQuadrant));\n }\n if (start === 0 || (start + total >= 360)) {\n series.findMaxBounds(rect, this.getRectFromAngle(0));\n }\n var length = nextQuandrant === lastQuadrant ? 0 : Math.floor(total / 90);\n for (var i = 1; i < length; i++) {\n nextQuandrant = nextQuandrant + 90;\n if ((nextQuandrant < lastQuadrant || end < start) || total === 360) {\n series.findMaxBounds(rect, this.getRectFromAngle(nextQuandrant));\n }\n }\n rect.width -= rect.x;\n rect.height -= rect.y;\n return rect;\n };\n /**\n * To get rect location size from angle\n */\n PieBase.prototype.getRectFromAngle = function (angle) {\n var location = degreeToLocation(angle, this.radius, this.center);\n return new Rect(location.x, location.y, 0, 0);\n };\n /**\n * To get path arc direction\n */\n PieBase.prototype.getPathArc = function (center, start, end, radius, innerRadius) {\n var degree = end - start;\n degree = degree < 0 ? (degree + 360) : degree;\n var flag = (degree < 180) ? 0 : 1;\n if (!innerRadius && innerRadius === 0) {\n return this.getPiePath(center, degreeToLocation(start, radius, center), degreeToLocation(end, radius, center), radius, flag);\n }\n else {\n return this.getDoughnutPath(center, degreeToLocation(start, radius, center), degreeToLocation(end, radius, center), radius, degreeToLocation(start, innerRadius, center), degreeToLocation(end, innerRadius, center), innerRadius, flag);\n }\n };\n /**\n * To get pie direction\n */\n PieBase.prototype.getPiePath = function (center, start, end, radius, clockWise) {\n return 'M ' + center.x + ' ' + center.y + ' L ' + start.x + ' ' + start.y + ' A ' + radius + ' ' +\n radius + ' 0 ' + clockWise + ' 1 ' + end.x + ' ' + end.y + ' Z';\n };\n /**\n * To get doughnut direction\n */\n PieBase.prototype.getDoughnutPath = function (center, start, end, radius, innerStart, innerEnd, innerRadius, clockWise) {\n return 'M ' + start.x + ' ' + start.y + ' A ' + radius + ' ' + radius + ' 0 ' + clockWise +\n ' 1 ' + end.x + ' ' + end.y + ' L ' + innerEnd.x + ' ' + innerEnd.y + ' A ' + innerRadius +\n ' ' + innerRadius + ' 0 ' + clockWise + ',0 ' + innerStart.x + ' ' + innerStart.y + ' Z';\n };\n /**\n * Method to start animation for pie series.\n */\n PieBase.prototype.doAnimation = function (slice, series) {\n var _this = this;\n var startAngle = series.startAngle - 85;\n var value;\n var radius = Math.max(this.accumulation.availableSize.height, this.accumulation.availableSize.width) * 0.75;\n radius += radius * (0.414); // formula r + r / 2 * (1.414 -1)\n var effect = getAnimationFunction('Linear'); // need to check animation type\n new Animation({}).animate(slice, {\n duration: series.animation.duration,\n delay: series.animation.delay,\n progress: function (args) {\n value = effect(args.timeStamp, startAngle, _this.totalAngle, args.duration);\n slice.setAttribute('d', _this.getPathArc(_this.center, startAngle, value, radius, 0));\n },\n end: function (args) {\n slice.setAttribute('d', _this.getPathArc(_this.center, 0, 359.99999, radius, 0));\n _this.accumulation.trigger(animationComplete, { series: series, accumulation: _this.accumulation });\n var datalabelGroup = getElement(_this.accumulation.element.id + '_datalabel_Series_' + series.index);\n datalabelGroup.style.visibility = _this.accumulation.isDestroyed ? 'hidden' : 'visible';\n }\n });\n };\n return PieBase;\n}(AccumulationBase));\nexport { PieBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PathOption, degreeToLocation } from '../../common/utils/helper';\nimport { PieBase } from '../renderer/pie-base';\n/**\n * PieSeries module used to render `Pie` Series.\n */\nvar PieSeries = /** @class */ (function (_super) {\n __extends(PieSeries, _super);\n function PieSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * To get path option, degree, symbolLocation from the point.\n * @private\n */\n PieSeries.prototype.renderPoint = function (point, series, chart, option) {\n var sum = series.sumOfPoints;\n var degree = (sum) ? ((Math.abs(point.y) / sum) * (this.totalAngle)) : null;\n option.d = this.getPathOption(point, degree);\n point.midAngle = (this.startAngle - (degree / 2)) % 360;\n point.endAngle = this.startAngle % 360;\n point.symbolLocation = degreeToLocation(point.midAngle, (this.radius + this.innerRadius) / 2, this.center);\n return option;\n };\n /**\n * To get path option from the point.\n */\n PieSeries.prototype.getPathOption = function (point, degree) {\n if (degree === null || !point.y) {\n return '';\n }\n var path = this.getPathArc(this.center, this.startAngle % 360, (this.startAngle + degree) % 360, this.radius, this.innerRadius);\n this.startAngle += degree;\n return path;\n };\n /**\n * To animate the pie series.\n * @private\n */\n PieSeries.prototype.animateSeries = function (accumulation, option, series, slice) {\n var groupId = accumulation.element.id + 'SeriesGroup' + series.index;\n if (series.animation.enable && accumulation.animateSeries) {\n var clippath = accumulation.renderer.createClipPath({ id: groupId + '_clipPath' });\n var path = new PathOption(groupId + '_slice', 'transparent', 1, 'transparent', 1, '', '');\n var clipslice = accumulation.renderer.drawPath(path);\n clippath.appendChild(clipslice);\n accumulation.svgObject.appendChild(clippath);\n slice.setAttribute('style', 'clip-path:url(#' + clippath.id + ')');\n this.doAnimation(clipslice, series);\n }\n };\n /**\n * To get the module name of the Pie series.\n */\n PieSeries.prototype.getModuleName = function () {\n return 'PieSeries';\n };\n /**\n * To destroy the pie series.\n * @return {void}\n * @private\n */\n PieSeries.prototype.destroy = function (accumulation) {\n /**\n * Destroy method calling here\n */\n };\n return PieSeries;\n}(PieBase));\nexport { PieSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * AccumulationChart file\n */\nimport { Property, Component, Complex, Collection, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { Internationalization, Event, Browser, EventHandler, Touch } from '@syncfusion/ej2-base';\nimport { remove, extend, isNullOrUndefined, createElement } from '@syncfusion/ej2-base';\nimport { Font, Margin, Border, TooltipSettings, Indexes } from '../common/model/base';\nimport { AccumulationSeries } from './model/acc-base';\nimport { Theme, getThemeColor } from '../common/model/theme';\nimport { load, pointClick } from '../common/model/constants';\nimport { pointMove, chartMouseClick, chartMouseDown } from '../common/model/constants';\nimport { chartMouseLeave, chartMouseMove, chartMouseUp, resized } from '../common/model/constants';\nimport { LegendSettings } from '../common/legend/legend';\nimport { Rect, Size, subtractRect, indexFinder } from '../common/utils/helper';\nimport { measureText, RectOption, showTooltip } from '../common/utils/helper';\nimport { textElement, TextOption, createSvg, calculateSize, removeElement, firstToLowerCase } from '../common/utils/helper';\nimport { getElement, titlePositionX } from '../common/utils/helper';\nimport { Data } from '../common/model/data';\nimport { AccumulationBase } from './renderer/accumulation-base';\nimport { PieSeries } from './renderer/pie-series';\nimport { AccumulationAnnotationSettings } from './model/acc-base';\nimport { ExportUtils } from '../common/utils/export';\nimport { getTitle } from '../common/utils/helper';\n/**\n * Represents the AccumulationChart control.\n * ```html\n *
\n * \n * ```\n */\nvar AccumulationChart = /** @class */ (function (_super) {\n __extends(AccumulationChart, _super);\n /**\n * Constructor for creating the AccumulationChart widget\n * @private\n */\n function AccumulationChart(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private explode radius internal property */\n _this.explodeDistance = 0;\n return _this;\n }\n Object.defineProperty(AccumulationChart.prototype, \"type\", {\n /** @private */\n get: function () {\n if (this.series && this.series.length) {\n return this.series[0].type;\n }\n return 'Pie';\n },\n enumerable: true,\n configurable: true\n });\n // accumulation chart methods\n /**\n * To create svg object, renderer and binding events for the container.\n */\n AccumulationChart.prototype.preRender = function () {\n this.unWireEvents();\n this.setCulture();\n this.animateSeries = true;\n calculateSize(this);\n this.wireEvents();\n };\n /**\n * Themeing for chart goes here\n */\n AccumulationChart.prototype.setTheme = function () {\n /*! Set theme for accumulation chart */\n this.themeStyle = getThemeColor(this.theme);\n };\n /**\n * To render the accumulation chart elements\n */\n AccumulationChart.prototype.render = function () {\n this.trigger(load, { accumulation: this });\n this.setTheme();\n this.accBaseModule = new AccumulationBase(this);\n this.pieSeriesModule = new PieSeries(this);\n this.calculateVisibleSeries();\n this.processData();\n };\n /**\n * Method to unbind events for accumulation chart\n */\n AccumulationChart.prototype.unWireEvents = function () {\n /*! Find the Events type */\n var isIE11Pointer = Browser.isPointer;\n var start = Browser.touchStartEvent;\n var move = Browser.touchMoveEvent;\n var stop = Browser.touchEndEvent;\n var cancel = isIE11Pointer ? 'pointerleave' : 'mouseleave';\n /*! UnBind the Event handler */\n EventHandler.remove(this.element, move, this.accumulationMouseMove);\n EventHandler.remove(this.element, stop, this.accumulationMouseEnd);\n EventHandler.remove(this.element, start, this.accumulationMouseStart);\n EventHandler.remove(this.element, 'click', this.accumulationOnMouseClick);\n EventHandler.remove(this.element, 'contextmenu', this.accumulationRightClick);\n EventHandler.remove(this.element, cancel, this.accumulationMouseLeave);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.accumulationResize);\n };\n /**\n * Method to bind events for the accumulation chart\n */\n AccumulationChart.prototype.wireEvents = function () {\n /*! Find the Events type */\n var isIE11Pointer = Browser.isPointer;\n var start = Browser.touchStartEvent;\n var stop = Browser.touchEndEvent;\n var move = Browser.touchMoveEvent;\n var cancel = isIE11Pointer ? 'pointerleave' : 'mouseleave';\n /*! Bind the Event handler */\n EventHandler.add(this.element, move, this.accumulationMouseMove, this);\n EventHandler.add(this.element, stop, this.accumulationMouseEnd, this);\n EventHandler.add(this.element, start, this.accumulationMouseStart, this);\n EventHandler.add(this.element, 'click', this.accumulationOnMouseClick, this);\n EventHandler.add(this.element, 'contextmenu', this.accumulationRightClick, this);\n EventHandler.add(this.element, cancel, this.accumulationMouseLeave, this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.accumulationResize.bind(this));\n new Touch(this.element); // To avoid geasture blocking for browser\n /*! Apply the style for chart */\n this.setStyle(this.element);\n };\n /**\n * Method to set mouse x, y from events\n */\n AccumulationChart.prototype.setMouseXY = function (e) {\n var pageX;\n var pageY;\n if (e.type.indexOf('touch') > -1) {\n this.isTouch = true;\n var touchArg = e;\n pageY = touchArg.changedTouches[0].clientY;\n pageX = touchArg.changedTouches[0].clientX;\n }\n else {\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2';\n pageX = e.clientX;\n pageY = e.clientY;\n }\n var rect = this.element.getBoundingClientRect();\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n this.mouseX = (pageX - rect.left) - Math.max(svgRect.left - rect.left, 0);\n this.mouseY = (pageY - rect.top) - Math.max(svgRect.top - rect.top, 0);\n };\n /**\n * Handles the mouse end.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationMouseEnd = function (e) {\n this.setMouseXY(e);\n this.trigger(chartMouseUp, { target: e.target.id, x: this.mouseX, y: this.mouseY });\n if (this.isTouch) {\n this.titleTooltip(e, this.mouseX, this.mouseY, this.isTouch);\n if (this.accumulationDataLabelModule && this.visibleSeries[0].dataLabel.visible) {\n this.accumulationDataLabelModule.move(e, this.mouseX, this.mouseY, this.isTouch);\n }\n if (this.accumulationLegendModule && this.legendSettings.visible) {\n this.accumulationLegendModule.move(e);\n }\n }\n this.notify(Browser.touchEndEvent, e);\n return false;\n };\n /*public removeSvgOffset(x: number, y: number): ChartLocation {\n let rect: ClientRect = this.element.getBoundingClientRect();\n let svgRect: ClientRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n return { x: (x - rect.left) - Math.max(svgRect.left - rect.left, 0), y: (y - rect.top) - Math.max(svgRect.top - rect.top, 0)};\n }*/\n /**\n * Handles the mouse start.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationMouseStart = function (e) {\n this.setMouseXY(e);\n this.trigger(chartMouseDown, { target: e.target.id, x: this.mouseX, y: this.mouseY });\n return false;\n };\n /**\n * Handles the accumulation chart resize.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationResize = function (e) {\n var _this = this;\n this.animateSeries = false;\n var args = {\n accumulation: this,\n previousSize: new Size(this.availableSize.width, this.availableSize.height),\n name: resized,\n currentSize: new Size(0, 0)\n };\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n this.resizeTo = setTimeout(function () {\n if (_this.isDestroyed) {\n clearTimeout(_this.resizeTo);\n return;\n }\n calculateSize(_this);\n args.currentSize = _this.availableSize;\n _this.trigger(resized, args);\n _this.refreshSeries();\n _this.refreshChart();\n }, 500);\n return false;\n };\n /**\n * Handles the export method for chart control.\n */\n AccumulationChart.prototype.export = function (type, fileName, orientation) {\n var exportChart = new ExportUtils(this);\n exportChart.export(type, fileName, orientation);\n };\n /**\n * Handles the print method for accumulation chart control.\n */\n AccumulationChart.prototype.print = function (id) {\n var exportChart = new ExportUtils(this);\n exportChart.print(id);\n };\n /**\n * Applying styles for accumulation chart element\n */\n AccumulationChart.prototype.setStyle = function (element) {\n element.style.touchAction = 'element';\n element.style.msTouchAction = 'element';\n element.style.msContentZooming = 'none';\n element.style.msUserSelect = 'none';\n element.style.webkitUserSelect = 'none';\n element.style.position = 'relative';\n };\n /**\n * Method to set the annotation content dynamically for accumulation.\n */\n AccumulationChart.prototype.setAnnotationValue = function (annotationIndex, content) {\n var annotation = this.annotations[annotationIndex];\n var element;\n var parentNode = getElement(this.element.id + '_Annotation_Collections');\n if (content) {\n annotation.content = content;\n if (parentNode) {\n element = createElement('div');\n removeElement(this.element.id + '_Annotation_' + annotationIndex);\n this.annotationModule.processAnnotation(annotation, annotationIndex, element);\n parentNode.appendChild(element.children[0]);\n }\n else {\n this.annotationModule.renderAnnotations(getElement(this.element.id + '_Secondary_Element'));\n }\n }\n };\n /**\n * Handles the mouse move on accumulation chart.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationMouseMove = function (e) {\n this.setMouseXY(e);\n this.trigger(chartMouseMove, { target: e.target.id, x: this.mouseX, y: this.mouseY });\n if (this.pointMove) {\n this.triggerPointEvent(pointMove, e.target);\n }\n if (this.accumulationLegendModule && this.legendSettings.visible) {\n this.accumulationLegendModule.move(e);\n }\n if (this.accumulationDataLabelModule && this.visibleSeries[0] && this.visibleSeries[0].dataLabel.visible) {\n this.accumulationDataLabelModule.move(e, this.mouseX, this.mouseY);\n }\n if (!this.isTouch) {\n this.titleTooltip(e, this.mouseX, this.mouseY);\n }\n this.notify(Browser.touchMoveEvent, e);\n return false;\n };\n AccumulationChart.prototype.titleTooltip = function (event, x, y, isTouch) {\n var targetId = event.target.id;\n if ((event.target.textContent.indexOf('...') > -1) && (targetId === (this.element.id + '_title'))) {\n showTooltip(this.title, x, y, this.element.offsetWidth, this.element.id + '_EJ2_Title_Tooltip', getElement(this.element.id + '_Secondary_Element'), isTouch);\n }\n else {\n removeElement(this.element.id + '_EJ2_Title_Tooltip');\n }\n };\n /**\n * Handles the mouse click on accumulation chart.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationOnMouseClick = function (e) {\n this.setMouseXY(e);\n if (this.accumulationLegendModule && this.legendSettings.visible) {\n this.accumulationLegendModule.click(e);\n }\n if (this.selectionMode !== 'None' && this.accumulationSelectionModule) {\n this.accumulationSelectionModule.calculateSelectedElements(this, e);\n }\n if (this.visibleSeries[0].explode) {\n this.accBaseModule.processExplode(e);\n }\n this.trigger(chartMouseClick, { target: e.target.id, x: this.mouseX, y: this.mouseY });\n if (this.pointClick) {\n this.triggerPointEvent(pointClick, e.target);\n }\n return false;\n };\n AccumulationChart.prototype.triggerPointEvent = function (event, element) {\n var indexes = indexFinder(element.id, true);\n if (indexes.series >= 0 && indexes.point >= 0) {\n this.trigger(event, { series: this.series[indexes.series],\n point: this.series[indexes.series].points[indexes.point],\n seriesIndex: indexes.series, pointIndex: indexes.point,\n x: this.mouseX, y: this.mouseY });\n }\n };\n /**\n * Handles the mouse right click on accumulation chart.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationRightClick = function (event) {\n if (event.buttons === 2 || event.pointerType === 'touch') {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n return true;\n };\n /**\n * Handles the mouse leave on accumulation chart.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.accumulationMouseLeave = function (e) {\n this.setMouseXY(e);\n this.trigger(chartMouseLeave, { target: e.target.id, x: this.mouseX, y: this.mouseY });\n this.notify(Browser.isPointer ? 'pointerleave' : 'mouseleave', e);\n return false;\n };\n /**\n * Method to set culture for chart\n */\n AccumulationChart.prototype.setCulture = function () {\n this.intl = new Internationalization();\n };\n /**\n * Method to create SVG element for accumulation chart.\n */\n AccumulationChart.prototype.createPieSvg = function () {\n this.removeSvg();\n createSvg(this);\n };\n /**\n * To Remove the SVG from accumulation chart.\n * @return {boolean}\n * @private\n */\n AccumulationChart.prototype.removeSvg = function () {\n removeElement(this.element.id + '_Secondary_Element');\n if (this.svgObject) {\n while (this.svgObject.childNodes.length > 0) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode) {\n remove(this.svgObject);\n }\n }\n removeElement('EJ2_legend_tooltip');\n removeElement('EJ2_datalabel_tooltip');\n };\n /**\n * Method to create the secondary element for tooltip, datalabel and annotaitons.\n */\n AccumulationChart.prototype.createSecondaryElement = function () {\n this.element.appendChild(createElement('div', {\n id: this.element.id + '_Secondary_Element',\n styles: 'position: relative'\n }));\n };\n /**\n * Method to find visible series based on series types\n */\n AccumulationChart.prototype.calculateVisibleSeries = function () {\n this.visibleSeries = [];\n for (var i = 0, length_1 = this.series.length; i < length_1; i++) {\n this.series[i].index = i;\n if (this.series[i].type === this.type && this.visibleSeries.length === 0) {\n this.visibleSeries.push(this.series[i]);\n break;\n }\n }\n };\n /**\n * To find points from dataSource\n */\n AccumulationChart.prototype.processData = function () {\n this.seriesCounts = 0;\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n series.dataModule = new Data(series.dataSource, series.query);\n series.refreshDataManager(this);\n }\n };\n /**\n * To refresh the accumulation chart\n * @private\n */\n AccumulationChart.prototype.refreshChart = function () {\n this.doGrouppingProcess();\n this.createPieSvg();\n this.calculateBounds();\n this.renderElements();\n };\n /**\n * Method to find groupped points\n */\n AccumulationChart.prototype.doGrouppingProcess = function () {\n var series = this.visibleSeries[0];\n if (!isNullOrUndefined(series.resultData) && ((!isNullOrUndefined(series.lastGroupTo) &&\n series.lastGroupTo !== series.groupTo))) {\n series.getPoints(series.resultData, this);\n }\n };\n /**\n * Method to calculate bounds for accumulation chart\n */\n AccumulationChart.prototype.calculateBounds = function () {\n this.initialClipRect = new Rect(this.margin.left, this.margin.top, this.availableSize.width, this.availableSize.height);\n this.titleCollection = [];\n this.titleCollection = getTitle(this.title, this.titleStyle, this.initialClipRect.width);\n subtractRect(this.initialClipRect, new Rect(0, (measureText(this.title, this.titleStyle).height * this.titleCollection.length), this.margin.right + this.margin.left, this.margin.bottom + this.margin.top));\n this.calculateLegendBounds();\n };\n /*\n * Method to calculate legend bounds for accumulation chart\n */\n AccumulationChart.prototype.calculateLegendBounds = function () {\n if (!this.accumulationLegendModule || !this.legendSettings.visible) {\n return null;\n }\n this.accumulationLegendModule.getLegendOptions(this, this.visibleSeries);\n this.accumulationLegendModule.calculateLegendBounds(this.initialClipRect, this.availableSize);\n };\n /**\n * To render elements for accumulation chart\n * @private\n */\n AccumulationChart.prototype.renderElements = function () {\n this.renderBorder();\n this.renderTitle();\n this.createSecondaryElement();\n this.renderSeries();\n this.renderLegend();\n this.element.appendChild(this.svgObject);\n this.processSelection();\n this.processExplode();\n this.renderAnnotation();\n this.setSecondaryElementPosition();\n this.trigger('loaded', { accumulation: this });\n this.animateSeries = false;\n };\n /**\n * To set the left and top position for data label template for center aligned chart\n */\n AccumulationChart.prototype.setSecondaryElementPosition = function () {\n var tooltipParent = getElement(this.element.id + '_Secondary_Element');\n if (!tooltipParent) {\n return;\n }\n var rect = this.element.getBoundingClientRect();\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n tooltipParent.style.left = Math.max(svgRect.left - rect.left, 0) + 'px';\n tooltipParent.style.top = Math.max(svgRect.top - rect.top, 0) + 'px';\n };\n /**\n * To render the annotaitions for accumulation series.\n */\n AccumulationChart.prototype.renderAnnotation = function () {\n if (this.annotationModule) {\n this.annotationModule.renderAnnotations(getElement(this.element.id + '_Secondary_Element'));\n }\n };\n /**\n * Method to process the explode in accumulation chart\n */\n AccumulationChart.prototype.processExplode = function () {\n if (!this.visibleSeries[0].explode) {\n return null;\n }\n this.accBaseModule.invokeExplode();\n };\n /**\n * Method to render series for accumulation chart\n */\n AccumulationChart.prototype.renderSeries = function () {\n this.svgObject.appendChild(this.renderer.createGroup({ id: this.element.id + '_SeriesCollection' }));\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n if (series.visible && this[(firstToLowerCase(series.type) + 'SeriesModule')]) {\n this[(firstToLowerCase(series.type) + 'SeriesModule')].initProperties(this, series);\n series.renderSeries(this);\n }\n }\n };\n /**\n * Method to render border for accumulation chart\n */\n AccumulationChart.prototype.renderBorder = function () {\n var padding = this.border.width;\n this.svgObject.appendChild(this.renderer.drawRectangle(new RectOption(this.element.id + '_border', this.background || this.themeStyle.background, this.border, 1, new Rect(padding / 2, padding / 2, this.availableSize.width - padding, this.availableSize.height - padding))));\n };\n /**\n * Method to render legend for accumulation chart\n */\n AccumulationChart.prototype.renderLegend = function () {\n if (!this.accumulationLegendModule || !this.legendSettings.visible) {\n return null;\n }\n if (this.accumulationLegendModule.legendCollections.length) {\n if (this.visibleSeries[0].type === 'Pie') {\n this.accumulationLegendModule.getSmartLegendLocation(this.visibleSeries[0].labelBound, this.accumulationLegendModule.legendBounds, this.margin);\n }\n this.accumulationLegendModule.renderLegend(this, this.legendSettings, this.accumulationLegendModule.legendBounds);\n }\n };\n /**\n * To process the selection in accumulation chart\n */\n AccumulationChart.prototype.processSelection = function () {\n if (!this.accumulationSelectionModule || this.selectionMode === 'None') {\n return null;\n }\n var selectedDataIndexes = extend([], this.accumulationSelectionModule.selectedDataIndexes, null, true);\n this.accumulationSelectionModule.invokeSelection(this);\n if (selectedDataIndexes.length > 0) {\n this.accumulationSelectionModule.selectedDataIndexes = selectedDataIndexes;\n this.accumulationSelectionModule.redrawSelection(this, this.selectionMode);\n }\n };\n /**\n * To render title for accumulation chart\n */\n AccumulationChart.prototype.renderTitle = function () {\n if (!this.title) {\n return null;\n }\n var titleSize = measureText(this.title, this.titleStyle);\n var anchor = this.titleStyle.textAlignment === 'Near' ? 'start' :\n this.titleStyle.textAlignment === 'Far' ? 'end' : 'middle';\n textElement(new TextOption(this.element.id + '_title', titlePositionX(this.availableSize, this.margin.left, this.margin.left, this.titleStyle), this.margin.top + (titleSize.height * 3 / 4), anchor, this.titleCollection, '', 'auto'), this.titleStyle, this.titleStyle.color || this.themeStyle.chartTitle, this.svgObject);\n };\n /**\n * To get the series parent element\n * @private\n */\n AccumulationChart.prototype.getSeriesElement = function () {\n return this.svgObject.getElementsByTagName('g')[0];\n };\n /**\n * To refresh the all visible series points\n * @private\n */\n AccumulationChart.prototype.refreshSeries = function () {\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n this.refreshPoints(series.points);\n }\n };\n /**\n * To refresh points label region and visible\n * @private\n */\n AccumulationChart.prototype.refreshPoints = function (points) {\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n point.labelPosition = null;\n point.labelRegion = null;\n point.labelVisible = true;\n }\n };\n /**\n * To get Module name\n * @private\n */\n AccumulationChart.prototype.getModuleName = function () {\n return 'accumulationchart';\n };\n /**\n * To destroy the accumulationcharts\n * @private\n */\n AccumulationChart.prototype.destroy = function () {\n this.unWireEvents();\n _super.prototype.destroy.call(this);\n this.element.classList.remove('e-accumulationchart');\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n AccumulationChart.prototype.requiredModules = function () {\n var modules = [];\n var enableAnnotation = false;\n modules.push({\n member: this.type + 'Series',\n args: [this]\n });\n if (this.legendSettings.visible) {\n modules.push({\n member: 'AccumulationLegend',\n args: [this]\n });\n }\n if (this.findDatalabelVisibility()) {\n modules.push({\n member: 'AccumulationDataLabel',\n args: [this]\n });\n }\n if (this.tooltip.enable) {\n modules.push({\n member: 'AccumulationTooltip',\n args: [this]\n });\n }\n if (this.selectionMode !== 'None') {\n modules.push({\n member: 'AccumulationSelection',\n args: [this]\n });\n }\n enableAnnotation = this.annotations.some(function (value) {\n return (value.content !== null);\n });\n if (enableAnnotation) {\n modules.push({\n member: 'Annotation',\n args: [this]\n });\n }\n return modules;\n };\n /**\n * To find datalabel visibility in series\n */\n AccumulationChart.prototype.findDatalabelVisibility = function () {\n for (var _i = 0, _a = this.series; _i < _a.length; _i++) {\n var series = _a[_i];\n if (series.dataLabel.visible) {\n return true;\n }\n }\n return false;\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n AccumulationChart.prototype.getPersistData = function () {\n return '';\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n AccumulationChart.prototype.onPropertyChanged = function (newProp, oldProp) {\n var update = {\n refreshElements: false, refreshBounds: false\n };\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'theme':\n this.animateSeries = true;\n break;\n case 'title':\n case 'height':\n case 'width':\n case 'margin':\n update.refreshBounds = true;\n break;\n case 'titleStyle':\n if (newProp.titleStyle && (newProp.titleStyle.size || newProp.titleStyle.textOverflow)) {\n update.refreshBounds = true;\n }\n else {\n update.refreshElements = true;\n }\n break;\n case 'legendSettings':\n update.refreshBounds = true;\n update.refreshElements = true;\n break;\n case 'locale':\n case 'currencyCode':\n _super.prototype.refresh.call(this);\n break;\n case 'background':\n case 'border':\n case 'annotations':\n case 'enableSmartLabels':\n update.refreshElements = true;\n break;\n case 'isMultiSelect':\n case 'selectedDataIndexes':\n case 'selectionMode':\n if (this.accumulationSelectionModule) {\n if (isNullOrUndefined(this.accumulationSelectionModule.selectedDataIndexes)) {\n this.accumulationSelectionModule.invokeSelection(this);\n }\n else {\n this.accumulationSelectionModule.redrawSelection(this, oldProp.selectionMode);\n }\n }\n break;\n }\n }\n if (!update.refreshBounds && update.refreshElements) {\n this.createPieSvg();\n this.renderElements();\n }\n else if (update.refreshBounds) {\n this.refreshSeries();\n this.createPieSvg();\n this.calculateBounds();\n this.renderElements();\n }\n };\n __decorate([\n Property(null)\n ], AccumulationChart.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], AccumulationChart.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], AccumulationChart.prototype, \"title\", void 0);\n __decorate([\n Complex(Theme.chartTitleFont, Font)\n ], AccumulationChart.prototype, \"titleStyle\", void 0);\n __decorate([\n Complex({}, LegendSettings)\n ], AccumulationChart.prototype, \"legendSettings\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], AccumulationChart.prototype, \"tooltip\", void 0);\n __decorate([\n Property('None')\n ], AccumulationChart.prototype, \"selectionMode\", void 0);\n __decorate([\n Property(false)\n ], AccumulationChart.prototype, \"isMultiSelect\", void 0);\n __decorate([\n Collection([], Indexes)\n ], AccumulationChart.prototype, \"selectedDataIndexes\", void 0);\n __decorate([\n Complex({}, Margin)\n ], AccumulationChart.prototype, \"margin\", void 0);\n __decorate([\n Property(true)\n ], AccumulationChart.prototype, \"enableSmartLabels\", void 0);\n __decorate([\n Complex({ color: '#DDDDDD', width: 0 }, Border)\n ], AccumulationChart.prototype, \"border\", void 0);\n __decorate([\n Property(null)\n ], AccumulationChart.prototype, \"background\", void 0);\n __decorate([\n Collection([{}], AccumulationSeries)\n ], AccumulationChart.prototype, \"series\", void 0);\n __decorate([\n Collection([{}], AccumulationAnnotationSettings)\n ], AccumulationChart.prototype, \"annotations\", void 0);\n __decorate([\n Property('Material')\n ], AccumulationChart.prototype, \"theme\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"seriesRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"legendRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"textRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"pointRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"annotationRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseMove\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseClick\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"pointClick\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"pointMove\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseDown\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseLeave\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseUp\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"resized\", void 0);\n __decorate([\n Property('USD')\n ], AccumulationChart.prototype, \"currencyCode\", void 0);\n AccumulationChart = __decorate([\n NotifyPropertyChanges\n ], AccumulationChart);\n return AccumulationChart;\n}(Component));\nexport { AccumulationChart };\n","/**\n * Defines the common behavior of funnel and pyramid series\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Size, stringToNumber, Rect } from '../../common/utils/helper';\nimport { AccumulationBase } from './accumulation-base';\n/**\n * TriangularBase is used to calculate base functions for funnel/pyramid series.\n */\nvar TriangularBase = /** @class */ (function (_super) {\n __extends(TriangularBase, _super);\n function TriangularBase() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Initializes the properties of funnel/pyramid series\n * @private\n */\n TriangularBase.prototype.initProperties = function (chart, series) {\n var actualChartArea = chart.initialClipRect;\n series.triangleSize = new Size(stringToNumber(series.width, actualChartArea.width), stringToNumber(series.height, actualChartArea.height));\n series.neckSize = new Size(stringToNumber(series.neckWidth, actualChartArea.width), stringToNumber(series.neckHeight, actualChartArea.height));\n this.defaultLabelBound(series, series.dataLabel.visible, series.dataLabel.position, chart);\n if (series.explodeOffset === '30%') {\n series.explodeOffset = '25px';\n }\n chart.explodeDistance = stringToNumber(series.explodeOffset, actualChartArea.width);\n var points = series.points;\n this.initializeSizeRatio(points, series);\n };\n /**\n * Initializes the size of the pyramid/funnel segments\n * @private\n */\n TriangularBase.prototype.initializeSizeRatio = function (points, series, reverse) {\n if (reverse === void 0) { reverse = false; }\n var sumOfPoints = series.sumOfPoints;\n //Limiting the ratio within the range of 0 to 1\n var gapRatio = Math.min(Math.max(series.gapRatio, 0), 1);\n //% equivalence of a value 1\n var coEff = 1 / (sumOfPoints * (1 + gapRatio / (1 - gapRatio)));\n var spacing = gapRatio / (points.length - 1);\n var y = 0;\n //starting from bottom\n for (var i = points.length - 1; i >= 0; i--) {\n var index = reverse ? points.length - 1 - i : i;\n if (points[index].visible) {\n var height = coEff * points[index].y;\n points[index].yRatio = y;\n points[index].heightRatio = height;\n y += height + spacing;\n }\n }\n };\n /**\n * Marks the label location from the set of points that forms a pyramid/funnel segment\n * @private\n */\n TriangularBase.prototype.setLabelLocation = function (series, point, points) {\n var last = points.length - 1;\n var bottom = series.type === 'Funnel' ? points.length - 2 : points.length - 1;\n var x = (points[0].x + points[bottom].x) / 2;\n var right = (points[1].x + points[bottom - 1].x) / 2;\n point.region = new Rect(x, points[0].y, right - x, points[bottom].y - points[0].y);\n point.symbolLocation = {\n x: point.region.x + point.region.width / 2,\n y: point.region.y + point.region.height / 2\n };\n point.labelOffset = {\n x: point.symbolLocation.x - (points[0].x + points[last].x) / 2,\n y: point.symbolLocation.y - (points[0].y + points[last].y) / 2\n };\n };\n /**\n * Finds the path to connect the list of points\n * @private\n */\n TriangularBase.prototype.findPath = function (locations) {\n var path = 'M';\n for (var i = 0; i < locations.length; i++) {\n path += locations[i].x + ' ' + locations[i].y;\n if (i !== locations.length - 1) {\n path += ' L';\n }\n }\n return path;\n };\n /**\n * To calculate data-label bounds\n * @private\n */\n TriangularBase.prototype.defaultLabelBound = function (series, visible, position, chart) {\n var x = (chart.initialClipRect.width - series.triangleSize.width) / 2;\n var y = (chart.initialClipRect.height - series.triangleSize.height) / 2;\n var accumulationBound = new Rect(x, y, series.triangleSize.width, series.triangleSize.height);\n series.labelBound = new Rect(accumulationBound.x, accumulationBound.y, accumulationBound.width + accumulationBound.x, accumulationBound.height + accumulationBound.y);\n series.accumulationBound = accumulationBound;\n if (visible && position === 'Outside') {\n series.labelBound = new Rect(Infinity, Infinity, -Infinity, -Infinity);\n }\n };\n return TriangularBase;\n}(AccumulationBase));\nexport { TriangularBase };\n","/**\n * Defines the behavior of a funnel series\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { TriangularBase } from './triangular-base';\n/**\n * FunnelSeries module used to render `Funnel` Series.\n */\nvar FunnelSeries = /** @class */ (function (_super) {\n __extends(FunnelSeries, _super);\n function FunnelSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the path of a funnel segment\n */\n FunnelSeries.prototype.getSegmentData = function (point, series, chart) {\n var lineWidth;\n var topRadius;\n var bottomRadius;\n var endTop;\n var endBottom;\n var minRadius;\n var endMin;\n var bottomY;\n var area = series.triangleSize;\n var offset = 0;\n var extraSpace = (chart.initialClipRect.width - series.triangleSize.width) / 2;\n var emptySpaceAtLeft = extraSpace + chart.initialClipRect.x;\n var seriesTop = chart.initialClipRect.y + (chart.initialClipRect.height - area.height) / 2;\n //defines the top and bottom of a segment\n var top = point.yRatio * area.height;\n var bottom = top + point.heightRatio * area.height;\n var neckSize = series.neckSize;\n lineWidth = neckSize.width + (area.width - neckSize.width) * ((area.height - neckSize.height - top) /\n (area.height - neckSize.height));\n topRadius = (area.width / 2) - lineWidth / 2;\n //Calculating the middle slope change and bottom\n endTop = topRadius + lineWidth;\n if (bottom > area.height - neckSize.height || area.height === neckSize.height) {\n lineWidth = neckSize.width;\n }\n else {\n lineWidth = neckSize.width + (area.width - neckSize.width) *\n ((area.height - neckSize.height - bottom) / (area.height - neckSize.height));\n }\n bottomRadius = (area.width / 2) - (lineWidth / 2);\n endBottom = bottomRadius + lineWidth;\n if (top >= area.height - neckSize.height) {\n topRadius = bottomRadius = minRadius = (area.width / 2) - neckSize.width / 2;\n endTop = endBottom = endMin = (area.width / 2) + neckSize.width / 2;\n }\n else if (bottom > (area.height - neckSize.height)) {\n minRadius = bottomRadius = (area.width / 2) - lineWidth / 2;\n endMin = endBottom = minRadius + lineWidth;\n bottomY = area.height - neckSize.height;\n }\n var points = [];\n top += seriesTop;\n bottom += seriesTop;\n bottomY += seriesTop;\n var line1 = { x: emptySpaceAtLeft + offset + topRadius, y: top };\n var line2 = { x: emptySpaceAtLeft + offset + endTop, y: top };\n var line4 = { x: emptySpaceAtLeft + offset + endBottom, y: bottom };\n var line5 = { x: emptySpaceAtLeft + offset + bottomRadius, y: bottom };\n var line3 = { x: emptySpaceAtLeft + offset + endBottom, y: bottom };\n var line6 = { x: emptySpaceAtLeft + offset + bottomRadius, y: bottom };\n if (bottomY) {\n line3 = { x: emptySpaceAtLeft + offset + endMin, y: bottomY };\n line6 = { x: emptySpaceAtLeft + offset + minRadius, y: bottomY };\n }\n var polygon = [line1, line2, line3, line4, line5, line6];\n this.setLabelLocation(series, point, polygon);\n var direction = this.findPath(polygon);\n return direction;\n };\n /**\n * Renders a funnel segment\n * @private\n */\n FunnelSeries.prototype.renderPoint = function (point, series, chart, options) {\n var direction = this.getSegmentData(point, series, chart);\n point.midAngle = 0;\n options.d = direction;\n };\n /**\n * To get the module name of the funnel series.\n */\n FunnelSeries.prototype.getModuleName = function () {\n return 'FunnelSeries';\n };\n /**\n * To destroy the funnel series.\n * @return {void}\n * @private\n */\n FunnelSeries.prototype.destroy = function (accumulation) {\n /**\n * Destroys the funnel series\n */\n };\n return FunnelSeries;\n}(TriangularBase));\nexport { FunnelSeries };\n","/**\n * Defines the behavior of a pyramid series\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { TriangularBase } from './triangular-base';\n/**\n * PyramidSeries module used to render `Pyramid` Series.\n */\nvar PyramidSeries = /** @class */ (function (_super) {\n __extends(PyramidSeries, _super);\n function PyramidSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Defines the path of a pyramid segment\n */\n PyramidSeries.prototype.getSegmentData = function (point, series, chart) {\n var area = series.triangleSize;\n //top of th series\n var seriesTop = chart.initialClipRect.y + (chart.initialClipRect.height - area.height) / 2;\n var points = [];\n //consider, if the point is exploded\n var offset = 0;\n var extraSpace = (chart.initialClipRect.width - series.triangleSize.width) / 2;\n var emptySpaceAtLeft = extraSpace + chart.initialClipRect.x;\n //top and bottom\n var top = point.yRatio;\n var bottom = point.yRatio + point.heightRatio;\n //width of the top and bottom edge\n var topRadius = 0.5 * (1 - point.yRatio);\n var bottomRadius = 0.5 * (1 - bottom);\n top += seriesTop / area.height;\n bottom += seriesTop / area.height;\n var line1 = {\n x: emptySpaceAtLeft + offset + topRadius * area.width,\n y: top * area.height\n };\n var line2 = {\n x: emptySpaceAtLeft + offset + (1 - topRadius) * area.width,\n y: top * area.height\n };\n var line3 = {\n x: emptySpaceAtLeft + offset + (1 - bottomRadius) * area.width,\n y: bottom * area.height\n };\n var line4 = {\n x: emptySpaceAtLeft + offset + bottomRadius * area.width,\n y: bottom * area.height\n };\n var polygon = [line1, line2, line3, line4];\n this.setLabelLocation(series, point, polygon);\n var direction = this.findPath(polygon);\n return direction;\n };\n /**\n * Initializes the size of the pyramid segments\n * @private\n */\n PyramidSeries.prototype.initializeSizeRatio = function (points, series) {\n if (series.pyramidMode === 'Linear') {\n _super.prototype.initializeSizeRatio.call(this, points, series, true);\n }\n else {\n this.calculateSurfaceSegments(series);\n }\n };\n /**\n * Defines the size of the pyramid segments, the surface of that will reflect the values\n */\n PyramidSeries.prototype.calculateSurfaceSegments = function (series) {\n var count = series.points.length;\n var sumOfValues = series.sumOfPoints;\n var yRatio = 0;\n var y = [];\n var height = [];\n var gapRatio = Math.min(0, Math.max(series.gapRatio, 1));\n var gapHeight = gapRatio / (count - 1);\n var preSum = this.getSurfaceHeight(0, sumOfValues);\n var currY = 0;\n for (var i = 0; i < count; i++) {\n if (series.points[i].visible) {\n y[i] = currY;\n height[i] = this.getSurfaceHeight(currY, Math.abs(series.points[i].y));\n currY += height[i] + gapHeight * preSum;\n }\n }\n var coef = 1 / (currY - gapHeight * preSum);\n for (var i = 0; i < count; i++) {\n if (series.points[i].visible) {\n series.points[i].yRatio = coef * y[i];\n series.points[i].heightRatio = coef * height[i];\n }\n }\n };\n /**\n * Finds the height of pyramid segment\n */\n PyramidSeries.prototype.getSurfaceHeight = function (y, surface) {\n var result = this.solveQuadraticEquation(1, 2 * y, -surface);\n return result;\n };\n /**\n * Solves quadratic equation\n */\n PyramidSeries.prototype.solveQuadraticEquation = function (a, b, c) {\n var root1;\n var root2;\n var d = b * b - 4 * a * c;\n if (d >= 0) {\n var sd = Math.sqrt(d);\n root1 = (-b - sd) / (2 * a);\n root2 = (-b + sd) / (2 * a);\n return Math.max(root1, root2);\n }\n return 0;\n };\n /**\n * Renders a pyramid segment\n */\n PyramidSeries.prototype.renderPoint = function (point, series, chart, options) {\n var direction = this.getSegmentData(point, series, chart);\n point.midAngle = 0;\n options.d = direction;\n };\n /**\n * To get the module name of the Pyramid series.\n */\n PyramidSeries.prototype.getModuleName = function () {\n return 'PyramidSeries';\n };\n /**\n * To destroy the pyramid series\n * @return {void}\n * @private\n */\n PyramidSeries.prototype.destroy = function (accumulation) {\n /**\n * Destroys the pyramid series\n */\n };\n return PyramidSeries;\n}(TriangularBase));\nexport { PyramidSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * AccumulationChart legend\n */\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { pointByIndex } from '../model/acc-base';\nimport { BaseLegend, LegendOptions } from '../../common/legend/legend';\nimport { Rect, measureText, textTrim } from '../../common/utils/helper';\n/**\n * AccumulationLegend module used to render `Legend` for Accumulation chart.\n */\nvar AccumulationLegend = /** @class */ (function (_super) {\n __extends(AccumulationLegend, _super);\n /**\n * Constructor for Accumulation Legend.\n * @param chart\n */\n function AccumulationLegend(chart) {\n var _this = _super.call(this, chart) || this;\n _this.library = _this;\n _this.titleRect = new Rect(0, chart.margin.top, 0, 0);\n return _this;\n }\n /**\n * Get the legend options.\n * @return {void}\n * @private\n */\n AccumulationLegend.prototype.getLegendOptions = function (chart, series) {\n this.legendCollections = [];\n for (var i = 0; i < 1; i++) {\n var seriesType = series[i].type;\n if (seriesType === 'Pie' || seriesType === 'Doughnut') {\n seriesType = (series[i].innerRadius !== '0' && series[i].innerRadius !== '0%') ?\n 'Doughnut' : 'Pie';\n }\n for (var _i = 0, _a = series[i].points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (!isNullOrUndefined(point.x) && !isNullOrUndefined(point.y)) {\n this.legendCollections.push(new LegendOptions(point.x.toString(), point.color, series[i].legendShape, point.visible, seriesType, null, null, point.index, series[i].index));\n }\n }\n }\n };\n /**\n * To find legend bounds for accumulation chart.\n * @private\n */\n AccumulationLegend.prototype.getLegendBounds = function (availableSize, legendBounds, legend) {\n var extraWidth = 0;\n var extraHeight = 0;\n var padding = legend.padding;\n if (!this.isVertical) {\n extraHeight = !legend.height ? ((availableSize.height / 100) * 5) : 0;\n }\n else {\n extraWidth = !legend.width ? ((availableSize.width / 100) * 5) : 0;\n }\n legendBounds.width += extraWidth;\n legendBounds.height += extraHeight;\n var shapePadding = legend.shapePadding;\n var maximumWidth = 0;\n var shapeWidth = legend.shapeWidth;\n var rowWidth = 0;\n var rowCount = 0;\n var columnWidth = [];\n var columnHeight = 0;\n var legendWidth = 0;\n this.maxItemHeight = Math.max(measureText('MeasureText', legend.textStyle).height, legend.shapeHeight);\n var legendEventArgs;\n var render = false;\n for (var _i = 0, _a = this.legendCollections; _i < _a.length; _i++) {\n var legendOption = _a[_i];\n legendEventArgs = { fill: legendOption.fill, text: legendOption.text, shape: legendOption.shape,\n name: 'legendRender', cancel: false };\n this.chart.trigger('legendRender', legendEventArgs);\n legendOption.render = !legendEventArgs.cancel;\n legendOption.text = legendEventArgs.text;\n legendOption.fill = legendEventArgs.fill;\n legendOption.shape = legendEventArgs.shape;\n legendOption.textSize = measureText(legendOption.text, legend.textStyle);\n if (legendOption.render && legendOption.text !== '') {\n render = true;\n legendWidth = shapeWidth + shapePadding + legendOption.textSize.width + padding;\n if (this.isVertical) {\n ++rowCount;\n columnHeight = (rowCount * (this.maxItemHeight + padding)) + padding;\n if ((rowCount * (this.maxItemHeight + padding)) + padding > legendBounds.height) {\n columnHeight = Math.max(columnHeight, (rowCount * (this.maxItemHeight + padding)) + padding);\n rowWidth = rowWidth + maximumWidth;\n columnWidth.push(maximumWidth);\n this.totalPages = Math.max(rowCount, this.totalPages || 1);\n maximumWidth = 0;\n rowCount = 1;\n }\n maximumWidth = Math.max(legendWidth, maximumWidth);\n }\n else {\n rowWidth = rowWidth + legendWidth;\n if (legendBounds.width < (padding + rowWidth)) {\n maximumWidth = Math.max(maximumWidth, (rowWidth + padding - legendWidth));\n if (rowCount === 0 && (legendWidth !== rowWidth)) {\n rowCount = 1;\n }\n rowWidth = legendWidth;\n rowCount++;\n columnHeight = (rowCount * (this.maxItemHeight + padding)) + padding;\n }\n }\n }\n }\n if (this.isVertical) {\n rowWidth = rowWidth + maximumWidth;\n this.isPaging = legendBounds.width < (rowWidth + padding);\n columnHeight = Math.max(columnHeight, ((this.totalPages || 1) * (this.maxItemHeight + padding)) + padding);\n this.isPaging = this.isPaging && (this.totalPages > 1);\n if (columnWidth[columnWidth.length - 1] !== maximumWidth) {\n columnWidth.push(maximumWidth);\n }\n }\n else {\n this.isPaging = legendBounds.height < columnHeight;\n this.totalPages = this.totalRowCount = rowCount;\n columnHeight = Math.max(columnHeight, (this.maxItemHeight + padding) + padding);\n }\n this.maxColumns = 0; // initialization for max columns\n var width = this.isVertical ? this.getMaxColumn(columnWidth, legendBounds.width, padding, rowWidth + padding) :\n Math.max(rowWidth + padding, maximumWidth);\n if (render) {\n this.setBounds(width, columnHeight, legend, legendBounds);\n }\n else {\n this.setBounds(0, 0, legend, legendBounds);\n }\n };\n /**\n * To find maximum column size for legend\n */\n AccumulationLegend.prototype.getMaxColumn = function (columns, width, padding, rowWidth) {\n var maxPageColumn = padding;\n this.maxColumnWidth = Math.max.apply(null, columns);\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var column = columns_1[_i];\n maxPageColumn += this.maxColumnWidth;\n this.maxColumns++;\n if (maxPageColumn + padding > width) {\n maxPageColumn -= this.maxColumnWidth;\n this.maxColumns--;\n break;\n }\n }\n this.isPaging = (maxPageColumn < rowWidth) && (this.totalPages > 1);\n if (maxPageColumn === padding) {\n maxPageColumn = width;\n }\n this.maxColumns = Math.max(1, this.maxColumns);\n this.maxWidth = maxPageColumn;\n return maxPageColumn;\n };\n /**\n * To find available width from legend x position.\n */\n AccumulationLegend.prototype.getAvailWidth = function (tx, width, legendX) {\n if (this.isVertical) {\n width = this.maxWidth;\n }\n return width - ((this.legend.padding * 2) + this.legend.shapeWidth + this.legend.shapePadding);\n };\n /**\n * To find legend rendering locations from legend options.\n * @private\n */\n AccumulationLegend.prototype.getRenderPoint = function (legendOption, start, textPadding, prevLegend, rect, count, firstLegend) {\n var padding = this.legend.padding;\n if (this.isVertical) {\n if (count === firstLegend || (prevLegend.location.y + (this.maxItemHeight * 1.5) + (padding * 2) > rect.y + rect.height)) {\n legendOption.location.x = prevLegend.location.x + ((count === firstLegend) ? 0 : this.maxColumnWidth);\n legendOption.location.y = start.y;\n this.pageXCollections.push(legendOption.location.x - (this.legend.shapeWidth / 2) - padding);\n this.totalPages++;\n }\n else {\n legendOption.location.x = prevLegend.location.x;\n legendOption.location.y = prevLegend.location.y + this.maxItemHeight + padding;\n }\n }\n else {\n var previousBound = (prevLegend.location.x + textPadding + prevLegend.textSize.width);\n if ((previousBound + (legendOption.textSize.width + textPadding)) > (rect.x + rect.width + this.legend.shapeWidth / 2)) {\n legendOption.location.y = (count === firstLegend) ? prevLegend.location.y :\n prevLegend.location.y + this.maxItemHeight + padding;\n legendOption.location.x = start.x;\n }\n else {\n legendOption.location.y = prevLegend.location.y;\n legendOption.location.x = (count === firstLegend) ? prevLegend.location.x : previousBound;\n }\n this.totalPages = this.totalRowCount;\n }\n var availablewidth = this.getAvailWidth(legendOption.location.x, this.legendBounds.width, this.legendBounds.x);\n legendOption.text = textTrim(+availablewidth.toFixed(4), legendOption.text, this.legend.textStyle);\n };\n /**\n * finding the smart legend place according to positions.\n * @return {void}\n * @private\n */\n AccumulationLegend.prototype.getSmartLegendLocation = function (labelBound, legendBound, margin) {\n var space;\n switch (this.position) {\n case 'Left':\n space = ((labelBound.x - legendBound.width) - margin.left) / 2;\n legendBound.x = (labelBound.x - legendBound.width) < margin.left ? legendBound.x :\n (labelBound.x - legendBound.width) - space;\n break;\n case 'Right':\n space = ((this.chart.availableSize.width - margin.right) - (labelBound.x + labelBound.width + legendBound.width)) / 2;\n legendBound.x = (labelBound.x + labelBound.width + legendBound.width) > (this.chart.availableSize.width - margin.right) ?\n legendBound.x : (labelBound.x + labelBound.width + space);\n break;\n case 'Top':\n this.getTitleRect(this.chart);\n space = ((labelBound.y - legendBound.height) - (this.titleRect.y + this.titleRect.height)) / 2;\n legendBound.y = (labelBound.y - legendBound.height) < margin.top ? legendBound.y :\n (labelBound.y - legendBound.height) - space;\n break;\n case 'Bottom':\n space = ((this.chart.availableSize.height - margin.bottom) - (labelBound.y + labelBound.height + legendBound.height)) / 2;\n legendBound.y = labelBound.y + labelBound.height + legendBound.height > (this.chart.availableSize.height - margin.bottom) ?\n legendBound.y : (labelBound.y + labelBound.height) + space;\n break;\n }\n };\n /**\n * To get title rect.\n */\n AccumulationLegend.prototype.getTitleRect = function (accumulation) {\n if (!accumulation.title) {\n return null;\n }\n var titleSize = measureText(accumulation.title, accumulation.titleStyle);\n this.titleRect = new Rect(accumulation.availableSize.width / 2 - titleSize.width / 2, accumulation.margin.top, titleSize.width, titleSize.height);\n };\n /**\n * To get legend by index\n */\n AccumulationLegend.prototype.legendByIndex = function (index, legendCollections) {\n for (var _i = 0, legendCollections_1 = legendCollections; _i < legendCollections_1.length; _i++) {\n var legend = legendCollections_1[_i];\n if (legend.pointIndex === index) {\n return legend;\n }\n }\n return null;\n };\n /**\n * To show or hide the legend on clicking the legend.\n * @return {void}\n */\n AccumulationLegend.prototype.click = function (event) {\n var targetId = event.target.id;\n var legendItemsId = [this.legendID + '_text_', this.legendID + '_shape_',\n this.legendID + '_shape_marker_'];\n var selectedDataIndexes = [];\n if (this.chart.accumulationSelectionModule) {\n selectedDataIndexes = extend([], this.chart.accumulationSelectionModule.selectedDataIndexes, null, true);\n }\n for (var _i = 0, legendItemsId_1 = legendItemsId; _i < legendItemsId_1.length; _i++) {\n var id = legendItemsId_1[_i];\n if (targetId.indexOf(id) > -1) {\n var pointIndex = parseInt(targetId.split(id)[1], 10);\n var currentSeries = this.chart.visibleSeries[0];\n var point = pointByIndex(pointIndex, currentSeries.points);\n var legendOption = this.legendByIndex(pointIndex, this.legendCollections);\n if (this.chart.legendSettings.toggleVisibility) {\n point.visible = !point.visible;\n legendOption.visible = point.visible;\n this.chart.removeSvg();\n if (point.visible) {\n currentSeries.sumOfPoints += point.y;\n }\n else {\n currentSeries.sumOfPoints -= point.y;\n }\n this.chart.refreshPoints(currentSeries.points);\n this.chart.renderElements();\n }\n else if (this.chart.accumulationSelectionModule) {\n this.chart.accumulationSelectionModule.legendSelection(this.chart, 0, pointIndex);\n }\n }\n }\n if (targetId.indexOf(this.legendID + '_pageup') > -1) {\n this.changePage(event, true);\n }\n else if (targetId.indexOf(this.legendID + '_pagedown') > -1) {\n this.changePage(event, false);\n }\n };\n /**\n * Get module name\n */\n AccumulationLegend.prototype.getModuleName = function () {\n return 'AccumulationLegend';\n };\n /**\n * To destroy the Legend.\n * @return {void}\n * @private\n */\n AccumulationLegend.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n return AccumulationLegend;\n}(BaseLegend));\nexport { AccumulationLegend };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * AccumulationChart DataLabel module file\n */\nimport { extend, createElement } from '@syncfusion/ej2-base';\nimport { ChartLocation, degreeToLocation, Rect, isOverlap, stringToNumber, getAngle, TextOption } from '../../common/utils/helper';\nimport { textTrim, subtractThickness, Thickness, getElement } from '../../common/utils/helper';\nimport { removeElement, measureText, RectOption, textElement, showTooltip } from '../../common/utils/helper';\nimport { PathOption, colorNameToHex, convertHexToColor, containsRect } from '../../common/utils/helper';\nimport { getSeriesFromIndex } from '../model/acc-base';\nimport { textRender } from '../../common/model/constants';\nimport { getFontStyle, createTemplate, measureElementRect, templateAnimate } from '../../common/utils/helper';\nimport { AccumulationBase } from './accumulation-base';\n/**\n * AccumulationDataLabel module used to render `dataLabel`.\n */\nvar AccumulationDataLabel = /** @class */ (function (_super) {\n __extends(AccumulationDataLabel, _super);\n function AccumulationDataLabel(accumulation) {\n var _this = _super.call(this, accumulation) || this;\n _this.id = accumulation.element.id + '_datalabel_Series_';\n if (accumulation.title) {\n var titleSize = measureText(accumulation.title, accumulation.titleStyle);\n _this.titleRect = new Rect(accumulation.availableSize.width / 2 - titleSize.width / 2, accumulation.margin.top, titleSize.width, titleSize.height);\n }\n return _this;\n }\n /**\n * Method to get datalabel text location.\n * @private\n */\n AccumulationDataLabel.prototype.getDataLabelPosition = function (point, dataLabel, textSize, points, parent, id) {\n var radius = this.isCircular() ? this.labelRadius : this.getLabelDistance(point, dataLabel);\n this.getLabelRegion(point, dataLabel.position, textSize, radius, this.marginValue);\n point.labelAngle = point.midAngle;\n point.labelPosition = dataLabel.position;\n if (this.accumulation.enableSmartLabels) {\n this.getSmartLabel(point, dataLabel, textSize, points, parent, id);\n }\n };\n /**\n * Method to get datalabel bound.\n */\n AccumulationDataLabel.prototype.getLabelRegion = function (point, position, textSize, labelRadius, margin, endAngle) {\n if (endAngle === void 0) { endAngle = 0; }\n var labelAngle = endAngle || point.midAngle;\n var space = 10;\n var location = degreeToLocation(labelAngle, labelRadius, this.isCircular() ? this.center :\n this.getLabelLocation(point, position));\n location.y = (position === 'Inside') ? (location.y - textSize.height / 2) : location.y;\n location.x = (position === 'Inside') ? (location.x - textSize.width / 2) : location.x;\n point.labelRegion = new Rect(location.x, location.y, textSize.width + (margin * 2), textSize.height + (margin * 2));\n if (position === 'Outside') {\n point.labelRegion.y -= point.labelRegion.height / 2;\n if (labelAngle >= 90 && labelAngle <= 270) {\n point.labelRegion.x -= (point.labelRegion.width + space);\n }\n else {\n point.labelRegion.x += space;\n }\n }\n };\n /**\n * Method to get datalabel smart position.\n */\n AccumulationDataLabel.prototype.getSmartLabel = function (point, dataLabel, textSize, points, parent, id) {\n var circular = this.isCircular();\n var labelRadius = circular ? this.radius : this.getLabelDistance(point, dataLabel);\n var connectorLength = circular ? (dataLabel.connectorStyle.length || '4%') :\n '0px';\n labelRadius += stringToNumber(connectorLength, labelRadius);\n var previousPoint = this.findPreviousPoint(points, point.index, point.labelPosition);\n if (dataLabel.position === 'Inside') {\n if (previousPoint && previousPoint.labelRegion && (isOverlap(point.labelRegion, previousPoint.labelRegion)\n || this.isOverlapping(point, points)) || !circular && !containsRect(point.region, point.labelRegion)) {\n point.labelPosition = 'Outside';\n if (!circular) {\n labelRadius = this.getLabelDistance(point, dataLabel);\n }\n this.getLabelRegion(point, point.labelPosition, textSize, labelRadius, this.marginValue);\n previousPoint = this.findPreviousPoint(points, point.index, point.labelPosition);\n if (previousPoint && (isOverlap(point.labelRegion, previousPoint.labelRegion) ||\n this.isConnectorLineOverlapping(point, previousPoint))) {\n this.setOuterSmartLabel(previousPoint, point, dataLabel.border.width, labelRadius, textSize, this.marginValue);\n }\n }\n }\n else {\n if (previousPoint && previousPoint.labelRegion && (isOverlap(point.labelRegion, previousPoint.labelRegion)\n || this.isOverlapping(point, points) || this.isConnectorLineOverlapping(point, previousPoint))) {\n this.setOuterSmartLabel(previousPoint, point, dataLabel.border.width, labelRadius, textSize, this.marginValue);\n }\n }\n if (this.isOverlapping(point, points) || (this.titleRect && point.labelRegion && isOverlap(point.labelRegion, this.titleRect))) {\n this.setPointVisibileFalse(point);\n }\n if (this.accumulation.accumulationLegendModule && point.labelVisible && point.labelRegion) {\n var rect = this.accumulation.accumulationLegendModule.legendBounds;\n var padding = this.accumulation.legendSettings.border.width / 2;\n this.textTrimming(point, new Rect(rect.x - padding, rect.y - padding, rect.width + (2 * padding), rect.height + (2 * padding)), dataLabel.font, this.accumulation.accumulationLegendModule.position);\n }\n if (point.labelVisible && point.labelRegion) {\n var position = this.isCircular() ? (point.labelRegion.x >= this.center.x) ? 'InsideRight' : 'InsideLeft' :\n 'InsideRight';\n this.textTrimming(point, this.areaRect, dataLabel.font, position);\n }\n if (point.labelVisible && point.labelRegion && ((point.labelRegion.y + point.labelRegion.height >\n this.areaRect.y + this.areaRect.height || point.labelRegion.y < this.areaRect.y) || (point.labelRegion.x < this.areaRect.x ||\n point.labelRegion.x + point.labelRegion.width > this.areaRect.x + this.areaRect.width))) {\n this.setPointVisibileFalse(point);\n }\n };\n /**\n * To find trimmed datalabel tooltip needed.\n * @return {void}\n * @private\n */\n AccumulationDataLabel.prototype.move = function (e, x, y, isTouch) {\n var _this = this;\n if (e.target.textContent.indexOf('...') > -1) {\n var targetId = e.target.id.split(this.id);\n if (targetId.length === 2) {\n var seriesIndex = parseInt(targetId[1].split('_text_')[0], 10);\n var pointIndex = parseInt(targetId[1].split('_text_')[1], 10);\n if (!isNaN(seriesIndex) && !isNaN(pointIndex)) {\n if (isTouch) {\n removeElement(this.accumulation.element.id + '_EJ2_Datalabel_Tooltip');\n }\n var point = getSeriesFromIndex(seriesIndex, (this.accumulation).visibleSeries).points[pointIndex];\n showTooltip(point.text || point.y.toString(), x, y, this.areaRect.width, this.accumulation.element.id + '_EJ2_Datalabel_Tooltip', getElement(this.accumulation.element.id + '_Secondary_Element'));\n }\n }\n }\n else {\n removeElement(this.accumulation.element.id + '_EJ2_Datalabel_Tooltip');\n }\n if (isTouch) {\n clearTimeout(this.clearTooltip);\n this.clearTooltip = setTimeout(function () { removeElement(_this.accumulation.element.id + '_EJ2_Datalabel_Tooltip'); }, 1000);\n }\n };\n /**\n * To find previous valid label point\n */\n AccumulationDataLabel.prototype.findPreviousPoint = function (points, index, position) {\n var point = points[0];\n for (var i = index - 1; i >= 0; i--) {\n point = points[i];\n if (point.visible && point.labelVisible && point.labelRegion && point.labelPosition === position) {\n return point;\n }\n }\n return null;\n };\n /**\n * To find current point datalabel is overlapping with other points\n */\n AccumulationDataLabel.prototype.isOverlapping = function (currentPoint, points) {\n for (var i = currentPoint.index - 1; i >= 0; i--) {\n if (points[i].visible && points[i].labelVisible && points[i].labelRegion && currentPoint.labelRegion &&\n currentPoint.labelVisible && isOverlap(currentPoint.labelRegion, points[i].labelRegion)) {\n return true;\n }\n }\n return false;\n };\n /**\n * To get text trimmed while exceeds the accumulation chart area.\n */\n AccumulationDataLabel.prototype.textTrimming = function (point, rect, font, position) {\n if (isOverlap(point.labelRegion, rect)) {\n var size = point.labelRegion.width;\n if (position === 'Right') {\n size = rect.x - point.labelRegion.x;\n }\n else if (position === 'Left') {\n size = point.labelRegion.x - (rect.x + rect.width);\n if (size < 0) {\n size += point.labelRegion.width;\n point.labelRegion.x = rect.x + rect.width;\n }\n }\n else if (position === 'InsideRight') {\n size = (rect.x + rect.width) - point.labelRegion.x;\n }\n else if (position === 'InsideLeft') {\n size = (point.labelRegion.x + point.labelRegion.width) - rect.x;\n if (size < point.labelRegion.width) {\n point.labelRegion.x = rect.x;\n }\n }\n else {\n this.setPointVisibileFalse(point);\n }\n if (point.labelVisible && point.labelRegion) {\n if (size < point.labelRegion.width) {\n point.label = textTrim(size - (this.marginValue * 2), point.label, font);\n point.labelRegion.width = size;\n }\n if (point.label.length === 3 && point.label.indexOf('...') > -1) {\n this.setPointVisibileFalse(point);\n }\n }\n }\n };\n /**\n * To set point label visible and region to disable.\n */\n AccumulationDataLabel.prototype.setPointVisibileFalse = function (point) {\n point.labelVisible = false;\n point.labelRegion = null;\n };\n /**\n * To set datalabel angle position for outside labels\n */\n AccumulationDataLabel.prototype.setOuterSmartLabel = function (previousPoint, point, border, labelRadius, textsize, margin) {\n if (!this.isCircular()) {\n this.setSmartLabelForSegments(point, previousPoint, labelRadius, textsize, margin);\n }\n else {\n var labelAngle = this.getOverlappedAngle(previousPoint.labelRegion, point.labelRegion, point.midAngle, border * 2);\n this.getLabelRegion(point, 'Outside', textsize, labelRadius, margin, labelAngle);\n if (labelAngle > point.endAngle) {\n this.setPointVisibileFalse(point);\n }\n point.labelAngle = labelAngle;\n while (point.labelVisible && (isOverlap(previousPoint.labelRegion, point.labelRegion) || labelAngle <= previousPoint.labelAngle\n || this.isConnectorLineOverlapping(point, previousPoint))) {\n if (labelAngle > point.endAngle) {\n this.setPointVisibileFalse(point);\n break;\n }\n point.labelAngle = labelAngle;\n this.getLabelRegion(point, 'Outside', textsize, labelRadius, margin, labelAngle);\n labelAngle += 0.1;\n }\n }\n };\n /**\n * Sets smart label positions for funnel and pyramid series\n */\n AccumulationDataLabel.prototype.setSmartLabelForSegments = function (point, prevPoint, distance, textSize, margin) {\n var textRegion = point.labelRegion;\n //let overlapWidth: number = prevPoint.labelRegion.x + prevPoint.labelRegion.width - textRegion.x;\n var overlapHeight = this.accumulation.type === 'Funnel' ?\n prevPoint.labelRegion.y - (textRegion.y + textRegion.height) :\n point.labelRegion.y - (prevPoint.labelRegion.y + prevPoint.labelRegion.height);\n if (overlapHeight < 0) {\n point.labelRegion.y += this.accumulation.type === 'Funnel' ? overlapHeight : -overlapHeight;\n }\n };\n /**\n * To find connector line overlapping.\n */\n AccumulationDataLabel.prototype.isConnectorLineOverlapping = function (point, previous) {\n var start = this.getLabelLocation(point);\n var end = new ChartLocation(0, 0);\n this.getEdgeOfLabel(point.labelRegion, point.labelAngle, end);\n var previousstart = this.getLabelLocation(previous);\n var previousend = new ChartLocation(0, 0);\n this.getEdgeOfLabel(previous.labelRegion, previous.labelAngle, previousend);\n return this.isLineRectangleIntersect(start, end, point.labelRegion) ||\n this.isLineRectangleIntersect(start, end, previous.labelRegion) ||\n this.isLineRectangleIntersect(previousstart, previousend, point.labelRegion);\n };\n /**\n * To find two rectangle intersect\n */\n AccumulationDataLabel.prototype.isLineRectangleIntersect = function (line1, line2, rect) {\n var rectPoints = [\n new ChartLocation(Math.round(rect.x), Math.round(rect.y)),\n new ChartLocation(Math.round((rect.x + rect.width)), Math.round(rect.y)),\n new ChartLocation(Math.round((rect.x + rect.width)), Math.round((rect.y + rect.height))),\n new ChartLocation(Math.round(rect.x), Math.round((rect.y + rect.height)))\n ];\n line1.x = Math.round(line1.x);\n line1.y = Math.round(line1.y);\n line2.x = Math.round(line2.x);\n line2.y = Math.round(line2.y);\n for (var i = 0; i < rectPoints.length; i++) {\n if (this.isLinesIntersect(line1, line2, rectPoints[i], rectPoints[(i + 1) % rectPoints.length])) {\n return true;\n }\n }\n return false;\n };\n /**\n * To find two line intersect\n */\n AccumulationDataLabel.prototype.isLinesIntersect = function (point1, point2, point11, point12) {\n var a1 = point2.y - point1.y;\n var b1 = point1.x - point2.x;\n var c1 = a1 * point1.x + b1 * point1.y;\n var a2 = point12.y - point11.y;\n var b2 = point11.x - point12.x;\n var c2 = a2 * point11.x + b2 * point11.y;\n var delta = a1 * b2 - a2 * b1;\n if (delta !== 0) {\n var x = (b2 * c1 - b1 * c2) / delta;\n var y = (a1 * c2 - a2 * c1) / delta;\n var lies = Math.min(point1.x, point2.x) <= x && x <= Math.max(point1.x, point2.x);\n lies = lies && Math.min(point1.y, point2.y) <= y && y <= Math.max(point1.y, point2.y);\n lies = lies && Math.min(point11.x, point12.x) <= x && x <= Math.max(point11.x, point12.x);\n lies = lies && Math.min(point11.y, point12.y) <= y && y <= Math.max(point11.y, point12.y);\n return lies;\n }\n return false;\n };\n /**\n * To get two rectangle overlapping angles.\n */\n AccumulationDataLabel.prototype.getOverlappedAngle = function (first, second, angle, padding) {\n var x = first.x;\n if (angle >= 90 && angle <= 270) {\n second.y = first.y - (padding + second.height / 2);\n x = first.x + first.width;\n }\n else {\n second.y = first.y + first.height + padding;\n }\n return getAngle(this.center, new ChartLocation(x, second.y));\n };\n /**\n * To get connector line path\n */\n AccumulationDataLabel.prototype.getConnectorPath = function (label, point, dataLabel, end) {\n if (end === void 0) { end = 0; }\n var connector = dataLabel.connectorStyle;\n var labelRadius = this.isCircular() ? this.labelRadius : this.getLabelDistance(point, dataLabel);\n var start = this.getConnectorStartPoint(point, connector);\n var labelAngle = end || point.midAngle;\n var middle = new ChartLocation(0, 0);\n var endPoint = this.getEdgeOfLabel(label, labelAngle, middle, connector.width);\n if (connector.type === 'Curve') {\n if (this.isCircular()) {\n var r = labelRadius - this.radius;\n middle = degreeToLocation(labelAngle, labelRadius - (r / 2), this.center);\n return 'M ' + start.x + ' ' + start.y + ' Q' + middle.x + ',' + middle.y + ' ' + endPoint.x + ',' + endPoint.y;\n }\n else {\n return this.getPolyLinePath(start, endPoint);\n }\n }\n else {\n return 'M ' + start.x + ' ' + start.y + ' L ' + middle.x + ' ' + middle.y + ' L ' + endPoint.x + ' ' + endPoint.y;\n }\n };\n /**\n * Finds the curved path for funnel/pyramid data label connectors\n */\n AccumulationDataLabel.prototype.getPolyLinePath = function (start, end) {\n var controlPoints = [start, end];\n if (start.y === end.y) {\n return 'M ' + start.x + ' ' + start.y + ' L ' + end.x + ' ' + end.y;\n }\n var path = 'M';\n for (var i = 0; i <= 16; i++) {\n var t = i / 16;\n var points = this.getBezierPoint(t, controlPoints, 0, 2);\n path += points.x + ',' + points.y;\n if (i !== 16) {\n path += ' L';\n }\n }\n return path;\n };\n /**\n * Finds the bezier point for funnel/pyramid data label connectors\n */\n AccumulationDataLabel.prototype.getBezierPoint = function (t, controlPoints, index, count) {\n if (count === 1) {\n return controlPoints[index];\n }\n var p0 = this.getBezierPoint(t, controlPoints, index, count - 1);\n var p1 = this.getBezierPoint(t, controlPoints, index + 1, count - 1);\n var x = (p0.x) ? p0.x : p0.x;\n var y = (p0.y) ? p0.y : p0.y;\n var x1 = (p1.x) ? p1.x : p1.x;\n var y1 = (p1.y) ? p1.y : p1.y;\n var x2 = (1 - t) * x + t * x1;\n var y2 = (1 - t) * y + t * y1;\n if (p0.x) {\n return { x: x2, y: y2 };\n }\n else {\n return { x: x2, y: y2 };\n }\n };\n /**\n * To get label edges based on the center and label rect position.\n */\n AccumulationDataLabel.prototype.getEdgeOfLabel = function (labelshape, angle, middle, border) {\n if (border === void 0) { border = 1; }\n var edge = new ChartLocation(labelshape.x, labelshape.y);\n if (angle >= 90 && angle <= 270) {\n edge.x += labelshape.width + border / 2;\n edge.y += labelshape.height / 2;\n middle.x = edge.x + 10;\n middle.y = edge.y;\n }\n else {\n edge.x -= border / 2;\n edge.y += labelshape.height / 2;\n middle.x = edge.x - 10;\n middle.y = edge.y;\n }\n return edge;\n };\n /**\n * Finds the distance between the label position and the edge/center of the funnel/pyramid\n */\n AccumulationDataLabel.prototype.getLabelDistance = function (point, dataLabel) {\n if (point.labelPosition && dataLabel.position !== point.labelPosition || dataLabel.connectorStyle.length) {\n var length_1 = stringToNumber(dataLabel.connectorStyle.length || '70px', this.accumulation.initialClipRect.width);\n if (length_1 < this.accumulation.initialClipRect.width) {\n return length_1;\n }\n }\n var position = point.labelPosition || dataLabel.position;\n var series = this.accumulation.visibleSeries[0];\n var extraSpace = (this.accumulation.initialClipRect.width - series.triangleSize.width) / 2;\n var labelLocation;\n switch (position) {\n case 'Inside':\n return 0;\n case 'Outside':\n labelLocation = point.symbolLocation.x + point.labelOffset.x;\n return this.accumulation.initialClipRect.width - labelLocation - extraSpace;\n }\n };\n /**\n * Finds the label position / beginning of the connector(ouside funnel labels)\n */\n AccumulationDataLabel.prototype.getLabelLocation = function (point, position) {\n if (position === void 0) { position = 'Outside'; }\n if (this.accumulation.type !== 'Pie') {\n position = point.labelPosition || position;\n var location_1 = {\n x: point.symbolLocation.x,\n y: point.symbolLocation.y - point.labelOffset.y\n };\n switch (position) {\n case 'Inside':\n location_1.y = point.region.y + point.region.height / 2;\n break;\n case 'Outside':\n location_1.x += point.labelOffset.x;\n }\n return location_1;\n }\n else {\n return degreeToLocation(point.midAngle, this.radius, this.center);\n }\n };\n /**\n * Finds the beginning of connector line\n */\n AccumulationDataLabel.prototype.getConnectorStartPoint = function (point, connector) {\n return this.isCircular() ? degreeToLocation(point.midAngle, this.radius - connector.width, this.center) :\n this.getLabelLocation(point);\n };\n /**\n * To find area rect based on margin, available size.\n * @private\n */\n AccumulationDataLabel.prototype.findAreaRect = function () {\n this.areaRect = new Rect(0, 0, this.accumulation.availableSize.width, this.accumulation.availableSize.height);\n var margin = this.accumulation.margin;\n subtractThickness(this.areaRect, new Thickness(margin.left, margin.right, margin.top, margin.bottom));\n };\n /**\n * To render the data labels from series points.\n */\n AccumulationDataLabel.prototype.renderDataLabel = function (point, dataLabel, parent, points, series, templateElement) {\n var id = this.accumulation.element.id + '_datalabel_Series_' + series + '_';\n var datalabelGroup = this.accumulation.renderer.createGroup({ id: id + 'g_' + point.index });\n point.label = point.originalText || point.y.toString();\n var border = { width: dataLabel.border.width, color: dataLabel.border.color };\n var argsData = {\n cancel: false, name: textRender, series: this.accumulation.visibleSeries[0], point: point,\n text: point.label, border: border, color: dataLabel.fill, template: dataLabel.template\n };\n this.accumulation.trigger(textRender, argsData);\n var isTemplate = argsData.template !== null;\n point.labelVisible = !argsData.cancel;\n point.text = point.label = argsData.text;\n this.marginValue = argsData.border.width ? (5 + argsData.border.width) : 1;\n // Template element\n var childElement = createElement('div', {\n id: this.accumulation.element.id + '_Series_' + 0 + '_DataLabel_' + point.index,\n styles: 'position: absolute;background-color:' + argsData.color + ';' +\n getFontStyle(dataLabel.font) + ';border:' + argsData.border.width + 'px solid ' + argsData.border.color + ';'\n });\n var textSize = isTemplate ? this.getTemplateSize(childElement, point, argsData) :\n measureText(point.label, dataLabel.font);\n textSize.height += 4; // 4 for calculation with padding for smart label shape\n textSize.width += 4;\n this.getDataLabelPosition(point, dataLabel, textSize, points, datalabelGroup, id);\n if (point.labelVisible) {\n this.correctLabelRegion(point.labelRegion, textSize);\n if (isTemplate) {\n this.setTemplateStyle(childElement, point, templateElement, dataLabel.font.color, argsData.color);\n }\n else {\n datalabelGroup.appendChild(this.accumulation.renderer.drawRectangle(new RectOption(id + 'shape_' + point.index, argsData.color, argsData.border, 1, point.labelRegion, dataLabel.rx, dataLabel.ry)));\n textElement(new TextOption(id + 'text_' + point.index, point.labelRegion.x + this.marginValue, point.labelRegion.y + (textSize.height * 3 / 4) + this.marginValue, 'start', point.label, '', 'auto'), dataLabel.font, dataLabel.font.color || this.getSaturatedColor(point, argsData.color), datalabelGroup);\n }\n if (this.accumulation.accumulationLegendModule && (dataLabel.position === 'Outside' || this.accumulation.enableSmartLabels)) {\n this.accumulation.visibleSeries[0].findMaxBounds(this.accumulation.visibleSeries[0].labelBound, point.labelRegion);\n }\n if (point.labelPosition === 'Outside') {\n var path = this.getConnectorPath(extend({}, point.labelRegion, null, true), point, dataLabel, point.labelAngle);\n var pathElement = this.accumulation.renderer.drawPath(new PathOption(id + 'connector_' + point.index, 'transparent', dataLabel.connectorStyle.width, dataLabel.connectorStyle.color || point.color, 1, '', path));\n datalabelGroup.appendChild(pathElement);\n }\n parent.appendChild(datalabelGroup);\n }\n };\n /**\n * To find the template element size\n * @param element\n * @param point\n * @param argsData\n */\n AccumulationDataLabel.prototype.getTemplateSize = function (element, point, argsData) {\n var clientRect;\n element = createTemplate(element, point.index, argsData.template, this.accumulation, point, this.accumulation.visibleSeries[0]);\n clientRect = measureElementRect(element);\n return { width: clientRect.width, height: clientRect.height };\n };\n /**\n * To set the template element style\n * @param childElement\n * @param point\n * @param parent\n * @param labelColor\n * @param fill\n */\n AccumulationDataLabel.prototype.setTemplateStyle = function (childElement, point, parent, labelColor, fill) {\n childElement.style.left = (point.labelRegion.x) + 'px';\n childElement.style.top = (point.labelRegion.y) + 'px';\n childElement.style.color = labelColor ||\n this.getSaturatedColor(point, fill);\n if (childElement.childElementCount) {\n parent.appendChild(childElement);\n this.doTemplateAnimation(this.accumulation, childElement);\n }\n };\n /**\n * To find saturated color for datalabel\n */\n AccumulationDataLabel.prototype.getSaturatedColor = function (point, color) {\n var saturatedColor;\n if (this.marginValue >= 1) {\n saturatedColor = color === 'transparent' ? this.getLabelBackground(point) : color;\n }\n else {\n saturatedColor = this.getLabelBackground(point);\n }\n saturatedColor = (saturatedColor === 'transparent') ? window.getComputedStyle(document.body, null).backgroundColor : saturatedColor;\n var rgbValue = convertHexToColor(colorNameToHex(saturatedColor));\n var contrast = Math.round((rgbValue.r * 299 + rgbValue.g * 587 + rgbValue.b * 114) / 1000);\n return contrast >= 128 ? 'black' : 'white';\n };\n /**\n * Animates the data label template.\n * @return {void}.\n * @private\n */\n AccumulationDataLabel.prototype.doTemplateAnimation = function (accumulation, element) {\n var series = accumulation.visibleSeries[0];\n var delay = series.animation.delay + series.animation.duration;\n if (series.animation.enable && accumulation.animateSeries) {\n element.style.visibility = 'hidden';\n templateAnimate(element, delay, 200, 'ZoomIn');\n }\n };\n /**\n * To find background color for the datalabel\n */\n AccumulationDataLabel.prototype.getLabelBackground = function (point) {\n return point.labelPosition === 'Outside' ?\n this.accumulation.background || this.accumulation.themeStyle.background : point.color;\n };\n /**\n * To correct the padding between datalabel regions.\n */\n AccumulationDataLabel.prototype.correctLabelRegion = function (labelRegion, textSize, padding) {\n if (padding === void 0) { padding = 4; }\n labelRegion.height -= padding;\n labelRegion.width -= padding;\n labelRegion.x += padding / 2;\n labelRegion.y += padding / 2;\n textSize.height -= padding;\n textSize.width -= padding;\n };\n /**\n * To get the dataLabel module name\n */\n AccumulationDataLabel.prototype.getModuleName = function () {\n return 'AccumulationDataLabel';\n };\n /**\n * To destroy the data label.\n * @return {void}\n * @private\n */\n AccumulationDataLabel.prototype.destroy = function (accumulation) {\n /**\n * Destroy method performed here\n */\n };\n return AccumulationDataLabel;\n}(AccumulationBase));\nexport { AccumulationDataLabel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * AccumulationChart Tooltip file\n */\nimport { Browser, Animation } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { AccPointData, withInBounds, ChartLocation, PathOption, drawSymbol, Size, indexFinder } from '../../common/utils/helper';\nimport { BaseTooltip } from '../../common/user-interaction/tooltip';\n/**\n * `AccumulationTooltip` module is used to render tooltip for accumulation chart.\n */\nvar AccumulationTooltip = /** @class */ (function (_super) {\n __extends(AccumulationTooltip, _super);\n function AccumulationTooltip(accumulation) {\n var _this = _super.call(this, accumulation) || this;\n _this.accumulation = accumulation;\n _this.addEventListener();\n return _this;\n }\n /**\n * @hidden\n */\n AccumulationTooltip.prototype.addEventListener = function () {\n if (this.accumulation.isDestroyed) {\n return;\n }\n this.accumulation.on(Browser.isPointer ? 'pointerleave' : 'mouseleave', this.mouseLeaveHandler, this);\n this.accumulation.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.accumulation.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n };\n AccumulationTooltip.prototype.mouseLeaveHandler = function (e) {\n this.removeTooltip(1000);\n };\n AccumulationTooltip.prototype.mouseUpHandler = function (e) {\n var control = this.accumulation;\n if (control.tooltip.enable && control.isTouch && withInBounds(control.mouseX, control.mouseY, control.initialClipRect)) {\n this.tooltip(e);\n this.removeTooltip(2000);\n }\n };\n AccumulationTooltip.prototype.mouseMoveHandler = function (e) {\n var control = this.accumulation;\n // Tooltip for chart series. \n if (control.tooltip.enable && withInBounds(control.mouseX, control.mouseY, control.initialClipRect)) {\n this.tooltip(e);\n }\n };\n /**\n * Renders the tooltip.\n * @param {PointerEvent} event - Mouse move event.\n * @return {void}\n */\n AccumulationTooltip.prototype.tooltip = function (event) {\n var isTooltip = this.getElement(this.element.id + '_tooltip');\n var tooltipDiv = this.getTooltipElement(isTooltip);\n this.renderSeriesTooltip(event, this.accumulation, !isTooltip, tooltipDiv);\n };\n AccumulationTooltip.prototype.renderSeriesTooltip = function (e, chart, isFirst, tooltipDiv) {\n var data = this.getPieData(e, chart, chart.mouseX, chart.mouseY);\n var rect = chart.initialClipRect;\n this.currentPoints = [];\n var markerSide;\n if (data.point && (!this.previousPoints[0] || (this.previousPoints[0].point !== data.point))) {\n if (this.pushData(data, isFirst, tooltipDiv, false)) {\n var text = this.getTooltipText(data, chart.tooltip);\n if (!chart.tooltip.template) {\n if (this.header !== '') {\n this.findHeader(data);\n }\n markerSide = this.renderTooltip(data, rect, data.point.symbolLocation, text, isFirst, false);\n if (markerSide) {\n this.drawMarker(markerSide.isBottom, 10);\n }\n }\n else {\n this.renderTemplate(data, rect, data.point.symbolLocation, this.getTemplateText(data), isFirst);\n }\n this.isRemove = true;\n }\n this.previousPoints = extend([], this.currentPoints, null, true);\n }\n else {\n if (!data.point && this.isRemove) {\n this.removeTooltip(1000);\n this.isRemove = false;\n }\n }\n };\n AccumulationTooltip.prototype.drawMarker = function (isBottom, size) {\n var count = 0;\n var shapeOption;\n var groupElement = this.getElement(this.element.id + '_tooltip_group');\n var markerGroup = this.chart.renderer.createGroup({ id: this.element.id + '_tooltip_trackball_group' });\n var x = (this.padding * 2) + (size / 2);\n var y;\n var series;\n for (var _i = 0, _a = this.currentPoints; _i < _a.length; _i++) {\n var data = _a[_i];\n series = data.series;\n y = this.markerPoint[count] - this.padding + (isBottom ? this.arrowPadding : 0);\n shapeOption = new PathOption(this.element.id + '_Tooltip_Trackball_' + series.index, data.point.color, 1, '#cccccc', series.opacity, null);\n markerGroup.appendChild(drawSymbol(new ChartLocation(x, y), 'Circle', new Size(size, size), null, shapeOption, null));\n count++;\n }\n groupElement.appendChild(markerGroup);\n };\n AccumulationTooltip.prototype.getPieData = function (e, chart, x, y) {\n var target = e.target;\n var id = indexFinder(target.id, true);\n if (!isNaN(id.series)) {\n var seriesIndex = id.series;\n var pointIndex = id.point;\n if (!isNullOrUndefined(seriesIndex) && !isNaN(seriesIndex) && !isNullOrUndefined(pointIndex) && !isNaN(pointIndex)) {\n var series = this.getSeriesFromIndex(seriesIndex, chart.visibleSeries);\n if (series.enableTooltip) {\n return new AccPointData(series.points[pointIndex], series);\n }\n }\n }\n return new AccPointData(null, null);\n };\n /**\n * To get series from index\n */\n AccumulationTooltip.prototype.getSeriesFromIndex = function (index, visibleSeries) {\n return visibleSeries[0];\n };\n AccumulationTooltip.prototype.getTemplateText = function (data) {\n var point = extend({}, data.point);\n return point;\n };\n AccumulationTooltip.prototype.getTooltipText = function (data, tooltip) {\n var series = data.series;\n var format = tooltip.format ? tooltip.format : '${point.x} : ${point.y}';\n return this.parseTemplate(data.point, series, format);\n };\n AccumulationTooltip.prototype.findHeader = function (data) {\n this.header = this.parseTemplate(data.point, data.series, this.header);\n if (this.header.replace(//g, '').replace(/<\\/b>/g, '').trim() !== '') {\n this.formattedText = this.formattedText.concat(this.header);\n }\n };\n AccumulationTooltip.prototype.parseTemplate = function (point, series, format) {\n var value;\n var textValue;\n for (var _i = 0, _a = Object.keys(point); _i < _a.length; _i++) {\n var dataValue = _a[_i];\n value = new RegExp('${point' + '.' + dataValue + '}', 'gm');\n format = format.replace(value.source, point[dataValue]);\n }\n for (var _b = 0, _c = Object.keys(Object.getPrototypeOf(series)); _b < _c.length; _b++) {\n var dataValue = _c[_b];\n value = new RegExp('${series' + '.' + dataValue + '}', 'gm');\n textValue = series[dataValue];\n format = format.replace(value.source, textValue);\n }\n return format;\n };\n /**\n * Removes the tooltip on mouse leave.\n * @return {void}\n * @private\n */\n AccumulationTooltip.prototype.removeTooltip = function (duration) {\n var _this = this;\n var chart = this.control;\n var tooltipElement = this.getElement(this.element.id + '_tooltip');\n this.stopAnimation();\n if (tooltipElement && this.previousPoints.length > 0) {\n var data_1 = this.previousPoints;\n this.toolTipInterval = setTimeout(function () {\n var series = data_1[0].series;\n var tooltipGroup = tooltipElement.firstChild;\n var opacity = parseFloat(tooltipGroup.getAttribute('opacity')) || 1;\n var element = _this.getElement(chart.element.id + '_Series_' + data_1[0].series.index\n + '_Point_' + data_1[0].point.index);\n var rectOpacity;\n if (element) {\n rectOpacity = parseFloat(element.getAttribute('opacity'));\n }\n new Animation({}).animate(tooltipGroup, {\n duration: 200,\n progress: function (args) {\n _this.progressAnimation(element, tooltipGroup, series, opacity, rectOpacity, (args.timeStamp / args.duration), series.isRectSeries, false);\n },\n end: function (model) {\n _this.previousPoints = [];\n _this.endAnimation(element, tooltipGroup, series, false);\n }\n });\n }, duration);\n }\n };\n /**\n * Get module name\n */\n AccumulationTooltip.prototype.getModuleName = function () {\n return 'AccumulationTooltip';\n };\n /**\n * To destroy the Tooltip.\n * @return {void}\n * @private\n */\n AccumulationTooltip.prototype.destroy = function (chart) {\n /**\n * Destroy method calling here\n */\n };\n return AccumulationTooltip;\n}(BaseTooltip));\nexport { AccumulationTooltip };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { extend } from '@syncfusion/ej2-base';\nimport { indexFinder } from '../../common/utils/helper';\nimport { pointByIndex } from '../model/acc-base';\nimport { Index } from '../../common/model/base';\nimport { BaseSelection } from '../../common/user-interaction/selection';\n/**\n * `AccumulationSelection` module handles the selection for accumulation chart.\n * @private\n */\nvar AccumulationSelection = /** @class */ (function (_super) {\n __extends(AccumulationSelection, _super);\n function AccumulationSelection(accumulation) {\n var _this = _super.call(this, accumulation) || this;\n _this.renderer = accumulation.renderer;\n return _this;\n }\n /**\n * To initialize the private variables\n */\n AccumulationSelection.prototype.initPrivateVariables = function (accumulation) {\n this.styleId = accumulation.element.id + '_ej2_chart_selection';\n this.unselected = accumulation.element.id + '_ej2_deselected';\n this.selectedDataIndexes = [];\n this.rectPoints = null;\n };\n /**\n * Invoke selection for rendered chart.\n * @param {AccumulationChart} chart - Define the chart to invoke the selection.\n * @return {void}\n */\n AccumulationSelection.prototype.invokeSelection = function (accumulation) {\n this.initPrivateVariables(accumulation);\n this.series = extend({}, accumulation.visibleSeries, null, true);\n this.seriesStyles();\n this.selectDataIndex(this.concatIndexes(accumulation.selectedDataIndexes, this.selectedDataIndexes), accumulation);\n };\n /**\n * To get series selection style by series.\n */\n AccumulationSelection.prototype.generateStyle = function (series) {\n return (series.selectionStyle || this.styleId + '_series_' + series.index);\n };\n /**\n * To get elements by index, series\n */\n AccumulationSelection.prototype.findElements = function (accumulation, series, index) {\n return [this.getElementByIndex(index)];\n };\n /**\n * To get series point element by index\n */\n AccumulationSelection.prototype.getElementByIndex = function (index) {\n var elementId = this.control.element.id + '_Series_' + index.series + '_Point_' + index.point;\n return document.getElementById(elementId);\n };\n /**\n * To calculate selected elements on mouse click or touch\n * @private\n */\n AccumulationSelection.prototype.calculateSelectedElements = function (accumulation, event) {\n if (event.target.id.indexOf(accumulation.element.id + '_') === -1) {\n return;\n }\n if (event.target.id.indexOf('_Series_') > -1 || event.target.id.indexOf('_datalabel_') > -1) {\n this.performSelection(indexFinder(event.target.id), accumulation, event.target);\n }\n };\n /**\n * To perform the selection process based on index and element.\n */\n AccumulationSelection.prototype.performSelection = function (index, accumulation, element) {\n element = element.id.indexOf('datalabel') > -1 ?\n accumulation.getSeriesElement().childNodes[index.series].childNodes[index.point]\n : element;\n switch (accumulation.selectionMode) {\n case 'Point':\n if (!isNaN(index.point)) {\n this.selection(accumulation, index, [element]);\n this.blurEffect(accumulation.element.id, accumulation.visibleSeries);\n }\n break;\n }\n };\n /**\n * To select the element by index. Adding or removing selection style class name.\n */\n AccumulationSelection.prototype.selection = function (accumulation, index, selectedElements) {\n if (!accumulation.isMultiSelect) {\n this.removeMultiSelectEelments(accumulation, this.selectedDataIndexes, index, accumulation.series);\n }\n var className = selectedElements[0] && (selectedElements[0].getAttribute('class') || '');\n if (selectedElements[0] && className.indexOf(this.getSelectionClass(selectedElements[0].id)) > -1) {\n this.removeStyles(selectedElements, index);\n this.addOrRemoveIndex(this.selectedDataIndexes, index);\n }\n else {\n this.applyStyles(selectedElements, index);\n this.addOrRemoveIndex(this.selectedDataIndexes, index, true);\n }\n };\n /**\n * To redraw the selection process on accumulation chart refresh.\n * @private\n */\n AccumulationSelection.prototype.redrawSelection = function (accumulation, oldMode) {\n var selectedDataIndexes = extend([], this.selectedDataIndexes, null, true);\n this.removeSelectedElements(accumulation, this.selectedDataIndexes);\n this.blurEffect(accumulation.element.id, accumulation.visibleSeries);\n this.selectDataIndex(selectedDataIndexes, accumulation);\n };\n /**\n * To remove the selected elements style classes by indexes.\n */\n AccumulationSelection.prototype.removeSelectedElements = function (accumulation, indexes) {\n var seriesgroup = accumulation.getSeriesElement();\n for (var _i = 0, indexes_1 = indexes; _i < indexes_1.length; _i++) {\n var index = indexes_1[_i];\n this.removeStyles([this.getElementByIndex(index)], index);\n }\n };\n /**\n * To perform the selection for legend elements.\n * @private\n */\n AccumulationSelection.prototype.legendSelection = function (accumulation, series, pointIndex) {\n var element = accumulation.getSeriesElement().childNodes[series].childNodes[pointIndex];\n var seriesStyle = this.generateStyle(accumulation.visibleSeries[series]);\n var seriesElements = accumulation.getSeriesElement().childNodes[series].childNodes[pointIndex];\n this.selection(accumulation, new Index(series, pointIndex), [seriesElements]);\n this.blurEffect(accumulation.element.id, accumulation.visibleSeries);\n };\n /**\n * To select the element by selected data indexes.\n */\n AccumulationSelection.prototype.selectDataIndex = function (indexes, accumulation) {\n var element;\n for (var _i = 0, indexes_2 = indexes; _i < indexes_2.length; _i++) {\n var index = indexes_2[_i];\n element = this.getElementByIndex(index);\n if (element) {\n this.performSelection(index, accumulation, element);\n }\n }\n };\n /**\n * To remove the selection styles for multi selection process.\n */\n AccumulationSelection.prototype.removeMultiSelectEelments = function (accumulation, index, currentIndex, seriesCollection) {\n var series;\n for (var i = 0; i < index.length; i++) {\n series = seriesCollection[index[i].series];\n if (!this.checkEquals(index[i], currentIndex)) {\n this.removeStyles(this.findElements(accumulation, series, index[i]), index[i]);\n index.splice(i, 1);\n i--;\n }\n }\n };\n /**\n * To apply the opacity effect for accumulation chart series elements.\n */\n AccumulationSelection.prototype.blurEffect = function (pieId, visibleSeries) {\n var visibility = this.checkPointVisibility(this.selectedDataIndexes); // legend click scenario\n for (var _i = 0, visibleSeries_1 = visibleSeries; _i < visibleSeries_1.length; _i++) {\n var series = visibleSeries_1[_i];\n if (series.visible) {\n this.checkSelectionElements(document.getElementById(pieId + '_SeriesCollection'), this.generateStyle(series), visibility);\n }\n }\n };\n /**\n * To check selection elements by style class name.\n */\n AccumulationSelection.prototype.checkSelectionElements = function (element, className, visibility) {\n var children = (element.childNodes[0].childNodes);\n var legendShape;\n var elementClass;\n var parentClass;\n for (var i = 0; i < children.length; i++) {\n elementClass = children[i].getAttribute('class') || '';\n parentClass = children[i].parentNode.getAttribute('class') || '';\n if (elementClass.indexOf(className) === -1 && parentClass.indexOf(className) === -1 && visibility) {\n this.addSvgClass(children[i], this.unselected);\n }\n else {\n this.removeSvgClass(children[i], this.unselected);\n }\n if (this.control.accumulationLegendModule && this.control.legendSettings.visible) {\n legendShape = document.getElementById(this.control.element.id + '_chart_legend_shape_' + i);\n if (legendShape) {\n if (elementClass.indexOf(className) === -1 && parentClass.indexOf(className) === -1 && visibility) {\n this.addSvgClass(legendShape, this.unselected);\n }\n else {\n this.removeSvgClass(legendShape, this.unselected);\n }\n }\n }\n }\n };\n /**\n * To apply selection style for elements.\n */\n AccumulationSelection.prototype.applyStyles = function (elements, index) {\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element = elements_1[_i];\n var legendShape = void 0;\n if (element) {\n if (this.control.accumulationLegendModule && this.control.legendSettings.visible) {\n legendShape = document.getElementById(this.control.element.id + '_chart_legend_shape_' + index.point);\n this.removeSvgClass(legendShape, this.unselected);\n this.addSvgClass(legendShape, this.getSelectionClass(legendShape.id));\n }\n this.removeSvgClass(element.parentNode, this.unselected);\n this.removeSvgClass(element, this.unselected);\n this.addSvgClass(element, this.getSelectionClass(element.id));\n }\n }\n };\n /**\n * To get selection style class name by id\n */\n AccumulationSelection.prototype.getSelectionClass = function (id) {\n return this.generateStyle(this.control.series[indexFinder(id).series]);\n };\n /**\n * To remove selection style for elements.\n */\n AccumulationSelection.prototype.removeStyles = function (elements, index) {\n var legendShape;\n for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) {\n var element = elements_2[_i];\n if (element) {\n if (this.control.accumulationLegendModule && this.control.legendSettings.visible) {\n legendShape = document.getElementById(this.control.element.id + '_chart_legend_shape_' + index.point);\n this.removeSvgClass(legendShape, this.getSelectionClass(legendShape.id));\n }\n this.removeSvgClass(element, this.getSelectionClass(element.id));\n }\n }\n };\n /**\n * To apply or remove selected elements index.\n */\n AccumulationSelection.prototype.addOrRemoveIndex = function (indexes, index, add) {\n for (var i = 0; i < indexes.length; i++) {\n if (this.checkEquals(indexes[i], index)) {\n indexes.splice(i, 1);\n i--;\n }\n }\n if (add) {\n indexes.push(index);\n }\n };\n /**\n * To check two index, point and series are equal\n */\n AccumulationSelection.prototype.checkEquals = function (first, second) {\n return ((first.point === second.point) && (first.series === second.series));\n };\n /**\n * To check selected points are visibility\n */\n AccumulationSelection.prototype.checkPointVisibility = function (selectedDataIndexes) {\n var visible = false;\n for (var _i = 0, selectedDataIndexes_1 = selectedDataIndexes; _i < selectedDataIndexes_1.length; _i++) {\n var data = selectedDataIndexes_1[_i];\n if (pointByIndex(data.point, this.control.visibleSeries[0].points).visible) {\n visible = true;\n break;\n }\n }\n return visible;\n };\n /**\n * Get module name.\n */\n AccumulationSelection.prototype.getModuleName = function () {\n return 'AccumulationSelection';\n };\n /**\n * To destroy the selection.\n * @return {void}\n * @private\n */\n AccumulationSelection.prototype.destroy = function (accumulation) {\n // Destroy method performed here\n };\n return AccumulationSelection;\n}(BaseSelection));\nexport { AccumulationSelection };\n","/**\n * AccumulationChart annotation properties\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { AnnotationBase } from '../../common/annotation/annotation';\nimport { appendElement } from '../../common/utils/helper';\nimport { createElement } from '@syncfusion/ej2-base';\n/**\n * `AccumulationAnnotation` module handles the annotation for accumulation chart.\n */\nvar AccumulationAnnotation = /** @class */ (function (_super) {\n __extends(AccumulationAnnotation, _super);\n /**\n * Constructor for accumulation chart annotation.\n * @private.\n */\n function AccumulationAnnotation(control) {\n var _this = _super.call(this, control) || this;\n _this.pie = control;\n return _this;\n }\n /**\n * Method to render the annotation for accumulation chart\n * @param element\n */\n AccumulationAnnotation.prototype.renderAnnotations = function (element) {\n var _this = this;\n this.annotations = this.pie.annotations;\n this.parentElement = createElement('div', {\n id: this.pie.element.id + '_Annotation_Collections'\n });\n this.annotations.map(function (annotation, index) {\n _this.processAnnotation(annotation, index, _this.parentElement);\n });\n appendElement(this.parentElement, element);\n };\n /**\n * Get module name.\n */\n AccumulationAnnotation.prototype.getModuleName = function () {\n // Returns te module name\n return 'Annotation';\n };\n /**\n * To destroy the annotation.\n * @return {void}\n * @private\n */\n AccumulationAnnotation.prototype.destroy = function (control) {\n // Destroy method performed here\n };\n return AccumulationAnnotation;\n}(AnnotationBase));\nexport { AccumulationAnnotation };\n","import * as index from '@syncfusion/ej2-charts';\nindex.Chart.Inject( index.LineSeries,index.ScatterSeries,index.ColumnSeries,index.SplineSeries,index.SplineAreaSeries,index.StripLine,index.AreaSeries,index.StepLineSeries,index.StepAreaSeries,index.StackingColumnSeries,index.StackingAreaSeries,index.BarSeries,index.StackingBarSeries,index.RangeColumnSeries,index.BubbleSeries,index.Tooltip,index.Crosshair,index.Category,index.DateTime,index.Logarithmic,index.Legend,index.Zoom,index.DataLabel,index.Selection,index.ChartAnnotation,index.HiloSeries,index.HiloOpenCloseSeries,index.WaterfallSeries,index.RangeAreaSeries,index.CandleSeries,index.PolarSeries,index.RadarSeries,index.SmaIndicator,index.TmaIndicator,index.EmaIndicator,index.AccumulationDistributionIndicator,index.MacdIndicator,index.AtrIndicator,index.RsiIndicator,index.MomentumIndicator,index.StochasticIndicator,index.BollingerBands,index.BoxAndWhiskerSeries,index.ErrorBar,index.Trendlines,index.DateTimeCategory,index.MultiColoredLineSeries,index.MultiColoredAreaSeries,index.MultiLevelLabel);\nindex.AccumulationChart.Inject( index.PieSeries,index.FunnelSeries,index.PyramidSeries,index.AccumulationTooltip,index.AccumulationLegend,index.AccumulationSelection,index.AccumulationDataLabel,index.AccumulationAnnotation);\nexport * from '@syncfusion/ej2-charts';\n","/**\n * Specifies gauge Themes\n */\nexport var Theme;\n(function (Theme) {\n /** @private */\n Theme.axisLabelFont = {\n size: '12px',\n fontWeight: 'Normal',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n };\n /** @private */\n Theme.axisLineColor = null;\n /** @private */\n Theme.tickLineColor = null;\n /** @private */\n Theme.pointerColor = null;\n})(Theme || (Theme = {}));\n/** @private */\nexport function getRangePalette(theme) {\n var palette = ['#50c917', '#27d5ff', '#fcde0b', '#ffb133', '#ff5985'];\n // switch (theme) {\n // case 'Material':\n // palette = ['#50c917', '#27d5ff', '#fcde0b', '#ffb133', '#ff5985'];\n // break;\n // case 'Fabric':\n // palette = ['#50c917', '#27d5ff', '#fcde0b', '#ffb133', '#ff5985'];\n // break;\n // }\n return palette;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\n/**\n * Configures the borders in circular gauge.\n */\nvar Border = /** @class */ (function (_super) {\n __extends(Border, _super);\n function Border() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Border.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], Border.prototype, \"width\", void 0);\n return Border;\n}(ChildProperty));\nexport { Border };\n/**\n * Configures the fonts in circular gauge.\n */\nvar Font = /** @class */ (function (_super) {\n __extends(Font, _super);\n function Font() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('16px')\n ], Font.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], Font.prototype, \"color\", void 0);\n __decorate([\n Property('Segoe UI')\n ], Font.prototype, \"fontFamily\", void 0);\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontWeight\", void 0);\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontStyle\", void 0);\n __decorate([\n Property(1)\n ], Font.prototype, \"opacity\", void 0);\n return Font;\n}(ChildProperty));\nexport { Font };\n/**\n * Configures the margin of circular gauge.\n */\nvar Margin = /** @class */ (function (_super) {\n __extends(Margin, _super);\n function Margin() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(10)\n ], Margin.prototype, \"left\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"right\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"top\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"bottom\", void 0);\n return Margin;\n}(ChildProperty));\nexport { Margin };\n/**\n * Configures the tooltip in circular gauge.\n */\nvar TooltipSettings = /** @class */ (function (_super) {\n __extends(TooltipSettings, _super);\n function TooltipSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], TooltipSettings.prototype, \"enable\", void 0);\n __decorate([\n Property('#FFFFFF')\n ], TooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Complex({ color: '#686868', size: '13px' }, Font)\n ], TooltipSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], TooltipSettings.prototype, \"enableAnimation\", void 0);\n __decorate([\n Complex({ color: 'black', width: 2 }, Border)\n ], TooltipSettings.prototype, \"border\", void 0);\n return TooltipSettings;\n}(ChildProperty));\nexport { TooltipSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty, Collection } from '@syncfusion/ej2-base';\nimport { Font, Border } from '../model/base';\nimport { Theme } from '../model/theme';\n/**\n * Configures the axis line.\n */\nvar Line = /** @class */ (function (_super) {\n __extends(Line, _super);\n function Line() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(2)\n ], Line.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Line.prototype, \"dashArray\", void 0);\n __decorate([\n Property(Theme.axisLineColor)\n ], Line.prototype, \"color\", void 0);\n return Line;\n}(ChildProperty));\nexport { Line };\n/**\n * Configures the axis label.\n */\nvar Label = /** @class */ (function (_super) {\n __extends(Label, _super);\n function Label() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex(Theme.axisLabelFont, Font)\n ], Label.prototype, \"font\", void 0);\n __decorate([\n Property('')\n ], Label.prototype, \"format\", void 0);\n __decorate([\n Property('Inside')\n ], Label.prototype, \"position\", void 0);\n __decorate([\n Property('None')\n ], Label.prototype, \"hiddenLabel\", void 0);\n __decorate([\n Property(false)\n ], Label.prototype, \"autoAngle\", void 0);\n __decorate([\n Property(false)\n ], Label.prototype, \"useRangeColor\", void 0);\n __decorate([\n Property(0)\n ], Label.prototype, \"offset\", void 0);\n return Label;\n}(ChildProperty));\nexport { Label };\n/**\n * Configures the ranges of an axis.\n */\nvar Range = /** @class */ (function (_super) {\n __extends(Range, _super);\n function Range() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Range.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], Range.prototype, \"end\", void 0);\n __decorate([\n Property(null)\n ], Range.prototype, \"radius\", void 0);\n __decorate([\n Property(10)\n ], Range.prototype, \"startWidth\", void 0);\n __decorate([\n Property(10)\n ], Range.prototype, \"endWidth\", void 0);\n __decorate([\n Property(null)\n ], Range.prototype, \"color\", void 0);\n return Range;\n}(ChildProperty));\nexport { Range };\n/**\n * Configures the major and minor tick lines of an axis.\n */\nvar Tick = /** @class */ (function (_super) {\n __extends(Tick, _super);\n function Tick() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Tick.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Tick.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], Tick.prototype, \"interval\", void 0);\n __decorate([\n Property(0)\n ], Tick.prototype, \"offset\", void 0);\n __decorate([\n Property(Theme.tickLineColor)\n ], Tick.prototype, \"color\", void 0);\n __decorate([\n Property('Inside')\n ], Tick.prototype, \"position\", void 0);\n __decorate([\n Property(false)\n ], Tick.prototype, \"useRangeColor\", void 0);\n return Tick;\n}(ChildProperty));\nexport { Tick };\n/**\n * Configures the needle cap in pointer.\n */\nvar Cap = /** @class */ (function (_super) {\n __extends(Cap, _super);\n function Cap() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#FFFFFF')\n ], Cap.prototype, \"color\", void 0);\n __decorate([\n Complex({ color: Theme.pointerColor, width: 8 }, Border)\n ], Cap.prototype, \"border\", void 0);\n __decorate([\n Property(8)\n ], Cap.prototype, \"radius\", void 0);\n return Cap;\n}(ChildProperty));\nexport { Cap };\n/**\n * Configures the back needle in pointers.\n */\nvar NeedleTail = /** @class */ (function (_super) {\n __extends(NeedleTail, _super);\n function NeedleTail() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(Theme.pointerColor)\n ], NeedleTail.prototype, \"color\", void 0);\n __decorate([\n Complex({ color: Theme.pointerColor, width: 0 }, Border)\n ], NeedleTail.prototype, \"border\", void 0);\n __decorate([\n Property('0%')\n ], NeedleTail.prototype, \"length\", void 0);\n return NeedleTail;\n}(ChildProperty));\nexport { NeedleTail };\n/**\n * Configures the animation of pointers.\n */\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], Animation.prototype, \"enable\", void 0);\n __decorate([\n Property(1000)\n ], Animation.prototype, \"duration\", void 0);\n return Animation;\n}(ChildProperty));\nexport { Animation };\n/**\n * ‘Annotation’ module is used to handle annotation action for an axis.\n */\nvar Annotation = /** @class */ (function (_super) {\n __extends(Annotation, _super);\n function Annotation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Annotation.prototype, \"content\", void 0);\n __decorate([\n Property(90)\n ], Annotation.prototype, \"angle\", void 0);\n __decorate([\n Property('50%')\n ], Annotation.prototype, \"radius\", void 0);\n __decorate([\n Property('-1')\n ], Annotation.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], Annotation.prototype, \"autoAngle\", void 0);\n __decorate([\n Complex({ size: '12px', color: '#686868' }, Font)\n ], Annotation.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], Annotation.prototype, \"description\", void 0);\n return Annotation;\n}(ChildProperty));\nexport { Annotation };\n/**\n * Configures the pointers of an axis.\n */\nvar Pointer = /** @class */ (function (_super) {\n __extends(Pointer, _super);\n function Pointer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Pointer.prototype, \"value\", void 0);\n __decorate([\n Property('Needle')\n ], Pointer.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"imageUrl\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"radius\", void 0);\n __decorate([\n Property(20)\n ], Pointer.prototype, \"pointerWidth\", void 0);\n __decorate([\n Complex({}, Cap)\n ], Pointer.prototype, \"cap\", void 0);\n __decorate([\n Complex({}, NeedleTail)\n ], Pointer.prototype, \"needleTail\", void 0);\n __decorate([\n Property(Theme.pointerColor)\n ], Pointer.prototype, \"color\", void 0);\n __decorate([\n Complex({ color: '#DDDDDD', width: 0 }, Border)\n ], Pointer.prototype, \"border\", void 0);\n __decorate([\n Complex(null, Animation)\n ], Pointer.prototype, \"animation\", void 0);\n __decorate([\n Property('Circle')\n ], Pointer.prototype, \"markerShape\", void 0);\n __decorate([\n Property(5)\n ], Pointer.prototype, \"markerHeight\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"description\", void 0);\n __decorate([\n Property(5)\n ], Pointer.prototype, \"markerWidth\", void 0);\n return Pointer;\n}(ChildProperty));\nexport { Pointer };\n/**\n * Configures an axis in a gauge.\n */\nvar Axis = /** @class */ (function (_super) {\n __extends(Axis, _super);\n function Axis() {\n /**\n * Specifies the minimum value of an axis.\n * @default null\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.visibleLabels = [];\n return _this;\n }\n __decorate([\n Property(null)\n ], Axis.prototype, \"minimum\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"maximum\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"radius\", void 0);\n __decorate([\n Complex({}, Line)\n ], Axis.prototype, \"lineStyle\", void 0);\n __decorate([\n Collection([{}], Range)\n ], Axis.prototype, \"ranges\", void 0);\n __decorate([\n Collection([{}], Pointer)\n ], Axis.prototype, \"pointers\", void 0);\n __decorate([\n Collection([{}], Annotation)\n ], Axis.prototype, \"annotations\", void 0);\n __decorate([\n Complex({ width: 2, height: 10 }, Tick)\n ], Axis.prototype, \"majorTicks\", void 0);\n __decorate([\n Complex({ width: 2, height: 5 }, Tick)\n ], Axis.prototype, \"minorTicks\", void 0);\n __decorate([\n Property(200)\n ], Axis.prototype, \"startAngle\", void 0);\n __decorate([\n Property(160)\n ], Axis.prototype, \"endAngle\", void 0);\n __decorate([\n Property('ClockWise')\n ], Axis.prototype, \"direction\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"background\", void 0);\n __decorate([\n Complex({}, Label)\n ], Axis.prototype, \"labelStyle\", void 0);\n return Axis;\n}(ChildProperty));\nexport { Axis };\n","import { stringToNumber, getLocationFromAngle, getFontStyle } from '../utils/helper';\nimport { getElement, getTemplateFunction, measureElementRect } from '../utils/helper';\nimport { annotationRender } from '../model/constants';\nimport { createElement } from '@syncfusion/ej2-base';\n/**\n * Annotation Module handles the annotation of the axis.\n */\nvar Annotations = /** @class */ (function () {\n /**\n * Constructor for Annotation module.\n * @private.\n */\n function Annotations(gauge) {\n this.gauge = gauge;\n this.elementId = gauge.element.id;\n }\n /**\n * Method to render the annotation for circular gauge.\n */\n Annotations.prototype.renderAnnotation = function (axis, index) {\n var _this = this;\n var element = createElement('div', {\n id: this.elementId + '_Annotations_' + index\n });\n var parentElement = getElement(this.elementId + '_Secondary_Element');\n axis.annotations.map(function (annotation, annotationIndex) {\n if (annotation.content !== null) {\n _this.createTemplate(element, annotationIndex, index);\n }\n });\n if (parentElement && element.childElementCount) {\n parentElement.appendChild(element);\n }\n };\n /**\n * Method to create annotation template for circular gauge.\n */\n Annotations.prototype.createTemplate = function (element, annotationIndex, axisIndex) {\n var axis = this.gauge.axes[axisIndex];\n var annotation = axis.annotations[annotationIndex];\n var childElement = createElement('div', {\n id: this.elementId + '_Axis_' + axisIndex + '_Annotation_' + annotationIndex,\n styles: 'position: absolute; z-index:' + annotation.zIndex + ';transform:' +\n (annotation.autoAngle ? 'rotate(' + (annotation.angle - 90) + 'deg)' : 'rotate(0deg)') + ';'\n });\n var argsData = {\n cancel: false, name: annotationRender, content: annotation.content,\n axis: axis, annotation: annotation, textStyle: annotation.textStyle\n };\n this.gauge.trigger(annotationRender, argsData);\n var templateFn;\n var templateElement;\n if (!argsData.cancel) {\n templateFn = getTemplateFunction(argsData.content);\n if (templateFn && templateFn(axis).length) {\n templateElement = templateFn(axis);\n while (templateElement.length > 0) {\n childElement.appendChild(templateElement[0]);\n }\n }\n else {\n childElement.appendChild(createElement('div', {\n innerHTML: argsData.content,\n styles: getFontStyle(argsData.textStyle)\n }));\n }\n this.updateLocation(childElement, axis, annotation);\n element.appendChild(childElement);\n }\n };\n /**\n * Method to update the annotation location for circular gauge.\n */\n Annotations.prototype.updateLocation = function (element, axis, annotation) {\n var location = getLocationFromAngle(annotation.angle - 90, stringToNumber(annotation.radius, axis.currentRadius), this.gauge.midPoint);\n var elementRect = measureElementRect(element);\n element.style.left = (location.x - (elementRect.width / 2)) + 'px';\n element.style.top = (location.y - (elementRect.height / 2)) + 'px';\n element.setAttribute('aria-label', annotation.description || 'Annotation');\n };\n /**\n * Get module name.\n */\n Annotations.prototype.getModuleName = function () {\n // Returns te module name\n return 'Annotations';\n };\n /**\n * To destroy the annotation.\n * @return {void}\n * @private\n */\n Annotations.prototype.destroy = function (gauge) {\n // Destroy method performed here\n };\n return Annotations;\n}());\nexport { Annotations };\n","/**\n * Specifies the gauge constant value\n */\n/** @private */\nexport var loaded = 'loaded';\n/** @private */\nexport var load = 'load';\n/** @private */\nexport var animationComplete = 'animationComplete';\n/** @private */\nexport var axisLabelRender = 'axisLabelRender';\n/** @private */\nexport var tooltipRender = 'tooltipRender';\n/** @private */\nexport var annotationRender = 'annotationRender';\n/** @private */\nexport var gaugeMouseMove = 'gaugeMouseMove';\n/** @private */\nexport var gaugeMouseLeave = 'gaugeMouseLeave';\n/** @private */\nexport var gaugeMouseDown = 'gaugeMouseDown';\n/** @private */\nexport var gaugeMouseUp = 'gaugeMouseUp';\n/** @private */\nexport var dragStart = 'dragStart';\n/** @private */\nexport var dragMove = 'dragMove';\n/** @private */\nexport var dragEnd = 'dragEnd';\n/** @private */\nexport var resized = 'resized';\n","import { createElement, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { getPointer, getTemplateFunction } from '../utils/helper';\nimport { getAngleFromValue, getLabelFormat, getElement, getLocationFromAngle } from '../utils/helper';\nimport { tooltipRender } from '../model/constants';\n/**\n * Tooltip Module handles the tooltip of the circular gauge\n */\nvar GaugeTooltip = /** @class */ (function () {\n /**\n * Constructor for Tooltip module.\n * @private.\n */\n function GaugeTooltip(gauge) {\n this.gauge = gauge;\n this.element = gauge.element;\n this.tooltip = gauge.tooltip;\n this.textStyle = this.tooltip.textStyle;\n this.borderStyle = this.tooltip.border;\n this.ejTooltip = new Tooltip({\n opensOn: 'custom',\n beforeRender: this.onBeforeRender.bind(this),\n beforeOpen: this.tooltipCustomization.bind(this),\n openDelay: 0, closeDelay: 1000\n });\n this.ejTooltip.appendTo(this.element);\n }\n /**\n * Method to render the tooltip for circular gauge.\n */\n GaugeTooltip.prototype.renderTooltip = function (target) {\n var currentPointer = getPointer(target.id, this.gauge);\n var element;\n var angle;\n this.currentAxis = this.gauge.axes[currentPointer.axisIndex];\n this.currentPointer = (this.currentAxis.pointers)[currentPointer.pointerIndex];\n angle = getAngleFromValue(this.currentPointer.currentValue, this.currentAxis.visibleRange.max, this.currentAxis.visibleRange.min, this.currentAxis.startAngle, this.currentAxis.endAngle, this.currentAxis.direction === 'ClockWise') % 360;\n element = this.appendTargetElement(angle);\n if (element.getAttribute('data-tooltip-id') === null) {\n this.findPosition(angle);\n this.ejTooltip.open(element);\n }\n };\n /**\n * Method to append the target element for tooltip\n */\n GaugeTooltip.prototype.appendTargetElement = function (angle) {\n var location = getLocationFromAngle(angle, this.currentAxis.currentRadius, this.gauge.midPoint);\n var element = getElement(this.element.id + '_GaugeTooltip');\n if (element) {\n element.style.left = location.x + 'px';\n element.style.top = location.y + 'px';\n }\n else {\n element = createElement('div', {\n id: this.element.id + '_GaugeTooltip',\n styles: 'position:absolute;left:' + location.x + 'px;top:' + location.y +\n 'px;width:2px;height:2px;background:transparent'\n });\n getElement(this.element.id + '_Secondary_Element').appendChild(element);\n }\n return element;\n };\n /**\n * Method to find the position of the tooltip anchor for circular gauge.\n */\n GaugeTooltip.prototype.findPosition = function (angle) {\n switch (true) {\n case (angle >= 0 && angle <= 45):\n this.ejTooltip.position = 'RightBottom';\n break;\n case (angle >= 45 && angle < 90):\n this.ejTooltip.position = 'BottomRight';\n break;\n case (angle >= 90 && angle < 135):\n this.ejTooltip.position = 'BottomLeft';\n break;\n case (angle >= 135 && angle < 180):\n this.ejTooltip.position = 'LeftBottom';\n break;\n case (angle >= 180 && angle < 225):\n this.ejTooltip.position = 'LeftTop';\n break;\n case (angle >= 225 && angle < 270):\n this.ejTooltip.position = 'TopLeft';\n break;\n case (angle >= 270 && angle < 315):\n this.ejTooltip.position = 'TopRight';\n break;\n default:\n this.ejTooltip.position = 'RightTop';\n break;\n }\n this.ejTooltip.dataBind();\n };\n /**\n * Method to perform the tooltip for circular gauge.\n */\n GaugeTooltip.prototype.onBeforeRender = function (args) {\n var tooltipFormat = this.gauge.tooltip.format || this.currentAxis.labelStyle.format;\n var customLabelFormat = tooltipFormat && tooltipFormat.match('{value}') !== null;\n var format = this.gauge.intl.getNumberFormat({\n format: getLabelFormat(tooltipFormat), useGrouping: this.gauge.useGroupingSeparator\n });\n var content = customLabelFormat ?\n tooltipFormat.replace(new RegExp('{value}', 'g'), format(this.currentPointer.currentValue)) :\n format(this.currentPointer.currentValue);\n content = this.tooltip.template ?\n getTemplateFunction(this.tooltip.template)(this.currentAxis)[0] : content;\n var argsData = {\n cancel: false, name: tooltipRender,\n content: content,\n border: this.borderStyle,\n axis: this.currentAxis, pointer: this.currentPointer,\n textStyle: this.textStyle\n };\n this.gauge.trigger(tooltipRender, argsData);\n this.borderStyle = argsData.border;\n args.cancel = argsData.cancel;\n this.ejTooltip.content = argsData.content;\n this.textStyle = argsData.textStyle;\n this.ejTooltip.dataBind();\n };\n /**\n * Method to customize the tooltip elements for circular gauge.\n */\n GaugeTooltip.prototype.tooltipCustomization = function (args) {\n var font = this.textStyle;\n var borderColor = this.borderStyle.color;\n var border = this.borderStyle.width;\n var pointerSize = 5;\n var arrowWidth = (pointerSize - border) + 'px';\n var outerWidth;\n var innerWidth;\n args.element.classList.remove('e-popup-close');\n args.element.classList.add('e-popup-open');\n var arrowEle = args.element.querySelector('.e-arrow-tip');\n setStyleAttribute(args.element, {\n 'backgroundColor': this.tooltip.fill, 'borderColor': borderColor || '#212121',\n 'borderWidth': border + 'px'\n });\n setStyleAttribute(args.element.querySelector('.e-tip-content'), {\n 'color': font.color, 'fontFamily': font.fontFamily, 'fontSize': font.size,\n 'fontWeight': font.fontWeight, 'opacity': font.opacity.toString(), 'fontStyle': font.fontStyle\n });\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': 2 * (pointerSize + border) + 'px', 'height': pointerSize + border + 'px'\n });\n if (arrowEle.classList.contains('e-tip-top')) {\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetHeight;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderBottomColor': borderColor,\n 'borderLeftWidth': outerWidth, 'borderRightWidth': outerWidth, 'borderBottomWidth': outerWidth,\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderBottomColor': this.tooltip.fill,\n 'borderLeftWidth': innerWidth, 'borderRightWidth': innerWidth, 'borderBottomWidth': innerWidth,\n 'left': border + 'px', 'top': border + 'px'\n });\n }\n else if (arrowEle.classList.contains('e-tip-bottom')) {\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetHeight;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderTopColor': borderColor,\n 'borderLeftWidth': outerWidth, 'borderRightWidth': outerWidth, 'borderTopWidth': outerWidth,\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderTopColor': this.tooltip.fill,\n 'borderLeftWidth': innerWidth, 'borderRightWidth': innerWidth, 'borderTopWidth': innerWidth,\n 'left': border + 'px', 'top': '0'\n });\n }\n else if (arrowEle.classList.contains('e-tip-left')) {\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': pointerSize + border + 'px', 'height': 2 * (pointerSize + border) + 'px'\n });\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetWidth;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderRightColor': borderColor,\n 'borderTopWidth': outerWidth, 'borderBottomWidth': outerWidth, 'borderRightWidth': outerWidth\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderRightColor': this.tooltip.fill,\n 'borderTopWidth': innerWidth, 'borderBottomWidth': innerWidth, 'borderRightWidth': innerWidth,\n 'left': border + 'px', 'top': border + 'px'\n });\n }\n else {\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': (pointerSize + border) + 'px', 'height': 2 * (pointerSize + border) + 'px'\n });\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetWidth;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderLeftColor': borderColor,\n 'borderTopWidth': outerWidth, 'borderBottomWidth': outerWidth, 'borderLeftWidth': outerWidth\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderLeftColor': this.tooltip.fill,\n 'borderTopWidth': innerWidth, 'borderBottomWidth': innerWidth, 'borderLeftWidth': innerWidth,\n 'left': (border <= 1 ? 0 : -1) + 'px', 'top': border + 'px'\n });\n }\n this.ejTooltip.refresh(args.target);\n setStyleAttribute(args.element, {\n 'display': 'block', 'transitionProperty': 'left,top',\n 'transitionDuration': this.tooltip.enableAnimation ? '1000ms' : '0ms'\n });\n };\n /**\n * Get module name.\n */\n GaugeTooltip.prototype.getModuleName = function () {\n // Returns te module name\n return 'Tooltip';\n };\n /**\n * To destroy the tooltip.\n * @return {void}\n * @private\n */\n GaugeTooltip.prototype.destroy = function (gauge) {\n // Destroy method performed here\n };\n return GaugeTooltip;\n}());\nexport { GaugeTooltip };\n","import { getLocationFromAngle, PathOption, stringToNumber, TextOption, textElement, appendPath, toPixel } from '../utils/helper';\nimport { getAngleFromValue, isCompleteAngle, getPathArc, getRangeColor } from '../utils/helper';\nimport { getRangePalette } from '../model/theme';\n/**\n * Specifies the Axis rendering for circular gauge\n */\nvar AxisRenderer = /** @class */ (function () {\n /**\n * Constructor for axis renderer.\n * @private.\n */\n function AxisRenderer(gauge) {\n this.gauge = gauge;\n }\n /**\n * Method to render the axis element of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawAxisOuterLine = function (axis, index, element, gauge) {\n var background = axis.background;\n this.setRangeColor(axis);\n if (background !== null) {\n appendPath(new PathOption(gauge.element.id + '_AxisOuterLine_' + index, background, 0, 'transparent', null, '0', getPathArc(gauge.midPoint, 0, 360, (Math.min(axis.rect.width, axis.rect.height) / 2)), '', 'pointer-events:none;'), element, gauge);\n }\n };\n /**\n * Method to render the axis line of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawAxisLine = function (axis, index, element, gauge) {\n var startAngle = axis.startAngle;\n var endAngle = axis.endAngle;\n if (axis.lineStyle.width > 0) {\n startAngle = !isCompleteAngle(startAngle, endAngle) ? startAngle : [0, endAngle = 360][0];\n appendPath(new PathOption(gauge.element.id + '_AxisLine_' + index, 'transparent', axis.lineStyle.width, axis.lineStyle.color, null, axis.lineStyle.dashArray, getPathArc(gauge.midPoint, startAngle - 90, endAngle - 90, axis.currentRadius), '', 'pointer-events:none;'), element, gauge);\n }\n };\n /**\n * Method to render the axis labels of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawAxisLabels = function (axis, index, element, gauge) {\n var labelElement = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_Labels_' + index\n });\n var min = axis.visibleRange.min;\n var max = axis.visibleRange.max;\n var labelCollection = axis.visibleLabels;\n var location;\n var style = axis.labelStyle;\n var anchor;\n var angle;\n var label;\n var radius = axis.currentRadius;\n var labelPadding = 10;\n if (style.position === 'Outside') {\n radius += (axis.nearSize - (axis.maxLabelSize.height + axis.lineStyle.width / 2)) +\n (labelPadding / 2);\n }\n else {\n radius -= (axis.farSize - (axis.maxLabelSize.height + axis.lineStyle.width / 2) +\n (style.autoAngle ? labelPadding : 0));\n }\n for (var i = 0, length_1 = labelCollection.length; i < length_1; i++) {\n if ((i === 0 && style.hiddenLabel === 'First') ||\n (i === (length_1 - 1) && style.hiddenLabel === 'Last')) {\n continue;\n }\n label = labelCollection[i];\n angle = Math.round(getAngleFromValue(label.value, max, min, axis.startAngle, axis.endAngle, axis.direction === 'ClockWise'));\n location = getLocationFromAngle(angle, radius, gauge.midPoint);\n anchor = this.findAnchor(location, style, angle, label);\n textElement(new TextOption(gauge.element.id + '_Axis_' + index + '_Label_' + i, location.x, location.y, anchor, label.text, style.autoAngle ? 'rotate(' + (angle + 90) + ',' + (location.x) + ',' + location.y + ')' : '', 'auto'), style.font, style.useRangeColor ? getRangeColor(label.value, axis.ranges, style.font.color) : style.font.color, labelElement, 'pointer-events:none;');\n }\n element.appendChild(labelElement);\n };\n /**\n * Method to find the anchor of the axis label.\n * @private\n */\n AxisRenderer.prototype.findAnchor = function (location, style, angle, label) {\n if (style.autoAngle) {\n return 'middle';\n }\n var anchor = style.position === 'Inside' ?\n ((angle > 120 && angle < 240) ? 'start' : ((300 < angle || angle < 60) ? 'end' : 'middle')) :\n ((angle > 120 && angle < 240) ? 'end' : ((300 < angle || angle < 60) ? 'start' : 'middle'));\n location.y += style.position === 'Inside' ?\n ((angle >= 240 && angle <= 300) ? (label.size.height / 2) :\n (angle >= 60 && angle <= 120) ? 0 : label.size.height / 4) :\n ((angle >= 240 && angle <= 300) ? 0 :\n (angle >= 60 && angle <= 120) ? label.size.height / 2 : label.size.height / 4);\n return anchor;\n };\n /**\n * Method to render the axis minor tick lines of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawMinorTickLines = function (axis, index, element, gauge) {\n var minorTickElements = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_MinorTickLines_' + index\n });\n var minorLineStyle = axis.minorTicks;\n var minorInterval = minorLineStyle.interval !== null ?\n minorLineStyle.interval : (axis.visibleRange.interval / 2);\n var isRangeColor = minorLineStyle.useRangeColor;\n if (minorLineStyle.width && minorLineStyle.height && minorInterval) {\n for (var i = axis.visibleRange.min, max = axis.visibleRange.max; i <= max; i += minorInterval) {\n if (this.majorValues.indexOf(+i.toFixed(3)) < 0) {\n appendPath(new PathOption(gauge.element.id + '_Axis_Minor_TickLine_' + index + '_' + i, 'transparent', minorLineStyle.width, isRangeColor ? getRangeColor(i, axis.ranges, minorLineStyle.color) : minorLineStyle.color, null, '0', this.calculateTicks(i, minorLineStyle, axis), '', 'pointer-events:none;'), minorTickElements, gauge);\n }\n }\n element.appendChild(minorTickElements);\n }\n };\n /**\n * Method to render the axis major tick lines of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawMajorTickLines = function (axis, index, element, gauge) {\n var majorTickElements = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_MajorTickLines_' + index\n });\n var majorLineStyle = axis.majorTicks;\n var isRangeColor = majorLineStyle.useRangeColor;\n this.majorValues = [];\n if (majorLineStyle.width && majorLineStyle.height && axis.visibleRange.interval) {\n for (var i = axis.visibleRange.min, max = axis.visibleRange.max, interval = axis.visibleRange.interval; i <= max; i += interval) {\n this.majorValues.push(+i.toFixed(3));\n appendPath(new PathOption(gauge.element.id + '_Axis_Major_TickLine_' + index + '_' + i, 'transparent', majorLineStyle.width, isRangeColor ? getRangeColor(i, axis.ranges, majorLineStyle.color) : majorLineStyle.color, null, '0', this.calculateTicks(i, majorLineStyle, axis), '', 'pointer-events:none;'), majorTickElements, gauge);\n }\n element.appendChild(majorTickElements);\n }\n };\n /**\n * Method to calcualte the tick elements for the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.calculateTicks = function (value, options, axis) {\n var axisLineWidth = (axis.lineStyle.width / 2) + options.offset;\n var isOutside = options.position === 'Outside';\n var angle = getAngleFromValue(value, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, axis.direction === 'ClockWise');\n var start = getLocationFromAngle(angle, axis.currentRadius +\n (isOutside ? axisLineWidth : -axisLineWidth), this.gauge.midPoint);\n var end = getLocationFromAngle(angle, axis.currentRadius +\n (isOutside ? axisLineWidth : -axisLineWidth) +\n (isOutside ? options.height : -options.height), this.gauge.midPoint);\n return 'M ' + start.x + ' ' + start.y + ' L ' + end.x + ' ' + end.y + ' ';\n };\n /**\n * Method to render the axis range of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.drawAxisRange = function (axis, index, element, gauge) {\n var _this = this;\n var rangeElement = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_Ranges_' + index\n });\n var startAngle;\n var endAngle;\n var isClockWise = axis.direction === 'ClockWise';\n var startValue;\n var endValue;\n var min = axis.visibleRange.min;\n var max = axis.visibleRange.max;\n var startWidth;\n var endWidth;\n axis.ranges.map(function (range, rangeIndex) {\n _this.calculateRangeRadius(axis, range);\n startValue = Math.min(Math.max(range.start, min), range.end);\n endValue = Math.min(Math.max(range.start, range.end), max);\n if (startValue !== endValue) {\n startAngle = getAngleFromValue(startValue, max, min, axis.startAngle, axis.endAngle, isClockWise);\n endAngle = getAngleFromValue(endValue, max, min, axis.startAngle, axis.endAngle, isClockWise);\n if (range.startWidth.length > 0) {\n startWidth = toPixel(range.startWidth, range.currentRadius);\n }\n else {\n startWidth = range.startWidth;\n }\n if (range.endWidth.length > 0) {\n endWidth = toPixel(range.endWidth, range.currentRadius);\n }\n else {\n endWidth = range.endWidth;\n }\n endAngle = isClockWise ? endAngle : [startAngle, startAngle = endAngle][0];\n endWidth = isClockWise ? endWidth : [startWidth, startWidth = endWidth][0];\n appendPath(new PathOption(gauge.element.id + '_Axis_' + index + '_Range_' + rangeIndex, range.rangeColor, 0, range.rangeColor, 1, '0', getPathArc(gauge.midPoint, Math.round(startAngle), Math.round(endAngle), range.currentRadius, startWidth, endWidth), '', 'pointer-events:none;'), rangeElement, gauge);\n }\n });\n element.appendChild(rangeElement);\n };\n /**\n * Method to calculate the radius of the axis range.\n * @return {void}\n */\n AxisRenderer.prototype.calculateRangeRadius = function (axis, range) {\n var radius = range.radius !== null ? range.radius : '100%';\n range.currentRadius = stringToNumber(radius, axis.currentRadius);\n };\n /**\n * Method to get the range color of the circular gauge.\n * @return {void}\n * @private\n */\n AxisRenderer.prototype.setRangeColor = function (axis) {\n var rangeColors = getRangePalette(this.gauge.theme);\n axis.ranges.map(function (range, index) {\n range.rangeColor = range.color ? range.color : rangeColors[index % rangeColors.length];\n });\n };\n return AxisRenderer;\n}());\nexport { AxisRenderer };\n","import { stringToNumber, Size, calculateShapes, appendPath } from '../utils/helper';\nimport { getLocationFromAngle, PathOption } from '../utils/helper';\nimport { linear, getAngleFromValue, getCompleteArc } from '../utils/helper';\nimport { Animation } from '@syncfusion/ej2-base';\nimport { animationComplete } from '../model/constants';\n/**\n * Specifies the Axis rendering for circular gauge\n */\nvar PointerRenderer = /** @class */ (function () {\n /**\n * Constructor for pointer renderer.\n * @private.\n */\n function PointerRenderer(gauge) {\n this.gauge = gauge;\n }\n /**\n * Method to render the axis pointers of the circular gauge.\n * @return {void}\n * @private\n */\n PointerRenderer.prototype.drawPointers = function (axis, axisIndex, element, gauge, animate) {\n var _this = this;\n if (animate === void 0) { animate = true; }\n var pointerElement = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_Pointers_' + axisIndex\n });\n var childElement;\n var range;\n axis.pointers.map(function (pointer, pointerIndex) {\n range = axis.visibleRange;\n pointer.pathElement = [];\n _this.calculatePointerRadius(axis, pointer);\n childElement = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_' + axisIndex + '_Pointer_' + pointerIndex\n });\n _this['draw' + pointer.type + 'Pointer'](axis, axisIndex, pointerIndex, childElement, gauge);\n _this.setPointerValue(axis, pointer, pointer.currentValue);\n pointerElement.appendChild(childElement);\n if (animate) {\n _this.doPointerAnimation(pointer, axis);\n }\n });\n element.appendChild(pointerElement);\n };\n /**\n * Measure the pointer length of the circular gauge.\n * @return {void}\n */\n PointerRenderer.prototype.calculatePointerRadius = function (axis, pointer) {\n var padding = 5;\n pointer.currentRadius = pointer.radius === null ?\n (axis.currentRadius - (axis.farSize + padding)) :\n stringToNumber(pointer.radius, axis.currentRadius);\n };\n /**\n * Method to render the needle pointer of the ciruclar gauge.\n * @return {void}\n */\n PointerRenderer.prototype.drawNeedlePointer = function (axis, axisIndex, index, parentElement, gauge) {\n var pointer = axis.pointers[index];\n var pointerRadius;\n var location;\n var direction;\n var mid = gauge.midPoint;\n var width = pointer.pointerWidth / 2;\n var rectDirection;\n // To render the needle\n location = getLocationFromAngle(0, pointer.currentRadius, mid);\n direction = 'M ' + mid.x + ' ' + (mid.y - width) + ' L ' + (location.x) + ' ' + mid.y +\n ' L ' + (mid.x) + ' ' + (mid.y + width) + ' Z';\n pointer.pathElement.push(appendPath(new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_Needle_' + index, pointer.color, pointer.border.width, pointer.border.color, null, '0', direction), parentElement, gauge));\n pointerRadius = stringToNumber(pointer.needleTail.length, pointer.currentRadius);\n // To render the rect element for touch\n rectDirection = 'M ' + mid.x + ' ' + (mid.y - width) + ' L ' + (location.x) + ' ' + (mid.y - width) +\n ' L ' + location.x + ' ' + (mid.y + width) + ' L ' + mid.x + ' ' + (mid.y + width);\n // To render the needle tail\n if (pointerRadius) {\n location = getLocationFromAngle(180, pointerRadius, gauge.midPoint);\n direction = 'M ' + mid.x + ' ' + (mid.y - width) +\n ' L ' + (location.x) + ' ' + (mid.y - width) +\n ' L ' + (location.x) + ' ' + (mid.y + width) +\n ' L ' + (mid.x) + ' ' + (mid.y + width) + ' Z';\n pointer.pathElement.push(appendPath(new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_NeedleTail_' + index, pointer.needleTail.color, pointer.needleTail.border.width, pointer.needleTail.border.color, null, '0', direction), parentElement, gauge));\n rectDirection += ' L ' + location.x + ' ' + (mid.y + width) + ' L ' + location.x + ' ' + (mid.y - width);\n }\n // To render the cap\n if (pointer.cap.radius) {\n pointer.pathElement.push(appendPath(calculateShapes(mid, 'Circle', new Size(pointer.cap.radius * 2, pointer.cap.radius * 2), '', new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_NeedleCap_' + index, pointer.cap.color, pointer.cap.border.width, pointer.cap.border.color, null, '0', '', '')), parentElement, gauge, 'Ellipse'));\n }\n pointer.pathElement.push(appendPath(new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_NeedleRect_' + index, 'transparent', 0, 'transpanret', null, '0', rectDirection + ' Z'), parentElement, gauge));\n };\n /**\n * Method to set the pointer value of the circular gauge.\n * @return {void}\n * @private\n */\n PointerRenderer.prototype.setPointerValue = function (axis, pointer, value) {\n var location = this.gauge.midPoint;\n var isClockWise = axis.direction === 'ClockWise';\n var startAngle = getAngleFromValue(axis.visibleRange.min, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var endAngle = getAngleFromValue(value, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n endAngle = isClockWise ? endAngle : [startAngle, startAngle = endAngle][0];\n pointer.pathElement.map(function (element) {\n if (pointer.type === 'RangeBar') {\n element.setAttribute('d', getCompleteArc(location, startAngle, endAngle, pointer.currentRadius, (pointer.currentRadius - pointer.pointerWidth)));\n }\n else {\n element.setAttribute('transform', 'rotate(' + getAngleFromValue(value, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise) + ',' + location.x + ',' + location.y + ')');\n }\n element.setAttribute('aria-label', pointer.description || 'Pointer:' + value.toString());\n });\n };\n /**\n * Method to render the marker pointer of the ciruclar gauge.\n * @return {void}\n */\n PointerRenderer.prototype.drawMarkerPointer = function (axis, axisIndex, index, parentElement, gauge) {\n var pointer = axis.pointers[index];\n var location = getLocationFromAngle(0, pointer.currentRadius, gauge.midPoint);\n pointer.pathElement.push(appendPath(calculateShapes(location, pointer.markerShape, new Size(pointer.markerWidth, pointer.markerHeight), pointer.imageUrl, new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_Marker_' + index, pointer.color, pointer.border.width, pointer.border.color, null, '0', '', '')), parentElement, gauge, pointer.markerShape === 'Circle' ? 'Ellipse' : (pointer.markerShape === 'Image' ? 'Image' : 'Path')));\n };\n /**\n * Method to render the range bar pointer of the ciruclar gauge.\n * @return {void}\n */\n PointerRenderer.prototype.drawRangeBarPointer = function (axis, axisIndex, index, parentElement, gauge) {\n var pointer = axis.pointers[index];\n pointer.pathElement.push(appendPath(new PathOption(gauge.element.id + '_Axis_' + axisIndex + '_Pointer_RangeBar_' + index, pointer.color, pointer.border.width, pointer.border.color, 1, '0', ''), parentElement, gauge));\n };\n /**\n * Method to perform the animation of the pointer in circular gauge.\n * @return {void}\n */\n PointerRenderer.prototype.doPointerAnimation = function (pointer, axis) {\n var _this = this;\n var startValue = axis.visibleRange.min;\n var endValue = pointer.currentValue;\n if (pointer.animation.enable && startValue !== endValue && this.gauge.animatePointer) {\n pointer.pathElement.map(function (element) {\n if (pointer.type === 'RangeBar') {\n _this.performRangeBarAnimation(element, startValue, endValue, axis, pointer, pointer.currentRadius, (pointer.currentRadius - pointer.pointerWidth));\n }\n else {\n _this.performNeedleAnimation(element, startValue, endValue, axis, pointer, pointer.currentRadius, (pointer.currentRadius - pointer.pointerWidth));\n }\n });\n }\n };\n /**\n * Perform the needle and marker pointer animation for circular gauge.\n * @return {void}\n * @private\n */\n PointerRenderer.prototype.performNeedleAnimation = function (element, start, end, axis, pointer, radius, innerRadius) {\n var _this = this;\n var isClockWise = axis.direction === 'ClockWise';\n var startAngle = getAngleFromValue(start, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var pointAngle = getAngleFromValue(end, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var endAngle = startAngle > pointAngle ? (pointAngle + 360) : pointAngle;\n var sweepAngle;\n new Animation({}).animate(element, {\n duration: pointer.animation.duration,\n progress: function (args) {\n sweepAngle = (start < end || Math.round(startAngle) === Math.round(endAngle)) ?\n isClockWise ? (endAngle - startAngle) : (endAngle - startAngle - 360) :\n isClockWise ? (endAngle - startAngle - 360) : (endAngle - startAngle);\n element.style.animation = 'None';\n element.setAttribute('transform', 'rotate(' + linear(args.timeStamp, startAngle, sweepAngle, args.duration) + ',' +\n _this.gauge.midPoint.x.toString() + ',' + _this.gauge.midPoint.y.toString() + ')');\n },\n end: function (model) {\n _this.setPointerValue(axis, pointer, end);\n if (pointer.type === 'Marker' || (element.id.indexOf('_Pointer_NeedleCap') >= 0)) {\n _this.gauge.trigger(animationComplete, { axis: axis, pointer: pointer });\n }\n }\n });\n };\n /**\n * Perform the range bar pointer animation for circular gauge.\n * @return {void}\n * @private\n */\n PointerRenderer.prototype.performRangeBarAnimation = function (element, start, end, axis, pointer, radius, innerRadius) {\n var _this = this;\n var isClockWise = axis.direction === 'ClockWise';\n var startAngle = getAngleFromValue(start, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var minAngle = getAngleFromValue(axis.visibleRange.min, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var pointAngle = getAngleFromValue(end, axis.visibleRange.max, axis.visibleRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var sweepAngle;\n var endAngle = startAngle > pointAngle ? (pointAngle + 360) : pointAngle;\n new Animation({}).animate(element, {\n duration: pointer.animation.duration,\n progress: function (arg) {\n element.style.animation = 'None';\n sweepAngle = (start < end || Math.round(startAngle) === Math.round(endAngle)) ?\n isClockWise ? (endAngle - startAngle) : (endAngle - startAngle - 360) :\n isClockWise ? (endAngle - startAngle - 360) : (endAngle - startAngle);\n if (isClockWise) {\n element.setAttribute('d', getCompleteArc(_this.gauge.midPoint, minAngle, linear(arg.timeStamp, startAngle, sweepAngle, arg.duration) + 0.0001, radius, innerRadius));\n }\n else {\n element.setAttribute('d', getCompleteArc(_this.gauge.midPoint, linear(arg.timeStamp, startAngle, sweepAngle, arg.duration), minAngle + 0.0001, radius, innerRadius));\n }\n },\n end: function (model) {\n _this.setPointerValue(axis, pointer, end);\n _this.gauge.trigger(animationComplete, { axis: axis, pointer: pointer });\n }\n });\n };\n return PointerRenderer;\n}());\nexport { PointerRenderer };\n","import { createElement } from '@syncfusion/ej2-base';\nimport { calculateSum, VisibleLabels, measureText } from '../utils/helper';\nimport { Size, Rect, stringToNumber, getLabelFormat } from '../utils/helper';\nimport { axisLabelRender } from '../model/constants';\nimport { AxisRenderer } from './axis-renderer';\nimport { PointerRenderer } from './pointer-renderer';\n/**\n * Specifies the CircularGauge Axis Layout\n */\nvar labelPadding = 10;\nvar AxisLayoutPanel = /** @class */ (function () {\n function AxisLayoutPanel(gauge) {\n this.gauge = gauge;\n this.axisRenderer = new AxisRenderer(gauge);\n this.pointerRenderer = new PointerRenderer(gauge);\n }\n /**\n * Measure the calculate the axis size and radius.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.measureAxis = function (rect) {\n this.measureAxisSize(this.gauge, rect);\n this.calculateAxesRadius();\n };\n /**\n * Measure to calculate the axis radius of the circular gauge.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateAxesRadius = function () {\n var totalRadius;\n var currentRadius;\n var rangeMaximumRadius = 0;\n for (var _i = 0, _a = this.gauge.axes; _i < _a.length; _i++) {\n var axis = _a[_i];\n totalRadius = (Math.min(axis.rect.width, axis.rect.height) / 2);\n currentRadius = axis.radius != null ? stringToNumber(axis.radius, totalRadius) : totalRadius;\n rangeMaximumRadius = Math.max.apply(Math, axis.ranges.map(function (value) {\n return value.radius ?\n (value.radius.indexOf('%') < 0 ? 100 : parseInt(value.radius, 10)) : 0;\n }));\n currentRadius = (rangeMaximumRadius > 100 && axis.radius == null) ?\n (currentRadius * 100) / rangeMaximumRadius : currentRadius;\n axis.currentRadius = currentRadius - axis.nearSize;\n axis.visibleRange.interval = this.calculateNumericInterval(axis, axis.rect);\n this.calculateVisibleLabels(axis);\n }\n };\n /**\n * Measure to calculate the axis size.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.measureAxisSize = function (gauge, rect) {\n var _this = this;\n var sum;\n this.computeSize(gauge.axes, rect);\n gauge.axes.map(function (axis, index) {\n sum = calculateSum(index, _this.farSizes.length - 1, _this.farSizes);\n axis.rect = new Rect(rect.x + sum, rect.y + sum, rect.width - (sum * 2), rect.height - (sum * 2));\n });\n };\n /**\n * Calculate the axis values of the circular gauge.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateAxisValues = function (rect) {\n for (var _i = 0, _a = this.gauge.axes; _i < _a.length; _i++) {\n var axis = _a[_i];\n this.calculateVisibleRange(axis, rect);\n this.calculateVisibleLabels(axis);\n }\n };\n /**\n * Calculate the visible range of an axis.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateVisibleRange = function (axis, rect) {\n var interval = axis.majorTicks.interval;\n var minimumValue = Math.min(axis.minimum === null ? 0 : axis.minimum, axis.maximum);\n var maximumValue = Math.max(axis.minimum, axis.maximum === null ? 100 : axis.maximum);\n axis.pointers.map(function (pointer) {\n pointer.currentValue = pointer.value !== null ?\n pointer.value < minimumValue ? minimumValue : pointer.value > maximumValue ? maximumValue : pointer.value\n : minimumValue;\n minimumValue = axis.minimum === null ? Math.min(pointer.currentValue, minimumValue) : minimumValue;\n maximumValue = axis.maximum === null ? Math.max(pointer.currentValue, maximumValue) : maximumValue;\n });\n minimumValue = (minimumValue === maximumValue) ?\n (interval !== null ? minimumValue - interval : minimumValue - 1) : minimumValue;\n axis.visibleRange = { min: minimumValue, max: maximumValue, interval: interval };\n axis.visibleRange.interval = this.calculateNumericInterval(axis, rect);\n };\n /**\n * Calculate the numeric intervals of an axis range.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateNumericInterval = function (axis, rect) {\n if (axis.majorTicks.interval !== null) {\n return axis.majorTicks.interval;\n }\n var totalAngle = axis.endAngle - axis.startAngle;\n totalAngle = totalAngle <= 0 ? (totalAngle + 360) : totalAngle;\n return this.calculateNiceInterval(axis.visibleRange.max, axis.visibleRange.min, axis.currentRadius ? axis.currentRadius : (rect.width / 2), totalAngle);\n };\n /**\n * Calculate the nice interval of an axis range.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateNiceInterval = function (maxValue, minValue, radius, degree) {\n var delta = maxValue - minValue;\n var circumference = 2 * Math.PI * radius * (degree / 360);\n var desiredIntervalsCount = Math.max((circumference * ((0.533 * 3) / 100)), 1);\n var niceInterval = delta / desiredIntervalsCount;\n var minInterval = Math.pow(10, Math.floor(Math.log(niceInterval) / Math.log(10)));\n for (var _i = 0, _a = [10, 5, 2, 1]; _i < _a.length; _i++) {\n var interval = _a[_i];\n var currentInterval = minInterval * interval;\n if (desiredIntervalsCount < (delta / currentInterval)) {\n break;\n }\n niceInterval = currentInterval;\n }\n return niceInterval;\n };\n /**\n * Calculate the visible labels of an axis.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.calculateVisibleLabels = function (axis) {\n var style = axis.labelStyle;\n var customLabelFormat = style.format && style.format.match('{value}') !== null;\n var format = this.gauge.intl.getNumberFormat({\n format: getLabelFormat(style.format), useGrouping: this.gauge.useGroupingSeparator\n });\n var argsData;\n axis.visibleLabels = [];\n for (var i = axis.visibleRange.min, interval = axis.visibleRange.interval, max = axis.visibleRange.max; (i <= max && interval); i += interval) {\n argsData = {\n cancel: false, name: axisLabelRender, axis: axis,\n text: customLabelFormat ? style.format.replace(new RegExp('{value}', 'g'), format(i)) :\n format(i),\n value: i\n };\n this.gauge.trigger(axisLabelRender, argsData);\n if (!argsData.cancel) {\n axis.visibleLabels.push(new VisibleLabels(argsData.text, i));\n }\n }\n this.getMaxLabelWidth(this.gauge, axis);\n };\n /**\n * Measure the axes available size.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.computeSize = function (axes, rect) {\n var lineSize;\n var outerHeight;\n var innerHeight;\n var isMajorTickOutside;\n var isMinorTickOutside;\n var isLabelOutside;\n var axisPadding = 5;\n var majorTickOffset = 0;\n var minorTickOffset = 0;\n var labelOffset = 0;\n this.farSizes = [];\n this.calculateAxisValues(rect);\n for (var _i = 0, axes_1 = axes; _i < axes_1.length; _i++) {\n var axis = axes_1[_i];\n lineSize = (axis.lineStyle.width / 2);\n outerHeight = 0;\n innerHeight = 0;\n isMajorTickOutside = axis.majorTicks.position === 'Outside';\n majorTickOffset = axis.majorTicks.offset;\n isMinorTickOutside = axis.minorTicks.position === 'Outside';\n minorTickOffset = axis.minorTicks.offset;\n isLabelOutside = axis.labelStyle.position === 'Outside';\n labelOffset = axis.labelStyle.offset;\n // Calculating the outer space of the axis\n outerHeight += !(isMajorTickOutside && isMinorTickOutside && isLabelOutside) ? axisPadding : 0;\n outerHeight += (isMajorTickOutside ? (axis.majorTicks.height + lineSize) : 0) +\n (isLabelOutside ? (axis.maxLabelSize.height + labelPadding + labelOffset) : 0) +\n ((isMinorTickOutside && !isMajorTickOutside) ? (axis.minorTicks.height + lineSize) : 0) + lineSize;\n outerHeight += (isMajorTickOutside && isMinorTickOutside) ? Math.max(majorTickOffset, minorTickOffset) :\n (isMajorTickOutside ? majorTickOffset : isMinorTickOutside ? minorTickOffset : 0);\n // Calculating the inner space of the axis\n innerHeight += (!isMajorTickOutside ? (axis.majorTicks.height + lineSize) : 0) +\n (!isLabelOutside ? (axis.maxLabelSize.height + labelPadding + labelOffset) : 0) +\n ((!isMinorTickOutside && isMajorTickOutside) ? (axis.minorTicks.height + lineSize) : 0) + lineSize;\n innerHeight += (!isMajorTickOutside && !isMinorTickOutside) ? Math.max(majorTickOffset, minorTickOffset) :\n (!isMajorTickOutside ? majorTickOffset : !isMinorTickOutside ? minorTickOffset : 0);\n if (this.farSizes[this.farSizes.length - 1]) {\n this.farSizes[this.farSizes.length - 1] += (innerHeight + outerHeight);\n }\n axis.nearSize = outerHeight - axisPadding;\n axis.farSize = innerHeight;\n outerHeight = (this.gauge.axes.length === (this.farSizes.length + 1)) ? 0 : outerHeight;\n this.farSizes.push(outerHeight);\n }\n };\n /**\n * To render the axis element of the circular gauge.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.renderAxes = function (animate) {\n var _this = this;\n if (animate === void 0) { animate = true; }\n var gauge = this.gauge;\n var renderer = this.axisRenderer;\n var element;\n var axesElements = gauge.renderer.createGroup({\n 'id': gauge.element.id + '_AxesCollection',\n 'clip-path': 'url(#' + gauge.element.id + '_GaugeAreaClipRect_' + ')'\n });\n // To append the secondary element for annotation and tooltip\n gauge.element.appendChild(createElement('div', {\n id: gauge.element.id + '_Secondary_Element',\n styles: 'position: relative'\n }));\n gauge.axes.map(function (axis, index) {\n element = gauge.renderer.createGroup({\n id: gauge.element.id + '_Axis_Group_' + index\n });\n renderer.drawAxisOuterLine(axis, index, element, gauge);\n renderer.drawAxisRange(axis, index, element, gauge);\n renderer.drawAxisLine(axis, index, element, gauge);\n renderer.drawMajorTickLines(axis, index, element, gauge);\n renderer.drawMinorTickLines(axis, index, element, gauge);\n renderer.drawAxisLabels(axis, index, element, gauge);\n _this.pointerRenderer.drawPointers(axis, index, element, gauge, animate);\n if (gauge.annotationsModule) {\n gauge.annotationsModule.renderAnnotation(axis, index);\n }\n axesElements.appendChild(element);\n });\n // For append clip rect for axes\n gauge.svgObject.appendChild(gauge.renderer.drawClipPath({\n 'id': gauge.element.id + '_GaugeAreaClipRect_',\n 'x': 0, 'y': 0,\n 'width': gauge.availableSize.width,\n 'height': gauge.availableSize.height,\n 'fill': 'transparent', 'stroke': 'transparent'\n }));\n gauge.svgObject.appendChild(axesElements);\n };\n /**\n * Calculate maximum label width for the axis.\n * @return {void}\n */\n AxisLayoutPanel.prototype.getMaxLabelWidth = function (gauge, axis) {\n axis.maxLabelSize = new Size(0, 0);\n for (var _i = 0, _a = axis.visibleLabels; _i < _a.length; _i++) {\n var label = _a[_i];\n label.size = measureText(label.text, axis.labelStyle.font);\n axis.maxLabelSize.width = label.size.width > axis.maxLabelSize.width ?\n label.size.width : axis.maxLabelSize.width;\n axis.maxLabelSize.height = label.size.height > axis.maxLabelSize.height ?\n label.size.height : axis.maxLabelSize.height;\n }\n };\n return AxisLayoutPanel;\n}());\nexport { AxisLayoutPanel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Circular Gauge\n */\nimport { Property, NotifyPropertyChanges, Component, Complex, Browser } from '@syncfusion/ej2-base';\nimport { Event, SvgRenderer, EventHandler, Collection, Internationalization } from '@syncfusion/ej2-base';\nimport { remove, createElement } from '@syncfusion/ej2-base';\nimport { TextOption, textElement, RectOption, getAngleFromLocation, getValueFromAngle, removeElement } from './utils/helper';\nimport { Size, stringToNumber, measureText, Rect, GaugeLocation, getElement, getPointer, setStyles, toPixel } from './utils/helper';\nimport { getAngleFromValue, getPathArc } from './utils/helper';\nimport { Border, Margin, Font, TooltipSettings } from './model/base';\nimport { Axis } from './axes/axis';\nimport { Annotations } from './annotations/annotations';\nimport { GaugeTooltip } from './user-interaction/tooltip';\nimport { load, loaded, gaugeMouseMove, gaugeMouseLeave, gaugeMouseDown } from './model/constants';\nimport { gaugeMouseUp, dragEnd, dragMove, dragStart, resized } from './model/constants';\nimport { AxisLayoutPanel } from './axes/axis-panel';\n/**\n * Represents the Circular gauge control.\n * ```html\n *
\n * \n * ```\n */\nvar CircularGauge = /** @class */ (function (_super) {\n __extends(CircularGauge, _super);\n /**\n * Constructor for creating the widget\n * @hidden\n */\n function CircularGauge(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.pointerneedRefresh = true;\n return _this;\n }\n /**\n * To create svg object, renderer and binding events for the container.\n */\n CircularGauge.prototype.preRender = function () {\n this.unWireEvents();\n this.trigger(load, { gauge: this });\n this.themeEffect();\n this.initPrivateVariable();\n this.setCulture();\n this.createSvg();\n this.wireEvents();\n };\n CircularGauge.prototype.themeEffect = function () {\n if (this.theme === 'Highcontrast') {\n this.titleStyle.color = this.titleStyle.color || '#FFFFFF';\n this.setThemeColors('#FFFFFF', '#FFFFFF');\n }\n else {\n this.titleStyle.color = this.titleStyle.color || '#424242';\n this.setThemeColors('#212121', '#757575');\n }\n };\n CircularGauge.prototype.setThemeColors = function (labelcolor, others) {\n for (var _i = 0, _a = this.axes; _i < _a.length; _i++) {\n var axis = _a[_i];\n axis.lineStyle.color = axis.lineStyle.color || others;\n axis.labelStyle.font.color = axis.labelStyle.font.color || labelcolor;\n axis.majorTicks.color = axis.majorTicks.color || others;\n axis.minorTicks.color = axis.minorTicks.color || others;\n for (var _b = 0, _c = axis.pointers; _b < _c.length; _b++) {\n var pointer = _c[_b];\n pointer.color = pointer.color || others;\n pointer.needleTail.color = pointer.needleTail.color || others;\n pointer.needleTail.border.color = pointer.needleTail.border.color || others;\n pointer.cap.color = pointer.cap.color || others;\n pointer.cap.border.color = pointer.cap.border.color || others;\n }\n }\n };\n /**\n * To render the circular gauge elements\n */\n CircularGauge.prototype.render = function () {\n this.calculateBounds();\n this.renderElements();\n };\n /**\n * Method to unbind events for circular gauge\n */\n CircularGauge.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.gaugeOnMouseDown);\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.mouseMove);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.mouseEnd);\n EventHandler.remove(this.element, 'contextmenu', this.gaugeRightClick);\n EventHandler.remove(this.element, (Browser.isPointer ? 'pointerleave' : 'mouseleave'), this.mouseLeave);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.gaugeResize);\n };\n /**\n * Method to bind events for circular gauge\n */\n CircularGauge.prototype.wireEvents = function () {\n /*! Bind the Event handler */\n EventHandler.add(this.element, Browser.touchStartEvent, this.gaugeOnMouseDown, this);\n EventHandler.add(this.element, Browser.touchMoveEvent, this.mouseMove, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.mouseEnd, this);\n EventHandler.add(this.element, 'contextmenu', this.gaugeRightClick, this);\n EventHandler.add(this.element, (Browser.isPointer ? 'pointerleave' : 'mouseleave'), this.mouseLeave, this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.gaugeResize.bind(this));\n /*! Apply the style for circular gauge */\n this.setGaugeStyle(this.element);\n };\n /**\n * Handles the mouse move.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.mouseMove = function (e) {\n var args = this.getMouseArgs(e, 'touchmove', gaugeMouseMove);\n this.trigger(gaugeMouseMove, args);\n var dragArgs;\n var tooltip = this.tooltipModule;\n if (!args.cancel) {\n if (this.tooltip.enable && tooltip) {\n if (args.target.id.indexOf('_Pointer_') >= 0 && !this.activePointer) {\n tooltip.renderTooltip(args.target);\n }\n else {\n tooltip.ejTooltip.close();\n }\n }\n if (this.enablePointerDrag && this.activePointer) {\n dragArgs = {\n axis: this.activeAxis,\n pointer: this.activePointer,\n previousValue: this.activePointer.currentValue,\n name: dragMove,\n currentValue: null\n };\n this.pointerDrag(new GaugeLocation(args.x, args.y));\n dragArgs.currentValue = this.activePointer.currentValue;\n this.trigger(dragMove, dragArgs);\n }\n }\n return false;\n };\n /**\n * Handles the mouse leave.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.mouseLeave = function (e) {\n this.activeAxis = null;\n this.activePointer = null;\n this.svgObject.setAttribute('cursor', 'auto');\n var args = this.getMouseArgs(e, 'touchmove', gaugeMouseLeave);\n this.trigger(gaugeMouseLeave, args);\n if (this.tooltip.enable && this.tooltipModule) {\n this.tooltipModule.ejTooltip.close();\n }\n return false;\n };\n /**\n * Handles the mouse right click.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.gaugeRightClick = function (event) {\n if (event.buttons === 2 || event.pointerType === 'touch') {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n return true;\n };\n /**\n * Handles the pointer draf while mouse move on gauge.\n * @private\n */\n CircularGauge.prototype.pointerDrag = function (location) {\n var axis = this.activeAxis;\n var range = axis.visibleRange;\n var value = getValueFromAngle(getAngleFromLocation(this.midPoint, location), range.max, range.min, axis.startAngle, axis.endAngle, axis.direction === 'ClockWise');\n if (value >= range.min && value <= range.max) {\n this.activePointer.currentValue = value;\n this.activePointer.value = value;\n this.gaugeAxisLayoutPanel.pointerRenderer.setPointerValue(axis, this.activePointer, value);\n }\n };\n /**\n * Handles the mouse down on gauge.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.gaugeOnMouseDown = function (e) {\n var currentPointer;\n var args = this.getMouseArgs(e, 'touchstart', gaugeMouseDown);\n this.trigger(gaugeMouseDown, args);\n if (!args.cancel && args.target.id.indexOf('_Pointer_') >= 0 &&\n args.target.id.indexOf(this.element.id + '_Axis_') >= 0) {\n currentPointer = getPointer(args.target.id, this);\n this.activeAxis = this.axes[currentPointer.axisIndex];\n this.activePointer = this.activeAxis.pointers[currentPointer.pointerIndex];\n this.trigger(dragStart, {\n axis: this.activeAxis,\n name: dragStart,\n pointer: this.activePointer,\n currentValue: this.activePointer.currentValue\n });\n this.svgObject.setAttribute('cursor', 'pointer');\n }\n return false;\n };\n /**\n * Handles the mouse end.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.mouseEnd = function (e) {\n var args = this.getMouseArgs(e, 'touchend', gaugeMouseUp);\n var isTouch = e.pointerType === 'touch' || e.pointerType === '2' || e.type === 'touchend';\n var tooltipInterval;\n var tooltip = this.tooltipModule;\n this.trigger(gaugeMouseUp, args);\n if (this.activeAxis && this.activePointer) {\n this.trigger(dragEnd, {\n name: dragEnd,\n axis: this.activeAxis,\n pointer: this.activePointer,\n currentValue: this.activePointer.currentValue\n });\n if (!args.cancel && isTouch && this.tooltip.enable && tooltip) {\n if (args.target.id.indexOf('_Pointer_') >= 0) {\n tooltip.renderTooltip(args.target);\n tooltipInterval = window.setTimeout(function () {\n tooltip.ejTooltip.close();\n }, 2000);\n }\n }\n this.activeAxis = null;\n this.activePointer = null;\n }\n this.svgObject.setAttribute('cursor', 'auto');\n return false;\n };\n /**\n * Handles the mouse event arguments.\n * @return {IMouseEventArgs}\n * @private\n */\n CircularGauge.prototype.getMouseArgs = function (e, type, name) {\n var rect = this.element.getBoundingClientRect();\n var location = new GaugeLocation(-rect.left, -rect.top);\n var isTouch = (e.type === type);\n location.x += isTouch ? e.changedTouches[0].clientX : e.clientX;\n location.y += isTouch ? e.changedTouches[0].clientY : e.clientY;\n return {\n cancel: false, name: name,\n x: location.x, y: location.y,\n target: isTouch ? e.target : e.target\n };\n };\n /**\n * Handles the gauge resize.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.gaugeResize = function (e) {\n var _this = this;\n var args = {\n gauge: this,\n previousSize: new Size(this.availableSize.width, this.availableSize.height),\n name: resized,\n currentSize: new Size(0, 0)\n };\n this.animatePointer = false;\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n if (this.element.classList.contains('e-circulargauge')) {\n this.resizeTo = window.setTimeout(function () {\n _this.createSvg();\n _this.calculateBounds();\n _this.renderElements();\n args.currentSize = _this.availableSize;\n _this.trigger(resized, args);\n }, 500);\n }\n return false;\n };\n /**\n * Applying styles for circular gauge elements\n */\n CircularGauge.prototype.setGaugeStyle = function (element) {\n element.style.touchAction = this.enablePointerDrag ? 'none' : 'element';\n element.style.msTouchAction = this.enablePointerDrag ? 'none' : 'element';\n element.style.msContentZooming = 'none';\n element.style.msUserSelect = 'none';\n element.style.webkitUserSelect = 'none';\n element.style.position = 'relative';\n };\n /**\n * Method to set culture for gauge\n */\n CircularGauge.prototype.setCulture = function () {\n this.intl = new Internationalization();\n };\n /**\n * Methods to create svg element for circular gauge.\n */\n CircularGauge.prototype.createSvg = function () {\n this.removeSvg();\n this.calculateSvgSize();\n this.svgObject = this.renderer.createSvg({\n id: this.element.id + '_svg',\n width: this.availableSize.width,\n height: this.availableSize.height\n });\n };\n /**\n * To Remove the SVG from circular gauge.\n * @return {boolean}\n * @private\n */\n CircularGauge.prototype.removeSvg = function () {\n removeElement(this.element.id + '_Secondary_Element');\n if (this.svgObject) {\n while (this.svgObject.childNodes.length > 0) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode) {\n remove(this.svgObject);\n }\n }\n };\n /**\n * To initialize the circular gauge private variable.\n * @private\n */\n CircularGauge.prototype.initPrivateVariable = function () {\n this.renderer = new SvgRenderer(this.element.id);\n this.gaugeAxisLayoutPanel = new AxisLayoutPanel(this);\n this.animatePointer = true;\n };\n /**\n * To calculate the size of the circular gauge element.\n */\n CircularGauge.prototype.calculateSvgSize = function () {\n var containerWidth = this.element.offsetWidth;\n var containerHeight = this.element.offsetHeight;\n var width = stringToNumber(this.width, containerWidth) || containerWidth || 600;\n var height = stringToNumber(this.height, containerHeight) || containerHeight || 450;\n this.availableSize = new Size(width, height);\n };\n /**\n * Method to calculate the availble size for circular gauge.\n */\n CircularGauge.prototype.calculateBounds = function () {\n var padding = 5;\n var margin = this.margin;\n // Title Height;\n var titleHeight = 0;\n if (this.title) {\n titleHeight = measureText(this.title, this.titleStyle).height + padding;\n }\n var top = margin.top + titleHeight + this.border.width;\n var left = margin.left + this.border.width;\n var width = this.availableSize.width - left - margin.right - this.border.width;\n var height = this.availableSize.height - top - this.border.width - margin.bottom;\n var radius = Math.min(width, height) / 2;\n var rect = new Rect((left + (width / 2) - radius), (top + (height / 2) - radius), radius * 2, radius * 2);\n var centerX = this.centerX !== null ?\n stringToNumber(this.centerX, this.availableSize.width) : rect.x + (rect.width / 2);\n var centerY = this.centerY !== null ?\n stringToNumber(this.centerY, this.availableSize.height) : rect.y + (rect.height / 2);\n this.midPoint = new GaugeLocation(centerX, centerY);\n this.gaugeAxisLayoutPanel.measureAxis(rect);\n };\n /**\n * To render elements for circular gauge\n */\n CircularGauge.prototype.renderElements = function (animate) {\n if (animate === void 0) { animate = true; }\n this.renderBorder();\n this.renderTitle();\n this.gaugeAxisLayoutPanel.renderAxes(animate);\n this.element.appendChild(this.svgObject);\n this.trigger(loaded, { gauge: this });\n };\n /**\n * Method to render the title for circular gauge.\n */\n CircularGauge.prototype.renderTitle = function () {\n if (this.title) {\n var size = measureText(this.title, this.titleStyle);\n var options = new TextOption(this.element.id + '_CircularGaugeTitle', this.availableSize.width / 2, this.margin.top + 3 * (size.height / 4), 'middle', this.title);\n var element = textElement(options, this.titleStyle, this.titleStyle.color, this.svgObject, '');\n element.setAttribute('aria-label', this.description || this.title);\n element.setAttribute('tabindex', this.tabIndex.toString());\n }\n };\n /**\n * Method to render the border for circular gauge.\n */\n CircularGauge.prototype.renderBorder = function () {\n var borderWidth = this.border.width;\n if (borderWidth > 0 || (this.background !== null && this.background !== 'transparent')) {\n this.svgObject.appendChild(this.renderer.drawRectangle(new RectOption(this.element.id + '_CircularGaugeBorder', this.background, this.border, null, new Rect(borderWidth / 2, borderWidth / 2, this.availableSize.width - borderWidth, this.availableSize.height - borderWidth))));\n }\n };\n /**\n * Method to set the pointer value dynamically for circulargauge.\n */\n CircularGauge.prototype.setPointerValue = function (axisIndex, pointerIndex, value) {\n var _this = this;\n var axis = this.axes[axisIndex];\n var pointer = axis.pointers[pointerIndex];\n var pointerRadius = pointer.currentRadius;\n var enableAnimation = pointer.animation.enable;\n this.pointerneedRefresh = false;\n value = value < axis.visibleRange.min ? axis.visibleRange.min : value;\n value = value > axis.visibleRange.max ? axis.visibleRange.max : value;\n pointer.pathElement.map(function (element) {\n if (pointer.type === 'RangeBar') {\n setStyles(element, pointer.color, pointer.border);\n if (enableAnimation) {\n _this.gaugeAxisLayoutPanel.pointerRenderer.performRangeBarAnimation(element, pointer.currentValue, value, axis, pointer, pointerRadius, (pointerRadius - pointer.pointerWidth));\n }\n else {\n _this.gaugeAxisLayoutPanel.pointerRenderer.setPointerValue(axis, pointer, value);\n }\n }\n else {\n if (element.id.indexOf('_Pointer_NeedleCap_') >= 0) {\n setStyles(element, pointer.cap.color, pointer.cap.border);\n }\n else if (element.id.indexOf('_Pointer_NeedleTail_') >= 0) {\n setStyles(element, pointer.needleTail.color, pointer.needleTail.border);\n }\n else if (element.id.indexOf('_Pointer_NeedleRect_') >= 0) {\n setStyles(element, 'transparent', { color: 'transparent', width: 0 });\n }\n else {\n setStyles(element, pointer.color, pointer.border);\n }\n if (enableAnimation) {\n _this.gaugeAxisLayoutPanel.pointerRenderer.performNeedleAnimation(element, pointer.currentValue, value, axis, pointer, pointerRadius, (pointerRadius - pointer.pointerWidth));\n }\n else {\n _this.gaugeAxisLayoutPanel.pointerRenderer.setPointerValue(axis, pointer, value);\n }\n }\n });\n pointer.currentValue = value;\n pointer.value = value;\n };\n /**\n * Method to set the annotation content dynamically for circular gauge.\n */\n CircularGauge.prototype.setAnnotationValue = function (axisIndex, annotationIndex, content) {\n var isElementExist = getElement(this.element.id + '_Annotations_' + axisIndex) !== null;\n var element = getElement(this.element.id + '_Annotations_' + axisIndex) ||\n createElement('div', {\n id: this.element.id + '_Annotations_' + axisIndex\n });\n var annotation = this.axes[axisIndex].annotations[annotationIndex];\n if (content !== null) {\n removeElement(this.element.id + '_Axis_' + axisIndex + '_Annotation_' + annotationIndex);\n annotation.content = content;\n this.annotationsModule.createTemplate(element, annotationIndex, axisIndex);\n if (!isElementExist) {\n getElement(this.element.id + '_Secondary_Element').appendChild(element);\n }\n }\n };\n /**\n * Method to set the range values dynamically for circular gauge.\n */\n CircularGauge.prototype.setRangeValue = function (axisIndex, rangeIndex, start, end) {\n var element = getElement(this.element.id + '_Axis_' + axisIndex + '_Range_' + rangeIndex);\n var axis = this.axes[axisIndex];\n var range = axis.ranges[rangeIndex];\n var axisRange = axis.visibleRange;\n var isClockWise = axis.direction === 'ClockWise';\n var startValue = Math.min(Math.max(start, axisRange.min), end);\n var endValue = Math.min(Math.max(start, end), axisRange.max);\n var startAngle = getAngleFromValue(startValue, axisRange.max, axisRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var endAngle = getAngleFromValue(endValue, axisRange.max, axisRange.min, axis.startAngle, axis.endAngle, isClockWise);\n var startWidth;\n if (range.startWidth.length > 0) {\n startWidth = toPixel(range.startWidth, range.currentRadius);\n }\n else {\n startWidth = range.startWidth;\n }\n var endWidth;\n if (range.endWidth.length > 0) {\n endWidth = toPixel(range.endWidth, range.currentRadius);\n }\n else {\n endWidth = range.endWidth;\n }\n endAngle = isClockWise ? endAngle : [startAngle, startAngle = endAngle][0];\n endWidth = isClockWise ? endWidth : [startWidth, startWidth = endWidth][0];\n element.setAttribute('d', getPathArc(this.midPoint, Math.round(startAngle), Math.round(endAngle), range.currentRadius, startWidth, endWidth));\n setStyles(element, (range.color ? range.color : range.rangeColor), {\n color: (range.color ? range.color : range.rangeColor),\n width: 0\n });\n };\n /**\n * To destroy the widget\n * @method destroy\n * @return {void}\n * @member of Circular-Gauge\n */\n CircularGauge.prototype.destroy = function () {\n this.unWireEvents();\n this.removeSvg();\n _super.prototype.destroy.call(this);\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n CircularGauge.prototype.requiredModules = function () {\n var modules = [];\n var annotationEnable = false;\n var axes = this.axes;\n axes.map(function (axis) {\n axis.annotations.map(function (annotation) {\n annotationEnable = annotationEnable || annotation.content !== null;\n });\n });\n if (annotationEnable) {\n modules.push({\n member: 'Annotations',\n args: [this, Annotations]\n });\n }\n if (this.tooltip.enable) {\n modules.push({\n member: 'Tooltip',\n args: [this, GaugeTooltip]\n });\n }\n return modules;\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n CircularGauge.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n CircularGauge.prototype.onPropertyChanged = function (newProp, oldProp) {\n // property method calculated\n var renderer = false;\n var refreshBounds = false;\n var refreshWithoutAnimation = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'height':\n case 'width':\n case 'centerX':\n case 'centerY':\n case 'margin':\n this.createSvg();\n refreshBounds = true;\n break;\n case 'title':\n refreshBounds = (newProp.title === '' || oldProp.title === '');\n renderer = !(newProp.title === '' || oldProp.title === '');\n break;\n case 'titleStyle':\n if (newProp.titleStyle && newProp.titleStyle.size) {\n refreshBounds = true;\n }\n else {\n renderer = true;\n }\n break;\n case 'border':\n renderer = true;\n break;\n case 'background':\n renderer = true;\n break;\n case 'axes':\n refreshWithoutAnimation = true;\n break;\n }\n }\n if (!refreshBounds && renderer) {\n this.removeSvg();\n this.renderElements();\n }\n if (refreshBounds) {\n this.removeSvg();\n this.calculateBounds();\n this.renderElements();\n }\n if (refreshWithoutAnimation && !renderer && !refreshBounds && this.pointerneedRefresh) {\n this.removeSvg();\n this.calculateBounds();\n this.renderElements(false);\n }\n this.pointerneedRefresh = false;\n };\n /**\n * Get component name for circular gauge\n * @private\n */\n CircularGauge.prototype.getModuleName = function () {\n return 'circulargauge';\n };\n __decorate([\n Property(null)\n ], CircularGauge.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], CircularGauge.prototype, \"height\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 0 }, Border)\n ], CircularGauge.prototype, \"border\", void 0);\n __decorate([\n Property('transparent')\n ], CircularGauge.prototype, \"background\", void 0);\n __decorate([\n Property('')\n ], CircularGauge.prototype, \"title\", void 0);\n __decorate([\n Complex({ size: '15px', color: null }, Font)\n ], CircularGauge.prototype, \"titleStyle\", void 0);\n __decorate([\n Complex({}, Margin)\n ], CircularGauge.prototype, \"margin\", void 0);\n __decorate([\n Collection([{}], Axis)\n ], CircularGauge.prototype, \"axes\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], CircularGauge.prototype, \"tooltip\", void 0);\n __decorate([\n Property(false)\n ], CircularGauge.prototype, \"enablePointerDrag\", void 0);\n __decorate([\n Property(null)\n ], CircularGauge.prototype, \"centerX\", void 0);\n __decorate([\n Property(null)\n ], CircularGauge.prototype, \"centerY\", void 0);\n __decorate([\n Property('Material')\n ], CircularGauge.prototype, \"theme\", void 0);\n __decorate([\n Property(false)\n ], CircularGauge.prototype, \"useGroupingSeparator\", void 0);\n __decorate([\n Property(null)\n ], CircularGauge.prototype, \"description\", void 0);\n __decorate([\n Property(1)\n ], CircularGauge.prototype, \"tabIndex\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"axisLabelRender\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"annotationRender\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"dragMove\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"dragEnd\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"gaugeMouseMove\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"gaugeMouseLeave\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"gaugeMouseDown\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"gaugeMouseUp\", void 0);\n __decorate([\n Event()\n ], CircularGauge.prototype, \"resized\", void 0);\n CircularGauge = __decorate([\n NotifyPropertyChanges\n ], CircularGauge);\n return CircularGauge;\n}(Component));\nexport { CircularGauge };\n","import * as index from '@syncfusion/ej2-circulargauge';\nindex.CircularGauge.Inject( index.GaugeTooltip,index.Annotations);\nexport * from '@syncfusion/ej2-circulargauge';\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, addClass, append, Property, Event, L10n, compile } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, extend, removeClass, createElement, prepend, isNullOrUndefined, detach, getValue } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, rippleEffect, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { DataManager, Query, DataUtil } from '@syncfusion/ej2-data';\nimport { ListBase, cssClass as ListBaseClasses } from '@syncfusion/ej2-lists';\nvar FieldSettings = /** @class */ (function (_super) {\n __extends(FieldSettings, _super);\n function FieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], FieldSettings.prototype, \"text\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"value\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"groupBy\", void 0);\n return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\nexport var dropDownBaseClasses = {\n root: 'e-dropdownbase',\n rtl: 'e-rtl',\n content: 'e-content',\n selected: 'e-active',\n hover: 'e-hover',\n noData: 'e-nodata',\n fixedHead: 'e-fixed-head',\n focus: 'e-item-focus',\n li: ListBaseClasses.li,\n group: ListBaseClasses.group,\n disabled: ListBaseClasses.disabled,\n grouping: 'e-dd-group'\n};\n/**\n * DropDownBase component will generate the list items based on given data and act as base class to drop-down related components\n */\nvar DropDownBase = /** @class */ (function (_super) {\n __extends(DropDownBase, _super);\n /**\n * * Constructor for DropDownBase class\n */\n function DropDownBase(options, element) {\n return _super.call(this, options, element) || this;\n }\n ;\n DropDownBase.prototype.getPropObject = function (prop, newProp, oldProp) {\n var newProperty = new Object();\n var oldProperty = new Object();\n // tslint:disable-next-line:no-function-constructor-with-string-args\n var propName = new Function('prop', 'return prop');\n newProperty[propName(prop)] = newProp[propName(prop)];\n oldProperty[propName(prop)] = oldProp[propName(prop)];\n var data = new Object();\n data.newProperty = newProperty;\n data.oldProperty = oldProperty;\n return data;\n };\n DropDownBase.prototype.getValueByText = function (text, ignoreCase, ignoreAccent) {\n var value = null;\n if (!isNullOrUndefined(this.listData)) {\n if (ignoreCase) {\n value = this.checkValueCase(text, true, ignoreAccent);\n }\n else {\n value = this.checkValueCase(text, false, ignoreAccent);\n }\n }\n return value;\n };\n ;\n DropDownBase.prototype.checkValueCase = function (text, ignoreCase, ignoreAccent, isTextByValue) {\n var _this = this;\n var value = null;\n if (isTextByValue) {\n value = text;\n }\n var dataSource = this.listData;\n var fields = this.fields;\n var type = this.typeOfData(dataSource).typeof;\n if (type === 'string' || type === 'number') {\n for (var _i = 0, dataSource_1 = dataSource; _i < dataSource_1.length; _i++) {\n var item = dataSource_1[_i];\n if (!isNullOrUndefined(item)) {\n if (ignoreAccent) {\n value = this.checkingAccent(String(item), text, ignoreCase);\n }\n else {\n if (ignoreCase) {\n if (this.checkIgnoreCase(String(item), text)) {\n value = this.getItemValue(String(item), text, ignoreCase);\n }\n }\n else {\n if (this.checkNonIgnoreCase(String(item), text)) {\n value = this.getItemValue(String(item), text, ignoreCase, isTextByValue);\n }\n }\n }\n }\n }\n }\n else {\n if (ignoreCase) {\n dataSource.filter(function (item) {\n if (_this.checkIgnoreCase(getValue(fields.text, item).toString(), text)) {\n value = getValue(fields.value, item);\n }\n });\n }\n else {\n if (isTextByValue) {\n dataSource.filter(function (item) {\n var itemValue = getValue(fields.value, item);\n if (!isNullOrUndefined(itemValue) && _this.stringTrim(itemValue) === value.toString()) {\n value = getValue(fields.text, item);\n }\n });\n }\n else {\n dataSource.filter(function (item) {\n if (_this.checkNonIgnoreCase(getValue(fields.text, item), text)) {\n value = getValue(fields.value, item);\n }\n });\n }\n }\n }\n return value;\n };\n DropDownBase.prototype.checkingAccent = function (item, text, ignoreCase) {\n var dataItem = DataUtil.ignoreDiacritics(String(item));\n var textItem = DataUtil.ignoreDiacritics(text.toString());\n var value = null;\n if (ignoreCase) {\n if (this.checkIgnoreCase(dataItem, textItem)) {\n value = this.getItemValue(String(item), text, ignoreCase);\n }\n }\n else {\n if (this.checkNonIgnoreCase(String(item), text)) {\n value = this.getItemValue(String(item), text, ignoreCase);\n }\n }\n return value;\n };\n DropDownBase.prototype.checkIgnoreCase = function (item, text) {\n return String(item).toLowerCase() === text.toString().toLowerCase() ? true : false;\n };\n DropDownBase.prototype.checkNonIgnoreCase = function (item, text) {\n return String(item) === text.toString() ? true : false;\n };\n DropDownBase.prototype.getItemValue = function (dataItem, typedText, ignoreCase, isTextByValue) {\n var value = null;\n var dataSource = this.listData;\n var type = this.typeOfData(dataSource).typeof;\n if (isTextByValue) {\n value = dataItem.toString();\n }\n else {\n if (ignoreCase) {\n value = type === 'string' ? String(dataItem) : this.getFormattedValue(String(dataItem));\n }\n else {\n value = type === 'string' ? typedText : this.getFormattedValue(typedText);\n }\n }\n return value;\n };\n DropDownBase.prototype.l10nUpdate = function (actionFailure) {\n if (this.noRecordsTemplate !== 'No Records Found' || this.actionFailureTemplate !== 'The Request Failed') {\n var template = actionFailure ? this.actionFailureTemplate : this.noRecordsTemplate;\n var compiledString = void 0;\n this.list.innerHTML = '';\n compiledString = compile(template);\n for (var _i = 0, _a = compiledString({}); _i < _a.length; _i++) {\n var item = _a[_i];\n this.list.appendChild(item);\n }\n }\n else {\n var l10nLocale = { noRecordsTemplate: 'No Records Found', actionFailureTemplate: 'The Request Failed' };\n this.l10n = new L10n('dropdowns', l10nLocale, this.locale);\n this.list.innerHTML = actionFailure ?\n this.l10n.getConstant('actionFailureTemplate') : this.l10n.getConstant('noRecordsTemplate');\n }\n };\n DropDownBase.prototype.getTextByValue = function (value) {\n var text;\n text = this.checkValueCase(value, false, false, true);\n return text;\n };\n DropDownBase.prototype.stringTrim = function (item) {\n if (!isNullOrUndefined(item)) {\n var itemValue = item.toString();\n return itemValue.trim();\n }\n return item.toString();\n };\n DropDownBase.prototype.getFormattedValue = function (value) {\n if (this.listData && this.listData.length) {\n var item = this.typeOfData(this.listData);\n if (typeof getValue((this.fields.value ? this.fields.value : 'value'), item.item) === 'number'\n || item.typeof === 'number') {\n return parseInt(value, 10);\n }\n var val = (this.fields.value ? this.fields.value : 'value');\n if (typeof getValue(val, item.item) === 'boolean'\n || item.typeof === 'boolean') {\n return (value === 'true');\n }\n }\n return value;\n };\n /**\n * Sets RTL to dropdownbase wrapper\n */\n DropDownBase.prototype.setEnableRtl = function () {\n if (this.list) {\n this.enableRtlElements.push(this.list);\n }\n this.enableRtl ? addClass(this.enableRtlElements, dropDownBaseClasses.rtl) :\n removeClass(this.enableRtlElements, dropDownBaseClasses.rtl);\n };\n ;\n /**\n * Initialize the Component.\n */\n DropDownBase.prototype.initialize = function () {\n this.bindEvent = true;\n if (this.element.tagName === 'UL') {\n var jsonElement = ListBase.createJsonFromElement(this.element);\n this.setProperties({ fields: { text: 'text', value: 'text' } }, true);\n this.resetList(jsonElement, this.fields);\n }\n else if (this.element.tagName === 'SELECT') {\n var dataSource = this.dataSource instanceof Array ? (this.dataSource.length > 0 ? true : false)\n : !isNullOrUndefined(this.dataSource) ? true : false;\n if (!dataSource) {\n this.renderItemsBySelect();\n }\n }\n else {\n this.setListData(this.dataSource, this.fields, this.query);\n }\n };\n ;\n /**\n * Get the properties to be maintained in persisted state.\n */\n DropDownBase.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n ;\n /**\n * Sets the enabled state to DropDownBase.\n */\n DropDownBase.prototype.setEnabled = function () {\n if (this.enabled) {\n this.element.setAttribute('aria-disabled', 'false');\n }\n else {\n this.element.setAttribute('aria-disabled', 'true');\n }\n };\n ;\n DropDownBase.prototype.renderItemsBySelect = function () {\n var element = this.element;\n var fields = { value: 'value', text: 'text' };\n var jsonElement = [];\n var group = element.querySelectorAll('select>optgroup');\n var option = element.querySelectorAll('select>option');\n this.getJSONfromOption(jsonElement, option, fields);\n if (group.length) {\n for (var i = 0; i < group.length; i++) {\n var item = group[i];\n var optionGroup = {};\n optionGroup[fields.text] = item.label;\n optionGroup.isHeader = true;\n var child = item.querySelectorAll('option');\n jsonElement.push(optionGroup);\n this.getJSONfromOption(jsonElement, child, fields);\n }\n var items = element.querySelectorAll('select>option');\n }\n this.fields.text = fields.text;\n this.fields.value = fields.value;\n this.resetList(jsonElement, fields);\n };\n DropDownBase.prototype.getJSONfromOption = function (items, options, fields) {\n for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {\n var option = options_1[_i];\n var json = {};\n json[fields.text] = option.innerText;\n json[fields.value] = option.getAttribute(fields.value) ? option.getAttribute(fields.value) : option.innerText;\n items.push(json);\n }\n };\n /**\n * Execute before render the list items\n * @private\n */\n DropDownBase.prototype.preRender = function () {\n // there is no event handler\n this.scrollTimer = -1;\n this.enableRtlElements = [];\n this.isRequested = false;\n };\n /**\n * Creates the list items of DropDownBase component.\n */\n DropDownBase.prototype.setListData = function (dataSource, fields, query) {\n var _this = this;\n fields = fields ? fields : this.fields;\n var ulElement;\n this.isActive = true;\n if (dataSource instanceof DataManager) {\n var eventArgs = { cancel: false, data: dataSource, query: query };\n this.trigger('actionBegin', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.showSpinner();\n this.isRequested = true;\n eventArgs.data.executeQuery(this.getQuery(eventArgs.query)).then(function (e) {\n _this.trigger('actionComplete', e);\n if (e.cancel) {\n return;\n }\n var listItems = e.result;\n ulElement = _this.renderItems(listItems, fields);\n _this.onActionComplete(ulElement, listItems, e);\n _this.isRequested = false;\n _this.hideSpinner();\n _this.trigger('dataBound', { items: listItems, e: e });\n }).catch(function (e) {\n _this.isRequested = false;\n _this.onActionFailure(e);\n _this.hideSpinner();\n });\n }\n else {\n this.showSpinner();\n var dataManager = new DataManager(dataSource);\n var listItems = (this.getQuery(query)).executeLocal(dataManager);\n ulElement = this.renderItems(listItems, fields);\n this.onActionComplete(ulElement, listItems);\n this.hideSpinner();\n this.trigger('dataBound', { items: listItems });\n }\n };\n DropDownBase.prototype.showSpinner = function () {\n // Used this method in component side.\n };\n DropDownBase.prototype.hideSpinner = function () {\n // Used this method in component side.\n };\n DropDownBase.prototype.onActionFailure = function (e) {\n this.liCollections = [];\n this.trigger('actionFailure', e);\n this.l10nUpdate(true);\n addClass([this.list], dropDownBaseClasses.noData);\n };\n DropDownBase.prototype.onActionComplete = function (ulElement, list, e) {\n this.listData = list;\n this.list.innerHTML = '';\n this.list.appendChild(ulElement);\n this.liCollections = this.list.querySelectorAll('.' + dropDownBaseClasses.li);\n this.ulElement = this.list.querySelector('ul');\n this.postRender(this.list, list, this.bindEvent);\n };\n DropDownBase.prototype.postRender = function (listElement, list, bindEvent) {\n var focusItem = listElement.querySelector('.' + dropDownBaseClasses.li);\n var selectedItem = listElement.querySelector('.' + dropDownBaseClasses.selected);\n if (focusItem && !selectedItem) {\n addClass([focusItem], dropDownBaseClasses.focus);\n }\n if (list.length <= 0) {\n this.l10nUpdate();\n addClass([listElement], dropDownBaseClasses.noData);\n }\n else {\n listElement.classList.remove(dropDownBaseClasses.noData);\n }\n if (this.groupTemplate) {\n this.renderGroupTemplate(listElement);\n }\n };\n /**\n * Get the query to do the data operation before list item generation.\n */\n DropDownBase.prototype.getQuery = function (query) {\n return query ? query : this.query ? this.query : new Query();\n };\n /**\n * To render the template content for group header element.\n */\n DropDownBase.prototype.renderGroupTemplate = function (listEle) {\n if (this.fields.groupBy !== null && this.dataSource || this.element.querySelector('.' + dropDownBaseClasses.group)) {\n var dataSource = this.dataSource;\n var headerItems = listEle.querySelectorAll('.' + dropDownBaseClasses.group);\n var tempHeaders = ListBase.renderGroupTemplate(this.groupTemplate, dataSource, this.fields.properties, headerItems);\n }\n };\n /**\n * To create the ul li list items\n */\n DropDownBase.prototype.createListItems = function (dataSource, fields) {\n if (dataSource && fields.groupBy || this.element.querySelector('optgroup')) {\n if (fields.groupBy) {\n if (this.sortOrder !== 'None') {\n dataSource = this.getSortedDataSource(dataSource);\n }\n dataSource = ListBase.groupDataSource(dataSource, fields.properties, this.sortOrder);\n }\n addClass([this.list], dropDownBaseClasses.grouping);\n }\n else {\n dataSource = this.getSortedDataSource(dataSource);\n }\n var options = this.listOption(dataSource, fields);\n return ListBase.createList(dataSource, options, true);\n };\n ;\n DropDownBase.prototype.listOption = function (dataSource, fields) {\n var iconCss = isNullOrUndefined(fields.iconCss) ? false : true;\n var options = (fields.text !== null || fields.value !== null) ? {\n fields: fields.properties,\n showIcon: iconCss, ariaAttributes: { groupItemRole: 'presentation' }\n } : { fields: { value: 'text' } };\n return extend({}, options, fields, true);\n };\n ;\n DropDownBase.prototype.setFloatingHeader = function (e) {\n if (isNullOrUndefined(this.fixedHeaderElement)) {\n this.fixedHeaderElement = createElement('div', { className: dropDownBaseClasses.fixedHead });\n if (!this.list.querySelector('li').classList.contains(dropDownBaseClasses.group)) {\n this.fixedHeaderElement.style.display = 'none';\n }\n prepend([this.fixedHeaderElement], this.list);\n this.setFixedHeader();\n }\n if (!isNullOrUndefined(this.fixedHeaderElement) && this.fixedHeaderElement.style.zIndex === '0') {\n this.setFixedHeader();\n }\n this.scrollStop(e);\n };\n DropDownBase.prototype.scrollStop = function (e) {\n var target = e.target;\n var liHeight = parseInt(getComputedStyle(this.liCollections[0], null).getPropertyValue('height'), 10);\n var topIndex = Math.round(target.scrollTop / liHeight);\n var liCollections = this.ulElement.querySelectorAll('li');\n for (var i = topIndex; i > -1; i--) {\n if (!isNullOrUndefined(liCollections[i]) && liCollections[i].classList.contains(dropDownBaseClasses.group)) {\n var currentLi = liCollections[i];\n this.fixedHeaderElement.innerHTML = currentLi.innerHTML;\n this.fixedHeaderElement.style.display = 'block';\n break;\n }\n else {\n this.fixedHeaderElement.style.display = 'none';\n }\n }\n };\n /**\n * To render the list items\n */\n DropDownBase.prototype.renderItems = function (listData, fields) {\n var ulElement;\n if (this.itemTemplate && listData) {\n var dataSource = listData;\n if (dataSource && fields.groupBy) {\n dataSource = ListBase.groupDataSource(dataSource, fields.properties, this.sortOrder);\n }\n else {\n dataSource = this.getSortedDataSource(dataSource);\n }\n ulElement = this.templateListItem(dataSource, fields);\n }\n else {\n ulElement = this.createListItems(listData, fields);\n }\n return ulElement;\n };\n ;\n DropDownBase.prototype.templateListItem = function (dataSource, fields) {\n var option = this.listOption(dataSource, fields);\n return ListBase.renderContentTemplate(this.itemTemplate, dataSource, fields.properties, option);\n };\n DropDownBase.prototype.typeOfData = function (items) {\n var item = { typeof: null, item: null };\n for (var i = 0; i < items.length; i++) {\n if (!isNullOrUndefined(items[i])) {\n return item = { typeof: typeof items[i], item: items[i] };\n }\n }\n return item;\n };\n DropDownBase.prototype.setFixedHeader = function () {\n this.list.parentElement.style.display = 'block';\n var liWidth = this.liCollections[0].offsetWidth;\n this.fixedHeaderElement.style.width = liWidth.toString() + 'px';\n setStyleAttribute(this.fixedHeaderElement, { zIndex: 10 });\n var firstLi = this.ulElement.querySelector('.' + dropDownBaseClasses.group);\n this.fixedHeaderElement.innerHTML = firstLi.innerHTML;\n };\n DropDownBase.prototype.getSortedDataSource = function (dataSource) {\n if (dataSource && this.sortOrder !== 'None') {\n var textField = this.fields.text ? this.fields.text : 'text';\n dataSource = ListBase.getDataSource(dataSource, ListBase.addSorting(this.sortOrder, textField));\n }\n return dataSource;\n };\n /**\n * Return the index of item which matched with given value in data source\n */\n DropDownBase.prototype.getIndexByValue = function (value) {\n var index;\n var listItems = this.getItems();\n for (var i = 0; i < listItems.length; i++) {\n if (!isNullOrUndefined(value) && listItems[i].getAttribute('data-value') === value.toString()) {\n index = i;\n break;\n }\n }\n return index;\n };\n ;\n /**\n * To dispatch the event manually\n */\n DropDownBase.prototype.dispatchEvent = function (element, type) {\n var evt = document.createEvent('HTMLEvents');\n evt.initEvent(type, false, true);\n element.dispatchEvent(evt);\n };\n /**\n * To set the current fields\n */\n DropDownBase.prototype.setFields = function () {\n var fields = this.fields;\n if (this.fields.value && !this.fields.text) {\n this.fields.text = this.fields.value;\n }\n else if (!fields.value && fields.text) {\n this.fields.value = this.fields.text;\n }\n else if (!this.fields.value && !this.fields.text) {\n this.fields.value = this.fields.text = 'text';\n }\n };\n /**\n * reset the items list.\n */\n DropDownBase.prototype.resetList = function (dataSource, fields, query) {\n if (this.list) {\n this.setListData(dataSource, fields, query);\n }\n };\n DropDownBase.prototype.updateSelection = function () {\n // This is for after added the item, need to update the selected index values.\n };\n DropDownBase.prototype.renderList = function () {\n // This is for render the list items.\n this.render();\n };\n DropDownBase.prototype.updateDataSource = function (prop) {\n this.resetList(this.dataSource);\n };\n DropDownBase.prototype.setUpdateInitial = function (props, newProp) {\n if (!isNullOrUndefined(newProp.fields)) {\n this.setFields();\n }\n for (var j = 0; props.length > j; j++) {\n if (newProp[props[j]]) {\n this.updateDataSource(props[j]);\n }\n }\n };\n /**\n * When property value changes happened, then onPropertyChanged method will execute the respective changes in this component.\n * @private\n */\n DropDownBase.prototype.onPropertyChanged = function (newProp, oldProp) {\n this.setUpdateInitial(['query', 'sortOrder', 'dataSource', 'itemTemplate'], newProp);\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'query':\n case 'sortOrder':\n case 'dataSource':\n case 'itemTemplate':\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'enabled':\n this.setEnabled();\n break;\n case 'groupTemplate':\n this.renderGroupTemplate(this.list);\n break;\n case 'locale':\n if (this.list && (!isNullOrUndefined(this.liCollections) && this.liCollections.length === 0)) {\n this.l10nUpdate();\n }\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n this.setZIndex();\n break;\n }\n }\n };\n ;\n /**\n * Build and render the component\n * @private\n */\n DropDownBase.prototype.render = function (isEmptyData) {\n this.list = createElement('div', { className: dropDownBaseClasses.content, attrs: { 'tabindex': '0' } });\n this.list.classList.add(dropDownBaseClasses.root);\n this.setFields();\n var rippleModel = { duration: 300, selector: '.' + dropDownBaseClasses.li };\n this.rippleFun = rippleEffect(this.list, rippleModel);\n var group = this.element.querySelector('select>optgroup');\n if (this.fields.groupBy || !isNullOrUndefined(group)) {\n EventHandler.add(this.list, 'scroll', this.setFloatingHeader, this);\n }\n if (this.getModuleName() === 'dropdownbase') {\n if (this.element.getAttribute('tabindex')) {\n this.list.setAttribute('tabindex', this.element.getAttribute('tabindex'));\n }\n removeClass([this.element], dropDownBaseClasses.root);\n this.element.style.display = 'none';\n var wrapperElement = document.createElement('div');\n this.element.parentElement.insertBefore(wrapperElement, this.element);\n wrapperElement.appendChild(this.element);\n wrapperElement.appendChild(this.list);\n }\n this.setEnableRtl();\n this.setEnabled();\n if (!isEmptyData) {\n this.initialize();\n }\n };\n ;\n /**\n * Return the module name of this component.\n * @private\n */\n DropDownBase.prototype.getModuleName = function () {\n return 'dropdownbase';\n };\n ;\n /**\n * Gets all the list items bound on this component.\n * @returns Element[].\n */\n DropDownBase.prototype.getItems = function () {\n return this.ulElement.querySelectorAll('.' + dropDownBaseClasses.li);\n };\n ;\n /**\n * Adds a new item to the popup list. By default, new item appends to the list as the last item,\n * but you can insert based on the index parameter.\n * @param { Object[] } items - Specifies an array of JSON data or a JSON data.\n * @param { number } itemIndex - Specifies the index to place the newly added item in the popup list.\n * @return {void}.\n */\n DropDownBase.prototype.addItem = function (items, itemIndex) {\n if (!this.list || this.list.textContent === this.noRecordsTemplate) {\n this.renderList();\n }\n var itemsCount = this.getItems().length;\n var selectedItemValue = this.list.querySelector('.' + dropDownBaseClasses.selected);\n items = items instanceof Array ? items : [items];\n var index;\n index = (isNullOrUndefined(itemIndex) || itemIndex < 0 || itemIndex > itemsCount - 1) ? itemsCount : itemIndex;\n var fields = this.fields;\n var liCollections = [];\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n var li = createElement('li', { className: dropDownBaseClasses.li, id: 'option-add-' + i });\n li.setAttribute('data-value', getValue(fields.value, item));\n li.setAttribute('role', 'option');\n li.appendChild(document.createTextNode(getValue(fields.text, item)));\n liCollections.push(li);\n this.listData.push(item);\n this.updateActionCompleteData(li, item);\n }\n if (itemsCount === 0 && isNullOrUndefined(this.list.querySelector('ul'))) {\n this.list.innerHTML = '';\n this.list.appendChild(this.ulElement);\n append(liCollections, this.ulElement);\n }\n else {\n for (var i = 0; i < items.length; i++) {\n if (this.liCollections[index]) {\n this.liCollections[index].parentNode.insertBefore(liCollections[i], this.liCollections[index]);\n }\n else {\n this.ulElement.appendChild(liCollections[i]);\n }\n var tempLi = [].slice.call(this.liCollections);\n tempLi.splice(index, 0, liCollections[i]);\n this.liCollections = tempLi;\n index += 1;\n }\n }\n if (selectedItemValue || itemIndex === 0) {\n this.updateSelection();\n }\n };\n DropDownBase.prototype.setZIndex = function () {\n // this is for component wise\n };\n DropDownBase.prototype.updateActionCompleteData = function (li, item) {\n // this is for ComboBox custom value\n };\n /**\n * Gets the data Object that matches the given value.\n * @param { string | number } value - Specifies the value of the list item.\n * @returns Object.\n */\n DropDownBase.prototype.getDataByValue = function (value) {\n var type = this.typeOfData(this.listData).typeof;\n if (type === 'string' || type === 'number') {\n for (var _i = 0, _a = this.listData; _i < _a.length; _i++) {\n var item = _a[_i];\n if (!isNullOrUndefined(item) && item === value) {\n return item;\n }\n }\n }\n else {\n for (var _b = 0, _c = this.listData; _b < _c.length; _b++) {\n var item = _c[_b];\n if (!isNullOrUndefined(item) && getValue((this.fields.value ? this.fields.value : 'value'), item) === value) {\n return item;\n }\n }\n }\n return null;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. It also removes the attributes and classes.\n * @method destroy\n * @return {void}.\n */\n DropDownBase.prototype.destroy = function () {\n if (document.body.contains(this.list)) {\n EventHandler.remove(this.list, 'scroll', this.setFloatingHeader);\n if (!isNullOrUndefined(this.rippleFun)) {\n this.rippleFun();\n }\n detach(this.list);\n }\n _super.prototype.destroy.call(this);\n };\n ;\n __decorate([\n Complex({ text: null, value: null, iconCss: null, groupBy: null }, FieldSettings)\n ], DropDownBase.prototype, \"fields\", void 0);\n __decorate([\n Property(false)\n ], DropDownBase.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], DropDownBase.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(null)\n ], DropDownBase.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property(null)\n ], DropDownBase.prototype, \"groupTemplate\", void 0);\n __decorate([\n Property('No Records Found')\n ], DropDownBase.prototype, \"noRecordsTemplate\", void 0);\n __decorate([\n Property('The Request Failed')\n ], DropDownBase.prototype, \"actionFailureTemplate\", void 0);\n __decorate([\n Property('None')\n ], DropDownBase.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(true)\n ], DropDownBase.prototype, \"enabled\", void 0);\n __decorate([\n Property([])\n ], DropDownBase.prototype, \"dataSource\", void 0);\n __decorate([\n Property(null)\n ], DropDownBase.prototype, \"query\", void 0);\n __decorate([\n Property(1000)\n ], DropDownBase.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], DropDownBase.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"destroyed\", void 0);\n DropDownBase = __decorate([\n NotifyPropertyChanges\n ], DropDownBase);\n return DropDownBase;\n}(Component));\nexport { DropDownBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { EventHandler, Property, Event, compile, KeyboardEvents, createElement, append } from '@syncfusion/ej2-base';\nimport { attributes, isNullOrUndefined, getUniqueID, formatUnit, isUndefined, getValue } from '@syncfusion/ej2-base';\nimport { Animation, Browser, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, setStyleAttribute, closest, prepend, detach, classList } from '@syncfusion/ej2-base';\nimport { Popup, isCollide, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { incrementalSearch } from '../common/incremental-search';\nimport { DropDownBase, dropDownBaseClasses } from '../drop-down-base/drop-down-base';\n/* tslint:disable */\nimport { DataManager, Query } from '@syncfusion/ej2-data';\n// don't use space in classnames \nexport var dropDownListClasses = {\n root: 'e-dropdownlist',\n hover: dropDownBaseClasses.hover,\n selected: dropDownBaseClasses.selected,\n rtl: dropDownBaseClasses.rtl,\n li: dropDownBaseClasses.li,\n disable: dropDownBaseClasses.disabled,\n base: dropDownBaseClasses.root,\n focus: dropDownBaseClasses.focus,\n input: 'e-input-group',\n inputFocus: 'e-input-focus',\n icon: 'e-input-group-icon e-ddl-icon',\n iconAnimation: 'e-icon-anim',\n value: 'e-input-value',\n device: 'e-ddl-device',\n backIcon: 'e-input-group-icon e-back-icon e-icons',\n filterBarClearIcon: 'e-input-group-icon e-clear-icon e-icons',\n filterInput: 'e-input-filter',\n filterParent: 'e-filter-parent',\n mobileFilter: 'e-ddl-device-filter',\n footer: 'e-ddl-footer',\n header: 'e-ddl-header',\n clearIcon: 'e-clear-icon',\n clearIconHide: 'e-clear-icon-hide',\n popupFullScreen: 'e-popup-full-page',\n disableIcon: 'e-ddl-disable-icon',\n hiddenElement: 'e-ddl-hidden'\n};\nvar inputObject = {\n container: null,\n buttons: []\n};\n/**\n * The DropDownList component contains a list of predefined values from which you can\n * choose a single value.\n * ```html\n * \n * ```\n * ```typescript\n * let dropDownListObj:DropDownList = new DropDownList();\n * dropDownListObj.appendTo(\"#list\");\n * ```\n */\nvar DropDownList = /** @class */ (function (_super) {\n __extends(DropDownList, _super);\n /**\n * * Constructor for creating the DropDownList component.\n */\n function DropDownList(options, element) {\n return _super.call(this, options, element) || this;\n }\n ;\n /**\n * Initialize the event handler.\n * @private\n */\n DropDownList.prototype.preRender = function () {\n this.element.style.opacity = '0';\n this.initializeData();\n _super.prototype.preRender.call(this);\n this.activeIndex = this.index;\n this.queryString = '';\n };\n DropDownList.prototype.initializeData = function () {\n this.isPopupOpen = false;\n this.isDocumentClick = false;\n this.isInteracted = false;\n this.isFilterFocus = false;\n this.beforePopupOpen = false;\n this.initial = true;\n this.initRemoteRender = false;\n this.isNotSearchList = false;\n this.isTyped = false;\n this.isSelected = false;\n this.preventFocus = false;\n this.preventAutoFill = false;\n this.isValidKey = false;\n this.typedString = '';\n this.isEscapeKey = false;\n this.isPreventBlur = false;\n this.isTabKey = false;\n this.actionCompleteData = { isUpdated: false };\n this.prevSelectPoints = {};\n this.isSelectCustom = false;\n this.isDropDownClick = false;\n this.preventAltUp = false;\n this.isCustomFilter = false;\n this.isSecondClick = false;\n this.keyConfigure = {\n tab: 'tab',\n enter: '13',\n escape: '27',\n end: '35',\n home: '36',\n down: '40',\n up: '38',\n pageUp: '33',\n pageDown: '34',\n open: 'alt+40',\n close: 'shift+tab',\n hide: 'alt+38',\n space: '32'\n };\n };\n DropDownList.prototype.setZIndex = function () {\n if (this.popupObj) {\n this.popupObj.setProperties({ 'zIndex': this.zIndex });\n }\n };\n DropDownList.prototype.renderList = function (isEmptyData) {\n _super.prototype.render.call(this, isEmptyData);\n this.wireListEvents();\n };\n DropDownList.prototype.floatLabelChange = function () {\n if (this.getModuleName() === 'dropdownlist' && this.floatLabelType === 'Auto') {\n var floatElement = this.inputWrapper.container.querySelector('.e-float-text');\n if (this.inputElement.value !== '' || this.isInteracted) {\n classList(floatElement, ['e-label-top'], ['e-label-bottom']);\n }\n else {\n classList(floatElement, ['e-label-bottom'], ['e-label-top']);\n }\n }\n };\n DropDownList.prototype.resetHandler = function (e) {\n e.preventDefault();\n this.clear(e);\n };\n DropDownList.prototype.resetFocusElement = function () {\n this.removeHover();\n this.removeSelection();\n this.removeFocus();\n this.list.scrollTop = 0;\n if (this.getModuleName() !== 'autocomplete') {\n var li = this.ulElement.querySelector('.' + dropDownListClasses.li);\n if (li) {\n li.classList.add(dropDownListClasses.focus);\n }\n }\n };\n DropDownList.prototype.clear = function (e, property) {\n this.resetSelection();\n var dataItem = this.getItemData();\n if (this.previousValue === dataItem.value) {\n return;\n }\n this.onChangeEvent(e);\n };\n DropDownList.prototype.resetSelection = function () {\n if (this.list) {\n if (this.allowFiltering && this.getModuleName() !== 'autocomplete') {\n this.onActionComplete(this.actionCompleteData.ulElement.cloneNode(true), this.actionCompleteData.list);\n }\n this.resetFocusElement();\n }\n this.hiddenElement.innerHTML = '';\n this.inputElement.value = '';\n this.value = null;\n this.text = null;\n this.index = null;\n this.activeIndex = null;\n this.item = null;\n this.itemData = null;\n this.queryString = '';\n if (this.valueTempElement) {\n detach(this.valueTempElement);\n this.inputElement.style.display = 'block';\n this.valueTempElement = null;\n }\n this.setSelection(null, null);\n this.isSelectCustom = false;\n this.updateIconState();\n };\n DropDownList.prototype.setHTMLAttributes = function () {\n if (Object.keys(this.htmlAttributes).length) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var htmlAttr = _a[_i];\n if (htmlAttr === 'class') {\n this.inputWrapper.container.classList.add(this.htmlAttributes[htmlAttr]);\n }\n else if (htmlAttr === 'disabled' && this.htmlAttributes[htmlAttr] === 'disabled') {\n this.enabled = false;\n this.setEnable();\n }\n else if (htmlAttr === 'readonly' && this.htmlAttributes[htmlAttr] === 'readonly') {\n this.readonly = true;\n this.dataBind();\n }\n else if (htmlAttr === 'style') {\n this.inputWrapper.container.setAttribute('style', this.htmlAttributes[htmlAttr]);\n }\n else {\n var defaultAttr = ['title', 'id', 'placeholder'];\n var validateAttr = ['name', 'required'];\n if (validateAttr.indexOf(htmlAttr) > -1) {\n this.hiddenElement.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n else if (defaultAttr.indexOf(htmlAttr) > -1) {\n htmlAttr === 'placeholder' ? Input.setPlaceholder(this.htmlAttributes[htmlAttr], this.inputElement) :\n this.element.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n else {\n this.inputWrapper.container.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n }\n }\n }\n };\n DropDownList.prototype.getAriaAttributes = function () {\n return {\n 'aria-disabled': 'false',\n 'aria-owns': this.element.id + '_options',\n 'role': 'listbox',\n 'aria-haspopup': 'true',\n 'aria-expanded': 'false',\n 'aria-activedescendant': 'null',\n 'aria-labelledby': this.hiddenElement.id\n };\n };\n DropDownList.prototype.setEnableRtl = function () {\n Input.setEnableRtl(this.enableRtl, [this.inputElement.parentElement]);\n if (this.popupObj) {\n this.popupObj.enableRtl = this.enableRtl;\n this.popupObj.dataBind();\n }\n };\n DropDownList.prototype.setEnable = function () {\n Input.setEnabled(this.enabled, this.inputElement);\n if (this.enabled) {\n removeClass([this.inputWrapper.container], dropDownListClasses.disable);\n this.inputElement.setAttribute('aria-disabled', 'false');\n this.targetElement().setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.hidePopup();\n addClass([this.inputWrapper.container], dropDownListClasses.disable);\n this.inputElement.setAttribute('aria-disabled', 'true');\n this.targetElement().tabIndex = -1;\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n */\n DropDownList.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n ;\n DropDownList.prototype.preventTabIndex = function (element) {\n if (this.getModuleName() === 'dropdownlist') {\n element.tabIndex = -1;\n }\n };\n DropDownList.prototype.targetElement = function () {\n return this.inputWrapper.container;\n };\n DropDownList.prototype.getNgDirective = function () {\n return 'EJS-DROPDOWNLIST';\n };\n DropDownList.prototype.getElementByText = function (text) {\n return this.getElementByValue(this.getValueByText(text));\n };\n DropDownList.prototype.getElementByValue = function (value) {\n var item;\n var listItems = this.getItems();\n for (var _i = 0, listItems_1 = listItems; _i < listItems_1.length; _i++) {\n var liItem = listItems_1[_i];\n if (this.getFormattedValue(liItem.getAttribute('data-value')) === value) {\n item = liItem;\n break;\n }\n }\n return item;\n };\n ;\n DropDownList.prototype.initValue = function () {\n this.renderList();\n if (this.dataSource instanceof DataManager) {\n this.initRemoteRender = true;\n }\n else {\n this.updateValues();\n }\n };\n DropDownList.prototype.updateValues = function () {\n if (!isNullOrUndefined(this.value)) {\n this.setSelection(this.getElementByValue(this.value), null);\n }\n else if (this.text && isNullOrUndefined(this.value)) {\n var element = this.getElementByText(this.text);\n if (isNullOrUndefined(element)) {\n this.setProperties({ text: null });\n return;\n }\n else {\n this.setSelection(element, null);\n }\n }\n else {\n this.setSelection(this.liCollections[this.activeIndex], null);\n }\n this.setHiddenValue();\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n DropDownList.prototype.onBlur = function (e) {\n var target = e.relatedTarget;\n var currentTarget = e.target;\n var isPreventBlur = this.isPreventBlur;\n this.isPreventBlur = false;\n //IE 11 - issue\n if (isPreventBlur && !this.isDocumentClick && this.isPopupOpen && (!isNullOrUndefined(currentTarget) ||\n !this.isFilterLayout() && isNullOrUndefined(target))) {\n if (this.getModuleName() === 'dropdownlist' && this.allowFiltering && this.isPopupOpen) {\n this.filterInput.focus();\n }\n else {\n this.targetElement().focus();\n }\n return;\n }\n if (this.isDocumentClick || (!isNullOrUndefined(this.popupObj)\n && document.body.contains(this.popupObj.element) &&\n this.popupObj.element.classList.contains(dropDownListClasses.mobileFilter))) {\n if (!this.beforePopupOpen) {\n this.isDocumentClick = false;\n }\n return;\n }\n if (((this.getModuleName() === 'dropdownlist' && !this.isFilterFocus && target !== this.inputElement)\n && (document.activeElement !== target || (document.activeElement === target &&\n currentTarget.classList.contains(dropDownListClasses.inputFocus)))) ||\n (isNullOrUndefined(target) && this.getModuleName() === 'dropdownlist' && this.allowFiltering &&\n currentTarget !== this.inputWrapper.container) || this.getModuleName() !== 'dropdownlist' &&\n !this.inputWrapper.container.contains(target) || this.isTabKey) {\n this.isDocumentClick = this.isPopupOpen ? true : false;\n this.focusOutAction();\n this.isTabKey = false;\n }\n if (this.isRequested && !this.isPopupOpen && !this.isPreventBlur) {\n this.isActive = false;\n this.beforePopupOpen = false;\n }\n };\n DropDownList.prototype.focusOutAction = function () {\n this.isInteracted = false;\n this.focusOut();\n this.onFocusOut();\n };\n DropDownList.prototype.onFocusOut = function () {\n if (this.isSelected) {\n this.isSelectCustom = false;\n this.onChangeEvent(null);\n }\n this.floatLabelChange();\n this.dispatchEvent(this.hiddenElement, 'change');\n if (this.inputWrapper.clearButton) {\n addClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n this.trigger('blur');\n };\n DropDownList.prototype.onFocus = function () {\n if (!this.isInteracted) {\n this.isInteracted = true;\n this.trigger('focus');\n }\n this.updateIconState();\n };\n DropDownList.prototype.wireEvent = function () {\n EventHandler.add(this.inputWrapper.container, 'mousedown', this.dropDownClick, this);\n EventHandler.add(this.inputWrapper.container, 'focus', this.focusIn, this);\n EventHandler.add(this.inputWrapper.container, 'keypress', this.onSearch, this);\n this.bindCommonEvent();\n };\n DropDownList.prototype.bindCommonEvent = function () {\n EventHandler.add(this.targetElement(), 'blur', this.onBlur, this);\n if (!Browser.isDevice) {\n this.keyboardModule = new KeyboardEvents(this.targetElement(), {\n keyAction: this.keyActionHandler.bind(this), keyConfigs: this.keyConfigure, eventName: 'keydown'\n });\n }\n this.bindClearEvent();\n };\n DropDownList.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.resetHandler, this);\n }\n };\n DropDownList.prototype.unBindCommonEvent = function () {\n EventHandler.remove(this.targetElement(), 'blur', this.onBlur);\n if (!Browser.isDevice) {\n this.keyboardModule.destroy();\n }\n if (this.showClearButton) {\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown', this.resetHandler);\n }\n };\n DropDownList.prototype.updateIconState = function () {\n if (this.showClearButton) {\n if (this.inputElement.value !== '') {\n removeClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n else {\n addClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n }\n };\n /**\n * Event binding for list\n */\n DropDownList.prototype.wireListEvents = function () {\n EventHandler.add(this.list, 'click', this.onMouseClick, this);\n EventHandler.add(this.list, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.list, 'mouseout', this.onMouseLeave, this);\n };\n ;\n DropDownList.prototype.onSearch = function (e) {\n if (e.charCode !== 32 && e.charCode !== 13) {\n if (this.list === undefined) {\n this.renderList();\n }\n this.searchKeyEvent = e;\n if (!this.isRequested && !isNullOrUndefined(this.list.querySelector('li'))) {\n this.incrementalSearch(e);\n }\n }\n };\n DropDownList.prototype.onMouseClick = function (e) {\n var target = e.target;\n var classList = target.classList;\n var li = closest(target, '.' + dropDownBaseClasses.li);\n if (!this.isValidLI(li)) {\n return;\n }\n this.setSelection(li, e);\n if (Browser.isDevice && this.isFilterLayout()) {\n history.back();\n }\n else {\n var delay = 100;\n this.closePopup(delay);\n }\n };\n DropDownList.prototype.onMouseOver = function (e) {\n var currentLi = closest(e.target, '.' + dropDownBaseClasses.li);\n this.setHover(currentLi);\n };\n ;\n DropDownList.prototype.setHover = function (li) {\n if (this.enabled && this.isValidLI(li) && !li.classList.contains(dropDownBaseClasses.hover)) {\n this.removeHover();\n addClass([li], dropDownBaseClasses.hover);\n }\n };\n ;\n DropDownList.prototype.onMouseLeave = function (e) {\n this.removeHover();\n };\n ;\n DropDownList.prototype.removeHover = function () {\n var hoveredItem = this.list.querySelectorAll('.' + dropDownBaseClasses.hover);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, dropDownBaseClasses.hover);\n }\n };\n ;\n DropDownList.prototype.isValidLI = function (li) {\n return (li && li.hasAttribute('role') && li.getAttribute('role') === 'option');\n };\n ;\n DropDownList.prototype.incrementalSearch = function (e) {\n if (this.liCollections.length > 0) {\n var li = incrementalSearch(e.charCode, this.liCollections, this.activeIndex, true);\n if (!isNullOrUndefined(li)) {\n this.setSelection(li, e);\n this.setScrollPosition();\n }\n }\n };\n ;\n DropDownList.prototype.hideSpinner = function () {\n if (!isNullOrUndefined(this.spinnerElement)) {\n hideSpinner(this.spinnerElement);\n removeClass([this.spinnerElement], dropDownListClasses.disableIcon);\n this.spinnerElement.innerHTML = '';\n this.spinnerElement = null;\n }\n };\n DropDownList.prototype.showSpinner = function () {\n if (isNullOrUndefined(this.spinnerElement)) {\n this.spinnerElement = Browser.isDevice && !isNullOrUndefined(this.filterInputObj) && this.filterInputObj.buttons[1] ||\n !isNullOrUndefined(this.filterInputObj) && this.filterInputObj.buttons[0] || this.inputWrapper.buttons[0];\n addClass([this.spinnerElement], dropDownListClasses.disableIcon);\n createSpinner({\n target: this.spinnerElement,\n width: Browser.isDevice ? '16px' : '14px'\n });\n showSpinner(this.spinnerElement);\n }\n };\n DropDownList.prototype.keyActionHandler = function (e) {\n var preventAction = e.action === 'pageUp' || e.action === 'pageDown';\n var preventHomeEnd = this.getModuleName() !== 'dropdownlist' && (e.action === 'home' || e.action === 'end');\n this.isEscapeKey = e.action === 'escape';\n this.isTabKey = !this.isPopupOpen && e.action === 'tab';\n var isNavigation = (e.action === 'down' || e.action === 'up' || e.action === 'pageUp' || e.action === 'pageDown'\n || e.action === 'home' || e.action === 'end');\n if ((this.isEditTextBox() || preventAction || preventHomeEnd) && !this.isPopupOpen) {\n return;\n }\n if (!this.readonly) {\n var isTabAction = e.action === 'tab' || e.action === 'close';\n if (this.list === undefined && !this.isRequested && !isTabAction && e.action !== 'escape') {\n this.searchKeyEvent = e;\n this.renderList();\n }\n if (isNullOrUndefined(this.list) || (!isNullOrUndefined(this.liCollections) &&\n isNavigation && this.liCollections.length === 0) || this.isRequested) {\n return;\n }\n if (isTabAction && this.isPopupOpen || e.action === 'escape') {\n e.preventDefault();\n }\n this.isSelected = e.action === 'escape' ? false : this.isSelected;\n this.isTyped = (isNavigation || e.action === 'escape') ? false : this.isTyped;\n switch (e.action) {\n case 'down':\n case 'up':\n var focusEle = this.list.querySelector('.' + dropDownListClasses.focus);\n if (this.isSelectFocusItem(focusEle)) {\n this.setSelection(focusEle, e);\n }\n else {\n var nextItem = void 0;\n var index = e.action === 'down' ? this.activeIndex + 1 : this.activeIndex - 1;\n var startIndex = 0;\n if (this.getModuleName() === 'autocomplete') {\n startIndex = e.action === 'down' && isNullOrUndefined(this.activeIndex) ? 0 : this.liCollections.length - 1;\n index = index < 0 ? this.liCollections.length - 1 : index === this.liCollections.length ? 0 : index;\n }\n nextItem = isNullOrUndefined(this.activeIndex) ? this.liCollections[startIndex] : this.liCollections[index];\n this.setSelection(nextItem, e);\n }\n e.preventDefault();\n break;\n case 'pageUp':\n this.pageUpSelection(this.activeIndex - this.getPageCount(), e);\n e.preventDefault();\n break;\n case 'pageDown':\n this.pageDownSelection(this.activeIndex + this.getPageCount(), e);\n e.preventDefault();\n break;\n case 'home':\n if (this.getModuleName() === 'dropdownlist') {\n e.preventDefault();\n if (this.activeIndex === 0) {\n return;\n }\n this.setSelection(this.liCollections[0], e);\n }\n break;\n case 'end':\n if (this.getModuleName() === 'dropdownlist') {\n e.preventDefault();\n var lastLi = this.getItems().length - 1;\n if (this.activeIndex === lastLi) {\n return;\n }\n this.setSelection(this.liCollections[lastLi], e);\n }\n break;\n case 'space':\n if (this.getModuleName() === 'dropdownlist') {\n if (!this.beforePopupOpen) {\n this.showPopup();\n }\n }\n break;\n case 'open':\n this.showPopup();\n break;\n case 'hide':\n this.preventAltUp = this.isPopupOpen;\n this.hidePopup();\n this.focusDropDown(e);\n break;\n case 'enter':\n this.selectCurrentItem(e);\n break;\n case 'escape':\n case 'tab':\n case 'close':\n if (this.isPopupOpen) {\n this.hidePopup();\n this.focusDropDown(e);\n }\n break;\n }\n }\n };\n DropDownList.prototype.selectCurrentItem = function (e) {\n if (this.isPopupOpen) {\n var li = this.list.querySelector('.' + dropDownListClasses.focus);\n if (li) {\n this.setSelection(li, e);\n this.isTyped = false;\n }\n if (this.isSelected) {\n this.isSelectCustom = false;\n this.onChangeEvent(e);\n }\n this.hidePopup();\n this.focusDropDown(e);\n }\n else {\n this.showPopup();\n }\n };\n DropDownList.prototype.isSelectFocusItem = function (element) {\n return !isNullOrUndefined(element);\n };\n DropDownList.prototype.getPageCount = function () {\n var liHeight = this.list.classList.contains(dropDownBaseClasses.noData) ? null :\n getComputedStyle(this.getItems()[0], null).getPropertyValue('height');\n return Math.round(this.list.getBoundingClientRect().height / parseInt(liHeight, 10));\n };\n DropDownList.prototype.pageUpSelection = function (steps, event) {\n var previousItem = steps >= 0 ? this.liCollections[steps + 1] : this.liCollections[0];\n this.setSelection(previousItem, event);\n };\n ;\n DropDownList.prototype.pageDownSelection = function (steps, event) {\n var list = this.getItems();\n var previousItem = steps <= list.length ? this.liCollections[steps - 1] : this.liCollections[list.length - 1];\n this.setSelection(previousItem, event);\n };\n ;\n DropDownList.prototype.unWireEvent = function () {\n EventHandler.remove(this.inputWrapper.container, 'mousedown', this.dropDownClick);\n EventHandler.remove(this.inputWrapper.container, 'keypress', this.onSearch);\n EventHandler.remove(this.inputWrapper.container, 'focus', this.focusIn);\n this.unBindCommonEvent();\n };\n /**\n * Event un binding for list items.\n */\n DropDownList.prototype.unWireListEvents = function () {\n EventHandler.remove(this.list, 'click', this.onMouseClick);\n EventHandler.remove(this.list, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.list, 'mouseout', this.onMouseLeave);\n };\n ;\n DropDownList.prototype.onDocumentClick = function (e) {\n var target = e.target;\n if (!(!isNullOrUndefined(this.popupObj) && closest(target, '#' + this.popupObj.element.id)) &&\n !this.inputWrapper.container.contains(e.target)) {\n if (this.inputWrapper.container.classList.contains(dropDownListClasses.inputFocus) || this.isPopupOpen) {\n this.isDocumentClick = true;\n var isActive = this.isRequested;\n this.isInteracted = false;\n this.hidePopup();\n if (!isActive) {\n this.onFocusOut();\n this.inputWrapper.container.classList.remove(dropDownListClasses.inputFocus);\n }\n }\n }\n else if (target !== this.inputElement && !(this.allowFiltering && target === this.filterInput)\n && !(this.getModuleName() === 'combobox' &&\n !this.allowFiltering && Browser.isDevice && target === this.inputWrapper.buttons[0])) {\n this.isPreventBlur = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.targetElement() ||\n document.activeElement === this.filterInput);\n e.preventDefault();\n }\n };\n DropDownList.prototype.activeStateChange = function () {\n if (this.isDocumentClick) {\n this.hidePopup();\n this.onFocusOut();\n this.inputWrapper.container.classList.remove(dropDownListClasses.inputFocus);\n }\n };\n DropDownList.prototype.focusDropDown = function (e) {\n if (!this.initial && this.isFilterLayout()) {\n this.focusIn();\n }\n };\n DropDownList.prototype.dropDownClick = function (e) {\n if (e.which === 3 || e.button === 2) {\n return;\n }\n if (this.targetElement().classList.contains(dropDownListClasses.disable) || this.inputWrapper.clearButton === e.target) {\n return;\n }\n var target = e.target;\n if (target !== this.inputElement && !(this.allowFiltering && target === this.filterInput) && this.getModuleName() !== 'combobox') {\n e.preventDefault();\n }\n if (!this.readonly) {\n if (this.isPopupOpen) {\n this.hidePopup();\n if (this.isFilterLayout()) {\n this.focusDropDown(e);\n }\n }\n else {\n this.focusIn();\n this.floatLabelChange();\n this.queryString = this.inputElement.value.trim() === '' ? null : this.inputElement.value;\n this.isDropDownClick = true;\n this.showPopup();\n }\n var proxy_1 = this;\n if (!this.isSecondClick) {\n setTimeout(function () { proxy_1.cloneElements(); }, 100);\n }\n }\n };\n DropDownList.prototype.cloneElements = function () {\n if (this.list) {\n var ulElement = this.list.querySelector('ul');\n if (ulElement) {\n ulElement = ulElement.cloneNode ? ulElement.cloneNode(true) : ulElement;\n this.actionCompleteData.ulElement = ulElement;\n this.isSecondClick = true;\n }\n }\n };\n DropDownList.prototype.updateSelectedItem = function (li, e, preventSelect) {\n this.removeSelection();\n li.classList.add(dropDownBaseClasses.selected);\n this.removeHover();\n var value = this.getFormattedValue(li.getAttribute('data-value'));\n this.item = li;\n this.itemData = this.getDataByValue(value);\n if (!this.initial && !preventSelect) {\n this.isSelected = true;\n var eventArgs = {\n e: e,\n item: this.item,\n itemData: this.itemData,\n isInteracted: e ? true : false,\n cancel: false\n };\n this.trigger('select', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n }\n var focusedItem = this.list.querySelector('.' + dropDownBaseClasses.focus);\n if (focusedItem) {\n removeClass([focusedItem], dropDownBaseClasses.focus);\n }\n li.setAttribute('aria-selected', 'true');\n this.activeIndex = this.getIndexByValue(value);\n };\n DropDownList.prototype.activeItem = function (li) {\n if (this.isValidLI(li) && !li.classList.contains(dropDownBaseClasses.selected)) {\n this.removeSelection();\n li.classList.add(dropDownBaseClasses.selected);\n this.removeHover();\n li.setAttribute('aria-selected', 'true');\n }\n };\n DropDownList.prototype.setValue = function (e) {\n var dataItem = this.getItemData();\n if (dataItem.value === null) {\n Input.setValue(null, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n Input.setValue(dataItem.text, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n if (this.previousValue === dataItem.value) {\n this.isSelected = false;\n return true;\n }\n else {\n this.isSelected = !this.initial ? true : false;\n this.isSelectCustom = false;\n if (this.getModuleName() === 'dropdownlist') {\n this.updateIconState();\n }\n return false;\n }\n };\n DropDownList.prototype.setSelection = function (li, e) {\n if (this.isValidLI(li) && !li.classList.contains(dropDownBaseClasses.selected)) {\n this.updateSelectedItem(li, e, false);\n }\n if (this.list) {\n this.removeHover();\n }\n this.selectedLI = li;\n if (this.setValue(e)) {\n return;\n }\n if (this.valueTemplate && this.itemData !== null) {\n this.setValueTemplate();\n }\n else if (this.inputElement.previousSibling === this.valueTempElement) {\n detach(this.valueTempElement);\n this.inputElement.style.display = 'block';\n }\n if (this.isPopupOpen) {\n attributes(this.targetElement(), { 'aria-activedescendant': this.selectedLI ? this.selectedLI.id : null });\n if (this.isFilterLayout()) {\n attributes(this.filterInput, { 'aria-activedescendant': this.selectedLI ? this.selectedLI.id : null });\n }\n }\n if ((!this.isPopupOpen && !isNullOrUndefined(li)) || (this.isPopupOpen && !isNullOrUndefined(e) &&\n (e.type !== 'keydown' || e.type === 'keydown' && e.action === 'enter'))) {\n this.isSelectCustom = false;\n this.onChangeEvent(e);\n }\n if (this.isPopupOpen && !isNullOrUndefined(this.selectedLI) && this.itemData !== null && (!e || e.type !== 'click')) {\n this.setScrollPosition(e);\n }\n };\n DropDownList.prototype.setValueTemplate = function () {\n var compiledString;\n if (!this.valueTempElement) {\n this.valueTempElement = createElement('span', { className: dropDownListClasses.value });\n this.inputElement.parentElement.insertBefore(this.valueTempElement, this.inputElement);\n this.inputElement.style.display = 'none';\n }\n this.valueTempElement.innerHTML = '';\n compiledString = compile(this.valueTemplate);\n for (var _i = 0, _a = compiledString(this.itemData); _i < _a.length; _i++) {\n var item = _a[_i];\n this.valueTempElement.appendChild(item);\n }\n };\n DropDownList.prototype.removeSelection = function () {\n var selectedItems = this.list.querySelectorAll('.' + dropDownBaseClasses.selected);\n if (selectedItems.length) {\n removeClass(selectedItems, dropDownBaseClasses.selected);\n selectedItems[0].removeAttribute('aria-selected');\n }\n };\n ;\n DropDownList.prototype.getItemData = function () {\n var fields = this.fields;\n var dataItem = {};\n dataItem = this.itemData;\n var dataValue;\n var dataText;\n if (!isNullOrUndefined(dataItem)) {\n dataValue = getValue(fields.value, dataItem);\n dataText = getValue(fields.text, dataItem);\n }\n var value = (!isNullOrUndefined(dataItem) &&\n !isUndefined(dataValue) ? dataValue : dataItem);\n var text = (!isNullOrUndefined(dataItem) &&\n !isUndefined(dataValue) ? dataText : dataItem);\n return { value: value, text: text };\n };\n /**\n * To trigger the change event for list.\n */\n DropDownList.prototype.onChangeEvent = function (eve) {\n var dataItem = this.getItemData();\n var index = this.isSelectCustom ? null : this.activeIndex;\n this.setProperties({ 'value': dataItem.value, 'index': index, 'text': dataItem.text }, true);\n this.detachChangeEvent(eve);\n };\n ;\n DropDownList.prototype.detachChangeEvent = function (eve) {\n this.isSelected = false;\n this.previousValue = this.value;\n this.activeIndex = this.index;\n this.typedString = !isNullOrUndefined(this.text) ? this.text : '';\n if (!this.initial) {\n this.setHiddenValue();\n var eventArgs = {\n e: eve,\n item: this.item,\n itemData: this.itemData,\n isInteracted: eve ? true : false,\n value: this.value\n };\n this.trigger('change', eventArgs);\n }\n };\n DropDownList.prototype.setHiddenValue = function () {\n if (!isNullOrUndefined(this.value)) {\n this.hiddenElement.innerHTML = '';\n var selectedElement = this.hiddenElement.querySelector('option');\n selectedElement.setAttribute('value', this.value.toString());\n }\n else {\n this.hiddenElement.innerHTML = '';\n }\n };\n /**\n * Filter bar implementation\n */\n DropDownList.prototype.onFilterUp = function (e) {\n this.isValidKey = e.keyCode === 40 || e.keyCode === 38 || this.isValidKey;\n if (this.isValidKey) {\n this.isValidKey = false;\n switch (e.keyCode) {\n case 38: //up arrow \n case 40://down arrow \n if (this.getModuleName() === 'autocomplete' && !this.isPopupOpen && !this.preventAltUp && !this.isRequested) {\n this.preventAutoFill = true;\n this.searchLists(e);\n }\n else {\n this.preventAutoFill = false;\n }\n this.preventAltUp = false;\n e.preventDefault();\n break;\n case 46: //delete\n case 8://backspace\n this.typedString = this.filterInput.value;\n if (!this.isPopupOpen && this.typedString !== '' || this.isPopupOpen && this.queryString.length > 0) {\n this.preventAutoFill = true;\n this.searchLists(e);\n }\n else if (this.typedString === '') {\n this.resetFocusElement();\n this.activeIndex = null;\n if (this.getModuleName() === 'autocomplete') {\n this.hidePopup();\n }\n }\n e.preventDefault();\n break;\n default:\n this.typedString = this.filterInput.value;\n this.preventAutoFill = false;\n this.searchLists(e);\n break;\n }\n }\n };\n DropDownList.prototype.onFilterDown = function (e) {\n switch (e.keyCode) {\n case 13://enter\n break;\n case 40: //down arrow \n case 38://up arrow \n this.queryString = this.filterInput.value;\n e.preventDefault();\n break;\n case 9://tab \n if (this.isPopupOpen) {\n e.preventDefault();\n }\n break;\n default:\n this.prevSelectPoints = this.getSelectionPoints();\n this.queryString = this.filterInput.value;\n break;\n }\n };\n DropDownList.prototype.removeFillSelection = function () {\n if (this.isInteracted) {\n var selection = this.getSelectionPoints();\n this.inputElement.setSelectionRange(selection.end, selection.end);\n }\n };\n DropDownList.prototype.getSelectionPoints = function () {\n var input = this.inputElement;\n return { start: Math.abs(input.selectionStart), end: Math.abs(input.selectionEnd) };\n };\n DropDownList.prototype.searchLists = function (e) {\n var _this = this;\n this.isTyped = true;\n this.activeIndex = null;\n if (this.filterInput.parentElement.querySelector('.' + dropDownListClasses.clearIcon)) {\n var clearElement = this.filterInput.parentElement.querySelector('.' + dropDownListClasses.clearIcon);\n clearElement.style.visibility = this.filterInput.value === '' ? 'hidden' : 'visible';\n }\n if (this.isFiltering()) {\n var eventArgs_1 = {\n preventDefaultAction: false,\n text: this.filterInput.value,\n updateData: function (dataSource, query, fields) {\n if (eventArgs_1.cancel) {\n return;\n }\n _this.isCustomFilter = true;\n _this.filteringAction(dataSource, query, fields);\n },\n baseEventArgs: e,\n cancel: false\n };\n this.trigger('filtering', eventArgs_1);\n if (eventArgs_1.cancel) {\n return;\n }\n if (!this.isCustomFilter && !eventArgs_1.preventDefaultAction) {\n var filterQuery = this.query ? this.query.clone() : new Query();\n var dataType = this.typeOfData(this.dataSource).typeof;\n if (!(this.dataSource instanceof DataManager) && dataType === 'string' || dataType === 'number') {\n filterQuery.where('', 'startswith', this.filterInput.value, true, this.ignoreAccent);\n }\n else {\n var fields = this.fields;\n filterQuery.where(!isNullOrUndefined(fields.text) ? fields.text : '', 'startswith', this.filterInput.value, true, this.ignoreAccent);\n }\n this.filteringAction(this.dataSource, filterQuery, this.fields);\n }\n }\n };\n DropDownList.prototype.filteringAction = function (dataSource, query, fields) {\n if (!isNullOrUndefined(this.filterInput)) {\n this.beforePopupOpen = true;\n if (this.filterInput.value.trim() === '') {\n this.actionCompleteData.isUpdated = false;\n this.isTyped = false;\n this.onActionComplete(this.actionCompleteData.ulElement, this.actionCompleteData.list);\n this.isTyped = true;\n if (!isNullOrUndefined(this.itemData) && this.getModuleName() === 'dropdownlist') {\n this.focusIndexItem();\n this.setScrollPosition();\n }\n this.isNotSearchList = true;\n }\n else {\n this.isNotSearchList = false;\n this.resetList(dataSource, fields, query);\n }\n }\n };\n DropDownList.prototype.setSearchBox = function (popupElement) {\n if (this.isFiltering()) {\n var parentElement = createElement('span', {\n className: dropDownListClasses.filterParent\n });\n this.filterInput = createElement('input', {\n attrs: { type: 'text' },\n className: dropDownListClasses.filterInput\n });\n this.element.parentNode.insertBefore(this.filterInput, this.element);\n var backIcon = false;\n if (Browser.isDevice) {\n backIcon = true;\n }\n this.filterInputObj = Input.createInput({\n element: this.filterInput,\n buttons: backIcon ?\n [dropDownListClasses.backIcon, dropDownListClasses.filterBarClearIcon] : [dropDownListClasses.filterBarClearIcon],\n properties: { placeholder: this.filterBarPlaceholder }\n });\n append([this.filterInputObj.container], parentElement);\n prepend([parentElement], popupElement);\n attributes(this.filterInput, {\n 'aria-disabled': 'false',\n 'aria-owns': this.element.id + '_options',\n 'role': 'listbox',\n 'aria-activedescendant': this.selectedLI ? this.selectedLI.id : null,\n 'autocomplete': 'off',\n 'autocorrect': 'off',\n 'autocapitalize': 'off',\n 'spellcheck': 'false'\n });\n this.clearIconElement = this.filterInput.parentElement.querySelector('.' + dropDownListClasses.clearIcon);\n if (!Browser.isDevice && this.clearIconElement) {\n EventHandler.add(this.clearIconElement, 'click', this.clearText, this);\n this.clearIconElement.style.visibility = 'hidden';\n }\n if (!Browser.isDevice) {\n this.searchKeyModule = new KeyboardEvents(this.filterInput, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigure,\n eventName: 'keydown'\n });\n }\n EventHandler.add(this.filterInput, 'input', this.onInput, this);\n EventHandler.add(this.filterInput, 'keyup', this.onFilterUp, this);\n EventHandler.add(this.filterInput, 'keydown', this.onFilterDown, this);\n EventHandler.add(this.filterInput, 'blur', this.onBlur, this);\n return this.filterInputObj;\n }\n else {\n return inputObject;\n }\n };\n ;\n DropDownList.prototype.onInput = function () {\n this.isValidKey = true;\n };\n DropDownList.prototype.onActionFailure = function (e) {\n _super.prototype.onActionFailure.call(this, e);\n if (this.beforePopupOpen) {\n this.renderPopup();\n }\n };\n DropDownList.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\n if (this.isNotSearchList) {\n this.isNotSearchList = false;\n return;\n }\n if (this.isActive) {\n var selectedItem = this.selectedLI ? this.selectedLI.cloneNode(true) : null;\n _super.prototype.onActionComplete.call(this, ulElement, list, e);\n if (this.isRequested && !isNullOrUndefined(this.searchKeyEvent) && this.searchKeyEvent.type === 'keydown') {\n this.isRequested = false;\n this.keyActionHandler(this.searchKeyEvent);\n this.searchKeyEvent = null;\n }\n if (this.isRequested && !isNullOrUndefined(this.searchKeyEvent)) {\n this.incrementalSearch(this.searchKeyEvent);\n this.searchKeyEvent = null;\n }\n this.list.scrollTop = 0;\n if (!isNullOrUndefined(ulElement)) {\n attributes(ulElement, { 'id': this.element.id + '_options', 'role': 'listbox', 'aria-hidden': 'false' });\n }\n if (this.initRemoteRender) {\n this.initial = true;\n this.activeIndex = this.index;\n this.updateValues();\n this.initRemoteRender = false;\n this.initial = false;\n }\n if (this.getModuleName() !== 'autocomplete' && this.isFiltering() && !this.isTyped) {\n if (!this.actionCompleteData.isUpdated) {\n this.actionCompleteData = { ulElement: ulElement.cloneNode(true), list: list, isUpdated: true };\n }\n this.addNewItem(list, selectedItem);\n if (!isNullOrUndefined(this.itemData)) {\n this.focusIndexItem();\n }\n }\n if (this.beforePopupOpen) {\n this.renderPopup();\n }\n }\n };\n DropDownList.prototype.addNewItem = function (listData, newElement) {\n var _this = this;\n if (!isNullOrUndefined(this.itemData) && !isNullOrUndefined(newElement)) {\n var value_1 = this.getItemData().value;\n var isExist = listData.some(function (data) {\n return (((typeof data === 'string' || typeof data === 'number') && data === value_1) ||\n (getValue(_this.fields.value, data) === value_1));\n });\n if (!isExist) {\n this.addItem(this.itemData);\n }\n }\n };\n DropDownList.prototype.updateActionCompleteData = function (li, item) {\n if (this.getModuleName() !== 'autocomplete' && this.actionCompleteData.ulElement) {\n this.actionCompleteData.ulElement.appendChild(li.cloneNode(true));\n this.actionCompleteData.list.push(item);\n }\n };\n DropDownList.prototype.focusIndexItem = function () {\n var value = this.getItemData().value;\n this.activeIndex = this.getIndexByValue(value);\n var element = this.list.querySelector('[data-value=\"' + value + '\"]');\n this.selectedLI = element;\n this.activeItem(element);\n this.removeFocus();\n };\n DropDownList.prototype.updateSelection = function () {\n var selectedItem = this.list.querySelector('.' + dropDownBaseClasses.selected);\n if (selectedItem) {\n this.setProperties({ 'index': this.getIndexByValue(selectedItem.getAttribute('data-value')) });\n this.activeIndex = this.index;\n }\n else {\n this.removeFocus();\n this.list.querySelector('.' + dropDownBaseClasses.li).classList.add(dropDownListClasses.focus);\n }\n };\n DropDownList.prototype.removeFocus = function () {\n var highlightedItem = this.list.querySelectorAll('.' + dropDownListClasses.focus);\n if (highlightedItem && highlightedItem.length) {\n removeClass(highlightedItem, dropDownListClasses.focus);\n }\n };\n ;\n DropDownList.prototype.renderPopup = function () {\n if (this.popupObj && document.body.contains(this.popupObj.element)) {\n this.refreshPopup();\n return;\n }\n var popupEle = createElement('div', { id: this.element.id + '_popup', className: 'e-ddl e-popup' });\n var searchBox = this.setSearchBox(popupEle);\n this.listHeight = formatUnit(this.popupHeight);\n if (this.headerTemplate) {\n var compiledString = void 0;\n this.header = document.createElement('div');\n addClass([this.header], dropDownListClasses.header);\n compiledString = compile(this.headerTemplate);\n for (var _i = 0, _a = compiledString({}); _i < _a.length; _i++) {\n var item = _a[_i];\n this.header.appendChild(item);\n }\n append([this.header], popupEle);\n }\n append([this.list], popupEle);\n if (this.footerTemplate) {\n this.setFooterTemplate(popupEle);\n }\n document.body.appendChild(popupEle);\n popupEle.style.visibility = 'hidden';\n if (this.popupHeight !== 'auto') {\n this.searchBoxHeight = 0;\n if (!isNullOrUndefined(searchBox.container)) {\n this.searchBoxHeight = (searchBox.container.parentElement).getBoundingClientRect().height;\n this.listHeight = (parseInt(this.listHeight, 10) - (this.searchBoxHeight)).toString() + 'px';\n }\n if (this.headerTemplate) {\n var height = Math.round(this.header.getBoundingClientRect().height);\n this.listHeight = (parseInt(this.listHeight, 10) - (height + this.searchBoxHeight)).toString() + 'px';\n }\n if (this.footerTemplate) {\n var height = Math.round(this.footer.getBoundingClientRect().height);\n this.listHeight = (parseInt(this.listHeight, 10) - (height + this.searchBoxHeight)).toString() + 'px';\n }\n this.list.style.maxHeight = (parseInt(this.listHeight, 10) - 2).toString() + 'px'; // due to box-sizing property\n popupEle.style.maxHeight = formatUnit(this.popupHeight);\n }\n else {\n popupEle.style.height = 'auto';\n }\n var offsetValue = 0;\n var left;\n if (!isNullOrUndefined(this.selectedLI) && (!isNullOrUndefined(this.activeIndex) && this.activeIndex >= 0)) {\n this.setScrollPosition();\n }\n else {\n this.list.scrollTop = 0;\n }\n if (Browser.isDevice && (!this.allowFiltering && (this.getModuleName() === 'dropdownlist' ||\n (this.isDropDownClick && this.getModuleName() === 'combobox')))) {\n offsetValue = this.getOffsetValue(popupEle);\n var firstItem = this.isEmptyList() ? this.list : this.liCollections[0];\n left = -(parseInt(getComputedStyle(firstItem).textIndent, 10) -\n parseInt(getComputedStyle(this.inputElement).paddingLeft, 10) +\n parseInt(getComputedStyle(this.inputElement.parentElement).borderLeftWidth, 10));\n }\n this.getFocusElement();\n this.createPopup(popupEle, offsetValue, left);\n this.checkCollision(popupEle);\n if (Browser.isDevice) {\n this.popupObj.element.classList.add(dropDownListClasses.device);\n if (this.getModuleName() === 'dropdownlist' || (this.getModuleName() === 'combobox'\n && !this.allowFiltering && this.isDropDownClick)) {\n this.popupObj.collision = { X: 'fit', Y: 'fit' };\n }\n if (this.isFilterLayout()) {\n this.popupObj.element.classList.add(dropDownListClasses.mobileFilter);\n this.popupObj.position = { X: 0, Y: 0 };\n this.popupObj.dataBind();\n attributes(this.popupObj.element, { style: 'left:0px;right:0px;top:0px;bottom:0px;' });\n addClass([document.body, this.popupObj.element], dropDownListClasses.popupFullScreen);\n this.setSearchBoxPosition();\n this.backIconElement = searchBox.container.querySelector('.e-back-icon');\n this.clearIconElement = searchBox.container.querySelector('.' + dropDownListClasses.clearIcon);\n EventHandler.add(this.backIconElement, 'click', this.clickOnBackIcon, this);\n EventHandler.add(this.clearIconElement, 'click', this.clearText, this);\n }\n }\n popupEle.style.visibility = 'visible';\n addClass([popupEle], 'e-popup-close');\n var scrollParentElements = this.popupObj.getScrollableParent(this.inputWrapper.container);\n for (var _b = 0, scrollParentElements_1 = scrollParentElements; _b < scrollParentElements_1.length; _b++) {\n var element = scrollParentElements_1[_b];\n EventHandler.add(element, 'scroll', this.scrollHandler, this);\n }\n if (Browser.isDevice && this.isFilterLayout()) {\n EventHandler.add(this.list, 'scroll', this.listScroll, this);\n }\n attributes(this.targetElement(), { 'aria-expanded': 'true' });\n var inputParent = this.isFiltering() ? this.filterInput.parentElement : this.inputWrapper.container;\n addClass([inputParent], [dropDownListClasses.inputFocus]);\n var animModel = { name: 'FadeIn', duration: 100 };\n this.beforePopupOpen = true;\n var eventArgs = { popup: this.popupObj, cancel: false };\n this.trigger('open', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n addClass([this.inputWrapper.container], [dropDownListClasses.iconAnimation]);\n this.popupObj.show(new Animation(animModel));\n };\n DropDownList.prototype.checkCollision = function (popupEle) {\n if (!Browser.isDevice || (Browser.isDevice && !(this.getModuleName() === 'dropdownlist' || this.isDropDownClick))) {\n var collision = isCollide(popupEle);\n if (collision.length > 0) {\n popupEle.style.marginTop = -parseInt(getComputedStyle(popupEle).marginTop, 10) + 'px';\n }\n }\n };\n DropDownList.prototype.getOffsetValue = function (popupEle) {\n var popupStyles = getComputedStyle(popupEle);\n var borderTop = parseInt(popupStyles.borderTop, 10);\n var borderBottom = parseInt(popupStyles.borderBottom, 10);\n return this.setPopupPosition(borderTop + borderBottom);\n };\n DropDownList.prototype.createPopup = function (element, offsetValue, left) {\n var _this = this;\n this.popupObj = new Popup(element, {\n width: this.setWidth(), targetType: 'relative',\n relateTo: this.inputWrapper.container, collision: { X: 'flip', Y: 'flip' }, offsetY: offsetValue,\n enableRtl: this.enableRtl, offsetX: left, position: { X: 'left', Y: 'bottom' },\n zIndex: this.zIndex,\n close: function () {\n if (!_this.isDocumentClick) {\n _this.focusDropDown();\n }\n _this.isDocumentClick = false;\n _this.destroyPopup();\n },\n open: function () {\n EventHandler.add(document, 'mousedown', _this.onDocumentClick, _this);\n _this.isPopupOpen = true;\n if (_this.isFilterLayout()) {\n removeClass([_this.inputWrapper.container], [dropDownListClasses.inputFocus]);\n _this.isFilterFocus = true;\n _this.filterInput.focus();\n if (_this.inputWrapper.clearButton) {\n addClass([_this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n }\n _this.activeStateChange();\n }\n });\n };\n DropDownList.prototype.isEmptyList = function () {\n return !isNullOrUndefined(this.liCollections) && this.liCollections.length === 0;\n };\n DropDownList.prototype.getFocusElement = function () {\n // combo-box used this method\n };\n DropDownList.prototype.isFilterLayout = function () {\n return this.getModuleName() === 'dropdownlist' && this.allowFiltering;\n };\n DropDownList.prototype.scrollHandler = function () {\n if (Browser.isDevice && ((this.getModuleName() === 'dropdownlist' &&\n !this.isFilterLayout()) || (this.getModuleName() === 'combobox' && !this.allowFiltering && this.isDropDownClick))) {\n this.hidePopup();\n }\n if (this.fields.groupBy && !isNullOrUndefined(this.fixedHeaderElement)) {\n this.fixedHeaderElement.style.zIndex = '0';\n this.fixedHeaderElement.style.display = 'none';\n }\n };\n DropDownList.prototype.setSearchBoxPosition = function () {\n var searchBoxHeight = this.filterInput.parentElement.getBoundingClientRect().height;\n this.popupObj.element.style.maxHeight = '100%';\n this.popupObj.element.style.width = '100%';\n this.list.style.maxHeight = (window.innerHeight - searchBoxHeight) + 'px';\n this.list.style.height = (window.innerHeight - searchBoxHeight) + 'px';\n var clearElement = this.filterInput.parentElement.querySelector('.' + dropDownListClasses.clearIcon);\n detach(this.filterInput);\n clearElement.parentElement.insertBefore(this.filterInput, clearElement);\n };\n DropDownList.prototype.setPopupPosition = function (border) {\n var offsetValue;\n var popupOffset = border;\n var selectedLI = this.list.querySelector('.' + dropDownListClasses.focus) || this.selectedLI;\n var firstItem = this.isEmptyList() ? this.list : this.liCollections[0];\n var lastItem = this.isEmptyList() ? this.list : this.liCollections[this.getItems().length - 1];\n var liHeight = firstItem.getBoundingClientRect().height;\n var listHeight = this.list.offsetHeight / 2;\n var height = isNullOrUndefined(selectedLI) ? firstItem.offsetTop : selectedLI.offsetTop;\n var lastItemOffsetValue = lastItem.offsetTop;\n if (lastItemOffsetValue - listHeight < height && !isNullOrUndefined(this.liCollections) &&\n this.liCollections.length > 0 && !isNullOrUndefined(selectedLI)) {\n var count = this.list.offsetHeight / liHeight;\n var paddingBottom = parseInt(getComputedStyle(this.list).paddingBottom, 10);\n offsetValue = (count - (this.liCollections.length - this.activeIndex)) * liHeight - popupOffset + paddingBottom;\n this.list.scrollTop = selectedLI.offsetTop;\n }\n else if (height > listHeight) {\n offsetValue = listHeight - liHeight / 2;\n this.list.scrollTop = height - listHeight + liHeight / 2;\n }\n else {\n offsetValue = height;\n }\n var inputHeight = this.inputWrapper.container.offsetHeight;\n offsetValue = offsetValue + liHeight + popupOffset - ((liHeight - inputHeight) / 2);\n return -offsetValue;\n };\n DropDownList.prototype.setWidth = function () {\n var width = formatUnit(this.popupWidth);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.inputWrapper.container.offsetWidth * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n if (Browser.isDevice && (!this.allowFiltering && (this.getModuleName() === 'dropdownlist' ||\n (this.isDropDownClick && this.getModuleName() === 'combobox')))) {\n var firstItem = this.isEmptyList() ? this.list : this.liCollections[0];\n width = (parseInt(width, 10) + (parseInt(getComputedStyle(firstItem).textIndent, 10) -\n parseInt(getComputedStyle(this.inputElement).paddingLeft, 10) +\n parseInt(getComputedStyle(this.inputElement.parentElement).borderLeftWidth, 10)) * 2) + 'px';\n }\n return width;\n };\n DropDownList.prototype.scrollBottom = function (isInitial) {\n var currentOffset = this.list.offsetHeight;\n var nextBottom = this.selectedLI.offsetTop + this.selectedLI.offsetHeight - this.list.scrollTop;\n var nextOffset = this.list.scrollTop + nextBottom - currentOffset;\n nextOffset = isInitial ? nextOffset + parseInt(getComputedStyle(this.list).paddingTop, 10) * 2 : nextOffset;\n var boxRange = this.selectedLI.offsetTop + this.selectedLI.offsetHeight - this.list.scrollTop;\n boxRange = this.fields.groupBy && !isNullOrUndefined(this.fixedHeaderElement) ?\n boxRange - this.fixedHeaderElement.offsetHeight : boxRange;\n if (this.activeIndex === 0) {\n this.list.scrollTop = 0;\n }\n else if (nextBottom > currentOffset || !(boxRange > 0 && this.list.offsetHeight > boxRange)) {\n this.list.scrollTop = nextOffset;\n }\n };\n DropDownList.prototype.scrollTop = function () {\n var nextOffset = this.selectedLI.offsetTop - this.list.scrollTop;\n var nextBottom = this.selectedLI.offsetTop + this.selectedLI.offsetHeight - this.list.scrollTop;\n nextOffset = this.fields.groupBy && !isNullOrUndefined(this.fixedHeaderElement) ?\n nextOffset - this.fixedHeaderElement.offsetHeight : nextOffset;\n var boxRange = (this.selectedLI.offsetTop + this.selectedLI.offsetHeight - this.list.scrollTop);\n if (this.activeIndex === 0) {\n this.list.scrollTop = 0;\n }\n else if (nextOffset < 0) {\n this.list.scrollTop = this.list.scrollTop + nextOffset;\n }\n else if (!(boxRange > 0 && this.list.offsetHeight > boxRange)) {\n this.list.scrollTop = this.selectedLI.offsetTop - (this.fields.groupBy && !isNullOrUndefined(this.fixedHeaderElement) ?\n this.fixedHeaderElement.offsetHeight : 0);\n }\n };\n DropDownList.prototype.isEditTextBox = function () {\n return false;\n };\n DropDownList.prototype.isFiltering = function () {\n return this.allowFiltering;\n };\n DropDownList.prototype.isPopupButton = function () {\n return true;\n };\n DropDownList.prototype.setScrollPosition = function (e) {\n if (!isNullOrUndefined(e)) {\n switch (e.action) {\n case 'pageDown':\n case 'down':\n case 'end':\n this.scrollBottom();\n break;\n default:\n this.scrollTop();\n break;\n }\n }\n else {\n this.scrollBottom(true);\n }\n };\n DropDownList.prototype.clearText = function () {\n this.filterInput.value = '';\n this.searchLists(null);\n };\n DropDownList.prototype.listScroll = function () {\n this.filterInput.blur();\n };\n DropDownList.prototype.closePopup = function (delay) {\n this.isTyped = false;\n if (!(this.popupObj && document.body.contains(this.popupObj.element) && this.beforePopupOpen)) {\n return;\n }\n EventHandler.remove(document, 'mousedown', this.onDocumentClick);\n this.isActive = false;\n this.filterInputObj = null;\n this.isDropDownClick = false;\n this.preventAutoFill = false;\n var scrollableParentElements = this.popupObj.getScrollableParent(this.inputWrapper.container);\n for (var _i = 0, scrollableParentElements_1 = scrollableParentElements; _i < scrollableParentElements_1.length; _i++) {\n var element = scrollableParentElements_1[_i];\n EventHandler.remove(element, 'scroll', this.scrollHandler);\n }\n if (Browser.isDevice && this.isFilterLayout()) {\n removeClass([document.body, this.popupObj.element], dropDownListClasses.popupFullScreen);\n EventHandler.remove(this.list, 'scroll', this.listScroll);\n }\n if (this.isFilterLayout()) {\n if (!Browser.isDevice) {\n this.searchKeyModule.destroy();\n if (this.clearIconElement) {\n EventHandler.remove(this.clearIconElement, 'click', this.clearText);\n }\n }\n if (this.backIconElement) {\n EventHandler.remove(this.backIconElement, 'click', this.clickOnBackIcon);\n EventHandler.remove(this.clearIconElement, 'click', this.clearText);\n }\n EventHandler.remove(this.filterInput, 'input', this.onInput);\n EventHandler.remove(this.filterInput, 'keyup', this.onFilterUp);\n EventHandler.remove(this.filterInput, 'keydown', this.onFilterDown);\n EventHandler.remove(this.filterInput, 'blur', this.onBlur);\n this.filterInput = null;\n }\n attributes(this.targetElement(), { 'aria-expanded': 'false', 'aria-activedescendant': null });\n this.inputWrapper.container.classList.remove(dropDownListClasses.iconAnimation);\n if (this.isFiltering()) {\n this.actionCompleteData.isUpdated = false;\n }\n this.beforePopupOpen = false;\n var eventArgs = { popup: this.popupObj, cancel: false };\n this.trigger('close', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n var animModel = {\n name: 'FadeOut',\n duration: 100,\n delay: delay ? delay : 0\n };\n if (this.getModuleName() === 'autocomplete') {\n this.rippleFun();\n }\n if (this.isPopupOpen) {\n this.popupObj.hide(new Animation(animModel));\n }\n else {\n this.destroyPopup();\n }\n };\n DropDownList.prototype.destroyPopup = function () {\n this.isPopupOpen = false;\n this.isFilterFocus = false;\n this.popupObj.destroy();\n detach(this.popupObj.element);\n };\n DropDownList.prototype.clickOnBackIcon = function () {\n this.hidePopup();\n this.focusIn();\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n DropDownList.prototype.render = function () {\n if (this.element.tagName === 'INPUT') {\n this.inputElement = this.element;\n }\n else {\n this.inputElement = createElement('input');\n if (this.element.tagName !== this.getNgDirective()) {\n this.element.style.display = 'none';\n }\n this.element.parentElement.insertBefore(this.inputElement, this.element);\n this.preventTabIndex(this.inputElement);\n }\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n buttons: this.isPopupButton() ? [dropDownListClasses.icon] : null,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.getModuleName() === 'dropdownlist' ? true : this.readonly,\n placeholder: this.placeholder,\n cssClass: this.cssClass,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton\n },\n });\n if (this.element.tagName === this.getNgDirective()) {\n this.element.appendChild(this.inputWrapper.container);\n }\n else {\n this.inputElement.parentElement.insertBefore(this.element, this.inputElement);\n }\n var name = this.element.getAttribute('name') ? this.element.getAttribute('name') : this.element.getAttribute('id');\n this.hiddenElement = createElement('select', {\n attrs: { 'name': name, 'aria-hidden': 'true', 'tabindex': '-1', 'class': dropDownListClasses.hiddenElement }\n });\n prepend([this.hiddenElement], this.inputWrapper.container);\n this.element.removeAttribute('name');\n this.setFields();\n this.inputWrapper.container.style.width = formatUnit(this.width);\n this.inputWrapper.container.classList.add('e-ddl');\n this.wireEvent();\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.removeAttribute('tabindex');\n var id = this.element.getAttribute('id') ? this.element.getAttribute('id') : getUniqueID('ej2_dropdownlist');\n this.element.id = id;\n this.hiddenElement.id = id + '_hidden';\n this.targetElement().setAttribute('tabindex', this.tabIndex);\n attributes(this.targetElement(), this.getAriaAttributes());\n this.setHTMLAttributes();\n if (this.value !== null || this.activeIndex !== null || this.text !== null) {\n this.initValue();\n }\n else if (this.element.tagName === 'SELECT' && this.element.options[0]) {\n var selectElement = this.element;\n this.value = selectElement.options[selectElement.selectedIndex].value;\n this.text = isNullOrUndefined(this.value) ? null : selectElement.options[selectElement.selectedIndex].textContent;\n this.initValue();\n }\n this.preventTabIndex(this.element);\n if (!this.enabled) {\n this.targetElement().tabIndex = -1;\n }\n this.initial = false;\n this.element.style.opacity = '';\n };\n ;\n DropDownList.prototype.setFooterTemplate = function (popupEle) {\n var compiledString;\n if (this.footer) {\n this.footer.innerHTML = '';\n }\n else {\n this.footer = document.createElement('div');\n addClass([this.footer], dropDownListClasses.footer);\n }\n compiledString = compile(this.footerTemplate);\n for (var _i = 0, _a = compiledString({}); _i < _a.length; _i++) {\n var item = _a[_i];\n this.footer.appendChild(item);\n }\n append([this.footer], popupEle);\n };\n DropDownList.prototype.setOldText = function (text) {\n this.text = text;\n };\n DropDownList.prototype.setOldValue = function (value) {\n this.value = value;\n };\n DropDownList.prototype.refreshPopup = function () {\n if (!isNullOrUndefined(this.popupObj) && document.body.contains(this.popupObj.element) &&\n ((this.allowFiltering && !(Browser.isDevice && this.isFilterLayout())) || this.getModuleName() === 'autocomplete')) {\n this.popupObj.refreshPosition(this.inputWrapper.container);\n }\n };\n DropDownList.prototype.updateDataSource = function (prop) {\n this.clear(null, prop);\n this.resetList(this.dataSource);\n };\n /**\n * Dynamically change the value of properties.\n * @private\n */\n DropDownList.prototype.onPropertyChanged = function (newProp, oldProp) {\n this.setUpdateInitial(['query', 'dataSource'], newProp);\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'query':\n case 'dataSource':\n break;\n case 'htmlAttributes':\n this.setHTMLAttributes();\n break;\n case 'width':\n setStyleAttribute(this.inputWrapper.container, { 'width': formatUnit(newProp.width) });\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n break;\n case 'filterBarPlaceholder':\n Input.setPlaceholder(newProp.filterBarPlaceholder, this.filterInput);\n break;\n case 'readonly':\n Input.setReadonly(newProp.readonly, this.inputElement);\n break;\n case 'cssClass':\n Input.setCssClass(newProp.cssClass, [this.inputWrapper.container]);\n if (this.popupObj) {\n this.popupObj.element.classList.add(newProp.cssClass);\n }\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'enabled':\n this.setEnable();\n break;\n case 'text':\n if (newProp.text === null) {\n this.clear();\n return;\n }\n if (!this.list) {\n if (this.dataSource instanceof DataManager) {\n this.initRemoteRender = true;\n }\n this.renderList();\n }\n if (!this.initRemoteRender) {\n var li = this.getElementByText(newProp.text);\n if (this.isValidLI(li)) {\n this.setSelection(li, null);\n }\n else {\n this.setOldText(oldProp.text);\n }\n }\n break;\n case 'value':\n if (newProp.value === null) {\n this.clear();\n return;\n }\n if (!this.list) {\n if (this.dataSource instanceof DataManager) {\n this.initRemoteRender = true;\n }\n this.renderList();\n }\n if (!this.initRemoteRender) {\n var item = this.getElementByValue(newProp.value);\n if (this.isValidLI(item)) {\n this.setSelection(item, null);\n }\n else {\n this.setOldValue(oldProp.value);\n }\n }\n break;\n case 'index':\n if (newProp.index === null) {\n this.clear();\n return;\n }\n if (!this.list) {\n if (this.dataSource instanceof DataManager) {\n this.initRemoteRender = true;\n }\n this.renderList();\n }\n if (!this.initRemoteRender) {\n var element = this.liCollections[newProp.index];\n if (this.isValidLI(element)) {\n this.setSelection(element, null);\n }\n else {\n this.index = oldProp.index;\n }\n }\n break;\n case 'footerTemplate':\n if (this.popupObj) {\n this.setFooterTemplate(this.popupObj.element);\n }\n break;\n case 'floatLabelType':\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, newProp.floatLabelType, this.placeholder);\n break;\n case 'showClearButton':\n Input.setClearButton(newProp.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n break;\n default:\n var ddlProps = void 0;\n ddlProps = this.getPropObject(prop, newProp, oldProp);\n _super.prototype.onPropertyChanged.call(this, ddlProps.newProperty, ddlProps.oldProperty);\n break;\n }\n }\n };\n /**\n * Return the module name.\n * @private\n */\n DropDownList.prototype.getModuleName = function () {\n return 'dropdownlist';\n };\n /**\n * Opens the popup that displays the list of items.\n * @returns void.\n */\n DropDownList.prototype.showPopup = function () {\n if (this.beforePopupOpen) {\n this.refreshPopup();\n return;\n }\n this.beforePopupOpen = true;\n if (this.isFiltering() && !this.isActive && this.actionCompleteData.list && this.actionCompleteData.list[0]) {\n this.isActive = true;\n this.onActionComplete(this.actionCompleteData.ulElement, this.actionCompleteData.list, null, true);\n }\n else if (isNullOrUndefined(this.list) || !isUndefined(this.list) && this.list.classList.contains(dropDownBaseClasses.noData)) {\n this.renderList();\n }\n if (Browser.isDevice && this.isFilterLayout()) {\n var proxy_2 = this;\n window.onpopstate = function () {\n proxy_2.hidePopup();\n };\n history.pushState({}, '');\n }\n if (!isNullOrUndefined(this.list.children[0]) || this.list.classList.contains(dropDownBaseClasses.noData)) {\n this.renderPopup();\n }\n attributes(this.targetElement(), { 'aria-activedescendant': this.selectedLI ? this.selectedLI.id : null });\n };\n /**\n * Hides the popup if it is in an open state.\n * @returns void.\n */\n DropDownList.prototype.hidePopup = function () {\n if (this.isEscapeKey && this.getModuleName() === 'dropdownlist') {\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n this.isEscapeKey = false;\n if (!isNullOrUndefined(this.index)) {\n this.selectedLI = this.liCollections[this.index];\n this.updateSelectedItem(this.selectedLI, null, true);\n if (this.valueTemplate && this.itemData !== null) {\n this.setValueTemplate();\n }\n }\n else {\n this.resetSelection();\n }\n }\n this.closePopup();\n var dataItem = this.getItemData();\n if (this.inputElement.value.trim() === '' && !this.isInteracted && (this.isSelectCustom ||\n !isNullOrUndefined(this.selectedLI) && this.inputElement.value !== dataItem.text)) {\n this.isSelectCustom = false;\n this.clear();\n }\n };\n /**\n * Sets the focus on the component for interaction.\n * @returns void.\n */\n DropDownList.prototype.focusIn = function () {\n if (this.targetElement().classList.contains(dropDownListClasses.disable)) {\n return;\n }\n var isFocused = false;\n if (this.preventFocus && Browser.isDevice) {\n this.inputWrapper.container.tabIndex = 1;\n this.inputWrapper.container.focus();\n this.preventFocus = false;\n isFocused = true;\n }\n if (!isFocused) {\n this.targetElement().focus();\n }\n addClass([this.inputWrapper.container], [dropDownListClasses.inputFocus]);\n this.onFocus();\n };\n /**\n * Moves the focus from the component if the component is already focused.\n * @returns void.\n */\n DropDownList.prototype.focusOut = function () {\n this.isTyped = true;\n this.hidePopup();\n this.targetElement().blur();\n removeClass([this.inputWrapper.container], [dropDownListClasses.inputFocus]);\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n * @method destroy\n * @return {void}.\n */\n DropDownList.prototype.destroy = function () {\n var _this = this;\n this.isActive = false;\n this.hidePopup();\n this.unWireEvent();\n if (this.list) {\n this.unWireListEvents();\n }\n ['readonly', 'aria-disabled', 'aria-placeholder', 'placeholder'].forEach(function (value) {\n _this.inputElement.removeAttribute(value);\n });\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n this.inputElement.classList.remove('e-input');\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.element.style.display = 'block';\n if (this.inputWrapper.container.parentElement.tagName === this.getNgDirective()) {\n detach(this.inputWrapper.container);\n }\n else {\n this.inputWrapper.container.parentElement.insertBefore(this.element, this.inputWrapper.container);\n detach(this.inputWrapper.container);\n }\n _super.prototype.destroy.call(this);\n };\n ;\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"cssClass\", void 0);\n __decorate([\n Property('100%')\n ], DropDownList.prototype, \"width\", void 0);\n __decorate([\n Property('300px')\n ], DropDownList.prototype, \"popupHeight\", void 0);\n __decorate([\n Property('100%')\n ], DropDownList.prototype, \"popupWidth\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"placeholder\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"filterBarPlaceholder\", void 0);\n __decorate([\n Property({})\n ], DropDownList.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"query\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(false)\n ], DropDownList.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(false)\n ], DropDownList.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"index\", void 0);\n __decorate([\n Property('Never')\n ], DropDownList.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(false)\n ], DropDownList.prototype, \"showClearButton\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"filtering\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"focus\", void 0);\n DropDownList = __decorate([\n NotifyPropertyChanges\n ], DropDownList);\n return DropDownList;\n}(DropDownBase));\nexport { DropDownList };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { EventHandler, Property, Event, addClass, Browser, removeClass } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, NotifyPropertyChanges, getValue, setValue } from '@syncfusion/ej2-base';\nimport { DropDownList, dropDownListClasses } from '../drop-down-list/drop-down-list';\nimport { Search } from '../common/incremental-search';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\n/* tslint:disable */\nimport { Input } from '@syncfusion/ej2-inputs';\n/* tslint:enable */\ndropDownListClasses.root = 'e-combobox';\nvar inputObject = {\n container: null,\n buttons: []\n};\n/**\n * The ComboBox component allows the user to type a value or choose an option from the list of predefined options.\n * ```html\n * \n * ```\n * ```typescript\n * let games:ComboBox = new ComboBox();\n * games.appendTo(\"#list\");\n * ```\n */\nvar ComboBox = /** @class */ (function (_super) {\n __extends(ComboBox, _super);\n /**\n * *Constructor for creating the component\n */\n function ComboBox(options, element) {\n return _super.call(this, options, element) || this;\n }\n ;\n /**\n * Initialize the event handler\n * @private\n */\n ComboBox.prototype.preRender = function () {\n _super.prototype.preRender.call(this);\n };\n ComboBox.prototype.wireEvent = function () {\n if (this.getModuleName() === 'combobox') {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.preventBlur, this);\n EventHandler.add(this.inputWrapper.container, 'blur', this.onBlur, this);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0])) {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.dropDownClick, this);\n }\n EventHandler.add(this.inputElement, 'focus', this.targetFocus, this);\n if (!this.readonly) {\n EventHandler.add(this.inputElement, 'input', this.onInput, this);\n EventHandler.add(this.inputElement, 'keyup', this.onFilterUp, this);\n EventHandler.add(this.inputElement, 'keydown', this.onFilterDown, this);\n }\n this.bindCommonEvent();\n };\n ComboBox.prototype.preventBlur = function (e) {\n if ((!this.allowFiltering && document.activeElement !== this.inputElement &&\n !document.activeElement.classList.contains(dropDownListClasses.input) && Browser.isDevice || !Browser.isDevice)) {\n e.preventDefault();\n }\n };\n ComboBox.prototype.targetElement = function () {\n return this.inputElement;\n };\n ComboBox.prototype.setOldText = function (text) {\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n this.customValue();\n this.removeSelection();\n };\n ComboBox.prototype.setOldValue = function (value) {\n if (this.allowCustom) {\n this.valueMuteChange(this.value);\n }\n else {\n this.valueMuteChange(null);\n }\n this.removeSelection();\n this.setHiddenValue();\n };\n ComboBox.prototype.valueMuteChange = function (value) {\n var inputValue = isNullOrUndefined(value) ? null : value.toString();\n Input.setValue(inputValue, this.inputElement, this.floatLabelType, this.showClearButton);\n this.setProperties({ value: value, text: value, index: null }, true);\n this.activeIndex = this.index;\n var fields = this.fields;\n var dataItem = {};\n dataItem[fields.text] = isNullOrUndefined(value) ? null : value.toString();\n dataItem[fields.value] = isNullOrUndefined(value) ? null : value.toString();\n this.itemData = dataItem;\n this.item = null;\n if (this.previousValue !== this.value) {\n this.detachChangeEvent(null);\n }\n };\n ComboBox.prototype.updateValues = function () {\n if (!isNullOrUndefined(this.value)) {\n var li = this.getElementByValue(this.value);\n if (li) {\n this.setSelection(li, null);\n }\n else if (this.allowCustom) {\n this.valueMuteChange(this.value);\n }\n else {\n this.valueMuteChange(null);\n }\n }\n else if (this.text && isNullOrUndefined(this.value)) {\n var li = this.getElementByText(this.text);\n if (li) {\n this.setSelection(li, null);\n }\n else {\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n this.customValue();\n }\n }\n else {\n this.setSelection(this.liCollections[this.activeIndex], null);\n }\n this.setHiddenValue();\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n ComboBox.prototype.getAriaAttributes = function () {\n var ariaAttributes = {\n 'aria-owns': this.element.id + '_options',\n 'role': 'combobox',\n 'aria-autocomplete': 'both',\n 'aria-labelledby': this.hiddenElement.id,\n 'aria-hasPopup': 'true',\n 'aria-expanded': 'false',\n 'aria-readonly': this.readonly.toString(),\n 'autocomplete': 'off',\n 'autocorrect': 'off',\n 'autocapitalize': 'off',\n 'spellcheck': 'false'\n };\n return ariaAttributes;\n };\n ComboBox.prototype.searchLists = function (e) {\n this.isTyped = true;\n if (this.isFiltering()) {\n _super.prototype.searchLists.call(this, e);\n if (this.filterInput.value.trim() === '') {\n this.setHoverList(this.ulElement.querySelector('.' + dropDownListClasses.li));\n }\n }\n else {\n if (this.ulElement && this.inputElement.value === '' && this.preventAutoFill) {\n this.setHoverList(this.ulElement.querySelector('.' + dropDownListClasses.li));\n }\n this.incrementalSearch(e);\n }\n };\n ComboBox.prototype.getNgDirective = function () {\n return 'EJS-COMBOBOX';\n };\n ComboBox.prototype.setSearchBox = function () {\n this.filterInput = this.inputElement;\n return (this.isFiltering() ? this.inputWrapper : inputObject);\n };\n ComboBox.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\n _super.prototype.onActionComplete.call(this, ulElement, list, e);\n if (this.isSelectCustom) {\n this.removeSelection();\n }\n if (!this.preventAutoFill && this.getModuleName() === 'combobox' && this.isTyped) {\n this.inlineSearch();\n }\n };\n ComboBox.prototype.getFocusElement = function () {\n var dataItem = this.isSelectCustom ? { text: '' } : this.getItemData();\n var selected = this.list.querySelector('.' + dropDownListClasses.selected);\n var isSelected = dataItem.text === this.inputElement.value && !isNullOrUndefined(selected);\n if (isSelected) {\n return selected;\n }\n if ((Browser.isDevice && !this.isDropDownClick || !Browser.isDevice) &&\n !isNullOrUndefined(this.liCollections) && this.liCollections.length > 0) {\n var inputValue = this.inputElement.value;\n var activeItem = Search(inputValue, this.liCollections, 'StartsWith', true);\n var activeElement = activeItem.item;\n if (!isNullOrUndefined(activeElement)) {\n var count = this.getIndexByValue(activeElement.getAttribute('data-value')) - 1;\n var height = parseInt(getComputedStyle(this.liCollections[0], null).getPropertyValue('height'), 10);\n if (!isNaN(height) && this.getModuleName() !== 'autocomplete') {\n this.removeFocus();\n var fixedHead = this.fields.groupBy ? this.liCollections[0].offsetHeight : 0;\n this.list.scrollTop = count * height + fixedHead;\n addClass([activeElement], dropDownListClasses.focus);\n }\n }\n else {\n if (this.isSelectCustom && this.inputElement.value.trim() !== '') {\n this.removeFocus();\n this.list.scrollTop = 0;\n }\n }\n return activeElement;\n }\n else {\n return null;\n }\n };\n ComboBox.prototype.setValue = function (e) {\n if (e && e.type === 'keydown' && e.action === 'enter') {\n this.removeFillSelection();\n }\n if (this.autofill && this.getModuleName() === 'combobox' && e && e.type === 'keydown' && e.action !== 'enter') {\n this.preventAutoFill = false;\n this.inlineSearch(e);\n return false;\n }\n else {\n return _super.prototype.setValue.call(this, e);\n }\n };\n ComboBox.prototype.showSpinner = function () {\n if (isNullOrUndefined(this.spinnerElement)) {\n this.spinnerElement = this.inputWrapper.buttons[0] || this.inputWrapper.clearButton;\n addClass([this.spinnerElement], dropDownListClasses.disableIcon);\n createSpinner({\n target: this.spinnerElement,\n width: Browser.isDevice ? '16px' : '14px'\n });\n showSpinner(this.spinnerElement);\n }\n };\n ComboBox.prototype.hideSpinner = function () {\n if (!isNullOrUndefined(this.spinnerElement)) {\n hideSpinner(this.spinnerElement);\n this.spinnerElement.innerHTML = '';\n removeClass([this.spinnerElement], dropDownListClasses.disableIcon);\n this.spinnerElement = null;\n }\n };\n ComboBox.prototype.setAutoFill = function (activeElement, isHover) {\n if (!isHover) {\n this.setHoverList(activeElement);\n }\n if (this.autofill && !this.preventAutoFill) {\n var currentValue = this.getTextByValue(activeElement.getAttribute('data-value')).toString();\n var currentFillValue = this.getFormattedValue(activeElement.getAttribute('data-value'));\n if (this.getModuleName() === 'combobox') {\n if (!this.isSelected && this.previousValue !== currentFillValue) {\n this.updateSelectedItem(activeElement, null);\n this.isSelected = true;\n this.previousValue = this.getFormattedValue(activeElement.getAttribute('data-value'));\n }\n else {\n this.updateSelectedItem(activeElement, null, true);\n }\n }\n if (!this.isAndroidAutoFill(currentValue)) {\n this.setAutoFillSelection(currentValue);\n }\n }\n };\n ComboBox.prototype.isAndroidAutoFill = function (value) {\n if (Browser.isAndroid) {\n var currentPoints = this.getSelectionPoints();\n var prevEnd = this.prevSelectPoints.end;\n var curEnd = currentPoints.end;\n var prevStart = this.prevSelectPoints.start;\n var curStart = currentPoints.start;\n if (prevEnd !== 0 && ((prevEnd === value.length && prevStart === value.length) ||\n (prevStart > curStart && prevEnd > curEnd) || (prevEnd === curEnd && prevStart === curStart))) {\n return true;\n }\n else {\n return false;\n }\n }\n else {\n return false;\n }\n };\n ComboBox.prototype.isSelectFocusItem = function (element) {\n return !isNullOrUndefined(element);\n };\n ComboBox.prototype.inlineSearch = function (e) {\n var isKeyNavigate = (e && (e.action === 'down' || e.action === 'up' ||\n e.action === 'home' || e.action === 'end' || e.action === 'pageUp' || e.action === 'pageDown'));\n var activeElement = isKeyNavigate ? this.liCollections[this.activeIndex] : this.getFocusElement();\n if (!isNullOrUndefined(activeElement)) {\n if (!isKeyNavigate) {\n var value = this.getFormattedValue(activeElement.getAttribute('data-value'));\n this.activeIndex = this.getIndexByValue(value);\n this.activeIndex = !isNullOrUndefined(this.activeIndex) ? this.activeIndex : null;\n }\n this.preventAutoFill = this.inputElement.value === '' ? false : this.preventAutoFill;\n this.setAutoFill(activeElement, isKeyNavigate);\n }\n else if (this.inputElement.value === '') {\n this.activeIndex = null;\n this.list.scrollTop = 0;\n var focusItem = this.list.querySelector('.' + dropDownListClasses.li);\n this.setHoverList(focusItem);\n }\n else {\n this.activeIndex = null;\n this.removeSelection();\n this.removeFocus();\n }\n };\n ComboBox.prototype.incrementalSearch = function (e) {\n this.showPopup();\n if (!isNullOrUndefined(this.listData)) {\n this.inlineSearch(e);\n e.preventDefault();\n }\n };\n ;\n ComboBox.prototype.setAutoFillSelection = function (currentValue) {\n var selection = this.getSelectionPoints();\n var value = this.inputElement.value.substr(0, selection.start);\n if (value && (value.toLowerCase() === currentValue.substr(0, selection.start).toLowerCase())) {\n var inputValue = value + currentValue.substr(value.length, currentValue.length);\n Input.setValue(inputValue, this.inputElement, this.floatLabelType, this.showClearButton);\n this.inputElement.setSelectionRange(selection.start, this.inputElement.value.length);\n }\n else {\n Input.setValue(currentValue, this.inputElement, this.floatLabelType, this.showClearButton);\n this.inputElement.setSelectionRange(0, this.inputElement.value.length);\n }\n };\n ;\n ComboBox.prototype.getValueByText = function (text) {\n return _super.prototype.getValueByText.call(this, text, true, this.ignoreAccent);\n };\n ComboBox.prototype.unWireEvent = function () {\n if (this.getModuleName() === 'combobox') {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.preventBlur);\n EventHandler.remove(this.inputWrapper.container, 'blur', this.onBlur);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0])) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.dropDownClick);\n }\n EventHandler.remove(this.inputElement, 'focus', this.targetFocus);\n if (!this.readonly) {\n EventHandler.remove(this.inputElement, 'input', this.onInput);\n EventHandler.remove(this.inputElement, 'keyup', this.onFilterUp);\n EventHandler.remove(this.inputElement, 'keydown', this.onFilterDown);\n }\n this.unBindCommonEvent();\n };\n ComboBox.prototype.setSelection = function (li, e) {\n _super.prototype.setSelection.call(this, li, e);\n if (!isNullOrUndefined(li) && !this.autofill && !this.isDropDownClick) {\n this.removeFocus();\n }\n };\n ComboBox.prototype.selectCurrentItem = function (e) {\n var li;\n if (this.isPopupOpen) {\n li = this.list.querySelector('.' + dropDownListClasses.focus);\n if (li) {\n this.setSelection(li, e);\n this.isTyped = false;\n }\n if (this.isSelected) {\n this.isSelectCustom = false;\n this.onChangeEvent(e);\n }\n }\n if (e.action === 'enter' && this.inputElement.value.trim() === '') {\n this.clear(e);\n }\n else if (this.isTyped && !this.isSelected && isNullOrUndefined(li)) {\n this.customValue();\n }\n this.hidePopup();\n };\n ComboBox.prototype.setHoverList = function (li) {\n this.removeSelection();\n if (this.isValidLI(li) && !li.classList.contains(dropDownListClasses.selected)) {\n this.removeFocus();\n li.classList.add(dropDownListClasses.focus);\n }\n };\n ;\n ComboBox.prototype.targetFocus = function (e) {\n if (Browser.isDevice && !this.allowFiltering) {\n this.preventFocus = false;\n }\n this.onFocus();\n };\n ComboBox.prototype.dropDownClick = function (e) {\n e.preventDefault();\n if (Browser.isDevice && !this.allowFiltering) {\n this.preventFocus = true;\n }\n _super.prototype.dropDownClick.call(this, e);\n };\n ComboBox.prototype.customValue = function () {\n var value = this.getValueByText(this.inputElement.value);\n if (!this.allowCustom && this.inputElement.value !== '') {\n this.setProperties({ value: value });\n if (isNullOrUndefined(this.value)) {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n }\n }\n else if (this.inputElement.value.trim() !== '') {\n var previousValue = this.value;\n if (isNullOrUndefined(value)) {\n var value_1 = this.inputElement.value === '' ? null : this.inputElement.value;\n var fields = this.fields;\n var eventArgs = void 0;\n eventArgs = { text: value_1, item: {} };\n if (!this.initial) {\n this.trigger('customValueSpecifier', eventArgs);\n }\n var item = eventArgs.item;\n var dataItem = {};\n if (item && getValue(fields.text, item) && getValue(fields.value, item)) {\n dataItem = item;\n }\n else {\n setValue(fields.text, value_1, dataItem);\n setValue(fields.value, value_1, dataItem);\n }\n this.itemData = dataItem;\n var changeData = {\n text: getValue(fields.text, this.itemData),\n value: getValue(fields.value, this.itemData),\n index: null\n };\n this.setProperties(changeData, true);\n this.setSelection(null, null);\n this.isSelectCustom = true;\n }\n else {\n this.isSelectCustom = false;\n this.setProperties({ value: value });\n }\n if (previousValue !== this.value) {\n this.onChangeEvent(null);\n }\n }\n else if (this.allowCustom) {\n this.isSelectCustom = true;\n }\n };\n /**\n * Dynamically change the value of properties.\n * @private\n */\n ComboBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n this.setUpdateInitial(['query', 'dataSource'], newProp);\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n if (this.readonly) {\n EventHandler.remove(this.inputElement, 'keyup', this.onFilterUp);\n EventHandler.remove(this.inputElement, 'keydown', this.onFilterDown);\n }\n else {\n EventHandler.add(this.inputElement, 'keyup', this.onFilterUp, this);\n EventHandler.add(this.inputElement, 'keydown', this.onFilterDown, this);\n }\n break;\n case 'allowFiltering':\n this.setSearchBox();\n break;\n case 'allowCustom':\n break;\n default:\n var comboProps = void 0;\n comboProps = this.getPropObject(prop, newProp, oldProp);\n _super.prototype.onPropertyChanged.call(this, comboProps.newProperty, comboProps.oldProperty);\n break;\n }\n }\n };\n /**\n * To initialize the control rendering.\n * @private\n */\n ComboBox.prototype.render = function () {\n _super.prototype.render.call(this);\n this.setSearchBox();\n if (this.isFiltering() && this.getModuleName() === 'combobox' && isNullOrUndefined(this.list)) {\n _super.prototype.renderList.call(this);\n }\n };\n ;\n /**\n * Return the module name of this component.\n * @private\n */\n ComboBox.prototype.getModuleName = function () {\n return 'combobox';\n };\n /**\n * Hides the popup if it is in open state.\n * @returns void.\n */\n ComboBox.prototype.hidePopup = function () {\n var inputValue = this.inputElement.value === '' ? null : this.inputElement.value;\n if (!isNullOrUndefined(this.listData)) {\n var isEscape = this.isEscapeKey;\n if (this.isEscapeKey) {\n Input.setValue(this.typedString, this.inputElement, this.floatLabelType, this.showClearButton);\n this.isEscapeKey = false;\n }\n if (this.autofill) {\n this.removeFillSelection();\n }\n var dataItem = this.isSelectCustom ? { text: '' } : this.getItemData();\n var selected = this.list.querySelector('.' + dropDownListClasses.selected);\n if (dataItem.text === this.inputElement.value && !isNullOrUndefined(selected)) {\n if (this.isSelected) {\n this.onChangeEvent(null);\n this.isSelectCustom = false;\n }\n _super.prototype.hidePopup.call(this);\n return;\n }\n if (this.getModuleName() === 'combobox' && this.inputElement.value.trim() !== '') {\n var searchItem = Search(this.inputElement.value, this.liCollections, 'Equal', true);\n this.selectedLI = searchItem.item;\n if (isNullOrUndefined(searchItem.index)) {\n searchItem.index = Search(this.inputElement.value, this.liCollections, 'StartsWith', true).index;\n }\n this.activeIndex = searchItem.index;\n if (!isNullOrUndefined(this.selectedLI)) {\n this.updateSelectedItem(this.selectedLI, null, true);\n }\n else if (isEscape) {\n this.isSelectCustom = true;\n this.removeSelection();\n }\n }\n if (!this.isEscapeKey && this.isTyped && !this.isInteracted) {\n this.customValue();\n }\n }\n if (isNullOrUndefined(this.listData) && this.allowCustom && !isNullOrUndefined(inputValue) && inputValue !== this.value) {\n this.customValue();\n }\n _super.prototype.hidePopup.call(this);\n };\n /**\n * Sets the focus to the component for interaction.\n * @returns void.\n */\n ComboBox.prototype.focusIn = function () {\n if (Browser.isDevice && !this.allowFiltering) {\n this.preventFocus = true;\n }\n _super.prototype.focusIn.call(this);\n };\n __decorate([\n Property(false)\n ], ComboBox.prototype, \"autofill\", void 0);\n __decorate([\n Property(true)\n ], ComboBox.prototype, \"allowCustom\", void 0);\n __decorate([\n Property({})\n ], ComboBox.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(false)\n ], ComboBox.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"query\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"index\", void 0);\n __decorate([\n Property(true)\n ], ComboBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Event()\n ], ComboBox.prototype, \"customValueSpecifier\", void 0);\n __decorate([\n Event()\n ], ComboBox.prototype, \"filtering\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property('Never')\n ], ComboBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"filterBarPlaceholder\", void 0);\n ComboBox = __decorate([\n NotifyPropertyChanges\n ], ComboBox);\n return ComboBox;\n}(DropDownList));\nexport { ComboBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { Property, addClass, EventHandler, isNullOrUndefined, detach } from '@syncfusion/ej2-base';\nimport { Event, Complex } from '@syncfusion/ej2-base';\nimport { removeClass, attributes, NotifyPropertyChanges, Browser } from '@syncfusion/ej2-base';\nimport { dropDownListClasses } from '../drop-down-list/drop-down-list';\nimport { ComboBox } from '../combo-box/combo-box';\nimport { highlightSearch } from '../common/highlight-search';\nimport { Search } from '../common/incremental-search';\nimport { FieldSettings } from '../drop-down-base/drop-down-base';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\n/* tslint:disable */\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\n/* tslint:enable */\nvar SPINNER_CLASS = 'e-atc-spinner-icon';\ndropDownListClasses.root = 'e-autocomplete';\ndropDownListClasses.icon = 'e-input-group-icon e-ddl-icon e-search-icon';\n/**\n * The AutoComplete component provides the matched suggestion list when type into the input,\n * from which the user can select one.\n * ```html\n * \n * ```\n * ```typescript\n * let atcObj:AutoComplete = new AutoComplete();\n * atcObj.appendTo(\"#list\");\n * ```\n */\nvar AutoComplete = /** @class */ (function (_super) {\n __extends(AutoComplete, _super);\n /**\n * * Constructor for creating the widget\n */\n function AutoComplete(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isFiltered = false;\n return _this;\n }\n ;\n /**\n * Initialize the event handler\n * @private\n */\n AutoComplete.prototype.preRender = function () {\n _super.prototype.preRender.call(this);\n };\n AutoComplete.prototype.getNgDirective = function () {\n return 'EJS-AUTOCOMPLETE';\n };\n AutoComplete.prototype.getQuery = function (query) {\n var filterQuery = query ? query.clone() : this.query ? this.query.clone() : new Query();\n var filterType = (this.queryString === '' && !isNullOrUndefined(this.value)) ? 'equal' : this.filterType;\n var queryString = (this.queryString === '' && !isNullOrUndefined(this.value)) ? this.value : this.queryString;\n if (this.isFiltered) {\n return filterQuery;\n }\n if (this.queryString !== null) {\n var dataType = this.typeOfData(this.dataSource).typeof;\n if (!(this.dataSource instanceof DataManager) && dataType === 'string' || dataType === 'number') {\n filterQuery.where('', filterType, queryString, this.ignoreCase, this.ignoreAccent);\n }\n else {\n var mapping = !isNullOrUndefined(this.fields.value) ? this.fields.value : '';\n filterQuery.where(mapping, filterType, queryString, this.ignoreCase, this.ignoreAccent);\n }\n }\n if (!isNullOrUndefined(this.suggestionCount)) {\n filterQuery.take(this.suggestionCount);\n }\n return filterQuery;\n };\n AutoComplete.prototype.searchLists = function (e) {\n var _this = this;\n this.isTyped = true;\n this.isSelectCustom = false;\n if (isNullOrUndefined(this.list)) {\n _super.prototype.renderList.call(this, true);\n }\n var isDownUpKey = e.keyCode === 40 || e.keyCode === 38;\n this.queryString = this.filterInput.value;\n if (isDownUpKey) {\n this.queryString = this.queryString === '' ? null : this.queryString;\n this.beforePopupOpen = true;\n this.resetList(this.dataSource, this.fields);\n return;\n }\n this.isSelected = false;\n this.activeIndex = null;\n var eventArgs = {\n preventDefaultAction: false,\n text: this.filterInput.value,\n updateData: function (dataSource, query, fields) {\n if (eventArgs.cancel) {\n return;\n }\n _this.isFiltered = true;\n _this.filterAction(dataSource, query, fields);\n },\n cancel: false\n };\n this.trigger('filtering', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n if (!this.isFiltered && !eventArgs.preventDefaultAction) {\n this.filterAction(this.dataSource, null, this.fields);\n }\n };\n AutoComplete.prototype.filterAction = function (dataSource, query, fields) {\n this.beforePopupOpen = true;\n if (this.queryString !== '' && (this.queryString.length >= this.minLength || this.isFiltered)) {\n this.resetList(dataSource, fields, query);\n }\n else {\n this.hidePopup();\n }\n };\n AutoComplete.prototype.clear = function (e, property) {\n if (isNullOrUndefined(property) || property !== 'dataSource') {\n _super.prototype.clear.call(this, e);\n }\n if (this.beforePopupOpen) {\n this.hidePopup();\n }\n };\n AutoComplete.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\n this.fixedHeaderElement = null;\n _super.prototype.onActionComplete.call(this, ulElement, list, e);\n var item = this.list.querySelector('.' + dropDownListClasses.li);\n if (!isNullOrUndefined(item)) {\n removeClass([item], dropDownListClasses.focus);\n }\n this.postBackAction();\n };\n AutoComplete.prototype.postBackAction = function () {\n if (this.queryString !== null && this.queryString !== '' && this.highlight) {\n highlightSearch(this.list, this.queryString, this.ignoreCase, this.filterType);\n }\n if (this.autofill && !isNullOrUndefined(this.liCollections[0])) {\n var items = [this.liCollections[0]];\n var searchItem = Search(this.inputElement.value, items, 'StartsWith', this.ignoreCase);\n if (!isNullOrUndefined(searchItem.item)) {\n _super.prototype.setAutoFill.call(this, this.liCollections[0], true);\n }\n }\n };\n AutoComplete.prototype.setSelection = function (li, e) {\n if (!this.isValidLI(li)) {\n return;\n }\n if (!isNullOrUndefined(e) && e.type === 'keydown' && e.action !== 'enter' && this.isValidLI(li)) {\n var value = this.getFormattedValue(li.getAttribute('data-value'));\n this.activeIndex = this.getIndexByValue(value);\n this.setHoverList(li);\n this.selectedLI = li;\n this.setScrollPosition(e);\n if (this.autofill) {\n this.preventAutoFill = false;\n _super.prototype.setAutoFill.call(this, li);\n }\n attributes(this.inputElement, { 'aria-activedescendant': this.selectedLI ? this.selectedLI.id : null });\n }\n else {\n _super.prototype.setSelection.call(this, li, e);\n }\n };\n AutoComplete.prototype.showSpinner = function () {\n if (isNullOrUndefined(this.spinnerElement)) {\n this.spinnerElement = this.inputWrapper.buttons[0] || this.inputWrapper.clearButton ||\n Input.appendSpan('e-input-group-icon ' + SPINNER_CLASS, this.inputWrapper.container);\n addClass([this.spinnerElement], dropDownListClasses.disableIcon);\n createSpinner({\n target: this.spinnerElement,\n width: Browser.isDevice ? '16px' : '14px'\n });\n showSpinner(this.spinnerElement);\n }\n };\n AutoComplete.prototype.hideSpinner = function () {\n if (!isNullOrUndefined(this.spinnerElement)) {\n hideSpinner(this.spinnerElement);\n removeClass([this.spinnerElement], dropDownListClasses.disableIcon);\n if (this.spinnerElement.classList.contains(SPINNER_CLASS)) {\n detach(this.spinnerElement);\n }\n else {\n this.spinnerElement.innerHTML = '';\n }\n this.spinnerElement = null;\n }\n };\n AutoComplete.prototype.isFiltering = function () {\n return true;\n };\n AutoComplete.prototype.renderPopup = function () {\n this.list.scrollTop = 0;\n _super.prototype.renderPopup.call(this);\n if (this.highlight) {\n highlightSearch(this.list, this.queryString, this.ignoreCase, this.filterType);\n }\n };\n AutoComplete.prototype.isEditTextBox = function () {\n return true && this.inputElement.value.trim() !== '';\n };\n AutoComplete.prototype.isPopupButton = function () {\n return this.showPopupButton;\n };\n AutoComplete.prototype.isSelectFocusItem = function (element) {\n return false;\n };\n /**\n * Search the entered text and show it in the suggestion list if available.\n * @returns void.\n */\n AutoComplete.prototype.showPopup = function () {\n if (this.beforePopupOpen) {\n this.refreshPopup();\n return;\n }\n this.beforePopupOpen = true;\n this.preventAutoFill = true;\n if (isNullOrUndefined(this.list)) {\n this.renderList();\n }\n else {\n this.resetList(this.dataSource, this.fields);\n }\n };\n /**\n * Hides the popup if it is in open state.\n * @returns void.\n */\n AutoComplete.prototype.hidePopup = function () {\n _super.prototype.hidePopup.call(this);\n this.activeIndex = -1;\n };\n /**\n * Dynamically change the value of properties.\n * @private\n */\n AutoComplete.prototype.onPropertyChanged = function (newProp, oldProp) {\n this.setUpdateInitial(['query', 'dataSource'], newProp);\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'showPopupButton':\n if (this.showPopupButton) {\n var button = Input.appendSpan(dropDownListClasses.icon, this.inputWrapper.container);\n this.inputWrapper.buttons[0] = button;\n EventHandler.add(this.inputWrapper.buttons[0], 'click', this.dropDownClick, this);\n }\n else {\n detach(this.inputWrapper.buttons[0]);\n this.inputWrapper.buttons[0] = null;\n }\n break;\n default:\n var atcProps = void 0;\n atcProps = this.getPropObject(prop, newProp, oldProp);\n _super.prototype.onPropertyChanged.call(this, atcProps.newProperty, atcProps.oldProperty);\n break;\n }\n }\n };\n /**\n * Return the module name of this component.\n * @private\n */\n AutoComplete.prototype.getModuleName = function () {\n return 'autocomplete';\n };\n /**\n * To initialize the control rendering\n * @private\n */\n AutoComplete.prototype.render = function () {\n _super.prototype.render.call(this);\n };\n ;\n __decorate([\n Complex({ value: null, iconCss: null, groupBy: null }, FieldSettings)\n ], AutoComplete.prototype, \"fields\", void 0);\n __decorate([\n Property(true)\n ], AutoComplete.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(false)\n ], AutoComplete.prototype, \"showPopupButton\", void 0);\n __decorate([\n Property(false)\n ], AutoComplete.prototype, \"highlight\", void 0);\n __decorate([\n Property(20)\n ], AutoComplete.prototype, \"suggestionCount\", void 0);\n __decorate([\n Property({})\n ], AutoComplete.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"query\", void 0);\n __decorate([\n Property(1)\n ], AutoComplete.prototype, \"minLength\", void 0);\n __decorate([\n Property('Contains')\n ], AutoComplete.prototype, \"filterType\", void 0);\n __decorate([\n Event()\n ], AutoComplete.prototype, \"filtering\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"index\", void 0);\n __decorate([\n Property('Never')\n ], AutoComplete.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"filterBarPlaceholder\", void 0);\n __decorate([\n Property(false)\n ], AutoComplete.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(null)\n ], AutoComplete.prototype, \"text\", void 0);\n AutoComplete = __decorate([\n NotifyPropertyChanges\n ], AutoComplete);\n return AutoComplete;\n}(ComboBox));\nexport { AutoComplete };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { DropDownBase, dropDownBaseClasses } from '../drop-down-base/drop-down-base';\nimport { Popup, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { attributes, setValue } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, extend } from '@syncfusion/ej2-base';\nimport { EventHandler, Property, Event, compile, L10n } from '@syncfusion/ej2-base';\nimport { Animation, Browser, prepend } from '@syncfusion/ej2-base';\nimport { Search } from '../common/incremental-search';\nimport { createElement, append, addClass, removeClass, setStyleAttribute, closest, detach, remove } from '@syncfusion/ej2-base';\nimport { getUniqueID, formatUnit, isNullOrUndefined, isUndefined } from '@syncfusion/ej2-base';\n/* tslint:disable */\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { createFloatLabel, removeFloating, floatLabelFocus, floatLabelBlur } from './float-label';\n/* tslint:enable */\nvar FOCUS = 'e-input-focus';\nvar DISABLED = 'e-disabled';\nvar OVER_ALL_WRAPPER = 'e-multiselect e-input-group';\nvar ELEMENT_WRAPPER = 'e-multi-select-wrapper';\nvar ELEMENT_MOBILE_WRAPPER = 'e-mob-wrapper';\nvar HIDE_LIST = 'e-hide-listitem';\nvar DELIMITER_VIEW = 'e-delim-view';\nvar CHIP_WRAPPER = 'e-chips-collection';\nvar CHIP = 'e-chips';\nvar CHIP_CONTENT = 'e-chipcontent';\nvar CHIP_CLOSE = 'e-chips-close';\nvar CHIP_SELECTED = 'e-chip-selected';\nvar SEARCHBOX_WRAPPER = 'e-searcher';\nvar DELIMITER_VIEW_WRAPPER = 'e-delimiter';\nvar ZERO_SIZE = 'e-zero-size';\nvar REMAIN_WRAPPER = 'e-remain';\nvar CLOSEICON_CLASS = 'e-chips-close e-close-hooker';\nvar DELIMITER_WRAPPER = 'e-delim-values';\nvar POPUP_WRAPPER = 'e-ddl e-popup e-multi-select-list-wrapper';\nvar INPUT_ELEMENT = 'e-dropdownbase';\nvar RTL_CLASS = 'e-rtl';\nvar CLOSE_ICON_HIDE = 'e-close-icon-hide';\nvar MOBILE_CHIP = 'e-mob-chip';\nvar FOOTER = 'e-ddl-footer';\nvar HEADER = 'e-ddl-header';\nvar DISABLE_ICON = 'e-ddl-disable-icon';\nvar SPINNER_CLASS = 'e-ms-spinner-icon';\nvar HIDDEN_ELEMENT = 'e-multi-hidden';\nvar destroy = 'destroy';\nvar dropdownIcon = 'e-input-group-icon e-ddl-icon';\nvar iconAnimation = 'e-icon-anim';\n/**\n * The Multiselect allows the user to pick a more than one value from list of predefined values.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar MultiSelect = /** @class */ (function (_super) {\n __extends(MultiSelect, _super);\n /**\n * Constructor for creating the DropDownList widget.\n */\n function MultiSelect(option, element) {\n var _this = _super.call(this, option, element) || this;\n _this.mobFilter = true;\n _this.isFiltered = false;\n _this.focused = true;\n _this.isValidKey = false;\n _this.scrollFocusStatus = false;\n _this.keyDownStatus = false;\n return _this;\n }\n ;\n MultiSelect.prototype.enableRTL = function (state) {\n if (state) {\n this.overAllWrapper.classList.add(RTL_CLASS);\n }\n else {\n this.overAllWrapper.classList.remove(RTL_CLASS);\n }\n if (this.popupObj) {\n this.popupObj.enableRtl = state;\n this.popupObj.dataBind();\n }\n };\n MultiSelect.prototype.requiredModules = function () {\n var modules = [];\n if (this.mode === 'CheckBox') {\n this.allowCustomValue = false;\n this.hideSelectedItem = false;\n this.closePopupOnSelect = false;\n this.allowFiltering = true;\n modules.push({\n member: 'CheckBoxSelection',\n args: [this]\n });\n }\n return modules;\n };\n MultiSelect.prototype.updateHTMLAttribute = function () {\n if (Object.keys(this.htmlAttributes).length) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var htmlAttr = _a[_i];\n switch (htmlAttr) {\n case 'class':\n this.overAllWrapper.classList.add(this.htmlAttributes[htmlAttr]);\n this.popupWrapper.classList.add(this.htmlAttributes[htmlAttr]);\n break;\n case 'disabled':\n this.enable(false);\n break;\n case 'placeholder':\n this.inputElement.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n break;\n default:\n var defaultAttr = ['title', 'id'];\n var validateAttr = ['name', 'required'];\n if (validateAttr.indexOf(htmlAttr) > -1) {\n this.hiddenElement.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n else if (defaultAttr.indexOf(htmlAttr) > -1) {\n this.element.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n else {\n this.overAllWrapper.setAttribute(htmlAttr, this.htmlAttributes[htmlAttr]);\n }\n break;\n }\n }\n }\n };\n MultiSelect.prototype.updateReadonly = function (state) {\n if (state || this.mode === 'CheckBox') {\n this.inputElement.setAttribute('readonly', 'true');\n }\n else {\n this.inputElement.removeAttribute('readonly');\n }\n };\n MultiSelect.prototype.updateClearButton = function (state) {\n if (state) {\n if (this.overAllClear.parentNode) {\n this.overAllClear.style.display = '';\n }\n else {\n this.componentWrapper.appendChild(this.overAllClear);\n }\n this.componentWrapper.classList.remove(CLOSE_ICON_HIDE);\n }\n else {\n this.overAllClear.style.display = 'none';\n this.componentWrapper.classList.add(CLOSE_ICON_HIDE);\n }\n };\n MultiSelect.prototype.updateCssClass = function () {\n if (this.cssClass) {\n this.popupWrapper.classList.add(this.cssClass);\n this.overAllWrapper.classList.add(this.cssClass);\n }\n };\n MultiSelect.prototype.onPopupShown = function () {\n if (Browser.isDevice && (this.mode === 'CheckBox' && this.allowFiltering)) {\n var proxy_1 = this;\n window.onpopstate = function () {\n proxy_1.hidePopup();\n };\n history.pushState({}, '');\n }\n var eventArgs = { popup: this.popupObj, cancel: false };\n this.trigger('open', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n var animModel = { name: 'FadeIn', duration: 100 };\n this.focusAtFirstListItem();\n document.body.appendChild(this.popupObj.element);\n this.refreshPopup();\n if (this.mode === 'CheckBox') {\n addClass([this.overAllWrapper], [iconAnimation]);\n }\n this.popupObj.show(animModel);\n attributes(this.inputElement, { 'aria-expanded': 'true' });\n if (!this.isFirstClick) {\n var ulElement = this.list.querySelector('ul');\n if (ulElement) {\n this.mainList = ulElement.cloneNode ? ulElement.cloneNode(true) : ulElement;\n }\n this.isFirstClick = true;\n }\n this.refreshListItems(null);\n this.notify('reOrder', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', e: this });\n };\n MultiSelect.prototype.focusAtFirstListItem = function () {\n if (this.ulElement && this.ulElement.querySelector('li.'\n + dropDownBaseClasses.li)) {\n var element = void 0;\n if (this.mode === 'CheckBox') {\n element = this.list.querySelector('li.'\n + dropDownBaseClasses.li + ':not(.'\n + HIDE_LIST + ')');\n }\n else {\n element = this.ulElement.querySelector('li.'\n + dropDownBaseClasses.li + ':not(.'\n + HIDE_LIST + ')');\n }\n if (element !== null) {\n this.removeFocus();\n this.addListFocus(element);\n }\n }\n };\n MultiSelect.prototype.focusAtLastListItem = function (data) {\n var activeElement;\n if (data) {\n activeElement = Search(data, this.liCollections, 'StartsWith', this.ignoreCase);\n }\n else {\n if (this.value && this.value.length) {\n Search(this.value[this.value.length - 1], this.liCollections, 'StartsWith', this.ignoreCase);\n }\n else {\n activeElement = null;\n }\n }\n if (activeElement && activeElement.item !== null) {\n this.addListFocus(activeElement.item);\n this.scrollBottom(activeElement.item, activeElement.index);\n }\n };\n MultiSelect.prototype.getAriaAttributes = function () {\n var ariaAttributes = {\n 'aria-disabled': 'false',\n 'aria-owns': this.element.id + '_options',\n 'role': 'listbox',\n 'aria-multiselectable': 'true',\n 'aria-activedescendant': 'null',\n 'aria-haspopup': 'true',\n 'aria-expanded': 'false'\n };\n return ariaAttributes;\n };\n MultiSelect.prototype.updateListARIA = function () {\n attributes(this.ulElement, { 'id': this.element.id + '_options', 'role': 'listbox', 'aria-hidden': 'false' });\n attributes(this.inputElement, this.getAriaAttributes());\n var li;\n li = this.list.querySelectorAll('li.' + dropDownBaseClasses.li);\n var temp = li.length;\n if (li && li.length) {\n while (temp > 0) {\n if (li[temp - 1].getAttribute('aria-selected') !== 'true') {\n li[temp - 1].setAttribute('aria-selected', 'false');\n }\n temp--;\n }\n }\n };\n MultiSelect.prototype.removelastSelection = function (e) {\n var elements;\n elements = this.chipCollectionWrapper.querySelectorAll('span.' + CHIP);\n var value = elements[elements.length - 1].getAttribute('data-value');\n if (!isNullOrUndefined(this.value)) {\n this.tempValues = this.value.slice();\n }\n this.removeValue(value, e);\n this.removeChipSelection();\n this.updateDelimeter(this.delimiterChar);\n this.makeTextBoxEmpty();\n if (this.allowFiltering && this.mainList && this.listData) {\n var list = this.mainList.cloneNode ? this.mainList.cloneNode(true) : this.mainList;\n this.onActionComplete(list, this.mainData);\n this.refreshSelection();\n }\n this.focusAtLastListItem(value);\n };\n MultiSelect.prototype.onActionFailure = function (e) {\n _super.prototype.onActionFailure.call(this, e);\n this.renderPopup();\n this.onPopupShown();\n };\n MultiSelect.prototype.targetElement = function () {\n this.targetInputElement = this.inputElement;\n if (this.mode === 'CheckBox') {\n this.notify('targetElement', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n }\n return this.targetInputElement.value;\n };\n MultiSelect.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\n _super.prototype.onActionComplete.call(this, ulElement, list, e);\n if (this.mode === 'CheckBox' && this.showSelectAll) {\n this.notify('selectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n }\n if (!this.mainList && !this.mainData) {\n this.mainList = ulElement.cloneNode ? ulElement.cloneNode(true) : ulElement;\n this.mainData = list;\n this.mainListCollection = this.liCollections;\n }\n else if (!isNullOrUndefined(this.mainData) && this.mainData.length === 0) {\n this.mainData = list;\n }\n if ((this.remoteCustomValue || list.length <= 0) && this.allowCustomValue && this.inputFocus && this.allowFiltering) {\n this.checkForCustomValue(this.tempQuery, this.fields);\n return;\n }\n if (this.value && this.value.length) {\n this.refreshSelection();\n }\n this.updateListARIA();\n this.unwireListEvents();\n this.wireListEvents();\n if (!isNullOrUndefined(this.setInitialValue)) {\n this.setInitialValue();\n }\n if (!isNullOrUndefined(this.selectAllAction)) {\n this.selectAllAction();\n }\n if (this.setDynValue) {\n this.initialValueUpdate();\n this.initialUpdate();\n this.refreshPlaceHolder();\n this.updateValueState(null, this.value, null);\n }\n this.renderPopup();\n this.refreshPopup();\n if (this.beforePopupOpen) {\n this.beforePopupOpen = false;\n this.onPopupShown();\n }\n };\n MultiSelect.prototype.refreshSelection = function () {\n var value;\n var element;\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n if (!isNullOrUndefined(this.value)) {\n for (var index = 0; this.value[index]; index++) {\n value = this.value[index];\n element = this.ulElement.querySelector('li[data-value=\"' + value + '\"]');\n if (element) {\n addClass([element], className);\n if (this.hideSelectedItem && element.previousSibling\n && element.previousElementSibling.classList.contains(dropDownBaseClasses.group)\n && (!element.nextElementSibling ||\n element.nextElementSibling.classList.contains(dropDownBaseClasses.group))) {\n addClass([element.previousElementSibling], className);\n }\n if (this.hideSelectedItem && element.classList.contains(dropDownBaseClasses.focus)) {\n removeClass([element], dropDownBaseClasses.focus);\n var listEle = element.parentElement.querySelectorAll('.' +\n dropDownBaseClasses.li + ':not(.' + HIDE_LIST + ')');\n if (listEle.length > 0) {\n addClass([listEle[0]], dropDownBaseClasses.focus);\n }\n else {\n this.l10nUpdate();\n addClass([this.list], dropDownBaseClasses.noData);\n }\n }\n element.setAttribute('aria-selected', 'true');\n if (this.mode === 'CheckBox' && element.classList.contains('e-active')) {\n var ariaValue = element.firstElementChild.getAttribute('aria-checked');\n if (isNullOrUndefined(ariaValue) || ariaValue === 'false') {\n var args = {\n module: 'CheckBoxSelection',\n enable: this.mode === 'CheckBox',\n li: element,\n e: null\n };\n this.notify('updatelist', args);\n }\n }\n }\n }\n }\n this.checkSelectAll();\n this.checkMaxSelection();\n };\n MultiSelect.prototype.checkSelectAll = function () {\n var searchCount = this.list.querySelectorAll('li.' + dropDownBaseClasses.li).length;\n var searchActiveCount = this.list.querySelectorAll('li.' + dropDownBaseClasses.selected).length;\n if ((searchCount === searchActiveCount) && (this.mode === 'CheckBox' && this.showSelectAll)) {\n this.notify('checkSelectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'check' });\n }\n if ((searchCount !== searchActiveCount) && (this.mode === 'CheckBox' && this.showSelectAll)) {\n this.notify('checkSelectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'uncheck' });\n }\n };\n MultiSelect.prototype.openClick = function (e) {\n if (!this.openOnClick) {\n if (this.targetElement() !== '') {\n this.showPopup();\n }\n else {\n this.hidePopup();\n }\n }\n };\n MultiSelect.prototype.KeyUp = function (e) {\n var _this = this;\n this.isValidKey = e.keyCode === 8 || this.isValidKey;\n if (this.isValidKey) {\n this.isValidKey = false;\n this.expandTextbox();\n switch (e.keyCode) {\n default:\n if (!this.isPopupOpen() && this.openOnClick) {\n this.showPopup();\n }\n this.openClick(e);\n if (this.checkTextLength() && !this.allowFiltering && (e.keyCode !== 8)) {\n this.focusAtFirstListItem();\n }\n else {\n var text = this.targetElement();\n this.keyCode = e.keyCode;\n if (this.allowFiltering) {\n var eventArgs_1 = {\n preventDefaultAction: false,\n text: this.targetElement(),\n updateData: function (dataSource, query, fields) {\n if (eventArgs_1.cancel) {\n return;\n }\n _this.isFiltered = true;\n _this.dataUpdater(dataSource, query, fields);\n },\n event: e,\n cancel: false\n };\n this.trigger('filtering', eventArgs_1);\n if (eventArgs_1.cancel) {\n return;\n }\n if (!this.isFiltered && !eventArgs_1.preventDefaultAction) {\n this.filterAction = true;\n this.dataUpdater(this.dataSource, null, this.fields);\n }\n }\n else if (this.allowCustomValue) {\n var query = new Query();\n query = (text !== '') ? query.where(this.fields.text, 'startswith', text, true, this.ignoreAccent) : query;\n this.dataUpdater(this.mainData, query, this.fields);\n break;\n }\n else {\n var liCollections = void 0;\n liCollections = this.list.querySelectorAll('li.' + dropDownBaseClasses.li + ':not(.e-hide-listitem)');\n var activeElement = Search(this.targetElement(), liCollections, 'StartsWith', this.ignoreCase);\n if (activeElement && activeElement.item !== null) {\n this.addListFocus(activeElement.item);\n this.list.scrollTop =\n activeElement.item.getBoundingClientRect().height * activeElement.index;\n }\n else if (this.targetElement() !== '') {\n this.removeFocus();\n }\n else {\n this.focusAtFirstListItem();\n }\n }\n }\n }\n }\n };\n MultiSelect.prototype.getQuery = function (query) {\n var filterQuery = query ? query.clone() : this.query ? this.query.clone() : new Query();\n if (this.filterAction) {\n if (this.targetElement() !== null) {\n var dataType = this.typeOfData(this.dataSource).typeof;\n if (!(this.dataSource instanceof DataManager) && dataType === 'string' || dataType === 'number') {\n filterQuery.where('', 'startswith', this.targetElement(), true, this.ignoreAccent);\n }\n else {\n var fields = this.fields;\n filterQuery.where(!isNullOrUndefined(fields.text) ? fields.text : '', 'startswith', this.targetElement(), true, this.ignoreAccent);\n }\n }\n return filterQuery;\n }\n else {\n return query ? query : this.query ? this.query : new Query();\n }\n };\n MultiSelect.prototype.dataUpdater = function (dataSource, query, fields) {\n if (this.targetElement().trim() === '') {\n var list = this.mainList.cloneNode ? this.mainList.cloneNode(true) : this.mainList;\n this.remoteCustomValue = false;\n this.onActionComplete(list, this.mainData);\n if (this.value && this.value.length) {\n this.refreshSelection();\n }\n if (this.keyCode !== 8) {\n this.focusAtFirstListItem();\n }\n this.notify('reOrder', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', e: this });\n }\n else {\n this.resetList(dataSource, fields, query);\n if (this.allowCustomValue) {\n if (!(dataSource instanceof DataManager)) {\n this.checkForCustomValue(query, fields);\n }\n else {\n this.remoteCustomValue = true;\n this.tempQuery = query;\n }\n }\n }\n this.refreshPopup();\n };\n MultiSelect.prototype.checkForCustomValue = function (query, fields) {\n var dataChecks = !this.getValueByText(this.inputElement.value, this.ignoreCase);\n if (this.allowCustomValue && dataChecks) {\n var text = this.fields.text;\n var value = this.fields.value;\n var data = {};\n var customData = (!isNullOrUndefined(this.mainData) && this.mainData.length > 0) ?\n this.mainData[0] : this.mainData;\n if (typeof (customData) !== 'string') {\n var dataSource = Object.keys(customData);\n for (var i = 0; i < dataSource.length; i++) {\n data[dataSource[i]] = '';\n }\n data[value] = data[text] = this.inputElement.value;\n var tempData = JSON.parse(JSON.stringify(this.listData));\n tempData.splice(0, 0, data);\n this.resetList(tempData, fields ? fields : this.fields, query);\n }\n else {\n var tempData = [this.inputElement.value];\n this.resetList(tempData, fields ? fields : this.fields);\n }\n }\n if (this.value && this.value.length) {\n this.refreshSelection();\n }\n };\n MultiSelect.prototype.getNgDirective = function () {\n return 'EJS-MULTISELECT';\n };\n MultiSelect.prototype.wrapperClick = function (e) {\n this.setDynValue = false;\n if (this.readonly || !this.enabled) {\n return;\n }\n if (e.target === this.overAllClear) {\n e.preventDefault();\n return;\n }\n if (!this.inputFocus && this.mode !== 'CheckBox') {\n this.inputElement.focus();\n }\n if (this.mode === 'CheckBox') {\n this.focusIn();\n }\n if (e.target && e.target.classList.toString().indexOf(CHIP_CLOSE) !== -1) {\n if (this.isPopupOpen()) {\n this.refreshPopup();\n }\n return;\n }\n if (!this.isPopupOpen() && this.openOnClick) {\n this.showPopup();\n }\n else {\n this.hidePopup();\n if (this.mode === 'CheckBox') {\n this.inputElement.focus();\n }\n }\n e.preventDefault();\n };\n MultiSelect.prototype.enable = function (state) {\n if (state) {\n this.overAllWrapper.classList.remove(DISABLED);\n this.inputElement.removeAttribute('disabled');\n attributes(this.inputElement, { 'aria-disabled': 'false' });\n }\n else {\n this.overAllWrapper.classList.add(DISABLED);\n this.inputElement.setAttribute('disabled', 'true');\n attributes(this.inputElement, { 'aria-disabled': 'true' });\n }\n if (this.enabled !== state) {\n this.enabled = state;\n }\n this.hidePopup();\n };\n MultiSelect.prototype.onBlur = function (eve) {\n var target = !isNullOrUndefined(eve) && eve.relatedTarget;\n if (document.body.contains(this.popupObj.element) && this.popupObj.element.contains(target)) {\n if (this.mode !== 'CheckBox') {\n this.inputElement.focus();\n }\n return;\n }\n if (this.mode === 'CheckBox' && Browser.isIE && !isNullOrUndefined(eve)) {\n this.inputFocus = false;\n this.overAllWrapper.classList.remove(FOCUS);\n return;\n }\n if (this.scrollFocusStatus) {\n eve.preventDefault();\n this.inputElement.focus();\n this.scrollFocusStatus = false;\n return;\n }\n this.inputFocus = false;\n this.overAllWrapper.classList.remove(FOCUS);\n if (this.mode !== 'Box' && this.mode !== 'CheckBox') {\n this.refreshListItems(null);\n this.updateDelimView();\n }\n this.updateValueState(eve, this.value, this.tempValues);\n this.dispatchEvent(this.hiddenElement, 'change');\n this.overAllClear.style.display = 'none';\n if (this.isPopupOpen()) {\n this.hidePopup();\n }\n this.makeTextBoxEmpty();\n this.trigger('blur');\n this.focused = true;\n if (Browser.isDevice && this.mode !== 'Delimiter' && this.mode !== 'CheckBox') {\n this.removeChipFocus();\n }\n this.removeChipSelection();\n this.refreshInputHight();\n floatLabelBlur(this.overAllWrapper, this.componentWrapper, this.value, this.floatLabelType, this.placeholder);\n this.refreshPlaceHolder();\n };\n MultiSelect.prototype.refreshInputHight = function () {\n if (!this.value || !this.value.length) {\n this.searchWrapper.classList.remove(ZERO_SIZE);\n }\n else {\n this.searchWrapper.classList.add(ZERO_SIZE);\n }\n };\n MultiSelect.prototype.validateValues = function (newValue, oldValue) {\n return JSON.stringify(newValue.slice().sort()) !== JSON.stringify(oldValue.slice().sort());\n };\n MultiSelect.prototype.updateValueState = function (event, newVal, oldVal) {\n var newValue = newVal ? newVal : [];\n var oldValue = oldVal ? oldVal : [];\n if (this.validateValues(newValue, oldValue)) {\n var eventArgs = {\n e: event,\n oldValue: oldVal,\n value: newVal,\n isInteracted: event ? true : false\n };\n this.trigger('change', eventArgs);\n }\n };\n MultiSelect.prototype.getPagingCount = function () {\n var height = this.list.classList.contains(dropDownBaseClasses.noData) ? null :\n getComputedStyle(this.getItems()[0], null).getPropertyValue('height');\n return Math.round(this.list.getBoundingClientRect().height / parseInt(height, 10));\n };\n MultiSelect.prototype.pageUpSelection = function (steps) {\n var collection = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li + ':not(.e-reorder-hide)');\n var previousItem;\n if (this.mode === 'CheckBox') {\n previousItem = steps >= 0 ? collection[steps + 1] : collection[0];\n }\n else {\n previousItem = steps >= 0 ? this.liCollections[steps + 1] : this.liCollections[0];\n }\n this.addListFocus(previousItem);\n this.scrollBottom(previousItem, this.getIndexByValue(previousItem.getAttribute('data-value')));\n };\n ;\n MultiSelect.prototype.pageDownSelection = function (steps) {\n var list = this.getItems();\n var collection = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li + ':not(.e-reorder-hide)');\n var previousItem;\n if (this.mode === 'CheckBox') {\n previousItem = steps <= collection.length ? collection[steps - 1] : collection[collection.length - 1];\n }\n else {\n previousItem = steps <= list.length ? this.liCollections[steps - 1] : this.liCollections[list.length - 1];\n }\n this.addListFocus(previousItem);\n this.scrollBottom(previousItem, this.getIndexByValue(previousItem.getAttribute('data-value')));\n };\n MultiSelect.prototype.focusIn = function () {\n if (this.enabled && !this.readonly) {\n this.inputFocus = true;\n if (!this.value) {\n this.tempValues = this.value;\n }\n else {\n this.tempValues = this.value.slice();\n }\n if (this.value && this.value.length) {\n if (this.mode !== 'Delimiter' && this.mode !== 'CheckBox') {\n this.chipCollectionWrapper.style.display = '';\n }\n else {\n this.showDelimWrapper();\n }\n if (this.mode !== 'CheckBox') {\n this.viewWrapper.style.display = 'none';\n }\n }\n if (this.mode !== 'CheckBox') {\n this.searchWrapper.classList.remove(ZERO_SIZE);\n }\n if (this.focused) {\n this.trigger('focus');\n this.focused = false;\n }\n if (!this.overAllWrapper.classList.contains(FOCUS)) {\n this.overAllWrapper.classList.add(FOCUS);\n }\n floatLabelFocus(this.overAllWrapper, this.componentWrapper);\n if (this.isPopupOpen()) {\n this.refreshPopup();\n }\n return true;\n }\n else {\n return false;\n }\n };\n MultiSelect.prototype.showDelimWrapper = function () {\n if (this.mode === 'CheckBox') {\n this.viewWrapper.style.display = '';\n }\n else {\n this.delimiterWrapper.style.display = '';\n }\n this.componentWrapper.classList.add(DELIMITER_VIEW_WRAPPER);\n };\n MultiSelect.prototype.hideDelimWrapper = function () {\n this.delimiterWrapper.style.display = 'none';\n this.componentWrapper.classList.remove(DELIMITER_VIEW_WRAPPER);\n };\n MultiSelect.prototype.expandTextbox = function () {\n var size = 5;\n if (this.placeholder) {\n size = size > this.inputElement.placeholder.length ? size : this.inputElement.placeholder.length;\n }\n if (this.inputElement.value.length > size) {\n this.inputElement.size = this.inputElement.value.length;\n }\n else {\n this.inputElement.size = size;\n }\n };\n MultiSelect.prototype.isPopupOpen = function () {\n return ((this.popupWrapper !== null) && (this.popupWrapper.parentElement !== null));\n };\n MultiSelect.prototype.refreshPopup = function () {\n if (this.popupObj && this.mobFilter) {\n this.popupObj.setProperties({ width: this.calcPopupWidth() });\n this.popupObj.refreshPosition(this.overAllWrapper);\n if (!Browser.isIE) {\n this.popupObj.show();\n }\n }\n };\n MultiSelect.prototype.checkTextLength = function () {\n return this.targetElement().length < 1;\n };\n MultiSelect.prototype.popupKeyActions = function (keyCode) {\n switch (keyCode) {\n case 38:\n this.hidePopup();\n if (this.mode === 'CheckBox') {\n this.inputElement.focus();\n }\n break;\n case 40:\n if (!this.isPopupOpen()) {\n this.showPopup();\n }\n break;\n }\n };\n MultiSelect.prototype.updateAriaAttribute = function () {\n var focusedItem = this.list.querySelector('.' + dropDownBaseClasses.focus);\n if (!isNullOrUndefined(focusedItem)) {\n this.inputElement.setAttribute('aria-activedescendant', focusedItem.id);\n }\n };\n MultiSelect.prototype.onKeyDown = function (e) {\n this.keyDownStatus = true;\n if (e.keyCode > 111 && e.keyCode < 124) {\n return;\n }\n if (e.altKey) {\n this.popupKeyActions(e.keyCode);\n e.preventDefault();\n return;\n }\n else if (this.isPopupOpen()) {\n var focusedItem = this.list.querySelector('.' + dropDownBaseClasses.focus);\n var activeIndex = void 0;\n switch (e.keyCode) {\n case 36:\n case 35: break;\n case 33:\n e.preventDefault();\n if (focusedItem) {\n this.getIndexByValue(focusedItem.getAttribute('data-value'));\n this.pageUpSelection(activeIndex - this.getPagingCount());\n this.updateAriaAttribute();\n }\n return;\n case 34:\n e.preventDefault();\n if (focusedItem) {\n this.getIndexByValue(focusedItem.getAttribute('data-value'));\n this.pageDownSelection(activeIndex + this.getPagingCount());\n this.updateAriaAttribute();\n }\n return;\n case 38:\n e.preventDefault();\n this.moveByList(-1);\n this.updateAriaAttribute();\n break;\n case 40:\n e.preventDefault();\n this.moveByList(1);\n this.updateAriaAttribute();\n break;\n case 27:\n e.preventDefault();\n this.hidePopup();\n if (this.mode === 'CheckBox') {\n this.inputElement.focus();\n }\n return;\n case 13:\n e.preventDefault();\n if (this.mode !== 'CheckBox') {\n this.selectByKey(e);\n }\n return;\n case 32:\n if (this.mode === 'CheckBox') {\n e.preventDefault();\n this.selectByKey(e);\n }\n return;\n }\n }\n else {\n switch (e.keyCode) {\n case 13:\n case 9:\n case 16:\n case 17:\n case 20:\n return;\n case 40:\n if (this.openOnClick) {\n this.showPopup();\n }\n break;\n case 27:\n e.preventDefault();\n this.escapeAction();\n return;\n }\n }\n if (this.checkTextLength()) {\n if ((this.mode !== 'Delimiter' && this.mode !== 'CheckBox') && this.value && this.value.length) {\n switch (e.keyCode) {\n case 37://left arrow \n e.preventDefault();\n this.moveBy(-1);\n break;\n case 39://right arrow \n e.preventDefault();\n this.moveBy(1);\n break;\n case 8:\n this.removelastSelection(e);\n break;\n case 46://del\n this.removeSelectedChip(e);\n break;\n }\n }\n else if (e.keyCode === 8 && this.mode === 'Delimiter') {\n if (this.value && this.value.length) {\n e.preventDefault();\n var temp = this.value[this.value.length - 1];\n this.removeValue(temp, e);\n this.updateDelimeter(this.delimiterChar);\n this.focusAtLastListItem(temp);\n }\n }\n }\n this.expandTextbox();\n this.refreshPopup();\n };\n MultiSelect.prototype.selectByKey = function (e) {\n this.removeChipSelection();\n this.selectListByKey(e);\n if (this.hideSelectedItem) {\n this.focusAtFirstListItem();\n }\n };\n MultiSelect.prototype.escapeAction = function () {\n var temp = this.tempValues ? this.tempValues.slice() : [];\n if (this.value && this.validateValues(this.value, temp)) {\n this.value = temp;\n this.initialValueUpdate();\n if (this.mode !== 'Delimiter' && this.mode !== 'CheckBox') {\n this.chipCollectionWrapper.style.display = '';\n }\n else {\n this.showDelimWrapper();\n }\n this.refreshPlaceHolder();\n if (this.value.length) {\n this.showOverAllClear();\n }\n else {\n this.hideOverAllClear();\n }\n }\n this.makeTextBoxEmpty();\n };\n MultiSelect.prototype.scrollBottom = function (selectedLI, activeIndex) {\n var currentOffset = this.list.getBoundingClientRect().height;\n var nextBottom = selectedLI.offsetTop + selectedLI.getBoundingClientRect().height - this.list.scrollTop;\n var nextOffset = this.list.scrollTop + nextBottom - currentOffset;\n var boxRange = (selectedLI.offsetTop + selectedLI.getBoundingClientRect().height - this.list.scrollTop);\n boxRange = this.fields.groupBy && !isUndefined(this.fixedHeaderElement) ?\n boxRange - this.fixedHeaderElement.getBoundingClientRect().height : boxRange;\n if (activeIndex === 0) {\n this.list.scrollTop = 0;\n }\n else if (nextBottom > currentOffset) {\n this.list.scrollTop = nextOffset;\n }\n else if (!(boxRange > 0 && this.list.getBoundingClientRect().height > boxRange)) {\n this.list.scrollTop = nextOffset;\n }\n };\n MultiSelect.prototype.scrollTop = function (selectedLI, activeIndex) {\n var nextOffset = selectedLI.offsetTop - this.list.scrollTop;\n var nextBottom = selectedLI.offsetTop + selectedLI.getBoundingClientRect().height - this.list.scrollTop;\n nextOffset = this.fields.groupBy && !isUndefined(this.fixedHeaderElement) ?\n nextOffset - this.fixedHeaderElement.getBoundingClientRect().height : nextOffset;\n var boxRange = (selectedLI.offsetTop + selectedLI.getBoundingClientRect().height - this.list.scrollTop);\n if (activeIndex === 0) {\n this.list.scrollTop = 0;\n }\n else if (nextOffset < 0) {\n this.list.scrollTop = this.list.scrollTop + nextOffset;\n }\n else if (!(boxRange > 0 && this.list.getBoundingClientRect().height > boxRange)) {\n this.list.scrollTop = selectedLI.offsetTop - (this.fields.groupBy && !isUndefined(this.fixedHeaderElement) ?\n this.fixedHeaderElement.getBoundingClientRect().height : 0);\n }\n };\n MultiSelect.prototype.selectListByKey = function (e) {\n var li = this.list.querySelector('li.' + dropDownBaseClasses.focus);\n var limit = this.value && this.value.length ? this.value.length : 0;\n if (li !== null) {\n if (li.classList.contains('e-active')) {\n limit = limit - 1;\n }\n if (this.isValidLI(li) && limit < this.maximumSelectionLength) {\n this.updateListSelection(li, e);\n this.addListFocus(li);\n if (this.mode === 'CheckBox') {\n this.updateDelimView();\n this.refreshInputHight();\n this.updateDelimeter(this.delimiterChar);\n }\n else {\n this.updateDelimeter(this.delimiterChar);\n }\n this.makeTextBoxEmpty();\n if (this.mode !== 'CheckBox') {\n this.refreshListItems(li.textContent);\n }\n this.refreshPopup();\n if (this.value && this.value.length) {\n this.removeListSelection();\n this.refreshSelection();\n }\n }\n if (this.closePopupOnSelect) {\n this.hidePopup();\n }\n }\n this.refreshPlaceHolder();\n };\n MultiSelect.prototype.refreshListItems = function (data) {\n if ((this.allowFiltering || this.allowCustomValue) && this.mainList && this.listData) {\n var list = this.mainList.cloneNode ? this.mainList.cloneNode(true) : this.mainList;\n this.onActionComplete(list, this.mainData);\n this.focusAtLastListItem(data);\n if (this.value && this.value.length) {\n this.refreshSelection();\n }\n }\n };\n MultiSelect.prototype.removeSelectedChip = function (e) {\n var selectedElem = this.chipCollectionWrapper.querySelector('span.' + CHIP_SELECTED);\n var temp;\n if (selectedElem !== null) {\n if (!isNullOrUndefined(this.value)) {\n this.tempValues = this.value.slice();\n }\n temp = selectedElem.nextElementSibling;\n if (temp !== null) {\n this.removeChipSelection();\n this.addChipSelection(temp);\n }\n this.removeValue(selectedElem.getAttribute('data-value'), e);\n this.makeTextBoxEmpty();\n }\n if (this.closePopupOnSelect) {\n this.hidePopup();\n }\n };\n MultiSelect.prototype.moveByTop = function (state) {\n var elements = this.list.querySelectorAll('li.' + dropDownBaseClasses.li);\n var index;\n if (elements.length > 1) {\n this.removeFocus();\n index = state ? 0 : (elements.length - 1);\n this.addListFocus(elements[index]);\n this.scrollBottom(elements[index], index);\n }\n this.updateAriaAttribute();\n };\n MultiSelect.prototype.moveByList = function (position) {\n if (this.list) {\n var elements = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li\n + ':not(.' + HIDE_LIST + ')' + ':not(.e-reorder-hide)');\n var selectedElem = this.list.querySelector('li.' + dropDownBaseClasses.focus);\n var temp = -1;\n if (elements.length) {\n for (var index = 0; index < elements.length; index++) {\n if (elements[index] === selectedElem) {\n temp = index;\n break;\n }\n }\n if (position > 0) {\n if (temp < (elements.length - 1)) {\n this.removeFocus();\n this.addListFocus(elements[++temp]);\n this.scrollBottom(elements[temp], temp);\n }\n }\n else {\n if (temp > 0) {\n this.removeFocus();\n this.addListFocus(elements[--temp]);\n this.scrollTop(elements[temp], temp);\n }\n }\n }\n }\n };\n MultiSelect.prototype.moveBy = function (position) {\n var elements;\n var selectedElem;\n var temp;\n elements = this.chipCollectionWrapper.querySelectorAll('span.' + CHIP);\n selectedElem = this.chipCollectionWrapper.querySelector('span.' + CHIP_SELECTED);\n if (selectedElem === null) {\n if (position < 0) {\n this.addChipSelection(elements[elements.length - 1]);\n }\n }\n else {\n if (position < 0) {\n temp = selectedElem.previousElementSibling;\n if (temp !== null) {\n this.removeChipSelection();\n this.addChipSelection(temp);\n }\n }\n else {\n temp = selectedElem.nextElementSibling;\n this.removeChipSelection();\n if (temp !== null) {\n this.addChipSelection(temp);\n }\n }\n }\n };\n MultiSelect.prototype.chipClick = function (e) {\n if (this.enabled) {\n var elem = closest(e.target, '.' + CHIP);\n this.removeChipSelection();\n this.addChipSelection(elem);\n this.trigger('chipSelection', e);\n }\n };\n MultiSelect.prototype.removeChipSelection = function () {\n if (this.chipCollectionWrapper) {\n this.removeChipFocus();\n }\n };\n MultiSelect.prototype.addChipSelection = function (element) {\n addClass([element], CHIP_SELECTED);\n };\n MultiSelect.prototype.onChipRemove = function (e) {\n if (e.which === 3 || e.button === 2) {\n return;\n }\n if (this.enabled && !this.readonly) {\n var element = e.target.parentElement;\n var value = this.getFormattedValue(element.getAttribute('data-value'));\n if (this.isPopupOpen() && this.mode !== 'CheckBox') {\n this.hidePopup();\n }\n if (!this.inputFocus) {\n this.inputElement.focus();\n }\n this.removeValue(value, e);\n this.updateDelimeter(this.delimiterChar);\n this.makeTextBoxEmpty();\n e.preventDefault();\n }\n };\n MultiSelect.prototype.makeTextBoxEmpty = function () {\n this.inputElement.value = '';\n this.refreshPlaceHolder();\n };\n MultiSelect.prototype.refreshPlaceHolder = function () {\n if (this.placeholder && this.floatLabelType === 'Never') {\n if (this.value && this.value.length) {\n this.inputElement.placeholder = '';\n }\n else {\n this.inputElement.placeholder = this.placeholder;\n }\n }\n else {\n this.setFloatLabelType();\n }\n this.expandTextbox();\n };\n MultiSelect.prototype.removeValue = function (value, eve) {\n var index = this.value.indexOf(this.getFormattedValue(value));\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n if (index !== -1) {\n var element = this.list.querySelector('li[data-value=\"' + value + '\"]');\n var eventArgs = {\n e: eve,\n item: element,\n itemData: this.getDataByValue(value),\n isInteracted: eve ? true : false,\n cancel: false\n };\n this.trigger('removing', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.value.splice(index, 1);\n this.setProperties({ value: [].concat([], this.value) }, true);\n if (element !== null) {\n element.setAttribute('aria-selected', 'false');\n removeClass([element], className);\n this.notify('activeList', {\n module: 'CheckBoxSelection',\n enable: this.mode === 'CheckBox', li: element,\n e: this, index: index\n });\n this.notify('updatelist', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', li: element, e: eve });\n attributes(this.inputElement, { 'aria-activedescendant': element.id });\n if ((this.value.length !== this.mainData.length) && (this.mode === 'CheckBox' && this.showSelectAll)) {\n this.notify('checkSelectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'uncheck' });\n }\n }\n this.updateMainList(true, value);\n this.removeChip(value);\n this.updateChipStatus();\n var limit = this.value && this.value.length ? this.value.length : 0;\n if (limit < this.maximumSelectionLength) {\n var collection = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li + ':not(.e-active)');\n removeClass(collection, 'e-disable');\n }\n this.trigger('removed', eventArgs);\n }\n };\n MultiSelect.prototype.updateMainList = function (state, value) {\n if (this.allowFiltering) {\n var element2 = this.mainList.querySelector('li[data-value=\"' + value + '\"]');\n if (element2) {\n if (state) {\n element2.setAttribute('aria-selected', 'false');\n removeClass([element2], this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected);\n if (this.mode === 'CheckBox') {\n element2.firstElementChild.setAttribute('aria-checked', 'false');\n removeClass([element2.firstElementChild.lastElementChild], 'e-check');\n }\n }\n else {\n element2.setAttribute('aria-selected', 'true');\n addClass([element2], this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected);\n if (this.mode === 'CheckBox') {\n element2.firstElementChild.setAttribute('aria-checked', 'true');\n addClass([element2.firstElementChild.lastElementChild], 'e-check');\n }\n }\n }\n }\n };\n MultiSelect.prototype.removeChip = function (value) {\n if (this.chipCollectionWrapper) {\n var element = this.chipCollectionWrapper.querySelector('span[data-value=\"' + value + '\"]');\n if (element) {\n remove(element);\n }\n }\n };\n MultiSelect.prototype.updateChipStatus = function () {\n if (this.value.length) {\n if (!isNullOrUndefined(this.chipCollectionWrapper)) {\n (this.chipCollectionWrapper.style.display = '');\n }\n if (this.mode === 'Delimiter' || this.mode === 'CheckBox') {\n this.showDelimWrapper();\n }\n this.showOverAllClear();\n }\n else {\n if (!isNullOrUndefined(this.chipCollectionWrapper)) {\n this.chipCollectionWrapper.style.display = 'none';\n }\n if (!isNullOrUndefined(this.delimiterWrapper)) {\n (this.delimiterWrapper.style.display = 'none');\n }\n this.hideOverAllClear();\n }\n };\n MultiSelect.prototype.addValue = function (value, text, eve) {\n if (!this.value) {\n this.value = [];\n }\n this.setProperties({ value: [].concat([], this.value, [value]) }, true);\n var element = this.list.querySelector('li[data-value=\"' + value + '\"]');\n this.removeFocus();\n if (element) {\n this.addListFocus(element);\n this.addListSelection(element);\n }\n if (this.mode !== 'Delimiter' && this.mode !== 'CheckBox') {\n this.addChip(text, value, eve);\n }\n this.updateChipStatus();\n this.checkMaxSelection();\n };\n MultiSelect.prototype.checkMaxSelection = function () {\n var limit = this.value && this.value.length ? this.value.length : 0;\n if (limit === this.maximumSelectionLength) {\n var collection = this.list.querySelectorAll('li.'\n + dropDownBaseClasses.li + ':not(.e-active)');\n addClass(collection, 'e-disable');\n }\n };\n MultiSelect.prototype.dispatchSelect = function (value, eve, element, isNotTrigger) {\n if (this.initStatus && !isNotTrigger) {\n var eventArgs = {\n e: eve,\n item: element,\n itemData: this.getDataByValue(value),\n isInteracted: eve ? true : false,\n cancel: false\n };\n this.trigger('select', eventArgs);\n if (eventArgs.cancel) {\n return true;\n }\n }\n return false;\n };\n MultiSelect.prototype.addChip = function (text, value, e) {\n if (this.chipCollectionWrapper) {\n var item = this.getChip(text, value, e);\n if (item.cancel) {\n return;\n }\n this.chipCollectionWrapper.appendChild(item.element);\n }\n };\n MultiSelect.prototype.removeChipFocus = function () {\n var elements;\n var closeElements;\n elements = this.chipCollectionWrapper.querySelectorAll('span.' + CHIP);\n closeElements = this.chipCollectionWrapper.querySelectorAll('span.' + CHIP_CLOSE.split(' ')[0]);\n removeClass(elements, CHIP_SELECTED);\n if (Browser.isDevice) {\n for (var index = 0; index < closeElements.length; index++) {\n closeElements[index].style.display = 'none';\n }\n }\n };\n MultiSelect.prototype.onMobileChipInteraction = function (e) {\n var chipElem = closest(e.target, '.' + CHIP);\n var chipClose = chipElem.querySelector('span.' + CHIP_CLOSE.split(' ')[0]);\n if (this.enabled && !this.readonly) {\n if (!chipElem.classList.contains(CHIP_SELECTED)) {\n this.removeChipFocus();\n chipClose.style.display = '';\n chipElem.classList.add(CHIP_SELECTED);\n }\n this.refreshPopup();\n e.preventDefault();\n }\n };\n MultiSelect.prototype.getChip = function (data, value, e) {\n var itemData = { text: value, value: value };\n var chip = createElement('span', {\n className: CHIP,\n attrs: { 'data-value': value, 'title': data }\n });\n var chipContent = createElement('span', { className: CHIP_CONTENT });\n var chipClose = createElement('span', { className: CHIP_CLOSE });\n if (this.mainData) {\n itemData = this.getDataByValue(value);\n }\n if (this.valueTemplate && itemData) {\n var compiledString = compile(this.valueTemplate);\n for (var _i = 0, _a = compiledString(itemData); _i < _a.length; _i++) {\n var item = _a[_i];\n chipContent.appendChild(item);\n }\n }\n else {\n chipContent.innerHTML = data;\n }\n chip.appendChild(chipContent);\n var eventArgs = {\n isInteracted: e ? true : false,\n itemData: itemData,\n e: e,\n setClass: function (classes) {\n addClass([chip], classes);\n },\n cancel: false\n };\n this.trigger('tagging', eventArgs);\n if (eventArgs.cancel) {\n return { cancel: true, element: chip };\n }\n if (Browser.isDevice) {\n chip.classList.add(MOBILE_CHIP);\n append([chipClose], chip);\n chipClose.style.display = 'none';\n EventHandler.add(chip, 'click', this.onMobileChipInteraction, this);\n }\n else {\n EventHandler.add(chip, 'mousedown', this.chipClick, this);\n if (this.showClearButton) {\n chip.appendChild(chipClose);\n }\n }\n EventHandler.add(chipClose, 'mousedown', this.onChipRemove, this);\n return { cancel: false, element: chip };\n };\n MultiSelect.prototype.calcPopupWidth = function () {\n var width = formatUnit(this.popupWidth);\n if (width.indexOf('%') > -1) {\n var inputWidth = (this.componentWrapper.getBoundingClientRect().width) * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n return width;\n };\n MultiSelect.prototype.mouseIn = function () {\n if (this.enabled && !this.readonly) {\n this.showOverAllClear();\n }\n };\n MultiSelect.prototype.mouseOut = function () {\n if (!this.inputFocus) {\n this.overAllClear.style.display = 'none';\n }\n };\n MultiSelect.prototype.listOption = function (dataSource, fields) {\n var iconCss = isNullOrUndefined(fields.iconCss) ? false : true;\n var fieldProperty = fields.properties;\n this.listCurrentOptions = (fields.text !== null || fields.value !== null) ? {\n fields: fieldProperty, showIcon: iconCss, ariaAttributes: { groupItemRole: 'presentation' }\n } : { fields: { value: 'text' } };\n extend(this.listCurrentOptions, this.listCurrentOptions, fields, true);\n if (this.mode === 'CheckBox') {\n this.notify('listoption', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', dataSource: dataSource, fieldProperty: fieldProperty });\n }\n return this.listCurrentOptions;\n };\n MultiSelect.prototype.renderPopup = function () {\n var _this = this;\n if (!this.list) {\n _super.prototype.render.call(this);\n }\n if (!this.popupObj) {\n document.body.appendChild(this.popupWrapper);\n var overAllHeight = parseInt(this.popupHeight, 10);\n this.popupWrapper.style.visibility = 'hidden';\n if (this.headerTemplate) {\n var compiledString = void 0;\n this.header = document.createElement('div');\n addClass([this.header], HEADER);\n compiledString = compile(this.headerTemplate);\n var elements = compiledString({});\n for (var temp = 0; temp < elements.length; temp++) {\n this.header.appendChild(elements[temp]);\n }\n if (this.mode === 'CheckBox' && this.showSelectAll) {\n prepend([this.header], this.popupWrapper);\n }\n else {\n append([this.header], this.popupWrapper);\n }\n EventHandler.add(this.header, 'mousedown', this.onListMouseDown, this);\n overAllHeight -= this.header.getBoundingClientRect().height;\n }\n append([this.list], this.popupWrapper);\n if (this.footerTemplate) {\n var compiledString = void 0;\n this.footer = document.createElement('div');\n addClass([this.footer], FOOTER);\n compiledString = compile(this.footerTemplate);\n var elements = compiledString({});\n for (var temp = 0; temp < elements.length; temp++) {\n this.footer.appendChild(elements[temp]);\n }\n append([this.footer], this.popupWrapper);\n EventHandler.add(this.footer, 'mousedown', this.onListMouseDown, this);\n overAllHeight -= this.footer.getBoundingClientRect().height;\n }\n if (this.mode === 'CheckBox' && this.showSelectAll) {\n this.notify('selectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n overAllHeight -= this.selectAllHeight;\n }\n else if (this.mode === 'CheckBox' && !this.showSelectAll) {\n this.notify('selectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n overAllHeight = parseInt(this.popupHeight, 10);\n }\n if (this.mode === 'CheckBox') {\n var args = {\n module: 'CheckBoxSelection',\n enable: this.mode === 'CheckBox',\n popupElement: this.popupWrapper\n };\n this.notify('searchBox', args);\n overAllHeight -= this.searchBoxHeight;\n addClass([this.popupWrapper], 'e-checkbox');\n }\n if (this.popupHeight !== 'auto') {\n this.list.style.maxHeight = formatUnit(overAllHeight);\n this.popupWrapper.style.maxHeight = formatUnit(this.popupHeight);\n }\n else {\n this.list.style.maxHeight = formatUnit(this.popupHeight);\n }\n this.popupObj = new Popup(this.popupWrapper, {\n width: this.calcPopupWidth(), targetType: 'relative', position: { X: 'left', Y: 'bottom' },\n relateTo: this.overAllWrapper, collision: { X: 'flip', Y: 'flip' }, offsetY: 1,\n enableRtl: this.enableRtl,\n zIndex: this.zIndex,\n close: function () {\n if (_this.popupObj.element.parentElement) {\n detach(_this.popupObj.element);\n }\n },\n open: function () {\n _this.notify('inputFocus', { module: 'CheckBoxSelection', enable: _this.mode === 'CheckBox', value: 'focus' });\n }\n });\n this.popupObj.close();\n this.popupWrapper.style.visibility = '';\n if (this.mode === 'CheckBox' && Browser.isDevice) {\n this.notify('deviceSearchBox', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox' });\n }\n }\n };\n MultiSelect.prototype.ClearAll = function (e) {\n if (this.enabled && !this.readonly) {\n var temp = void 0;\n var tempValues = this.value ? this.value.slice() : [];\n for (temp = this.value[0]; this.value.length !== 0; temp = this.value[0]) {\n this.removeValue(temp, e);\n }\n this.updateDelimeter(this.delimiterChar);\n if (this.mode !== 'Box') {\n this.updateDelimView();\n }\n this.makeTextBoxEmpty();\n if (this.isPopupOpen()) {\n this.refreshPopup();\n }\n this.removeFocus();\n if (!this.inputFocus) {\n this.updateValueState(e, this.value, tempValues);\n if (this.mode !== 'CheckBox') {\n this.inputElement.focus();\n }\n }\n if (this.mode === 'CheckBox') {\n this.refreshPlaceHolder();\n this.refreshInputHight();\n }\n e.preventDefault();\n }\n };\n MultiSelect.prototype.windowResize = function () {\n this.refreshPopup();\n if (!this.inputFocus && this.viewWrapper && this.viewWrapper.parentElement) {\n this.updateDelimView();\n }\n };\n MultiSelect.prototype.wireEvent = function () {\n EventHandler.add(this.componentWrapper, 'mousedown', this.wrapperClick, this);\n EventHandler.add(window, 'resize', this.windowResize, this);\n EventHandler.add(this.inputElement, 'focus', this.focusIn, this);\n EventHandler.add(this.inputElement, 'keydown', this.onKeyDown, this);\n EventHandler.add(this.inputElement, 'keyup', this.KeyUp, this);\n EventHandler.add(this.inputElement, 'input', this.onInput, this);\n EventHandler.add(this.inputElement, 'blur', this.onBlur, this);\n EventHandler.add(this.componentWrapper, 'mousemove', this.mouseIn, this);\n EventHandler.add(this.componentWrapper, 'mouseout', this.mouseOut, this);\n EventHandler.add(this.overAllClear, 'mouseup', this.ClearAll, this);\n };\n MultiSelect.prototype.onInput = function () {\n if (this.keyDownStatus) {\n this.isValidKey = true;\n }\n else {\n this.isValidKey = false;\n }\n this.keyDownStatus = false;\n };\n MultiSelect.prototype.preRender = function () {\n this.initializeData();\n _super.prototype.preRender.call(this);\n };\n MultiSelect.prototype.initializeData = function () {\n this.mainListCollection = [];\n this.beforePopupOpen = false;\n this.filterAction = false;\n this.isFirstClick = false;\n };\n MultiSelect.prototype.updateData = function (delimiterChar) {\n var data = '';\n var delim = this.mode === 'Delimiter' || this.mode === 'CheckBox';\n var text = [];\n var temp;\n var tempData = this.listData;\n this.listData = this.mainData;\n this.hiddenElement.innerHTML = '';\n if (!isNullOrUndefined(this.value)) {\n for (var index = 0; this.value[index]; index++) {\n if (this.listData) {\n temp = this.getTextByValue(this.value[index]);\n }\n else {\n temp = this.value[index];\n }\n data += temp + delimiterChar + ' ';\n text.push(temp);\n this.hiddenElement.innerHTML += '';\n }\n }\n this.text = text.toString();\n if (delim) {\n this.delimiterWrapper.innerHTML = data;\n }\n this.listData = tempData;\n };\n MultiSelect.prototype.initialValueUpdate = function () {\n if (this.list) {\n var text = void 0;\n var textField = void 0;\n var valueField = void 0;\n var element = void 0;\n var value = void 0;\n if (this.chipCollectionWrapper) {\n this.chipCollectionWrapper.innerHTML = '';\n }\n this.removeListSelection();\n if (!isNullOrUndefined(this.value)) {\n for (var index = 0; this.value[index]; index++) {\n value = this.value[index];\n element = this.hideSelectedItem ? this.ulElement.querySelector('li[data-value=\"' + value + '\"]')\n : this.list.querySelector('li[data-value=\"' + value + '\"]');\n text = this.getTextByValue(value);\n if ((element && (element.getAttribute('aria-selected') !== 'true')) ||\n (element && (element.getAttribute('aria-selected') === 'true' && this.hideSelectedItem) &&\n (this.mode === 'Box' || this.mode === 'Default'))) {\n text = this.getTextByValue(value);\n this.addChip(text, value);\n this.addListSelection(element);\n }\n else if (value && this.allowCustomValue) {\n var indexItem = this.listData.length;\n var newValue = {};\n setValue(this.fields.text, value, newValue);\n setValue(this.fields.value, value, newValue);\n this.addItem(newValue, indexItem);\n text = this.getTextByValue(value);\n this.addChip(text, value);\n this.addListSelection(element);\n }\n }\n }\n if (this.mode === 'CheckBox') {\n this.updateDelimView();\n this.updateValueState(null, this.value, this.tempValues);\n this.refreshInputHight();\n this.updateDelimeter(this.delimiterChar);\n }\n else {\n this.updateDelimeter(this.delimiterChar);\n }\n if (this.mode === 'CheckBox' && this.showSelectAll && isNullOrUndefined(this.value)) {\n this.notify('checkSelectAll', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'uncheck' });\n }\n if (!this.inputFocus) {\n if (this.mode === 'Box') {\n this.chipCollectionWrapper.style.display = '';\n }\n else if (this.mode === 'Delimiter' || this.mode === 'CheckBox') {\n this.showDelimWrapper();\n }\n }\n }\n };\n MultiSelect.prototype.isValidLI = function (li) {\n return (li && !li.classList.contains(dropDownBaseClasses.disabled) && !li.classList.contains(dropDownBaseClasses.group) &&\n li.classList.contains(dropDownBaseClasses.li));\n };\n ;\n MultiSelect.prototype.updateListSelection = function (li, e) {\n var value = this.getFormattedValue(li.getAttribute('data-value'));\n var text = this.getTextByValue(value);\n this.removeHover();\n if (!this.value || this.value.indexOf(value) === -1) {\n var argsCancel = this.dispatchSelect(value, e, li, (li.getAttribute('aria-selected') === 'true'));\n if (argsCancel) {\n return;\n }\n if ((this.allowCustomValue || this.allowFiltering) && !this.mainList.querySelector('li[data-value=\"' + value + '\"]')) {\n var temp = li.cloneNode(true);\n var data = this.getDataByValue(value);\n append([temp], this.mainList);\n this.mainData.push(this.getDataByValue(value));\n var eventArgs = {\n newData: data,\n cancel: false\n };\n this.trigger('customValueSelection', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n }\n this.remoteCustomValue = false;\n this.addValue(value, text, e);\n }\n else {\n this.removeValue(value, e);\n }\n };\n MultiSelect.prototype.removeListSelection = function () {\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n var selectedItems = this.list.querySelectorAll('.' + className);\n var temp = selectedItems.length;\n if (selectedItems && selectedItems.length) {\n removeClass(selectedItems, className);\n while (temp > 0) {\n selectedItems[temp - 1].setAttribute('aria-selected', 'false');\n temp--;\n }\n }\n if (!isNullOrUndefined(this.mainList)) {\n var selectItems = this.mainList.querySelectorAll('.' + className);\n var temp1 = selectItems.length;\n if (selectItems && selectItems.length) {\n removeClass(selectItems, className);\n while (temp1 > 0) {\n selectItems[temp1 - 1].setAttribute('aria-selected', 'false');\n if (this.mode === 'CheckBox') {\n selectItems[temp1 - 1].firstElementChild.setAttribute('aria-checked', 'false');\n removeClass([selectItems[temp1 - 1].firstElementChild.lastElementChild], 'e-check');\n }\n temp1--;\n }\n }\n }\n };\n ;\n MultiSelect.prototype.removeHover = function () {\n var hoveredItem = this.list.querySelectorAll('.' + dropDownBaseClasses.hover);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, dropDownBaseClasses.hover);\n }\n };\n ;\n MultiSelect.prototype.removeFocus = function () {\n var hoveredItem = this.list.querySelectorAll('.' + dropDownBaseClasses.focus);\n var mainlist = this.mainList.querySelectorAll('.' + dropDownBaseClasses.focus);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, dropDownBaseClasses.focus);\n removeClass(mainlist, dropDownBaseClasses.focus);\n }\n };\n ;\n MultiSelect.prototype.addListHover = function (li) {\n if (this.enabled && this.isValidLI(li)) {\n this.removeHover();\n addClass([li], dropDownBaseClasses.hover);\n }\n };\n ;\n MultiSelect.prototype.addListFocus = function (element) {\n if (this.enabled && this.isValidLI(element)) {\n this.removeFocus();\n addClass([element], dropDownBaseClasses.focus);\n }\n };\n MultiSelect.prototype.addListSelection = function (element) {\n var className = this.hideSelectedItem ?\n HIDE_LIST :\n dropDownBaseClasses.selected;\n if (this.isValidLI(element) && !element.classList.contains(dropDownBaseClasses.hover)) {\n addClass([element], className);\n this.updateMainList(false, element.getAttribute('data-value'));\n element.setAttribute('aria-selected', 'true');\n if (this.mode === 'CheckBox') {\n var ariaCheck = element.firstElementChild.getAttribute('aria-checked');\n if (ariaCheck === 'false' || isNullOrUndefined(ariaCheck)) {\n this.notify('updatelist', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', li: element, e: this });\n }\n }\n this.notify('activeList', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', li: element, e: this });\n if (this.chipCollectionWrapper !== null) {\n this.removeChipSelection();\n }\n attributes(this.inputElement, { 'aria-activedescendant': element.id });\n }\n };\n MultiSelect.prototype.updateDelimeter = function (delimChar) {\n this.updateData(delimChar);\n };\n MultiSelect.prototype.onMouseClick = function (e) {\n this.scrollFocusStatus = false;\n var target = e.target;\n var li = closest(target, '.' + dropDownBaseClasses.li);\n if (this.isValidLI(li)) {\n var limit = this.value && this.value.length ? this.value.length : 0;\n if (li.classList.contains('e-active')) {\n limit = limit - 1;\n }\n if (limit < this.maximumSelectionLength) {\n this.updateListSelection(li, e);\n this.addListFocus(li);\n if ((this.allowCustomValue || this.allowFiltering) && this.mainList && this.listData) {\n if (this.mode !== 'CheckBox') {\n this.focusAtLastListItem(li.getAttribute('data-value'));\n }\n this.refreshSelection();\n }\n else {\n this.makeTextBoxEmpty();\n }\n }\n if (this.mode === 'CheckBox') {\n this.updateDelimView();\n this.refreshInputHight();\n this.updateDelimeter(this.delimiterChar);\n }\n else {\n this.updateDelimeter(this.delimiterChar);\n }\n this.checkSelectAll();\n this.refreshPopup();\n if (this.hideSelectedItem) {\n this.focusAtFirstListItem();\n }\n if (this.closePopupOnSelect) {\n this.hidePopup();\n }\n else {\n e.preventDefault();\n }\n this.makeTextBoxEmpty();\n }\n else {\n e.preventDefault();\n }\n this.refreshPlaceHolder();\n };\n MultiSelect.prototype.onMouseOver = function (e) {\n var currentLi = closest(e.target, '.' + dropDownBaseClasses.li);\n this.addListHover(currentLi);\n };\n MultiSelect.prototype.onMouseLeave = function (e) {\n this.removeHover();\n };\n MultiSelect.prototype.onListMouseDown = function (e) {\n e.preventDefault();\n this.scrollFocusStatus = true;\n };\n MultiSelect.prototype.wireListEvents = function () {\n EventHandler.add(this.list, 'mousedown', this.onListMouseDown, this);\n EventHandler.add(this.list, 'mouseup', this.onMouseClick, this);\n EventHandler.add(this.list, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.list, 'mouseout', this.onMouseLeave, this);\n };\n ;\n MultiSelect.prototype.unwireListEvents = function () {\n if (this.list) {\n EventHandler.remove(this.list, 'mousedown', this.onListMouseDown);\n EventHandler.remove(this.list, 'mouseup', this.onMouseClick);\n EventHandler.remove(this.list, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.list, 'mouseout', this.onMouseLeave);\n }\n };\n ;\n MultiSelect.prototype.hideOverAllClear = function () {\n if (!this.value || !this.value.length) {\n this.overAllClear.style.display = 'none';\n }\n };\n MultiSelect.prototype.showOverAllClear = function () {\n if (this.value && this.value.length) {\n this.overAllClear.style.display = '';\n }\n };\n MultiSelect.prototype.showSpinner = function () {\n if (isNullOrUndefined(this.spinnerElement)) {\n if (this.overAllClear.style.display !== 'none') {\n this.spinnerElement = this.overAllClear;\n }\n else {\n this.spinnerElement = createElement('span', { className: CLOSEICON_CLASS + ' ' + SPINNER_CLASS });\n this.componentWrapper.appendChild(this.spinnerElement);\n }\n addClass([this.spinnerElement], DISABLE_ICON);\n createSpinner({\n target: this.spinnerElement,\n width: Browser.isDevice ? '16px' : '14px'\n });\n showSpinner(this.spinnerElement);\n }\n };\n MultiSelect.prototype.hideSpinner = function () {\n if (!isNullOrUndefined(this.spinnerElement)) {\n hideSpinner(this.spinnerElement);\n removeClass([this.spinnerElement], DISABLE_ICON);\n if (this.spinnerElement.classList.contains(SPINNER_CLASS)) {\n detach(this.spinnerElement);\n }\n else {\n this.spinnerElement.innerHTML = '';\n }\n this.spinnerElement = null;\n }\n };\n MultiSelect.prototype.updateDelimView = function () {\n if (this.delimiterWrapper) {\n this.hideDelimWrapper();\n }\n if (this.chipCollectionWrapper) {\n this.chipCollectionWrapper.style.display = 'none';\n }\n this.viewWrapper.style.display = '';\n if (this.value && this.value.length) {\n var data = '';\n var temp = void 0;\n var tempData = void 0;\n var tempIndex = 1;\n var wrapperleng = void 0;\n var remaining = void 0;\n this.viewWrapper.innerHTML = '';\n var l10nLocale = {\n noRecordsTemplate: 'No Records Found',\n actionFailureTemplate: 'The Request Failed',\n overflowCountTemplate: '+${count} more..'\n };\n var l10n = new L10n('dropdowns', l10nLocale, this.locale);\n var remainContent = l10n.getConstant('overflowCountTemplate');\n var raminElement = createElement('span', {\n className: REMAIN_WRAPPER\n });\n var compiledString = compile(remainContent);\n raminElement.appendChild(compiledString({ 'count': this.value.length })[0]);\n this.viewWrapper.appendChild(raminElement);\n var remainSize = raminElement.getBoundingClientRect().width;\n remove(raminElement);\n this.viewWrapper.innerHTML = '';\n var inputleng = this.searchWrapper.getBoundingClientRect().width;\n var overAllContainer = parseInt(window.getComputedStyle(this.componentWrapper).width, 10) -\n parseInt(window.getComputedStyle(this.componentWrapper).paddingLeft, 10) -\n parseInt(window.getComputedStyle(this.componentWrapper).paddingRight, 10);\n var remainValue = void 0;\n if (!isNullOrUndefined(this.value)) {\n for (var index = 0; this.value[index]; index++) {\n data += (index === 0) ? '' : this.delimiterChar + ' ';\n if (this.mainData && this.mainData.length) {\n if (this.mode === 'CheckBox') {\n remainValue = 110;\n var newTemp = this.listData;\n this.listData = this.mainData;\n temp = this.getTextByValue(this.value[index]);\n this.listData = newTemp;\n }\n else {\n remainValue = 0;\n temp = this.getTextByValue(this.value[index]);\n }\n }\n else {\n temp = this.value[index];\n }\n data += temp;\n temp = this.viewWrapper.innerHTML;\n this.viewWrapper.innerHTML = data;\n wrapperleng = this.viewWrapper.getBoundingClientRect().width;\n if ((wrapperleng) > overAllContainer - remainValue) {\n if (tempData !== undefined) {\n temp = tempData;\n index = tempIndex + 1;\n }\n this.viewWrapper.innerHTML = temp;\n remaining = this.value.length - index;\n break;\n }\n else if ((wrapperleng + remainSize) <= overAllContainer) {\n tempData = data;\n tempIndex = index;\n }\n else if (index === 0) {\n tempData = '';\n tempIndex = -1;\n }\n }\n }\n if (remaining > 0) {\n raminElement.innerHTML = '';\n raminElement.appendChild(compiledString({ 'count': remaining })[0]);\n this.viewWrapper.appendChild(raminElement);\n }\n }\n else {\n this.viewWrapper.innerHTML = '';\n this.viewWrapper.style.display = 'none';\n }\n };\n MultiSelect.prototype.unWireEvent = function () {\n EventHandler.remove(this.componentWrapper, 'mousedown', this.wrapperClick);\n EventHandler.remove(window, 'resize', this.windowResize);\n EventHandler.remove(this.inputElement, 'focus', this.focusIn);\n EventHandler.remove(this.inputElement, 'keydown', this.onKeyDown);\n EventHandler.remove(this.inputElement, 'input', this.onInput);\n EventHandler.remove(this.inputElement, 'keyup', this.KeyUp);\n EventHandler.remove(this.inputElement, 'blur', this.onBlur);\n EventHandler.remove(this.componentWrapper, 'mousemove', this.mouseIn);\n EventHandler.remove(this.componentWrapper, 'mouseout', this.mouseOut);\n EventHandler.remove(this.overAllClear, 'mousedown', this.ClearAll);\n };\n MultiSelect.prototype.selectAllItem = function (state) {\n var li;\n li = this.list.querySelectorAll(state ?\n 'li[aria-selected=\"false\"]:not(.e-reorder-hide)' :\n 'li[aria-selected=\"true\"]:not(.e-reorder-hide)');\n var length = li.length;\n if (li && li.length) {\n while (length > 0) {\n this.updateListSelection(li[length - 1], null);\n length--;\n }\n }\n if (this.mode !== 'Box' && !this.isPopupOpen()) {\n this.updateDelimView();\n }\n else {\n this.searchWrapper.classList.remove(ZERO_SIZE);\n }\n if (this.mode === 'CheckBox') {\n this.updateDelimView();\n this.refreshInputHight();\n this.updateDelimeter(this.delimiterChar);\n }\n else {\n this.updateDelimeter(this.delimiterChar);\n }\n this.refreshPlaceHolder();\n };\n MultiSelect.prototype.setZIndex = function () {\n if (this.popupObj) {\n this.popupObj.setProperties({ 'zIndex': this.zIndex });\n }\n };\n MultiSelect.prototype.updateDataSource = function (prop) {\n this.resetList(this.dataSource);\n if (this.value && this.value.length) {\n this.refreshSelection();\n }\n };\n MultiSelect.prototype.onLoadSelect = function () {\n this.setDynValue = true;\n this.renderPopup();\n };\n /**\n * Get the properties to be maintained in the persisted state.\n */\n MultiSelect.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n ;\n /**\n * Dynamically change the value of properties.\n * @private\n */\n MultiSelect.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (newProp.dataSource && !isNullOrUndefined(Object.keys(newProp.dataSource))) {\n this.mainList = null;\n this.mainData = null;\n }\n this.setUpdateInitial(['query', 'dataSource'], newProp);\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'query':\n case 'dataSource':\n break;\n case 'htmlAttributes':\n this.updateHTMLAttribute();\n break;\n case 'showClearButton':\n this.updateClearButton(newProp.showClearButton);\n break;\n case 'value':\n if (!this.list) {\n if (this.dataSource instanceof DataManager) {\n this.onLoadSelect();\n }\n }\n else if (!this.inputFocus) {\n this.initialValueUpdate();\n if (this.mode !== 'Box') {\n this.updateDelimView();\n }\n this.refreshInputHight();\n this.refreshPlaceHolder();\n this.updateValueState(null, this.value, oldProp.value);\n }\n break;\n case 'width':\n setStyleAttribute(this.overAllWrapper, { 'width': formatUnit(newProp.width) });\n this.popupObj.setProperties({ width: this.calcPopupWidth() });\n break;\n case 'placeholder':\n this.refreshPlaceHolder();\n break;\n case 'delimiterChar':\n if (this.mode !== 'Box') {\n this.updateDelimView();\n }\n this.updateData(newProp.delimiterChar);\n break;\n case 'cssClass':\n this.popupWrapper.classList.remove(oldProp.cssClass);\n this.overAllWrapper.classList.remove(oldProp.cssClass);\n this.updateCssClass();\n break;\n case 'enableRtl':\n this.enableRTL(newProp.enableRtl);\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n break;\n case 'readonly':\n this.updateReadonly(newProp.readonly);\n this.hidePopup();\n break;\n case 'enabled':\n this.hidePopup();\n this.enable(newProp.enabled);\n break;\n case 'showSelectAll':\n this.popupObj.destroy();\n this.popupObj = null;\n this.renderPopup();\n break;\n case 'showDropDownIcon':\n this.dropDownIcon();\n break;\n case 'floatLabelType':\n this.setFloatLabelType();\n break;\n case 'enableSelectionOrder':\n break;\n default:\n var msProps = void 0;\n msProps = this.getPropObject(prop, newProp, oldProp);\n _super.prototype.onPropertyChanged.call(this, msProps.newProperty, msProps.oldProperty);\n break;\n }\n }\n };\n /**\n * Hides the popup, if the popup in a open state.\n * @returns void\n */\n MultiSelect.prototype.hidePopup = function () {\n var delay = 100;\n if (this.isPopupOpen()) {\n var eventArgs = { popup: this.popupObj, cancel: false };\n this.trigger('close', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n var animModel = {\n name: 'FadeOut',\n duration: 100,\n delay: delay ? delay : 0\n };\n this.beforePopupOpen = false;\n this.overAllWrapper.classList.remove(iconAnimation);\n this.popupObj.hide(new Animation(animModel));\n attributes(this.inputElement, { 'aria-expanded': 'false' });\n this.notify('inputFocus', { module: 'CheckBoxSelection', enable: this.mode === 'CheckBox', value: 'clear' });\n this.popupObj.hide();\n removeClass([document.body, this.popupObj.element], 'e-popup-full-page');\n }\n };\n /**\n * Shows the popup, if the popup in a closed state.\n * @returns void\n */\n MultiSelect.prototype.showPopup = function () {\n if (!this.ulElement) {\n this.beforePopupOpen = true;\n _super.prototype.render.call(this);\n return;\n }\n var mainLiLength = this.ulElement.querySelectorAll('li.' + 'e-list-item').length;\n var liLength = this.ulElement.querySelectorAll('li.' + HIDE_LIST).length;\n if (mainLiLength > 0 && (mainLiLength === liLength)) {\n this.beforePopupOpen = false;\n return;\n }\n this.onPopupShown();\n };\n /**\n * Based on the state parameter, entire list item will be selected/deselected.\n * parameter\n * `true` - Selects entire list items.\n * `false` - Un Selects entire list items.\n * @returns void\n */\n MultiSelect.prototype.selectAll = function (state) {\n var _this = this;\n if (isNullOrUndefined(this.list)) {\n this.selectAllAction = function () {\n if (_this.mode === 'CheckBox' && _this.showSelectAll) {\n var args = {\n module: 'CheckBoxSelection',\n enable: _this.mode === 'CheckBox',\n value: state ? 'check' : 'uncheck'\n };\n _this.notify('checkSelectAll', args);\n }\n _this.selectAllItem(state);\n _this.selectAllAction = null;\n };\n _super.prototype.render.call(this);\n }\n else {\n this.selectAllAction = null;\n if (this.mode === 'CheckBox' && this.showSelectAll) {\n var args = {\n module: 'CheckBoxSelection',\n enable: this.mode === 'CheckBox',\n value: state ? 'check' : 'uncheck'\n };\n this.notify('checkSelectAll', args);\n }\n this.selectAllItem(state);\n }\n };\n MultiSelect.prototype.getModuleName = function () {\n return 'multiselect';\n };\n ;\n /**\n * To Initialize the control rendering\n * @private\n */\n MultiSelect.prototype.render = function () {\n var _this = this;\n this.initStatus = false;\n this.setDynValue = false;\n this.searchWrapper = createElement('span', { className: SEARCHBOX_WRAPPER });\n this.viewWrapper = createElement('span', { className: DELIMITER_VIEW + ' ' + DELIMITER_WRAPPER, styles: 'display:none;' });\n var iconClass;\n this.overAllClear = createElement('span', {\n className: CLOSEICON_CLASS, styles: 'display:none;'\n });\n this.componentWrapper = createElement('div', { className: ELEMENT_WRAPPER });\n this.overAllWrapper = createElement('div', { className: OVER_ALL_WRAPPER });\n if (this.mode === 'CheckBox') {\n addClass([this.overAllWrapper], 'e-checkbox');\n }\n if (Browser.isDevice) {\n this.componentWrapper.classList.add(ELEMENT_MOBILE_WRAPPER);\n }\n this.overAllWrapper.style.width = formatUnit(this.width);\n this.overAllWrapper.appendChild(this.componentWrapper);\n this.popupWrapper = createElement('div', { id: this.element.id + '_popup', className: POPUP_WRAPPER });\n if (this.mode === 'Delimiter' || this.mode === 'CheckBox') {\n this.delimiterWrapper = createElement('span', { className: DELIMITER_WRAPPER, styles: 'display:none' });\n this.componentWrapper.appendChild(this.delimiterWrapper);\n }\n else {\n this.chipCollectionWrapper = createElement('span', {\n className: CHIP_WRAPPER,\n styles: 'display:none'\n });\n this.componentWrapper.appendChild(this.chipCollectionWrapper);\n }\n if (this.mode !== 'Box') {\n this.componentWrapper.appendChild(this.viewWrapper);\n }\n this.componentWrapper.appendChild(this.searchWrapper);\n if (this.showClearButton && !Browser.isDevice) {\n this.componentWrapper.appendChild(this.overAllClear);\n }\n else {\n this.componentWrapper.classList.add(CLOSE_ICON_HIDE);\n }\n this.dropDownIcon();\n this.inputElement = createElement('input', {\n className: INPUT_ELEMENT,\n attrs: {\n spellcheck: 'false',\n type: 'text',\n autocomplete: 'off',\n tabindex: '0'\n }\n });\n if (this.element.tagName !== this.getNgDirective()) {\n this.element.style.display = 'none';\n }\n if (this.element.tagName === this.getNgDirective()) {\n this.element.appendChild(this.overAllWrapper);\n this.searchWrapper.appendChild(this.inputElement);\n }\n else {\n this.element.parentElement.insertBefore(this.overAllWrapper, this.element);\n this.searchWrapper.appendChild(this.inputElement);\n this.searchWrapper.appendChild(this.element);\n this.element.removeAttribute('tabindex');\n }\n var name = this.element.getAttribute('name') ? this.element.getAttribute('name') : this.element.getAttribute('id');\n var id = this.element.getAttribute('id') ? this.element.getAttribute('id') : getUniqueID('ej2_dropdownlist');\n this.element.id = id;\n if (this.floatLabelType !== 'Never') {\n createFloatLabel(this.overAllWrapper, this.searchWrapper, this.element, this.inputElement, this.value, this.floatLabelType, this.placeholder);\n }\n else if (this.floatLabelType === 'Never') {\n this.refreshPlaceHolder();\n }\n this.element.style.opacity = '';\n this.hiddenElement = createElement('select', {\n attrs: { 'name': name, 'aria-hidden': 'true', 'class': HIDDEN_ELEMENT, 'tabindex': '-1', 'multiple': 'true' }\n });\n this.element.removeAttribute('name');\n this.componentWrapper.appendChild(this.hiddenElement);\n if (this.mode !== 'CheckBox') {\n this.hideOverAllClear();\n }\n this.wireEvent();\n this.enable(this.enabled);\n this.enableRTL(this.enableRtl);\n if (!(this.dataSource instanceof DataManager)) {\n this.renderPopup();\n }\n if (this.value && this.value.length) {\n if (!(this.dataSource instanceof DataManager)) {\n this.initialValueUpdate();\n this.initialUpdate();\n }\n else {\n this.setInitialValue = function () {\n _this.initialValueUpdate();\n _this.initialUpdate();\n _this.setInitialValue = null;\n };\n _super.prototype.render.call(this);\n }\n }\n else {\n this.initialUpdate();\n }\n this.initStatus = true;\n };\n ;\n MultiSelect.prototype.setFloatLabelType = function () {\n removeFloating(this.overAllWrapper, this.componentWrapper, this.searchWrapper, this.inputElement, this.value, this.floatLabelType, this.placeholder);\n if (this.floatLabelType !== 'Never') {\n createFloatLabel(this.overAllWrapper, this.searchWrapper, this.element, this.inputElement, this.value, this.floatLabelType, this.placeholder);\n }\n };\n MultiSelect.prototype.dropDownIcon = function () {\n if (this.mode === 'CheckBox' && this.showDropDownIcon) {\n this.dropIcon = createElement('span', { className: dropdownIcon });\n this.componentWrapper.appendChild(this.dropIcon);\n addClass([this.componentWrapper], ['e-down-icon']);\n }\n else {\n if (!isNullOrUndefined(this.dropIcon)) {\n this.dropIcon.parentElement.removeChild(this.dropIcon);\n removeClass([this.componentWrapper], ['e-down-icon']);\n }\n }\n };\n MultiSelect.prototype.initialUpdate = function () {\n if (this.mode !== 'Box') {\n this.updateDelimView();\n }\n this.updateCssClass();\n this.updateHTMLAttribute();\n this.updateReadonly(this.readonly);\n this.refreshInputHight();\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n * @method destroy\n * @return {void}\n */\n MultiSelect.prototype.destroy = function () {\n if (this.popupObj) {\n this.popupObj.hide();\n }\n this.notify(destroy, {});\n this.unwireListEvents();\n this.unWireEvent();\n this.list = null;\n this.popupObj = null;\n this.mainList = null;\n this.mainData = null;\n _super.prototype.destroy.call(this);\n var temp = ['readonly', 'aria-disabled', 'aria-placeholder', 'placeholder'];\n var length = temp.length;\n while (length > 0) {\n this.inputElement.removeAttribute(temp[length - 1]);\n length--;\n }\n this.element.style.display = 'block';\n if (this.overAllWrapper.parentElement) {\n if (this.overAllWrapper.parentElement.tagName === this.getNgDirective()) {\n remove(this.overAllWrapper);\n }\n else {\n this.overAllWrapper.parentElement.insertBefore(this.element, this.overAllWrapper);\n remove(this.overAllWrapper);\n }\n }\n };\n ;\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"cssClass\", void 0);\n __decorate([\n Property('100%')\n ], MultiSelect.prototype, \"width\", void 0);\n __decorate([\n Property('300px')\n ], MultiSelect.prototype, \"popupHeight\", void 0);\n __decorate([\n Property('100%')\n ], MultiSelect.prototype, \"popupWidth\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"placeholder\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"filterBarPlaceholder\", void 0);\n __decorate([\n Property({})\n ], MultiSelect.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"allowCustomValue\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(1000)\n ], MultiSelect.prototype, \"maximumSelectionLength\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], MultiSelect.prototype, \"value\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"hideSelectedItem\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"closePopupOnSelect\", void 0);\n __decorate([\n Property('Default')\n ], MultiSelect.prototype, \"mode\", void 0);\n __decorate([\n Property(',')\n ], MultiSelect.prototype, \"delimiterChar\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"showDropDownIcon\", void 0);\n __decorate([\n Property('Never')\n ], MultiSelect.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(false)\n ], MultiSelect.prototype, \"showSelectAll\", void 0);\n __decorate([\n Property('Select All')\n ], MultiSelect.prototype, \"selectAllText\", void 0);\n __decorate([\n Property('Unselect All')\n ], MultiSelect.prototype, \"unSelectAllText\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"enableSelectionOrder\", void 0);\n __decorate([\n Property(true)\n ], MultiSelect.prototype, \"openOnClick\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"removing\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"removed\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"chipSelection\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"filtering\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"tagging\", void 0);\n __decorate([\n Event()\n ], MultiSelect.prototype, \"customValueSelection\", void 0);\n MultiSelect = __decorate([\n NotifyPropertyChanges\n ], MultiSelect);\n return MultiSelect;\n}(DropDownBase));\nexport { MultiSelect };\n","import { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { EventHandler, select, removeClass, addClass, detach, compile, L10n } from '@syncfusion/ej2-base';\nimport { Browser, attributes, isNullOrUndefined, append, closest, createElement, prepend } from '@syncfusion/ej2-base';\nimport { dropDownBaseClasses } from '../drop-down-base/drop-down-base';\nvar ICON = 'e-icons';\nvar CHECKBOXFRAME = 'e-frame';\nvar CHECK = 'e-check';\nvar CHECKBOXWRAP = 'e-checkbox-wrapper';\nvar CHECKBOXRIPPLE = 'e-ripple-container';\nvar INDETERMINATE = 'e-stop';\nvar checkAllParent = 'e-selectall-parent';\nvar searchBackIcon = 'e-input-group-icon e-back-icon e-icons';\nvar filterBarClearIcon = 'e-input-group-icon e-clear-icon e-icons';\nvar filterInput = 'e-input-filter';\nvar filterParent = 'e-filter-parent';\nvar mobileFilter = 'e-ddl-device-filter';\nvar clearIcon = 'e-clear-icon';\nvar popupFullScreen = 'e-popup-full-page';\nvar device = 'e-ddl-device';\nvar FOCUS = 'e-input-focus';\n/**\n * The Multiselect enable CheckBoxSelection call this inject module.\n */\nvar CheckBoxSelection = /** @class */ (function () {\n function CheckBoxSelection(parent) {\n this.activeLi = [];\n this.activeEle = [];\n this.parent = parent;\n this.addEventListener();\n }\n CheckBoxSelection.prototype.getModuleName = function () {\n return 'CheckBoxSelection';\n };\n CheckBoxSelection.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on('updatelist', this.listSelection, this);\n this.parent.on('listoption', this.listOption, this);\n this.parent.on('selectAll', this.setSelectAll, this);\n this.parent.on('checkSelectAll', this.checkSelectAll, this);\n this.parent.on('searchBox', this.setSearchBox, this);\n this.parent.on('blur', this.onBlur, this);\n this.parent.on('targetElement', this.targetElement, this);\n this.parent.on('deviceSearchBox', this.setDeviceSearchBox, this);\n this.parent.on('inputFocus', this.getFocus, this);\n this.parent.on('reOrder', this.setReorder, this);\n this.parent.on('activeList', this.getActiveList, this);\n EventHandler.add(document, 'mousedown', this.onDocumentClick, this);\n };\n CheckBoxSelection.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('updatelist', this.listSelection);\n this.parent.off('listoption', this.listOption);\n this.parent.off('selectAll', this.setSelectAll);\n this.parent.off('checkSelectAll', this.checkSelectAll);\n this.parent.off('searchBox', this.setSearchBox);\n this.parent.off('blur', this.onBlur);\n this.parent.off('targetElement', this.targetElement);\n this.parent.off('deviceSearchBox', this.setDeviceSearchBox);\n this.parent.off('inputFocus', this.getFocus);\n this.parent.off('reOrder', this.setReorder);\n this.parent.off('activeList', this.getActiveList);\n EventHandler.remove(document, 'mousedown', this.onDocumentClick);\n };\n CheckBoxSelection.prototype.listOption = function (args) {\n var _this = this;\n if (isNullOrUndefined(this.parent.listCurrentOptions.itemCreated)) {\n this.parent.listCurrentOptions.itemCreated = function (e) {\n _this.checboxCreate(e);\n };\n }\n else {\n var itemCreated_1 = this.parent.listCurrentOptions.itemCreated;\n this.parent.listCurrentOptions.itemCreated = function (e) {\n _this.checboxCreate(e);\n itemCreated_1.apply(_this, [e]);\n };\n }\n };\n ;\n CheckBoxSelection.prototype.checboxCreate = function (e) {\n var item;\n if (!isNullOrUndefined(e.item)) {\n item = e.item;\n }\n else {\n item = e;\n }\n if (item.className !== 'e-list-group-item ' && item.className !== 'e-list-group-item') {\n var checkboxEle = createCheckBox(true);\n var icon = select('div.' + ICON, item);\n var id = item.getAttribute('data-uid');\n item.insertBefore(checkboxEle, item.childNodes[isNullOrUndefined(icon) ? 0 : 1]);\n select('.' + CHECKBOXFRAME, checkboxEle);\n var frame = select('.' + CHECKBOXFRAME, checkboxEle);\n return item;\n }\n else {\n return item;\n }\n };\n CheckBoxSelection.prototype.setSelectAll = function () {\n if (this.parent.showSelectAll) {\n if (isNullOrUndefined(this.checkAllParent)) {\n this.checkAllParent = createElement('div', {\n className: checkAllParent\n });\n this.selectAllSpan = createElement('span', {\n className: 'e-all-text'\n });\n this.selectAllSpan.textContent = '';\n this.checkAllParent.appendChild(this.selectAllSpan);\n this.setLocale();\n this.checboxCreate(this.checkAllParent);\n if (this.parent.headerTemplate) {\n if (!isNullOrUndefined(this.filterParent)) {\n append([this.checkAllParent], this.filterParent);\n }\n else {\n append([this.checkAllParent], this.parent.popupWrapper);\n }\n }\n if (!this.parent.headerTemplate) {\n if (!isNullOrUndefined(this.filterParent)) {\n append([this.checkAllParent], this.filterParent);\n }\n else {\n prepend([this.checkAllParent], this.parent.popupWrapper);\n }\n }\n EventHandler.add(this.checkAllParent, 'mousedown', this.clickHandler, this);\n }\n if (this.parent.list.classList.contains('e-nodata')) {\n this.checkAllParent.style.display = 'none';\n }\n else {\n this.checkAllParent.style.display = 'block';\n }\n this.parent.selectAllHeight = this.checkAllParent.getBoundingClientRect().height;\n }\n else if (!isNullOrUndefined(this.checkAllParent)) {\n this.checkAllParent.parentElement.removeChild(this.checkAllParent);\n this.checkAllParent = null;\n }\n };\n CheckBoxSelection.prototype.destroy = function () {\n this.removeEventListener();\n };\n CheckBoxSelection.prototype.listSelection = function (args) {\n var target;\n if (!isNullOrUndefined(args.e)) {\n target = !isNullOrUndefined(args.e.target) ?\n args.e.target.classList.contains('e-frame') ?\n args.e.target : args.li.querySelector('.e-checkbox-wrapper').childNodes[1]\n : args.li.querySelector('.e-checkbox-wrapper').childNodes[1];\n }\n else {\n target = args.li.lastElementChild.childNodes[1];\n }\n if (this.parent.itemTemplate) {\n target = args.li.firstElementChild.childNodes[1];\n }\n this.checkWrapper = closest(target, '.' + CHECKBOXWRAP);\n if (!isNullOrUndefined(this.checkWrapper)) {\n var checkElement = select('.' + CHECKBOXFRAME, this.checkWrapper);\n var selectAll = false;\n this.validateCheckNode(this.checkWrapper, checkElement.classList.contains(CHECK), args.li, args.e, selectAll);\n }\n };\n CheckBoxSelection.prototype.validateCheckNode = function (checkWrap, isCheck, li, e, selectAll) {\n this.changeState(checkWrap, isCheck ? 'uncheck' : 'check', e, true, selectAll);\n };\n CheckBoxSelection.prototype.clickHandler = function (e) {\n var target;\n if (e.currentTarget.classList.contains(this.checkAllParent.className)) {\n target = e.currentTarget.firstElementChild.lastElementChild;\n }\n else {\n target = e.currentTarget;\n }\n this.checkWrapper = closest(target, '.' + CHECKBOXWRAP);\n var selectAll = true;\n if (!isNullOrUndefined(this.checkWrapper)) {\n var checkElement = select('.' + CHECKBOXFRAME, this.checkWrapper);\n this.validateCheckNode(this.checkWrapper, checkElement.classList.contains(CHECK), null, e, selectAll);\n }\n e.preventDefault();\n };\n CheckBoxSelection.prototype.changeState = function (wrapper, state, e, isPrevent, selectAll) {\n var ariaState;\n var frameSpan = wrapper.getElementsByClassName(CHECKBOXFRAME)[0];\n if (state === 'check' && !frameSpan.classList.contains(CHECK)) {\n frameSpan.classList.remove(INDETERMINATE);\n frameSpan.classList.add(CHECK);\n ariaState = 'true';\n if (selectAll) {\n this.parent.selectAll(true);\n this.setLocale(true);\n }\n }\n else if (state === 'uncheck' && (frameSpan.classList.contains(CHECK) || frameSpan.classList.contains(INDETERMINATE))) {\n removeClass([frameSpan], [CHECK, INDETERMINATE]);\n ariaState = 'false';\n if (selectAll) {\n this.parent.selectAll(false);\n this.setLocale();\n }\n }\n ariaState = state === 'check' ? 'true' : state === 'uncheck' ? 'false' : ariaState;\n if (!isNullOrUndefined(ariaState)) {\n wrapper.setAttribute('aria-checked', ariaState);\n }\n };\n CheckBoxSelection.prototype.setSearchBox = function (args) {\n if (isNullOrUndefined(this.filterParent)) {\n this.filterParent = createElement('span', {\n className: filterParent\n });\n this.filterInput = createElement('input', {\n attrs: { type: 'text' },\n className: filterInput\n });\n this.parent.element.parentNode.insertBefore(this.filterInput, this.parent.element);\n var backIcon = false;\n if (Browser.isDevice) {\n backIcon = true;\n this.parent.mobFilter = false;\n }\n this.filterInputObj = Input.createInput({\n element: this.filterInput,\n buttons: backIcon ? [searchBackIcon, filterBarClearIcon] : [filterBarClearIcon],\n properties: { placeholder: this.parent.filterBarPlaceholder }\n });\n append([this.filterInputObj.container], this.filterParent);\n prepend([this.filterParent], args.popupElement);\n attributes(this.filterInput, {\n 'aria-disabled': 'false',\n 'aria-owns': this.parent.element.id + '_options',\n 'role': 'listbox',\n 'aria-activedescendant': null,\n 'autocomplete': 'off',\n 'autocorrect': 'off',\n 'autocapitalize': 'off',\n 'spellcheck': 'false'\n });\n this.clearIconElement = this.filterInput.parentElement.querySelector('.' + clearIcon);\n if (!Browser.isDevice && this.clearIconElement) {\n EventHandler.add(this.clearIconElement, 'mousedown', this.clearText, this);\n this.clearIconElement.style.visibility = 'hidden';\n }\n EventHandler.add(this.filterInput, 'input', this.parent.onInput, this.parent);\n EventHandler.add(this.filterInput, 'keyup', this.parent.KeyUp, this.parent);\n EventHandler.add(this.filterInput, 'keydown', this.parent.onKeyDown, this.parent);\n EventHandler.add(this.filterInput, 'blur', this.onBlur, this);\n this.parent.searchBoxHeight = (this.filterInputObj.container.parentElement).getBoundingClientRect().height;\n return this.filterInputObj;\n }\n };\n ;\n CheckBoxSelection.prototype.clickOnBackIcon = function (e) {\n this.parent.hidePopup();\n removeClass([document.body, this.parent.popupObj.element], popupFullScreen);\n };\n CheckBoxSelection.prototype.clearText = function (e) {\n this.parent.targetInputElement.value = '';\n this.parent.refreshPopup();\n this.parent.refreshListItems(null);\n this.clearIconElement.style.visibility = 'hidden';\n this.filterInput.focus();\n this.setReorder(e);\n e.preventDefault();\n };\n CheckBoxSelection.prototype.setDeviceSearchBox = function () {\n this.parent.popupObj.element.classList.add(device);\n this.parent.popupObj.element.classList.add(mobileFilter);\n this.parent.popupObj.position = { X: 0, Y: 0 };\n this.parent.popupObj.dataBind();\n attributes(this.parent.popupObj.element, { style: 'left:0px;right:0px;top:0px;bottom:0px;' });\n addClass([document.body, this.parent.popupObj.element], popupFullScreen);\n this.setSearchBoxPosition();\n this.backIconElement = this.filterInputObj.container.querySelector('.e-back-icon');\n this.clearIconElement = this.filterInputObj.container.querySelector('.' + clearIcon);\n this.clearIconElement.style.visibility = 'hidden';\n EventHandler.add(this.backIconElement, 'click', this.clickOnBackIcon, this);\n EventHandler.add(this.clearIconElement, 'click', this.clearText, this);\n };\n CheckBoxSelection.prototype.setSearchBoxPosition = function () {\n var searchBoxHeight = this.filterInput.parentElement.getBoundingClientRect().height;\n this.parent.popupObj.element.style.maxHeight = '100%';\n this.parent.popupObj.element.style.width = '100%';\n this.parent.list.style.maxHeight = (window.innerHeight - searchBoxHeight) + 'px';\n this.parent.list.style.height = (window.innerHeight - searchBoxHeight) + 'px';\n var clearElement = this.filterInput.parentElement.querySelector('.' + clearIcon);\n detach(this.filterInput);\n clearElement.parentElement.insertBefore(this.filterInput, clearElement);\n };\n CheckBoxSelection.prototype.targetElement = function () {\n this.parent.targetInputElement = this.filterInput;\n this.clearIconElement.style.visibility = this.parent.targetInputElement.value === '' ? 'hidden' : 'visible';\n return this.parent.targetInputElement.value;\n };\n CheckBoxSelection.prototype.onBlur = function (e) {\n var target;\n if (Browser.isIE) {\n target = !isNullOrUndefined(e) && e.target;\n }\n if (!Browser.isIE) {\n target = !isNullOrUndefined(e) && e.relatedTarget;\n }\n if (document.body.contains(this.parent.popupObj.element) && this.parent.popupObj.element.contains(target) && !Browser.isIE) {\n this.filterInput.focus();\n return;\n }\n if (this.parent.scrollFocusStatus) {\n e.preventDefault();\n this.filterInput.focus();\n this.parent.scrollFocusStatus = false;\n return;\n }\n if (document.body.contains(this.parent.popupObj.element) && !this.parent.popupObj.element.classList.contains('e-popup-close')) {\n this.parent.inputFocus = false;\n this.parent.updateValueState(e, this.parent.value, this.parent.tempValues);\n this.parent.dispatchEvent(this.parent.hiddenElement, 'change');\n }\n if (document.body.contains(this.parent.popupObj.element) &&\n !this.parent.popupObj.element.classList.contains('e-popup-close')) {\n this.parent.inputFocus = false;\n this.parent.overAllWrapper.classList.remove(FOCUS);\n this.parent.trigger('blur');\n this.parent.focused = true;\n }\n if (document.body.contains(this.parent.popupObj.element) &&\n !this.parent.popupObj.element.classList.contains('e-popup-close') && !Browser.isDevice) {\n this.parent.hidePopup();\n }\n };\n CheckBoxSelection.prototype.onDocumentClick = function (e) {\n var target = e.target;\n if (!(!isNullOrUndefined(this.parent.popupObj) && closest(target, '#' + this.parent.popupObj.element.id)) &&\n !this.parent.overAllWrapper.contains(e.target)) {\n if (this.parent.overAllWrapper.classList.contains(dropDownBaseClasses.focus) || this.parent.isPopupOpen()) {\n this.parent.inputFocus = false;\n this.parent.hidePopup();\n this.parent.onBlur();\n this.parent.focused = true;\n }\n }\n };\n CheckBoxSelection.prototype.getFocus = function (e) {\n this.parent.overAllWrapper.classList.remove(FOCUS);\n if (e.value === 'focus') {\n this.filterInput.focus();\n }\n if (e.value === 'clear') {\n this.filterInput.value = '';\n this.clearIconElement.style.visibility = 'hidden';\n }\n };\n CheckBoxSelection.prototype.checkSelectAll = function (e) {\n if (e.value === 'check' && this.checkAllParent.getAttribute('aria-checked') !== 'true') {\n this.changeState(this.checkAllParent, e.value, null, null, false);\n this.setLocale(true);\n }\n if (e.value === 'uncheck') {\n this.changeState(this.checkAllParent, e.value, null, null, false);\n this.setLocale();\n }\n };\n CheckBoxSelection.prototype.setLocale = function (unSelect) {\n if (this.parent.selectAllText !== 'Select All' || this.parent.unSelectAllText !== 'Unselect All') {\n var template = unSelect ? this.parent.unSelectAllText : this.parent.selectAllText;\n var compiledString = void 0;\n this.selectAllSpan.textContent = '';\n compiledString = compile(template);\n for (var _i = 0, _a = compiledString({}); _i < _a.length; _i++) {\n var item = _a[_i];\n this.selectAllSpan.textContent = item.textContent;\n }\n }\n else {\n var l10nLocale = { selectAllText: 'Select All', unSelectAllText: 'Unselect All' };\n var l10n = new L10n('dropdowns', l10nLocale, this.parent.locale);\n this.selectAllSpan.textContent = unSelect ? l10n.getConstant('unSelectAllText') : l10n.getConstant('selectAllText');\n }\n };\n CheckBoxSelection.prototype.getActiveList = function (args) {\n if (args.li.classList.contains('e-active')) {\n this.activeLi.push(args.li.cloneNode(true));\n }\n else {\n this.activeLi.splice(args.index, 1);\n }\n };\n CheckBoxSelection.prototype.setReorder = function (args) {\n if (this.parent.enableSelectionOrder && !isNullOrUndefined(this.parent.value)) {\n var activeLiCount = this.parent.ulElement.querySelectorAll('li.e-active').length;\n var remLi = void 0;\n var ulEle = createElement('ul', {\n className: 'e-list-parent e-ul e-reorder'\n });\n var removeEle = createElement('div');\n if (activeLiCount > 0) {\n append(this.parent.ulElement.querySelectorAll('li.e-active'), ulEle);\n remLi = this.parent.ulElement.querySelectorAll('li.e-active');\n addClass(remLi, 'e-reorder-hide');\n prepend([ulEle], this.parent.list);\n }\n this.parent.focusAtFirstListItem();\n }\n };\n return CheckBoxSelection;\n}());\nexport { CheckBoxSelection };\n","import * as index from '@syncfusion/ej2-dropdowns';\nindex.MultiSelect.Inject( index.CheckBoxSelection);\nexport * from '@syncfusion/ej2-dropdowns';\n","/**\n * Defines types of Cell\n * @hidden\n */\nexport var CellType;\n(function (CellType) {\n /** Defines CellType as Data */\n CellType[CellType[\"Data\"] = 0] = \"Data\";\n /** Defines CellType as Header */\n CellType[CellType[\"Header\"] = 1] = \"Header\";\n /** Defines CellType as Summary */\n CellType[CellType[\"Summary\"] = 2] = \"Summary\";\n /** Defines CellType as GroupSummary */\n CellType[CellType[\"GroupSummary\"] = 3] = \"GroupSummary\";\n /** Defines CellType as CaptionSummary */\n CellType[CellType[\"CaptionSummary\"] = 4] = \"CaptionSummary\";\n /** Defines CellType as Filter */\n CellType[CellType[\"Filter\"] = 5] = \"Filter\";\n /** Defines CellType as Indent */\n CellType[CellType[\"Indent\"] = 6] = \"Indent\";\n /** Defines CellType as GroupCaption */\n CellType[CellType[\"GroupCaption\"] = 7] = \"GroupCaption\";\n /** Defines CellType as GroupCaptionEmpty */\n CellType[CellType[\"GroupCaptionEmpty\"] = 8] = \"GroupCaptionEmpty\";\n /** Defines CellType as Expand */\n CellType[CellType[\"Expand\"] = 9] = \"Expand\";\n /** Defines CellType as HeaderIndent */\n CellType[CellType[\"HeaderIndent\"] = 10] = \"HeaderIndent\";\n /** Defines CellType as StackedHeader */\n CellType[CellType[\"StackedHeader\"] = 11] = \"StackedHeader\";\n /** Defines CellType as DetailHeader */\n CellType[CellType[\"DetailHeader\"] = 12] = \"DetailHeader\";\n /** Defines CellType as DetailExpand */\n CellType[CellType[\"DetailExpand\"] = 13] = \"DetailExpand\";\n /** Defines CellType as CommandColumn */\n CellType[CellType[\"CommandColumn\"] = 14] = \"CommandColumn\";\n})(CellType || (CellType = {}));\n/**\n * Defines types of Render\n * @hidden\n */\nexport var RenderType;\n(function (RenderType) {\n /** Defines RenderType as Header */\n RenderType[RenderType[\"Header\"] = 0] = \"Header\";\n /** Defines RenderType as Content */\n RenderType[RenderType[\"Content\"] = 1] = \"Content\";\n /** Defines RenderType as Summary */\n RenderType[RenderType[\"Summary\"] = 2] = \"Summary\";\n})(RenderType || (RenderType = {}));\n/**\n * Defines Predefined toolbar items.\n * @hidden\n */\nexport var ToolbarItem;\n(function (ToolbarItem) {\n ToolbarItem[ToolbarItem[\"Add\"] = 0] = \"Add\";\n ToolbarItem[ToolbarItem[\"Edit\"] = 1] = \"Edit\";\n ToolbarItem[ToolbarItem[\"Update\"] = 2] = \"Update\";\n ToolbarItem[ToolbarItem[\"Delete\"] = 3] = \"Delete\";\n ToolbarItem[ToolbarItem[\"Cancel\"] = 4] = \"Cancel\";\n ToolbarItem[ToolbarItem[\"Print\"] = 5] = \"Print\";\n ToolbarItem[ToolbarItem[\"Search\"] = 6] = \"Search\";\n ToolbarItem[ToolbarItem[\"ColumnChooser\"] = 7] = \"ColumnChooser\";\n ToolbarItem[ToolbarItem[\"PdfExport\"] = 8] = \"PdfExport\";\n ToolbarItem[ToolbarItem[\"ExcelExport\"] = 9] = \"ExcelExport\";\n ToolbarItem[ToolbarItem[\"CsvExport\"] = 10] = \"CsvExport\";\n ToolbarItem[ToolbarItem[\"WordExport\"] = 11] = \"WordExport\";\n})(ToolbarItem || (ToolbarItem = {}));\n","/**\n * CellStyle class\n */\nvar CellStyle = /** @class */ (function () {\n function CellStyle() {\n this.numFmtId = 0;\n this.backColor = 'none';\n this.fontName = 'Calibri';\n this.fontSize = 14;\n this.fontColor = '#000000';\n this.italic = false;\n this.bold = false;\n this.underline = false;\n this.wrapText = false;\n this.hAlign = 'general';\n this.vAlign = 'bottom';\n this.numberFormat = 'GENERAL';\n this.type = 'datetime';\n this.borders = new Borders();\n this.isGlobalStyle = false;\n }\n return CellStyle;\n}());\nexport { CellStyle };\nvar Font = /** @class */ (function () {\n function Font() {\n this.sz = 14;\n this.name = 'Calibri';\n this.u = false;\n this.b = false;\n this.i = false;\n this.color = 'FF000000';\n }\n return Font;\n}());\nexport { Font };\nvar CellXfs = /** @class */ (function () {\n function CellXfs() {\n }\n return CellXfs;\n}());\nexport { CellXfs };\nvar Alignment = /** @class */ (function () {\n function Alignment() {\n }\n return Alignment;\n}());\nexport { Alignment };\nvar CellStyleXfs = /** @class */ (function () {\n function CellStyleXfs() {\n }\n return CellStyleXfs;\n}());\nexport { CellStyleXfs };\nvar CellStyles = /** @class */ (function () {\n function CellStyles() {\n this.name = 'Normal';\n this.xfId = 0;\n }\n return CellStyles;\n}());\nexport { CellStyles };\nvar NumFmt = /** @class */ (function () {\n function NumFmt(id, code) {\n this.numFmtId = id;\n this.formatCode = code;\n }\n return NumFmt;\n}());\nexport { NumFmt };\n/**\n * Border class\n */\nvar Border = /** @class */ (function () {\n function Border(mLine, mColor) {\n this.lineStyle = mLine;\n this.color = mColor;\n }\n return Border;\n}());\nexport { Border };\n/**\n * Border class\n */\nvar Borders = /** @class */ (function () {\n function Borders() {\n this.left = new Border('none', '#FFFFFF');\n this.right = new Border('none', '#FFFFFF');\n this.top = new Border('none', '#FFFFFF');\n this.bottom = new Border('none', '#FFFFFF');\n this.all = new Border('none', '#FFFFFF');\n }\n return Borders;\n}());\nexport { Borders };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Worksheet class\n */\nvar Cell = /** @class */ (function () {\n function Cell() {\n }\n return Cell;\n}());\nexport { Cell };\n/**\n * Rows class\n */\nvar Cells = /** @class */ (function (_super) {\n __extends(Cells, _super);\n function Cells() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (cell) {\n var inserted = false;\n var count = 0;\n for (var _i = 0, _a = _this; _i < _a.length; _i++) {\n var c = _a[_i];\n if (c.index === cell.index) {\n _this[count] = cell;\n inserted = true;\n }\n count++;\n }\n if (!inserted) {\n _this.push(cell);\n }\n };\n return _this;\n }\n return Cells;\n}(Array));\nexport { Cells };\n","/**\n * Column class\n */\nvar Column = /** @class */ (function () {\n function Column() {\n }\n return Column;\n}());\nexport { Column };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Worksheet class\n */\nvar Row = /** @class */ (function () {\n function Row() {\n }\n return Row;\n}());\nexport { Row };\n/**\n * Rows class\n */\nvar Rows = /** @class */ (function (_super) {\n __extends(Rows, _super);\n function Rows() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (row) {\n var inserted = false;\n var count = 0;\n for (var _i = 0, _a = _this; _i < _a.length; _i++) {\n var r = _a[_i];\n if (r.index === row.index) {\n _this[count] = row;\n inserted = true;\n }\n count++;\n }\n if (!inserted) {\n _this.push(row);\n }\n };\n return _this;\n }\n return Rows;\n}(Array));\nexport { Rows };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Worksheets class\n */\nvar Worksheets = /** @class */ (function (_super) {\n __extends(Worksheets, _super);\n function Worksheets() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return Worksheets;\n}(Array));\nexport { Worksheets };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Worksheet class\n */\nvar Worksheet = /** @class */ (function () {\n function Worksheet() {\n this.isSummaryRowBelow = true;\n }\n return Worksheet;\n}());\nexport { Worksheet };\nvar HyperLink = /** @class */ (function () {\n function HyperLink() {\n }\n return HyperLink;\n}());\nexport { HyperLink };\nvar Grouping = /** @class */ (function () {\n function Grouping() {\n }\n return Grouping;\n}());\nexport { Grouping };\nvar FreezePane = /** @class */ (function () {\n function FreezePane() {\n }\n return FreezePane;\n}());\nexport { FreezePane };\nvar MergeCell = /** @class */ (function () {\n function MergeCell() {\n }\n return MergeCell;\n}());\nexport { MergeCell };\n/**\n * MergeCells class\n */\nvar MergeCells = /** @class */ (function (_super) {\n __extends(MergeCells, _super);\n function MergeCells() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (mergeCell) {\n var inserted = false;\n var count = 0;\n for (var _i = 0, _a = _this; _i < _a.length; _i++) {\n var mCell = _a[_i];\n if (MergeCells.isIntersecting(mCell, mergeCell)) {\n var intersectingCell = new MergeCell();\n intersectingCell.x = Math.min(mCell.x, mergeCell.x);\n intersectingCell.y = Math.min(mCell.Y, mergeCell.y);\n intersectingCell.width = Math.max(mCell.Width + mCell.X, mergeCell.width + mergeCell.x);\n intersectingCell.height = Math.max(mCell.Height + mCell.Y, mergeCell.height + mergeCell.y);\n intersectingCell.ref = (_this[count].ref.split(':')[0]) + ':' + (mergeCell.ref.split(':')[1]);\n _this[count] = intersectingCell;\n inserted = true;\n }\n count++;\n }\n if (!inserted) {\n _this.push(mergeCell);\n }\n };\n return _this;\n }\n MergeCells.isIntersecting = function (base, compare) {\n return (base.x <= compare.x + compare.width)\n && (compare.x <= base.x + base.width)\n && (base.y <= compare.y + compare.height)\n && (compare.y <= base.y + base.height);\n };\n return MergeCells;\n}(Array));\nexport { MergeCells };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Internationalization } from '@syncfusion/ej2-base';\n// import { IValueFormatter } from '../base/interface';\n/**\n * ValueFormatter class to globalize the value.\n * @hidden\n */\nvar ValueFormatter = /** @class */ (function () {\n function ValueFormatter(cultureName) {\n this.intl = new Internationalization();\n // if (!isNullOrUndefined(cultureName)) {\n // this.intl.culture = cultureName;\n // }\n }\n ValueFormatter.prototype.getFormatFunction = function (format) {\n if (format.type) {\n return this.intl.getDateFormat(format);\n }\n else {\n return this.intl.getNumberFormat(format);\n }\n };\n // public getParserFunction(format: NumberFormatOptions | DateFormatOptions): Function {\n // if ((format).type) {\n // return this.intl.getDateParser(format);\n // } else {\n // return this.intl.getNumberParser(format);\n // }\n // }\n // public fromView(value: string, format: Function, type?: string): string | number | Date {\n // if (type === 'date' || type === 'datetime' || type === 'number') {\n // return format(value);\n // } else {\n // return value;\n // }\n // }\n ValueFormatter.prototype.toView = function (value, format) {\n var result = value;\n if (!isNullOrUndefined(format) && !isNullOrUndefined(value)) {\n result = format(value);\n }\n return result;\n };\n // public setCulture(cultureName: string): void {\n // if (!isNullOrUndefined(cultureName)) {\n // setCulture(cultureName);\n // }\n // }\n /* tslint:disable:no-any */\n ValueFormatter.prototype.displayText = function (value, format) {\n return this.toView(value, this.getFormatFunction(format));\n };\n return ValueFormatter;\n}());\nexport { ValueFormatter };\n","import { ValueFormatter } from './value-formatter';\n/**\n * CsvHelper class\n */\nvar CsvHelper = /** @class */ (function () {\n /* tslint:disable:no-any */\n function CsvHelper(json) {\n this.csvStr = '';\n this.formatter = new ValueFormatter();\n this.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n if (json.styles !== null && json.styles !== undefined) {\n this.globalStyles = new Map();\n for (var i = 0; i < json.styles.length; i++) {\n if (json.styles[i].name !== undefined && json.styles[i].numberFormat !== undefined) {\n this.globalStyles.set(json.styles[i].name, json.styles[i].numberFormat);\n }\n }\n }\n // Parses Worksheets data to DOM. \n if (json.worksheets !== null && json.worksheets !== undefined) {\n this.parseWorksheet(json.worksheets[0]);\n }\n //this.csvStr = 'a1,a2,a3\\nb1,b2,b3';\n }\n CsvHelper.prototype.parseWorksheet = function (json) {\n //Rows\n if (json.rows !== null && json.rows !== undefined) {\n this.parseRows(json.rows);\n }\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseRows = function (rows) {\n var count = 1;\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n //Row index\n if (row.index !== null && row.index !== undefined) {\n while (count < row.index) {\n this.csvStr += '\\n';\n count++;\n }\n this.parseRow(row);\n }\n else {\n throw Error('Row index is missing.');\n }\n }\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseRow = function (row) {\n if (row.cells !== null && row.cells !== undefined) {\n var count = 1;\n for (var _i = 0, _a = row.cells; _i < _a.length; _i++) {\n var cell = _a[_i];\n //cell index\n if (cell.index !== null && cell.index !== undefined) {\n while (count < cell.index) {\n this.csvStr += ',';\n count++;\n }\n this.parseCell(cell);\n }\n else {\n throw Error('Cell index is missing.');\n }\n }\n }\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseCell = function (cell) {\n var csv = this.csvStr;\n if (cell.value !== undefined) {\n if (cell.value instanceof Date) {\n if (cell.style !== undefined && cell.style.numberFormat !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', skeleton: cell.style.numberFormat }));\n }\n else if (cell.style !== undefined && cell.style.name !== undefined && this.globalStyles.has(cell.style.name)) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', skeleton: this.globalStyles.get(cell.style.name) }));\n }\n else {\n csv += cell.value;\n }\n }\n else if (typeof (cell.value) === 'boolean') {\n csv += cell.value ? 'TRUE' : 'FALSE';\n }\n else if (typeof (cell.value) === 'number') {\n if (cell.style !== undefined && cell.style.numberFormat !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { format: cell.style.numberFormat }));\n }\n else if (cell.style !== undefined && cell.style.name !== undefined && this.globalStyles.has(cell.style.name)) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { format: this.globalStyles.get(cell.style.name) }));\n }\n else {\n csv += cell.value;\n }\n }\n else {\n csv += this.parseCellValue(cell.value);\n }\n }\n this.csvStr = csv;\n };\n CsvHelper.prototype.parseCellValue = function (value) {\n if (value.indexOf(',') !== -1) {\n return value = '\\\"' + value + '\\\"';\n }\n else {\n return value;\n }\n };\n /**\n * Saves the file with specified name and sends the file to client browser\n * @param {string} fileName- file name to save.\n * @param {Blob} buffer- the content to write in file\n */\n CsvHelper.prototype.save = function (fileName) {\n this.buffer = new Blob([this.csvStr], { type: 'text/plain' });\n if (this.isMicrosoftBrowser) {\n navigator.msSaveBlob(this.buffer, fileName);\n }\n else {\n var dataUrl_1 = window.URL.createObjectURL(this.buffer);\n var dwlLink = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');\n dwlLink.download = fileName;\n dwlLink.href = dataUrl_1;\n var event_1 = document.createEvent('MouseEvent');\n event_1.initEvent('click', true, true);\n dwlLink.dispatchEvent(event_1);\n setTimeout(function () {\n window.URL.revokeObjectURL(dataUrl_1);\n });\n }\n };\n CsvHelper.prototype.saveAsBlob = function () {\n return new Blob([this.csvStr], { type: 'text/csv' });\n };\n return CsvHelper;\n}());\nexport { CsvHelper };\n","/**\n * BlobHelper class\n */\nvar BlobHelper = /** @class */ (function () {\n function BlobHelper() {\n /* tslint:disable:no-any */\n this.parts = [];\n }\n /* tslint:disable:no-any */\n BlobHelper.prototype.append = function (part) {\n this.parts.push(part);\n this.blob = undefined; // Invalidate the blob\n };\n BlobHelper.prototype.getBlob = function () {\n return new Blob(this.parts, { type: 'text/plain' });\n };\n return BlobHelper;\n}());\nexport { BlobHelper };\n","import { Worksheets } from './worksheets';\nimport { Worksheet, FreezePane, MergeCell, MergeCells, HyperLink, Grouping } from './worksheet';\nimport { CellStyle, Font, Borders, CellXfs, Alignment, NumFmt, CellStyleXfs, CellStyles } from './cell-style';\nimport { Column } from './column';\nimport { Row, Rows } from './row';\nimport { Cell, Cells } from './cell';\nimport { ZipArchive, ZipArchiveItem } from '@syncfusion/ej2-compression';\nimport { CsvHelper } from './csv-helper';\nimport { Internationalization } from '@syncfusion/ej2-base';\nimport { BlobHelper } from './blob-helper';\n/**\n * Workbook class\n */\nvar Workbook = /** @class */ (function () {\n /* tslint:disable:no-any */\n function Workbook(json, saveType, culture) {\n this.sharedStringCount = 0;\n this.unitsProportions = [\n 96 / 75.0,\n 96 / 300.0,\n 96,\n 96 / 25.4,\n 96 / 2.54,\n 1,\n 96 / 72.0,\n 96 / 72.0 / 12700,\n ];\n /* tslint:disable:no-any */\n this.hyperlinkStyle = { fontColor: '#0000FF', underline: true };\n if (culture !== undefined) {\n this.culture = culture;\n }\n else {\n this.culture = 'en-US';\n }\n this.intl = new Internationalization(this.culture);\n this.mSaveType = saveType;\n if (saveType === 'xlsx') {\n this.mArchive = new ZipArchive();\n this.sharedString = [];\n this.mFonts = [];\n this.mBorders = [];\n this.mStyles = [];\n this.printTitles = new Map();\n this.cellStyles = new Map();\n this.mNumFmt = new Map();\n this.mFills = new Map();\n this.mStyles.push(new CellStyle());\n this.mFonts.push(new Font());\n /* tslint:disable */\n this.cellStyles.set('Normal', new CellStyles());\n /* tslint:enable */\n this.mCellXfs = [];\n this.mCellStyleXfs = [];\n if (json.styles !== null && json.styles !== undefined) {\n /* tslint:disable-next-line:no-any */\n this.globalStyles = new Map();\n for (var i = 0; i < json.styles.length; i++) {\n if (json.styles[i].name !== undefined) {\n if (!this.cellStyles.has(json.styles[i].name)) {\n var cellStyle = new CellStyle();\n cellStyle.isGlobalStyle = true;\n this.parserCellStyle(json.styles[i], cellStyle, 'none');\n var cellStyles = new CellStyles();\n cellStyles.name = cellStyle.name;\n cellStyles.xfId = cellStyle.index;\n this.cellStyles.set(cellStyles.name, cellStyles);\n /* tslint:disable-next-line:no-any */\n var tFormat = {};\n if (json.styles[i].numberFormat !== undefined) {\n tFormat.format = json.styles[i].numberFormat;\n }\n if (json.styles[i].type !== undefined) {\n tFormat.type = json.styles[i].type;\n }\n else {\n tFormat.type = 'datetime';\n }\n if (tFormat.format !== undefined) {\n this.globalStyles.set(json.styles[i].name, tFormat);\n }\n }\n else {\n throw Error('Style name ' + json.styles[i].name + ' is already existed');\n }\n }\n }\n }\n // Parses Worksheets data to DOM. \n if (json.worksheets !== null && json.worksheets !== undefined) {\n this.parserWorksheets(json.worksheets);\n }\n else {\n throw Error('Worksheet is expected.');\n }\n // Parses the BuiltInProperties data to DOM. \n if (json.builtInProperties !== null && json.builtInProperties !== undefined) {\n this.builtInProperties = new BuiltInProperties();\n this.parserBuiltInProperties(json.builtInProperties, this.builtInProperties);\n }\n }\n else {\n this.csvHelper = new CsvHelper(json);\n }\n }\n /* tslint:disable:no-any */\n Workbook.prototype.parserBuiltInProperties = function (jsonBuiltInProperties, builtInProperties) {\n //Author\n if (jsonBuiltInProperties.author !== null && jsonBuiltInProperties.author !== undefined) {\n builtInProperties.author = jsonBuiltInProperties.author;\n }\n //Comments\n if (jsonBuiltInProperties.comments !== null && jsonBuiltInProperties.comments !== undefined) {\n builtInProperties.comments = jsonBuiltInProperties.comments;\n }\n //Category\n if (jsonBuiltInProperties.category !== null && jsonBuiltInProperties.category !== undefined) {\n builtInProperties.category = jsonBuiltInProperties.category;\n }\n //Company\n if (jsonBuiltInProperties.company !== null && jsonBuiltInProperties.company !== undefined) {\n builtInProperties.company = jsonBuiltInProperties.company;\n }\n //Manager\n if (jsonBuiltInProperties.manager !== null && jsonBuiltInProperties.manager !== undefined) {\n builtInProperties.manager = jsonBuiltInProperties.manager;\n }\n //Subject\n if (jsonBuiltInProperties.subject !== null && jsonBuiltInProperties.subject !== undefined) {\n builtInProperties.subject = jsonBuiltInProperties.subject;\n }\n //Title\n if (jsonBuiltInProperties.title !== null && jsonBuiltInProperties.title !== undefined) {\n builtInProperties.title = jsonBuiltInProperties.title;\n }\n //Creation date\n if (jsonBuiltInProperties.createdDate !== null && jsonBuiltInProperties.createdDate !== undefined) {\n builtInProperties.createdDate = jsonBuiltInProperties.createdDate;\n }\n //Modified date\n if (jsonBuiltInProperties.modifiedDate !== null && jsonBuiltInProperties.modifiedDate !== undefined) {\n builtInProperties.modifiedDate = jsonBuiltInProperties.modifiedDate;\n }\n //Tags\n if (jsonBuiltInProperties.tags !== null && jsonBuiltInProperties.tags !== undefined) {\n builtInProperties.tags = jsonBuiltInProperties.tags;\n }\n //Status\n if (jsonBuiltInProperties.status !== null && jsonBuiltInProperties.status !== undefined) {\n builtInProperties.status = jsonBuiltInProperties.status;\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserWorksheets = function (json) {\n this.worksheets = new Worksheets();\n var length = json.length;\n for (var i = 0; i < length; i++) {\n var jsonSheet = json[i];\n var sheet = new Worksheet();\n this.mergeCells = new MergeCells();\n this.mHyperLinks = [];\n //Name\n if (jsonSheet.name !== null && jsonSheet.name !== undefined) {\n sheet.name = jsonSheet.name;\n }\n else {\n sheet.name = 'Sheet' + (i + 1).toString();\n }\n sheet.index = (i + 1);\n //Columns\n if (jsonSheet.columns !== null && jsonSheet.columns !== undefined) {\n this.parserColumns(jsonSheet.columns, sheet);\n }\n //Rows\n if (jsonSheet.rows !== null && jsonSheet.rows !== undefined) {\n this.parserRows(jsonSheet.rows, sheet);\n }\n //FreezePanes\n if (jsonSheet.freeze !== null && jsonSheet.freeze !== undefined) {\n this.parserFreezePanes(jsonSheet.freeze, sheet);\n }\n //Print Title\n if (jsonSheet.printTitle !== null && jsonSheet.printTitle !== undefined) {\n this.parserPrintTitle(jsonSheet.printTitle, sheet);\n }\n if (jsonSheet.pageSetup !== undefined) {\n if (jsonSheet.pageSetup.isSummaryRowBelow !== undefined) {\n sheet.isSummaryRowBelow = jsonSheet.pageSetup.isSummaryRowBelow;\n }\n }\n sheet.index = (i + 1);\n sheet.mergeCells = this.mergeCells;\n sheet.hyperLinks = this.mHyperLinks;\n this.worksheets.push(sheet);\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.mergeOptions = function (fromJson, toJson) {\n /* tslint:disable:no-any */\n var result = {};\n this.applyProperties(fromJson, result);\n this.applyProperties(toJson, result);\n return result;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.applyProperties = function (sourceJson, destJson) {\n var keys = Object.keys(sourceJson);\n for (var index = 0; index < keys.length; index++) {\n if (keys[index] !== 'name') {\n destJson[keys[index]] = sourceJson[keys[index]];\n }\n }\n };\n Workbook.prototype.getCellName = function (row, column) {\n return this.getColumnName(column) + row.toString();\n };\n Workbook.prototype.getColumnName = function (col) {\n col--;\n var strColumnName = '';\n do {\n var iCurrentDigit = col % 26;\n col = col / 26 - 1;\n strColumnName = String.fromCharCode(65 + iCurrentDigit) + strColumnName;\n } while (col >= 0);\n return strColumnName;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserPrintTitle = function (json, sheet) {\n var printTitleName = '';\n var titleRowName;\n if (json.fromRow !== null && json.fromRow !== undefined) {\n var fromRow = json.fromRow;\n var toRow = void 0;\n if (json.toRow !== null && json.toRow !== undefined) {\n toRow = json.toRow;\n }\n else {\n toRow = json.fromRow;\n }\n titleRowName = '$' + fromRow + ':$' + toRow;\n }\n var titleColName;\n if (json.fromColumn !== null && json.fromColumn !== undefined) {\n var fromColumn = json.fromColumn;\n var toColumn = void 0;\n if (json.toColumn !== null && json.toColumn !== undefined) {\n toColumn = json.toColumn;\n }\n else {\n toColumn = json.fromColumn;\n }\n titleColName = '$' + this.getColumnName(fromColumn) + ':$' + this.getColumnName(toColumn);\n }\n if (titleRowName !== undefined) {\n printTitleName += (sheet.name + '!' + titleRowName);\n }\n if (titleColName !== undefined && titleRowName !== undefined) {\n printTitleName += ',' + (sheet.name + '!' + titleColName);\n }\n else if (titleColName !== undefined) {\n printTitleName += (sheet.name + '!' + titleColName);\n }\n if (printTitleName !== '') {\n this.printTitles.set(sheet.index - 1, printTitleName);\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserFreezePanes = function (json, sheet) {\n sheet.freezePanes = new FreezePane();\n if (json.row !== null && json.row !== undefined) {\n sheet.freezePanes.row = json.row;\n }\n else {\n sheet.freezePanes.row = 0;\n }\n if (json.column !== null && json.column !== undefined) {\n sheet.freezePanes.column = json.column;\n }\n else {\n sheet.freezePanes.column = 0;\n }\n sheet.freezePanes.leftCell = this.getCellName(sheet.freezePanes.row + 1, sheet.freezePanes.column + 1);\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserColumns = function (json, sheet) {\n var columnsLength = json.length;\n sheet.columns = [];\n for (var column = 0; column < columnsLength; column++) {\n var col = new Column();\n if (json[column].index !== null && json[column].index !== undefined) {\n col.index = json[column].index;\n }\n else {\n throw Error('Column index is missing.');\n }\n if (json[column].width !== null && json[column].width !== undefined) {\n col.width = json[column].width;\n }\n sheet.columns.push(col);\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserRows = function (json, sheet) {\n var rowsLength = json.length;\n sheet.rows = new Rows();\n var rowId = 0;\n for (var r = 0; r < rowsLength; r++) {\n var row = this.parserRow(json[r], rowId);\n rowId = row.index;\n sheet.rows.add(row);\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserRow = function (json, rowIndex) {\n var row = new Row();\n //Row Height\n if (json.height !== null && json.height !== undefined) {\n row.height = json.height;\n }\n //Row index\n if (json.index !== null && json.index !== undefined) {\n row.index = json.index;\n }\n else {\n throw Error('Row index is missing.');\n }\n if (json.grouping !== null && json.grouping !== undefined) {\n this.parseGrouping(json.grouping, row);\n }\n this.parseCells(json.cells, row);\n return row;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parseGrouping = function (json, row) {\n row.grouping = new Grouping();\n if (json.outlineLevel !== undefined) {\n row.grouping.outlineLevel = json.outlineLevel;\n }\n if (json.isCollapsed !== undefined) {\n row.grouping.isCollapsed = json.isCollapsed;\n }\n if (json.isHidden !== undefined) {\n row.grouping.isHidden = json.isHidden;\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parseCells = function (json, row) {\n row.cells = new Cells();\n var cellsLength = json !== undefined ? json.length : 0;\n var spanMin = 1;\n var spanMax = 1;\n var curCellIndex = 0;\n for (var cellId = 0; cellId < cellsLength; cellId++) {\n /* tslint:disable:no-any */\n var jsonCell = json[cellId];\n var cell = new Cell();\n //cell index\n if (jsonCell.index !== null && jsonCell.index !== undefined) {\n cell.index = jsonCell.index;\n }\n else {\n throw Error('Cell index is missing.');\n }\n if (cell.index < spanMin) {\n spanMin = cell.index;\n }\n else if (cell.index > spanMax) {\n spanMax = cell.index;\n }\n //Update the Cell name\n cell.refName = this.getCellName(row.index, cell.index);\n //Row span\n if (jsonCell.rowSpan !== null && jsonCell.rowSpan !== undefined) {\n cell.rowSpan = jsonCell.rowSpan - 1;\n }\n else {\n cell.rowSpan = 0;\n }\n //Column span\n if (jsonCell.colSpan !== null && jsonCell.colSpan !== undefined) {\n cell.colSpan = jsonCell.colSpan - 1;\n }\n else {\n cell.colSpan = 0;\n }\n this.mergeCells = this.processMergeCells(cell, row.index, this.mergeCells);\n //Hyperlink\n if (jsonCell.hyperlink !== null && jsonCell.hyperlink !== undefined) {\n var hyperLink = new HyperLink();\n if (jsonCell.hyperlink.target !== undefined) {\n hyperLink.target = jsonCell.hyperlink.target;\n if (jsonCell.hyperlink.displayText !== undefined) {\n cell.value = jsonCell.hyperlink.displayText;\n }\n else {\n cell.value = jsonCell.hyperlink.target;\n }\n cell.type = this.getCellValueType(cell.value);\n hyperLink.ref = cell.refName;\n hyperLink.rId = (this.mHyperLinks.length + 1);\n this.mHyperLinks.push(hyperLink);\n cell.cellStyle = new CellStyle();\n /* tslint:disable-next-line:max-line-length */\n this.parserCellStyle((jsonCell.style !== undefined ? this.mergeOptions(jsonCell.style, this.hyperlinkStyle) : this.hyperlinkStyle), cell.cellStyle, 'string');\n cell.styleIndex = cell.cellStyle.index;\n }\n }\n //Cell value\n if (jsonCell.value !== null && jsonCell.value !== undefined) {\n cell.value = jsonCell.value;\n cell.type = this.getCellValueType(cell.value);\n }\n if (jsonCell.style !== null && jsonCell.style !== undefined && cell.styleIndex === undefined) {\n cell.cellStyle = new CellStyle();\n if (cell.value instanceof Date) {\n this.parserCellStyle(jsonCell.style, cell.cellStyle, cell.type, 14);\n }\n else {\n this.parserCellStyle(jsonCell.style, cell.cellStyle, cell.type);\n }\n cell.styleIndex = cell.cellStyle.index;\n }\n else if (cell.value instanceof Date) {\n cell.cellStyle = new CellStyle();\n this.parserCellStyle({}, cell.cellStyle, cell.type, 14);\n cell.styleIndex = cell.cellStyle.index;\n }\n this.parseCellType(cell);\n row.cells.add(cell);\n curCellIndex = (cell.index + 1);\n }\n row.spans = (spanMin) + ':' + (spanMax);\n };\n Workbook.prototype.applyGlobalStyle = function (json, cellStyle) {\n var index = 0;\n if (this.cellStyles.has(json.name)) {\n index = this.cellStyles.get(json.name).xfId;\n var cellStyleXfs = this.mCellStyleXfs[index - 1];\n cellStyle.name = json.name;\n var compareResult = this.compareStyleXfs(cellStyleXfs);\n if (!compareResult.result) {\n var cellXfs = new CellXfs();\n cellXfs.alignment = cellStyleXfs.alignment;\n cellXfs.applyAlignment = cellStyleXfs.applyAlignment;\n cellXfs.borderId = cellStyleXfs.borderId;\n cellXfs.fillId = cellStyleXfs.fillId;\n cellXfs.fontId = cellStyleXfs.fontId;\n cellXfs.numFmtId = cellStyleXfs.numFmtId;\n cellXfs.xfId = index;\n this.mCellXfs.push(cellXfs);\n this.mStyles.push(cellStyle);\n cellStyle.index = this.mCellXfs.length;\n }\n else {\n cellStyle.index = compareResult.index;\n }\n }\n };\n Workbook.prototype.compareStyleXfs = function (toCompareStyle) {\n var result = false;\n var index = 1;\n for (var _i = 0, _a = this.mCellXfs; _i < _a.length; _i++) {\n var baseStyle = _a[_i];\n result = baseStyle.alignment === toCompareStyle.alignment &&\n baseStyle.borderId === toCompareStyle.borderId &&\n baseStyle.numFmtId === toCompareStyle.numFmtId &&\n baseStyle.fillId === toCompareStyle.fillId &&\n baseStyle.fontId === toCompareStyle.fontId;\n if (result) {\n break;\n }\n else {\n index++;\n }\n }\n return { index: index, result: result };\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserCellStyle = function (json, cellStyle, cellType, defStyleIndex) {\n //name\n if (json.name !== null && json.name !== undefined) {\n if (cellStyle.isGlobalStyle) {\n cellStyle.name = json.name;\n }\n else {\n this.applyGlobalStyle(json, cellStyle);\n return;\n }\n }\n //background color\n if (json.backColor !== null && json.backColor !== undefined) {\n cellStyle.backColor = json.backColor;\n }\n //borders\n //leftBorder\n cellStyle.borders = new Borders();\n //AllBorder\n if (json.borders !== null && json.borders !== undefined) {\n this.parserBorder(json.borders, cellStyle.borders.all);\n }\n //leftborder\n if (json.leftBorder !== null && json.leftBorder !== undefined) {\n this.parserBorder(json.leftBorder, cellStyle.borders.left);\n }\n //rightBorder\n if (json.rightBorder !== null && json.rightBorder !== undefined) {\n this.parserBorder(json.rightBorder, cellStyle.borders.right);\n }\n //topBorder\n if (json.topBorder !== null && json.topBorder !== undefined) {\n this.parserBorder(json.topBorder, cellStyle.borders.top);\n }\n //bottomBorder\n if (json.bottomBorder !== null && json.bottomBorder !== undefined) {\n this.parserBorder(json.bottomBorder, cellStyle.borders.bottom);\n }\n //fontName\n if (json.fontName !== null && json.fontName !== undefined) {\n cellStyle.fontName = json.fontName;\n }\n //fontSize\n if (json.fontSize !== null && json.fontSize !== undefined) {\n cellStyle.fontSize = json.fontSize;\n }\n //fontColor\n if (json.fontColor !== null && json.fontColor !== undefined) {\n cellStyle.fontColor = json.fontColor;\n }\n //italic\n if (json.italic !== null && json.italic !== undefined) {\n cellStyle.italic = json.italic;\n }\n //bold\n if (json.bold !== null && json.bold !== undefined) {\n cellStyle.bold = json.bold;\n }\n //hAlign\n if (json.hAlign !== null && json.hAlign !== undefined) {\n cellStyle.hAlign = json.hAlign;\n }\n //vAlign\n if (json.vAlign !== null && json.vAlign !== undefined) {\n cellStyle.vAlign = json.vAlign;\n }\n //underline\n if (json.underline !== null && json.underline !== undefined) {\n cellStyle.underline = json.underline;\n }\n //wrapText\n if (json.wrapText !== null && json.wrapText !== undefined) {\n cellStyle.wrapText = json.wrapText;\n }\n //numberFormat\n if (json.numberFormat !== null && json.numberFormat !== undefined) {\n if (json.type !== null && json.type !== undefined) {\n cellStyle.numberFormat = this.getNumberFormat(json.numberFormat, json.type);\n }\n else {\n cellStyle.numberFormat = this.getNumberFormat(json.numberFormat, cellType);\n }\n }\n else if (defStyleIndex !== undefined) {\n cellStyle.numFmtId = 14;\n cellStyle.numberFormat = 'GENERAL';\n }\n else {\n cellStyle.numberFormat = 'GENERAL';\n }\n cellStyle.index = this.processCellStyle(cellStyle);\n };\n Workbook.prototype.switchNumberFormat = function (numberFormat, type) {\n var format = this.getNumberFormat(numberFormat, type);\n if (format !== numberFormat) {\n var numFmt = this.mNumFmt.get(numberFormat);\n if (numFmt !== undefined) {\n numFmt.formatCode = format;\n if (this.mNumFmt.has(format)) {\n for (var _i = 0, _a = this.mCellStyleXfs; _i < _a.length; _i++) {\n var cellStyleXfs = _a[_i];\n if (cellStyleXfs.numFmtId === numFmt.numFmtId) {\n cellStyleXfs.numFmtId = this.mNumFmt.get(format).numFmtId;\n }\n }\n for (var _b = 0, _c = this.mCellXfs; _b < _c.length; _b++) {\n var cellXfs = _c[_b];\n if (cellXfs.numFmtId === numFmt.numFmtId) {\n cellXfs.numFmtId = this.mNumFmt.get(format).numFmtId;\n }\n }\n }\n }\n }\n };\n Workbook.prototype.getNumberFormat = function (numberFormat, type) {\n var returnFormat;\n switch (type) {\n case 'number':\n try {\n returnFormat = this.intl.getNumberPattern({ format: numberFormat });\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n break;\n case 'datetime':\n try {\n returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'dateTime' }, true);\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n break;\n case 'date':\n try {\n returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'date' }, true);\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n break;\n case 'time':\n try {\n returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'time' }, true);\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n break;\n default:\n returnFormat = numberFormat;\n break;\n }\n return returnFormat;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserBorder = function (json, border) {\n if (json.color !== null && json.color !== undefined) {\n border.color = json.color;\n }\n else {\n border.color = '#000000';\n }\n if (json.lineStyle !== null && json.lineStyle !== undefined) {\n border.lineStyle = json.lineStyle;\n }\n else {\n border.lineStyle = 'thin';\n }\n };\n Workbook.prototype.processCellStyle = function (style) {\n var compareResult = this.compareStyle(style);\n if (!compareResult.result) {\n this.mStyles.push(style);\n var cellXfs = undefined;\n if (style.isGlobalStyle) {\n cellXfs = new CellStyleXfs();\n }\n else {\n cellXfs = new CellXfs();\n }\n //Add font\n var compareFontResult = this.isNewFont(style);\n if (!compareFontResult.result) {\n var font = new Font();\n font.b = style.bold;\n font.i = style.italic;\n font.name = style.fontName;\n font.sz = style.fontSize;\n font.u = style.underline;\n font.color = ('FF' + style.fontColor.replace('#', ''));\n this.mFonts.push(font);\n cellXfs.fontId = this.mFonts.length - 1;\n }\n else {\n cellXfs.fontId = compareFontResult.index;\n }\n //Add fill\n if (style.backColor !== 'none') {\n var backColor = 'FF' + style.backColor.replace('#', '');\n if (this.mFills.has(backColor)) {\n var fillId = this.mFills.get(backColor);\n cellXfs.fillId = fillId;\n }\n else {\n var fillId = this.mFills.size + 2;\n this.mFills.set(backColor, fillId);\n cellXfs.fillId = (fillId);\n }\n }\n else {\n cellXfs.fillId = 0;\n }\n //Add border \n if (!this.isNewBorder(style)) {\n this.mBorders.push(style.borders);\n cellXfs.borderId = this.mBorders.length;\n }\n else {\n cellXfs.borderId = 0;\n }\n cellXfs.xfId = 0;\n //Add Number Format \n if (style.numberFormat !== 'GENERAL') {\n if (this.mNumFmt.has(style.numberFormat)) {\n var numFmt = this.mNumFmt.get(style.numberFormat);\n cellXfs.numFmtId = numFmt.numFmtId;\n }\n else {\n var id = this.mNumFmt.size + 164;\n this.mNumFmt.set(style.numberFormat, new NumFmt(id, style.numberFormat));\n cellXfs.numFmtId = id;\n }\n }\n else {\n if (style.numberFormat === 'GENERAL' && style.numFmtId === 14) {\n cellXfs.numFmtId = 14;\n }\n else {\n cellXfs.numFmtId = 0;\n }\n }\n //Add alignment\n if (style.hAlign !== 'left' || style.vAlign !== 'bottom' || style.wrapText) {\n cellXfs.applyAlignment = 1;\n cellXfs.alignment = new Alignment();\n cellXfs.alignment.horizontal = style.hAlign;\n cellXfs.alignment.vertical = style.vAlign;\n cellXfs.alignment.wrapText = style.wrapText ? 1 : 0;\n }\n if (style.isGlobalStyle) {\n this.mCellStyleXfs.push(cellXfs);\n return (this.mCellStyleXfs.length);\n }\n else {\n //Add cellxfs\n this.mCellXfs.push(cellXfs);\n return (this.mCellXfs.length);\n }\n }\n else {\n //Return the index of the already existing style.\n return compareResult.index;\n }\n };\n Workbook.prototype.isNewFont = function (toCompareStyle) {\n var result = false;\n var index = 0;\n for (var _i = 0, _a = this.mFonts; _i < _a.length; _i++) {\n var font = _a[_i];\n index++;\n var fontColor = undefined;\n if (toCompareStyle.fontColor !== undefined) {\n fontColor = ('FF' + toCompareStyle.fontColor.replace('#', ''));\n }\n result = font.color === fontColor &&\n font.b === toCompareStyle.bold &&\n font.i === toCompareStyle.italic &&\n font.u === toCompareStyle.underline &&\n font.name === toCompareStyle.fontName &&\n font.sz === toCompareStyle.fontSize;\n if (result) {\n break;\n }\n }\n index = index - 1;\n return { index: index, result: result };\n };\n Workbook.prototype.isNewBorder = function (toCompareStyle) {\n var bStyle = new CellStyle;\n if (this.isAllBorder(toCompareStyle.borders)) {\n return (bStyle.borders.all.color === toCompareStyle.borders.all.color &&\n bStyle.borders.all.lineStyle === toCompareStyle.borders.all.lineStyle);\n }\n else {\n return (bStyle.borders.left.color === toCompareStyle.borders.left.color &&\n bStyle.borders.left.lineStyle === toCompareStyle.borders.left.lineStyle &&\n bStyle.borders.right.color === toCompareStyle.borders.right.color &&\n bStyle.borders.right.lineStyle === toCompareStyle.borders.right.lineStyle &&\n bStyle.borders.top.color === toCompareStyle.borders.top.color &&\n bStyle.borders.top.lineStyle === toCompareStyle.borders.top.lineStyle &&\n bStyle.borders.bottom.color === toCompareStyle.borders.bottom.color &&\n bStyle.borders.bottom.lineStyle === toCompareStyle.borders.bottom.lineStyle);\n }\n };\n Workbook.prototype.isAllBorder = function (toCompareBorder) {\n var allBorderStyle = new CellStyle;\n return allBorderStyle.borders.all.color !== toCompareBorder.all.color &&\n allBorderStyle.borders.all.lineStyle !== toCompareBorder.all.lineStyle;\n };\n Workbook.prototype.compareStyle = function (toCompareStyle) {\n var result = true;\n var index = 0;\n var globalStyleIndex = 0;\n for (var _i = 0, _a = this.mStyles; _i < _a.length; _i++) {\n var baseStyle = _a[_i];\n result = baseStyle.backColor === toCompareStyle.backColor &&\n baseStyle.bold === toCompareStyle.bold &&\n baseStyle.numFmtId === toCompareStyle.numFmtId &&\n baseStyle.numberFormat === toCompareStyle.numberFormat &&\n baseStyle.type === toCompareStyle.type &&\n baseStyle.fontColor === toCompareStyle.fontColor &&\n baseStyle.fontName === toCompareStyle.fontName &&\n baseStyle.fontSize === toCompareStyle.fontSize &&\n baseStyle.hAlign === toCompareStyle.hAlign &&\n baseStyle.italic === toCompareStyle.italic &&\n baseStyle.underline === toCompareStyle.underline &&\n baseStyle.vAlign === toCompareStyle.vAlign &&\n baseStyle.wrapText === toCompareStyle.wrapText &&\n (baseStyle.borders.all.color === toCompareStyle.borders.all.color &&\n baseStyle.borders.all.lineStyle === toCompareStyle.borders.all.lineStyle) &&\n (baseStyle.borders.left.color === toCompareStyle.borders.left.color &&\n baseStyle.borders.left.lineStyle === toCompareStyle.borders.left.lineStyle &&\n baseStyle.borders.right.color === toCompareStyle.borders.right.color &&\n baseStyle.borders.right.lineStyle === toCompareStyle.borders.right.lineStyle &&\n baseStyle.borders.top.color === toCompareStyle.borders.top.color &&\n baseStyle.borders.top.lineStyle === toCompareStyle.borders.top.lineStyle &&\n baseStyle.borders.bottom.color === toCompareStyle.borders.bottom.color &&\n baseStyle.borders.bottom.lineStyle === toCompareStyle.borders.bottom.lineStyle);\n if (result) {\n break;\n }\n else if (!baseStyle.isGlobalStyle) {\n index++;\n }\n else {\n globalStyleIndex++;\n }\n }\n if (toCompareStyle.isGlobalStyle) {\n index = globalStyleIndex + 1;\n }\n return { index: index, result: result };\n };\n Workbook.prototype.contains = function (array, item) {\n var index = array.indexOf(item);\n return index > -1 && index < array.length;\n };\n Workbook.prototype.getCellValueType = function (value) {\n if (value instanceof Date) {\n return 'datetime';\n }\n else if (typeof (value) === 'boolean') {\n return 'boolean';\n }\n else if (typeof (value) === 'number') {\n return 'number';\n }\n else {\n return 'string';\n }\n };\n Workbook.prototype.parseCellType = function (cell) {\n var type = cell.type;\n var saveType;\n var value = cell.value;\n switch (type) {\n case 'datetime':\n value = this.toOADate(value);\n if (cell.cellStyle !== undefined && cell.cellStyle.name !== undefined) {\n if (this.globalStyles.has(cell.cellStyle.name)) {\n var value_1 = this.globalStyles.get(cell.cellStyle.name);\n this.switchNumberFormat(value_1.format, value_1.type);\n }\n }\n saveType = 'n';\n break;\n //TODO: Update the number format index and style\n case 'boolean':\n value = value ? 1 : 0;\n saveType = 'b';\n break;\n case 'number':\n saveType = 'n';\n if (cell.cellStyle !== undefined && cell.cellStyle.name !== undefined) {\n if (this.globalStyles.has(cell.cellStyle.name)) {\n this.switchNumberFormat(this.globalStyles.get(cell.cellStyle.name).format, 'number');\n }\n }\n break;\n case 'string':\n this.sharedStringCount++;\n saveType = 's';\n if (!this.contains(this.sharedString, value)) {\n this.sharedString.push(value);\n }\n value = this.sharedString.indexOf(value);\n break;\n default:\n break;\n }\n cell.saveType = saveType;\n cell.value = value;\n };\n Workbook.prototype.saveAsBlob = function (blobSaveType) {\n var _this = this;\n switch (blobSaveType) {\n case 'text/csv':\n return new Promise(function (resolve, reject) {\n var obj = {};\n obj.blobData = _this.csvHelper.saveAsBlob();\n resolve(obj);\n });\n default:\n return new Promise(function (resolve, reject) {\n _this.saveInternal();\n _this.mArchive.saveAsBlob().then(function (blob) {\n var obj = {};\n obj.blobData = new Blob([blob], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\n resolve(obj);\n });\n });\n }\n };\n Workbook.prototype.save = function (fileName, proxyUrl) {\n var _this = this;\n if (fileName === null || fileName === undefined || fileName === '') {\n throw new Error('Argument Null Exception: fileName cannot be null or empty');\n }\n var xlsxMatch = fileName.match('.xlsx$');\n var csvMatch = fileName.match('.csv$');\n if (xlsxMatch !== null && xlsxMatch[0] === ('.' + this.mSaveType)) {\n this.saveInternal();\n this.mArchive.save(fileName).then(function () {\n _this.mArchive.destroy();\n });\n }\n else if (csvMatch !== null && csvMatch[0] === ('.' + this.mSaveType)) {\n this.csvHelper.save(fileName);\n }\n else {\n throw Error('Save type and file extension is different.');\n }\n };\n Workbook.prototype.saveInternal = function () {\n this.saveWorkbook();\n this.saveWorksheets();\n this.saveSharedString();\n this.saveStyles();\n this.saveApp(this.builtInProperties);\n this.saveCore(this.builtInProperties);\n this.saveContentType();\n this.saveTopLevelRelation();\n this.saveWorkbookRelation();\n };\n Workbook.prototype.saveWorkbook = function () {\n /* tslint:disable-next-line:max-line-length */\n var workbookTemp = '';\n var sheets = '';\n var length = this.worksheets.length;\n for (var i = 0; i < length; i++) {\n /* tslint:disable-next-line:max-line-length */\n sheets += '';\n }\n sheets += '';\n workbookTemp += sheets;\n if (this.printTitles.size > 0) {\n var printTitle_1 = '';\n this.printTitles.forEach(function (value, key) {\n printTitle_1 += '' + value + '';\n });\n printTitle_1 += '';\n workbookTemp += printTitle_1;\n }\n this.addToArchive(workbookTemp + '', 'xl/workbook.xml');\n };\n Workbook.prototype.saveWorksheets = function () {\n var length = this.worksheets.length;\n for (var i = 0; i < length; i++) {\n this.saveWorksheet(this.worksheets[i], i);\n }\n };\n Workbook.prototype.saveWorksheet = function (sheet, index) {\n var sheetBlob = new BlobHelper();\n /* tslint:disable-next-line:max-line-length */\n var sheetString = '';\n if (!sheet.isSummaryRowBelow) {\n sheetString += ('' + '' + '' + '');\n }\n else {\n sheetString += ('');\n }\n if (sheet.freezePanes !== undefined) {\n sheetString += (this.saveFreezePanes(sheet));\n }\n if (sheet.columns !== undefined) {\n var colString = '';\n for (var _i = 0, _a = sheet.columns; _i < _a.length; _i++) {\n var column = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n if (column.width !== undefined) {\n colString += '';\n }\n else {\n colString += '';\n }\n }\n sheetString += (colString + '');\n }\n sheetString += ('');\n sheetBlob.append(sheetString);\n sheetString = '';\n if (sheet.rows !== undefined) {\n for (var _b = 0, _c = sheet.rows; _b < _c.length; _b++) {\n var row = _c[_b];\n var rowString = ('');\n for (var _d = 0, _e = row.cells; _d < _e.length; _d++) {\n var cell = _e[_d];\n if (cell !== undefined && (cell.value !== undefined || cell.cellStyle !== undefined)) {\n rowString += ('');\n if (cell.value !== undefined) {\n rowString += ('' + cell.value + '');\n }\n else {\n rowString += ('');\n }\n }\n }\n rowString += ('');\n sheetBlob.append(rowString);\n }\n }\n sheetString += ('');\n if (sheet.mergeCells.length > 0) {\n sheetString += ('');\n for (var _f = 0, _g = sheet.mergeCells; _f < _g.length; _f++) {\n var mCell = _g[_f];\n sheetString += ('');\n }\n sheetString += ('');\n }\n if (sheet.hyperLinks.length > 0) {\n sheetString += ('');\n for (var _h = 0, _j = sheet.hyperLinks; _h < _j.length; _h++) {\n var hLink = _j[_h];\n sheetString += ('');\n }\n sheetString += ('');\n this.addToArchive(this.saveSheetRelations(sheet), ('xl/worksheets/_rels/sheet' + sheet.index + '.xml.rels'));\n }\n /* tslint:disable-next-line:max-line-length */\n sheetString += ('');\n sheetBlob.append(sheetString);\n this.addToArchive(sheetBlob.getBlob(), 'xl/worksheets' + '/sheet' + (index + 1) + '.xml');\n };\n Workbook.prototype.pixelsToColumnWidth = function (pixels) {\n var dDigitWidth = 7;\n var val = (pixels > dDigitWidth + 5) ?\n this.trunc((pixels - 5) / dDigitWidth * 100 + 0.5) / 100 :\n pixels / (dDigitWidth + 5);\n return (val > 1) ?\n ((val * dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0 :\n (val * (dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0;\n };\n Workbook.prototype.trunc = function (x) {\n var n = x - x % 1;\n return n === 0 && (x < 0 || (x === 0 && (1 / x !== 1 / 0))) ? -0 : n;\n };\n Workbook.prototype.pixelsToRowHeight = function (pixels) {\n return (pixels * this.unitsProportions[5] / this.unitsProportions[6]);\n };\n Workbook.prototype.saveSheetRelations = function (sheet) {\n /* tslint:disable-next-line:max-line-length */\n var relStr = '';\n for (var _i = 0, _a = sheet.hyperLinks; _i < _a.length; _i++) {\n var hLink = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n relStr += '';\n }\n relStr += '';\n return relStr;\n };\n Workbook.prototype.saveFreezePanes = function (sheet) {\n var paneString = ' 0) {\n /* tslint:disable-next-line:max-line-length */\n var sstStart = '';\n var si = '';\n for (var i = 0; i < length; i++) {\n si += '';\n si += this.processString(this.sharedString[i]);\n si += '';\n }\n si += '';\n this.addToArchive(sstStart + si, 'xl/sharedStrings.xml');\n }\n };\n Workbook.prototype.processString = function (value) {\n if (value.indexOf('&') !== -1) {\n value = value.replace(/&/g, '&');\n }\n if (value.indexOf('<') !== -1) {\n value = value.replace(/') !== -1) {\n value = value.replace(/>/g, '>');\n }\n return value;\n };\n Workbook.prototype.saveStyles = function () {\n /* tslint:disable-next-line:max-line-length */\n var styleTemp = '';\n styleTemp += this.saveNumberFormats();\n styleTemp += this.saveFonts();\n styleTemp += this.saveFills();\n styleTemp += this.saveBorders();\n styleTemp += this.saveCellStyleXfs();\n styleTemp += this.saveCellXfs();\n styleTemp += this.saveCellStyles();\n this.addToArchive(styleTemp + '', 'xl/styles.xml');\n };\n Workbook.prototype.saveNumberFormats = function () {\n if (this.mNumFmt.size >= 1) {\n var numFmtStyle_1 = '';\n this.mNumFmt.forEach(function (value, key) {\n numFmtStyle_1 += '';\n });\n return (numFmtStyle_1 += '');\n }\n else {\n return '';\n }\n };\n Workbook.prototype.saveFonts = function () {\n /* tslint:disable-next-line:max-line-length */\n var fontStyle = '';\n if (this.mFonts.length >= 1) {\n for (var _i = 0, _a = this.mFonts; _i < _a.length; _i++) {\n var font = _a[_i];\n fontStyle += '';\n if (font.b) {\n fontStyle += '';\n }\n if (font.i) {\n fontStyle += '';\n }\n if (font.u) {\n fontStyle += '';\n }\n fontStyle += '';\n fontStyle += '';\n fontStyle += '';\n }\n }\n return fontStyle + '';\n };\n Workbook.prototype.saveFills = function () {\n /* tslint:disable-next-line:max-line-length */\n var fillsStyle = '';\n if (this.mFills.size >= 1) {\n this.mFills.forEach(function (value, key) {\n /* tslint:disable-next-line:max-line-length */\n fillsStyle += '';\n });\n }\n return fillsStyle + '';\n };\n Workbook.prototype.saveBorders = function () {\n /* tslint:disable-next-line:max-line-length */\n var bordersStyle = '';\n if (this.mBorders.length >= 1) {\n for (var _i = 0, _a = this.mBorders; _i < _a.length; _i++) {\n var borders = _a[_i];\n if (this.isAllBorder(borders)) {\n var color = borders.all.color.replace('#', '');\n var lineStyle = borders.all.lineStyle;\n /* tslint:disable-next-line:max-line-length */\n bordersStyle += '';\n }\n else {\n /* tslint:disable-next-line:max-line-length */\n bordersStyle += '';\n }\n }\n }\n return bordersStyle + '';\n };\n Workbook.prototype.saveCellStyles = function () {\n var _this = this;\n var cellStyleString = '';\n this.cellStyles.forEach(function (value, key) {\n cellStyleString += '';\n if (this.mCellStyleXfs.length >= 1) {\n for (var _i = 0, _a = this.mCellStyleXfs; _i < _a.length; _i++) {\n var cellStyleXf = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n cellXfsStyle += '';\n }\n else {\n cellXfsStyle += ' />';\n }\n // \n // \n // \n }\n }\n return cellXfsStyle + '';\n };\n Workbook.prototype.saveCellXfs = function () {\n /* tslint:disable-next-line:max-line-length */\n var cellXfsStyle = '';\n if (this.mCellXfs.length >= 1) {\n for (var _i = 0, _a = this.mCellXfs; _i < _a.length; _i++) {\n var cellXf = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n cellXfsStyle += '';\n }\n else {\n cellXfsStyle += ' />';\n }\n // \n // \n // \n }\n }\n return cellXfsStyle + '';\n };\n Workbook.prototype.saveApp = function (builtInProperties) {\n /* tslint:disable-next-line:max-line-length */\n var appString = 'Essential XlsIO';\n if (builtInProperties !== undefined) {\n if (builtInProperties.manager !== undefined) {\n appString += '' + builtInProperties.manager + '';\n }\n if (builtInProperties.company !== undefined) {\n appString += '' + builtInProperties.company + '';\n }\n }\n this.addToArchive((appString + ''), 'docProps/app.xml');\n };\n Workbook.prototype.saveCore = function (builtInProperties) {\n var createdDate = new Date();\n /* tslint:disable-next-line:max-line-length */\n var coreString = '';\n if (this.builtInProperties !== undefined) {\n if (builtInProperties.author !== undefined) {\n coreString += '' + builtInProperties.author + '';\n }\n if (builtInProperties.subject !== undefined) {\n coreString += '' + builtInProperties.subject + '';\n }\n if (builtInProperties.category !== undefined) {\n coreString += '' + builtInProperties.category + '';\n }\n if (builtInProperties.comments !== undefined) {\n coreString += '' + builtInProperties.comments + '';\n }\n if (builtInProperties.title !== undefined) {\n coreString += '' + builtInProperties.title + '';\n }\n if (builtInProperties.tags !== undefined) {\n coreString += '' + builtInProperties.tags + '';\n }\n if (builtInProperties.status !== undefined) {\n coreString += '' + builtInProperties.status + '';\n }\n if (builtInProperties.createdDate !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n coreString += '' + builtInProperties.createdDate.toISOString() + '';\n }\n else {\n coreString += '' + createdDate.toISOString() + '';\n }\n if (builtInProperties.modifiedDate !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n coreString += '' + builtInProperties.modifiedDate.toISOString() + '';\n }\n else {\n coreString += '' + createdDate.toISOString() + '';\n }\n }\n else {\n coreString += '' + createdDate.toISOString() + '';\n coreString += '' + createdDate.toISOString() + '';\n }\n /* tslint:disable-next-line:max-line-length */\n coreString += '';\n this.addToArchive(coreString, 'docProps/core.xml');\n };\n Workbook.prototype.saveTopLevelRelation = function () {\n /* tslint:disable-next-line:max-line-length */\n var topRelation = '';\n this.addToArchive(topRelation, '_rels/.rels');\n };\n Workbook.prototype.saveWorkbookRelation = function () {\n /* tslint:disable-next-line:max-line-length */\n var wbRelation = '';\n var length = this.worksheets.length;\n var count = 0;\n for (var i = 0; i < length; i++, count++) {\n /* tslint:disable-next-line:max-line-length */\n wbRelation += '';\n }\n /* tslint:disable-next-line:max-line-length */\n wbRelation += '';\n if (this.sharedStringCount > 0) {\n /* tslint:disable-next-line:max-line-length */\n wbRelation += '';\n }\n this.addToArchive((wbRelation + ''), 'xl/_rels/workbook.xml.rels');\n };\n Workbook.prototype.saveContentType = function () {\n /* tslint:disable-next-line:max-line-length */\n var contentTypeString = '';\n var sheetsOverride = '';\n var length = this.worksheets.length;\n for (var i = 0; i < length; i++) {\n /* tslint:disable-next-line:max-line-length */\n sheetsOverride += '';\n }\n if (this.sharedStringCount > 0) {\n /* tslint:disable-next-line:max-line-length */\n contentTypeString += '';\n }\n this.addToArchive((contentTypeString + sheetsOverride + ''), '[Content_Types].xml');\n };\n Workbook.prototype.addToArchive = function (xmlString, itemName) {\n if (typeof (xmlString) === 'string') {\n var blob = new Blob([xmlString], { type: 'text/plain' });\n var archiveItem = new ZipArchiveItem(blob, itemName);\n this.mArchive.addItem(archiveItem);\n }\n else {\n var archiveItem = new ZipArchiveItem(xmlString, itemName);\n this.mArchive.addItem(archiveItem);\n }\n };\n Workbook.prototype.processMergeCells = function (cell, rowIndex, mergeCells) {\n if (cell.rowSpan !== 0 || cell.colSpan !== 0) {\n var mCell = new MergeCell();\n mCell.x = cell.index;\n mCell.width = cell.colSpan;\n mCell.y = rowIndex;\n mCell.height = cell.rowSpan;\n var startCell = this.getCellName(mCell.y, mCell.x);\n var endCell = this.getCellName(rowIndex + mCell.height, cell.index + mCell.width);\n mCell.ref = startCell + ':' + endCell;\n mergeCells.add(mCell);\n }\n return mergeCells;\n };\n /**\n * Returns the tick count corresponding to the given year, month, and day.\n * @param year number value of year\n * @param month number value of month\n * @param day number value of day\n */\n Workbook.prototype.dateToTicks = function (year, month, day) {\n var ticksPerDay = 10000 * 1000 * 60 * 60 * 24;\n var daysToMonth365 = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365];\n var daysToMonth366 = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366];\n if (year >= 1 && year <= 9999 && month >= 1 && month <= 12) {\n var days = this.isLeapYear(year) ? daysToMonth366 : daysToMonth365;\n var y = year - 1;\n var n = y * 365 + ((y / 4) | 0) - ((y / 100) | 0) + ((y / 400) | 0) + days[month - 1] + day - 1;\n return n * ticksPerDay;\n }\n throw new Error('Not a valid date');\n };\n /**\n * Return the tick count corresponding to the given hour, minute, second.\n * @param hour number value of hour\n * @param minute number value if minute\n * @param second number value of second\n */\n Workbook.prototype.timeToTicks = function (hour, minute, second) {\n if (hour >= 0 && hour < 24 && minute >= 0 && minute < 60 && second >= 0 && second < 60) {\n var totalSeconds = hour * 3600 + minute * 60 + second;\n return totalSeconds * 10000 * 1000;\n }\n throw new Error('Not valid time');\n };\n /**\n * Checks if given year is a leap year.\n * @param year Year value.\n */\n Workbook.prototype.isLeapYear = function (year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n };\n /**\n * Converts `DateTime` to the equivalent OLE Automation date.\n */\n Workbook.prototype.toOADate = function (date) {\n var ticks = 0;\n /* tslint:disable-next-line:max-line-length */\n ticks = this.dateToTicks(date.getFullYear(), (date.getMonth() + 1), date.getDate()) + this.timeToTicks(date.getHours(), date.getMinutes(), date.getSeconds());\n if (ticks === 0) {\n return 0.0;\n }\n var ticksPerDay = 10000 * 1000 * 60 * 60 * 24;\n var daysTo1899 = (((365 * 4 + 1) * 25 - 1) * 4 + 1) * 4 + ((365 * 4 + 1) * 25 - 1) * 3 - 367;\n var doubleDateOffset = daysTo1899 * ticksPerDay;\n var oaDateMinAsTicks = (((365 * 4 + 1) * 25 - 1) - 365) * ticksPerDay;\n if (ticks < oaDateMinAsTicks) {\n throw new Error('Arg_OleAutDateInvalid');\n }\n var millisPerDay = 1000 * 60 * 60 * 24;\n return ((ticks - doubleDateOffset) / 10000) / millisPerDay;\n };\n return Workbook;\n}());\nexport { Workbook };\nvar BuiltInProperties = /** @class */ (function () {\n function BuiltInProperties() {\n }\n return BuiltInProperties;\n}());\nexport { BuiltInProperties };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Touch, Component, EventHandler, selectAll, getUniqueID } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Property, Browser, detach, createElement as buildTag } from '@syncfusion/ej2-base';\nvar CLS_ROOT = 'e-hscroll';\nvar CLS_RTL = 'e-rtl';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_HSCROLLBAR = 'e-hscroll-bar';\nvar CLS_HSCROLLCON = 'e-hscroll-content';\nvar CLS_NAVARROW = 'e-nav-arrow';\nvar CLS_NAVRIGHTARROW = 'e-nav-right-arrow';\nvar CLS_NAVLEFTARROW = 'e-nav-left-arrow';\nvar CLS_HSCROLLNAV = 'e-scroll-nav';\nvar CLS_HSCROLLNAVRIGHT = 'e-scroll-right-nav';\nvar CLS_HSCROLLNAVLEFT = 'e-scroll-left-nav';\nvar CLS_DEVICE = 'e-scroll-device';\n/**\n * HScroll module is introduces horizontal scroller when content exceeds the current viewing area.\n * It can be useful for the components like Toolbar, Tab which needs horizontal scrolling alone.\n * Hidden content can be view by touch moving or icon click.\n * ```html\n *
\n * \n * ```\n */\nvar HScroll = /** @class */ (function (_super) {\n __extends(HScroll, _super);\n /**\n * Initializes a new instance of the HScroll class.\n * @param options - Specifies HScroll model properties as options.\n * @param element - Specifies the element for which horizontal scrolling applies.\n */\n function HScroll(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the event handler\n * @private\n */\n HScroll.prototype.preRender = function () {\n this.browser = Browser.info.name;\n this.browserCheck = this.browser === 'mozilla';\n this.isDevice = Browser.isDevice;\n var element = this.element;\n this.ieCheck = this.browser === 'edge' || this.browser === 'msie';\n this.initialize();\n if (element.id === '') {\n element.id = getUniqueID('hscroll');\n this.uniqueId = true;\n }\n element.style.display = 'block';\n if (this.enableRtl) {\n element.classList.add(CLS_RTL);\n }\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n HScroll.prototype.render = function () {\n this.touchModule = new Touch(this.element, { scroll: this.touchHandler.bind(this) });\n if (!this.isDevice) {\n this.createNavIcon(this.element);\n EventHandler.add(this.scrollEle, 'scroll', this.scrollHandler, this);\n }\n else {\n this.element.classList.add(CLS_DEVICE);\n }\n };\n HScroll.prototype.initialize = function () {\n var scrollEle = buildTag('div', { className: CLS_HSCROLLCON });\n var scrollDiv = buildTag('div', { className: CLS_HSCROLLBAR });\n scrollDiv.setAttribute('tabindex', '-1');\n var ele = this.element;\n var innerEle = [].slice.call(ele.children);\n for (var _i = 0, innerEle_1 = innerEle; _i < innerEle_1.length; _i++) {\n var ele_1 = innerEle_1[_i];\n scrollEle.appendChild(ele_1);\n }\n scrollDiv.appendChild(scrollEle);\n ele.appendChild(scrollDiv);\n scrollDiv.style.overflowX = 'hidden';\n this.scrollEle = scrollDiv;\n this.scrollItems = scrollEle;\n };\n HScroll.prototype.getPersistData = function () {\n var keyEntity = ['scrollStep'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Returns the current module name.\n * @returns string\n * @private\n */\n HScroll.prototype.getModuleName = function () {\n return 'hScroll';\n };\n /**\n * Removes the control from the DOM and also removes all its related events.\n * @returns void\n */\n HScroll.prototype.destroy = function () {\n var ele = this.element;\n ele.style.display = '';\n ele.classList.remove(CLS_ROOT);\n var nav = selectAll('.e-' + ele.id + '_nav.' + CLS_HSCROLLNAV, ele);\n for (var _i = 0, _a = [].slice.call(this.scrollItems.children); _i < _a.length; _i++) {\n var elem = _a[_i];\n ele.appendChild(elem);\n }\n if (this.uniqueId) {\n this.element.removeAttribute('id');\n }\n detach(this.scrollEle);\n if (nav.length > 0) {\n detach(nav[0]);\n detach(nav[1]);\n }\n EventHandler.remove(this.scrollEle, 'scroll', this.scrollHandler);\n this.touchModule.destroy();\n this.touchModule = null;\n _super.prototype.destroy.call(this);\n };\n HScroll.prototype.createNavIcon = function (element) {\n var id = element.id.concat('_nav');\n var clsRight = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVRIGHT);\n var nav = buildTag('div', { id: id.concat('_right'), className: clsRight });\n nav.setAttribute('aria-disabled', 'false');\n var navItem = buildTag('div', { className: CLS_NAVRIGHTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n var clsLeft = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVLEFT);\n var navEle = buildTag('div', { id: id.concat('_left'), className: clsLeft + ' ' + CLS_DISABLE });\n navEle.setAttribute('aria-disabled', 'true');\n var navLeftItem = buildTag('div', { className: CLS_NAVLEFTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n navEle.appendChild(navLeftItem);\n nav.appendChild(navItem);\n nav.setAttribute('tabindex', '0');\n element.appendChild(nav);\n element.insertBefore(navEle, element.firstChild);\n if (this.ieCheck) {\n nav.classList.add('e-ie-align');\n navEle.classList.add('e-ie-align');\n }\n this.eventBinding([nav, navEle]);\n };\n HScroll.prototype.onKeyPress = function (e) {\n var _this = this;\n if (e.key === 'Enter') {\n var timeoutFun_1 = function () {\n _this.keyTimeout = true;\n _this.eleScrolling(10, e.target);\n };\n this.keyTimer = window.setTimeout(function () {\n timeoutFun_1();\n }, 100);\n }\n };\n HScroll.prototype.onKeyUp = function (e) {\n if (e.key !== 'Enter') {\n return;\n }\n if (this.keyTimeout) {\n this.keyTimeout = false;\n }\n else {\n e.target.click();\n }\n clearTimeout(this.keyTimer);\n };\n HScroll.prototype.eventBinding = function (ele) {\n var _this = this;\n ele.forEach(function (el) {\n new Touch(el, { tapHold: _this.tabHoldHandler.bind(_this), tapHoldThreshold: 500 });\n el.addEventListener('keydown', _this.onKeyPress.bind(_this));\n el.addEventListener('keyup', _this.onKeyUp.bind(_this));\n el.addEventListener('mouseup', _this.repeatScroll.bind(_this));\n el.addEventListener('touchend', _this.repeatScroll.bind(_this));\n el.addEventListener('contextmenu', function (e) {\n e.preventDefault();\n });\n EventHandler.add(el, 'click', _this.clickEventHandler, _this);\n });\n };\n HScroll.prototype.repeatScroll = function () {\n clearInterval(this.timeout);\n };\n HScroll.prototype.tabHoldHandler = function (e) {\n var _this = this;\n var trgt = e.originalEvent.target;\n trgt = this.contains(trgt, CLS_HSCROLLNAV) ? trgt.firstElementChild : trgt;\n var scrollDis = 10;\n var timeoutFun = function () {\n _this.eleScrolling(scrollDis, trgt);\n };\n this.timeout = window.setInterval(function () {\n timeoutFun();\n }, 50);\n };\n HScroll.prototype.contains = function (ele, className) {\n return ele.classList.contains(className);\n };\n HScroll.prototype.eleScrolling = function (scrollDis, trgt) {\n var element = this.scrollEle;\n var rootEle = this.element;\n var classList = trgt.classList;\n if (classList.contains(CLS_HSCROLLNAV)) {\n classList = trgt.querySelector('.' + CLS_NAVARROW).classList;\n }\n if (this.contains(rootEle, CLS_RTL) && this.browserCheck) {\n scrollDis = -scrollDis;\n }\n var scrlLeft = element.scrollLeft;\n if ((!this.contains(rootEle, CLS_RTL) || this.browserCheck) || this.ieCheck) {\n if (classList.contains(CLS_NAVRIGHTARROW)) {\n element.scrollLeft = scrlLeft + scrollDis;\n }\n else {\n element.scrollLeft = scrlLeft - scrollDis;\n }\n }\n else {\n if (classList.contains(CLS_NAVLEFTARROW)) {\n element.scrollLeft = scrlLeft + scrollDis;\n }\n else {\n element.scrollLeft = scrlLeft - scrollDis;\n }\n }\n };\n HScroll.prototype.clickEventHandler = function (e) {\n this.eleScrolling(this.scrollStep, e.target);\n };\n HScroll.prototype.touchHandler = function (e) {\n var ele = this.scrollEle;\n var distance;\n distance = e.distanceX;\n if ((this.ieCheck) && this.contains(this.element, CLS_RTL)) {\n distance = -distance;\n }\n if (e.scrollDirection === 'Left') {\n ele.scrollLeft = ele.scrollLeft + distance;\n }\n else if (e.scrollDirection === 'Right') {\n ele.scrollLeft = ele.scrollLeft - distance;\n }\n };\n HScroll.prototype.arrowDisabling = function (addDisable, removeDisable) {\n addDisable.classList.add(CLS_DISABLE);\n addDisable.setAttribute('aria-disabled', 'true');\n addDisable.removeAttribute('tabindex');\n clearInterval(this.timeout);\n removeDisable.classList.remove(CLS_DISABLE);\n removeDisable.setAttribute('aria-disabled', 'false');\n removeDisable.setAttribute('tabindex', '0');\n this.repeatScroll();\n };\n HScroll.prototype.scrollHandler = function (e) {\n var target = e.target;\n var width = target.offsetWidth;\n var rootEle = this.element;\n var navLeftEle = this.element.querySelector('.' + CLS_HSCROLLNAVLEFT);\n var navRightEle = this.element.querySelector('.' + CLS_HSCROLLNAVRIGHT);\n var scrollLeft = target.scrollLeft;\n if (scrollLeft <= 0) {\n scrollLeft = -scrollLeft;\n }\n if (scrollLeft === 0) {\n if ((!this.contains(rootEle, CLS_RTL) || this.browserCheck) || this.ieCheck) {\n this.arrowDisabling(navLeftEle, navRightEle);\n }\n else {\n this.arrowDisabling(navRightEle, navLeftEle);\n }\n }\n else if (Math.ceil(width + scrollLeft + .1) >= target.scrollWidth) {\n if ((!this.contains(rootEle, CLS_RTL) || this.browserCheck) || this.ieCheck) {\n this.arrowDisabling(navRightEle, navLeftEle);\n }\n else {\n this.arrowDisabling(navLeftEle, navRightEle);\n }\n }\n else {\n var disEle = this.element.querySelector('.' + CLS_HSCROLLNAV + '.' + CLS_DISABLE);\n if (disEle) {\n disEle.classList.remove(CLS_DISABLE);\n disEle.setAttribute('aria-disabled', 'false');\n disEle.setAttribute('tabindex', '0');\n }\n }\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of property that changed.\n * @param {HScrollModel} newProp\n * @param {HScrollModel} oldProp\n * @returns void\n * @private\n */\n HScroll.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'scrollStep':\n break;\n case 'enableRtl':\n newProp.enableRtl ? this.element.classList.add(CLS_RTL) : this.element.classList.remove(CLS_RTL);\n break;\n }\n }\n };\n __decorate([\n Property(40)\n ], HScroll.prototype, \"scrollStep\", void 0);\n HScroll = __decorate([\n NotifyPropertyChanges\n ], HScroll);\n return HScroll;\n}(Component));\nexport { HScroll };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, isVisible, closest, attributes, detach, classList, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { createElement as buildTag, selectAll, setStyleAttribute as setStyle } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, getUniqueID, formatUnit, Collection, compile as templateCompiler } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty, Browser } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { calculatePosition } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { HScroll } from '../common/h-scroll';\nvar CLS_ITEMS = 'e-toolbar-items';\nvar CLS_ITEM = 'e-toolbar-item';\nvar CLS_RTL = 'e-rtl';\nvar CLS_SEPARATOR = 'e-separator';\nvar CLS_POPUPICON = 'e-popup-up-icon';\nvar CLS_POPUPDOWN = 'e-popup-down-icon';\nvar CLS_TEMPLATE = 'e-template';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_POPUPTEXT = 'e-toolbar-text';\nvar CLS_TBARTEXT = 'e-popup-text';\nvar CLS_TBAROVERFLOW = 'e-overflow-show';\nvar CLS_POPOVERFLOW = 'e-overflow-hide';\nvar CLS_TBARBTN = 'e-tbar-btn';\nvar CLS_TBARNAV = 'e-hor-nav';\nvar CLS_TBARSCRLNAV = 'e-scroll-nav';\nvar CLS_TBARRIGHT = 'e-toolbar-right';\nvar CLS_TBARLEFT = 'e-toolbar-left';\nvar CLS_TBARCENTER = 'e-toolbar-center';\nvar CLS_TBARPOS = 'e-tbar-pos';\nvar CLS_TBARSCROLL = 'e-hscroll-content';\nvar CLS_POPUPNAV = 'e-hor-nav';\nvar CLS_POPUPCLASS = 'e-toolbar-pop';\nvar CLS_POPUP = 'e-toolbar-popup';\nvar CLS_TBARBTNTEXT = 'e-tbar-btn-text';\nvar CLS_TBARNAVACT = 'e-nav-active';\nvar CLS_TBARIGNORE = 'e-ignore';\nvar CLS_POPPRI = 'e-popup-alone';\nvar CLS_HIDDEN = 'e-hidden';\n/**\n * An item object that is used to configure Toolbar commands.\n */\nvar Item = /** @class */ (function (_super) {\n __extends(Item, _super);\n function Item() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Item.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"text\", void 0);\n __decorate([\n Property('auto')\n ], Item.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Item.prototype, \"showAlwaysInPopup\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"prefixIcon\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"suffixIcon\", void 0);\n __decorate([\n Property('None')\n ], Item.prototype, \"overflow\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"template\", void 0);\n __decorate([\n Property('Button')\n ], Item.prototype, \"type\", void 0);\n __decorate([\n Property('Both')\n ], Item.prototype, \"showTextOn\", void 0);\n __decorate([\n Property(null)\n ], Item.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"tooltipText\", void 0);\n __decorate([\n Property('Left')\n ], Item.prototype, \"align\", void 0);\n return Item;\n}(ChildProperty));\nexport { Item };\n/**\n * The Toolbar control contains a group of commands that are aligned horizontally.\n * ```html\n *
\n * \n * ```\n */\nvar Toolbar = /** @class */ (function (_super) {\n __extends(Toolbar, _super);\n /**\n * Initializes a new instance of the Toolbar class.\n * @param options - Specifies Toolbar model properties as options.\n * @param element - Specifies the element that is rendered as a Toolbar.\n */\n function Toolbar(options, element) {\n var _this = _super.call(this, options, element) || this;\n /**\n * Contains the keyboard configuration of the Toolbar.\n */\n _this.keyConfigs = {\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n moveDown: 'downarrow',\n popupOpen: 'enter',\n popupClose: 'escape',\n tab: 'tab',\n home: 'home',\n end: 'end',\n };\n return _this;\n }\n /**\n * Removes the control from the DOM and also removes all its related events.\n * @returns void.\n */\n Toolbar.prototype.destroy = function () {\n var _this = this;\n var ele = this.element;\n _super.prototype.destroy.call(this);\n this.unwireEvents();\n while (ele.firstChild) {\n ele.removeChild(ele.firstChild);\n }\n if (this.trgtEle) {\n ele.appendChild(this.ctrlTem);\n }\n this.clearProperty();\n this.popObj = null;\n this.tbarAlign = null;\n this.remove(this.element, 'e-toolpop');\n ele.removeAttribute('style');\n ['aria-disabled', 'aria-orientation', 'aria-haspopup', 'role'].forEach(function (attrb) {\n _this.element.removeAttribute(attrb);\n });\n };\n /**\n * Initialize the event handler\n * @private\n */\n Toolbar.prototype.preRender = function () {\n this.trigger('beforeCreate');\n this.scrollModule = null;\n this.popObj = null;\n this.tbarItemsCol = this.items;\n this.popupPriCount = 0;\n if (this.enableRtl) {\n this.add(this.element, CLS_RTL);\n }\n };\n Toolbar.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n window.addEventListener('resize', this.resize.bind(this));\n this.keyModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs\n });\n EventHandler.add(this.element, 'keydown', this.docKeyDown, this);\n this.element.setAttribute('tabIndex', '0');\n };\n Toolbar.prototype.docKeyDown = function (e) {\n if (e.target.tagName === 'INPUT') {\n return;\n }\n if (e.keyCode === 9 && e.target.classList.contains('e-hor-nav') === true && isVisible(this.popObj.element)) {\n this.popObj.hide({ name: 'SlideUp', duration: 100 });\n }\n var keyCheck = (e.keyCode === 40 || e.keyCode === 38 || e.keyCode === 35 || e.keyCode === 36);\n if (keyCheck) {\n e.preventDefault();\n }\n };\n Toolbar.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.clickHandler);\n this.destroyHScroll();\n this.keyModule.destroy();\n EventHandler.remove(document, 'scroll', this.docEvent);\n EventHandler.remove(this.element, 'keydown', this.docKeyDown);\n EventHandler.remove(document, 'click', this.docEvent);\n };\n Toolbar.prototype.clearProperty = function () {\n this.tbarEle = [];\n this.tbarAlgEle = { lefts: [], centers: [], rights: [] };\n };\n Toolbar.prototype.docEvent = function (e) {\n var popEle = closest(e.target, '.e-popup');\n if (this.popObj && isVisible(this.popObj.element) && !popEle) {\n this.popObj.hide({ name: 'SlideUp', duration: 100 });\n }\n };\n Toolbar.prototype.destroyHScroll = function () {\n if (this.scrollModule) {\n if (this.tbarAlign) {\n this.add(this.scrollModule.element, CLS_TBARPOS);\n }\n this.scrollModule.destroy();\n this.scrollModule = null;\n }\n };\n Toolbar.prototype.destroyItems = function () {\n [].slice.call(this.element.querySelectorAll('.' + CLS_ITEM)).forEach(function (el) {\n detach(el);\n });\n var tbarItems = this.element.querySelector('.' + CLS_ITEMS);\n if (this.tbarAlign) {\n [].slice.call(tbarItems.children).forEach(function (el) {\n detach(el);\n });\n this.tbarAlign = false;\n this.remove(tbarItems, CLS_TBARPOS);\n }\n this.clearProperty();\n };\n Toolbar.prototype.destroyMode = function () {\n if (this.scrollModule) {\n this.remove(this.scrollModule.element, CLS_RTL);\n this.destroyHScroll();\n }\n if (this.popObj) {\n this.popupRefresh(this.popObj.element, true);\n }\n };\n Toolbar.prototype.add = function (ele, val) {\n ele.classList.add(val);\n };\n Toolbar.prototype.remove = function (ele, val) {\n ele.classList.remove(val);\n };\n Toolbar.prototype.elementFocus = function (ele) {\n var fChild = ele.firstElementChild;\n if (fChild) {\n fChild.focus();\n this.activeEleSwitch(ele);\n }\n else {\n ele.focus();\n }\n };\n Toolbar.prototype.clstElement = function (tbrNavChk, trgt) {\n var clst;\n if (tbrNavChk && this.popObj && isVisible(this.popObj.element)) {\n clst = this.popObj.element.querySelector('.' + CLS_ITEM);\n }\n else if (this.element === trgt || tbrNavChk) {\n clst = this.element.querySelector('.' + CLS_ITEM);\n }\n else {\n clst = closest(trgt, '.' + CLS_ITEM);\n }\n return clst;\n };\n Toolbar.prototype.keyHandling = function (clst, e, trgt, navChk, scrollChk) {\n var popObj = this.popObj;\n var rootEle = this.element;\n var popAnimate = { name: 'SlideUp', duration: 100 };\n switch (e.action) {\n case 'moveRight':\n if (rootEle === trgt) {\n this.elementFocus(clst);\n }\n else if (!navChk) {\n this.eleFocus(clst, 'next');\n }\n break;\n case 'moveLeft':\n if (!navChk) {\n this.eleFocus(clst, 'previous');\n }\n break;\n case 'home':\n case 'end':\n var ele = void 0;\n var nodes = void 0;\n if (clst) {\n var popupCheck = closest(clst, '.e-popup');\n if (popupCheck) {\n if (isVisible(this.popObj.element)) {\n nodes = popupCheck.children;\n if (e.action === 'home') {\n ele = nodes[0];\n }\n else {\n ele = nodes[nodes.length - 1];\n }\n }\n }\n else {\n nodes = this.element.querySelectorAll('.' + CLS_ITEMS + ' .' + CLS_ITEM);\n if (e.action === 'home') {\n ele = nodes[0];\n }\n else {\n ele = nodes[nodes.length - 1];\n }\n }\n if (ele) {\n this.elementFocus(ele);\n }\n }\n break;\n case 'moveUp':\n case 'moveDown':\n var value = e.action === 'moveUp' ? 'previous' : 'next';\n if (popObj && closest(trgt, '.e-popup')) {\n var popEle = popObj.element;\n var popFrstEle = popEle.firstElementChild;\n if ((value === 'previous' && popFrstEle === clst) || (value === 'next' && popEle.lastElementChild === clst)) {\n return;\n }\n else {\n this.eleFocus(clst, value);\n }\n }\n else if (e.action === 'moveDown' && popObj && isVisible(popObj.element)) {\n this.elementFocus(clst);\n }\n break;\n case 'tab':\n if (!scrollChk && !navChk) {\n var ele_1 = clst.firstElementChild;\n if (rootEle === trgt) {\n if (this.activeEle) {\n this.activeEle.focus();\n }\n else {\n this.activeEleRemove(ele_1);\n ele_1.focus();\n }\n this.element.removeAttribute('tabindex');\n }\n }\n break;\n case 'popupClose':\n if (popObj) {\n popObj.hide(popAnimate);\n }\n break;\n case 'popupOpen':\n if (!navChk) {\n return;\n }\n if (popObj && !isVisible(popObj.element)) {\n popObj.element.style.top = rootEle.offsetHeight + 'px';\n popObj.show({ name: 'SlideDown', duration: 100 });\n }\n else {\n popObj.hide(popAnimate);\n }\n break;\n }\n };\n Toolbar.prototype.keyActionHandler = function (e) {\n var trgt = e.target;\n if (trgt.tagName === 'INPUT') {\n return;\n }\n e.preventDefault();\n var clst;\n var tbrNavChk = trgt.classList.contains(CLS_TBARNAV);\n var tbarScrollChk = trgt.classList.contains(CLS_TBARSCRLNAV);\n clst = this.clstElement(tbrNavChk, trgt);\n if (clst || tbarScrollChk) {\n this.keyHandling(clst, e, trgt, tbrNavChk, tbarScrollChk);\n }\n };\n Toolbar.prototype.eleFocus = function (closest, pos) {\n var sib = Object(closest)[pos + 'ElementSibling'];\n var contains = function (el) {\n return el.classList.contains(CLS_SEPARATOR) || el.classList.contains(CLS_DISABLE);\n };\n if (sib) {\n var skipEle = contains(sib);\n if (skipEle) {\n if (Object(sib)[pos + 'ElementSibling']) {\n sib = Object(sib)[pos + 'ElementSibling'];\n skipEle = contains(sib);\n if (skipEle) {\n this.eleFocus(sib, pos);\n return;\n }\n }\n }\n this.elementFocus(sib);\n }\n else if (this.tbarAlign) {\n var elem = Object(closest.parentElement)[pos + 'ElementSibling'];\n if (!isNOU(elem) && elem.children.length === 0) {\n elem = Object(elem)[pos + 'ElementSibling'];\n }\n if (!isNOU(elem) && elem.children.length > 0) {\n if (pos === 'next') {\n var el = elem.querySelector('.' + CLS_ITEM);\n if (contains(el)) {\n this.eleFocus(el, pos);\n }\n else {\n el.firstElementChild.focus();\n this.activeEleSwitch(el);\n }\n }\n else {\n var el = elem.lastElementChild;\n if (contains(el)) {\n this.eleFocus(el, pos);\n }\n else {\n this.elementFocus(el);\n }\n }\n }\n }\n };\n Toolbar.prototype.clickHandler = function (e) {\n var trgt = e.target;\n var clsList = trgt.classList;\n var ele = this.element;\n var isPopupElement = !isNOU(closest(trgt, '.' + CLS_POPUPCLASS));\n var popupNav = closest(trgt, ('.' + CLS_TBARNAV));\n if (!popupNav) {\n popupNav = trgt;\n }\n if (!ele.children[0].classList.contains('e-hscroll') && (clsList.contains(CLS_TBARNAV))) {\n clsList = trgt.querySelector('.e-icons').classList;\n }\n if (clsList.contains(CLS_POPUPICON) || clsList.contains(CLS_POPUPDOWN)) {\n this.popupClickHandler(ele, popupNav, CLS_RTL);\n }\n var itemObj;\n var clst = closest(e.target, '.' + CLS_ITEM);\n if ((isNOU(clst) || clst.classList.contains(CLS_DISABLE)) && !popupNav.classList.contains(CLS_TBARNAV)) {\n return;\n }\n if (clst) {\n itemObj = this.items[this.tbarEle.indexOf(clst)];\n }\n var eventArgs = { originalEvent: e, item: itemObj };\n this.trigger('clicked', eventArgs);\n if (isPopupElement && !eventArgs.cancel) {\n this.popObj.hide({ name: 'SlideUp', duration: 100 });\n }\n };\n ;\n Toolbar.prototype.popupClickHandler = function (ele, popupNav, CLS_RTL) {\n var popObj = this.popObj;\n if (isVisible(popObj.element)) {\n popupNav.classList.remove(CLS_TBARNAVACT);\n popObj.hide({ name: 'SlideUp', duration: 100 });\n }\n else {\n if (ele.classList.contains(CLS_RTL)) {\n popObj.enableRtl = true;\n popObj.position = { X: 'left', Y: 'top' };\n }\n if (popObj.offsetX === 0 && !ele.classList.contains(CLS_RTL)) {\n popObj.enableRtl = false;\n popObj.position = { X: 'right', Y: 'top' };\n }\n popObj.dataBind();\n popObj.refreshPosition();\n popObj.element.style.top = this.element.offsetHeight + 'px';\n popupNav.classList.add(CLS_TBARNAVACT);\n popObj.show({ name: 'SlideDown', duration: 100 });\n }\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Toolbar.prototype.render = function () {\n this.initialize();\n this.renderControl();\n this.wireEvents();\n };\n Toolbar.prototype.initialize = function () {\n var width = formatUnit(this.width);\n var height = formatUnit(this.height);\n if (Browser.info.name !== 'msie' || this.height !== 'auto') {\n setStyle(this.element, { 'height': height });\n }\n setStyle(this.element, { 'width': width });\n var ariaAttr = {\n 'role': 'toolbar', 'aria-disabled': 'false', 'aria-haspopup': 'false', 'aria-orientation': 'horizontal',\n };\n attributes(this.element, ariaAttr);\n };\n Toolbar.prototype.renderControl = function () {\n this.trgtEle = (this.element.children.length > 0) ? this.element.querySelector('div') : null;\n this.tbarAlgEle = { lefts: [], centers: [], rights: [] };\n this.renderItems();\n this.renderOverflowMode();\n if (this.tbarAlign) {\n this.itemPositioning();\n }\n if (this.popObj && this.popObj.element.childElementCount > 1 && this.checkPopupRefresh(this.element, this.popObj.element)) {\n this.popupRefresh(this.popObj.element, false);\n }\n };\n Toolbar.prototype.initHScroll = function (element, innerItems) {\n if (!this.scrollModule && this.checkOverflow(element, innerItems[0])) {\n if (this.tbarAlign) {\n this.element.querySelector('.' + CLS_ITEMS + ' .' + CLS_TBARCENTER).removeAttribute('style');\n }\n this.scrollModule = new HScroll({ scrollStep: 50, enableRtl: this.enableRtl }, innerItems[0]);\n this.remove(this.scrollModule.element, CLS_TBARPOS);\n setStyle(this.element, { overflow: 'hidden' });\n }\n };\n Toolbar.prototype.itemWidthCal = function (items) {\n var width = 0;\n [].slice.call(selectAll('.' + CLS_ITEM, items)).forEach(function (el) {\n if (isVisible(el)) {\n width += (el.offsetWidth + parseFloat(window.getComputedStyle(el).marginRight));\n }\n });\n return width;\n };\n Toolbar.prototype.checkOverflow = function (element, innerItem) {\n if (isNOU(element) || isNOU(innerItem) || !isVisible(element)) {\n return false;\n }\n var eleWidth = element.offsetWidth;\n var itemWidth;\n if (this.tbarAlign || this.scrollModule) {\n itemWidth = this.itemWidthCal(this.scrollModule ? innerItem.querySelector('.e-hscroll-content') : innerItem);\n }\n else {\n itemWidth = innerItem.offsetWidth;\n }\n var popNav = element.querySelector('.' + CLS_TBARNAV);\n var scrollNav = element.querySelector('.' + CLS_TBARSCRLNAV);\n if (itemWidth > eleWidth - (popNav ? popNav.offsetWidth : (scrollNav ? scrollNav.offsetWidth * 2 : 0))) {\n return true;\n }\n else {\n return false;\n }\n };\n /** @hidden */\n Toolbar.prototype.refreshOverflow = function () {\n this.resize();\n };\n Toolbar.prototype.renderOverflowMode = function () {\n var ele = this.element;\n var innerItems = ele.querySelector('.' + CLS_ITEMS);\n var priorityCheck = this.popupPriCount > 0;\n if (ele && ele.children.length > 0) {\n this.offsetWid = ele.offsetWidth;\n this.remove(this.element, 'e-toolpop');\n switch (this.overflowMode) {\n case 'Scrollable':\n this.destroyHScroll();\n this.initHScroll(ele, ele.getElementsByClassName(CLS_ITEMS));\n break;\n case 'Popup':\n this.add(this.element, 'e-toolpop');\n if (this.tbarAlign) {\n this.removePositioning();\n }\n if (this.checkOverflow(ele, innerItems) || priorityCheck) {\n this.createPopupEle(ele, [].slice.call(selectAll('.' + CLS_ITEMS + ' .' + CLS_ITEM, ele)));\n this.element.querySelector('.' + CLS_TBARNAV).setAttribute('tabIndex', '0');\n }\n if (this.tbarAlign) {\n this.add(innerItems, CLS_TBARPOS);\n this.itemPositioning();\n }\n break;\n }\n }\n };\n Toolbar.prototype.createPopupEle = function (ele, innerEle) {\n var innerNav = ele.querySelector('.' + CLS_TBARNAV);\n if (!innerNav) {\n this.createPopupIcon(ele);\n }\n innerNav = ele.querySelector('.' + CLS_TBARNAV);\n var eleWidth = (ele.offsetWidth - (innerNav.offsetWidth));\n this.element.classList.remove('e-rtl');\n setStyle(this.element, { direction: 'initial' });\n this.checkPriority(ele, innerEle, eleWidth, true);\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n this.element.style.removeProperty('direction');\n this.createPopup();\n };\n Toolbar.prototype.pushingPoppedEle = function (tbarObj, popupPri, ele, eleHeight) {\n var element = tbarObj.element;\n var nodes = selectAll('.' + CLS_TBAROVERFLOW, ele);\n var nodeIndex = 0;\n var poppedEle = [].slice.call(selectAll('.' + CLS_POPUP, element.querySelector('.' + CLS_ITEMS)));\n var nodePri = 0;\n poppedEle.forEach(function (el, index) {\n nodes = selectAll('.' + CLS_TBAROVERFLOW, ele);\n if (el.classList.contains(CLS_TBAROVERFLOW) && nodes.length > 0) {\n if (tbarObj.tbResize && nodes.length > index) {\n ele.insertBefore(el, nodes[index]);\n ++nodePri;\n }\n else {\n ele.insertBefore(el, ele.children[nodes.length]);\n ++nodePri;\n }\n }\n else if (el.classList.contains(CLS_TBAROVERFLOW)) {\n ele.insertBefore(el, ele.firstChild);\n ++nodePri;\n }\n else if (tbarObj.tbResize && el.classList.contains(CLS_POPOVERFLOW) && ele.children.length > 0 && nodes.length === 0) {\n ele.insertBefore(el, ele.firstChild);\n ++nodePri;\n }\n else if (el.classList.contains(CLS_POPOVERFLOW)) {\n popupPri.push(el);\n }\n else if (tbarObj.tbResize) {\n ele.insertBefore(el, ele.childNodes[nodeIndex + nodePri]);\n ++nodeIndex;\n }\n else {\n ele.appendChild(el);\n }\n setStyle(el, { display: '', height: eleHeight + 'px' });\n });\n popupPri.forEach(function (el) {\n ele.appendChild(el);\n });\n var tbarEle = selectAll('.' + CLS_ITEM, element.querySelector('.' + CLS_ITEMS));\n for (var i = tbarEle.length - 1; i >= 0; i--) {\n var tbarElement = tbarEle[i];\n if (tbarElement.classList.contains(CLS_SEPARATOR)) {\n setStyle(tbarElement, { display: 'none' });\n }\n else {\n break;\n }\n }\n };\n Toolbar.prototype.createPopup = function () {\n var element = this.element;\n var eleHeight;\n var eleItem;\n eleItem = element.querySelector('.' + CLS_ITEM + ':not(.' + CLS_SEPARATOR + ' ):not(.' + CLS_POPUP + ' )');\n eleHeight = (element.style.height === 'auto' || element.style.height === '') ? null : eleItem.offsetHeight;\n var ele;\n var popupPri = [];\n if (element.querySelector('#' + element.id + '_popup.' + CLS_POPUPCLASS)) {\n ele = element.querySelector('#' + element.id + '_popup.' + CLS_POPUPCLASS);\n }\n else {\n ele = buildTag('div', { id: element.id + '_popup', className: CLS_POPUPCLASS });\n }\n this.pushingPoppedEle(this, popupPri, ele, eleHeight);\n this.popupInit(element, ele);\n };\n Toolbar.prototype.popupInit = function (element, ele) {\n if (!this.popObj) {\n element.appendChild(ele);\n setStyle(this.element, { overflow: '' });\n var popup = new Popup(null, {\n relateTo: this.element,\n offsetY: (element.offsetHeight),\n enableRtl: this.enableRtl,\n open: this.popupOpen.bind(this),\n close: this.popupClose,\n position: this.enableRtl ? { X: 'left', Y: 'top' } : { X: 'right', Y: 'top' }\n });\n popup.appendTo(ele);\n EventHandler.add(document, 'scroll', this.docEvent.bind(this));\n EventHandler.add(document, 'click ', this.docEvent.bind(this));\n popup.element.style.maxHeight = popup.element.offsetHeight + 'px';\n popup.hide();\n this.popObj = popup;\n this.element.setAttribute('aria-haspopup', 'true');\n }\n else {\n var popupEle = this.popObj.element;\n setStyle(popupEle, { maxHeight: '', display: 'block' });\n setStyle(popupEle, { maxHeight: popupEle.offsetHeight + 'px', display: '' });\n }\n };\n Toolbar.prototype.popupOpen = function (e) {\n var popObj = this.popObj;\n var popupEle = this.popObj.element;\n var toolEle = this.popObj.element.parentElement;\n var popupNav = toolEle.querySelector('.' + CLS_TBARNAV);\n setStyle(popObj.element, { height: 'auto', maxHeight: '' });\n popObj.element.style.maxHeight = popObj.element.offsetHeight + 'px';\n var popupElePos = popupEle.offsetTop + popupEle.offsetHeight + calculatePosition(toolEle).top;\n var popIcon = popupNav.firstElementChild;\n popupNav.classList.add(CLS_TBARNAVACT);\n classList(popIcon, [CLS_POPUPICON], [CLS_POPUPDOWN]);\n var scrollVal = isNOU(window.scrollY) ? 0 : window.scrollY;\n if ((window.innerHeight + scrollVal) < popupElePos) {\n var overflowHeight = (popupEle.offsetHeight - ((popupElePos - window.innerHeight - scrollVal) + 5));\n popObj.height = overflowHeight + 'px';\n for (var i = 0; i <= popupEle.childElementCount; i++) {\n var ele = popupEle.children[i];\n if (ele.offsetTop + ele.offsetHeight > overflowHeight) {\n overflowHeight = ele.offsetTop;\n break;\n }\n }\n setStyle(popObj.element, { maxHeight: overflowHeight + 'px' });\n }\n };\n Toolbar.prototype.popupClose = function (e) {\n var element = this.element.parentElement;\n var popupNav = element.querySelector('.' + CLS_TBARNAV);\n var popIcon = popupNav.firstElementChild;\n popupNav.classList.remove(CLS_TBARNAVACT);\n classList(popIcon, [CLS_POPUPDOWN], [CLS_POPUPICON]);\n };\n Toolbar.prototype.checkPriority = function (ele, inEle, eleWidth, pre) {\n var popPriority = this.popupPriCount > 0;\n var len = inEle.length;\n var eleWid = eleWidth;\n var sepCheck = 0;\n var itemCount = 0;\n var itemPopCount = 0;\n var checkClass = function (ele, val) {\n var rVal = false;\n val.forEach(function (cls) {\n if (ele.classList.contains(cls)) {\n rVal = true;\n }\n });\n return rVal;\n };\n for (var i = len - 1; i >= 0; i--) {\n var mrgn = parseFloat((window.getComputedStyle(inEle[i])).marginRight);\n mrgn += parseFloat((window.getComputedStyle(inEle[i])).marginLeft);\n var fstEleCheck = inEle[i] === this.tbarEle[0];\n if (fstEleCheck) {\n this.tbarEleMrgn = mrgn;\n }\n var eleWid_1 = fstEleCheck ? (inEle[i].offsetWidth + mrgn) : inEle[i].offsetWidth;\n if (checkClass(inEle[i], [CLS_POPPRI]) && popPriority) {\n inEle[i].classList.add(CLS_POPUP);\n setStyle(inEle[i], { display: 'none', minWidth: eleWid_1 + 'px' });\n itemPopCount++;\n }\n if ((inEle[i].offsetLeft + inEle[i].offsetWidth + mrgn) > eleWidth) {\n if (inEle[i].classList.contains(CLS_SEPARATOR)) {\n if (sepCheck > 0 && itemCount === itemPopCount) {\n var sepEle = inEle[i + itemCount + (sepCheck - 1)];\n if (checkClass(sepEle, [CLS_SEPARATOR, CLS_TBARIGNORE])) {\n setStyle(sepEle, { display: 'none' });\n }\n }\n sepCheck++;\n itemCount = 0;\n itemPopCount = 0;\n }\n else {\n itemCount++;\n }\n if (inEle[i].classList.contains(CLS_TBAROVERFLOW) && pre) {\n eleWidth -= (inEle[i].offsetWidth + (mrgn));\n }\n else if (!checkClass(inEle[i], [CLS_SEPARATOR, CLS_TBARIGNORE])) {\n inEle[i].classList.add(CLS_POPUP);\n setStyle(inEle[i], { display: 'none', minWidth: eleWid_1 + 'px' });\n itemPopCount++;\n }\n else {\n eleWidth -= (inEle[i].offsetWidth + (mrgn));\n }\n }\n }\n if (pre) {\n var popedEle = selectAll('.' + CLS_ITEM + ':not(.' + CLS_POPUP + ')', this.element);\n this.checkPriority(ele, popedEle, eleWid, false);\n }\n };\n Toolbar.prototype.createPopupIcon = function (element) {\n var id = element.id.concat('_nav');\n var className = 'e-' + element.id.concat('_nav ' + CLS_POPUPNAV);\n var nav = buildTag('div', { id: id, className: className });\n if (Browser.info.name === 'msie' || Browser.info.name === 'edge') {\n nav.classList.add('e-ie-align');\n }\n var navItem = buildTag('div', { className: CLS_POPUPDOWN + ' e-icons' });\n nav.appendChild(navItem);\n nav.setAttribute('tabindex', '0');\n element.appendChild(nav);\n };\n Toolbar.prototype.tbarPriRef = function (inEle, indx, sepPri, el, des, elWid, wid, ig) {\n var ignoreCount = ig;\n var popEle = this.popObj.element;\n var query = '.' + CLS_ITEM + ':not(.' + CLS_SEPARATOR + '):not(.' + CLS_TBAROVERFLOW + ')';\n var priEleCnt = selectAll('.' + CLS_POPUP + ':not(.' + CLS_TBAROVERFLOW + ')', popEle).length;\n var checkClass = function (ele, val) {\n return ele.classList.contains(val);\n };\n if (selectAll(query, inEle).length === 0) {\n var eleSep = inEle.children[indx - (indx - sepPri) - 1];\n var ignoreCheck = (!isNOU(eleSep) && checkClass(eleSep, CLS_TBARIGNORE));\n if ((!isNOU(eleSep) && checkClass(eleSep, CLS_SEPARATOR) && !isVisible(eleSep)) || ignoreCheck) {\n var sepDisplay = 'none';\n eleSep.style.display = 'inherit';\n var eleSepWidth = eleSep.offsetWidth + (parseFloat(window.getComputedStyle(eleSep).marginRight) * 2);\n var prevSep = eleSep.previousElementSibling;\n if ((elWid + eleSepWidth) < wid || des) {\n inEle.insertBefore(el, inEle.children[(indx + ignoreCount) - (indx - sepPri)]);\n if (!isNOU(prevSep)) {\n prevSep.style.display = '';\n }\n }\n else {\n if (prevSep.classList.contains(CLS_SEPARATOR)) {\n prevSep.style.display = sepDisplay;\n }\n }\n eleSep.style.display = '';\n }\n else {\n inEle.insertBefore(el, inEle.children[(indx + ignoreCount) - (indx - sepPri)]);\n }\n }\n else {\n inEle.insertBefore(el, inEle.children[(indx + ignoreCount) - priEleCnt]);\n }\n };\n Toolbar.prototype.popupRefresh = function (popupEle, destroy) {\n var ele = this.element;\n var popNav = ele.querySelector('.' + CLS_TBARNAV);\n var innerEle = ele.querySelector('.' + CLS_ITEMS);\n if (isNOU(popNav)) {\n return;\n }\n innerEle.removeAttribute('style');\n popupEle.style.display = 'block';\n var width = ele.offsetWidth - (popNav.offsetWidth + innerEle.offsetWidth);\n this.popupEleRefresh(width, popupEle, destroy);\n popupEle.style.display = '';\n if (popupEle.children.length === 0 && popNav && this.popObj) {\n detach(popNav);\n popNav = null;\n this.popObj.destroy();\n detach(this.popObj.element);\n this.popObj = null;\n ele.setAttribute('aria-haspopup', 'false');\n ele.classList.remove('e-toolpop');\n }\n };\n Toolbar.prototype.ignoreEleFetch = function (index, innerEle) {\n var ignoreEle = [].slice.call(innerEle.querySelectorAll('.' + CLS_TBARIGNORE));\n var ignoreInx = [];\n var count = 0;\n if (ignoreEle.length > 0) {\n ignoreEle.forEach(function (ele) {\n ignoreInx.push([].slice.call(innerEle.children).indexOf(ele));\n });\n }\n else {\n return 0;\n }\n ignoreInx.forEach(function (val) {\n if (val <= index) {\n count++;\n }\n });\n return count;\n };\n Toolbar.prototype.checkPopupRefresh = function (root, popEle) {\n popEle.style.display = 'block';\n var elWid = this.popupEleWidth(popEle.firstElementChild);\n popEle.firstElementChild.style.removeProperty('Position');\n var tbarWidth = root.offsetWidth - root.querySelector('.' + CLS_TBARNAV).offsetWidth;\n var tbarItemsWid = root.querySelector('.' + CLS_ITEMS).offsetWidth;\n popEle.style.removeProperty('display');\n if (tbarWidth > (elWid + tbarItemsWid)) {\n return true;\n }\n return false;\n };\n Toolbar.prototype.popupEleWidth = function (el) {\n el.style.position = 'absolute';\n var elWidth = el.offsetWidth;\n var btnText = el.querySelector('.' + CLS_TBARBTNTEXT);\n if (el.classList.contains('e-tbtn-align') || el.classList.contains(CLS_TBARTEXT)) {\n var btn = el.children[0];\n if (!isNOU(btnText) && el.classList.contains(CLS_TBARTEXT)) {\n btnText.style.display = 'none';\n }\n else if (!isNOU(btnText) && el.classList.contains(CLS_POPUPTEXT)) {\n btnText.style.display = 'block';\n }\n btn.style.minWidth = '0%';\n elWidth = parseFloat(el.style.minWidth);\n btn.style.minWidth = '';\n if (!isNOU(btnText)) {\n btnText.style.display = '';\n }\n }\n return elWidth;\n };\n Toolbar.prototype.popupEleRefresh = function (width, popupEle, destroy) {\n var popPriority = this.popupPriCount > 0;\n var eleSplice = this.tbarEle;\n var priEleCnt;\n var index;\n var checkOverflow;\n var innerEle = this.element.querySelector('.' + CLS_ITEMS);\n var ignoreCount = 0;\n var _loop_1 = function (el) {\n if (el.classList.contains(CLS_POPPRI) && popPriority && !destroy) {\n return \"continue\";\n }\n var elWidth = this_1.popupEleWidth(el);\n if (el === this_1.tbarEle[0]) {\n elWidth += this_1.tbarEleMrgn;\n }\n el.style.position = '';\n if (elWidth < width || destroy) {\n el.style.minWidth = '';\n if (!el.classList.contains(CLS_POPOVERFLOW)) {\n el.classList.remove(CLS_POPUP);\n }\n index = this_1.tbarEle.indexOf(el);\n if (this_1.tbarAlign) {\n var pos = this_1.items[index].align;\n index = this_1.tbarAlgEle[(pos + 's').toLowerCase()].indexOf(el);\n eleSplice = this_1.tbarAlgEle[(pos + 's').toLowerCase()];\n innerEle = this_1.element.querySelector('.' + CLS_ITEMS + ' .' + 'e-toolbar-' + pos.toLowerCase());\n }\n var sepBeforePri_1 = 0;\n eleSplice.slice(0, index).forEach(function (el) {\n if (el.classList.contains(CLS_TBAROVERFLOW) || el.classList.contains(CLS_SEPARATOR)) {\n if (el.classList.contains(CLS_SEPARATOR)) {\n el.style.display = '';\n width -= el.offsetWidth;\n }\n sepBeforePri_1++;\n }\n });\n ignoreCount = this_1.ignoreEleFetch(index, innerEle);\n if (el.classList.contains(CLS_TBAROVERFLOW)) {\n this_1.tbarPriRef(innerEle, index, sepBeforePri_1, el, destroy, elWidth, width, ignoreCount);\n width -= el.offsetWidth;\n }\n else if (index === 0) {\n innerEle.insertBefore(el, innerEle.firstChild);\n width -= el.offsetWidth;\n }\n else {\n priEleCnt = selectAll('.' + CLS_TBAROVERFLOW, this_1.popObj.element).length;\n innerEle.insertBefore(el, innerEle.children[(index + ignoreCount) - priEleCnt]);\n width -= el.offsetWidth;\n }\n el.style.height = '';\n }\n else {\n return \"break\";\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = [].slice.call(popupEle.children); _i < _a.length; _i++) {\n var el = _a[_i];\n var state_1 = _loop_1(el);\n if (state_1 === \"break\")\n break;\n }\n checkOverflow = this.checkOverflow(this.element, this.element.getElementsByClassName(CLS_ITEMS)[0]);\n if (checkOverflow && !destroy) {\n this.renderOverflowMode();\n }\n };\n Toolbar.prototype.removePositioning = function () {\n var item = this.element.querySelector('.' + CLS_ITEMS);\n if (isNOU(item) || !item.classList.contains(CLS_TBARPOS)) {\n return;\n }\n this.remove(item, CLS_TBARPOS);\n var innerItem = [].slice.call(item.childNodes);\n innerItem[1].removeAttribute('style');\n innerItem[2].removeAttribute('style');\n };\n Toolbar.prototype.refreshPositioning = function () {\n var item = this.element.querySelector('.' + CLS_ITEMS);\n this.add(item, CLS_TBARPOS);\n this.itemPositioning();\n };\n Toolbar.prototype.itemPositioning = function () {\n var item = this.element.querySelector('.' + CLS_ITEMS);\n if (isNOU(item) || !item.classList.contains(CLS_TBARPOS)) {\n return;\n }\n var popupNav = this.element.querySelector('.' + CLS_TBARNAV);\n var innerItem;\n if (this.scrollModule) {\n innerItem = [].slice.call(item.querySelector('.' + CLS_TBARSCROLL).children);\n }\n else {\n innerItem = [].slice.call(item.childNodes);\n }\n var margin = innerItem[0].offsetWidth + innerItem[2].offsetWidth;\n var tbarWid = this.element.offsetWidth;\n if (popupNav) {\n tbarWid -= popupNav.offsetWidth;\n var popWid = popupNav.offsetWidth + 'px';\n innerItem[2].removeAttribute('style');\n this.enableRtl ? innerItem[2].style.left = popWid : innerItem[2].style.right = popWid;\n }\n if (tbarWid <= margin) {\n return;\n }\n var value = (((tbarWid - margin)) - innerItem[1].offsetWidth) / 2;\n innerItem[1].removeAttribute('style');\n var mrgn = (innerItem[0].offsetWidth + value) + 'px';\n this.enableRtl ? innerItem[1].style.marginRight = mrgn : innerItem[1].style.marginLeft = mrgn;\n };\n Toolbar.prototype.tbarItemAlign = function (item, itemEle, pos) {\n var _this = this;\n if (item.showAlwaysInPopup && item.overflow !== 'Show') {\n return;\n }\n var alignDiv = [];\n alignDiv.push(buildTag('div', { className: CLS_TBARLEFT }));\n alignDiv.push(buildTag('div', { className: CLS_TBARCENTER }));\n alignDiv.push(buildTag('div', { className: CLS_TBARRIGHT }));\n if (pos === 0 && item.align !== 'Left') {\n alignDiv.forEach(function (ele) {\n itemEle.appendChild(ele);\n });\n this.tbarAlign = true;\n this.add(itemEle, CLS_TBARPOS);\n }\n else if (item.align !== 'Left') {\n var alignEle = itemEle.childNodes;\n var leftAlign_1 = alignDiv[0];\n [].slice.call(alignEle).forEach(function (el) {\n _this.tbarAlgEle.lefts.push(el);\n leftAlign_1.appendChild(el);\n });\n itemEle.appendChild(leftAlign_1);\n itemEle.appendChild(alignDiv[1]);\n itemEle.appendChild(alignDiv[2]);\n this.tbarAlign = true;\n this.add(itemEle, CLS_TBARPOS);\n }\n };\n Toolbar.prototype.ctrlTemplate = function () {\n var _this = this;\n this.ctrlTem = this.trgtEle.cloneNode(true);\n this.add(this.trgtEle, CLS_ITEMS);\n this.tbarEle = [];\n var innerEle = [].slice.call(this.trgtEle.children);\n innerEle.forEach(function (ele) {\n if (ele.tagName === 'DIV') {\n _this.tbarEle.push(ele);\n ele.setAttribute('aria-disabled', 'false');\n _this.add(ele, CLS_ITEM);\n }\n });\n };\n Toolbar.prototype.renderItems = function () {\n var ele = this.element;\n var itemEleDom;\n var innerItem;\n var innerPos;\n var items = this.items;\n if (ele && ele.children.length > 0) {\n itemEleDom = ele.querySelector('.' + CLS_ITEMS);\n }\n if (this.trgtEle != null) {\n this.ctrlTemplate();\n }\n else if (ele && items.length > 0) {\n if (!itemEleDom) {\n itemEleDom = buildTag('div', { className: CLS_ITEMS });\n }\n for (var i = 0; i < items.length; i++) {\n innerItem = this.renderSubComponent(items[i]);\n if (this.tbarEle.indexOf(innerItem) === -1) {\n this.tbarEle.push(innerItem);\n }\n if (!this.tbarAlign) {\n this.tbarItemAlign(items[i], itemEleDom, i);\n }\n innerPos = itemEleDom.querySelector('.e-toolbar-' + items[i].align.toLowerCase());\n if (innerPos) {\n if (!(items[i].showAlwaysInPopup && items[i].overflow !== 'Show')) {\n this.tbarAlgEle[(items[i].align + 's').toLowerCase()].push(innerItem);\n }\n innerPos.appendChild(innerItem);\n }\n else {\n itemEleDom.appendChild(innerItem);\n }\n }\n ele.appendChild(itemEleDom);\n }\n };\n Toolbar.prototype.setAttr = function (attr, element) {\n var key = Object.keys(attr);\n var keyVal;\n for (var i = 0; i < key.length; i++) {\n keyVal = key[i];\n keyVal === 'class' ? this.add(element, attr[keyVal]) : element.setAttribute(keyVal, attr[keyVal]);\n }\n };\n /**\n * Enables or disables the specified Toolbar item.\n * @param {HTMLElement|NodeList} items - DOM element or an array of items to be enabled or disabled.\n * @param {boolean} isEnable - Boolean value that determines whether the command should be enabled or disabled.\n * By default, `isEnable` is set to true.\n * @returns void.\n */\n Toolbar.prototype.enableItems = function (items, isEnable) {\n var elements = items;\n var len = elements.length;\n if (isNOU(isEnable)) {\n isEnable = true;\n }\n var enable = function (isEnable, ele) {\n if (isEnable) {\n ele.classList.remove(CLS_DISABLE);\n ele.setAttribute('aria-disabled', 'false');\n }\n else {\n ele.classList.add(CLS_DISABLE);\n ele.setAttribute('aria-disabled', 'true');\n }\n };\n if (len && len > 1) {\n for (var _i = 0, _a = [].slice.call(elements); _i < _a.length; _i++) {\n var ele = _a[_i];\n enable(isEnable, ele);\n }\n isEnable ? removeClass(elements, CLS_DISABLE) : addClass(elements, CLS_DISABLE);\n }\n else {\n var ele = void 0;\n ele = (len && len === 1) ? elements[0] : items;\n enable(isEnable, ele);\n }\n };\n /**\n * Adds new items to the Toolbar that accepts an array as Toolbar items.\n * @param {ItemsModel[]} items - DOM element or an array of items to be added to the Toolbar.\n * @param {number} index - Number value that determines where the command is to be added. By default, index is 0.\n * @returns void.\n */\n Toolbar.prototype.addItems = function (items, index) {\n var innerItems;\n var itemsDiv = this.element.querySelector('.' + CLS_ITEMS);\n var innerEle;\n var itemAgn = 'Left';\n if (isNOU(index)) {\n index = 0;\n }\n items.forEach(function (e) {\n if (!isNOU(e.align) && e.align !== 'Left' && itemAgn === 'Left') {\n itemAgn = e.align;\n }\n });\n for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {\n var item = items_1[_i];\n if (isNOU(item.type)) {\n item.type = 'Button';\n }\n innerItems = selectAll('.' + CLS_ITEM, this.element);\n item.align = itemAgn;\n innerEle = this.renderSubComponent(item);\n if (this.tbarEle.length >= index && innerItems.length > 0) {\n this.destroyMode();\n var algIndex = item.align[0] === 'L' ? 0 : item.align[0] === 'C' ? 1 : 2;\n var ele = void 0;\n if (!this.tbarAlign && itemAgn !== 'Left') {\n this.tbarItemAlign(item, itemsDiv, 1);\n this.tbarAlign = true;\n ele = closest(innerItems[0], '.' + CLS_ITEMS).children[algIndex];\n ele.appendChild(innerEle);\n this.tbarAlgEle[(item.align + 's').toLowerCase()].push(innerEle);\n this.refreshPositioning();\n }\n else if (this.tbarAlign) {\n ele = closest(innerItems[0], '.' + CLS_ITEMS).children[algIndex];\n ele.insertBefore(innerEle, ele.children[index]);\n this.tbarAlgEle[(item.align + 's').toLowerCase()].splice(index, 0, innerEle);\n this.refreshPositioning();\n }\n else {\n innerItems[0].parentNode.insertBefore(innerEle, innerItems[index]);\n }\n this.items.splice(index, 0, item);\n this.tbarEle.splice(index, 0, innerEle);\n index++;\n this.offsetWid = itemsDiv.offsetWidth;\n }\n }\n itemsDiv.style.width = '';\n this.renderOverflowMode();\n };\n /**\n * Removes the items from the Toolbar. Acceptable arguments are index of item/HTMLElement/node list.\n * @param {number|HTMLElement|NodeList|HTMLElement[]} args\n * Index or DOM element or an Array of item which is to be removed from the Toolbar.\n * @returns void.\n */\n Toolbar.prototype.removeItems = function (args) {\n var elements = args;\n var index;\n var innerItems = [].slice.call(selectAll('.' + CLS_ITEM, this.element));\n if (typeof (elements) === 'number') {\n index = parseInt(args.toString(), 10);\n this.removeItemByIndex(index, innerItems);\n }\n else {\n if (elements && elements.length > 1) {\n for (var _i = 0, _a = [].slice.call(elements); _i < _a.length; _i++) {\n var ele = _a[_i];\n index = this.tbarEle.indexOf(ele);\n this.removeItemByIndex(index, innerItems);\n innerItems = selectAll('.' + CLS_ITEM, this.element);\n }\n }\n else {\n var ele = (elements && elements.length && elements.length === 1) ? elements[0] : args;\n index = innerItems.indexOf(ele);\n this.removeItemByIndex(index, innerItems);\n }\n }\n this.resize();\n };\n Toolbar.prototype.removeItemByIndex = function (index, innerItems) {\n if (this.tbarEle[index] && innerItems[index]) {\n var eleIdx = this.tbarEle.indexOf(innerItems[index]);\n if (this.tbarAlign) {\n var indexAgn = void 0;\n indexAgn = this.tbarAlgEle[(this.items[eleIdx].align + 's').toLowerCase()].indexOf(this.tbarEle[eleIdx]);\n this.tbarAlgEle[(this.items[eleIdx].align + 's').toLowerCase()].splice(indexAgn, 1);\n }\n detach(innerItems[index]);\n this.items.splice(eleIdx, 1);\n this.tbarEle.splice(eleIdx, 1);\n }\n };\n Toolbar.prototype.templateRender = function (templateProp, innerEle, item) {\n var itemType = item.type;\n var eleObj = templateProp;\n var isComponent;\n if (typeof (templateProp) === 'object') {\n isComponent = typeof (eleObj.appendTo) === 'function';\n }\n if (typeof (templateProp) === 'string' || !isComponent) {\n var templateFn = void 0;\n var val = templateProp;\n val = (typeof (templateProp) === 'string') ? templateProp.trim() : templateProp;\n var e = void 0;\n try {\n if (document.querySelectorAll(val).length) {\n var ele = document.querySelector(val);\n var tempStr = ele.outerHTML.trim();\n templateFn = templateCompiler(tempStr);\n detach(ele);\n item.template = tempStr;\n }\n }\n catch (e) {\n templateFn = templateCompiler(val);\n }\n var tempArray = void 0;\n if (!isNOU(templateFn)) {\n tempArray = templateFn({}, this, 'template');\n }\n if (!isNOU(tempArray) && tempArray.length > 0) {\n [].slice.call(tempArray).forEach(function (ele) {\n if (!isNOU(ele.tagName)) {\n ele.style.display = '';\n }\n innerEle.appendChild(ele);\n });\n }\n }\n else if (itemType === 'Input') {\n var ele = buildTag('input');\n item.id ? (ele.id = item.id) : (ele.id = getUniqueID('tbr-ipt'));\n innerEle.appendChild(ele);\n eleObj.appendTo(ele);\n }\n this.add(innerEle, CLS_TEMPLATE);\n this.tbarEle.push(innerEle);\n };\n Toolbar.prototype.buttonRendering = function (item, innerEle) {\n var dom = buildTag('button', { className: CLS_TBARBTN });\n dom.setAttribute('type', 'button');\n var textStr = item.text;\n var iconCss;\n var iconPos;\n item.id ? (dom.id = item.id) : dom.id = getUniqueID('e-tbr-btn');\n var btnTxt = buildTag('div', { className: 'e-tbar-btn-text' });\n if (textStr) {\n btnTxt.innerHTML = textStr;\n dom.appendChild(btnTxt);\n dom.classList.add('e-tbtn-txt');\n }\n else {\n this.add(innerEle, 'e-tbtn-align');\n }\n if (item.prefixIcon || item.suffixIcon) {\n if ((item.prefixIcon && item.suffixIcon) || item.prefixIcon) {\n iconCss = item.prefixIcon + ' e-icons';\n iconPos = 'Left';\n }\n else {\n iconCss = item.suffixIcon + ' e-icons';\n iconPos = 'Right';\n }\n }\n new Button({ iconCss: iconCss, iconPosition: iconPos }, dom);\n if (item.width) {\n setStyle(dom, { 'width': formatUnit(item.width) });\n }\n return dom;\n };\n Toolbar.prototype.renderSubComponent = function (item) {\n var innerEle;\n var dom;\n innerEle = buildTag('div', { className: CLS_ITEM });\n innerEle.setAttribute('aria-disabled', 'false');\n if (!this.tbarEle) {\n this.tbarEle = [];\n }\n if (item.htmlAttributes) {\n this.setAttr(item.htmlAttributes, innerEle);\n }\n if (item.tooltipText) {\n innerEle.setAttribute('title', item.tooltipText);\n }\n if (item.cssClass) {\n innerEle.className = innerEle.className + ' ' + item.cssClass;\n }\n if (item.template) {\n this.templateRender(item.template, innerEle, item);\n }\n else {\n switch (item.type) {\n case 'Button':\n dom = this.buttonRendering(item, innerEle);\n dom.setAttribute('tabindex', '-1');\n innerEle.appendChild(dom);\n innerEle.addEventListener('click', this.itemClick.bind(this));\n break;\n case 'Separator':\n this.add(innerEle, CLS_SEPARATOR);\n break;\n }\n }\n if (item.showTextOn) {\n var sTxt = item.showTextOn;\n if (sTxt === 'Toolbar') {\n this.add(innerEle, CLS_POPUPTEXT);\n this.add(innerEle, 'e-tbtn-align');\n }\n else if (sTxt === 'Overflow') {\n this.add(innerEle, CLS_TBARTEXT);\n }\n }\n if (item.overflow) {\n var overflow = item.overflow;\n if (overflow === 'Show') {\n this.add(innerEle, CLS_TBAROVERFLOW);\n }\n else if (overflow === 'Hide') {\n if (!innerEle.classList.contains(CLS_SEPARATOR)) {\n this.add(innerEle, CLS_POPOVERFLOW);\n }\n }\n }\n if (item.overflow !== 'Show' && item.showAlwaysInPopup && !innerEle.classList.contains(CLS_SEPARATOR)) {\n this.add(innerEle, CLS_POPPRI);\n this.popupPriCount++;\n }\n return innerEle;\n };\n Toolbar.prototype.itemClick = function (e) {\n this.activeEleSwitch(e.currentTarget);\n };\n Toolbar.prototype.activeEleSwitch = function (ele) {\n this.activeEleRemove(ele.firstElementChild);\n this.activeEle.focus();\n };\n Toolbar.prototype.activeEleRemove = function (curEle) {\n if (!isNOU(this.activeEle)) {\n this.activeEle.setAttribute('tabindex', '-1');\n }\n this.activeEle = curEle;\n if (isNOU(this.trgtEle) && !curEle.parentElement.classList.contains(CLS_TEMPLATE)) {\n curEle.removeAttribute('tabindex');\n }\n else {\n this.activeEle.setAttribute('tabindex', '0');\n }\n };\n Toolbar.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Returns the current module name.\n * @returns string\n * @private\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n Toolbar.prototype.itemsRerender = function (newProp) {\n this.items = this.tbarItemsCol;\n this.destroyMode();\n this.destroyItems();\n this.items = newProp;\n this.tbarItemsCol = this.items;\n this.renderItems();\n this.renderOverflowMode();\n };\n Toolbar.prototype.resize = function () {\n var ele = this.element;\n this.tbResize = true;\n if (this.tbarAlign) {\n this.itemPositioning();\n }\n if (this.popObj) {\n this.popObj.hide();\n }\n var checkOverflow = this.checkOverflow(ele, ele.getElementsByClassName(CLS_ITEMS)[0]);\n if (!checkOverflow) {\n this.destroyHScroll();\n }\n if (checkOverflow && this.scrollModule && (this.offsetWid === ele.offsetWidth)) {\n return;\n }\n if (this.offsetWid > ele.offsetWidth || checkOverflow) {\n this.renderOverflowMode();\n }\n if (this.popObj) {\n if (this.tbarAlign) {\n this.removePositioning();\n }\n this.popupRefresh(this.popObj.element, false);\n if (this.tbarAlign) {\n this.refreshPositioning();\n }\n }\n this.offsetWid = ele.offsetWidth;\n this.tbResize = false;\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of the property that changed.\n * @param {ToolbarModel} newProp\n * @param {ToolbarModel} oldProp\n * @returns void\n * @private\n */\n Toolbar.prototype.onPropertyChanged = function (newProp, oldProp) {\n var tEle = this.element;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'items':\n if (!(newProp.items instanceof Array && oldProp.items instanceof Array)) {\n var changedProb = Object.keys(newProp.items);\n for (var i = 0; i < changedProb.length; i++) {\n var index = parseInt(Object.keys(newProp.items)[i], 10);\n var property = Object.keys(newProp.items[index])[0];\n var oldProperty = Object(oldProp.items[index])[property];\n var newProperty = Object(newProp.items[index])[property];\n if (this.tbarAlign || property === 'align') {\n this.refresh();\n break;\n }\n var popupPriCheck = property === 'showAlwaysInPopup' && !newProperty;\n if ((popupPriCheck) || (this.items[index].showAlwaysInPopup) && property === 'overflow' && this.popupPriCount !== 0) {\n --this.popupPriCount;\n }\n this.destroyMode();\n var itemCol = [].slice.call(selectAll('.' + CLS_ITEMS + ' .' + CLS_ITEM, tEle));\n detach(itemCol[index]);\n this.tbarEle.splice(index, 1);\n this.addItems([this.items[index]], index);\n this.items.splice(index, 1);\n if (this.items[index].template) {\n this.tbarEle.splice(this.items.length, 1);\n }\n }\n }\n else {\n this.itemsRerender(newProp.items);\n }\n break;\n case 'width':\n var wid = tEle.offsetWidth;\n setStyle(tEle, { 'width': formatUnit(newProp.width) });\n this.renderOverflowMode();\n if (this.popObj && wid < tEle.offsetWidth) {\n this.popupRefresh(this.popObj.element, false);\n }\n break;\n case 'height':\n setStyle(this.element, { 'height': formatUnit(newProp.height) });\n break;\n case 'overflowMode':\n this.destroyMode();\n this.renderOverflowMode();\n if (this.enableRtl) {\n this.add(tEle, CLS_RTL);\n }\n this.refreshOverflow();\n break;\n case 'enableRtl':\n newProp.enableRtl ? this.add(tEle, CLS_RTL) : this.remove(tEle, CLS_RTL);\n if (!isNOU(this.scrollModule)) {\n newProp.enableRtl ? this.add(this.scrollModule.element, CLS_RTL) : this.remove(this.scrollModule.element, CLS_RTL);\n }\n if (!isNOU(this.popObj)) {\n newProp.enableRtl ? this.add(this.popObj.element, CLS_RTL) : this.remove(this.popObj.element, CLS_RTL);\n }\n if (this.tbarAlign) {\n this.itemPositioning();\n }\n break;\n }\n }\n };\n /**\n * Shows or hides the Toolbar item that is in the specified index.\n * @param {number} index - Index value of target item.\n * @param {boolean} value - Based on this Boolean value, item will be hide (true) or show (false). By default, value is false.\n * @returns void.\n */\n Toolbar.prototype.hideItem = function (index, value) {\n if (this.tbarEle[index]) {\n var innerItems = [].slice.call(selectAll('.' + CLS_ITEM, this.element));\n if (value === true) {\n innerItems[index].classList.add(CLS_HIDDEN);\n }\n else {\n innerItems[index].classList.remove(CLS_HIDDEN);\n }\n this.refreshOverflow();\n }\n };\n __decorate([\n Collection([], Item)\n ], Toolbar.prototype, \"items\", void 0);\n __decorate([\n Property('auto')\n ], Toolbar.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Toolbar.prototype, \"height\", void 0);\n __decorate([\n Property('Scrollable')\n ], Toolbar.prototype, \"overflowMode\", void 0);\n __decorate([\n Property(false)\n ], Toolbar.prototype, \"enableRtl\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"clicked\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"beforeCreate\", void 0);\n Toolbar = __decorate([\n NotifyPropertyChanges\n ], Toolbar);\n return Toolbar;\n}(Component));\nexport { Toolbar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event, KeyboardEvents, rippleEffect } from '@syncfusion/ej2-base';\nimport { getUniqueID, compile as templateCompiler } from '@syncfusion/ej2-base';\nimport { addClass, isVisible, closest, attributes, classList, detach, select } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty, Collection, Animation } from '@syncfusion/ej2-base';\nimport { createElement as buildTag, setStyleAttribute as setStyle, Complex } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, formatUnit, selectAll } from '@syncfusion/ej2-base';\nvar CLS_ACRDN_ROOT = 'e-acrdn-root';\nvar CLS_ROOT = 'e-accordion';\nvar CLS_ITEM = 'e-acrdn-item';\nvar CLS_ITEMFOCUS = 'e-item-focus';\nvar CLS_ITEMHIDE = 'e-hide';\nvar CLS_HEADER = 'e-acrdn-header';\nvar CLS_HEADERICN = 'e-acrdn-header-icon';\nvar CLS_HEADERCTN = 'e-acrdn-header-content';\nvar CLS_CONTENT = 'e-acrdn-panel';\nvar CLS_CTENT = 'e-acrdn-content';\nvar CLS_TOOGLEICN = 'e-toggle-icon';\nvar CLS_COLLAPSEICN = 'e-tgl-collapse-icon e-icons';\nvar CLS_EXPANDICN = 'e-expand-icon';\nvar CLS_RTL = 'e-rtl';\nvar CLS_CTNHIDE = 'e-content-hide';\nvar CLS_SLCT = 'e-select';\nvar CLS_SLCTED = 'e-selected';\nvar CLS_ACTIVE = 'e-active';\nvar CLS_ANIMATE = 'e-animate';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_TOGANIMATE = 'e-toggle-animation';\nvar CLS_NEST = 'e-nested';\nvar CLS_EXPANDSTATE = 'e-expand-state';\nvar AccordionActionSettings = /** @class */ (function (_super) {\n __extends(AccordionActionSettings, _super);\n function AccordionActionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('SlideDown')\n ], AccordionActionSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(400)\n ], AccordionActionSettings.prototype, \"duration\", void 0);\n __decorate([\n Property('linear')\n ], AccordionActionSettings.prototype, \"easing\", void 0);\n return AccordionActionSettings;\n}(ChildProperty));\nexport { AccordionActionSettings };\nvar AccordionAnimationSettings = /** @class */ (function (_super) {\n __extends(AccordionAnimationSettings, _super);\n function AccordionAnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ effect: 'SlideUp', duration: 400, easing: 'linear' }, AccordionActionSettings)\n ], AccordionAnimationSettings.prototype, \"collapse\", void 0);\n __decorate([\n Complex({ effect: 'SlideDown', duration: 400, easing: 'linear' }, AccordionActionSettings)\n ], AccordionAnimationSettings.prototype, \"expand\", void 0);\n return AccordionAnimationSettings;\n}(ChildProperty));\nexport { AccordionAnimationSettings };\n/**\n * An item object that is used to configure Accordion items.\n */\nvar AccordionItem = /** @class */ (function (_super) {\n __extends(AccordionItem, _super);\n function AccordionItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(undefined)\n ], AccordionItem.prototype, \"content\", void 0);\n __decorate([\n Property(undefined)\n ], AccordionItem.prototype, \"header\", void 0);\n __decorate([\n Property(undefined)\n ], AccordionItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(undefined)\n ], AccordionItem.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], AccordionItem.prototype, \"expanded\", void 0);\n return AccordionItem;\n}(ChildProperty));\nexport { AccordionItem };\n/**\n * The Accordion is a vertically collapsible content panel that displays one or more panels at a time within the available space.\n * ```html\n *
\n * \n * ```\n */\nvar Accordion = /** @class */ (function (_super) {\n __extends(Accordion, _super);\n /**\n * Initializes a new instance of the Accordion class.\n * @param options - Specifies Accordion model properties as options.\n * @param element - Specifies the element that is rendered as an Accordion.\n */\n function Accordion(options, element) {\n var _this = _super.call(this, options, element) || this;\n /**\n * Contains the keyboard configuration of the Accordion.\n */\n _this.keyConfigs = {\n moveUp: 'uparrow',\n moveDown: 'downarrow',\n enter: 'enter',\n space: 'space',\n home: 'home',\n end: 'end',\n };\n return _this;\n }\n /**\n * Removes the control from the DOM and also removes all its related events.\n * @returns void\n */\n Accordion.prototype.destroy = function () {\n var _this = this;\n var ele = this.element;\n _super.prototype.destroy.call(this);\n this.unwireEvents();\n this.isDestroy = true;\n this.templateEle.forEach(function (eleStr) {\n document.body.appendChild(_this.element.querySelector(eleStr)).style.display = 'none';\n });\n while (ele.firstChild) {\n ele.removeChild(ele.firstChild);\n }\n if (this.trgtEle) {\n while (this.ctrlTem.firstChild) {\n ele.appendChild(this.ctrlTem.firstChild);\n }\n }\n ele.removeAttribute('style');\n ['aria-disabled', 'aria-multiselectable', 'role'].forEach(function (attrb) {\n _this.element.removeAttribute(attrb);\n });\n };\n Accordion.prototype.preRender = function () {\n var nested = closest(this.element, '.' + CLS_CONTENT);\n this.isNested = false;\n this.templateEle = [];\n if (!this.isDestroy) {\n this.isDestroy = false;\n }\n if (!isNOU(nested)) {\n nested.classList.add(CLS_NEST);\n this.isNested = true;\n }\n else {\n this.element.classList.add(CLS_ACRDN_ROOT);\n }\n if (this.enableRtl) {\n this.add(this.element, CLS_RTL);\n }\n if (!this.enablePersistence || isNOU(this.expandedItems)) {\n this.expandedItems = [];\n }\n };\n Accordion.prototype.add = function (ele, val) {\n ele.classList.add(val);\n };\n Accordion.prototype.remove = function (ele, val) {\n ele.classList.remove(val);\n };\n /**\n * To initialize the control rendering\n * @private\n */\n Accordion.prototype.render = function () {\n this.initialize();\n this.renderControl();\n this.wireEvents();\n };\n Accordion.prototype.initialize = function () {\n var width = formatUnit(this.width);\n var height = formatUnit(this.height);\n setStyle(this.element, { 'width': width, 'height': height });\n var ariaAttr = {\n 'aria-disabled': 'false', 'role': 'presentation', 'aria-multiselectable': 'true'\n };\n if (this.expandedItems.length > 0) {\n this.initExpand = this.expandedItems;\n }\n attributes(this.element, ariaAttr);\n if (this.expandMode === 'Single') {\n this.element.setAttribute('aria-multiselectable', 'false');\n }\n };\n Accordion.prototype.renderControl = function () {\n this.trgtEle = (this.element.children.length > 0) ? select('div', this.element) : null;\n this.renderItems();\n this.initItemExpand();\n };\n Accordion.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.clickHandler);\n if (!isNOU(this.keyModule)) {\n this.keyModule.destroy();\n }\n };\n Accordion.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n if (!this.isNested && !this.isDestroy) {\n rippleEffect(this.element, { selector: '.' + CLS_HEADER });\n }\n if (!this.isNested) {\n this.keyModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n }\n };\n Accordion.prototype.focusIn = function (e) {\n e.target.parentElement.classList.add(CLS_ITEMFOCUS);\n };\n Accordion.prototype.focusOut = function (e) {\n e.target.parentElement.classList.remove(CLS_ITEMFOCUS);\n };\n Accordion.prototype.ctrlTemplate = function () {\n var _this = this;\n this.ctrlTem = this.element.cloneNode(true);\n var innerEles = this.element.children;\n var content;\n addClass(innerEles, [CLS_ITEM]);\n [].slice.call(innerEles).forEach(function (el) {\n el.id = getUniqueID('acrdn_item');\n if (el.children.length > 0) {\n _this.add(el.children[0], CLS_HEADER);\n var header = el.children[0];\n attributes(header, { 'tabindex': '0', 'role': 'heading', 'aria-level': innerEles.length.toString() });\n header.id = getUniqueID('acrdn_header');\n EventHandler.add(header, 'focus', _this.focusIn, _this);\n EventHandler.add(header, 'blur', _this.focusOut, _this);\n var headerEle = header.firstElementChild;\n if (headerEle) {\n headerEle.classList.add(CLS_HEADERCTN);\n }\n content = el.children[1];\n if (content) {\n content.id = getUniqueID('acrdn_panel');\n header.setAttribute('aria-controls', content.id);\n content.style.display = '';\n el.classList.add(CLS_SLCT);\n el.children[0].appendChild(_this.toggleIconGenerate());\n classList(content, [CLS_CONTENT, CLS_CTNHIDE], []);\n attributes(content, { 'aria-labelledby': header.id, 'aria-hidden': 'true' });\n content = content.firstElementChild;\n if (content) {\n content.classList.add(CLS_CTENT);\n content.style.display = '';\n }\n }\n }\n });\n };\n Accordion.prototype.toggleIconGenerate = function () {\n var tglIcon = buildTag('div', { className: CLS_TOOGLEICN });\n var hdrColIcon = buildTag('span', { className: CLS_COLLAPSEICN });\n tglIcon.appendChild(hdrColIcon);\n return tglIcon;\n };\n Accordion.prototype.initItemExpand = function () {\n var len = this.initExpand.length;\n if (len === 0) {\n return;\n }\n if (this.expandMode === 'Single') {\n this.expandItem(true, this.initExpand[len - 1]);\n }\n else {\n for (var i = 0; i < len; i++) {\n this.expandItem(true, this.initExpand[i]);\n }\n }\n };\n Accordion.prototype.renderItems = function () {\n var _this = this;\n var ele = this.element;\n var innerItem;\n if (isNOU(this.initExpand)) {\n this.initExpand = [];\n }\n var items = this.items;\n if (!isNOU(this.trgtEle)) {\n this.ctrlTemplate();\n }\n else if (ele && items.length > 0) {\n items.forEach(function (item, index) {\n innerItem = _this.renderInnerItem(item, index);\n ele.appendChild(innerItem);\n if (innerItem.childElementCount > 0) {\n EventHandler.add(innerItem.querySelector('.' + CLS_HEADER), 'focus', _this.focusIn, _this);\n EventHandler.add(innerItem.querySelector('.' + CLS_HEADER), 'blur', _this.focusOut, _this);\n }\n });\n }\n };\n Accordion.prototype.clickHandler = function (e) {\n var _this = this;\n var trgt = e.target;\n var eventArgs = {};\n var index;\n var tglIcon;\n var acrdEle = closest(trgt, '.' + CLS_ROOT);\n if (acrdEle !== this.element) {\n return;\n }\n trgt.classList.add('e-target');\n var acrdnItem = closest(trgt, '.' + CLS_ITEM);\n var acrdnHdr = closest(trgt, '.' + CLS_HEADER);\n var acrdnCtn = closest(trgt, '.' + CLS_CONTENT);\n if (acrdnItem && (isNOU(acrdnHdr) || isNOU(acrdnCtn))) {\n acrdnHdr = acrdnItem.children[0];\n acrdnCtn = acrdnItem.children[1];\n }\n if (acrdnHdr) {\n tglIcon = select('.' + CLS_TOOGLEICN, acrdnHdr);\n }\n var acrdnCtnItem;\n if (acrdnCtn) {\n acrdnCtnItem = closest(acrdnCtn, '.' + CLS_ITEM);\n }\n var acrdActive = [];\n index = this.getIndexByItem(acrdnItem);\n if (acrdnCtnItem) {\n eventArgs.item = this.items[this.getIndexByItem(acrdnCtnItem)];\n }\n eventArgs.originalEvent = e;\n var ctnCheck = !isNOU(tglIcon) && isNOU(this.trgtEle) && acrdnItem.childElementCount <= 1;\n if (ctnCheck && (isNOU(acrdnCtn) || !isNOU(select('.' + CLS_HEADER + ' .' + CLS_TOOGLEICN, acrdnCtnItem)))) {\n acrdnItem.appendChild(this.contentRendering(index));\n this.ariaAttrUpdate(acrdnItem);\n }\n this.trigger('clicked', eventArgs);\n var cntclkCheck = (acrdnCtn && !isNOU(select('.e-target', acrdnCtn)));\n cntclkCheck = cntclkCheck && (isNOU(select('.' + CLS_ROOT, acrdnCtn)) || !(closest(trgt, '.' + CLS_ROOT) === this.element));\n trgt.classList.remove('e-target');\n if (trgt.classList.contains(CLS_CONTENT) || trgt.classList.contains(CLS_CTENT) || cntclkCheck) {\n return;\n }\n [].slice.call(this.element.children).forEach(function (el) {\n if (el.classList.contains(CLS_ACTIVE)) {\n acrdActive.push(el);\n }\n });\n var acrdAniEle = [].slice.call(this.element.querySelectorAll('.' + CLS_ITEM + ' [' + CLS_ANIMATE + ']'));\n if (acrdAniEle.length > 0) {\n for (var _i = 0, acrdAniEle_1 = acrdAniEle; _i < acrdAniEle_1.length; _i++) {\n var el = acrdAniEle_1[_i];\n acrdActive.push(el.parentElement);\n }\n }\n var sameContentCheck = acrdActive.indexOf(acrdnCtnItem) !== -1 && acrdnCtn.getAttribute('e-animate') === 'true';\n var sameHeader = false;\n if (!isNOU(acrdnItem) && !isNOU(acrdnHdr)) {\n var acrdnCtn_1 = select('.' + CLS_CONTENT, acrdnItem);\n var acrdnRoot = closest(acrdnItem, '.' + CLS_ACRDN_ROOT);\n var expandState = acrdnRoot.querySelector('.' + CLS_EXPANDSTATE);\n if (isNOU(acrdnCtn_1)) {\n return;\n }\n sameHeader = (expandState === acrdnItem);\n if (isVisible(acrdnCtn_1) && (!sameContentCheck || acrdnCtnItem.classList.contains(CLS_SLCTED))) {\n this.collapse(acrdnCtn_1);\n }\n else {\n if ((acrdActive.length > 0) && this.expandMode === 'Single' && !sameContentCheck) {\n acrdActive.forEach(function (el) {\n _this.collapse(select('.' + CLS_CONTENT, el));\n el.classList.remove(CLS_EXPANDSTATE);\n });\n }\n this.expand(acrdnCtn_1);\n }\n if (!isNOU(expandState) && !sameHeader) {\n expandState.classList.remove(CLS_EXPANDSTATE);\n }\n }\n };\n Accordion.prototype.eleMoveFocus = function (action, root, trgt) {\n var clst;\n var clstItem = closest(trgt, '.' + CLS_ITEM);\n if (trgt === root) {\n clst = ((action === 'moveUp' ? trgt.lastElementChild : trgt).querySelector('.' + CLS_HEADER));\n }\n else if (trgt.classList.contains(CLS_HEADER)) {\n clstItem = (action === 'moveUp' ? clstItem.previousElementSibling : clstItem.nextElementSibling);\n if (clstItem) {\n clst = select('.' + CLS_HEADER, clstItem);\n }\n }\n if (clst) {\n clst.focus();\n }\n };\n Accordion.prototype.keyActionHandler = function (e) {\n var trgt = e.target;\n if (trgt.tagName === 'INPUT') {\n return;\n }\n e.preventDefault();\n var clst;\n var root = this.element;\n var content;\n switch (e.action) {\n case 'moveUp':\n this.eleMoveFocus(e.action, root, trgt);\n break;\n case 'moveDown':\n this.eleMoveFocus(e.action, root, trgt);\n break;\n case 'space':\n case 'enter':\n content = trgt.nextElementSibling;\n if (!isNOU(content) && content.classList.contains(CLS_CONTENT)) {\n if (content.getAttribute('e-animate') !== 'true') {\n trgt.click();\n }\n }\n else {\n trgt.click();\n }\n break;\n case 'home':\n case 'end':\n clst = e.action === 'home' ? root.firstElementChild.children[0] : root.lastElementChild.children[0];\n clst.focus();\n break;\n }\n };\n Accordion.prototype.headerEleGenerate = function () {\n var header = buildTag('div', { className: CLS_HEADER, id: getUniqueID('acrdn_header') });\n var ariaAttr = {\n 'tabindex': '0', 'role': 'heading', 'aria-expanded': 'false', 'aria-selected': 'false',\n 'aria-disabled': 'false', 'aria-level': this.items.length.toString()\n };\n attributes(header, ariaAttr);\n return header;\n };\n Accordion.prototype.renderInnerItem = function (item, index) {\n var innerEle;\n innerEle = buildTag('div', { className: CLS_ITEM });\n innerEle.id = getUniqueID('acrdn_item');\n if (item.header) {\n var ctnEle = this.headerEleGenerate();\n var hdrEle = buildTag('div', { className: CLS_HEADERCTN });\n ctnEle.appendChild(hdrEle);\n ctnEle.appendChild(this.fetchElement(hdrEle, item.header, index, true));\n innerEle.appendChild(ctnEle);\n }\n var hdr = select('.' + CLS_HEADER, innerEle);\n if (item.expanded && !isNOU(index) && (!this.enablePersistence)) {\n if (this.initExpand.indexOf(index) === -1) {\n this.initExpand.push(index);\n }\n }\n if (item.cssClass) {\n innerEle.classList.add(item.cssClass);\n }\n if (item.iconCss) {\n var hdrIcnEle = buildTag('div', { className: CLS_HEADERICN });\n var icon = buildTag('span', { className: item.iconCss + ' e-icons' });\n hdrIcnEle.appendChild(icon);\n if (isNOU(hdr)) {\n hdr = this.headerEleGenerate();\n hdr.appendChild(hdrIcnEle);\n innerEle.appendChild(hdr);\n }\n else {\n hdr.insertBefore(hdrIcnEle, hdr.childNodes[0]);\n }\n }\n if (item.content) {\n var hdrIcon = this.toggleIconGenerate();\n if (isNOU(hdr)) {\n hdr = this.headerEleGenerate();\n innerEle.appendChild(hdr);\n }\n hdr.appendChild(hdrIcon);\n this.add(innerEle, CLS_SLCT);\n }\n return innerEle;\n };\n Accordion.prototype.fetchElement = function (ele, value, index, isHeader) {\n var templateFn;\n var temString;\n try {\n if (document.querySelectorAll(value).length) {\n var eleVal = document.querySelector(value);\n temString = eleVal.outerHTML.trim();\n ele.appendChild(eleVal);\n eleVal.style.display = '';\n }\n }\n catch (e) {\n templateFn = templateCompiler(value);\n }\n if (!isNOU(templateFn) && templateFn().length > 0 && !(isNOU(templateFn()[0].tagName) && templateFn().length === 1)) {\n [].slice.call(templateFn()).forEach(function (el) {\n if (!isNOU(el.tagName)) {\n el.style.display = '';\n }\n ele.appendChild(el);\n });\n }\n else if (ele.childElementCount === 0) {\n ele.innerHTML = value;\n }\n if (!isNOU(temString)) {\n this.templateEle.push(value);\n }\n return ele;\n };\n Accordion.prototype.ariaAttrUpdate = function (itemEle) {\n var header = select('.' + CLS_HEADER, itemEle);\n var content = select('.' + CLS_CONTENT, itemEle);\n header.setAttribute('aria-controls', content.id);\n content.setAttribute('aria-labelledby', header.id);\n };\n Accordion.prototype.contentRendering = function (index) {\n var content = this.items[index].content;\n var itemcnt = buildTag('div', { className: CLS_CONTENT + ' ' + CLS_CTNHIDE, id: getUniqueID('acrdn_panel') });\n attributes(itemcnt, { 'aria-hidden': 'true' });\n var ctn = buildTag('div', { className: CLS_CTENT });\n itemcnt.appendChild(this.fetchElement(ctn, content, index, false));\n return itemcnt;\n };\n Accordion.prototype.expand = function (trgt) {\n var eventArgs;\n var trgtItemEle = closest(trgt, '.' + CLS_ITEM);\n if (isNOU(trgt) || (isVisible(trgt) && trgt.getAttribute('e-animate') !== 'true') || trgtItemEle.classList.contains(CLS_DISABLE)) {\n return;\n }\n var acrdnRoot = closest(trgtItemEle, '.' + CLS_ACRDN_ROOT);\n var expandState = acrdnRoot.querySelector('.' + CLS_EXPANDSTATE);\n var animation = {\n name: this.animation.expand.effect,\n duration: this.animation.expand.duration,\n timingFunction: this.animation.expand.easing\n };\n var icon = select('.' + CLS_TOOGLEICN, trgtItemEle).firstElementChild;\n eventArgs = { element: trgtItemEle,\n item: this.items[this.getIndexByItem(trgtItemEle)],\n isExpanded: true };\n var eff = animation.name;\n this.trigger('expanding', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n icon.classList.add(CLS_TOGANIMATE);\n this.expandedItemsPush(trgtItemEle);\n if (!isNOU(expandState)) {\n expandState.classList.remove(CLS_EXPANDSTATE);\n }\n trgtItemEle.classList.add(CLS_EXPANDSTATE);\n if ((animation.name === 'None')) {\n this.expandProgress('begin', icon, trgt, trgtItemEle, eventArgs);\n this.expandProgress('end', icon, trgt, trgtItemEle, eventArgs);\n return;\n }\n this.expandAnimation(eff, icon, trgt, trgtItemEle, animation, eventArgs);\n };\n Accordion.prototype.expandAnimation = function (ef, icn, trgt, trgtItemEle, animate, args) {\n var _this = this;\n var height;\n var trgtHgt;\n if (ef === 'SlideDown') {\n animate.begin = function () {\n _this.expandProgress('begin', icn, trgt, trgtItemEle, args);\n trgt.style.position = 'absolute';\n height = trgtItemEle.offsetHeight;\n trgtHgt = trgt.offsetHeight;\n trgt.style.maxHeight = (trgt.offsetHeight) + 'px';\n trgtItemEle.style.maxHeight = '';\n };\n animate.progress = function () {\n trgtItemEle.style.minHeight = (height + trgt.offsetHeight) + 'px';\n };\n animate.end = function () {\n setStyle(trgt, { 'position': '', 'maxHeight': '' });\n trgtItemEle.style.minHeight = '';\n _this.expandProgress('end', icn, trgt, trgtItemEle, args);\n };\n }\n else {\n animate.begin = function () {\n _this.expandProgress('begin', icn, trgt, trgtItemEle, args);\n };\n animate.end = function () {\n _this.expandProgress('end', icn, trgt, trgtItemEle, args);\n };\n }\n new Animation(animate).animate(trgt);\n };\n Accordion.prototype.expandProgress = function (progress, icon, trgt, trgtItemEle, eventArgs) {\n this.remove(trgt, CLS_CTNHIDE);\n this.add(trgtItemEle, CLS_SLCTED);\n this.add(icon, CLS_EXPANDICN);\n if (progress === 'end') {\n this.add(trgtItemEle, CLS_ACTIVE);\n trgt.setAttribute('aria-hidden', 'false');\n attributes(trgt.previousElementSibling, { 'aria-selected': 'true', 'aria-expanded': 'true' });\n icon.classList.remove(CLS_TOGANIMATE);\n this.trigger('expanded', eventArgs);\n }\n };\n Accordion.prototype.expandedItemsPush = function (item) {\n var index = this.getIndexByItem(item);\n if (this.expandedItems.indexOf(index) === -1) {\n this.expandedItems.push(index);\n }\n };\n Accordion.prototype.getIndexByItem = function (item) {\n return [].slice.call(this.element.children).indexOf(item);\n };\n Accordion.prototype.expandedItemsPop = function (item) {\n var index = this.getIndexByItem(item);\n this.expandedItems.splice(this.expandedItems.indexOf(index), 1);\n };\n Accordion.prototype.collapse = function (trgt) {\n var eventArgs;\n var trgtItemEle = closest(trgt, '.' + CLS_ITEM);\n if (isNOU(trgt) || !isVisible(trgt) || trgtItemEle.classList.contains(CLS_DISABLE)) {\n return;\n }\n var animation = {\n name: this.animation.collapse.effect,\n duration: this.animation.collapse.duration,\n timingFunction: this.animation.collapse.easing,\n };\n var icon = select('.' + CLS_TOOGLEICN, trgtItemEle).firstElementChild;\n eventArgs = { element: trgtItemEle,\n item: this.items[this.getIndexByItem(trgtItemEle)],\n isExpanded: false };\n var eff = animation.name;\n this.trigger('expanding', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.expandedItemsPop(trgtItemEle);\n trgtItemEle.classList.add(CLS_EXPANDSTATE);\n icon.classList.add(CLS_TOGANIMATE);\n if ((animation.name === 'None')) {\n this.collapseProgress('begin', icon, trgt, trgtItemEle, eventArgs);\n this.collapseProgress('end', icon, trgt, trgtItemEle, eventArgs);\n return;\n }\n this.collapseAnimation(eff, trgt, trgtItemEle, icon, animation, eventArgs);\n };\n Accordion.prototype.collapseAnimation = function (ef, trgt, trgtItEl, icn, animate, args) {\n var _this = this;\n var height;\n var trgtHeight;\n var itemHeight;\n var remain;\n if (ef === 'SlideUp') {\n animate.begin = function () {\n itemHeight = trgtItEl.offsetHeight;\n trgtItEl.style.minHeight = itemHeight + 'px';\n trgt.style.position = 'absolute';\n height = trgtItEl.offsetHeight;\n trgtHeight = trgt.offsetHeight;\n trgt.style.maxHeight = trgtHeight + 'px';\n _this.collapseProgress('begin', icn, trgt, trgtItEl, args);\n };\n animate.progress = function () {\n remain = ((height - (trgtHeight - trgt.offsetHeight)));\n if (remain < itemHeight) {\n trgtItEl.style.minHeight = remain + 'px';\n }\n };\n animate.end = function () {\n trgt.style.display = 'none';\n _this.collapseProgress('end', icn, trgt, trgtItEl, args);\n trgtItEl.style.minHeight = '';\n setStyle(trgt, { 'position': '', 'maxHeight': '', 'display': '' });\n };\n }\n else {\n animate.begin = function () {\n _this.collapseProgress('begin', icn, trgt, trgtItEl, args);\n };\n animate.end = function () {\n _this.collapseProgress('end', icn, trgt, trgtItEl, args);\n };\n }\n new Animation(animate).animate(trgt);\n };\n Accordion.prototype.collapseProgress = function (progress, icon, trgt, trgtItemEle, eventArgs) {\n this.remove(icon, CLS_EXPANDICN);\n this.remove(trgtItemEle, CLS_SLCTED);\n if (progress === 'end') {\n this.add(trgt, CLS_CTNHIDE);\n icon.classList.remove(CLS_TOGANIMATE);\n this.remove(trgtItemEle, CLS_ACTIVE);\n trgt.setAttribute('aria-hidden', 'true');\n attributes(trgt.previousElementSibling, { 'aria-selected': 'false', 'aria-expanded': 'false' });\n this.trigger('expanded', eventArgs);\n }\n };\n /**\n * Returns the current module name.\n * @returns string\n * @private\n */\n Accordion.prototype.getModuleName = function () {\n return 'accordion';\n };\n Accordion.prototype.itemAttribUpdate = function () {\n var itemEle = [].slice.call(this.element.children);\n var itemLen = this.items.length;\n itemEle.forEach(function (ele) {\n select('.' + CLS_HEADER, ele).setAttribute('aria-level', '' + itemLen);\n });\n };\n /**\n * Adds new item to the Accordion with the specified index of the Accordion.\n * @param {AccordionItemModel} item - Item array that is to be added to the Accordion.\n * @param {number} index - Number value that determines where the item should be added.\n * By default, item is added at the last index if the index is not specified.\n * @returns void\n */\n Accordion.prototype.addItem = function (item, index) {\n var ele = this.element;\n if (isNOU(index)) {\n index = this.items.length;\n }\n if (ele.childElementCount >= index) {\n this.items.splice(index, 0, item);\n var innerItemEle = this.renderInnerItem(item, index);\n if (ele.childElementCount === index) {\n ele.appendChild(innerItemEle);\n }\n else {\n ele.insertBefore(innerItemEle, ele.children[index]);\n }\n EventHandler.add(innerItemEle.querySelector('.' + CLS_HEADER), 'focus', this.focusIn, this);\n EventHandler.add(innerItemEle.querySelector('.' + CLS_HEADER), 'blur', this.focusOut, this);\n this.itemAttribUpdate();\n }\n this.expandedItems = [];\n this.expandedItemRefresh(ele);\n if (item.expanded) {\n this.expandItem(true, index);\n }\n };\n Accordion.prototype.expandedItemRefresh = function (ele) {\n var _this = this;\n [].slice.call(ele.children).forEach(function (el) {\n if (el.classList.contains(CLS_SLCTED)) {\n _this.expandedItemsPush(el);\n }\n });\n };\n /**\n * Dynamically removes item from Accordion.\n * @param {number} index - Number value that determines which item should be removed.\n * @returns void.\n */\n Accordion.prototype.removeItem = function (index) {\n var ele = this.element.children[index];\n if (isNOU(ele)) {\n return;\n }\n detach(ele);\n this.items.splice(index, 1);\n this.itemAttribUpdate();\n this.expandedItems = [];\n this.expandedItemRefresh(this.element);\n };\n /**\n * Sets focus to the specified index item header in Accordion.\n * @param {number} index - Number value that determines which item should be focused.\n * @returns void.\n */\n Accordion.prototype.select = function (index) {\n var ele = this.element.children[index];\n if (isNOU(ele) || isNOU(select('.' + CLS_HEADER, ele))) {\n return;\n }\n ele.children[0].focus();\n };\n /**\n * Shows or hides the specified item from Accordion.\n * @param {number} index - Number value that determines which item should be hidden/shown.\n * @param {Boolean} isHidden - Boolean value that determines the action either hide (true) or show (false). Default value is false.\n * If the `isHidden` value is false, the item is shown or else item it is hidden.\n * @returns void.\n */\n Accordion.prototype.hideItem = function (index, isHidden) {\n var ele = this.element.children[index];\n if (isNOU(ele)) {\n return;\n }\n if (isNOU(isHidden)) {\n isHidden = true;\n }\n isHidden ? this.add(ele, CLS_ITEMHIDE) : this.remove(ele, CLS_ITEMHIDE);\n };\n /**\n * Enables/Disables the specified Accordion item.\n * @param {number} index - Number value that determines which item should be enabled/disabled.\n * @param {boolean} isEnable - Boolean value that determines the action as enable (true) or disable (false).\n * If the `isEnable` value is true, the item is enabled or else it is disabled.\n * @returns void.\n */\n Accordion.prototype.enableItem = function (index, isEnable) {\n var ele = this.element.children[index];\n if (isNOU(ele)) {\n return;\n }\n var eleHeader = ele.firstElementChild;\n if (isEnable) {\n this.remove(ele, CLS_DISABLE);\n attributes(eleHeader, { 'tabindex': '0', 'aria-disabled': 'false' });\n eleHeader.focus();\n }\n else {\n if (ele.classList.contains(CLS_ACTIVE)) {\n this.expandItem(false, index);\n this.eleMoveFocus('movedown', this.element, eleHeader);\n }\n this.add(ele, CLS_DISABLE);\n eleHeader.setAttribute('aria-disabled', 'true');\n eleHeader.removeAttribute('tabindex');\n }\n };\n /**\n * Expands/Collapses the specified Accordion item.\n * @param {boolean} isExpand - Boolean value that determines the action as expand or collapse.\n * @param {number} index - Number value that determines which item should be expanded/collapsed.`index` is optional parameter.\n * Without Specifying index, based on the `isExpand` value all Accordion item can be expanded or collapsed.\n * @returns void.\n */\n Accordion.prototype.expandItem = function (isExpand, index) {\n var _this = this;\n var root = this.element;\n if (isNOU(index)) {\n if (this.expandMode === 'Single' && isExpand) {\n var ele = root.children[root.childElementCount - 1];\n this.itemExpand(isExpand, ele, this.getIndexByItem(ele));\n }\n else {\n [].slice.call(this.element.children).forEach(function (el) {\n _this.itemExpand(isExpand, el, _this.getIndexByItem(el));\n });\n }\n }\n else {\n var ele = this.element.children[index];\n if (isNOU(ele) || !ele.classList.contains(CLS_SLCT) || (ele.classList.contains(CLS_ACTIVE) && isExpand)) {\n return;\n }\n else {\n if (this.expandMode === 'Single') {\n this.expandItem(false);\n }\n this.itemExpand(isExpand, ele, index);\n }\n }\n };\n Accordion.prototype.itemExpand = function (isExpand, ele, index) {\n var ctn = ele.children[1];\n if (ele.classList.contains(CLS_DISABLE)) {\n return;\n }\n if (isNOU(ctn) && isExpand) {\n ctn = this.contentRendering(index);\n ele.appendChild(ctn);\n this.ariaAttrUpdate(ele);\n }\n else if (isNOU(ctn)) {\n return;\n }\n isExpand ? this.expand(ctn) : this.collapse(ctn);\n };\n Accordion.prototype.destroyItems = function () {\n [].slice.call(this.element.querySelectorAll('.' + CLS_ITEM)).forEach(function (el) { detach(el); });\n };\n Accordion.prototype.updateItem = function (item, index) {\n if (!isNOU(item)) {\n var itemObj = this.items[index];\n this.items.splice(index, 1);\n detach(item);\n this.addItem(itemObj, index);\n }\n };\n Accordion.prototype.getPersistData = function () {\n var keyEntity = ['expandedItems'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of the property that changed.\n * @param {AccordionModel} newProp\n * @param {AccordionModel} oldProp\n * @returns void\n * @private\n */\n Accordion.prototype.onPropertyChanged = function (newProp, oldProp) {\n var acrdn = this.element;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'items':\n if (!(newProp.items instanceof Array && oldProp.items instanceof Array)) {\n var changedProp = Object.keys(newProp.items);\n for (var i = 0; i < changedProp.length; i++) {\n var index = parseInt(Object.keys(newProp.items)[i], 10);\n var property = Object.keys(newProp.items[index])[0];\n var oldVal = Object(oldProp.items[index])[property];\n var newVal = Object(newProp.items[index])[property];\n var item = selectAll('.' + CLS_ITEM, this.element)[index];\n if (property === 'header' || property === 'iconCss' || property === 'expanded') {\n this.updateItem(item, index);\n }\n if (property === 'cssClass' && !isNOU(item)) {\n item.classList.remove(oldVal);\n item.classList.add(newVal);\n }\n if (property === 'content' && !isNOU(item) && item.children.length === 2) {\n if (item.classList.contains(CLS_SLCTED)) {\n this.expandItem(false, index);\n }\n detach(item.querySelector('.' + CLS_CONTENT));\n }\n }\n }\n else {\n this.destroyItems();\n this.renderItems();\n this.initItemExpand();\n }\n break;\n case 'enableRtl':\n newProp.enableRtl ? this.add(acrdn, CLS_RTL) : this.remove(acrdn, CLS_RTL);\n break;\n case 'height':\n setStyle(this.element, { 'height': formatUnit(newProp.height) });\n break;\n case 'width':\n setStyle(this.element, { 'width': formatUnit(newProp.width) });\n break;\n case 'expandMode':\n if (newProp.expandMode === 'Single') {\n this.element.setAttribute('aria-multiselectable', 'false');\n if (this.expandedItems.length > 1) {\n this.expandItem(false);\n }\n }\n else {\n this.element.setAttribute('aria-multiselectable', 'true');\n }\n break;\n }\n }\n };\n __decorate([\n Collection([], AccordionItem)\n ], Accordion.prototype, \"items\", void 0);\n __decorate([\n Property('100%')\n ], Accordion.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Accordion.prototype, \"height\", void 0);\n __decorate([\n Property('Multiple')\n ], Accordion.prototype, \"expandMode\", void 0);\n __decorate([\n Complex({}, AccordionAnimationSettings)\n ], Accordion.prototype, \"animation\", void 0);\n __decorate([\n Event()\n ], Accordion.prototype, \"clicked\", void 0);\n __decorate([\n Event()\n ], Accordion.prototype, \"expanding\", void 0);\n __decorate([\n Event()\n ], Accordion.prototype, \"expanded\", void 0);\n __decorate([\n Event()\n ], Accordion.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Accordion.prototype, \"destroyed\", void 0);\n Accordion = __decorate([\n NotifyPropertyChanges\n ], Accordion);\n return Accordion;\n}(Component));\nexport { Accordion };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, ChildProperty, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, KeyboardEvents, Touch } from '@syncfusion/ej2-base';\nimport { attributes, Animation } from '@syncfusion/ej2-base';\nimport { Browser, Collection, setValue, getValue, getUniqueID, getInstance } from '@syncfusion/ej2-base';\nimport { select, selectAll, closest, createElement, detach, append, rippleEffect, isVisible } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { calculatePosition, isCollide, fit, getScrollableParent, getZindexPartial } from '@syncfusion/ej2-popups';\nvar DOWNARROW = 'downarrow';\nvar ENTER = 'enter';\nvar ESCAPE = 'escape';\nvar FOCUSED = 'e-focused';\nvar HEADER = 'e-menu-header';\nvar LEFTARROW = 'leftarrow';\nvar RIGHTARROW = 'rightarrow';\nvar RTL = 'e-rtl';\nvar SELECTED = 'e-selected';\nvar SEPARATOR = 'e-separator';\nvar UPARROW = 'uparrow';\nvar WRAPPER = 'e-contextmenu-wrapper';\nvar CARET = 'e-caret';\nvar ITEM = 'e-menu-item';\nvar DISABLED = 'e-disabled';\nvar HIDE = 'e-menu-hide';\nvar ICONS = 'e-icons';\n/**\n * Specifies context menu items.\n */\nvar MenuItem = /** @class */ (function (_super) {\n __extends(MenuItem, _super);\n function MenuItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], MenuItem.prototype, \"iconCss\", void 0);\n __decorate([\n Property('')\n ], MenuItem.prototype, \"id\", void 0);\n __decorate([\n Property(false)\n ], MenuItem.prototype, \"separator\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], MenuItem.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], MenuItem.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], MenuItem.prototype, \"url\", void 0);\n return MenuItem;\n}(ChildProperty));\nexport { MenuItem };\n/**\n * The ContextMenu is a graphical user interface that appears on the user right click/touch hold operation.\n * ```html\n *
\n *
    \n * ```\n * ```typescript\n * \n * ```\n */\nvar ContextMenu = /** @class */ (function (_super) {\n __extends(ContextMenu, _super);\n /**\n * Constructor for creating the widget.\n * @private\n */\n function ContextMenu(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.animation = new Animation({});\n _this.navIdx = [];\n _this.isTapHold = false;\n return _this;\n }\n /**\n * Initialized animation with parent menu animation settings.\n * @private\n */\n ContextMenu.prototype.preRender = function () {\n if (this.element.tagName === 'EJS-CONTEXTMENU') {\n this.element.style.display = 'none';\n this.element.classList.remove('e-' + this.getModuleName());\n this.element.classList.remove('e-control');\n var ejInst = getValue('ej2_instances', this.element);\n var ul = createElement('ul');\n this.ngElement = this.element;\n this.element = ul;\n this.element.classList.add('e-control');\n this.element.classList.add('e-' + this.getModuleName());\n setValue('ej2_instances', ejInst, this.element);\n if (!this.element.id) {\n this.element.id = getUniqueID(this.getModuleName());\n }\n }\n };\n /**\n * Initialize the control rendering\n * @private\n */\n ContextMenu.prototype.render = function () {\n this.initWrapper();\n this.renderItems();\n this.wireEvents();\n };\n ContextMenu.prototype.initWrapper = function () {\n var wrapper = this.getWrapper();\n if (!wrapper) {\n wrapper = createElement('div', { className: WRAPPER });\n document.body.appendChild(wrapper);\n }\n if (this.cssClass) {\n wrapper.classList.add(this.cssClass);\n }\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n attributes(this.element, { 'role': 'menu', 'tabindex': '0' });\n wrapper.appendChild(this.element);\n this.element.style.zIndex = getZindexPartial(this.element).toString();\n };\n ContextMenu.prototype.renderItems = function () {\n if (!this.items.length) {\n this.items = ListBase.createJsonFromElement(this.element);\n this.element.innerHTML = '';\n }\n var ul = this.createItems(this.items);\n append(Array.prototype.slice.call(ul.children), this.element);\n this.element.classList.add('e-menu-parent');\n };\n ContextMenu.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n if (this.target) {\n var target = void 0;\n var targetElems = selectAll(this.target);\n for (var i = 0, len = targetElems.length; i < len; i++) {\n target = targetElems[i];\n if (Browser.isIos) {\n new Touch(target, { tapHold: this.touchHandler.bind(this) });\n }\n else {\n EventHandler.add(target, 'contextmenu', this.cmenuHandler, this);\n }\n }\n this.targetElement = target;\n for (var _i = 0, _a = getScrollableParent(this.targetElement); _i < _a.length; _i++) {\n var parent_1 = _a[_i];\n EventHandler.add(parent_1, 'scroll', this.scrollHandler, this);\n }\n }\n if (!Browser.isDevice) {\n EventHandler.add(wrapper, 'mouseover', this.moverHandler, this);\n EventHandler.add(document, 'mousedown', this.mouseDownHandler, this);\n }\n this.delegateClickHandler = this.clickHandler.bind(this);\n EventHandler.add(document, 'click', this.delegateClickHandler, this);\n new KeyboardEvents(wrapper, {\n keyAction: this.keyBoardHandler.bind(this),\n keyConfigs: {\n downarrow: DOWNARROW,\n uparrow: UPARROW,\n enter: ENTER,\n leftarrow: LEFTARROW,\n rightarrow: RIGHTARROW,\n escape: ESCAPE\n }\n });\n rippleEffect(wrapper, { selector: '.' + ITEM });\n };\n ContextMenu.prototype.mouseDownHandler = function (e) {\n if (closest(e.target, '.' + WRAPPER) !== this.getWrapper()) {\n this.closeMenu(this.navIdx.length, e);\n }\n };\n ContextMenu.prototype.keyBoardHandler = function (e) {\n e.preventDefault();\n switch (e.action) {\n case DOWNARROW:\n case UPARROW:\n this.upDownKeyHandler(e);\n break;\n case RIGHTARROW:\n this.rightEnterKeyHandler(e);\n break;\n case LEFTARROW:\n this.leftEscKeyHandler(e);\n break;\n case ENTER:\n this.rightEnterKeyHandler(e);\n break;\n case ESCAPE:\n this.leftEscKeyHandler(e);\n break;\n }\n };\n ContextMenu.prototype.upDownKeyHandler = function (e) {\n var wrapper = this.getWrapper();\n var cul = wrapper.children[this.navIdx.length];\n var defaultIdx = e.action === DOWNARROW ? 0 : cul.childElementCount - 1;\n var fliIdx = defaultIdx;\n var fli = this.getLIByClass(cul, FOCUSED);\n if (fli) {\n fliIdx = this.getIdx(cul, fli);\n fli.classList.remove(FOCUSED);\n e.action === DOWNARROW ? fliIdx++ : fliIdx--;\n if (fliIdx === (e.action === DOWNARROW ? cul.childElementCount : -1)) {\n fliIdx = defaultIdx;\n }\n }\n var cli = cul.children[fliIdx];\n fliIdx = this.isValidLI(cli, fliIdx, e.action);\n cul.children[fliIdx].classList.add(FOCUSED);\n cul.children[fliIdx].focus();\n };\n ContextMenu.prototype.isValidLI = function (cli, index, action) {\n var wrapper = this.getWrapper();\n var cul = wrapper.children[this.navIdx.length];\n if (cli.classList.contains(SEPARATOR) || cli.classList.contains(DISABLED) || cli.classList.contains(HIDE)) {\n ((action === DOWNARROW) || (action === RIGHTARROW)) ? index++ : index--;\n }\n cli = cul.children[index];\n if (cli.classList.contains(SEPARATOR) || cli.classList.contains(DISABLED) || cli.classList.contains(HIDE)) {\n index = this.isValidLI(cli, index, action);\n }\n return index;\n };\n ContextMenu.prototype.rightEnterKeyHandler = function (e) {\n var eventArgs;\n var wrapper = this.getWrapper();\n var cul = wrapper.children[this.navIdx.length];\n var fli = this.getLIByClass(cul, FOCUSED);\n if (fli) {\n var fliIdx = this.getIdx(cul, fli);\n var navIdx = this.navIdx.concat(fliIdx);\n var index = void 0;\n var item = this.getItem(navIdx);\n if (item.items.length) {\n this.navIdx.push(fliIdx);\n this.openMenu(fli, item, null, null, e);\n fli.classList.remove(FOCUSED);\n fli.classList.add(SELECTED);\n if (e.action === ENTER) {\n eventArgs = { element: fli, item: item };\n this.trigger('select', eventArgs);\n }\n fli.focus();\n cul = wrapper.children[this.navIdx.length];\n index = this.isValidLI(cul.children[0], 0, e.action);\n cul.children[index].classList.add(FOCUSED);\n cul.children[index].focus();\n }\n else {\n if (e.action === ENTER) {\n fli.classList.remove(FOCUSED);\n fli.classList.add(SELECTED);\n eventArgs = { element: fli, item: item };\n this.trigger('select', eventArgs);\n this.closeMenu(null, e);\n }\n }\n }\n };\n ContextMenu.prototype.leftEscKeyHandler = function (e) {\n if (this.navIdx.length) {\n var wrapper = this.getWrapper();\n this.closeMenu(this.navIdx.length, e);\n var cul = wrapper.children[this.navIdx.length];\n var sli = this.getLIByClass(cul, SELECTED);\n if (sli) {\n sli.setAttribute('aria-expanded', 'false');\n sli.classList.remove(SELECTED);\n sli.classList.add(FOCUSED);\n sli.focus();\n }\n }\n else {\n if (e.action === ESCAPE) {\n this.closeMenu(null, e);\n }\n }\n };\n ContextMenu.prototype.scrollHandler = function (e) {\n this.closeMenu(null, e);\n };\n ContextMenu.prototype.touchHandler = function (e) {\n this.isTapHold = true;\n this.cmenuHandler(e.originalEvent);\n };\n ContextMenu.prototype.cmenuHandler = function (e) {\n e.preventDefault();\n this.closeMenu(null, e);\n if (this.canOpen(e.target)) {\n if (e.changedTouches) {\n this.openMenu(null, null, e.changedTouches[0].pageY + 1, e.changedTouches[0].pageX + 1, e);\n }\n else {\n this.openMenu(null, null, e.pageY + 1, e.pageX + 1, e);\n }\n }\n };\n /**\n * Closes the ContextMenu if it is opened.\n */\n ContextMenu.prototype.close = function () {\n this.closeMenu();\n };\n ContextMenu.prototype.closeMenu = function (ulIndex, e) {\n if (ulIndex === void 0) { ulIndex = 0; }\n if (e === void 0) { e = null; }\n if (this.isMenuVisible()) {\n var ul = void 0;\n var item = void 0;\n var items = void 0;\n var closeArgs = void 0;\n var beforeCloseArgs = void 0;\n var wrapper = this.getWrapper();\n for (var cnt = wrapper.childElementCount; cnt > ulIndex; cnt--) {\n item = this.navIdx.length ? this.getItem(this.navIdx) : null;\n items = item ? item.items : this.items;\n ul = wrapper.children[cnt - 1];\n beforeCloseArgs = { element: ul, parentItem: item, items: items, event: e, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs);\n if (!beforeCloseArgs.cancel) {\n this.toggleAnimation(ul, false);\n this.navIdx.length = ulIndex ? ulIndex - 1 : ulIndex;\n closeArgs = { element: ul, parentItem: item, items: items };\n this.trigger('onClose', closeArgs);\n }\n }\n }\n };\n ContextMenu.prototype.isMenuVisible = function () {\n return (this.navIdx.length > 0 || (this.element.classList.contains('e-contextmenu') && isVisible(this.element).valueOf()));\n };\n ContextMenu.prototype.canOpen = function (target) {\n var canOpen = true;\n if (this.filter) {\n canOpen = false;\n var filter = this.filter.split(' ');\n for (var i = 0, len = target.classList.length; i < len; i++) {\n if (filter.indexOf(target.classList[i]) > -1) {\n canOpen = true;\n break;\n }\n }\n }\n return canOpen;\n };\n /**\n * This method is used to open the ContextMenu in specified position.\n * @param top To specify ContextMenu vertical positioning.\n * @param left To specify ContextMenu horizontal positioning.\n * @returns void\n */\n ContextMenu.prototype.open = function (top, left) {\n this.openMenu(null, null, top, left);\n };\n ContextMenu.prototype.openMenu = function (li, item, top, left, e) {\n if (top === void 0) { top = 0; }\n if (left === void 0) { left = 0; }\n if (e === void 0) { e = null; }\n var ul;\n var navIdx;\n var wrapper = this.getWrapper();\n if (li) {\n ul = this.createItems(item.items);\n if (Browser.isDevice) {\n wrapper.lastChild.style.display = 'none';\n var data = { text: item.text, iconCss: ICONS + ' e-previous' };\n var hdata = new MenuItem(this.items[0], null, data, true);\n var hli = this.createItems([hdata]).children[0];\n hli.classList.add(HEADER);\n ul.insertBefore(hli, ul.children[0]);\n }\n ul.style.zIndex = this.element.style.zIndex;\n wrapper.appendChild(ul);\n }\n else {\n ul = this.element;\n }\n navIdx = this.getIndex(li ? li.textContent : null);\n var items = li ? item.items : this.items;\n var eventArgs = { element: ul, items: items, parentItem: item, event: e, cancel: false };\n this.trigger('beforeOpen', eventArgs);\n if (eventArgs.cancel) {\n this.navIdx.pop();\n }\n else {\n this.setPosition(li, ul, top, left);\n this.toggleAnimation(ul);\n }\n };\n ContextMenu.prototype.setPosition = function (li, ul, top, left) {\n var px = 'px';\n this.toggleVisiblity(ul);\n if (ul === this.element) {\n var collide = isCollide(ul, null, left, top);\n if (collide.indexOf('right') > -1) {\n left = left - ul.offsetWidth;\n }\n if (collide.indexOf('bottom') > -1) {\n var offset = fit(ul, null, { X: false, Y: true }, { top: top, left: left });\n top = offset.top - 20;\n }\n collide = isCollide(ul, null, left, top);\n if (collide.indexOf('left') > -1) {\n var offset = fit(ul, null, { X: true, Y: false }, { top: top, left: left });\n left = offset.left;\n }\n }\n else {\n if (Browser.isDevice) {\n top = Number(this.element.style.top.replace(px, ''));\n left = Number(this.element.style.left.replace(px, ''));\n }\n else {\n var x = this.enableRtl ? 'left' : 'right';\n var offset = calculatePosition(li, x, 'top');\n top = offset.top;\n left = offset.left;\n var collide = isCollide(ul, null, this.enableRtl ? left - ul.offsetWidth : left, top);\n var xCollision = collide.indexOf('left') > -1 || collide.indexOf('right') > -1;\n if (xCollision) {\n offset = calculatePosition(li, this.enableRtl ? 'right' : 'left', 'top');\n left = offset.left;\n }\n if (this.enableRtl || xCollision) {\n left = (this.enableRtl && xCollision) ? left : left - ul.offsetWidth;\n }\n if (collide.indexOf('bottom') > -1) {\n offset = fit(ul, null, { X: false, Y: true }, { top: top, left: left });\n top = offset.top;\n }\n }\n }\n this.toggleVisiblity(ul, false);\n ul.style.top = top + px;\n ul.style.left = left + px;\n };\n ContextMenu.prototype.toggleVisiblity = function (ul, isVisible) {\n if (isVisible === void 0) { isVisible = true; }\n ul.style.visibility = isVisible ? 'hidden' : '';\n ul.style.display = isVisible ? 'block' : 'none';\n };\n ContextMenu.prototype.createItems = function (items) {\n var _this = this;\n var showIcon = this.hasField(items, 'iconCss');\n var listBaseOptions = {\n showIcon: showIcon,\n moduleName: 'menu',\n itemCreating: function (args) {\n args.curData.htmlAttributes = {\n role: 'menuitem',\n tabindex: '-1'\n };\n },\n itemCreated: function (args) {\n if (args.curData.separator) {\n args.item.classList.add(SEPARATOR);\n args.item.removeAttribute('role');\n }\n if (showIcon && !args.curData.iconCss && !args.curData.separator) {\n args.item.classList.add('e-blankicon');\n }\n if (args.curData.items && args.curData.items.length) {\n var span = createElement('span', { className: ICONS + ' ' + CARET });\n args.item.appendChild(span);\n args.item.setAttribute('aria-haspopup', 'true');\n args.item.setAttribute('aria-expanded', 'false');\n args.item.removeAttribute('role');\n args.item.classList.add('e-menu-caret-icon');\n }\n var eventArgs = { item: args.curData, element: args.item };\n _this.trigger('beforeItemRender', eventArgs);\n }\n };\n var ul = ListBase.createList(this.toRawObject(items.slice()), listBaseOptions, true);\n ul.setAttribute('tabindex', '0');\n return ul;\n };\n ContextMenu.prototype.toRawObject = function (items) {\n var item;\n var menuItems = [];\n for (var i = 0, len = items.length; i < len; i++) {\n item = items[i].properties;\n menuItems.push(item);\n }\n return menuItems;\n };\n ContextMenu.prototype.moverHandler = function (e) {\n var wrapper = this.getWrapper();\n var trgt = e.target;\n var cli = this.getLI(trgt);\n if (cli && closest(cli, '.' + WRAPPER)) {\n var fli = select('.' + FOCUSED, wrapper);\n if (fli) {\n fli.classList.remove(FOCUSED);\n }\n cli.classList.add(FOCUSED);\n if (!this.showItemOnClick) {\n this.clickHandler(e);\n }\n }\n };\n ContextMenu.prototype.hasField = function (items, field) {\n for (var i = 0, len = items.length; i < len; i++) {\n if (items[i][field]) {\n return true;\n }\n }\n return false;\n };\n ContextMenu.prototype.getWrapper = function () {\n return closest(this.element, '.' + WRAPPER);\n };\n ContextMenu.prototype.clickHandler = function (e) {\n if (this.isTapHold) {\n this.isTapHold = false;\n }\n else {\n var wrapper = this.getWrapper();\n var trgt = e.target;\n var cli = this.getLI(trgt);\n var cliWrapper = cli ? closest(cli, '.' + WRAPPER) : null;\n var isInstLI = cli && cliWrapper && wrapper.firstElementChild.id === cliWrapper.firstElementChild.id;\n if (isInstLI && e.type === 'click' && !cli.classList.contains(HEADER)) {\n this.setLISelected(cli);\n var navIdx = this.getIndex(cli.textContent);\n var item = this.getItem(navIdx);\n var eventArgs = { element: cli, item: item };\n this.trigger('select', eventArgs);\n }\n if (isInstLI && (e.type === 'mouseover' || Browser.isDevice || this.showItemOnClick)) {\n var ul = void 0;\n if (cli.classList.contains(HEADER)) {\n ul = wrapper.children[this.navIdx.length - 1];\n this.toggleAnimation(ul);\n var sli = this.getLIByClass(ul, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n detach(cli.parentNode);\n this.navIdx.pop();\n }\n else {\n if (!cli.classList.contains(SEPARATOR)) {\n var showSubMenu = true;\n var cul = cli.parentNode;\n var cliIdx = this.getIdx(cul, cli);\n if (!Browser.isDevice) {\n var culIdx = this.getIdx(wrapper, cul);\n if (this.navIdx[culIdx] === cliIdx) {\n showSubMenu = false;\n }\n if (culIdx !== this.navIdx.length && (e.type !== 'mouseover' || showSubMenu)) {\n var sli = this.getLIByClass(cul, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n this.closeMenu(culIdx + 1, e);\n }\n }\n if (showSubMenu) {\n var idx = this.navIdx.concat(cliIdx);\n var item = this.getItem(idx);\n if (item.items.length) {\n if (e.type === 'mouseover') {\n this.setLISelected(cli);\n }\n cli.setAttribute('aria-expanded', 'true');\n this.navIdx.push(cliIdx);\n this.openMenu(cli, item, null, null, e);\n }\n else {\n if (e.type !== 'mouseover') {\n this.closeMenu(null, e);\n }\n }\n }\n }\n }\n }\n else {\n if (trgt.tagName !== 'UL' || trgt.parentElement !== wrapper) {\n if (!cli || !cli.querySelector('.' + CARET)) {\n this.closeMenu(null, e);\n }\n }\n }\n }\n };\n ContextMenu.prototype.setLISelected = function (li) {\n var sli = this.getLIByClass(li.parentElement, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n li.classList.remove(FOCUSED);\n li.classList.add(SELECTED);\n };\n ContextMenu.prototype.getLIByClass = function (ul, classname) {\n for (var i = 0, len = ul.children.length; i < len; i++) {\n if (ul.children[i].classList.contains(classname)) {\n return ul.children[i];\n }\n }\n return null;\n };\n ContextMenu.prototype.getItem = function (navIdx) {\n navIdx = navIdx.slice();\n var idx = navIdx.pop();\n var items = this.getItems(navIdx);\n return items[idx];\n };\n ContextMenu.prototype.getItems = function (navIdx) {\n var items = this.items;\n for (var i = 0; i < navIdx.length; i++) {\n items = items[navIdx[i]].items;\n }\n return items;\n };\n ContextMenu.prototype.getIdx = function (ul, li, skipHdr) {\n if (skipHdr === void 0) { skipHdr = true; }\n var idx = Array.prototype.indexOf.call(ul.children, li);\n if (skipHdr && ul.children[0].classList.contains(HEADER)) {\n idx--;\n }\n return idx;\n };\n ContextMenu.prototype.getLI = function (elem) {\n if (elem.tagName === 'LI') {\n return elem;\n }\n return closest(elem, 'li');\n };\n /**\n * Called internally if any of the property value changed\n * @private\n * @param {ContextMenuModel} newProp\n * @param {ContextMenuModel} oldProp\n * @returns void\n */\n ContextMenu.prototype.onPropertyChanged = function (newProp, oldProp) {\n var wrapper = this.getWrapper();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (oldProp.cssClass) {\n wrapper.classList.remove(oldProp.cssClass);\n }\n if (newProp.cssClass) {\n wrapper.classList.add(newProp.cssClass);\n }\n break;\n case 'enableRtl':\n wrapper.classList.toggle(RTL);\n break;\n case 'filter':\n this.closeMenu();\n this.filter = newProp.filter;\n break;\n case 'showItemOnClick':\n this.unWireEvents();\n this.showItemOnClick = newProp.showItemOnClick;\n this.wireEvents();\n break;\n case 'target':\n this.unWireEvents();\n this.target = newProp.target;\n this.wireEvents();\n break;\n case 'items':\n var idx = void 0;\n var navIdx = void 0;\n var item = void 0;\n var keys = Object.keys(newProp.items);\n for (var i = 0; i < keys.length; i++) {\n navIdx = this.getChangedItemIndex(newProp, [], Number(keys[i]));\n if (navIdx.length <= this.getWrapper().children.length) {\n idx = navIdx.pop();\n item = this.getItems(navIdx);\n this.insertAfter([item[idx]], item[idx].text);\n this.removeItem(item, navIdx, idx);\n }\n navIdx.length = 0;\n }\n break;\n }\n }\n };\n ContextMenu.prototype.getChangedItemIndex = function (newProp, index, idx) {\n index.push(idx);\n var key = Object.keys(newProp.items[idx]).pop();\n if (key === 'items') {\n var item = newProp.items[idx];\n this.getChangedItemIndex(item, index, Number(Object.keys(item.items).pop()));\n }\n else {\n if (key === 'isParentArray' && index.length > 1) {\n index.pop();\n }\n }\n return index;\n };\n ContextMenu.prototype.removeItem = function (item, navIdx, idx) {\n item.splice(idx, 1);\n var uls = this.getWrapper().children;\n if (navIdx.length < uls.length) {\n detach(uls[navIdx.length].children[idx]);\n }\n };\n /**\n * Used to unwire the bind events.\n * @private\n */\n ContextMenu.prototype.unWireEvents = function () {\n var wrapper = this.getWrapper();\n if (this.target) {\n var target = void 0;\n var touchModule = void 0;\n var targetElems = selectAll(this.target);\n for (var i = 0, len = targetElems.length; i < len; i++) {\n target = targetElems[i];\n if (Browser.isIos) {\n touchModule = getInstance(target, Touch);\n if (touchModule) {\n touchModule.destroy();\n }\n }\n else {\n EventHandler.remove(target, 'contextmenu', this.cmenuHandler);\n }\n }\n for (var _i = 0, _a = getScrollableParent(this.targetElement); _i < _a.length; _i++) {\n var parent_2 = _a[_i];\n EventHandler.remove(parent_2, 'scroll', this.scrollHandler);\n }\n }\n if (!Browser.isDevice) {\n EventHandler.remove(wrapper, 'mouseover', this.moverHandler);\n EventHandler.remove(document, 'mousedown', this.mouseDownHandler);\n }\n EventHandler.remove(document, 'click', this.delegateClickHandler);\n var keyboardModule = getInstance(wrapper, KeyboardEvents);\n if (keyboardModule) {\n keyboardModule.destroy();\n }\n };\n ContextMenu.prototype.toggleAnimation = function (ul, isMenuOpen) {\n var _this = this;\n if (isMenuOpen === void 0) { isMenuOpen = true; }\n if (this.animationSettings.effect === 'None' || !isMenuOpen) {\n this.end(ul, isMenuOpen);\n }\n else {\n this.animation.animate(ul, {\n name: this.animationSettings.effect,\n duration: this.animationSettings.duration,\n timingFunction: this.animationSettings.easing,\n begin: function (options) {\n options.element.style.display = 'block';\n options.element.style.maxHeight = options.element.getBoundingClientRect().height + 'px';\n },\n end: function (options) {\n _this.end(options.element, isMenuOpen);\n }\n });\n }\n };\n ContextMenu.prototype.end = function (ul, isMenuOpen) {\n if (isMenuOpen) {\n ul.style.display = 'block';\n ul.style.maxHeight = '';\n var item = this.navIdx.length ? this.getItem(this.navIdx) : null;\n var eventArgs = { element: ul, parentItem: item, items: item ? item.items : this.items };\n this.trigger('onOpen', eventArgs);\n if (ul.querySelector('.' + FOCUSED)) {\n ul.querySelector('.' + FOCUSED).focus();\n }\n else {\n var ele = void 0;\n ele = this.getWrapper().children[this.getIdx(this.getWrapper(), ul) - 1];\n if (ele) {\n ele.querySelector('.' + SELECTED).focus();\n }\n else {\n this.element.focus();\n }\n }\n }\n else {\n if (ul === this.element) {\n var fli = this.getLIByClass(this.element, FOCUSED);\n if (fli) {\n fli.classList.remove(FOCUSED);\n }\n var sli = this.getLIByClass(this.element, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n ul.style.display = 'none';\n }\n else {\n detach(ul);\n }\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\n */\n ContextMenu.prototype.getPersistData = function () {\n return '';\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextmenu';\n };\n ContextMenu.prototype.getIndex = function (data, items, navIdx, isCallBack) {\n if (items === void 0) { items = this.items; }\n if (navIdx === void 0) { navIdx = []; }\n if (isCallBack === void 0) { isCallBack = false; }\n var item;\n for (var i = 0, len = items.length; i < len; i++) {\n item = items[i];\n if (item.text === data) {\n navIdx.push(i);\n break;\n }\n else if (item.items.length) {\n navIdx = this.getIndex(data, item.items, navIdx, true);\n if (navIdx[navIdx.length - 1] === -1) {\n if (i !== len - 1) {\n navIdx.pop();\n }\n }\n else {\n navIdx.unshift(i);\n break;\n }\n }\n else {\n if (i === len - 1) {\n navIdx.push(-1);\n }\n }\n }\n return (!isCallBack && navIdx[0] === -1) ? [] : navIdx;\n };\n /**\n * This method is used to enable or disable the menu items in the ContextMenu based on the items and enable argument.\n * @param items Text items that needs to be enabled/disabled.\n * @param enable Set `true`/`false` to enable/disable the list items.\n * @returns void\n */\n ContextMenu.prototype.enableItems = function (items, enable) {\n if (enable === void 0) { enable = true; }\n var ul;\n var idx;\n var navIdx;\n var disabled = DISABLED;\n var wrapper = this.getWrapper();\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(items[i]);\n idx = navIdx.pop();\n ul = wrapper.children[navIdx.length];\n if (ul) {\n if (enable) {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[idx + 1].classList.remove(disabled);\n }\n else {\n ul.children[idx].classList.remove(disabled);\n }\n }\n else {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[idx + 1].classList.add(disabled);\n }\n else {\n ul.children[idx].classList.add(disabled);\n }\n }\n }\n }\n };\n /**\n * This method is used to show the menu items in the ContextMenu based on the items text.\n * @param items Text items that needs to be shown.\n * @returns void\n */\n ContextMenu.prototype.showItems = function (items) {\n this.showHideItems(items, false);\n };\n /**\n * This method is used to hide the menu items in the ContextMenu based on the items text.\n * @param items Text items that needs to be hidden.\n * @returns void\n */\n ContextMenu.prototype.hideItems = function (items) {\n this.showHideItems(items, true);\n };\n ContextMenu.prototype.showHideItems = function (items, ishide) {\n var ul;\n var idx;\n var navIdx;\n var wrapper = this.getWrapper();\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(items[i]);\n idx = navIdx.pop();\n ul = wrapper.children[navIdx.length];\n if (ul) {\n if (ishide) {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[idx + 1].classList.add(HIDE);\n }\n else {\n ul.children[idx].classList.add(HIDE);\n }\n }\n else {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[idx + 1].classList.remove(HIDE);\n }\n else {\n ul.children[idx].classList.remove(HIDE);\n }\n }\n }\n }\n };\n /**\n * It is used to remove the menu items from the ContextMenu based on the items text.\n * @param items Text items that needs to be removed.\n * @returns void\n */\n ContextMenu.prototype.removeItems = function (items) {\n var idx;\n var navIdx;\n var iitems;\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(items[i]);\n idx = navIdx.pop();\n iitems = this.getItems(navIdx);\n this.removeItem(iitems, navIdx, idx);\n }\n };\n /**\n * It is used to insert the menu items after the specified menu item text.\n * @param items Items that needs to be inserted.\n * @param text Text item after that the element to be inserted.\n * @returns void\n */\n ContextMenu.prototype.insertAfter = function (items, text) {\n this.insertItems(items, text);\n };\n /**\n * It is used to insert the menu items before the specified menu item text.\n * @param items Items that needs to be inserted.\n * @param text Text item before that the element to be inserted.\n * @returns void\n */\n ContextMenu.prototype.insertBefore = function (items, text) {\n this.insertItems(items, text, false);\n };\n ContextMenu.prototype.insertItems = function (items, text, isAfter) {\n if (isAfter === void 0) { isAfter = true; }\n var li;\n var idx;\n var navIdx;\n var iitems;\n var menuitem;\n var showIcon;\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(text);\n idx = navIdx.pop();\n iitems = this.getItems(navIdx);\n menuitem = new MenuItem(iitems[0], null, items[i], true);\n iitems.splice(isAfter ? idx + 1 : idx, 0, menuitem);\n var uls = this.getWrapper().children;\n if (navIdx.length < uls.length) {\n idx = isAfter ? idx + 1 : idx;\n showIcon = this.hasField(iitems, 'iconCss');\n li = this.createItems(iitems).children[idx];\n uls[navIdx.length].insertBefore(li, uls[navIdx.length].children[idx]);\n }\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n ContextMenu.prototype.destroy = function () {\n var _this = this;\n var wrapper = this.getWrapper();\n if (wrapper) {\n _super.prototype.destroy.call(this);\n this.unWireEvents();\n if (this.ngElement) {\n this.ngElement.style.display = 'block';\n }\n else {\n this.closeMenu();\n this.element.innerHTML = '';\n ['top', 'left', 'display', 'z-index'].forEach(function (key) {\n _this.element.style.removeProperty(key);\n });\n ['role', 'tabindex', 'class', 'style'].forEach(function (key) {\n if (['class', 'style'].indexOf(key) === -1 || !_this.element.getAttribute(key)) {\n _this.element.removeAttribute(key);\n }\n });\n wrapper.parentNode.insertBefore(this.element, wrapper);\n }\n detach(wrapper);\n }\n };\n __decorate([\n Property('')\n ], ContextMenu.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], ContextMenu.prototype, \"filter\", void 0);\n __decorate([\n Property(false)\n ], ContextMenu.prototype, \"showItemOnClick\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], ContextMenu.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], ContextMenu.prototype, \"target\", void 0);\n __decorate([\n Property({ duration: 400, easing: 'ease', effect: 'SlideDown' })\n ], ContextMenu.prototype, \"animationSettings\", void 0);\n __decorate([\n Event()\n ], ContextMenu.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], ContextMenu.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], ContextMenu.prototype, \"onOpen\", void 0);\n __decorate([\n Event()\n ], ContextMenu.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], ContextMenu.prototype, \"onClose\", void 0);\n __decorate([\n Event()\n ], ContextMenu.prototype, \"select\", void 0);\n ContextMenu = __decorate([\n NotifyPropertyChanges\n ], ContextMenu);\n return ContextMenu;\n}(Component));\nexport { ContextMenu };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Event, closest, Collection, Complex, attributes, detach } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty, select, isVisible } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Browser, formatUnit, L10n } from '@syncfusion/ej2-base';\nimport { createElement as buildTag, setStyleAttribute as setStyle, isNullOrUndefined as isNOU, selectAll } from '@syncfusion/ej2-base';\nimport { EventHandler, rippleEffect, Touch, compile, Animation } from '@syncfusion/ej2-base';\nimport { Toolbar } from '../toolbar/toolbar';\nvar CLS_TAB = 'e-tab';\nvar CLS_HEADER = 'e-tab-header';\nvar CLS_CONTENT = 'e-content';\nvar CLS_NEST = 'e-nested';\nvar CLS_ITEMS = 'e-items';\nvar CLS_ITEM = 'e-item';\nvar CLS_TEMPLATE = 'e-template';\nvar CLS_RTL = 'e-rtl';\nvar CLS_ACTIVE = 'e-active';\nvar CLS_DISABLE = 'e-disable';\nvar CLS_HIDDEN = 'e-hidden';\nvar CLS_FOCUS = 'e-focused';\nvar CLS_ICONS = 'e-icons';\nvar CLS_ICON = 'e-icon';\nvar CLS_ICON_CLOSE = 'e-close-icon';\nvar CLS_CLOSE_SHOW = 'e-close-show';\nvar CLS_TEXT = 'e-tab-text';\nvar CLS_INDICATOR = 'e-indicator';\nvar CLS_WRAP = 'e-tab-wrap';\nvar CLS_TEXT_WRAP = 'e-text-wrap';\nvar CLS_TAB_ICON = 'e-tab-icon';\nvar CLS_TB_ITEMS = 'e-toolbar-items';\nvar CLS_TB_ITEM = 'e-toolbar-item';\nvar CLS_TB_POP = 'e-toolbar-pop';\nvar CLS_TB_POPUP = 'e-toolbar-popup';\nvar CLS_POPUP_OPEN = 'e-popup-open';\nvar CLS_POPUP_CLOSE = 'e-popup-close';\nvar CLS_PROGRESS = 'e-progress';\nvar CLS_IGNORE = 'e-ignore';\nvar CLS_OVERLAY = 'e-overlay';\nvar TabActionSettings = /** @class */ (function (_super) {\n __extends(TabActionSettings, _super);\n function TabActionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('SlideLeftIn')\n ], TabActionSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(600)\n ], TabActionSettings.prototype, \"duration\", void 0);\n __decorate([\n Property('ease')\n ], TabActionSettings.prototype, \"easing\", void 0);\n return TabActionSettings;\n}(ChildProperty));\nexport { TabActionSettings };\nvar TabAnimationSettings = /** @class */ (function (_super) {\n __extends(TabAnimationSettings, _super);\n function TabAnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ effect: 'SlideLeftIn', duration: 600, easing: 'ease' }, TabActionSettings)\n ], TabAnimationSettings.prototype, \"previous\", void 0);\n __decorate([\n Complex({ effect: 'SlideRightIn', duration: 600, easing: 'ease' }, TabActionSettings)\n ], TabAnimationSettings.prototype, \"next\", void 0);\n return TabAnimationSettings;\n}(ChildProperty));\nexport { TabAnimationSettings };\n/**\n * Objects used for configuring the Tab item header properties.\n */\nvar Header = /** @class */ (function (_super) {\n __extends(Header, _super);\n function Header() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Header.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], Header.prototype, \"iconCss\", void 0);\n __decorate([\n Property('left')\n ], Header.prototype, \"iconPosition\", void 0);\n return Header;\n}(ChildProperty));\nexport { Header };\n/**\n * An array of object that is used to configure the Tab.\n */\nvar TabItem = /** @class */ (function (_super) {\n __extends(TabItem, _super);\n function TabItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({}, Header)\n ], TabItem.prototype, \"header\", void 0);\n __decorate([\n Property('')\n ], TabItem.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], TabItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], TabItem.prototype, \"disabled\", void 0);\n return TabItem;\n}(ChildProperty));\nexport { TabItem };\n/**\n * Tab is a content panel to show multiple contents in a single space, one at a time.\n * Each Tab item has an associated content, that will be displayed based on the active Tab header item.\n * ```html\n *
    \n * \n * ```\n */\nvar Tab = /** @class */ (function (_super) {\n __extends(Tab, _super);\n /**\n * Initializes a new instance of the Tab class.\n * @param options - Specifies Tab model properties as options.\n * @param element - Specifies the element that is rendered as a Tab.\n */\n function Tab(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.prevIndex = 0;\n _this.show = { name: 'SlideDown', duration: 100 };\n _this.hide = { name: 'SlideUp', duration: 100 };\n _this.animateOptions = {};\n _this.animObj = new Animation(_this.animateOptions);\n _this.maxHeight = 0;\n _this.title = 'Close';\n /**\n * Contains the keyboard configuration of the Tab.\n */\n _this.keyConfigs = {\n tab: 'tab',\n home: 'home',\n end: 'end',\n enter: 'enter',\n space: 'space',\n delete: 'delete',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n moveDown: 'downarrow'\n };\n return _this;\n }\n /**\n * Removes the component from the DOM and detaches all its related event handlers, attributes and classes.\n * @returns void\n */\n Tab.prototype.destroy = function () {\n var _this = this;\n if (!isNOU(this.tbObj)) {\n this.tbObj.destroy();\n }\n this.unWireEvents();\n ['role', 'aria-disabled', 'aria-activedescendant', 'tabindex', 'aria-orientation'].forEach(function (val) {\n _this.element.removeAttribute(val);\n });\n this.expTemplateContent();\n if (!this.isTemplate) {\n this.element.innerHTML = '';\n }\n else {\n var cntEle = select('.' + CLS_TAB + ' > .' + CLS_CONTENT, this.element);\n this.element.classList.remove(CLS_TEMPLATE);\n if (!isNOU(cntEle)) {\n cntEle.innerHTML = this.cnt;\n }\n }\n _super.prototype.destroy.call(this);\n this.trigger('destroyed');\n };\n /**\n * Initialize component\n * @private\n */\n Tab.prototype.preRender = function () {\n var nested = closest(this.element, '.' + CLS_CONTENT);\n this.isNested = false;\n this.isPopup = false;\n this.initRender = true;\n this.isSwipeed = false;\n this.templateEle = [];\n if (!isNOU(nested)) {\n nested.parentElement.classList.add(CLS_NEST);\n this.isNested = true;\n }\n var name = Browser.info.name;\n var css = (name === 'msie') ? 'e-ie' : (name === 'edge') ? 'e-edge' : (name === 'safari') ? 'e-safari' : '';\n setStyle(this.element, { 'width': formatUnit(this.width), 'height': formatUnit(this.height) });\n this.setCssClass(this.element, this.cssClass, true);\n attributes(this.element, { role: 'tablist', 'aria-disabled': 'false', 'aria-activedescendant': '' });\n this.setCssClass(this.element, css, true);\n };\n /**\n * Initialize the component rendering\n * @private\n */\n Tab.prototype.render = function () {\n this.renderContainer();\n this.wireEvents();\n this.initRender = false;\n };\n Tab.prototype.renderContainer = function () {\n var ele = this.element;\n if (this.items.length > 0 && ele.children.length === 0) {\n ele.appendChild(buildTag('div', { className: CLS_CONTENT }));\n this.setOrientation(this.headerPlacement, buildTag('div', { className: CLS_HEADER }));\n this.isTemplate = false;\n }\n else if (this.element.children.length > 0) {\n this.isTemplate = true;\n ele.classList.add(CLS_TEMPLATE);\n var header = ele.querySelector('.' + CLS_HEADER);\n if (header && this.headerPlacement === 'Bottom') {\n this.setOrientation(this.headerPlacement, header);\n }\n }\n if (!isNOU(select('.' + CLS_HEADER, this.element)) && !isNOU(select('.' + CLS_CONTENT, this.element))) {\n this.renderHeader();\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n if (!isNOU(this.tbItems)) {\n rippleEffect(this.tbItems, { selector: '.e-tab-wrap' });\n }\n this.renderContent();\n if (selectAll('.' + CLS_TB_ITEM, this.element).length > 0) {\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n this.bdrLine = buildTag('div', { className: CLS_INDICATOR + ' ' + CLS_HIDDEN + ' ' + CLS_IGNORE });\n var scrCnt = select('.e-hscroll-content', this.tbItems);\n if (!isNOU(scrCnt)) {\n scrCnt.insertBefore(this.bdrLine, scrCnt.firstChild);\n }\n else {\n this.tbItems.insertBefore(this.bdrLine, this.tbItems.firstChild);\n }\n this.setContentHeight(true);\n this.select(this.selectedItem);\n }\n this.setRTL(this.enableRtl);\n }\n };\n Tab.prototype.renderHeader = function () {\n var _this = this;\n var tabItems = [];\n this.hdrEle = select('.' + CLS_HEADER, this.element);\n this.btnCls = buildTag('span', { className: CLS_ICONS + ' ' + CLS_ICON_CLOSE, attrs: { title: this.title } }).outerHTML;\n if (!this.isTemplate) {\n tabItems = this.parseObject(this.items, 0);\n }\n else {\n var count = this.hdrEle.children.length;\n var hdrItems = [];\n for (var i = 0; i < count; i++) {\n hdrItems.push(this.hdrEle.children.item(i).innerHTML);\n }\n if (count > 0) {\n this.hdrEle.innerHTML = '';\n this.hdrEle.appendChild(buildTag('div', { className: CLS_ITEMS }));\n hdrItems.forEach(function (item, index) {\n var attr = {\n className: CLS_ITEM, id: CLS_ITEM + '_' + index,\n attrs: { role: 'tab', 'aria-controls': CLS_CONTENT + '_' + index, 'aria-selected': 'false' }\n };\n var txt = buildTag('span', { className: CLS_TEXT, innerHTML: item, attrs: { 'role': 'presentation' } }).outerHTML;\n var cont = buildTag('div', { className: CLS_TEXT_WRAP, innerHTML: txt + _this.btnCls }).outerHTML;\n var wrap = buildTag('div', { className: CLS_WRAP, innerHTML: cont, attrs: { tabIndex: '-1' } });\n select('.' + CLS_ITEMS, _this.element).appendChild(buildTag('div', attr));\n selectAll('.' + CLS_ITEM, _this.element)[index].appendChild(wrap);\n });\n }\n }\n this.tbObj = new Toolbar({\n width: '100%',\n overflowMode: this.overflowMode,\n items: (tabItems.length !== 0) ? tabItems : [],\n clicked: this.clickHandler.bind(this)\n });\n this.tbObj.appendTo(this.hdrEle);\n attributes(this.element, { 'aria-orientation': 'horizontal' });\n this.setCloseButton(this.showCloseButton);\n this.setProperties({ headerPlacement: (this.element.children.item(0).classList.contains(CLS_HEADER)) ? 'Top' : 'Bottom' }, true);\n };\n Tab.prototype.renderContent = function () {\n this.cntEle = select('.' + CLS_CONTENT, this.element);\n var hdrItem = selectAll('.' + CLS_TB_ITEM, this.element);\n if (this.isTemplate) {\n this.cnt = (this.cntEle.children.length > 0) ? this.cntEle.innerHTML : '';\n var contents = this.cntEle.children;\n for (var i = 0; i < hdrItem.length; i++) {\n if (contents.length - 1 >= i) {\n contents.item(i).className += CLS_ITEM;\n attributes(contents.item(i), { 'role': 'tabpanel', 'aria-labelledby': CLS_ITEM + '_' + i });\n contents.item(i).id = CLS_CONTENT + '_' + i;\n }\n }\n }\n };\n Tab.prototype.parseObject = function (items, index) {\n var _this = this;\n var inHTML = '';\n var tbCount = selectAll('.' + CLS_TB_ITEM, this.element).length;\n var tItems = [];\n items.forEach(function (item, i) {\n var pos = (isNOU(item.header.iconPosition)) ? '' : item.header.iconPosition;\n var css = (isNOU(item.header.iconCss)) ? '' : item.header.iconCss;\n var txt = item.header.text;\n var id = ((tbCount === 0) ? i : (_this.isReplace === true) ? (i + index) : tbCount + i);\n var disabled = (item.disabled) ? ' ' + CLS_DISABLE + ' ' + CLS_OVERLAY : '';\n var tHtml = ((txt instanceof Object) ? txt.outerHTML : txt);\n var txtEmpty = (!isNOU(tHtml) && tHtml !== '');\n var tEle = (txtEmpty) ? buildTag('div', {\n className: CLS_TEXT, innerHTML: tHtml, attrs: { 'role': 'presentation' }\n }).outerHTML : '';\n var icon = buildTag('span', {\n className: CLS_ICONS + ' ' + CLS_TAB_ICON + ' ' + CLS_ICON + '-' + pos + ' ' + css\n }).outerHTML;\n if ((txt === '' || txt === undefined) && css === '') {\n return;\n }\n else {\n if ((txt !== '' && txt !== undefined) && css !== '') {\n inHTML = (pos === 'left' || pos === 'top') ? icon + '' + tEle : tEle + '' + icon;\n }\n else {\n inHTML = (css === '') ? tEle : icon;\n }\n }\n var wrapAttrs = (item.disabled) ? {} : { tabIndex: '-1' };\n var tCont = buildTag('div', { className: CLS_TEXT_WRAP, innerHTML: inHTML + '' + _this.btnCls }).outerHTML;\n var wrap = buildTag('div', { className: CLS_WRAP, innerHTML: tCont, attrs: wrapAttrs });\n var attrObj = {\n id: CLS_ITEM + '_' + id, role: 'tab', 'aria-selected': 'false'\n };\n var tItem = { htmlAttributes: attrObj, template: wrap.outerHTML };\n tItem.cssClass = item.cssClass + ' ' + disabled + ' ' + ((css !== '') ? 'e-i' + pos : '') + ' ' + ((!txtEmpty) ? CLS_ICON : '');\n if (pos === 'top' || pos === 'bottom') {\n _this.element.classList.add('e-vertical-icon');\n }\n tItems.push(tItem);\n });\n return tItems;\n };\n Tab.prototype.removeActiveClass = function (id) {\n var hdrActEle = selectAll(':root .' + CLS_HEADER + ' .' + CLS_TB_ITEM + '.' + CLS_ACTIVE, this.element)[0];\n if (this.headerPlacement === 'Bottom') {\n hdrActEle = selectAll(':root .' + CLS_HEADER + ' .' + CLS_TB_ITEM + '.' + CLS_ACTIVE, this.element.children[1])[0];\n }\n if (!isNOU(hdrActEle)) {\n hdrActEle.classList.remove(CLS_ACTIVE);\n var no = this.extIndex(hdrActEle.id);\n var trg = this.findEle(select('.' + CLS_CONTENT, this.element).children, CLS_CONTENT + '_' + no);\n }\n };\n Tab.prototype.checkPopupOverflow = function (ele) {\n this.tbPop = select('.' + CLS_TB_POP, this.element);\n var popIcon = select('.e-hor-nav', this.element);\n var tbrItems = select('.' + CLS_TB_ITEMS, this.element);\n if ((this.enableRtl && ((popIcon.offsetLeft + popIcon.offsetWidth) > tbrItems.offsetLeft))\n || (!this.enableRtl && popIcon.offsetLeft < tbrItems.offsetWidth)) {\n ele.classList.add(CLS_TB_POPUP);\n this.tbPop.insertBefore(ele.cloneNode(true), selectAll('.' + CLS_TB_POPUP, this.tbPop)[0]);\n ele.outerHTML = '';\n }\n return true;\n };\n Tab.prototype.popupHandler = function (target) {\n var ripEle = target.querySelector('.e-ripple-element');\n if (!isNOU(ripEle)) {\n ripEle.outerHTML = '';\n target.querySelector('.' + CLS_WRAP).classList.remove('e-ripple');\n }\n this.tbItem = selectAll('.' + CLS_TB_ITEMS + ' .' + CLS_TB_ITEM, this.hdrEle);\n var lastChild = this.tbItem[this.tbItem.length - 1];\n if (this.tbItem.length !== 0) {\n target.classList.remove(CLS_TB_POPUP);\n this.tbItems.appendChild(target.cloneNode(true));\n this.actEleId = target.id;\n target.outerHTML = '';\n if (this.checkPopupOverflow(lastChild)) {\n var prevEle = this.tbItems.lastChild.previousElementSibling;\n this.checkPopupOverflow(prevEle);\n }\n this.isPopup = true;\n }\n return selectAll('.' + CLS_TB_ITEM, this.tbItems).length - 1;\n };\n Tab.prototype.setCloseButton = function (val) {\n var trg = select('.' + CLS_HEADER, this.element);\n (val === true) ? trg.classList.add(CLS_CLOSE_SHOW) : trg.classList.remove(CLS_CLOSE_SHOW);\n this.tbObj.refreshOverflow();\n this.refreshActElePosition();\n };\n Tab.prototype.prevCtnAnimation = function (prev, current) {\n var animation;\n var checkRTL = this.enableRtl || this.element.classList.contains(CLS_RTL);\n if (this.isPopup || prev <= current) {\n if (this.animation.previous.effect === 'SlideLeftIn') {\n animation = { name: 'SlideLeftOut',\n duration: this.animation.previous.duration, timingFunction: this.animation.previous.easing };\n }\n else {\n animation = null;\n }\n }\n else {\n if (this.animation.next.effect === 'SlideRightIn') {\n animation = { name: 'SlideRightOut',\n duration: this.animation.next.duration, timingFunction: this.animation.next.easing };\n }\n else {\n animation = null;\n }\n }\n return animation;\n };\n Tab.prototype.triggerPrevAnimation = function (oldCnt, prevIndex) {\n var animateObj = this.prevCtnAnimation(prevIndex, this.selectedItem);\n if (!isNOU(animateObj)) {\n animateObj.begin = function () {\n setStyle(oldCnt, { 'position': 'absolute' });\n oldCnt.classList.add(CLS_PROGRESS);\n oldCnt.classList.add('e-view');\n };\n animateObj.end = function () {\n oldCnt.style.display = 'none';\n oldCnt.classList.remove(CLS_ACTIVE);\n oldCnt.classList.remove(CLS_PROGRESS);\n oldCnt.classList.remove('e-view');\n setStyle(oldCnt, { 'display': '', 'position': '' });\n };\n new Animation(animateObj).animate(oldCnt);\n }\n else {\n oldCnt.classList.remove(CLS_ACTIVE);\n }\n };\n Tab.prototype.triggerAnimation = function (id, value) {\n var _this = this;\n var prevIndex = this.prevIndex;\n var itemCollection = [].slice.call(this.element.querySelector('.' + CLS_CONTENT).children);\n var oldCnt;\n itemCollection.forEach(function (item) {\n if (item.id === _this.prevActiveEle) {\n oldCnt = item;\n }\n });\n var prevEle = this.tbItem[prevIndex];\n var no = this.extIndex(this.tbItem[this.selectedItem].id);\n var newCnt = this.getTrgContent(this.cntEle, no);\n if (isNOU(oldCnt) && !isNOU(prevEle)) {\n var idNo = this.extIndex(prevEle.id);\n oldCnt = this.getTrgContent(this.cntEle, idNo);\n }\n if (this.initRender || value === false || this.animation === {} || isNOU(this.animation)) {\n if (oldCnt && oldCnt !== newCnt) {\n oldCnt.classList.remove(CLS_ACTIVE);\n }\n return;\n }\n var cnt = select('.' + CLS_CONTENT, this.element);\n var animateObj;\n if (this.prevIndex > this.selectedItem && !this.isPopup) {\n var openEff = this.animation.previous.effect;\n animateObj = {\n name: ((openEff === 'None') ? '' : ((openEff !== 'SlideLeftIn') ? openEff : 'SlideLeftIn')),\n duration: this.animation.previous.duration,\n timingFunction: this.animation.previous.easing\n };\n }\n else if (this.isPopup || this.prevIndex < this.selectedItem || this.prevIndex === this.selectedItem) {\n var clsEff = this.animation.next.effect;\n animateObj = {\n name: ((clsEff === 'None') ? '' : ((clsEff !== 'SlideRightIn') ? clsEff : 'SlideRightIn')),\n duration: this.animation.next.duration,\n timingFunction: this.animation.next.easing\n };\n }\n animateObj.progress = function () {\n cnt.classList.add(CLS_PROGRESS);\n _this.setActiveBorder();\n };\n animateObj.end = function () {\n cnt.classList.remove(CLS_PROGRESS);\n newCnt.classList.add(CLS_ACTIVE);\n };\n if (!this.initRender) {\n this.triggerPrevAnimation(oldCnt, prevIndex);\n }\n this.prevActiveEle = newCnt.id;\n this.isPopup = false;\n if (animateObj.name === '') {\n newCnt.classList.add(CLS_ACTIVE);\n }\n else {\n new Animation(animateObj).animate(newCnt);\n }\n };\n Tab.prototype.keyPressed = function (trg) {\n var trgParent = closest(trg, '.' + CLS_HEADER + ' .' + CLS_TB_ITEM);\n var trgIndex = this.getEleIndex(trgParent);\n if (!isNOU(this.popEle) && trg.classList.contains('e-hor-nav')) {\n (this.popEle.classList.contains(CLS_POPUP_OPEN)) ? this.popObj.hide(this.hide) : this.popObj.show(this.show);\n }\n else if (trg.classList.contains('e-scroll-nav')) {\n trg.click();\n }\n else {\n if (!isNOU(trgParent) && trgParent.classList.contains(CLS_ACTIVE) === false) {\n this.select(trgIndex);\n if (!isNOU(this.popEle)) {\n this.popObj.hide(this.hide);\n }\n }\n }\n };\n Tab.prototype.getEleIndex = function (item) {\n return Array.prototype.indexOf.call(selectAll('.' + CLS_HEADER + ' .' + CLS_TB_ITEM, this.element), item);\n };\n Tab.prototype.extIndex = function (id) {\n return id.replace(CLS_ITEM + '_', '');\n };\n Tab.prototype.expTemplateContent = function () {\n var _this = this;\n this.templateEle.forEach(function (eleStr) {\n document.body.appendChild(_this.element.querySelector(eleStr)).style.display = 'none';\n });\n };\n Tab.prototype.templateCompile = function (ele, cnt) {\n var tempEle = buildTag('div');\n var templateFn = compile(cnt);\n if (!isNOU(templateFn) && templateFn().length > 0) {\n [].slice.call(templateFn()).forEach(function (el) {\n tempEle.appendChild(el);\n });\n ele.appendChild(tempEle);\n }\n };\n Tab.prototype.getContent = function (ele, index) {\n var eleStr;\n var cnt = this.items[Number(index)].content;\n if (typeof cnt === 'string' || isNOU(cnt.innerHTML)) {\n if (cnt[0] === '.' || cnt[0] === '#') {\n if (document.querySelectorAll(cnt).length) {\n var eleVal = document.querySelector(cnt);\n eleStr = eleVal.outerHTML.trim();\n ele.appendChild(eleVal.cloneNode(true));\n ele.querySelector(cnt).style.display = 'block';\n }\n else {\n this.templateCompile(ele, cnt);\n }\n }\n else {\n this.templateCompile(ele, cnt);\n }\n }\n else {\n ele.appendChild(cnt);\n }\n if (!isNOU(eleStr)) {\n this.templateEle.push(cnt.toString());\n }\n };\n Tab.prototype.getTrgContent = function (cntEle, no) {\n var ele;\n if (this.element.classList.contains(CLS_NEST)) {\n ele = select('.' + CLS_NEST + '> .' + CLS_CONTENT + ' > #' + CLS_CONTENT + '_' + no, this.element);\n }\n else {\n ele = this.findEle(cntEle.children, CLS_CONTENT + '_' + no);\n }\n return ele;\n };\n Tab.prototype.findEle = function (items, key) {\n var ele;\n for (var i = 0; i < items.length; i++) {\n if (items[i].id === key) {\n ele = items[i];\n break;\n }\n }\n return ele;\n };\n Tab.prototype.setOrientation = function (place, ele) {\n (place === 'Bottom') ? this.element.appendChild(ele) : this.element.insertBefore(ele, select('.' + CLS_CONTENT, this.element));\n };\n Tab.prototype.setCssClass = function (ele, cls, val) {\n if (cls === '') {\n return;\n }\n var list = cls.split(' ');\n for (var i = 0; i < list.length; i++) {\n if (val) {\n ele.classList.add(list[i]);\n }\n else {\n ele.classList.remove(list[i]);\n }\n }\n };\n Tab.prototype.setContentHeight = function (val) {\n if (isNOU(this.cntEle)) {\n return;\n }\n var height;\n var hdrEle = select('.' + CLS_HEADER, this.element);\n if (this.heightAdjustMode === 'None') {\n if (this.height === 'auto') {\n return;\n }\n else {\n setStyle(this.cntEle, { 'height': (this.element.offsetHeight - hdrEle.offsetHeight) + 'px' });\n }\n }\n else if (this.heightAdjustMode === 'Fill') {\n setStyle(this.element, { 'height': '100%' });\n setStyle(this.cntEle, { 'height': 'auto' });\n }\n else if (this.heightAdjustMode === 'Auto') {\n var cnt = selectAll('.' + CLS_CONTENT + ' > .' + CLS_ITEM, this.element);\n if (this.isTemplate === true) {\n for (var i = 0; i < cnt.length; i++) {\n cnt[i].setAttribute('style', 'display:block; visibility: visible');\n this.maxHeight = Math.max(this.maxHeight, this.getHeight(cnt[i]));\n cnt[i].style.removeProperty('display');\n cnt[i].style.removeProperty('visibility');\n }\n }\n else {\n this.cntEle = select('.' + CLS_CONTENT, this.element);\n if (val === true) {\n this.cntEle.appendChild(buildTag('div', {\n id: (CLS_CONTENT + '_' + 0), className: CLS_ITEM + ' ' + CLS_ACTIVE,\n attrs: { 'role': 'tabpanel', 'aria-labelledby': CLS_ITEM + '_' + 0 }\n }));\n }\n var ele = this.cntEle.children.item(0);\n for (var i = 0; i < this.items.length; i++) {\n this.getContent(ele, i);\n this.maxHeight = Math.max(this.maxHeight, this.getHeight(ele));\n ele.innerHTML = '';\n }\n this.templateEle = [];\n this.getContent(ele, 0);\n ele.classList.remove(CLS_ACTIVE);\n }\n setStyle(this.cntEle, { 'height': this.maxHeight + 'px' });\n }\n else {\n setStyle(this.cntEle, { 'height': 'auto' });\n }\n };\n Tab.prototype.getHeight = function (ele) {\n var cs = window.getComputedStyle(ele);\n return ele.offsetHeight + parseFloat(cs.getPropertyValue('padding-top')) + parseFloat(cs.getPropertyValue('padding-bottom')) +\n parseFloat(cs.getPropertyValue('margin-top')) + parseFloat(cs.getPropertyValue('margin-bottom'));\n };\n Tab.prototype.setActiveBorder = function () {\n var trg = select('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE, this.element);\n if (this.headerPlacement === 'Bottom') {\n trg = select('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE, this.element.children[1]);\n }\n if (trg === null) {\n return;\n }\n var root = closest(trg, '.' + CLS_TAB);\n if (this.element !== root) {\n return;\n }\n var hsCnt = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS + ' .e-hscroll-content', this.element.children[0]);\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n var bar = select('.' + CLS_HEADER + ' .' + CLS_INDICATOR, this.element);\n if (this.headerPlacement === 'Bottom') {\n hsCnt = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS + ' .e-hscroll-content', this.element.children[1]);\n }\n var tbWidth = (isNOU(hsCnt)) ? this.tbItems.offsetWidth : hsCnt.offsetWidth;\n if (tbWidth !== 0) {\n setStyle(bar, { 'left': trg.offsetLeft + 'px', 'right': tbWidth - (trg.offsetLeft + trg.offsetWidth) + 'px' });\n }\n else {\n setStyle(bar, { 'left': 'auto', 'right': 'auto' });\n }\n if (!isNOU(this.bdrLine)) {\n this.bdrLine.classList.remove(CLS_HIDDEN);\n }\n };\n Tab.prototype.setActive = function (value) {\n this.tbItem = selectAll('.' + CLS_HEADER + ' .' + CLS_TB_ITEM, this.element);\n var trg = this.tbItem[value];\n if (value >= 0) {\n this.setProperties({ selectedItem: value }, true);\n }\n if (value < 0 || isNaN(value) || this.tbItem.length === 0) {\n return;\n }\n if (trg.classList.contains(CLS_ACTIVE)) {\n this.setActiveBorder();\n return;\n }\n if (!this.isTemplate) {\n var prev = this.tbItem[this.prevIndex];\n if (!isNOU(prev)) {\n prev.removeAttribute('aria-controls');\n }\n attributes(trg, { 'aria-controls': CLS_CONTENT + '_' + value });\n }\n var id = trg.id;\n this.removeActiveClass(id);\n trg.classList.add(CLS_ACTIVE);\n trg.setAttribute('aria-selected', 'true');\n var no = Number(this.extIndex(id));\n attributes(this.element, { 'aria-activedescendant': id });\n if (this.isTemplate) {\n if (select('.' + CLS_CONTENT, this.element).children.length > 0) {\n var trg_1 = this.findEle(select('.' + CLS_CONTENT, this.element).children, CLS_CONTENT + '_' + no);\n if (!isNOU(trg_1)) {\n trg_1.classList.add(CLS_ACTIVE);\n }\n this.triggerAnimation(id, this.enableAnimation);\n }\n }\n else {\n this.cntEle = select('.' + CLS_TAB + ' > .' + CLS_CONTENT, this.element);\n var item = this.getTrgContent(this.cntEle, this.extIndex(id));\n if (isNOU(item)) {\n this.cntEle.appendChild(buildTag('div', {\n id: CLS_CONTENT + '_' + this.extIndex(id), className: CLS_ITEM + ' ' + CLS_ACTIVE,\n attrs: { role: 'tabpanel', 'aria-labelledby': CLS_ITEM + '_' + this.extIndex(id) }\n }));\n var eleTrg = this.getTrgContent(this.cntEle, this.extIndex(id));\n this.getContent(eleTrg, Number(this.extIndex(id)));\n }\n else {\n item.classList.add(CLS_ACTIVE);\n }\n this.triggerAnimation(id, this.enableAnimation);\n }\n this.setActiveBorder();\n var curActItem = select('.' + CLS_HEADER + ' #' + id, this.element);\n this.refreshItemVisibility(curActItem);\n curActItem.firstChild.focus();\n var eventArg = {\n previousItem: this.prevItem,\n previousIndex: this.prevIndex,\n selectedItem: trg,\n selectedIndex: value,\n isSwiped: this.isSwipeed\n };\n this.trigger('selected', eventArg);\n };\n Tab.prototype.setItems = function (items) {\n this.isReplace = true;\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n this.tbObj.items = this.parseObject(items, 0);\n this.tbObj.dataBind();\n this.isReplace = false;\n };\n Tab.prototype.setRTL = function (value) {\n this.tbObj.enableRtl = value;\n this.tbObj.dataBind();\n this.setCssClass(this.element, CLS_RTL, value);\n this.refreshActiveBorder();\n };\n Tab.prototype.refreshActiveBorder = function () {\n if (!isNOU(this.bdrLine)) {\n this.bdrLine.classList.add(CLS_HIDDEN);\n }\n this.setActiveBorder();\n };\n Tab.prototype.wireEvents = function () {\n window.addEventListener('resize', this.refreshActElePosition.bind(this));\n EventHandler.add(this.element, 'mouseover', this.hoverHandler, this);\n EventHandler.add(this.element, 'keydown', this.spaceKeyDown, this);\n if (!isNOU(this.cntEle)) {\n this.touchModule = new Touch(this.cntEle, { swipe: this.swipeHandler.bind(this) });\n }\n this.keyModule = new KeyboardEvents(this.element, { keyAction: this.keyHandler.bind(this), keyConfigs: this.keyConfigs });\n this.tabKeyModule = new KeyboardEvents(this.element, {\n keyAction: this.keyHandler.bind(this),\n keyConfigs: { openPopup: 'shift+f10', tab: 'tab', shiftTab: 'shift+tab' },\n eventName: 'keydown'\n });\n };\n Tab.prototype.unWireEvents = function () {\n this.keyModule.destroy();\n this.tabKeyModule.destroy();\n if (!isNOU(this.cntEle)) {\n this.touchModule.destroy();\n }\n window.removeEventListener('resize', this.refreshActElePosition.bind(this));\n this.element.removeEventListener('mouseover', this.hoverHandler.bind(this));\n };\n Tab.prototype.clickHandler = function (args) {\n this.element.classList.remove(CLS_FOCUS);\n var trg = args.originalEvent.target;\n var trgParent = closest(trg, '.' + CLS_TB_ITEM);\n var trgIndex = this.getEleIndex(trgParent);\n if (trg.classList.contains(CLS_ICON_CLOSE)) {\n this.removeTab(trgIndex);\n }\n else {\n this.isPopup = false;\n if (!isNOU(trgParent) && trgIndex !== this.selectedItem) {\n this.select(trgIndex);\n }\n }\n };\n Tab.prototype.swipeHandler = function (e) {\n if (e.velocity < 3 && isNOU(e.originalEvent.changedTouches)) {\n return;\n }\n this.isSwipeed = true;\n if (e.swipeDirection === 'Right') {\n this.select(this.selectedItem - 1);\n }\n else {\n if (e.swipeDirection === 'Left' && (this.selectedItem !== selectAll('.' + CLS_TB_ITEM, this.element).length - 1)) {\n this.select(this.selectedItem + 1);\n }\n }\n this.isSwipeed = false;\n };\n Tab.prototype.spaceKeyDown = function (e) {\n if ((e.keyCode === 32 && e.which === 32) || (e.keyCode === 35 && e.which === 35)) {\n var clstHead = closest(e.target, '.' + CLS_HEADER);\n if (!isNOU(clstHead)) {\n e.preventDefault();\n }\n }\n };\n Tab.prototype.keyHandler = function (e) {\n if (this.element.classList.contains(CLS_DISABLE)) {\n return;\n }\n this.element.classList.add(CLS_FOCUS);\n var trg = e.target;\n var actEle = select('.' + CLS_HEADER + ' .' + CLS_ACTIVE, this.element);\n var tabItem = selectAll('.' + CLS_TB_ITEM + ':not(.' + CLS_TB_POPUP + ')', this.element);\n this.popEle = select('.' + CLS_TB_POP, this.element);\n if (!isNOU(this.popEle)) {\n this.popObj = this.popEle.ej2_instances[0];\n }\n switch (e.action) {\n case 'space':\n case 'enter':\n if (trg.parentElement.classList.contains(CLS_DISABLE)) {\n return;\n }\n if (e.action === 'enter' && trg.classList.contains('e-hor-nav')) {\n break;\n }\n this.keyPressed(trg);\n break;\n case 'tab':\n case 'shiftTab':\n if (trg.classList.contains(CLS_WRAP)\n && closest(trg, '.' + CLS_TB_ITEM).classList.contains(CLS_ACTIVE) === false) {\n trg.setAttribute('tabindex', '-1');\n }\n if (this.popObj && isVisible(this.popObj.element)) {\n this.popObj.hide(this.hide);\n }\n actEle.children.item(0).setAttribute('tabindex', '0');\n break;\n case 'moveLeft':\n case 'moveRight':\n var item = closest(document.activeElement, '.' + CLS_TB_ITEM);\n if (!isNOU(item)) {\n this.refreshItemVisibility(item);\n }\n break;\n case 'openPopup':\n e.preventDefault();\n if (!isNOU(this.popEle) && this.popEle.classList.contains(CLS_POPUP_CLOSE)) {\n this.popObj.show(this.show);\n }\n break;\n case 'delete':\n var trgParent = closest(trg, '.' + CLS_TB_ITEM);\n if (this.showCloseButton === true && !isNOU(trgParent)) {\n var nxtSib = trgParent.nextSibling;\n if (!isNOU(nxtSib) && nxtSib.classList.contains(CLS_TB_ITEM)) {\n nxtSib.firstChild.focus();\n }\n this.removeTab(this.getEleIndex(trgParent));\n }\n this.setActiveBorder();\n break;\n }\n };\n Tab.prototype.refreshActElePosition = function () {\n var activeEle = select('.' + CLS_TB_ITEM + '.' + CLS_TB_POPUP + '.' + CLS_ACTIVE, this.element);\n if (!isNOU(activeEle)) {\n this.select(this.getEleIndex(activeEle));\n }\n this.refreshActiveBorder();\n };\n Tab.prototype.refreshItemVisibility = function (target) {\n var scrCnt = select('.e-hscroll-content', this.tbItems);\n if (!isNOU(scrCnt)) {\n var scrBar = select('.e-hscroll-bar', this.tbItems);\n var scrStart = scrBar.scrollLeft;\n var scrEnd = scrStart + scrBar.offsetWidth;\n var eleStart = target.offsetLeft;\n var eleWidth = target.offsetWidth;\n var eleEnd = target.offsetLeft + target.offsetWidth;\n if ((scrStart < eleStart) && (scrEnd < eleEnd)) {\n var eleViewRange = scrEnd - eleStart;\n scrBar.scrollLeft = scrStart + (eleWidth - eleViewRange);\n }\n else {\n if ((scrStart > eleStart) && (scrEnd > eleEnd)) {\n var eleViewRange = eleEnd - scrStart;\n scrBar.scrollLeft = scrStart - (eleWidth - eleViewRange);\n }\n }\n }\n else {\n return;\n }\n };\n Tab.prototype.hoverHandler = function (e) {\n var trg = e.target;\n if (!isNOU(trg.classList) && trg.classList.contains(CLS_ICON_CLOSE)) {\n trg.setAttribute('title', new L10n('tab', { closeButtonTitle: this.title }, this.locale).getConstant('closeButtonTitle'));\n }\n };\n /**\n * Enables or disables the specified Tab item. On passing value as `false`, the item will be disabled.\n * @param {number} index - Index value of target Tab item.\n * @param {boolean} value - Boolean value that determines whether the command should be enabled or disabled.\n * By default, isEnable is true.\n * @returns void.\n */\n Tab.prototype.enableTab = function (index, value) {\n var tbItems = selectAll('.' + CLS_TB_ITEM, this.element)[index];\n if (isNOU(tbItems)) {\n return;\n }\n if (value === true) {\n tbItems.classList.remove(CLS_DISABLE, CLS_OVERLAY);\n tbItems.firstChild.setAttribute('tabindex', '-1');\n }\n else {\n tbItems.classList.add(CLS_DISABLE, CLS_OVERLAY);\n tbItems.firstChild.removeAttribute('tabindex');\n if (tbItems.classList.contains(CLS_ACTIVE)) {\n this.select(index + 1);\n }\n }\n tbItems.setAttribute('aria-disabled', (value === true) ? 'false' : 'true');\n };\n /**\n * Adds new items to the Tab that accepts an array as Tab items.\n * @param {TabItemsModel[]} items - An array of item that is added to the Tab.\n * @param {number} index - Number value that determines where the items to be added. By default, index is 0.\n * @returns void.\n */\n Tab.prototype.addTab = function (items, index) {\n var _this = this;\n this.trigger('adding', { addedItems: items });\n if (isNOU(index)) {\n index = selectAll('.' + CLS_TB_ITEM).length - 1;\n }\n if (this.isTemplate === true || selectAll('.' + CLS_TB_ITEM).length - 1 < index || index < 0 || isNaN(index)) {\n return;\n }\n this.bdrLine.classList.add(CLS_HIDDEN);\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n var tabItems = this.parseObject(items, index);\n items.forEach(function (item, place) {\n if (_this.isReplace === true) {\n var hdrItem = select('.' + CLS_TB_ITEMS + ' #' + CLS_ITEM + '_' + index, _this.element);\n detach(hdrItem);\n _this.items.splice((index + place), 0, item);\n }\n else {\n _this.items.push(item);\n }\n });\n this.tbObj.addItems(tabItems, index);\n this.trigger('added', { addedItems: items });\n if (this.selectedItem === index) {\n this.select(index);\n }\n else {\n this.setActiveBorder();\n }\n };\n /**\n * Removes the items in the Tab from the specified index.\n * @param {number} index - Index of target item that is going to be removed.\n * @returns void.\n */\n Tab.prototype.removeTab = function (index) {\n var trg = selectAll('.' + CLS_TB_ITEM, this.element)[index];\n var removingArgs = { removedItem: trg, removedIndex: index };\n this.trigger('removing', removingArgs);\n if (isNOU(trg)) {\n return;\n }\n this.tbObj.removeItems(index);\n this.refreshActiveBorder();\n var no = this.extIndex(trg.id);\n var cntTrg = this.findEle(select('.' + CLS_CONTENT, this.element).children, CLS_CONTENT + '_' + no);\n if (!isNOU(cntTrg)) {\n cntTrg.outerHTML = '';\n }\n var removedArgs = { removedItem: trg, removedIndex: index };\n this.trigger('removed', removedArgs);\n if (trg.classList.contains(CLS_ACTIVE)) {\n index = (index > selectAll('.' + CLS_TB_ITEM + ':not(.' + CLS_TB_POPUP + ')', this.element).length - 1) ? index - 1 : index;\n this.enableAnimation = false;\n this.select(index);\n }\n if (selectAll('.' + CLS_TB_ITEM, this.element).length === 0) {\n this.hdrEle.style.display = 'none';\n }\n this.enableAnimation = true;\n };\n /**\n * Shows or hides the Tab that is in the specified index.\n * @param {number} index - Index value of target item.\n * @param {boolean} value - Based on this Boolean value, item will be hide (false) or show (true). By default, value is true.\n * @returns void.\n */\n Tab.prototype.hideTab = function (index, value) {\n var item = selectAll('.' + CLS_TB_ITEM, this.element)[index];\n if (isNOU(item)) {\n return;\n }\n if (isNOU(value)) {\n value = true;\n }\n this.bdrLine.classList.add(CLS_HIDDEN);\n if (value === true) {\n item.classList.add(CLS_HIDDEN);\n if (item.classList.contains(CLS_ACTIVE)) {\n this.select((index !== 0) ? index - 1 : index + 1);\n }\n }\n else {\n item.classList.remove(CLS_HIDDEN);\n }\n this.setActiveBorder();\n item.setAttribute('aria-hidden', '' + value);\n };\n /**\n * Specifies the index or HTMLElement to select an item from the Tab.\n * @param {number | HTMLElement} args - Index or DOM element is used for selecting an item from the Tab.\n * @returns void.\n */\n Tab.prototype.select = function (args) {\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n this.tbItem = selectAll('.' + CLS_HEADER + ' .' + CLS_TB_ITEM, this.element);\n this.prevItem = this.tbItem[this.prevIndex];\n if (!isNOU(this.prevItem) && !this.prevItem.classList.contains(CLS_DISABLE)) {\n this.prevItem.children.item(0).setAttribute('tabindex', '-1');\n }\n var eventArg = {\n previousItem: this.prevItem,\n previousIndex: this.prevIndex,\n selectedItem: this.tbItem[this.selectedItem],\n selectedIndex: this.selectedItem,\n isSwiped: this.isSwipeed\n };\n this.trigger('selecting', eventArg);\n if (eventArg.cancel) {\n return;\n }\n if (typeof args === 'number') {\n if (!isNOU(this.tbItem[args]) && this.tbItem[args].classList.contains(CLS_DISABLE)) {\n for (var i = args + 1; i < this.items.length; i++) {\n if (this.items[i].disabled === false) {\n args = i;\n break;\n }\n else {\n args = 0;\n }\n }\n }\n if (this.tbItem.length > args && args >= 0 && !isNaN(args)) {\n this.prevIndex = this.selectedItem;\n if (this.tbItem[args].classList.contains(CLS_TB_POPUP)) {\n this.setActive(this.popupHandler(this.tbItem[args]));\n }\n else {\n this.setActive(args);\n }\n }\n else {\n this.setActive(0);\n }\n }\n else if (args instanceof (HTMLElement)) {\n this.setActive(this.getEleIndex(args));\n }\n };\n /**\n * Specifies the value to disable/enable the Tab component.\n * When set to `true`, the component will be disabled.\n * @param {boolean} value - Based on this Boolean value, Tab will be enabled (false) or disabled (true).\n * @returns void.\n */\n Tab.prototype.disable = function (value) {\n this.setCssClass(this.element, CLS_DISABLE, value);\n this.element.setAttribute('aria-disabled', '' + value);\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\n */\n Tab.prototype.getPersistData = function () {\n return this.addOnPersist(['selectedItem', 'actEleId']);\n };\n /**\n * Returns the current module name.\n * @returns string\n * @private\n */\n Tab.prototype.getModuleName = function () {\n return 'tab';\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of the property that changed.\n * @param {TabModel} newProp\n * @param {TabModel} oldProp\n * @returns void\n * @private\n */\n Tab.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n setStyle(this.element, { width: formatUnit(newProp.width) });\n break;\n case 'height':\n setStyle(this.element, { height: formatUnit(newProp.height) });\n this.setContentHeight(false);\n break;\n case 'cssClass':\n this.setCssClass(this.element, newProp.cssClass, true);\n break;\n case 'items':\n if (!(newProp.items instanceof Array && oldProp.items instanceof Array)) {\n var changedProp = Object.keys(newProp.items);\n for (var i = 0; i < changedProp.length; i++) {\n var index = parseInt(Object.keys(newProp.items)[i], 10);\n var property = Object.keys(newProp.items[index])[0];\n var oldVal = Object(oldProp.items[index])[property];\n var newVal = Object(newProp.items[index])[property];\n var hdrItem = select('.' + CLS_TB_ITEMS + ' #' + CLS_ITEM + '_' + index, this.element);\n var cntItem = select('.' + CLS_CONTENT + ' #' + CLS_CONTENT + '_' + index, this.element);\n if (property === 'header') {\n var arr = [];\n arr.push(this.items[index]);\n this.items.splice(index, 1);\n this.tbObj.items.splice(index, 1);\n this.isReplace = true;\n this.addTab(arr, index);\n this.isReplace = false;\n }\n if (property === 'content' && !isNOU(cntItem)) {\n var strVal = typeof newVal === 'string' || isNOU(newVal.innerHTML);\n if (strVal && (newVal[0] === '.' || newVal[0] === '#') && newVal.length) {\n var eleVal = document.querySelector(newVal);\n var eleStr = eleVal.outerHTML.trim();\n cntItem.appendChild(eleVal.cloneNode(true));\n cntItem.querySelector(newVal).style.display = 'block';\n }\n else {\n cntItem.innerHTML = newVal;\n }\n }\n if (property === 'cssClass') {\n if (!isNOU(hdrItem)) {\n hdrItem.classList.remove(oldVal);\n hdrItem.classList.add(newVal);\n }\n if (!isNOU(cntItem)) {\n cntItem.classList.remove(oldVal);\n cntItem.classList.add(newVal);\n }\n }\n if (property === 'disabled') {\n this.enableTab(index, ((newVal === true) ? false : true));\n }\n }\n }\n else {\n if (isNOU(this.tbObj)) {\n this.renderContainer();\n if (!isNOU(this.cntEle)) {\n this.touchModule = new Touch(this.cntEle, { swipe: this.swipeHandler.bind(this) });\n }\n }\n else {\n this.setItems(newProp.items);\n select('.' + CLS_TAB + ' > .' + CLS_CONTENT, this.element).innerHTML = '';\n this.select(this.selectedItem);\n }\n }\n break;\n case 'showCloseButton':\n this.setCloseButton(newProp.showCloseButton);\n break;\n case 'selectedItem':\n this.selectedItem = oldProp.selectedItem;\n this.select(newProp.selectedItem);\n break;\n case 'headerPlacement':\n var tempHdrEle = select('.' + CLS_HEADER, this.element);\n this.setOrientation(newProp.headerPlacement, tempHdrEle);\n this.select(this.selectedItem);\n break;\n case 'enableRtl':\n this.setRTL(newProp.enableRtl);\n break;\n case 'overflowMode':\n this.tbObj.overflowMode = newProp.overflowMode;\n this.tbObj.dataBind();\n this.refreshActElePosition();\n break;\n case 'heightAdjustMode':\n this.setContentHeight(false);\n this.select(this.selectedItem);\n break;\n }\n }\n };\n __decorate([\n Collection([], TabItem)\n ], Tab.prototype, \"items\", void 0);\n __decorate([\n Property('100%')\n ], Tab.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Tab.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], Tab.prototype, \"cssClass\", void 0);\n __decorate([\n Property(0)\n ], Tab.prototype, \"selectedItem\", void 0);\n __decorate([\n Property('Top')\n ], Tab.prototype, \"headerPlacement\", void 0);\n __decorate([\n Property('Content')\n ], Tab.prototype, \"heightAdjustMode\", void 0);\n __decorate([\n Property('Scrollable')\n ], Tab.prototype, \"overflowMode\", void 0);\n __decorate([\n Property(false)\n ], Tab.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], Tab.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], Tab.prototype, \"showCloseButton\", void 0);\n __decorate([\n Complex({}, TabAnimationSettings)\n ], Tab.prototype, \"animation\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"adding\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"added\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"selecting\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"selected\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"removing\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"removed\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"destroyed\", void 0);\n Tab = __decorate([\n NotifyPropertyChanges\n ], Tab);\n return Tab;\n}(Component));\nexport { Tab };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, isUndefined, Browser, compile } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { rippleEffect, Animation } from '@syncfusion/ej2-base';\nimport { Draggable, Droppable } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, closest, matches, detach, select, selectAll, isVisible, createElement, append } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { isNullOrUndefined as isNOU, Touch, getValue, setValue } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { createCheckBox, rippleMouseHandler } from '@syncfusion/ej2-buttons';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nvar ROOT = 'e-treeview';\nvar COLLAPSIBLE = 'e-icon-collapsible';\nvar EXPANDABLE = 'e-icon-expandable';\nvar LISTITEM = 'e-list-item';\nvar LISTTEXT = 'e-list-text';\nvar PARENTITEM = 'e-list-parent';\nvar HOVER = 'e-hover';\nvar ACTIVE = 'e-active';\nvar LOAD = 'e-icons-spinner';\nvar PROCESS = 'e-process';\nvar ICON = 'e-icons';\nvar TEXTWRAP = 'e-text-content';\nvar INPUT = 'e-input';\nvar INPUTGROUP = 'e-input-group';\nvar TREEINPUT = 'e-tree-input';\nvar EDITING = 'e-editing';\nvar RTL = 'e-rtl';\nvar DRAGITEM = 'e-drag-item';\nvar DROPPABLE = 'e-droppable';\nvar DRAGGING = 'e-dragging';\nvar SIBLING = 'e-sibling';\nvar DROPIN = 'e-drop-in';\nvar DROPNEXT = 'e-drop-next';\nvar DROPOUT = 'e-drop-out';\nvar NODROP = 'e-no-drop';\nvar FULLROWWRAP = 'e-fullrow-wrap';\nvar FULLROW = 'e-fullrow';\nvar SELECTED = 'e-selected';\nvar EXPANDED = 'e-expanded';\nvar NODECOLLAPSED = 'e-node-collapsed';\nvar DISABLE = 'e-disable';\nvar CONTENT = 'e-content';\nvar DOWNTAIL = 'e-downtail';\nvar DROPCOUNT = 'e-drop-count';\nvar CHECK = 'e-check';\nvar INDETERMINATE = 'e-stop';\nvar CHECKBOXWRAP = 'e-checkbox-wrapper';\nvar CHECKBOXFRAME = 'e-frame';\nvar CHECKBOXRIPPLE = 'e-ripple-container';\nvar FOCUS = 'e-node-focus';\nvar IMAGE = 'e-list-img';\nvar BIGGER = 'e-bigger';\nvar SMALL = 'e-small';\nvar treeAriaAttr = {\n treeRole: 'tree',\n itemRole: 'treeitem',\n listRole: 'group',\n itemText: '',\n wrapperRole: '',\n};\n/**\n * Configures the fields to bind to the properties of node in the TreeView component.\n */\nvar FieldsSettings = /** @class */ (function (_super) {\n __extends(FieldsSettings, _super);\n function FieldsSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('child')\n ], FieldsSettings.prototype, \"child\", void 0);\n __decorate([\n Property([])\n ], FieldsSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Property('expanded')\n ], FieldsSettings.prototype, \"expanded\", void 0);\n __decorate([\n Property('hasChildren')\n ], FieldsSettings.prototype, \"hasChildren\", void 0);\n __decorate([\n Property('htmlAttributes')\n ], FieldsSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('iconCss')\n ], FieldsSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property('id')\n ], FieldsSettings.prototype, \"id\", void 0);\n __decorate([\n Property('imageUrl')\n ], FieldsSettings.prototype, \"imageUrl\", void 0);\n __decorate([\n Property('isChecked')\n ], FieldsSettings.prototype, \"isChecked\", void 0);\n __decorate([\n Property('parentID')\n ], FieldsSettings.prototype, \"parentID\", void 0);\n __decorate([\n Property(null)\n ], FieldsSettings.prototype, \"query\", void 0);\n __decorate([\n Property('selected')\n ], FieldsSettings.prototype, \"selected\", void 0);\n __decorate([\n Property(null)\n ], FieldsSettings.prototype, \"tableName\", void 0);\n __decorate([\n Property('text')\n ], FieldsSettings.prototype, \"text\", void 0);\n __decorate([\n Property('tooltip')\n ], FieldsSettings.prototype, \"tooltip\", void 0);\n __decorate([\n Property('navigateUrl')\n ], FieldsSettings.prototype, \"navigateUrl\", void 0);\n return FieldsSettings;\n}(ChildProperty));\nexport { FieldsSettings };\n/**\n * Configures animation settings for the TreeView component.\n */\nvar ActionSettings = /** @class */ (function (_super) {\n __extends(ActionSettings, _super);\n function ActionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('SlideDown')\n ], ActionSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(400)\n ], ActionSettings.prototype, \"duration\", void 0);\n __decorate([\n Property('linear')\n ], ActionSettings.prototype, \"easing\", void 0);\n return ActionSettings;\n}(ChildProperty));\nexport { ActionSettings };\n/**\n * Configures the animation settings for expanding and collapsing nodes in TreeView.\n */\nvar NodeAnimationSettings = /** @class */ (function (_super) {\n __extends(NodeAnimationSettings, _super);\n function NodeAnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ effect: 'SlideUp', duration: 400, easing: 'linear' }, ActionSettings)\n ], NodeAnimationSettings.prototype, \"collapse\", void 0);\n __decorate([\n Complex({ effect: 'SlideDown', duration: 400, easing: 'linear' }, ActionSettings)\n ], NodeAnimationSettings.prototype, \"expand\", void 0);\n return NodeAnimationSettings;\n}(ChildProperty));\nexport { NodeAnimationSettings };\n/**\n * The TreeView component is used to represent hierarchical data in a tree like structure with advanced\n * functions to perform edit, drag and drop, selection with check-box, and more.\n * ```html\n *
    \n * ```\n * ```typescript\n * let treeObj: TreeView = new TreeView();\n * treeObj.appendTo('#tree');\n * ```\n */\nvar TreeView = /** @class */ (function (_super) {\n __extends(TreeView, _super);\n function TreeView(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.mouseDownStatus = false;\n return _this;\n }\n /**\n * Get component name.\n * @returns string\n * @private\n */\n TreeView.prototype.getModuleName = function () {\n return 'treeview';\n };\n /**\n * Initialize the event handler\n */\n TreeView.prototype.preRender = function () {\n var _this = this;\n this.checkActionNodes = [];\n this.dragStartAction = false;\n this.isAnimate = false;\n this.keyConfigs = {\n escape: 'escape',\n end: 'end',\n enter: 'enter',\n f2: 'f2',\n home: 'home',\n moveDown: 'downarrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n ctrlDown: 'ctrl+downarrow',\n ctrlUp: 'ctrl+uparrow',\n ctrlEnter: 'ctrl+enter',\n ctrlHome: 'ctrl+home',\n ctrlEnd: 'ctrl+end',\n ctrlA: 'ctrl+A',\n shiftDown: 'shift+downarrow',\n shiftUp: 'shift+uparrow',\n shiftEnter: 'shift+enter',\n shiftHome: 'shift+home',\n shiftEnd: 'shift+end',\n csDown: 'ctrl+shift+downarrow',\n csUp: 'ctrl+shift+uparrow',\n csEnter: 'ctrl+shift+enter',\n csHome: 'ctrl+shift+home',\n csEnd: 'ctrl+shift+end',\n space: 'space',\n };\n this.listBaseOption = {\n expandCollapse: true,\n fields: this.fields.properties,\n showIcon: true,\n expandIconClass: EXPANDABLE,\n ariaAttributes: treeAriaAttr,\n expandIconPosition: 'Left',\n itemCreated: function (e) {\n _this.beforeNodeCreate(e);\n },\n };\n this.listBaseOption.fields.url = this.fields.navigateUrl;\n this.aniObj = new Animation({});\n this.treeList = [];\n this.isLoaded = false;\n this.setTouchClass();\n if (isNOU(this.selectedNodes)) {\n this.setProperties({ selectedNodes: [] }, true);\n }\n if (isNOU(this.checkedNodes)) {\n this.setProperties({ checkedNodes: [] }, true);\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\n * @hidden\n */\n TreeView.prototype.getPersistData = function () {\n var keyEntity = ['selectedNodes', 'checkedNodes'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n TreeView.prototype.render = function () {\n this.isAnimate = true;\n this.initialize();\n this.setDataBinding();\n this.setExpandOnType();\n this.setRipple();\n this.wireEditingEvents(this.allowEditing);\n this.setDragAndDrop(this.allowDragAndDrop);\n this.wireEvents();\n };\n TreeView.prototype.initialize = function () {\n this.element.setAttribute('role', 'tree');\n this.element.setAttribute('tabindex', '0');\n this.element.setAttribute('aria-activedescendant', this.element.id + '_active');\n this.setCssClass(null, this.cssClass);\n this.setEnableRtl();\n this.setFullRow(this.fullRowSelect);\n this.nodeTemplateFn = this.templateComplier(this.nodeTemplate);\n };\n TreeView.prototype.setEnableRtl = function () {\n this.enableRtl ? addClass([this.element], RTL) : removeClass([this.element], RTL);\n };\n TreeView.prototype.setRipple = function () {\n var tempStr = '.' + FULLROW + ',.' + TEXTWRAP;\n var rippleModel = {\n selector: tempStr,\n ignore: '.' + TEXTWRAP + ' > .' + ICON + ',.' + INPUTGROUP + ',.' + INPUT + ', .' + CHECKBOXWRAP\n };\n this.rippleFn = rippleEffect(this.element, rippleModel);\n var iconModel = {\n selector: '.' + TEXTWRAP + ' > .' + ICON,\n isCenterRipple: true,\n };\n this.rippleIconFn = rippleEffect(this.element, iconModel);\n };\n TreeView.prototype.setFullRow = function (isEnabled) {\n isEnabled ? addClass([this.element], FULLROWWRAP) : removeClass([this.element], FULLROWWRAP);\n };\n TreeView.prototype.setMultiSelect = function (isEnabled) {\n var firstUl = select('.' + PARENTITEM, this.element);\n if (isEnabled) {\n firstUl.setAttribute('aria-multiselectable', 'true');\n }\n else {\n firstUl.removeAttribute('aria-multiselectable');\n }\n };\n TreeView.prototype.templateComplier = function (template) {\n if (template) {\n var e = void 0;\n try {\n if (document.querySelectorAll(template).length) {\n return compile(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n return compile(template);\n }\n }\n return undefined;\n };\n TreeView.prototype.setDataBinding = function () {\n var _this = this;\n this.treeList.push('false');\n if (this.fields.dataSource instanceof DataManager) {\n this.fields.dataSource.executeQuery(this.getQuery(this.fields)).then(function (e) {\n _this.treeList.pop();\n _this.treeData = e.result;\n _this.isNumberTypeId = _this.getType();\n _this.setRootData();\n _this.renderItems(true);\n if (_this.treeList.length === 0 && !_this.isLoaded) {\n _this.finalize();\n }\n });\n }\n else {\n this.treeList.pop();\n if (isNOU(this.fields.dataSource)) {\n this.rootData = this.treeData = [];\n }\n else {\n this.treeData = this.fields.dataSource;\n this.setRootData();\n }\n this.renderItems(false);\n }\n if (this.treeList.length === 0 && !this.isLoaded) {\n this.finalize();\n }\n };\n TreeView.prototype.getQuery = function (mapper, value) {\n if (value === void 0) { value = null; }\n var columns = [];\n var query;\n if (!mapper.query) {\n query = new Query();\n var prop = this.getActualProperties(mapper);\n for (var _i = 0, _a = Object.keys(prop); _i < _a.length; _i++) {\n var col = _a[_i];\n if (col !== 'dataSource' && col !== 'tableName' && col !== 'child' && !!mapper[col]\n && columns.indexOf(mapper[col]) === -1) {\n columns.push(mapper[col]);\n }\n }\n query.select(columns);\n if (prop.hasOwnProperty('tableName')) {\n query.from(mapper.tableName);\n }\n }\n else {\n query = mapper.query.clone();\n }\n ListBase.addSorting(this.sortOrder, mapper.text, query);\n if (!isNOU(value) && !isNOU(mapper.parentID)) {\n query.where(mapper.parentID, 'equal', (this.isNumberTypeId ? parseFloat(value) : value));\n }\n return query;\n };\n TreeView.prototype.getType = function () {\n return this.treeData[0] ? ((typeof getValue(this.fields.id, this.treeData[0]) === 'number') ? true : false) : false;\n };\n TreeView.prototype.setRootData = function () {\n this.dataType = this.getDataType(this.treeData, this.fields);\n if (this.dataType === 1) {\n this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n var rootItems = this.getChildNodes(this.treeData, undefined, true);\n if (isNOU(rootItems)) {\n this.rootData = [];\n }\n else {\n this.rootData = rootItems;\n }\n }\n else {\n this.rootData = this.treeData;\n }\n };\n TreeView.prototype.renderItems = function (isSorted) {\n this.listBaseOption.ariaAttributes.level = 1;\n this.ulElement = ListBase.createList(isSorted ? this.rootData : this.getSortedData(this.rootData), this.listBaseOption);\n this.element.appendChild(this.ulElement);\n this.finalizeNode(this.element);\n };\n TreeView.prototype.beforeNodeCreate = function (e) {\n if (this.showCheckBox) {\n var checkboxEle = createCheckBox(true, { cssClass: this.touchClass });\n var icon = select('div.' + ICON, e.item);\n var id = e.item.getAttribute('data-uid');\n e.item.childNodes[0].insertBefore(checkboxEle, e.item.childNodes[0].childNodes[isNOU(icon) ? 0 : 1]);\n var checkValue = getValue(e.fields.isChecked, e.curData);\n if (this.checkedNodes.indexOf(id) > -1) {\n select('.' + CHECKBOXFRAME, checkboxEle).classList.add(CHECK);\n checkboxEle.setAttribute('aria-checked', 'true');\n this.addCheck(e.item);\n }\n else if (!isNOU(checkValue) && checkValue.toString() === 'true') {\n select('.' + CHECKBOXFRAME, checkboxEle).classList.add(CHECK);\n checkboxEle.setAttribute('aria-checked', 'true');\n this.addCheck(e.item);\n }\n else {\n checkboxEle.setAttribute('aria-checked', 'false');\n }\n var frame = select('.' + CHECKBOXFRAME, checkboxEle);\n EventHandler.add(frame, 'mousedown', this.frameMouseHandler, this);\n EventHandler.add(frame, 'mouseup', this.frameMouseHandler, this);\n }\n if (this.fullRowSelect) {\n this.createFullRow(e.item);\n }\n if (this.allowMultiSelection && !e.item.classList.contains(SELECTED)) {\n e.item.setAttribute('aria-selected', 'false');\n }\n var fields = e.fields;\n this.addActionClass(e, fields.selected, SELECTED);\n this.addActionClass(e, fields.expanded, EXPANDED);\n if (!isNOU(this.nodeTemplateFn)) {\n var textEle = e.item.querySelector('.' + LISTTEXT);\n textEle.innerHTML = '';\n append(this.nodeTemplateFn(e.curData), textEle);\n }\n var eventArgs = {\n node: e.item,\n nodeData: e.curData,\n text: e.text,\n };\n this.trigger('drawNode', eventArgs);\n };\n TreeView.prototype.frameMouseHandler = function (e) {\n var rippleSpan = select('.' + CHECKBOXRIPPLE, e.target.parentElement);\n rippleMouseHandler(e, rippleSpan);\n };\n TreeView.prototype.addActionClass = function (e, action, cssClass) {\n var data = e.curData;\n var actionValue = getValue(action, data);\n if (!isNOU(actionValue) && actionValue.toString() !== 'false') {\n e.item.classList.add(cssClass);\n }\n };\n TreeView.prototype.getDataType = function (ds, mapper) {\n if (this.fields.dataSource instanceof DataManager) {\n for (var i = 0; i < ds.length; i++) {\n if ((typeof mapper.child === 'string') && isNOU(getValue(mapper.child, ds[i]))) {\n return 1;\n }\n }\n return 2;\n }\n for (var i = 0, len = ds.length; i < len; i++) {\n if ((typeof mapper.child === 'string') && !isNOU(getValue(mapper.child, ds[i]))) {\n return 2;\n }\n if (!isNOU(getValue(mapper.parentID, ds[i])) || !isNOU(getValue(mapper.hasChildren, ds[i]))) {\n return 1;\n }\n }\n return 1;\n };\n TreeView.prototype.getGroupedData = function (dataSource, groupBy) {\n var cusQuery = new Query().group(groupBy);\n var ds = ListBase.getDataSource(dataSource, cusQuery);\n var grpItem = [];\n for (var j = 0; j < ds.length; j++) {\n var itemObj = ds[j].items;\n grpItem.push(itemObj);\n }\n return grpItem;\n };\n TreeView.prototype.getSortedData = function (list) {\n if (list && this.sortOrder !== 'None') {\n list = ListBase.getDataSource(list, ListBase.addSorting(this.sortOrder, this.fields.text));\n }\n return list;\n };\n TreeView.prototype.finalizeNode = function (element) {\n var iNodes = selectAll('.' + IMAGE, element);\n for (var k = 0; k < iNodes.length; k++) {\n iNodes[k].setAttribute('alt', IMAGE);\n }\n if (this.isLoaded) {\n var sNodes = selectAll('.' + SELECTED, element);\n for (var i = 0; i < sNodes.length; i++) {\n this.selectNode(sNodes[i], null);\n break;\n }\n removeClass(sNodes, SELECTED);\n }\n var cNodes = selectAll('.' + LISTITEM + ':not(.' + EXPANDED + ')', element);\n for (var j = 0; j < cNodes.length; j++) {\n var icon = select('div.' + ICON, cNodes[j]);\n if (icon && icon.classList.contains(EXPANDABLE)) {\n cNodes[j].setAttribute('aria-expanded', 'false');\n addClass([cNodes[j]], NODECOLLAPSED);\n }\n }\n var eNodes = selectAll('.' + EXPANDED, element);\n for (var i = 0; i < eNodes.length; i++) {\n this.renderChildNodes(eNodes[i]);\n }\n removeClass(eNodes, EXPANDED);\n this.updateList();\n if (this.isLoaded) {\n this.updateCheckedProp();\n }\n };\n TreeView.prototype.updateCheckedProp = function () {\n var _this = this;\n if (this.showCheckBox) {\n var nodes_1 = [].concat([], this.checkedNodes);\n this.checkedNodes.forEach(function (value, index) {\n var checkBox = _this.element.querySelector('[data-uid=\"' + value + '\"]');\n if (isNOU(checkBox)) {\n nodes_1 = nodes_1.filter(function (e) { return e !== value; });\n }\n });\n this.setProperties({ checkedNodes: nodes_1 }, true);\n }\n };\n TreeView.prototype.ensureParentCheckState = function (element) {\n if (!isNOU(element)) {\n if (element.classList.contains(ROOT)) {\n return;\n }\n var ulElement = element;\n if (element.classList.contains(LISTITEM)) {\n ulElement = select('.' + PARENTITEM, element);\n }\n var checkedNodes = selectAll('.' + CHECK, ulElement);\n var nodes = selectAll('.' + LISTITEM, ulElement);\n var checkBoxEle = element.getElementsByClassName(CHECKBOXWRAP)[0];\n if (nodes.length === checkedNodes.length) {\n this.changeState(checkBoxEle, 'check', null, true, true);\n }\n else if (checkedNodes.length > 0) {\n this.changeState(checkBoxEle, 'indeterminate', null, true, true);\n }\n else if (checkedNodes.length === 0) {\n this.changeState(checkBoxEle, 'uncheck', null, true, true);\n }\n var parentUL = closest(element, '.' + PARENTITEM);\n if (!isNOU(parentUL)) {\n var currentParent = closest(parentUL, '.' + LISTITEM);\n this.ensureParentCheckState(currentParent);\n }\n }\n };\n TreeView.prototype.ensureChildCheckState = function (element, e) {\n if (!isNOU(element)) {\n var childElement = select('.' + PARENTITEM, element);\n var checkBoxes = void 0;\n if (!isNOU(childElement)) {\n checkBoxes = selectAll('.' + CHECKBOXWRAP, childElement);\n var isChecked = element.getElementsByClassName(CHECKBOXFRAME)[0].classList.contains(CHECK);\n var checkedState = void 0;\n for (var index = 0; index < checkBoxes.length; index++) {\n if (!isNOU(this.currentLoadData) && !isNOU(getValue(this.fields.isChecked, this.currentLoadData[index]))) {\n checkedState = getValue(this.fields.isChecked, this.currentLoadData[index]) ? 'check' : 'uncheck';\n }\n else {\n var isNodeChecked = checkBoxes[index].getElementsByClassName(CHECKBOXFRAME)[0].classList.contains(CHECK);\n checkedState = (!this.isLoaded && isNodeChecked) ? 'check' : (isChecked ? 'check' : 'uncheck');\n }\n this.changeState(checkBoxes[index], checkedState, e, true, true);\n }\n }\n }\n };\n TreeView.prototype.doCheckBoxAction = function (nodes, doCheck) {\n if (!isNOU(nodes)) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n continue;\n }\n var checkBox = select('.' + PARENTITEM + ' .' + CHECKBOXWRAP, liEle);\n this.validateCheckNode(checkBox, !doCheck, liEle, null);\n }\n }\n else {\n var checkBoxes = selectAll('.' + CHECKBOXWRAP, this.element);\n for (var index = 0; index < checkBoxes.length; index++) {\n this.changeState(checkBoxes[index], doCheck ? 'check' : 'uncheck');\n }\n }\n };\n TreeView.prototype.changeState = function (wrapper, state, e, isPrevent, isAdd) {\n var ariaState;\n var eventArgs;\n var currLi = closest(wrapper, '.' + LISTITEM);\n if (!isPrevent) {\n this.checkActionNodes = [];\n eventArgs = this.getCheckEvent(currLi, state, e);\n this.trigger('nodeChecking', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n }\n var frameSpan = wrapper.getElementsByClassName(CHECKBOXFRAME)[0];\n if (state === 'check' && !frameSpan.classList.contains(CHECK)) {\n frameSpan.classList.remove(INDETERMINATE);\n frameSpan.classList.add(CHECK);\n this.addCheck(currLi);\n ariaState = 'true';\n }\n else if (state === 'uncheck' && (frameSpan.classList.contains(CHECK) || frameSpan.classList.contains(INDETERMINATE))) {\n removeClass([frameSpan], [CHECK, INDETERMINATE]);\n this.removeCheck(currLi);\n ariaState = 'false';\n }\n else if (state === 'indeterminate' && !frameSpan.classList.contains(INDETERMINATE)) {\n frameSpan.classList.remove(CHECK);\n frameSpan.classList.add(INDETERMINATE);\n this.removeCheck(currLi);\n ariaState = 'mixed';\n }\n ariaState = state === 'check' ? 'true' : state === 'uncheck' ? 'false' : ariaState;\n if (!isNOU(ariaState)) {\n wrapper.setAttribute('aria-checked', ariaState);\n }\n if (isAdd) {\n var data = [].concat([], this.checkActionNodes);\n eventArgs = this.getCheckEvent(currLi, state, e);\n if (isUndefined(isPrevent)) {\n eventArgs.data = data;\n }\n }\n if (!isPrevent) {\n if (!isNOU(ariaState)) {\n wrapper.setAttribute('aria-checked', ariaState);\n eventArgs.data[0].checked = ariaState;\n this.trigger('nodeChecked', eventArgs);\n this.checkActionNodes = [];\n }\n }\n };\n TreeView.prototype.addCheck = function (liEle) {\n var id = liEle.getAttribute('data-uid');\n if (!isNOU(id) && this.checkedNodes.indexOf(id) === -1) {\n this.checkedNodes.push(id);\n }\n };\n TreeView.prototype.removeCheck = function (liEle) {\n var index = this.checkedNodes.indexOf(liEle.getAttribute('data-uid'));\n if (index > -1) {\n this.checkedNodes.splice(index, 1);\n }\n };\n TreeView.prototype.getCheckEvent = function (currLi, action, e) {\n this.checkActionNodes.push(this.getNodeData(currLi));\n var nodeData = this.checkActionNodes;\n return { action: action, cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, data: nodeData };\n };\n TreeView.prototype.finalize = function () {\n var firstUl = select('.' + PARENTITEM, this.element);\n firstUl.setAttribute('role', treeAriaAttr.treeRole);\n this.setMultiSelect(this.allowMultiSelection);\n var firstNode = select('.' + LISTITEM, this.element);\n if (firstNode) {\n addClass([firstNode], FOCUS);\n this.updateIdAttr(null, firstNode);\n }\n this.doSelectionAction();\n this.updateCheckedProp();\n this.isLoaded = true;\n this.isAnimate = false;\n var eventArgs = { data: this.treeData };\n this.trigger('dataBound', eventArgs);\n };\n TreeView.prototype.doSelectionAction = function () {\n var sNodes = selectAll('.' + SELECTED, this.element);\n var sUids = this.selectedNodes;\n if (sUids.length > 0) {\n this.setProperties({ selectedNodes: [] }, true);\n for (var i = 0; i < sUids.length; i++) {\n var sNode = select('[data-uid=\"' + sUids[i] + '\"]', this.element);\n this.selectNode(sNode, null, true);\n if (!this.allowMultiSelection) {\n break;\n }\n }\n }\n else {\n this.selectGivenNodes(sNodes);\n }\n removeClass(sNodes, SELECTED);\n };\n TreeView.prototype.selectGivenNodes = function (sNodes) {\n for (var i = 0; i < sNodes.length; i++) {\n this.selectNode(sNodes[i], null, true);\n if (!this.allowMultiSelection) {\n break;\n }\n }\n };\n TreeView.prototype.clickHandler = function (event) {\n var target = event.originalEvent.target;\n EventHandler.remove(this.element, 'contextmenu', this.preventContextMenu);\n if (!target || this.dragStartAction) {\n return;\n }\n else {\n var classList = target.classList;\n var li = closest(target, '.' + LISTITEM);\n if (!li) {\n return;\n }\n else {\n this.removeHover();\n this.setFocusElement(li);\n if (this.showCheckBox && !li.classList.contains('e-disable')) {\n var checkWrapper = closest(target, '.' + CHECKBOXWRAP);\n if (!isNOU(checkWrapper)) {\n var checkElement = select('.' + CHECKBOXFRAME, checkWrapper);\n this.validateCheckNode(checkWrapper, checkElement.classList.contains(CHECK), li, event.originalEvent);\n this.triggerClickEvent(event.originalEvent, li);\n return;\n }\n }\n if (classList.contains(EXPANDABLE)) {\n this.expandAction(li, target, event);\n }\n else if (classList.contains(COLLAPSIBLE)) {\n this.collapseNode(li, target, event);\n }\n else {\n if (!classList.contains(PARENTITEM) && !classList.contains(LISTITEM)) {\n this.toggleSelect(li, event.originalEvent, false);\n }\n }\n this.triggerClickEvent(event.originalEvent, li);\n }\n }\n };\n TreeView.prototype.nodeCheckingEvent = function (wrapper, isCheck, e) {\n var currLi = closest(wrapper, '.' + LISTITEM);\n this.checkActionNodes = [];\n var ariaState = !isCheck ? 'true' : 'false';\n if (!isNOU(ariaState)) {\n wrapper.setAttribute('aria-checked', ariaState);\n }\n var eventArgs = this.getCheckEvent(currLi, !isCheck ? 'uncheck' : 'check', e);\n this.trigger('nodeChecking', eventArgs);\n return eventArgs;\n };\n TreeView.prototype.nodeCheckedEvent = function (wrapper, isCheck, e) {\n var currLi = closest(wrapper, '.' + LISTITEM);\n var eventArgs = this.getCheckEvent(wrapper, isCheck ? 'uncheck' : 'check', e);\n eventArgs.data = eventArgs.data.splice(0, eventArgs.data.length - 1);\n this.trigger('nodeChecked', eventArgs);\n };\n TreeView.prototype.triggerClickEvent = function (e, li) {\n var eventArgs = {\n event: e,\n node: li,\n };\n this.trigger('nodeClicked', eventArgs);\n };\n TreeView.prototype.expandNode = function (currLi, icon) {\n var _this = this;\n if (icon.classList.contains(LOAD)) {\n this.hideSpinner(icon);\n }\n removeClass([icon], EXPANDABLE);\n addClass([icon], COLLAPSIBLE);\n var start = 0;\n var end = 0;\n var proxy = this;\n var ul = select('.' + PARENTITEM, currLi);\n var liEle = currLi;\n this.setHeight(liEle, ul);\n if (!this.isAnimate) {\n this.aniObj.animate(ul, {\n name: this.animation.expand.effect,\n duration: this.animation.expand.duration,\n timingFunction: this.animation.expand.easing,\n begin: function (args) {\n liEle.style.overflow = 'hidden';\n start = liEle.offsetHeight;\n end = select('.' + TEXTWRAP, currLi).offsetHeight;\n },\n progress: function (args) {\n args.element.style.display = 'block';\n proxy.animateHeight(args, start, end);\n },\n end: function (args) {\n args.element.style.display = 'block';\n _this.expandedNode(liEle, ul, icon);\n }\n });\n }\n else {\n this.expandedNode(liEle, ul, icon);\n }\n };\n TreeView.prototype.expandedNode = function (currLi, ul, icon) {\n ul.style.display = 'block';\n currLi.style.display = 'block';\n currLi.style.overflow = '';\n currLi.style.height = '';\n removeClass([icon], PROCESS);\n currLi.setAttribute('aria-expanded', 'true');\n removeClass([currLi], NODECOLLAPSED);\n if (this.isLoaded && this.expandArgs) {\n this.expandArgs = this.getExpandEvent(currLi, null);\n this.trigger('nodeExpanded', this.expandArgs);\n }\n };\n TreeView.prototype.collapseNode = function (currLi, icon, e) {\n var _this = this;\n if (icon.classList.contains(PROCESS)) {\n return;\n }\n else {\n addClass([icon], PROCESS);\n }\n var colArgs;\n if (this.isLoaded) {\n colArgs = this.getExpandEvent(currLi, e);\n this.trigger('nodeCollapsing', colArgs);\n if (colArgs.cancel) {\n removeClass([icon], PROCESS);\n return;\n }\n }\n removeClass([icon], COLLAPSIBLE);\n addClass([icon], EXPANDABLE);\n var start = 0;\n var end = 0;\n var proxy = this;\n var ul = select('.' + PARENTITEM, currLi);\n var liEle = currLi;\n addClass([currLi], NODECOLLAPSED);\n this.aniObj.animate(ul, {\n name: this.animation.collapse.effect,\n duration: this.animation.collapse.duration,\n timingFunction: this.animation.collapse.easing,\n begin: function (args) {\n liEle.style.overflow = 'hidden';\n start = select('.' + TEXTWRAP, currLi).offsetHeight;\n end = liEle.offsetHeight;\n },\n progress: function (args) {\n proxy.animateHeight(args, start, end);\n },\n end: function (args) {\n liEle.style.overflow = '';\n args.element.style.display = 'none';\n liEle.style.height = '';\n removeClass([icon], PROCESS);\n currLi.setAttribute('aria-expanded', 'false');\n if (_this.isLoaded) {\n _this.trigger('nodeCollapsed', colArgs);\n }\n }\n });\n };\n TreeView.prototype.setHeight = function (currLi, ul) {\n ul.style.display = 'block';\n ul.style.visibility = 'hidden';\n currLi.style.height = currLi.offsetHeight + 'px';\n ul.style.display = 'none';\n ul.style.visibility = '';\n };\n TreeView.prototype.animateHeight = function (args, start, end) {\n var remaining = (args.duration - args.timeStamp) / args.duration;\n var currentHeight = (end - start) * remaining + start;\n args.element.parentElement.style.height = currentHeight + 'px';\n };\n TreeView.prototype.renderChildNodes = function (parentLi, expandChild) {\n var _this = this;\n var eicon = select('div.' + ICON, parentLi);\n if (isNOU(eicon)) {\n return;\n }\n this.showSpinner(eicon);\n var childItems;\n if (this.fields.dataSource instanceof DataManager) {\n var level = this.parents(parentLi, '.' + PARENTITEM).length;\n var mapper_1 = this.getChildFields(this.fields, level, 1);\n if (isNOU(mapper_1) || isNOU(mapper_1.dataSource)) {\n detach(eicon);\n parentLi.removeAttribute('aria-expanded');\n return;\n }\n this.treeList.push('false');\n mapper_1.dataSource.executeQuery(this.getQuery(mapper_1, parentLi.getAttribute('data-uid'))).then(function (e) {\n _this.treeList.pop();\n childItems = e.result;\n _this.currentLoadData = childItems;\n if (isNOU(childItems) || childItems.length === 0) {\n detach(eicon);\n parentLi.removeAttribute('aria-expanded');\n }\n else {\n var prop = _this.getActualProperties(mapper_1);\n _this.listBaseOption.fields = prop;\n _this.listBaseOption.fields.url = prop.navigateUrl;\n var id = parentLi.getAttribute('data-uid');\n var nodeData = _this.getNodeObject(id);\n setValue('child', childItems, nodeData);\n _this.listBaseOption.ariaAttributes.level = parseFloat(parentLi.getAttribute('aria-level')) + 1;\n parentLi.appendChild(ListBase.createList(childItems, _this.listBaseOption));\n _this.expandNode(parentLi, eicon);\n _this.ensureCheckNode(parentLi);\n _this.finalizeNode(parentLi);\n _this.renderSubChild(parentLi, expandChild);\n }\n if (_this.treeList.length === 0 && !_this.isLoaded) {\n _this.finalize();\n }\n });\n }\n else {\n childItems = this.getChildNodes(this.treeData, parentLi.getAttribute('data-uid'));\n this.currentLoadData = childItems;\n if (isNOU(childItems) || childItems.length === 0) {\n detach(eicon);\n parentLi.removeAttribute('aria-expanded');\n return;\n }\n else {\n this.listBaseOption.ariaAttributes.level = parseFloat(parentLi.getAttribute('aria-level')) + 1;\n parentLi.appendChild(ListBase.createList(this.getSortedData(childItems), this.listBaseOption));\n this.expandNode(parentLi, eicon);\n this.ensureCheckNode(parentLi);\n this.finalizeNode(parentLi);\n this.renderSubChild(parentLi, expandChild);\n }\n }\n };\n TreeView.prototype.ensureCheckNode = function (element) {\n if (this.showCheckBox) {\n this.ensureChildCheckState(element);\n this.ensureParentCheckState(element);\n }\n this.currentLoadData = null;\n };\n TreeView.prototype.getFields = function (mapper, nodeLevel, dataLevel) {\n if (nodeLevel === dataLevel) {\n return mapper;\n }\n else {\n return this.getFields(this.getChildMapper(mapper), nodeLevel, dataLevel + 1);\n }\n };\n TreeView.prototype.getChildFields = function (mapper, nodeLevel, dataLevel) {\n var childData;\n if (nodeLevel === dataLevel) {\n return this.getChildMapper(mapper);\n }\n else {\n return this.getChildFields(this.getChildMapper(mapper), nodeLevel, dataLevel + 1);\n }\n };\n TreeView.prototype.getChildMapper = function (mapper) {\n return (typeof mapper.child === 'string' || isNOU(mapper.child)) ? mapper : mapper.child;\n };\n TreeView.prototype.getChildNodes = function (obj, parentId, isRoot) {\n if (isRoot === void 0) { isRoot = false; }\n var childNodes;\n if (isNOU(obj)) {\n return childNodes;\n }\n else if (this.dataType === 1) {\n return this.getChildGroup(this.groupedData, parentId, isRoot);\n }\n else {\n if (typeof this.fields.child === 'string') {\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var dataId = getValue(this.fields.id, obj[i]);\n if (dataId && dataId.toString() === parentId) {\n return getValue(this.fields.child, obj[i]);\n }\n else if (!isNOU(getValue(this.fields.child, obj[i]))) {\n childNodes = this.getChildNodes(getValue(this.fields.child, obj[i]), parentId);\n if (childNodes !== undefined) {\n break;\n }\n }\n }\n }\n }\n return childNodes;\n };\n TreeView.prototype.getChildGroup = function (data, parentId, isRoot) {\n var childNodes;\n if (isNOU(data)) {\n return childNodes;\n }\n for (var i = 0, objlen = data.length; i < objlen; i++) {\n if (!isNOU(data[i][0]) && !isNOU(getValue(this.fields.parentID, data[i][0]))) {\n if (getValue(this.fields.parentID, data[i][0]).toString() === parentId) {\n return data[i];\n }\n }\n else if (isRoot) {\n return data[i];\n }\n else {\n return [];\n }\n }\n return childNodes;\n };\n TreeView.prototype.renderSubChild = function (element, expandChild) {\n if (expandChild) {\n var cIcons = selectAll('.' + EXPANDABLE, element);\n for (var i = 0, len = cIcons.length; i < len; i++) {\n var icon = cIcons[i];\n var curLi = closest(icon, '.' + LISTITEM);\n this.expandArgs = this.getExpandEvent(curLi, null);\n this.trigger('nodeExpanding', this.expandArgs);\n this.renderChildNodes(curLi, expandChild);\n }\n }\n };\n TreeView.prototype.toggleSelect = function (li, e, multiSelect) {\n if (!li.classList.contains('e-disable')) {\n if (this.allowMultiSelection && ((e && e.ctrlKey) || multiSelect) && this.isActive(li)) {\n this.unselectNode(li, e);\n }\n else {\n this.selectNode(li, e, multiSelect);\n }\n }\n };\n TreeView.prototype.isActive = function (li) {\n return li.classList.contains(ACTIVE) ? true : false;\n };\n TreeView.prototype.selectNode = function (li, e, multiSelect) {\n if (isNOU(li) || (!this.allowMultiSelection && this.isActive(li) && !isNOU(e))) {\n this.setFocusElement(li);\n return;\n }\n var eventArgs;\n if (this.isLoaded) {\n eventArgs = this.getSelectEvent(li, 'select', e);\n this.trigger('nodeSelecting', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n }\n if (!this.allowMultiSelection || (!multiSelect && (!e || (e && !e.ctrlKey)))) {\n this.removeSelectAll();\n }\n if (this.allowMultiSelection && e && e.shiftKey) {\n if (!this.startNode) {\n this.startNode = li;\n }\n var startIndex = this.liList.indexOf(this.startNode);\n var endIndex = this.liList.indexOf(li);\n if (startIndex > endIndex) {\n var temp = startIndex;\n startIndex = endIndex;\n endIndex = temp;\n }\n for (var i = startIndex; i <= endIndex; i++) {\n var currNode = this.liList[i];\n if (isVisible(currNode)) {\n this.addSelect(currNode);\n }\n }\n }\n else {\n this.startNode = li;\n this.addSelect(li);\n }\n this.setFocusElement(li);\n if (this.isLoaded) {\n this.trigger('nodeSelected', eventArgs);\n }\n };\n TreeView.prototype.unselectNode = function (li, e) {\n var eventArgs;\n if (this.isLoaded) {\n eventArgs = this.getSelectEvent(li, 'un-select', e);\n this.trigger('nodeSelecting', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n }\n this.removeSelect(li);\n this.setFocusElement(li);\n if (this.isLoaded) {\n this.trigger('nodeSelected', eventArgs);\n }\n };\n TreeView.prototype.setFocusElement = function (li) {\n if (!isNOU(li)) {\n var focusedNode = this.getFocusedNode();\n if (focusedNode) {\n removeClass([focusedNode], FOCUS);\n }\n addClass([li], FOCUS);\n this.updateIdAttr(focusedNode, li);\n }\n };\n TreeView.prototype.addSelect = function (liEle) {\n liEle.setAttribute('aria-selected', 'true');\n addClass([liEle], ACTIVE);\n var id = liEle.getAttribute('data-uid');\n if (!isNOU(id) && this.selectedNodes.indexOf(id) === -1) {\n this.selectedNodes.push(id);\n }\n };\n TreeView.prototype.removeSelect = function (liEle) {\n if (this.allowMultiSelection) {\n liEle.setAttribute('aria-selected', 'false');\n }\n else {\n liEle.removeAttribute('aria-selected');\n }\n removeClass([liEle], ACTIVE);\n var index = this.selectedNodes.indexOf(liEle.getAttribute('data-uid'));\n if (index > -1) {\n this.selectedNodes.splice(index, 1);\n }\n };\n TreeView.prototype.removeSelectAll = function () {\n var selectedLI = this.element.querySelectorAll('.' + ACTIVE);\n for (var _i = 0, selectedLI_1 = selectedLI; _i < selectedLI_1.length; _i++) {\n var ele = selectedLI_1[_i];\n if (this.allowMultiSelection) {\n ele.setAttribute('aria-selected', 'false');\n }\n else {\n ele.removeAttribute('aria-selected');\n }\n }\n removeClass(selectedLI, ACTIVE);\n this.setProperties({ selectedNodes: [] }, true);\n };\n TreeView.prototype.getSelectEvent = function (currLi, action, e) {\n var nodeData = this.getNodeData(currLi);\n return { action: action, cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, nodeData: nodeData };\n };\n TreeView.prototype.setExpandOnType = function () {\n this.expandOnType = (this.expandOn === 'Auto') ? (Browser.isDevice ? 'Click' : 'DblClick') : this.expandOn;\n };\n TreeView.prototype.expandHandler = function (e) {\n var target = e.originalEvent.target;\n if (!target || target.classList.contains(INPUT) || target.classList.contains(ROOT) ||\n target.classList.contains(PARENTITEM) || target.classList.contains(LISTITEM) ||\n target.classList.contains(ICON) || this.showCheckBox && closest(target, '.' + CHECKBOXWRAP)) {\n return;\n }\n else {\n this.expandCollapseAction(closest(target, '.' + LISTITEM), e);\n }\n };\n TreeView.prototype.expandCollapseAction = function (currLi, e) {\n var icon = select('div.' + ICON, currLi);\n if (!icon || icon.classList.contains(PROCESS)) {\n return;\n }\n else {\n var classList = icon.classList;\n if (classList.contains(EXPANDABLE)) {\n this.expandAction(currLi, icon, e);\n }\n else {\n this.collapseNode(currLi, icon, e);\n }\n }\n };\n TreeView.prototype.expandAction = function (currLi, icon, e, expandChild) {\n if (icon.classList.contains(PROCESS)) {\n return;\n }\n else {\n addClass([icon], PROCESS);\n }\n if (this.isLoaded) {\n this.expandArgs = this.getExpandEvent(currLi, e);\n this.trigger('nodeExpanding', this.expandArgs);\n if (this.expandArgs.cancel) {\n removeClass([icon], PROCESS);\n return;\n }\n }\n var ul = select('.' + PARENTITEM, currLi);\n if (ul && ul.nodeName === 'UL') {\n this.expandNode(currLi, icon);\n }\n else {\n this.renderChildNodes(currLi, expandChild);\n }\n };\n TreeView.prototype.keyActionHandler = function (e) {\n var target = e.target;\n var focusedNode = this.getFocusedNode();\n if (target && target.classList.contains(INPUT)) {\n var inpEle = target;\n if (e.action === 'enter') {\n inpEle.blur();\n this.element.focus();\n addClass([focusedNode], HOVER);\n }\n else if (e.action === 'escape') {\n inpEle.value = this.oldText;\n inpEle.blur();\n this.element.focus();\n addClass([focusedNode], HOVER);\n }\n return;\n }\n e.preventDefault();\n var eventArgs = {\n cancel: false,\n event: e,\n node: focusedNode,\n };\n this.trigger('keyPress', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n switch (e.action) {\n case 'space':\n if (this.showCheckBox) {\n this.checkNode(e);\n }\n break;\n case 'moveRight':\n this.openNode(this.enableRtl ? false : true, e);\n break;\n case 'moveLeft':\n this.openNode(this.enableRtl ? true : false, e);\n break;\n case 'shiftDown':\n this.shiftKeySelect(true, e);\n break;\n case 'moveDown':\n case 'ctrlDown':\n case 'csDown':\n this.navigateNode(true);\n break;\n case 'shiftUp':\n this.shiftKeySelect(false, e);\n break;\n case 'moveUp':\n case 'ctrlUp':\n case 'csUp':\n this.navigateNode(false);\n break;\n case 'home':\n case 'shiftHome':\n case 'ctrlHome':\n case 'csHome':\n this.navigateRootNode(true);\n break;\n case 'end':\n case 'shiftEnd':\n case 'ctrlEnd':\n case 'csEnd':\n this.navigateRootNode(false);\n break;\n case 'enter':\n case 'ctrlEnter':\n case 'shiftEnter':\n case 'csEnter':\n this.toggleSelect(focusedNode, e);\n break;\n case 'f2':\n if (this.allowEditing) {\n this.createTextbox(focusedNode, e);\n }\n break;\n case 'ctrlA':\n if (this.allowMultiSelection) {\n var sNodes = selectAll('.' + LISTITEM + ':not(.' + ACTIVE + ')', this.element);\n this.selectGivenNodes(sNodes);\n }\n break;\n }\n };\n TreeView.prototype.navigateToFocus = function (isUp) {\n var focusNode = this.getFocusedNode().querySelector('.' + TEXTWRAP);\n var pos = focusNode.getBoundingClientRect();\n var parent = this.getScrollParent(this.element);\n if (!isNOU(parent)) {\n var parentPos = parent.getBoundingClientRect();\n if (pos.bottom > parentPos.bottom) {\n parent.scrollTop += pos.bottom - parentPos.bottom;\n }\n else if (pos.top < parentPos.top) {\n parent.scrollTop -= parentPos.top - pos.top;\n }\n }\n var isVisible = this.isVisibleInViewport(focusNode);\n if (!isVisible) {\n focusNode.scrollIntoView(isUp);\n }\n };\n TreeView.prototype.isVisibleInViewport = function (txtWrap) {\n var pos = txtWrap.getBoundingClientRect();\n return (pos.top >= 0 && pos.left >= 0 && pos.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n pos.right <= (window.innerWidth || document.documentElement.clientWidth));\n };\n TreeView.prototype.getScrollParent = function (node) {\n if (isNOU(node)) {\n return null;\n }\n return (node.scrollHeight > node.clientHeight) ? node : this.getScrollParent(node.parentElement);\n };\n TreeView.prototype.shiftKeySelect = function (isTowards, e) {\n if (this.allowMultiSelection) {\n var focusedNode = this.getFocusedNode();\n var nextNode = isTowards ? this.getNextNode(focusedNode) : this.getPrevNode(focusedNode);\n this.removeHover();\n this.setFocusElement(nextNode);\n this.toggleSelect(nextNode, e, false);\n this.navigateToFocus(!isTowards);\n }\n else {\n this.navigateNode(isTowards);\n }\n };\n TreeView.prototype.checkNode = function (e) {\n var focusedNode = this.getFocusedNode();\n var checkWrap = select('.' + CHECKBOXWRAP, focusedNode);\n var isChecked = select(' .' + CHECKBOXFRAME, checkWrap).classList.contains(CHECK);\n this.validateCheckNode(checkWrap, isChecked, focusedNode, e);\n };\n TreeView.prototype.validateCheckNode = function (checkWrap, isCheck, li, e) {\n var eventArgs = this.nodeCheckingEvent(checkWrap, isCheck, e);\n if (eventArgs.cancel) {\n return;\n }\n this.changeState(checkWrap, isCheck ? 'uncheck' : 'check', e, true);\n this.ensureChildCheckState(li);\n this.ensureParentCheckState(closest(closest(li, '.' + PARENTITEM), '.' + LISTITEM));\n this.nodeCheckedEvent(checkWrap, isCheck, e);\n };\n TreeView.prototype.openNode = function (toBeOpened, e) {\n var focusedNode = this.getFocusedNode();\n var icon = select('div.' + ICON, focusedNode);\n if (toBeOpened) {\n if (!icon) {\n return;\n }\n else if (icon.classList.contains(EXPANDABLE)) {\n this.expandAction(focusedNode, icon, e);\n }\n else {\n this.focusNextNode(focusedNode, true);\n }\n }\n else {\n if (icon && icon.classList.contains(COLLAPSIBLE)) {\n this.collapseNode(focusedNode, icon, e);\n }\n else {\n var parentLi = closest(closest(focusedNode, '.' + PARENTITEM), '.' + LISTITEM);\n if (!parentLi) {\n return;\n }\n else {\n this.setFocus(focusedNode, parentLi);\n this.navigateToFocus(true);\n }\n }\n }\n };\n TreeView.prototype.navigateNode = function (isTowards) {\n var focusedNode = this.getFocusedNode();\n this.focusNextNode(focusedNode, isTowards);\n };\n TreeView.prototype.navigateRootNode = function (isBackwards) {\n var focusedNode = this.getFocusedNode();\n var rootNode = isBackwards ? this.getRootNode() : this.getEndNode();\n this.setFocus(focusedNode, rootNode);\n this.navigateToFocus(isBackwards);\n };\n TreeView.prototype.getFocusedNode = function () {\n var fNode = select('.' + LISTITEM + '.' + FOCUS, this.element);\n return isNOU(fNode) ? select('.' + LISTITEM, this.element) : fNode;\n };\n TreeView.prototype.focusNextNode = function (li, isTowards) {\n var nextNode = isTowards ? this.getNextNode(li) : this.getPrevNode(li);\n this.setFocus(li, nextNode);\n this.navigateToFocus(!isTowards);\n if (nextNode.classList.contains('e-disable')) {\n this.focusNextNode(nextNode, isTowards);\n }\n };\n TreeView.prototype.getNextNode = function (li) {\n var index = this.liList.indexOf(li);\n var nextNode;\n var i;\n do {\n index++;\n if (index === this.liList.length && li.classList.contains('e-disable')) {\n for (i = index - 1; i > 0; i--) {\n if (!this.liList[i].classList.contains('e-disable')) {\n index = i;\n break;\n }\n }\n }\n nextNode = this.liList[index];\n if (isNOU(nextNode)) {\n return li;\n }\n } while (!isVisible(nextNode));\n return nextNode;\n };\n TreeView.prototype.getPrevNode = function (li) {\n var index = this.liList.indexOf(li);\n var prevNode;\n var i;\n do {\n index--;\n if (index < 0 && li.classList.contains('e-disable')) {\n for (i = 1; i < this.liList.length; i++) {\n if (!this.liList[i].classList.contains('e-disable')) {\n index = i;\n break;\n }\n }\n }\n prevNode = this.liList[index];\n if (isNOU(prevNode)) {\n return li;\n }\n } while (!isVisible(prevNode));\n return prevNode;\n };\n TreeView.prototype.getRootNode = function () {\n var index = 0;\n var rootNode;\n do {\n rootNode = this.liList[index];\n index++;\n } while (!isVisible(rootNode));\n return rootNode;\n };\n TreeView.prototype.getEndNode = function () {\n var index = this.liList.length - 1;\n var endNode;\n do {\n endNode = this.liList[index];\n index--;\n } while (!isVisible(endNode));\n return endNode;\n };\n TreeView.prototype.setFocus = function (preNode, nextNode) {\n removeClass([preNode], [HOVER, FOCUS]);\n addClass([nextNode], [HOVER, FOCUS]);\n this.updateIdAttr(preNode, nextNode);\n };\n TreeView.prototype.updateIdAttr = function (preNode, nextNode) {\n this.element.removeAttribute('aria-activedescendant');\n if (preNode) {\n preNode.removeAttribute('id');\n }\n nextNode.setAttribute('id', this.element.id + '_active');\n this.element.setAttribute('aria-activedescendant', this.element.id + '_active');\n };\n TreeView.prototype.focusIn = function () {\n if (!this.mouseDownStatus) {\n addClass([this.getFocusedNode()], HOVER);\n }\n this.mouseDownStatus = false;\n };\n TreeView.prototype.focusOut = function () {\n removeClass([this.getFocusedNode()], HOVER);\n };\n TreeView.prototype.onMouseOver = function (e) {\n var target = e.target;\n var classList = target.classList;\n var currentLi = closest(target, '.' + LISTITEM);\n if (!currentLi || classList.contains(PARENTITEM) || classList.contains(LISTITEM)) {\n this.removeHover();\n return;\n }\n else {\n if (currentLi && !currentLi.classList.contains('e-disable')) {\n this.setHover(currentLi);\n }\n }\n };\n TreeView.prototype.setHover = function (li) {\n if (!li.classList.contains(HOVER)) {\n this.removeHover();\n addClass([li], HOVER);\n }\n };\n ;\n TreeView.prototype.onMouseLeave = function (e) {\n this.removeHover();\n };\n TreeView.prototype.removeHover = function () {\n var hoveredNode = selectAll('.' + HOVER, this.element);\n if (hoveredNode && hoveredNode.length) {\n removeClass(hoveredNode, HOVER);\n }\n };\n ;\n TreeView.prototype.getNodeData = function (currLi, fromDS) {\n if (!isNOU(currLi) && currLi.classList.contains(LISTITEM)) {\n var id = currLi.getAttribute('data-uid');\n var text = this.getText(currLi, fromDS);\n var pNode = closest(currLi.parentNode, '.' + LISTITEM);\n var pid = pNode ? pNode.getAttribute('data-uid') : null;\n var selected = currLi.classList.contains(ACTIVE);\n var expanded = (currLi.getAttribute('aria-expanded') === 'true') ? true : false;\n var checked = null;\n if (this.showCheckBox) {\n checked = select('.' + CHECKBOXWRAP, currLi).getAttribute('aria-checked');\n }\n return { id: id, text: text, parentID: pid, selected: selected, expanded: expanded, isChecked: checked };\n }\n return { id: '', text: '', parentID: '', selected: '', expanded: '', isChecked: '' };\n };\n TreeView.prototype.getText = function (currLi, fromDS) {\n if (fromDS) {\n var nodeData = this.getNodeObject(currLi.getAttribute('data-uid'));\n var level = parseFloat(currLi.getAttribute('aria-level'));\n var nodeFields = this.getFields(this.fields, level, 1);\n return getValue(nodeFields.text, nodeData);\n }\n return select('.' + LISTTEXT, currLi).textContent;\n };\n TreeView.prototype.getExpandEvent = function (currLi, e) {\n var nodeData = this.getNodeData(currLi);\n return { cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, nodeData: nodeData, event: e };\n };\n TreeView.prototype.reRenderNodes = function () {\n this.element.innerHTML = '';\n this.setTouchClass();\n this.setProperties({ selectedNodes: [], checkedNodes: [] }, true);\n this.isLoaded = false;\n this.setDataBinding();\n };\n TreeView.prototype.setCssClass = function (oldClass, newClass) {\n if (!isNOU(oldClass) && oldClass !== '') {\n removeClass([this.element], oldClass.split(' '));\n }\n if (!isNOU(newClass) && newClass !== '') {\n addClass([this.element], newClass.split(' '));\n }\n };\n TreeView.prototype.editingHandler = function (e) {\n var target = e.target;\n if (!target || target.classList.contains(ROOT) || target.classList.contains(PARENTITEM) ||\n target.classList.contains(LISTITEM) || target.classList.contains(ICON) ||\n target.classList.contains(INPUT) || target.classList.contains(INPUTGROUP)) {\n return;\n }\n else {\n var liEle = closest(target, '.' + LISTITEM);\n this.createTextbox(liEle, e);\n }\n };\n TreeView.prototype.createTextbox = function (liEle, e) {\n var oldInpEle = select('.' + TREEINPUT, this.element);\n if (oldInpEle) {\n oldInpEle.blur();\n }\n var textEle = select('.' + LISTTEXT, liEle);\n this.updateOldText(liEle);\n var innerEle = createElement('input', { className: TREEINPUT, attrs: { value: this.oldText } });\n var eventArgs = this.getEditEvent(liEle, null, innerEle.outerHTML);\n this.trigger('nodeEditing', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n var inpWidth = textEle.offsetWidth + 5;\n var style = 'width:' + inpWidth + 'px';\n addClass([liEle], EDITING);\n textEle.innerHTML = eventArgs.innerHtml;\n var inpEle = select('.' + TREEINPUT, textEle);\n this.inputObj = Input.createInput({\n element: inpEle,\n properties: {\n enableRtl: this.enableRtl,\n }\n });\n this.inputObj.container.setAttribute('style', style);\n inpEle.focus();\n var inputEle = inpEle;\n inputEle.setSelectionRange(0, inputEle.value.length);\n this.wireInputEvents(inpEle);\n };\n TreeView.prototype.updateOldText = function (liEle) {\n var id = liEle.getAttribute('data-uid');\n this.editData = this.getNodeObject(id);\n var level = parseFloat(liEle.getAttribute('aria-level'));\n this.editFields = this.getFields(this.fields, level, 1);\n this.oldText = getValue(this.editFields.text, this.editData);\n };\n TreeView.prototype.inputFocusOut = function (e) {\n if (!select('.' + TREEINPUT, this.element)) {\n return;\n }\n var target = e.target;\n var newText = target.value;\n var txtEle = closest(target, '.' + LISTTEXT);\n var liEle = closest(target, '.' + LISTITEM);\n detach(this.inputObj.container);\n this.appendNewText(liEle, txtEle, newText, true);\n };\n TreeView.prototype.appendNewText = function (liEle, txtEle, newText, isInput) {\n var newData = setValue(this.editFields.text, newText, this.editData);\n if (!isNOU(this.nodeTemplateFn)) {\n txtEle.innerHTML = '';\n append(this.nodeTemplateFn(newData), txtEle);\n }\n else {\n txtEle.innerHTML = newText;\n }\n if (isInput) {\n removeClass([liEle], EDITING);\n txtEle.focus();\n }\n this.trigger('nodeEdited', this.getEditEvent(liEle, newText, null));\n };\n TreeView.prototype.getElement = function (ele) {\n if (isNOU(ele)) {\n return null;\n }\n else if (typeof ele === 'string') {\n return this.element.querySelector('[data-uid=\"' + ele + '\"]');\n }\n else if (typeof ele === 'object') {\n return ele;\n }\n else {\n return null;\n }\n };\n TreeView.prototype.getEditEvent = function (liEle, newText, inpEle) {\n var data = this.getNodeData(liEle);\n return { cancel: false, newText: newText, node: liEle, nodeData: data, oldText: this.oldText, innerHtml: inpEle };\n };\n TreeView.prototype.getNodeObject = function (id) {\n var childNodes;\n if (isNOU(id)) {\n return childNodes;\n }\n else if (this.dataType === 1) {\n for (var i = 0, objlen = this.treeData.length; i < objlen; i++) {\n var dataId = getValue(this.fields.id, this.treeData[i]);\n if (!isNOU(this.treeData[i]) && !isNOU(dataId) && dataId.toString() === id) {\n return this.treeData[i];\n }\n }\n }\n else {\n return this.getChildNodeObject(this.treeData, this.fields, id);\n }\n return childNodes;\n };\n TreeView.prototype.getChildNodeObject = function (obj, mapper, id) {\n var newList;\n if (isNOU(obj)) {\n return newList;\n }\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var dataId = getValue(mapper.id, obj[i]);\n if (obj[i] && dataId && dataId.toString() === id) {\n return obj[i];\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[i]))) {\n var childData = getValue(mapper.child, obj[i]);\n newList = this.getChildNodeObject(childData, this.getChildMapper(mapper), id);\n if (newList !== undefined) {\n break;\n }\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[i]))) {\n var child = 'child';\n newList = this.getChildNodeObject(getValue(child, obj[i]), this.getChildMapper(mapper), id);\n if (newList !== undefined) {\n break;\n }\n }\n }\n return newList;\n };\n TreeView.prototype.setDragAndDrop = function (toBind) {\n if (toBind) {\n this.initializeDrag();\n }\n else {\n this.destroyDrag();\n }\n };\n TreeView.prototype.initializeDrag = function () {\n var _this = this;\n var virtualEle;\n this.dragObj = new Draggable(this.element, {\n enableTailMode: true,\n dragTarget: '.' + TEXTWRAP,\n helper: function (e) {\n _this.dragTarget = e.sender.target;\n var dragRoot = closest(_this.dragTarget, '.' + ROOT);\n var dragWrap = closest(_this.dragTarget, '.' + TEXTWRAP);\n _this.dragLi = closest(_this.dragTarget, '.' + LISTITEM);\n if (_this.fullRowSelect && !dragWrap && _this.dragTarget.classList.contains(FULLROW)) {\n dragWrap = _this.dragTarget.nextElementSibling;\n }\n if (!_this.dragTarget || !e.element.isSameNode(dragRoot) || !dragWrap ||\n _this.dragTarget.classList.contains(ROOT) || _this.dragTarget.classList.contains(PARENTITEM) ||\n _this.dragTarget.classList.contains(LISTITEM)) {\n return false;\n }\n var cloneEle = (dragWrap.cloneNode(true));\n if (isNOU(select('div.' + ICON, cloneEle))) {\n var icon = createElement('div', { className: ICON + ' ' + EXPANDABLE });\n cloneEle.insertBefore(icon, cloneEle.children[0]);\n }\n var cssClass = DRAGITEM + ' ' + ROOT + ' ' + _this.cssClass + ' ' + (_this.enableRtl ? RTL : '');\n virtualEle = createElement('div', { className: cssClass });\n virtualEle.appendChild(cloneEle);\n var nLen = _this.selectedNodes.length;\n if (nLen > 1 && _this.allowMultiSelection && _this.dragLi.classList.contains(ACTIVE)) {\n var cNode = createElement('span', { className: DROPCOUNT, innerHTML: '' + nLen });\n virtualEle.appendChild(cNode);\n }\n document.body.appendChild(virtualEle);\n document.body.style.cursor = '';\n _this.dragData = _this.getNodeData(_this.dragLi);\n return virtualEle;\n },\n dragStart: function (e) {\n addClass([_this.element], DRAGGING);\n var eventArgs = _this.getDragEvent(e.event, _this, null, e.target);\n _this.trigger('nodeDragStart', eventArgs);\n if (eventArgs.cancel) {\n detach(virtualEle);\n removeClass([_this.element], DRAGGING);\n }\n _this.dragStartAction = true;\n },\n drag: function (e) {\n _this.dragObj.setProperties({ cursorAt: { top: (!isNOU(e.event.targetTouches) || Browser.isDevice) ? 60 : -20 } });\n _this.dragAction(e, virtualEle);\n },\n dragStop: function (e) {\n removeClass([_this.element], DRAGGING);\n _this.removeVirtualEle();\n var dropTarget = e.target;\n var dropRoot = (closest(dropTarget, '.' + DROPPABLE));\n if (!dropTarget || !dropRoot || dropTarget.classList.contains(ROOT)) {\n detach(e.helper);\n document.body.style.cursor = '';\n }\n var eventArgs = _this.getDragEvent(e.event, _this, dropTarget, dropTarget);\n _this.trigger('nodeDragStop', eventArgs);\n if (eventArgs.cancel) {\n if (e.helper.parentNode) {\n detach(e.helper);\n }\n document.body.style.cursor = '';\n }\n _this.dragStartAction = false;\n }\n });\n this.dropObj = new Droppable(this.element, {\n out: function (e) {\n if (!isNOU(e) && !e.target.classList.contains(SIBLING)) {\n document.body.style.cursor = 'not-allowed';\n }\n },\n over: function (e) {\n document.body.style.cursor = '';\n },\n drop: function (e) {\n _this.dropAction(e);\n }\n });\n };\n TreeView.prototype.dragAction = function (e, virtualEle) {\n var dropRoot = closest(e.target, '.' + DROPPABLE);\n var dropWrap = closest(e.target, '.' + TEXTWRAP);\n var icon = select('div.' + ICON, virtualEle);\n removeClass([icon], [DROPIN, DROPNEXT, DROPOUT, NODROP]);\n this.removeVirtualEle();\n document.body.style.cursor = '';\n var classList = e.target.classList;\n if (this.fullRowSelect && !dropWrap && !isNOU(classList) && classList.contains(FULLROW)) {\n dropWrap = e.target.nextElementSibling;\n }\n if (dropRoot) {\n var dropLi = closest(e.target, '.' + LISTITEM);\n if (!dropRoot.classList.contains(ROOT) || (dropWrap &&\n (!dropLi.isSameNode(this.dragLi) && !this.isDescendant(this.dragLi, dropLi)))) {\n if (dropLi && e && (e.event.offsetY < 7)) {\n addClass([icon], DROPNEXT);\n var virEle = createElement('div', { className: SIBLING });\n var index = this.fullRowSelect ? (1) : (0);\n dropLi.insertBefore(virEle, dropLi.children[index]);\n }\n else if (dropLi && e && (e.target.offsetHeight > 0 && e.event.offsetY > (e.target.offsetHeight - 10))) {\n addClass([icon], DROPNEXT);\n var virEle = createElement('div', { className: SIBLING });\n var index = this.fullRowSelect ? (2) : (1);\n dropLi.insertBefore(virEle, dropLi.children[index]);\n }\n else {\n addClass([icon], DROPIN);\n }\n }\n else if (e.target.nodeName === 'LI' && (!dropLi.isSameNode(this.dragLi) && !this.isDescendant(this.dragLi, dropLi))) {\n addClass([icon], DROPNEXT);\n this.renderVirtualEle(e);\n }\n else if (e.target.classList.contains(SIBLING)) {\n addClass([icon], DROPNEXT);\n }\n else {\n addClass([icon], DROPOUT);\n }\n }\n else {\n addClass([icon], NODROP);\n document.body.style.cursor = 'not-allowed';\n }\n this.trigger('nodeDragging', this.getDragEvent(e.event, this, e.target, e.target));\n };\n TreeView.prototype.dropAction = function (e) {\n var offsetY = e.event.offsetY;\n var dropTarget = e.target;\n var dragObj = e.dragData.draggable.ej2_instances[0];\n var dragTarget = dragObj.dragTarget;\n var dragLi = (closest(dragTarget, '.' + LISTITEM));\n var dropLi = (closest(dropTarget, '.' + LISTITEM));\n detach(e.droppedElement);\n document.body.style.cursor = '';\n if (!dropLi || dropLi.isSameNode(dragLi) || this.isDescendant(dragLi, dropLi)) {\n return;\n }\n if (dragObj.allowMultiSelection && (dragLi.classList.contains(ACTIVE) || (offsetY < 7 ||\n (e.target.offsetHeight > 0 && offsetY > (e.target.offsetHeight - 10))))) {\n var sNodes = selectAll('.' + ACTIVE, dragObj.element);\n for (var i = 0; i < sNodes.length; i++) {\n if (dropLi.isSameNode(sNodes[i]) || this.isDescendant(sNodes[i], dropLi)) {\n continue;\n }\n this.appendNode(dropTarget, sNodes[i], dropLi, e, dragObj, offsetY);\n }\n }\n else {\n this.appendNode(dropTarget, dragLi, dropLi, e, dragObj, offsetY);\n }\n this.trigger('nodeDropped', this.getDragEvent(e.event, dragObj, dropTarget, e.target));\n };\n TreeView.prototype.appendNode = function (dropTarget, dragLi, dropLi, e, dragObj, offsetY) {\n if (dropTarget.nodeName === 'LI') {\n this.dropAsSiblingNode(dragLi, dropLi, e, dragObj);\n }\n else {\n this.dropAsChildNode(dragLi, dropLi, dragObj, null, e, offsetY);\n }\n };\n TreeView.prototype.dropAsSiblingNode = function (dragLi, dropLi, e, dragObj) {\n var dropUl = closest(dropLi, '.' + PARENTITEM);\n var dragParentUl = closest(dragLi, '.' + PARENTITEM);\n var dragParentLi = closest(dragParentUl, '.' + LISTITEM);\n var pre;\n if (e.target.offsetHeight > 0 && e.event.offsetY > e.target.offsetHeight - 2) {\n pre = false;\n }\n else if (e.event.offsetY < 2) {\n pre = true;\n }\n dropUl.insertBefore(dragLi, pre ? e.target : e.target.nextElementSibling);\n this.updateElement(dragParentUl, dragParentLi);\n this.updateAriaLevel(dragLi);\n if (dragObj.element.id === this.element.id) {\n this.updateList();\n }\n else {\n dragObj.updateInstance();\n this.updateInstance();\n }\n };\n TreeView.prototype.dropAsChildNode = function (dragLi, dropLi, dragObj, index, e, pos) {\n var dragParentUl = closest(dragLi, '.' + PARENTITEM);\n var dragParentLi = closest(dragParentUl, '.' + LISTITEM);\n var dropParentUl = closest(dropLi, '.' + PARENTITEM);\n if (e && (pos < 7)) {\n dropParentUl.insertBefore(dragLi, dropLi);\n }\n else if (e && (e.target.offsetHeight > 0 && pos > (e.target.offsetHeight - 10))) {\n dropParentUl.insertBefore(dragLi, dropLi.nextElementSibling);\n }\n else {\n var dropUl = this.expandParent(dropLi);\n dropUl.insertBefore(dragLi, dropUl.childNodes[index]);\n }\n this.updateElement(dragParentUl, dragParentLi);\n this.updateAriaLevel(dragLi);\n if (dragObj.element.id === this.element.id) {\n this.updateList();\n }\n else {\n dragObj.updateInstance();\n this.updateInstance();\n }\n };\n TreeView.prototype.expandParent = function (dropLi) {\n var dropIcon = select('div.' + ICON, dropLi);\n if (dropIcon && dropIcon.classList.contains(EXPANDABLE)) {\n this.expandAction(dropLi, dropIcon, null);\n }\n var dropUl = select('.' + PARENTITEM, dropLi);\n if (isNOU(dropUl)) {\n ListBase.generateIcon(dropLi, COLLAPSIBLE, this.listBaseOption);\n var icon = select('div.' + ICON, dropLi);\n removeClass([icon], EXPANDABLE);\n dropUl = ListBase.generateUL([], null, this.listBaseOption);\n dropLi.appendChild(dropUl);\n dropLi.setAttribute('aria-expanded', 'true');\n removeClass([dropLi], NODECOLLAPSED);\n }\n return dropUl;\n };\n TreeView.prototype.updateElement = function (dragParentUl, dragParentLi) {\n if (dragParentLi && dragParentUl.childElementCount === 0) {\n var dragIcon = select('div.' + ICON, dragParentLi);\n detach(dragParentUl);\n detach(dragIcon);\n dragParentLi.removeAttribute('aria-expanded');\n }\n };\n TreeView.prototype.updateAriaLevel = function (dragLi) {\n var level = this.parents(dragLi, '.' + PARENTITEM).length;\n dragLi.setAttribute('aria-level', '' + level);\n this.updateChildAriaLevel(select('.' + PARENTITEM, dragLi), level + 1);\n };\n TreeView.prototype.updateChildAriaLevel = function (element, level) {\n if (!isNOU(element)) {\n var cNodes = element.childNodes;\n for (var i = 0, len = cNodes.length; i < len; i++) {\n var liEle = cNodes[i];\n liEle.setAttribute('aria-level', '' + level);\n this.updateChildAriaLevel(select('.' + PARENTITEM, liEle), level + 1);\n }\n }\n };\n TreeView.prototype.renderVirtualEle = function (e) {\n var pre;\n if (e.event.offsetY > e.target.offsetHeight - 2) {\n pre = false;\n }\n else if (e.event.offsetY < 2) {\n pre = true;\n }\n var virEle = createElement('div', { className: SIBLING });\n var index = this.fullRowSelect ? (pre ? 1 : 2) : (pre ? 0 : 1);\n e.target.insertBefore(virEle, e.target.children[index]);\n };\n TreeView.prototype.removeVirtualEle = function () {\n var sibEle = select('.' + SIBLING);\n if (sibEle) {\n detach(sibEle);\n }\n };\n TreeView.prototype.destroyDrag = function () {\n if (this.dragObj && this.dropObj) {\n this.dragObj.destroy();\n this.dropObj.destroy();\n }\n };\n TreeView.prototype.getDragEvent = function (event, obj, dropTarget, target) {\n var dropLi = dropTarget ? closest(dropTarget, '.' + LISTITEM) : null;\n var dropData = dropLi ? this.getNodeData(dropLi) : null;\n return {\n cancel: false,\n event: event,\n draggedNode: obj.dragLi,\n draggedNodeData: obj.dragData,\n droppedNode: dropLi,\n droppedNodeData: dropData,\n target: target\n };\n };\n TreeView.prototype.addFullRow = function (toAdd) {\n var len = this.liList.length;\n if (toAdd) {\n for (var i = 0; i < len; i++) {\n this.createFullRow(this.liList[i]);\n }\n }\n else {\n for (var i = 0; i < len; i++) {\n var rowDiv = select('.' + FULLROW, this.liList[i]);\n detach(rowDiv);\n }\n }\n };\n TreeView.prototype.createFullRow = function (item) {\n var rowDiv = createElement('div', { className: FULLROW });\n item.insertBefore(rowDiv, item.childNodes[0]);\n };\n TreeView.prototype.addMultiSelect = function (toAdd) {\n if (toAdd) {\n var liEles = selectAll('.' + LISTITEM + ':not([aria-selected=\"true\"])', this.element);\n for (var _i = 0, liEles_1 = liEles; _i < liEles_1.length; _i++) {\n var ele = liEles_1[_i];\n ele.setAttribute('aria-selected', 'false');\n }\n }\n else {\n var liEles = selectAll('.' + LISTITEM + '[aria-selected=\"false\"]', this.element);\n for (var _a = 0, liEles_2 = liEles; _a < liEles_2.length; _a++) {\n var ele = liEles_2[_a];\n ele.removeAttribute('aria-selected');\n }\n }\n };\n TreeView.prototype.collapseByLevel = function (element, level, excludeHiddenNodes) {\n if (level > 0 && !isNOU(element)) {\n var cNodes = this.getVisibleNodes(excludeHiddenNodes, element.childNodes);\n for (var i = 0, len = cNodes.length; i < len; i++) {\n var liEle = cNodes[i];\n var icon = select('.' + COLLAPSIBLE, select('.' + TEXTWRAP, liEle));\n if (!isNOU(icon)) {\n this.collapseNode(liEle, icon, null);\n }\n this.collapseByLevel(select('.' + PARENTITEM, liEle), level - 1, excludeHiddenNodes);\n }\n }\n };\n TreeView.prototype.collapseAllNodes = function (excludeHiddenNodes) {\n var cIcons = this.getVisibleNodes(excludeHiddenNodes, selectAll('.' + COLLAPSIBLE, this.element));\n for (var i = 0, len = cIcons.length; i < len; i++) {\n var icon = cIcons[i];\n var liEle = closest(icon, '.' + LISTITEM);\n this.collapseNode(liEle, icon, null);\n }\n };\n TreeView.prototype.expandByLevel = function (element, level, excludeHiddenNodes) {\n if (level > 0 && !isNOU(element)) {\n var eNodes = this.getVisibleNodes(excludeHiddenNodes, element.childNodes);\n for (var i = 0, len = eNodes.length; i < len; i++) {\n var liEle = eNodes[i];\n var icon = select('.' + EXPANDABLE, select('.' + TEXTWRAP, liEle));\n if (!isNOU(icon)) {\n this.expandAction(liEle, icon, null);\n }\n this.expandByLevel(select('.' + PARENTITEM, liEle), level - 1, excludeHiddenNodes);\n }\n }\n };\n TreeView.prototype.expandAllNodes = function (excludeHiddenNodes) {\n var eIcons = this.getVisibleNodes(excludeHiddenNodes, selectAll('.' + EXPANDABLE, this.element));\n for (var i = 0, len = eIcons.length; i < len; i++) {\n var icon = eIcons[i];\n var liEle = closest(icon, '.' + LISTITEM);\n this.expandAction(liEle, icon, null, true);\n }\n };\n TreeView.prototype.getVisibleNodes = function (excludeHiddenNodes, nodes) {\n var vNodes = Array.prototype.slice.call(nodes);\n if (excludeHiddenNodes) {\n for (var i = 0; i < vNodes.length; i++) {\n if (!isVisible(vNodes[i])) {\n vNodes.splice(i, 1);\n i--;\n }\n }\n }\n return vNodes;\n };\n TreeView.prototype.removeNode = function (node) {\n var dragParentUl = closest(node, '.' + PARENTITEM);\n var dragParentLi = closest(dragParentUl, '.' + LISTITEM);\n detach(node);\n this.updateElement(dragParentUl, dragParentLi);\n this.updateInstance();\n };\n TreeView.prototype.updateInstance = function () {\n this.updateList();\n this.updateSelectedNodes();\n };\n TreeView.prototype.updateList = function () {\n this.liList = Array.prototype.slice.call(selectAll('.' + LISTITEM, this.element));\n };\n TreeView.prototype.updateSelectedNodes = function () {\n this.setProperties({ selectedNodes: [] }, true);\n var sNodes = selectAll('.' + ACTIVE, this.element);\n this.selectGivenNodes(sNodes);\n };\n TreeView.prototype.doGivenAction = function (nodes, selector, toExpand) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n continue;\n }\n var icon = select('.' + selector, select('.' + TEXTWRAP, liEle));\n if (!isNOU(icon)) {\n toExpand ? this.expandAction(liEle, icon, null) : this.collapseNode(liEle, icon, null);\n }\n }\n };\n TreeView.prototype.addGivenNodes = function (nodes, dropLi, index, isRemote) {\n var level = dropLi ? parseFloat(dropLi.getAttribute('aria-level')) + 1 : 1;\n if (isRemote) {\n this.updateMapper(level);\n }\n var li = ListBase.createListItemFromJson(nodes, this.listBaseOption, level);\n var dropUl = dropLi ? this.expandParent(dropLi) : select('.' + PARENTITEM, this.element);\n var refNode = dropUl.childNodes[index];\n for (var i = 0; i < li.length; i++) {\n dropUl.insertBefore(li[i], refNode);\n }\n this.finalizeNode(dropUl);\n };\n TreeView.prototype.updateMapper = function (level) {\n var mapper = (level === 1) ? this.fields : this.getChildFields(this.fields, level - 1, 1);\n var prop = this.getActualProperties(mapper);\n this.listBaseOption.fields = prop;\n this.listBaseOption.fields.url = prop.navigateUrl;\n };\n TreeView.prototype.doDisableAction = function (nodes) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n continue;\n }\n liEle.setAttribute('aria-disabled', 'true');\n addClass([liEle], DISABLE);\n }\n };\n TreeView.prototype.doEnableAction = function (nodes) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n continue;\n }\n liEle.removeAttribute('aria-disabled');\n removeClass([liEle], DISABLE);\n }\n };\n TreeView.prototype.setTouchClass = function () {\n var ele = closest(this.element, '.' + BIGGER);\n this.touchClass = isNOU(ele) ? '' : SMALL;\n };\n TreeView.prototype.wireInputEvents = function (inpEle) {\n EventHandler.add(inpEle, 'blur', this.inputFocusOut, this);\n };\n TreeView.prototype.wireEditingEvents = function (toBind) {\n if (toBind) {\n var proxy_1 = this;\n this.touchEditObj = new Touch(this.element, {\n tap: function (e) {\n if (e.tapCount === 2) {\n e.originalEvent.preventDefault();\n proxy_1.editingHandler(e.originalEvent);\n }\n }\n });\n }\n else {\n if (this.touchEditObj) {\n this.touchEditObj.destroy();\n }\n }\n };\n TreeView.prototype.wireClickEvent = function (toBind) {\n if (toBind) {\n var proxy_2 = this;\n this.touchClickObj = new Touch(this.element, {\n tap: function (e) {\n proxy_2.clickHandler(e);\n }\n });\n }\n else {\n if (this.touchClickObj) {\n this.touchClickObj.destroy();\n }\n }\n };\n TreeView.prototype.wireExpandOnEvent = function (toBind) {\n var _this = this;\n if (toBind) {\n var proxy_3 = this;\n this.touchExpandObj = new Touch(this.element, {\n tap: function (e) {\n if (_this.expandOnType === 'Click' || (_this.expandOnType === 'DblClick' && e.tapCount === 2)) {\n proxy_3.expandHandler(e);\n }\n }\n });\n }\n else {\n if (this.touchExpandObj) {\n this.touchExpandObj.destroy();\n }\n }\n };\n TreeView.prototype.mouseDownHandler = function (e) {\n this.mouseDownStatus = true;\n if (e.shiftKey || e.ctrlKey) {\n e.preventDefault();\n }\n if (e.ctrlKey && this.allowMultiSelection) {\n EventHandler.add(this.element, 'contextmenu', this.preventContextMenu, this);\n }\n };\n ;\n TreeView.prototype.preventContextMenu = function (e) {\n e.preventDefault();\n };\n TreeView.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'mousedown', this.mouseDownHandler, this);\n this.wireClickEvent(true);\n this.wireExpandOnEvent(true);\n EventHandler.add(this.element, 'focus', this.focusIn, this);\n EventHandler.add(this.element, 'blur', this.focusOut, this);\n EventHandler.add(this.element, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.element, 'mouseout', this.onMouseLeave, this);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown',\n });\n };\n TreeView.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'mousedown', this.mouseDownHandler);\n this.wireClickEvent(false);\n this.wireExpandOnEvent(false);\n EventHandler.remove(this.element, 'focus', this.focusIn);\n EventHandler.remove(this.element, 'blur', this.focusOut);\n EventHandler.remove(this.element, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.element, 'mouseout', this.onMouseLeave);\n this.keyboardModule.destroy();\n };\n TreeView.prototype.parents = function (element, selector) {\n var matched = [];\n var el = element.parentNode;\n while (!isNOU(el)) {\n if (matches(el, selector)) {\n matched.push(el);\n }\n el = el.parentNode;\n }\n return matched;\n };\n TreeView.prototype.isDescendant = function (parent, child) {\n var node = child.parentNode;\n while (!isNOU(node)) {\n if (node === parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n };\n TreeView.prototype.showSpinner = function (element) {\n addClass([element], LOAD);\n createSpinner({\n target: element,\n width: Browser.isDevice ? 16 : 14\n });\n showSpinner(element);\n };\n TreeView.prototype.hideSpinner = function (element) {\n hideSpinner(element);\n element.innerHTML = '';\n removeClass([element], LOAD);\n };\n TreeView.prototype.setCheckedNodes = function (nodes) {\n nodes = JSON.parse(JSON.stringify(nodes));\n this.uncheckAll();\n if (nodes.length > 0) {\n this.checkAll(nodes);\n }\n };\n /**\n * Called internally if any of the property value changed.\n * @param {TreeView} newProp\n * @param {TreeView} oldProp\n * @returns void\n * @private\n */\n TreeView.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.setDragAndDrop(this.allowDragAndDrop);\n break;\n case 'allowEditing':\n this.wireEditingEvents(this.allowEditing);\n break;\n case 'allowMultiSelection':\n if (this.selectedNodes.length > 1) {\n var sNode = this.getElement(this.selectedNodes[0]);\n this.isLoaded = false;\n this.removeSelectAll();\n this.selectNode(sNode, null);\n this.isLoaded = true;\n }\n this.setMultiSelect(this.allowMultiSelection);\n this.addMultiSelect(this.allowMultiSelection);\n break;\n case 'checkedNodes':\n if (this.showCheckBox) {\n this.checkedNodes = oldProp.checkedNodes;\n this.setCheckedNodes(newProp.checkedNodes);\n }\n break;\n case 'cssClass':\n this.setCssClass(oldProp.cssClass, newProp.cssClass);\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'expandOn':\n this.wireExpandOnEvent(false);\n this.setExpandOnType();\n this.wireExpandOnEvent(true);\n break;\n case 'fields':\n this.listBaseOption.fields = this.fields.properties;\n this.listBaseOption.fields.url = this.fields.navigateUrl;\n this.reRenderNodes();\n break;\n case 'fullRowSelect':\n this.setFullRow(this.fullRowSelect);\n this.addFullRow(this.fullRowSelect);\n break;\n case 'nodeTemplate':\n this.nodeTemplateFn = this.templateComplier(this.nodeTemplate);\n this.reRenderNodes();\n break;\n case 'selectedNodes':\n this.removeSelectAll();\n this.setProperties({ selectedNodes: newProp.selectedNodes }, true);\n this.doSelectionAction();\n break;\n case 'showCheckBox':\n this.reRenderNodes();\n break;\n case 'sortOrder':\n this.reRenderNodes();\n break;\n }\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. It also removes the attributes and classes.\n */\n TreeView.prototype.destroy = function () {\n this.element.removeAttribute('aria-activedescendant');\n this.element.removeAttribute('tabindex');\n this.unWireEvents();\n this.wireEditingEvents(false);\n this.rippleFn();\n this.rippleIconFn();\n this.setCssClass(this.cssClass, null);\n this.setDragAndDrop(false);\n this.setFullRow(false);\n this.element.innerHTML = '';\n _super.prototype.destroy.call(this);\n };\n /**\n * Adds the collection of TreeView nodes based on target and index position. If target node is not specified,\n * then the nodes are added as children of the given parentID or in the root level of TreeView.\n * @param { Object[] } nodes - Specifies the array of JSON data that has to be added.\n * @param { string | Element } target - Specifies ID of TreeView node/TreeView node as target element.\n * @param { number } index - Specifies the index to place the newly added nodes in the target element.\n */\n TreeView.prototype.addNodes = function (nodes, target, index) {\n if (isNOU(nodes)) {\n return;\n }\n var dropLi = this.getElement(target);\n nodes = this.getSortedData(nodes);\n if (this.fields.dataSource instanceof DataManager) {\n this.addGivenNodes(nodes, dropLi, index, true);\n }\n else if (this.dataType === 2) {\n this.addGivenNodes(nodes, dropLi, index);\n }\n else {\n if (dropLi) {\n this.addGivenNodes(nodes, dropLi, index);\n }\n else {\n for (var i = 0; i < nodes.length; i++) {\n var pid = getValue(this.fields.parentID, nodes[i]);\n dropLi = pid ? this.getElement(pid.toString()) : pid;\n this.addGivenNodes([nodes[i]], dropLi, index);\n }\n }\n }\n };\n /**\n * Instead of clicking on the TreeView node for editing, we can enable it by using\n * `beginEdit` property. On passing the node ID or element through this property, the edit textBox\n * will be created for the particular node thus allowing us to edit it.\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView node.\n */\n TreeView.prototype.beginEdit = function (node) {\n var ele = this.getElement(node);\n if (!isNOU(ele)) {\n this.createTextbox(ele, null);\n }\n };\n /**\n * Checks all the unchecked nodes. You can also check specific nodes by passing array of unchecked nodes\n * as argument to this method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n */\n TreeView.prototype.checkAll = function (nodes) {\n if (this.showCheckBox) {\n this.doCheckBoxAction(nodes, true);\n }\n };\n /**\n * Collapses all the expanded TreeView nodes. You can collapse specific nodes by passing array of nodes as argument to this method.\n * You can also collapse all the nodes excluding the hidden nodes by setting **excludeHiddenNodes** to true. If you want to collapse\n * a specific level of nodes, set **level** as argument to collapseAll method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/ array of TreeView node.\n * @param {number} level - TreeView nodes will collapse up to the given level.\n * @param {boolean} excludeHiddenNodes - Whether or not to exclude hidden nodes of TreeView when collapsing all nodes.\n */\n TreeView.prototype.collapseAll = function (nodes, level, excludeHiddenNodes) {\n if (!isNOU(nodes)) {\n this.doGivenAction(nodes, COLLAPSIBLE, false);\n }\n else {\n if (level > 0) {\n this.collapseByLevel(select('.' + PARENTITEM, this.element), level, excludeHiddenNodes);\n }\n else {\n this.collapseAllNodes(excludeHiddenNodes);\n }\n }\n };\n /**\n * Disables the collection of nodes by passing the ID of nodes or node elements in the array.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n */\n TreeView.prototype.disableNodes = function (nodes) {\n if (!isNOU(nodes)) {\n this.doDisableAction(nodes);\n }\n };\n /**\n * Enables the collection of disabled nodes by passing the ID of nodes or node elements in the array.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n */\n TreeView.prototype.enableNodes = function (nodes) {\n if (!isNOU(nodes)) {\n this.doEnableAction(nodes);\n }\n };\n /**\n * Ensures visibility of the TreeView node by using node ID or node element.\n * When many TreeView nodes are present and we need to find a particular node, `ensureVisible` property\n * helps bring the node to visibility by expanding the TreeView and scrolling to the specific node.\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView nodes.\n */\n TreeView.prototype.ensureVisible = function (node) {\n var liEle = this.getElement(node);\n if (isNOU(liEle)) {\n return;\n }\n var parents = this.parents(liEle, '.' + LISTITEM);\n this.expandAll(parents);\n setTimeout(function () { liEle.scrollIntoView(true); }, 450);\n };\n /**\n * Expands all the collapsed TreeView nodes. You can expand the specific nodes by passing the array of collapsed nodes\n * as argument to this method. You can also expand all the collapsed nodes by excluding the hidden nodes by setting\n * **excludeHiddenNodes** to true to this method. To expand a specific level of nodes, set **level** as argument to expandAll method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n * @param {number} level - TreeView nodes will expand up to the given level.\n * @param {boolean} excludeHiddenNodes - Whether or not to exclude hidden nodes when expanding all nodes.\n */\n TreeView.prototype.expandAll = function (nodes, level, excludeHiddenNodes) {\n if (!isNOU(nodes)) {\n this.doGivenAction(nodes, EXPANDABLE, true);\n }\n else {\n if (level > 0) {\n this.expandByLevel(select('.' + PARENTITEM, this.element), level, excludeHiddenNodes);\n }\n else {\n this.expandAllNodes(excludeHiddenNodes);\n }\n }\n };\n /**\n * Get the node's data such as id, text, parentID, selected, isChecked, and expanded by passing the node element or it's ID.\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView node.\n */\n TreeView.prototype.getNode = function (node) {\n var ele = this.getElement(node);\n return this.getNodeData(ele, true);\n };\n /**\n * Moves the collection of nodes within the same TreeView based on target or its index position.\n * @param {string[] | Element[]} sourceNodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n * @param {string | Element} target - Specifies ID of TreeView node/TreeView node as target element.\n * @param {number} index - Specifies the index to place the moved nodes in the target element.\n */\n TreeView.prototype.moveNodes = function (sourceNodes, target, index) {\n var dropLi = this.getElement(target);\n if (isNOU(dropLi)) {\n return;\n }\n for (var i = 0; i < sourceNodes.length; i++) {\n var dragLi = this.getElement(sourceNodes[i]);\n if (isNOU(dragLi) || dropLi.isSameNode(dragLi) || this.isDescendant(dragLi, dropLi)) {\n continue;\n }\n this.dropAsChildNode(dragLi, dropLi, this, index);\n }\n };\n /**\n * Removes the collection of TreeView nodes by passing the array of node details as argument to this method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n */\n TreeView.prototype.removeNodes = function (nodes) {\n if (!isNOU(nodes)) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[i]);\n if (isNOU(liEle)) {\n continue;\n }\n this.removeNode(liEle);\n }\n }\n };\n /**\n * Replaces the text of the TreeView node with the given text.\n * @param {string | Element} target - Specifies ID of TreeView node/TreeView node as target element.\n * @param {string} newText - Specifies the new text of TreeView node.\n */\n TreeView.prototype.updateNode = function (target, newText) {\n if (isNOU(target) || isNOU(newText) || !this.allowEditing) {\n return;\n }\n var liEle = this.getElement(target);\n if (isNOU(liEle)) {\n return;\n }\n var txtEle = select('.' + LISTTEXT, liEle);\n this.updateOldText(liEle);\n var eventArgs = this.getEditEvent(liEle, null, null);\n this.trigger('nodeEditing', eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n this.appendNewText(liEle, txtEle, newText, false);\n };\n /**\n * Unchecks all the checked nodes. You can also uncheck the specific nodes by passing array of checked nodes\n * as argument to this method.\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n */\n TreeView.prototype.uncheckAll = function (nodes) {\n if (this.showCheckBox) {\n this.doCheckBoxAction(nodes, false);\n }\n };\n __decorate([\n Property(false)\n ], TreeView.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"allowEditing\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"allowMultiSelection\", void 0);\n __decorate([\n Complex({}, NodeAnimationSettings)\n ], TreeView.prototype, \"animation\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"checkedNodes\", void 0);\n __decorate([\n Property('')\n ], TreeView.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"enableRtl\", void 0);\n __decorate([\n Property('Auto')\n ], TreeView.prototype, \"expandOn\", void 0);\n __decorate([\n Complex({}, FieldsSettings)\n ], TreeView.prototype, \"fields\", void 0);\n __decorate([\n Property(true)\n ], TreeView.prototype, \"fullRowSelect\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"nodeTemplate\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"selectedNodes\", void 0);\n __decorate([\n Property('None')\n ], TreeView.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"showCheckBox\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"drawNode\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"keyPress\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeChecked\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeChecking\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeClicked\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeCollapsed\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeCollapsing\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDragging\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDragStart\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDragStop\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDropped\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeEdited\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeEditing\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeExpanded\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeExpanding\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeSelected\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeSelecting\", void 0);\n TreeView = __decorate([\n NotifyPropertyChanges\n ], TreeView);\n return TreeView;\n}(Component));\nexport { TreeView };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, formatUnit, EventHandler, Event, isNullOrUndefined, closest } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, Browser } from '@syncfusion/ej2-base';\nimport { setStyleAttribute as setStyle, addClass, removeClass, createElement, Touch } from '@syncfusion/ej2-base';\nvar CONTROL = 'e-control';\nvar ROOT = 'e-sidebar';\nvar DOCKER = 'e-dock';\nvar CLOSE = 'e-close';\nvar OPEN = 'e-open';\nvar TRASITION = 'e-transition';\nvar DEFAULTBACKDROP = 'e-sidebar-overlay';\nvar CONTEXTBACKDROP = 'e-backdrop';\nvar RTL = 'e-rtl';\nvar RIGHT = 'e-right';\nvar LEFT = 'e-left';\nvar OVER = 'e-over';\nvar PUSH = 'e-push';\nvar SLIDE = 'e-slide';\nvar VISIBILITY = 'e-visibility';\nvar MAINCONTENTANIMATION = 'e-content-animation';\nvar DISABLEANIMATION = 'e-disable-animation';\nvar CONTEXT = 'e-sidebar-context';\nvar SIDEBARABSOLUTE = 'e-sidebar-absolute';\n/**\n * Sidebar is an expandable and collapsible\n * component that typically act as a side container to place the primary or secondary content alongside of the main content.\n * ```html\n * \n * ````\n * ````typescript\n * \n * ```\n */\nvar Sidebar = /** @class */ (function (_super) {\n __extends(Sidebar, _super);\n function Sidebar(options, element) {\n return _super.call(this, options, element) || this;\n }\n Sidebar.prototype.preRender = function () {\n this.setWidth();\n };\n Sidebar.prototype.render = function () {\n this.initialize();\n this.wireEvents();\n };\n Sidebar.prototype.initialize = function () {\n this.setContext();\n this.addClass();\n this.setZindex();\n if (this.enableDock) {\n this.setDock();\n }\n this.setMediaQuery();\n this.setType(this.type);\n this.setCloseOnDocumentClick();\n };\n Sidebar.prototype.setContext = function () {\n if (typeof (this.target) === 'string') {\n this.setProperties({ target: document.querySelector('.' + this.target) }, true);\n }\n if (this.target) {\n this.target.insertAdjacentElement('afterbegin', this.element);\n addClass([this.element], SIDEBARABSOLUTE);\n addClass([this.target], CONTEXT);\n }\n };\n Sidebar.prototype.setCloseOnDocumentClick = function () {\n if (this.closeOnDocumentClick) {\n EventHandler.add(document, 'mousedown touchstart', this.documentclickHandler, this);\n }\n else {\n EventHandler.remove(document, 'mousedown touchstart', this.documentclickHandler);\n }\n };\n Sidebar.prototype.setWidth = function () {\n if (this.enableDock && this.position === 'Left') {\n setStyle(this.element, { 'width': formatUnit(this.dockSize) });\n }\n else if (this.enableDock && this.position === 'Right') {\n setStyle(this.element, { 'width': formatUnit(this.dockSize) });\n }\n else if (!this.enableDock) {\n setStyle(this.element, { 'width': formatUnit(this.width) });\n }\n };\n Sidebar.prototype.setZindex = function () {\n setStyle(this.element, { 'z-index': '' + this.zIndex });\n };\n Sidebar.prototype.addClass = function () {\n var classELement = document.querySelector('.e-main-content');\n if (!isNullOrUndefined((classELement ||\n this.element.nextElementSibling))) {\n addClass([classELement || this.element.nextElementSibling], [MAINCONTENTANIMATION]);\n }\n if (!this.enableDock && this.type !== 'Auto') {\n addClass([this.element], [VISIBILITY]);\n }\n removeClass([this.element], [OPEN, CLOSE, RIGHT, LEFT, SLIDE, PUSH, OVER]);\n this.element.classList.add(ROOT);\n addClass([this.element], (this.position === 'Right') ? RIGHT : LEFT);\n if (this.type === 'Auto' && !Browser.isDevice && !this.enableDock) {\n addClass([this.element], OPEN);\n }\n else {\n addClass([this.element], CLOSE);\n }\n };\n Sidebar.prototype.destroyBackDrop = function () {\n var sibling = document.querySelector('.e-main-content') ||\n this.element.nextElementSibling;\n if (this.target && this.showBackdrop && sibling) {\n removeClass([sibling], CONTEXTBACKDROP);\n }\n else if (this.showBackdrop && this.modal) {\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n };\n /**\n * Hide the Sidebar component.\n * @returns void\n */\n Sidebar.prototype.hide = function () {\n if (this.element.classList.contains(CLOSE)) {\n return;\n }\n if (this.element.classList.contains(OPEN)) {\n this.eventArguments = { name: 'change', element: this.element };\n this.trigger('change', this.eventArguments);\n }\n addClass([this.element], CLOSE);\n removeClass([this.element], OPEN);\n this.enableDock ? setStyle(this.element, { 'width': formatUnit(this.dockSize) }) :\n setStyle(this.element, { 'width': formatUnit(this.width) });\n this.setDock();\n this.setType(this.type);\n var sibling = document.querySelector('.e-main-content') ||\n this.element.nextElementSibling;\n if (!this.enableDock && sibling) {\n sibling.style.transform = 'translateX(' + 0 + 'px)';\n this.position === 'Left' ? sibling.style.marginLeft = '0px' : sibling.style.marginRight = '0px';\n }\n this.eventArguments = { name: 'change', element: this.element };\n this.trigger('close', this.eventArguments);\n this.destroyBackDrop();\n this.setCloseOnDocumentClick();\n this.setAnimation();\n if (this.type === 'Slide') {\n document.body.classList.remove('e-sidebar-overflow');\n }\n };\n /**\n * Shows the Sidebar component.\n * @returns void\n */\n Sidebar.prototype.show = function () {\n removeClass([this.element], VISIBILITY);\n if (this.element.classList.contains(OPEN)) {\n return;\n }\n if (this.element.classList.contains(CLOSE)) {\n this.eventArguments = { name: 'open', element: this.element };\n this.trigger('change', this.eventArguments);\n }\n addClass([this.element], [OPEN, TRASITION]);\n setStyle(this.element, { 'transform': '' });\n removeClass([this.element], CLOSE);\n setStyle(this.element, { 'width': formatUnit(this.width) });\n var elementWidth = this.element.getBoundingClientRect().width;\n this.setType(this.type);\n this.createBackDrop();\n this.eventArguments.name = 'open';\n this.eventArguments.element = this.element;\n this.trigger('open', this.eventArguments);\n this.setCloseOnDocumentClick();\n this.setAnimation();\n if (this.type === 'Slide') {\n document.body.classList.add('e-sidebar-overflow');\n }\n };\n Sidebar.prototype.setAnimation = function () {\n if (this.animate) {\n removeClass([this.element], DISABLEANIMATION);\n }\n else {\n addClass([this.element], DISABLEANIMATION);\n }\n };\n Sidebar.prototype.setDock = function () {\n if (this.enableDock && this.position === 'Left' && !this.isOpen()) {\n setStyle(this.element, { 'transform': 'translateX(' + -100 + '%) translateX(' + formatUnit(this.dockSize) + ')' });\n }\n else if (this.enableDock && this.position === 'Right' && !this.isOpen()) {\n setStyle(this.element, { 'transform': 'translateX(' + 100 + '%) translateX(' + '-' + formatUnit(this.dockSize) + ')' });\n }\n if (this.element.classList.contains(CLOSE) && this.enableDock) {\n setStyle(this.element, { 'width': formatUnit(this.dockSize) });\n }\n };\n Sidebar.prototype.createBackDrop = function () {\n if (this.target && this.showBackdrop) {\n var sibling = document.querySelector('.e-main-content') ||\n this.element.nextElementSibling;\n addClass([sibling], CONTEXTBACKDROP);\n }\n else if (this.showBackdrop && !this.modal && this.isOpen()) {\n this.modal = createElement('div');\n this.modal.className = DEFAULTBACKDROP;\n this.modal.style.display = 'block';\n document.body.appendChild(this.modal);\n }\n };\n Sidebar.prototype.getPersistData = function () {\n return this.addOnPersist(['type', 'position']);\n };\n /**\n * Returns the current module name.\n * @returns string\n * @private\n */\n Sidebar.prototype.getModuleName = function () {\n return 'sidebar';\n };\n /**\n * Shows or hides the Sidebar based on the current state.\n * @returns void\n */\n Sidebar.prototype.toggle = function (e) {\n this.element.classList.contains(OPEN) ? this.hide() : this.show();\n };\n /**\n * Specifies the current state of the Sidebar component.\n * @returns boolean\n */\n Sidebar.prototype.isOpen = function () {\n return this.element.classList.contains(OPEN) ? true : false;\n };\n Sidebar.prototype.setMediaQuery = function () {\n if (this.mediaQuery && this.mediaQuery.matches) {\n this.show();\n }\n else if (this.mediaQuery && this.isOpen()) {\n this.hide();\n }\n };\n Sidebar.prototype.resize = function (e) {\n if (this.type === 'Auto') {\n if (Browser.isDevice) {\n addClass([this.element], OVER);\n }\n else {\n addClass([this.element], PUSH);\n }\n }\n this.setMediaQuery();\n };\n Sidebar.prototype.documentclickHandler = function (e) {\n if (closest(e.target, '.' + CONTROL + '' + '.' + ROOT)) {\n return;\n }\n this.hide();\n };\n Sidebar.prototype.enableGestureHandler = function (args) {\n if (this.position === 'Left' && args.swipeDirection === 'Right' &&\n (args.startX <= 20 && args.distanceX >= 50 && args.velocity >= 0.5)) {\n this.show();\n }\n else if (this.position === 'Left' && args.swipeDirection === 'Left') {\n this.hide();\n }\n else if (this.position === 'Right' && args.swipeDirection === 'Right') {\n this.hide();\n }\n else if (this.position === 'Right' && args.swipeDirection === 'Left'\n && (window.innerWidth - args.startX <= 20 && args.distanceX >= 50 && args.velocity >= 0.5)) {\n this.show();\n }\n };\n Sidebar.prototype.setEnableGestures = function () {\n if (this.enableGestures) {\n this.mainContentEle = new Touch(document.body, { swipe: this.enableGestureHandler.bind(this) });\n this.sidebarEle = new Touch(this.element, { swipe: this.enableGestureHandler.bind(this) });\n }\n else {\n if (this.mainContentEle && this.sidebarEle) {\n this.mainContentEle.destroy();\n this.sidebarEle.destroy();\n }\n }\n };\n Sidebar.prototype.wireEvents = function () {\n this.setEnableGestures();\n window.addEventListener('resize', this.resize.bind(this));\n };\n Sidebar.prototype.unWireEvents = function () {\n window.removeEventListener('resize', this.resize.bind(this));\n EventHandler.remove(document, 'mousedown touchstart', this.documentclickHandler);\n if (this.mainContentEle) {\n this.mainContentEle.destroy();\n }\n if (this.sidebarEle) {\n this.sidebarEle.destroy();\n }\n };\n Sidebar.prototype.onPropertyChanged = function (newProp, oldProp) {\n var sibling = document.querySelector('.e-main-content') ||\n this.element.nextElementSibling;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n this.setWidth();\n if (!this.isOpen()) {\n this.setDock();\n }\n break;\n case 'animate':\n this.setAnimation();\n break;\n case 'type':\n removeClass([this.element], [VISIBILITY]);\n this.addClass();\n this.setType(this.type);\n break;\n case 'position':\n this.element.style.transform = '';\n this.setDock();\n if (sibling) {\n this.position === 'Left' ? sibling.style.marginRight = '0px' : sibling.style.marginLeft = '0px';\n }\n if (this.position === 'Right') {\n removeClass([this.element], LEFT);\n addClass([this.element], RIGHT);\n }\n else {\n removeClass([this.element], RIGHT);\n addClass([this.element], LEFT);\n }\n this.setType(this.type);\n break;\n case 'showBackdrop':\n if (this.showBackdrop) {\n this.createBackDrop();\n }\n else {\n if (this.modal) {\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n }\n break;\n case 'target':\n if (typeof (this.target) === 'string') {\n this.setProperties({ target: document.querySelector('.' + this.target) }, true);\n }\n if (isNullOrUndefined(this.target)) {\n removeClass([this.element], SIDEBARABSOLUTE);\n removeClass([oldProp.target], CONTEXT);\n setStyle(sibling, { 'margin-left': 0, 'margin-right': 0 });\n document.body.insertAdjacentElement('afterbegin', this.element);\n }\n else {\n _super.prototype.refresh.call(this);\n }\n break;\n case 'closeOnDocumentClick':\n this.setCloseOnDocumentClick();\n break;\n case 'enableDock':\n if (!this.isOpen()) {\n this.setDock();\n }\n break;\n case 'zIndex':\n this.setZindex();\n break;\n case 'mediaQuery':\n this.setMediaQuery();\n break;\n case 'enableGestures':\n this.setEnableGestures();\n break;\n }\n }\n };\n Sidebar.prototype.setType = function (type) {\n var elementWidth = this.element.getBoundingClientRect().width;\n this.setZindex();\n if (this.enableDock) {\n addClass([this.element], DOCKER);\n }\n var sibling = document.querySelector('.e-main-content') ||\n this.element.nextElementSibling;\n if (sibling) {\n sibling.style.transform = 'translateX(' + 0 + 'px)';\n if (!Browser.isDevice && this.type !== 'Auto') {\n this.position === 'Left' ? sibling.style.marginLeft = '0px' : sibling.style.marginRight = '0px';\n }\n }\n var margin = this.position === 'Left' ? elementWidth + 'px' : elementWidth + 'px';\n var eleWidth = this.position === 'Left' ? elementWidth : -(elementWidth);\n removeClass([this.element], [PUSH, OVER, SLIDE]);\n switch (type) {\n case 'Push':\n addClass([this.element], [PUSH]);\n if (sibling && (this.enableDock || this.element.classList.contains(OPEN))) {\n this.position === 'Left' ? sibling.style.marginLeft = margin : sibling.style.marginRight = margin;\n }\n break;\n case 'Slide':\n addClass([this.element], [SLIDE]);\n if (sibling && (this.enableDock || this.element.classList.contains(OPEN))) {\n sibling.style.transform = 'translateX(' + eleWidth + 'px)';\n }\n break;\n case 'Over':\n addClass([this.element], [OVER]);\n if (this.enableDock && this.element.classList.contains(CLOSE)) {\n if (sibling) {\n this.position === 'Left' ? sibling.style.marginLeft = margin : sibling.style.marginRight = margin;\n }\n }\n break;\n case 'Auto':\n addClass([this.element], [TRASITION]);\n if (Browser.isDevice) {\n if (sibling && (this.enableDock) && !this.isOpen()) {\n this.position === 'Left' ? sibling.style.marginLeft = margin : sibling.style.marginRight = margin;\n addClass([this.element], PUSH);\n }\n else {\n addClass([this.element], OVER);\n }\n }\n else {\n addClass([this.element], PUSH);\n if (sibling && (this.enableDock || this.element.classList.contains(OPEN))) {\n this.position === 'Left' ? sibling.style.marginLeft = margin : sibling.style.marginRight = margin;\n }\n }\n this.createBackDrop();\n }\n };\n /**\n * Removes the control from the DOM and removes all its related events\n * @returns void\n */\n Sidebar.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n removeClass([this.element], [OPEN, CLOSE, PUSH, SLIDE, OVER, LEFT, RIGHT, TRASITION]);\n if (this.target) {\n removeClass([this.element], SIDEBARABSOLUTE);\n removeClass([this.target], CONTEXT);\n }\n this.destroyBackDrop();\n this.element.style.width = '';\n this.element.style.zIndex = '';\n this.element.style.transform = '';\n var sibling = document.querySelector('.e-main-content')\n || this.element.nextElementSibling;\n if (!isNullOrUndefined(sibling)) {\n sibling.style.margin = '';\n sibling.style.transform = '';\n }\n this.unWireEvents();\n };\n __decorate([\n Property('auto')\n ], Sidebar.prototype, \"dockSize\", void 0);\n __decorate([\n Property(null)\n ], Sidebar.prototype, \"mediaQuery\", void 0);\n __decorate([\n Property(false)\n ], Sidebar.prototype, \"enableDock\", void 0);\n __decorate([\n Property(true)\n ], Sidebar.prototype, \"enableGestures\", void 0);\n __decorate([\n Property(false)\n ], Sidebar.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(true)\n ], Sidebar.prototype, \"animate\", void 0);\n __decorate([\n Property('auto')\n ], Sidebar.prototype, \"height\", void 0);\n __decorate([\n Property(false)\n ], Sidebar.prototype, \"closeOnDocumentClick\", void 0);\n __decorate([\n Property('Left')\n ], Sidebar.prototype, \"position\", void 0);\n __decorate([\n Property(null)\n ], Sidebar.prototype, \"target\", void 0);\n __decorate([\n Property(false)\n ], Sidebar.prototype, \"showBackdrop\", void 0);\n __decorate([\n Property('Auto')\n ], Sidebar.prototype, \"type\", void 0);\n __decorate([\n Property('auto')\n ], Sidebar.prototype, \"width\", void 0);\n __decorate([\n Property(1000)\n ], Sidebar.prototype, \"zIndex\", void 0);\n __decorate([\n Event()\n ], Sidebar.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Sidebar.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], Sidebar.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], Sidebar.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Sidebar.prototype, \"destroyed\", void 0);\n Sidebar = __decorate([\n NotifyPropertyChanges\n ], Sidebar);\n return Sidebar;\n}(Component));\nexport { Sidebar };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Internationalization, setCulture } from '@syncfusion/ej2-base';\n/**\n * ValueFormatter class to globalize the value.\n * @hidden\n */\nvar ValueFormatter = /** @class */ (function () {\n function ValueFormatter(cultureName) {\n this.intl = new Internationalization();\n if (!isNullOrUndefined(cultureName)) {\n this.intl.culture = cultureName;\n }\n }\n ValueFormatter.prototype.getFormatFunction = function (format) {\n if (format.type) {\n return this.intl.getDateFormat(format);\n }\n else {\n return this.intl.getNumberFormat(format);\n }\n };\n ValueFormatter.prototype.getParserFunction = function (format) {\n if (format.type) {\n return this.intl.getDateParser(format);\n }\n else {\n return this.intl.getNumberParser(format);\n }\n };\n ValueFormatter.prototype.fromView = function (value, format, type) {\n if (type === 'date' || type === 'datetime' || type === 'number') {\n return format(value);\n }\n else {\n return value;\n }\n };\n ValueFormatter.prototype.toView = function (value, format) {\n var result = value;\n if (!isNullOrUndefined(format) && !isNullOrUndefined(value)) {\n result = format(value);\n }\n return result;\n };\n ValueFormatter.prototype.setCulture = function (cultureName) {\n if (!isNullOrUndefined(cultureName)) {\n setCulture(cultureName);\n }\n };\n return ValueFormatter;\n}());\nexport { ValueFormatter };\n","import { merge, isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { Query, DataUtil } from '@syncfusion/ej2-data';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { getUid, templateCompiler, getForeignData } from '../base/util';\n/**\n * Represents Grid `Column` model class.\n */\nvar Column = /** @class */ (function () {\n function Column(options) {\n var _this = this;\n /**\n * If `allowSorting` set to false, then it disables sorting option of a particular column.\n * By default all columns are sortable.\n * @default true\n */\n this.allowSorting = true;\n /**\n * If `allowResizing` is set to false, it disables resize option of a particular column.\n * By default all the columns can be resized.\n * @default true\n */\n this.allowResizing = true;\n /**\n * If `allowFiltering` set to false, then it disables filtering option and filter bar element of a particular column.\n * By default all columns are filterable.\n * @default true\n */\n this.allowFiltering = true;\n /**\n * If `allowGrouping` set to false, then it disables grouping of a particular column.\n * By default all columns are groupable.\n * @default true\n */\n this.allowGrouping = true;\n /**\n * If `showColumnMenu` set to false, then it disable the column menu of a particular column.\n * By default column menu will show for all columns\n * @default true\n */\n this.showColumnMenu = true;\n /**\n * If `enableGroupByFormat` set to true, then it groups the particular column by formatted values.\n * @default true\n */\n this.enableGroupByFormat = false;\n /**\n * If `allowEditing` set to false, then it disables editing of a particular column.\n * By default all columns are editable.\n * @default true\n */\n this.allowEditing = true;\n /**\n * It is used to customize the default filter options for a specific columns.\n * * type - Specifies the filter type as menu or checkbox.\n * * ui - to render custom component for specific column it has following functions.\n * * ui.create – It is used for creating custom components.\n * * ui.read - It is used for read the value from the component.\n * * ui.write - It is used to apply component model as dynamically.\n * {% codeBlock src=\"grid/filter-menu-api/index.ts\" %}{% endcodeBlock %}\n *\n * > Check the [`Filter UI`](./filtering.html#custom-component-in-filter-menu) for its customization.\n * @default null\n */\n this.filter = {};\n /**\n * If `showInColumnChooser` set to false, then hide the particular column in column chooser.\n * By default all columns are displayed in column Chooser.\n * @default true\n */\n this.showInColumnChooser = true;\n /**\n * Defines the `IEditCell` object to customize default edit cell.\n * @default {}\n */\n this.edit = {};\n this.sortDirection = 'Descending';\n merge(this, options);\n this.uid = getUid('grid-column');\n var valueFormatter = new ValueFormatter();\n if (options.format && (options.format.skeleton || options.format.format)) {\n this.setFormatter(valueFormatter.getFormatFunction(options.format));\n this.setParser(valueFormatter.getParserFunction(options.format));\n }\n if (!this.field) {\n this.allowFiltering = false;\n this.allowGrouping = false;\n this.allowSorting = false;\n }\n if (this.commands && !this.textAlign) {\n this.textAlign = 'Right';\n }\n if (this.template || this.commandsTemplate) {\n this.templateFn = templateCompiler(this.template || this.commandsTemplate);\n }\n if (this.headerTemplate) {\n this.headerTemplateFn = templateCompiler(this.headerTemplate);\n }\n if (this.filter.itemTemplate) {\n this.fltrTemplateFn = templateCompiler(this.filter.itemTemplate);\n }\n if (this.isForeignColumn() && (isNullOrUndefined(this.editType) || this.editType === 'dropdownedit')) {\n this.editType = 'dropdownedit';\n this.edit.params = {\n dataSource: this.dataSource,\n query: new Query(), fields: { value: this.foreignKeyField || this.field, text: this.foreignKeyValue }\n };\n }\n if (this.sortComparer) {\n var a_1 = this.sortComparer;\n this.sortComparer = function comparer(x, y) {\n if (typeof a_1 === 'string') {\n a_1 = getValue(a_1, window);\n }\n if (this.sortDirection === 'Descending') {\n var z = x;\n x = y;\n y = z;\n }\n return a_1(x, y);\n };\n }\n if (!this.sortComparer && this.isForeignColumn()) {\n this.sortComparer = function (x, y) {\n x = getValue(_this.foreignKeyValue, getForeignData(_this, {}, x)[0]);\n y = getValue(_this.foreignKeyValue, getForeignData(_this, {}, y)[0]);\n return _this.sortDirection === 'Descending' ? DataUtil.fnDescending(x, y) : DataUtil.fnAscending(x, y);\n };\n }\n }\n /** @hidden */\n Column.prototype.getSortDirection = function () {\n return this.sortDirection;\n };\n /** @hidden */\n Column.prototype.setSortDirection = function (direction) {\n this.sortDirection = direction;\n };\n /** @hidden */\n Column.prototype.setProperties = function (column) {\n //Angular two way binding\n var keys = Object.keys(column);\n for (var i = 0; i < keys.length; i++) {\n this[keys[i]] = column[keys[i]];\n }\n };\n /**\n * @hidden\n * It defines the column is foreign key column or not.\n */\n Column.prototype.isForeignColumn = function () {\n return !!(this.dataSource && this.foreignKeyValue);\n };\n /** @hidden */\n Column.prototype.getFormatter = function () {\n return this.formatFn;\n };\n /** @hidden */\n Column.prototype.setFormatter = function (value) {\n this.formatFn = value;\n };\n /** @hidden */\n Column.prototype.getParser = function () {\n return this.parserFn;\n };\n /** @hidden */\n Column.prototype.setParser = function (value) {\n this.parserFn = value;\n };\n /** @hidden */\n Column.prototype.getColumnTemplate = function () {\n return this.templateFn;\n };\n /** @hidden */\n Column.prototype.getHeaderTemplate = function () {\n return this.headerTemplateFn;\n };\n /** @hidden */\n Column.prototype.getFilterItemTemplate = function () {\n return this.fltrTemplateFn;\n };\n /** @hidden */\n Column.prototype.getDomSetter = function () {\n return this.disableHtmlEncode ? 'textContent' : 'innerHTML';\n };\n return Column;\n}());\nexport { Column };\n","/** @hidden */\nexport var created = 'create';\n/** @hidden */\nexport var destroyed = 'destroy';\n/** @hidden */\nexport var load = 'load';\n/** @hidden */\nexport var rowDataBound = 'rowDataBound';\n/** @hidden */\nexport var queryCellInfo = 'queryCellInfo';\n/** @hidden */\nexport var actionBegin = 'actionBegin';\n/** @hidden */\nexport var actionComplete = 'actionComplete';\n/** @hidden */\nexport var actionFailure = 'actionFailure';\n/** @hidden */\nexport var dataBound = 'dataBound';\n/** @hidden */\nexport var rowSelecting = 'rowSelecting';\n/** @hidden */\nexport var rowSelected = 'rowSelected';\n/** @hidden */\nexport var rowDeselecting = 'rowDeselecting';\n/** @hidden */\nexport var rowDeselected = 'rowDeselected';\n/** @hidden */\nexport var cellSelecting = 'cellSelecting';\n/** @hidden */\nexport var cellSelected = 'cellSelected';\n/** @hidden */\nexport var cellDeselecting = 'cellDeselecting';\n/** @hidden */\nexport var cellDeselected = 'cellDeselected';\n/** @hidden */\nexport var columnDragStart = 'columnDragStart';\n/** @hidden */\nexport var columnDrag = 'columnDrag';\n/** @hidden */\nexport var columnDrop = 'columnDrop';\n/** @hidden */\nexport var rowDragStart = 'rowDragStart';\n/** @hidden */\nexport var rowDrag = 'rowDrag';\n/** @hidden */\nexport var rowDrop = 'rowDrop';\n/** @hidden */\nexport var beforePrint = 'beforePrint';\n/** @hidden */\nexport var printComplete = 'printComplete';\n/** @hidden */\nexport var detailDataBound = 'detailDataBound';\n/** @hidden */\nexport var toolbarClick = 'toolbarClick';\n/** @hidden */\nexport var batchAdd = 'batchAdd';\n/** @hidden */\nexport var batchCancel = 'batchCancel';\n/** @hidden */\nexport var batchDelete = 'batchDelete';\n/** @hidden */\nexport var beforeBatchAdd = 'beforeBatchAdd';\n/** @hidden */\nexport var beforeBatchDelete = 'beforeBatchDelete';\n/** @hidden */\nexport var beforeBatchSave = 'beforeBatchSave';\n/** @hidden */\nexport var beginEdit = 'beginEdit';\n/** @hidden */\nexport var cellEdit = 'cellEdit';\n/** @hidden */\nexport var cellSave = 'cellSave';\n/** @hidden */\nexport var endAdd = 'endAdd';\n/** @hidden */\nexport var endDelete = 'endDelete';\n/** @hidden */\nexport var endEdit = 'endEdit';\n/** @hidden */\nexport var recordDoubleClick = 'recordDoubleClick';\n/** @hidden */\nexport var recordClick = 'recordClick';\n/** @hidden */\nexport var beforeDataBound = 'beforeDataBound';\n/** @hidden */\nexport var beforeOpenColumnChooser = 'beforeOpenColumnChooser';\n/** @hidden */\nexport var resizeStart = 'resizeStart';\n/** @hidden */\nexport var onResize = 'resizing';\n/** @hidden */\nexport var resizeStop = 'resizeStop';\n/** @hidden */\nexport var checkBoxChange = 'checkBoxChange';\n/** @hidden */\nexport var beforeCopy = 'beforeCopy';\n/** @hidden */\nexport var filterChoiceRequest = 'filterchoicerequest';\n/** @hidden */\nexport var filterAfterOpen = 'filterafteropen';\n/** @hidden */\nexport var filterBeforeOpen = 'filterbeforeopen';\nexport var filterSearchBegin = 'filtersearchbegin';\n/**\n * Specifies grid internal events\n */\n/** @hidden */\nexport var initialLoad = 'initial-load';\n/** @hidden */\nexport var initialEnd = 'initial-end';\n/** @hidden */\nexport var dataReady = 'data-ready';\n/** @hidden */\nexport var contentReady = 'content-ready';\n/** @hidden */\nexport var uiUpdate = 'ui-update';\n/** @hidden */\nexport var onEmpty = 'on-empty';\n/** @hidden */\nexport var inBoundModelChanged = 'inbound-model-changed';\n/** @hidden */\nexport var modelChanged = 'model-changed';\n/** @hidden */\nexport var colGroupRefresh = 'colgroup-refresh';\n/** @hidden */\nexport var headerRefreshed = 'header-refreshed';\n/** @hidden */\nexport var pageBegin = 'paging-begin';\n/** @hidden */\nexport var pageComplete = 'paging-complete';\n/** @hidden */\nexport var sortBegin = 'sorting-begin';\n/** @hidden */\nexport var sortComplete = 'sorting-complete';\n/** @hidden */\nexport var filterBegin = 'filtering-begin';\n/** @hidden */\nexport var filterComplete = 'filtering-complete';\n/** @hidden */\nexport var searchBegin = 'searching-begin';\n/** @hidden */\nexport var searchComplete = 'searching-complete';\n/** @hidden */\nexport var reorderBegin = 'reorder-begin';\n/** @hidden */\nexport var reorderComplete = 'reorder-complete';\n/** @hidden */\nexport var rowDragAndDropBegin = 'rowdraganddrop-begin';\n/** @hidden */\nexport var rowDragAndDropComplete = 'rowdraganddrop-complete';\n/** @hidden */\nexport var groupBegin = 'grouping-begin';\n/** @hidden */\nexport var groupComplete = 'grouping-complete';\n/** @hidden */\nexport var ungroupBegin = 'ungrouping-begin';\n/** @hidden */\nexport var ungroupComplete = 'ungrouping-complete';\n/** @hidden */\nexport var rowSelectionBegin = 'rowselecting';\n/** @hidden */\nexport var rowSelectionComplete = 'rowselected';\n/** @hidden */\nexport var columnSelectionBegin = 'columnselecting';\n/** @hidden */\nexport var columnSelectionComplete = 'columnselected';\n/** @hidden */\nexport var cellSelectionBegin = 'cellselecting';\n/** @hidden */\nexport var cellSelectionComplete = 'cellselected';\n/** @hidden */\nexport var beforeCellFocused = 'beforecellfocused';\n/** @hidden */\nexport var cellFocused = 'cellfocused';\n/** @hidden */\nexport var keyPressed = 'key-pressed';\n/** @hidden */\nexport var click = 'click';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var columnVisibilityChanged = 'column-visible-changed';\n/** @hidden */\nexport var scroll = 'scroll';\n/** @hidden */\nexport var columnWidthChanged = 'column-width-changed';\n/** @hidden */\nexport var columnPositionChanged = 'column-position-changed';\n/** @hidden */\nexport var rowDragAndDrop = 'row-drag-and-drop';\n/** @hidden */\nexport var rowsAdded = 'rows-added';\n/** @hidden */\nexport var rowsRemoved = 'rows-removed';\n/** @hidden */\nexport var columnDragStop = 'column-drag-stop';\n/** @hidden */\nexport var headerDrop = 'header-drop';\n/** @hidden */\nexport var dataSourceModified = 'datasource-modified';\n/** @hidden */\nexport var refreshComplete = 'refresh-complete';\n/** @hidden */\nexport var refreshVirtualBlock = 'refresh-virtual-block';\n/** @hidden */\nexport var dblclick = 'dblclick';\n/** @hidden */\nexport var toolbarRefresh = 'toolbar-refresh';\n/** @hidden */\nexport var bulkSave = 'bulk-save';\n/** @hidden */\nexport var autoCol = 'auto-col';\n/** @hidden */\nexport var tooltipDestroy = 'tooltip-destroy';\n/** @hidden */\nexport var updateData = 'update-data';\n/** @hidden */\nexport var editBegin = 'edit-begin';\n/** @hidden */\nexport var editComplete = 'edit-complete';\n/** @hidden */\nexport var addBegin = 'add-begin';\n/** @hidden */\nexport var addComplete = 'add-complete';\n/** @hidden */\nexport var saveComplete = 'save-complete';\n/** @hidden */\nexport var deleteBegin = 'delete-begin';\n/** @hidden */\nexport var deleteComplete = 'delete-complete';\n/** @hidden */\nexport var preventBatch = 'prevent-batch';\n/** @hidden */\nexport var dialogDestroy = 'dialog-destroy';\n/** @hidden */\nexport var crudAction = 'crud-Action';\n/** @hidden */\nexport var addDeleteAction = 'add-delete-Action';\n/** @hidden */\nexport var destroyForm = 'destroy-form';\n/** @hidden */\nexport var doubleTap = 'double-tap';\n/** @hidden */\nexport var beforeExcelExport = 'beforeExcelExport';\n/** @hidden */\nexport var excelExportComplete = 'excelExportComplete';\n/** @hidden */\nexport var excelQueryCellInfo = 'excelQueryCellInfo';\n/** @hidden */\nexport var beforePdfExport = 'beforePdfExport';\n/** @hidden */\nexport var pdfExportComplete = 'pdfExportComplete';\n/** @hidden */\nexport var pdfQueryCellInfo = 'pdfQueryCellInfo';\n/** @hidden */\nexport var accessPredicate = 'access-predicate';\n/** @hidden */\nexport var contextMenuClick = 'contextMenuClick';\n/** @hidden */\nexport var freezeRender = 'freezerender';\n/** @hidden */\nexport var freezeRefresh = 'freezerefresh';\n/** @hidden */\nexport var contextMenuOpen = 'contextMenuOpen';\n/** @hidden */\nexport var columnMenuClick = 'columnMenuClick';\n/** @hidden */\nexport var columnMenuOpen = 'columnMenuOpen';\n/** @hidden */\nexport var filterOpen = 'filterOpen';\n/** @hidden */\nexport var filterDialogCreated = 'filterDialogCreated';\n/** @hidden */\nexport var filterMenuClose = 'filter-menu-close';\n/** @hidden */\nexport var initForeignKeyColumn = 'initForeignKeyColumn';\n/** @hidden */\nexport var getForeignKeyData = 'getForeignKeyData';\n/** @hidden */\nexport var generateQuery = 'generateQuery';\n/** @hidden */\nexport var showEmptyGrid = 'showEmptyGrid';\n/** @hidden */\nexport var foreignKeyData = 'foreignKeyData';\n/** @hidden */\nexport var dataStateChange = 'dataStateChange';\n/** @hidden */\nexport var dataSourceChanged = 'dataSourceChanged';\n/** @hidden */\nexport var rtlUpdated = 'rtl-updated';\n","/* tslint:disable-next-line:max-line-length */\nimport { EventHandler, isNullOrUndefined, extend, classList, addClass, removeClass, Browser, getValue, setValue } from '@syncfusion/ej2-base';\nimport { parentsUntil, getUid, appendChildren, getDatePredicate } from '../base/util';\nimport { remove, createElement, debounce } from '@syncfusion/ej2-base';\nimport { DataUtil, Query, DataManager, Predicate } from '@syncfusion/ej2-data';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport * as events from '../base/constant';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { getForeignData } from '../base/util';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { getFilterMenuPostion, toogleCheckbox, createCboxWithWrap, removeAddCboxClasses, getColumnByForeignKeyValue } from '../base/util';\n/**\n * @hidden\n * `CheckBoxFilter` module is used to handle filtering action.\n */\nvar CheckBoxFilter = /** @class */ (function () {\n /**\n * Constructor for checkbox filtering module\n * @hidden\n */\n function CheckBoxFilter(parent, filterSettings, serviceLocator) {\n this.existingPredicate = {};\n this.filterState = true;\n this.values = {};\n this.cBoxTrue = createCheckBox(false, { checked: true, label: ' ' });\n this.cBoxFalse = createCheckBox(false, { checked: false, label: ' ' });\n this.parent = parent;\n this.id = this.parent.element.id;\n this.serviceLocator = serviceLocator;\n this.filterSettings = filterSettings;\n this.valueFormatter = new ValueFormatter(this.parent.locale);\n this.cBoxTrue.insertBefore(createElement('input', {\n className: 'e-chk-hidden', attrs: { type: 'checkbox' }\n }), this.cBoxTrue.firstChild);\n this.cBoxFalse.insertBefore(createElement('input', {\n className: 'e-chk-hidden', attrs: { 'type': 'checkbox' }\n }), this.cBoxFalse.firstChild);\n this.cBoxFalse.querySelector('.e-frame').classList.add('e-uncheck');\n if (this.parent.enableRtl) {\n addClass([this.cBoxTrue, this.cBoxFalse], ['e-rtl']);\n }\n }\n /**\n * To destroy the filter bar.\n * @return {void}\n * @hidden\n */\n CheckBoxFilter.prototype.destroy = function () {\n this.closeDialog();\n };\n CheckBoxFilter.prototype.wireEvents = function () {\n EventHandler.add(this.dlg, 'click', this.clickHandler, this);\n this.searchHandler = debounce(this.searchBoxKeyUp, 200);\n EventHandler.add(this.dlg.querySelector('.e-searchinput'), 'keyup', this.searchHandler, this);\n };\n CheckBoxFilter.prototype.unWireEvents = function () {\n EventHandler.remove(this.dlg, 'click', this.clickHandler);\n var elem = this.dlg.querySelector('.e-searchinput');\n if (elem) {\n EventHandler.remove(elem, 'keyup', this.searchHandler);\n }\n };\n CheckBoxFilter.prototype.searchBoxClick = function (e) {\n var target = e.target;\n if (target.classList.contains('e-searchclear')) {\n this.sInput.value = '';\n this.refreshCheckboxes();\n this.updateSearchIcon();\n this.sInput.focus();\n }\n };\n CheckBoxFilter.prototype.searchBoxKeyUp = function (e) {\n this.refreshCheckboxes();\n this.updateSearchIcon();\n };\n CheckBoxFilter.prototype.updateSearchIcon = function () {\n if (this.sInput.value.length) {\n classList(this.sIcon, ['e-chkcancel-icon'], ['e-search-icon']);\n }\n else {\n classList(this.sIcon, ['e-search-icon'], ['e-chkcancel-icon']);\n }\n };\n /**\n * Gets the localized label by locale keyword.\n * @param {string} key\n * @return {string}\n */\n CheckBoxFilter.prototype.getLocalizedLabel = function (key) {\n return this.localeObj.getConstant(key);\n };\n CheckBoxFilter.prototype.updateDataSource = function () {\n var dataSource = this.options.dataSource;\n if (!(dataSource instanceof DataManager)) {\n for (var i = 0; i < dataSource.length; i++) {\n if (typeof dataSource !== 'object') {\n var obj = {};\n obj[this.options.field] = dataSource[i];\n dataSource[i] = obj;\n }\n }\n }\n };\n CheckBoxFilter.prototype.updateModel = function (options) {\n this.options = options;\n this.existingPredicate = options.actualPredicate || {};\n this.options.dataSource = options.dataSource;\n this.updateDataSource();\n this.options.type = options.type || 'string';\n this.options.format = options.format || '';\n this.options.filteredColumns = options.filteredColumns || this.parent.filterSettings.columns;\n this.options.sortedColumns = options.sortedColumns || this.parent.sortSettings.columns;\n this.options.query = options.query || new Query();\n this.options.allowCaseSensitive = options.allowCaseSensitive || false;\n this.values = {};\n this.localeObj = options.localeObj;\n this.isFiltered = options.filteredColumns.length;\n };\n CheckBoxFilter.prototype.getAndSetChkElem = function (options) {\n this.dlg = createElement('div', {\n id: this.id + this.options.type + '_excelDlg',\n className: 'e-checkboxfilter e-filter-popup'\n });\n this.sBox = createElement('div', { className: 'e-searchcontainer' });\n if (!options.hideSearchbox) {\n this.sInput = createElement('input', {\n id: this.id + '_SearchBox',\n className: 'e-searchinput'\n });\n this.sIcon = createElement('span', {\n className: 'e-searchclear e-search-icon e-icons e-input-group-icon', attrs: {\n type: 'text', title: this.getLocalizedLabel('Search')\n }\n });\n this.searchBox = createElement('span', { className: 'e-searchbox e-fields' });\n this.searchBox.appendChild(this.sInput);\n this.sBox.appendChild(this.searchBox);\n Input.createInput({\n element: this.sInput, floatLabelType: 'Never', properties: {\n placeholder: this.getLocalizedLabel('Search')\n }\n });\n this.searchBox.querySelector('.e-input-group').appendChild(this.sIcon);\n }\n this.spinner = createElement('div', { className: 'e-spinner' }); //for spinner\n this.cBox = createElement('div', {\n id: this.id + this.options.type + '_CheckBoxList',\n className: 'e-checkboxlist e-fields'\n });\n this.spinner.appendChild(this.cBox);\n this.sBox.appendChild(this.spinner);\n return this.sBox;\n };\n CheckBoxFilter.prototype.showDialog = function (options) {\n var args = {\n requestType: events.filterBeforeOpen, filterModel: this,\n columnName: this.options.field, columnType: this.options.type, cancel: false\n };\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n this.dialogObj = new Dialog({\n visible: false, content: this.sBox,\n close: this.closeDialog.bind(this),\n width: (!isNullOrUndefined(parentsUntil(options.target, 'e-bigger')))\n || this.parent.element.classList.contains('e-device') ? 260 : 255,\n target: this.parent.element, animationSettings: { effect: 'None' },\n buttons: [{\n click: this.btnClick.bind(this),\n buttonModel: { content: this.getLocalizedLabel(this.isExcel ? 'OKButton' : 'FilterButton'),\n cssClass: 'e-primary', isPrimary: true }\n },\n {\n click: this.btnClick.bind(this),\n buttonModel: { cssClass: 'e-flat', content: this.getLocalizedLabel(this.isExcel ? 'CancelButton' : 'ClearButton') }\n }],\n created: this.dialogCreated.bind(this),\n open: this.dialogOpen.bind(this)\n });\n this.dialogObj.appendTo(this.dlg);\n this.dialogObj.element.style.maxHeight = '800px';\n this.dialogObj.show();\n this.wireEvents();\n createSpinner({ target: this.spinner });\n showSpinner(this.spinner);\n this.getAllData();\n };\n CheckBoxFilter.prototype.dialogCreated = function (e) {\n if (!Browser.isDevice) {\n getFilterMenuPostion(this.options.target, this.dialogObj, this.parent);\n }\n else {\n this.dialogObj.position = { X: 'center', Y: 'center' };\n }\n this.parent.notify(events.filterDialogCreated, e);\n };\n CheckBoxFilter.prototype.openDialog = function (options) {\n this.updateModel(options);\n this.getAndSetChkElem(options);\n this.showDialog(options);\n };\n CheckBoxFilter.prototype.closeDialog = function () {\n if (this.dialogObj && !this.dialogObj.isDestroyed) {\n this.parent.notify(events.filterMenuClose, { field: this.options.field });\n this.dialogObj.destroy();\n this.unWireEvents();\n remove(this.dlg);\n this.dlg = null;\n }\n };\n CheckBoxFilter.prototype.clearFilter = function () {\n this.options.handler({ action: 'clear-filter', field: this.options.field });\n };\n CheckBoxFilter.prototype.btnClick = function (e) {\n if (this.filterState) {\n if (e.target.tagName.toLowerCase() === 'input') {\n var args = {\n action: 'filtering', filterCollection: {\n field: this.options.field,\n operator: this.options.column.type === 'date' || this.options.column.type === 'datetime' ? 'equal' : 'contains',\n value: e.target.value, matchCase: false, type: this.options.column.type\n },\n field: this.options.field\n };\n e.target.value ? this.options.handler(args) : this.closeDialog();\n }\n else {\n var text = e.target.firstChild.textContent.toLowerCase();\n if (this.getLocalizedLabel(this.isExcel ? 'OKButton' : 'FilterButton').toLowerCase() === text) {\n this.fltrBtnHandler();\n }\n else if (this.getLocalizedLabel('ClearButton').toLowerCase() === text) {\n this.clearFilter();\n }\n }\n this.closeDialog();\n }\n else if (!(e.target.tagName.toLowerCase() === 'input')) {\n this.clearFilter();\n this.closeDialog();\n }\n };\n CheckBoxFilter.prototype.fltrBtnHandler = function () {\n var checked = [].slice.call(this.cBox.querySelectorAll('.e-check:not(.e-selectall)'));\n var optr = 'equal';\n var caseSen = this.options.type === 'string' ?\n this.options.allowCaseSensitive : true;\n var defaults = {\n field: this.options.field, predicate: 'or',\n operator: optr, matchCase: caseSen, ignoreAccent: this.parent.filterSettings.ignoreAccent\n };\n var isNotEqual = this.itemsCnt !== checked.length && this.itemsCnt - checked.length < checked.length;\n if (isNotEqual) {\n optr = 'notequal';\n checked = [].slice.call(this.cBox.querySelectorAll('.e-uncheck:not(.e-selectall)'));\n defaults.predicate = 'and';\n defaults.operator = 'notequal';\n }\n var value;\n var fObj;\n var coll = [];\n var searchInput = this.searchBox.querySelector('.e-searchinput');\n if (checked.length !== this.itemsCnt || (searchInput.value && searchInput.value !== '')) {\n for (var i = 0; i < checked.length; i++) {\n value = this.values[parentsUntil(checked[i], 'e-ftrchk').getAttribute('uid')];\n fObj = extend({}, { value: value }, defaults);\n if (value && !value.toString().length) {\n fObj.operator = isNotEqual ? 'notequal' : 'equal';\n }\n coll.push(fObj);\n }\n this.initiateFilter(coll);\n }\n else {\n this.clearFilter();\n }\n };\n CheckBoxFilter.prototype.initiateFilter = function (fColl) {\n var firstVal = fColl[0];\n var predicate;\n if (!isNullOrUndefined(firstVal)) {\n predicate = firstVal.ejpredicate ? firstVal.ejpredicate :\n new Predicate(firstVal.field, firstVal.operator, firstVal.value, !firstVal.matchCase, firstVal.ignoreAccent);\n for (var j = 1; j < fColl.length; j++) {\n predicate = fColl[j].ejpredicate !== undefined ?\n predicate[fColl[j].predicate](fColl[j].ejpredicate) :\n predicate[fColl[j].predicate](fColl[j].field, fColl[j].operator, fColl[j].value, !fColl[j].matchCase, fColl[j].ignoreAccent);\n }\n var args = {\n action: 'filtering', filterCollection: fColl, field: this.options.field,\n ejpredicate: Predicate.or(predicate)\n };\n this.options.handler(args);\n }\n };\n CheckBoxFilter.prototype.refreshCheckboxes = function () {\n var val = this.sInput.value;\n var query = this.options.query.clone();\n var parsed = (this.options.type !== 'string' && parseFloat(val)) ? parseFloat(val) : val;\n var operator = this.options.type ? 'startswith' : 'contains';\n var matchCase = true;\n var ignoreAccent = this.parent.filterSettings.ignoreAccent;\n parsed = (parsed === '' || parsed === undefined) ? undefined : parsed;\n var predicte;\n if (this.options.type === 'boolean') {\n if (parsed !== undefined &&\n this.getLocalizedLabel('FilterTrue').toLowerCase().indexOf(parsed.toLowerCase()) !== -1) {\n parsed = 'true';\n }\n else if (parsed !== undefined &&\n this.getLocalizedLabel('FilterFalse').toLowerCase().indexOf(parsed.toLowerCase()) !== -1) {\n parsed = 'false';\n }\n }\n var args = {\n requestType: events.filterSearchBegin,\n filterModel: this, columnName: this.options.field, column: this.options.column,\n operator: operator, matchCase: matchCase, ignoreAccent: ignoreAccent, filterChoiceCount: null,\n query: query\n };\n this.parent.trigger(events.actionBegin, args);\n predicte = new Predicate(this.options.field, args.operator, parsed, args.matchCase, args.ignoreAccent);\n if (this.options.type === 'date' || this.options.type === 'datetime') {\n parsed = this.valueFormatter.fromView(val, this.options.parserFn, this.options.type);\n operator = 'equal';\n if (isNullOrUndefined(parsed) && val.length) {\n return;\n }\n predicte = getDatePredicate({\n field: this.options.field, operator: operator, value: parsed, matchCase: matchCase,\n ignoreAccent: ignoreAccent\n });\n }\n if (val.length) {\n query.where(predicte);\n }\n args.filterChoiceCount = !isNullOrUndefined(args.filterChoiceCount) ? args.filterChoiceCount : 1000;\n query.take(args.filterChoiceCount);\n this.processSearch(query);\n };\n CheckBoxFilter.prototype.getPredicateFromCols = function (columns) {\n var predicate;\n var predicates = CheckBoxFilter.getPredicate(columns);\n var predicateList = [];\n var fPredicate = {};\n var foreignColumn = this.parent.getForeignKeyColumns();\n for (var _i = 0, _a = Object.keys(predicates); _i < _a.length; _i++) {\n var prop = _a[_i];\n var col = getColumnByForeignKeyValue(prop, foreignColumn);\n if (col) {\n this.parent.notify(events.generateQuery, { predicate: fPredicate, column: col });\n if (fPredicate.predicate.predicates.length) {\n predicateList.push(Predicate.or(fPredicate.predicate.predicates));\n }\n }\n else {\n predicateList.push(predicates[prop]);\n }\n }\n return predicateList.length && Predicate.and(predicateList);\n };\n CheckBoxFilter.prototype.getAllData = function () {\n var query = new Query();\n query = this.parent.query.clone();\n query.requiresCount(); //consider take query\n var args = {\n requestType: events.filterChoiceRequest, filterModel: this, query: query, filterChoiceCount: null\n };\n this.parent.trigger(events.actionBegin, args);\n args.filterChoiceCount = !isNullOrUndefined(args.filterChoiceCount) ? args.filterChoiceCount : 1000;\n query.take(args.filterChoiceCount);\n this.processDataOperation(query);\n };\n CheckBoxFilter.prototype.processDataOperation = function (query) {\n var _this = this;\n this.options.dataSource = this.options.dataSource instanceof DataManager ?\n this.options.dataSource : new DataManager(this.options.dataSource);\n var allPromise = [];\n var runArray = [];\n if (this.options.column.isForeignColumn()) {\n allPromise.push(this.options.column.dataSource.executeQuery(new Query()));\n runArray.push(function (data) { return _this.foreignKeyData = data; });\n }\n allPromise.push(this.options.dataSource.executeQuery(query));\n runArray.push(this.dataSuccess.bind(this));\n var i = 0;\n Promise.all(allPromise).then(function (e) {\n e.forEach(function (data) {\n runArray[i++](data.result);\n });\n });\n };\n CheckBoxFilter.prototype.dataSuccess = function (e) {\n this.fullData = e;\n var query = new Query();\n if ((this.options.filteredColumns.length)) {\n var cols = [];\n for (var i = 0; i < this.options.filteredColumns.length; i++) {\n if (!(this.options.filteredColumns[i].field === this.options.field ||\n this.options.filteredColumns[i].field === this.options.foreignKeyValue)) {\n cols.push(this.options.filteredColumns[i]);\n }\n }\n var predicate = this.getPredicateFromCols(cols);\n if (predicate) {\n query.where(predicate);\n }\n }\n // query.select(this.options.field);\n var result = new DataManager(this.fullData).executeLocal(query);\n var col = this.options.column;\n var res = CheckBoxFilter.getDistinct(result, this.options.field, col, this.foreignKeyData);\n this.filteredData = res.records || [];\n this.processDataSource(null, true, this.filteredData);\n this.dialogObj.element.querySelector('.e-searchinput').focus();\n var args = {\n requestType: events.filterAfterOpen,\n filterModel: this, columnName: this.options.field, columnType: this.options.type\n };\n this.parent.trigger(events.actionComplete, args);\n };\n CheckBoxFilter.prototype.processDataSource = function (query, isInitial, dataSource) {\n showSpinner(this.spinner);\n this.updateResult();\n this.createFilterItems(dataSource, isInitial);\n };\n CheckBoxFilter.prototype.processSearch = function (query) {\n this.processDataOperation(query);\n };\n CheckBoxFilter.prototype.updateResult = function () {\n this.result = {};\n var predicate = this.getPredicateFromCols(this.options.filteredColumns);\n var query = new Query();\n if (predicate) {\n query.where(predicate);\n }\n var result = new DataManager(this.fullData).executeLocal(query);\n for (var _i = 0, result_1 = result; _i < result_1.length; _i++) {\n var res = result_1[_i];\n this.result[getValue(this.options.field, res)] = true;\n }\n };\n CheckBoxFilter.prototype.clickHandler = function (e) {\n var target = e.target;\n var elem = parentsUntil(target, 'e-checkbox-wrapper');\n if (parentsUntil(target, 'e-searchbox')) {\n this.searchBoxClick(e);\n }\n if (elem) {\n var selectAll = elem.querySelector('.e-selectall');\n if (selectAll) {\n this.updateAllCBoxes(!selectAll.classList.contains('e-check'));\n }\n else {\n toogleCheckbox(elem.parentElement);\n }\n this.updateIndeterminatenBtn();\n elem.querySelector('.e-chk-hidden').focus();\n }\n };\n CheckBoxFilter.prototype.updateAllCBoxes = function (checked) {\n var cBoxes = [].slice.call(this.cBox.querySelectorAll('.e-frame'));\n for (var _i = 0, cBoxes_1 = cBoxes; _i < cBoxes_1.length; _i++) {\n var cBox = cBoxes_1[_i];\n removeAddCboxClasses(cBox, checked);\n }\n };\n CheckBoxFilter.prototype.dialogOpen = function () {\n if (this.parent.element.classList.contains('e-device')) {\n this.dialogObj.element.querySelector('.e-input-group').classList.remove('e-input-focus');\n this.dialogObj.element.querySelector('.e-btn').focus();\n }\n };\n CheckBoxFilter.prototype.createCheckbox = function (value, checked) {\n var elem = checked ? this.cBoxTrue.cloneNode(true) :\n this.cBoxFalse.cloneNode(true);\n var label = elem.querySelector('.e-label');\n label.innerHTML = !isNullOrUndefined(value) && value.toString().length ? value :\n this.getLocalizedLabel('Blanks');\n if (this.options.template) {\n label.innerHTML = '';\n var args = {};\n args[this.options.field] = value;\n appendChildren(label, this.options.template(args));\n }\n return elem;\n };\n CheckBoxFilter.prototype.updateIndeterminatenBtn = function () {\n var cnt = this.cBox.children.length - 1;\n var className = [];\n var elem = this.cBox.querySelector('.e-selectall');\n var selected = this.cBox.querySelectorAll('.e-check:not(.e-selectall)').length;\n var btn = this.dlg.querySelector('.e-footer-content').querySelector('.e-btn').ej2_instances[0];\n btn.disabled = false;\n if (cnt === selected) {\n className = ['e-check'];\n }\n else if (selected) {\n className = ['e-stop'];\n }\n else {\n className = ['e-uncheck'];\n btn.disabled = true;\n }\n this.filterState = !btn.disabled;\n btn.dataBind();\n removeClass([elem], ['e-check', 'e-stop', 'e-uncheck']);\n addClass([elem], className);\n };\n CheckBoxFilter.prototype.createFilterItems = function (data, isInitial) {\n var cBoxes = createElement('div');\n var btn = this.dlg.querySelector('.e-footer-content').querySelector('.e-btn').ej2_instances[0];\n this.itemsCnt = data.length;\n if (data.length) {\n var selectAll = createCboxWithWrap(getUid('cbox'), this.createCheckbox(this.getLocalizedLabel('SelectAll'), false), 'e-ftrchk');\n selectAll.querySelector('.e-frame').classList.add('e-selectall');\n cBoxes.appendChild(selectAll);\n var predicate = new Predicate('field', 'equal', this.options.field);\n if (this.options.foreignKeyValue) {\n predicate = predicate.or('field', 'equal', this.options.foreignKeyValue);\n }\n var isColFiltered = new DataManager(this.options.filteredColumns).executeLocal(new Query().where(predicate)).length;\n for (var i = 0; i < data.length; i++) {\n var uid = getUid('cbox');\n this.values[uid] = getValue('ejValue', data[i]);\n var value = this.valueFormatter.toView(getValue(this.options.field, data[i]), this.options.formatFn);\n cBoxes.appendChild(createCboxWithWrap(uid, this.createCheckbox(value, this.getCheckedState(isColFiltered, this.values[uid])), 'e-ftrchk'));\n }\n this.cBox.innerHTML = cBoxes.innerHTML;\n this.updateIndeterminatenBtn();\n btn.disabled = false;\n }\n else {\n cBoxes.appendChild(createElement('span', { innerHTML: this.getLocalizedLabel('NoResult') }));\n this.cBox.innerHTML = cBoxes.innerHTML;\n btn.disabled = true;\n }\n this.filterState = !btn.disabled;\n btn.dataBind();\n var args = { requestType: events.filterChoiceRequest, filterModel: this, dataSource: data };\n this.parent.trigger(events.actionComplete, args);\n hideSpinner(this.spinner);\n };\n CheckBoxFilter.prototype.getCheckedState = function (isColFiltered, value) {\n if (!this.isFiltered || !isColFiltered) {\n return true;\n }\n else {\n return this.result[value];\n }\n };\n CheckBoxFilter.getDistinct = function (json, field, column, foreignKeyData) {\n var len = json.length;\n var result = [];\n var value;\n var ejValue = 'ejValue';\n var lookup = {};\n var isForeignKey = column && column.isForeignColumn();\n while (len--) {\n value = json[len];\n value = getValue(field, value); //local remote diff, check with mdu \n if (!isNullOrUndefined(value)) {\n if (!(value in lookup)) {\n var obj = {};\n obj[ejValue] = value;\n lookup[value] = true;\n value = isForeignKey ? getValue(column.foreignKeyValue, getForeignData(column, {}, value, foreignKeyData)[0]) : value;\n setValue(field, isNullOrUndefined(value) ? null : value, obj);\n result.push(obj);\n }\n }\n }\n return DataUtil.group(DataUtil.sort(result, field, DataUtil.fnAscending), 'ejValue');\n };\n CheckBoxFilter.getPredicate = function (columns) {\n var cols = CheckBoxFilter.getDistinct(columns, 'field').records || [];\n var collection = [];\n var pred = {};\n for (var i = 0; i < cols.length; i++) {\n collection = new DataManager(columns).executeLocal(new Query().where('field', 'equal', cols[i].field));\n if (collection.length !== 0) {\n pred[cols[i].field] = CheckBoxFilter.generatePredicate(collection);\n }\n }\n return pred;\n };\n CheckBoxFilter.generatePredicate = function (cols) {\n var len = cols ? cols.length : 0;\n var predicate;\n var first;\n first = CheckBoxFilter.updateDateFilter(cols[0]);\n first.ignoreAccent = !isNullOrUndefined(first.ignoreAccent) ? first.ignoreAccent : false;\n if (first.type === 'date' || first.type === 'datetime') {\n predicate = getDatePredicate(first);\n }\n else {\n predicate = first.ejpredicate ? first.ejpredicate :\n new Predicate(first.field, first.operator, first.value, !CheckBoxFilter.getCaseValue(first), first.ignoreAccent);\n }\n for (var p = 1; p < len; p++) {\n cols[p] = CheckBoxFilter.updateDateFilter(cols[p]);\n if (len > 2 && p > 1 && cols[p].predicate === 'or') {\n if (cols[p].type === 'date' || cols[p].type === 'datetime') {\n predicate.predicates.push(getDatePredicate(cols[p]));\n }\n else {\n predicate.predicates.push(new Predicate(cols[p].field, cols[p].operator, cols[p].value, !CheckBoxFilter.getCaseValue(cols[p]), cols[p].ignoreAccent));\n }\n }\n else {\n if (cols[p].type === 'date' || cols[p].type === 'datetime') {\n predicate = predicate[(cols[p].predicate)](getDatePredicate(cols[p]), cols[p].ignoreAccent);\n }\n else {\n predicate = cols[p].ejpredicate ?\n predicate[cols[p].predicate](cols[p].ejpredicate) :\n predicate[(cols[p].predicate)](cols[p].field, cols[p].operator, cols[p].value, !CheckBoxFilter.getCaseValue(cols[p]), cols[p].ignoreAccent);\n }\n }\n }\n return predicate || null;\n };\n CheckBoxFilter.getCaseValue = function (filter) {\n if (isNullOrUndefined(filter.matchCase)) {\n return true;\n }\n else {\n return filter.matchCase;\n }\n };\n CheckBoxFilter.updateDateFilter = function (filter) {\n if ((filter.type === 'date' || filter.type === 'datetime' || filter.value instanceof Date)) {\n filter.type = filter.type || 'date';\n }\n return filter;\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n CheckBoxFilter.prototype.getModuleName = function () {\n return 'checkboxFilter';\n };\n return CheckBoxFilter;\n}());\nexport { CheckBoxFilter };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Query, DataManager, Predicate, Deferred, UrlAdaptor } from '@syncfusion/ej2-data';\nimport { setFormatter, getDatePredicate, getColumnByForeignKeyValue } from '../base/util';\nimport * as events from '../base/constant';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { CheckBoxFilter } from '../actions/checkbox-filter';\n/**\n * Grid data module is used to generate query and data source.\n * @hidden\n */\nvar Data = /** @class */ (function () {\n /**\n * Constructor for data module.\n * @hidden\n */\n function Data(parent, serviceLocator) {\n this.dataState = { isPending: false, resolver: null, group: [] };\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.initDataManager();\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.rowsAdded, this.addRows, this);\n this.parent.on(events.rowsRemoved, this.removeRows, this);\n this.parent.on(events.dataSourceModified, this.initDataManager, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.updateData, this.crudActions, this);\n this.parent.on(events.addDeleteAction, this.getData, this);\n }\n /**\n * The function used to initialize dataManager and external query\n * @return {void}\n */\n Data.prototype.initDataManager = function () {\n var gObj = this.parent;\n this.dataManager = gObj.dataSource instanceof DataManager ? gObj.dataSource :\n (isNullOrUndefined(gObj.dataSource) ? new DataManager() : new DataManager(gObj.dataSource));\n gObj.query = gObj.query instanceof Query ? gObj.query : new Query();\n };\n /**\n * The function is used to generate updated Query from Grid model.\n * @return {Query}\n * @hidden\n */\n Data.prototype.generateQuery = function (skipPage) {\n var gObj = this.parent;\n var query = gObj.query.clone();\n this.filterQuery(query);\n this.searchQuery(query);\n this.aggregateQuery(query);\n this.sortQuery(query);\n this.pageQuery(query, skipPage);\n this.groupQuery(query);\n return query;\n };\n Data.prototype.aggregateQuery = function (query, isForeign) {\n this.parent.aggregates.forEach(function (row) {\n row.columns.forEach(function (column) {\n var types = column.type instanceof Array ? column.type : [column.type];\n types.forEach(function (type) { return query.aggregate(type.toLowerCase(), column.field); });\n });\n });\n return query;\n };\n Data.prototype.pageQuery = function (query, skipPage) {\n var gObj = this.parent;\n if ((gObj.allowPaging || gObj.enableVirtualization) && skipPage !== true) {\n gObj.pageSettings.currentPage = Math.max(1, gObj.pageSettings.currentPage);\n if (gObj.pageSettings.pageCount <= 0) {\n gObj.pageSettings.pageCount = 8;\n }\n if (gObj.pageSettings.pageSize <= 0) {\n gObj.pageSettings.pageSize = 12;\n }\n query.page(gObj.pageSettings.currentPage, gObj.pageSettings.pageSize);\n }\n return query;\n };\n Data.prototype.groupQuery = function (query) {\n var gObj = this.parent;\n if (gObj.allowGrouping && gObj.groupSettings.columns.length) {\n var columns = gObj.groupSettings.columns;\n for (var i = 0, len = columns.length; i < len; i++) {\n var column = this.getColumnByField(columns[i]);\n var isGrpFmt = column.enableGroupByFormat;\n var format = column.format;\n if (isGrpFmt) {\n query.group(columns[i], this.formatGroupColumn.bind(this), format);\n }\n else {\n query.group(columns[i], null);\n }\n }\n }\n return query;\n };\n Data.prototype.sortQuery = function (query) {\n var gObj = this.parent;\n if ((gObj.allowSorting || gObj.allowGrouping) && gObj.sortSettings.columns.length) {\n var columns = gObj.sortSettings.columns;\n var sortGrp = [];\n for (var i = columns.length - 1; i > -1; i--) {\n var col = this.getColumnByField(columns[i].field);\n if (col) {\n col.setSortDirection(columns[i].direction);\n }\n var fn = col.sortComparer && !this.isRemote() ? col.sortComparer.bind(col) :\n columns[i].direction;\n if (gObj.groupSettings.columns.indexOf(columns[i].field) === -1) {\n query.sortBy(col.field, fn);\n }\n else {\n sortGrp.push({ direction: fn, field: col.field });\n }\n }\n for (var i = 0, len = sortGrp.length; i < len; i++) {\n query.sortBy(sortGrp[i].field, sortGrp[i].direction);\n }\n }\n return query;\n };\n Data.prototype.searchQuery = function (query) {\n var _this = this;\n var sSettings = this.parent.searchSettings;\n var fields = sSettings.fields.length ? sSettings.fields : this.parent.getColumns().map(function (f) { return f.field; });\n var predicateList = [];\n if (this.parent.searchSettings.key.length) {\n var predicate = void 0;\n if (this.parent.getForeignKeyColumns().length) {\n fields.forEach(function (columnName) {\n var column = _this.getColumnByField(columnName);\n var sQuery = new Query();\n if (column.isForeignColumn()) {\n predicateList = _this.fGeneratePredicate(column, predicateList);\n }\n else {\n predicateList.push(new Predicate(column.field, sSettings.operator, sSettings.key, sSettings.ignoreCase, _this.parent.filterSettings.ignoreAccent));\n }\n });\n query.where(Predicate.or(predicateList));\n }\n else {\n query.search(sSettings.key, fields, sSettings.operator, sSettings.ignoreCase, this.parent.filterSettings.ignoreAccent);\n }\n }\n return query;\n };\n Data.prototype.filterQuery = function (query, column, skipFoerign) {\n var gObj = this.parent;\n var predicateList = [];\n var fPredicate = {};\n var actualFilter = [];\n var foreignColumn = this.parent.getForeignKeyColumns();\n if (gObj.allowFiltering && gObj.filterSettings.columns.length) {\n var columns = column ? column : gObj.filterSettings.columns;\n var colType = {};\n for (var _i = 0, _a = gObj.columns; _i < _a.length; _i++) {\n var col = _a[_i];\n colType[col.field] = col.filter.type ? col.filter.type : gObj.filterSettings.type;\n }\n var checkBoxCols = [];\n var defaultFltrCols = [];\n for (var _b = 0, columns_1 = columns; _b < columns_1.length; _b++) {\n var col = columns_1[_b];\n if (colType[col.field] === 'CheckBox' || colType[col.field] === 'Excel') {\n checkBoxCols.push(col);\n }\n else {\n defaultFltrCols.push(col);\n }\n }\n if (checkBoxCols.length) {\n var excelPredicate = CheckBoxFilter.getPredicate(checkBoxCols);\n for (var _c = 0, _d = Object.keys(excelPredicate); _c < _d.length; _c++) {\n var prop = _d[_c];\n var col = getColumnByForeignKeyValue(prop, foreignColumn);\n if (col && !skipFoerign) {\n predicateList = this.fGeneratePredicate(col, predicateList);\n actualFilter.push(col);\n }\n else {\n predicateList.push(excelPredicate[prop]);\n }\n }\n }\n if (defaultFltrCols.length) {\n for (var _e = 0, defaultFltrCols_1 = defaultFltrCols; _e < defaultFltrCols_1.length; _e++) {\n var col = defaultFltrCols_1[_e];\n var column_1 = this.getColumnByField(col.field) ||\n getColumnByForeignKeyValue(col.field, this.parent.getForeignKeyColumns());\n var sType = column_1.type;\n if (getColumnByForeignKeyValue(col.field, foreignColumn) && !skipFoerign) {\n actualFilter.push(col);\n predicateList = this.fGeneratePredicate(column_1, predicateList);\n }\n else {\n if (sType !== 'date' && sType !== 'datetime') {\n predicateList.push(new Predicate(col.field, col.operator, col.value, !col.matchCase, this.parent.filterSettings.ignoreAccent));\n }\n else {\n predicateList.push(getDatePredicate(col));\n }\n }\n }\n }\n if (predicateList.length) {\n query.where(Predicate.and(predicateList));\n }\n else {\n this.parent.notify(events.showEmptyGrid, {});\n }\n }\n return query;\n };\n Data.prototype.fGeneratePredicate = function (col, predicateList) {\n var fPredicate = {};\n if (col) {\n this.parent.notify(events.generateQuery, { predicate: fPredicate, column: col });\n if (fPredicate.predicate.predicates.length) {\n predicateList.push(fPredicate.predicate);\n }\n }\n return predicateList;\n };\n /**\n * The function is used to get dataManager promise by executing given Query.\n * @param {Query} query - Defines the query which will execute along with data processing.\n * @return {Promise}\n * @hidden\n */\n Data.prototype.getData = function (args, query) {\n var _this = this;\n if (args === void 0) { args = { requestType: '' }; }\n var key = this.getKey(args.foreignKeyData &&\n Object.keys(args.foreignKeyData).length ?\n args.foreignKeyData : this.parent.getPrimaryKeyFieldNames());\n if (this.parent.dataSource && 'result' in this.parent.dataSource) {\n var def = this.eventPromise(args, query, key);\n return def.promise;\n }\n else {\n var crud = void 0;\n switch (args.requestType) {\n case 'delete':\n query = query ? query : this.generateQuery();\n crud = this.dataManager.remove(key, args.data[0], null, query);\n break;\n case 'save':\n query = query ? query : this.generateQuery();\n args.index = isNullOrUndefined(args.index) ? 0 : args.index;\n crud = this.dataManager.insert(args.data, null, query, args.index);\n break;\n }\n if (crud && !Array.isArray(crud)) {\n return crud.then(function (result) {\n return _this.executeQuery(query);\n });\n }\n else {\n return this.executeQuery(query);\n }\n }\n };\n Data.prototype.executeQuery = function (query) {\n var _this = this;\n if (this.dataManager.ready) {\n var deferred_1 = new Deferred();\n var ready = this.dataManager.ready;\n ready.then(function (e) {\n _this.dataManager.executeQuery(query).then(function (result) {\n deferred_1.resolve(result);\n });\n }).catch(function (e) {\n deferred_1.reject(e);\n });\n return deferred_1.promise;\n }\n else {\n return this.dataManager.executeQuery(query);\n }\n };\n Data.prototype.formatGroupColumn = function (value, field) {\n var gObj = this.parent;\n var serviceLocator = this.serviceLocator;\n var column = this.getColumnByField(field);\n var date = value;\n if (!column.type) {\n column.type = date.getDay ? (date.getHours() > 0 || date.getMinutes() > 0 ||\n date.getSeconds() > 0 || date.getMilliseconds() > 0 ? 'datetime' : 'date') : typeof (value);\n }\n if (isNullOrUndefined(column.getFormatter())) {\n setFormatter(serviceLocator, column);\n }\n var formatVal = ValueFormatter.prototype.toView(value, column.getFormatter());\n return formatVal;\n };\n Data.prototype.crudActions = function (args) {\n var query = this.generateQuery();\n var promise = null;\n var pr = 'promise';\n var key = this.getKey(args.foreignKeyData &&\n Object.keys(args.foreignKeyData).length ? args.foreignKeyData :\n this.parent.getPrimaryKeyFieldNames());\n if (this.parent.dataSource && 'result' in this.parent.dataSource) {\n this.eventPromise(args, query, key);\n }\n switch (args.requestType) {\n case 'save':\n promise = this.dataManager.update(key, args.data, null, this.generateQuery());\n break;\n }\n args[pr] = promise;\n this.parent.notify(events.crudAction, args);\n };\n /** @hidden */\n Data.prototype.saveChanges = function (changes, key) {\n var query = this.generateQuery().requiresCount();\n if ('result' in this.parent.dataSource) {\n var state = void 0;\n state = this.getStateEventArgument(query);\n var deff = new Deferred();\n var args = {\n requestType: 'batchsave', changes: changes, key: key, query: query,\n endEdit: deff.resolve\n };\n this.setState({ isPending: true, resolver: deff.resolve });\n this.parent.trigger(events.dataSourceChanged, args);\n return deff.promise;\n }\n else {\n var promise = this.dataManager.saveChanges(changes, key, null, this.generateQuery().requiresCount());\n return promise;\n }\n };\n Data.prototype.getKey = function (keys) {\n if (keys && keys.length) {\n return keys[0];\n }\n return undefined;\n };\n /** @hidden */\n Data.prototype.isRemote = function () {\n return this.dataManager.dataSource.offline !== true && this.dataManager.dataSource.url !== undefined;\n };\n Data.prototype.addRows = function (e) {\n for (var i = e.records.length; i > 0; i--) {\n this.dataManager.dataSource.json.splice(e.toIndex, 0, e.records[i - 1]);\n }\n };\n Data.prototype.removeRows = function (e) {\n var json = this.dataManager.dataSource.json;\n this.dataManager.dataSource.json = json.filter(function (value, index) { return e.records.indexOf(value) === -1; });\n };\n Data.prototype.getColumnByField = function (field) {\n var col;\n return (this.parent.columnModel).some(function (column) {\n col = column;\n return column.field === field;\n }) && col;\n };\n Data.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.rowsAdded, this.addRows);\n this.parent.off(events.rowsRemoved, this.removeRows);\n this.parent.off(events.dataSourceModified, this.initDataManager);\n this.parent.off(events.dataSourceModified, this.destroy);\n this.parent.off(events.updateData, this.crudActions);\n this.parent.off(events.addDeleteAction, this.getData);\n };\n Data.prototype.getState = function () {\n return this.dataState;\n };\n Data.prototype.setState = function (state) {\n return this.dataState = state;\n };\n Data.prototype.getStateEventArgument = function (query) {\n var adaptr = new UrlAdaptor();\n var dm = new DataManager({ url: '', adaptor: new UrlAdaptor });\n var state = adaptr.processQuery(dm, query);\n return JSON.parse(state.data);\n };\n Data.prototype.eventPromise = function (args, query, key) {\n var _this = this;\n var state;\n var dataArgs = args;\n state = this.getStateEventArgument(query);\n var def = new Deferred();\n var deff = new Deferred();\n if (args.requestType !== undefined && args.requestType !== 'refresh') {\n state.action = args;\n if (args.requestType === 'save' || args.requestType === 'delete') {\n var editArgs = args;\n editArgs.key = key;\n editArgs.state = state;\n this.setState({ isPending: true, resolver: deff.resolve });\n dataArgs.endEdit = deff.resolve;\n this.parent.trigger(events.dataSourceChanged, editArgs);\n deff.promise.then(function (e) {\n _this.setState({ isPending: true, resolver: def.resolve, group: state.group });\n _this.parent.trigger(events.dataStateChange, state);\n });\n }\n else {\n this.setState({ isPending: true, resolver: def.resolve, group: state.group });\n this.parent.trigger(events.dataStateChange, state);\n }\n }\n else {\n this.setState({});\n def.resolve(this.parent.dataSource);\n }\n return def;\n };\n return Data;\n}());\nexport { Data };\n","import { merge } from '@syncfusion/ej2-base';\n/**\n * Row\n * @hidden\n */\nvar Row = /** @class */ (function () {\n function Row(options) {\n merge(this, options);\n }\n Row.prototype.clone = function () {\n var row = new Row({});\n merge(row, this);\n row.cells = this.cells.map(function (cell) { return cell.clone(); });\n return row;\n };\n return Row;\n}());\nexport { Row };\n","import { merge } from '@syncfusion/ej2-base';\n/**\n * Cell\n * @hidden\n */\nvar Cell = /** @class */ (function () {\n function Cell(options) {\n this.isSpanned = false;\n merge(this, options);\n }\n Cell.prototype.clone = function () {\n var cell = new Cell({});\n merge(cell, this);\n return cell;\n };\n return Cell;\n}());\nexport { Cell };\n","import { isNullOrUndefined, attributes } from '@syncfusion/ej2-base';\nimport { iterateArrayOrObject } from '../base/util';\nimport { CellType } from '../base/enum';\n/**\n * `CellMergeRender` module.\n * @hidden\n */\nvar CellMergeRender = /** @class */ (function () {\n function CellMergeRender(serviceLocator, parent) {\n this.serviceLocator = serviceLocator;\n this.parent = parent;\n }\n CellMergeRender.prototype.render = function (cellArgs, row, i, td) {\n var cellRendererFact = this.serviceLocator.getService('cellRendererFactory');\n var cellRenderer = cellRendererFact.getCellRenderer(row.cells[i].cellType || CellType.Data);\n var span = row.cells[i].cellSpan ? row.cells[i].cellSpan :\n (cellArgs.colSpan + i) <= row.cells.length ? cellArgs.colSpan : row.cells.length - i;\n var visible = 0;\n for (var j = i + 1; j < i + span && j < row.cells.length; j++) {\n if (row.cells[j].visible === false) {\n visible++;\n }\n else {\n row.cells[j].isSpanned = true;\n }\n }\n if (visible > 0) {\n for (var j = i + span; j < i + span + visible && j < row.cells.length; j++) {\n row.cells[j].isSpanned = true;\n }\n if (i + span + visible >= row.cells.length) {\n span -= (i + span + visible) - row.cells.length;\n }\n }\n if (row.cells[i].cellSpan) {\n row.data[cellArgs.column.field] = row.cells[i].spanText;\n td = cellRenderer.render(row.cells[i], row.data, { 'index': !isNullOrUndefined(row.index) ? row.index.toString() : '' });\n }\n if (span > 1) {\n attributes(td, { 'colSpan': span.toString(), 'aria-colSpan': span.toString() });\n }\n if (this.parent.enableColumnVirtualization && !row.cells[i].cellSpan &&\n !this.containsKey(cellArgs.column.field, cellArgs.data[cellArgs.column.field])) {\n this.backupMergeCells(cellArgs.column.field, cellArgs.data[cellArgs.column.field], cellArgs.colSpan);\n }\n return td;\n };\n CellMergeRender.prototype.backupMergeCells = function (fName, data, span) {\n this.setMergeCells(this.generteKey(fName, data), span);\n };\n CellMergeRender.prototype.generteKey = function (fname, data) {\n return fname + '__' + data.toString();\n };\n CellMergeRender.prototype.splitKey = function (key) {\n return key.split('__');\n };\n CellMergeRender.prototype.containsKey = function (fname, data) {\n return this.getMergeCells().hasOwnProperty(this.generteKey(fname, data));\n };\n CellMergeRender.prototype.getMergeCells = function () {\n return this.parent.mergeCells;\n };\n CellMergeRender.prototype.setMergeCells = function (key, span) {\n this.parent.mergeCells[key] = span;\n };\n CellMergeRender.prototype.updateVirtualCells = function (rows) {\n var mCells = this.getMergeCells();\n for (var _i = 0, _a = Object.keys(mCells); _i < _a.length; _i++) {\n var key = _a[_i];\n var value = mCells[key];\n var merge = this.splitKey(key);\n var columnIndex = this.getIndexFromAllColumns(merge[0]);\n var vColumnIndices = this.parent.getColumnIndexesInView();\n var span = value - (vColumnIndices[0] - columnIndex);\n if (columnIndex < vColumnIndices[0] && span > 1) {\n for (var _b = 0, rows_1 = rows; _b < rows_1.length; _b++) {\n var row = rows_1[_b];\n if (row.data[merge[0]].toString() === merge[1].toString()) {\n row.cells[0].cellSpan = span;\n row.cells[0].spanText = merge[1];\n break;\n }\n }\n }\n }\n return rows;\n };\n CellMergeRender.prototype.getIndexFromAllColumns = function (field) {\n var index = iterateArrayOrObject(this.parent.getVisibleColumns(), function (item, index) {\n if (item.field === field) {\n return index;\n }\n return undefined;\n })[0];\n return index;\n };\n return CellMergeRender;\n}());\nexport { CellMergeRender };\n","import { isNullOrUndefined, extend, getValue } from '@syncfusion/ej2-base';\nimport { createElement, attributes as addAttributes } from '@syncfusion/ej2-base';\nimport { rowDataBound, queryCellInfo } from '../base/constant';\nimport { setStyleAndAttributes } from '../base/util';\nimport { CellType } from '../base/enum';\nimport { CellMergeRender } from './cell-merge-renderer';\n/**\n * RowRenderer class which responsible for building row content.\n * @hidden\n */\nvar RowRenderer = /** @class */ (function () {\n function RowRenderer(serviceLocator, cellType, parent) {\n this.element = createElement('tr', { attrs: { role: 'row' } });\n this.cellType = cellType;\n this.serviceLocator = serviceLocator;\n this.parent = parent;\n }\n /**\n * Function to render the row content based on Column[] and data.\n * @param {Column[]} columns\n * @param {Object} data?\n * @param {{[x:string]:Object}} attributes?\n * @param {string} rowTemplate?\n */\n RowRenderer.prototype.render = function (row, columns, attributes, rowTemplate, cloneNode) {\n return this.refreshRow(row, columns, attributes, rowTemplate, cloneNode);\n };\n /**\n * Function to refresh the row content based on Column[] and data.\n * @param {Column[]} columns\n * @param {Object} data?\n * @param {{[x:string]:Object}} attributes?\n * @param {string} rowTemplate?\n */\n RowRenderer.prototype.refresh = function (row, columns, isChanged, attributes, rowTemplate) {\n if (isChanged) {\n row.data = extend({}, row.changes);\n this.refreshMergeCells(row);\n }\n var node = this.parent.element.querySelector('[data-uid=' + row.uid + ']');\n var tr = this.refreshRow(row, columns, attributes, rowTemplate);\n var cells = [].slice.call(tr.cells);\n node.innerHTML = '';\n for (var _i = 0, cells_1 = cells; _i < cells_1.length; _i++) {\n var cell = cells_1[_i];\n node.appendChild(cell);\n }\n };\n RowRenderer.prototype.refreshRow = function (row, columns, attributes, rowTemplate, cloneNode) {\n var tr = !isNullOrUndefined(cloneNode) ? cloneNode : this.element.cloneNode();\n var rowArgs = { data: row.data };\n var cellArgs = { data: row.data };\n var attrCopy = extend({}, attributes, {});\n var chekBoxEnable = this.parent.getColumns().filter(function (col) { return col.type === 'checkbox' && col.field; })[0];\n var value = false;\n if (chekBoxEnable) {\n value = getValue(chekBoxEnable.field, rowArgs.data);\n }\n if (row.isDataRow) {\n row.isSelected = this.parent.getSelectedRowIndexes().indexOf(row.index) > -1 || value;\n }\n if (row.isDataRow && this.parent.isCheckBoxSelection\n && this.parent.checkAllRows === 'Check' && this.parent.enableVirtualization) {\n row.isSelected = true;\n if (this.parent.getSelectedRowIndexes().indexOf(row.index) === -1) {\n this.parent.getSelectedRowIndexes().push(row.index);\n }\n }\n this.buildAttributeFromRow(tr, row);\n addAttributes(tr, attrCopy);\n setStyleAndAttributes(tr, row.attributes);\n var cellRendererFact = this.serviceLocator.getService('cellRendererFactory');\n for (var i = 0, len = row.cells.length; i < len; i++) {\n var cell = row.cells[i];\n cell.isSelected = row.isSelected;\n var cellRenderer = cellRendererFact.getCellRenderer(row.cells[i].cellType || CellType.Data);\n var attrs = { 'index': !isNullOrUndefined(row.index) ? row.index.toString() : '' };\n if (row.isExpand && row.cells[i].cellType === CellType.DetailExpand) {\n attrs['class'] = 'e-detailrowexpand';\n }\n var td = cellRenderer.render(row.cells[i], row.data, attrs);\n if (row.cells[i].cellType !== CellType.Filter) {\n if (row.cells[i].cellType === CellType.Data || row.cells[i].cellType === CellType.CommandColumn) {\n this.parent.trigger(queryCellInfo, extend(cellArgs, {\n cell: td, column: cell.column, colSpan: 1,\n foreignKeyData: row.cells[i].foreignKeyData\n }));\n if (cellArgs.colSpan > 1 || row.cells[i].cellSpan > 1) {\n var cellMerge = new CellMergeRender(this.serviceLocator, this.parent);\n td = cellMerge.render(cellArgs, row, i, td);\n }\n }\n if (!row.cells[i].isSpanned) {\n tr.appendChild(td);\n }\n }\n }\n var args = { row: tr, rowHeight: this.parent.rowHeight };\n if (row.isDataRow) {\n this.parent.trigger(rowDataBound, extend(rowArgs, args));\n }\n if (this.parent.enableVirtualization) {\n rowArgs.rowHeight = this.parent.rowHeight;\n }\n if (rowArgs.rowHeight) {\n tr.style.height = rowArgs.rowHeight + 'px';\n }\n else if (this.parent.rowHeight) {\n tr.style.height = this.parent.rowHeight + 'px';\n }\n if (row.cssClass) {\n tr.classList.add(row.cssClass);\n }\n return tr;\n };\n RowRenderer.prototype.refreshMergeCells = function (row) {\n for (var _i = 0, _a = row.cells; _i < _a.length; _i++) {\n var cell = _a[_i];\n cell.isSpanned = false;\n }\n return row;\n };\n /**\n * Function to check and add alternative row css class.\n * @param {Element} tr\n * @param {{[x:string]:Object}} attr\n */\n RowRenderer.prototype.buildAttributeFromRow = function (tr, row) {\n var attr = {};\n var prop = { 'rowindex': 'aria-rowindex', 'dataUID': 'data-uid', 'ariaSelected': 'aria-selected' };\n var classes = [];\n if (row.isDataRow) {\n classes.push('e-row');\n }\n if (row.isAltRow) {\n classes.push('e-altrow');\n }\n if (!isNullOrUndefined(row.index)) {\n attr[prop.rowindex] = row.index;\n }\n if (row.rowSpan) {\n attr.rowSpan = row.rowSpan;\n }\n if (row.uid) {\n attr[prop.dataUID] = row.uid;\n }\n if (row.isSelected) {\n attr[prop.ariaSelected] = true;\n }\n if (row.visible === false) {\n classes.push('e-hide');\n }\n attr.class = classes;\n setStyleAndAttributes(tr, attr);\n };\n return RowRenderer;\n}());\nexport { RowRenderer };\n","import { isNullOrUndefined, getValue, setValue } from '@syncfusion/ej2-base';\nimport { Row } from '../models/row';\nimport { CellType } from '../base/enum';\nimport { Cell } from '../models/cell';\nimport { getUid } from '../base/util';\nimport { getForeignData } from '../../grid/base/util';\n/**\n * RowModelGenerator is used to generate grid data rows.\n * @hidden\n */\nvar RowModelGenerator = /** @class */ (function () {\n /**\n * Constructor for header renderer module\n */\n function RowModelGenerator(parent) {\n this.parent = parent;\n }\n RowModelGenerator.prototype.generateRows = function (data, args) {\n var rows = [];\n var startIndex = this.parent.enableVirtualization ? args.startIndex : 0;\n for (var i = 0, len = Object.keys(data).length; i < len; i++, startIndex++) {\n rows[i] = this.generateRow(data[i], startIndex);\n }\n return rows;\n };\n RowModelGenerator.prototype.ensureColumns = function () {\n //TODO: generate dummy column for group, detail here;\n var cols = [];\n if (this.parent.detailTemplate || this.parent.childGrid) {\n cols.push(this.generateCell({}, null, CellType.DetailExpand));\n }\n return cols;\n };\n RowModelGenerator.prototype.generateRow = function (data, index, cssClass, indent) {\n var options = {};\n options.foreignKeyData = {};\n options.uid = getUid('grid-row');\n options.data = data;\n options.index = index;\n options.indent = indent;\n options.isDataRow = true;\n options.isExpand = false;\n options.cssClass = cssClass;\n options.isAltRow = this.parent.enableAltRow ? index % 2 !== 0 : false;\n options.isSelected = this.parent.getSelectedRowIndexes().indexOf(index) > -1;\n this.refreshForeignKeyRow(options);\n var cells = this.ensureColumns();\n var row = new Row(options);\n row.cells = cells.concat(this.generateCells(options));\n return row;\n };\n RowModelGenerator.prototype.refreshForeignKeyRow = function (options) {\n this.parent.getForeignKeyColumns().forEach(function (col) {\n setValue(col.field, getForeignData(col, options.data), options.foreignKeyData);\n });\n };\n RowModelGenerator.prototype.generateCells = function (options) {\n var _this = this;\n var dummies = this.parent.getColumns();\n var tmp = [];\n dummies.forEach(function (dummy, index) {\n return tmp.push(_this.generateCell(dummy, options.uid, isNullOrUndefined(dummy.commands) ? undefined : CellType.CommandColumn, null, index, options.foreignKeyData));\n });\n return tmp;\n };\n RowModelGenerator.prototype.generateCell = function (column, rowId, cellType, colSpan, oIndex, foreignKeyData) {\n var opt = {\n 'visible': column.visible,\n 'isDataCell': !isNullOrUndefined(column.field || column.template),\n 'isTemplate': !isNullOrUndefined(column.template),\n 'rowID': rowId,\n 'column': column,\n 'cellType': !isNullOrUndefined(cellType) ? cellType : CellType.Data,\n 'colSpan': colSpan,\n 'commands': column.commands,\n 'isForeignKey': column.isForeignColumn && column.isForeignColumn(),\n 'foreignKeyData': column.isForeignColumn && column.isForeignColumn() && getValue(column.field, foreignKeyData)\n };\n if (opt.isDataCell || opt.column.type === 'checkbox') {\n opt.index = this.parent.getColumnIndexByField(column.field);\n }\n return new Cell(opt);\n };\n RowModelGenerator.prototype.refreshRows = function (input) {\n var _this = this;\n input.forEach(function (row) {\n _this.refreshForeignKeyRow(row);\n row.cells = _this.generateCells(row);\n });\n return input;\n };\n return RowModelGenerator;\n}());\nexport { RowModelGenerator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Row } from '../models/row';\nimport { Column } from '../models/column';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { calculateAggregate } from '../base/util';\nimport { CellType } from '../base/enum';\nimport { Cell } from '../models/cell';\n/**\n * Summary row model generator\n * @hidden\n */\nvar SummaryModelGenerator = /** @class */ (function () {\n /**\n * Constructor for Summary row model generator\n */\n function SummaryModelGenerator(parent) {\n this.parent = parent;\n }\n SummaryModelGenerator.prototype.getData = function () {\n var _this = this;\n var rows = [];\n this.parent.aggregates.slice().forEach(function (row) {\n var columns = row.columns.filter(function (column) {\n return !(column.footerTemplate || column.groupFooterTemplate || column.groupCaptionTemplate)\n || _this.columnSelector(column);\n });\n if (columns.length) {\n rows.push({ columns: columns });\n }\n });\n return rows;\n };\n SummaryModelGenerator.prototype.columnSelector = function (column) {\n return column.footerTemplate !== undefined;\n };\n SummaryModelGenerator.prototype.getColumns = function (start, end) {\n var columns = [];\n if (this.parent.allowGrouping) {\n this.parent.groupSettings.columns.forEach(function (value) { return columns.push(new Column({})); });\n }\n if (this.parent.detailTemplate) {\n columns.push(new Column({}));\n }\n columns.push.apply(columns, this.parent.getColumns());\n return isNullOrUndefined(start) ? columns : columns.slice(start, end);\n };\n SummaryModelGenerator.prototype.generateRows = function (input, args, start, end) {\n var _this = this;\n if (this.parent.currentViewData.length === 0) {\n return [];\n }\n var data = this.buildSummaryData(input, args);\n var rows = [];\n this.getData().forEach(function (row, index) {\n rows.push(_this.getGeneratedRow(row, data[index], args ? args.level : undefined, start, end));\n });\n return rows;\n };\n SummaryModelGenerator.prototype.getGeneratedRow = function (summaryRow, data, raw, start, end) {\n var _this = this;\n var tmp = [];\n var indents = this.getIndentByLevel(raw);\n var indentLength = this.parent.groupSettings.columns.length + (this.parent.detailTemplate ? 1 : 0);\n this.getColumns(start, end).forEach(function (value, index) { return tmp.push(_this.getGeneratedCell(value, summaryRow, index >= indentLength ? _this.getCellType() : CellType.Indent, indents[index])); });\n var row = new Row({ data: data, attributes: { class: 'e-summaryrow' } });\n row.cells = tmp;\n row.visible = tmp.some(function (cell) { return cell.isDataCell && cell.visible; });\n return row;\n };\n SummaryModelGenerator.prototype.getGeneratedCell = function (column, summaryRow, cellType, indent) {\n //Get the summary column by display\n var sColumn = summaryRow.columns.filter(function (scolumn) { return scolumn.columnName === column.field; })[0];\n var attrs = { 'style': { 'textAlign': column.textAlign } };\n if (indent) {\n attrs.class = indent;\n }\n var opt = {\n 'visible': column.visible,\n 'isDataCell': !isNullOrUndefined(sColumn),\n 'isTemplate': sColumn && !isNullOrUndefined(sColumn.footerTemplate\n || sColumn.groupFooterTemplate || sColumn.groupCaptionTemplate),\n 'column': sColumn || {},\n 'attributes': attrs,\n 'cellType': cellType\n };\n return new Cell(opt);\n };\n SummaryModelGenerator.prototype.buildSummaryData = function (data, args) {\n var _this = this;\n var dummy = [];\n var summaryRows = this.getData();\n var single = {};\n var key = '';\n summaryRows.forEach(function (row) {\n single = {};\n row.columns.forEach(function (column) {\n single = _this.setTemplate(column, (args && args.aggregates) ? args : data, single);\n });\n dummy.push(single);\n });\n return dummy;\n };\n SummaryModelGenerator.prototype.getIndentByLevel = function (data) {\n return this.parent.groupSettings.columns.map(function () { return 'e-indentcelltop'; });\n };\n SummaryModelGenerator.prototype.setTemplate = function (column, data, single) {\n var _this = this;\n var types = column.type;\n var helper = {};\n var formatFn = column.getFormatter() || (function () { return function (a) { return a; }; })();\n var group = data;\n if (!(types instanceof Array)) {\n types = [column.type];\n }\n types.forEach(function (type) {\n var key = column.field + ' - ' + type.toLowerCase();\n var disp = column.columnName;\n var val = type !== 'Custom' && group.aggregates && key in group.aggregates ? group.aggregates[key] :\n calculateAggregate(type, group.aggregates ? group : data, column, _this.parent);\n single[disp] = single[disp] || {};\n single[disp][key] = val;\n single[disp][type] = !isNullOrUndefined(val) ? formatFn(val) : ' ';\n if (group.field) {\n single[disp].field = group.field;\n single[disp].key = group.key;\n }\n });\n helper.format = column.getFormatter();\n column.setTemplate(helper);\n return single;\n };\n SummaryModelGenerator.prototype.getCellType = function () {\n return CellType.Summary;\n };\n return SummaryModelGenerator;\n}());\nexport { SummaryModelGenerator };\nvar GroupSummaryModelGenerator = /** @class */ (function (_super) {\n __extends(GroupSummaryModelGenerator, _super);\n function GroupSummaryModelGenerator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n GroupSummaryModelGenerator.prototype.columnSelector = function (column) {\n return column.groupFooterTemplate !== undefined;\n };\n GroupSummaryModelGenerator.prototype.getIndentByLevel = function (level) {\n if (level === void 0) { level = this.parent.groupSettings.columns.length; }\n return this.parent.groupSettings.columns.map(function (v, indx) { return indx <= level - 1 ? '' : 'e-indentcelltop'; });\n };\n GroupSummaryModelGenerator.prototype.getCellType = function () {\n return CellType.GroupSummary;\n };\n return GroupSummaryModelGenerator;\n}(SummaryModelGenerator));\nexport { GroupSummaryModelGenerator };\nvar CaptionSummaryModelGenerator = /** @class */ (function (_super) {\n __extends(CaptionSummaryModelGenerator, _super);\n function CaptionSummaryModelGenerator() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n CaptionSummaryModelGenerator.prototype.columnSelector = function (column) {\n return column.groupCaptionTemplate !== undefined;\n };\n CaptionSummaryModelGenerator.prototype.getData = function () {\n var initVal = { columns: [] };\n return [_super.prototype.getData.call(this).reduce(function (prev, cur) {\n prev.columns = prev.columns.concat(cur.columns);\n return prev;\n }, initVal)];\n };\n CaptionSummaryModelGenerator.prototype.isEmpty = function () {\n return (this.getData()[0].columns || []).length === 0;\n };\n CaptionSummaryModelGenerator.prototype.getCellType = function () {\n return CellType.CaptionSummary;\n };\n return CaptionSummaryModelGenerator;\n}(SummaryModelGenerator));\nexport { CaptionSummaryModelGenerator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Row } from '../models/row';\nimport { isNullOrUndefined, extend, setValue } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { GroupSummaryModelGenerator, CaptionSummaryModelGenerator } from '../services/summary-model-generator';\nimport { getForeignData } from '../../grid/base/util';\n/**\n * GroupModelGenerator is used to generate group caption rows and data rows.\n * @hidden\n */\nvar GroupModelGenerator = /** @class */ (function (_super) {\n __extends(GroupModelGenerator, _super);\n function GroupModelGenerator(parent) {\n var _this = _super.call(this, parent) || this;\n _this.rows = [];\n _this.index = 0;\n _this.parent = parent;\n _this.summaryModelGen = new GroupSummaryModelGenerator(parent);\n _this.captionModelGen = new CaptionSummaryModelGenerator(parent);\n return _this;\n }\n GroupModelGenerator.prototype.generateRows = function (data, args) {\n if (this.parent.groupSettings.columns.length === 0) {\n return _super.prototype.generateRows.call(this, data, args);\n }\n this.rows = [];\n this.index = this.parent.enableVirtualization ? (this.parent.pageSettings.currentPage - 1) * data.records.length : 0;\n for (var i = 0, len = data.length; i < len; i++) {\n this.getGroupedRecords(0, data[i], data.level);\n }\n this.index = 0;\n return this.rows;\n };\n GroupModelGenerator.prototype.getGroupedRecords = function (index, data, raw) {\n var level = raw;\n if (isNullOrUndefined(data.items)) {\n if (isNullOrUndefined(data.GroupGuid)) {\n this.rows = this.rows.concat(this.generateDataRows(data, index));\n }\n else {\n for (var j = 0, len = data.length; j < len; j++) {\n this.getGroupedRecords(index, data[j], data.level);\n }\n }\n }\n else {\n this.rows = this.rows.concat(this.generateCaptionRow(data, index));\n if (data.items && data.items.length) {\n this.getGroupedRecords(index + 1, data.items, data.items.level);\n }\n if (this.parent.aggregates.length) {\n (_a = this.rows).push.apply(_a, this.summaryModelGen.generateRows(data, { level: level }));\n }\n }\n var _a;\n };\n GroupModelGenerator.prototype.getCaptionRowCells = function (field, indent, data) {\n var _this = this;\n var cells = [];\n var visibles = [];\n var column = this.parent.getColumnByField(field);\n var indexes = this.parent.getColumnIndexesInView();\n if (this.parent.enableColumnVirtualization) {\n column = this.parent.columns.filter(function (c) { return c.field === field; })[0];\n }\n var groupedLen = this.parent.groupSettings.columns.length;\n var gObj = this.parent;\n if (!this.parent.enableColumnVirtualization || indexes.indexOf(indent) !== -1) {\n for (var i = 0; i < indent; i++) {\n cells.push(this.generateIndentCell());\n }\n cells.push(this.generateCell({}, null, CellType.Expand));\n }\n indent = this.parent.enableColumnVirtualization ? 1 :\n (this.parent.getVisibleColumns().length + groupedLen + (gObj.detailTemplate || gObj.childGrid ? 1 : 0) -\n indent + (this.parent.getVisibleColumns().length ? -1 : 0));\n //Captionsummary cells will be added here. \n if (this.parent.aggregates.length && !this.captionModelGen.isEmpty()) {\n var captionCells = this.captionModelGen.generateRows(data)[0];\n extend(data, captionCells.data);\n var cIndex_1 = 0;\n captionCells.cells.some(function (cell, index) { cIndex_1 = index; return cell.visible && cell.isDataCell; });\n visibles = captionCells.cells.slice(cIndex_1).filter(function (cell) { return cell.visible; });\n if (captionCells.visible && visibles[0].column.field === this.parent.getVisibleColumns()[0].field) {\n visibles = visibles.slice(1);\n }\n if (this.parent.getVisibleColumns().length === 1) {\n visibles = [];\n }\n indent = indent - visibles.length;\n }\n var cols = (!this.parent.enableColumnVirtualization ? [column] : this.parent.getColumns());\n var wFlag = true;\n cols.forEach(function (col, index) {\n var tmpFlag = wFlag && indexes.indexOf(indent) !== -1;\n if (tmpFlag) {\n wFlag = false;\n }\n var cellType = !_this.parent.enableColumnVirtualization || tmpFlag ?\n CellType.GroupCaption : CellType.GroupCaptionEmpty;\n indent = _this.parent.enableColumnVirtualization && cellType === CellType.GroupCaption ? indent + groupedLen : indent;\n cells.push(_this.generateCell(column, null, cellType, indent));\n });\n cells.push.apply(cells, visibles);\n return cells;\n };\n GroupModelGenerator.prototype.generateCaptionRow = function (data, indent) {\n var options = {};\n var tmp = [];\n var col = this.parent.getColumnByField(data.field);\n options.data = extend({}, data);\n if (col) {\n options.data.field = data.field;\n }\n options.isDataRow = false;\n var row = new Row(options);\n row.indent = indent;\n this.getForeignKeyData(row);\n row.cells = this.getCaptionRowCells(data.field, indent, row.data);\n return row;\n };\n GroupModelGenerator.prototype.getForeignKeyData = function (row) {\n var data = row.data;\n var col = this.parent.getColumnByField(data.field);\n if (col && col.isForeignColumn && col.isForeignColumn()) {\n setValue('foreignKey', col.valueAccessor(col.foreignKeyValue, getForeignData(col, {}, data.key)[0], col), row.data);\n }\n };\n GroupModelGenerator.prototype.generateDataRows = function (data, indent) {\n var rows = [];\n var indexes = this.parent.getColumnIndexesInView();\n for (var i = 0, len = data.length; i < len; i++) {\n rows[i] = this.generateRow(data[i], this.index, i ? undefined : 'e-firstchildrow', indent);\n for (var j = 0; j < indent; j++) {\n if (this.parent.enableColumnVirtualization && indexes.indexOf(indent) === -1) {\n continue;\n }\n rows[i].cells.unshift(this.generateIndentCell());\n }\n this.index++;\n }\n return rows;\n };\n GroupModelGenerator.prototype.generateIndentCell = function () {\n return this.generateCell({}, null, CellType.Indent);\n };\n GroupModelGenerator.prototype.refreshRows = function (input) {\n var _this = this;\n var indexes = this.parent.getColumnIndexesInView();\n input.forEach(function (row) {\n if (row.isDataRow) {\n row.cells = _this.generateCells(row);\n for (var j = 0; j < row.indent; j++) {\n if (_this.parent.enableColumnVirtualization && indexes.indexOf(row.indent) === -1) {\n continue;\n }\n row.cells.unshift(_this.generateIndentCell());\n }\n }\n else {\n var cRow = _this.generateCaptionRow(row.data, row.indent);\n row.cells = cRow.cells;\n }\n });\n return input;\n };\n return GroupModelGenerator;\n}(RowModelGenerator));\nexport { GroupModelGenerator };\n","import { Droppable } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { createElement, setStyleAttribute, remove } from '@syncfusion/ej2-base';\nimport { getUpdateUsingRaf } from '../base/util';\nimport * as events from '../base/constant';\nimport { RowRenderer } from './row-renderer';\nimport { CellMergeRender } from './cell-merge-renderer';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { GroupModelGenerator } from '../services/group-model-generator';\nimport { getScrollBarWidth } from '../base/util';\n/**\n * Content module is used to render grid content\n * @hidden\n */\nvar ContentRender = /** @class */ (function () {\n /**\n * Constructor for content renderer module\n */\n function ContentRender(parent, serviceLocator) {\n var _this = this;\n this.rows = [];\n this.freezeRows = [];\n this.movableRows = [];\n this.isLoaded = true;\n this.drop = function (e) {\n _this.parent.notify(events.columnDrop, { target: e.target, droppedElement: e.droppedElement });\n remove(e.droppedElement);\n };\n this.rafCallback = function (args) {\n var arg = args;\n return function () {\n _this.ariaService.setBusy(_this.getPanel().firstChild, false);\n if (_this.parent.isDestroyed) {\n return;\n }\n var rows = _this.rows.slice(0);\n if (_this.parent.getFrozenColumns() !== 0) {\n rows = args.isFrozen ? _this.freezeRows : _this.movableRows;\n }\n _this.parent.notify(events.contentReady, { rows: rows, args: arg });\n if (_this.isLoaded) {\n _this.parent.trigger(events.dataBound, {});\n if (_this.parent.allowTextWrap) {\n _this.parent.notify(events.freezeRender, { case: 'textwrap' });\n }\n }\n if (arg) {\n var action = (arg.requestType || '').toLowerCase() + '-complete';\n _this.parent.notify(action, arg);\n }\n _this.parent.hideSpinner();\n };\n };\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.ariaService = this.serviceLocator.getService('ariaService');\n this.generator = this.getModelGenerator();\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.columnVisibilityChanged, this.setVisible, this);\n this.parent.on(events.colGroupRefresh, this.colGroupRefresh, this);\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n }\n /**\n * The function is used to render grid content div\n */\n ContentRender.prototype.renderPanel = function () {\n var gObj = this.parent;\n var div = createElement('div', { className: 'e-gridcontent' });\n var innerDiv = createElement('div', {\n className: 'e-content'\n });\n this.ariaService.setOptions(innerDiv, { busy: false });\n div.appendChild(innerDiv);\n this.setPanel(div);\n gObj.element.appendChild(div);\n };\n /**\n * The function is used to render grid content table\n */\n ContentRender.prototype.renderTable = function () {\n var contentDiv = this.getPanel();\n contentDiv.appendChild(this.createContentTable('_content_table'));\n this.setTable(contentDiv.querySelector('.e-table'));\n this.ariaService.setOptions(this.getTable(), {\n multiselectable: this.parent.selectionSettings.type === 'Multiple'\n });\n if (this.parent.allowRowDragAndDrop) {\n this.initializeContentDrop();\n }\n if (this.parent.frozenRows) {\n this.parent.getHeaderContent().classList.add('e-frozenhdrcont');\n }\n };\n /**\n * The function is used to create content table elements\n * @return {Element}\n * @hidden\n */\n ContentRender.prototype.createContentTable = function (id) {\n var innerDiv = this.getPanel().firstChild;\n var table = createElement('table', {\n className: 'e-table', attrs: {\n cellspacing: '0.25px', role: 'grid',\n id: this.parent.element.id + id\n }\n });\n this.setColGroup(this.parent.element.querySelector('.e-gridheader').querySelector('colgroup').cloneNode(true));\n table.appendChild(this.getColGroup());\n table.appendChild(createElement('tbody'));\n innerDiv.appendChild(table);\n return innerDiv;\n };\n ContentRender.prototype.splitRows = function (idx) {\n if (this.parent.getFrozenColumns()) {\n if (idx === 0) {\n this.freezeRows = this.rows;\n this.freezeRowElements = this.rowElements;\n }\n else {\n this.movableRows = this.rows;\n }\n }\n };\n /**\n * Refresh the content of the Grid.\n * @return {void}\n */\n ContentRender.prototype.refreshContentRows = function (args) {\n var _this = this;\n if (args === void 0) { args = {}; }\n var gObj = this.parent;\n if (gObj.currentViewData.length === 0) {\n return;\n }\n var dataSource = gObj.currentViewData;\n var frag = document.createDocumentFragment();\n var hdrfrag = document.createDocumentFragment();\n var columns = gObj.getColumns();\n var tr;\n var hdrTbody;\n var frzCols = gObj.getFrozenColumns();\n var row = new RowRenderer(this.serviceLocator, null, this.parent);\n this.rowElements = [];\n this.rows = [];\n var modelData = this.generator.generateRows(dataSource, args);\n var idx = modelData[0].cells[0].index;\n var fCont = this.getPanel().querySelector('.e-frozencontent');\n var mCont = this.getPanel().querySelector('.e-movablecontent');\n var cont = this.getPanel().querySelector('.e-content');\n if (this.parent.enableColumnVirtualization) {\n var cellMerge = new CellMergeRender(this.serviceLocator, this.parent);\n cellMerge.updateVirtualCells(modelData);\n }\n if (frzCols && idx >= frzCols) {\n this.tbody = mCont.querySelector('tbody');\n }\n else {\n this.tbody = this.getTable().querySelector('tbody');\n }\n for (var i = 0, len = modelData.length; i < len; i++) {\n if (!gObj.rowTemplate) {\n tr = row.render(modelData[i], columns);\n }\n else {\n var elements = gObj.getRowTemplate()(extend({ index: i }, dataSource[i]), gObj, 'rowTemplate');\n for (var j = 0; j < elements.length; j++) {\n var isTR = elements[j].nodeName.toLowerCase() === 'tr';\n if (isTR || (elements[j].querySelectorAll && elements[j].querySelectorAll('tr').length)) {\n tr = isTR ? elements[j] : elements[j].querySelector('tr');\n }\n }\n }\n if (gObj.frozenRows && i < gObj.frozenRows) {\n hdrfrag.appendChild(tr);\n }\n else {\n frag.appendChild(tr);\n }\n this.rows.push(modelData[i]);\n if (modelData[i].isDataRow) {\n //detailrowvisible \n var td = tr.querySelectorAll('.e-rowcell:not(.e-hide)')[0];\n if (td) {\n td.classList.add('e-detailrowvisible');\n }\n this.rowElements.push(tr);\n }\n this.ariaService.setOptions(this.getTable(), { colcount: gObj.getColumns().length.toString() });\n }\n this.splitRows(idx);\n if (gObj.frozenRows) {\n hdrTbody = frzCols ? gObj.getHeaderContent().querySelector(idx === 0 ? '.e-frozenheader'\n : '.e-movableheader').querySelector('tbody') : gObj.getHeaderTable().querySelector('tbody');\n hdrTbody.innerHTML = '';\n hdrTbody.appendChild(hdrfrag);\n }\n if (gObj.frozenRows && idx === 0 && cont.offsetHeight === Number(gObj.height)) {\n cont.style.height = (cont.offsetHeight - hdrTbody.offsetHeight) + 'px';\n }\n if (frzCols && idx === 0) {\n this.getPanel().firstChild.style.overflowY = 'hidden';\n }\n args.rows = this.rows.slice(0);\n args.isFrozen = this.parent.getFrozenColumns() !== 0 && !args.isFrozen;\n getUpdateUsingRaf(function () {\n remove(_this.tbody);\n _this.tbody = createElement('tbody');\n if (frzCols) {\n _this.tbody.appendChild(frag);\n if (idx === 0) {\n _this.isLoaded = false;\n fCont.querySelector('table').appendChild(_this.tbody);\n }\n else {\n if (_this.tbody.childElementCount < 1) {\n _this.tbody.appendChild(createElement('tr').appendChild(createElement('td')));\n }\n _this.isLoaded = true;\n mCont.querySelector('table').appendChild(_this.tbody);\n fCont.style.height = ((mCont.offsetHeight) - getScrollBarWidth()) + 'px';\n mCont.style.overflowY = _this.parent.height !== 'auto' ? 'scroll' : 'auto';\n fCont.style.borderRightWidth = '1px';\n }\n }\n else {\n _this.appendContent(_this.tbody, frag, args);\n }\n if (frzCols && idx === 0) {\n _this.refreshContentRows(extend({}, args));\n }\n }, this.rafCallback(extend({}, args)));\n };\n ContentRender.prototype.appendContent = function (tbody, frag, args) {\n tbody.appendChild(frag);\n this.getTable().appendChild(tbody);\n };\n /**\n * Get the content div element of grid\n * @return {Element}\n */\n ContentRender.prototype.getPanel = function () {\n return this.contentPanel;\n };\n /**\n * Set the content div element of grid\n * @param {Element} panel\n */\n ContentRender.prototype.setPanel = function (panel) {\n this.contentPanel = panel;\n };\n /**\n * Get the content table element of grid\n * @return {Element}\n */\n ContentRender.prototype.getTable = function () {\n return this.contentTable;\n };\n /**\n * Set the content table element of grid\n * @param {Element} table\n */\n ContentRender.prototype.setTable = function (table) {\n this.contentTable = table;\n };\n /**\n * Get the Row collection in the Grid.\n * @returns {Row[] | HTMLCollectionOf}\n */\n ContentRender.prototype.getRows = function () {\n return this.parent.getFrozenColumns() ? this.freezeRows : this.rows;\n };\n /**\n * Get the Movable Row collection in the Freeze pane Grid.\n * @returns {Row[] | HTMLCollectionOf}\n */\n ContentRender.prototype.getMovableRows = function () {\n return this.movableRows;\n };\n /**\n * Get the content table data row elements\n * @return {Element}\n */\n ContentRender.prototype.getRowElements = function () {\n return this.parent.getFrozenColumns() ? this.freezeRowElements : this.rowElements;\n };\n /**\n * Get the Freeze pane movable content table data row elements\n * @return {Element}\n */\n ContentRender.prototype.getMovableRowElements = function () {\n return this.rowElements;\n };\n /**\n * Get the content table data row elements\n * @return {Element}\n */\n ContentRender.prototype.setRowElements = function (elements) {\n this.rowElements = elements;\n };\n /**\n * Get the header colgroup element\n * @returns {Element}\n */\n ContentRender.prototype.getColGroup = function () {\n return this.colgroup;\n };\n /**\n * Set the header colgroup element\n * @param {Element} colgroup\n * @returns {Element}\n */\n ContentRender.prototype.setColGroup = function (colGroup) {\n return this.colgroup = colGroup;\n };\n /**\n * Function to hide content table column based on visible property\n * @param {Column[]} columns?\n */\n ContentRender.prototype.setVisible = function (columns) {\n var gObj = this.parent;\n var frzCols = gObj.getFrozenColumns();\n var rows = [];\n if (frzCols) {\n var fRows = this.freezeRows;\n var mRows = this.movableRows;\n var rowLen = fRows.length;\n var cellLen = void 0;\n for (var i = 0, row = void 0; i < rowLen; i++) {\n cellLen = mRows[i].cells.length;\n row = fRows[i].clone();\n for (var j = 0; j < cellLen; j++) {\n row.cells.push(mRows[i].cells[j]);\n }\n rows.push(row);\n }\n }\n else {\n rows = this.getRows();\n }\n var element;\n var testRow;\n rows.some(function (r) { if (r.isDataRow) {\n testRow = r;\n } return r.isDataRow; });\n var tasks = [];\n for (var c = 0, clen = columns.length; c < clen; c++) {\n var column = columns[c];\n var idx = this.parent.getNormalizedColumnIndex(column.uid);\n //used canSkip method to skip unwanted visible toggle operation. \n if (this.canSkip(column, testRow, idx)) {\n continue;\n }\n var displayVal = column.visible === true ? '' : 'none';\n if (frzCols) {\n if (idx < frzCols) {\n setStyleAttribute(this.getColGroup().childNodes[idx], { 'display': displayVal });\n }\n else {\n var mTable = gObj.getContent().querySelector('.e-movablecontent').querySelector('colgroup');\n setStyleAttribute(mTable.childNodes[idx - frzCols], { 'display': displayVal });\n }\n }\n else {\n setStyleAttribute(this.getColGroup().childNodes[idx], { 'display': displayVal });\n }\n }\n this.refreshContentRows({ requestType: 'refresh' });\n };\n ContentRender.prototype.colGroupRefresh = function () {\n if (this.getColGroup()) {\n var colGroup = this.parent.element.querySelector('.e-gridheader').querySelector('colgroup').cloneNode(true);\n this.getTable().replaceChild(colGroup, this.getColGroup());\n this.setColGroup(colGroup);\n }\n };\n ContentRender.prototype.initializeContentDrop = function () {\n var gObj = this.parent;\n var drop = new Droppable(gObj.getContent(), {\n accept: '.e-dragclone',\n drop: this.drop\n });\n };\n ContentRender.prototype.canSkip = function (column, row, index) {\n /**\n * Skip the toggle visiblity operation when one of the following success\n * 1. Grid has empty records\n * 2. column visible property is unchanged\n * 3. cell`s isVisible property is same as column`s visible property.\n */\n return isNullOrUndefined(row) || //(1)\n isNullOrUndefined(column.visible) || //(2) \n row.cells[index].visible === column.visible; //(3)\n };\n ContentRender.prototype.getModelGenerator = function () {\n return this.generator = this.parent.allowGrouping ? new GroupModelGenerator(this.parent) : new RowModelGenerator(this.parent);\n };\n ContentRender.prototype.renderEmpty = function (tbody) {\n this.getTable().appendChild(tbody);\n if (this.parent.frozenRows) {\n this.parent.getHeaderContent().querySelector('tbody').innerHTML = '';\n }\n };\n ContentRender.prototype.setSelection = function (uid, set, clearAll) {\n if (this.parent.getFrozenColumns()) {\n this.getMovableRows().filter(function (row) { return clearAll || uid === row.uid; }).forEach(function (row) { return row.isSelected = set; });\n }\n this.getRows().filter(function (row) { return clearAll || uid === row.uid; })\n .forEach(function (row) {\n row.isSelected = set;\n row.cells.forEach(function (cell) { return cell.isSelected = set; });\n });\n };\n ContentRender.prototype.getRowByIndex = function (index) {\n return this.parent.getDataRows()[index];\n };\n ContentRender.prototype.getVirtualRowIndex = function (index) {\n return index;\n };\n ContentRender.prototype.getMovableRowByIndex = function (index) {\n return this.parent.getMovableDataRows()[index];\n };\n ContentRender.prototype.enableAfterRender = function (e) {\n if (e.module === 'group' && e.enable) {\n this.generator = this.getModelGenerator();\n }\n };\n return ContentRender;\n}());\nexport { ContentRender };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { createElement, setStyleAttribute, closest as getClosest, remove } from '@syncfusion/ej2-base';\nimport { classList } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { RowRenderer } from './row-renderer';\nimport { Cell } from '../models/cell';\nimport { Row } from '../models/row';\nimport * as events from '../base/constant';\nimport { Draggable, Droppable } from '@syncfusion/ej2-base';\nimport { parentsUntil, wrap } from '../base/util';\n/**\n * Content module is used to render grid content\n * @hidden\n */\nvar HeaderRender = /** @class */ (function () {\n /**\n * Constructor for header renderer module\n */\n function HeaderRender(parent, serviceLocator) {\n var _this = this;\n this.frzIdx = 0;\n this.helper = function (e) {\n var gObj = _this.parent;\n var target = e.sender.target;\n var parentEle = parentsUntil(target, 'e-headercell');\n if (!(gObj.allowReordering || gObj.allowGrouping) || (!isNullOrUndefined(parentEle)\n && parentEle.querySelectorAll('.e-checkselectall').length > 0)) {\n return false;\n }\n var visualElement = createElement('div', { className: 'e-cloneproperties e-dragclone e-headerclone' });\n var element = target.classList.contains('e-headercell') ? target : parentEle;\n if (!element || (!gObj.allowReordering && element.classList.contains('e-stackedheadercell'))) {\n return false;\n }\n var height = element.offsetHeight;\n var headercelldiv = element.querySelector('.e-headercelldiv');\n var col;\n if (headercelldiv) {\n col = gObj.getColumnByUid(headercelldiv.getAttribute('e-mappinguid'));\n _this.column = col;\n visualElement.setAttribute('e-mappinguid', _this.column.uid);\n }\n if (col && !isNullOrUndefined(col.headerTemplate)) {\n if (col.headerTemplate.indexOf('#') !== -1) {\n visualElement.innerHTML = document.querySelector(col.headerTemplate).innerHTML.trim();\n }\n else {\n visualElement.innerHTML = col.headerTemplate;\n }\n }\n else {\n visualElement.textContent = headercelldiv ?\n col.headerText : element.firstElementChild.innerHTML;\n }\n visualElement.style.width = element.offsetWidth + 'px';\n visualElement.style.height = element.offsetHeight + 'px';\n visualElement.style.lineHeight = (height - 6).toString() + 'px';\n gObj.element.appendChild(visualElement);\n return visualElement;\n };\n this.dragStart = function (e) {\n var gObj = _this.parent;\n gObj.element.querySelector('.e-gridpopup').style.display = 'none';\n gObj.notify(events.columnDragStart, { target: e.target, column: _this.column, event: e.event });\n };\n this.drag = function (e) {\n var gObj = _this.parent;\n var target = e.target;\n if (target) {\n var closest = getClosest(target, '.e-grid');\n var cloneElement = _this.parent.element.querySelector('.e-cloneproperties');\n if (!closest || closest.getAttribute('id') !== gObj.element.getAttribute('id')) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n if (gObj.allowReordering) {\n gObj.element.querySelector('.e-reorderuparrow').style.display = 'none';\n gObj.element.querySelector('.e-reorderdownarrow').style.display = 'none';\n }\n return;\n }\n gObj.notify(events.columnDrag, { target: e.target, column: _this.column, event: e.event });\n }\n };\n this.dragStop = function (e) {\n var gObj = _this.parent;\n var cancel;\n gObj.element.querySelector('.e-gridpopup').style.display = 'none';\n if ((!parentsUntil(e.target, 'e-headercell') && !parentsUntil(e.target, 'e-groupdroparea')) ||\n (!gObj.allowReordering && parentsUntil(e.target, 'e-headercell')) ||\n (!e.helper.getAttribute('e-mappinguid') && parentsUntil(e.target, 'e-groupdroparea'))) {\n remove(e.helper);\n cancel = true;\n }\n gObj.notify(events.columnDragStop, { target: e.target, event: e.event, column: _this.column, cancel: cancel });\n };\n this.drop = function (e) {\n var gObj = _this.parent;\n var uid = e.droppedElement.getAttribute('e-mappinguid');\n var closest = getClosest(e.target, '.e-grid');\n remove(e.droppedElement);\n if (closest && closest.getAttribute('id') !== gObj.element.getAttribute('id') ||\n !(gObj.allowReordering || gObj.allowGrouping)) {\n return;\n }\n gObj.notify(events.headerDrop, { target: e.target, uid: uid });\n };\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.ariaService = this.serviceLocator.getService('ariaService');\n this.widthService = this.serviceLocator.getService('widthService');\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.columnVisibilityChanged, this.setVisible, this);\n this.parent.on(events.columnPositionChanged, this.colPosRefresh, this);\n }\n /**\n * The function is used to render grid header div\n */\n HeaderRender.prototype.renderPanel = function () {\n var div = createElement('div', { className: 'e-gridheader' });\n var innerDiv = createElement('div', { className: 'e-headercontent' });\n div.appendChild(innerDiv);\n this.setPanel(div);\n this.parent.element.appendChild(div);\n };\n /**\n * The function is used to render grid header table\n */\n HeaderRender.prototype.renderTable = function () {\n var headerDiv = this.getPanel();\n headerDiv.appendChild(this.createHeaderTable());\n this.setTable(headerDiv.querySelector('.e-table'));\n if (!this.parent.getFrozenColumns()) {\n this.initializeHeaderDrag();\n this.initializeHeaderDrop();\n }\n this.parent.notify(events.headerRefreshed, { rows: this.rows, args: { isFrozen: this.parent.getFrozenColumns() !== 0 } });\n };\n /**\n * Get the header content div element of grid\n * @return {Element}\n */\n HeaderRender.prototype.getPanel = function () {\n return this.headerPanel;\n };\n /**\n * Set the header content div element of grid\n * @param {Element} panel\n */\n HeaderRender.prototype.setPanel = function (panel) {\n this.headerPanel = panel;\n };\n /**\n * Get the header table element of grid\n * @return {Element}\n */\n HeaderRender.prototype.getTable = function () {\n return this.headerTable;\n };\n /**\n * Set the header table element of grid\n * @param {Element} table\n */\n HeaderRender.prototype.setTable = function (table) {\n this.headerTable = table;\n };\n /**\n * Get the header colgroup element\n * @returns {Element}\n */\n HeaderRender.prototype.getColGroup = function () {\n return this.colgroup;\n };\n /**\n * Set the header colgroup element\n * @param {Element} colgroup\n * @returns {Element}\n */\n HeaderRender.prototype.setColGroup = function (colGroup) {\n return this.colgroup = colGroup;\n };\n /**\n * Get the header row element collection.\n * @return {Element[]}\n */\n HeaderRender.prototype.getRows = function () {\n var table = this.getTable();\n return table.tHead.rows;\n };\n /**\n * The function is used to create header table elements\n * @return {Element}\n * @hidden\n */\n HeaderRender.prototype.createHeaderTable = function () {\n var table = this.createTable();\n var innerDiv = this.getPanel().firstChild;\n innerDiv.appendChild(table);\n return innerDiv;\n };\n /**\n * @hidden\n */\n HeaderRender.prototype.createTable = function () {\n var gObj = this.parent;\n var columns = gObj.getColumns();\n var table = createElement('table', { className: 'e-table', attrs: { cellspacing: '0.25px', role: 'grid' } });\n var innerDiv = this.getPanel().firstChild;\n var findHeaderRow = this.createHeaderContent();\n var thead = findHeaderRow.thead;\n var tbody = createElement('tbody', { className: this.parent.frozenRows ? '' : 'e-hide' });\n this.caption = createElement('caption', { innerHTML: this.parent.element.id + '_header_table', className: 'e-hide' });\n var colGroup = createElement('colgroup');\n var rowBody = createElement('tr');\n var bodyCell;\n var rows = this.rows = findHeaderRow.rows;\n var rowRenderer = new RowRenderer(this.serviceLocator, CellType.Header);\n for (var i = 0, len = rows.length; i < len; i++) {\n for (var j = 0, len_1 = rows[i].cells.length; j < len_1; j++) {\n var cell = rows[i].cells[j];\n bodyCell = createElement('td');\n rowBody.appendChild(bodyCell);\n }\n }\n if (gObj.allowFiltering || gObj.allowSorting || gObj.allowGrouping) {\n table.classList.add('e-sortfilter');\n }\n this.updateColGroup(colGroup);\n tbody.appendChild(rowBody);\n table.appendChild(this.setColGroup(colGroup));\n table.appendChild(thead);\n table.appendChild(tbody);\n table.appendChild(this.caption);\n this.ariaService.setOptions(table, { colcount: gObj.getColumns().length.toString() });\n return table;\n };\n HeaderRender.prototype.createHeaderContent = function () {\n var gObj = this.parent;\n var columns = gObj.getColumns();\n var thead = createElement('thead');\n var colHeader = createElement('tr', { className: 'e-columnheader' });\n var rowRenderer = new RowRenderer(this.serviceLocator, CellType.Header, gObj);\n rowRenderer.element = colHeader;\n var rows = [];\n var headerRow;\n this.colDepth = this.getObjDepth();\n for (var i = 0, len = this.colDepth; i < len; i++) {\n rows[i] = this.generateRow(i);\n rows[i].cells = [];\n }\n rows = this.ensureColumns(rows);\n rows = this.getHeaderCells(rows);\n for (var i = 0, len = this.colDepth; i < len; i++) {\n headerRow = rowRenderer.render(rows[i], columns);\n if (this.parent.rowHeight) {\n headerRow.style.height = this.parent.rowHeight + 'px';\n }\n thead.appendChild(headerRow);\n }\n var findHeaderRow = {\n thead: thead,\n rows: rows\n };\n return findHeaderRow;\n };\n HeaderRender.prototype.updateColGroup = function (colGroup) {\n var cols = this.parent.getColumns();\n var col;\n var indexes = this.parent.getColumnIndexesInView();\n if (this.parent.allowGrouping) {\n for (var i = 0, len = this.parent.groupSettings.columns.length; i < len; i++) {\n if (this.parent.enableColumnVirtualization && indexes.indexOf(i) === -1) {\n continue;\n }\n col = createElement('col');\n colGroup.appendChild(col);\n }\n }\n if (this.parent.detailTemplate || this.parent.childGrid) {\n col = createElement('col');\n colGroup.appendChild(col);\n }\n for (var i = 0, len = cols.length; i < len; i++) {\n col = createElement('col');\n if (cols[i].visible === false) {\n setStyleAttribute(col, { 'display': 'none' });\n }\n colGroup.appendChild(col);\n }\n return colGroup;\n };\n HeaderRender.prototype.ensureColumns = function (rows) {\n //TODO: generate dummy column for group, detail, stacked row here; ensureColumns here\n var gObj = this.parent;\n var indexes = this.parent.getColumnIndexesInView();\n for (var i = 0, len = rows.length; i < len; i++) {\n if (gObj.allowGrouping) {\n for (var c = 0, len_2 = gObj.groupSettings.columns.length; c < len_2; c++) {\n if (this.parent.enableColumnVirtualization && indexes.indexOf(c) === -1) {\n continue;\n }\n rows[i].cells.push(this.generateCell({}, CellType.HeaderIndent));\n }\n }\n if (gObj.detailTemplate || gObj.childGrid) {\n rows[i].cells.push(this.generateCell({}, CellType.DetailHeader));\n }\n }\n return rows;\n };\n HeaderRender.prototype.getHeaderCells = function (rows) {\n var column;\n var thead = this.parent.getHeaderTable() && this.parent.getHeaderTable().querySelector('thead');\n var cols = this.parent.enableColumnVirtualization ? this.parent.getColumns() : this.parent.columns;\n this.frzIdx = 0;\n for (var i = 0, len = cols.length; i < len; i++) {\n rows = this.appendCells(cols[i], rows, 0, i === 0, false, i === (len - 1), thead);\n }\n return rows;\n };\n HeaderRender.prototype.appendCells = function (cols, rows, index, isFirstObj, isFirstCol, isLastCol, isMovable) {\n var lastCol = isLastCol ? 'e-lastcell' : '';\n var frzCols = this.parent.getFrozenColumns();\n if (!cols.columns) {\n if (!frzCols || (frzCols\n && ((!isMovable && (this.frzIdx < this.parent.frozenColumns || cols.isFrozen))\n || (isMovable && this.frzIdx >= this.parent.frozenColumns && !cols.isFrozen)))) {\n rows[index].cells.push(this.generateCell(cols, CellType.Header, this.colDepth - index, (isFirstObj ? '' : (isFirstCol ? 'e-firstcell' : '')) + lastCol, index, this.parent.getColumnIndexByUid(cols.uid)));\n }\n this.frzIdx++;\n }\n else {\n var colSpan = this.getCellCnt(cols, 0);\n if (colSpan) {\n var frzObj = this.refreshFrozenHdr(cols.columns, { isPartial: false, isComp: true, cnt: 0 });\n if (!frzCols || (frzCols\n && ((!isMovable && (this.parent.frozenColumns - this.frzIdx > 0 || (frzObj.isPartial)))\n || (isMovable && (colSpan + this.frzIdx > this.parent.frozenColumns && !frzObj.isComp))))) {\n rows[index].cells.push(new Cell({\n cellType: CellType.StackedHeader, column: cols,\n colSpan: this.getColSpan(colSpan, isMovable, frzObj.cnt)\n }));\n }\n }\n for (var i = 0, len = cols.columns.length; i < len; i++) {\n rows = this.appendCells(cols.columns[i], rows, index + 1, isFirstObj, i === 0, i === (len - 1) && isLastCol, isMovable);\n }\n }\n return rows;\n };\n HeaderRender.prototype.refreshFrozenHdr = function (cols, frzObj) {\n for (var i = 0; i < cols.length; i++) {\n if (cols[i].columns) {\n frzObj = this.refreshFrozenHdr(cols[i].columns, frzObj);\n }\n else {\n if (cols[i].isFrozen) {\n frzObj.isPartial = true;\n frzObj.cnt++;\n }\n frzObj.isComp = frzObj.isComp && (cols[i].isFrozen ||\n this.parent.getColumnIndexByField(cols[i].field) < this.parent.frozenColumns);\n }\n }\n return frzObj;\n };\n HeaderRender.prototype.getColSpan = function (colSpan, isMovable, frozenCnt) {\n var frzCol = this.parent.frozenColumns;\n if (this.parent.getFrozenColumns() && this.frzIdx + colSpan > frzCol) {\n if (isMovable) {\n colSpan = colSpan - (frzCol > this.frzIdx ? frzCol - this.frzIdx : 0) - frozenCnt;\n }\n else {\n colSpan = colSpan - (colSpan - (frzCol > this.frzIdx ? frzCol + frozenCnt - this.frzIdx : frozenCnt));\n }\n }\n return colSpan;\n };\n HeaderRender.prototype.generateRow = function (index) {\n return new Row({});\n };\n HeaderRender.prototype.generateCell = function (column, cellType, rowSpan, className, rowIndex, colIndex) {\n var opt = {\n 'visible': column.visible,\n 'isDataCell': false,\n 'isTemplate': !isNullOrUndefined(column.headerTemplate),\n 'rowID': '',\n 'column': column,\n 'cellType': cellType,\n 'rowSpan': rowSpan,\n 'className': className,\n 'index': rowIndex,\n 'colIndex': colIndex\n };\n if (!opt.rowSpan || opt.rowSpan < 2) {\n delete opt.rowSpan;\n }\n return new Cell(opt);\n };\n /**\n * Function to hide header table column based on visible property\n * @param {Column[]} columns?\n */\n HeaderRender.prototype.setVisible = function (columns) {\n var gObj = this.parent;\n var rows = [].slice.call(this.getRows()); //NodeList -> Array \n var displayVal = '';\n var idx;\n var className;\n var element;\n var frzCols = gObj.getFrozenColumns();\n for (var c = 0, clen = columns.length; c < clen; c++) {\n var column = columns[c];\n idx = gObj.getNormalizedColumnIndex(column.uid);\n if (column.visible === false) {\n displayVal = 'none';\n }\n if (frzCols) {\n if (idx < frzCols) {\n setStyleAttribute(this.getColGroup().children[idx], { 'display': displayVal });\n }\n else {\n var mTblColGrp = gObj.getHeaderContent().querySelector('.e-movableheader').querySelector('colgroup');\n setStyleAttribute(mTblColGrp.children[idx - frzCols], { 'display': displayVal });\n }\n }\n else {\n setStyleAttribute(this.getColGroup().children[idx], { 'display': displayVal });\n }\n this.refreshUI();\n }\n };\n HeaderRender.prototype.colPosRefresh = function () {\n this.refreshUI();\n };\n /**\n * Refresh the header of the Grid.\n * @returns {void}\n */\n HeaderRender.prototype.refreshUI = function () {\n var headerDiv = this.getPanel();\n var table = this.getTable();\n var frzCols = this.parent.getFrozenColumns();\n remove(this.getTable());\n table.removeChild(table.firstChild);\n table.removeChild(table.childNodes[0]);\n var colGroup = createElement('colgroup');\n var findHeaderRow = this.createHeaderContent();\n this.rows = findHeaderRow.rows;\n table.insertBefore(findHeaderRow.thead, table.firstChild);\n this.updateColGroup(colGroup);\n table.insertBefore(this.setColGroup(colGroup), table.firstChild);\n this.setTable(table);\n this.appendContent(table);\n this.parent.notify(events.colGroupRefresh, {});\n this.widthService.setWidthToColumns();\n this.parent.updateDefaultCursor();\n if (!frzCols) {\n this.initializeHeaderDrag();\n }\n var rows = [].slice.call(headerDiv.querySelectorAll('tr.e-columnheader'));\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n var gCells = [].slice.call(row.querySelectorAll('.e-grouptopleftcell'));\n if (gCells.length) {\n gCells[gCells.length - 1].classList.add('e-lastgrouptopleftcell');\n }\n }\n if (!frzCols) {\n this.parent.notify(events.headerRefreshed, { rows: this.rows, args: { isFrozen: this.parent.getFrozenColumns() !== 0 } });\n }\n if (this.parent.allowTextWrap && this.parent.textWrapSettings.wrapMode === 'Header') {\n wrap(rows, true);\n }\n };\n HeaderRender.prototype.appendContent = function (table) {\n this.getPanel().firstChild.appendChild(table);\n };\n HeaderRender.prototype.getObjDepth = function () {\n var max = 0;\n var cols = this.parent.columns;\n for (var i = 0, len = cols.length; i < len; i++) {\n var depth = this.checkDepth(cols[i], 0);\n if (max < depth) {\n max = depth;\n }\n }\n return max + 1;\n };\n HeaderRender.prototype.checkDepth = function (col, index) {\n if (col.columns) {\n index++;\n for (var i = 0, len = col.columns.length; i < len; i++) {\n index = this.checkDepth(col.columns[i], index);\n }\n }\n return index;\n };\n HeaderRender.prototype.getCellCnt = function (col, cnt) {\n if (col.columns) {\n for (var i = 0, len = col.columns.length; i < len; i++) {\n cnt = this.getCellCnt(col.columns[i], cnt);\n }\n }\n else {\n if (col.visible) {\n cnt++;\n }\n }\n return cnt;\n };\n HeaderRender.prototype.initializeHeaderDrag = function () {\n var gObj = this.parent;\n if (!(this.parent.allowReordering || (this.parent.allowGrouping && this.parent.groupSettings.showDropArea))) {\n return;\n }\n var headerRows = [].slice.call(gObj.getHeaderContent().querySelectorAll('.e-columnheader'));\n for (var i = 0, len = headerRows.length; i < len; i++) {\n var drag = new Draggable(headerRows[i], {\n dragTarget: '.e-headercell',\n distance: 5,\n helper: this.helper,\n dragStart: this.dragStart,\n drag: this.drag,\n dragStop: this.dragStop,\n abort: '.e-rhandler'\n });\n }\n };\n HeaderRender.prototype.initializeHeaderDrop = function () {\n var gObj = this.parent;\n var drop = new Droppable(gObj.getHeaderContent(), {\n accept: '.e-dragclone',\n drop: this.drop\n });\n };\n return HeaderRender;\n}());\nexport { HeaderRender };\n","import { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { createElement } from '@syncfusion/ej2-base';\nimport { doesImplementInterface, setStyleAndAttributes, appendChildren } from '../base/util';\nimport { CheckBox, createCheckBox } from '@syncfusion/ej2-buttons';\nimport { foreignKeyData } from '../base/constant';\n/**\n * CellRenderer class which responsible for building cell content.\n * @hidden\n */\nvar CellRenderer = /** @class */ (function () {\n function CellRenderer(parent, locator) {\n this.localizer = locator.getService('localization');\n this.formatter = locator.getService('valueFormatter');\n this.parent = parent;\n }\n /**\n * Function to return the wrapper for the TD content\n * @returns string\n */\n CellRenderer.prototype.getGui = function () {\n return '';\n };\n /**\n * Function to format the cell value.\n * @param {Column} column\n * @param {Object} value\n * @param {Object} data\n */\n CellRenderer.prototype.format = function (column, value, data) {\n if (!isNullOrUndefined(column.format)) {\n value = this.formatter.toView(value, column.getFormatter());\n }\n return isNullOrUndefined(value) ? '' : value.toString();\n };\n CellRenderer.prototype.evaluate = function (node, cell, data, attributes, fData) {\n var result;\n if (cell.column.template) {\n var literals = ['index'];\n var dummyData = extend({}, data, (_a = {}, _a[foreignKeyData] = fData, _a));\n result = cell.column.getColumnTemplate()(extend({ 'index': attributes[literals[0]] }, dummyData), this.parent, 'template');\n appendChildren(node, result);\n node.setAttribute('aria-label', node.innerText + ' is template cell' + ' column header ' +\n cell.column.headerText);\n return false;\n }\n return true;\n var _a;\n };\n /**\n * Function to invoke the custom formatter available in the column object.\n * @param {Column} column\n * @param {Object} value\n * @param {Object} data\n */\n CellRenderer.prototype.invokeFormatter = function (column, value, data) {\n if (!isNullOrUndefined(column.formatter)) {\n if (doesImplementInterface(column.formatter, 'getValue')) {\n var formatter = column.formatter;\n value = new formatter().getValue(column, data);\n }\n else if (typeof column.formatter === 'function') {\n value = column.formatter(column, data);\n }\n else {\n value = column.formatter.getValue(column, data);\n }\n }\n return value;\n };\n /**\n * Function to render the cell content based on Column object.\n * @param {Column} column\n * @param {Object} data\n * @param {{[x:string]:Object}} attributes?\n * @param {Element}\n */\n CellRenderer.prototype.render = function (cell, data, attributes) {\n return this.refreshCell(cell, data, attributes);\n };\n /**\n * Function to refresh the cell content based on Column object.\n * @param {Column} column\n * @param {Object} data\n * @param {{[x:string]:Object}} attributes?\n * @param {Element}\n */\n CellRenderer.prototype.refreshTD = function (td, cell, data, attributes) {\n var node = this.refreshCell(cell, data, attributes);\n td.innerHTML = '';\n var elements = [].slice.call(node.childNodes);\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var elem = elements_1[_i];\n td.appendChild(elem);\n }\n };\n CellRenderer.prototype.refreshCell = function (cell, data, attributes) {\n var node = createElement('TD', { className: 'e-rowcell', attrs: { role: 'gridcell', tabindex: '-1' } });\n var column = cell.column;\n var fData;\n if (cell.isForeignKey) {\n fData = cell.foreignKeyData[0] || (_a = {}, _a[column.foreignKeyValue] = column.format ? null : '', _a);\n }\n //Prepare innerHtml\n var innerHtml = this.getGui();\n var value = cell.isForeignKey ? this.getValue(column.foreignKeyValue, fData, column) :\n this.getValue(column.field, data, column);\n if (column.type === 'date' && !isNullOrUndefined(value)) {\n value = new Date(value);\n }\n value = this.format(column, value, data);\n innerHtml = value.toString();\n if (column.type === 'boolean') {\n if (column.displayAsCheckBox) {\n node.classList.add('e-checkbox');\n innerHtml = '';\n }\n else {\n var localeStr = (value !== 'true' && value !== 'false') ? null : value === 'true' ? 'True' : 'False';\n innerHtml = localeStr ? this.localizer.getConstant(localeStr) : innerHtml;\n }\n }\n var fromFormatter = this.invokeFormatter(column, value, data);\n innerHtml = !isNullOrUndefined(column.formatter) ? isNullOrUndefined(fromFormatter) ? '' : fromFormatter.toString() : innerHtml;\n node.setAttribute('aria-label', (innerHtml === '' ? 'empty' : innerHtml) + ' column header ' + cell.column.headerText);\n if (!isNullOrUndefined(cell.column.headerText)) {\n node.setAttribute('aria-label', innerHtml + ' column header ' + cell.column.headerText);\n }\n if (this.evaluate(node, cell, data, attributes, fData) && column.type !== 'checkbox') {\n this.appendHtml(node, innerHtml, column.getDomSetter ? column.getDomSetter() : 'innerHTML');\n }\n else if (column.type === 'checkbox') {\n node.classList.add('e-gridchkbox');\n node.setAttribute('aria-label', 'checkbox');\n if (this.parent.selectionSettings.persistSelection) {\n value = value === 'true';\n }\n else {\n value = false;\n }\n var checkWrap = createCheckBox(false, { checked: value, label: ' ' });\n checkWrap.insertBefore(createElement('input', { className: 'e-checkselect', attrs: { 'type': 'checkbox' } }), checkWrap.firstChild);\n node.appendChild(checkWrap);\n }\n if (this.parent.checkAllRows === 'Check' && this.parent.enableVirtualization) {\n cell.isSelected = true;\n }\n this.setAttributes(node, cell, attributes);\n if (column.type === 'boolean') {\n var obj = new CheckBox({\n disabled: true,\n checked: isNaN(parseInt(value, 10)) ? value === 'true' : parseInt(value, 10) > 0\n });\n obj.appendTo(node.firstElementChild);\n node.setAttribute('aria-label', obj.checked + ' column header ' + cell.column.headerText);\n }\n return node;\n var _a;\n };\n /**\n * Function to specifies how the result content to be placed in the cell.\n * @param {Element} node\n * @param {string|Element} innerHtml\n * @returns Element\n */\n CellRenderer.prototype.appendHtml = function (node, innerHtml, property) {\n if (property === void 0) { property = 'innerHTML'; }\n node[property] = innerHtml;\n return node;\n };\n /**\n * @hidden\n */\n CellRenderer.prototype.setAttributes = function (node, cell, attributes) {\n var column = cell.column;\n this.buildAttributeFromCell(node, cell, column.type === 'checkbox');\n setStyleAndAttributes(node, attributes);\n setStyleAndAttributes(node, cell.attributes);\n if (column.customAttributes) {\n setStyleAndAttributes(node, column.customAttributes);\n }\n if (column.textAlign) {\n node.style.textAlign = column.textAlign;\n }\n if (column.clipMode === 'Clip') {\n node.classList.add('e-gridclip');\n }\n else if (column.clipMode === 'EllipsisWithTooltip') {\n node.classList.add('e-ellipsistooltip');\n }\n };\n CellRenderer.prototype.buildAttributeFromCell = function (node, cell, isCheckBoxType) {\n var attr = {};\n var prop = { 'colindex': 'aria-colindex' };\n var classes = [];\n if (cell.colSpan) {\n attr.colSpan = cell.colSpan;\n }\n if (cell.rowSpan) {\n attr.rowSpan = cell.rowSpan;\n }\n if (cell.isTemplate) {\n classes.push('e-templatecell');\n }\n if (cell.isSelected) {\n classes.push.apply(classes, ['e-selectionbackground', 'e-active']);\n if (isCheckBoxType) {\n node.querySelector('.e-frame').classList.add('e-check');\n }\n }\n if (!isNullOrUndefined(cell.index)) {\n attr[prop.colindex] = cell.index;\n }\n if (!cell.visible) {\n classes.push('e-hide');\n }\n attr.class = classes;\n setStyleAndAttributes(node, attr);\n };\n CellRenderer.prototype.getValue = function (field, data, column) {\n return column.valueAccessor(field, data, column);\n };\n return CellRenderer;\n}());\nexport { CellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { createElement, attributes } from '@syncfusion/ej2-base';\nimport { setStyleAndAttributes, appendChildren } from '../base/util';\nimport { CellRenderer } from './cell-renderer';\nimport { AriaService } from '../services/aria-service';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\n/**\n * HeaderCellRenderer class which responsible for building header cell content.\n * @hidden\n */\nvar HeaderCellRenderer = /** @class */ (function (_super) {\n __extends(HeaderCellRenderer, _super);\n function HeaderCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = createElement('TH', { className: 'e-headercell', attrs: { role: 'columnheader', tabindex: '-1' } });\n _this.ariaService = new AriaService();\n _this.hTxtEle = createElement('span', { className: 'e-headertext' });\n _this.sortEle = createElement('div', { className: 'e-sortfilterdiv e-icons' });\n _this.gui = createElement('div');\n _this.chkAllBox = createElement('input', { className: 'e-checkselectall', attrs: { 'type': 'checkbox' } });\n return _this;\n }\n /**\n * Function to return the wrapper for the TH content.\n * @returns string\n */\n HeaderCellRenderer.prototype.getGui = function () {\n return this.gui.cloneNode();\n };\n /**\n * Function to render the cell content based on Column object.\n * @param {Column} column\n * @param {Object} data\n * @param {Element}\n */\n HeaderCellRenderer.prototype.render = function (cell, data, attributes) {\n var node = this.element.cloneNode();\n var fltrMenuEle = createElement('div', { className: 'e-filtermenudiv e-icons e-icon-filter' });\n return this.prepareHeader(cell, node, fltrMenuEle);\n };\n /**\n * Function to refresh the cell content based on Column object.\n * @param {Cell} cell\n * @param {Element} node\n */\n HeaderCellRenderer.prototype.refresh = function (cell, node) {\n this.clean(node);\n var fltrMenuEle = createElement('div', { className: 'e-filtermenudiv e-icons e-icon-filter' });\n return this.prepareHeader(cell, node, fltrMenuEle);\n };\n HeaderCellRenderer.prototype.clean = function (node) {\n node.innerHTML = '';\n };\n HeaderCellRenderer.prototype.prepareHeader = function (cell, node, fltrMenuEle) {\n var column = cell.column;\n var ariaAttr = {};\n //Prepare innerHtml\n var innerDIV = this.getGui();\n attributes(innerDIV, {\n 'e-mappinguid': column.uid,\n 'class': 'e-headercelldiv'\n });\n if (column.type !== 'checkbox') {\n var value = column.headerText;\n var headerText = this.hTxtEle.cloneNode();\n headerText[column.getDomSetter()] = value;\n innerDIV.appendChild(headerText);\n }\n else {\n column.editType = 'booleanedit';\n var checkAllWrap = createCheckBox(false, { checked: false, label: ' ' });\n checkAllWrap.insertBefore(this.chkAllBox.cloneNode(), checkAllWrap.firstChild);\n innerDIV.appendChild(checkAllWrap);\n innerDIV.classList.add('e-headerchkcelldiv');\n }\n this.buildAttributeFromCell(node, cell);\n this.appendHtml(node, innerDIV);\n node.appendChild(this.sortEle.cloneNode());\n if ((this.parent.allowFiltering && this.parent.filterSettings.type !== 'FilterBar') &&\n (column.allowFiltering && !isNullOrUndefined(column.field)) &&\n !(this.parent.showColumnMenu && column.showColumnMenu)) {\n attributes(fltrMenuEle, {\n 'e-mappinguid': 'e-flmenu-' + column.uid,\n });\n node.classList.add('e-fltr-icon');\n var matchFlColumns = [];\n if (this.parent.filterSettings.columns.length && this.parent.filterSettings.columns.length !== matchFlColumns.length) {\n for (var index = 0; index < this.parent.columns.length; index++) {\n for (var count = 0; count < this.parent.filterSettings.columns.length; count++) {\n if (this.parent.filterSettings.columns[count].field === column.field) {\n fltrMenuEle.classList.add('e-filtered');\n matchFlColumns.push(column.field);\n break;\n }\n }\n }\n }\n node.appendChild(fltrMenuEle.cloneNode());\n }\n if (cell.className) {\n node.classList.add(cell.className);\n }\n if (column.customAttributes) {\n setStyleAndAttributes(node, column.customAttributes);\n }\n if (column.allowSorting) {\n ariaAttr.sort = 'none';\n }\n if (column.allowGrouping) {\n ariaAttr.grabbed = false;\n }\n node = this.extendPrepareHeader(column, node);\n var result;\n var gridObj = this.parent;\n var colIndex = gridObj.getColumnIndexByField(column.field);\n if (!isNullOrUndefined(column.headerTemplate)) {\n result = column.getHeaderTemplate()(extend({ 'index': colIndex }, column), gridObj, 'headerTemplate');\n node.firstElementChild.innerHTML = '';\n appendChildren(node.firstElementChild, result);\n }\n this.ariaService.setOptions(node, ariaAttr);\n if (!isNullOrUndefined(column.headerTextAlign) || !isNullOrUndefined(column.textAlign)) {\n var alignment = column.headerTextAlign || column.textAlign;\n innerDIV.style.textAlign = alignment;\n if (alignment === 'Right' || alignment === 'Left') {\n node.classList.add(alignment === 'Right' ? 'e-rightalign' : 'e-leftalign');\n }\n else if (alignment === 'Center') {\n node.classList.add('e-centeralign');\n }\n }\n if (column.clipMode === 'Clip') {\n node.classList.add('e-gridclip');\n }\n else if (column.clipMode === 'EllipsisWithTooltip') {\n node.classList.add('e-ellipsistooltip');\n }\n node.setAttribute('aria-rowspan', (!isNullOrUndefined(cell.rowSpan) ? cell.rowSpan : 1).toString());\n node.setAttribute('aria-colspan', '1');\n return node;\n };\n HeaderCellRenderer.prototype.extendPrepareHeader = function (column, node) {\n if (this.parent.showColumnMenu && column.showColumnMenu && !isNullOrUndefined(column.field)) {\n var element = (createElement('div', { className: 'e-icons e-columnmenu' }));\n var matchFilteredColumns = [];\n if (this.parent.filterSettings.columns.length && this.parent.filterSettings.columns.length !== matchFilteredColumns.length) {\n for (var i = 0; i < this.parent.columns.length; i++) {\n for (var j = 0; j < this.parent.filterSettings.columns.length; j++) {\n if (this.parent.filterSettings.columns[j].field === column.field) {\n element.classList.add('e-filtered');\n matchFilteredColumns.push(column.field);\n break;\n }\n }\n }\n }\n node.classList.add('e-fltr-icon');\n node.appendChild(element);\n }\n if (this.parent.allowResizing) {\n var handler = createElement('div');\n handler.className = column.allowResizing ? 'e-rhandler e-rcursor' : 'e-rsuppress';\n node.appendChild(handler);\n }\n return node;\n };\n /**\n * Function to specifies how the result content to be placed in the cell.\n * @param {Element} node\n * @param {string|Element} innerHtml\n * @returns Element\n */\n HeaderCellRenderer.prototype.appendHtml = function (node, innerHtml) {\n node.appendChild(innerHtml);\n return node;\n };\n return HeaderCellRenderer;\n}(CellRenderer));\nexport { HeaderCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\n/**\n * StackedHeaderCellRenderer class which responsible for building stacked header cell content.\n * @hidden\n */\nvar StackedHeaderCellRenderer = /** @class */ (function (_super) {\n __extends(StackedHeaderCellRenderer, _super);\n function StackedHeaderCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = createElement('TH', {\n className: 'e-headercell e-stackedheadercell', attrs: {\n role: 'columnheader',\n tabindex: '-1'\n }\n });\n return _this;\n }\n /**\n * Function to render the cell content based on Column object.\n * @param {Column} column\n * @param {Object} data\n * @param {Element}\n */\n StackedHeaderCellRenderer.prototype.render = function (cell, data, attributes) {\n var node = this.element.cloneNode();\n var div = createElement('div', { className: 'e-stackedheadercelldiv' });\n node.appendChild(div);\n div.innerHTML = cell.column.headerText;\n if (cell.column.toolTip) {\n node.setAttribute('title', cell.column.toolTip);\n }\n if (!isNullOrUndefined(cell.column.textAlign)) {\n div.style.textAlign = cell.column.textAlign;\n }\n node.setAttribute('colspan', cell.colSpan.toString());\n node.setAttribute('aria-colspan', cell.colSpan.toString());\n node.setAttribute('aria-rowspan', '1');\n return node;\n };\n return StackedHeaderCellRenderer;\n}(CellRenderer));\nexport { StackedHeaderCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement } from '@syncfusion/ej2-base';\nimport { setStyleAndAttributes } from '../base/util';\nimport { CellRenderer } from './cell-renderer';\n/**\n * IndentCellRenderer class which responsible for building group indent cell.\n * @hidden\n */\nvar IndentCellRenderer = /** @class */ (function (_super) {\n __extends(IndentCellRenderer, _super);\n function IndentCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = createElement('TD', { className: 'e-indentcell' });\n return _this;\n }\n /**\n * Function to render the indent cell\n * @param {Cell} cell\n * @param {Object} data\n */\n IndentCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n setStyleAndAttributes(node, cell.attributes);\n return node;\n };\n return IndentCellRenderer;\n}(CellRenderer));\nexport { IndentCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\nimport { appendChildren, templateCompiler } from '../base/util';\n/**\n * GroupCaptionCellRenderer class which responsible for building group caption cell.\n * @hidden\n */\nvar GroupCaptionCellRenderer = /** @class */ (function (_super) {\n __extends(GroupCaptionCellRenderer, _super);\n function GroupCaptionCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = createElement('TD', { className: 'e-groupcaption', attrs: { role: 'gridcell', tabindex: '-1' } });\n return _this;\n }\n /**\n * Function to render the cell content based on Column object.\n * @param {Cell} cell\n * @param {Object} data\n */\n GroupCaptionCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n var gObj = this.parent;\n var result;\n var helper = {};\n var fKeyValue;\n if (cell.isForeignKey) {\n fKeyValue = this.format(cell.column, cell.column.valueAccessor('foreignKey', data, cell.column));\n }\n var value = cell.isForeignKey ? fKeyValue : cell.column.enableGroupByFormat ? data.key :\n this.format(cell.column, cell.column.valueAccessor('key', data, cell.column));\n if (!isNullOrUndefined(gObj.groupSettings.captionTemplate)) {\n if (gObj.groupSettings.captionTemplate.indexOf('#') !== -1) {\n result = templateCompiler(document.querySelector(gObj.groupSettings.captionTemplate).innerHTML.trim())(data);\n }\n else {\n result = templateCompiler(gObj.groupSettings.captionTemplate)(data);\n }\n appendChildren(node, result);\n }\n else {\n node.innerHTML = cell.column.headerText + ': ' + value + ' - ' + data.count + ' ' +\n (data.count < 2 ? this.localizer.getConstant('Item') : this.localizer.getConstant('Items'));\n }\n node.setAttribute('colspan', cell.colSpan.toString());\n node.setAttribute('aria-label', node.innerHTML + ' is groupcaption cell');\n node.setAttribute('title', node.innerHTML);\n return node;\n };\n return GroupCaptionCellRenderer;\n}(CellRenderer));\nexport { GroupCaptionCellRenderer };\n/**\n * GroupCaptionEmptyCellRenderer class which responsible for building group caption empty cell.\n * @hidden\n */\nvar GroupCaptionEmptyCellRenderer = /** @class */ (function (_super) {\n __extends(GroupCaptionEmptyCellRenderer, _super);\n function GroupCaptionEmptyCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = createElement('TD', { className: 'e-groupcaption' });\n return _this;\n }\n /**\n * Function to render the cell content based on Column object.\n * @param {Cell} cell\n * @param {Object} data\n */\n GroupCaptionEmptyCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n node.innerHTML = ' ';\n node.setAttribute('colspan', cell.colSpan.toString());\n return node;\n };\n return GroupCaptionEmptyCellRenderer;\n}(CellRenderer));\nexport { GroupCaptionEmptyCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement } from '@syncfusion/ej2-base';\nimport { IndentCellRenderer } from './indent-cell-renderer';\n/**\n * ExpandCellRenderer class which responsible for building group expand cell.\n * @hidden\n */\nvar ExpandCellRenderer = /** @class */ (function (_super) {\n __extends(ExpandCellRenderer, _super);\n function ExpandCellRenderer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Function to render the expand cell\n * @param {Cell} cell\n * @param {Object} data\n */\n ExpandCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n node.className = 'e-recordplusexpand';\n node.setAttribute('ej-mappingname', data.field);\n node.setAttribute('ej-mappingvalue', data.key);\n node.setAttribute('aria-expanded', 'true');\n node.setAttribute('tabindex', '-1');\n node.appendChild(createElement('div', { className: 'e-icons e-gdiagonaldown e-icon-gdownarrow' }));\n return node;\n };\n return ExpandCellRenderer;\n}(IndentCellRenderer));\nexport { ExpandCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\n/**\n * HeaderIndentCellRenderer class which responsible for building header indent cell.\n * @hidden\n */\nvar HeaderIndentCellRenderer = /** @class */ (function (_super) {\n __extends(HeaderIndentCellRenderer, _super);\n function HeaderIndentCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = createElement('TH', { className: 'e-grouptopleftcell' });\n return _this;\n }\n /**\n * Function to render the indent cell\n * @param {Cell} cell\n * @param {Object} data\n */\n HeaderIndentCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n node.appendChild(createElement('div', { className: 'e-headercelldiv e-emptycell', innerHTML: ' ' }));\n return node;\n };\n return HeaderIndentCellRenderer;\n}(CellRenderer));\nexport { HeaderIndentCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\n/**\n * DetailHeaderIndentCellRenderer class which responsible for building detail header indent cell.\n * @hidden\n */\nvar DetailHeaderIndentCellRenderer = /** @class */ (function (_super) {\n __extends(DetailHeaderIndentCellRenderer, _super);\n function DetailHeaderIndentCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = createElement('TH', { className: 'e-detailheadercell' });\n return _this;\n }\n /**\n * Function to render the detail indent cell\n * @param {Cell} cell\n * @param {Object} data\n */\n DetailHeaderIndentCellRenderer.prototype.render = function (cell, data) {\n var node = this.element.cloneNode();\n node.appendChild(createElement('div', { className: 'e-emptycell' }));\n return node;\n };\n return DetailHeaderIndentCellRenderer;\n}(CellRenderer));\nexport { DetailHeaderIndentCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\n/**\n * ExpandCellRenderer class which responsible for building group expand cell.\n * @hidden\n */\nvar DetailExpandCellRenderer = /** @class */ (function (_super) {\n __extends(DetailExpandCellRenderer, _super);\n function DetailExpandCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = createElement('TD', {\n className: 'e-detailrowcollapse',\n attrs: { 'aria-expanded': 'false', role: 'gridcell', tabindex: '-1' }\n });\n return _this;\n }\n /**\n * Function to render the detail expand cell\n */\n DetailExpandCellRenderer.prototype.render = function (cell, data, attributes) {\n var node = this.element.cloneNode();\n if (attributes && !isNullOrUndefined(attributes['class'])) {\n node.className = '';\n node.className = attributes['class'];\n node.appendChild(createElement('div', { className: 'e-icons e-dtdiagonaldown e-icon-gdownarrow' }));\n }\n else {\n node.appendChild(createElement('div', { className: 'e-icons e-dtdiagonalright e-icon-grightarrow' }));\n }\n return node;\n };\n return DetailExpandCellRenderer;\n}(CellRenderer));\nexport { DetailExpandCellRenderer };\n","import { createElement, remove } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue, extend } from '@syncfusion/ej2-base';\nimport { DataManager, Query, Deferred, Predicate } from '@syncfusion/ej2-data';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { RenderType, CellType } from '../base/enum';\nimport { Data } from '../actions/data';\nimport { Row } from '../models/row';\nimport { Cell } from '../models/cell';\nimport * as events from '../base/constant';\nimport { prepareColumns, calculateAggregate, setFormatter, getDatePredicate } from '../base/util';\nimport { ContentRender } from '../renderer/content-renderer';\nimport { HeaderRender } from '../renderer/header-renderer';\nimport { CellRenderer } from '../renderer/cell-renderer';\nimport { HeaderCellRenderer } from '../renderer/header-cell-renderer';\nimport { StackedHeaderCellRenderer } from '../renderer/stacked-cell-renderer';\nimport { IndentCellRenderer } from '../renderer/indent-cell-renderer';\nimport { GroupCaptionCellRenderer, GroupCaptionEmptyCellRenderer } from '../renderer/caption-cell-renderer';\nimport { ExpandCellRenderer } from '../renderer/expand-cell-renderer';\nimport { HeaderIndentCellRenderer } from '../renderer/header-indent-renderer';\nimport { DetailHeaderIndentCellRenderer } from '../renderer/detail-header-indent-renderer';\nimport { DetailExpandCellRenderer } from '../renderer/detail-expand-cell-renderer';\n/**\n * Content module is used to render grid content\n * @hidden\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function Render(parent, locator) {\n this.emptyGrid = false;\n this.parent = parent;\n this.locator = locator;\n this.data = new Data(parent, locator);\n this.l10n = locator.getService('localization');\n this.ariaService = this.locator.getService('ariaService');\n this.renderer = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n /**\n * To initialize grid header, content and footer rendering\n */\n Render.prototype.render = function () {\n var gObj = this.parent;\n this.headerRenderer = this.renderer.getRenderer(RenderType.Header);\n this.contentRenderer = this.renderer.getRenderer(RenderType.Content);\n this.headerRenderer.renderPanel();\n this.contentRenderer.renderPanel();\n if (gObj.getColumns().length) {\n this.headerRenderer.renderTable();\n this.contentRenderer.renderTable();\n this.emptyRow(false);\n }\n this.refreshDataManager();\n };\n /**\n * Refresh the entire Grid.\n * @return {void}\n */\n Render.prototype.refresh = function (e) {\n if (e === void 0) { e = { requestType: 'refresh' }; }\n this.parent.notify(e.requestType + \"-begin\", e);\n this.parent.trigger(events.actionBegin, e);\n if (e.cancel) {\n return;\n }\n this.refreshDataManager(e);\n };\n Render.prototype.refreshComplete = function (e) {\n this.parent.trigger(events.actionComplete, e);\n };\n /**\n * The function is used to refresh the dataManager\n * @return {void}\n */\n Render.prototype.refreshDataManager = function (args) {\n var _this = this;\n if (args === void 0) { args = {}; }\n if (args.requestType !== 'virtualscroll') {\n this.parent.showSpinner();\n }\n this.parent.isEdit = false;\n this.emptyGrid = false;\n var dataManager;\n var isFActon = this.isNeedForeignAction();\n this.ariaService.setBusy(this.parent.getContent().firstChild, true);\n if (isFActon) {\n var deffered = new Deferred();\n dataManager = this.getFData(deffered);\n }\n if (!dataManager) {\n dataManager = this.data.getData(args, this.data.generateQuery().requiresCount())\n .catch(function (e) { _this.parent.trigger(events.actionFailure, e); return e; });\n }\n else {\n dataManager = dataManager.then(function (e) {\n var query = _this.data.generateQuery().requiresCount();\n if (_this.emptyGrid) {\n var def = new Deferred();\n def.resolve({ result: [], count: 0 });\n return def.promise;\n }\n return _this.data.getData(args, query);\n }).catch(function (e) { _this.parent.trigger(events.actionFailure, e); return e; });\n }\n if (this.parent.getForeignKeyColumns().length && (!isFActon || this.parent.searchSettings.key.length)) {\n var deffered_1 = new Deferred();\n dataManager = dataManager.then(function (e) {\n _this.parent.notify(events.getForeignKeyData, { dataManager: dataManager, result: e, promise: deffered_1 });\n return deffered_1.promise;\n });\n }\n if (this.parent.groupSettings.disablePageWiseAggregates && this.parent.groupSettings.columns.length) {\n dataManager = dataManager.then(function (e) { return _this.validateGroupRecords(e); });\n }\n dataManager.then(function (e) { return _this.dataManagerSuccess(e, args); })\n .catch(function (e) { return _this.dataManagerFailure(e); });\n };\n Render.prototype.getFData = function (deferred) {\n this.parent.notify(events.getForeignKeyData, { isComplex: true, promise: deferred });\n return deferred.promise;\n };\n Render.prototype.isNeedForeignAction = function () {\n var gObj = this.parent;\n return !!((gObj.allowFiltering && gObj.filterSettings.columns.length) ||\n (gObj.searchSettings.key.length)) && this.foreignKey(this.parent.getForeignKeyColumns());\n };\n Render.prototype.foreignKey = function (columns) {\n var _this = this;\n return columns.some(function (col) {\n var fbool = false;\n fbool = _this.parent.filterSettings.columns.some(function (value) {\n return col.foreignKeyValue === value.field;\n });\n return !!(fbool || _this.parent.searchSettings.key.length);\n });\n };\n Render.prototype.sendBulkRequest = function (args) {\n var _this = this;\n var promise = this.data.saveChanges(args.changes, this.parent.getPrimaryKeyFieldNames()[0]);\n var query = this.data.generateQuery().requiresCount();\n if (this.data.dataManager.dataSource.offline) {\n this.refreshDataManager({ requestType: 'batchsave' });\n return;\n }\n else {\n promise.then(function (e) {\n _this.data.getData(args, query)\n .then(function (e) { return _this.dmSuccess(e, args); })\n .catch(function (e) { return _this.dmFailure(e); });\n })\n .catch(function (e) { return _this.dmFailure(e); });\n }\n };\n Render.prototype.dmSuccess = function (e, args) {\n this.dataManagerSuccess(e, args);\n };\n Render.prototype.dmFailure = function (e) {\n this.dataManagerFailure(e);\n };\n /**\n * Render empty row to Grid which is used at the time to represent to no records.\n * @return {void}\n * @hidden\n */\n Render.prototype.renderEmptyRow = function () {\n this.emptyRow(true);\n };\n Render.prototype.emptyRow = function (isTrigger) {\n var gObj = this.parent;\n var tbody = this.contentRenderer.getTable().querySelector('tbody');\n var tr;\n remove(tbody);\n tbody = createElement('tbody');\n tr = createElement('tr', { className: 'e-emptyrow' });\n tr.appendChild(createElement('td', {\n innerHTML: this.l10n.getConstant('EmptyRecord'),\n attrs: { colspan: gObj.getColumns().length.toString() }\n }));\n tbody.appendChild(tr);\n this.contentRenderer.renderEmpty(tbody);\n if (isTrigger) {\n this.parent.trigger(events.dataBound, {});\n this.parent.notify(events.onEmpty, { rows: [new Row({ isDataRow: true, cells: [new Cell({ isDataCell: true, visible: true })] })] });\n }\n };\n Render.prototype.dynamicColumnChange = function () {\n if (this.parent.getCurrentViewRecords().length) {\n this.updateColumnType(this.parent.getCurrentViewRecords()[0]);\n }\n };\n Render.prototype.updateColumnType = function (record) {\n var columns = this.parent.getColumns();\n var value;\n var data = record && record.items ? record.items[0] : record;\n var fmtr = this.locator.getService('valueFormatter');\n for (var i = 0, len = columns.length; i < len; i++) {\n value = getValue(columns[i].field || '', data);\n if (columns[i].isForeignColumn() && columns[i].columnData) {\n value = getValue(columns[i].foreignKeyValue || '', columns[i].columnData[0]);\n }\n if (!isNullOrUndefined(value)) {\n this.isColTypeDef = true;\n if (!columns[i].type) {\n columns[i].type = value.getDay ? (value.getHours() > 0 || value.getMinutes() > 0 ||\n value.getSeconds() > 0 || value.getMilliseconds() > 0 ? 'datetime' : 'date') : typeof (value);\n }\n }\n else {\n columns[i].type = columns[i].type || null;\n }\n var valueFormatter = new ValueFormatter();\n if (columns[i].format && (columns[i].format.skeleton || columns[i].format.format)) {\n columns[i].setFormatter(valueFormatter.getFormatFunction(columns[i].format));\n columns[i].setParser(valueFormatter.getParserFunction(columns[i].format));\n }\n if (typeof (columns[i].format) === 'string') {\n setFormatter(this.locator, columns[i]);\n }\n else if (!columns[i].format && columns[i].type === 'number') {\n columns[i].setParser(fmtr.getParserFunction({ format: 'n2' }));\n }\n }\n };\n Render.prototype.dataManagerSuccess = function (e, args) {\n var gObj = this.parent;\n gObj.trigger(events.beforeDataBound, e);\n var len = Object.keys(e.result).length;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.notify(events.tooltipDestroy, {});\n gObj.currentViewData = e.result;\n if (!len && e.count && gObj.allowPaging) {\n gObj.pageSettings.totalRecordsCount = e.count;\n gObj.pageSettings.currentPage = Math.ceil(e.count / gObj.pageSettings.pageSize);\n gObj.dataBind();\n return;\n }\n if (!gObj.getColumns().length && len) {\n this.updatesOnInitialRender(e);\n }\n if (!this.isColTypeDef && gObj.getCurrentViewRecords()) {\n this.updateColumnType(gObj.getCurrentViewRecords()[0]);\n }\n this.parent.notify(events.dataReady, extend({ count: e.count, result: e.result, aggregates: e.aggregates }, args));\n if (gObj.groupSettings.columns.length || (args && args.requestType === 'ungrouping')) {\n this.headerRenderer.refreshUI();\n }\n if (len) {\n this.contentRenderer.refreshContentRows(args);\n }\n else {\n if (!gObj.getColumns().length) {\n gObj.element.innerHTML = '';\n alert(this.l10n.getConstant('EmptyDataSourceError')); //ToDO: change this alert as dialog\n return;\n }\n this.contentRenderer.setRowElements([]);\n this.renderEmptyRow();\n if (args) {\n var action = (args.requestType || '').toLowerCase() + '-complete';\n this.parent.notify(action, args);\n }\n this.parent.hideSpinner();\n }\n this.parent.notify(events.toolbarRefresh, {});\n };\n Render.prototype.dataManagerFailure = function (e) {\n this.ariaService.setOptions(this.parent.getContent().firstChild, { busy: false, invalid: true });\n this.parent.trigger(events.actionFailure, { error: e });\n this.parent.currentViewData = [];\n this.renderEmptyRow();\n this.parent.hideSpinner();\n };\n Render.prototype.updatesOnInitialRender = function (e) {\n this.buildColumns(e.result[0]);\n prepareColumns(this.parent.columns);\n this.headerRenderer.renderTable();\n this.contentRenderer.renderTable();\n this.parent.notify(events.autoCol, {});\n };\n Render.prototype.buildColumns = function (record) {\n var columns = Object.keys(record);\n var cols = [];\n for (var i = 0, len = columns.length; i < len; i++) {\n cols[i] = { 'field': columns[i] };\n if (this.parent.enableColumnVirtualization) {\n cols[i].width = !isNullOrUndefined(cols[i].width) ? cols[i].width : 200;\n }\n }\n this.parent.columns = cols;\n };\n Render.prototype.instantiateRenderer = function () {\n this.renderer.addRenderer(RenderType.Header, new HeaderRender(this.parent, this.locator));\n this.renderer.addRenderer(RenderType.Content, new ContentRender(this.parent, this.locator));\n var cellrender = this.locator.getService('cellRendererFactory');\n cellrender.addCellRenderer(CellType.Header, new HeaderCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.Data, new CellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.StackedHeader, new StackedHeaderCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.Indent, new IndentCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.GroupCaption, new GroupCaptionCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.GroupCaptionEmpty, new GroupCaptionEmptyCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.Expand, new ExpandCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.HeaderIndent, new HeaderIndentCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.StackedHeader, new StackedHeaderCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.DetailHeader, new DetailHeaderIndentCellRenderer(this.parent, this.locator));\n cellrender.addCellRenderer(CellType.DetailExpand, new DetailExpandCellRenderer(this.parent, this.locator));\n };\n Render.prototype.addEventListener = function () {\n var _this = this;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialLoad, this.instantiateRenderer, this);\n this.parent.on(events.modelChanged, this.refresh, this);\n this.parent.on(events.refreshComplete, this.refreshComplete, this);\n this.parent.on(events.bulkSave, this.sendBulkRequest, this);\n this.parent.on(events.showEmptyGrid, function () { _this.emptyGrid = true; }, this);\n this.parent.on(events.autoCol, this.dynamicColumnChange, this);\n };\n /** @hidden */\n Render.prototype.validateGroupRecords = function (e) {\n var _this = this;\n var index = e.result.length - 1;\n if (index < 0) {\n return Promise.resolve(e);\n }\n var group0 = e.result[0];\n var groupN = e.result[index];\n var predicate = [];\n var addWhere = function (input) {\n [group0, groupN].forEach(function (group) {\n return predicate.push(new Predicate('field', '==', group.field).and(_this.getPredicate('key', 'equal', group.key)));\n });\n input.where(Predicate.or(predicate));\n };\n var query = new Query();\n addWhere(query);\n var curDm = new DataManager(e.result);\n var curFilter = curDm.executeLocal(query);\n var newQuery = this.data.generateQuery(true);\n var rPredicate = [];\n if (this.data.isRemote()) {\n [group0, groupN].forEach(function (group) {\n return rPredicate.push(_this.getPredicate(group.field, 'equal', group.key));\n });\n newQuery.where(Predicate.or(rPredicate));\n }\n else {\n addWhere(newQuery);\n }\n var deferred = new Deferred();\n this.data.getData({}, newQuery).then(function (r) {\n _this.updateGroupInfo(curFilter, r.result);\n deferred.resolve(e);\n }).catch(function (e) { return deferred.reject(e); });\n return deferred.promise;\n };\n Render.prototype.getPredicate = function (key, operator, value) {\n if (value instanceof Date) {\n return getDatePredicate({ field: key, operator: operator, value: value });\n }\n return new Predicate(key, operator, value);\n };\n Render.prototype.updateGroupInfo = function (current, untouched) {\n var _this = this;\n var dm = new DataManager(untouched);\n current.forEach(function (element, index, array) {\n var uGroup = dm.executeLocal(new Query()\n .where(new Predicate('field', '==', element.field).and(_this.getPredicate('key', 'equal', element.key))))[0];\n element.count = uGroup.count;\n var itemGroup = element.items;\n var uGroupItem = uGroup.items;\n if (itemGroup.GroupGuid) {\n element.items = _this.updateGroupInfo(element.items, uGroup.items);\n }\n _this.parent.aggregates.forEach(function (row) {\n return row.columns.forEach(function (column) {\n var types = column.type instanceof Array ? column.type : [column.type];\n types.forEach(function (type) {\n var key = column.field + ' - ' + type;\n element.aggregates[key] = calculateAggregate(type, itemGroup.level ? uGroupItem.records : uGroup.items, column);\n });\n });\n });\n });\n return current;\n };\n return Render;\n}());\nexport { Render };\n","import { isNullOrUndefined, getEnumValue } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\n/**\n * CellRendererFactory\n * @hidden\n */\nvar CellRendererFactory = /** @class */ (function () {\n function CellRendererFactory() {\n this.cellRenderMap = {};\n }\n CellRendererFactory.prototype.addCellRenderer = function (name, type) {\n name = typeof name === 'string' ? name : getEnumValue(CellType, name);\n if (isNullOrUndefined(this.cellRenderMap[name])) {\n this.cellRenderMap[name] = type;\n }\n };\n CellRendererFactory.prototype.getCellRenderer = function (name) {\n name = typeof name === 'string' ? name : getEnumValue(CellType, name);\n if (isNullOrUndefined(this.cellRenderMap[name])) {\n throw \"The cellRenderer \" + name + \" is not found\";\n }\n else {\n return this.cellRenderMap[name];\n }\n };\n return CellRendererFactory;\n}());\nexport { CellRendererFactory };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * ServiceLocator\n * @hidden\n */\nvar ServiceLocator = /** @class */ (function () {\n function ServiceLocator() {\n this.services = {};\n }\n ServiceLocator.prototype.register = function (name, type) {\n if (isNullOrUndefined(this.services[name])) {\n this.services[name] = type;\n }\n };\n ServiceLocator.prototype.getService = function (name) {\n if (isNullOrUndefined(this.services[name])) {\n throw \"The service \" + name + \" is not registered\";\n }\n return this.services[name];\n };\n return ServiceLocator;\n}());\nexport { ServiceLocator };\n","import { isNullOrUndefined, getEnumValue } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\n/**\n * RendererFactory\n * @hidden\n */\nvar RendererFactory = /** @class */ (function () {\n function RendererFactory() {\n this.rendererMap = {};\n }\n RendererFactory.prototype.addRenderer = function (name, type) {\n var rName = getEnumValue(RenderType, name);\n if (isNullOrUndefined(this.rendererMap[rName])) {\n this.rendererMap[rName] = type;\n }\n };\n RendererFactory.prototype.getRenderer = function (name) {\n var rName = getEnumValue(RenderType, name);\n if (isNullOrUndefined(this.rendererMap[rName])) {\n throw \"The renderer \" + rName + \" is not found\";\n }\n else {\n return this.rendererMap[rName];\n }\n };\n return RendererFactory;\n}());\nexport { RendererFactory };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { formatUnit } from '@syncfusion/ej2-base';\nimport { columnWidthChanged } from '../base/constant';\nimport { Column } from '../models/column';\n/**\n * ColumnWidthService\n * @hidden\n */\nvar ColumnWidthService = /** @class */ (function () {\n function ColumnWidthService(parent) {\n this.parent = parent;\n }\n ColumnWidthService.prototype.setWidthToColumns = function () {\n var _this = this;\n var i = 0;\n var indexes = this.parent.getColumnIndexesInView();\n var wFlag = true;\n if (this.parent.allowGrouping) {\n for (var len = this.parent.groupSettings.columns.length; i < len; i++) {\n if (this.parent.enableColumnVirtualization && indexes.indexOf(i) === -1) {\n wFlag = false;\n continue;\n }\n this.setColumnWidth(new Column({ width: '30px' }), i);\n }\n }\n if (this.parent.detailTemplate || this.parent.childGrid) {\n this.setColumnWidth(new Column({ width: '30px' }), i);\n }\n this.parent.getColumns().forEach(function (column, index) {\n _this.setColumnWidth(column, wFlag ? undefined : index);\n });\n };\n ColumnWidthService.prototype.setColumnWidth = function (column, index, module) {\n var columnIndex = isNullOrUndefined(index) ? this.parent.getNormalizedColumnIndex(column.uid) : index;\n var cWidth = this.getWidth(column);\n if (cWidth !== null) {\n this.setWidth(cWidth, columnIndex);\n if ((this.parent.allowResizing && module === 'resize') || (this.parent.getFrozenColumns() && this.parent.allowResizing)) {\n this.setWidthToTable();\n }\n this.parent.notify(columnWidthChanged, { index: columnIndex, width: cWidth, column: column, module: module });\n }\n };\n ColumnWidthService.prototype.setWidth = function (width, index) {\n var header = this.parent.getHeaderTable();\n var content = this.parent.getContentTable();\n var fWidth = formatUnit(width);\n var headerCol;\n var frzCols = this.parent.getFrozenColumns();\n var mHdr = this.parent.getHeaderContent().querySelector('.e-movableheader');\n if (frzCols && index >= frzCols && mHdr && mHdr.querySelector('colgroup')) {\n headerCol = mHdr.querySelector('colgroup').children[index - frzCols];\n }\n else {\n headerCol = header.querySelector('colgroup').children[index];\n }\n if (headerCol) {\n headerCol.style.width = fWidth;\n }\n var contentCol;\n if (frzCols && index >= frzCols) {\n contentCol = this.parent.getContent().querySelector('.e-movablecontent')\n .querySelector('colgroup').children[index - frzCols];\n }\n else {\n contentCol = content.querySelector('colgroup').children[index];\n }\n if (contentCol) {\n contentCol.style.width = fWidth;\n }\n var edit = content.querySelector('.e-table.e-inline-edit');\n if (edit) {\n edit.querySelector('colgroup').children[index].style.width = fWidth;\n }\n };\n ColumnWidthService.prototype.getSiblingsHeight = function (element) {\n var previous = this.getHeightFromDirection(element, 'previous');\n var next = this.getHeightFromDirection(element, 'next');\n return previous + next;\n };\n ColumnWidthService.prototype.getHeightFromDirection = function (element, direction) {\n var sibling = element[direction + 'ElementSibling'];\n var result = 0;\n var classList = ['e-gridheader', 'e-gridfooter', 'e-groupdroparea', 'e-gridpager', 'e-toolbar'];\n while (sibling) {\n if (classList.some(function (value) { return sibling.classList.contains(value); })) {\n result += sibling.offsetHeight;\n }\n sibling = sibling[direction + 'ElementSibling'];\n }\n return result;\n };\n ColumnWidthService.prototype.getWidth = function (column) {\n if (isNullOrUndefined(column.width) && this.parent.allowResizing) {\n column.width = 200;\n }\n if (!column.width) {\n return null;\n }\n var width = parseInt(column.width.toString(), 10);\n if (column.minWidth && width < parseInt(column.minWidth.toString(), 10)) {\n return column.minWidth;\n }\n else if ((column.maxWidth && width > parseInt(column.maxWidth.toString(), 10))) {\n return column.maxWidth;\n }\n else {\n return column.width;\n }\n };\n ColumnWidthService.prototype.getTableWidth = function (columns) {\n var tWidth = 0;\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var column = columns_1[_i];\n var cWidth = this.getWidth(column);\n if (column.visible !== false && cWidth !== null) {\n tWidth += parseInt(cWidth.toString(), 10);\n }\n }\n return tWidth;\n };\n ColumnWidthService.prototype.setWidthToFrozenTable = function () {\n var columns = this.parent.getColumns();\n columns.splice(this.parent.getFrozenColumns(), columns.length);\n var freezeWidth = formatUnit(this.getTableWidth(columns));\n this.parent.getHeaderTable().style.width = freezeWidth;\n this.parent.getContentTable().style.width = freezeWidth;\n };\n ColumnWidthService.prototype.setWidthToMovableTable = function () {\n var columns = this.parent.getColumns();\n columns.splice(0, this.parent.getFrozenColumns());\n var movableWidth = formatUnit(this.getTableWidth(columns));\n if (this.parent.getHeaderContent().querySelector('.e-movableheader').firstElementChild) {\n this.parent.getHeaderContent().querySelector('.e-movableheader').firstElementChild.style.width\n = movableWidth;\n }\n this.parent.getContent().querySelector('.e-movablecontent').firstElementChild.style.width =\n movableWidth;\n };\n ColumnWidthService.prototype.setWidthToTable = function () {\n var tWidth = formatUnit(this.getTableWidth(this.parent.getColumns()));\n if (this.parent.getFrozenColumns()) {\n this.setWidthToFrozenTable();\n this.setWidthToMovableTable();\n }\n else {\n this.parent.getHeaderTable().style.width = tWidth;\n this.parent.getContentTable().style.width = tWidth;\n }\n var edit = this.parent.element.querySelector('.e-table.e-inline-edit');\n if (edit) {\n edit.style.width = tWidth;\n }\n };\n return ColumnWidthService;\n}());\nexport { ColumnWidthService };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { EventHandler, getValue, closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, extend, Browser } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport * as event from '../base/constant';\n/**\n * FocusStrategy class\n * @hidden\n */\nvar FocusStrategy = /** @class */ (function () {\n function FocusStrategy(parent) {\n this.currentInfo = {};\n this.oneTime = true;\n this.swap = {};\n this.forget = true;\n this.skipFocus = true;\n this.focusByClick = false;\n this.prevIndexes = {};\n this.parent = parent;\n this.addEventListener();\n }\n FocusStrategy.prototype.focusCheck = function (e) {\n var target = e.target;\n this.focusByClick = true;\n this.skipFocus = target.classList.contains('e-grid');\n };\n FocusStrategy.prototype.onFocus = function () {\n if (this.parent.isDestroyed || Browser.isDevice || this.parent.enableVirtualization) {\n return;\n }\n this.setActive(this.parent.frozenRows === 0, this.parent.frozenColumns !== 0);\n var current = this.getContent().matrix.get(0, -1, [0, 1], null, this.getContent().validator());\n this.getContent().matrix.select(current[0], current[1]);\n if (this.skipFocus) {\n this.focus();\n this.skipFocus = false;\n }\n };\n FocusStrategy.prototype.passiveFocus = function (e) {\n if (this.parent.isDestroyed) {\n return;\n }\n if (e.target && e.target.classList.contains('e-detailcell')) {\n this.currentInfo.skipAction = false;\n addClass([this.currentInfo.element], ['e-focused', 'e-focus']);\n }\n };\n FocusStrategy.prototype.onBlur = function (e) {\n if ((this.parent.isEdit || e && (!e.relatedTarget || closest(e.relatedTarget, '.e-grid')))) {\n return;\n }\n this.removeFocus();\n this.skipFocus = false;\n this.currentInfo.skipAction = false;\n if (this.getContent().getFocusInfo().elementToFocus) {\n this.getContent().getFocusInfo().elementToFocus.tabIndex = 0;\n }\n };\n FocusStrategy.prototype.onClick = function (e, force) {\n var isContent = !isNullOrUndefined(closest(e.target, '.e-gridcontent'));\n var isHeader = !isNullOrUndefined(closest(e.target, '.e-gridheader'));\n isContent = isContent && isHeader ? !isContent : isContent;\n var isFrozen = !isNullOrUndefined(closest(e.target, '.e-frozencontent')) ||\n !isNullOrUndefined(closest(e.target, '.e-frozenheader'));\n if (!isContent && isNullOrUndefined(closest(e.target, '.e-gridheader')) ||\n e.target.classList.contains('e-content')) {\n return;\n }\n this.setActive(isContent, isFrozen);\n if (!isContent && isNullOrUndefined(closest(e.target, '.e-gridheader')) ||\n e.target.classList.contains('e-filtermenudiv')) {\n this.clearOutline();\n return;\n }\n var beforeArgs = { cancel: false, byKey: false, byClick: !isNullOrUndefined(e.target), clickArgs: e };\n this.parent.notify(event.beforeCellFocused, beforeArgs);\n if (beforeArgs.cancel || closest(e.target, '.e-inline-edit')) {\n return;\n }\n this.setActive(isContent, isFrozen);\n if (this.getContent()) {\n var returnVal = this.getContent().onClick(e, force);\n if (returnVal === false) {\n return;\n }\n this.focus();\n }\n };\n FocusStrategy.prototype.onKeyPress = function (e) {\n if (this.skipOn(e)) {\n return;\n }\n var beforeArgs = { cancel: false, byKey: true, byClick: false, keyArgs: e };\n this.parent.notify(event.beforeCellFocused, beforeArgs);\n if (beforeArgs.cancel) {\n return;\n }\n var bValue = this.getContent().matrix.current;\n this.currentInfo.outline = true;\n var swapInfo = this.getContent().jump(e.action, bValue);\n this.swap = swapInfo;\n if (swapInfo.swap) {\n this.setActive(!swapInfo.toHeader, swapInfo.toFrozen);\n this.getContent().matrix.current = this.getContent().getNextCurrent(bValue, swapInfo, this.active, e.action);\n this.prevIndexes = {};\n }\n this.setActiveByKey(e.action, this.getContent());\n var returnVal = this.getContent().onKeyPress(e);\n if (returnVal === false) {\n this.clearIndicator();\n return;\n }\n e.preventDefault();\n this.focus(e);\n };\n FocusStrategy.prototype.skipOn = function (e) {\n var target = e.target;\n if (!target) {\n return false;\n }\n if (this.currentInfo.skipAction) {\n this.clearIndicator();\n return true;\n }\n if (['pageUp', 'pageDown'].indexOf(e.action) > -1) {\n this.clearIndicator();\n return true;\n }\n return (e.action === 'delete'\n || (this.parent.editSettings.mode !== 'Batch' && (this.parent.isEdit || ['insert', 'f2'].indexOf(e.action) > -1))\n || (closest(document.activeElement, '.e-filterbarcell') !== null ||\n closest(document.activeElement, '#' + this.parent.element.id + '_searchbar') !== null\n && ['enter', 'leftArrow', 'rightArrow',\n 'shiftLeft', 'shiftRight', 'ctrlPlusA'].indexOf(e.action) > -1)\n || (closest(target, '.e-gridcontent') === null && closest(target, '.e-gridheader') === null)\n || (e.action === 'space' && (!target.classList.contains('e-gridchkbox') && closest(target, '.e-gridchkbox') === null\n && closest(target, '.e-headerchkcelldiv') === null)));\n };\n FocusStrategy.prototype.getFocusedElement = function () {\n return this.currentInfo.elementToFocus;\n };\n FocusStrategy.prototype.getContent = function () {\n return this.active || this.content;\n };\n FocusStrategy.prototype.setActive = function (content, isFrozen) {\n this.active = content ? isFrozen ? this.fContent : this.content :\n isFrozen ? this.fHeader : this.header;\n };\n FocusStrategy.prototype.setFocusedElement = function (element) {\n var _this = this;\n this.currentInfo.elementToFocus = element;\n setTimeout(function () { return _this.currentInfo.elementToFocus.focus(); }, 0);\n };\n FocusStrategy.prototype.focus = function (e) {\n this.removeFocus();\n this.addFocus(this.getContent().getFocusInfo(), e);\n };\n FocusStrategy.prototype.removeFocus = function (e) {\n if (!this.currentInfo.element) {\n return;\n }\n removeClass([this.currentInfo.element, this.currentInfo.elementToFocus], ['e-focused', 'e-focus']);\n this.currentInfo.element.tabIndex = -1;\n };\n FocusStrategy.prototype.addFocus = function (info, e) {\n this.currentInfo = info;\n this.currentInfo.outline = info.outline && !isNullOrUndefined(e);\n if (!info.element) {\n return;\n }\n var isFocused = info.elementToFocus.classList.contains('e-focus');\n if (isFocused) {\n return;\n }\n if (this.currentInfo.outline) {\n addClass([info.element], ['e-focused']);\n }\n addClass([info.elementToFocus], ['e-focus']);\n info.element.tabIndex = 0;\n if (!isFocused) {\n this.setFocusedElement(info.elementToFocus);\n }\n this.parent.notify(event.cellFocused, {\n element: info.elementToFocus,\n parent: info.element,\n indexes: this.getContent().matrix.current,\n byKey: !isNullOrUndefined(e),\n byClick: isNullOrUndefined(e),\n keyArgs: e,\n isJump: this.swap.swap,\n container: this.getContent().getInfo(e),\n outline: !isNullOrUndefined(e),\n swapInfo: this.swap\n });\n var _a = this.getContent().matrix.current, rowIndex = _a[0], cellIndex = _a[1];\n this.prevIndexes = { rowIndex: rowIndex, cellIndex: cellIndex };\n this.focusByClick = false;\n };\n FocusStrategy.prototype.refreshMatrix = function (content) {\n var _this = this;\n return function (e) {\n if (content && (e.args && e.args.isFrozen) && !_this.fContent) {\n _this.fContent = new FixedContentFocus(_this.parent);\n }\n else if (content && !_this.content) {\n _this.content = new ContentFocus(_this.parent);\n }\n if (!content && (e.args && e.args.isFrozen) && !_this.fHeader) {\n _this.fHeader = new FixedHeaderFocus(_this.parent);\n }\n else if (!content && !_this.header) {\n _this.header = new HeaderFocus(_this.parent);\n }\n var cFocus = content ? (e.args && e.args.isFrozen) ? _this.fContent : _this.content :\n (e.args && e.args.isFrozen) ? _this.fHeader : _this.header;\n var rows = content ? e.rows.slice(_this.parent.frozenRows) : e.rows;\n var updateRow = content ? e.rows.slice(0, _this.parent.frozenRows) : e.rows;\n var matrix = cFocus.matrix.generate(updateRow, cFocus.selector);\n cFocus.matrix.generate(rows, cFocus.selector);\n cFocus.generateRows(updateRow, { matrix: matrix, handlerInstance: (e.args && e.args.isFrozen) ? _this.fHeader : _this.header });\n if (!Browser.isDevice && !_this.focusByClick && e && e.args && e.args.requestType === 'paging') {\n _this.skipFocus = false;\n _this.parent.element.focus();\n }\n };\n };\n FocusStrategy.prototype.addEventListener = function () {\n var _this = this;\n if (this.parent.isDestroyed) {\n return;\n }\n EventHandler.add(this.parent.element, 'mousedown', this.focusCheck, this);\n EventHandler.add(this.parent.element, 'focus', this.onFocus, this);\n this.parent.element.addEventListener('focus', this.passiveHandler = function (e) { return _this.passiveFocus(e); }, true);\n EventHandler.add(this.parent.element, 'focusout', this.onBlur, this);\n this.parent.on(event.keyPressed, this.onKeyPress, this);\n this.parent.on(event.click, this.onClick, this);\n this.parent.on(event.contentReady, this.refreshMatrix(true), this);\n this.parent.on(event.headerRefreshed, this.refreshMatrix(), this);\n this.parent.on('close-edit', this.restoreFocus, this);\n ['start-edit', 'start-add'].forEach(function (evt) { return _this.parent.on(evt, _this.clearIndicator, _this); });\n ['sorting'].forEach(function (action) { return _this.parent.on(action + \"-complete\", _this.restoreFocus, _this); });\n this.parent.on(event.batchAdd, this.refreshMatrix(true), this);\n this.parent.on(event.batchCancel, this.refreshMatrix(true), this);\n this.parent.on(event.batchDelete, this.refreshMatrix(true), this);\n this.parent.on(event.detailDataBound, this.refreshMatrix(true), this);\n this.parent.on(event.onEmpty, this.refreshMatrix(true), this);\n this.parent.on(event.cellFocused, this.internalCellFocus, this);\n };\n FocusStrategy.prototype.removeEventListener = function () {\n var _this = this;\n if (this.parent.isDestroyed) {\n return;\n }\n EventHandler.remove(this.parent.element, 'mousedown', this.focusCheck);\n EventHandler.remove(this.parent.element, 'focus', this.onFocus);\n EventHandler.remove(this.parent.element, 'focusout', this.onBlur);\n this.parent.element.removeEventListener('focus', this.passiveHandler, true);\n this.parent.off(event.keyPressed, this.onKeyPress);\n this.parent.off(event.click, this.onClick);\n this.parent.off(event.contentReady, this.refreshMatrix(true));\n this.parent.off(event.headerRefreshed, this.refreshMatrix());\n this.parent.off('close-edit', this.restoreFocus);\n ['start-edit', 'start-add'].forEach(function (evt) { return _this.parent.off(evt, _this.clearOutline); });\n ['sorting'].forEach(function (action) { return _this.parent.off(action + \"-complete\", _this.restoreFocus); });\n this.parent.off(event.batchAdd, this.refreshMatrix(true));\n this.parent.off(event.batchDelete, this.refreshMatrix(true));\n this.parent.off(event.batchCancel, this.refreshMatrix(true));\n this.parent.off(event.detailDataBound, this.refreshMatrix(true));\n this.parent.off(event.onEmpty, this.refreshMatrix(true));\n this.parent.off(event.cellFocused, this.internalCellFocus);\n };\n FocusStrategy.prototype.destroy = function () {\n this.removeEventListener();\n };\n FocusStrategy.prototype.restoreFocus = function () {\n this.addFocus(this.getContent().getFocusInfo());\n };\n FocusStrategy.prototype.clearOutline = function () {\n this.getContent().matrix.current = this.getContent().matrix.get(0, -1, [0, 1], 'downArrow', this.getContent().validator());\n this.clearIndicator();\n };\n FocusStrategy.prototype.clearIndicator = function () {\n if (!this.currentInfo.element || !this.currentInfo.elementToFocus) {\n return;\n }\n removeClass([this.currentInfo.element, this.currentInfo.elementToFocus], ['e-focus', 'e-focused']);\n };\n FocusStrategy.prototype.getPrevIndexes = function () {\n var forget = this.forget;\n this.forget = false;\n return forget ? { rowIndex: null, cellIndex: null } : this.prevIndexes;\n };\n FocusStrategy.prototype.forgetPrevious = function () {\n this.forget = true;\n };\n FocusStrategy.prototype.setActiveByKey = function (action, active) {\n var _this = this;\n if (this.parent.frozenColumns === 0 && this.parent.frozenRows === 0) {\n return;\n }\n var info;\n var actions = {\n 'home': function () { return ({ toHeader: !info.isContent, toFrozen: true }); },\n 'end': function () { return ({ toHeader: !info.isContent, toFrozen: false }); },\n 'ctrlHome': function () { return ({ toHeader: true, toFrozen: _this.parent.frozenColumns !== 0 }); },\n 'ctrlEnd': function () { return ({ toHeader: false, toFrozen: false }); }\n };\n if (!(action in actions)) {\n return;\n }\n info = active.getInfo();\n var swap = actions[action]();\n this.setActive(!swap.toHeader, swap.toFrozen);\n this.getContent().matrix.current = active.matrix.current;\n };\n FocusStrategy.prototype.internalCellFocus = function (e) {\n if (!(e.byKey && e.container.isContent && e.keyArgs.action === 'enter'\n && (e.parent.classList.contains('e-detailcell') ||\n e.parent.classList.contains('e-unboundcell') || e.parent.classList.contains('e-templatecell')))) {\n return;\n }\n this.clearIndicator();\n var focusEle = this.getContent().getFocusable(this.getFocusedElement());\n this.setFocusedElement(focusEle);\n this.currentInfo.skipAction = true;\n };\n return FocusStrategy;\n}());\nexport { FocusStrategy };\n/**\n * Create matrix from row collection which act as mental model for cell navigation\n * @hidden\n */\nvar Matrix = /** @class */ (function () {\n function Matrix() {\n this.matrix = [];\n this.current = [];\n }\n Matrix.prototype.set = function (rowIndex, columnIndex, allow) {\n rowIndex = Math.max(0, Math.min(rowIndex, this.rows));\n columnIndex = Math.max(0, Math.min(columnIndex, this.columns));\n this.matrix[rowIndex] = this.matrix[rowIndex] || [];\n this.matrix[rowIndex][columnIndex] = allow ? 1 : 0;\n };\n Matrix.prototype.get = function (rowIndex, columnIndex, navigator, action, validator) {\n var tmp = columnIndex;\n if (rowIndex + navigator[0] < 0) {\n return [rowIndex, columnIndex];\n }\n rowIndex = Math.max(0, Math.min(rowIndex + navigator[0], this.rows));\n columnIndex = Math.max(0, Math.min(columnIndex + navigator[1], this.matrix[rowIndex].length - 1));\n if (tmp + navigator[1] > this.matrix[rowIndex].length - 1 && validator(rowIndex, columnIndex, action)) {\n return [rowIndex, tmp];\n }\n var first = this.first(this.matrix[rowIndex], columnIndex, navigator, true, action);\n columnIndex = first === null ? tmp : first;\n var val = getValue(rowIndex + \".\" + columnIndex, this.matrix);\n return this.inValid(val) || !validator(rowIndex, columnIndex, action) ?\n this.get(rowIndex, tmp, navigator, action, validator) : [rowIndex, columnIndex];\n };\n Matrix.prototype.first = function (vector, index, navigator, moveTo, action) {\n if (((index < 0 || index === vector.length) && this.inValid(vector[index])\n && (action !== 'upArrow' && action !== 'downArrow')) || !vector.some(function (v) { return v === 1; })) {\n return null;\n }\n return !this.inValid(vector[index]) ? index :\n this.first(vector, (['upArrow', 'downArrow', 'shiftUp', 'shiftDown'].indexOf(action) !== -1) ? moveTo ? 0 : ++index : index + navigator[1], navigator, false, action);\n };\n Matrix.prototype.select = function (rowIndex, columnIndex) {\n rowIndex = Math.max(0, Math.min(rowIndex, this.rows));\n columnIndex = Math.max(0, Math.min(columnIndex, this.matrix[rowIndex].length - 1));\n this.current = [rowIndex, columnIndex];\n };\n Matrix.prototype.generate = function (rows, selector) {\n var _this = this;\n this.rows = rows.length - 1;\n this.matrix = [];\n rows.forEach(function (row, rIndex) {\n var cells = row.cells.filter(function (c) { return c.isSpanned !== true; });\n _this.columns = Math.max(cells.length - 1, _this.columns | 0);\n cells.forEach(function (cell, cIndex) {\n _this.set(rIndex, cIndex, selector(row, cell));\n });\n });\n return this.matrix;\n };\n Matrix.prototype.inValid = function (value) {\n return value === 0 || value === undefined;\n };\n return Matrix;\n}());\nexport { Matrix };\n/**\n * @hidden\n */\nvar ContentFocus = /** @class */ (function () {\n function ContentFocus(parent) {\n var _this = this;\n this.matrix = new Matrix();\n this.parent = parent;\n this.keyActions = {\n 'rightArrow': [0, 1],\n 'tab': [0, 1],\n 'leftArrow': [0, -1],\n 'shiftTab': [0, -1],\n 'upArrow': [-1, 0],\n 'downArrow': [1, 0],\n 'shiftUp': [-1, 0],\n 'shiftDown': [1, 0],\n 'shiftRight': [0, 1],\n 'shiftLeft': [0, -1],\n 'enter': [1, 0],\n 'shiftEnter': [-1, 0]\n };\n this.indexesByKey = function (action) {\n var opt = {\n 'home': [_this.matrix.current[0], -1, 0, 1],\n 'end': [_this.matrix.current[0], _this.matrix.columns + 1, 0, -1],\n 'ctrlHome': [0, -1, 0, 1],\n 'ctrlEnd': [_this.matrix.rows, _this.matrix.columns + 1, 0, -1]\n };\n return opt[action] || null;\n };\n }\n ContentFocus.prototype.getTable = function () {\n return (this.parent.frozenColumns ?\n this.parent.getContent().querySelector('.e-movablecontent .e-table') :\n this.parent.getContentTable());\n };\n ContentFocus.prototype.onKeyPress = function (e) {\n var navigator = this.keyActions[e.action];\n var current = this.getCurrentFromAction(e.action, navigator, e.action in this.keyActions, e);\n if (!current) {\n return;\n }\n if ((['tab', 'shiftTab'].indexOf(e.action) > -1 && this.matrix.current || []).toString() === current.toString()) {\n if (current.toString() === [this.matrix.rows, this.matrix.columns].toString() ||\n current.toString() === [0, 0].toString()) {\n return false;\n }\n }\n this.matrix.select(current[0], current[1]);\n };\n ContentFocus.prototype.getCurrentFromAction = function (action, navigator, isPresent, e) {\n if (navigator === void 0) { navigator = [0, 0]; }\n if (!isPresent && !this.indexesByKey(action)) {\n return null;\n }\n if (!this.shouldFocusChange(e)) {\n return this.matrix.current;\n }\n var _a = this.indexesByKey(action) || this.matrix.current.concat(navigator), rowIndex = _a[0], cellIndex = _a[1], rN = _a[2], cN = _a[3];\n var current = this.matrix.get(rowIndex, cellIndex, [rN, cN], action, this.validator());\n return current;\n };\n ContentFocus.prototype.onClick = function (e, force) {\n var target = e.target;\n target = (target.classList.contains('e-rowcell') ? target : closest(target, 'td'));\n target = target ? target : closest(e.target, 'td.e-detailrowcollapse')\n || closest(e.target, 'td.e-detailrowexpand');\n target = closest(e.target, 'td.e-detailcell') ?\n isNullOrUndefined(closest(closest(e.target, '.e-grid'), 'td.e-detailcell')) ? null : target : target;\n target = target && closest(target, 'table').classList.contains('e-table') ? target : null;\n if (!target) {\n return false;\n }\n var _a = [target.parentElement.rowIndex, target.cellIndex], rowIndex = _a[0], cellIndex = _a[1];\n var _b = this.matrix.current, oRowIndex = _b[0], oCellIndex = _b[1];\n var val = getValue(rowIndex + \".\" + cellIndex, this.matrix.matrix);\n if (this.matrix.inValid(val) || (!force && oRowIndex === rowIndex && oCellIndex === cellIndex)) {\n return false;\n }\n this.matrix.select(rowIndex, cellIndex);\n };\n ContentFocus.prototype.getFocusInfo = function () {\n var info = {};\n var _a = this.matrix.current, _b = _a[0], rowIndex = _b === void 0 ? 0 : _b, _c = _a[1], cellIndex = _c === void 0 ? 0 : _c;\n this.matrix.current = [rowIndex, cellIndex];\n info.element = this.getTable().rows[rowIndex].cells[cellIndex];\n if (!info.element) {\n return info;\n }\n info.elementToFocus = !info.element.classList.contains('e-unboundcell') && !info.element.classList.contains('e-detailcell')\n && !info.element.classList.contains('e-templatecell') ? this.getFocusable(info.element) : info.element;\n info.outline = true;\n return info;\n };\n ContentFocus.prototype.getFocusable = function (element) {\n var query = 'button, [href], input:not([type=\"hidden\"]), select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n if (this.parent.isEdit) {\n query = 'input:not([type=\"hidden\"]), select:not([aria-hidden=\"true\"]), textarea';\n }\n var child = [].slice.call(element.querySelectorAll(query));\n /* Select the first focusable child element\n * if no child found then select the cell itself.\n * if Grid is in editable state, check for editable control inside child.\n */\n return child.length ? child[0] : element;\n };\n ContentFocus.prototype.selector = function (row, cell) {\n var types = [CellType.Expand, CellType.GroupCaption, CellType.CaptionSummary, CellType.GroupSummary];\n return ((row.isDataRow && cell.visible && (cell.isDataCell || cell.isTemplate))\n || (row.isDataRow && cell.cellType === CellType.DetailExpand)\n || (!row.isDataRow && types.indexOf(cell.cellType) > -1)\n || (cell.column && cell.column.type === 'checkbox')\n || (cell.cellType === CellType.CommandColumn))\n && !(row.edit === 'delete' && row.isDirty);\n };\n ContentFocus.prototype.jump = function (action, current) {\n var frozenSwap = this.parent.frozenColumns > 0 &&\n ((action === 'leftArrow' || action === 'shiftTab') && current[1] === 0);\n var enterFrozen = this.parent.frozenRows !== 0 && action === 'shiftEnter';\n var info = {\n swap: ((action === 'upArrow' || enterFrozen) && current[0] === 0) || frozenSwap,\n toHeader: (action === 'upArrow' || enterFrozen) && current[0] === 0,\n toFrozen: frozenSwap\n };\n return info;\n };\n ContentFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n if (previous === void 0) { previous = []; }\n var current = [];\n if (action === 'rightArrow' || action === 'tab') {\n current[0] = previous[0];\n current[1] = -1;\n }\n else if (action === 'downArrow' || action === 'enter') {\n current[0] = -1;\n current[1] = previous[1];\n }\n return current;\n };\n ContentFocus.prototype.generateRows = function (rows, optionals) {\n var matrix = optionals.matrix, handlerInstance = optionals.handlerInstance;\n var len = handlerInstance.matrix.matrix.length;\n var defaultLen = this.parent.allowFiltering && this.parent.filterSettings.type === 'FilterBar' ? len + 1 : len;\n handlerInstance.matrix.matrix = handlerInstance.matrix.matrix.slice(0, defaultLen); //Header matrix update.\n handlerInstance.matrix.rows = defaultLen;\n (_a = handlerInstance.matrix.matrix).push.apply(_a, matrix);\n handlerInstance.matrix.rows += matrix.length;\n var _a;\n };\n ContentFocus.prototype.getInfo = function (e) {\n var info = this.getFocusInfo();\n var _a = this.matrix.current, rIndex = _a[0], cIndex = _a[1];\n var isData = info.element.classList.contains('e-rowcell');\n var isSelectable = isData || (e && e.action !== 'enter' && (info.element.classList.contains('e-detailrowcollapse')\n || info.element.classList.contains('e-detailrowexpand')));\n var _b = [Math.min(parseInt(info.element.parentElement.getAttribute('aria-rowindex'), 10), rIndex),\n Math.min(parseInt(info.element.getAttribute('aria-colindex'), 10), cIndex)], rowIndex = _b[0], cellIndex = _b[1];\n return { isContent: true, isDataCell: isData, indexes: [rowIndex, cellIndex], isSelectable: isSelectable };\n };\n ContentFocus.prototype.validator = function () {\n var table = this.getTable();\n return function (rowIndex, cellIndex, action) {\n var cell = table.rows[rowIndex].cells[cellIndex];\n if (action === 'enter' || action === 'shiftEnter') {\n return cell.classList.contains('e-rowcell');\n }\n if ((action === 'shiftUp' || action === 'shiftDown') && cell.classList.contains('e-rowcell')) {\n return true;\n }\n else if (action !== 'shiftUp' && action !== 'shiftDown') {\n return cell.getBoundingClientRect().width !== 0;\n }\n return false;\n };\n };\n ContentFocus.prototype.shouldFocusChange = function (e) {\n var _a = this.matrix.current, _b = _a[0], rIndex = _b === void 0 ? -1 : _b, _c = _a[1], cIndex = _c === void 0 ? -1 : _c;\n if (rIndex < 0 || cIndex < 0) {\n return true;\n }\n var cell = getValue(rIndex + \".cells.\" + cIndex, this.getTable().rows);\n if (!cell) {\n return true;\n }\n return e.action === 'enter' || e.action === 'shiftEnter' ?\n cell.classList.contains('e-rowcell') && !cell.classList.contains('e-unboundcell')\n && !cell.classList.contains('e-templatecell') && !cell.classList.contains('e-detailcell') : true;\n };\n return ContentFocus;\n}());\nexport { ContentFocus };\n/**\n * @hidden\n */\nvar HeaderFocus = /** @class */ (function (_super) {\n __extends(HeaderFocus, _super);\n function HeaderFocus(parent) {\n return _super.call(this, parent) || this;\n }\n HeaderFocus.prototype.getTable = function () {\n return (this.parent.frozenColumns ? this.parent.getHeaderContent().querySelector('.e-movableheader .e-table') :\n this.parent.getHeaderTable());\n };\n HeaderFocus.prototype.onClick = function (e) {\n var target = e.target;\n target = (target.classList.contains('e-headercell') ? target : closest(target, 'th'));\n if (!target && this.parent.frozenRows !== 0) {\n target = (e.target.classList.contains('e-rowcell') ? e.target :\n closest(e.target, 'td'));\n }\n if (!target) {\n return;\n }\n var _a = [target.parentElement.rowIndex, target.cellIndex], rowIndex = _a[0], cellIndex = _a[1];\n var val = getValue(rowIndex + \".\" + cellIndex, this.matrix.matrix);\n if (this.matrix.inValid(val)) {\n return false;\n }\n this.matrix.select(target.parentElement.rowIndex, target.cellIndex);\n };\n HeaderFocus.prototype.getFocusInfo = function () {\n var info = {};\n var _a = this.matrix.current, _b = _a[0], rowIndex = _b === void 0 ? 0 : _b, _c = _a[1], cellIndex = _c === void 0 ? 0 : _c;\n info.element = this.getTable().rows[rowIndex].cells[cellIndex];\n info.elementToFocus = this.getFocusable(info.element);\n info.outline = !info.element.classList.contains('e-filterbarcell');\n return info;\n };\n HeaderFocus.prototype.selector = function (row, cell) {\n return (cell.visible && (cell.column.field !== undefined || cell.isTemplate)) || cell.column.type === 'checkbox' ||\n cell.cellType === CellType.StackedHeader;\n };\n HeaderFocus.prototype.jump = function (action, current) {\n var frozenSwap = this.parent.frozenColumns > 0 &&\n (action === 'leftArrow' || action === 'shiftTab') && current[1] === 0;\n var enterFrozen = this.parent.frozenRows !== 0 && action === 'enter';\n return {\n swap: ((action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1) ||\n frozenSwap,\n toHeader: frozenSwap,\n toFrozen: frozenSwap\n };\n };\n HeaderFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n if (previous === void 0) { previous = []; }\n var current = [];\n if (action === 'upArrow' || action === 'shiftEnter') {\n current[0] = this.matrix.matrix.length;\n current[1] = previous[1];\n }\n else if (action === 'rightArrow' || action === 'tab') {\n current[0] = previous[0];\n current[1] = -1;\n }\n return current;\n };\n HeaderFocus.prototype.generateRows = function (rows) {\n var _this = this;\n var length = this.matrix.matrix.length;\n if (this.parent.allowFiltering && this.parent.filterSettings.type === 'FilterBar') {\n this.matrix.rows = ++this.matrix.rows;\n rows[0].cells.forEach(function (cell, cIndex) {\n return _this.matrix.set(length, cIndex, cell.visible && cell.column.allowFiltering !== false);\n });\n }\n };\n HeaderFocus.prototype.getInfo = function (e) {\n return extend(_super.prototype.getInfo.call(this, e), { isContent: false, isHeader: true });\n };\n HeaderFocus.prototype.validator = function () {\n return function () { return true; };\n };\n HeaderFocus.prototype.shouldFocusChange = function (e) {\n var _a = this.matrix.current, rIndex = _a[0], cIndex = _a[1];\n if (rIndex < 0 || cIndex < 0) {\n return true;\n }\n var cell = getValue(rIndex + \".cells.\" + cIndex, this.getTable().rows);\n if (!cell) {\n return true;\n }\n return e.action === 'enter' || e.action === 'altDownArrow' ? !cell.classList.contains('e-headercell') : true;\n };\n return HeaderFocus;\n}(ContentFocus));\nexport { HeaderFocus };\nvar FixedContentFocus = /** @class */ (function (_super) {\n __extends(FixedContentFocus, _super);\n function FixedContentFocus() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n FixedContentFocus.prototype.getTable = function () {\n return this.parent.getContent().querySelector('.e-frozencontent .e-table');\n };\n FixedContentFocus.prototype.jump = function (action, current) {\n var enterFrozen = this.parent.frozenRows !== 0 && action === 'shiftEnter';\n return {\n swap: (action === 'upArrow' || enterFrozen) && current[0] === 0\n || ((action === 'tab' || action === 'rightArrow') && current[1] === this.matrix.columns),\n toHeader: (action === 'upArrow' || enterFrozen) && current[0] === 0,\n toFrozen: (action === 'upArrow' || enterFrozen) && current[0] === 0\n };\n };\n FixedContentFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n if (previous === void 0) { previous = []; }\n var current = [];\n if (action === 'leftArrow' || action === 'shiftTab') {\n current[0] = previous[0];\n current[1] = active.matrix.columns + 1;\n }\n else if (action === 'downArrow' || action === 'enter') {\n current[0] = -1;\n current[1] = previous[1];\n }\n return current;\n };\n return FixedContentFocus;\n}(ContentFocus));\nexport { FixedContentFocus };\nvar FixedHeaderFocus = /** @class */ (function (_super) {\n __extends(FixedHeaderFocus, _super);\n function FixedHeaderFocus() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n FixedHeaderFocus.prototype.jump = function (action, current) {\n var enterFrozen = this.parent.frozenRows !== 0 && action === 'enter';\n return {\n swap: (action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1\n || ((action === 'rightArrow' || action === 'tab') && current[1] === this.matrix.columns),\n toHeader: (action === 'rightArrow' || action === 'tab') && current[1] === this.matrix.columns,\n toFrozen: (action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1\n };\n };\n FixedHeaderFocus.prototype.getTable = function () {\n return (this.parent.getHeaderContent().querySelector('.e-frozenheader .e-table'));\n };\n FixedHeaderFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n if (previous === void 0) { previous = []; }\n var current = [];\n if (action === 'leftArrow' || action === 'shiftTab') {\n current[0] = previous[0];\n current[1] = active.matrix.columns + 1;\n }\n else if (action === 'upArrow' || action === 'shiftEnter') {\n current[0] = this.matrix.matrix.length;\n current[1] = previous[1];\n }\n return current;\n };\n return FixedHeaderFocus;\n}(HeaderFocus));\nexport { FixedHeaderFocus };\n/** @hidden */\nvar SearchBox = /** @class */ (function () {\n function SearchBox(searchBox) {\n this.searchBox = searchBox;\n }\n SearchBox.prototype.searchFocus = function (args) {\n args.target.parentElement.classList.add('e-input-focus');\n };\n SearchBox.prototype.searchBlur = function (args) {\n args.target.parentElement.classList.remove('e-input-focus');\n };\n SearchBox.prototype.wireEvent = function () {\n if (this.searchBox) {\n EventHandler.add(this.searchBox, 'focus', this.searchFocus, this);\n EventHandler.add(this.searchBox, 'blur', this.searchBlur, this);\n }\n };\n SearchBox.prototype.unWireEvent = function () {\n if (this.searchBox) {\n EventHandler.remove(this.searchBox, 'focus', this.searchFocus);\n EventHandler.remove(this.searchBox, 'blur', this.searchBlur);\n }\n };\n return SearchBox;\n}());\nexport { SearchBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the paging behavior of the Grid.\n */\nvar PageSettings = /** @class */ (function (_super) {\n __extends(PageSettings, _super);\n function PageSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(12)\n ], PageSettings.prototype, \"pageSize\", void 0);\n __decorate([\n Property(8)\n ], PageSettings.prototype, \"pageCount\", void 0);\n __decorate([\n Property(1)\n ], PageSettings.prototype, \"currentPage\", void 0);\n __decorate([\n Property()\n ], PageSettings.prototype, \"totalRecordsCount\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"enableQueryString\", void 0);\n __decorate([\n Property(false)\n ], PageSettings.prototype, \"pageSizes\", void 0);\n __decorate([\n Property(null)\n ], PageSettings.prototype, \"template\", void 0);\n return PageSettings;\n}(ChildProperty));\nexport { PageSettings };\n","var __assign = (this && this.__assign) || Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n};\nimport { Browser, EventHandler } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, isUndefined, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { remove, createElement, closest } from '@syncfusion/ej2-base';\nimport { Query } from '@syncfusion/ej2-data';\nimport { setCssInGridPopUp, getPosition, parentsUntil, addRemoveActiveClasses, removeAddCboxClasses } from '../base/util';\nimport * as events from '../base/constant';\nimport { RenderType } from '../base/enum';\n/**\n * The `Selection` module is used to handle cell and row selection.\n */\nvar Selection = /** @class */ (function () {\n /**\n * Constructor for the Grid selection module\n * @hidden\n */\n function Selection(parent, selectionSettings, locator) {\n //Internal variables \n /**\n * @hidden\n */\n this.selectedRowIndexes = [];\n /**\n * @hidden\n */\n this.selectedRowCellIndexes = [];\n /**\n * @hidden\n */\n this.selectedRecords = [];\n this.preventFocus = false;\n this.isMultiShiftRequest = false;\n this.isMultiCtrlRequest = false;\n this.enableSelectMultiTouch = false;\n this.selectedRowState = {};\n this.totalRecordsCount = 0;\n this.chkAllCollec = [];\n this.isCheckedOnAdd = false;\n this.persistSelectedData = [];\n this.isCancelDeSelect = false;\n this.isPreventCellSelect = false;\n this.parent = parent;\n this.selectionSettings = selectionSettings;\n this.factory = locator.getService('rendererFactory');\n this.focus = locator.getService('focus');\n this.addEventListener();\n }\n Selection.prototype.initializeSelection = function () {\n EventHandler.add(this.parent.getContent(), 'mousedown', this.mouseDownHandler, this);\n };\n /**\n * The function used to trigger onActionBegin\n * @return {void}\n * @hidden\n */\n Selection.prototype.onActionBegin = function (args, type) {\n this.parent.trigger(type, this.fDataUpdate(args));\n };\n Selection.prototype.fDataUpdate = function (args) {\n if (args.cellIndex || args.rowIndex) {\n var rowObj = this.getRowObj(isNullOrUndefined(args.rowIndex) ? isNullOrUndefined(args.cellIndex) ?\n this.currentIndex : args.cellIndex.rowIndex : args.rowIndex);\n args.foreignKeyData = rowObj.foreignKeyData;\n }\n return args;\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n Selection.prototype.onActionComplete = function (args, type) {\n this.parent.trigger(type, this.fDataUpdate(args));\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Selection.prototype.getModuleName = function () {\n return 'selection';\n };\n /**\n * To destroy the selection\n * @return {void}\n * @hidden\n */\n Selection.prototype.destroy = function () {\n this.hidePopUp();\n this.clearSelection();\n this.removeEventListener();\n EventHandler.remove(this.parent.getContent(), 'mousedown', this.mouseDownHandler);\n };\n Selection.prototype.isEditing = function () {\n return (this.parent.editSettings.mode === 'Normal' || (this.parent.editSettings.mode === 'Batch' &&\n this.parent.editModule.formObj && !this.parent.editModule.formObj.validate())) &&\n this.parent.isEdit && !this.parent.isPersistSelection;\n };\n Selection.prototype.getSelectedMovableRow = function (index) {\n var gObj = this.parent;\n if (gObj.getFrozenColumns()) {\n return gObj.getMovableRowByIndex(index);\n }\n return null;\n };\n /**\n * Selects a row by the given index.\n * @param {number} index - Defines the row index.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @return {void}\n */\n Selection.prototype.selectRow = function (index, isToggle) {\n var gObj = this.parent;\n var selectedRow = gObj.getRowByIndex(index);\n var selectedMovableRow = this.getSelectedMovableRow(index);\n var selectData = gObj.getCurrentViewRecords()[index];\n if (!this.isRowType() || !selectedRow || this.isEditing()) {\n // if (this.isEditing()) {\n // gObj.selectedRowIndex = index;\n // }\n return;\n }\n var isRowSelected = selectedRow.hasAttribute('aria-selected');\n isToggle = !isToggle ? isToggle : index === this.prevRowIndex && isRowSelected;\n var args;\n var can = 'cancel';\n if (!isToggle) {\n args = {\n data: selectData, rowIndex: index, isCtrlPressed: this.isMultiCtrlRequest,\n isShiftPressed: this.isMultiShiftRequest, row: selectedRow,\n previousRow: gObj.getRows()[this.prevRowIndex], previousRowIndex: this.prevRowIndex, target: this.target,\n cancel: false\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionBegin(args, events.rowSelecting);\n }\n if (!isNullOrUndefined(args) && args[can] === true) {\n return;\n }\n this.clearRow();\n if (!isToggle) {\n this.updateRowSelection(selectedRow, index);\n if (gObj.getFrozenColumns()) {\n this.updateRowSelection(selectedMovableRow, index);\n }\n gObj.selectedRowIndex = index;\n }\n this.updateRowProps(index);\n if (!isToggle) {\n args = {\n data: selectData, rowIndex: index,\n row: selectedRow, previousRow: gObj.getRows()[this.prevRowIndex],\n previousRowIndex: this.prevRowIndex, target: this.target\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionComplete(args, events.rowSelected);\n }\n };\n Selection.prototype.addMovableArgs = function (targetObj, mRow) {\n if (this.parent.getFrozenColumns()) {\n var mObj = { mRow: mRow, previousMovRow: this.parent.getMovableRows()[this.prevRowIndex] };\n targetObj = __assign({}, targetObj, mObj);\n }\n return targetObj;\n };\n /**\n * Selects a range of rows from start and end row indexes.\n * @param {number} startIndex - Specifies the start row index.\n * @param {number} endIndex - Specifies the end row index.\n * @return {void}\n */\n Selection.prototype.selectRowsByRange = function (startIndex, endIndex) {\n this.selectRows(this.getCollectionFromIndexes(startIndex, endIndex));\n this.parent.selectedRowIndex = endIndex;\n };\n /**\n * Selects a collection of rows by index.\n * @param {number[]} rowIndexes - Specifies an array of row indexes.\n * @return {void}\n */\n Selection.prototype.selectRows = function (rowIndexes) {\n var gObj = this.parent;\n var rowIndex = !this.isSingleSel() ? rowIndexes[0] : rowIndexes[rowIndexes.length - 1];\n var selectedRow = gObj.getRowByIndex(rowIndex);\n var selectedMovableRow = this.getSelectedMovableRow(rowIndex);\n var frzCols = gObj.getFrozenColumns();\n var selectedData = gObj.getCurrentViewRecords()[rowIndexes[0]];\n var can = 'cancel';\n if (!this.isRowType() || this.isEditing()) {\n return;\n }\n var args = {\n rowIndexes: rowIndexes, row: selectedRow, rowIndex: rowIndex, target: this.target,\n prevRow: gObj.getRows()[this.prevRowIndex], previousRowIndex: this.prevRowIndex,\n isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest,\n data: selectedData, cancel: false\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionBegin(args, events.rowSelecting);\n if (!isNullOrUndefined(args) && args[can] === true) {\n return;\n }\n this.clearRow();\n if (!this.isSingleSel()) {\n for (var _i = 0, rowIndexes_1 = rowIndexes; _i < rowIndexes_1.length; _i++) {\n var rowIdx = rowIndexes_1[_i];\n this.updateRowSelection(gObj.getRowByIndex(rowIdx), rowIdx);\n if (frzCols) {\n this.updateRowSelection(gObj.getMovableRowByIndex(rowIdx), rowIdx);\n }\n this.updateRowProps(rowIndex);\n }\n }\n else {\n this.updateRowSelection(gObj.getRowByIndex(rowIndex), rowIndex);\n if (frzCols) {\n this.updateRowSelection(gObj.getMovableRowByIndex(rowIndex), rowIndex);\n }\n this.updateRowProps(rowIndex);\n }\n args = {\n rowIndexes: rowIndexes, row: selectedRow, rowIndex: rowIndex, target: this.target,\n prevRow: gObj.getRows()[this.prevRowIndex], previousRowIndex: this.prevRowIndex,\n data: selectedData\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionComplete(args, events.rowSelected);\n };\n /**\n * Select rows with existing row selection by passing row indexes.\n * @param {number} startIndex - Specifies the row indexes.\n * @return {void}\n * @hidden\n */\n Selection.prototype.addRowsToSelection = function (rowIndexes) {\n var gObj = this.parent;\n var can = 'cancel';\n var selectedRow = !this.isSingleSel() ? gObj.getRowByIndex(rowIndexes[0]) :\n gObj.getRowByIndex(rowIndexes[rowIndexes.length - 1]);\n var selectedMovableRow = !this.isSingleSel() ? this.getSelectedMovableRow(rowIndexes[0]) :\n this.getSelectedMovableRow(rowIndexes[rowIndexes.length - 1]);\n var frzCols = gObj.getFrozenColumns();\n if (!this.isRowType() || this.isEditing()) {\n return;\n }\n var args;\n for (var _i = 0, rowIndexes_2 = rowIndexes; _i < rowIndexes_2.length; _i++) {\n var rowIndex = rowIndexes_2[_i];\n var rowObj = this.getRowObj(rowIndex);\n var isUnSelected = this.selectedRowIndexes.indexOf(rowIndex) > -1;\n gObj.selectedRowIndex = rowIndex;\n if (isUnSelected) {\n this.rowDeselect(events.rowDeselecting, [rowIndex], [rowObj.data], [selectedRow], [rowObj.foreignKeyData]);\n this.selectedRowIndexes.splice(this.selectedRowIndexes.indexOf(rowIndex), 1);\n this.selectedRecords.splice(this.selectedRecords.indexOf(selectedRow), 1);\n selectedRow.removeAttribute('aria-selected');\n this.addRemoveClassesForRow(selectedRow, false, null, 'e-selectionbackground', 'e-active');\n if (selectedMovableRow) {\n this.selectedRecords.splice(this.selectedRecords.indexOf(selectedMovableRow), 1);\n selectedMovableRow.removeAttribute('aria-selected');\n this.addRemoveClassesForRow(selectedMovableRow, false, null, 'e-selectionbackground', 'e-active');\n }\n this.rowDeselect(events.rowDeselected, [rowIndex], [rowObj.data], [selectedRow], [rowObj.foreignKeyData], [selectedMovableRow]);\n }\n else {\n args = {\n data: rowObj.data, rowIndex: rowIndex, row: selectedRow, target: this.target,\n prevRow: gObj.getRows()[this.prevRowIndex], previousRowIndex: this.prevRowIndex,\n isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest,\n foreignKeyData: rowObj.foreignKeyData, cancel: false\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionBegin(args, events.rowSelecting);\n if (!isNullOrUndefined(args) && args[can] === true) {\n return;\n }\n if (this.isSingleSel()) {\n this.clearRow();\n }\n this.updateRowSelection(selectedRow, rowIndex);\n if (frzCols) {\n this.updateRowSelection(selectedMovableRow, rowIndex);\n }\n }\n this.updateRowProps(rowIndex);\n if (!isUnSelected) {\n args = {\n data: rowObj.data, rowIndex: rowIndex, row: selectedRow, target: this.target,\n prevRow: gObj.getRows()[this.prevRowIndex], previousRowIndex: this.prevRowIndex,\n foreignKeyData: rowObj.foreignKeyData\n };\n args = this.addMovableArgs(args, selectedMovableRow);\n this.onActionComplete(args, events.rowSelected);\n }\n if (this.isSingleSel()) {\n break;\n }\n }\n };\n Selection.prototype.getCollectionFromIndexes = function (startIndex, endIndex) {\n var indexes = [];\n var _a = (startIndex < endIndex) ?\n { i: startIndex, max: endIndex } : { i: endIndex, max: startIndex }, i = _a.i, max = _a.max;\n for (; i <= max; i++) {\n indexes.push(i);\n }\n if (startIndex > endIndex) {\n indexes.reverse();\n }\n return indexes;\n };\n Selection.prototype.clearRow = function () {\n this.clearRowSelection();\n this.selectedRowIndexes = [];\n this.selectedRecords = [];\n this.parent.selectedRowIndex = -1;\n if (this.isSingleSel() && this.parent.isPersistSelection) {\n this.selectedRowState = {};\n }\n };\n Selection.prototype.updateRowProps = function (startIndex) {\n this.prevRowIndex = startIndex;\n this.isRowSelected = this.selectedRowIndexes.length && true;\n };\n Selection.prototype.updatePersistCollection = function (selectedRow, chkState) {\n if (this.parent.isPersistSelection && !isNullOrUndefined(selectedRow)) {\n var rowObj = this.getRowObj(selectedRow);\n var pKey = rowObj.data ? rowObj.data[this.primaryKey] : null;\n if (pKey === null) {\n return;\n }\n rowObj.isSelected = chkState;\n if (chkState) {\n this.selectedRowState[pKey] = chkState;\n if (this.persistSelectedData.indexOf(rowObj.data) < 0) {\n this.persistSelectedData.push(rowObj.data);\n }\n }\n else {\n delete (this.selectedRowState[pKey]);\n if (this.persistSelectedData.indexOf(rowObj.data) >= 0) {\n this.persistSelectedData.splice(this.persistSelectedData.indexOf(rowObj.data), 1);\n }\n }\n }\n };\n Selection.prototype.updateCheckBoxes = function (row, chkState) {\n if (!isNullOrUndefined(row)) {\n var chkBox = row.querySelector('.e-checkselect');\n if (!isNullOrUndefined(chkBox)) {\n removeAddCboxClasses(chkBox.nextElementSibling, chkState);\n if (isNullOrUndefined(this.checkedTarget) || (!isNullOrUndefined(this.checkedTarget)\n && !this.checkedTarget.classList.contains('e-checkselectall'))) {\n this.setCheckAllState();\n }\n }\n }\n };\n Selection.prototype.updateRowSelection = function (selectedRow, startIndex) {\n if (!selectedRow) {\n return;\n }\n this.selectedRowIndexes.push(startIndex);\n var len = this.selectedRowIndexes.length;\n if (this.parent.getFrozenColumns() && len > 1) {\n if ((this.selectedRowIndexes[len - 2] === this.selectedRowIndexes[len - 1])) {\n this.selectedRowIndexes.pop();\n }\n }\n this.selectedRecords.push(selectedRow);\n selectedRow.setAttribute('aria-selected', 'true');\n this.updatePersistCollection(selectedRow, true);\n this.updateCheckBoxes(selectedRow, true);\n this.addRemoveClassesForRow(selectedRow, true, null, 'e-selectionbackground', 'e-active');\n if (!this.preventFocus) {\n var target = this.focus.getPrevIndexes().cellIndex ?\n selectedRow.cells[this.focus.getPrevIndexes().cellIndex] :\n selectedRow.querySelector('.e-selectionbackground:not(.e-hide)');\n if (!target) {\n return;\n }\n this.focus.onClick({ target: target }, true);\n }\n };\n /**\n * Deselects the currently selected rows and cells.\n * @return {void}\n */\n Selection.prototype.clearSelection = function () {\n if (!this.parent.isPersistSelection || (this.parent.isPersistSelection && !this.parent.isEdit) ||\n (!isNullOrUndefined(this.checkedTarget) && this.checkedTarget.classList.contains('e-checkselectall'))) {\n var span = this.parent.element.querySelector('.e-gridpopup').querySelector('span');\n if (span.classList.contains('e-rowselect')) {\n span.classList.remove('e-spanclicked');\n }\n this.clearRowSelection();\n this.clearCellSelection();\n this.enableSelectMultiTouch = false;\n }\n };\n /**\n * Deselects the currently selected rows.\n * @return {void}\n */\n Selection.prototype.clearRowSelection = function () {\n var _this = this;\n if (this.isRowSelected) {\n var gObj = this.parent;\n var rows = this.parent.getDataRows();\n var data = [];\n var row = [];\n var mRow = [];\n var rowIndex = [];\n var frzCols = gObj.getFrozenColumns();\n var foreignKeyData = [];\n var currentViewData = this.parent.getCurrentViewRecords();\n for (var i = 0, len = this.selectedRowIndexes.length; i < len; i++) {\n var currentRow = this.parent.getDataRows()[this.selectedRowIndexes[i]];\n var rowObj = this.getRowObj(currentRow);\n if (rowObj) {\n data.push(rowObj.data);\n row.push(currentRow);\n rowIndex.push(this.selectedRowIndexes[i]);\n foreignKeyData.push(rowObj.foreignKeyData);\n }\n if (frzCols) {\n mRow.push(gObj.getMovableRows()[this.selectedRowIndexes[i]]);\n }\n }\n this.rowDeselect(events.rowDeselecting, rowIndex, data, row, foreignKeyData, mRow);\n if (this.isCancelDeSelect === true) {\n return;\n }\n rows.filter(function (record) { return record.hasAttribute('aria-selected'); }).forEach(function (ele) {\n ele.removeAttribute('aria-selected');\n _this.addRemoveClassesForRow(ele, false, true, 'e-selectionbackground', 'e-active');\n _this.updatePersistCollection(ele, false);\n _this.updateCheckBoxes(ele);\n });\n for (var i = 0, len = this.selectedRowIndexes.length; i < len; i++) {\n var movableRow = this.getSelectedMovableRow(this.selectedRowIndexes[i]);\n if (movableRow) {\n movableRow.removeAttribute('aria-selected');\n this.addRemoveClassesForRow(movableRow, false, true, 'e-selectionbackground', 'e-active');\n this.updatePersistCollection(movableRow, false);\n }\n }\n this.selectedRowIndexes = [];\n this.selectedRecords = [];\n this.isRowSelected = false;\n this.parent.selectedRowIndex = -1;\n this.rowDeselect(events.rowDeselected, rowIndex, data, row, foreignKeyData, mRow);\n }\n };\n Selection.prototype.rowDeselect = function (type, rowIndex, data, row, foreignKeyData, mRow) {\n var cancl = 'cancel';\n this.updatePersistCollection(row[0], false);\n var rowDeselectObj = { rowIndex: rowIndex, data: data, row: row, foreignKeyData: foreignKeyData, cancel: false };\n this.parent.trigger(type, this.parent.getFrozenColumns() ? __assign({}, rowDeselectObj, { mRow: mRow }) : rowDeselectObj);\n this.isCancelDeSelect = rowDeselectObj[cancl];\n this.updateCheckBoxes(row[0]);\n };\n Selection.prototype.getRowObj = function (row) {\n if (row === void 0) { row = this.currentIndex; }\n if (isNullOrUndefined(row)) {\n return {};\n }\n if (typeof row === 'number') {\n row = this.parent.getRowByIndex(row);\n }\n if (row) {\n return this.parent.getRowObjectFromUID(row.getAttribute('data-uid')) || {};\n }\n return {};\n };\n Selection.prototype.getSelectedMovableCell = function (cellIndex) {\n var gObj = this.parent;\n var frzCols = gObj.getFrozenColumns();\n if (frzCols) {\n if (cellIndex.cellIndex >= frzCols) {\n return gObj.getMovableCellFromIndex(cellIndex.rowIndex, this.getColIndex(cellIndex.rowIndex, cellIndex.cellIndex));\n }\n return null;\n }\n return null;\n };\n /**\n * Selects a cell by the given index.\n * @param {IIndex} cellIndex - Defines the row and column indexes.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @return {void}\n */\n Selection.prototype.selectCell = function (cellIndex, isToggle) {\n if (!this.isCellType()) {\n return;\n }\n var gObj = this.parent;\n var selectedCell = this.getSelectedMovableCell(cellIndex);\n if (!selectedCell) {\n selectedCell = gObj.getCellFromIndex(cellIndex.rowIndex, this.getColIndex(cellIndex.rowIndex, cellIndex.cellIndex));\n }\n var selectedTable;\n var cIdx;\n this.currentIndex = cellIndex.rowIndex;\n var args;\n var cncl = 'cancel';\n var selectedData = gObj.getCurrentViewRecords()[this.currentIndex];\n if (!this.isCellType() || !selectedCell || this.isEditing()) {\n return;\n }\n var isCellSelected = selectedCell.classList.contains('e-cellselectionbackground');\n isToggle = !isToggle ? isToggle : (!isUndefined(this.prevCIdxs) &&\n cellIndex.rowIndex === this.prevCIdxs.rowIndex && cellIndex.cellIndex === this.prevCIdxs.cellIndex &&\n isCellSelected);\n if (!isToggle) {\n args = {\n data: selectedData, cellIndex: cellIndex, currentCell: selectedCell,\n isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest, previousRowCellIndex: this.prevECIdxs,\n previousRowCell: this.prevECIdxs ?\n this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined,\n cancel: false\n };\n this.onActionBegin(args, events.cellSelecting);\n }\n if (!isNullOrUndefined(args) && args[cncl] === true) {\n return;\n }\n this.clearCell();\n if (!isToggle) {\n this.updateCellSelection(selectedCell, cellIndex.rowIndex, cellIndex.cellIndex);\n }\n this.updateCellProps(cellIndex, cellIndex);\n if (!isToggle) {\n this.onActionComplete({\n data: selectedData, cellIndex: cellIndex, currentCell: selectedCell,\n previousRowCellIndex: this.prevECIdxs, selectedRowCellIndex: this.selectedRowCellIndexes,\n previousRowCell: this.prevECIdxs ?\n this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n }, events.cellSelected);\n }\n };\n Selection.prototype.getCellIndex = function (rIdx, cIdx) {\n return (this.parent.getFrozenColumns() ? (cIdx >= this.parent.getFrozenColumns() ? this.parent.getMovableCellFromIndex(rIdx, cIdx)\n : this.parent.getCellFromIndex(rIdx, cIdx)) : this.parent.getCellFromIndex(rIdx, cIdx));\n };\n /**\n * Selects a range of cells from start and end indexes.\n * @param {IIndex} startIndex - Specifies the row and column's start index.\n * @param {IIndex} endIndex - Specifies the row and column's end index.\n * @return {void}\n */\n Selection.prototype.selectCellsByRange = function (startIndex, endIndex) {\n if (!this.isCellType()) {\n return;\n }\n var gObj = this.parent;\n var selectedCell = this.getSelectedMovableCell(startIndex);\n var frzCols = gObj.getFrozenColumns();\n if (!selectedCell) {\n selectedCell = gObj.getCellFromIndex(startIndex.rowIndex, startIndex.cellIndex);\n }\n var min;\n var max;\n var stIndex = startIndex;\n var edIndex = endIndex = endIndex ? endIndex : startIndex;\n var cellIndexes;\n var cancl = 'cancel';\n this.currentIndex = startIndex.rowIndex;\n var selectedData = gObj.getCurrentViewRecords()[this.currentIndex];\n if (this.isSingleSel() || !this.isCellType() || this.isEditing()) {\n return;\n }\n var args = {\n data: selectedData, cellIndex: startIndex, currentCell: selectedCell,\n isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest, previousRowCellIndex: this.prevECIdxs,\n previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n };\n this.onActionBegin(args, events.cellSelecting);\n if (!isNullOrUndefined(args) && args[cancl] === true) {\n return;\n }\n this.clearCell();\n if (startIndex.rowIndex > endIndex.rowIndex) {\n var temp = startIndex;\n startIndex = endIndex;\n endIndex = temp;\n }\n for (var i = startIndex.rowIndex; i <= endIndex.rowIndex; i++) {\n if (this.selectionSettings.cellSelectionMode !== 'Box') {\n min = i === startIndex.rowIndex ? (startIndex.cellIndex) : 0;\n max = i === endIndex.rowIndex ? (endIndex.cellIndex) : this.getLastColIndex(i);\n }\n else {\n min = startIndex.cellIndex;\n max = endIndex.cellIndex;\n }\n cellIndexes = [];\n for (var j = min < max ? min : max, len = min > max ? min : max; j <= len; j++) {\n if (frzCols) {\n if (j < frzCols) {\n selectedCell = gObj.getCellFromIndex(i, j);\n }\n else {\n selectedCell = gObj.getMovableCellFromIndex(i, j);\n }\n }\n else {\n selectedCell = gObj.getCellFromIndex(i, j);\n }\n if (!selectedCell) {\n continue;\n }\n cellIndexes.push(j);\n this.updateCellSelection(selectedCell);\n this.addAttribute(selectedCell);\n }\n this.selectedRowCellIndexes.push({ rowIndex: i, cellIndexes: cellIndexes });\n }\n this.updateCellProps(stIndex, edIndex);\n this.onActionComplete({\n data: selectedData, cellIndex: startIndex, currentCell: selectedCell,\n previousRowCellIndex: this.prevECIdxs, selectedRowCellIndex: this.selectedRowCellIndexes,\n previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n }, events.cellSelected);\n };\n /**\n * Selects a collection of cells by row and column indexes.\n * @param {ISelectedCell[]} rowCellIndexes - Specifies the row and column indexes.\n * @return {void}\n */\n Selection.prototype.selectCells = function (rowCellIndexes) {\n if (!this.isCellType()) {\n return;\n }\n var gObj = this.parent;\n var selectedCell = this.getSelectedMovableCell(rowCellIndexes[0]);\n var frzCols = gObj.getFrozenColumns();\n if (!selectedCell) {\n selectedCell = gObj.getCellFromIndex(rowCellIndexes[0].rowIndex, rowCellIndexes[0].cellIndexes[0]);\n }\n this.currentIndex = rowCellIndexes[0].rowIndex;\n var selectedData = gObj.getCurrentViewRecords()[this.currentIndex];\n if (this.isSingleSel() || !this.isCellType() || this.isEditing()) {\n return;\n }\n this.onActionBegin({\n data: selectedData, cellIndex: rowCellIndexes[0].cellIndexes[0],\n currentCell: selectedCell, isCtrlPressed: this.isMultiCtrlRequest,\n isShiftPressed: this.isMultiShiftRequest, previousRowCellIndex: this.prevECIdxs,\n previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n }, events.cellSelecting);\n for (var i = 0, len = rowCellIndexes.length; i < len; i++) {\n for (var j = 0, cellLen = rowCellIndexes[i].cellIndexes.length; j < cellLen; j++) {\n if (frzCols) {\n if (rowCellIndexes[i].cellIndexes[j] < frzCols) {\n selectedCell = gObj.getCellFromIndex(rowCellIndexes[i].rowIndex, rowCellIndexes[i].cellIndexes[j]);\n }\n else {\n selectedCell = gObj.getMovableCellFromIndex(rowCellIndexes[i].rowIndex, rowCellIndexes[i].cellIndexes[j]);\n }\n }\n else {\n selectedCell = gObj.getCellFromIndex(rowCellIndexes[i].rowIndex, rowCellIndexes[i].cellIndexes[j]);\n }\n if (!selectedCell) {\n continue;\n }\n this.updateCellSelection(selectedCell);\n this.addAttribute(selectedCell);\n this.addRowCellIndex({ rowIndex: rowCellIndexes[i].rowIndex, cellIndex: rowCellIndexes[i].cellIndexes[j] });\n }\n }\n this.updateCellProps({ rowIndex: rowCellIndexes[0].rowIndex, cellIndex: rowCellIndexes[0].cellIndexes[0] }, { rowIndex: rowCellIndexes[0].rowIndex, cellIndex: rowCellIndexes[0].cellIndexes[0] });\n this.onActionComplete({\n data: selectedData, cellIndex: rowCellIndexes[0].cellIndexes[0],\n currentCell: selectedCell,\n previousRowCellIndex: this.prevECIdxs, selectedRowCellIndex: this.selectedRowCellIndexes,\n previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n }, events.cellSelected);\n };\n /**\n * Select cells with existing cell selection by passing row and column index.\n * @param {IIndex} startIndex - Defines the collection of row and column index.\n * @return {void}\n * @hidden\n */\n Selection.prototype.addCellsToSelection = function (cellIndexes) {\n if (!this.isCellType()) {\n return;\n }\n var gObj = this.parent;\n var selectedTable;\n var cIdx;\n var selectedCell;\n var frzCols = gObj.getFrozenColumns();\n var index;\n this.currentIndex = cellIndexes[0].rowIndex;\n var selectedData = gObj.getCurrentViewRecords()[this.currentIndex];\n if (this.isSingleSel() || !this.isCellType() || this.isEditing()) {\n return;\n }\n var rowObj;\n if (frzCols && cellIndexes[0].cellIndex >= frzCols) {\n rowObj = gObj.getMovableRowsObject()[cellIndexes[0].rowIndex];\n }\n else {\n rowObj = this.getRowObj(cellIndexes[0].rowIndex);\n }\n var foreignKeyData = [];\n for (var _i = 0, cellIndexes_1 = cellIndexes; _i < cellIndexes_1.length; _i++) {\n var cellIndex = cellIndexes_1[_i];\n for (var i = 0, len = this.selectedRowCellIndexes.length; i < len; i++) {\n if (this.selectedRowCellIndexes[i].rowIndex === cellIndex.rowIndex) {\n index = i;\n break;\n }\n }\n selectedCell = this.getSelectedMovableCell(cellIndex);\n if (!selectedCell) {\n selectedCell = gObj.getCellFromIndex(cellIndex.rowIndex, this.getColIndex(cellIndex.rowIndex, cellIndex.cellIndex));\n }\n foreignKeyData.push(rowObj.cells[frzCols && cellIndexes[0].cellIndex >= frzCols\n ? cellIndex.cellIndex - frzCols : cellIndex.cellIndex].foreignKeyData);\n var args = {\n data: selectedData, cellIndex: cellIndexes[0],\n isShiftPressed: this.isMultiShiftRequest, previousRowCellIndex: this.prevECIdxs,\n currentCell: selectedCell, isCtrlPressed: this.isMultiCtrlRequest,\n previousRowCell: this.prevECIdxs ?\n gObj.getCellFromIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined,\n };\n var isUnSelected = index > -1;\n if (isUnSelected) {\n var selectedCellIdx = this.selectedRowCellIndexes[index].cellIndexes;\n if (selectedCellIdx.indexOf(cellIndex.cellIndex) > -1) {\n this.cellDeselect(events.cellDeselecting, [{ rowIndex: cellIndex.rowIndex, cellIndexes: [cellIndex.cellIndex] }], selectedData, [selectedCell], foreignKeyData);\n selectedCellIdx.splice(selectedCellIdx.indexOf(cellIndex.cellIndex), 1);\n selectedCell.classList.remove('e-cellselectionbackground');\n selectedCell.removeAttribute('aria-selected');\n this.cellDeselect(events.cellDeselected, [{ rowIndex: cellIndex.rowIndex, cellIndexes: [cellIndex.cellIndex] }], selectedData, [selectedCell], foreignKeyData);\n }\n else {\n isUnSelected = false;\n this.onActionBegin(args, events.cellSelecting);\n this.addRowCellIndex({ rowIndex: cellIndex.rowIndex, cellIndex: cellIndex.cellIndex });\n this.updateCellSelection(selectedCell);\n this.addAttribute(selectedCell);\n }\n }\n else {\n this.onActionBegin(args, events.cellSelecting);\n this.updateCellSelection(selectedCell, cellIndex.rowIndex, cellIndex.cellIndex);\n }\n this.updateCellProps(cellIndex, cellIndex);\n if (!isUnSelected) {\n this.onActionComplete({\n data: selectedData, cellIndex: cellIndexes[0], currentCell: selectedCell,\n previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) :\n undefined, previousRowCellIndex: this.prevECIdxs, selectedRowCellIndex: this.selectedRowCellIndexes\n }, events.cellSelected);\n }\n }\n };\n Selection.prototype.getColIndex = function (rowIndex, index) {\n var cells;\n var frzCols = this.parent.getFrozenColumns();\n if (frzCols) {\n if (index >= frzCols) {\n cells = this.parent.getMovableDataRows()[rowIndex].querySelectorAll('td.e-rowcell');\n }\n }\n if (!cells) {\n cells = this.parent.getDataRows()[rowIndex].querySelectorAll('td.e-rowcell');\n }\n for (var m = 0; m < cells.length; m++) {\n var colIndex = parseInt(cells[m].getAttribute('aria-colindex'), 10);\n if (colIndex === index) {\n if (frzCols) {\n if (index >= frzCols) {\n m += frzCols;\n }\n }\n return m;\n }\n }\n return -1;\n };\n Selection.prototype.getLastColIndex = function (rowIndex) {\n var cells = this.parent.getFrozenColumns() ? this.parent.getMovableDataRows()[rowIndex].querySelectorAll('td.e-rowcell')\n : this.parent.getDataRows()[rowIndex].querySelectorAll('td.e-rowcell');\n return parseInt(cells[cells.length - 1].getAttribute('aria-colindex'), 10);\n };\n Selection.prototype.clearCell = function () {\n this.clearCellSelection();\n };\n Selection.prototype.cellDeselect = function (type, cellIndexes, data, cells, foreignKeyData) {\n var cancl = 'cancel';\n if (cells[0] && cells[0].classList.contains('e-gridchkbox')) {\n this.updateCheckBoxes(closest(cells[0], 'tr'));\n }\n var args = {\n cells: cells, data: data, cellIndexes: cellIndexes, foreignKeyData: foreignKeyData, cancel: false\n };\n this.parent.trigger(type, args);\n this.isPreventCellSelect = args[cancl];\n };\n Selection.prototype.updateCellSelection = function (selectedCell, rowIndex, cellIndex) {\n if (!isNullOrUndefined(rowIndex)) {\n this.addRowCellIndex({ rowIndex: rowIndex, cellIndex: cellIndex });\n }\n selectedCell.classList.add('e-cellselectionbackground');\n if (selectedCell.classList.contains('e-gridchkbox')) {\n this.updateCheckBoxes(closest(selectedCell, 'tr'), true);\n }\n this.addAttribute(selectedCell);\n };\n Selection.prototype.addAttribute = function (cell) {\n this.target = cell;\n if (!isNullOrUndefined(cell)) {\n cell.setAttribute('aria-selected', 'true');\n if (!this.preventFocus) {\n this.focus.onClick({ target: cell }, true);\n }\n }\n };\n Selection.prototype.updateCellProps = function (startIndex, endIndex) {\n this.prevCIdxs = startIndex;\n this.prevECIdxs = endIndex;\n this.isCellSelected = this.selectedRowCellIndexes.length && true;\n };\n Selection.prototype.addRowCellIndex = function (rowCellIndex) {\n var isRowAvail;\n var index;\n for (var i = 0, len = this.selectedRowCellIndexes.length; i < len; i++) {\n if (this.selectedRowCellIndexes[i].rowIndex === rowCellIndex.rowIndex) {\n isRowAvail = true;\n index = i;\n break;\n }\n }\n if (isRowAvail) {\n if (this.selectedRowCellIndexes[index].cellIndexes.indexOf(rowCellIndex.cellIndex) < 0) {\n this.selectedRowCellIndexes[index].cellIndexes.push(rowCellIndex.cellIndex);\n }\n }\n else {\n this.selectedRowCellIndexes.push({ rowIndex: rowCellIndex.rowIndex, cellIndexes: [rowCellIndex.cellIndex] });\n }\n };\n /**\n * Deselects the currently selected cells.\n * @return {void}\n */\n Selection.prototype.clearCellSelection = function () {\n if (this.isCellSelected) {\n var gObj = this.parent;\n var selectedCells = this.getSelectedCellsElement();\n var rowCell = this.selectedRowCellIndexes;\n var data = [];\n var cells = [];\n var foreignKeyData = [];\n var currentViewData = gObj.getCurrentViewRecords();\n var selectedTable = void 0;\n var frzCols = gObj.getFrozenColumns();\n for (var i = 0, len = rowCell.length; i < len; i++) {\n data.push(currentViewData[rowCell[i].rowIndex]);\n var rowObj = this.getRowObj(rowCell[i].rowIndex);\n for (var j = 0, cLen = rowCell[i].cellIndexes.length; j < cLen; j++) {\n if (frzCols) {\n if (rowCell[i].cellIndexes[j] < frzCols) {\n cells.push(gObj.getCellFromIndex(rowCell[i].rowIndex, rowCell[i].cellIndexes[j]));\n }\n else {\n cells.push(gObj.getMovableCellFromIndex(rowCell[i].rowIndex, rowCell[i].cellIndexes[j]));\n }\n }\n else {\n foreignKeyData.push(rowObj.cells[rowCell[i].cellIndexes[j]].foreignKeyData);\n cells.push(gObj.getCellFromIndex(rowCell[i].rowIndex, rowCell[i].cellIndexes[j]));\n }\n }\n }\n this.cellDeselect(events.cellDeselecting, rowCell, data, cells, foreignKeyData);\n if (this.isPreventCellSelect === true) {\n return;\n }\n for (var i = 0, len = selectedCells.length; i < len; i++) {\n selectedCells[i].classList.remove('e-cellselectionbackground');\n selectedCells[i].removeAttribute('aria-selected');\n }\n this.selectedRowCellIndexes = [];\n this.isCellSelected = false;\n this.cellDeselect(events.cellDeselected, rowCell, data, cells, foreignKeyData);\n }\n };\n Selection.prototype.getSelectedCellsElement = function () {\n var gObj = this.parent;\n var rows = gObj.getDataRows();\n var mRows;\n if (gObj.getFrozenColumns()) {\n mRows = gObj.getMovableDataRows();\n rows = gObj.addMovableRows(rows, mRows);\n }\n var cells = [];\n for (var i = 0, len = rows.length; i < len; i++) {\n cells = cells.concat([].slice.call(rows[i].querySelectorAll('.e-cellselectionbackground')));\n }\n return cells;\n };\n Selection.prototype.mouseMoveHandler = function (e) {\n e.preventDefault();\n var gBRect = this.parent.element.getBoundingClientRect();\n var x1 = this.x;\n var y1 = this.y;\n var position = getPosition(e);\n var x2 = position.x - gBRect.left;\n var y2 = position.y - gBRect.top;\n var tmp;\n var target = closest(e.target, 'tr');\n this.isDragged = true;\n if (!this.isCellDrag) {\n if (!target) {\n target = closest(document.elementFromPoint(this.parent.element.offsetLeft + 2, e.clientY), 'tr');\n }\n if (x1 > x2) {\n tmp = x2;\n x2 = x1;\n x1 = tmp;\n }\n if (y1 > y2) {\n tmp = y2;\n y2 = y1;\n y1 = tmp;\n }\n this.element.style.left = x1 + 'px';\n this.element.style.top = y1 + 'px';\n this.element.style.width = x2 - x1 + 'px';\n this.element.style.height = y2 - y1 + 'px';\n }\n if (target && !e.ctrlKey && !e.shiftKey) {\n var rowIndex = parseInt(target.getAttribute('aria-rowindex'), 10);\n if (!this.isCellDrag) {\n this.selectRowsByRange(this.startIndex, rowIndex);\n }\n else {\n var td = parentsUntil(e.target, 'e-rowcell');\n if (td) {\n this.selectLikeExcel(rowIndex, parseInt(td.getAttribute('aria-colindex'), 10));\n }\n }\n }\n };\n Selection.prototype.selectLikeExcel = function (rowIndex, cellIndex) {\n this.clearCellSelection();\n this.selectCellsByRange({ rowIndex: this.startIndex, cellIndex: this.startCellIndex }, { rowIndex: rowIndex, cellIndex: cellIndex });\n };\n Selection.prototype.mouseUpHandler = function (e) {\n document.body.classList.remove('e-disableuserselect');\n if (this.element) {\n remove(this.element);\n }\n EventHandler.remove(this.parent.getContent(), 'mousemove', this.mouseMoveHandler);\n EventHandler.remove(document.body, 'mouseup', this.mouseUpHandler);\n this.isDragged = false;\n };\n Selection.prototype.mouseDownHandler = function (e) {\n var target = e.target;\n var gObj = this.parent;\n var isDrag;\n var gridElement = parentsUntil(target, 'e-grid');\n if (gridElement && gridElement.id !== gObj.element.id) {\n return;\n }\n if (e.shiftKey || e.ctrlKey) {\n e.preventDefault();\n }\n if (target.classList.contains('e-rowcell') && !e.shiftKey && !e.ctrlKey) {\n if (gObj.selectionSettings.cellSelectionMode === 'Box' && !this.isRowType() && !this.isSingleSel()) {\n this.isCellDrag = true;\n isDrag = true;\n }\n else if (gObj.allowRowDragAndDrop) {\n if (!this.isRowType() || this.isSingleSel() || closest(target, 'td').classList.contains('e-selectionbackground')) {\n this.isDragged = false;\n return;\n }\n isDrag = true;\n this.element = createElement('div', { className: 'e-griddragarea' });\n gObj.getContent().appendChild(this.element);\n }\n if (isDrag) {\n var tr = closest(e.target, 'tr');\n this.startIndex = parseInt(tr.getAttribute('aria-rowindex'), 10);\n this.startCellIndex = parseInt(parentsUntil(target, 'e-rowcell').getAttribute('aria-colindex'), 10);\n document.body.classList.add('e-disableuserselect');\n var gBRect = gObj.element.getBoundingClientRect();\n var postion = getPosition(e);\n this.x = postion.x - gBRect.left;\n this.y = postion.y - gBRect.top;\n EventHandler.add(gObj.getContent(), 'mousemove', this.mouseMoveHandler, this);\n EventHandler.add(document.body, 'mouseup', this.mouseUpHandler, this);\n }\n }\n };\n Selection.prototype.clearSelAfterRefresh = function (e) {\n if (e.requestType !== 'virtualscroll' && !this.parent.isPersistSelection) {\n this.clearSelection();\n }\n };\n /**\n * @hidden\n */\n Selection.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialEnd, this.initializeSelection, this);\n this.parent.on(events.rowSelectionComplete, this.onActionComplete, this);\n this.parent.on(events.cellSelectionComplete, this.onActionComplete, this);\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.cellFocused, this.onCellFocused, this);\n this.parent.on(events.dataReady, this.clearSelAfterRefresh, this);\n this.parent.on(events.columnPositionChanged, this.columnPositionChanged, this);\n this.parent.on(events.contentReady, this.initialEnd, this);\n this.actionBeginFunction = this.actionBegin.bind(this);\n this.actionCompleteFunction = this.actionComplete.bind(this);\n this.parent.addEventListener(events.actionBegin, this.actionBeginFunction);\n this.parent.addEventListener(events.actionComplete, this.actionCompleteFunction);\n this.parent.on(events.rowsRemoved, this.rowsRemoved, this);\n this.parent.on(events.headerRefreshed, this.refreshHeader, this);\n this.addEventListener_checkbox();\n };\n /**\n * @hidden\n */\n Selection.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.initializeSelection);\n this.parent.off(events.rowSelectionComplete, this.onActionComplete);\n this.parent.off(events.cellSelectionComplete, this.onActionComplete);\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.cellFocused, this.onCellFocused);\n this.parent.off(events.dataReady, this.clearSelAfterRefresh);\n this.parent.off(events.columnPositionChanged, this.columnPositionChanged);\n this.parent.removeEventListener(events.actionBegin, this.actionBeginFunction);\n this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunction);\n this.parent.off(events.rowsRemoved, this.rowsRemoved);\n this.parent.off(events.headerRefreshed, this.refreshHeader);\n this.removeEventListener_checkbox();\n };\n Selection.prototype.columnPositionChanged = function () {\n if (!this.parent.isPersistSelection) {\n this.clearSelection();\n }\n };\n Selection.prototype.refreshHeader = function () {\n this.setCheckAllState();\n };\n Selection.prototype.rowsRemoved = function (e) {\n for (var i = 0; i < e.records.length; i++) {\n delete (this.selectedRowState[e.records[i][this.primaryKey]]);\n --this.totalRecordsCount;\n }\n this.setCheckAllState();\n };\n ;\n Selection.prototype.dataReady = function (e) {\n if (e.requestType !== 'virtualscroll' && !this.parent.isPersistSelection) {\n this.clearSelection();\n }\n };\n ;\n Selection.prototype.getCheckAllBox = function () {\n return this.parent.getHeaderContent().querySelector('.e-checkselectall');\n };\n Selection.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n var gObj = this.parent;\n if (!isNullOrUndefined(e.properties.type) && this.selectionSettings.type === 'Single') {\n if (this.selectedRowCellIndexes.length > 1) {\n this.clearCellSelection();\n }\n if (this.selectedRowIndexes.length > 1) {\n this.clearRowSelection();\n }\n this.enableSelectMultiTouch = false;\n this.hidePopUp();\n }\n if (!isNullOrUndefined(e.properties.mode) ||\n !isNullOrUndefined(e.properties.cellSelectionMode)) {\n this.clearSelection();\n }\n this.checkBoxSelectionChanged();\n this.initPerisistSelection();\n };\n Selection.prototype.hidePopUp = function () {\n if (this.parent.element.querySelector('.e-gridpopup').querySelectorAll('.e-rowselect').length) {\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n };\n Selection.prototype.initialEnd = function () {\n this.parent.off(events.contentReady, this.initialEnd);\n this.selectRow(this.parent.selectedRowIndex);\n };\n Selection.prototype.checkBoxSelectionChanged = function () {\n this.parent.off(events.contentReady, this.checkBoxSelectionChanged);\n var gobj = this.parent;\n var checkboxColumn = gobj.getColumns().filter(function (col) { return col.type === 'checkbox'; });\n if (checkboxColumn.length > 0) {\n gobj.isCheckBoxSelection = true;\n this.chkField = checkboxColumn[0].field;\n this.totalRecordsCount = this.parent.pageSettings.totalRecordsCount;\n if (isNullOrUndefined(this.totalRecordsCount)) {\n this.totalRecordsCount = this.parent.getCurrentViewRecords().length;\n }\n if (this.isSingleSel()) {\n gobj.selectionSettings.type = 'Multiple';\n gobj.dataBind();\n }\n else {\n this.initPerisistSelection();\n }\n }\n if (!gobj.isCheckBoxSelection) {\n this.chkField = null;\n this.initPerisistSelection();\n }\n };\n Selection.prototype.initPerisistSelection = function () {\n var gobj = this.parent;\n if (this.parent.selectionSettings.persistSelection && this.parent.getPrimaryKeyFieldNames().length > 0) {\n gobj.isPersistSelection = true;\n this.ensureCheckboxFieldSelection();\n }\n else if (this.parent.getPrimaryKeyFieldNames().length > 0) {\n gobj.isPersistSelection = false;\n this.ensureCheckboxFieldSelection();\n }\n else {\n gobj.isPersistSelection = false;\n this.selectedRowState = {};\n }\n };\n Selection.prototype.ensureCheckboxFieldSelection = function () {\n var gobj = this.parent;\n this.primaryKey = this.parent.getPrimaryKeyFieldNames()[0];\n if (!gobj.enableVirtualization && this.chkField\n && ((gobj.isPersistSelection && Object.keys(this.selectedRowState).length === 0) ||\n !gobj.isPersistSelection)) {\n var data = this.parent.getDataModule();\n var query = new Query().where(this.chkField, 'equal', true);\n var dataManager = data.getData({}, query);\n var proxy_1 = this;\n this.parent.showSpinner();\n dataManager.then(function (e) {\n proxy_1.dataSuccess(e.result);\n proxy_1.refreshPersistSelection();\n proxy_1.parent.hideSpinner();\n });\n }\n };\n Selection.prototype.dataSuccess = function (res) {\n for (var i = 0; i < res.length; i++) {\n if (isNullOrUndefined(this.selectedRowState[res[i][this.primaryKey]]) && res[i][this.chkField]) {\n this.selectedRowState[res[i][this.primaryKey]] = res[i][this.chkField];\n }\n }\n this.persistSelectedData = res;\n };\n Selection.prototype.setRowSelection = function (state) {\n if (!this.parent.getDataModule().isRemote()) {\n if (state) {\n for (var _i = 0, _a = this.getData(); _i < _a.length; _i++) {\n var data = _a[_i];\n this.selectedRowState[data[this.primaryKey]] = true;\n }\n }\n else {\n this.selectedRowState = {};\n }\n // (this.getData()).forEach(function (data) {\n // this.selectedRowState[data[this.primaryKey]] = true;\n // })\n }\n };\n Selection.prototype.getData = function () {\n return this.parent.getDataModule().dataManager.dataSource.json;\n };\n Selection.prototype.refreshPersistSelection = function () {\n var rows = this.parent.getRows();\n if (rows.length > 0 && (this.parent.isPersistSelection || this.chkField)) {\n var indexes = [];\n for (var j = 0; j < rows.length; j++) {\n var rowObj = this.getRowObj(rows[j]);\n var pKey = rowObj ? rowObj.data[this.primaryKey] : null;\n if (pKey === null) {\n return;\n }\n var checkState = void 0;\n var chkBox = rows[j].querySelector('.e-checkselect');\n if (this.selectedRowState[pKey] || (this.parent.checkAllRows === 'Check' && this.chkAllCollec.indexOf(pKey) < 0)\n || (this.parent.checkAllRows === 'Uncheck' && this.chkAllCollec.indexOf(pKey) > 0)\n || (this.parent.checkAllRows === 'Intermediate' && !isNullOrUndefined(this.chkField) && rowObj.data[this.chkField])) {\n indexes.push(parseInt(rows[j].getAttribute('aria-rowindex'), 10));\n checkState = true;\n }\n else {\n checkState = false;\n if (this.checkedTarget !== chkBox && this.parent.isCheckBoxSelection) {\n removeAddCboxClasses(chkBox.nextElementSibling, checkState);\n }\n }\n this.updatePersistCollection(rows[j], checkState);\n }\n this.isSingleSel() && indexes.length > 0 ? this.selectRow(indexes[0], true) : this.selectRows(indexes);\n }\n if (this.parent.isCheckBoxSelection && this.parent.getCurrentViewRecords().length > 0) {\n this.setCheckAllState();\n }\n };\n Selection.prototype.actionBegin = function (e) {\n if (e.requestType === 'save' && this.parent.isPersistSelection) {\n var editChkBox = this.parent.element.querySelector('.e-edit-checkselect');\n if (!isNullOrUndefined(editChkBox)) {\n var row = closest(editChkBox, '.e-editedrow');\n if (row) {\n if (this.parent.editSettings.mode === 'Dialog') {\n row = this.parent.element.querySelector('.e-dlgeditrow');\n }\n var rowObj = this.getRowObj(row);\n if (!rowObj) {\n return;\n }\n this.selectedRowState[rowObj.data[this.primaryKey]] = rowObj.isSelected = editChkBox.checked;\n }\n else {\n this.isCheckedOnAdd = editChkBox.checked;\n }\n }\n }\n };\n Selection.prototype.actionComplete = function (e) {\n if (e.requestType === 'save' && this.parent.isPersistSelection) {\n if (e.action === 'add' && this.isCheckedOnAdd) {\n var rowObj = this.parent.getRowObjectFromUID(this.parent.getRows()[e.selectedRow].getAttribute('data-uid'));\n this.selectedRowState[rowObj.data[this.primaryKey]] = rowObj.isSelected = this.isCheckedOnAdd;\n }\n this.refreshPersistSelection();\n }\n };\n Selection.prototype.onDataBound = function () {\n if (!this.parent.enableVirtualization && this.parent.isPersistSelection) {\n this.refreshPersistSelection();\n }\n };\n Selection.prototype.checkSelectAllAction = function (checkState) {\n var cRenderer = this.getRenderer();\n var editForm = this.parent.element.querySelector('.e-gridform');\n this.checkedTarget = this.getCheckAllBox();\n if (checkState && this.parent.getCurrentViewRecords().length) {\n this.selectRowsByRange(cRenderer.getVirtualRowIndex(0), cRenderer.getVirtualRowIndex(this.parent.getCurrentViewRecords().length));\n this.parent.checkAllRows = 'Check';\n }\n else {\n this.clearSelection();\n this.parent.checkAllRows = 'Uncheck';\n }\n this.chkAllCollec = [];\n if (this.parent.isPersistSelection) {\n var rows = this.parent.getRows();\n for (var i = 0; i < rows.length; i++) {\n this.updatePersistCollection(rows[i], checkState);\n }\n if (this.parent.checkAllRows === 'Uncheck') {\n this.setRowSelection(false);\n this.persistSelectedData = [];\n }\n else if (this.parent.checkAllRows === 'Check') {\n this.setRowSelection(true);\n this.persistSelectedData = this.getData().slice();\n }\n }\n if (!isNullOrUndefined(editForm)) {\n var editChkBox = editForm.querySelector('.e-edit-checkselect');\n removeAddCboxClasses(editChkBox.nextElementSibling, checkState);\n }\n };\n Selection.prototype.checkSelectAll = function (checkBox) {\n var state = this.getCheckAllStatus(checkBox) === 'Check';\n this.checkSelectAllAction(!state);\n this.target = null;\n if (this.parent.getCurrentViewRecords().length > 0) {\n this.setCheckAllState();\n }\n this.triggerChkChangeEvent(checkBox, !state);\n };\n Selection.prototype.getCheckAllStatus = function (ele) {\n var classes = ele ? ele.nextElementSibling.classList :\n this.getCheckAllBox().nextElementSibling.classList;\n var status;\n if (classes.contains('e-check')) {\n status = 'Check';\n }\n else if (classes.contains('e-uncheck')) {\n status = 'Uncheck';\n }\n else if (classes.contains('e-stop')) {\n status = 'Intermediate';\n }\n else {\n status = 'None';\n }\n return status;\n };\n Selection.prototype.checkSelect = function (checkBox) {\n var target = closest(this.checkedTarget, '.e-rowcell');\n var checkObj = checkBox;\n this.isMultiCtrlRequest = true;\n var rIndex = parseInt(target.parentElement.getAttribute('aria-rowindex'), 10);\n if (this.parent.isPersistSelection && this.parent.element.querySelectorAll('.e-addedrow').length > 0) {\n ++rIndex;\n }\n this.rowCellSelectionHandler(rIndex, parseInt(target.getAttribute('aria-colindex'), 10));\n this.moveIntoUncheckCollection(closest(target, '.e-row'));\n this.setCheckAllState();\n this.isMultiCtrlRequest = false;\n this.triggerChkChangeEvent(checkBox, checkBox.nextElementSibling.classList.contains('e-check'));\n };\n Selection.prototype.moveIntoUncheckCollection = function (row) {\n if (this.parent.checkAllRows === 'Check' || this.parent.checkAllRows === 'Uncheck') {\n var rowObj = this.getRowObj(row);\n var pKey = rowObj && rowObj.data ? rowObj.data[this.primaryKey] : null;\n if (!pKey) {\n return;\n }\n if (this.chkAllCollec.indexOf(pKey) < 0) {\n this.chkAllCollec.push(pKey);\n }\n else {\n this.chkAllCollec.splice(this.chkAllCollec.indexOf(pKey), 1);\n }\n }\n };\n Selection.prototype.triggerChkChangeEvent = function (checkBox, checkState) {\n this.parent.trigger(events.checkBoxChange, {\n checked: checkState, selectedRowIndexes: this.parent.getSelectedRowIndexes(),\n target: checkBox\n });\n if (!this.parent.isEdit) {\n this.checkedTarget = null;\n }\n };\n Selection.prototype.setCheckAllState = function (isInteraction) {\n if (this.parent.isCheckBoxSelection) {\n var checkedLen = Object.keys(this.selectedRowState).length;\n if (!this.parent.isPersistSelection) {\n checkedLen = this.selectedRecords.length;\n this.totalRecordsCount = this.parent.getCurrentViewRecords().length;\n }\n if (this.getCheckAllBox()) {\n var spanEle = this.getCheckAllBox().nextElementSibling;\n removeClass([spanEle], ['e-check', 'e-stop', 'e-uncheck']);\n if (checkedLen === this.totalRecordsCount) {\n addClass([spanEle], ['e-check']);\n if (isInteraction) {\n this.getRenderer().setSelection(null, true, true);\n }\n this.parent.checkAllRows = 'Check';\n }\n else if (checkedLen === 0 || this.parent.getCurrentViewRecords().length === 0) {\n addClass([spanEle], ['e-uncheck']);\n if (isInteraction) {\n this.getRenderer().setSelection(null, false, true);\n }\n this.parent.checkAllRows = 'Uncheck';\n }\n else {\n addClass([spanEle], ['e-stop']);\n this.parent.checkAllRows = 'Intermediate';\n }\n }\n }\n };\n Selection.prototype.clickHandler = function (e) {\n var target = e.target;\n this.isMultiCtrlRequest = e.ctrlKey || this.enableSelectMultiTouch;\n this.isMultiShiftRequest = e.shiftKey;\n this.popUpClickHandler(e);\n var chkSelect = false;\n this.preventFocus = true;\n var checkBox;\n var checkWrap = parentsUntil(target, 'e-checkbox-wrapper');\n if (checkWrap && checkWrap.querySelectorAll('.e-checkselect,.e-checkselectall').length > 0) {\n checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n chkSelect = true;\n }\n target = parentsUntil(target, 'e-rowcell');\n if ((target && target.parentElement.classList.contains('e-row') && !this.parent.selectionSettings.checkboxOnly) || chkSelect) {\n if (this.parent.isCheckBoxSelection) {\n this.isMultiCtrlRequest = true;\n }\n this.target = target;\n if (!isNullOrUndefined(checkBox)) {\n this.checkedTarget = checkBox;\n if (checkBox.classList.contains('e-checkselectall')) {\n this.checkSelectAll(checkBox);\n }\n else {\n this.checkSelect(checkBox);\n this.target = closest(target, '.e-rowcell');\n }\n }\n else {\n var rIndex = parseInt(target.parentElement.getAttribute('aria-rowindex'), 10);\n if (this.parent.isPersistSelection && this.parent.element.querySelectorAll('.e-addedrow').length > 0) {\n ++rIndex;\n }\n this.rowCellSelectionHandler(rIndex, parseInt(target.getAttribute('aria-colindex'), 10));\n if (this.parent.isCheckBoxSelection) {\n this.moveIntoUncheckCollection(closest(target, '.e-row'));\n this.setCheckAllState();\n }\n }\n if (!this.parent.isCheckBoxSelection && Browser.isDevice && !this.isSingleSel()) {\n this.showPopup(e);\n }\n }\n this.isMultiCtrlRequest = false;\n this.isMultiShiftRequest = false;\n this.preventFocus = false;\n };\n Selection.prototype.popUpClickHandler = function (e) {\n var target = e.target;\n if (closest(target, '.e-headercell') || e.target.classList.contains('e-rowcell') ||\n closest(target, '.e-gridpopup')) {\n if (target.classList.contains('e-rowselect')) {\n if (!target.classList.contains('e-spanclicked')) {\n target.classList.add('e-spanclicked');\n this.enableSelectMultiTouch = true;\n }\n else {\n target.classList.remove('e-spanclicked');\n this.enableSelectMultiTouch = false;\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n }\n }\n else {\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n };\n Selection.prototype.showPopup = function (e) {\n setCssInGridPopUp(this.parent.element.querySelector('.e-gridpopup'), e, 'e-rowselect e-icons e-icon-rowselect' +\n (!this.isSingleSel() && (this.selectedRecords.length > (this.parent.getFrozenColumns() ? 2 : 1)\n || this.selectedRowCellIndexes.length > 1) ? ' e-spanclicked' : ''));\n };\n Selection.prototype.rowCellSelectionHandler = function (rowIndex, cellIndex) {\n if ((!this.isMultiCtrlRequest && !this.isMultiShiftRequest) || this.isSingleSel()) {\n if (!this.isDragged) {\n this.selectRow(rowIndex, true);\n }\n this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, true);\n }\n else if (this.isMultiShiftRequest) {\n this.selectRowsByRange(isUndefined(this.prevRowIndex) ? rowIndex : this.prevRowIndex, rowIndex);\n this.selectCellsByRange(isUndefined(this.prevCIdxs) ? { rowIndex: rowIndex, cellIndex: cellIndex } : this.prevCIdxs, { rowIndex: rowIndex, cellIndex: cellIndex });\n }\n else {\n this.addRowsToSelection([rowIndex]);\n this.addCellsToSelection([{ rowIndex: rowIndex, cellIndex: cellIndex }]);\n }\n this.isDragged = false;\n };\n Selection.prototype.onCellFocused = function (e) {\n if (this.parent.frozenRows && e.container.isHeader && e.byKey) {\n if (e.keyArgs.action === 'upArrow') {\n if (this.parent.allowFiltering) {\n e.isJump = e.element.tagName === 'INPUT' ? true : false;\n }\n else {\n e.isJump = e.element.tagName === 'TH' ? true : false;\n }\n }\n else {\n if (e.keyArgs.action === 'downArrow') {\n var rIdx = Number(e.element.parentElement.getAttribute('aria-rowindex'));\n e.isJump = rIdx === 0 ? true : false;\n }\n else {\n if (e.keyArgs.action === 'ctrlHome') {\n e.isJump = true;\n }\n }\n }\n }\n var clear = this.parent.getFrozenColumns() ? (((e.container.isHeader && e.element.tagName !== 'TD' && e.isJump) ||\n ((e.container.isContent || e.element.tagName === 'TD') && !(e.container.isSelectable || e.element.tagName === 'TD')))\n && !(e.byKey && e.keyArgs.action === 'space')) : ((e.container.isHeader && e.isJump) ||\n (e.container.isContent && !e.container.isSelectable)) && !(e.byKey && e.keyArgs.action === 'space');\n var headerAction = (e.container.isHeader && e.element.tagName !== 'TD' && !closest(e.element, '.e-rowcell'))\n && !(e.byKey && e.keyArgs.action === 'space');\n if (!e.byKey || clear) {\n if (clear) {\n this.clearSelection();\n }\n return;\n }\n var _a = e.container.isContent ? e.container.indexes : e.indexes, rowIndex = _a[0], cellIndex = _a[1];\n var prev = this.focus.getPrevIndexes();\n if (this.parent.frozenRows) {\n if (e.container.isHeader && (e.element.tagName === 'TD' || closest(e.element, '.e-rowcell'))) {\n var thLen = this.parent.getHeaderTable().querySelector('thead').childElementCount;\n rowIndex -= thLen;\n prev.rowIndex = prev.rowIndex ? prev.rowIndex - thLen : null;\n }\n else {\n rowIndex += this.parent.frozenRows;\n prev.rowIndex = prev.rowIndex === 0 || !isNullOrUndefined(prev.rowIndex) ? prev.rowIndex + this.parent.frozenRows : null;\n }\n if (this.parent.getFrozenColumns()) {\n var cIdx = Number(e.element.getAttribute('aria-colindex'));\n prev.cellIndex = prev.cellIndex ? (prev.cellIndex === cellIndex ? cIdx : cIdx - 1) : null;\n cellIndex = cIdx;\n }\n }\n if (headerAction || (['ctrlPlusA', 'escape'].indexOf(e.keyArgs.action) === -1 && e.keyArgs.action !== 'space' &&\n rowIndex === prev.rowIndex && cellIndex === prev.cellIndex)) {\n return;\n }\n this.preventFocus = true;\n switch (e.keyArgs.action) {\n case 'downArrow':\n case 'upArrow':\n case 'enter':\n case 'shiftEnter':\n this.applyDownUpKey(rowIndex, cellIndex);\n break;\n case 'rightArrow':\n case 'leftArrow':\n this.applyRightLeftKey(rowIndex, cellIndex);\n break;\n case 'shiftDown':\n case 'shiftUp':\n this.shiftDownKey(rowIndex, cellIndex);\n break;\n case 'shiftLeft':\n case 'shiftRight':\n this.applyShiftLeftRightKey(rowIndex, cellIndex);\n break;\n case 'home':\n case 'end':\n cellIndex = e.keyArgs.action === 'end' ? this.getLastColIndex(rowIndex) : 0;\n this.applyHomeEndKey(rowIndex, cellIndex);\n break;\n case 'ctrlHome':\n case 'ctrlEnd':\n this.applyCtrlHomeEndKey(rowIndex, cellIndex);\n break;\n case 'escape':\n this.clearSelection();\n break;\n case 'ctrlPlusA':\n this.ctrlPlusA();\n break;\n case 'space':\n this.applySpaceSelection(e.element);\n break;\n }\n this.preventFocus = false;\n };\n /**\n * Apply ctrl + A key selection\n * @return {void}\n * @hidden\n */\n Selection.prototype.ctrlPlusA = function () {\n if (this.isRowType() && !this.isSingleSel()) {\n this.selectRowsByRange(0, this.parent.getRows().length - 1);\n }\n if (this.isCellType() && !this.isSingleSel()) {\n this.selectCellsByRange({ rowIndex: 0, cellIndex: 0 }, { rowIndex: this.parent.getRows().length - 1, cellIndex: this.parent.getColumns().length - 1 });\n }\n };\n Selection.prototype.applySpaceSelection = function (target) {\n if (target.classList.contains('e-checkselectall')) {\n this.checkedTarget = target;\n this.checkSelectAll(this.checkedTarget);\n }\n else {\n if (target.classList.contains('e-checkselect')) {\n this.checkedTarget = target;\n this.checkSelect(this.checkedTarget);\n }\n }\n };\n Selection.prototype.applyDownUpKey = function (rowIndex, cellIndex) {\n var gObj = this.parent;\n if (this.parent.isCheckBoxSelection && this.parent.checkAllRows === 'Check') {\n this.checkSelectAllAction(false);\n this.checkedTarget = null;\n }\n if (this.isRowType()) {\n if (this.parent.frozenRows) {\n this.selectRow(rowIndex, true);\n this.applyUpDown(gObj.selectedRowIndex);\n }\n else {\n this.selectRow(rowIndex, true);\n this.applyUpDown(gObj.selectedRowIndex);\n }\n }\n if (this.isCellType()) {\n this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, true);\n }\n };\n Selection.prototype.applyUpDown = function (rowIndex) {\n if (rowIndex < 0) {\n return;\n }\n if (!this.target) {\n this.target = this.parent.getRows()[0].children[this.parent.groupSettings.columns.length || 0];\n }\n var cIndex = parseInt(this.target.getAttribute('aria-colindex'), 10);\n var frzCols = this.parent.getFrozenColumns();\n if (frzCols) {\n if (cIndex >= frzCols) {\n this.target =\n this.contentRenderer.getMovableRowByIndex(rowIndex).querySelectorAll('.e-rowcell')[cIndex - frzCols];\n }\n else {\n this.target = this.contentRenderer.getRowByIndex(rowIndex).querySelectorAll('.e-rowcell')[cIndex];\n }\n }\n else {\n this.target = this.contentRenderer.getRowByIndex(rowIndex).querySelectorAll('.e-rowcell')[cIndex];\n }\n this.addAttribute(this.target);\n };\n Selection.prototype.applyRightLeftKey = function (rowIndex, cellIndex) {\n var gObj = this.parent;\n if (this.isCellType()) {\n this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, true);\n this.addAttribute(this.target);\n }\n };\n Selection.prototype.applyHomeEndKey = function (rowIndex, cellIndex) {\n if (this.isCellType()) {\n this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, true);\n }\n else {\n this.addAttribute(this.parent.getCellFromIndex(rowIndex, cellIndex));\n }\n };\n /**\n * Apply shift+down key selection\n * @return {void}\n * @hidden\n */\n Selection.prototype.shiftDownKey = function (rowIndex, cellIndex) {\n var gObj = this.parent;\n this.isMultiShiftRequest = true;\n if (this.isRowType() && !this.isSingleSel()) {\n if (!isUndefined(this.prevRowIndex)) {\n this.selectRowsByRange(this.prevRowIndex, rowIndex);\n this.applyUpDown(rowIndex);\n }\n else {\n this.selectRow(0, true);\n }\n }\n if (this.isCellType() && !this.isSingleSel()) {\n this.selectCellsByRange(this.prevCIdxs || { rowIndex: 0, cellIndex: 0 }, { rowIndex: rowIndex, cellIndex: cellIndex });\n }\n this.isMultiShiftRequest = false;\n };\n Selection.prototype.applyShiftLeftRightKey = function (rowIndex, cellIndex) {\n var gObj = this.parent;\n this.isMultiShiftRequest = true;\n this.selectCellsByRange(this.prevCIdxs, { rowIndex: rowIndex, cellIndex: cellIndex });\n this.isMultiShiftRequest = false;\n };\n Selection.prototype.applyCtrlHomeEndKey = function (rowIndex, cellIndex) {\n if (this.isRowType()) {\n this.selectRow(rowIndex, true);\n this.addAttribute(this.parent.getCellFromIndex(rowIndex, cellIndex));\n }\n if (this.isCellType()) {\n this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, true);\n }\n };\n Selection.prototype.addRemoveClassesForRow = function (row, isAdd, clearAll) {\n var args = [];\n for (var _i = 3; _i < arguments.length; _i++) {\n args[_i - 3] = arguments[_i];\n }\n if (row) {\n var cells = [].slice.call(row.querySelectorAll('.e-rowcell'));\n var cell = row.querySelector('.e-detailrowcollapse') || row.querySelector('.e-detailrowexpand');\n if (cell) {\n cells.push(cell);\n }\n addRemoveActiveClasses.apply(void 0, [cells, isAdd].concat(args));\n }\n this.getRenderer().setSelection(row ? row.getAttribute('data-uid') : null, isAdd, clearAll);\n };\n Selection.prototype.isRowType = function () {\n return this.selectionSettings.mode === 'Row' || this.selectionSettings.mode === 'Both';\n };\n Selection.prototype.isCellType = function () {\n return this.selectionSettings.mode === 'Cell' || this.selectionSettings.mode === 'Both';\n };\n Selection.prototype.isSingleSel = function () {\n return this.selectionSettings.type === 'Single';\n };\n Selection.prototype.getRenderer = function () {\n if (isNullOrUndefined(this.contentRenderer)) {\n this.contentRenderer = this.factory.getRenderer(RenderType.Content);\n }\n return this.contentRenderer;\n };\n /**\n * Gets the collection of selected records.\n * @return {Object[]}\n */\n Selection.prototype.getSelectedRecords = function () {\n var selectedData = [];\n if (!this.selectionSettings.persistSelection) {\n selectedData = this.parent.getRowsObject().filter(function (row) { return row.isSelected; })\n .map(function (m) { return m.data; });\n }\n else {\n selectedData = this.persistSelectedData;\n }\n return selectedData;\n };\n Selection.prototype.addEventListener_checkbox = function () {\n this.parent.on(events.dataReady, this.dataReady, this);\n this.onDataBoundFunction = this.onDataBound.bind(this);\n this.parent.addEventListener(events.dataBound, this.onDataBoundFunction);\n this.parent.on(events.contentReady, this.checkBoxSelectionChanged, this);\n this.actionCompleteFunc = this.actionCompleteHandler.bind(this);\n this.parent.addEventListener(events.actionComplete, this.actionCompleteFunc);\n this.parent.on(events.click, this.clickHandler, this);\n };\n Selection.prototype.removeEventListener_checkbox = function () {\n this.parent.off(events.dataReady, this.dataReady);\n this.parent.removeEventListener(events.dataBound, this.onDataBoundFunction);\n this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunc);\n this.parent.off(events.click, this.clickHandler);\n };\n Selection.prototype.actionCompleteHandler = function (e) {\n if (e.requestType === 'save' && this.parent.isPersistSelection) {\n this.refreshPersistSelection();\n }\n };\n return Selection;\n}());\nexport { Selection };\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { isActionPrevent } from '../base/util';\n/**\n * The `Search` module is used to handle search action.\n */\nvar Search = /** @class */ (function () {\n /**\n * Constructor for Grid search module.\n * @hidden\n */\n function Search(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * Searches Grid records by given key.\n *\n * > You can customize the default search action by using [`searchSettings`](./api-grid.html#searchsettings-searchsettingsmodel).\n * @param {string} searchString - Defines the key.\n * @return {void}\n */\n Search.prototype.search = function (searchString) {\n var gObj = this.parent;\n searchString = isNullOrUndefined(searchString) ? '' : searchString;\n if (isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.search, arg1: searchString });\n return;\n }\n if (searchString !== gObj.searchSettings.key) {\n gObj.searchSettings.key = searchString.toString();\n gObj.dataBind();\n }\n else if (this.refreshSearch) {\n gObj.refresh();\n }\n };\n /**\n * @hidden\n */\n Search.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.searchComplete, this.onSearchComplete, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.actionCompleteFunc = this.onActionComplete.bind(this);\n this.parent.addEventListener(events.actionComplete, this.actionCompleteFunc);\n };\n /**\n * @hidden\n */\n Search.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.searchComplete, this.onSearchComplete);\n this.parent.off(events.destroy, this.destroy);\n this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunc);\n };\n /**\n * To destroy the print\n * @return {void}\n * @hidden\n */\n Search.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n */\n Search.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n if (!isNullOrUndefined(e.properties.key)) {\n this.parent.notify(events.modelChanged, {\n requestType: 'searching', type: events.actionBegin, searchString: this.parent.searchSettings.key\n });\n }\n else {\n this.parent.notify(events.modelChanged, {\n requestType: 'searching', type: events.actionBegin\n });\n }\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n Search.prototype.onSearchComplete = function (e) {\n this.parent.trigger(events.actionComplete, extend(e, {\n searchString: this.parent.searchSettings.key, requestType: 'searching', type: events.actionComplete\n }));\n };\n Search.prototype.onActionComplete = function (e) {\n this.refreshSearch = e.requestType !== 'searching';\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Search.prototype.getModuleName = function () {\n return 'search';\n };\n return Search;\n}());\nexport { Search };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { iterateArrayOrObject, isActionPrevent } from '../base/util';\nimport * as events from '../base/constant';\n/**\n * The `ShowHide` module is used to control column visibility.\n */\nvar ShowHide = /** @class */ (function () {\n /**\n * Constructor for the show hide module.\n * @hidden\n */\n function ShowHide(parent) {\n this.parent = parent;\n }\n /**\n * Shows a column by column name.\n * @param {string|string[]} columnName - Defines a single or collection of column names to show.\n * @param {string} showBy - Defines the column key either as field name or header text.\n * @return {void}\n */\n ShowHide.prototype.show = function (columnName, showBy) {\n var keys = this.getToggleFields(columnName);\n var columns = this.getColumns(keys, showBy);\n this.parent.notify(events.tooltipDestroy, { module: 'edit' });\n columns.forEach(function (value) {\n value.visible = true;\n });\n this.setVisible(columns);\n };\n /**\n * Hides a column by column name.\n * @param {string|string[]} columnName - Defines a single or collection of column names to hide.\n * @param {string} hideBy - Defines the column key either as field name or header text.\n * @return {void}\n */\n ShowHide.prototype.hide = function (columnName, hideBy) {\n var keys = this.getToggleFields(columnName);\n var columns = this.getColumns(keys, hideBy);\n this.parent.notify(events.tooltipDestroy, { module: 'edit' });\n columns.forEach(function (value) {\n value.visible = false;\n });\n this.setVisible(columns);\n };\n ShowHide.prototype.getToggleFields = function (key) {\n var finalized = [];\n if (typeof key === 'string') {\n finalized = [key];\n }\n else {\n finalized = key;\n }\n return finalized;\n };\n ShowHide.prototype.getColumns = function (keys, getKeyBy) {\n var _this = this;\n var columns = iterateArrayOrObject(keys, function (key, index) {\n return iterateArrayOrObject(_this.parent.getColumns(), function (item, index) {\n if (item[getKeyBy] === key) {\n return item;\n }\n return undefined;\n })[0];\n });\n return columns;\n };\n /**\n * Shows or hides columns by given column collection.\n * @private\n * @param {Column[]} columns - Specifies the columns.\n * @return {void}\n */\n ShowHide.prototype.setVisible = function (columns) {\n if (isActionPrevent(this.parent)) {\n this.parent.notify(events.preventBatch, {\n instance: this, handler: this.setVisible,\n arg1: columns\n });\n return;\n }\n columns = isNullOrUndefined(columns) ? this.parent.getColumns() : columns;\n if (this.parent.allowSelection && this.parent.getSelectedRecords().length) {\n this.parent.clearSelection();\n }\n this.parent.notify(events.columnVisibilityChanged, columns);\n };\n return ShowHide;\n}());\nexport { ShowHide };\n","import { Browser, EventHandler } from '@syncfusion/ej2-base';\nimport { addClass, removeClass } from '@syncfusion/ej2-base';\nimport { formatUnit, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getScrollBarWidth } from '../base/util';\nimport { scroll, contentReady, uiUpdate, onEmpty } from '../base/constant';\nimport { ColumnWidthService } from '../services/width-controller';\n/**\n * The `Scroll` module is used to handle scrolling behaviour.\n */\nvar Scroll = /** @class */ (function () {\n /**\n * Constructor for the Grid scrolling.\n * @hidden\n */\n function Scroll(parent) {\n this.lastScrollTop = 0;\n //To maintain scroll state on grid actions.\n this.previousValues = { top: 0, left: 0 };\n this.oneTimeReady = true;\n this.parent = parent;\n this.widthService = new ColumnWidthService(parent);\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Scroll.prototype.getModuleName = function () {\n return 'scroll';\n };\n /**\n * @hidden\n */\n Scroll.prototype.setWidth = function () {\n this.parent.element.style.width = formatUnit(this.parent.width);\n if (this.parent.toolbarModule && this.parent.toolbarModule.toolbar &&\n this.parent.toolbarModule.toolbar.element) {\n this.parent.toolbarModule.toolbar.refreshOverflow();\n }\n };\n /**\n * @hidden\n */\n Scroll.prototype.setHeight = function () {\n var mHdrHeight = 0;\n var content = this.parent.getContent().firstChild;\n if (this.parent.frozenRows && this.parent.height !== 'auto') {\n mHdrHeight =\n this.parent.getHeaderContent().querySelector('tbody').offsetHeight;\n content.style.height = formatUnit(this.parent.height - mHdrHeight);\n }\n else {\n content.style.height = formatUnit(this.parent.height);\n }\n this.ensureOverflow(content);\n };\n /**\n * @hidden\n */\n Scroll.prototype.setPadding = function () {\n var content = this.parent.getHeaderContent();\n var scrollWidth = Scroll.getScrollBarWidth() - this.getThreshold();\n var cssProps = this.getCssProperties();\n content.firstChild.style[cssProps.border] = scrollWidth > 0 ? '1px' : '0px';\n content.style[cssProps.padding] = scrollWidth > 0 ? scrollWidth + 'px' : '0px';\n };\n /**\n * @hidden\n */\n Scroll.prototype.removePadding = function (rtl) {\n var cssProps = this.getCssProperties(rtl);\n this.parent.getHeaderContent().firstChild.style[cssProps.border] = '';\n this.parent.getHeaderContent().firstChild.parentElement.style[cssProps.padding] = '';\n };\n /**\n * Refresh makes the Grid adoptable with the height of parent container.\n *\n * > The [`height`](./api-grid.html#height) must be set to 100%.\n * @return\n */\n Scroll.prototype.refresh = function () {\n if (this.parent.height !== '100%') {\n return;\n }\n var content = this.parent.getContent();\n this.parent.element.style.height = '100%';\n var height = this.widthService.getSiblingsHeight(content);\n content.style.height = 'calc(100% - ' + height + 'px)'; //Set the height to the '.e-gridcontent';\n };\n Scroll.prototype.getThreshold = function () {\n /* Some browsers places the scroller outside the content,\n * hence the padding should be adjusted.*/\n var appName = Browser.info.name;\n if (appName === 'mozilla') {\n return 0.5;\n }\n return 1;\n };\n /**\n * @hidden\n */\n Scroll.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(onEmpty, this.wireEvents, this);\n this.parent.on(contentReady, this.wireEvents, this);\n this.parent.on(uiUpdate, this.onPropertyChanged, this);\n };\n /**\n * @hidden\n */\n Scroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(onEmpty, this.wireEvents);\n this.parent.off(contentReady, this.wireEvents);\n this.parent.off(uiUpdate, this.onPropertyChanged);\n };\n Scroll.prototype.onContentScroll = function (scrollTarget) {\n var _this = this;\n var element = scrollTarget;\n var isHeader = element.classList.contains('e-headercontent');\n return function (e) {\n if (_this.content.querySelector('tbody') === null) {\n return;\n }\n var target = e.target;\n var left = target.scrollLeft;\n var sLimit = target.scrollWidth;\n var isFooter = target.classList.contains('e-summarycontent');\n if (_this.previousValues.left === left) {\n _this.previousValues.top = !isHeader ? _this.previousValues.top : target.scrollTop;\n return;\n }\n element.scrollLeft = left;\n if (isFooter) {\n _this.header.scrollLeft = left;\n }\n _this.previousValues.left = left;\n _this.parent.notify(scroll, { left: left });\n };\n };\n Scroll.prototype.onFreezeContentScroll = function (scrollTarget) {\n var _this = this;\n var element = scrollTarget;\n return function (e) {\n if (_this.content.querySelector('tbody') === null) {\n return;\n }\n var target = e.target;\n var top = target.scrollTop;\n if (_this.previousValues.top === top) {\n return;\n }\n element.scrollTop = top;\n _this.previousValues.top = top;\n if (_this.parent.isDestroyed) {\n return;\n }\n };\n };\n Scroll.prototype.onWheelScroll = function (scrollTarget) {\n var _this = this;\n var element = scrollTarget;\n return function (e) {\n if (_this.content.querySelector('tbody') === null) {\n return;\n }\n var top = element.scrollTop + e.deltaMode === 1 ? e.deltaY * 30 : e.deltaY;\n if (_this.previousValues.top === top) {\n return;\n }\n e.preventDefault();\n _this.parent.getContent().querySelector('.e-frozencontent').scrollTop = top;\n element.scrollTop = top;\n _this.previousValues.top = top;\n };\n };\n Scroll.prototype.onTouchScroll = function (scrollTarget) {\n var _this = this;\n var element = scrollTarget;\n return function (e) {\n if (e.pointerType === 'mouse') {\n return;\n }\n var cont;\n var mHdr;\n var pageXY = _this.getPointXY(e);\n var top = element.scrollTop + (_this.pageXY.y - pageXY.y);\n var left = element.scrollLeft + (_this.pageXY.x - pageXY.x);\n if (_this.parent.getHeaderContent().contains(e.target)) {\n mHdr = _this.parent.getFrozenColumns() ?\n _this.parent.getHeaderContent().querySelector('.e-movableheader') : _this.parent.getHeaderContent().firstChild;\n if (_this.previousValues.left === left || (left < 0 || (mHdr.scrollWidth - mHdr.clientWidth) < left)) {\n return;\n }\n e.preventDefault();\n mHdr.scrollLeft = left;\n element.scrollLeft = left;\n _this.pageXY.x = pageXY.x;\n _this.previousValues.left = left;\n }\n else {\n cont = _this.parent.getContent().querySelector('.e-frozencontent');\n if (_this.previousValues.top === top || (top < 0 || (cont.scrollHeight - cont.clientHeight) < top)) {\n return;\n }\n e.preventDefault();\n cont.scrollTop = top;\n element.scrollTop = top;\n _this.pageXY.y = pageXY.y;\n _this.previousValues.top = top;\n }\n };\n };\n Scroll.prototype.setPageXY = function () {\n var _this = this;\n return function (e) {\n if (e.pointerType === 'mouse') {\n return;\n }\n _this.pageXY = _this.getPointXY(e);\n };\n };\n Scroll.prototype.getPointXY = function (e) {\n var pageXY = { x: 0, y: 0 };\n if (e.touches && e.touches.length) {\n pageXY.x = e.touches[0].pageX;\n pageXY.y = e.touches[0].pageY;\n }\n else {\n pageXY.x = e.pageX;\n pageXY.y = e.pageY;\n }\n return pageXY;\n };\n Scroll.prototype.wireEvents = function () {\n if (this.oneTimeReady) {\n var frzCols = this.parent.getFrozenColumns();\n this.content = this.parent.getContent().firstChild;\n this.header = this.parent.getHeaderContent().firstChild;\n var mCont = this.content.querySelector('.e-movablecontent');\n var fCont = this.content.querySelector('.e-frozencontent');\n var mHdr = this.header.querySelector('.e-movableheader');\n if (this.parent.frozenRows) {\n EventHandler.add(frzCols ? mHdr : this.header, 'touchstart pointerdown', this.setPageXY(), this);\n EventHandler.add(frzCols ? mHdr : this.header, 'touchmove pointermove', this.onTouchScroll(frzCols ? mCont : this.content), this);\n }\n if (frzCols) {\n EventHandler.add(mCont, 'scroll', this.onContentScroll(mHdr), this);\n EventHandler.add(mCont, 'scroll', this.onFreezeContentScroll(fCont), this);\n EventHandler.add(fCont, 'scroll', this.onFreezeContentScroll(mCont), this);\n EventHandler.add(mHdr, 'scroll', this.onContentScroll(mCont), this);\n EventHandler.add(fCont, 'wheel', this.onWheelScroll(mCont), this);\n EventHandler.add(fCont, 'touchstart pointerdown', this.setPageXY(), this);\n EventHandler.add(fCont, 'touchmove pointermove', this.onTouchScroll(mCont), this);\n }\n else {\n EventHandler.add(this.content, 'scroll', this.onContentScroll(this.header), this);\n EventHandler.add(this.header, 'scroll', this.onContentScroll(this.content), this);\n }\n if (this.parent.aggregates.length) {\n EventHandler.add(this.parent.getFooterContent().firstChild, 'scroll', this.onContentScroll(this.content), this);\n }\n this.refresh();\n this.oneTimeReady = false;\n }\n var table = this.parent.getContentTable();\n if (table.scrollHeight < this.parent.getContent().clientHeight) {\n addClass(table.querySelectorAll('tr:last-child td'), 'e-lastrowcell');\n if (this.parent.getFrozenColumns()) {\n addClass(this.parent.getContent().querySelector('.e-movablecontent').querySelectorAll('tr:last-child td'), 'e-lastrowcell');\n }\n }\n if (!this.parent.enableVirtualization) {\n this.content.scrollLeft = this.header.scrollLeft;\n this.content.scrollTop = this.previousValues.top;\n }\n if (!this.parent.enableColumnVirtualization) {\n this.content.scrollLeft = this.header.scrollLeft;\n }\n };\n /**\n * @hidden\n */\n Scroll.prototype.getCssProperties = function (rtl) {\n var css = {};\n var enableRtl = isNullOrUndefined(rtl) ? this.parent.enableRtl : rtl;\n css.border = enableRtl ? 'borderLeftWidth' : 'borderRightWidth';\n css.padding = enableRtl ? 'paddingLeft' : 'paddingRight';\n return css;\n };\n Scroll.prototype.ensureOverflow = function (content) {\n if (this.parent.getFrozenColumns()) {\n content.querySelector('.e-movablecontent').style.overflowY = this.parent.height === 'auto' ? 'auto' : 'scroll';\n }\n else {\n content.style.overflowY = this.parent.height === 'auto' ? 'auto' : 'scroll';\n }\n };\n Scroll.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n this.setPadding();\n this.oneTimeReady = true;\n if (this.parent.height === 'auto') {\n this.removePadding();\n }\n this.wireEvents();\n this.setHeight();\n this.setWidth();\n };\n /**\n * @hidden\n */\n Scroll.prototype.destroy = function () {\n this.removeEventListener();\n //Remove padding\n this.removePadding();\n removeClass([this.parent.getHeaderContent().firstChild], 'e-headercontent');\n removeClass([this.parent.getContent().firstChild], 'e-content');\n //Remove height\n this.parent.getContent().firstChild.style.height = '';\n //Remove width\n this.parent.element.style.width = '';\n //Remove Dom event\n EventHandler.remove(this.parent.getContent().firstChild, 'scroll', this.onContentScroll);\n };\n /**\n * Function to get the scrollbar width of the browser.\n * @return {number}\n * @hidden\n */\n Scroll.getScrollBarWidth = function () {\n return getScrollBarWidth();\n };\n return Scroll;\n}());\nexport { Scroll };\n","import { print as printWindow, createElement, detach } from '@syncfusion/ej2-base';\nimport { removeElement, getActualProperties, getActualPropFromColl } from '../base/util';\nimport { Grid } from '../base/grid';\nimport * as events from '../base/constant';\n/**\n *\n * The `Print` module is used to handle print action.\n */\nvar Print = /** @class */ (function () {\n /**\n * Constructor for the Grid print module\n * @hidden\n */\n function Print(parent, scrollModule) {\n this.isAsyncPrint = false;\n this.printing = 'isPrinting';\n this.parent = parent;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.contentReady, this.contentReady.bind(this));\n this.parent.addEventListener(events.actionBegin, this.actionBegin.bind(this));\n this.parent.on(events.onEmpty, this.onEmpty.bind(this));\n this.scrollModule = scrollModule;\n }\n /**\n * By default, prints all the Grid pages and hides the pager.\n * > You can customize print options using the\n * [`printMode`](./api-grid.html#printmode-string).\n * @return {void}\n */\n Print.prototype.print = function () {\n this.renderPrintGrid();\n this.printWind = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth + ',tabbar=no');\n this.printWind.moveTo(0, 0);\n this.printWind.resizeTo(screen.availWidth, screen.availHeight);\n };\n Print.prototype.onEmpty = function () {\n if (this.isPrintGrid()) {\n this.contentReady();\n }\n };\n Print.prototype.actionBegin = function () {\n if (this.isPrintGrid()) {\n this.isAsyncPrint = true;\n }\n };\n Print.prototype.renderPrintGrid = function () {\n var gObj = this.parent;\n var elem = 'element';\n var printGridModel = {};\n var element = createElement('div', {\n id: this.parent.element.id + '_print', className: gObj.element.className + ' e-print-grid'\n });\n document.body.appendChild(element);\n for (var _i = 0, _a = Print.printGridProp; _i < _a.length; _i++) {\n var key = _a[_i];\n if (key === 'columns') {\n printGridModel[key] = getActualPropFromColl(gObj[key]);\n }\n else if (key === 'allowPaging') {\n printGridModel[key] = this.parent.printMode === 'CurrentPage';\n }\n else {\n printGridModel[key] = getActualProperties(gObj[key]);\n }\n }\n var printGrid = new Grid(printGridModel);\n printGrid.appendTo(element);\n printGrid[this.printing] = true;\n printGrid.trigger = gObj.trigger;\n };\n Print.prototype.contentReady = function () {\n if (this.isPrintGrid()) {\n var gObj = this.parent;\n if (this.isAsyncPrint) {\n this.printGrid();\n return;\n }\n var args = {\n requestType: 'print',\n element: gObj.element,\n selectedRows: gObj.getContentTable().querySelectorAll('tr[aria-selected=\"true\"]'),\n cancel: false\n };\n if (!this.isAsyncPrint) {\n gObj.trigger(events.beforePrint, args);\n }\n if (args.cancel) {\n detach(gObj.element);\n return;\n }\n else if (!this.isAsyncPrint) {\n this.printGrid();\n }\n }\n };\n Print.prototype.printGrid = function () {\n var gObj = this.parent;\n // Pager eleement process based on primt mode\n if (gObj.allowPaging && gObj.printMode === 'CurrentPage') {\n gObj.element.querySelector('.e-gridpager').style.display = 'none';\n }\n // Height adjustment on print grid\n if (gObj.height !== 'auto') {\n var cssProps = this.scrollModule.getCssProperties();\n var contentDiv = gObj.element.querySelector('.e-content');\n var headerDiv = gObj.element.querySelector('.e-gridheader');\n contentDiv.style.height = 'auto';\n contentDiv.style.overflowY = 'auto';\n headerDiv.style[cssProps.padding] = '';\n headerDiv.firstElementChild.style[cssProps.border] = '';\n }\n // Grid alignment adjustment on grouping\n if (gObj.allowGrouping) {\n if (!gObj.groupSettings.columns.length) {\n gObj.element.querySelector('.e-groupdroparea').style.display = 'none';\n }\n else {\n this.removeColGroup(gObj.groupSettings.columns.length, gObj.element);\n removeElement(gObj.element, '.e-grouptopleftcell');\n removeElement(gObj.element, '.e-recordpluscollapse');\n removeElement(gObj.element, '.e-indentcell');\n removeElement(gObj.element, '.e-recordplusexpand');\n }\n }\n // hide horizontal scroll\n gObj.element.querySelector('.e-content').style.overflowX = 'hidden';\n //hide filter bar in print grid\n if (gObj.allowFiltering && gObj.filterSettings.type === 'FilterBar') {\n gObj.element.querySelector('.e-filterbar').style.display = 'none';\n }\n // Hide the waiting popup\n var waitingPop = gObj.element.querySelectorAll('.e-spin-show');\n if (waitingPop.length > 0) {\n waitingPop[0].classList.add('e-spin-hide');\n waitingPop[0].classList.remove('e-spin-show');\n }\n if (gObj[this.printing]) {\n detach(gObj.element);\n }\n gObj.element.classList.remove('e-print-grid');\n this.printWind = printWindow(gObj.element, this.printWind);\n gObj[this.printing] = false;\n var args = {\n element: gObj.element\n };\n gObj.trigger(events.printComplete, args);\n };\n Print.prototype.removeColGroup = function (depth, element) {\n var groupCaption = element.querySelectorAll('.e-groupcaption');\n var colSpan = groupCaption[depth - 1].getAttribute('colspan');\n for (var i = 0; i < groupCaption.length; i++) {\n groupCaption[i].setAttribute('colspan', colSpan);\n }\n var colGroups = element.querySelectorAll('colgroup');\n for (var i = 0; i < colGroups.length; i++) {\n for (var j = 0; j < depth; j++) {\n colGroups[i].childNodes[j].style.display = 'none';\n }\n }\n };\n Print.prototype.isPrintGrid = function () {\n return this.parent.element.id.indexOf('_print') > 0 && this.parent[this.printing];\n };\n /**\n * To destroy the print\n * @return {void}\n * @hidden\n */\n Print.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.contentReady, this.contentReady.bind(this));\n this.parent.removeEventListener(events.actionBegin, this.actionBegin.bind(this));\n this.parent.off(events.onEmpty, this.onEmpty.bind(this));\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Print.prototype.getModuleName = function () {\n return 'print';\n };\n Print.printGridProp = [\n 'aggregates', 'allowGrouping', 'allowFiltering', 'allowMultiSorting', 'allowReordering', 'allowSorting',\n 'allowTextWrap', 'childGrid', 'columns', 'currentViewData', 'dataSource', 'detailTemplate', 'enableAltRow',\n 'enableColumnVirtualization', 'filterSettings', 'gridLines',\n 'groupSettings', 'height', 'locale', 'pageSettings', 'printMode', 'query', 'queryString',\n 'rowHeight', 'rowTemplate', 'sortSettings', 'textWrapSettings', 'allowPaging',\n events.beforePrint, events.printComplete\n ];\n return Print;\n}());\nexport { Print };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { compile } from '@syncfusion/ej2-base';\nimport { getEnumValue } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { Property, Collection, ChildProperty } from '@syncfusion/ej2-base';\nimport { ValueFormatter } from '../services/value-formatter';\n/**\n * Configures the Grid's aggregate column.\n */\nvar AggregateColumn = /** @class */ (function (_super) {\n __extends(AggregateColumn, _super);\n function AggregateColumn() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.templateFn = {};\n return _this;\n }\n /**\n * @hidden\n */\n AggregateColumn.prototype.setFormatter = function () {\n var valueFormatter = new ValueFormatter();\n if (this.format && (this.format.skeleton || this.format.format)) {\n this.formatFn = valueFormatter.getFormatFunction(this.format);\n }\n };\n /**\n * @hidden\n */\n AggregateColumn.prototype.getFormatter = function () {\n return this.formatFn;\n };\n /**\n * @hidden\n */\n AggregateColumn.prototype.setTemplate = function (helper) {\n if (helper === void 0) { helper = {}; }\n if (this.footerTemplate !== undefined) {\n this.templateFn[getEnumValue(CellType, CellType.Summary)] = { fn: compile(this.footerTemplate, helper),\n property: 'footerTemplate' };\n }\n if (this.groupFooterTemplate !== undefined) {\n this.templateFn[getEnumValue(CellType, CellType.GroupSummary)] = { fn: compile(this.groupFooterTemplate, helper),\n property: 'groupFooterTemplate' };\n }\n if (this.groupCaptionTemplate !== undefined) {\n this.templateFn[getEnumValue(CellType, CellType.CaptionSummary)] = { fn: compile(this.groupCaptionTemplate, helper),\n property: 'groupCaptionTemplate' };\n }\n };\n /**\n * @hidden\n */\n AggregateColumn.prototype.getTemplate = function (type) {\n return this.templateFn[getEnumValue(CellType, type)];\n };\n /**\n * @hidden\n */\n AggregateColumn.prototype.setPropertiesSilent = function (prop) {\n this.setProperties(prop, true);\n };\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"columnName\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"format\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"groupFooterTemplate\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"groupCaptionTemplate\", void 0);\n __decorate([\n Property()\n ], AggregateColumn.prototype, \"customAggregate\", void 0);\n return AggregateColumn;\n}(ChildProperty));\nexport { AggregateColumn };\n/**\n * Configures the aggregate rows.\n */\nvar AggregateRow = /** @class */ (function (_super) {\n __extends(AggregateRow, _super);\n function AggregateRow() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], AggregateColumn)\n ], AggregateRow.prototype, \"columns\", void 0);\n return AggregateRow;\n}(ChildProperty));\nexport { AggregateRow };\n","import { Browser, createElement, remove } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\n/**\n * The `Clipboard` module is used to handle clipboard copy action.\n */\nvar Clipboard = /** @class */ (function () {\n /**\n * Constructor for the Grid clipboard module\n * @hidden\n */\n function Clipboard(parent) {\n this.copyContent = '';\n this.isSelect = false;\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * @hidden\n */\n Clipboard.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.contentReady, this.initialEnd, this);\n this.parent.on(events.keyPressed, this.keyDownHandler, this);\n };\n /**\n * @hidden\n */\n Clipboard.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.keyPressed, this.keyDownHandler);\n };\n Clipboard.prototype.initialEnd = function () {\n this.parent.off(events.contentReady, this.initialEnd);\n this.clipBoardTextArea = createElement('textarea', {\n className: 'e-clipboard',\n styles: 'opacity: 0',\n attrs: { readonly: 'true', tabindex: '-1', 'aria-label': 'clipboard' }\n });\n this.parent.element.appendChild(this.clipBoardTextArea);\n };\n Clipboard.prototype.keyDownHandler = function (e) {\n if (e.action === 'ctrlPlusC') {\n this.copy();\n }\n else if (e.action === 'ctrlShiftPlusH') {\n this.copy(true);\n }\n };\n Clipboard.prototype.setCopyData = function (withHeader) {\n if (window.getSelection().toString() === '') {\n var isFrozen = this.parent.getFrozenColumns();\n this.clipBoardTextArea.value = this.copyContent = '';\n var mRows = void 0;\n var rows = this.parent.getRows();\n if (isFrozen) {\n mRows = this.parent.getMovableDataRows();\n }\n if (this.parent.selectionSettings.mode !== 'Cell') {\n var selectedIndexes = this.parent.getSelectedRowIndexes().sort(function (a, b) { return a - b; });\n if (withHeader) {\n var headerTextArray = [];\n for (var i = 0; i < this.parent.getVisibleColumns().length; i++) {\n headerTextArray[i] = this.parent.getVisibleColumns()[i].headerText;\n }\n this.getCopyData(headerTextArray, false, '\\t', withHeader);\n this.copyContent += '\\n';\n }\n for (var i = 0; i < selectedIndexes.length; i++) {\n if (i > 0) {\n this.copyContent += '\\n';\n }\n var cells = [].slice.call(rows[selectedIndexes[i]].querySelectorAll('.e-rowcell'));\n if (isFrozen) {\n cells.push.apply(cells, [].slice.call(mRows[selectedIndexes[i]].querySelectorAll('.e-rowcell')));\n }\n this.getCopyData(cells, false, '\\t', withHeader);\n }\n }\n else {\n var obj = this.checkBoxSelection();\n if (obj.status) {\n if (withHeader) {\n var headers = [];\n for (var i = 0; i < obj.colIndexes.length; i++) {\n headers.push(this.parent.getColumnHeaderByIndex(obj.colIndexes[i]));\n }\n this.getCopyData(headers, false, '\\t', withHeader);\n this.copyContent += '\\n';\n }\n for (var i = 0; i < obj.rowIndexes.length; i++) {\n if (i > 0) {\n this.copyContent += '\\n';\n }\n var cells = [].slice.call(rows[obj.rowIndexes[i]].\n querySelectorAll('.e-cellselectionbackground'));\n if (isFrozen) {\n cells.push.apply(cells, [].slice.call(mRows[obj.rowIndexes[i]].querySelectorAll('.e-cellselectionbackground')));\n }\n this.getCopyData(cells, false, '\\t', withHeader);\n }\n }\n else {\n this.getCopyData([].slice.call(this.parent.element.querySelectorAll('.e-cellselectionbackground')), true, '\\n', withHeader);\n }\n }\n var args = {\n data: this.copyContent,\n cancel: false,\n };\n this.parent.trigger(events.beforeCopy, args);\n if (args.cancel) {\n return;\n }\n this.clipBoardTextArea.value = this.copyContent = args.data;\n if (!Browser.userAgent.match(/ipad|ipod|iphone/i)) {\n this.clipBoardTextArea.select();\n }\n else {\n this.clipBoardTextArea.setSelectionRange(0, this.clipBoardTextArea.value.length);\n }\n this.isSelect = true;\n }\n };\n Clipboard.prototype.getCopyData = function (cells, isCell, splitKey, withHeader) {\n var isElement = typeof cells[0] !== 'string';\n for (var j = 0; j < cells.length; j++) {\n if (withHeader && isCell) {\n this.copyContent += this.parent.getColumns()[parseInt(cells[j].getAttribute('aria-colindex'), 10)].headerText + '\\n';\n }\n if (isElement) {\n if (!cells[j].classList.contains('e-hide')) {\n this.copyContent += cells[j].textContent;\n }\n }\n else {\n this.copyContent += cells[j];\n }\n if (j < cells.length - 1) {\n this.copyContent += splitKey;\n }\n }\n };\n /**\n * Copy selected rows or cells data into clipboard.\n * @param {boolean} withHeader - Specifies whether the column header data need to be copied or not.\n */\n Clipboard.prototype.copy = function (withHeader) {\n if (document.queryCommandSupported('copy')) {\n this.setCopyData(withHeader);\n document.execCommand('copy');\n this.clipBoardTextArea.blur();\n }\n if (this.isSelect) {\n window.getSelection().removeAllRanges();\n this.isSelect = false;\n }\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Clipboard.prototype.getModuleName = function () {\n return 'clipboard';\n };\n /**\n * To destroy the clipboard\n * @return {void}\n * @hidden\n */\n Clipboard.prototype.destroy = function () {\n this.removeEventListener();\n remove(this.clipBoardTextArea);\n };\n Clipboard.prototype.checkBoxSelection = function () {\n var gridObj = this.parent;\n var obj = { status: false };\n if (gridObj.selectionSettings.mode === 'Cell') {\n var rowCellIndxes = gridObj.getSelectedRowCellIndexes();\n var str = void 0;\n var isBox = void 0;\n var rowIndexes = [];\n var i = void 0;\n for (i = 0; i < rowCellIndxes.length; i++) {\n if (rowCellIndxes[i].cellIndexes.length) {\n rowIndexes.push(rowCellIndxes[i].rowIndex);\n }\n if (rowCellIndxes[i].cellIndexes.length) {\n if (!str) {\n str = JSON.stringify(rowCellIndxes[i].cellIndexes.sort());\n }\n if (str !== JSON.stringify(rowCellIndxes[i].cellIndexes.sort())) {\n break;\n }\n }\n }\n rowIndexes.sort();\n if (i === rowCellIndxes.length && rowIndexes[rowIndexes.length - 1] - rowIndexes[0] === rowIndexes.length - 1) {\n obj = { status: true, rowIndexes: rowIndexes, colIndexes: rowCellIndxes[0].cellIndexes };\n }\n }\n return obj;\n };\n return Clipboard;\n}());\nexport { Clipboard };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, ChildProperty, Browser, closest, extend } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';\nimport { createElement, addClass, removeClass, append, classList } from '@syncfusion/ej2-base';\nimport { Property, Collection, Complex, Event, NotifyPropertyChanges, L10n } from '@syncfusion/ej2-base';\nimport { EventHandler, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { createSpinner, hideSpinner, showSpinner, Tooltip } from '@syncfusion/ej2-popups';\nimport { iterateArrayOrObject, prepareColumns, parentsUntil, wrap, templateCompiler, refreshForeignData } from './util';\nimport * as events from '../base/constant';\nimport { Render } from '../renderer/render';\nimport { RenderType } from './enum';\nimport { RowRenderer } from '../renderer/row-renderer';\nimport { CellRenderer } from '../renderer/cell-renderer';\nimport { CellRendererFactory } from '../services/cell-render-factory';\nimport { ServiceLocator } from '../services/service-locator';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { RendererFactory } from '../services/renderer-factory';\nimport { ColumnWidthService } from '../services/width-controller';\nimport { AriaService } from '../services/aria-service';\nimport { FocusStrategy } from '../services/focus-strategy';\nimport { PageSettings } from '../models/page-settings';\nimport { Selection } from '../actions/selection';\nimport { Search } from '../actions/search';\nimport { ShowHide } from '../actions/show-hide';\nimport { Scroll } from '../actions/scroll';\nimport { Print } from '../actions/print';\nimport { AggregateRow } from '../models/aggregate';\nimport { Clipboard } from '../actions/clipboard';\n/**\n * Represents the field name and direction of sort column.\n */\nvar SortDescriptor = /** @class */ (function (_super) {\n __extends(SortDescriptor, _super);\n function SortDescriptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], SortDescriptor.prototype, \"direction\", void 0);\n return SortDescriptor;\n}(ChildProperty));\nexport { SortDescriptor };\n/**\n * Configures the sorting behavior of Grid.\n */\nvar SortSettings = /** @class */ (function (_super) {\n __extends(SortSettings, _super);\n function SortSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], SortDescriptor)\n ], SortSettings.prototype, \"columns\", void 0);\n __decorate([\n Property(true)\n ], SortSettings.prototype, \"allowUnsort\", void 0);\n return SortSettings;\n}(ChildProperty));\nexport { SortSettings };\n/**\n * Represents the predicate for the filter column.\n */\nvar Predicate = /** @class */ (function (_super) {\n __extends(Predicate, _super);\n function Predicate() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Predicate.prototype, \"field\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"operator\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"value\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"matchCase\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"predicate\", void 0);\n __decorate([\n Property({})\n ], Predicate.prototype, \"actualFilterValue\", void 0);\n __decorate([\n Property({})\n ], Predicate.prototype, \"actualOperator\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], Predicate.prototype, \"ejpredicate\", void 0);\n return Predicate;\n}(ChildProperty));\nexport { Predicate };\n/**\n * Configures the filtering behavior of the Grid.\n */\nvar FilterSettings = /** @class */ (function (_super) {\n __extends(FilterSettings, _super);\n function FilterSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Collection([], Predicate)\n ], FilterSettings.prototype, \"columns\", void 0);\n __decorate([\n Property('FilterBar')\n ], FilterSettings.prototype, \"type\", void 0);\n __decorate([\n Property()\n ], FilterSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], FilterSettings.prototype, \"showFilterBarStatus\", void 0);\n __decorate([\n Property(1500)\n ], FilterSettings.prototype, \"immediateModeDelay\", void 0);\n __decorate([\n Property()\n ], FilterSettings.prototype, \"operators\", void 0);\n __decorate([\n Property(false)\n ], FilterSettings.prototype, \"ignoreAccent\", void 0);\n return FilterSettings;\n}(ChildProperty));\nexport { FilterSettings };\n/**\n * Configures the selection behavior of the Grid.\n */\nvar SelectionSettings = /** @class */ (function (_super) {\n __extends(SelectionSettings, _super);\n function SelectionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Row')\n ], SelectionSettings.prototype, \"mode\", void 0);\n __decorate([\n Property('Flow')\n ], SelectionSettings.prototype, \"cellSelectionMode\", void 0);\n __decorate([\n Property('Single')\n ], SelectionSettings.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"checkboxOnly\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"persistSelection\", void 0);\n return SelectionSettings;\n}(ChildProperty));\nexport { SelectionSettings };\n/**\n * Configures the search behavior of the Grid.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property([])\n ], SearchSettings.prototype, \"fields\", void 0);\n __decorate([\n Property('')\n ], SearchSettings.prototype, \"key\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"operator\", void 0);\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n/**\n * Configures the row drop settings of the Grid.\n */\nvar RowDropSettings = /** @class */ (function (_super) {\n __extends(RowDropSettings, _super);\n function RowDropSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], RowDropSettings.prototype, \"targetID\", void 0);\n return RowDropSettings;\n}(ChildProperty));\nexport { RowDropSettings };\n/**\n * Configures the text wrap settings of the Grid.\n */\nvar TextWrapSettings = /** @class */ (function (_super) {\n __extends(TextWrapSettings, _super);\n function TextWrapSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Both')\n ], TextWrapSettings.prototype, \"wrapMode\", void 0);\n return TextWrapSettings;\n}(ChildProperty));\nexport { TextWrapSettings };\n/**\n * Configures the group behavior of the Grid.\n */\nvar GroupSettings = /** @class */ (function (_super) {\n __extends(GroupSettings, _super);\n function GroupSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], GroupSettings.prototype, \"showDropArea\", void 0);\n __decorate([\n Property(false)\n ], GroupSettings.prototype, \"showToggleButton\", void 0);\n __decorate([\n Property(false)\n ], GroupSettings.prototype, \"showGroupedColumn\", void 0);\n __decorate([\n Property(true)\n ], GroupSettings.prototype, \"showUngroupButton\", void 0);\n __decorate([\n Property(false)\n ], GroupSettings.prototype, \"disablePageWiseAggregates\", void 0);\n __decorate([\n Property([])\n ], GroupSettings.prototype, \"columns\", void 0);\n __decorate([\n Property()\n ], GroupSettings.prototype, \"captionTemplate\", void 0);\n return GroupSettings;\n}(ChildProperty));\nexport { GroupSettings };\n/**\n * Configures the edit behavior of the Grid.\n */\nvar EditSettings = /** @class */ (function (_super) {\n __extends(EditSettings, _super);\n function EditSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowAdding\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowEditing\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"allowDeleting\", void 0);\n __decorate([\n Property('Normal')\n ], EditSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], EditSettings.prototype, \"allowEditOnDblClick\", void 0);\n __decorate([\n Property(true)\n ], EditSettings.prototype, \"showConfirmDialog\", void 0);\n __decorate([\n Property(false)\n ], EditSettings.prototype, \"showDeleteConfirmDialog\", void 0);\n return EditSettings;\n}(ChildProperty));\nexport { EditSettings };\n/**\n * Represents the Grid component.\n * ```html\n *
    \n * \n * ```\n */\nvar Grid = /** @class */ (function (_super) {\n __extends(Grid, _super);\n /**\n * Constructor for creating the component\n * @hidden\n */\n function Grid(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.inViewIndexes = [];\n _this.freezeRefresh = Component.prototype.refresh;\n _this.needsID = true;\n setValue('mergePersistData', _this.mergePersistGridData, _this);\n return _this;\n }\n /**\n * Get the properties to be maintained in the persisted state.\n * @return {string}\n * @hidden\n */\n Grid.prototype.getPersistData = function () {\n var _this = this;\n var keyEntity = ['pageSettings', 'sortSettings',\n 'filterSettings', 'groupSettings', 'columns', 'searchSettings', 'selectedRowIndex'];\n var ignoreOnPersist = {\n pageSettings: ['template', 'pageSizes', 'enableQueryString', 'totalRecordsCount', 'pageCount'],\n filterSettings: ['type', 'mode', 'showFilterBarStatus', 'immediateModeDelay', 'ignoreAccent'],\n groupSettings: ['showDropArea', 'showToggleButton', 'showGroupedColumn', 'showUngroupButton',\n 'disablePageWiseAggregates', 'hideCaptionCount'],\n searchSettings: ['fields', 'operator', 'ignoreCase'],\n sortSettings: [], columns: [], selectedRowIndex: []\n };\n var ignoreOnColumn = ['filter', 'edit', 'filterBarTemplate', 'headerTemplate', 'template',\n 'commandTemplate', 'commands', 'dataSource'];\n keyEntity.forEach(function (value) {\n var currentObject = _this[value];\n for (var _i = 0, _a = ignoreOnPersist[value]; _i < _a.length; _i++) {\n var val = _a[_i];\n delete currentObject[val];\n }\n });\n this.ignoreInArrays(ignoreOnColumn, this.columns);\n return this.addOnPersist(keyEntity);\n };\n Grid.prototype.ignoreInArrays = function (ignoreOnColumn, columns) {\n var _this = this;\n columns.forEach(function (column) {\n if (column.columns) {\n _this.ignoreInColumn(ignoreOnColumn, column);\n _this.ignoreInArrays(ignoreOnColumn, column.columns);\n }\n else {\n _this.ignoreInColumn(ignoreOnColumn, column);\n }\n });\n };\n Grid.prototype.ignoreInColumn = function (ignoreOnColumn, column) {\n ignoreOnColumn.forEach(function (val) {\n delete column[val];\n });\n };\n /**\n * To provide the array of modules needed for component rendering\n * @return {ModuleDeclaration[]}\n * @hidden\n */\n Grid.prototype.requiredModules = function () {\n var modules = [];\n if (this.allowFiltering) {\n modules.push({\n member: 'filter',\n args: [this, this.filterSettings, this.serviceLocator]\n });\n }\n if (this.allowExcelExport) {\n modules.push({\n member: 'ExcelExport',\n args: [this]\n });\n }\n if (this.allowPdfExport) {\n modules.push({\n member: 'PdfExport',\n args: [this]\n });\n }\n if (this.allowSorting) {\n modules.push({\n member: 'sort',\n args: [this, this.sortSettings, this.sortedColumns, this.serviceLocator]\n });\n }\n if (this.allowPaging) {\n modules.push({\n member: 'pager',\n args: [this, this.pageSettings]\n });\n }\n if (this.allowSelection) {\n modules.push({\n member: 'selection',\n args: [this, this.selectionSettings, this.serviceLocator]\n });\n }\n modules.push({\n member: 'resize',\n args: [this]\n });\n if (this.allowReordering) {\n modules.push({\n member: 'reorder',\n args: [this]\n });\n }\n if (this.allowRowDragAndDrop) {\n modules.push({\n member: 'rowDragAndDrop',\n args: [this]\n });\n }\n if (this.allowGrouping) {\n modules.push({\n member: 'group',\n args: [this, this.groupSettings, this.sortedColumns, this.serviceLocator]\n });\n }\n if (this.aggregates.length) {\n modules.push({ member: 'aggregate', args: [this, this.serviceLocator] });\n }\n if (this.isDetail()) {\n modules.push({\n member: 'detailRow',\n args: [this, this.serviceLocator]\n });\n }\n if (this.toolbar || this.toolbarTemplate) {\n modules.push({\n member: 'toolbar',\n args: [this, this.serviceLocator]\n });\n }\n if (this.enableVirtualization || this.enableColumnVirtualization) {\n modules.push({\n member: 'virtualscroll',\n args: [this, this.serviceLocator]\n });\n }\n if (this.getFrozenColumns() || this.frozenRows) {\n modules.push({ member: 'freeze', args: [this, this.serviceLocator] });\n }\n if (this.isCommandColumn(this.columns)) {\n modules.push({\n member: 'commandColumn',\n args: [this, this.serviceLocator]\n });\n }\n if (this.editSettings.allowAdding || this.editSettings.allowDeleting || this.editSettings.allowEditing) {\n modules.push({\n member: 'edit',\n args: [this, this.serviceLocator]\n });\n }\n this.extendRequiredModules(modules);\n return modules;\n };\n Grid.prototype.extendRequiredModules = function (modules) {\n if (this.contextMenuItems) {\n modules.push({\n member: 'contextMenu',\n args: [this, this.serviceLocator]\n });\n }\n if (this.showColumnMenu) {\n modules.push({\n member: 'columnMenu',\n args: [this, this.serviceLocator]\n });\n }\n if (this.showColumnChooser) {\n modules.push({\n member: 'columnChooser',\n args: [this, this.serviceLocator]\n });\n }\n if (this.isForeignKeyEnabled(this.columns)) {\n modules.push({ member: 'foreignKey', args: [this, this.serviceLocator] });\n }\n };\n /**\n * For internal use only - Initialize the event handler;\n * @private\n */\n Grid.prototype.preRender = function () {\n this.serviceLocator = new ServiceLocator;\n this.initProperties();\n this.initializeServices();\n };\n Grid.prototype.initProperties = function () {\n /* tslint:disable */\n this.isInitial = true;\n this.sortedColumns = [];\n this.inViewIndexes = [];\n this.mediaCol = [];\n this.isInitialLoad = false;\n this.mergeCells = {};\n this.isEdit = false;\n this.checkAllRows = 'None';\n this.isCheckBoxSelection = false;\n this.isPersistSelection = false;\n this.freezeRefresh = Component.prototype.refresh;\n this.filterOperators = {\n contains: 'contains', endsWith: 'endswith', equal: 'equal', greaterThan: 'greaterthan', greaterThanOrEqual: 'greaterthanorequal',\n lessThan: 'lessthan', lessThanOrEqual: 'lessthanorequal', notEqual: 'notequal', startsWith: 'startswith'\n };\n this.defaultLocale = {\n EmptyRecord: 'No records to display',\n True: 'true',\n False: 'false',\n InvalidFilterMessage: 'Invalid Filter Data',\n GroupDropArea: 'Drag a column header here to group its column',\n UnGroup: 'Click here to ungroup',\n GroupDisable: 'Grouping is disabled for this column',\n FilterbarTitle: '\\'s filter bar cell',\n EmptyDataSourceError: 'DataSource must not be empty at initial load since columns are generated from dataSource in AutoGenerate Column Grid',\n // Toolbar Items\n Add: 'Add',\n Edit: 'Edit',\n Cancel: 'Cancel',\n Update: 'Update',\n Delete: 'Delete',\n Print: 'Print',\n Pdfexport: 'PDF Export',\n Excelexport: 'Excel Export',\n Wordexport: 'Word Export',\n Csvexport: 'CSV Export',\n Search: 'Search',\n Columnchooser: 'Columns',\n Save: 'Save',\n Item: 'item',\n Items: 'items',\n EditOperationAlert: 'No records selected for edit operation',\n DeleteOperationAlert: 'No records selected for delete operation',\n SaveButton: 'Save',\n OKButton: 'OK',\n CancelButton: 'Cancel',\n EditFormTitle: 'Details of ',\n AddFormTitle: 'Add New Record',\n BatchSaveConfirm: 'Are you sure you want to save changes?',\n BatchSaveLostChanges: 'Unsaved changes will be lost. Are you sure you want to continue?',\n ConfirmDelete: 'Are you sure you want to Delete Record?',\n CancelEdit: 'Are you sure you want to Cancel the changes?',\n ChooseColumns: 'Choose Column',\n SearchColumns: 'search columns',\n Matchs: 'No Matches Found',\n FilterButton: 'Filter',\n ClearButton: 'Clear',\n StartsWith: 'Starts With',\n EndsWith: 'Ends With',\n Contains: 'Contains',\n Equal: 'Equal',\n NotEqual: 'Not Equal',\n LessThan: 'Less Than',\n LessThanOrEqual: 'Less Than Or Equal',\n GreaterThan: 'Greater Than',\n GreaterThanOrEqual: 'Greater Than Or Equal',\n ChooseDate: 'Choose a Date',\n EnterValue: 'Enter the value',\n Copy: 'Copy',\n Group: 'Group by this column',\n Ungroup: 'Ungroup by this column',\n autoFitAll: 'Auto Fit all columns',\n autoFit: 'Auto Fit this column',\n Export: 'Export',\n FirstPage: 'First Page',\n LastPage: 'Last Page',\n PreviousPage: 'Previous Page',\n NextPage: 'Next Page',\n SortAscending: 'Sort Ascending',\n SortDescending: 'Sort Descending',\n EditRecord: 'Edit Record',\n DeleteRecord: 'Delete Record',\n FilterMenu: 'Filter',\n SelectAll: 'Select All',\n Blanks: 'Blanks',\n FilterTrue: 'True',\n FilterFalse: 'False',\n NoResult: 'No Matches Found',\n ClearFilter: 'Clear Filter',\n NumberFilter: 'Number Filters',\n TextFilter: 'Text Filters',\n DateFilter: 'Date Filters',\n MatchCase: 'Match Case',\n Between: 'Between',\n CustomFilter: 'Custom Filter',\n CustomFilterPlaceHolder: 'Enter the value',\n CustomFilterDatePlaceHolder: 'Choose a date',\n AND: 'AND',\n OR: 'OR',\n ShowRowsWhere: 'Show rows where:'\n };\n this.keyConfigs = {\n downArrow: 'downarrow',\n upArrow: 'uparrow',\n rightArrow: 'rightarrow',\n leftArrow: 'leftarrow',\n shiftDown: 'shift+downarrow',\n shiftUp: 'shift+uparrow',\n shiftRight: 'shift+rightarrow',\n shiftLeft: 'shift+leftarrow',\n home: 'home',\n end: 'end',\n escape: 'escape',\n ctrlHome: 'ctrl+home',\n ctrlEnd: 'ctrl+end',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n ctrlAltPageUp: 'ctrl+alt+pageup',\n ctrlAltPageDown: 'ctrl+alt+pagedown',\n altPageUp: 'alt+pageup',\n altPageDown: 'alt+pagedown',\n altDownArrow: 'alt+downarrow',\n altUpArrow: 'alt+uparrow',\n ctrlDownArrow: 'ctrl+downarrow',\n ctrlUpArrow: 'ctrl+uparrow',\n ctrlPlusA: 'ctrl+A',\n ctrlPlusP: 'ctrl+P',\n insert: 'insert',\n delete: 'delete',\n f2: 'f2',\n enter: 'enter',\n ctrlEnter: 'ctrl+enter',\n shiftEnter: 'shift+enter',\n tab: 'tab',\n shiftTab: 'shift+tab',\n space: 'space',\n ctrlPlusC: 'ctrl+C',\n ctrlShiftPlusH: 'ctrl+shift+H'\n };\n /* tslint:enable */\n };\n /**\n * For internal use only - To Initialize the component rendering.\n * @private\n */\n Grid.prototype.render = function () {\n this.ariaService.setOptions(this.element, { role: 'grid' });\n createSpinner({ target: this.element });\n this.renderModule = new Render(this, this.serviceLocator);\n this.getMediaColumns();\n this.searchModule = new Search(this);\n this.scrollModule = new Scroll(this);\n this.notify(events.initialLoad, {});\n this.trigger(events.load);\n prepareColumns(this.columns, this.enableColumnVirtualization);\n this.getColumns();\n this.processModel();\n this.gridRender();\n this.wireEvents();\n this.addListener();\n this.updateDefaultCursor();\n this.updateStackedFilter();\n this.showSpinner();\n this.notify(events.initialEnd, {});\n };\n /**\n * By default, grid shows the spinner for all its actions. You can use this method to show spinner at your needed time.\n */\n Grid.prototype.showSpinner = function () {\n showSpinner(this.element);\n };\n /**\n * Manually showed spinner needs to hide by `hideSpinnner`.\n */\n Grid.prototype.hideSpinner = function () {\n hideSpinner(this.element);\n };\n Grid.prototype.updateStackedFilter = function () {\n if (this.allowFiltering && this.filterSettings.type === 'FilterBar' &&\n this.getHeaderContent().querySelectorAll('.e-stackedheadercell').length) {\n this.getHeaderContent().classList.add('e-stackedfilter');\n }\n else {\n this.getHeaderContent().classList.remove('e-stackedfilter');\n }\n };\n Grid.prototype.getMediaColumns = function () {\n if (!this.enableColumnVirtualization) {\n var gcol = this.getColumns();\n this.getShowHideService = this.serviceLocator.getService('showHideService');\n if (!isNullOrUndefined(gcol)) {\n for (var index = 0; index < gcol.length; index++) {\n if (!isNullOrUndefined(gcol[index].hideAtMedia)) {\n this.mediaCol.push(gcol[index]);\n var media = window.matchMedia(gcol[index].hideAtMedia);\n this.mediaQueryUpdate(index, media);\n media.addListener(this.mediaQueryUpdate.bind(this, index));\n }\n }\n }\n }\n };\n /**\n * @hidden\n */\n Grid.prototype.mediaQueryUpdate = function (columnIndex, e) {\n var col = this.getColumns()[columnIndex];\n col.visible = e.matches;\n if (this.isInitialLoad) {\n if (col.visible) {\n this.showHider.show(col.headerText, 'headerText');\n }\n else {\n this.showHider.hide(col.headerText, 'headerText');\n }\n }\n };\n Grid.prototype.refreshMediaCol = function () {\n this.isInitialLoad = true;\n };\n /**\n * For internal use only - Initialize the event handler\n * @private\n */\n Grid.prototype.eventInitializer = function () {\n //eventInitializer\n };\n /**\n * Destroys the component (detaches/removes all event handlers, attributes, classes, and empties the component element).\n * @method destroy\n * @return {void}\n */\n Grid.prototype.destroy = function () {\n this.unwireEvents();\n this.removeListener();\n this.notify(events.destroy, {});\n this.destroyDependentModules();\n _super.prototype.destroy.call(this);\n this.element.innerHTML = '';\n classList(this.element, [], ['e-rtl', 'e-gridhover', 'e-responsive', 'e-default', 'e-device', 'e-grid-min-height']);\n };\n Grid.prototype.destroyDependentModules = function () {\n this.scrollModule.destroy();\n this.keyboardModule.destroy();\n this.focusModule.destroy();\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Grid.prototype.getModuleName = function () {\n return 'grid';\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n Grid.prototype.onPropertyChanged = function (newProp, oldProp) {\n var requireRefresh = false;\n var requireGridRefresh = false;\n var checkCursor;\n var args = { requestType: 'refresh' };\n if (this.isDestroyed) {\n return;\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowPaging':\n this.notify(events.uiUpdate, { module: 'pager', enable: this.allowPaging });\n requireRefresh = true;\n break;\n case 'pageSettings':\n this.notify(events.inBoundModelChanged, { module: 'pager', properties: newProp.pageSettings });\n if (isNullOrUndefined(newProp.pageSettings.currentPage) && isNullOrUndefined(newProp.pageSettings.totalRecordsCount)\n || ((newProp.pageSettings.currentPage !== oldProp.pageSettings.currentPage)\n && !this.enableColumnVirtualization && !this.enableVirtualization\n && this.pageSettings.totalRecordsCount <= this.pageSettings.pageSize)) {\n requireRefresh = true;\n }\n break;\n case 'currencyCode':\n case 'locale':\n _super.prototype.refresh.call(this);\n break;\n case 'allowSorting':\n this.notify(events.uiUpdate, { module: 'sort', enable: this.allowSorting });\n requireRefresh = true;\n checkCursor = true;\n break;\n case 'allowFiltering':\n this.updateStackedFilter();\n this.notify(events.uiUpdate, { module: 'filter', enable: this.allowFiltering });\n requireRefresh = true;\n if (this.filterSettings.type !== 'FilterBar') {\n this.refreshHeader();\n }\n break;\n case 'height':\n case 'width':\n this.notify(events.uiUpdate, { module: 'scroll', properties: { width: newProp.width, height: newProp.height } });\n break;\n case 'allowReordering':\n this.headerModule.refreshUI();\n checkCursor = true;\n break;\n case 'allowRowDragAndDrop':\n this.notify(events.uiUpdate, { module: 'rowDragAndDrop', enable: this.allowRowDragAndDrop });\n break;\n case 'rowTemplate':\n this.rowTemplateFn = templateCompiler(this.rowTemplate);\n requireRefresh = true;\n break;\n case 'detailTemplate':\n this.detailTemplateFn = templateCompiler(this.detailTemplate);\n requireRefresh = true;\n break;\n case 'allowGrouping':\n this.notify(events.uiUpdate, { module: 'group', enable: this.allowGrouping });\n this.headerModule.refreshUI();\n requireRefresh = true;\n checkCursor = true;\n break;\n case 'childGrid':\n requireRefresh = true;\n break;\n case 'toolbar':\n this.notify(events.uiUpdate, { module: 'toolbar' });\n break;\n case 'groupSettings':\n if (!(isNullOrUndefined(newProp.groupSettings.showDropArea))) {\n this.headerModule.refreshUI();\n requireRefresh = true;\n checkCursor = true;\n }\n this.notify(events.inBoundModelChanged, {\n module: 'group', properties: newProp.groupSettings,\n oldProperties: oldProp.groupSettings\n });\n break;\n case 'aggregates':\n this.notify(events.uiUpdate, { module: 'aggregate', properties: newProp });\n break;\n case 'columns':\n this.updateColumnObject();\n requireGridRefresh = true;\n break;\n default:\n this.extendedPropertyChange(prop, newProp);\n }\n }\n if (checkCursor) {\n this.updateDefaultCursor();\n }\n if (requireGridRefresh) {\n this.refresh();\n }\n else if (requireRefresh) {\n this.notify(events.modelChanged, args);\n requireRefresh = false;\n }\n };\n Grid.prototype.extendedPropertyChange = function (prop, newProp) {\n switch (prop) {\n case 'enableRtl':\n this.updateRTL();\n if (this.allowPaging) {\n this.element.querySelector('.e-gridpager').ej2_instances[0].enableRtl = newProp.enableRtl;\n this.element.querySelector('.e-gridpager').ej2_instances[0].dataBind();\n }\n if (this.height !== 'auto') {\n this.scrollModule.removePadding(!newProp.enableRtl);\n this.scrollModule.setPadding();\n }\n if (this.toolbar) {\n this.toolbarModule.getToolbar().ej2_instances[0].enableRtl = newProp.enableRtl;\n this.toolbarModule.getToolbar().ej2_instances[0].dataBind();\n }\n if (this.contextMenuItems) {\n this.contextMenuModule.getContextMenu().ej2_instances[0].enableRtl = newProp.enableRtl;\n this.contextMenuModule.getContextMenu().ej2_instances[0].dataBind();\n }\n if (this.showColumnMenu) {\n this.columnMenuModule.getColumnMenu().ej2_instances[0].enableRtl = newProp.enableRtl;\n this.columnMenuModule.getColumnMenu().ej2_instances[0].dataBind();\n }\n this.notify(events.rtlUpdated, {});\n break;\n case 'enableAltRow':\n this.renderModule.refresh();\n break;\n case 'frozenColumns':\n case 'frozenRows':\n this.freezeRefresh();\n break;\n case 'allowResizing':\n this.headerModule.refreshUI();\n this.updateResizeLines();\n break;\n case 'rowHeight':\n if (this.rowHeight) {\n addClass([this.element], 'e-grid-min-height');\n }\n else {\n removeClass([this.element], 'e-grid-min-height');\n }\n this.renderModule.refresh();\n this.headerModule.refreshUI();\n break;\n case 'gridLines':\n this.updateGridLines();\n break;\n case 'showColumnMenu':\n this.headerModule.refreshUI();\n this.notify(events.uiUpdate, { module: 'columnMenu', enable: true });\n break;\n case 'columnMenuItems':\n this.notify(events.uiUpdate, { module: 'columnMenu', enable: this.columnMenuItems });\n break;\n case 'contextMenuItems':\n this.notify(events.uiUpdate, { module: 'contextMenu', enable: this.contextMenuItems });\n break;\n case 'showColumnChooser':\n this.notify(events.uiUpdate, { module: 'columnChooser', enable: this.showColumnChooser });\n break;\n case 'filterSettings':\n this.updateStackedFilter();\n this.notify(events.inBoundModelChanged, { module: 'filter', properties: newProp.filterSettings });\n break;\n case 'searchSettings':\n this.notify(events.inBoundModelChanged, { module: 'search', properties: newProp.searchSettings });\n break;\n case 'sortSettings':\n this.notify(events.inBoundModelChanged, { module: 'sort' });\n break;\n case 'selectionSettings':\n this.notify(events.inBoundModelChanged, { module: 'selection', properties: newProp.selectionSettings });\n break;\n case 'editSettings':\n this.notify(events.inBoundModelChanged, { module: 'edit', properties: newProp.editSettings });\n break;\n case 'allowTextWrap':\n case 'textWrapSettings':\n if (this.allowTextWrap) {\n this.applyTextWrap();\n }\n else {\n this.removeTextWrap();\n }\n this.notify(events.freezeRender, { case: 'textwrap', isModeChg: (prop === 'textWrapSettings') });\n break;\n case 'dataSource':\n var pending_1 = this.getDataModule().getState();\n if (pending_1.isPending) {\n var gResult_1 = !isNullOrUndefined(this.dataSource) ? this.dataSource.result : [];\n (pending_1.group || []).forEach(function (name) { gResult_1 = DataUtil.group(gResult_1, name); });\n this.dataSource = { result: gResult_1, count: this.dataSource.count };\n pending_1.resolver(this.dataSource);\n }\n else {\n this.notify(events.dataSourceModified, {});\n this.renderModule.refresh();\n }\n break;\n case 'enableHover':\n var action = newProp.enableHover ? addClass : removeClass;\n action([this.element], 'e-gridhover');\n break;\n }\n };\n /**\n * @private\n */\n Grid.prototype.setProperties = function (prop, muteOnChange) {\n _super.prototype.setProperties.call(this, prop, muteOnChange);\n if (this.filterModule && muteOnChange) {\n this.filterModule.refreshFilter();\n }\n };\n /**\n * @hidden\n */\n Grid.prototype.updateDefaultCursor = function () {\n var headerRows = [].slice.call(this.element.querySelectorAll('.e-columnheader'));\n for (var _i = 0, headerRows_1 = headerRows; _i < headerRows_1.length; _i++) {\n var row = headerRows_1[_i];\n if (this.allowSorting || this.allowGrouping || this.allowReordering) {\n row.classList.remove('e-defaultcursor');\n }\n else {\n row.classList.add('e-defaultcursor');\n }\n }\n };\n Grid.prototype.updateColumnModel = function (columns) {\n for (var i = 0, len = columns.length; i < len; i++) {\n if (columns[i].columns) {\n this.updateColumnModel(columns[i].columns);\n }\n else {\n this.columnModel.push(columns[i]);\n }\n }\n this.updateFrozenColumns();\n };\n Grid.prototype.updateFrozenColumns = function () {\n var cols = this.columnModel;\n var count = 0;\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[i].isFrozen) {\n cols.splice(this.frozenColumns + count, 0, cols.splice(i, 1)[0]);\n count++;\n }\n }\n };\n /**\n * Gets the columns from the Grid.\n * @return {Column[]}\n */\n Grid.prototype.getColumns = function (isRefresh) {\n var _this = this;\n var inview = this.inViewIndexes.map(function (v) { return v - _this.groupSettings.columns.length; }).filter(function (v) { return v > -1; });\n var vLen = inview.length;\n if (!this.enableColumnVirtualization || isNullOrUndefined(this.columnModel) || this.columnModel.length === 0 || isRefresh) {\n this.columnModel = [];\n this.updateColumnModel(this.columns);\n }\n var columns = vLen === 0 ? this.columnModel :\n this.columnModel.slice(inview[0], inview[vLen - 1] + 1);\n return columns;\n };\n /**\n * @private\n */\n Grid.prototype.getColumnIndexesInView = function () {\n return this.inViewIndexes;\n };\n /**\n * @private\n */\n Grid.prototype.getLocaleConstants = function () {\n return this.defaultLocale;\n };\n /**\n * @private\n */\n Grid.prototype.setColumnIndexesInView = function (indexes) {\n this.inViewIndexes = indexes;\n };\n /**\n * Gets the visible columns from the Grid.\n * @return {Column[]}\n */\n Grid.prototype.getVisibleColumns = function () {\n var cols = [];\n for (var _i = 0, _a = this.columnModel; _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.visible) {\n cols.push(col);\n }\n }\n return cols;\n };\n /**\n * Gets the header div of the Grid.\n * @return {Element}\n */\n Grid.prototype.getHeaderContent = function () {\n return this.headerModule.getPanel();\n };\n /**\n * Sets the header div of the Grid to replace the old header.\n * @param {Element} element - Specifies the Grid header.\n * @return {void}\n */\n Grid.prototype.setGridHeaderContent = function (element) {\n this.headerModule.setPanel(element);\n };\n /**\n * Gets the content table of the Grid.\n * @return {Element}\n */\n Grid.prototype.getContentTable = function () {\n return this.contentModule.getTable();\n };\n /**\n * Sets the content table of the Grid to replace the old content table.\n * @param {Element} element - Specifies the Grid content table.\n * @return {void}\n */\n Grid.prototype.setGridContentTable = function (element) {\n this.contentModule.setTable(element);\n };\n /**\n * Gets the content div of the Grid.\n * @return {Element}\n */\n Grid.prototype.getContent = function () {\n return this.contentModule.getPanel();\n };\n /**\n * Sets the content div of the Grid to replace the old Grid content.\n * @param {Element} element - Specifies the Grid content.\n * @return {void}\n */\n Grid.prototype.setGridContent = function (element) {\n this.contentModule.setPanel(element);\n };\n /**\n * Gets the header table element of the Grid.\n * @return {Element}\n */\n Grid.prototype.getHeaderTable = function () {\n return this.headerModule.getTable();\n };\n /**\n * Sets the header table of the Grid to replace the old one.\n * @param {Element} element - Specifies the Grid header table.\n * @return {void}\n */\n Grid.prototype.setGridHeaderTable = function (element) {\n this.headerModule.setTable(element);\n };\n /**\n * Gets the footer div of the Grid.\n * @return {Element}\n */\n Grid.prototype.getFooterContent = function () {\n if (isNullOrUndefined(this.footerElement)) {\n this.footerElement = this.element.getElementsByClassName('e-gridfooter')[0];\n }\n return this.footerElement;\n };\n /**\n * Gets the footer table element of the Grid.\n * @return {Element}\n */\n Grid.prototype.getFooterContentTable = function () {\n if (isNullOrUndefined(this.footerElement)) {\n this.footerElement = this.element.getElementsByClassName('e-gridfooter')[0];\n }\n return this.footerElement.firstChild.firstChild;\n };\n /**\n * Gets the pager of the Grid.\n * @return {Element}\n */\n Grid.prototype.getPager = function () {\n return this.gridPager; //get element from pager\n };\n /**\n * Sets the pager of the Grid to replace the old pager.\n * @param {Element} element - Specifies the Grid pager.\n * @return {void}\n */\n Grid.prototype.setGridPager = function (element) {\n this.gridPager = element;\n };\n /**\n * Gets a row by index.\n * @param {number} index - Specifies the row index.\n * @return {Element}\n */\n Grid.prototype.getRowByIndex = function (index) {\n return this.contentModule.getRowByIndex(index);\n };\n /**\n * Gets a movable tables row by index.\n * @param {number} index - Specifies the row index.\n * @return {Element}\n */\n Grid.prototype.getMovableRowByIndex = function (index) {\n return this.contentModule.getMovableRowByIndex(index);\n };\n /**\n * Gets all the data rows of the Grid.\n * @return {Element[]}\n */\n Grid.prototype.getRows = function () {\n return this.contentModule.getRowElements();\n };\n /**\n * Get a row information based on cell\n * @param {Element}\n * @return RowInfo\n */\n Grid.prototype.getRowInfo = function (target) {\n var ele = target;\n var args = { target: target };\n if (!isNullOrUndefined(target) && isNullOrUndefined(parentsUntil(ele, 'e-detailrowcollapse')\n && isNullOrUndefined(parentsUntil(ele, 'e-recordplusexpand'))) && !this.isEdit) {\n var cell = closest(ele, '.e-rowcell');\n if (!cell) {\n return args;\n }\n var cellIndex = parseInt(cell.getAttribute('aria-colindex'), 10);\n if (!isNullOrUndefined(cell) && !isNaN(cellIndex)) {\n var row_1 = closest(cell, '.e-row');\n var rowIndex = parseInt(row_1.getAttribute('aria-rowindex'), 10);\n var frzCols = this.getFrozenColumns();\n var isMovable = frzCols ? cellIndex >= frzCols : false;\n var rows = (isMovable ?\n this.contentModule.getMovableRows() : this.contentModule.getRows());\n var rowsObject = rows.filter(function (r) { return r.uid === row_1.getAttribute('data-uid'); });\n var rowData = rowsObject[0].data;\n var column = rowsObject[0].cells[isMovable ? cellIndex - frzCols : cellIndex].column;\n args = { cell: cell, cellIndex: cellIndex, row: row_1, rowIndex: rowIndex, rowData: rowData, column: column, target: target };\n }\n }\n return args;\n };\n /**\n * Gets the Grid's movable content rows from frozen grid.\n * @return {Element[]}\n */\n Grid.prototype.getMovableRows = function () {\n return this.contentModule.getMovableRowElements();\n };\n /**\n * Gets all the Grid's data rows.\n * @return {Element[]}\n */\n Grid.prototype.getDataRows = function () {\n var rows = [].slice.call(this.getContentTable().querySelector('tbody').children);\n if (this.frozenRows) {\n var freezeRows = [].slice.call(this.getHeaderTable().querySelector('tbody').children);\n rows = this.addMovableRows(freezeRows, rows);\n }\n var dataRows = this.generateDataRows(rows);\n return dataRows;\n };\n /**\n * @hidden\n */\n Grid.prototype.addMovableRows = function (fRows, mrows) {\n for (var i = 0, len = mrows.length; i < len; i++) {\n fRows.push(mrows[i]);\n }\n return fRows;\n };\n Grid.prototype.generateDataRows = function (rows) {\n var dRows = [];\n for (var i = 0, len = rows.length; i < len; i++) {\n if (rows[i].classList.contains('e-row') && !rows[i].classList.contains('e-hiddenrow')) {\n dRows.push(rows[i]);\n }\n }\n return dRows;\n };\n /**\n * Gets all the Grid's movable table data rows.\n * @return {Element[]}\n */\n Grid.prototype.getMovableDataRows = function () {\n var rows = [].slice.call(this.getContent().querySelector('.e-movablecontent').querySelector('tbody').children);\n if (this.frozenRows) {\n var freezeRows = [].slice.call(this.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody').children);\n rows = this.addMovableRows(freezeRows, rows);\n }\n var dataRows = this.generateDataRows(rows);\n return dataRows;\n };\n /**\n * Updates particular cell value based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {string } field - Specifies the field name which you want to update.\n * @param {string | number | boolean | Date} value - To update new value for the particular cell.\n */\n Grid.prototype.setCellValue = function (key, field, value) {\n var cells = 'cells';\n var rowData = 'data';\n var rowIdx = 'index';\n var rowuID = 'uid';\n var fieldIdx;\n var col;\n var tr;\n var pkName = this.getPrimaryKeyFieldNames()[0];\n var cell = new CellRenderer(this, this.serviceLocator);\n var selectedRow = {};\n var rowObjects = this.contentModule.getRows();\n fieldIdx = this.getColumnIndexByField(field);\n col = this.getColumnByField(field);\n selectedRow = rowObjects.filter(function (r) {\n return getValue(pkName, r.data) === key;\n })[0];\n tr = !isNullOrUndefined(selectedRow) ? this.element.querySelector('[data-uid=' + selectedRow[rowuID] + ']') : null;\n if (!isNullOrUndefined(tr)) {\n setValue(field, value, selectedRow[rowData]);\n var td = tr.childNodes[fieldIdx];\n if (!isNullOrUndefined(td)) {\n cell.refreshTD(td, selectedRow[cells][fieldIdx], selectedRow[rowData]);\n this.trigger(events.queryCellInfo, {\n cell: td, column: col, data: selectedRow[rowData]\n });\n }\n }\n else {\n return;\n }\n };\n /**\n * Updates and refresh the particular row values based on the given primary key value.\n * > Primary key column must be specified using `columns.isPrimaryKey` property.\n * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n * @param {Object} rowData - To update new data for the particular row.\n */\n Grid.prototype.setRowData = function (key, rowData) {\n var rwdata = 'data';\n var rowuID = 'uid';\n var rowObjects = this.contentModule.getRows();\n var selectedRow;\n var pkName = this.getPrimaryKeyFieldNames()[0];\n var rowRenderer = new RowRenderer(this.serviceLocator, null, this);\n selectedRow = rowObjects.filter(function (r) {\n return getValue(pkName, r.data) === key;\n })[0];\n if (!isNullOrUndefined(selectedRow) && this.element.querySelectorAll('[data-uid=' + selectedRow[rowuID] + ']').length) {\n selectedRow.changes = rowData;\n refreshForeignData(selectedRow, this.getForeignKeyColumns(), selectedRow.changes);\n rowRenderer.refresh(selectedRow, this.getColumns(), true);\n }\n else {\n return;\n }\n };\n /**\n * Gets a cell by row and column index.\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @return {Element}\n */\n Grid.prototype.getCellFromIndex = function (rowIndex, columnIndex) {\n return this.getDataRows()[rowIndex].querySelectorAll('.e-rowcell')[columnIndex];\n };\n /**\n * Gets a movable table cell by row and column index.\n * @param {number} rowIndex - Specifies the row index.\n * @param {number} columnIndex - Specifies the column index.\n * @return {Element}\n */\n Grid.prototype.getMovableCellFromIndex = function (rowIndex, columnIndex) {\n return this.getMovableDataRows()[rowIndex].querySelectorAll('.e-rowcell')[columnIndex - this.getFrozenColumns()];\n };\n /**\n * Gets a column header by column index.\n * @param {number} index - Specifies the column index.\n * @return {Element}\n */\n Grid.prototype.getColumnHeaderByIndex = function (index) {\n return this.getHeaderTable().querySelectorAll('.e-headercell')[index];\n };\n /**\n * @hidden\n */\n Grid.prototype.getRowObjectFromUID = function (uid) {\n var rows = this.contentModule.getRows();\n var row = this.rowObject(rows, uid);\n if (this.getFrozenColumns()) {\n if (!row) {\n row = this.rowObject(this.contentModule.getMovableRows(), uid);\n return row;\n }\n }\n return row;\n };\n Grid.prototype.rowObject = function (rows, uid) {\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n if (row.uid === uid) {\n return row;\n }\n }\n return null;\n };\n /**\n * @hidden\n */\n Grid.prototype.getRowsObject = function () {\n return this.contentModule.getRows();\n };\n /**\n * @hidden\n */\n Grid.prototype.getMovableRowsObject = function () {\n return this.contentModule.getMovableRows();\n };\n /**\n * Gets a column header by column name.\n * @param {string} field - Specifies the column name.\n * @return {Element}\n */\n Grid.prototype.getColumnHeaderByField = function (field) {\n return this.getColumnHeaderByUid(this.getColumnByField(field).uid);\n };\n /**\n * Gets a column header by UID.\n * @param {string} field - Specifies the column uid.\n * @return {Element}\n */\n Grid.prototype.getColumnHeaderByUid = function (uid) {\n return this.getHeaderContent().querySelector('[e-mappinguid=' + uid + ']').parentElement;\n };\n /**\n * Gets a Column by column name.\n * @param {string} field - Specifies the column name.\n * @return {Column}\n */\n Grid.prototype.getColumnByField = function (field) {\n return iterateArrayOrObject(this.getColumns(), function (item, index) {\n if (item.field === field) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets a column index by column name.\n * @param {string} field - Specifies the column name.\n * @return {number}\n */\n Grid.prototype.getColumnIndexByField = function (field) {\n var cols = this.getColumns();\n for (var i = 0; i < cols.length; i++) {\n if (cols[i].field === field) {\n return i;\n }\n }\n return -1;\n };\n /**\n * Gets a column by UID.\n * @param {string} uid - Specifies the column UID.\n * @return {Column}\n */\n Grid.prototype.getColumnByUid = function (uid) {\n return iterateArrayOrObject(this.getColumns(), function (item, index) {\n if (item.uid === uid) {\n return item;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets a column index by UID.\n * @param {string} uid - Specifies the column UID.\n * @return {number}\n */\n Grid.prototype.getColumnIndexByUid = function (uid) {\n var index = iterateArrayOrObject(this.getColumns(), function (item, index) {\n if (item.uid === uid) {\n return index;\n }\n return undefined;\n })[0];\n return !isNullOrUndefined(index) ? index : -1;\n };\n /**\n * Gets UID by column name.\n * @param {string} field - Specifies the column name.\n * @return {string}\n */\n Grid.prototype.getUidByColumnField = function (field) {\n return iterateArrayOrObject(this.getColumns(), function (item, index) {\n if (item.field === field) {\n return item.uid;\n }\n return undefined;\n })[0];\n };\n /**\n * Gets TH index by column uid value.\n * @private\n * @param {string} uid - Specifies the column uid.\n * @return {number}\n */\n Grid.prototype.getNormalizedColumnIndex = function (uid) {\n var index = this.getColumnIndexByUid(uid);\n if (this.allowGrouping) {\n index += this.groupSettings.columns.length;\n }\n if (this.isDetail()) {\n index++;\n }\n /**\n * TODO: index normalization based on the stacked header, grouping and detailTemplate\n * and frozen should be handled here\n */\n return index;\n };\n /**\n * Gets the collection of column fields.\n * @return {string[]}\n */\n Grid.prototype.getColumnFieldNames = function () {\n var columnNames = [];\n var column;\n for (var i = 0, len = this.getColumns().length; i < len; i++) {\n column = this.getColumns()[i];\n if (column.visible) {\n columnNames.push(column.field);\n }\n }\n return columnNames;\n };\n /**\n * Gets a compiled row template.\n * @return {Function}\n * @private\n */\n Grid.prototype.getRowTemplate = function () {\n return this.rowTemplateFn;\n };\n /**\n * Gets a compiled detail row template.\n * @private\n * @return {Function}\n */\n Grid.prototype.getDetailTemplate = function () {\n return this.detailTemplateFn;\n };\n /**\n * Get the names of the primary key columns of the Grid.\n * @return {string[]}\n */\n Grid.prototype.getPrimaryKeyFieldNames = function () {\n var keys = [];\n for (var key = 0, col = this.columns, cLen = col.length; key < cLen; key++) {\n if (col[key].isPrimaryKey) {\n keys.push(col[key].field);\n }\n }\n return keys;\n };\n /**\n * Refreshes the Grid header and content.\n */\n Grid.prototype.refresh = function () {\n this.headerModule.refreshUI();\n this.updateStackedFilter();\n this.renderModule.refresh();\n };\n /**\n * Refreshes the Grid header.\n */\n Grid.prototype.refreshHeader = function () {\n this.headerModule.refreshUI();\n };\n /**\n * Gets the collection of selected rows.\n * @return {Element[]}\n */\n Grid.prototype.getSelectedRows = function () {\n return this.selectionModule ? this.selectionModule.selectedRecords : [];\n };\n /**\n * Gets the collection of selected row indexes.\n * @return {number[]}\n */\n Grid.prototype.getSelectedRowIndexes = function () {\n return this.selectionModule ? this.selectionModule.selectedRowIndexes : [];\n };\n /**\n * Gets the collection of selected row and cell indexes.\n * @return {number[]}\n */\n Grid.prototype.getSelectedRowCellIndexes = function () {\n return this.selectionModule.selectedRowCellIndexes;\n };\n /**\n * Gets the collection of selected records.\n * @return {Object[]}\n */\n Grid.prototype.getSelectedRecords = function () {\n return this.selectionModule.getSelectedRecords();\n };\n /**\n * Gets the data module.\n * @return {Data}\n */\n Grid.prototype.getDataModule = function () {\n return this.renderModule.data;\n };\n /**\n * Shows a column by its column name.\n * @param {string|string[]} keys - Defines a single or collection of column names.\n * @param {string} showBy - Defines the column key either as field name or header text.\n * @return {void}\n */\n Grid.prototype.showColumns = function (keys, showBy) {\n showBy = showBy ? showBy : 'headerText';\n this.showHider.show(keys, showBy);\n };\n /**\n * Hides a column by column name.\n * @param {string|string[]} keys - Defines a single or collection of column names.\n * @param {string} hideBy - Defines the column key either as field name or header text.\n * @return {void}\n */\n Grid.prototype.hideColumns = function (keys, hideBy) {\n hideBy = hideBy ? hideBy : 'headerText';\n this.showHider.hide(keys, hideBy);\n };\n /**\n * @hidden\n */\n Grid.prototype.getFrozenColumns = function () {\n return this.frozenColumns + this.getFrozenCount(this.columns, 0);\n };\n Grid.prototype.getFrozenCount = function (cols, cnt) {\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[i].columns) {\n cnt = this.getFrozenCount(cols[i].columns, cnt);\n }\n else {\n if (cols[i].isFrozen) {\n cnt++;\n }\n }\n }\n return cnt;\n };\n /**\n * Navigates to the specified target page.\n * @param {number} pageNo - Defines the page number to navigate.\n * @return {void}\n */\n Grid.prototype.goToPage = function (pageNo) {\n this.pagerModule.goToPage(pageNo);\n };\n /**\n * Defines the text of external message.\n * @param {string} message - Defines the message to update.\n * @return {void}\n */\n Grid.prototype.updateExternalMessage = function (message) {\n this.pagerModule.updateExternalMessage(message);\n };\n /**\n * Sorts a column with the given options.\n * @param {string} columnName - Defines the column name to be sorted.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previous sorted columns are to be maintained.\n * @return {void}\n */\n Grid.prototype.sortColumn = function (columnName, direction, isMultiSort) {\n this.sortModule.sortColumn(columnName, direction, isMultiSort);\n };\n /**\n * Clears all the sorted columns of the Grid.\n * @return {void}\n */\n Grid.prototype.clearSorting = function () {\n this.sortModule.clearSorting();\n };\n /**\n * Remove sorted column by field name.\n * @param {string} field - Defines the column field name to remove sort.\n * @return {void}\n * @hidden\n */\n Grid.prototype.removeSortColumn = function (field) {\n this.sortModule.removeSortColumn(field);\n };\n /**\n * Filters grid row by column name with the given options.\n * @param {string} fieldName - Defines the field name of the column.\n * @param {string} filterOperator - Defines the operator to filter records.\n * @param {string | number | Date | boolean} filterValue - Defines the value used to filter records.\n * @param {string} predicate - Defines the relationship between one filter query and another by using AND or OR predicate.\n * @param {boolean} matchCase - If match case is set to true, the grid filters the records with exact match. if false, it filters case\n * insensitive records (uppercase and lowercase letters treated the same).\n * @param {boolean} ignoreAccent - If ignoreAccent set to true,\n * then filter ignores the diacritic characters or accents while filtering.\n * @param {string} actualFilterValue - Defines the actual filter value for the filter column.\n * @param {string} actualOperator - Defines the actual filter operator for the filter column.\n * @return {void}\n */\n Grid.prototype.filterByColumn = function (fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator) {\n this.filterModule.filterByColumn(fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator);\n };\n /**\n * Clears all the filtered rows of the Grid.\n * @return {void}\n */\n Grid.prototype.clearFiltering = function () {\n this.filterModule.clearFiltering();\n };\n /**\n * Removes filtered column by field name.\n * @param {string} field - Defines column field name to remove filter.\n * @param {boolean} isClearFilterBar - Specifies whether the filter bar value needs to be cleared.\n * @return {void}\n * @hidden\n */\n Grid.prototype.removeFilteredColsByField = function (field, isClearFilterBar) {\n this.filterModule.removeFilteredColsByField(field, isClearFilterBar);\n };\n /**\n * Selects a row by given index.\n * @param {number} index - Defines the row index.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @return {void}\n */\n Grid.prototype.selectRow = function (index, isToggle) {\n this.selectionModule.selectRow(index, isToggle);\n };\n /**\n * Selects a collection of rows by indexes.\n * @param {number[]} rowIndexes - Specifies the row indexes.\n * @return {void}\n */\n Grid.prototype.selectRows = function (rowIndexes) {\n this.selectionModule.selectRows(rowIndexes);\n };\n /**\n * Deselects the current selected rows and cells.\n * @return {void}\n */\n Grid.prototype.clearSelection = function () {\n this.selectionModule.clearSelection();\n };\n /**\n * Selects a cell by the given index.\n * @param {IIndex} cellIndex - Defines the row and column indexes.\n * @param {boolean} isToggle - If set to true, then it toggles the selection.\n * @return {void}\n */\n Grid.prototype.selectCell = function (cellIndex, isToggle) {\n this.selectionModule.selectCell(cellIndex, isToggle);\n };\n /**\n * Searches Grid records using the given key.\n * You can customize the default search option by using the\n * [`searchSettings`](./api-searchSettings.html).\n * @param {string} searchString - Defines the key.\n * @return {void}\n */\n Grid.prototype.search = function (searchString) {\n this.searchModule.search(searchString);\n };\n /**\n * By default, prints all the pages of the Grid and hides the pager.\n * > You can customize print options using the\n * [`printMode`](./api-grid.html#printmode-string).\n * @return {void}\n */\n Grid.prototype.print = function () {\n this.printModule.print();\n };\n /**\n * Delete a record with Given options. If fieldname and data is not given then grid will delete the selected record.\n * > `editSettings.allowDeleting` should be true.\n * @param {string} fieldname - Defines the primary key field, 'Name of the column'.\n * @param {Object} data - Defines the JSON data of the record to be deleted.\n */\n Grid.prototype.deleteRecord = function (fieldname, data) {\n this.editModule.deleteRecord(fieldname, data);\n };\n /**\n * To edit any particular row by TR element.\n * @param {HTMLTableRowElement} tr - Defines the table row to be edited.\n */\n Grid.prototype.startEdit = function () {\n this.editModule.startEdit();\n };\n /**\n * If Grid is in editable state, you can save a record by invoking endEdit.\n */\n Grid.prototype.endEdit = function () {\n this.editModule.endEdit();\n };\n /**\n * Cancels edited state.\n */\n Grid.prototype.closeEdit = function () {\n this.editModule.closeEdit();\n };\n /**\n * Adds a new record to the Grid. Without passing parameters, it adds empty rows.\n * > `editSettings.allowEditing` should be true.\n * @param {Object} data - Defines the new add record data.\n * @param {number} index - Defines the row index to be added\n */\n Grid.prototype.addRecord = function (data, index) {\n this.editModule.addRecord(data, index);\n };\n /**\n * Delete any visible row by TR element.\n * @param {HTMLTableRowElement} tr - Defines the table row element.\n */\n Grid.prototype.deleteRow = function (tr) {\n this.editModule.deleteRow(tr);\n };\n /**\n * Copy the selected rows or cells data into clipboard.\n * @param {boolean} withHeader - Specifies whether the column header text needs to be copied along with rows or cells.\n */\n Grid.prototype.copy = function (withHeader) {\n this.clipboardModule.copy(withHeader);\n };\n /**\n * @hidden\n */\n Grid.prototype.recalcIndentWidth = function () {\n if (!this.getHeaderTable().querySelector('.e-emptycell')) {\n return;\n }\n if ((!this.groupSettings.columns.length && !this.isDetail()) ||\n this.getHeaderTable().querySelector('.e-emptycell').getAttribute('indentRefreshed') ||\n !this.getContentTable()) {\n return;\n }\n var indentWidth = this.getHeaderTable().querySelector('.e-emptycell').parentElement.offsetWidth;\n var headerCol = [].slice.call(this.getHeaderTable().querySelector('colgroup').childNodes);\n var contentCol = [].slice.call(this.getContentTable().querySelector('colgroup').childNodes);\n var perPixel = indentWidth / 30;\n var i = 0;\n if (perPixel >= 1) {\n indentWidth = (30 / perPixel);\n }\n if (this.enableColumnVirtualization) {\n indentWidth = 30;\n }\n while (i < this.groupSettings.columns.length) {\n headerCol[i].style.width = indentWidth + 'px';\n contentCol[i].style.width = indentWidth + 'px';\n this.notify(events.columnWidthChanged, { index: i, width: indentWidth });\n i++;\n }\n if (this.isDetail()) {\n headerCol[i].style.width = indentWidth + 'px';\n contentCol[i].style.width = indentWidth + 'px';\n this.notify(events.columnWidthChanged, { index: i, width: indentWidth });\n }\n this.getHeaderTable().querySelector('.e-emptycell').setAttribute('indentRefreshed', 'true');\n };\n /**\n * Changes the Grid column positions by field names.\n * @param {string} fromFName - Defines the origin field name.\n * @param {string} toFName - Defines the destination field name.\n * @return {void}\n */\n Grid.prototype.reorderColumns = function (fromFName, toFName) {\n this.reorderModule.reorderColumns(fromFName, toFName);\n };\n /**\n * Changes the column width to automatically fit its content to ensure that the width shows the content without wrapping/hiding.\n * > * This method ignores the hidden columns.\n * > * Uses the `autoFitColumns` method in the `dataBound` event to resize at initial rendering.\n * @param {string |string[]} fieldNames - Defines the column names.\n * @return {void}\n *\n *\n * ```typescript\n *
    \n * \n * ```\n *\n */\n Grid.prototype.autoFitColumns = function (fieldNames) {\n this.resizeModule.autoFitColumns(fieldNames);\n };\n /**\n * @hidden\n */\n Grid.prototype.createColumnchooser = function (x, y, target) {\n this.columnChooserModule.renderColumnChooser(x, y, target);\n };\n Grid.prototype.initializeServices = function () {\n this.serviceLocator.register('widthService', this.widthService = new ColumnWidthService(this));\n this.serviceLocator.register('cellRendererFactory', new CellRendererFactory);\n this.serviceLocator.register('rendererFactory', new RendererFactory);\n this.serviceLocator.register('localization', this.localeObj = new L10n(this.getModuleName(), this.defaultLocale, this.locale));\n this.serviceLocator.register('valueFormatter', this.valueFormatterService = new ValueFormatter(this.locale));\n this.serviceLocator.register('showHideService', this.showHider = new ShowHide(this));\n this.serviceLocator.register('ariaService', this.ariaService = new AriaService());\n this.serviceLocator.register('focus', this.focusModule = new FocusStrategy(this));\n };\n Grid.prototype.processModel = function () {\n var _this = this;\n var gCols = this.groupSettings.columns;\n var sCols = this.sortSettings.columns;\n var flag;\n var j;\n if (this.allowGrouping) {\n var _loop_1 = function (i, len) {\n j = 0;\n for (var sLen = sCols.length; j < sLen; j++) {\n if (sCols[j].field === gCols[i]) {\n flag = true;\n break;\n }\n }\n if (!flag) {\n sCols.push({ field: gCols[i], direction: 'Ascending' });\n }\n else {\n if (this_1.allowSorting) {\n this_1.sortedColumns.push(sCols[j].field);\n }\n else {\n sCols[j].direction = 'Ascending';\n }\n }\n if (!this_1.groupSettings.showGroupedColumn) {\n var column = this_1.enableColumnVirtualization ?\n this_1.columns.filter(function (c) { return c.field === gCols[i]; })[0] : this_1.getColumnByField(gCols[i]);\n column.visible = false;\n }\n };\n var this_1 = this;\n for (var i = 0, len = gCols.length; i < len; i++) {\n _loop_1(i, len);\n }\n }\n if (!gCols.length) {\n sCols.forEach(function (col) {\n _this.sortedColumns.push(col.field);\n });\n }\n this.rowTemplateFn = templateCompiler(this.rowTemplate);\n this.detailTemplateFn = templateCompiler(this.detailTemplate);\n if (!isNullOrUndefined(this.parentDetails)) {\n var value = isNullOrUndefined(this.parentDetails.parentKeyFieldValue) ? 'undefined' :\n this.parentDetails.parentKeyFieldValue;\n this.query.where(this.queryString, 'equal', value, true);\n }\n this.initForeignColumn();\n };\n Grid.prototype.initForeignColumn = function () {\n if (this.isForeignKeyEnabled(this.getColumns())) {\n this.notify(events.initForeignKeyColumn, this.getForeignKeyColumns());\n }\n };\n Grid.prototype.gridRender = function () {\n this.updateRTL();\n if (this.enableHover) {\n this.element.classList.add('e-gridhover');\n }\n if (Browser.isDevice) {\n this.element.classList.add('e-device');\n }\n if (this.rowHeight) {\n this.element.classList.add('e-grid-min-height');\n }\n classList(this.element, ['e-responsive', 'e-default'], []);\n var rendererFactory = this.serviceLocator.getService('rendererFactory');\n this.headerModule = rendererFactory.getRenderer(RenderType.Header);\n this.contentModule = rendererFactory.getRenderer(RenderType.Content);\n this.printModule = new Print(this, this.scrollModule);\n this.clipboardModule = new Clipboard(this);\n this.renderModule.render();\n this.eventInitializer();\n this.createGridPopUpElement();\n this.widthService.setWidthToColumns();\n this.updateGridLines();\n this.applyTextWrap();\n this.createTooltip(); //for clip mode ellipsis\n };\n Grid.prototype.dataReady = function () {\n this.scrollModule.setWidth();\n this.scrollModule.setHeight();\n if (this.height !== 'auto') {\n this.scrollModule.setPadding();\n }\n };\n Grid.prototype.updateRTL = function () {\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n else {\n this.element.classList.remove('e-rtl');\n }\n };\n Grid.prototype.createGridPopUpElement = function () {\n var popup = createElement('div', { className: 'e-gridpopup', styles: 'display:none;' });\n var content = createElement('div', { className: 'e-content', attrs: { tabIndex: '-1' } });\n append([content, createElement('div', { className: 'e-uptail e-tail' })], popup);\n content.appendChild(createElement('span'));\n append([content, createElement('div', { className: 'e-downtail e-tail' })], popup);\n this.element.appendChild(popup);\n };\n Grid.prototype.updateGridLines = function () {\n classList(this.element, [], ['e-verticallines', 'e-horizontallines', 'e-hidelines', 'e-bothlines']);\n switch (this.gridLines) {\n case 'Horizontal':\n this.element.classList.add('e-horizontallines');\n break;\n case 'Vertical':\n this.element.classList.add('e-verticallines');\n break;\n case 'None':\n this.element.classList.add('e-hidelines');\n break;\n case 'Both':\n this.element.classList.add('e-bothlines');\n break;\n }\n this.updateResizeLines();\n };\n Grid.prototype.updateResizeLines = function () {\n if (this.allowResizing &&\n !(this.gridLines === 'Vertical' || this.gridLines === 'Both')) {\n this.element.classList.add('e-resize-lines');\n }\n else {\n this.element.classList.remove('e-resize-lines');\n }\n };\n /**\n * The function is used to apply text wrap\n * @return {void}\n * @hidden\n */\n Grid.prototype.applyTextWrap = function () {\n if (this.allowTextWrap) {\n var headerRows = [].slice.call(this.element.querySelectorAll('.e-columnheader'));\n switch (this.textWrapSettings.wrapMode) {\n case 'Header':\n wrap(this.element, false);\n wrap(this.getContent(), false);\n wrap(headerRows, true);\n break;\n case 'Content':\n wrap(this.getContent(), true);\n wrap(this.element, false);\n wrap(headerRows, false);\n break;\n default:\n wrap(this.element, true);\n wrap(this.getContent(), false);\n wrap(headerRows, false);\n }\n }\n };\n /**\n * The function is used to remove text wrap\n * @return {void}\n * @hidden\n */\n Grid.prototype.removeTextWrap = function () {\n wrap(this.element, false);\n var headerRows = [].slice.call(this.element.querySelectorAll('.e-columnheader'));\n wrap(headerRows, false);\n wrap(this.getContent(), false);\n };\n /**\n * The function is used to add Tooltip to the grid cell that has ellipsiswithtooltip clip mode.\n * @return {void}\n * @hidden\n */\n Grid.prototype.createTooltip = function () {\n this.toolTipObj = new Tooltip({ opensOn: 'custom', content: '' }, this.element);\n };\n Grid.prototype.getTooltipStatus = function (element) {\n var width;\n var headerTable = this.getHeaderTable();\n var contentTable = this.getContentTable();\n var headerDivTag = 'e-gridheader';\n var contentDivTag = 'e-gridcontent';\n var htable = this.createTable(headerTable, headerDivTag, 'header');\n var ctable = this.createTable(headerTable, headerDivTag, 'content');\n var td = element;\n var table = headerTable.contains(element) ? htable : ctable;\n var ele = headerTable.contains(element) ? 'th' : 'tr';\n table.querySelector(ele).className = element.className;\n table.querySelector(ele).innerHTML = element.innerHTML;\n width = table.querySelector(ele).getBoundingClientRect().width;\n document.body.removeChild(htable);\n document.body.removeChild(ctable);\n if (width > element.getBoundingClientRect().width) {\n return true;\n }\n return false;\n };\n Grid.prototype.mouseMoveHandler = function (e) {\n if (this.isEllipsisTooltip()) {\n var element = parentsUntil(e.target, 'e-ellipsistooltip');\n if (element) {\n if (element.getAttribute('aria-describedby')) {\n return;\n }\n if (this.getTooltipStatus(element)) {\n if (element.getElementsByClassName('e-headertext').length) {\n this.toolTipObj.content = element.getElementsByClassName('e-headertext')[0].innerHTML;\n }\n else {\n this.toolTipObj.content = element.innerHTML;\n }\n this.toolTipObj.open(element);\n }\n else {\n this.toolTipObj.close();\n }\n }\n else {\n this.toolTipObj.close();\n }\n }\n };\n Grid.prototype.isEllipsisTooltip = function () {\n var cols = this.getColumns();\n for (var i = 0; i < cols.length; i++) {\n if (cols[i].clipMode === 'EllipsisWithTooltip') {\n return true;\n }\n }\n return false;\n };\n Grid.prototype.scrollHandler = function () {\n if (this.isEllipsisTooltip()) {\n this.toolTipObj.close();\n }\n };\n /**\n * To create table for ellipsiswithtooltip\n * @hidden\n */\n Grid.prototype.createTable = function (table, tag, type) {\n var myTableDiv = createElement('div');\n myTableDiv.className = this.element.className;\n myTableDiv.style.cssText = 'display: inline-block;visibility:hidden;position:absolute';\n var mySubDiv = createElement('div');\n mySubDiv.className = tag;\n var myTable = createElement('table');\n myTable.className = table.className;\n myTable.style.cssText = 'table-layout: auto;width: auto';\n var ele = (type === 'header') ? 'th' : 'td';\n var myTr = createElement('tr');\n var mytd = createElement(ele);\n myTr.appendChild(mytd);\n myTable.appendChild(myTr);\n mySubDiv.appendChild(myTable);\n myTableDiv.appendChild(mySubDiv);\n document.body.appendChild(myTableDiv);\n return myTableDiv;\n };\n /**\n * Binding events to the element while component creation.\n * @hidden\n */\n Grid.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.mouseClickHandler, this);\n EventHandler.add(this.element, 'touchend', this.mouseClickHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n EventHandler.add(this.getContent(), 'dblclick', this.dblClickHandler, this);\n if (this.allowKeyboard) {\n this.element.tabIndex = this.element.tabIndex === -1 ? 0 : this.element.tabIndex;\n }\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n EventHandler.add(this.getContent().firstElementChild, 'scroll', this.scrollHandler, this);\n EventHandler.add(this.element, 'mousemove', this.mouseMoveHandler, this);\n };\n /**\n * Unbinding events from the element while component destroy.\n * @hidden\n */\n Grid.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.mouseClickHandler);\n EventHandler.remove(this.element, 'touchend', this.mouseClickHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n EventHandler.remove(this.getContent().firstElementChild, 'scroll', this.scrollHandler);\n EventHandler.remove(this.element, 'mousemove', this.mouseMoveHandler);\n };\n /**\n * @hidden\n */\n Grid.prototype.addListener = function () {\n if (this.isDestroyed) {\n return;\n }\n this.on(events.dataReady, this.dataReady, this);\n this.on(events.contentReady, this.recalcIndentWidth, this);\n this.on(events.headerRefreshed, this.recalcIndentWidth, this);\n this.dataBoundFunction = this.refreshMediaCol.bind(this);\n this.addEventListener(events.dataBound, this.dataBoundFunction);\n };\n /**\n * @hidden\n */\n Grid.prototype.removeListener = function () {\n if (this.isDestroyed) {\n return;\n }\n this.off(events.dataReady, this.dataReady);\n this.off(events.contentReady, this.recalcIndentWidth);\n this.off(events.headerRefreshed, this.recalcIndentWidth);\n this.removeEventListener(events.dataBound, this.dataBoundFunction);\n };\n /**\n * Get current visible data of grid.\n * @return {Object[]}\n * @hidden\n */\n Grid.prototype.getCurrentViewRecords = function () {\n return (this.allowGrouping && this.groupSettings.columns.length) ?\n this.currentViewData.records : this.currentViewData;\n };\n Grid.prototype.mouseClickHandler = function (e) {\n if (this.isChildGrid(e) || (parentsUntil(e.target, 'e-gridpopup') && e.touches) ||\n this.element.querySelectorAll('.e-cloneproperties').length || this.checkEdit(e)) {\n return;\n }\n if (((!this.allowRowDragAndDrop && (parentsUntil(e.target, 'e-gridcontent') ||\n e.target.tagName === 'TD')) || (!(this.allowGrouping || this.allowReordering) &&\n parentsUntil(e.target, 'e-gridheader'))) && e.touches) {\n return;\n }\n if (parentsUntil(e.target, 'e-gridheader') && this.allowRowDragAndDrop) {\n e.preventDefault();\n }\n this.notify(events.click, e);\n };\n Grid.prototype.checkEdit = function (e) {\n var tr = parentsUntil(e.target, 'e-row');\n var isEdit = this.editSettings.mode !== 'Batch' &&\n this.isEdit && tr && (tr.classList.contains('e-editedrow') || tr.classList.contains('e-addedrow'));\n return !parentsUntil(e.target, 'e-unboundcelldiv') && (isEdit || (parentsUntil(e.target, 'e-rowcell') &&\n parentsUntil(e.target, 'e-rowcell').classList.contains('e-editedbatchcell')));\n };\n Grid.prototype.dblClickHandler = function (e) {\n var grid = parentsUntil(e.target, 'e-grid');\n if (isNullOrUndefined(grid) || grid.id !== this.element.id || closest(e.target, '.e-unboundcelldiv')) {\n return;\n }\n var args = this.getRowInfo(e.target);\n args.target = e.target;\n this.trigger(events.recordDoubleClick, args);\n this.notify(events.dblclick, e);\n };\n Grid.prototype.focusOutHandler = function (e) {\n if (this.isChildGrid(e)) {\n return;\n }\n if (!parentsUntil(e.target, 'e-grid')) {\n this.element.querySelector('.e-gridpopup').style.display = 'None';\n }\n var filterClear = this.element.querySelector('.e-cancel:not(.e-hide)');\n if (filterClear) {\n filterClear.classList.add('e-hide');\n }\n if ((!e.relatedTarget || !parentsUntil(e.relatedTarget, 'e-grid'))\n && !this.keyPress && this.editSettings.mode === 'Batch' && this.isEdit) {\n this.editModule.saveCell();\n }\n this.keyPress = false;\n };\n Grid.prototype.isChildGrid = function (e) {\n var gridElement = parentsUntil(e.target, 'e-grid');\n if (gridElement && gridElement.id !== this.element.id) {\n return true;\n }\n return false;\n };\n Grid.prototype.mergePersistGridData = function () {\n var data = window.localStorage.getItem(this.getModuleName() + this.element.id);\n if (!(isNullOrUndefined(data) || (data === ''))) {\n var dataObj = JSON.parse(data);\n var keys = Object.keys(dataObj);\n this.isProtectedOnChange = true;\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if ((typeof this[key] === 'object') && !isNullOrUndefined(this[key])) {\n if (Array.isArray(this[key]) && key === 'columns') {\n this.mergeColumns(dataObj[key], this[key]);\n this[key] = dataObj[key];\n }\n else {\n extend(this[key], dataObj[key]);\n }\n }\n else {\n this[key] = dataObj[key];\n }\n }\n this.isProtectedOnChange = false;\n }\n };\n Grid.prototype.mergeColumns = function (storedColumn, columns) {\n var _this = this;\n storedColumn.forEach(function (col, index, arr) {\n var ind;\n var localCol = _this.getColumnByField(col.field) ||\n columns.some(function (element, i) {\n ind = i;\n return element.headerText === col.headerText;\n }) && columns[ind];\n if (!isNullOrUndefined(localCol)) {\n if (localCol.columns && localCol.columns.length) {\n _this.mergeColumns(col.columns, localCol.columns);\n }\n else {\n arr[index] = extend({}, localCol, col, true);\n }\n }\n });\n };\n Grid.prototype.isDetail = function () {\n return !isNullOrUndefined(this.detailTemplate) || !isNullOrUndefined(this.childGrid);\n };\n Grid.prototype.isCommandColumn = function (columns) {\n var _this = this;\n return columns.some(function (col) {\n if (col.columns) {\n return _this.isCommandColumn(col.columns);\n }\n return !!(col.commands || col.commandsTemplate);\n });\n };\n Grid.prototype.isForeignKeyEnabled = function (columns) {\n var _this = this;\n return columns.some(function (col) {\n if (col.columns) {\n return _this.isForeignKeyEnabled(col.columns);\n }\n return !!(col.dataSource && col.foreignKeyValue);\n });\n };\n Grid.prototype.keyActionHandler = function (e) {\n this.keyPress = true;\n if (this.isChildGrid(e) ||\n (this.isEdit && e.action !== 'escape' && e.action !== 'enter' && e.action !== 'shiftEnter'\n && e.action !== 'tab' && e.action !== 'shiftTab')) {\n return;\n }\n if (this.allowKeyboard) {\n if (e.action === 'ctrlPlusP') {\n e.preventDefault();\n this.print();\n }\n this.notify(events.keyPressed, e);\n }\n };\n /**\n * @hidden\n */\n Grid.prototype.setInjectedModules = function (modules) {\n this.injectedModules = modules;\n };\n Grid.prototype.updateColumnObject = function () {\n prepareColumns(this.columns, this.enableColumnVirtualization);\n this.initForeignColumn();\n this.notify(events.autoCol, {});\n };\n /**\n * Gets the foreign columns from Grid.\n * @return {Column[]}\n */\n Grid.prototype.getForeignKeyColumns = function () {\n return this.getColumns().filter(function (col) {\n return col.isForeignColumn();\n });\n };\n /**\n * Refreshes the Grid column changes.\n */\n Grid.prototype.refreshColumns = function () {\n this.updateColumnObject();\n this.refresh();\n };\n /**\n * Export Grid data to Excel file(.xlsx).\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @return {Promise}\n */\n Grid.prototype.excelExport = function (excelExportProperties, isMultipleExport, \n /* tslint:disable-next-line:no-any */\n workbook, isBlob) {\n return this.excelExportModule.Map(this, excelExportProperties, isMultipleExport, workbook, false, isBlob);\n };\n /**\n * Export Grid data to CSV file.\n * @param {ExcelExportProperties} excelExportProperties - Defines the export properties of the Grid.\n * @param {boolean} isMultipleExport - Define to enable multiple export.\n * @param {workbook} workbook - Defines the Workbook if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @return {Promise}\n *\n */\n Grid.prototype.csvExport = function (excelExportProperties, \n /* tslint:disable-next-line:no-any */\n isMultipleExport, workbook, isBlob) {\n return this.excelExportModule.Map(this, excelExportProperties, isMultipleExport, workbook, true, isBlob);\n };\n /**\n * Export Grid data to PDF document.\n * @param {pdfExportProperties} PdfExportProperties - Defines the export properties of the Grid.\n * @param {isMultipleExport} isMultipleExport - Define to enable multiple export.\n * @param {pdfDoc} pdfDoc - Defined the Pdf Document if multiple export is enabled.\n * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n * @return {Promise}\n *\n */\n Grid.prototype.pdfExport = function (pdfExportProperties, \n /* tslint:disable-next-line:no-any */\n isMultipleExport, pdfDoc, isBlob) {\n return this.pdfExportModule.Map(this, pdfExportProperties, isMultipleExport, pdfDoc, isBlob);\n };\n /**\n * Groups a column by column name.\n * @param {string} columnName - Defines the column name to group.\n * @return {void}\n */\n Grid.prototype.groupColumn = function (columnName) {\n this.groupModule.groupColumn(columnName);\n };\n /**\n * Ungroups a column by column name.\n * @param {string} columnName - Defines the column name to ungroup.\n * @return {void}\n */\n Grid.prototype.ungroupColumn = function (columnName) {\n this.groupModule.ungroupColumn(columnName);\n };\n /**\n * @hidden\n */\n Grid.prototype.isContextMenuOpen = function () {\n return this.contextMenuModule && this.contextMenuModule.isOpen;\n };\n /**\n * @hidden\n */\n Grid.prototype.ensureModuleInjected = function (module) {\n return this.getInjectedModules().indexOf(module) >= 0;\n };\n /**\n * Destroys the given template reference.\n * @param {string[]} propertyNames - Defines the collection of template name.\n */\n Grid.prototype.destroyTemplate = function (propertyNames) {\n this.clearTemplate(propertyNames);\n };\n __decorate([\n Property([])\n ], Grid.prototype, \"columns\", void 0);\n __decorate([\n Property(true)\n ], Grid.prototype, \"enableAltRow\", void 0);\n __decorate([\n Property(true)\n ], Grid.prototype, \"enableHover\", void 0);\n __decorate([\n Property(true)\n ], Grid.prototype, \"allowKeyboard\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowTextWrap\", void 0);\n __decorate([\n Complex({}, TextWrapSettings)\n ], Grid.prototype, \"textWrapSettings\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowPaging\", void 0);\n __decorate([\n Complex({}, PageSettings)\n ], Grid.prototype, \"pageSettings\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"enableColumnVirtualization\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], Grid.prototype, \"searchSettings\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowSorting\", void 0);\n __decorate([\n Property(true)\n ], Grid.prototype, \"allowMultiSorting\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowExcelExport\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowPdfExport\", void 0);\n __decorate([\n Complex({}, SortSettings)\n ], Grid.prototype, \"sortSettings\", void 0);\n __decorate([\n Property(true)\n ], Grid.prototype, \"allowSelection\", void 0);\n __decorate([\n Property(-1)\n ], Grid.prototype, \"selectedRowIndex\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], Grid.prototype, \"selectionSettings\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowReordering\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowResizing\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowRowDragAndDrop\", void 0);\n __decorate([\n Complex({}, RowDropSettings)\n ], Grid.prototype, \"rowDropSettings\", void 0);\n __decorate([\n Complex({}, FilterSettings)\n ], Grid.prototype, \"filterSettings\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"allowGrouping\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"showColumnMenu\", void 0);\n __decorate([\n Complex({}, GroupSettings)\n ], Grid.prototype, \"groupSettings\", void 0);\n __decorate([\n Complex({}, EditSettings)\n ], Grid.prototype, \"editSettings\", void 0);\n __decorate([\n Collection([], AggregateRow)\n ], Grid.prototype, \"aggregates\", void 0);\n __decorate([\n Property(false)\n ], Grid.prototype, \"showColumnChooser\", void 0);\n __decorate([\n Property('auto')\n ], Grid.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], Grid.prototype, \"width\", void 0);\n __decorate([\n Property('Default')\n ], Grid.prototype, \"gridLines\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"rowTemplate\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"detailTemplate\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"childGrid\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"queryString\", void 0);\n __decorate([\n Property('AllPages')\n ], Grid.prototype, \"printMode\", void 0);\n __decorate([\n Property([])\n ], Grid.prototype, \"dataSource\", void 0);\n __decorate([\n Property(null)\n ], Grid.prototype, \"rowHeight\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"query\", void 0);\n __decorate([\n Property('USD')\n ], Grid.prototype, \"currencyCode\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"toolbar\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"contextMenuItems\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"columnMenuItems\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"toolbarTemplate\", void 0);\n __decorate([\n Property()\n ], Grid.prototype, \"pagerTemplate\", void 0);\n __decorate([\n Property(0)\n ], Grid.prototype, \"frozenRows\", void 0);\n __decorate([\n Property(0)\n ], Grid.prototype, \"frozenColumns\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDataBound\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"queryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"recordDoubleClick\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowSelecting\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowSelected\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDeselecting\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDeselected\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellSelecting\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellSelected\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellDeselecting\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellDeselected\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnDragStart\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnDrag\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnDrop\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"printComplete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"pdfQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"excelQueryCellInfo\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeExcelExport\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"excelExportComplete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforePdfExport\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"pdfExportComplete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"detailDataBound\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDragStart\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDrag\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"rowDrop\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeOpenColumnChooser\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"batchAdd\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"batchDelete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeBatchAdd\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeBatchDelete\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeBatchSave\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beginEdit\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellEdit\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"cellSave\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeDataBound\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"contextMenuOpen\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"contextMenuClick\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnMenuOpen\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"columnMenuClick\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"checkBoxChange\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"beforeCopy\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"dataStateChange\", void 0);\n __decorate([\n Event()\n ], Grid.prototype, \"dataSourceChanged\", void 0);\n Grid = __decorate([\n NotifyPropertyChanges\n ], Grid);\n return Grid;\n}(Component));\nexport { Grid };\nGrid.Inject(Selection);\n","import { Browser } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { createElement, closest, classList } from '@syncfusion/ej2-base';\nimport { setCssInGridPopUp, getActualPropFromColl, isActionPrevent } from '../base/util';\nimport * as events from '../base/constant';\nimport { AriaService } from '../services/aria-service';\n/**\n *\n * The `Sort` module is used to handle sorting action.\n */\nvar Sort = /** @class */ (function () {\n /**\n * Constructor for Grid sorting module\n * @hidden\n */\n function Sort(parent, sortSettings, sortedColumns, locator) {\n this.contentRefresh = true;\n this.isModelChanged = true;\n this.aria = new AriaService();\n this.parent = parent;\n this.sortSettings = sortSettings;\n this.sortedColumns = sortedColumns;\n this.focus = locator.getService('focus');\n this.addEventListener();\n }\n /**\n * The function used to update sortSettings\n * @return {void}\n * @hidden\n */\n Sort.prototype.updateModel = function () {\n var sortedColumn = { field: this.columnName, direction: this.direction };\n var index;\n var gCols = this.parent.groupSettings.columns;\n var flag = false;\n if (!this.isMultiSort) {\n if (!gCols.length) {\n this.sortSettings.columns = [sortedColumn];\n }\n else {\n var sortedCols = [];\n for (var i = 0, len = gCols.length; i < len; i++) {\n index = this.getSortedColsIndexByField(gCols[i], sortedCols);\n if (this.columnName === gCols[i]) {\n flag = true;\n sortedCols.push(sortedColumn);\n }\n else {\n var sCol = this.getSortColumnFromField(gCols[i]);\n sortedCols.push({ field: sCol.field, direction: sCol.direction });\n }\n }\n if (!flag) {\n sortedCols.push(sortedColumn);\n }\n this.sortSettings.columns = sortedCols;\n }\n }\n else {\n index = this.getSortedColsIndexByField(this.columnName);\n if (index > -1) {\n this.sortSettings.columns.splice(index, 1);\n }\n this.sortSettings.columns.push(sortedColumn);\n this.sortSettings.columns = this.sortSettings.columns;\n }\n this.parent.dataBind();\n this.lastSortedCol = this.columnName;\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n Sort.prototype.onActionComplete = function (e) {\n var args = !this.isRemove ? {\n columnName: this.columnName, direction: this.direction, requestType: 'sorting', type: events.actionComplete\n } : { requestType: 'sorting', type: events.actionComplete };\n this.isRemove = false;\n this.parent.trigger(events.actionComplete, extend(e, args));\n };\n /**\n * Sorts a column with the given options.\n * @param {string} columnName - Defines the column name to sort.\n * @param {SortDirection} direction - Defines the direction of sorting field.\n * @param {boolean} isMultiSort - Specifies whether the previously sorted columns are to be maintained.\n * @return {void}\n */\n Sort.prototype.sortColumn = function (columnName, direction, isMultiSort) {\n var gObj = this.parent;\n if (this.parent.getColumnByField(columnName).allowSorting === false || this.parent.isContextMenuOpen()) {\n return;\n }\n if (!gObj.allowMultiSorting) {\n isMultiSort = gObj.allowMultiSorting;\n }\n if (this.isActionPrevent()) {\n gObj.notify(events.preventBatch, {\n instance: this, handler: this.sortColumn,\n arg1: columnName, arg2: direction, arg3: isMultiSort\n });\n return;\n }\n this.columnName = columnName;\n this.direction = direction;\n this.isMultiSort = isMultiSort;\n this.removeSortIcons();\n var column = gObj.getColumnHeaderByField(columnName);\n this.updateSortedCols(columnName, isMultiSort);\n if (this.contentRefresh) {\n this.updateModel();\n }\n };\n Sort.prototype.updateSortedCols = function (columnName, isMultiSort) {\n if (!isMultiSort) {\n if (this.parent.allowGrouping) {\n for (var i = 0, len = this.sortedColumns.length; i < len; i++) {\n if (this.parent.groupSettings.columns.indexOf(this.sortedColumns[i]) < 0) {\n this.sortedColumns.splice(i, 1);\n len--;\n i--;\n }\n }\n }\n else {\n this.sortedColumns.splice(0, this.sortedColumns.length);\n }\n }\n if (this.sortedColumns.indexOf(columnName) < 0) {\n this.sortedColumns.push(columnName);\n }\n };\n /**\n * @hidden\n */\n Sort.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n if (this.contentRefresh) {\n var args = this.sortSettings.columns.length ? {\n columnName: this.columnName, direction: this.direction, requestType: 'sorting', type: events.actionBegin\n } : { requestType: 'sorting', type: events.actionBegin };\n this.parent.notify(events.modelChanged, args);\n }\n this.removeSortIcons();\n this.addSortIcons();\n };\n /**\n * Clears all the sorted columns of the Grid.\n * @return {void}\n */\n Sort.prototype.clearSorting = function () {\n var cols = getActualPropFromColl(this.sortSettings.columns);\n if (this.isActionPrevent()) {\n this.parent.notify(events.preventBatch, { instance: this, handler: this.clearSorting });\n return;\n }\n for (var i = 0, len = cols.length; i < len; i++) {\n this.removeSortColumn(cols[i].field);\n }\n };\n Sort.prototype.isActionPrevent = function () {\n return isActionPrevent(this.parent);\n };\n /**\n * Remove sorted column by field name.\n * @param {string} field - Defines the column field name to remove sort.\n * @return {void}\n * @hidden\n */\n Sort.prototype.removeSortColumn = function (field) {\n var gObj = this.parent;\n var cols = this.sortSettings.columns;\n if (this.sortedColumns.indexOf(field) < 0) {\n return;\n }\n if (this.isActionPrevent()) {\n this.parent.notify(events.preventBatch, { instance: this, handler: this.removeSortColumn, arg1: field });\n return;\n }\n this.removeSortIcons();\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[i].field === field) {\n if (gObj.allowGrouping && gObj.groupSettings.columns.indexOf(cols[i].field) > -1) {\n continue;\n }\n this.sortedColumns.splice(this.sortedColumns.indexOf(cols[i].field), 1);\n cols.splice(i, 1);\n this.isRemove = true;\n if (this.isModelChanged) {\n this.parent.notify(events.modelChanged, {\n requestType: 'sorting', type: events.actionBegin\n });\n }\n break;\n }\n }\n this.addSortIcons();\n };\n Sort.prototype.getSortedColsIndexByField = function (field, sortedColumns) {\n var cols = sortedColumns ? sortedColumns : this.sortSettings.columns;\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[i].field === field) {\n return i;\n }\n }\n return -1;\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Sort.prototype.getModuleName = function () {\n return 'sort';\n };\n Sort.prototype.initialEnd = function () {\n this.parent.off(events.contentReady, this.initialEnd);\n if (this.parent.getColumns().length && this.sortSettings.columns.length) {\n var gObj = this.parent;\n this.contentRefresh = false;\n this.isMultiSort = this.sortSettings.columns.length > 1;\n for (var _i = 0, _a = gObj.sortSettings.columns; _i < _a.length; _i++) {\n var col = _a[_i];\n if (this.sortedColumns.indexOf(col.field) > -1) {\n this.sortColumn(col.field, col.direction, true);\n }\n }\n this.isMultiSort = false;\n this.contentRefresh = true;\n this.addSortIcons();\n }\n };\n /**\n * @hidden\n */\n Sort.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.contentReady, this.initialEnd, this);\n this.parent.on(events.sortComplete, this.onActionComplete, this);\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.headerRefreshed, this.refreshSortIcons, this);\n this.parent.on(events.keyPressed, this.keyPressed, this);\n };\n /**\n * @hidden\n */\n Sort.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.sortComplete, this.onActionComplete);\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.headerRefreshed, this.refreshSortIcons);\n this.parent.off(events.keyPressed, this.keyPressed);\n };\n /**\n * To destroy the sorting\n * @return {void}\n * @hidden\n */\n Sort.prototype.destroy = function () {\n this.isModelChanged = false;\n if (this.parent.element.querySelector('.e-gridpopup').querySelectorAll('.e-sortdirect').length) {\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n this.clearSorting();\n this.isModelChanged = true;\n this.removeEventListener();\n };\n Sort.prototype.clickHandler = function (e) {\n this.popUpClickHandler(e);\n var target = closest(e.target, '.e-headercell');\n if (target && !e.target.classList.contains('e-grptogglebtn') &&\n !e.target.classList.contains('e-stackedheadercell') &&\n !e.target.classList.contains('e-stackedheadercelldiv') &&\n !(target.classList.contains('e-resized')) &&\n !e.target.classList.contains('e-rhandler') &&\n !e.target.classList.contains('e-columnmenu') &&\n !e.target.classList.contains('e-filtermenudiv')) {\n var gObj = this.parent;\n var colObj = gObj.getColumnByUid(target.querySelector('.e-headercelldiv').getAttribute('e-mappinguid'));\n var direction = !target.querySelectorAll('.e-ascending').length ? 'Ascending' :\n 'Descending';\n if (colObj.type !== 'checkbox') {\n this.initiateSort(target, e, colObj);\n if (Browser.isDevice) {\n this.showPopUp(e);\n }\n }\n }\n if (target) {\n target.classList.remove('e-resized');\n }\n };\n Sort.prototype.keyPressed = function (e) {\n var ele = e.target;\n if (!this.parent.isEdit && (e.action === 'enter' || e.action === 'ctrlEnter' || e.action === 'shiftEnter')\n && closest(ele, '.e-headercell')) {\n var target = this.focus.getFocusedElement();\n if (isNullOrUndefined(target) || !target.classList.contains('e-headercell')\n || !target.querySelector('.e-headercelldiv')) {\n return;\n }\n var col = this.parent.getColumnByUid(target.querySelector('.e-headercelldiv').getAttribute('e-mappinguid'));\n this.initiateSort(target, e, col);\n }\n };\n Sort.prototype.initiateSort = function (target, e, column) {\n var gObj = this.parent;\n var field = column.field;\n var direction = !target.querySelectorAll('.e-ascending').length ? 'Ascending' :\n 'Descending';\n if (e.shiftKey || (this.sortSettings.allowUnsort && target.querySelectorAll('.e-descending').length)\n && !(gObj.groupSettings.columns.indexOf(field) > -1)) {\n this.removeSortColumn(field);\n }\n else {\n this.sortColumn(field, direction, e.ctrlKey || this.enableSortMultiTouch);\n }\n };\n Sort.prototype.showPopUp = function (e) {\n var target = closest(e.target, '.e-headercell');\n if (!isNullOrUndefined(target) || this.parent.isContextMenuOpen()) {\n setCssInGridPopUp(this.parent.element.querySelector('.e-gridpopup'), e, 'e-sortdirect e-icons e-icon-sortdirect' + (this.sortedColumns.length > 1 ? ' e-spanclicked' : ''));\n }\n };\n Sort.prototype.popUpClickHandler = function (e) {\n var target = e.target;\n if (closest(target, '.e-headercell') || e.target.classList.contains('e-rowcell') ||\n closest(target, '.e-gridpopup')) {\n if (target.classList.contains('e-sortdirect')) {\n if (!target.classList.contains('e-spanclicked')) {\n target.classList.add('e-spanclicked');\n this.enableSortMultiTouch = true;\n }\n else {\n target.classList.remove('e-spanclicked');\n this.enableSortMultiTouch = false;\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n }\n }\n else {\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n };\n Sort.prototype.addSortIcons = function () {\n var gObj = this.parent;\n var header;\n var filterElement;\n var cols = this.sortSettings.columns;\n if (cols.length > 1) {\n this.isMultiSort = true;\n }\n var fieldNames = this.parent.getColumns().map(function (c) { return c.field; });\n for (var i = 0, len = cols.length; i < len; i++) {\n if (fieldNames.indexOf(cols[i].field) === -1) {\n continue;\n }\n header = gObj.getColumnHeaderByField(cols[i].field);\n this.aria.setSort(header, cols[i].direction);\n if (this.isMultiSort && cols.length > 1) {\n header.querySelector('.e-headercelldiv').insertBefore(createElement('span', { className: 'e-sortnumber', innerHTML: (i + 1).toString() }), header.querySelector('.e-headertext'));\n }\n filterElement = header.querySelector('.e-sortfilterdiv');\n if (cols[i].direction === 'Ascending') {\n classList(filterElement, ['e-ascending', 'e-icon-ascending'], []);\n }\n else {\n classList(filterElement, ['e-descending', 'e-icon-descending'], []);\n }\n }\n this.isMultiSort = false;\n };\n Sort.prototype.removeSortIcons = function (position) {\n var gObj = this.parent;\n var header;\n var cols = this.sortSettings.columns;\n var fieldNames = this.parent.getColumns().map(function (c) { return c.field; });\n for (var i = position ? position : 0, len = !isNullOrUndefined(position) ? position + 1 : cols.length; i < len; i++) {\n header = gObj.getColumnHeaderByField(cols[i].field);\n if (gObj.allowGrouping && gObj.groupSettings.columns.indexOf(cols[i].field) > -1 &&\n (isNullOrUndefined(header) || !header.querySelector('.e-sortfilterdiv'))) {\n continue;\n }\n if (fieldNames.indexOf(cols[i].field) === -1) {\n continue;\n }\n this.aria.setSort(header, 'none');\n classList(header.querySelector('.e-sortfilterdiv'), [], ['e-descending', 'e-icon-descending', 'e-ascending', 'e-icon-ascending']);\n if (header.querySelector('.e-sortnumber')) {\n header.querySelector('.e-headercelldiv').removeChild(header.querySelector('.e-sortnumber'));\n }\n }\n };\n Sort.prototype.getSortColumnFromField = function (field) {\n for (var i = 0, len = this.sortSettings.columns.length; i < len; i++) {\n if (this.sortSettings.columns[i].field === field) {\n return this.sortSettings.columns[i];\n }\n }\n return false;\n };\n Sort.prototype.updateAriaAttr = function () {\n var fieldNames = this.parent.getColumns().map(function (c) { return c.field; });\n for (var _i = 0, _a = this.sortedColumns; _i < _a.length; _i++) {\n var col = _a[_i];\n if (fieldNames.indexOf(col) === -1) {\n continue;\n }\n var header = this.parent.getColumnHeaderByField(col);\n this.aria.setSort(header, this.getSortColumnFromField(col).direction);\n }\n };\n Sort.prototype.refreshSortIcons = function () {\n this.removeSortIcons();\n this.isMultiSort = true;\n this.removeSortIcons();\n this.addSortIcons();\n this.isMultiSort = false;\n this.updateAriaAttr();\n };\n return Sort;\n}());\nexport { Sort };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { createElement, classList, append } from '@syncfusion/ej2-base';\n/**\n * `NumericContainer` module handles rendering and refreshing numeric container.\n */\nvar NumericContainer = /** @class */ (function () {\n /**\n * Constructor for numericContainer module\n * @hidden\n */\n function NumericContainer(pagerModule) {\n this.pagerModule = pagerModule;\n }\n /**\n * The function is used to render numericContainer\n * @hidden\n */\n NumericContainer.prototype.render = function () {\n this.pagerElement = this.pagerModule.element;\n this.renderNumericContainer();\n this.refreshNumericLinks();\n this.wireEvents();\n };\n /**\n * Refreshes the numeric container of Pager.\n */\n NumericContainer.prototype.refresh = function () {\n this.pagerModule.updateTotalPages();\n if (this.links.length) {\n this.updateLinksHtml();\n }\n this.updateStyles();\n };\n /**\n * The function is used to refresh refreshNumericLinks\n * @hidden\n */\n NumericContainer.prototype.refreshNumericLinks = function () {\n var link;\n var pagerObj = this.pagerModule;\n var div = pagerObj.element.querySelector('.e-numericcontainer');\n var frag = document.createDocumentFragment();\n div.innerHTML = '';\n for (var i = 1; i <= pagerObj.pageCount; i++) {\n link = createElement('a', {\n className: 'e-link e-numericitem e-spacing e-pager-default',\n attrs: { role: 'link', tabindex: '-1', 'aria-label': 'Goto Page ' + i,\n href: 'javascript:void(0);', name: 'Goto page' + i }\n });\n if (pagerObj.currentPage === i) {\n classList(link, ['e-currentitem', 'e-active'], ['e-pager-default']);\n }\n frag.appendChild(link);\n }\n div.appendChild(frag);\n this.links = [].slice.call(div.childNodes);\n };\n /**\n * Binding events to the element while component creation\n * @hidden\n */\n NumericContainer.prototype.wireEvents = function () {\n EventHandler.add(this.pagerElement, 'click', this.clickHandler, this);\n };\n /**\n * Unbinding events from the element while component destroy\n * @hidden\n */\n NumericContainer.prototype.unwireEvents = function () {\n EventHandler.remove(this.pagerElement, 'click', this.clickHandler);\n };\n /**\n * To destroy the PagerMessage\n * @method destroy\n * @return {void}\n * @hidden\n */\n NumericContainer.prototype.destroy = function () {\n this.unwireEvents();\n };\n NumericContainer.prototype.renderNumericContainer = function () {\n this.element = createElement('div', {\n className: 'e-pagercontainer', attrs: { 'role': 'navigation' }\n });\n this.renderFirstNPrev(this.element);\n this.renderPrevPagerSet(this.element);\n this.element.appendChild(createElement('div', { className: 'e-numericcontainer' }));\n this.renderNextPagerSet(this.element);\n this.renderNextNLast(this.element);\n this.pagerModule.element.appendChild(this.element);\n };\n NumericContainer.prototype.renderFirstNPrev = function (pagerContainer) {\n this.first = createElement('div', {\n className: 'e-first e-icons e-icon-first',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('firstPageTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('firstPageTooltip'),\n tabindex: '-1'\n }\n });\n this.prev = createElement('div', {\n className: 'e-prev e-icons e-icon-prev',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('previousPageTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('previousPageTooltip'),\n tabindex: '-1'\n }\n });\n append([this.first, this.prev], pagerContainer);\n };\n NumericContainer.prototype.renderPrevPagerSet = function (pagerContainer) {\n var prevPager = createElement('div');\n this.PP = createElement('a', {\n className: 'e-link e-pp e-spacing', innerHTML: '...',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('previousPagerTooltip'), role: 'link',\n 'aria-label': this.pagerModule.getLocalizedLabel('previousPagerTooltip'),\n tabindex: '-1',\n name: this.pagerModule.getLocalizedLabel('previousPagerTooltip'),\n href: 'javascript:void(0);'\n }\n });\n prevPager.appendChild(this.PP);\n pagerContainer.appendChild(prevPager);\n };\n NumericContainer.prototype.renderNextPagerSet = function (pagerContainer) {\n var nextPager = createElement('div');\n this.NP = createElement('a', {\n className: 'e-link e-np e-spacing',\n innerHTML: '...', attrs: {\n title: this.pagerModule.getLocalizedLabel('nextPagerTooltip'), role: 'link',\n 'aria-label': this.pagerModule.getLocalizedLabel('nextPagerTooltip'),\n tabindex: '-1',\n name: this.pagerModule.getLocalizedLabel('nextPagerTooltip'),\n href: 'javascript:void(0);'\n }\n });\n nextPager.appendChild(this.NP);\n pagerContainer.appendChild(nextPager);\n };\n NumericContainer.prototype.renderNextNLast = function (pagerContainer) {\n this.next = createElement('div', {\n className: 'e-next e-icons e-icon-next',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('nextPageTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('nextPageTooltip'),\n tabindex: '-1'\n }\n });\n this.last = createElement('div', {\n className: 'e-last e-icons e-icon-last',\n attrs: {\n title: this.pagerModule.getLocalizedLabel('lastPageTooltip'),\n 'aria-label': this.pagerModule.getLocalizedLabel('lastPageTooltip'),\n tabindex: '-1'\n }\n });\n append([this.next, this.last], pagerContainer);\n };\n NumericContainer.prototype.clickHandler = function (e) {\n var pagerObj = this.pagerModule;\n var target = e.target;\n pagerObj.previousPageNo = pagerObj.currentPage;\n if (!target.classList.contains('e-disable') && !isNullOrUndefined(target.getAttribute('index'))) {\n pagerObj.currentPage = parseInt(target.getAttribute('index'), 10);\n pagerObj.dataBind();\n }\n return false;\n };\n NumericContainer.prototype.updateLinksHtml = function () {\n var pagerObj = this.pagerModule;\n var currentPageSet;\n var pageNo;\n pagerObj.currentPage = pagerObj.totalPages === 1 ? 1 : pagerObj.currentPage;\n if (pagerObj.currentPage > pagerObj.totalPages && pagerObj.totalPages) {\n pagerObj.currentPage = pagerObj.totalPages;\n }\n currentPageSet = parseInt((pagerObj.currentPage / pagerObj.pageCount).toString(), 10);\n if (pagerObj.currentPage % pagerObj.pageCount === 0 && currentPageSet > 0) {\n currentPageSet = currentPageSet - 1;\n }\n for (var i = 0; i < pagerObj.pageCount; i++) {\n pageNo = (currentPageSet * pagerObj.pageCount) + 1 + i;\n if (pageNo <= pagerObj.totalPages) {\n this.links[i].style.display = '';\n this.links[i].setAttribute('index', pageNo.toString());\n this.links[i].innerHTML = !pagerObj.customText ? pageNo.toString() : pagerObj.customText + pageNo;\n if (pagerObj.currentPage !== pageNo) {\n this.links[i].classList.add('e-pager-default');\n }\n else {\n this.links[i].classList.remove('e-pager-default');\n }\n }\n else {\n this.links[i].innerHTML = !pagerObj.customText ? pageNo.toString() : pagerObj.customText + pageNo;\n this.links[i].style.display = 'none';\n }\n classList(this.links[i], [], ['e-currentitem', 'e-active']);\n }\n this.first.setAttribute('index', '1');\n this.last.setAttribute('index', pagerObj.totalPages.toString());\n this.prev.setAttribute('index', (pagerObj.currentPage - 1).toString());\n this.next.setAttribute('index', (pagerObj.currentPage + 1).toString());\n this.pagerElement.querySelector('.e-mfirst').setAttribute('index', '1');\n this.pagerElement.querySelector('.e-mlast').setAttribute('index', pagerObj.totalPages.toString());\n this.pagerElement.querySelector('.e-mprev').setAttribute('index', (pagerObj.currentPage - 1).toString());\n this.pagerElement.querySelector('.e-mnext').setAttribute('index', (pagerObj.currentPage + 1).toString());\n this.PP.setAttribute('index', (parseInt(this.links[0].getAttribute('index'), 10) - pagerObj.pageCount).toString());\n this.NP.setAttribute('index', (parseInt(this.links[this.links.length - 1].getAttribute('index'), 10) + 1).toString());\n };\n NumericContainer.prototype.updateStyles = function () {\n this.updateFirstNPrevStyles();\n this.updatePrevPagerSetStyles();\n this.updateNextPagerSetStyles();\n this.updateNextNLastStyles();\n if (this.links.length) {\n classList(this.links[(this.pagerModule.currentPage - 1) % this.pagerModule.pageCount], ['e-currentitem', 'e-active'], []);\n }\n };\n NumericContainer.prototype.updateFirstNPrevStyles = function () {\n var firstPage = ['e-firstpage', 'e-pager-default'];\n var firstPageDisabled = ['e-firstpagedisabled', 'e-disable'];\n var prevPage = ['e-prevpage', 'e-pager-default'];\n var prevPageDisabled = ['e-prevpagedisabled', 'e-disable'];\n if (this.pagerModule.totalPages > 0 && this.pagerModule.currentPage > 1) {\n classList(this.prev, prevPage, prevPageDisabled);\n classList(this.first, firstPage, firstPageDisabled);\n classList(this.pagerElement.querySelector('.e-mfirst'), firstPage, firstPageDisabled);\n classList(this.pagerElement.querySelector('.e-mprev'), prevPage, prevPageDisabled);\n }\n else {\n classList(this.prev, prevPageDisabled, prevPage);\n classList(this.first, firstPageDisabled, firstPage);\n classList(this.pagerElement.querySelector('.e-mprev'), prevPageDisabled, prevPage);\n classList(this.pagerElement.querySelector('.e-mfirst'), firstPageDisabled, firstPage);\n }\n };\n NumericContainer.prototype.updatePrevPagerSetStyles = function () {\n if (this.pagerModule.currentPage > this.pagerModule.pageCount) {\n classList(this.PP, ['e-numericitem', 'e-pager-default'], ['e-nextprevitemdisabled', 'e-disable']);\n }\n else {\n classList(this.PP, ['e-nextprevitemdisabled', 'e-disable'], ['e-numericitem', 'e-pager-default']);\n }\n };\n NumericContainer.prototype.updateNextPagerSetStyles = function () {\n var pagerObj = this.pagerModule;\n var firstPage = this.links[0].innerHTML.replace(pagerObj.customText, '');\n if (!firstPage.length || !this.links.length || (parseInt(firstPage, 10) + pagerObj.pageCount > pagerObj.totalPages)) {\n classList(this.NP, ['e-nextprevitemdisabled', 'e-disable'], ['e-numericitem', 'e-pager-default']);\n }\n else {\n classList(this.NP, ['e-numericitem', 'e-pager-default'], ['e-nextprevitemdisabled', 'e-disable']);\n }\n };\n NumericContainer.prototype.updateNextNLastStyles = function () {\n var lastPage = ['e-lastpage', 'e-pager-default'];\n var lastPageDisabled = ['e-lastpagedisabled', 'e-disable'];\n var nextPage = ['e-nextpage', 'e-pager-default'];\n var nextPageDisabled = ['e-nextpagedisabled', 'e-disable'];\n var pagerObj = this.pagerModule;\n if (pagerObj.currentPage === pagerObj.totalPages || pagerObj.totalRecordsCount === 0) {\n classList(this.last, lastPageDisabled, lastPage);\n classList(this.next, nextPageDisabled, nextPage);\n classList(this.pagerElement.querySelector('.e-mlast'), lastPageDisabled, lastPage);\n classList(this.pagerElement.querySelector('.e-mnext'), nextPageDisabled, nextPage);\n }\n else {\n classList(this.last, lastPage, lastPageDisabled);\n classList(this.next, nextPage, nextPageDisabled);\n classList(this.pagerElement.querySelector('.e-mlast'), lastPage, lastPageDisabled);\n classList(this.pagerElement.querySelector('.e-mnext'), nextPage, nextPageDisabled);\n }\n };\n return NumericContainer;\n}());\nexport { NumericContainer };\n","import { createElement, append } from '@syncfusion/ej2-base';\n/**\n * `PagerMessage` module is used to display pager information.\n */\nvar PagerMessage = /** @class */ (function () {\n /**\n * Constructor for externalMessage module\n * @hidden\n */\n function PagerMessage(pagerModule) {\n this.pagerModule = pagerModule;\n }\n /**\n * The function is used to render pager message\n * @hidden\n */\n PagerMessage.prototype.render = function () {\n var div = createElement('div', { className: 'e-parentmsgbar', attrs: { 'aria-label': 'Pager Information' } });\n this.pageNoMsgElem = createElement('span', { className: 'e-pagenomsg', styles: 'textalign:right' });\n this.pageCountMsgElem = createElement('span', { className: 'e-pagecountmsg', styles: 'textalign:right' });\n append([this.pageNoMsgElem, this.pageCountMsgElem], div);\n this.pagerModule.element.appendChild(div);\n this.refresh();\n };\n /**\n * Refreshes the pager information.\n */\n PagerMessage.prototype.refresh = function () {\n var pagerObj = this.pagerModule;\n this.pageNoMsgElem.textContent = this.format(pagerObj.getLocalizedLabel('currentPageInfo'), [pagerObj.totalRecordsCount === 0 ? 0 :\n pagerObj.currentPage, pagerObj.totalPages || 0]) + ' ';\n this.pageCountMsgElem.textContent = this.format(pagerObj.getLocalizedLabel('totalItemsInfo'), [pagerObj.totalRecordsCount || 0]);\n this.pageNoMsgElem.parentElement.setAttribute('aria-label', this.pageNoMsgElem.textContent + this.pageCountMsgElem.textContent);\n };\n /**\n * Hides the Pager information.\n */\n PagerMessage.prototype.hideMessage = function () {\n if (this.pageNoMsgElem) {\n this.pageNoMsgElem.style.display = 'none';\n }\n if (this.pageCountMsgElem) {\n this.pageCountMsgElem.style.display = 'none';\n }\n };\n /**\n * Shows the Pager information.\n */\n PagerMessage.prototype.showMessage = function () {\n if (!this.pageNoMsgElem) {\n this.render();\n }\n this.pageNoMsgElem.style.display = '';\n this.pageCountMsgElem.style.display = '';\n };\n /**\n * To destroy the PagerMessage\n * @method destroy\n * @return {void}\n * @hidden\n */\n PagerMessage.prototype.destroy = function () {\n //destroy\n };\n PagerMessage.prototype.format = function (str, args) {\n var regx;\n for (var i = 0; i < args.length; i++) {\n regx = new RegExp('\\\\{' + (i) + '\\\\}', 'gm');\n str = str.replace(regx, args[i].toString());\n }\n return str;\n };\n return PagerMessage;\n}());\nexport { PagerMessage };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, L10n, Browser } from '@syncfusion/ej2-base';\nimport { createElement, compile as templateCompiler } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Property, Event, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { NumericContainer } from './numeric-container';\nimport { PagerMessage } from './pager-message';\nimport { appendChildren } from '../grid/base/util';\n/**\n * Represents the `Pager` component.\n * ```html\n *
    \n * ```\n * ```typescript\n * \n * ```\n */\nvar Pager = /** @class */ (function (_super) {\n __extends(Pager, _super);\n /**\n * Constructor for creating the component.\n * @hidden\n */\n function Pager(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.defaultConstants = {\n currentPageInfo: '{0} of {1} pages',\n totalItemsInfo: '({0} items)',\n firstPageTooltip: 'Go to first page',\n lastPageTooltip: 'Go to last page',\n nextPageTooltip: 'Go to next page',\n previousPageTooltip: 'Go to previous page',\n nextPagerTooltip: 'Go to next pager',\n previousPagerTooltip: 'Go to previous pager',\n pagerDropDown: 'Items per page'\n };\n /**\n * `containerModule` is used to manipulate numeric container behavior of Pager.\n */\n _this.containerModule = new NumericContainer(_this);\n /**\n * `pagerMessageModule` is used to manipulate pager message of Pager.\n */\n _this.pagerMessageModule = new PagerMessage(_this);\n return _this;\n }\n /**\n * To provide the array of modules needed for component rendering\n * @hidden\n */\n Pager.prototype.requiredModules = function () {\n var modules = [];\n if (this.enableExternalMessage) {\n modules.push({\n member: 'externalMessage',\n args: [this]\n });\n }\n if (this.checkpagesizes()) {\n modules.push({\n member: 'pagerdropdown',\n args: [this]\n });\n }\n return modules;\n };\n /**\n * Initialize the event handler\n * @hidden\n */\n Pager.prototype.preRender = function () {\n //preRender\n };\n /**\n * To Initialize the component rendering\n */\n Pager.prototype.render = function () {\n if (this.template) {\n this.pagerTemplate();\n }\n else {\n this.initLocalization();\n this.updateRTL();\n this.totalRecordsCount = this.totalRecordsCount || 0;\n this.renderFirstPrevDivForDevice();\n this.containerModule.render();\n if (this.enablePagerMessage) {\n this.pagerMessageModule.render();\n }\n this.renderNextLastDivForDevice();\n if (this.checkpagesizes()) {\n this.pagerdropdownModule.render();\n }\n this.addAriaLabel();\n if (this.enableExternalMessage && this.externalMessageModule) {\n this.externalMessageModule.render();\n }\n this.refresh();\n this.trigger('created', { 'currentPage': this.currentPage, 'totalRecordsCount': this.totalRecordsCount });\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @hidden\n */\n Pager.prototype.getPersistData = function () {\n var keyEntity = ['currentPage', 'pageSize'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * To destroy the Pager component.\n * @method destroy\n * @return {void}\n */\n Pager.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.containerModule.destroy();\n this.pagerMessageModule.destroy();\n this.element.innerHTML = '';\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Pager.prototype.getModuleName = function () {\n return 'pager';\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n */\n Pager.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (this.isDestroyed) {\n return;\n }\n if (newProp.pageCount !== oldProp.pageCount) {\n this.containerModule.refreshNumericLinks();\n this.containerModule.refresh();\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'currentPage':\n if (this.checkGoToPage(newProp.currentPage, oldProp.currentPage)) {\n this.currentPageChanged();\n }\n break;\n case 'pageSize':\n case 'totalRecordsCount':\n case 'customText':\n if (this.checkpagesizes()) {\n this.pagerdropdownModule.setDropDownValue('value', this.pageSize);\n }\n this.refresh();\n break;\n case 'pageSizes':\n if (this.checkpagesizes()) {\n this.pagerdropdownModule.destroy();\n this.pagerdropdownModule.render();\n }\n this.refresh();\n break;\n case 'template':\n this.templateFn = this.compile(this.template);\n this.refresh();\n break;\n case 'locale':\n this.initLocalization();\n this.refresh();\n break;\n case 'enableExternalMessage':\n if (this.enableExternalMessage) {\n this.externalMessageModule.render();\n }\n break;\n case 'externalMessage':\n if (this.externalMessageModule) {\n this.externalMessageModule.refresh();\n }\n break;\n case 'enableRtl':\n this.updateRTL();\n break;\n case 'enablePagerMessage':\n if (this.enablePagerMessage) {\n this.pagerMessageModule.showMessage();\n }\n else {\n this.pagerMessageModule.hideMessage();\n }\n break;\n }\n }\n };\n /**\n * Gets the localized label by locale keyword.\n * @param {string} key\n * @return {string}\n */\n Pager.prototype.getLocalizedLabel = function (key) {\n return this.localeObj.getConstant(key);\n };\n /**\n * Navigate to target page by given number.\n * @param {number} pageNo - Defines page number.\n * @return {void}\n */\n Pager.prototype.goToPage = function (pageNo) {\n if (this.checkGoToPage(pageNo)) {\n this.currentPage = pageNo;\n this.dataBind();\n }\n };\n Pager.prototype.checkpagesizes = function () {\n if (this.pageSizes === true || this.pageSizes.length) {\n return true;\n }\n return false;\n };\n Pager.prototype.checkGoToPage = function (newPageNo, oldPageNo) {\n if (newPageNo !== this.currentPage) {\n this.previousPageNo = this.currentPage;\n }\n if (!isNullOrUndefined(oldPageNo)) {\n this.previousPageNo = oldPageNo;\n }\n if (this.previousPageNo !== newPageNo && (newPageNo >= 1 && newPageNo <= this.totalPages)) {\n return true;\n }\n return false;\n };\n Pager.prototype.currentPageChanged = function () {\n if (this.enableQueryString) {\n this.updateQueryString(this.currentPage);\n }\n var args = { currentPage: this.currentPage, cancel: false };\n this.trigger('click', args);\n if (!args.cancel) {\n this.refresh();\n }\n };\n Pager.prototype.pagerTemplate = function () {\n var result;\n this.element.classList.add('e-pagertemplate');\n this.compile(this.template);\n var data = {\n currentPage: this.currentPage, pageSize: this.pageSize, pageCount: this.pageCount,\n totalRecordsCount: this.totalRecordsCount, totalPages: this.totalPages\n };\n result = this.getPagerTemplate()(data);\n appendChildren(this.element, result);\n };\n /** @hidden */\n Pager.prototype.updateTotalPages = function () {\n this.totalPages = (this.totalRecordsCount % this.pageSize === 0) ? (this.totalRecordsCount / this.pageSize) :\n (parseInt((this.totalRecordsCount / this.pageSize).toString(), 10) + 1);\n };\n /** @hidden */\n Pager.prototype.getPagerTemplate = function () {\n return this.templateFn;\n };\n Pager.prototype.compile = function (template) {\n if (template) {\n var e = void 0;\n try {\n if (document.querySelectorAll(template).length) {\n this.templateFn = templateCompiler(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (e) {\n this.templateFn = templateCompiler(template);\n }\n }\n return undefined;\n };\n /**\n * Refreshes page count, pager information and external message.\n * @return {void}\n */\n Pager.prototype.refresh = function () {\n if (this.template) {\n this.element.innerHTML = '';\n this.updateTotalPages();\n this.pagerTemplate();\n }\n else {\n this.updateRTL();\n this.containerModule.refresh();\n if (this.enablePagerMessage) {\n this.pagerMessageModule.refresh();\n }\n if (this.enableExternalMessage && this.externalMessageModule) {\n this.externalMessageModule.refresh();\n }\n }\n };\n Pager.prototype.updateRTL = function () {\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n else {\n this.element.classList.remove('e-rtl');\n }\n };\n Pager.prototype.initLocalization = function () {\n this.localeObj = new L10n(this.getModuleName(), this.defaultConstants, this.locale);\n };\n Pager.prototype.updateQueryString = function (value) {\n var updatedUrl = this.getUpdatedURL(window.location.href, 'page', value.toString());\n window.history.pushState({ path: updatedUrl }, '', updatedUrl);\n };\n Pager.prototype.getUpdatedURL = function (uri, key, value) {\n var regx = new RegExp('([?|&])' + key + '=.*?(&|#|$)', 'i');\n if (uri.match(regx)) {\n return uri.replace(regx, '$1' + key + '=' + value + '$2');\n }\n else {\n var hash = '';\n if (uri.indexOf('#') !== -1) {\n hash = uri.replace(/.*#/, '#');\n uri = uri.replace(/#.*/, '');\n }\n return uri + (uri.indexOf('?') !== -1 ? '&' : '?') + key + '=' + value + hash;\n }\n };\n Pager.prototype.renderFirstPrevDivForDevice = function () {\n this.element.appendChild(createElement('div', {\n className: 'e-mfirst e-icons e-icon-first',\n attrs: { title: this.getLocalizedLabel('firstPageTooltip'), tabindex: '-1' }\n }));\n this.element.appendChild(createElement('div', {\n className: 'e-mprev e-icons e-icon-prev',\n attrs: { title: this.getLocalizedLabel('previousPageTooltip'), tabindex: '-1' }\n }));\n };\n Pager.prototype.renderNextLastDivForDevice = function () {\n this.element.appendChild(createElement('div', {\n className: 'e-mnext e-icons e-icon-next',\n attrs: { title: this.getLocalizedLabel('nextPageTooltip'), tabindex: '-1' }\n }));\n this.element.appendChild(createElement('div', {\n className: 'e-mlast e-icons e-icon-last',\n attrs: { title: this.getLocalizedLabel('lastPageTooltip'), tabindex: '-1' }\n }));\n };\n Pager.prototype.addAriaLabel = function () {\n var _this = this;\n var classList = ['.e-mfirst', '.e-mprev', '.e-mnext', '.e-mlast'];\n if (!Browser.isDevice) {\n classList.forEach(function (value) {\n var element = _this.element.querySelector(value);\n element.setAttribute('aria-label', element.getAttribute('title'));\n });\n }\n };\n __decorate([\n Property(false)\n ], Pager.prototype, \"enableQueryString\", void 0);\n __decorate([\n Property(false)\n ], Pager.prototype, \"enableExternalMessage\", void 0);\n __decorate([\n Property(true)\n ], Pager.prototype, \"enablePagerMessage\", void 0);\n __decorate([\n Property(12)\n ], Pager.prototype, \"pageSize\", void 0);\n __decorate([\n Property(10)\n ], Pager.prototype, \"pageCount\", void 0);\n __decorate([\n Property(1)\n ], Pager.prototype, \"currentPage\", void 0);\n __decorate([\n Property()\n ], Pager.prototype, \"totalRecordsCount\", void 0);\n __decorate([\n Property()\n ], Pager.prototype, \"externalMessage\", void 0);\n __decorate([\n Property(false)\n ], Pager.prototype, \"pageSizes\", void 0);\n __decorate([\n Property()\n ], Pager.prototype, \"template\", void 0);\n __decorate([\n Property('')\n ], Pager.prototype, \"customText\", void 0);\n __decorate([\n Event()\n ], Pager.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], Pager.prototype, \"dropDownChanged\", void 0);\n __decorate([\n Event()\n ], Pager.prototype, \"created\", void 0);\n Pager = __decorate([\n NotifyPropertyChanges\n ], Pager);\n return Pager;\n}(Component));\nexport { Pager };\n","import { createElement, remove } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\n/**\n * `PagerDropDown` module handles selected pageSize from DropDownList.\n */\nvar PagerDropDown = /** @class */ (function () {\n /**\n * Constructor for pager module\n * @hidden\n */\n function PagerDropDown(pagerModule) {\n this.pagerModule = pagerModule;\n }\n /**\n * For internal use only - Get the module name.\n * @private\n * @hidden\n */\n PagerDropDown.prototype.getModuleName = function () {\n return 'pagerdropdown';\n };\n /**\n * The function is used to render pager dropdown\n * @hidden\n */\n PagerDropDown.prototype.render = function () {\n var pagerObj = this.pagerModule;\n this.pagerDropDownDiv = createElement('div', { className: 'e-pagesizes' });\n var dropDownDiv = createElement('div', { className: 'e-pagerdropdown' });\n var defaultTextDiv = createElement('div', { className: 'e-pagerconstant' });\n var input = createElement('input', { attrs: { type: 'text', tabindex: '1' } });\n this.pagerCons = createElement('span', { className: 'e-constant', innerHTML: this.pagerModule.getLocalizedLabel('pagerDropDown') });\n dropDownDiv.appendChild(input);\n defaultTextDiv.appendChild(this.pagerCons);\n this.pagerDropDownDiv.appendChild(dropDownDiv);\n this.pagerDropDownDiv.appendChild(defaultTextDiv);\n this.pagerModule.element.appendChild(this.pagerDropDownDiv);\n var pageSizesModule = this.pagerModule.pageSizes;\n var pageSizesArray = (pageSizesModule.length ? pageSizesModule : [5, 10, 12, 20]);\n var defaultValue = (pageSizesArray).indexOf(this.pagerModule.pageSize) > -1 ? this.pagerModule.pageSize : pageSizesArray[0];\n this.dropDownListObject = new DropDownList({\n dataSource: pageSizesArray,\n value: defaultValue,\n change: this.onChange.bind(this)\n });\n this.dropDownListObject.appendTo(input);\n pagerObj.pageSize = defaultValue;\n pagerObj.dataBind();\n pagerObj.trigger('dropDownChanged', { pageSize: defaultValue });\n };\n /**\n * For internal use only - Get the pagesize.\n * @private\n * @hidden\n */\n PagerDropDown.prototype.onChange = function (e) {\n this.pagerModule.pageSize = this.dropDownListObject.value;\n this.pagerModule.dataBind();\n this.pagerModule.trigger('dropDownChanged', { pageSize: this.dropDownListObject.value });\n };\n PagerDropDown.prototype.setDropDownValue = function (prop, value) {\n if (prop === 'value') {\n this.dropDownListObject.value = value;\n }\n };\n /**\n * To destroy the Pagerdropdown\n * @method destroy\n * @return {void}\n * @hidden\n */\n PagerDropDown.prototype.destroy = function (args) {\n if (this.dropDownListObject && !this.dropDownListObject.isDestroyed) {\n this.dropDownListObject.destroy();\n remove(this.pagerDropDownDiv);\n }\n };\n return PagerDropDown;\n}());\nexport { PagerDropDown };\n","import { createElement, remove } from '@syncfusion/ej2-base';\n/**\n * `ExternalMessage` module is used to display user provided message.\n */\nvar ExternalMessage = /** @class */ (function () {\n /**\n * Constructor for externalMessage module\n * @param {Pager} pagerModule?\n * @returns defaultType\n * @hidden\n */\n function ExternalMessage(pagerModule) {\n this.pagerModule = pagerModule;\n }\n /**\n * For internal use only - Get the module name.\n * @private\n */\n ExternalMessage.prototype.getModuleName = function () {\n return 'externalMessage';\n };\n /**\n * The function is used to render pager externalMessage\n * @hidden\n */\n ExternalMessage.prototype.render = function () {\n this.element = createElement('div', { className: 'e-pagerexternalmsg', attrs: { 'aria-label': 'Pager external message' } });\n this.pagerModule.element.appendChild(this.element);\n this.refresh();\n };\n /**\n * Refreshes the external message of Pager.\n */\n ExternalMessage.prototype.refresh = function () {\n if (this.pagerModule.externalMessage && this.pagerModule.externalMessage.toString().length) {\n this.showMessage();\n this.element.innerHTML = this.pagerModule.externalMessage;\n }\n else {\n this.hideMessage();\n }\n };\n /**\n * Hides the external message of Pager.\n */\n ExternalMessage.prototype.hideMessage = function () {\n this.element.style.display = 'none';\n };\n /**\n * Shows the external message of the Pager.\n */\n ExternalMessage.prototype.showMessage = function () {\n this.element.style.display = '';\n };\n /**\n * To destroy the PagerMessage\n * @method destroy\n * @return {void}\n * @hidden\n */\n ExternalMessage.prototype.destroy = function () {\n remove(this.element);\n };\n return ExternalMessage;\n}());\nexport { ExternalMessage };\n","import { extend } from '@syncfusion/ej2-base';\nimport { remove, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Pager } from '../../pager/pager';\nimport { PagerDropDown } from '../../pager/pager-dropdown';\nimport { ExternalMessage } from '../../pager/external-message';\nimport { extend as gridExtend, getActualProperties, isActionPrevent } from '../base/util';\nimport * as events from '../base/constant';\nPager.Inject(ExternalMessage, PagerDropDown);\n/**\n * The `Page` module is used to render pager and handle paging action.\n */\nvar Page = /** @class */ (function () {\n /**\n * Constructor for the Grid paging module\n * @hidden\n */\n function Page(parent, pageSettings) {\n this.parent = parent;\n this.pageSettings = pageSettings;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Page.prototype.getModuleName = function () {\n return 'pager';\n };\n /**\n * The function used to render pager from grid pageSettings\n * @return {void}\n * @hidden\n */\n Page.prototype.render = function () {\n var gObj = this.parent;\n var pagerObj;\n this.pagerDestroy();\n if (!isNullOrUndefined(this.parent.pagerTemplate)) {\n this.pageSettings.template = this.parent.pagerTemplate;\n }\n this.element = createElement('div', { className: 'e-gridpager' });\n pagerObj = gridExtend({}, extend({}, getActualProperties(this.pageSettings)), {\n click: this.clickHandler.bind(this),\n dropDownChanged: this.onSelect.bind(this),\n enableRtl: gObj.enableRtl, locale: gObj.locale,\n created: this.addAriaAttr.bind(this)\n }, ['parentObj', 'propName']);\n this.pagerObj = new Pager(pagerObj);\n };\n Page.prototype.onSelect = function (e) {\n this.pageSettings.pageSize = e.pageSize;\n this.pageSettings.currentPage = 1;\n };\n Page.prototype.addAriaAttr = function () {\n var _this = this;\n if (!(this.pageSettings.template)) {\n var numericContainerNew = createElement('div', { className: 'e-numericcontainer' });\n var pagerContainer = this.element.querySelector('.e-pagercontainer');\n var frag = document.createDocumentFragment();\n var numericContainer = this.element.querySelector('.e-numericcontainer');\n var links = numericContainer.querySelectorAll('a');\n for (var i = 0; i < links.length; i++) {\n if (this.parent.getContentTable()) {\n links[i].setAttribute('aria-owns', this.parent.getContentTable().id);\n }\n else {\n links[i].setAttribute('aria-owns', this.parent.element.getAttribute('id') + '_content_table');\n }\n var numericContainerDiv = createElement('div');\n numericContainerDiv.appendChild(links[i]);\n frag.appendChild(numericContainerDiv);\n }\n numericContainerNew.appendChild(frag);\n pagerContainer.replaceChild(numericContainerNew, numericContainer);\n var classList = ['.e-mfirst', '.e-mprev', '.e-first', '.e-prev', '.e-next', '.e-last', '.e-mnext', '.e-mlast'];\n classList.forEach(function (value) {\n var element = _this.element.querySelector(value);\n if (_this.parent.getContentTable()) {\n element.setAttribute('aria-owns', _this.parent.getContentTable().id);\n }\n });\n }\n };\n Page.prototype.dataReady = function (e) {\n this.updateModel(e);\n };\n /**\n * Refreshes the page count, pager information, and external message.\n * @return {void}\n */\n Page.prototype.refresh = function () {\n this.pagerObj.refresh();\n };\n /**\n * Navigates to the target page according to the given number.\n * @param {number} pageNo - Defines the page number to navigate.\n * @return {void}\n */\n Page.prototype.goToPage = function (pageNo) {\n this.pagerObj.goToPage(pageNo);\n };\n /**\n * The function used to update pageSettings model\n * @return {void}\n * @hidden\n */\n Page.prototype.updateModel = function (e) {\n this.parent.pageSettings.totalRecordsCount = e.count;\n this.parent.dataBind();\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n Page.prototype.onActionComplete = function (e) {\n this.parent.trigger(events.actionComplete, extend(e, {\n currentPage: this.parent.pageSettings.currentPage, requestType: 'paging',\n type: events.actionComplete\n }));\n };\n /**\n * @hidden\n */\n Page.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n var newProp = e.properties;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n this.pagerObj[prop] = newProp[prop];\n }\n this.pagerObj.dataBind();\n };\n Page.prototype.clickHandler = function (e) {\n var gObj = this.parent;\n if (this.isForceCancel || isActionPrevent(gObj)) {\n if (!this.isForceCancel) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.goToPage, arg1: e.currentPage });\n this.isForceCancel = true;\n this.pagerObj.currentPage = gObj.pageSettings.currentPage;\n this.pagerObj.dataBind();\n }\n else {\n this.isForceCancel = false;\n }\n e.cancel = true;\n return;\n }\n var prevPage = this.pageSettings.currentPage;\n this.pageSettings.currentPage = e.currentPage;\n this.parent.notify(events.modelChanged, {\n requestType: 'paging',\n previousPage: prevPage,\n currentPage: e.currentPage,\n type: events.actionBegin\n });\n };\n Page.prototype.keyPressHandler = function (e) {\n if (e.action in keyActions) {\n e.preventDefault();\n this.element.querySelector(keyActions[e.action]).click();\n }\n };\n /**\n * Defines the text of the external message.\n * @param {string} message - Defines the message to update.\n * @return {void}\n */\n Page.prototype.updateExternalMessage = function (message) {\n if (!this.pagerObj.enableExternalMessage) {\n this.pagerObj.enableExternalMessage = true;\n this.pagerObj.dataBind();\n }\n this.pagerObj.externalMessage = message;\n this.pagerObj.dataBind();\n };\n Page.prototype.appendToElement = function (e) {\n this.parent.element.appendChild(this.element);\n this.parent.setGridPager(this.element);\n this.pagerObj.appendTo(this.element);\n };\n Page.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.render();\n this.appendToElement();\n }\n };\n /**\n * @hidden\n */\n Page.prototype.addEventListener = function () {\n this.handlers = {\n load: this.render,\n end: this.appendToElement,\n ready: this.dataReady,\n complete: this.onActionComplete,\n updateLayout: this.enableAfterRender,\n inboundChange: this.onPropertyChanged,\n keyPress: this.keyPressHandler\n };\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialLoad, this.handlers.load, this);\n this.parent.on(events.initialEnd, this.handlers.end, this); //For initial rendering\n this.parent.on(events.dataReady, this.handlers.ready, this);\n this.parent.on(events.pageComplete, this.handlers.complete, this);\n this.parent.on(events.uiUpdate, this.handlers.updateLayout, this);\n this.parent.on(events.inBoundModelChanged, this.handlers.inboundChange, this);\n this.parent.on(events.keyPressed, this.handlers.keyPress, this);\n };\n /**\n * @hidden\n */\n Page.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialLoad, this.handlers.load);\n this.parent.off(events.initialEnd, this.handlers.end); //For initial rendering\n this.parent.off(events.dataReady, this.handlers.ready);\n this.parent.off(events.pageComplete, this.handlers.complete);\n this.parent.off(events.uiUpdate, this.handlers.updateLayout);\n this.parent.off(events.inBoundModelChanged, this.handlers.inboundChange);\n this.parent.off(events.keyPressed, this.handlers.keyPress);\n };\n /**\n * To destroy the pager\n * @return {void}\n * @hidden\n */\n Page.prototype.destroy = function () {\n this.removeEventListener();\n this.pagerDestroy();\n };\n Page.prototype.pagerDestroy = function () {\n if (this.pagerObj && !this.pagerObj.isDestroyed) {\n this.pagerObj.destroy();\n remove(this.element);\n }\n };\n return Page;\n}());\nexport { Page };\n/**\n * @hidden\n */\nvar keyActions = {\n pageUp: '.e-prev',\n pageDown: '.e-next',\n ctrlAltPageDown: '.e-last',\n ctrlAltPageUp: '.e-first',\n altPageUp: '.e-pp',\n altPageDown: '.e-np'\n};\n","import { EventHandler, closest } from '@syncfusion/ej2-base';\nimport { extend, getValue } from '@syncfusion/ej2-base';\nimport { remove, createElement } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setValue } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { EditRender } from '../renderer/edit-renderer';\nimport { BooleanEditCell } from '../renderer/boolean-edit-cell';\nimport { DropDownEditCell } from '../renderer/dropdown-edit-cell';\nimport { NumericEditCell } from '../renderer/numeric-edit-cell';\nimport { DefaultEditCell } from '../renderer/default-edit-cell';\nimport { InlineEdit } from './inline-edit';\nimport { BatchEdit } from './batch-edit';\nimport { DialogEdit } from './dialog-edit';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { parentsUntil, changeButtonType } from '../base/util';\nimport { FormValidator } from '@syncfusion/ej2-inputs';\nimport { DatePickerEditCell } from '../renderer/datepicker-edit-cell';\nimport { calculateRelativeBasedPosition } from '@syncfusion/ej2-popups';\n/**\n * The `Edit` module is used to handle editing actions.\n */\nvar Edit = /** @class */ (function () {\n /**\n * Constructor for the Grid editing module\n * @hidden\n */\n function Edit(parent, serviceLocator) {\n this.editCellType = {\n 'dropdownedit': DropDownEditCell, 'numericedit': NumericEditCell,\n 'datepickeredit': DatePickerEditCell, 'booleanedit': BooleanEditCell, 'defaultedit': DefaultEditCell\n };\n this.editType = { 'Inline': InlineEdit, 'Normal': InlineEdit, 'Batch': BatchEdit, 'Dialog': DialogEdit };\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.l10n = this.serviceLocator.getService('localization');\n this.addEventListener();\n this.updateEditObj();\n this.createAlertDlg();\n this.createConfirmDlg();\n }\n Edit.prototype.updateColTypeObj = function () {\n for (var _i = 0, _a = this.parent.getColumns(); _i < _a.length; _i++) {\n var col = _a[_i];\n col.edit = extend(new this.editCellType[col.editType && this.editCellType[col.editType] ?\n col.editType : 'defaultedit'](this.parent, this.serviceLocator), col.edit || {});\n }\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Edit.prototype.getModuleName = function () {\n return 'edit';\n };\n /**\n * @hidden\n */\n Edit.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n var gObj = this.parent;\n var newProp = e.properties;\n for (var _i = 0, _a = Object.keys(e.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowAdding':\n case 'allowDeleting':\n case 'allowEditing':\n if (gObj.editSettings.allowAdding || gObj.editSettings.allowEditing || gObj.editSettings.allowDeleting) {\n this.initialEnd();\n }\n break;\n case 'mode':\n this.updateEditObj();\n gObj.isEdit = false;\n gObj.refresh();\n break;\n }\n }\n };\n Edit.prototype.updateEditObj = function () {\n if (this.editModule) {\n this.editModule.destroy();\n }\n this.renderer = new EditRender(this.parent, this.serviceLocator);\n this.editModule = new this.editType[this.parent.editSettings.mode](this.parent, this.serviceLocator, this.renderer);\n };\n Edit.prototype.initialEnd = function () {\n this.updateColTypeObj();\n };\n Edit.prototype.wireEvents = function () {\n EventHandler.add(this.parent.getContent(), 'touchstart', this.tapEvent, this);\n };\n Edit.prototype.unwireEvents = function () {\n EventHandler.remove(this.parent.getContent(), 'touchstart', this.tapEvent);\n };\n Edit.prototype.tapEvent = function (e) {\n if (this.getUserAgent()) {\n if (!Global.timer) {\n Global.timer = setTimeout(function () {\n Global.timer = null;\n }, 300);\n }\n else {\n clearTimeout(Global.timer);\n Global.timer = null;\n this.parent.notify(events.doubleTap, e);\n }\n }\n };\n Edit.prototype.getUserAgent = function () {\n var userAgent = window.navigator.userAgent.toLowerCase();\n return /iphone|ipod|ipad/.test(userAgent);\n };\n /**\n * Edits any bound record in the Grid by TR element.\n * @param {HTMLTableRowElement} tr - Defines the table row to be edited.\n */\n Edit.prototype.startEdit = function (tr) {\n var gObj = this.parent;\n if (!gObj.editSettings.allowEditing || gObj.isEdit || gObj.editSettings.mode === 'Batch') {\n return;\n }\n if (!gObj.getSelectedRows().length) {\n if (!tr) {\n this.showDialog('EditOperationAlert', this.alertDObj);\n return;\n }\n }\n else if (!tr) {\n tr = gObj.getSelectedRows()[0];\n }\n if (tr.style.display === 'none') {\n return;\n }\n this.editModule.startEdit(tr);\n this.refreshToolbar();\n gObj.element.querySelector('.e-gridpopup').style.display = 'none';\n this.parent.notify('start-edit', {});\n };\n /**\n * Cancels edited state.\n */\n Edit.prototype.closeEdit = function () {\n if (this.parent.editSettings.mode === 'Batch' && this.parent.editSettings.showConfirmDialog\n && this.parent.element.querySelectorAll('.e-updatedtd').length) {\n this.showDialog('CancelEdit', this.dialogObj);\n return;\n }\n this.editModule.closeEdit();\n this.refreshToolbar();\n this.parent.notify('close-edit', {});\n };\n Edit.prototype.refreshToolbar = function () {\n this.parent.notify(events.toolbarRefresh, {});\n };\n /**\n * To adds a new row at the top with the given data. When data is not passed, it will add empty rows.\n * > `editSettings.allowEditing` should be true.\n * @param {Object} data - Defines the new add record data.\n * @param {number} index - Defines the row index to be added\n */\n Edit.prototype.addRecord = function (data, index) {\n if (!this.parent.editSettings.allowAdding) {\n return;\n }\n this.editModule.addRecord(data, index);\n this.refreshToolbar();\n this.parent.notify('start-add', {});\n };\n /**\n * Deletes a record with the given options. If fieldname and data are not given, the Grid will delete the selected record.\n * > `editSettings.allowDeleting` should be true.\n * @param {string} fieldname - Defines the primary key field name of the column.\n * @param {Object} data - Defines the JSON data record to be deleted.\n */\n Edit.prototype.deleteRecord = function (fieldname, data) {\n var gObj = this.parent;\n if (!gObj.editSettings.allowDeleting) {\n return;\n }\n if (!data) {\n if (isNullOrUndefined(gObj.selectedRowIndex) || gObj.selectedRowIndex === -1) {\n this.showDialog('DeleteOperationAlert', this.alertDObj);\n return;\n }\n }\n if (gObj.editSettings.showDeleteConfirmDialog) {\n this.showDialog('ConfirmDelete', this.dialogObj);\n return;\n }\n this.editModule.deleteRecord(fieldname, data);\n };\n /**\n * Deletes a visible row by TR element.\n * @param {HTMLTableRowElement} tr - Defines the table row element.\n */\n Edit.prototype.deleteRow = function (tr) {\n this.deleteRecord(null, this.parent.getCurrentViewRecords()[parseInt(tr.getAttribute('aria-rowindex'), 10)]);\n };\n /**\n * If Grid is in editable state, you can save a record by invoking endEdit.\n */\n Edit.prototype.endEdit = function () {\n if (this.parent.editSettings.mode === 'Batch' && this.parent.editSettings.showConfirmDialog &&\n (isNullOrUndefined(this.formObj) || this.formObj.validate())) {\n this.showDialog('BatchSaveConfirm', this.dialogObj);\n return;\n }\n this.endEditing();\n };\n /**\n * To update the specified cell by given value without changing into edited state.\n * @param {number} rowIndex Defines the row index.\n * @param {string} field Defines the column field.\n * @param {string | number | boolean | Date} value - Defines the value to be changed.\n */\n Edit.prototype.updateCell = function (rowIndex, field, value) {\n this.editModule.updateCell(rowIndex, field, value);\n };\n /**\n * To update the specified row by given values without changing into edited state.\n * @param {number} index Defines the row index.\n * @param {Object} data Defines the data object to be updated.\n */\n Edit.prototype.updateRow = function (index, data) {\n this.editModule.updateRow(index, data);\n };\n /**\n * Resets added, edited, and deleted records in the batch mode.\n */\n Edit.prototype.batchCancel = function () {\n this.closeEdit();\n };\n /**\n * Bulk saves added, edited, and deleted records in the batch mode.\n */\n Edit.prototype.batchSave = function () {\n this.endEdit();\n };\n /**\n * Changes a particular cell into edited state based on the row index and field name provided in the `batch` mode.\n * @param {number} index - Defines row index to edit a particular cell.\n * @param {string} field - Defines the field name of the column to perform batch edit.\n */\n Edit.prototype.editCell = function (index, field) {\n this.editModule.editCell(index, field);\n };\n /**\n * Checks the status of validation at the time of editing. If validation is passed, it returns true.\n * @return {boolean}\n */\n Edit.prototype.editFormValidate = function () {\n if (this.formObj) {\n return this.formObj.validate();\n }\n return false;\n };\n /**\n * Gets the added, edited,and deleted data before bulk save to the DataSource in batch mode.\n * @return {Object}\n */\n Edit.prototype.getBatchChanges = function () {\n return this.editModule.getBatchChanges ? this.editModule.getBatchChanges() : {};\n };\n /**\n * Gets the current value of the edited component.\n */\n Edit.prototype.getCurrentEditCellData = function () {\n var obj = this.getCurrentEditedData(this.formObj.element, {});\n return obj[Object.keys(obj)[0]];\n };\n /**\n * Saves the cell that is currently edited. It does not save the value to the DataSource.\n */\n Edit.prototype.saveCell = function () {\n this.editModule.saveCell();\n };\n Edit.prototype.endEditing = function () {\n this.editModule.endEdit();\n this.refreshToolbar();\n };\n Edit.prototype.showDialog = function (content, obj) {\n obj.content = '
    ' + this.l10n.getConstant(content) + '
    ';\n obj.dataBind();\n obj.show();\n };\n Edit.prototype.getValueFromType = function (col, value) {\n var val = value;\n switch (col.type) {\n case 'number':\n val = !isNaN(parseFloat(value)) ? parseFloat(value) : null;\n break;\n case 'boolean':\n if (col.editType !== 'booleanedit') {\n val = value === this.l10n.getConstant('True') ? true : false;\n }\n break;\n case 'date':\n case 'datetime':\n if (col.editType !== 'datepicker' && value && value.length) {\n val = new Date(value);\n }\n break;\n }\n return val;\n };\n Edit.prototype.destroyToolTip = function () {\n var elements = [].slice.call(this.parent.element.querySelectorAll('.e-griderror'));\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var elem = elements_1[_i];\n remove(elem);\n }\n this.parent.getContent().firstElementChild.style.position = 'relative';\n };\n Edit.prototype.createConfirmDlg = function () {\n this.dialogObj = this.dlgWidget([\n {\n click: this.dlgOk.bind(this),\n buttonModel: { content: this.l10n.getConstant('OKButton'), cssClass: 'e-primary', isPrimary: true }\n },\n {\n click: this.dlgCancel.bind(this),\n buttonModel: { cssClass: 'e-flat', content: this.l10n.getConstant('CancelButton') }\n }\n ], 'EditConfirm');\n };\n Edit.prototype.createAlertDlg = function () {\n this.alertDObj = this.dlgWidget([\n {\n click: this.alertClick.bind(this), buttonModel: { content: this.l10n.getConstant('OKButton'), cssClass: 'e-flat', isPrimary: true }\n }\n ], 'EditAlert');\n };\n Edit.prototype.alertClick = function () {\n this.alertDObj.hide();\n };\n Edit.prototype.dlgWidget = function (btnOptions, name) {\n var div = createElement('div', { id: this.parent.element.id + name });\n this.parent.element.appendChild(div);\n var options = {\n showCloseIcon: false,\n isModal: true,\n visible: false,\n closeOnEscape: true,\n target: this.parent.element,\n width: '320px',\n animationSettings: { effect: 'None' }\n };\n options.buttons = btnOptions;\n var obj = new Dialog(options);\n obj.appendTo(div);\n changeButtonType(obj.element);\n return obj;\n };\n Edit.prototype.dlgCancel = function () {\n this.dialogObj.hide();\n };\n Edit.prototype.dlgOk = function (e) {\n switch (this.dialogObj.element.querySelector('.e-dlg-content').firstElementChild.innerText) {\n case this.l10n.getConstant('ConfirmDelete'):\n this.editModule.deleteRecord();\n break;\n case this.l10n.getConstant('CancelEdit'):\n this.editModule.closeEdit();\n break;\n case this.l10n.getConstant('BatchSaveConfirm'):\n this.endEditing();\n break;\n case this.l10n.getConstant('BatchSaveLostChanges'):\n this.executeAction();\n break;\n }\n this.dlgCancel();\n };\n /**\n * @hidden\n */\n Edit.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.initialEnd, this.initialEnd, this);\n this.parent.on(events.keyPressed, this.keyPressHandler, this);\n this.parent.on(events.autoCol, this.updateColTypeObj, this);\n this.parent.on(events.tooltipDestroy, this.destroyToolTip, this);\n this.parent.on(events.preventBatch, this.preventBatch, this);\n this.parent.on(events.destroyForm, this.destroyForm, this);\n this.actionBeginFunction = this.onActionBegin.bind(this);\n this.actionCompleteFunction = this.actionComplete.bind(this);\n this.parent.addEventListener(events.actionBegin, this.actionBeginFunction);\n this.parent.addEventListener(events.actionComplete, this.actionCompleteFunction);\n this.parent.on(events.initialEnd, this.wireEvents, this);\n };\n /**\n * @hidden\n */\n Edit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.initialEnd, this.initialEnd);\n this.parent.off(events.keyPressed, this.keyPressHandler);\n this.parent.off(events.autoCol, this.updateColTypeObj);\n this.parent.off(events.tooltipDestroy, this.destroyToolTip);\n this.parent.off(events.preventBatch, this.preventBatch);\n this.parent.off(events.destroyForm, this.destroyForm);\n this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunction);\n this.parent.removeEventListener(events.actionBegin, this.actionBeginFunction);\n this.parent.off(events.initialEnd, this.unwireEvents);\n };\n Edit.prototype.actionComplete = function (e) {\n var actions = ['add', 'beginEdit', 'save', 'delete', 'cancel'];\n if (actions.indexOf(e.requestType) < 0) {\n this.parent.isEdit = false;\n }\n this.refreshToolbar();\n };\n /**\n * @hidden\n */\n Edit.prototype.getCurrentEditedData = function (form, editedData) {\n var gObj = this.parent;\n var inputs = [].slice.call(form.querySelectorAll('.e-field'));\n for (var i = 0, len = inputs.length; i < len; i++) {\n var col = gObj.getColumnByUid(inputs[i].getAttribute('e-mappinguid'));\n var value = void 0;\n if (col && col.field) {\n var temp = col.edit.read;\n if (col.type !== 'checkbox') {\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n value = gObj.editModule.getValueFromType(col, (temp)(inputs[i]));\n }\n else {\n value = gObj.editModule.getValueFromType(col, col.edit.read(inputs[i]));\n }\n }\n else {\n value = inputs[i].checked;\n }\n setValue(col.field, value, editedData);\n }\n }\n return editedData;\n };\n /**\n * @hidden\n */\n Edit.prototype.onActionBegin = function (e) {\n var restrictedRequestTypes = ['filterafteropen', 'filterbeforeopen', 'filterchoicerequest', 'save'];\n if (this.parent.editSettings.mode !== 'Batch' && this.formObj && !this.formObj.isDestroyed\n && restrictedRequestTypes.indexOf(e.requestType) === -1) {\n this.destroyForm();\n this.destroyWidgets();\n }\n };\n /**\n * @hidden\n */\n Edit.prototype.destroyWidgets = function (cols) {\n cols = cols ? cols : this.parent.getColumns();\n for (var _i = 0, cols_1 = cols; _i < cols_1.length; _i++) {\n var col = cols_1[_i];\n var temp = col.edit.destroy;\n if (col.edit.destroy) {\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n temp();\n }\n else {\n col.edit.destroy();\n }\n }\n }\n };\n /**\n * @hidden\n */\n Edit.prototype.destroyForm = function () {\n this.destroyToolTip();\n if (this.formObj && !this.formObj.isDestroyed) {\n this.formObj.destroy();\n }\n this.destroyToolTip();\n };\n /**\n * To destroy the editing.\n * @return {void}\n * @hidden\n */\n Edit.prototype.destroy = function () {\n this.destroyForm();\n this.removeEventListener();\n var elem = this.dialogObj.element;\n this.dialogObj.destroy();\n remove(elem);\n elem = this.alertDObj.element;\n this.alertDObj.destroy();\n remove(elem);\n this.unwireEvents();\n if (this.editModule) {\n this.editModule.destroy();\n }\n };\n Edit.prototype.keyPressHandler = function (e) {\n switch (e.action) {\n case 'insert':\n this.addRecord();\n break;\n case 'delete':\n if (e.target.tagName !== 'INPUT' && !document.querySelector('.e-popup-open')) {\n this.deleteRecord();\n }\n break;\n case 'f2':\n this.startEdit();\n break;\n case 'enter':\n if (!parentsUntil(e.target, '.e-unboundcelldiv') && this.parent.editSettings.mode !== 'Batch' &&\n (parentsUntil(e.target, 'e-gridcontent') || (this.parent.frozenRows\n && parentsUntil(e.target, 'e-headercontent')))\n && !document.querySelectorAll('.e-popup-open').length) {\n e.preventDefault();\n this.endEdit();\n }\n break;\n case 'escape':\n this.closeEdit();\n break;\n }\n };\n Edit.prototype.preventBatch = function (args) {\n this.preventObj = args;\n this.showDialog('BatchSaveLostChanges', this.dialogObj);\n };\n Edit.prototype.executeAction = function () {\n this.preventObj.handler.call(this.preventObj.instance, this.preventObj.arg1, this.preventObj.arg2, this.preventObj.arg3, this.preventObj.arg4, this.preventObj.arg5, this.preventObj.arg6, this.preventObj.arg7);\n };\n /**\n * @hidden\n */\n Edit.prototype.applyFormValidation = function (cols) {\n var gObj = this.parent;\n var frzCols = gObj.getFrozenColumns();\n var form = gObj.element.querySelector('.e-gridform');\n var mForm = gObj.element.querySelectorAll('.e-gridform')[1];\n var rules = {};\n var mRules = {};\n cols = cols ? cols : gObj.columns;\n for (var _i = 0, cols_2 = cols; _i < cols_2.length; _i++) {\n var col = cols_2[_i];\n if (col.validationRules && form.querySelectorAll('#' + gObj.element.id + col.field).length) {\n rules[col.field] = col.validationRules;\n }\n else if (frzCols && col.validationRules\n && mForm.querySelectorAll('#' + gObj.element.id + col.field).length) {\n mRules[col.field] = col.validationRules;\n }\n }\n this.parent.editModule.formObj = this.createFormObj(form, rules);\n if (frzCols && this.parent.editSettings.mode !== 'Dialog') {\n this.parent.editModule.mFormObj = this.createFormObj(mForm, mRules);\n }\n };\n Edit.prototype.createFormObj = function (form, rules) {\n var _this = this;\n return new FormValidator(form, {\n rules: rules,\n validationComplete: function (args) {\n _this.validationComplete(args);\n },\n customPlacement: function (inputElement, error) {\n _this.valErrorPlacement(inputElement, error);\n }\n });\n };\n Edit.prototype.valErrorPlacement = function (inputElement, error) {\n if (this.parent.isEdit) {\n var id = error.getAttribute('for');\n var elem = this.getElemTable(inputElement).querySelector('#' + id + '_Error');\n if (!elem) {\n this.createTooltip(inputElement, error, id, '');\n }\n else {\n elem.querySelector('.e-tip-content').innerHTML = error.innerHTML;\n }\n }\n };\n Edit.prototype.getElemTable = function (inputElement) {\n var isFHdr;\n if (this.parent.editSettings.mode !== 'Dialog') {\n isFHdr = (this.parent.frozenRows && this.parent.frozenRows\n > (parseInt(closest(inputElement, '.e-row').getAttribute('aria-rowindex'), 10) || 0));\n }\n return this.parent.editSettings.mode !== 'Dialog' ? isFHdr ? this.parent.getHeaderTable() : this.parent.getContentTable() :\n this.parent.element.querySelector('#' + this.parent.element.id + '_dialogEdit_wrapper');\n };\n Edit.prototype.validationComplete = function (args) {\n if (this.parent.isEdit) {\n var elem = this.getElemTable(args.element).querySelector('#' + args.inputName + '_Error');\n if (elem) {\n if (args.status === 'failure') {\n elem.style.display = '';\n }\n else {\n elem.style.display = 'none';\n }\n }\n }\n };\n Edit.prototype.createTooltip = function (element, error, name, display) {\n var gcontent = this.parent.getContent().firstElementChild;\n var isScroll = gcontent.scrollHeight > gcontent.clientHeight;\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n var isFHdr;\n if (isInline) {\n isFHdr = (this.parent.frozenRows && this.parent.frozenRows\n > (parseInt(closest(element, '.e-row').getAttribute('aria-rowindex'), 10) || 0));\n }\n var fCont = this.parent.getContent().querySelector('.e-frozencontent');\n var table = isInline ?\n (isFHdr ? this.parent.getHeaderTable() : this.parent.getContentTable()) :\n this.parent.element.querySelector('#' + this.parent.element.id + '_dialogEdit_wrapper').querySelector('.e-dlg-content');\n var client = table.getBoundingClientRect();\n var left = isInline ?\n this.parent.element.getBoundingClientRect().left : client.left;\n var input = parentsUntil(element, 'e-rowcell');\n var inputClient = input.getBoundingClientRect();\n var td = closest(element, 'td').getBoundingClientRect();\n var div = createElement('div', {\n className: 'e-tooltip-wrap e-control e-popup e-griderror',\n id: name + '_Error',\n styles: 'display:' + display + ';top:' +\n ((isFHdr ? inputClient.top + inputClient.height : inputClient.bottom - client.top\n - (this.parent.getFrozenColumns() ? fCont.scrollTop : 0)) + table.scrollTop + 9) + 'px;left:' +\n (inputClient.left - left + table.scrollLeft + inputClient.width / 2) + 'px;' +\n 'max-width:' + td.width + 'px;text-align:center;'\n });\n var content = createElement('div', { className: 'e-tip-content' });\n content.appendChild(error);\n var arrow = createElement('div', { className: 'e-arrow-tip e-tip-top' });\n arrow.appendChild(createElement('div', { className: 'e-arrow-tip-outer e-tip-top' }));\n arrow.appendChild(createElement('div', { className: 'e-arrow-tip-inner e-tip-top' }));\n div.appendChild(content);\n div.appendChild(arrow);\n table.appendChild(div);\n var lineHeight = parseInt(document.defaultView.getComputedStyle(div, null).getPropertyValue('font-size'), 10);\n if (div.getBoundingClientRect().width < td.width &&\n div.querySelector('label').getBoundingClientRect().height / (lineHeight * 1.2) >= 2) {\n div.style.width = div.style.maxWidth;\n }\n div.style.left = (parseInt(div.style.left, 10) - div.offsetWidth / 2) + 'px';\n if (!isScroll && isInline && !this.parent.allowPaging) {\n gcontent.style.position = 'static';\n var pos = calculateRelativeBasedPosition(input, div);\n div.style.top = pos.top + inputClient.height + 9 + 'px';\n }\n };\n return Edit;\n}());\nexport { Edit };\n/** @hidden */\nexport var Global;\n(function (Global) {\n Global.timer = null;\n})(Global || (Global = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { createElement, attributes } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\nimport { Input } from '@syncfusion/ej2-inputs';\n/**\n * FilterCellRenderer class which responsible for building filter cell.\n * @hidden\n */\nvar FilterCellRenderer = /** @class */ (function (_super) {\n __extends(FilterCellRenderer, _super);\n function FilterCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = createElement('TH', { className: 'e-filterbarcell' });\n return _this;\n }\n /**\n * Function to return the wrapper for the TH content.\n * @returns string\n */\n FilterCellRenderer.prototype.getGui = function () {\n return createElement('div');\n };\n /**\n * Function to render the cell content based on Column object.\n * @param {Cell} cell\n * @param {Object} data\n */\n FilterCellRenderer.prototype.render = function (cell, data) {\n var tr = this.parent.element.querySelector('.e-filterbar');\n var node = this.element.cloneNode();\n var innerDIV = this.getGui();\n var input;\n var column = cell.column;\n tr.appendChild(node);\n if (column.type !== 'checkbox') {\n if ((isNullOrUndefined(column.allowFiltering) || column.allowFiltering) && !isNullOrUndefined(column.filterBarTemplate)) {\n node.classList.add('e-fltrtemp');\n attributes(innerDIV, {\n 'class': 'e-fltrtempdiv'\n });\n if (isNullOrUndefined(column.filterBarTemplate.create)) {\n input = createElement('input', {\n id: column.field + '_filterBarcell', className: 'e-filterUi_input e-filtertext e-fltrTemp',\n attrs: { type: 'search', title: column.headerText }\n });\n innerDIV.appendChild(input);\n }\n else {\n var args = { column: column, node: Element };\n var temp = column.filterBarTemplate.create;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n }\n input = temp(args);\n if (typeof input === 'string') {\n var div = createElement('div');\n div.innerHTML = input;\n input = div.firstChild;\n }\n attributes(innerDIV, {\n class: 'e-filterUi_input e-filtertext e-fltrTemp',\n title: column.headerText,\n id: column.field + '_filterBarcell',\n });\n innerDIV.appendChild(input);\n }\n }\n else {\n attributes(innerDIV, {\n 'class': 'e-filterdiv e-fltrinputdiv'\n });\n input = createElement('input', {\n id: column.field + '_filterBarcell', className: 'e-filtertext',\n attrs: {\n type: 'search', title: column.headerText + cell.attributes.title,\n value: data[cell.column.field] ? data[cell.column.field] : '', role: 'search'\n }\n });\n innerDIV.appendChild(input);\n Input.createInput({\n element: input, floatLabelType: 'Never',\n properties: {\n enableRtl: this.parent.enableRtl, showClearButton: true\n }\n });\n }\n //TODO: apply intial filtering\n if (column.allowFiltering === false || column.field === '' || isNullOrUndefined(column.field)) {\n input.setAttribute('disabled', 'true');\n input.classList.add('e-disable');\n }\n if (!column.visible) {\n node.classList.add('e-hide');\n }\n this.appendHtml(node, innerDIV);\n if ((isNullOrUndefined(column.allowFiltering) || column.allowFiltering) && !isNullOrUndefined(column.filterBarTemplate)) {\n var templateWrite = column.filterBarTemplate.write;\n var args = { element: input, column: column };\n if (typeof templateWrite === 'string') {\n templateWrite = getValue(templateWrite, window);\n }\n templateWrite.call(this, args);\n }\n }\n return node;\n };\n /**\n * Function to specifies how the result content to be placed in the cell.\n * @param {Element} node\n * @param {string|Element} innerHTML\n * @returns Element\n */\n FilterCellRenderer.prototype.appendHtml = function (node, innerHtml) {\n node.appendChild(innerHtml);\n return node;\n };\n return FilterCellRenderer;\n}(CellRenderer));\nexport { FilterCellRenderer };\n","import { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { createElement } from '@syncfusion/ej2-base';\nimport { Query, DataManager } from '@syncfusion/ej2-data';\n/**\n * `filter operators` render boolean column.\n * @hidden\n */\nvar FlMenuOptrUI = /** @class */ (function () {\n function FlMenuOptrUI(parent, customFltrOperators, serviceLocator, filterSettings) {\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.filterSettings = filterSettings;\n this.customFilterOperators = customFltrOperators;\n }\n /**\n * @hidden\n */\n FlMenuOptrUI.prototype.renderOperatorUI = function (dlgConetntEle, target, column, dlgObj) {\n this.dialogObj = dlgObj;\n var optr = column.type + 'Operator';\n this.optrData = this.customOptr = (!isNullOrUndefined(this.parent.filterSettings.operators) &&\n !isNullOrUndefined(this.parent.filterSettings.operators[optr])) ?\n this.parent.filterSettings.operators[optr] : this.customFilterOperators[optr];\n var dropDatasource = this.customOptr;\n var selectedValue = this.dropSelectedVal(column, optr);\n var optrDiv = createElement('div', { className: 'e-flm_optrdiv' });\n dlgConetntEle.appendChild(optrDiv);\n var optrInput = createElement('input', { id: column.uid + '-floptr' });\n optrDiv.appendChild(optrInput);\n this.dropOptr = new DropDownList({\n dataSource: dropDatasource,\n fields: { text: 'text', value: 'value' },\n open: this.dropDownOpen.bind(this),\n text: selectedValue\n });\n this.dropOptr.appendTo('#' + column.uid + '-floptr');\n };\n FlMenuOptrUI.prototype.dropDownOpen = function (args) {\n args.popup.element.style.zIndex = (this.dialogObj.zIndex + 1).toString();\n };\n FlMenuOptrUI.prototype.dropSelectedVal = function (col, optr) {\n var selValue = '';\n var columns = this.parent.filterSettings.columns;\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var column = columns_1[_i];\n if (col.field === column.field) {\n var selectedField = new DataManager(this.optrData).executeLocal(new Query().where('value', 'equal', column.operator));\n selValue = !isNullOrUndefined(selectedField[0]) ? selectedField[0].text : '';\n }\n }\n if (selValue === '') {\n selValue = this.optrData[0].text;\n }\n return selValue;\n };\n /**\n * @hidden\n */\n FlMenuOptrUI.prototype.getFlOperator = function () {\n return this.dropOptr.value;\n };\n return FlMenuOptrUI;\n}());\nexport { FlMenuOptrUI };\n","import { AutoComplete } from '@syncfusion/ej2-dropdowns';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { createElement, Browser, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getZIndexCalcualtion } from '../base/util';\n/**\n * `string filterui` render string column.\n * @hidden\n */\nvar StringFilterUI = /** @class */ (function () {\n function StringFilterUI(parent, serviceLocator, filterSettings) {\n this.parent = parent;\n this.serLocator = serviceLocator;\n this.filterSettings = filterSettings;\n }\n StringFilterUI.prototype.create = function (args) {\n var data;\n var floptr;\n this.instance = createElement('input', { className: 'e-flmenu-input', id: 'strui-' + args.column.uid });\n args.target.appendChild(this.instance);\n this.dialogObj = args.dialogObj;\n this.actObj = new AutoComplete(this.getAutoCompleteOptions(args));\n this.actObj.appendTo(this.instance);\n };\n StringFilterUI.prototype.getAutoCompleteOptions = function (args) {\n var _this = this;\n var isForeignColumn = args.column.isForeignColumn();\n var dataSource = isForeignColumn ? args.column.dataSource : this.parent.dataSource;\n var fields = { value: isForeignColumn ? args.column.foreignKeyValue : args.column.field };\n return {\n dataSource: dataSource instanceof DataManager ? dataSource : new DataManager(dataSource),\n fields: fields,\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n sortOrder: 'Ascending',\n open: this.openPopup.bind(this),\n cssClass: 'e-popup-flmenu',\n focus: function () {\n _this.actObj.filterType = args.getOptrInstance.getFlOperator();\n },\n autofill: true,\n placeholder: args.localizeText.getConstant('EnterValue'),\n actionComplete: function (e) {\n e.result = e.result.filter(function (obj, index, arr) {\n return arr.map(function (mapObj) {\n return mapObj[_this.actObj.fields.value];\n }).indexOf(obj[_this.actObj.fields.value]) === index;\n });\n }\n };\n };\n StringFilterUI.prototype.write = function (args) {\n var columns = this.filterSettings.columns;\n if (args.filteredValue !== '' && !isNullOrUndefined(args.filteredValue)) {\n var struiObj = document.querySelector('#strui-' + args.column.uid).ej2_instances[0];\n struiObj.value = args.filteredValue;\n }\n };\n StringFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n var actuiObj = document.querySelector('#strui-' + column.uid).ej2_instances[0];\n if (Browser.isDevice) {\n actuiObj.hidePopup();\n actuiObj.focusOut();\n }\n var filterValue = actuiObj.value;\n if (isNullOrUndefined(filterValue) || filterValue === '') {\n filterValue = null;\n }\n filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', false);\n };\n StringFilterUI.prototype.openPopup = function (args) {\n getZIndexCalcualtion(args, this.dialogObj);\n };\n return StringFilterUI;\n}());\nexport { StringFilterUI };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { createElement } from '@syncfusion/ej2-base';\n/**\n * `numberfilterui` render number column.\n * @hidden\n */\nvar NumberFilterUI = /** @class */ (function () {\n function NumberFilterUI(parent, serviceLocator, filterSettings) {\n this.filterSettings = filterSettings;\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n }\n NumberFilterUI.prototype.create = function (args) {\n this.instance = createElement('input', { className: 'e-flmenu-input', id: 'numberui-' + args.column.uid });\n args.target.appendChild(this.instance);\n this.numericTxtObj = new NumericTextBox({\n format: args.column.format,\n locale: this.parent.locale,\n cssClass: 'e-popup-flmenu',\n placeholder: args.localizeText.getConstant('EnterValue'),\n enableRtl: this.parent.enableRtl,\n });\n this.numericTxtObj.appendTo(this.instance);\n };\n NumberFilterUI.prototype.write = function (args) {\n var numberuiObj = document.querySelector('#numberui-' + args.column.uid).ej2_instances[0];\n numberuiObj.value = args.filteredValue;\n };\n NumberFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n var numberuiObj = document.querySelector('#numberui-' + column.uid).ej2_instances[0];\n var filterValue = numberuiObj.value;\n filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', true);\n };\n return NumberFilterUI;\n}());\nexport { NumberFilterUI };\n","import { getZIndexCalcualtion } from '../base/util';\nimport { Query, DataManager, DataUtil } from '@syncfusion/ej2-data';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * `boolfilterui` render boolean column.\n * @hidden\n */\nvar BooleanFilterUI = /** @class */ (function () {\n function BooleanFilterUI(parent, serviceLocator, filterSettings) {\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.filterSettings = filterSettings;\n }\n BooleanFilterUI.prototype.create = function (args) {\n var isForeignColumn = args.column.isForeignColumn();\n var dataSource = isForeignColumn ? args.column.dataSource : this.parent.dataSource;\n var fields = isForeignColumn ? args.column.foreignKeyValue : args.column.field;\n this.elem = createElement('input', { className: 'e-flmenu-input', id: 'bool-ui-' + args.column.uid });\n args.target.appendChild(this.elem);\n this.dialogObj = args.dialogObj;\n this.dropInstance = new DropDownList({\n dataSource: dataSource instanceof DataManager ?\n dataSource : new DataManager(dataSource),\n query: new Query().select(fields),\n fields: { text: fields, value: fields },\n placeholder: args.localizeText.getConstant('SelectValue'),\n cssClass: 'e-popup-flmenu',\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n open: this.openPopup.bind(this),\n actionComplete: function (e) {\n e.result = DataUtil.distinct(e.result, fields, true);\n }\n });\n this.dropInstance.appendTo(this.elem);\n };\n BooleanFilterUI.prototype.write = function (args) {\n var drpuiObj = document.querySelector('#bool-ui-' + args.column.uid).ej2_instances[0];\n if (!isNullOrUndefined(args.filteredValue)) {\n drpuiObj.text = args.filteredValue;\n }\n };\n BooleanFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n var drpuiObj = document.querySelector('#bool-ui-' + column.uid).ej2_instances[0];\n var filterValue = drpuiObj.value;\n filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', false);\n };\n BooleanFilterUI.prototype.openPopup = function (args) {\n getZIndexCalcualtion(args, this.dialogObj);\n };\n return BooleanFilterUI;\n}());\nexport { BooleanFilterUI };\n","import { DatePicker } from '@syncfusion/ej2-calendars';\nimport { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Internationalization } from '@syncfusion/ej2-base';\n/**\n * `datefilterui` render date column.\n * @hidden\n */\nvar DateFilterUI = /** @class */ (function () {\n function DateFilterUI(parent, serviceLocator, filterSettings) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.fltrSettings = filterSettings;\n }\n DateFilterUI.prototype.create = function (args) {\n var intl = new Internationalization();\n var colFormat = args.column.format;\n var format = intl.getDatePattern({ type: 'date', skeleton: colFormat }, false);\n this.dialogObj = args.dialogObj;\n this.inputElem = createElement('input', { className: 'e-flmenu-input', id: 'dateui-' + args.column.uid });\n args.target.appendChild(this.inputElem);\n this.datePickerObj = new DatePicker({\n format: format,\n cssClass: 'e-popup-flmenu',\n placeholder: args.localizeText.getConstant('ChooseDate'),\n width: '100%',\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n open: this.openPopup.bind(this),\n });\n this.datePickerObj.appendTo(this.inputElem);\n };\n DateFilterUI.prototype.write = function (args) {\n var columns = this.fltrSettings.columns;\n var dateuiObj = document.querySelector('#dateui-' + args.column.uid).ej2_instances[0];\n dateuiObj.value = !isNullOrUndefined(args.filteredValue) ? new Date(args.filteredValue) : null;\n };\n DateFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n var dateuiObj = document.querySelector('#dateui-' + column.uid).ej2_instances[0];\n var filterValue = dateuiObj.value;\n filterValue = isNullOrUndefined(filterValue) ? null : filterValue;\n filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', true);\n };\n DateFilterUI.prototype.openPopup = function (args) {\n args.popup.element.style.zIndex = (this.dialogObj.zIndex + 1).toString();\n };\n return DateFilterUI;\n}());\nexport { DateFilterUI };\n","import { isNullOrUndefined, getValue, remove } from '@syncfusion/ej2-base';\nimport { createElement, Browser } from '@syncfusion/ej2-base';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { FlMenuOptrUI } from './filter-menu-operator';\nimport { StringFilterUI } from './string-filter-ui';\nimport { NumberFilterUI } from './number-filter-ui';\nimport { BooleanFilterUI } from './boolean-filter-ui';\nimport { DateFilterUI } from './date-filter-ui';\nimport { getFilterMenuPostion, parentsUntil } from '../base/util';\nimport * as events from '../base/constant';\n/**\n * `filter menu` render boolean column.\n * @hidden\n */\nvar FilterMenuRenderer = /** @class */ (function () {\n function FilterMenuRenderer(parent, filterSettings, serviceLocator, customFltrOperators, fltrObj) {\n this.isDialogOpen = false;\n this.colTypes = {\n 'string': StringFilterUI, 'number': NumberFilterUI, 'date': DateFilterUI, 'boolean': BooleanFilterUI, 'datetime': DateFilterUI\n };\n this.parent = parent;\n this.filterSettings = filterSettings;\n this.serviceLocator = serviceLocator;\n this.customFilterOperators = customFltrOperators;\n this.filterObj = fltrObj;\n this.flMuiObj = new FlMenuOptrUI(this.parent, this.customFilterOperators, this.serviceLocator);\n this.l10n = this.serviceLocator.getService('localization');\n }\n FilterMenuRenderer.prototype.openDialog = function (args) {\n this.col = this.parent.getColumnByField(args.field);\n if (isNullOrUndefined(this.col.filter) || (isNullOrUndefined(this.col.filter.type) || this.col.filter.type === 'Menu')) {\n this.renderDlgContent(args.target, this.col);\n }\n };\n FilterMenuRenderer.prototype.closeDialog = function () {\n var elem = document.getElementById(this.dlgObj.element.id);\n if (this.dlgObj && !this.dlgObj.isDestroyed && elem) {\n this.parent.notify(events.filterMenuClose, { field: this.col.field });\n this.isDialogOpen = false;\n this.dlgObj.destroy();\n remove(elem);\n }\n };\n FilterMenuRenderer.prototype.renderDlgContent = function (target, column) {\n var args = {\n requestType: events.filterBeforeOpen, filterModel: this,\n columnName: column.field, columnType: column.type\n };\n this.parent.trigger(events.actionBegin, args);\n var mainDiv = createElement('div', { className: 'e-flmenu-maindiv', id: column.uid + '-flmenu' });\n this.dlgDiv = createElement('div', { className: 'e-flmenu', id: column.uid + '-flmdlg' });\n this.parent.element.appendChild(this.dlgDiv);\n this.dlgObj = new Dialog({\n showCloseIcon: false,\n closeOnEscape: false,\n locale: this.parent.locale,\n visible: false,\n enableRtl: this.parent.enableRtl,\n created: this.dialogCreated.bind(this, target, column),\n position: this.parent.element.classList.contains('e-device') ? { X: 'center', Y: 'center' } : { X: '', Y: '' },\n target: this.parent.element.classList.contains('e-device') ? document.body : this.parent.element,\n buttons: [{\n click: this.filterBtnClick.bind(this, column),\n buttonModel: {\n content: this.l10n.getConstant('FilterButton'), isPrimary: true, cssClass: 'e-flmenu-okbtn'\n }\n },\n {\n click: this.clearBtnClick.bind(this, column),\n buttonModel: { content: this.l10n.getConstant('ClearButton'), cssClass: 'e-flmenu-cancelbtn' }\n }],\n content: mainDiv,\n width: (!isNullOrUndefined(parentsUntil(target, 'e-bigger'))) || this.parent.element.classList.contains('e-device') ? 260 : 250,\n animationSettings: { effect: 'None' },\n cssClass: 'e-filter-popup'\n });\n this.dlgObj.appendTo(this.dlgDiv);\n };\n FilterMenuRenderer.prototype.dialogCreated = function (target, column) {\n if (!Browser.isDevice) {\n getFilterMenuPostion(target, this.dlgObj, this.parent);\n }\n this.renderFilterUI(target, column);\n this.parent.notify(events.filterDialogCreated, {});\n this.dlgObj.element.style.maxHeight = '350px';\n this.dlgObj.show();\n this.writeMethod(column, this.dlgObj.element.querySelector('#' + column.uid + '-flmenu'));\n var args = {\n requestType: events.filterAfterOpen,\n filterModel: this, columnName: column.field, columnType: column.type\n };\n this.isDialogOpen = true;\n this.parent.trigger(events.actionComplete, args);\n };\n FilterMenuRenderer.prototype.renderFilterUI = function (target, col) {\n var dlgConetntEle = this.dlgObj.element.querySelector('.e-flmenu-maindiv');\n this.renderOperatorUI(dlgConetntEle, target, col);\n this.renderFlValueUI(dlgConetntEle, target, col);\n };\n FilterMenuRenderer.prototype.renderOperatorUI = function (dlgConetntEle, target, column) {\n this.flMuiObj.renderOperatorUI(dlgConetntEle, target, column, this.dlgObj);\n };\n FilterMenuRenderer.prototype.renderFlValueUI = function (dlgConetntEle, target, column) {\n var valueDiv = createElement('div', { className: 'e-flmenu-valuediv' });\n dlgConetntEle.appendChild(valueDiv);\n var args = { target: valueDiv, column: column, getOptrInstance: this.flMuiObj, dialogObj: this.dlgObj };\n var instanceofFilterUI = new this.colTypes[column.type](this.parent, this.serviceLocator, this.parent.filterSettings);\n if (!isNullOrUndefined(column.filter) && !isNullOrUndefined(column.filter.ui)\n && !isNullOrUndefined(column.filter.ui.create)) {\n var temp = column.filter.ui.create;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n temp({\n column: column, target: valueDiv,\n getOptrInstance: this.flMuiObj, dialogObj: this.dlgObj\n });\n }\n else {\n column.filter.ui.create({\n column: column, target: valueDiv,\n getOptrInstance: this.flMuiObj, dialogObj: this.dlgObj\n });\n }\n }\n else {\n instanceofFilterUI.create({\n column: column, target: valueDiv,\n getOptrInstance: this.flMuiObj, localizeText: this.l10n, dialogObj: this.dlgObj\n });\n }\n };\n FilterMenuRenderer.prototype.writeMethod = function (col, dlgContentEle) {\n var flValue;\n var target = dlgContentEle.querySelector('.e-flmenu-valinput');\n var instanceofFilterUI = new this.colTypes[col.type](this.parent, this.serviceLocator, this.parent.filterSettings);\n var columns = this.filterSettings.columns;\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var column = columns_1[_i];\n if (col.field === column.field || col.foreignKeyValue === column.field) {\n flValue = column.value;\n }\n }\n if (!isNullOrUndefined(col.filter) && !isNullOrUndefined(col.filter.ui)\n && !isNullOrUndefined(col.filter.ui.write)) {\n var temp = col.filter.ui.write;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n temp({ column: col, target: target, parent: this.parent, filteredValue: flValue });\n }\n else {\n col.filter.ui.write({ column: col, target: target, parent: this.parent, filteredValue: flValue });\n }\n }\n else {\n instanceofFilterUI.write({ column: col, target: target, parent: this.parent, filteredValue: flValue });\n }\n };\n FilterMenuRenderer.prototype.filterBtnClick = function (col) {\n var flValue;\n var flOptrValue;\n var targ = this.dlgObj.element.querySelector('.e-flmenu-valuediv input');\n flOptrValue = this.flMuiObj.getFlOperator();\n var instanceofFilterUI = new this.colTypes[col.type](this.parent, this.serviceLocator, this.parent.filterSettings);\n if (!isNullOrUndefined(col.filter) &&\n !isNullOrUndefined(col.filter.ui) && !isNullOrUndefined(col.filter.ui.read)) {\n var temp = col.filter.ui.read;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n flValue = temp({ element: targ, column: col, operator: flOptrValue, fltrObj: this.filterObj });\n }\n else {\n flValue = col.filter.ui.read({ element: targ, column: col, operator: flOptrValue, fltrObj: this.filterObj });\n }\n }\n else {\n instanceofFilterUI.read(targ, col, flOptrValue, this.filterObj);\n }\n var iconClass = this.parent.showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n var column = this.parent.element.querySelector('[e-mappinguid=\"' + col.uid + '\"]').parentElement;\n var flIcon = column.querySelector(iconClass);\n if (flIcon) {\n flIcon.classList.add('e-filtered');\n }\n this.closeDialog();\n };\n FilterMenuRenderer.prototype.clearBtnClick = function (column) {\n this.filterObj.removeFilteredColsByField(column.field);\n this.closeDialog();\n var iconClass = this.parent.showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n var col = this.parent.element.querySelector('[e-mappinguid=\"' + column.uid + '\"]').parentElement;\n var flIcon = col.querySelector(iconClass);\n if (flIcon) {\n flIcon.classList.remove('e-filtered');\n }\n };\n FilterMenuRenderer.prototype.destroy = function () {\n this.closeDialog();\n };\n return FilterMenuRenderer;\n}());\nexport { FilterMenuRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement, EventHandler, remove, Browser } from '@syncfusion/ej2-base';\nimport { parentsUntil } from '../base/util';\nimport { ContextMenu } from '@syncfusion/ej2-navigations';\nimport { CheckBoxFilter } from '../actions/checkbox-filter';\nimport { isNullOrUndefined, } from '@syncfusion/ej2-base';\nimport { Internationalization } from '@syncfusion/ej2-base';\nimport { Query, DataManager, Predicate } from '@syncfusion/ej2-data';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { DropDownList, AutoComplete } from '@syncfusion/ej2-dropdowns';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { RadioButton, CheckBox } from '@syncfusion/ej2-buttons';\nimport { distinctStringValues } from '../base/util';\nimport { generateQuery } from '../base/constant';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\n/**\n * @hidden\n * `ExcelFilter` module is used to handle filtering action.\n */\nvar ExcelFilter = /** @class */ (function (_super) {\n __extends(ExcelFilter, _super);\n /**\n * Constructor for excel filtering module\n * @hidden\n */\n function ExcelFilter(parent, filterSettings, serviceLocator, customFltrOperators) {\n var _this = _super.call(this, parent, filterSettings, serviceLocator) || this;\n _this.customFilterOperators = customFltrOperators;\n _this.isExcel = true;\n return _this;\n }\n ExcelFilter.prototype.getCMenuDS = function (type, operator) {\n var options = {\n number: ['Equal', 'NotEqual', '', 'LessThan', 'LessThanOrEqual', 'GreaterThan',\n 'GreaterThanOrEqual', 'Between', '', 'CustomFilter'],\n string: ['Equal', 'NotEqual', '', 'StartsWith', 'EndsWith', '', 'Contains', '', 'CustomFilter'],\n };\n options.date = options.number;\n options.datetime = options.number;\n var model = [];\n for (var i = 0; i < options[type].length; i++) {\n if (options[type][i].length) {\n if (operator) {\n model.push({\n text: this.getLocalizedLabel(options[type][i]) + '...',\n iconCss: 'e-icons e-icon-check ' + (operator === options[type][i] ? '' : 'e-emptyicon')\n });\n }\n else {\n model.push({\n text: this.getLocalizedLabel(options[type][i]) + '...'\n });\n }\n }\n else {\n model.push({ separator: true });\n }\n }\n return model;\n };\n /**\n * To destroy the filter bar.\n * @return {void}\n * @hidden\n */\n ExcelFilter.prototype.destroy = function () {\n if (this.dlg) {\n this.unwireExEvents();\n _super.prototype.destroy.call(this);\n }\n if (this.cmenu.parentElement) {\n remove(this.cmenu);\n }\n };\n ExcelFilter.prototype.createMenu = function (type, isFiltered, isCheckIcon) {\n var options = { string: 'TextFilter', date: 'DateFilter', datetime: 'DateFilter', number: 'NumberFilter' };\n this.menu = createElement('div', { className: 'e-contextmenu-wrapper' });\n if (this.parent.enableRtl) {\n this.menu.classList.add('e-rtl');\n }\n else {\n this.menu.classList.remove('e-rtl');\n }\n var ul = createElement('ul');\n var icon = isFiltered ? 'e-excl-filter-icon e-filtered' : 'e-excl-filter-icon';\n ul.appendChild(this.createMenuElem(this.getLocalizedLabel('ClearFilter'), isFiltered ? '' : 'e-disabled', icon));\n if (type !== 'boolean') {\n ul.appendChild(this.createMenuElem(this.getLocalizedLabel(options[type]), 'e-submenu', isCheckIcon && this.ensureTextFilter() ? 'e-icon-check' : icon + ' e-emptyicon', true));\n }\n this.menu.appendChild(ul);\n };\n ExcelFilter.prototype.createMenuElem = function (val, className, iconName, isSubMenu) {\n var li = createElement('li', { className: className + ' e-menu-item' });\n li.innerHTML = val;\n li.insertBefore(createElement('span', { className: 'e-menu-icon e-icons ' + iconName }), li.firstChild);\n if (isSubMenu) {\n li.appendChild(createElement('span', { className: 'e-icons e-caret' }));\n }\n return li;\n };\n ExcelFilter.prototype.wireExEvents = function () {\n EventHandler.add(this.dlg, 'mouseover', this.hoverHandler, this);\n EventHandler.add(this.dlg, 'click', this.clickExHandler, this);\n };\n ExcelFilter.prototype.unwireExEvents = function () {\n EventHandler.remove(this.dlg, 'mouseover', this.hoverHandler);\n EventHandler.remove(this.dlg, 'click', this.clickExHandler);\n };\n ExcelFilter.prototype.clickExHandler = function (e) {\n var menuItem = parentsUntil(e.target, 'e-menu-item');\n if (menuItem && this.getLocalizedLabel('ClearFilter') === menuItem.innerText.trim()) {\n this.clearFilter();\n this.closeDialog();\n }\n };\n ExcelFilter.prototype.destroyCMenu = function () {\n if (this.menuObj && !this.menuObj.isDestroyed) {\n this.menuObj.destroy();\n remove(this.cmenu);\n }\n };\n ExcelFilter.prototype.hoverHandler = function (e) {\n var target = e.target.querySelector('.e-contextmenu');\n var li = parentsUntil(e.target, 'e-menu-item');\n var focused = this.menu.querySelector('.e-focused');\n var isSubMenu;\n if (focused) {\n focused.classList.remove('e-focused');\n }\n if (li) {\n li.classList.add('e-focused');\n isSubMenu = li.classList.contains('e-submenu');\n }\n if (target) {\n return;\n }\n if (!isSubMenu) {\n var submenu = this.menu.querySelector('.e-submenu');\n if (!isNullOrUndefined(submenu)) {\n submenu.classList.remove('e-selected');\n }\n this.isCMenuOpen = false;\n this.destroyCMenu();\n }\n var selectedMenu = this.ensureTextFilter();\n if (!this.isCMenuOpen && isSubMenu) {\n li.classList.add('e-selected');\n this.isCMenuOpen = true;\n var menuOptions = {\n items: this.getCMenuDS(this.options.type, selectedMenu ? selectedMenu.replace(/\\s/g, '') : undefined),\n select: this.selectHandler.bind(this),\n onClose: this.destroyCMenu.bind(this),\n enableRtl: this.parent.enableRtl,\n beforeClose: this.preventClose\n };\n this.parent.element.appendChild(this.cmenu);\n this.menuObj = new ContextMenu(menuOptions, this.cmenu);\n var client = this.menu.querySelector('.e-submenu').getBoundingClientRect();\n var pos = { top: 0, left: 0 };\n if (Browser.isDevice) {\n var contextRect = this.getContextBounds(this.menuObj);\n pos.top = (window.innerHeight - contextRect.height) / 2;\n pos.left = (window.innerWidth - contextRect.width) / 2;\n this.closeDialog();\n }\n else {\n pos.top = client.top;\n pos.left = this.getCMenuYPosition(this.dlg, this.menuObj);\n }\n this.menuObj.open(pos.top, pos.left);\n }\n };\n ExcelFilter.prototype.ensureTextFilter = function () {\n var selectedMenu;\n var predicates = this.existingPredicate[this.options.field];\n if (predicates && predicates.length === 2) {\n if (predicates[0].operator === 'greaterThanOrEqual' && predicates[1].operator === 'lessThanOrEqual') {\n selectedMenu = 'Between';\n }\n else {\n selectedMenu = 'CustomFilter';\n }\n }\n else {\n if (predicates && predicates.length === 1) {\n this.optrData = this.customFilterOperators[this.options.type + 'Operator'];\n selectedMenu = this.getSelectedText(predicates[0].operator);\n }\n }\n return selectedMenu;\n };\n ExcelFilter.prototype.preventClose = function (args) {\n if (args.event instanceof MouseEvent && args.event.target.classList.contains('e-submenu')) {\n args.cancel = true;\n }\n };\n ExcelFilter.prototype.getContextBounds = function (context) {\n var elementVisible = this.menuObj.element.style.display;\n this.menuObj.element.style.display = 'block';\n return this.menuObj.element.getBoundingClientRect();\n };\n ExcelFilter.prototype.getCMenuYPosition = function (target, context) {\n var contextWidth = this.getContextBounds(context).width;\n var targetPosition = target.getBoundingClientRect();\n var leftPos = targetPosition.right + contextWidth - this.parent.element.clientWidth;\n return (leftPos < 1) ? (targetPosition.right + 1) : (targetPosition.left - contextWidth - 1);\n };\n ExcelFilter.prototype.openDialog = function (options) {\n var _this = this;\n this.updateModel(options);\n this.getAndSetChkElem(options);\n this.showDialog(options);\n this.dialogObj.dataBind();\n var filterLength = (this.existingPredicate[options.field] && this.existingPredicate[options.field].length) ||\n this.options.filteredColumns.filter(function (col) {\n return _this.options.field === col.field;\n }).length;\n this.createMenu(options.type, filterLength > 0, (filterLength === 1 || filterLength === 2));\n this.dlg.insertBefore(this.menu, this.dlg.firstChild);\n this.dlg.classList.add('e-excelfilter');\n this.dlg.classList.remove('e-checkboxfilter');\n this.cmenu = createElement('ul', { className: 'e-excel-menu' });\n this.wireExEvents();\n };\n ExcelFilter.prototype.closeDialog = function () {\n _super.prototype.closeDialog.call(this);\n };\n ExcelFilter.prototype.selectHandler = function (e) {\n if (e.item) {\n this.menuItem = e.item;\n this.renderDialogue(e);\n }\n };\n ExcelFilter.prototype.renderDialogue = function (e) {\n var _this = this;\n var target = e.element;\n var column = this.options.field;\n var mainDiv = createElement('div', { className: 'e-xlfl-maindiv', id: column + '-xlflmenu' });\n this.dlgDiv = createElement('div', { className: 'e-xlflmenu', id: column + '-xlfldlg' });\n this.parent.element.appendChild(this.dlgDiv);\n this.dlgObj = new Dialog({\n header: this.getLocalizedLabel('CustomFilter'),\n isModal: true,\n overlayClick: this.removeDialog.bind(this),\n showCloseIcon: true,\n closeOnEscape: false,\n target: document.body,\n // target: this.parent.element,\n visible: false,\n enableRtl: this.parent.enableRtl,\n open: function () {\n var row = _this.dlgObj.element.querySelector('table.e-xlfl-table>tr');\n row.cells[1].querySelector('input:not([type=hidden])').focus();\n },\n close: this.removeDialog.bind(this),\n created: this.createdDialog.bind(this, target, column),\n buttons: [{\n click: this.filterBtnClick.bind(this, column),\n buttonModel: {\n content: this.getLocalizedLabel('OKButton'), isPrimary: true, cssClass: 'e-xlfl-okbtn'\n }\n },\n {\n click: this.removeDialog.bind(this),\n buttonModel: { content: this.getLocalizedLabel('CancelButton'), cssClass: 'e-xlfl-cancelbtn' }\n }],\n content: mainDiv,\n width: 430,\n animationSettings: { effect: 'None' },\n });\n this.dlgObj.appendTo(this.dlgDiv);\n };\n ExcelFilter.prototype.removeDialog = function () {\n this.removeObjects([this.dropOptr, this.datePicker, this.actObj, this.numericTxtObj, this.dlgObj]);\n remove(this.dlgDiv);\n };\n ExcelFilter.prototype.clearBtnClick = function (field) {\n this.clearFilter();\n this.removeDialog();\n };\n ExcelFilter.prototype.createdDialog = function (target, column) {\n this.renderCustomFilter(target, column);\n this.dlgObj.element.style.left = '0px';\n this.dlgObj.element.style.top = '0px';\n if (Browser.isDevice && window.innerWidth < 440) {\n this.dlgObj.element.style.width = '90%';\n }\n this.dlgObj.show();\n };\n ExcelFilter.prototype.renderCustomFilter = function (target, column) {\n var dlgConetntEle = this.dlgObj.element.querySelector('.e-xlfl-maindiv');\n /* tslint:disable-next-line:max-line-length */\n var dlgFields = createElement('div', { innerHTML: this.getLocalizedLabel('ShowRowsWhere'), className: 'e-xlfl-dlgfields' });\n dlgConetntEle.appendChild(dlgFields);\n //column name\n var fieldSet = createElement('div', { innerHTML: this.options.displayName, className: 'e-xlfl-fieldset' });\n dlgConetntEle.appendChild(fieldSet);\n this.renderFilterUI(column, dlgConetntEle);\n };\n ExcelFilter.prototype.filterBtnClick = function (col) {\n var fValue = this.dlgDiv.querySelector('#' + col + '-xlfl-frstvalue').ej2_instances[0];\n var fOperator = this.dlgDiv.querySelector('#' + col + '-xlfl-frstoptr').ej2_instances[0];\n var sValue = this.dlgDiv.querySelector('#' + col + '-xlfl-secndvalue').ej2_instances[0];\n var sOperator = this.dlgDiv.querySelector('#' + col + '-xlfl-secndoptr').ej2_instances[0];\n var checkBoxValue;\n if (this.options.type === 'string') {\n var checkBox = this.dlgDiv.querySelector('#' + col + '-xlflmtcase').ej2_instances[0];\n checkBoxValue = checkBox.checked;\n }\n var andRadio = this.dlgDiv.querySelector('#' + col + 'e-xlfl-frstpredicate').ej2_instances[0];\n var orRadio = this.dlgDiv.querySelector('#' + col + 'e-xlfl-secndpredicate').ej2_instances[0];\n var predicate = (andRadio.checked ? 'and' : 'or');\n if (sValue.value === null) {\n predicate = 'or';\n }\n this.filterByColumn(this.options.field, fOperator.value, fValue.value, predicate, checkBoxValue, this.parent.filterSettings.ignoreAccent, sOperator.value, sValue.value);\n this.removeDialog();\n };\n /**\n * Filters grid row by column name with given options.\n * @param {string} fieldName - Defines the field name of the filter column.\n * @param {string} firstOperator - Defines the first operator by how to filter records.\n * @param {string | number | Date | boolean} firstValue - Defines the first value which is used to filter records.\n * @param {string} predicate - Defines the relationship between one filter query with another by using AND or OR predicate.\n * @param {boolean} matchCase - If ignore case set to true, then filter records with exact match or else\n * filter records with case insensitive(uppercase and lowercase letters treated as same).\n * @param {boolean} ignoreAccent - If ignoreAccent set to true, then ignores the diacritic characters or accents when filtering.\n * @param {string} secondOperator - Defines the second operator by how to filter records.\n * @param {string | number | Date | boolean} secondValue - Defines the first value which is used to filter records.\n */\n ExcelFilter.prototype.filterByColumn = function (fieldName, firstOperator, firstValue, predicate, matchCase, ignoreAccent, secondOperator, secondValue) {\n var _this = this;\n var col = this.parent.getColumnByField(fieldName);\n var field = col.isForeignColumn() ? col.foreignKeyValue : fieldName;\n var fColl = [];\n var mPredicate;\n fColl.push({\n field: field,\n predicate: predicate,\n matchCase: matchCase,\n ignoreAccent: ignoreAccent,\n operator: firstOperator,\n value: firstValue,\n type: this.options.type\n });\n mPredicate = new Predicate(field, firstOperator.toLowerCase(), firstValue, !matchCase, ignoreAccent);\n if (secondValue) {\n secondOperator = !isNullOrUndefined(secondOperator) ? secondOperator : 'equal';\n fColl.push({\n field: field,\n predicate: predicate,\n matchCase: matchCase,\n ignoreAccent: ignoreAccent,\n operator: secondOperator,\n value: secondValue,\n type: this.options.type\n });\n /* tslint:disable-next-line:max-line-length */\n mPredicate = mPredicate[predicate](field, secondOperator.toLowerCase(), secondValue, !matchCase, ignoreAccent);\n }\n var args = {\n action: 'filtering', filterCollection: fColl, field: this.options.field,\n ejpredicate: mPredicate, actualPredicate: fColl\n };\n var fPredicate = {};\n var filterCollection = [];\n if (col.isForeignColumn()) {\n this.options.column.dataSource.\n executeQuery(new Query().where(mPredicate)).then(function (e) {\n _this.options.column.columnData = e.result;\n _this.parent.notify(generateQuery, { predicate: fPredicate, column: col });\n args.ejpredicate = fPredicate.predicate.predicates;\n fPredicate.predicate.predicates.forEach(function (fpred) {\n filterCollection.push({\n field: fpred.field,\n predicate: 'or',\n matchCase: fpred.ignoreCase,\n ignoreAccent: fpred.ignoreAccent,\n operator: fpred.operator,\n value: fpred.value,\n type: _this.options.type\n });\n });\n args.filterCollection = filterCollection.length ? filterCollection :\n fColl.filter(function (col) { return col.field = _this.options.field; });\n _this.options.handler(args);\n });\n }\n else {\n this.options.handler(args);\n }\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderOperatorUI = function (column, table, elementID, predicates, isFirst) {\n var fieldElement = createElement('tr', { className: 'e-xlfl-fields' });\n table.appendChild(fieldElement);\n var xlfloptr = createElement('td', { className: 'e-xlfl-optr' });\n fieldElement.appendChild(xlfloptr);\n var optrDiv = createElement('div', { className: 'e-xlfl-optrdiv' });\n var optrInput = createElement('input', { id: column + elementID });\n optrDiv.appendChild(optrInput);\n xlfloptr.appendChild(optrDiv);\n var optr = this.options.type + 'Operator';\n var dropDatasource = this.customFilterOperators[optr];\n this.optrData = dropDatasource;\n var selectedValue = this.dropSelectedVal(column, predicates, isFirst);\n //Trailing three dots are sliced.\n var menuText = '';\n if (this.menuItem) {\n menuText = this.menuItem.text.slice(0, -3);\n if (menuText !== this.getLocalizedLabel('CustomFilter')) {\n selectedValue = isFirst ? menuText : undefined;\n }\n if (menuText === this.getLocalizedLabel('Between')) {\n selectedValue = this.getLocalizedLabel(isFirst ? 'GreaterThanOrEqual' : 'LessThanOrEqual');\n }\n }\n this.dropOptr = new DropDownList({\n dataSource: dropDatasource,\n fields: { text: 'text', value: 'value' },\n text: selectedValue,\n open: this.dropDownOpen.bind(this),\n enableRtl: this.parent.enableRtl\n });\n this.dropOptr.appendTo(optrInput);\n var operator = this.getSelectedValue(selectedValue);\n return { fieldElement: fieldElement, operator: operator };\n };\n ExcelFilter.prototype.dropDownOpen = function (args) {\n args.popup.element.style.zIndex = (this.dialogObj.zIndex + 1).toString();\n };\n ExcelFilter.prototype.getSelectedValue = function (text) {\n var selectedField = new DataManager(this.optrData).executeLocal(new Query().where('text', 'equal', text));\n return !isNullOrUndefined(selectedField[0]) ? selectedField[0].value : '';\n };\n ExcelFilter.prototype.dropSelectedVal = function (col, predicates, isFirst) {\n var operator;\n if (predicates && predicates.length > 0) {\n operator = predicates.length === 2 ?\n (isFirst ? predicates[0].operator : predicates[1].operator) :\n (isFirst ? predicates[0].operator : undefined);\n }\n else {\n operator = isFirst ? 'equal' : undefined;\n }\n return this.getSelectedText(operator);\n };\n ExcelFilter.prototype.getSelectedText = function (operator) {\n var selectedField = new DataManager(this.optrData).executeLocal(new Query().where('value', 'equal', operator));\n return !isNullOrUndefined(selectedField[0]) ? selectedField[0].text : '';\n };\n ExcelFilter.prototype.renderFilterUI = function (column, dlgConetntEle) {\n var predicates = this.existingPredicate[column];\n var table = createElement('table', { className: 'e-xlfl-table' });\n dlgConetntEle.appendChild(table);\n var colGroup = createElement('colGroup');\n colGroup.innerHTML = '';\n table.appendChild(colGroup);\n //Renders first dropdown\n /* tslint:disable-next-line:max-line-length */\n var optr = this.renderOperatorUI(column, table, '-xlfl-frstoptr', predicates, true);\n //Renders first value\n this.renderFlValueUI(column, optr, '-xlfl-frstvalue', predicates, true);\n var predicate = createElement('tr', { className: 'e-xlfl-predicate' });\n table.appendChild(predicate);\n //Renders first radion button\n this.renderRadioButton(column, predicate, predicates);\n //Renders second dropdown\n optr = this.renderOperatorUI(column, table, '-xlfl-secndoptr', predicates, false);\n //Renders second text box\n this.renderFlValueUI(column, optr, '-xlfl-secndvalue', predicates, false);\n };\n ExcelFilter.prototype.renderRadioButton = function (column, tr, predicates) {\n var td = createElement('td', { className: 'e-xlfl-radio', attrs: { 'colSpan': '2' } });\n tr.appendChild(td);\n var radioDiv = createElement('div', { className: 'e-xlfl-radiodiv', attrs: { 'style': 'display: inline-block' } });\n /* tslint:disable-next-line:max-line-length */\n var frstpredicate = createElement('input', { id: column + 'e-xlfl-frstpredicate', attrs: { 'type': 'radio' } });\n /* tslint:disable-next-line:max-line-length */\n var secndpredicate = createElement('input', { id: column + 'e-xlfl-secndpredicate', attrs: { 'type': 'radio' } });\n //appends into div\n radioDiv.appendChild(frstpredicate);\n radioDiv.appendChild(secndpredicate);\n td.appendChild(radioDiv);\n if (this.options.type === 'string') {\n this.renderMatchCase(column, tr, td, '-xlflmtcase', predicates);\n }\n // Initialize AND RadioButton component.\n /* tslint:disable-next-line:max-line-length */\n var andRadio = new RadioButton({ label: this.getLocalizedLabel('AND'), name: 'default', cssClass: 'e-xlfl-radio-and', checked: true, enableRtl: this.parent.enableRtl });\n // Initialize OR RadioButton component.\n /* tslint:disable-next-line:max-line-length */\n var orRadio = new RadioButton({ label: this.getLocalizedLabel('OR'), name: 'default', cssClass: 'e-xlfl-radio-or', enableRtl: this.parent.enableRtl });\n var flValue = predicates && predicates.length === 2 ? predicates[1].predicate : 'and';\n if (flValue === 'and') {\n andRadio.checked = true;\n orRadio.checked = false;\n }\n else {\n orRadio.checked = true;\n andRadio.checked = false;\n }\n // Render initialized RadioButton.\n andRadio.appendTo(frstpredicate);\n orRadio.appendTo(secndpredicate);\n };\n /* tslint:disable-next-line:no-any */\n ExcelFilter.prototype.removeObjects = function (elements) {\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var obj = elements_1[_i];\n if (obj && !obj.isDestroyed) {\n obj.destroy();\n }\n }\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderFlValueUI = function (column, optr, elementId, predicates, isFirst) {\n var value = createElement('td', { className: 'e-xlfl-value' });\n optr.fieldElement.appendChild(value);\n var valueDiv = createElement('div', { className: 'e-xlfl-valuediv' });\n var valueInput = createElement('input', { id: column + elementId });\n valueDiv.appendChild(valueInput);\n value.appendChild(valueDiv);\n var flValue;\n var predicate;\n if (predicates && predicates.length > 0) {\n predicate = predicates.length === 2 ?\n (isFirst ? predicates[0] : predicates[1]) :\n (isFirst ? predicates[0] : undefined);\n flValue = (predicate && predicate.operator === optr.operator) ? predicate.value : undefined;\n }\n var types = {\n 'string': this.renderAutoComplete.bind(this),\n 'number': this.renderNumericTextBox.bind(this),\n 'date': this.renderDate.bind(this),\n 'datetime': this.renderDate.bind(this)\n };\n types[this.options.type](this.options, column, valueInput, flValue, this.parent.enableRtl);\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderMatchCase = function (column, tr, matchCase, elementId, predicates) {\n /* tslint:disable-next-line:max-line-length */\n var matchCaseDiv = createElement('div', { className: 'e-xlfl-matchcasediv', attrs: { 'style': 'display: inline-block' } });\n var matchCaseInput = createElement('input', { id: column + elementId, attrs: { 'type': 'checkbox' } });\n matchCaseDiv.appendChild(matchCaseInput);\n matchCase.appendChild(matchCaseDiv);\n var flValue = predicates && predicates.length > 0 ?\n (predicates && predicates.length === 2 ? predicates[1].matchCase : predicates[0].matchCase) :\n false;\n // Initialize Match Case check box.\n var checkbox = new CheckBox({ label: this.getLocalizedLabel('MatchCase'),\n enableRtl: this.parent.enableRtl, checked: flValue });\n // Render initialized CheckBox.\n checkbox.appendTo(matchCaseInput);\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderDate = function (options, column, inputValue, fValue, isRtl) {\n var intl = new Internationalization();\n var format = intl.getDatePattern({ type: 'date', skeleton: options.format }, false);\n this.datePicker = new DatePicker({\n format: format,\n cssClass: 'e-popup-flmenu',\n placeholder: this.getLocalizedLabel('CustomFilterDatePlaceHolder'),\n width: '100%',\n enableRtl: isRtl,\n value: new Date(fValue),\n });\n this.datePicker.appendTo(inputValue);\n };\n ExcelFilter.prototype.completeAction = function (e) {\n e.result = distinctStringValues(e.result);\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderNumericTextBox = function (options, column, inputValue, fValue, isRtl) {\n this.numericTxtObj = new NumericTextBox({\n format: options.format,\n placeholder: this.getLocalizedLabel('CustomFilterPlaceHolder'),\n enableRtl: isRtl,\n value: fValue\n });\n this.numericTxtObj.appendTo(inputValue);\n };\n /* tslint:disable-next-line:max-line-length */\n ExcelFilter.prototype.renderAutoComplete = function (options, column, inputValue, fValue, isRtl) {\n var _this = this;\n var colObj = this.parent.getColumnByField(column);\n var isForeignColumn = colObj.isForeignColumn();\n var dataSource = isForeignColumn ? colObj.dataSource : options.dataSource;\n var fields = { value: isForeignColumn ? colObj.foreignKeyValue : column };\n var actObj = new AutoComplete({\n dataSource: dataSource instanceof DataManager ? dataSource : new DataManager(dataSource),\n fields: fields,\n query: this.parent.query.clone(),\n sortOrder: 'Ascending',\n locale: this.parent.locale,\n autofill: true,\n focus: function () {\n actObj.filterType = _this.dlgDiv.querySelector('#' + column +\n (inputValue.id === (column + '-xlfl-frstvalue') ?\n '-xlfl-frstoptr' :\n '-xlfl-secndoptr')).ej2_instances[0].value;\n actObj.ignoreCase = options.type === 'string' ?\n !_this.dlgDiv.querySelector('#' + column + '-xlflmtcase').ej2_instances[0].checked :\n true;\n actObj.filterType = !isNullOrUndefined(actObj.filterType) ? actObj.filterType :\n 'equal';\n },\n placeholder: this.getLocalizedLabel('CustomFilterPlaceHolder'),\n enableRtl: isRtl,\n actionComplete: function (e) {\n e.result = e.result.filter(function (obj, index, arr) {\n return arr.map(function (mapObject) {\n return mapObject[actObj.fields.value];\n }).indexOf(obj[_this.actObj.fields.value]) === index;\n });\n },\n value: fValue\n });\n actObj.appendTo(inputValue);\n this.actObj = actObj;\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n ExcelFilter.prototype.getModuleName = function () {\n return 'excelFilter';\n };\n return ExcelFilter;\n}(CheckBoxFilter));\nexport { ExcelFilter };\n","import { EventHandler, isNullOrUndefined, extend, closest, getValue } from '@syncfusion/ej2-base';\nimport { getActualPropFromColl, isActionPrevent, getColumnByForeignKeyValue } from '../base/util';\nimport { remove, createElement, matches } from '@syncfusion/ej2-base';\nimport { DataUtil, Query, DataManager } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport { CellType } from '../base/enum';\nimport { RowRenderer } from '../renderer/row-renderer';\nimport { Cell } from '../models/cell';\nimport { Row } from '../models/row';\nimport { FilterCellRenderer } from '../renderer/filter-cell-renderer';\nimport { parentsUntil } from '../base/util';\nimport { FilterMenuRenderer } from '../renderer/filter-menu-renderer';\nimport { CheckBoxFilter } from '../actions/checkbox-filter';\nimport { ExcelFilter } from '../actions/excel-filter';\n/**\n *\n * The `Filter` module is used to handle filtering action.\n */\nvar Filter = /** @class */ (function () {\n /**\n * Constructor for Grid filtering module\n * @hidden\n */\n function Filter(parent, filterSettings, serviceLocator) {\n this.predicate = 'and';\n this.contentRefresh = true;\n this.values = {};\n this.nextFlMenuOpen = '';\n this.type = { 'Menu': FilterMenuRenderer, 'CheckBox': CheckBoxFilter, 'Excel': ExcelFilter };\n this.filterOperators = {\n contains: 'contains', endsWith: 'endswith', equal: 'equal', greaterThan: 'greaterthan', greaterThanOrEqual: 'greaterthanorequal',\n lessThan: 'lessthan', lessThanOrEqual: 'lessthanorequal', notEqual: 'notequal', startsWith: 'startswith'\n };\n this.fltrDlgDetails = { field: '', isOpen: false };\n this.actualPredicate = {};\n this.parent = parent;\n this.filterSettings = filterSettings;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n /**\n * To render filter bar when filtering enabled.\n * @return {void}\n * @hidden\n */\n Filter.prototype.render = function (e) {\n if (DataUtil.getObject('args.isFrozen', e)) {\n return;\n }\n var gObj = this.parent;\n this.l10n = this.serviceLocator.getService('localization');\n this.getLocalizedCustomOperators();\n if (this.parent.filterSettings.type === 'FilterBar') {\n if (gObj.columns.length) {\n var fltrElem = this.parent.element.querySelector('.e-filterbar');\n if (fltrElem) {\n remove(fltrElem);\n }\n var rowRenderer = new RowRenderer(this.serviceLocator, CellType.Filter, gObj);\n var row = void 0;\n var cellrender = this.serviceLocator.getService('cellRendererFactory');\n cellrender.addCellRenderer(CellType.Filter, new FilterCellRenderer(this.parent, this.serviceLocator));\n this.valueFormatter = this.serviceLocator.getService('valueFormatter');\n rowRenderer.element = createElement('tr', { className: 'e-filterbar' });\n row = this.generateRow();\n row.data = this.values;\n this.parent.getHeaderContent().querySelector('thead').appendChild(rowRenderer.element);\n this.element = rowRenderer.render(row, gObj.getColumns(), null, null, rowRenderer.element);\n var detail = this.element.querySelector('.e-detailheadercell');\n if (detail) {\n detail.className = 'e-filterbarcell e-mastercell';\n }\n var gCells = [].slice.call(this.element.querySelectorAll('.e-grouptopleftcell'));\n if (gCells.length) {\n gCells[gCells.length - 1].classList.add('e-lastgrouptopleftcell');\n }\n this.wireEvents();\n this.parent.notify(events.freezeRender, { case: 'filter' });\n }\n }\n };\n /**\n * To destroy the filter bar.\n * @return {void}\n * @hidden\n */\n Filter.prototype.destroy = function () {\n if (this.filterModule) {\n this.filterModule.destroy();\n }\n this.filterSettings.columns = [];\n this.updateFilterMsg();\n this.removeEventListener();\n this.unWireEvents();\n if (this.element) {\n remove(this.element);\n var filterBarElement = this.parent.getHeaderContent().querySelector('.e-filterbar');\n if (this.parent.getFrozenColumns() && filterBarElement) {\n remove(filterBarElement);\n }\n }\n };\n Filter.prototype.generateRow = function (index) {\n var options = {};\n var row = new Row(options);\n row.cells = this.generateCells();\n return row;\n };\n Filter.prototype.generateCells = function () {\n //TODO: generate dummy column for group, detail, stacked row here for filtering;\n var cells = [];\n if (this.parent.allowGrouping) {\n for (var c = 0, len = this.parent.groupSettings.columns.length; c < len; c++) {\n cells.push(this.generateCell({}, CellType.HeaderIndent));\n }\n }\n if (this.parent.detailTemplate || this.parent.childGrid) {\n cells.push(this.generateCell({}, CellType.DetailHeader));\n }\n for (var _i = 0, _a = this.parent.getColumns(); _i < _a.length; _i++) {\n var dummy = _a[_i];\n cells.push(this.generateCell(dummy));\n }\n return cells;\n };\n Filter.prototype.generateCell = function (column, cellType) {\n var opt = {\n 'visible': column.visible,\n 'isDataCell': false,\n 'rowId': '',\n 'column': column,\n 'cellType': cellType ? cellType : CellType.Filter,\n 'attributes': { title: this.l10n.getConstant('FilterbarTitle') }\n };\n return new Cell(opt);\n };\n /**\n * To update filterSettings when applying filter.\n * @return {void}\n * @hidden\n */\n Filter.prototype.updateModel = function () {\n var col = this.parent.getColumnByField(this.fieldName);\n var field = col.isForeignColumn() ? col.foreignKeyValue : this.fieldName;\n this.currentFilterObject = {\n field: field, operator: this.operator, value: this.value, predicate: this.predicate,\n matchCase: this.matchCase, ignoreAccent: this.ignoreAccent, actualFilterValue: {}, actualOperator: {}\n };\n var index = this.getFilteredColsIndexByField(col);\n if (index > -1) {\n this.filterSettings.columns[index] = this.currentFilterObject;\n }\n else {\n this.filterSettings.columns.push(this.currentFilterObject);\n }\n this.filterSettings.columns = this.filterSettings.columns;\n this.parent.dataBind();\n };\n Filter.prototype.getFilteredColsIndexByField = function (col) {\n var cols = this.filterSettings.columns;\n for (var i = 0, len = cols.length; i < len; i++) {\n if (cols[i].field === col.field || (col.isForeignColumn() && cols[i].field === col.foreignKeyValue)) {\n return i;\n }\n }\n return -1;\n };\n /**\n * To trigger action complete event.\n * @return {void}\n * @hidden\n */\n Filter.prototype.onActionComplete = function (e) {\n var args = !this.isRemove ? {\n currentFilterObject: this.currentFilterObject, currentFilteringColumn: this.column.field,\n columns: this.filterSettings.columns, requestType: 'filtering', type: events.actionComplete\n } : {\n requestType: 'filtering', type: events.actionComplete\n };\n this.parent.trigger(events.actionComplete, extend(e, args));\n this.isRemove = false;\n };\n Filter.prototype.wireEvents = function () {\n EventHandler.add(this.parent.getHeaderContent(), 'keyup', this.keyUpHandler, this);\n };\n Filter.prototype.unWireEvents = function () {\n EventHandler.remove(this.parent.getHeaderContent(), 'keyup', this.keyUpHandler);\n };\n Filter.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.render();\n }\n };\n Filter.prototype.initialEnd = function () {\n this.parent.off(events.contentReady, this.initialEnd);\n if (this.parent.getColumns().length && this.filterSettings.columns.length) {\n var gObj = this.parent;\n this.contentRefresh = false;\n for (var _i = 0, _a = gObj.filterSettings.columns; _i < _a.length; _i++) {\n var col = _a[_i];\n this.filterByColumn(col.field, col.operator, col.value, col.predicate, col.matchCase, col.ignoreAccent, col.actualFilterValue, col.actualOperator);\n }\n this.updateFilterMsg();\n this.contentRefresh = true;\n }\n };\n /**\n * @hidden\n */\n Filter.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n this.parent.on(events.filterComplete, this.onActionComplete, this);\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.keyPressed, this.keyUpHandler, this);\n this.parent.on(events.columnPositionChanged, this.columnPositionChanged, this);\n this.parent.on(events.headerRefreshed, this.render, this);\n this.parent.on(events.contentReady, this.initialEnd, this);\n this.parent.on(events.filterMenuClose, this.filterMenuClose, this);\n EventHandler.add(document, 'click', this.clickHandler, this);\n this.parent.on(events.filterOpen, this.columnMenuFilter, this);\n this.parent.on(events.click, this.filterIconClickHandler, this);\n };\n /**\n * @hidden\n */\n Filter.prototype.removeEventListener = function () {\n EventHandler.remove(document, 'click', this.clickHandler);\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.uiUpdate, this.enableAfterRender);\n this.parent.off(events.filterComplete, this.onActionComplete);\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.keyPressed, this.keyUpHandler);\n this.parent.off(events.columnPositionChanged, this.columnPositionChanged);\n this.parent.off(events.headerRefreshed, this.render);\n this.parent.off(events.filterOpen, this.columnMenuFilter);\n this.parent.off(events.filterMenuClose, this.filterMenuClose);\n this.parent.off(events.click, this.filterIconClickHandler);\n };\n Filter.prototype.filterMenuClose = function (args) {\n this.fltrDlgDetails.isOpen = false;\n };\n /**\n * Filters the Grid row by fieldName, filterOperator, and filterValue.\n * @param {string} fieldName - Defines the field name of the filter column.\n * @param {string} filterOperator - Defines the operator to filter records.\n * @param {string | number | Date | boolean} filterValue - Defines the value which is used to filter records.\n * @param {string} predicate - Defines the relationship of one filter query with another by using AND or OR predicate.\n * @param {boolean} matchCase - If match case is set to true, then the filter records\n * the exact match or
    filters records that are case insensitive (uppercase and lowercase letters treated the same).\n * @param {boolean} ignoreAccent - If ignoreAccent set to true, then filter ignores the diacritic characters or accents while filtering.\n * @param {string} actualFilterValue - Defines the actual filter value for the filter column.\n * @param {string} actualOperator - Defines the actual filter operator for the filter column.\n * @return {void}\n */\n Filter.prototype.filterByColumn = function (fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator) {\n var gObj = this.parent;\n var filterCell;\n this.column = gObj.getColumnByField(fieldName);\n if (this.filterSettings.type === 'FilterBar') {\n filterCell = gObj.getHeaderContent().querySelector('[id=\\'' + this.column.field + '_filterBarcell\\']');\n }\n if (!isNullOrUndefined(this.column.allowFiltering) && !this.column.allowFiltering) {\n return;\n }\n if (isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, {\n instance: this, handler: this.filterByColumn, arg1: fieldName, arg2: filterOperator, arg3: filterValue, arg4: predicate,\n arg5: matchCase, arg6: ignoreAccent, arg7: actualFilterValue, arg8: actualOperator\n });\n return;\n }\n this.value = filterValue;\n this.matchCase = matchCase || false;\n this.ignoreAccent = this.ignoreAccent = !isNullOrUndefined(ignoreAccent) ? ignoreAccent : this.parent.filterSettings.ignoreAccent;\n this.fieldName = fieldName;\n this.predicate = predicate || 'and';\n this.operator = filterOperator;\n filterValue = !isNullOrUndefined(filterValue) && filterValue.toString();\n if (this.column.type === 'number' || this.column.type === 'date') {\n this.matchCase = true;\n }\n gObj.getColumnHeaderByField(fieldName).setAttribute('aria-filtered', 'true');\n if (filterValue.length < 1 || this.checkForSkipInput(this.column, filterValue)) {\n this.filterStatusMsg = filterValue.length < 1 ? '' : this.l10n.getConstant('InvalidFilterMessage');\n this.updateFilterMsg();\n return;\n }\n if (this.filterSettings.type === 'FilterBar' && filterCell.value !== filterValue) {\n filterCell.value = filterValue;\n }\n if (!isNullOrUndefined(this.column.format)) {\n this.applyColumnFormat(filterValue);\n }\n else {\n this.values[this.column.field] = filterValue; //this line should be above updateModel\n }\n if (this.checkAlreadyColFiltered(this.column.field)) {\n return;\n }\n this.actualPredicate[this.fieldName] = [{\n field: this.fieldName,\n predicate: predicate,\n matchCase: matchCase,\n ignoreAccent: ignoreAccent,\n operator: this.operator,\n value: this.value,\n type: this.column.type\n }];\n this.addFilteredClass();\n this.updateModel();\n };\n Filter.prototype.applyColumnFormat = function (filterValue) {\n var getFlvalue = (this.column.type === 'date' || this.column.type === 'datetime') ?\n new Date(filterValue) : parseFloat(filterValue);\n this.values[this.column.field] = this.setFormatForFlColumn(getFlvalue, this.column);\n };\n Filter.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName()) {\n return;\n }\n for (var _i = 0, _a = Object.keys(e.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'columns':\n if (this.contentRefresh) {\n this.parent.notify(events.modelChanged, {\n currentFilterObject: this.currentFilterObject, currentFilteringColumn: this.column ?\n this.column.field : undefined,\n columns: this.filterSettings.columns, requestType: 'filtering', type: events.actionBegin\n });\n this.refreshFilterSettings();\n this.updateFilterMsg();\n }\n break;\n case 'showFilterBarStatus':\n if (e.properties[prop]) {\n this.updateFilterMsg();\n }\n else if (this.parent.allowPaging) {\n this.parent.updateExternalMessage('');\n }\n break;\n case 'type':\n this.parent.refreshHeader();\n this.refreshFilterSettings();\n break;\n }\n }\n };\n Filter.prototype.refreshFilterSettings = function () {\n if (this.filterSettings.type === 'FilterBar') {\n for (var i = 0; i < this.filterSettings.columns.length; i++) {\n this.column = this.parent.getColumnByField(this.filterSettings.columns[i].field) ||\n getColumnByForeignKeyValue(this.filterSettings.columns[i].field, this.parent.getForeignKeyColumns());\n var filterValue = this.filterSettings.columns[i].value;\n filterValue = !isNullOrUndefined(filterValue) && filterValue.toString();\n if (!isNullOrUndefined(this.column.format)) {\n this.applyColumnFormat(filterValue);\n }\n else {\n var key = this.filterSettings.columns[i].field;\n this.values[key] = this.filterSettings.columns[i].value;\n }\n var filterElement = this.getFilterBarElement(this.filterSettings.columns[i].field);\n if (filterElement) {\n filterElement.value = this.filterSettings.columns[i].value;\n }\n }\n if (this.filterSettings.columns.length === 0) {\n var col = this.parent.getColumns();\n for (var i = 0; i < col.length; i++) {\n var filterElement = this.getFilterBarElement(col[i].field);\n if (filterElement && filterElement.value !== '') {\n filterElement.value = '';\n delete this.values[col[i].field];\n }\n }\n }\n }\n };\n Filter.prototype.getFilterBarElement = function (col) {\n var selector = '[id=\\'' + col + '_filterBarcell\\']';\n var filterElement;\n if (selector && !isNullOrUndefined(this.element)) {\n filterElement = this.element.querySelector(selector);\n }\n return filterElement;\n };\n /**\n * @private\n */\n Filter.prototype.refreshFilter = function () {\n this.refreshFilterSettings();\n this.updateFilterMsg();\n };\n /**\n * Clears all the filtered rows of the Grid.\n * @return {void}\n */\n Filter.prototype.clearFiltering = function () {\n var cols = getActualPropFromColl(this.filterSettings.columns);\n if (isActionPrevent(this.parent)) {\n this.parent.notify(events.preventBatch, { instance: this, handler: this.clearFiltering });\n return;\n }\n for (var i = 0, len = cols.length; i < len; i++) {\n this.removeFilteredColsByField(cols[i].field, false);\n }\n if (this.parent.filterSettings.columns.length === 0 && this.parent.element.querySelector('.e-filtered')) {\n var fltrElement = [].slice.call(this.parent.element.querySelectorAll('.e-filtered'));\n for (var i = 0, len = fltrElement.length; i < len; i++) {\n fltrElement[0].removeAttribute('aria-filtered');\n fltrElement[0].classList.remove('e-filtered');\n }\n }\n this.isRemove = true;\n this.filterStatusMsg = '';\n this.updateFilterMsg();\n };\n Filter.prototype.checkAlreadyColFiltered = function (field) {\n var columns = this.filterSettings.columns;\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var col = columns_1[_i];\n if (col.field === field && col.value === this.value &&\n col.operator === this.operator && col.predicate === this.predicate) {\n return true;\n }\n }\n return false;\n };\n Filter.prototype.columnMenuFilter = function (args) {\n this.column = args.col;\n var ele = closest(args.target, '#' + args.id);\n if (args.isClose && !ele) {\n this.filterModule.closeDialog();\n }\n else if (ele) {\n this.filterDialogOpen(this.column, args.target);\n }\n };\n Filter.prototype.filterDialogOpen = function (col, target, left, top) {\n var gObj = this.parent;\n if (this.filterModule) {\n this.filterModule.closeDialog();\n }\n this.filterModule = new this.type[col.filter.type || this.parent.filterSettings.type](this.parent, gObj.filterSettings, this.serviceLocator, this.customOperators, this);\n var dataSource = col.filter.dataSource || gObj.getDataModule().dataManager;\n this.filterModule.openDialog({\n type: col.type, field: col.field, displayName: col.headerText,\n dataSource: dataSource, format: col.format,\n filteredColumns: gObj.filterSettings.columns, target: target,\n sortedColumns: gObj.sortSettings.columns, formatFn: col.getFormatter(),\n parserFn: col.getParser(), query: gObj.query, template: col.getFilterItemTemplate(),\n hideSearchbox: isNullOrUndefined(col.filter.hideSearchbox) ? false : col.filter.hideSearchbox,\n handler: this.filterHandler.bind(this), localizedStrings: gObj.getLocaleConstants(),\n position: { X: left, Y: top }, column: col, foreignKeyValue: col.foreignKeyValue,\n actualPredicate: this.actualPredicate, localeObj: this.parent.localeObj\n });\n };\n /**\n * Removes filtered column by field name.\n * @param {string} field - Defines column field name to remove filter.\n * @param {boolean} isClearFilterBar - Specifies whether the filter bar value needs to be cleared.\n * @return {void}\n * @hidden\n */\n Filter.prototype.removeFilteredColsByField = function (field, isClearFilterBar) {\n var fCell;\n var cols = this.filterSettings.columns;\n if (isActionPrevent(this.parent)) {\n var args = { instance: this, handler: this.removeFilteredColsByField, arg1: field, arg2: isClearFilterBar };\n this.parent.notify(events.preventBatch, args);\n return;\n }\n for (var i = 0, len = cols.length; i < len; i++) {\n var column = this.parent.getColumnByField(field) ||\n getColumnByForeignKeyValue(field, this.parent.getForeignKeyColumns());\n if (cols[i].field === field || cols[i].field === column.foreignKeyValue) {\n if (this.filterSettings.type === 'FilterBar' && !isClearFilterBar) {\n var selector = '[id=\\'' + cols[i].field + '_filterBarcell\\']';\n fCell = this.parent.getHeaderContent().querySelector(selector);\n fCell.value = '';\n delete this.values[field];\n }\n cols.splice(i, 1);\n var fltrElement = this.parent.getColumnHeaderByField(column.field);\n fltrElement.removeAttribute('aria-filtered');\n if (this.filterSettings.type !== 'FilterBar') {\n var iconClass = this.parent.showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n fltrElement.querySelector(iconClass).classList.remove('e-filtered');\n }\n this.isRemove = true;\n if (this.actualPredicate[field]) {\n delete this.actualPredicate[field];\n }\n if (this.values[field]) {\n delete this.values[field];\n }\n this.parent.notify(events.modelChanged, {\n requestType: 'filtering', type: events.actionBegin\n });\n break;\n }\n }\n this.updateFilterMsg();\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Filter.prototype.getModuleName = function () {\n return 'filter';\n };\n Filter.prototype.keyUpHandler = function (e) {\n var gObj = this.parent;\n var target = e.target;\n if (target && matches(target, '.e-filterbar input')) {\n this.column = gObj.getColumnByField(target.id.split('_filterBarcell')[0]);\n if (!this.column) {\n return;\n }\n if ((this.filterSettings.mode === 'Immediate' || e.keyCode === 13) && e.keyCode !== 9) {\n this.value = target.value.trim();\n this.processFilter(e);\n }\n }\n };\n Filter.prototype.updateCrossIcon = function (element) {\n if (element.value.length) {\n element.nextElementSibling.classList.remove('e-hide');\n }\n };\n Filter.prototype.updateFilterMsg = function () {\n if (this.filterSettings.type === 'FilterBar') {\n var gObj = this.parent;\n var columns = this.filterSettings.columns;\n var formater = this.serviceLocator.getService('valueFormatter');\n var column = void 0;\n var value = void 0;\n if (!this.filterSettings.showFilterBarStatus) {\n return;\n }\n if (columns.length > 0 && this.filterStatusMsg !== this.l10n.getConstant('InvalidFilterMessage')) {\n this.filterStatusMsg = '';\n for (var index = 0; index < columns.length; index++) {\n column = gObj.getColumnByField(columns[index].field) ||\n getColumnByForeignKeyValue(columns[index].field, this.parent.getForeignKeyColumns());\n if (index) {\n this.filterStatusMsg += ' && ';\n }\n if (!isNullOrUndefined(column.format)) {\n var flValue = (column.type === 'date' || column.type === 'datetime') ?\n new Date(this.values[column.field]) :\n this.values[column.field];\n var getFormatFlValue = this.setFormatForFlColumn(flValue, column);\n this.filterStatusMsg += column.headerText + ': ' + getFormatFlValue;\n }\n else {\n this.filterStatusMsg += column.headerText + ': ' + this.values[column.field];\n }\n }\n }\n if (gObj.allowPaging) {\n gObj.updateExternalMessage(this.filterStatusMsg);\n }\n //TODO: virtual paging \n this.filterStatusMsg = '';\n }\n };\n Filter.prototype.setFormatForFlColumn = function (value, column) {\n var formater = this.serviceLocator.getService('valueFormatter');\n return formater.toView(value, column.getFormatter()).toString();\n };\n Filter.prototype.checkForSkipInput = function (column, value) {\n var isSkip;\n var skipInput;\n if (column.type === 'number') {\n skipInput = ['=', ' ', '!'];\n if (DataUtil.operatorSymbols[value] || skipInput.indexOf(value) > -1) {\n isSkip = true;\n }\n }\n else if (column.type === 'string') {\n skipInput = ['>', '<', '=', '!'];\n for (var _i = 0, value_1 = value; _i < value_1.length; _i++) {\n var val = value_1[_i];\n if (skipInput.indexOf(val) > -1) {\n isSkip = true;\n }\n }\n }\n return isSkip;\n };\n Filter.prototype.processFilter = function (e) {\n this.stopTimer();\n this.startTimer(e);\n };\n Filter.prototype.startTimer = function (e) {\n var _this = this;\n this.timer = window.setInterval(function () { _this.onTimerTick(); }, e.keyCode === 13 ? 0 : this.filterSettings.immediateModeDelay);\n };\n Filter.prototype.stopTimer = function () {\n window.clearInterval(this.timer);\n };\n Filter.prototype.onTimerTick = function () {\n var selector = '[id=\\'' + this.column.field + '_filterBarcell\\']';\n var filterElement = this.element.querySelector(selector);\n if (!filterElement && this.parent.getFrozenColumns()) {\n filterElement = this.parent.getHeaderContent().querySelector(selector);\n }\n var filterValue;\n this.stopTimer();\n if (!isNullOrUndefined(this.column.filterBarTemplate)) {\n var templateRead = this.column.filterBarTemplate.read;\n if (typeof templateRead === 'string') {\n templateRead = getValue(templateRead, window);\n }\n this.value = templateRead.call(this, filterElement);\n }\n else {\n filterValue = JSON.parse(JSON.stringify(filterElement.value));\n }\n if (isNullOrUndefined(this.value) || this.value === '') {\n this.removeFilteredColsByField(this.column.field);\n return;\n }\n this.validateFilterValue(this.value);\n this.filterByColumn(this.column.field, this.operator, this.value, this.predicate, this.matchCase, this.ignoreAccent);\n filterElement.value = filterValue;\n this.updateFilterMsg();\n };\n Filter.prototype.validateFilterValue = function (value) {\n var gObj = this.parent;\n var skipInput;\n var index;\n this.matchCase = true;\n switch (this.column.type) {\n case 'number':\n this.operator = this.filterOperators.equal;\n skipInput = ['>', '<', '=', '!'];\n for (var i = 0; i < value.length; i++) {\n if (skipInput.indexOf(value[i]) > -1) {\n index = i;\n break;\n }\n }\n this.getOperator(value.substring(index));\n if (index !== 0) {\n this.value = value.substring(0, index);\n }\n if (this.value !== '' && value.length >= 1) {\n this.value = this.valueFormatter.fromView(this.value, this.column.getParser(), this.column.type);\n }\n if (isNaN(this.value)) {\n this.filterStatusMsg = this.l10n.getConstant('InvalidFilterMessage');\n }\n break;\n case 'date':\n case 'datetime':\n this.operator = this.filterOperators.equal;\n if (this.value !== '' && !(this.value instanceof Date)) {\n this.getOperator(value);\n this.value = this.valueFormatter.fromView(this.value, this.column.getParser(), this.column.type);\n if (isNullOrUndefined(this.value)) {\n this.filterStatusMsg = this.l10n.getConstant('InvalidFilterMessage');\n }\n }\n break;\n case 'string':\n this.matchCase = false;\n if (value.charAt(0) === '*') {\n this.value = this.value.slice(1);\n this.operator = this.filterOperators.startsWith;\n }\n else if (value.charAt(value.length - 1) === '%') {\n this.value = this.value.slice(0, -1);\n this.operator = this.filterOperators.startsWith;\n }\n else if (value.charAt(0) === '%') {\n this.value = this.value.slice(1);\n this.operator = this.filterOperators.endsWith;\n }\n else {\n this.operator = this.filterOperators.startsWith;\n }\n break;\n case 'boolean':\n if (value.toLowerCase() === 'true' || value === '1') {\n this.value = true;\n }\n else if (value.toLowerCase() === 'false' || value === '0') {\n this.value = false;\n }\n else if (value.length) {\n this.filterStatusMsg = this.l10n.getConstant('InvalidFilterMessage');\n }\n this.operator = this.filterOperators.equal;\n break;\n default:\n this.operator = this.filterOperators.equal;\n }\n };\n Filter.prototype.getOperator = function (value) {\n var singleOp = value.charAt(0);\n var multipleOp = value.slice(0, 2);\n var operators = extend({ '=': this.filterOperators.equal, '!': this.filterOperators.notEqual }, DataUtil.operatorSymbols);\n if (operators.hasOwnProperty(singleOp) || operators.hasOwnProperty(multipleOp)) {\n this.operator = operators[singleOp];\n this.value = value.substring(1);\n if (!this.operator) {\n this.operator = operators[multipleOp];\n this.value = value.substring(2);\n }\n }\n if (this.operator === this.filterOperators.lessThan || this.operator === this.filterOperators.greaterThan) {\n if (this.value.charAt(0) === '=') {\n this.operator = this.operator + 'orequal';\n this.value = this.value.substring(1);\n }\n }\n };\n Filter.prototype.columnPositionChanged = function (e) {\n if (this.parent.filterSettings.type !== 'FilterBar') {\n return;\n }\n };\n Filter.prototype.getLocalizedCustomOperators = function () {\n var numOptr = [\n { value: 'equal', text: this.l10n.getConstant('Equal') },\n { value: 'greaterthan', text: this.l10n.getConstant('GreaterThan') },\n { value: 'greaterthanorequal', text: this.l10n.getConstant('GreaterThanOrEqual') },\n { value: 'lessthan', text: this.l10n.getConstant('LessThan') },\n { value: 'lessthanorequal', text: this.l10n.getConstant('LessThanOrEqual') },\n { value: 'notequal', text: this.l10n.getConstant('NotEqual') }\n ];\n this.customOperators = {\n stringOperator: [\n { value: 'startswith', text: this.l10n.getConstant('StartsWith') },\n { value: 'endswith', text: this.l10n.getConstant('EndsWith') },\n { value: 'contains', text: this.l10n.getConstant('Contains') },\n { value: 'equal', text: this.l10n.getConstant('Equal') },\n { value: 'notequal', text: this.l10n.getConstant('NotEqual') }\n ],\n numberOperator: numOptr,\n dateOperator: numOptr,\n datetimeOperator: numOptr,\n booleanOperator: [\n { value: 'equal', text: this.l10n.getConstant('Equal') },\n { value: 'notequal', text: this.l10n.getConstant('NotEqual') }\n ]\n };\n };\n ;\n Filter.prototype.filterIconClickHandler = function (e) {\n var target = e.target;\n if (target.classList.contains('e-filtermenudiv') && (this.parent.filterSettings.type === 'Menu' ||\n this.parent.filterSettings.type === 'CheckBox' || this.parent.filterSettings.type === 'Excel')) {\n var gObj = this.parent;\n var col = gObj.getColumnByUid(parentsUntil(target, 'e-headercell').firstElementChild.getAttribute('e-mappinguid'));\n var gClient = gObj.element.getBoundingClientRect();\n var fClient = target.getBoundingClientRect();\n this.column = col;\n if (this.fltrDlgDetails.field === col.field && this.fltrDlgDetails.isOpen) {\n return;\n }\n if (this.filterModule) {\n this.filterModule.closeDialog();\n }\n this.fltrDlgDetails = { field: col.field, isOpen: true };\n this.filterDialogOpen(this.column, target, fClient.right - gClient.left, fClient.bottom - gClient.top);\n }\n };\n Filter.prototype.clickHandler = function (e) {\n if (this.filterSettings.mode === 'Immediate' || this.parent.filterSettings.type === 'Menu' ||\n this.parent.filterSettings.type === 'CheckBox' || this.parent.filterSettings.type === 'Excel') {\n var gObj = this.parent;\n var target = e.target;\n var datepickerEle = target.classList.contains('e-day'); // due to datepicker popup cause\n if (parentsUntil(target, 'e-filter-popup') || target.classList.contains('e-filtermenudiv')) {\n return;\n }\n else if (this.filterModule &&\n (!parentsUntil(target, 'e-popup-wrapper')\n && (!closest(target, '.e-filter-item.e-menu-item'))\n && (!parentsUntil(target, 'e-popup'))) && !datepickerEle) {\n this.filterModule.closeDialog(target);\n }\n if (this.filterSettings.mode === 'Immediate' && target.classList.contains('e-clear-icon')) {\n var targetText = target.previousElementSibling;\n this.removeFilteredColsByField(targetText.id.slice(0, -14)); //Length of _filterBarcell = 14\n }\n }\n };\n Filter.prototype.filterHandler = function (args) {\n var filterIconElement;\n this.actualPredicate[args.field] = args.actualPredicate;\n var dataManager = new DataManager(this.filterSettings.columns);\n var query = new Query().where('field', this.filterOperators.equal, args.field);\n var result = dataManager.executeLocal(query);\n for (var i = 0; i < result.length; i++) {\n var index = -1;\n for (var j = 0; j < this.filterSettings.columns.length; j++) {\n if (result[i].field === this.filterSettings.columns[j].field) {\n index = j;\n break;\n }\n }\n if (index !== -1) {\n this.filterSettings.columns.splice(index, 1);\n }\n }\n if (this.values[args.field]) {\n delete this.values[args.field];\n }\n var iconClass = this.parent.showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n filterIconElement = this.parent.getColumnHeaderByField(args.field).querySelector(iconClass);\n if (args.action === 'filtering') {\n this.filterSettings.columns = this.filterSettings.columns.concat(args.filterCollection);\n if (this.filterSettings.columns.length && filterIconElement) {\n filterIconElement.classList.add('e-filtered');\n }\n }\n else {\n if (filterIconElement) {\n filterIconElement.classList.remove('e-filtered');\n }\n this.parent.refresh(); //hot-fix onpropertychanged not working for object { array } \n }\n this.parent.dataBind();\n };\n Filter.prototype.addFilteredClass = function () {\n var filterIconElement;\n filterIconElement = this.parent.getColumnHeaderByField(this.fieldName).querySelector('.e-icon-filter');\n if (filterIconElement) {\n filterIconElement.classList.add('e-filtered');\n }\n };\n return Filter;\n}());\nexport { Filter };\n","import { EventHandler, createElement, detach, formatUnit, Browser, closest } from '@syncfusion/ej2-base';\nimport { ColumnWidthService } from '../services/width-controller';\nimport * as events from '../base/constant';\nimport { getScrollBarWidth } from '../base/util';\nexport var resizeClassList = {\n root: 'e-rhandler',\n suppress: 'e-rsuppress',\n icon: 'e-ricon',\n helper: 'e-rhelper',\n header: 'th.e-headercell',\n cursor: 'e-rcursor'\n};\n/**\n * `Resize` module is used to handle Resize to fit for columns.\n * @hidden\n * @private\n */\nvar Resize = /** @class */ (function () {\n /**\n * Constructor for the Grid resize module\n * @hidden\n */\n function Resize(parent) {\n this.tapped = false;\n this.isDblClk = true;\n this.parent = parent;\n if (this.parent.isDestroyed) {\n return;\n }\n this.widthService = new ColumnWidthService(parent);\n this.addEventListener();\n }\n /**\n * Resize by field names.\n * @param {string|string[]} fName - Defines the field name.\n * @return {void}\n */\n Resize.prototype.autoFitColumns = function (fName) {\n var columnName = (fName === undefined || fName === null || fName.length <= 0) ?\n this.parent.getColumns().map(function (x) { return x.field; }) : (typeof fName === 'string') ? [fName] : fName;\n this.findColumn(columnName);\n };\n Resize.prototype.resizeColumn = function (fName, index, id) {\n var gObj = this.parent;\n var tWidth = 0;\n var headerTable;\n var contentTable;\n var headerDivTag = 'e-gridheader';\n var contentDivTag = 'e-gridcontent';\n var indentWidth = 0;\n var uid = id ? id : this.parent.getUidByColumnField(fName);\n var columnIndex = this.parent.getNormalizedColumnIndex(uid);\n var headerTextClone;\n var contentTextClone;\n var frzCols = gObj.getFrozenColumns();\n if (frzCols) {\n if (index < frzCols) {\n headerTable = gObj.getHeaderTable();\n contentTable = gObj.getContentTable();\n headerTextClone = headerTable.querySelectorAll('th')[columnIndex].cloneNode(true);\n contentTextClone = contentTable.querySelectorAll(\"td:nth-child(\" + (columnIndex + 1) + \")\");\n }\n else {\n headerTable = gObj.getHeaderContent().querySelector('.e-movableheader').children[0];\n contentTable = gObj.getContent().querySelector('.e-movablecontent').children[0];\n headerTextClone = headerTable.querySelectorAll('th')[columnIndex - frzCols].cloneNode(true);\n contentTextClone = contentTable.querySelectorAll(\"td:nth-child(\" + ((columnIndex - frzCols) + 1) + \")\");\n }\n }\n else {\n headerTable = gObj.getHeaderTable();\n contentTable = gObj.getContentTable();\n headerTextClone = headerTable.querySelectorAll('th')[columnIndex].cloneNode(true);\n contentTextClone = contentTable.querySelectorAll(\"td:nth-child(\" + (columnIndex + 1) + \"):not(.e-groupcaption)\");\n }\n var indentWidthClone = headerTable.querySelector('tr').querySelectorAll('.e-grouptopleftcell');\n if (indentWidthClone.length > 0) {\n for (var i = 0; i < indentWidthClone.length; i++) {\n indentWidth += indentWidthClone[i].offsetWidth;\n }\n }\n var headerText = [headerTextClone];\n var contentText = [];\n for (var i = 0; i < contentTextClone.length; i++) {\n contentText[i] = contentTextClone[i].cloneNode(true);\n }\n var wHeader = this.createTable(headerTable, headerText, headerDivTag);\n var wContent = this.createTable(contentTable, contentText, contentDivTag);\n var columnbyindex = gObj.getColumns()[index];\n var result;\n var width = (wHeader > wContent) ? columnbyindex.width = formatUnit(wHeader) : columnbyindex.width = formatUnit(wContent);\n this.widthService.setColumnWidth(gObj.getColumns()[index]);\n result = gObj.getColumns().some(function (x) { return x.width === null || x.width === undefined || x.width.length <= 0; });\n if (result === false) {\n gObj.getColumns().forEach(function (element) {\n if (element.visible) {\n tWidth = tWidth + parseInt(element.width, 10);\n }\n });\n }\n var calcTableWidth = tWidth + indentWidth;\n if (tWidth > 0 && !gObj.getFrozenColumns()) {\n headerTable.style.width = formatUnit(calcTableWidth);\n contentTable.style.width = formatUnit(calcTableWidth);\n }\n var tableWidth = headerTable.offsetWidth;\n var contentwidth = (gObj.getContent().scrollWidth);\n if (contentwidth > tableWidth) {\n headerTable.classList.add('e-tableborder');\n contentTable.classList.add('e-tableborder');\n }\n else {\n headerTable.classList.remove('e-tableborder');\n contentTable.classList.remove('e-tableborder');\n }\n };\n /**\n * To destroy the resize\n * @return {void}\n * @hidden\n */\n Resize.prototype.destroy = function () {\n this.widthService = null;\n this.unwireEvents();\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Resize.prototype.getModuleName = function () {\n return 'resize';\n };\n Resize.prototype.findColumn = function (fName) {\n var _this = this;\n fName.forEach(function (element) {\n var fieldName = element;\n var columnIndex = _this.parent.getColumnIndexByField(fieldName);\n if (_this.parent.getColumns()[columnIndex].visible === true) {\n _this.resizeColumn(fieldName, columnIndex);\n }\n });\n };\n /**\n * To create table for autofit\n * @hidden\n */\n Resize.prototype.createTable = function (table, text, tag) {\n var myTableDiv = createElement('div');\n myTableDiv.className = this.parent.element.className;\n myTableDiv.style.cssText = 'display: inline-block;visibility:hidden;position:absolute';\n var mySubDiv = createElement('div');\n mySubDiv.className = tag;\n var myTable = createElement('table');\n myTable.className = table.className;\n myTable.style.cssText = 'table-layout: auto;width: auto';\n var myTr = createElement('tr');\n text.forEach(function (element) {\n var tr = myTr.cloneNode();\n tr.className = table.querySelector('tr').className;\n tr.appendChild(element);\n myTable.appendChild(tr);\n });\n mySubDiv.appendChild(myTable);\n myTableDiv.appendChild(mySubDiv);\n document.body.appendChild(myTableDiv);\n var offsetWidthValue = myTable.getBoundingClientRect().width;\n document.body.removeChild(myTableDiv);\n return Math.ceil(offsetWidthValue);\n };\n /**\n * @hidden\n */\n Resize.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.headerRefreshed, this.refreshHeight, this);\n this.parent.on(events.initialEnd, this.wireEvents, this);\n };\n /**\n * @hidden\n */\n Resize.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.headerRefreshed, this.refreshHeight);\n this.parent.off(events.initialEnd, this.wireEvents);\n };\n /**\n * @hidden\n */\n Resize.prototype.render = function () {\n this.unwireEvents();\n this.wireEvents();\n this.setHandlerHeight();\n };\n Resize.prototype.refreshHeight = function () {\n this.getResizeHandlers().forEach(function (ele) {\n ele.style.height = ele.parentElement.offsetHeight + 'px';\n });\n };\n Resize.prototype.wireEvents = function () {\n EventHandler.add(this.parent.getHeaderTable(), Browser.touchStartEvent, this.resizeStart, this);\n EventHandler.add(this.parent.getHeaderTable(), events.dblclick, this.callAutoFit, this);\n };\n Resize.prototype.unwireEvents = function () {\n EventHandler.remove(this.parent.getHeaderTable(), Browser.touchStartEvent, this.resizeStart);\n EventHandler.remove(this.parent.getHeaderTable(), events.dblclick, this.callAutoFit);\n };\n Resize.prototype.getResizeHandlers = function () {\n return this.parent.getFrozenColumns() ?\n [].slice.call(this.parent.getHeaderContent().querySelectorAll('.' + resizeClassList.root))\n : [].slice.call(this.parent.getHeaderTable().querySelectorAll('.' + resizeClassList.root));\n };\n Resize.prototype.setHandlerHeight = function () {\n [].slice.call(this.parent.getHeaderTable().querySelectorAll('.' + resizeClassList.suppress)).forEach(function (ele) {\n ele.style.height = ele.parentElement.offsetHeight + 'px';\n });\n };\n Resize.prototype.callAutoFit = function (e) {\n if (e.target.classList.contains('e-rhandler')) {\n var col = this.getTargetColumn(e);\n this.resizeColumn(col.field, this.parent.getNormalizedColumnIndex(col.uid), col.uid);\n var header = closest(e.target, resizeClassList.header);\n header.classList.add('e-resized');\n }\n };\n Resize.prototype.resizeStart = function (e) {\n if (e.target.classList.contains('e-rhandler')) {\n if (!this.helper) {\n if (this.getScrollBarWidth() === 0) {\n for (var _i = 0, _a = this.refreshColumnWidth(); _i < _a.length; _i++) {\n var col = _a[_i];\n this.widthService.setColumnWidth(col);\n }\n this.widthService.setWidthToTable();\n }\n this.element = e.target;\n this.parentElementWidth = this.parent.element.getBoundingClientRect().width;\n this.appendHelper();\n this.column = this.getTargetColumn(e);\n this.pageX = this.getPointX(e);\n if (this.parent.enableRtl) {\n this.minMove = parseInt(this.column.width.toString(), 10)\n - (this.column.minWidth ? parseInt(this.column.minWidth.toString(), 10) : 0);\n }\n else {\n this.minMove = (this.column.minWidth ? parseInt(this.column.minWidth.toString(), 10) : 0)\n - parseInt(this.column.width.toString(), 10);\n }\n this.minMove += this.pageX;\n }\n if (Browser.isDevice && !this.helper.classList.contains(resizeClassList.icon)) {\n this.helper.classList.add(resizeClassList.icon);\n EventHandler.add(document, Browser.touchStartEvent, this.removeHelper, this);\n EventHandler.add(this.helper, Browser.touchStartEvent, this.resizeStart, this);\n }\n else {\n var args = {\n e: e,\n column: this.column\n };\n this.parent.trigger(events.resizeStart, args);\n if (args.cancel) {\n this.cancelResizeAction();\n return;\n }\n EventHandler.add(document, Browser.touchEndEvent, this.resizeEnd, this);\n EventHandler.add(this.parent.element, Browser.touchMoveEvent, this.resizing, this);\n this.updateCursor('add');\n }\n }\n };\n Resize.prototype.cancelResizeAction = function (removeEvents) {\n if (removeEvents) {\n EventHandler.remove(this.parent.element, Browser.touchMoveEvent, this.resizing);\n EventHandler.remove(document, Browser.touchEndEvent, this.resizeEnd);\n this.updateCursor('remove');\n }\n if (Browser.isDevice) {\n EventHandler.remove(document, Browser.touchStartEvent, this.removeHelper);\n EventHandler.remove(this.helper, Browser.touchStartEvent, this.resizeStart);\n }\n detach(this.helper);\n this.refresh();\n };\n Resize.prototype.getWidth = function (width, minWidth, maxWidth) {\n if (minWidth && width < minWidth) {\n return minWidth;\n }\n else if ((maxWidth && width > maxWidth)) {\n return maxWidth;\n }\n else {\n return width;\n }\n };\n Resize.prototype.resizing = function (e) {\n if (this.parent.allowTextWrap) {\n if (this.parent.getFrozenColumns()) {\n this.parent.notify(events.freezeRender, { case: 'textwrap' });\n }\n this.element.style.height = this.element.parentElement.offsetHeight + 'px';\n this.setHelperHeight();\n }\n var pageX = this.getPointX(e);\n var mousemove = this.parent.enableRtl ? -(pageX - this.pageX) : (pageX - this.pageX);\n var colData = {\n width: parseInt(this.widthService.getWidth(this.column).toString(), 10) + mousemove,\n minWidth: this.column.minWidth ? parseInt(this.column.minWidth.toString(), 10) : null,\n maxWidth: this.column.maxWidth ? parseInt(this.column.maxWidth.toString(), 10) : null\n };\n var width = this.getWidth(colData.width, colData.minWidth, colData.maxWidth);\n if ((!this.parent.enableRtl && this.minMove >= pageX) || (this.parent.enableRtl && this.minMove <= pageX)) {\n width = this.column.minWidth ? parseInt(this.column.minWidth.toString(), 10) : 0;\n this.pageX = pageX = this.minMove;\n }\n if (width !== parseInt(this.column.width.toString(), 10)) {\n this.pageX = pageX;\n this.column.width = formatUnit(width);\n var args = {\n e: e,\n column: this.column\n };\n this.parent.trigger(events.onResize, args);\n if (args.cancel) {\n this.cancelResizeAction(true);\n return;\n }\n this.widthService.setColumnWidth(this.column, null, 'resize');\n this.updateHelper();\n }\n this.isDblClk = false;\n };\n Resize.prototype.resizeEnd = function (e) {\n if (!this.helper || this.parent.isDestroyed) {\n return;\n }\n EventHandler.remove(this.parent.element, Browser.touchMoveEvent, this.resizing);\n EventHandler.remove(document, Browser.touchEndEvent, this.resizeEnd);\n this.updateCursor('remove');\n detach(this.helper);\n var args = {\n e: e,\n column: this.column\n };\n this.parent.trigger(events.resizeStop, args);\n closest(this.element, '.e-headercell').classList.add('e-resized');\n this.refresh();\n this.doubleTapEvent(e);\n this.isDblClk = true;\n };\n Resize.prototype.getPointX = function (e) {\n if (e.touches && e.touches.length) {\n return e.touches[0].pageX;\n }\n else {\n return e.pageX;\n }\n };\n Resize.prototype.refreshColumnWidth = function () {\n var columns = this.parent.getColumns();\n for (var _i = 0, _a = [].slice.apply(this.parent.getHeaderTable().querySelectorAll('th.e-headercell')); _i < _a.length; _i++) {\n var ele = _a[_i];\n for (var _b = 0, columns_1 = columns; _b < columns_1.length; _b++) {\n var column = columns_1[_b];\n if (ele.querySelector('[e-mappinguid]') &&\n ele.querySelector('[e-mappinguid]').getAttribute('e-mappinguid') === column.uid && column.visible) {\n column.width = ele.getBoundingClientRect().width;\n break;\n }\n }\n }\n return columns;\n };\n Resize.prototype.getTargetColumn = function (e) {\n var cell = closest(e.target, resizeClassList.header);\n var uid = cell.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n return this.parent.getColumnByUid(uid);\n };\n Resize.prototype.updateCursor = function (action) {\n var headerRows = [].slice.call(this.parent.getHeaderContent().querySelectorAll('th'));\n headerRows.push(this.parent.element);\n for (var _i = 0, headerRows_1 = headerRows; _i < headerRows_1.length; _i++) {\n var row = headerRows_1[_i];\n row.classList[action](resizeClassList.cursor);\n }\n };\n Resize.prototype.refresh = function () {\n this.column = null;\n this.pageX = null;\n this.element = null;\n this.helper = null;\n };\n Resize.prototype.appendHelper = function () {\n this.helper = createElement('div', {\n className: resizeClassList.helper\n });\n this.parent.element.appendChild(this.helper);\n this.setHelperHeight();\n };\n Resize.prototype.setHelperHeight = function () {\n var height = this.parent.getContent().offsetHeight - this.getScrollBarWidth();\n var rect = closest(this.element, resizeClassList.header);\n var tr = [].slice.call(this.parent.getHeaderContent().querySelectorAll('tr'));\n var frzCols = this.parent.getFrozenColumns();\n if (frzCols) {\n if (rect.parentElement.children.length !== frzCols) {\n tr.splice(0, tr.length / 2);\n }\n else {\n tr.splice(tr.length / 2, tr.length / 2);\n }\n }\n for (var i = tr.indexOf(rect.parentElement); i < tr.length; i++) {\n height += tr[i].offsetHeight;\n }\n var pos = this.calcPos(rect);\n pos.left += (this.parent.enableRtl ? 0 - 1 : rect.offsetWidth - 2);\n this.helper.style.cssText = 'height: ' + height + 'px; top: ' + pos.top + 'px; left:' + Math.floor(pos.left) + 'px;';\n };\n Resize.prototype.getScrollBarWidth = function (height) {\n var ele = this.parent.getFrozenColumns() ? this.parent.getContent().querySelector('.e-movablecontent')\n : this.parent.getContent().firstChild;\n return (ele.scrollHeight > ele.clientHeight && height) ||\n ele.scrollWidth > ele.clientWidth ? getScrollBarWidth() : 0;\n };\n Resize.prototype.removeHelper = function (e) {\n var cls = e.target.classList;\n if (!(cls.contains(resizeClassList.root) || cls.contains(resizeClassList.icon)) && this.helper) {\n EventHandler.remove(document, Browser.touchStartEvent, this.removeHelper);\n EventHandler.remove(this.helper, Browser.touchStartEvent, this.resizeStart);\n detach(this.helper);\n this.refresh();\n }\n };\n Resize.prototype.updateHelper = function () {\n var rect = closest(this.element, resizeClassList.header);\n var left = Math.floor(this.calcPos(rect).left + (this.parent.enableRtl ? 0 - 1 : rect.offsetWidth - 2));\n var borderWidth = 2; // to maintain the helper inside of grid element.\n if (left > this.parentElementWidth) {\n left = this.parentElementWidth - borderWidth;\n }\n if (this.parent.getFrozenColumns()) {\n var table = closest(rect, '.e-table');\n var fLeft = table.offsetLeft;\n if (left < fLeft) {\n left = fLeft;\n }\n }\n this.helper.style.left = left + 'px';\n };\n Resize.prototype.calcPos = function (elem) {\n var parentOffset = {\n top: 0,\n left: 0\n };\n var offset = elem.getBoundingClientRect();\n var doc = elem.ownerDocument;\n var offsetParent = elem.offsetParent || doc.documentElement;\n while (offsetParent &&\n (offsetParent === doc.body || offsetParent === doc.documentElement) &&\n offsetParent.style.position === 'static') {\n offsetParent = offsetParent.parentNode;\n }\n if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n parentOffset = offsetParent.getBoundingClientRect();\n }\n return {\n top: offset.top - parentOffset.top,\n left: offset.left - parentOffset.left\n };\n };\n Resize.prototype.doubleTapEvent = function (e) {\n if (this.getUserAgent() && this.isDblClk) {\n if (!this.tapped) {\n this.tapped = setTimeout(this.timeoutHandler(), 300);\n }\n else {\n clearTimeout(this.tapped);\n this.callAutoFit(e);\n this.tapped = null;\n }\n }\n };\n Resize.prototype.getUserAgent = function () {\n var userAgent = Browser.userAgent.toLowerCase();\n return /iphone|ipod|ipad/.test(userAgent);\n };\n Resize.prototype.timeoutHandler = function () {\n this.tapped = null;\n };\n return Resize;\n}());\nexport { Resize };\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { closest as closestElement, removeClass, classList, createElement, remove } from '@syncfusion/ej2-base';\nimport { getElementIndex, inArray, parentsUntil, getPosition, isActionPrevent } from '../base/util';\nimport * as events from '../base/constant';\n/**\n *\n * The `Reorder` module is used for reordering columns.\n */\nvar Reorder = /** @class */ (function () {\n /**\n * Constructor for the Grid reorder module\n * @hidden\n */\n function Reorder(parent) {\n this.parent = parent;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.headerDrop, this.headerDrop, this);\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n this.parent.on(events.reorderComplete, this.onActionComplete, this);\n this.parent.on(events.columnDrag, this.drag, this);\n this.parent.on(events.columnDragStart, this.dragStart, this);\n this.parent.on(events.columnDragStop, this.dragStop, this);\n this.parent.on(events.headerDrop, this.headerDrop, this);\n this.parent.on(events.headerRefreshed, this.createReorderElement, this);\n }\n Reorder.prototype.chkDropPosition = function (srcElem, destElem) {\n return (srcElem.parentElement.isEqualNode(destElem.parentElement) || (this.parent.getFrozenColumns()\n && Array.prototype.indexOf.call(closestElement(srcElem, 'thead').children, srcElem.parentElement)\n === Array.prototype.indexOf.call(closestElement(destElem, 'thead').children, destElem.parentElement)))\n && this.targetParentContainerIndex(srcElem, destElem) > -1;\n };\n Reorder.prototype.chkDropAllCols = function (srcElem, destElem) {\n var isFound;\n var headers = this.getHeaderCells();\n var header;\n while (!isFound && headers.length > 0) {\n header = headers.pop();\n isFound = srcElem !== header && this.targetParentContainerIndex(srcElem, destElem) > -1;\n }\n return isFound;\n };\n Reorder.prototype.findColParent = function (col, cols, parent) {\n parent = parent;\n for (var i = 0, len = cols.length; i < len; i++) {\n if (col === cols[i]) {\n return true;\n }\n else if (cols[i].columns) {\n var cnt = parent.length;\n parent.push(cols[i]);\n if (!this.findColParent(col, cols[i].columns, parent)) {\n parent.splice(cnt, parent.length - cnt);\n }\n else {\n return true;\n }\n }\n }\n return false;\n };\n Reorder.prototype.getColumnsModel = function (cols) {\n var columnModel = [];\n var subCols = [];\n for (var i = 0, len = cols.length; i < len; i++) {\n columnModel.push(cols[i]);\n if (cols[i].columns) {\n subCols = subCols.concat(cols[i].columns);\n }\n }\n if (subCols.length) {\n columnModel = columnModel.concat(this.getColumnsModel(subCols));\n }\n return columnModel;\n };\n Reorder.prototype.headerDrop = function (e) {\n var gObj = this.parent;\n if (!closestElement(e.target, 'th')) {\n return;\n }\n var destElem = closestElement(e.target, '.e-headercell');\n if (destElem && !(!this.chkDropPosition(this.element, destElem) || !this.chkDropAllCols(this.element, destElem))) {\n if (this.parent.enableColumnVirtualization) {\n var columns = this.parent.columns;\n var sourceUid_1 = this.element.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n var col = this.parent.getColumns(true).filter(function (col) { return col.uid === sourceUid_1; });\n var colMatchIndex_1 = null;\n var column = col[0];\n var destUid_1 = destElem.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n var bool = columns.some(function (col, index) {\n if (col.uid === destUid_1) {\n colMatchIndex_1 = index;\n return col.uid === destUid_1;\n }\n return false;\n });\n if (!isNullOrUndefined(colMatchIndex_1)) {\n this.moveColumns(colMatchIndex_1, column);\n }\n }\n else {\n var headers = this.getHeaderCells();\n var oldIdx = getElementIndex(this.element, headers);\n var columns = this.getColumnsModel(this.parent.columns);\n var column = columns[oldIdx];\n var newIndex = this.targetParentContainerIndex(this.element, destElem);\n this.moveColumns(newIndex, column);\n }\n }\n };\n Reorder.prototype.isActionPrevent = function (gObj) {\n return isActionPrevent(gObj);\n };\n Reorder.prototype.moveColumns = function (destIndex, column) {\n var gObj = this.parent;\n if (this.isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.moveColumns, arg1: destIndex, arg2: column });\n return;\n }\n var parent = this.getColParent(column, this.parent.columns);\n var cols = parent ? parent.columns : this.parent.columns;\n var srcIdx = inArray(column, cols);\n if (!gObj.allowReordering || srcIdx === destIndex || srcIdx === -1 || destIndex === -1) {\n return;\n }\n cols.splice(destIndex, 0, cols.splice(srcIdx, 1)[0]);\n gObj.getColumns(true);\n gObj.notify(events.columnPositionChanged, { fromIndex: destIndex, toIndex: srcIdx });\n gObj.notify(events.modelChanged, {\n type: events.actionBegin, requestType: 'reorder'\n });\n };\n Reorder.prototype.targetParentContainerIndex = function (srcElem, destElem) {\n var headers = this.getHeaderCells();\n var cols = this.parent.columns;\n var flatColumns = this.getColumnsModel(cols);\n var parent = this.getColParent(flatColumns[getElementIndex(srcElem, headers)], cols);\n cols = parent ? parent.columns : cols;\n return inArray(flatColumns[getElementIndex(destElem, headers)], cols);\n };\n Reorder.prototype.getHeaderCells = function () {\n if (this.parent.getFrozenColumns()) {\n var fTh = void 0;\n var mTh = void 0;\n var fHeaders = [];\n var fRows = [].slice.call(this.parent.getHeaderTable().querySelectorAll('.e-columnheader'));\n var mRows = [].slice.call(this.parent.getHeaderContent()\n .querySelector('.e-movableheader').querySelectorAll('.e-columnheader'));\n for (var i = 0; i < fRows.length; i++) {\n fTh = [].slice.call(fRows[i].getElementsByClassName('e-headercell'));\n mTh = [].slice.call(mRows[i].getElementsByClassName('e-headercell'));\n fHeaders = fHeaders.concat(fTh);\n for (var j = 0; j < mTh.length; j++) {\n if (!fTh.length || j !== 0 || fTh[fTh.length - 1].innerText !== mTh[0].innerText) {\n fHeaders.push(mTh[j]);\n }\n }\n }\n return fHeaders;\n }\n else {\n return [].slice.call(this.parent.element.getElementsByClassName('e-headercell'));\n }\n };\n Reorder.prototype.getColParent = function (column, columns) {\n var parents = [];\n this.findColParent(column, columns, parents);\n return parents[parents.length - 1];\n };\n /**\n * Changes the position of the Grid columns by field names.\n * @param {string} fromFName - Defines the origin field name.\n * @param {string} toFName - Defines the destination field name.\n * @return {void}\n */\n Reorder.prototype.reorderColumns = function (fromFName, toFName) {\n var column = this.parent.getColumnByField(toFName);\n var parent = this.getColParent(column, this.parent.columns);\n var columns = parent ? parent.columns : this.parent.columns;\n var destIndex = inArray(column, columns);\n if (destIndex > -1) {\n this.moveColumns(destIndex, this.parent.getColumnByField(fromFName));\n }\n };\n Reorder.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.createReorderElement();\n }\n };\n Reorder.prototype.createReorderElement = function () {\n var header = this.parent.element.querySelector('.e-headercontent');\n this.upArrow = header.appendChild(createElement('div', { className: 'e-icons e-icon-reorderuparrow e-reorderuparrow', attrs: { style: 'display:none' } }));\n this.downArrow = header.appendChild(createElement('div', { className: 'e-icons e-icon-reorderdownarrow e-reorderdownarrow', attrs: { style: 'display:none' } }));\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n Reorder.prototype.onActionComplete = function (e) {\n this.parent.trigger(events.actionComplete, extend(e, { type: events.actionComplete }));\n };\n /**\n * To destroy the reorder\n * @return {void}\n * @hidden\n */\n Reorder.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n remove(this.upArrow);\n remove(this.downArrow);\n this.parent.off(events.headerDrop, this.headerDrop);\n this.parent.off(events.uiUpdate, this.enableAfterRender);\n this.parent.off(events.reorderComplete, this.onActionComplete);\n this.parent.off(events.columnDrag, this.drag);\n this.parent.off(events.columnDragStart, this.dragStart);\n this.parent.off(events.columnDragStop, this.dragStop);\n this.parent.off(events.headerRefreshed, this.createReorderElement);\n //call ejdrag and drop destroy\n };\n Reorder.prototype.drag = function (e) {\n var gObj = this.parent;\n var target = e.target;\n var closest = closestElement(target, '.e-headercell:not(.e-stackedHeaderCell)');\n var cloneElement = gObj.element.querySelector('.e-cloneproperties');\n var isLeft = this.x > getPosition(e.event).x + gObj.getContent().firstElementChild.scrollLeft;\n removeClass(gObj.getHeaderTable().querySelectorAll('.e-reorderindicate'), ['e-reorderindicate']);\n this.setDisplay('none');\n this.stopTimer();\n classList(cloneElement, ['e-defaultcur'], ['e-notallowedcur']);\n this.updateScrollPostion(e.event);\n if (closest && !closest.isEqualNode(this.element)) {\n target = closest;\n //consider stacked, detail header cell \n if (!(!this.chkDropPosition(this.element, target) || !this.chkDropAllCols(this.element, target))) {\n this.updateArrowPosition(target, isLeft);\n classList(target, ['e-allowDrop', 'e-reorderindicate'], []);\n }\n else if (!(gObj.allowGrouping && parentsUntil(e.target, 'e-groupdroparea'))) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n }\n }\n gObj.trigger(events.columnDrag, { target: target, draggableType: 'headercell', column: e.column });\n };\n Reorder.prototype.updateScrollPostion = function (e) {\n var _this = this;\n var frzCols = this.parent.getFrozenColumns();\n var x = getPosition(e).x;\n var cliRect = this.parent.element.getBoundingClientRect();\n var cliRectBaseLeft = frzCols ? this.parent.element.querySelector('.e-movableheader')\n .getBoundingClientRect().left : cliRect.left;\n var cliRectBaseRight = cliRect.right;\n var scrollElem = frzCols ? this.parent.getContent().querySelector('.e-movablecontent')\n : this.parent.getContent().firstElementChild;\n if (x > cliRectBaseLeft && x < cliRectBaseLeft + 35) {\n this.timer = window.setInterval(function () { _this.setScrollLeft(scrollElem, true); }, 50);\n }\n else if (x < cliRectBaseRight && x > cliRectBaseRight - 35) {\n this.timer = window.setInterval(function () { _this.setScrollLeft(scrollElem, false); }, 50);\n }\n };\n Reorder.prototype.setScrollLeft = function (scrollElem, isLeft) {\n var scrollLeft = scrollElem.scrollLeft;\n scrollElem.scrollLeft = scrollElem.scrollLeft + (isLeft ? -5 : 5);\n if (scrollLeft !== scrollElem.scrollLeft) {\n this.setDisplay('none');\n }\n };\n Reorder.prototype.stopTimer = function () {\n window.clearInterval(this.timer);\n };\n Reorder.prototype.updateArrowPosition = function (target, isLeft) {\n var cliRect = target.getBoundingClientRect();\n var cliRectBase = this.parent.element.getBoundingClientRect();\n if ((isLeft && cliRect.left < cliRectBase.left) || (!isLeft && cliRect.right > cliRectBase.right)) {\n return;\n }\n this.upArrow.style.top = cliRect.top + cliRect.height - cliRectBase.top + 'px';\n this.downArrow.style.top = cliRect.top - cliRectBase.top - 4 + 'px';\n this.upArrow.style.left = this.downArrow.style.left = (isLeft ? cliRect.left : cliRect.right) - cliRectBase.left - 4 + 'px';\n this.setDisplay('');\n };\n Reorder.prototype.dragStart = function (e) {\n var gObj = this.parent;\n var target = e.target;\n this.element = target.classList.contains('e-headercell') ? target :\n parentsUntil(target, 'e-headercell');\n this.x = getPosition(e.event).x + gObj.getContent().firstElementChild.scrollLeft;\n gObj.trigger(events.columnDragStart, {\n target: target, draggableType: 'headercell', column: e.column\n });\n };\n Reorder.prototype.dragStop = function (e) {\n var gObj = this.parent;\n this.setDisplay('none');\n this.stopTimer();\n if (!e.cancel) {\n gObj.trigger(events.columnDrop, { target: e.target, draggableType: 'headercell', column: e.column });\n }\n removeClass(gObj.getHeaderTable().querySelectorAll('.e-reorderindicate'), ['e-reorderindicate']);\n };\n Reorder.prototype.setDisplay = function (display) {\n this.upArrow.style.display = display;\n this.downArrow.style.display = display;\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Reorder.prototype.getModuleName = function () {\n return 'reorder';\n };\n return Reorder;\n}());\nexport { Reorder };\n","import { Draggable } from '@syncfusion/ej2-base';\nimport { extend } from '@syncfusion/ej2-base';\nimport { remove, createElement, closest as closestElement, classList } from '@syncfusion/ej2-base';\nimport { parentsUntil, removeElement, getPosition } from '../base/util';\nimport * as events from '../base/constant';\n/**\n *\n * Reorder module is used to handle row reordering.\n * @hidden\n */\nvar RowDD = /** @class */ (function () {\n /**\n * Constructor for the Grid print module\n * @hidden\n */\n function RowDD(parent) {\n var _this = this;\n //Internal variables \n this.selectedRows = [];\n this.helper = function (e) {\n var gObj = _this.parent;\n if (document.getElementsByClassName('e-griddragarea').length ||\n (!e.sender.target.classList.contains('e-selectionbackground') && gObj.selectionSettings.type !== 'Single')) {\n return false;\n }\n var visualElement = createElement('div', {\n className: 'e-cloneproperties e-draganddrop e-grid e-dragclone',\n styles: 'height:\"auto\", z-index:2, width:' + gObj.element.offsetWidth\n });\n var table = createElement('table', { styles: 'width:' + gObj.element.offsetWidth });\n var tbody = createElement('tbody');\n if (gObj.selectionSettings.mode === 'Row' && gObj.selectionSettings.type === 'Single') {\n var index = parseInt(e.sender.target.parentElement.getAttribute('aria-rowindex'), 10);\n gObj.selectRow(index);\n }\n var selectedRows = gObj.getSelectedRows();\n for (var i = 0, len = selectedRows.length; i < len; i++) {\n var selectedRow = selectedRows[i].cloneNode(true);\n removeElement(selectedRow, '.e-indentcell');\n removeElement(selectedRow, '.e-detailrowcollapse');\n removeElement(selectedRow, '.e-detailrowexpand');\n tbody.appendChild(selectedRow);\n }\n table.appendChild(tbody);\n visualElement.appendChild(table);\n gObj.element.appendChild(visualElement);\n return visualElement;\n };\n this.dragStart = function (e) {\n var gObj = _this.parent;\n if (document.getElementsByClassName('e-griddragarea').length) {\n return;\n }\n gObj.trigger(events.rowDragStart, {\n rows: gObj.getSelectedRows(),\n target: e.target, draggableType: 'rows', data: gObj.getSelectedRecords()\n });\n var dropElem = document.getElementById(gObj.rowDropSettings.targetID);\n if (gObj.rowDropSettings.targetID && dropElem && dropElem.ej2_instances) {\n dropElem.ej2_instances[0].getContent().classList.add('e-allowRowDrop');\n }\n _this.isDragStop = false;\n };\n this.drag = function (e) {\n var gObj = _this.parent;\n var cloneElement = _this.parent.element.querySelector('.e-cloneproperties');\n var target = _this.getElementFromPosition(cloneElement, e.event);\n classList(cloneElement, ['e-defaultcur'], ['e-notallowedcur']);\n gObj.trigger(events.rowDrag, {\n rows: gObj.getSelectedRows(),\n target: target, draggableType: 'rows', data: gObj.getSelectedRecords()\n });\n gObj.element.classList.add('e-rowdrag');\n if (!parentsUntil(target, 'e-gridcontent') ||\n parentsUntil(cloneElement.parentElement, 'e-grid').id === parentsUntil(target, 'e-grid').id) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n }\n };\n this.dragStop = function (e) {\n var gObj = _this.parent;\n if (_this.parent.isDestroyed) {\n return;\n }\n var target = _this.getElementFromPosition(e.helper, e.event);\n gObj.element.classList.remove('e-rowdrag');\n var dropElem = document.getElementById(gObj.rowDropSettings.targetID);\n if (gObj.rowDropSettings.targetID && dropElem && dropElem.ej2_instances) {\n dropElem.ej2_instances[0].getContent().classList.remove('e-allowRowDrop');\n }\n gObj.trigger(events.rowDrop, {\n target: target, draggableType: 'rows',\n rows: gObj.getSelectedRows(), data: gObj.getSelectedRecords()\n });\n if (!parentsUntil(target, 'e-gridcontent')) {\n remove(e.helper);\n return;\n }\n };\n this.parent = parent;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialEnd, this.initializeDrag, this);\n this.parent.on(events.columnDrop, this.columnDrop, this);\n this.parent.on(events.rowDragAndDropComplete, this.onActionComplete, this);\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n }\n RowDD.prototype.initializeDrag = function () {\n var gObj = this.parent;\n var column;\n var drag;\n drag = new Draggable(gObj.getContent(), {\n dragTarget: '.e-rowcell',\n distance: 5,\n helper: this.helper,\n dragStart: this.dragStart,\n drag: this.drag,\n dragStop: this.dragStop\n });\n };\n RowDD.prototype.getElementFromPosition = function (element, event) {\n var target;\n var position = getPosition(event);\n element.style.display = 'none';\n target = document.elementFromPoint(position.x, position.y);\n element.style.display = '';\n return target;\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n RowDD.prototype.onActionComplete = function (e) {\n this.parent.trigger(events.actionComplete, extend(e, { type: events.actionComplete }));\n };\n RowDD.prototype.getTargetIdx = function (targetRow) {\n return targetRow ? parseInt(targetRow.getAttribute('aria-rowindex'), 10) : 0;\n };\n RowDD.prototype.columnDrop = function (e) {\n var gObj = this.parent;\n if (e.droppedElement.getAttribute('action') !== 'grouping') {\n var targetRow = closestElement(e.target, 'tr');\n var srcControl = void 0;\n var currentIndex = void 0;\n if (e.droppedElement.parentElement.id !== gObj.element.id) {\n srcControl = e.droppedElement.parentElement.ej2_instances[0];\n }\n else {\n return;\n }\n if (srcControl.element.id !== gObj.element.id && srcControl.rowDropSettings.targetID !== gObj.element.id) {\n return;\n }\n var records = srcControl.getSelectedRecords();\n var targetIndex = currentIndex = this.getTargetIdx(targetRow);\n var count = 0;\n if (isNaN(targetIndex)) {\n targetIndex = currentIndex = 0;\n }\n if (gObj.allowPaging) {\n targetIndex = targetIndex + (gObj.pageSettings.currentPage * gObj.pageSettings.pageSize) - gObj.pageSettings.pageSize;\n }\n //Todo: drag and drop mapper & BatchChanges \n gObj.notify(events.rowsAdded, { toIndex: targetIndex, records: records });\n gObj.notify(events.modelChanged, {\n type: events.actionBegin, requestType: 'rowdraganddrop'\n });\n var selectedRows = srcControl.getSelectedRowIndexes();\n var skip = srcControl.allowPaging ?\n (srcControl.pageSettings.currentPage * srcControl.pageSettings.pageSize) - srcControl.pageSettings.pageSize : 0;\n this.selectedRows = [];\n for (var i = 0, len = records.length; i < len; i++) {\n this.selectedRows.push(skip + selectedRows[i]);\n }\n srcControl.notify(events.rowsRemoved, { indexes: this.selectedRows, records: records });\n srcControl.notify(events.modelChanged, {\n type: events.actionBegin, requestType: 'rowdraganddrop'\n });\n }\n };\n RowDD.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.initializeDrag();\n }\n };\n /**\n * To destroy the print\n * @return {void}\n * @hidden\n */\n RowDD.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.initializeDrag);\n this.parent.off(events.columnDrop, this.columnDrop);\n this.parent.off(events.rowDragAndDropComplete, this.onActionComplete);\n this.parent.off(events.uiUpdate, this.enableAfterRender);\n //destory ejdrag and drop\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n RowDD.prototype.getModuleName = function () {\n return 'rowDragAndDrop';\n };\n return RowDD;\n}());\nexport { RowDD };\n","import { Draggable, Droppable } from '@syncfusion/ej2-base';\nimport { createElement, closest, remove, classList, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { parentsUntil, isActionPrevent } from '../base/util';\nimport * as events from '../base/constant';\nimport { AriaService } from '../services/aria-service';\n/**\n *\n * The `Group` module is used to handle group action.\n */\nvar Group = /** @class */ (function () {\n /**\n * Constructor for Grid group module\n * @hidden\n */\n function Group(parent, groupSettings, sortedColumns, serviceLocator) {\n var _this = this;\n this.isAppliedGroup = false;\n this.isAppliedUnGroup = false;\n this.visualElement = createElement('div', {\n className: 'e-cloneproperties e-dragclone e-gdclone',\n styles: 'line-height:23px', attrs: { action: 'grouping' }\n });\n this.helper = function (e) {\n var gObj = _this.parent;\n var target = e.sender.target;\n var element = target.classList.contains('e-groupheadercell') ? target :\n parentsUntil(target, 'e-groupheadercell');\n if (!element) {\n return false;\n }\n _this.column = gObj.getColumnByField(element.firstElementChild.getAttribute('ej-mappingname'));\n _this.visualElement.textContent = element.textContent;\n _this.visualElement.style.width = element.offsetWidth + 2 + 'px';\n _this.visualElement.style.height = element.offsetHeight + 2 + 'px';\n _this.visualElement.setAttribute('e-mappinguid', _this.column.uid);\n gObj.element.appendChild(_this.visualElement);\n return _this.visualElement;\n };\n this.dragStart = function () {\n _this.parent.element.classList.add('e-ungroupdrag');\n };\n this.drag = function (e) {\n var target = e.target;\n var cloneElement = _this.parent.element.querySelector('.e-cloneproperties');\n _this.parent.trigger(events.columnDrag, { target: target, draggableType: 'headercell', column: _this.column });\n classList(cloneElement, ['e-defaultcur'], ['e-notallowedcur']);\n if (!(parentsUntil(target, 'e-gridcontent') || parentsUntil(target, 'e-headercell'))) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n }\n };\n this.dragStop = function (e) {\n _this.parent.element.classList.remove('e-ungroupdrag');\n if (!(parentsUntil(e.target, 'e-gridcontent') || parentsUntil(e.target, 'e-gridheader'))) {\n remove(e.helper);\n return;\n }\n };\n this.drop = function (e) {\n var gObj = _this.parent;\n var column = gObj.getColumnByUid(e.droppedElement.getAttribute('e-mappinguid'));\n _this.element.classList.remove('e-hover');\n remove(e.droppedElement);\n _this.aria.setDropTarget(_this.parent.element.querySelector('.e-groupdroparea'), false);\n _this.aria.setGrabbed(_this.parent.getHeaderTable().querySelector('[aria-grabbed=true]'), false);\n if (isNullOrUndefined(column) || column.allowGrouping === false ||\n parentsUntil(gObj.getColumnHeaderByUid(column.uid), 'e-grid').getAttribute('id') !==\n gObj.element.getAttribute('id')) {\n return;\n }\n _this.groupColumn(column.field);\n };\n this.contentRefresh = true;\n this.aria = new AriaService();\n this.parent = parent;\n this.groupSettings = groupSettings;\n this.serviceLocator = serviceLocator;\n this.sortedColumns = sortedColumns;\n this.focus = serviceLocator.getService('focus');\n this.addEventListener();\n }\n Group.prototype.columnDrag = function (e) {\n var gObj = this.parent;\n var cloneElement = this.parent.element.querySelector('.e-cloneproperties');\n classList(cloneElement, ['e-defaultcur'], ['e-notallowedcur']);\n if (!parentsUntil(e.target, 'e-groupdroparea') &&\n !(this.parent.allowReordering && parentsUntil(e.target, 'e-headercell'))) {\n classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n }\n e.target.classList.contains('e-groupdroparea') ? this.element.classList.add('e-hover') : this.element.classList.remove('e-hover');\n };\n Group.prototype.columnDragStart = function (e) {\n if (e.target.classList.contains('e-stackedheadercell')) {\n return;\n }\n var gObj = this.parent;\n var dropArea = this.parent.element.querySelector('.e-groupdroparea');\n this.aria.setDropTarget(dropArea, e.column.allowGrouping);\n var element = e.target.classList.contains('e-headercell') ? e.target : parentsUntil(e.target, 'e-headercell');\n this.aria.setGrabbed(element, true, !e.column.allowGrouping);\n };\n Group.prototype.columnDrop = function (e) {\n var gObj = this.parent;\n if (e.droppedElement.getAttribute('action') === 'grouping') {\n var column = gObj.getColumnByUid(e.droppedElement.getAttribute('e-mappinguid'));\n if (isNullOrUndefined(column) || column.allowGrouping === false ||\n parentsUntil(gObj.getColumnHeaderByUid(column.uid), 'e-grid').getAttribute('id') !==\n gObj.element.getAttribute('id')) {\n return;\n }\n this.ungroupColumn(column.field);\n }\n };\n /**\n * @hidden\n */\n Group.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n this.parent.on(events.groupComplete, this.onActionComplete, this);\n this.parent.on(events.ungroupComplete, this.onActionComplete, this);\n this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.columnDrag, this.columnDrag, this);\n this.parent.on(events.columnDragStart, this.columnDragStart, this);\n this.parent.on(events.columnDrop, this.columnDrop, this);\n this.parent.on(events.headerRefreshed, this.refreshSortIcons, this);\n this.parent.on(events.sortComplete, this.refreshSortIcons, this);\n this.parent.on(events.keyPressed, this.keyPressHandler, this);\n this.parent.on(events.contentReady, this.initialEnd, this);\n this.parent.on(events.onEmpty, this.initialEnd, this);\n this.parent.on(events.initialEnd, this.render, this);\n };\n /**\n * @hidden\n */\n Group.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.render);\n this.parent.off(events.uiUpdate, this.enableAfterRender);\n this.parent.off(events.groupComplete, this.onActionComplete);\n this.parent.off(events.ungroupComplete, this.onActionComplete);\n this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.columnDrag, this.columnDrag);\n this.parent.off(events.columnDragStart, this.columnDragStart);\n this.parent.off(events.columnDrop, this.columnDrop);\n this.parent.off(events.headerRefreshed, this.refreshSortIcons);\n this.parent.off(events.sortComplete, this.refreshSortIcons);\n this.parent.off(events.keyPressed, this.keyPressHandler);\n };\n Group.prototype.initialEnd = function () {\n var gObj = this.parent;\n this.parent.off(events.contentReady, this.initialEnd);\n this.parent.off(events.onEmpty, this.initialEnd);\n if (this.parent.getColumns().length && this.groupSettings.columns.length) {\n this.contentRefresh = false;\n for (var _i = 0, _a = gObj.groupSettings.columns; _i < _a.length; _i++) {\n var col = _a[_i];\n this.groupColumn(col);\n }\n this.contentRefresh = true;\n }\n };\n Group.prototype.keyPressHandler = function (e) {\n var gObj = this.parent;\n if ((!this.groupSettings.columns.length ||\n ['altDownArrow', 'altUpArrow', 'ctrlDownArrow', 'ctrlUpArrow', 'enter'].indexOf(e.action) === -1)) {\n return;\n }\n e.preventDefault();\n switch (e.action) {\n case 'altDownArrow':\n case 'altUpArrow':\n var selected = gObj.allowSelection ? gObj.getSelectedRowIndexes() : [];\n if (selected.length) {\n var rows = gObj.getContentTable().querySelector('tbody').children;\n var dataRow = gObj.getDataRows()[selected[selected.length - 1]];\n var grpRow = void 0;\n for (var i = dataRow.rowIndex; i >= 0; i--) {\n if (!rows[i].classList.contains('e-row') && !rows[i].classList.contains('e-detailrow')) {\n grpRow = rows[i];\n break;\n }\n }\n this.expandCollapseRows(grpRow.querySelector(e.action === 'altUpArrow' ?\n '.e-recordplusexpand' : '.e-recordpluscollapse'));\n }\n break;\n case 'ctrlDownArrow':\n this.expandAll();\n break;\n case 'ctrlUpArrow':\n this.collapseAll();\n break;\n case 'enter':\n if (this.parent.isEdit || (closest(e.target, '#' + this.parent.element.id + '_searchbar') !== null)) {\n return;\n }\n var element = this.focus.getFocusedElement();\n var row = element ? element.parentElement.querySelector('[class^=\"e-record\"]') : null;\n if (!row) {\n break;\n }\n this.expandCollapseRows(row);\n break;\n }\n };\n Group.prototype.clickHandler = function (e) {\n this.expandCollapseRows(e.target);\n this.applySortFromTarget(e.target);\n this.unGroupFromTarget(e.target);\n this.toogleGroupFromHeader(e.target);\n };\n Group.prototype.unGroupFromTarget = function (target) {\n if (target.classList.contains('e-ungroupbutton')) {\n this.ungroupColumn(target.parentElement.getAttribute('ej-mappingname'));\n }\n };\n Group.prototype.toogleGroupFromHeader = function (target) {\n if (this.groupSettings.showToggleButton) {\n if (target.classList.contains('e-grptogglebtn')) {\n if (target.classList.contains('e-toggleungroup')) {\n this.ungroupColumn(this.parent.getColumnByUid(target.parentElement.getAttribute('e-mappinguid')).field);\n }\n else {\n this.groupColumn(this.parent.getColumnByUid(target.parentElement.getAttribute('e-mappinguid')).field);\n }\n }\n else {\n if (target.classList.contains('e-toggleungroup')) {\n this.ungroupColumn(target.parentElement.getAttribute('ej-mappingname'));\n }\n }\n }\n };\n Group.prototype.applySortFromTarget = function (target) {\n var gObj = this.parent;\n var gHeader = closest(target, '.e-groupheadercell');\n if (gObj.allowSorting && gHeader && !target.classList.contains('e-ungroupbutton') &&\n !target.classList.contains('e-toggleungroup')) {\n var field = gHeader.firstElementChild.getAttribute('ej-mappingname');\n if (gObj.getColumnHeaderByField(field).querySelectorAll('.e-ascending').length) {\n gObj.sortColumn(field, 'Descending', true);\n }\n else {\n gObj.sortColumn(field, 'Ascending', true);\n }\n }\n };\n /**\n * Expands or collapses grouped rows by target element.\n * @param {Element} target - Defines the target element of the grouped row.\n * @return {void}\n */\n Group.prototype.expandCollapseRows = function (target) {\n var trgt = parentsUntil(target, 'e-recordplusexpand') ||\n parentsUntil(target, 'e-recordpluscollapse');\n if (trgt) {\n var cellIdx = trgt.cellIndex;\n var rowIdx = trgt.parentElement.rowIndex;\n var rowNodes = this.parent.getContentTable().querySelector('tbody').children;\n var rows = [].slice.call(rowNodes).slice(rowIdx + 1, rowNodes.length);\n var isHide = void 0;\n var expandElem = void 0;\n var toExpand = [];\n var indent = trgt.parentElement.querySelectorAll('.e-indentcell').length;\n var expand = false;\n if (trgt.classList.contains('e-recordpluscollapse')) {\n addClass([trgt], 'e-recordplusexpand');\n removeClass([trgt], 'e-recordpluscollapse');\n trgt.firstElementChild.className = 'e-icons e-gdiagonaldown e-icon-gdownarrow';\n expand = true;\n }\n else {\n isHide = true;\n removeClass([trgt], 'e-recordplusexpand');\n addClass([trgt], 'e-recordpluscollapse');\n trgt.firstElementChild.className = 'e-icons e-gnextforward e-icon-grightarrow';\n }\n this.aria.setExpand(trgt, expand);\n for (var i = 0, len = rows.length; i < len; i++) {\n if (rows[i].querySelectorAll('td')[cellIdx] &&\n rows[i].querySelectorAll('td')[cellIdx].classList.contains('e-indentcell') && rows) {\n if (isHide) {\n rows[i].style.display = 'none';\n }\n else {\n if (rows[i].querySelectorAll('.e-indentcell').length === indent + 1) {\n rows[i].style.display = '';\n expandElem = rows[i].querySelector('.e-recordplusexpand');\n if (expandElem) {\n toExpand.push(expandElem);\n }\n if (rows[i].classList.contains('e-detailrow')) {\n if (rows[i - 1].querySelectorAll('.e-detailrowcollapse').length) {\n rows[i].style.display = 'none';\n }\n }\n }\n }\n }\n else {\n break;\n }\n }\n for (var i = 0, len = toExpand.length; i < len; i++) {\n removeClass([toExpand[i]], 'e-recordplusexpand');\n addClass([toExpand[i]], 'e-recordpluscollapse');\n toExpand[i].firstElementChild.className = 'e-icons e-gnextforward e-icon-grightarrow';\n this.expandCollapseRows(toExpand[i]);\n }\n }\n };\n Group.prototype.expandCollapse = function (isExpand) {\n var rowNodes = this.parent.getContentTable().querySelector('tbody').children;\n var row;\n for (var i = 0, len = rowNodes.length; i < len; i++) {\n if (rowNodes[i].querySelectorAll('.e-recordplusexpand, .e-recordpluscollapse').length) {\n row = rowNodes[i].querySelector(isExpand ? '.e-recordpluscollapse' : '.e-recordplusexpand');\n if (row) {\n row.className = isExpand ? 'e-recordplusexpand' : 'e-recordpluscollapse';\n row.firstElementChild.className = isExpand ? 'e-icons e-gdiagonaldown e-icon-gdownarrow' :\n 'e-icons e-gnextforward e-icon-grightarrow';\n }\n if (!(rowNodes[i].firstElementChild.classList.contains('e-recordplusexpand') ||\n rowNodes[i].firstElementChild.classList.contains('e-recordpluscollapse'))) {\n rowNodes[i].style.display = isExpand ? '' : 'none';\n }\n }\n else {\n rowNodes[i].style.display = isExpand ? '' : 'none';\n }\n }\n };\n /**\n * Expands all the grouped rows of the Grid.\n * @return {void}\n */\n Group.prototype.expandAll = function () {\n this.expandCollapse(true);\n };\n /**\n * Collapses all the grouped rows of the Grid.\n * @return {void}\n */\n Group.prototype.collapseAll = function () {\n this.expandCollapse(false);\n };\n /**\n * The function is used to render grouping\n * @return {Element}\n * @hidden\n */\n Group.prototype.render = function () {\n this.l10n = this.serviceLocator.getService('localization');\n this.renderGroupDropArea();\n this.initDragAndDrop();\n this.refreshToggleBtn();\n };\n Group.prototype.renderGroupDropArea = function () {\n var groupElem = this.parent.element.querySelector('.e-groupdroparea');\n if (groupElem) {\n remove(groupElem);\n }\n this.element = createElement('div', { className: 'e-groupdroparea', attrs: { 'tabindex': '-1' } });\n this.updateGroupDropArea();\n this.parent.element.insertBefore(this.element, this.parent.element.firstChild);\n if (!this.groupSettings.showDropArea) {\n this.element.style.display = 'none';\n }\n };\n Group.prototype.updateGroupDropArea = function (clear) {\n if (this.groupSettings.showDropArea && !this.groupSettings.columns.length) {\n var dragLabel = this.l10n.getConstant('GroupDropArea');\n this.element.innerHTML = dragLabel;\n this.element.classList.remove('e-grouped');\n }\n else {\n if ((this.element.innerHTML === this.l10n.getConstant('GroupDropArea') && (this.groupSettings.columns.length === 1\n || !this.isAppliedGroup && !this.isAppliedUnGroup)) || clear) {\n this.element.innerHTML = '';\n }\n this.element.classList.add('e-grouped');\n }\n };\n Group.prototype.initDragAndDrop = function () {\n this.initializeGHeaderDrop();\n this.initializeGHeaderDrag();\n };\n Group.prototype.initializeGHeaderDrag = function () {\n var drag = new Draggable(this.element, {\n dragTarget: '.e-groupheadercell',\n distance: 5,\n helper: this.helper,\n dragStart: this.dragStart,\n drag: this.drag,\n dragStop: this.dragStop\n });\n };\n Group.prototype.initializeGHeaderDrop = function () {\n var gObj = this.parent;\n var drop = new Droppable(this.element, {\n accept: '.e-dragclone',\n drop: this.drop\n });\n };\n /**\n * Groups a column by column name.\n * @param {string} columnName - Defines the column name to group.\n * @return {void}\n */\n Group.prototype.groupColumn = function (columnName) {\n var gObj = this.parent;\n var column = gObj.getColumnByField(columnName);\n if (isNullOrUndefined(column) || column.allowGrouping === false ||\n (this.contentRefresh && this.groupSettings.columns.indexOf(columnName) > -1)) {\n return;\n }\n if (isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.groupColumn, arg1: columnName });\n return;\n }\n column.visible = gObj.groupSettings.showGroupedColumn;\n this.colName = columnName;\n this.isAppliedGroup = true;\n if (this.contentRefresh) {\n this.updateModel();\n }\n else {\n this.addColToGroupDrop(columnName);\n }\n this.updateGroupDropArea();\n this.isAppliedGroup = false;\n };\n /**\n * Ungroups a column by column name.\n * @param {string} columnName - Defines the column name to ungroup.\n * @return {void}\n */\n Group.prototype.ungroupColumn = function (columnName) {\n var gObj = this.parent;\n var column = this.parent.enableColumnVirtualization ?\n this.parent.columns.filter(function (c) { return c.field === columnName; })[0] : gObj.getColumnByField(columnName);\n if (isNullOrUndefined(column) || column.allowGrouping === false || this.groupSettings.columns.indexOf(columnName) < 0) {\n return;\n }\n if (isActionPrevent(gObj)) {\n gObj.notify(events.preventBatch, { instance: this, handler: this.ungroupColumn, arg1: columnName });\n return;\n }\n column.visible = true;\n this.colName = column.field;\n var columns = JSON.parse(JSON.stringify(this.groupSettings.columns));\n columns.splice(columns.indexOf(this.colName), 1);\n if (this.sortedColumns.indexOf(columnName) < 0) {\n for (var i = 0, len = gObj.sortSettings.columns.length; i < len; i++) {\n if (columnName === gObj.sortSettings.columns[i].field) {\n gObj.sortSettings.columns.splice(i, 1);\n break;\n }\n }\n }\n this.groupSettings.columns = columns;\n if (gObj.allowGrouping) {\n this.isAppliedUnGroup = true;\n this.parent.dataBind();\n }\n };\n /**\n * The function used to update groupSettings\n * @return {void}\n * @hidden\n */\n Group.prototype.updateModel = function () {\n var gObj = this.parent;\n var i = 0;\n var columns = JSON.parse(JSON.stringify(this.groupSettings.columns));\n columns.push(this.colName);\n this.groupSettings.columns = columns;\n this.groupAddSortingQuery(this.colName);\n this.parent.dataBind();\n };\n /**\n * The function used to trigger onActionComplete\n * @return {void}\n * @hidden\n */\n Group.prototype.onActionComplete = function (e) {\n var gObj = this.parent;\n if (e.requestType === 'grouping') {\n this.addColToGroupDrop(this.colName);\n }\n else {\n this.removeColFromGroupDrop(this.colName);\n }\n var args = this.groupSettings.columns.indexOf(this.colName) > -1 ? {\n columnName: this.colName, requestType: 'grouping', type: events.actionComplete\n } : { requestType: 'ungrouping', type: events.actionComplete };\n this.parent.trigger(events.actionComplete, extend(e, args));\n this.colName = null;\n };\n Group.prototype.groupAddSortingQuery = function (colName) {\n var i = 0;\n while (i < this.parent.sortSettings.columns.length) {\n if (this.parent.sortSettings.columns[i].field === colName) {\n break;\n }\n i++;\n }\n if (this.parent.sortSettings.columns.length === i) {\n this.parent.sortSettings.columns.push({ field: colName, direction: 'Ascending' });\n }\n else if (!this.parent.allowSorting) {\n this.parent.sortSettings.columns[i].direction = 'Ascending';\n }\n };\n Group.prototype.addColToGroupDrop = function (field) {\n var gObj = this.parent;\n var direction = 'Ascending';\n var groupedColumn = createElement('div', { className: 'e-grid-icon e-groupheadercell' });\n var childDiv = createElement('div', { attrs: { 'ej-mappingname': field } });\n var column = this.parent.getColumnByField(field);\n if (isNullOrUndefined(column)) {\n return;\n }\n //Todo headerTemplateID for grouped column, disableHtmlEncode \n var headerCell = gObj.getColumnHeaderByUid(column.uid);\n if (!isNullOrUndefined(column.headerTemplate)) {\n if (column.headerTemplate.indexOf('#') !== -1) {\n childDiv.innerHTML = document.querySelector(column.headerTemplate).innerHTML.trim();\n }\n else {\n childDiv.innerHTML = column.headerTemplate;\n }\n childDiv.firstElementChild.classList.add('e-grouptext');\n }\n else {\n childDiv.appendChild(createElement('span', {\n className: 'e-grouptext', innerHTML: column.headerText,\n attrs: { tabindex: '-1', 'aria-label': 'sort the grouped column' }\n }));\n }\n if (this.groupSettings.showToggleButton) {\n childDiv.appendChild(createElement('span', {\n className: 'e-togglegroupbutton e-icons e-icon-ungroup e-toggleungroup', innerHTML: ' ',\n attrs: { tabindex: '-1', 'aria-label': 'ungroup button' }\n }));\n }\n if (headerCell.querySelectorAll('.e-ascending,.e-descending').length) {\n direction = headerCell.querySelector('.e-ascending') ? 'Ascending' : 'Descending';\n }\n childDiv.appendChild(createElement('span', {\n className: 'e-groupsort e-icons ' +\n ('e-' + direction.toLowerCase() + ' e-icon-' + direction.toLowerCase()), innerHTML: ' ',\n attrs: { tabindex: '-1', 'aria-label': 'sort the grouped column' }\n }));\n childDiv.appendChild(createElement('span', {\n className: 'e-ungroupbutton e-icons e-icon-hide', innerHTML: ' ',\n attrs: { title: this.l10n.getConstant('UnGroup'), tabindex: '-1', 'aria-label': 'ungroup the grouped column' },\n styles: this.groupSettings.showUngroupButton ? '' : 'display:none'\n }));\n groupedColumn.appendChild(childDiv);\n this.element.appendChild(groupedColumn);\n //Todo: rtl \n };\n Group.prototype.refreshToggleBtn = function (isRemove) {\n if (this.groupSettings.showToggleButton) {\n var headers = [].slice.call(this.parent.element.getElementsByClassName('e-headercelldiv'));\n for (var i = 0, len = headers.length; i < len; i++) {\n if (!((headers[i].classList.contains('e-emptycell')) || (headers[i].classList.contains('e-headerchkcelldiv')))) {\n var column = this.parent.getColumnByUid(headers[i].getAttribute('e-mappinguid'));\n if (!this.parent.showColumnMenu || (this.parent.showColumnMenu && !column.showColumnMenu)) {\n if (headers[i].querySelectorAll('.e-grptogglebtn').length) {\n remove(headers[i].querySelectorAll('.e-grptogglebtn')[0]);\n }\n if (!isRemove) {\n headers[i].appendChild(createElement('span', {\n className: 'e-grptogglebtn e-icons ' +\n (this.groupSettings.columns.indexOf(column.field) > -1 ? 'e-toggleungroup e-icon-ungroup'\n : 'e-togglegroup e-icon-group'), attrs: { tabindex: '-1', 'aria-label': 'Group button' }\n }));\n }\n }\n }\n }\n }\n };\n Group.prototype.removeColFromGroupDrop = function (field) {\n if (!isNullOrUndefined(this.getGHeaderCell(field))) {\n remove(this.getGHeaderCell(field));\n this.updateGroupDropArea();\n }\n this.isAppliedUnGroup = false;\n };\n Group.prototype.onPropertyChanged = function (e) {\n var _this = this;\n if (e.module !== this.getModuleName()) {\n return;\n }\n var _loop_1 = function (prop) {\n switch (prop) {\n case 'columns':\n var args = void 0;\n if (this_1.contentRefresh) {\n if (!this_1.isAppliedUnGroup) {\n if (!this_1.isAppliedGroup) {\n this_1.updateGroupDropArea(true);\n for (var i = 0; i < this_1.groupSettings.columns.length; i++) {\n this_1.colName = this_1.groupSettings.columns[i];\n var col = this_1.parent.getColumnByField(this_1.colName);\n col.visible = this_1.parent.groupSettings.showGroupedColumn;\n this_1.groupAddSortingQuery(this_1.colName);\n if (i < this_1.groupSettings.columns.length - 1) {\n this_1.addColToGroupDrop(this_1.groupSettings.columns[i]);\n }\n }\n }\n args = { columnName: this_1.colName, requestType: e.properties[prop].length ? 'grouping' : 'ungrouping',\n type: events.actionBegin };\n }\n else {\n args = { requestType: 'ungrouping', type: events.actionBegin };\n }\n if (!this_1.groupSettings.showGroupedColumn) {\n e.oldProperties[prop].forEach(function (column) {\n if (e.properties[prop].indexOf(column) === -1) {\n _this.parent.getColumnByField(column).visible = true;\n }\n });\n }\n this_1.parent.notify(events.modelChanged, args);\n }\n break;\n case 'showDropArea':\n this_1.updateGroupDropArea();\n this_1.groupSettings.showDropArea ? this_1.element.style.display = '' : this_1.element.style.display = 'none';\n break;\n case 'showGroupedColumn':\n this_1.updateGroupedColumn(this_1.groupSettings.showGroupedColumn);\n this_1.parent.notify(events.modelChanged, { requestType: 'refresh' });\n break;\n case 'showUngroupButton':\n this_1.updateButtonVisibility(this_1.groupSettings.showUngroupButton, 'e-ungroupbutton');\n break;\n case 'showToggleButton':\n this_1.updateButtonVisibility(this_1.groupSettings.showToggleButton, 'e-togglegroupbutton ');\n this_1.parent.refreshHeader();\n break;\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(e.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n _loop_1(prop);\n }\n };\n Group.prototype.updateGroupedColumn = function (isVisible) {\n for (var i = 0; i < this.groupSettings.columns.length; i++) {\n this.parent.getColumnByField(this.groupSettings.columns[i]).visible = isVisible;\n }\n };\n Group.prototype.updateButtonVisibility = function (isVisible, className) {\n var gHeader = [].slice.call(this.element.querySelectorAll('.' + className));\n for (var i = 0; i < gHeader.length; i++) {\n gHeader[i].style.display = isVisible ? '' : 'none';\n }\n };\n Group.prototype.enableAfterRender = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.render();\n }\n };\n /**\n * To destroy the reorder\n * @return {void}\n * @hidden\n */\n Group.prototype.destroy = function () {\n this.clearGrouping();\n this.removeEventListener();\n this.refreshToggleBtn(true);\n remove(this.element);\n //call ejdrag and drop destroy\n };\n /**\n * Clears all the grouped columns of the Grid.\n * @return {void}\n */\n Group.prototype.clearGrouping = function () {\n var cols = JSON.parse(JSON.stringify(this.groupSettings.columns));\n this.contentRefresh = false;\n for (var i = 0, len = cols.length; i < len; i++) {\n this.ungroupColumn(cols[i]);\n }\n this.contentRefresh = true;\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Group.prototype.getModuleName = function () {\n return 'group';\n };\n Group.prototype.refreshSortIcons = function (e) {\n var gObj = this.parent;\n var header;\n var cols = gObj.sortSettings.columns;\n var gCols = gObj.groupSettings.columns;\n var fieldNames = this.parent.getColumns().map(function (c) { return c.field; });\n this.refreshToggleBtn();\n for (var i = 0, len = cols.length; i < len; i++) {\n if (fieldNames.indexOf(cols[i].field) === -1) {\n continue;\n }\n header = gObj.getColumnHeaderByField(cols[i].field);\n if (!gObj.allowSorting && (this.sortedColumns.indexOf(cols[i].field) > -1 ||\n this.groupSettings.columns.indexOf(cols[i].field) > -1)) {\n classList(header.querySelector('.e-sortfilterdiv'), ['e-ascending', 'e-icon-ascending'], []);\n if (cols.length > 1) {\n header.querySelector('.e-headercelldiv').appendChild(createElement('span', { className: 'e-sortnumber', innerHTML: (i + 1).toString() }));\n }\n }\n else if (this.getGHeaderCell(cols[i].field) && this.getGHeaderCell(cols[i].field).querySelectorAll('.e-groupsort').length) {\n if (cols[i].direction === 'Ascending') {\n classList(this.getGHeaderCell(cols[i].field).querySelector('.e-groupsort'), ['e-ascending', 'e-icon-ascending'], ['e-descending', 'e-icon-descending']);\n }\n else {\n classList(this.getGHeaderCell(cols[i].field).querySelector('.e-groupsort'), ['e-descending', 'e-icon-descending'], ['e-ascending', 'e-icon-ascending']);\n }\n }\n }\n for (var i = 0, len = gCols.length; i < len; i++) {\n if (fieldNames.indexOf(gCols[i]) === -1) {\n continue;\n }\n gObj.getColumnHeaderByField(gCols[i]).setAttribute('aria-grouped', 'true');\n }\n };\n Group.prototype.getGHeaderCell = function (field) {\n if (this.element && this.element.querySelector('[ej-mappingname=\"' + field + '\"]')) {\n return this.element.querySelector('[ej-mappingname=\"' + field + '\"]').parentElement;\n }\n return null;\n };\n return Group;\n}());\nexport { Group };\n","import { createElement, closest, classList } from '@syncfusion/ej2-base';\nimport { Grid } from '../base/grid';\nimport { parents, getUid, appendChildren } from '../base/util';\nimport * as events from '../base/constant';\nimport { AriaService } from '../services/aria-service';\nimport { Row } from '../models/row';\nimport { Cell } from '../models/cell';\nimport { CellType } from '../base/enum';\n/**\n * The `DetailRow` module is used to handle detail template and hierarchy Grid operations.\n */\nvar DetailRow = /** @class */ (function () {\n /**\n * Constructor for the Grid detail template module\n * @hidden\n */\n function DetailRow(parent, locator) {\n //Internal variables\n this.aria = new AriaService();\n this.parent = parent;\n if (this.parent.isDestroyed) {\n return;\n }\n this.focus = locator.getService('focus');\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.keyPressed, this.keyPressHandler, this);\n }\n DetailRow.prototype.clickHandler = function (e) {\n this.toogleExpandcollapse(closest(e.target, 'td'));\n };\n DetailRow.prototype.toogleExpandcollapse = function (target) {\n var gObj = this.parent;\n var parent = 'parentDetails';\n if (target && (target.classList.contains('e-detailrowcollapse') || target.classList.contains('e-detailrowexpand'))) {\n var tr = target.parentElement;\n var uid_1 = tr.getAttribute('data-uid');\n var nextRow = this.parent.getContentTable().querySelector('tbody').children[tr.rowIndex + 1];\n if (target.classList.contains('e-detailrowcollapse')) {\n var key = 'records';\n var currentViewData = gObj.allowGrouping && gObj.groupSettings.columns.length ?\n gObj.currentViewData[key] : gObj.currentViewData;\n var data = currentViewData[tr.getAttribute('aria-rowindex')];\n if (this.isDetailRow(nextRow)) {\n nextRow.style.display = '';\n }\n else if (gObj.getDetailTemplate() || gObj.childGrid) {\n var detailRow = createElement('tr', { className: 'e-detailrow' });\n var detailCell = createElement('td', { className: 'e-detailcell' });\n detailCell.setAttribute('colspan', this.parent.getVisibleColumns().length.toString());\n var row = new Row({\n isDataRow: true,\n isExpand: true,\n cells: [new Cell({ cellType: CellType.Indent }), new Cell({ isDataCell: true, visible: true })]\n });\n for (var i = 0, len = gObj.groupSettings.columns.length; i < len; i++) {\n detailRow.appendChild(createElement('td', { className: 'e-indentcell' }));\n row.cells.unshift(new Cell({ cellType: CellType.Indent }));\n }\n detailRow.appendChild(createElement('td', { className: 'e-detailindentcell' }));\n detailRow.appendChild(detailCell);\n tr.parentNode.insertBefore(detailRow, tr.nextSibling);\n if (gObj.detailTemplate) {\n appendChildren(detailCell, gObj.getDetailTemplate()(data, gObj, 'detailTemplate'));\n }\n else {\n gObj.childGrid[parent] = {\n parentID: gObj.element.id,\n parentPrimaryKeys: gObj.getPrimaryKeyFieldNames(),\n parentKeyField: gObj.childGrid.queryString,\n parentKeyFieldValue: data[gObj.childGrid.queryString],\n parentRowData: data\n };\n var grid = new Grid(gObj.childGrid);\n var modules = grid.getInjectedModules();\n var injectedModues = gObj.getInjectedModules();\n if (!modules || modules.length !== injectedModues.length) {\n grid.setInjectedModules(injectedModues);\n }\n var gridElem = createElement('div', {\n id: 'child' + parents(tr, 'e-grid').length +\n '_grid' + tr.rowIndex + getUid('')\n });\n detailCell.appendChild(gridElem);\n grid.appendTo(gridElem);\n }\n detailRow.appendChild(detailCell);\n tr.parentNode.insertBefore(detailRow, tr.nextSibling);\n var idx_1;\n this.parent.getRowsObject().some(function (r, rIndex) { idx_1 = rIndex; return r.uid === uid_1; });\n gObj.getRows().splice(tr.rowIndex + 1, 0, detailRow);\n this.parent.getRowsObject().splice(idx_1 + 1, 0, row);\n gObj.trigger(events.detailDataBound, { detailElement: detailCell, data: data });\n gObj.notify(events.detailDataBound, { rows: this.parent.getRowsObject() });\n }\n classList(target, ['e-detailrowexpand'], ['e-detailrowcollapse']);\n classList(target.firstElementChild, ['e-dtdiagonaldown', 'e-icon-gdownarrow'], ['e-dtdiagonalright', 'e-icon-grightarrow']);\n this.parent.getRowsObject()[tr.rowIndex].isExpand = true;\n this.aria.setExpand(target, true);\n }\n else {\n if (this.isDetailRow(nextRow)) {\n nextRow.style.display = 'none';\n }\n classList(target, ['e-detailrowcollapse'], ['e-detailrowexpand']);\n classList(target.firstElementChild, ['e-dtdiagonalright', 'e-icon-grightarrow'], ['e-dtdiagonaldown', 'e-icon-gdownarrow']);\n this.parent.getRowsObject()[tr.rowIndex].isExpand = false;\n this.aria.setExpand(target, false);\n }\n }\n };\n DetailRow.prototype.isDetailRow = function (row) {\n return row && row.classList.contains('e-detailrow');\n };\n DetailRow.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.keyPressed, this.keyPressHandler);\n };\n DetailRow.prototype.getTDfromIndex = function (index, className) {\n var tr = this.parent.getDataRows()[index];\n if (tr && tr.querySelector(className)) {\n return tr.querySelector(className);\n }\n return null;\n };\n /**\n * Expands a detail row with the given target.\n * @param {Element} target - Defines the collapsed element to expand.\n * @return {void}\n */\n DetailRow.prototype.expand = function (target) {\n if (!isNaN(target)) {\n target = this.getTDfromIndex(target, '.e-detailrowcollapse');\n }\n if (target && target.classList.contains('e-detailrowcollapse')) {\n this.toogleExpandcollapse(target);\n }\n };\n /**\n * Collapses a detail row with the given target.\n * @param {Element} target - Defines the expanded element to collapse.\n * @return {void}\n */\n DetailRow.prototype.collapse = function (target) {\n if (!isNaN(target)) {\n target = this.getTDfromIndex(target, '.e-detailrowexpand');\n }\n if (target && target.classList.contains('e-detailrowexpand')) {\n this.toogleExpandcollapse(target);\n }\n };\n /**\n * Expands all the detail rows of the Grid.\n * @return {void}\n */\n DetailRow.prototype.expandAll = function () {\n this.expandCollapse(true);\n };\n /**\n * Collapses all the detail rows of the Grid.\n * @return {void}\n */\n DetailRow.prototype.collapseAll = function () {\n this.expandCollapse(false);\n };\n DetailRow.prototype.expandCollapse = function (isExpand) {\n var td;\n var rows = this.parent.getDataRows();\n for (var i = 0, len = rows.length; i < len; i++) {\n td = rows[i].querySelector('.e-detailrowcollapse, .e-detailrowexpand');\n isExpand ? this.expand(td) : this.collapse(td);\n }\n };\n DetailRow.prototype.keyPressHandler = function (e) {\n var gObj = this.parent;\n switch (e.action) {\n case 'ctrlDownArrow':\n this.expandAll();\n break;\n case 'ctrlUpArrow':\n this.collapseAll();\n break;\n case 'altUpArrow':\n case 'altDownArrow':\n var selected = gObj.allowSelection ? gObj.getSelectedRowIndexes() : [];\n if (selected.length) {\n var dataRow = gObj.getDataRows()[selected[selected.length - 1]];\n var td = dataRow.querySelector('.e-detailrowcollapse, .e-detailrowexpand');\n e.action === 'altDownArrow' ? this.expand(td) : this.collapse(td);\n }\n break;\n case 'enter':\n if (this.parent.isEdit) {\n return;\n }\n var element = this.focus.getFocusedElement();\n if (!e.target.classList.contains('e-detailrowcollapse') &&\n !e.target.classList.contains('e-detailrowexpand')) {\n break;\n }\n this.toogleExpandcollapse(element);\n break;\n }\n };\n /**\n * For internal use only - Get the module name.\n * @private\n */\n DetailRow.prototype.getModuleName = function () {\n return 'detailRow';\n };\n return DetailRow;\n}());\nexport { DetailRow };\n","import { EventHandler, extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { createElement, remove } from '@syncfusion/ej2-base';\nimport { Toolbar as tool } from '@syncfusion/ej2-navigations';\nimport * as events from '../base/constant';\nimport { templateCompiler, appendChildren } from '../base/util';\nimport { SearchBox } from '../services/focus-strategy';\n/**\n * The `Toolbar` module is used to handle ToolBar actions.\n * @hidden\n */\nvar Toolbar = /** @class */ (function () {\n function Toolbar(parent, serviceLocator) {\n this.predefinedItems = {};\n this.items = ['Add', 'Edit', 'Update', 'Delete', 'Cancel', 'Print', 'Search',\n 'ColumnChooser', 'PdfExport', 'ExcelExport', 'CsvExport', 'WordExport'];\n this.parent = parent;\n this.gridID = parent.element.id;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n Toolbar.prototype.render = function () {\n this.l10n = this.serviceLocator.getService('localization');\n var preItems = ['Add', 'Edit', 'Update', 'Delete', 'Cancel', 'Print',\n 'PdfExport', 'ExcelExport', 'WordExport', 'CsvExport'];\n for (var _i = 0, preItems_1 = preItems; _i < preItems_1.length; _i++) {\n var item = preItems_1[_i];\n var itemStr = item.toLowerCase();\n var localeName = itemStr[0].toUpperCase() + itemStr.slice(1);\n this.predefinedItems[item] = {\n id: this.gridID + '_' + itemStr, prefixIcon: 'e-' + itemStr,\n text: this.l10n.getConstant(localeName), tooltipText: this.l10n.getConstant(localeName)\n };\n }\n this.predefinedItems.Search = {\n id: this.gridID + '_search',\n template: '
    \\\n \\\n \\\n
    ',\n tooltipText: this.l10n.getConstant('Search'), align: 'Right', cssClass: 'e-search-wrapper'\n };\n this.predefinedItems.ColumnChooser = {\n id: this.gridID + '_' + 'columnchooser', cssClass: 'e-cc e-ccdiv e-cc-toolbar', suffixIcon: 'e-' + 'columnchooser-btn',\n text: this.l10n.getConstant('Columnchooser'), tooltipText: this.l10n.getConstant('Columnchooser'), align: 'Right',\n };\n this.createToolbar();\n };\n /**\n * Gets the toolbar of the Grid.\n * @return {Element}\n * @hidden\n */\n Toolbar.prototype.getToolbar = function () {\n return this.toolbar.element;\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n */\n Toolbar.prototype.destroy = function () {\n if (!this.toolbar.isDestroyed) {\n if (!this.toolbar.element) {\n this.parent.destroyTemplate(['toolbarTemplate']);\n }\n else {\n this.toolbar.destroy();\n }\n this.unWireEvent();\n this.removeEventListener();\n remove(this.element);\n }\n };\n Toolbar.prototype.createToolbar = function () {\n var items = this.getItems();\n this.toolbar = new tool({\n items: items,\n clicked: this.toolbarClickHandler.bind(this),\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl\n });\n var viewStr = 'viewContainerRef';\n var registerTemp = 'registeredTemplate';\n if (this.parent[viewStr]) {\n this.toolbar[registerTemp] = {};\n this.toolbar[viewStr] = this.parent[viewStr];\n }\n this.element = createElement('div', { id: this.gridID + '_toolbarItems' });\n if (this.parent.toolbarTemplate) {\n if (typeof (this.parent.toolbarTemplate) === 'string') {\n this.toolbar.appendTo(this.parent.toolbarTemplate);\n this.element = this.toolbar.element;\n }\n else {\n appendChildren(this.element, templateCompiler(this.parent.toolbarTemplate)({}, this.parent, 'toolbarTemplate'));\n }\n }\n else {\n this.toolbar.appendTo(this.element);\n }\n this.parent.element.insertBefore(this.element, this.parent.getHeaderContent());\n this.searchElement = this.element.querySelector('#' + this.gridID + '_searchbar');\n this.wireEvent();\n this.refreshToolbarItems();\n if (this.parent.searchSettings) {\n this.updateSearchBox();\n }\n };\n Toolbar.prototype.refreshToolbarItems = function (args) {\n var gObj = this.parent;\n var enableItems = [];\n var disableItems = [];\n var edit = gObj.editSettings;\n var hasData = gObj.currentViewData && gObj.currentViewData.length;\n edit.allowAdding ? enableItems.push(this.gridID + '_add') : disableItems.push(this.gridID + '_add');\n edit.allowEditing && hasData ? enableItems.push(this.gridID + '_edit') : disableItems.push(this.gridID + '_edit');\n edit.allowDeleting && hasData ? enableItems.push(this.gridID + '_delete') : disableItems.push(this.gridID + '_delete');\n if (gObj.editSettings.mode === 'Batch') {\n if (gObj.element.querySelectorAll('.e-updatedtd').length && (edit.allowAdding || edit.allowEditing)) {\n enableItems.push(this.gridID + '_update');\n enableItems.push(this.gridID + '_cancel');\n }\n else {\n disableItems.push(this.gridID + '_update');\n disableItems.push(this.gridID + '_cancel');\n }\n }\n else {\n if (gObj.isEdit && (edit.allowAdding || edit.allowEditing)) {\n enableItems = [this.gridID + '_update', this.gridID + '_cancel'];\n disableItems = [this.gridID + '_add', this.gridID + '_edit', this.gridID + '_delete'];\n }\n else {\n disableItems.push(this.gridID + '_update');\n disableItems.push(this.gridID + '_cancel');\n }\n }\n this.enableItems(enableItems, true);\n this.enableItems(disableItems, false);\n };\n Toolbar.prototype.getItems = function () {\n var items = [];\n var toolbarItems = this.parent.toolbar || [];\n if (typeof (this.parent.toolbar) === 'string') {\n return [];\n }\n for (var _i = 0, toolbarItems_1 = toolbarItems; _i < toolbarItems_1.length; _i++) {\n var item = toolbarItems_1[_i];\n switch (typeof item) {\n case 'number':\n items.push(this.getItemObject(this.items[item]));\n break;\n case 'string':\n items.push(this.getItemObject(item));\n break;\n default:\n items.push(this.getItem(item));\n }\n }\n return items;\n };\n Toolbar.prototype.getItem = function (itemObject) {\n var item = this.predefinedItems[itemObject.text];\n return item ? extend(item, item, itemObject) : itemObject;\n };\n Toolbar.prototype.getItemObject = function (itemName) {\n return this.predefinedItems[itemName] || { text: itemName, id: this.gridID + '_' + itemName };\n };\n /**\n * Enables or disables ToolBar items.\n * @param {string[]} items - Defines the collection of itemID of ToolBar items.\n * @param {boolean} isEnable - Defines the items to be enabled or disabled.\n * @return {void}\n * @hidden\n */\n Toolbar.prototype.enableItems = function (items, isEnable) {\n for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {\n var item = items_1[_i];\n var element = this.element.querySelector('#' + item);\n if (element) {\n this.toolbar.enableItems(element.parentElement, isEnable);\n }\n }\n };\n Toolbar.prototype.toolbarClickHandler = function (args) {\n var gObj = this.parent;\n var gID = this.gridID;\n extend(args, { cancel: false });\n gObj.trigger(events.toolbarClick, args);\n if (args.cancel) {\n return;\n }\n switch (!isNullOrUndefined(args.item) && args.item.id) {\n case gID + '_print':\n gObj.print();\n break;\n case gID + '_edit':\n gObj.startEdit();\n break;\n case gID + '_update':\n gObj.endEdit();\n break;\n case gID + '_cancel':\n gObj.closeEdit();\n break;\n case gID + '_add':\n gObj.addRecord();\n break;\n case gID + '_delete':\n gObj.deleteRecord();\n break;\n case gID + '_search':\n if (args.originalEvent.target.id === gID + '_searchbutton') {\n this.search();\n }\n break;\n case gID + '_columnchooser':\n var tarElement = this.parent.element.querySelector('.e-ccdiv');\n var y = tarElement.getBoundingClientRect().top;\n var x = tarElement.getBoundingClientRect().left;\n var targetEle = args.originalEvent.target;\n y = tarElement.getBoundingClientRect().top + tarElement.offsetTop;\n gObj.createColumnchooser(x, y, targetEle);\n break;\n }\n };\n Toolbar.prototype.modelChanged = function (e) {\n if (e.module === 'edit') {\n this.refreshToolbarItems();\n }\n };\n Toolbar.prototype.onPropertyChanged = function (e) {\n if (e.module !== this.getModuleName() || !this.parent.toolbar) {\n return;\n }\n if (this.element) {\n remove(this.element);\n }\n this.render();\n };\n Toolbar.prototype.keyUpHandler = function (e) {\n if (e.keyCode === 13) {\n this.search();\n }\n };\n Toolbar.prototype.search = function () {\n this.parent.search(this.searchElement.value);\n };\n Toolbar.prototype.updateSearchBox = function () {\n if (this.searchElement) {\n this.searchElement.value = this.parent.searchSettings.key;\n }\n };\n Toolbar.prototype.wireEvent = function () {\n if (this.searchElement) {\n this.searchBoxObj = new SearchBox(this.searchElement);\n EventHandler.add(this.searchElement, 'keyup', this.keyUpHandler, this);\n this.searchBoxObj.wireEvent();\n }\n };\n Toolbar.prototype.unWireEvent = function () {\n if (this.searchElement) {\n EventHandler.remove(this.searchElement, 'keyup', this.keyUpHandler);\n this.searchBoxObj.unWireEvent();\n }\n };\n Toolbar.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialEnd, this.render, this);\n this.parent.on(events.uiUpdate, this.onPropertyChanged, this);\n this.parent.on(events.inBoundModelChanged, this.updateSearchBox.bind(this));\n this.parent.on(events.modelChanged, this.refreshToolbarItems, this);\n this.parent.on(events.toolbarRefresh, this.refreshToolbarItems, this);\n this.parent.on(events.inBoundModelChanged, this.modelChanged, this);\n this.parent.on(events.dataBound, this.refreshToolbarItems, this);\n };\n Toolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.render);\n this.parent.off(events.uiUpdate, this.onPropertyChanged);\n this.parent.off(events.inBoundModelChanged, this.updateSearchBox);\n this.parent.off(events.modelChanged, this.refreshToolbarItems);\n this.parent.off(events.toolbarRefresh, this.refreshToolbarItems);\n this.parent.off(events.inBoundModelChanged, this.modelChanged);\n this.parent.off(events.dataBound, this.refreshToolbarItems);\n };\n /**\n * For internal use only - Get the module name.\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nimport { formatUnit } from '@syncfusion/ej2-base';\nimport { Browser } from '@syncfusion/ej2-base';\nimport { colGroupRefresh, columnWidthChanged, scroll, columnVisibilityChanged } from '../base/constant';\nimport { ContentRender } from './content-renderer';\nimport { RowRenderer } from './row-renderer';\nimport { SummaryModelGenerator } from '../services/summary-model-generator';\nimport { renderMovable } from '../base/util';\n/**\n * Footer module is used to render grid content\n * @hidden\n */\nvar FooterRenderer = /** @class */ (function (_super) {\n __extends(FooterRenderer, _super);\n function FooterRenderer(gridModule, serviceLocator) {\n var _this = _super.call(this, gridModule, serviceLocator) || this;\n _this.aggregates = {};\n _this.parent = gridModule;\n _this.locator = serviceLocator;\n _this.modelGenerator = new SummaryModelGenerator(_this.parent);\n _this.addEventListener();\n return _this;\n }\n /**\n * The function is used to render grid footer div\n */\n FooterRenderer.prototype.renderPanel = function () {\n var div = createElement('div', { className: 'e-gridfooter' });\n var innerDiv = createElement('div', { className: 'e-summarycontent' });\n var movableContent = innerDiv;\n if (this.parent.getFrozenColumns()) {\n var fDiv = createElement('div', { className: 'e-frozenfootercontent' });\n var mDiv = createElement('div', { className: 'e-movablefootercontent' });\n innerDiv.appendChild(fDiv);\n innerDiv.appendChild(mDiv);\n this.frozenContent = fDiv;\n this.movableContent = mDiv;\n movableContent = mDiv;\n }\n if (Browser.isDevice) {\n movableContent.style.overflowX = 'scroll';\n }\n div.appendChild(innerDiv);\n this.setPanel(div);\n if (this.parent.getPager() != null) {\n this.parent.element.insertBefore(div, this.parent.getPager());\n }\n else {\n this.parent.element.appendChild(div);\n }\n };\n /**\n * The function is used to render grid footer table\n */\n FooterRenderer.prototype.renderTable = function () {\n var contentDiv = this.getPanel();\n var innerDiv = this.createContentTable('_footer_table');\n var table = innerDiv.querySelector('.e-table');\n var tFoot = createElement('tfoot');\n table.appendChild(tFoot);\n if (this.parent.getFrozenColumns()) {\n var freezeTable = table.cloneNode(true);\n this.frozenContent.appendChild(freezeTable);\n this.freezeTable = freezeTable;\n this.movableContent.appendChild(table);\n remove(table.querySelector('colgroup'));\n var colGroup = ((this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('colgroup')).cloneNode(true));\n table.insertBefore(colGroup, table.querySelector('tbody'));\n this.setColGroup(colGroup);\n }\n this.setTable(table);\n };\n FooterRenderer.prototype.renderSummaryContent = function (e, table, cStart, cEnd) {\n var input = this.parent.dataSource instanceof Array ? this.parent.dataSource : this.parent.currentViewData;\n var summaries = this.modelGenerator.getData();\n var dummies = isNullOrUndefined(cStart) ? this.modelGenerator.getColumns() :\n this.modelGenerator.getColumns(cStart, cEnd);\n var rows = isNullOrUndefined(cStart) ? this.modelGenerator.generateRows(input, e || this.aggregates) :\n this.modelGenerator.generateRows(input, e || this.aggregates, cStart, cEnd);\n var fragment = document.createDocumentFragment();\n var rowrenderer = new RowRenderer(this.locator, null, this.parent);\n rowrenderer.element = createElement('TR', { className: 'e-summaryrow' });\n for (var srow = 0, len = summaries.length; srow < len; srow++) {\n var row = rows[srow];\n if (!row) {\n continue;\n }\n var tr = rowrenderer.render(row, dummies);\n fragment.appendChild(tr);\n }\n table.tFoot.appendChild(fragment);\n this.aggregates = e;\n };\n FooterRenderer.prototype.refresh = function (e) {\n if (this.parent.getFrozenColumns()) {\n remove(this.getPanel());\n this.renderPanel();\n this.renderTable();\n this.freezeTable.tFoot.innerHTML = '';\n this.renderSummaryContent(e, this.freezeTable, 0, this.parent.getFrozenColumns());\n }\n this.getTable().tFoot.innerHTML = '';\n this.renderSummaryContent(e, this.getTable(), this.parent.getFrozenColumns());\n // check freeze content have no row case\n if (this.parent.getFrozenColumns()) {\n var frozenDiv = this.frozenContent;\n if (!frozenDiv.offsetHeight) {\n frozenDiv.style.height = this.getTable().offsetHeight + 'px';\n }\n }\n this.onScroll();\n };\n FooterRenderer.prototype.refreshCol = function () {\n // frozen table \n var mheaderCol;\n var fheaderCol = mheaderCol = this.parent.element.querySelector('.e-gridheader').querySelector('colgroup').cloneNode(true);\n if (this.parent.getFrozenColumns()) {\n mheaderCol = renderMovable(fheaderCol, this.parent.getFrozenColumns());\n this.freezeTable.replaceChild(fheaderCol, this.freezeTable.querySelector('colGroup'));\n }\n this.getTable().replaceChild(mheaderCol, this.getColGroup());\n this.setColGroup(mheaderCol);\n };\n FooterRenderer.prototype.onWidthChange = function (args) {\n this.getColFromIndex(args.index).style.width = formatUnit(args.width);\n if (this.parent.allowResizing && args.module === 'resize') {\n this.updateFooterTableWidth(this.getTable());\n }\n };\n FooterRenderer.prototype.onScroll = function (e) {\n if (e === void 0) { e = { left: this.parent.getContent().firstChild.scrollLeft }; }\n this.getTable().parentElement.scrollLeft = e.left;\n };\n FooterRenderer.prototype.getColFromIndex = function (index) {\n var fCol = this.parent.getFrozenColumns();\n if (fCol && fCol > index) {\n return this.freezeTable.querySelector('colGroup').children[index];\n }\n return this.getColGroup().children[index - fCol];\n };\n FooterRenderer.prototype.columnVisibilityChanged = function () {\n this.refresh();\n };\n FooterRenderer.prototype.addEventListener = function () {\n this.parent.on(colGroupRefresh, this.refreshCol, this);\n this.parent.on(columnWidthChanged, this.onWidthChange, this);\n this.parent.on(scroll, this.onScroll, this);\n this.parent.on(columnVisibilityChanged, this.columnVisibilityChanged, this);\n };\n FooterRenderer.prototype.removeEventListener = function () {\n this.parent.off(colGroupRefresh, this.refreshCol);\n this.parent.off(columnWidthChanged, this.onWidthChange);\n this.parent.off(scroll, this.onScroll);\n this.parent.off(columnVisibilityChanged, this.columnVisibilityChanged);\n };\n FooterRenderer.prototype.updateFooterTableWidth = function (tFoot) {\n var tHead = this.parent.getHeaderTable();\n if (tHead && tFoot) {\n tFoot.style.width = tHead.style.width;\n }\n };\n return FooterRenderer;\n}(ContentRender));\nexport { FooterRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { createElement } from '@syncfusion/ej2-base';\nimport { appendChildren } from '../base/util';\nimport { CellRenderer } from './cell-renderer';\n/**\n * SummaryCellRenderer class which responsible for building summary cell content.\n * @hidden\n */\nvar SummaryCellRenderer = /** @class */ (function (_super) {\n __extends(SummaryCellRenderer, _super);\n function SummaryCellRenderer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.element = createElement('TD', { className: 'e-summarycell', attrs: { role: 'gridcell', tabindex: '-1' } });\n return _this;\n }\n SummaryCellRenderer.prototype.getValue = function (field, data, column) {\n var key;\n key = !isNullOrUndefined(column.type) ?\n column.field + ' - ' + (typeof column.type === 'string' ? column.type.toLowerCase() : '') : column.columnName;\n return data[column.columnName] ? data[column.columnName][key] : '';\n };\n SummaryCellRenderer.prototype.evaluate = function (node, cell, data, attributes) {\n var column = cell.column;\n if (!(column.footerTemplate || column.groupFooterTemplate || column.groupCaptionTemplate)) {\n return true;\n }\n var tempObj = column.getTemplate(cell.cellType);\n appendChildren(node, tempObj.fn(data[column.columnName], this.parent, tempObj.property));\n return false;\n };\n return SummaryCellRenderer;\n}(CellRenderer));\nexport { SummaryCellRenderer };\n","import { EventHandler } from '@syncfusion/ej2-base';\nimport { debounce } from '@syncfusion/ej2-base';\n/**\n * InterSectionObserver - class watch whether it enters the viewport.\n * @hidden\n */\nvar InterSectionObserver = /** @class */ (function () {\n function InterSectionObserver(element, options) {\n var _this = this;\n this.fromWheel = false;\n this.touchMove = false;\n this.options = {};\n this.sentinelInfo = {\n 'up': {\n check: function (rect, info) {\n var top = rect.top - _this.containerRect.top;\n info.entered = top >= 0;\n return top + (_this.options.pageHeight / 2) >= 0;\n },\n axis: 'Y'\n },\n 'down': {\n check: function (rect, info) {\n var cHeight = _this.options.container.clientHeight;\n var top = rect.bottom;\n info.entered = rect.bottom <= _this.containerRect.bottom;\n return top - (_this.options.pageHeight / 2) <= _this.options.pageHeight / 2;\n }, axis: 'Y'\n },\n 'right': {\n check: function (rect, info) {\n var right = rect.right;\n info.entered = right < _this.containerRect.right;\n return right - _this.containerRect.width <= _this.containerRect.right;\n }, axis: 'X'\n },\n 'left': {\n check: function (rect, info) {\n var left = rect.left;\n info.entered = left > 0;\n return left + _this.containerRect.width >= _this.containerRect.left;\n }, axis: 'X'\n }\n };\n this.element = element;\n this.options = options;\n }\n InterSectionObserver.prototype.observe = function (callback, onEnterCallback) {\n var _this = this;\n this.containerRect = this.options.container.getBoundingClientRect();\n EventHandler.add(this.options.container, 'wheel', function () { return _this.fromWheel = true; }, this);\n EventHandler.add(this.options.container, 'scroll', this.virtualScrollHandler(callback, onEnterCallback), this);\n };\n InterSectionObserver.prototype.check = function (direction) {\n var info = this.sentinelInfo[direction];\n return info.check(this.element.getBoundingClientRect(), info);\n };\n InterSectionObserver.prototype.virtualScrollHandler = function (callback, onEnterCallback) {\n var _this = this;\n var prevTop = 0;\n var prevLeft = 0;\n var debounced100 = debounce(callback, 100);\n var debounced50 = debounce(callback, 50);\n return function (e) {\n var top = e.target.scrollTop;\n var left = e.target.scrollLeft;\n var direction = prevTop < top ? 'down' : 'up';\n direction = prevLeft === left ? direction : prevLeft < left ? 'right' : 'left';\n prevTop = top;\n prevLeft = left;\n var current = _this.sentinelInfo[direction];\n if (_this.options.axes.indexOf(current.axis) === -1) {\n return;\n }\n var check = _this.check(direction);\n if (current.entered) {\n onEnterCallback(_this.element, current, direction, { top: top, left: left });\n }\n if (check) {\n var fn = _this.fromWheel ? _this.options.debounceEvent ? debounced100 : callback : debounced100;\n if (current.axis === 'X') {\n fn = debounced50;\n }\n fn({ direction: direction, sentinel: current, offset: { top: top, left: left } });\n }\n _this.fromWheel = false;\n };\n };\n InterSectionObserver.prototype.setPageHeight = function (value) {\n this.options.pageHeight = value;\n };\n return InterSectionObserver;\n}());\nexport { InterSectionObserver };\n","import { Browser } from '@syncfusion/ej2-base';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { GroupModelGenerator } from '../services/group-model-generator';\n/**\n * Content module is used to render grid content\n */\nvar VirtualRowModelGenerator = /** @class */ (function () {\n function VirtualRowModelGenerator(parent) {\n this.cOffsets = {};\n this.cache = {};\n this.data = {};\n this.groups = {};\n this.parent = parent;\n this.model = this.parent.pageSettings;\n this.rowModelGenerator = this.parent.allowGrouping ? new GroupModelGenerator(this.parent) : new RowModelGenerator(this.parent);\n }\n VirtualRowModelGenerator.prototype.generateRows = function (data, notifyArgs) {\n var _this = this;\n var info = notifyArgs.virtualInfo = notifyArgs.virtualInfo || this.getData();\n var xAxis = info.sentinelInfo && info.sentinelInfo.axis === 'X';\n var page = !xAxis && info.loadNext && !info.loadSelf ? info.nextInfo.page : info.page;\n var result = [];\n var center = ~~(this.model.pageSize / 2);\n var indexes = this.getBlockIndexes(page);\n var loadedBlocks = [];\n this.checkAndResetCache(notifyArgs.requestType);\n if (this.parent.enableColumnVirtualization) {\n info.blockIndexes.forEach(function (value) {\n if (_this.isBlockAvailable(value)) {\n _this.cache[value] = _this.rowModelGenerator.refreshRows(_this.cache[value]);\n }\n });\n }\n info.blockIndexes.forEach(function (value) {\n if (!_this.isBlockAvailable(value)) {\n var rows = _this.rowModelGenerator.generateRows(data, {\n virtualInfo: info, startIndex: _this.getStartIndex(value, data)\n });\n var median = ~~Math.max(rows.length, _this.model.pageSize) / 2;\n if (!_this.isBlockAvailable(indexes[0])) {\n _this.cache[indexes[0]] = rows.slice(0, median);\n }\n if (!_this.isBlockAvailable(indexes[1])) {\n _this.cache[indexes[1]] = rows.slice(median);\n }\n }\n if (_this.parent.groupSettings.columns.length && !xAxis && _this.cache[value]) {\n _this.cache[value] = _this.updateGroupRow(_this.cache[value], value);\n }\n result.push.apply(result, _this.cache[value]);\n if (_this.isBlockAvailable(value)) {\n loadedBlocks.push(value);\n }\n });\n info.blockIndexes = loadedBlocks;\n var grouping = 'records';\n if (this.parent.allowGrouping) {\n this.parent.currentViewData[grouping] = result.map(function (m) { return m.data; });\n }\n else {\n this.parent.currentViewData = result.map(function (m) { return m.data; });\n }\n return result;\n };\n VirtualRowModelGenerator.prototype.getBlockIndexes = function (page) {\n return [page + (page - 1), page * 2];\n };\n VirtualRowModelGenerator.prototype.getPage = function (block) {\n return block % 2 === 0 ? block / 2 : (block + 1) / 2;\n };\n VirtualRowModelGenerator.prototype.isBlockAvailable = function (value) {\n return value in this.cache;\n };\n VirtualRowModelGenerator.prototype.getData = function () {\n return {\n page: this.model.currentPage,\n blockIndexes: this.getBlockIndexes(this.model.currentPage),\n direction: 'down',\n columnIndexes: this.parent.getColumnIndexesInView()\n };\n };\n VirtualRowModelGenerator.prototype.getStartIndex = function (blk, data, full) {\n if (full === void 0) { full = true; }\n var page = this.getPage(blk);\n var even = blk % 2 === 0;\n var index = (page - 1) * this.model.pageSize;\n return full || !even ? index : index + ~~(this.model.pageSize / 2);\n };\n VirtualRowModelGenerator.prototype.getColumnIndexes = function (content) {\n var _this = this;\n if (content === void 0) { content = this.parent.getHeaderContent().firstChild; }\n var indexes = [];\n var sLeft = content.scrollLeft | 0;\n var keys = Object.keys(this.cOffsets);\n var cWidth = content.getBoundingClientRect().width;\n sLeft = Math.min(this.cOffsets[keys.length - 1] - cWidth, sLeft);\n var calWidth = Browser.isDevice ? 2 * cWidth : cWidth / 2;\n var left = sLeft + cWidth + (sLeft === 0 ? calWidth : 0);\n keys.some(function (offset, indx, input) {\n var iOffset = Number(offset);\n var offsetVal = _this.cOffsets[offset];\n var border = sLeft - calWidth <= offsetVal && left + calWidth >= offsetVal;\n if (border) {\n indexes.push(iOffset);\n }\n return left + calWidth < offsetVal;\n });\n return indexes;\n };\n VirtualRowModelGenerator.prototype.checkAndResetCache = function (action) {\n var clear = ['paging', 'refresh', 'sorting', 'filtering', 'searching', 'grouping', 'ungrouping', 'reorder']\n .some(function (value) { return action === value; });\n if (clear) {\n this.cache = {};\n this.data = {};\n this.groups = {};\n }\n return clear;\n };\n VirtualRowModelGenerator.prototype.refreshColOffsets = function () {\n var _this = this;\n var col = 0;\n this.cOffsets = {};\n var gLen = this.parent.groupSettings.columns.length;\n var cols = this.parent.columns;\n var cLen = cols.length;\n var isVisible = function (column) { return column.visible &&\n (!_this.parent.groupSettings.showGroupedColumn ? _this.parent.groupSettings.columns.indexOf(column.field) < 0 : column.visible); };\n this.parent.groupSettings.columns.forEach(function (c, n) { return _this.cOffsets[n] = (_this.cOffsets[n - 1] | 0) + 30; });\n Array.apply(null, Array(cLen)).map(function () { return col++; }).forEach(function (block, i) {\n block = block + gLen;\n _this.cOffsets[block] = (_this.cOffsets[block - 1] | 0) + (isVisible(cols[i]) ? parseInt(cols[i].width, 10) : 0);\n });\n };\n VirtualRowModelGenerator.prototype.updateGroupRow = function (current, block) {\n var _this = this;\n var currentFirst = current[0];\n var rows = [];\n Object.keys(this.cache).forEach(function (key) {\n if (Number(key) < block) {\n rows = rows.concat(_this.cache[key]);\n }\n });\n if ((currentFirst && currentFirst.isDataRow) || block % 2 === 0) {\n return current;\n }\n return this.iterateGroup(current, rows);\n };\n VirtualRowModelGenerator.prototype.iterateGroup = function (current, rows) {\n var currentFirst = current[0];\n var offset = 0;\n if (currentFirst && currentFirst.isDataRow) {\n return current;\n }\n var isPresent = current.some(function (row) {\n return rows.some(function (oRow, index) {\n var res = oRow && oRow.data.field !== undefined && oRow.data.field === row.data.field &&\n oRow.data.key === row.data.key;\n if (res) {\n offset = index;\n }\n return res;\n });\n });\n if (isPresent) {\n current.shift();\n current = this.iterateGroup(current, rows.slice(offset));\n }\n return current;\n };\n VirtualRowModelGenerator.prototype.getRows = function () {\n var _this = this;\n var rows = [];\n Object.keys(this.cache).forEach(function (key) { return rows = rows.concat(_this.cache[key]); });\n return rows;\n };\n return VirtualRowModelGenerator;\n}());\nexport { VirtualRowModelGenerator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement, closest, formatUnit } from '@syncfusion/ej2-base';\nimport { Browser } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { getRowHeight } from '../base/util';\nimport { dataReady, modelChanged, refreshVirtualBlock, contentReady } from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { ContentRender } from './content-renderer';\nimport { HeaderRender } from './header-renderer';\nimport { InterSectionObserver } from '../services/intersection-observer';\nimport { VirtualRowModelGenerator } from '../services/virtual-row-model-generator';\n/**\n * VirtualContentRenderer\n * @hidden\n */\nvar VirtualContentRenderer = /** @class */ (function (_super) {\n __extends(VirtualContentRenderer, _super);\n function VirtualContentRenderer(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.prevHeight = 0;\n _this.preventEvent = false;\n _this.actions = ['filtering', 'searching', 'grouping', 'ungrouping'];\n _this.offsets = {};\n _this.tmpOffsets = {};\n _this.virtualEle = new VirtualElementHandler();\n _this.offsetKeys = [];\n _this.isFocused = false;\n _this.locator = locator;\n _this.eventListener('on');\n _this.vgenerator = _this.generator;\n return _this;\n }\n VirtualContentRenderer.prototype.renderTable = function () {\n this.header = this.locator.getService('rendererFactory').getRenderer(RenderType.Header);\n _super.prototype.renderTable.call(this);\n this.virtualEle.table = this.getTable();\n this.virtualEle.content = this.content = this.getPanel().firstChild;\n this.virtualEle.renderWrapper(this.parent.height);\n this.virtualEle.renderPlaceHolder();\n this.virtualEle.wrapper.style.position = 'absolute';\n var debounceEvent = (this.parent.dataSource instanceof DataManager && !this.parent.dataSource.dataSource.offline);\n var opt = {\n container: this.content, pageHeight: this.getBlockHeight() * 2, debounceEvent: debounceEvent,\n axes: this.parent.enableColumnVirtualization ? ['X', 'Y'] : ['Y']\n };\n this.observer = new InterSectionObserver(this.virtualEle.wrapper, opt);\n };\n VirtualContentRenderer.prototype.renderEmpty = function (tbody) {\n this.getTable().appendChild(tbody);\n this.virtualEle.adjustTable(0, 0);\n };\n VirtualContentRenderer.prototype.scrollListener = function (scrollArgs) {\n if (this.preventEvent || this.parent.isDestroyed) {\n this.preventEvent = false;\n return;\n }\n this.isFocused = this.content === closest(document.activeElement, '.e-content') || this.content === document.activeElement;\n var info = scrollArgs.sentinel;\n var viewInfo = this.getInfoFromView(scrollArgs.direction, info, scrollArgs.offset);\n if (this.prevInfo && ((info.axis === 'Y' && this.prevInfo.blockIndexes.toString() === viewInfo.blockIndexes.toString())\n || (info.axis === 'X' && this.prevInfo.columnIndexes.toString() === viewInfo.columnIndexes.toString()))) {\n return;\n }\n this.parent.setColumnIndexesInView(this.parent.enableColumnVirtualization ? viewInfo.columnIndexes : []);\n this.parent.pageSettings.currentPage = viewInfo.loadNext && !viewInfo.loadSelf ? viewInfo.nextInfo.page : viewInfo.page;\n this.parent.notify(viewInfo.event, { requestType: 'virtualscroll', virtualInfo: viewInfo });\n };\n VirtualContentRenderer.prototype.block = function (blk) {\n return this.vgenerator.isBlockAvailable(blk);\n };\n VirtualContentRenderer.prototype.getInfoFromView = function (direction, info, e) {\n var tempBlocks = [];\n var infoType = { direction: direction, sentinelInfo: info, offsets: e };\n infoType.page = this.getPageFromTop(e.top, infoType);\n infoType.blockIndexes = tempBlocks = this.vgenerator.getBlockIndexes(infoType.page);\n infoType.loadSelf = !this.vgenerator.isBlockAvailable(tempBlocks[infoType.block]);\n var blocks = this.ensureBlocks(infoType);\n infoType.blockIndexes = blocks;\n infoType.loadNext = !blocks.filter(function (val) { return tempBlocks.indexOf(val) === -1; })\n .every(this.block.bind(this));\n infoType.event = (infoType.loadNext || infoType.loadSelf) ? modelChanged : refreshVirtualBlock;\n infoType.nextInfo = infoType.loadNext ? { page: Math.max(1, infoType.page + (direction === 'down' ? 1 : -1)) } : {};\n infoType.columnIndexes = info.axis === 'X' ? this.vgenerator.getColumnIndexes() : this.parent.getColumnIndexesInView();\n if (this.parent.enableColumnVirtualization && info.axis === 'X') {\n infoType.event = refreshVirtualBlock;\n }\n return infoType;\n };\n VirtualContentRenderer.prototype.ensureBlocks = function (info) {\n var _this = this;\n var index = info.blockIndexes[info.block];\n var mIdx;\n var old = index;\n var max = Math.max;\n var indexes = info.direction === 'down' ? [max(index, 1), ++index, ++index] : [max(index - 1, 1), index, index + 1];\n indexes = indexes.filter(function (val, ind) { return indexes.indexOf(val) === ind; });\n if (this.prevInfo.blockIndexes.toString() === indexes.toString()) {\n return indexes;\n }\n if (info.loadSelf || (info.direction === 'down' && this.isEndBlock(old))) {\n indexes = this.vgenerator.getBlockIndexes(info.page);\n }\n indexes.some(function (val, ind) {\n var result = val === _this.getTotalBlocks();\n if (result) {\n mIdx = ind;\n }\n return result;\n });\n if (mIdx !== undefined) {\n indexes = indexes.slice(0, mIdx + 1);\n if (info.block === 0 && indexes.length === 1 && this.vgenerator.isBlockAvailable(indexes[0] - 1)) {\n indexes = [indexes[0] - 1, indexes[0]];\n }\n }\n return indexes;\n };\n VirtualContentRenderer.prototype.appendContent = function (target, newChild, e) {\n var info = e.virtualInfo;\n this.prevInfo = this.prevInfo || e.virtualInfo;\n var cBlock = (info.columnIndexes[0]) - 1;\n var cOffset = this.getColumnOffset(cBlock);\n var width;\n var blocks = info.blockIndexes;\n if (this.parent.groupSettings.columns.length) {\n this.refreshOffsets();\n }\n var translate = this.getTranslateY(this.content.scrollTop, this.content.getBoundingClientRect().height, info);\n this.virtualEle.adjustTable(cOffset, translate);\n if (this.parent.enableColumnVirtualization) {\n this.header.virtualEle.adjustTable(cOffset, 0);\n }\n if (this.parent.enableColumnVirtualization) {\n var cIndex = info.columnIndexes;\n width = this.getColumnOffset(cIndex[cIndex.length - 1]) - this.getColumnOffset(cIndex[0] - 1) + '';\n this.header.virtualEle.setWrapperWidth(width);\n }\n this.virtualEle.setWrapperWidth(width, this.parent.enableColumnVirtualization || Browser.isIE);\n target.appendChild(newChild);\n this.getTable().appendChild(target);\n if (this.parent.groupSettings.columns.length) {\n if (info.direction === 'up') {\n var blk = this.offsets[this.getTotalBlocks()] - this.prevHeight;\n this.preventEvent = true;\n var sTop = this.content.scrollTop;\n this.content.scrollTop = sTop + blk;\n }\n this.setVirtualHeight();\n this.observer.setPageHeight(this.getOffset(blocks[blocks.length - 1]) - this.getOffset(blocks[0] - 1));\n }\n this.prevInfo = info;\n if (this.isFocused) {\n this.content.focus();\n }\n };\n VirtualContentRenderer.prototype.onDataReady = function (e) {\n if (!isNullOrUndefined(e.count)) {\n this.count = e.count;\n this.maxPage = Math.ceil(e.count / this.parent.pageSettings.pageSize);\n }\n this.vgenerator.checkAndResetCache(e.requestType);\n this.refreshOffsets();\n this.setVirtualHeight();\n this.resetScrollPosition(e.requestType);\n };\n VirtualContentRenderer.prototype.setVirtualHeight = function () {\n var width = this.parent.enableColumnVirtualization ?\n this.getColumnOffset(this.parent.columns.length + this.parent.groupSettings.columns.length - 1) + 'px' : '100%';\n this.virtualEle.setVirtualHeight(this.offsets[this.getTotalBlocks()], width);\n if (this.parent.enableColumnVirtualization) {\n this.header.virtualEle.setVirtualHeight(1, width);\n }\n };\n VirtualContentRenderer.prototype.getPageFromTop = function (sTop, info) {\n var _this = this;\n var total = this.getTotalBlocks();\n var page = 0;\n var extra = this.offsets[total] - this.prevHeight;\n this.offsetKeys.some(function (offset) {\n var iOffset = Number(offset);\n var border = sTop < _this.offsets[offset] || (iOffset === total && sTop > _this.offsets[offset]);\n if (border) {\n info.block = iOffset % 2 === 0 ? 1 : 0;\n page = Math.max(1, Math.min(_this.vgenerator.getPage(iOffset), _this.maxPage));\n }\n return border;\n });\n return page;\n };\n VirtualContentRenderer.prototype.getTranslateY = function (sTop, cHeight, info, isOnenter) {\n if (info === undefined) {\n info = { page: this.getPageFromTop(sTop, {}) };\n info.blockIndexes = this.vgenerator.getBlockIndexes(info.page);\n }\n var block = (info.blockIndexes[0] || 1) - 1;\n var translate = this.getOffset(block);\n var endTranslate = this.getOffset(info.blockIndexes[info.blockIndexes.length - 1]);\n if (isOnenter) {\n info = this.prevInfo;\n }\n var result = translate > sTop ?\n this.getOffset(block - 1) : endTranslate < (sTop + cHeight) ? this.getOffset(block + 1) : translate;\n var blockHeight = this.offsets[info.blockIndexes[info.blockIndexes.length - 1]] -\n this.tmpOffsets[info.blockIndexes[0]];\n if (result + blockHeight > this.offsets[this.getTotalBlocks()]) {\n result -= (result + blockHeight) - this.offsets[this.getTotalBlocks()];\n }\n return result;\n };\n VirtualContentRenderer.prototype.getOffset = function (block) {\n return Math.min(this.offsets[block] | 0, this.offsets[this.maxBlock]);\n };\n VirtualContentRenderer.prototype.onEntered = function () {\n var _this = this;\n return function (element, current, direction, e) {\n var xAxis = current.axis === 'X';\n var top = _this.prevInfo.offsets ? _this.prevInfo.offsets.top : null;\n var height = _this.content.getBoundingClientRect().height;\n var x = _this.getColumnOffset(xAxis ? _this.vgenerator.getColumnIndexes()[0] - 1 : _this.prevInfo.columnIndexes[0] - 1);\n var y = _this.getTranslateY(e.top, height, xAxis && top === e.top ? _this.prevInfo : undefined, true);\n _this.virtualEle.adjustTable(x, Math.min(y, _this.offsets[_this.maxBlock]));\n if (_this.parent.enableColumnVirtualization) {\n _this.header.virtualEle.adjustTable(x, 0);\n }\n };\n };\n VirtualContentRenderer.prototype.eventListener = function (action) {\n var _this = this;\n this.parent[action](dataReady, this.onDataReady, this);\n this.parent[action](refreshVirtualBlock, this.refreshContentRows, this);\n this.actions.forEach(function (event) { return _this.parent[action](event + \"-begin\", _this.onActionBegin, _this); });\n var fn = function () {\n _this.observer.observe(function (scrollArgs) { return _this.scrollListener(scrollArgs); }, _this.onEntered());\n _this.parent.off(contentReady, fn);\n };\n this.parent.on(contentReady, fn, this);\n };\n VirtualContentRenderer.prototype.getBlockSize = function () {\n return this.parent.pageSettings.pageSize >> 1;\n };\n VirtualContentRenderer.prototype.getBlockHeight = function () {\n return this.getBlockSize() * this.getRowHeight();\n };\n VirtualContentRenderer.prototype.isEndBlock = function (index) {\n var totalBlocks = this.getTotalBlocks();\n return index >= totalBlocks || index === totalBlocks - 1;\n };\n VirtualContentRenderer.prototype.getRowHeight = function () {\n return this.parent.rowHeight ? this.parent.rowHeight : getRowHeight();\n };\n VirtualContentRenderer.prototype.getTotalBlocks = function () {\n return Math.ceil(this.count / this.getBlockSize());\n };\n VirtualContentRenderer.prototype.getColumnOffset = function (block) {\n return this.vgenerator.cOffsets[block] | 0;\n };\n VirtualContentRenderer.prototype.getModelGenerator = function () {\n return new VirtualRowModelGenerator(this.parent);\n };\n VirtualContentRenderer.prototype.resetScrollPosition = function (action) {\n if (this.actions.some(function (value) { return value === action; })) {\n this.preventEvent = this.content.scrollTop !== 0;\n this.content.scrollTop = 0;\n }\n };\n VirtualContentRenderer.prototype.onActionBegin = function (e) {\n //Update property silently..\n this.parent.setProperties({ pageSettings: { currentPage: 1 } }, true);\n };\n VirtualContentRenderer.prototype.getRows = function () {\n return this.vgenerator.getRows();\n };\n VirtualContentRenderer.prototype.getRowByIndex = function (index) {\n var prev = this.prevInfo.blockIndexes;\n var startIdx = (prev[0] - 1) * this.getBlockSize();\n return this.parent.getDataRows()[index - startIdx];\n };\n VirtualContentRenderer.prototype.getVirtualRowIndex = function (index) {\n var prev = this.prevInfo.blockIndexes;\n var startIdx = (prev[0] - 1) * this.getBlockSize();\n return startIdx + index;\n };\n VirtualContentRenderer.prototype.refreshOffsets = function () {\n var _this = this;\n var row = 0;\n var bSize = this.getBlockSize();\n var total = this.getTotalBlocks();\n this.prevHeight = this.offsets[total];\n this.maxBlock = total % 2 === 0 ? total - 2 : total - 1;\n this.offsets = {};\n //Row offset update\n Array.apply(null, Array(total)).map(function () { return ++row; })\n .forEach(function (block) {\n var tmp = (_this.vgenerator.cache[block] || []).length;\n var rem = _this.count % bSize;\n var size = block in _this.vgenerator.cache ?\n tmp * _this.getRowHeight() : rem && block === total ? rem * _this.getRowHeight() : _this.getBlockHeight();\n // let size: number = this.parent.groupSettings.columns.length && block in this.vgenerator.cache ?\n // tmp * getRowHeight() : this.getBlockHeight();\n _this.offsets[block] = (_this.offsets[block - 1] | 0) + size;\n _this.tmpOffsets[block] = _this.offsets[block - 1] | 0;\n });\n this.offsetKeys = Object.keys(this.offsets);\n //Column offset update\n if (this.parent.enableColumnVirtualization) {\n this.vgenerator.refreshColOffsets();\n }\n };\n VirtualContentRenderer.prototype.refreshVirtualElement = function () {\n this.vgenerator.refreshColOffsets();\n this.setVirtualHeight();\n };\n return VirtualContentRenderer;\n}(ContentRender));\nexport { VirtualContentRenderer };\n/**\n * @hidden\n */\nvar VirtualHeaderRenderer = /** @class */ (function (_super) {\n __extends(VirtualHeaderRenderer, _super);\n function VirtualHeaderRenderer(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.virtualEle = new VirtualElementHandler();\n _this.gen = new VirtualRowModelGenerator(_this.parent);\n _this.parent.on(refreshVirtualBlock, function (e) { return e.virtualInfo.sentinelInfo.axis === 'X' ? _this.refreshUI() : null; }, _this);\n return _this;\n }\n VirtualHeaderRenderer.prototype.renderTable = function () {\n this.gen.refreshColOffsets();\n this.parent.setColumnIndexesInView(this.gen.getColumnIndexes(this.getPanel().firstChild));\n _super.prototype.renderTable.call(this);\n this.virtualEle.table = this.getTable();\n this.virtualEle.content = this.getPanel().firstChild;\n this.virtualEle.content.style.position = 'relative';\n this.virtualEle.renderWrapper();\n this.virtualEle.renderPlaceHolder('absolute');\n };\n VirtualHeaderRenderer.prototype.appendContent = function (table) {\n this.virtualEle.wrapper.appendChild(table);\n };\n VirtualHeaderRenderer.prototype.refreshUI = function () {\n this.gen.refreshColOffsets();\n this.parent.setColumnIndexesInView(this.gen.getColumnIndexes(this.getPanel().firstChild));\n _super.prototype.refreshUI.call(this);\n };\n return VirtualHeaderRenderer;\n}(HeaderRender));\nexport { VirtualHeaderRenderer };\n/**\n * @hidden\n */\nvar VirtualElementHandler = /** @class */ (function () {\n function VirtualElementHandler() {\n }\n VirtualElementHandler.prototype.renderWrapper = function (height) {\n this.wrapper = createElement('div', { className: 'e-virtualtable', styles: \"min-height:\" + formatUnit(height) });\n this.wrapper.appendChild(this.table);\n this.content.appendChild(this.wrapper);\n };\n VirtualElementHandler.prototype.renderPlaceHolder = function (position) {\n if (position === void 0) { position = 'relative'; }\n this.placeholder = createElement('div', { className: 'e-virtualtrack', styles: \"position:\" + position });\n this.content.appendChild(this.placeholder);\n };\n VirtualElementHandler.prototype.adjustTable = function (xValue, yValue) {\n this.wrapper.style.transform = \"translate(\" + xValue + \"px, \" + yValue + \"px)\";\n };\n VirtualElementHandler.prototype.setWrapperWidth = function (width, full) {\n this.wrapper.style.width = width ? width + \"px\" : full ? '100%' : '';\n };\n VirtualElementHandler.prototype.setVirtualHeight = function (height, width) {\n this.placeholder.style.height = height + \"px\";\n this.placeholder.style.width = width;\n };\n return VirtualElementHandler;\n}());\nexport { VirtualElementHandler };\n","import { getRowHeight } from '../base/util';\nimport { initialLoad } from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { VirtualContentRenderer, VirtualHeaderRenderer } from '../renderer/virtual-content-renderer';\nimport * as events from '../base/constant';\n/**\n * Virtual Scrolling class\n */\nvar VirtualScroll = /** @class */ (function () {\n function VirtualScroll(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.addEventListener();\n }\n VirtualScroll.prototype.getModuleName = function () {\n return 'virtualscroll';\n };\n VirtualScroll.prototype.instantiateRenderer = function () {\n var renderer = this.locator.getService('rendererFactory');\n if (this.parent.enableColumnVirtualization) {\n renderer.addRenderer(RenderType.Header, new VirtualHeaderRenderer(this.parent, this.locator));\n }\n renderer.addRenderer(RenderType.Content, new VirtualContentRenderer(this.parent, this.locator));\n this.ensurePageSize();\n };\n VirtualScroll.prototype.ensurePageSize = function () {\n var rowHeight = getRowHeight(this.parent.element);\n this.blockSize = ~~(this.parent.height / rowHeight);\n var height = this.blockSize * 2;\n var size = this.parent.pageSettings.pageSize;\n this.parent.setProperties({ pageSettings: { pageSize: size < height ? height : size } }, true);\n };\n VirtualScroll.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(initialLoad, this.instantiateRenderer, this);\n this.parent.on(events.columnWidthChanged, this.refreshVirtualElement, this);\n };\n VirtualScroll.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(initialLoad, this.instantiateRenderer);\n this.parent.off(events.columnWidthChanged, this.refreshVirtualElement);\n };\n VirtualScroll.prototype.refreshVirtualElement = function (args) {\n if (this.parent.enableColumnVirtualization && args.module === 'resize') {\n var renderer = this.locator.getService('rendererFactory');\n renderer.getRenderer(RenderType.Content).refreshVirtualElement();\n }\n };\n VirtualScroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n return VirtualScroll;\n}());\nexport { VirtualScroll };\n","import { createElement, isNullOrUndefined, addClass } from '@syncfusion/ej2-base';\n/**\n * Edit render module is used to render grid edit row.\n * @hidden\n */\nvar InlineEditRender = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function InlineEditRender(parent) {\n this.parent = parent;\n }\n InlineEditRender.prototype.addNew = function (elements, args) {\n var mTbody;\n var tbody;\n if (this.parent.frozenRows) {\n tbody = this.parent.getHeaderContent().querySelector('tbody');\n }\n else {\n tbody = this.parent.getContentTable().querySelector('tbody');\n }\n args.row = createElement('tr', { className: 'e-row e-addedrow' });\n if (tbody.querySelector('.e-emptyrow')) {\n tbody.querySelector('.e-emptyrow').classList.add('e-hide');\n }\n tbody.insertBefore(args.row, tbody.firstChild);\n args.row.appendChild(this.getEditElement(elements, false));\n if (this.parent.getFrozenColumns()) {\n var mEle = this.renderMovableform(args.row);\n if (this.parent.frozenRows) {\n mTbody = this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody');\n }\n else {\n mTbody = this.parent.getContent().querySelector('.e-movablecontent').querySelector('tbody');\n }\n mTbody.insertBefore(mEle, mTbody.firstChild);\n args.row.querySelector('.e-normaledit').setAttribute('colspan', this.parent.getFrozenColumns() + '');\n mEle.setAttribute('colspan', '' + (this.parent.getColumns().length - this.parent.getFrozenColumns()));\n }\n };\n InlineEditRender.prototype.renderMovableform = function (ele) {\n var mEle = ele.cloneNode(true);\n this.renderMovable(ele, mEle);\n mEle.querySelector('colgroup').innerHTML = this.parent.getHeaderContent()\n .querySelector('.e-movableheader').querySelector('colgroup').innerHTML;\n return mEle;\n };\n InlineEditRender.prototype.updateFreezeEdit = function (row, td) {\n if (this.parent.getFrozenColumns()) {\n var idx = parseInt(row.getAttribute('aria-rowindex'), 10);\n var fCont = this.parent.getContent().querySelector('.e-frozencontent').querySelector('tbody');\n var mCont = this.parent.getContent().querySelector('.e-movablecontent').querySelector('tbody');\n var fHdr = this.parent.getHeaderContent().querySelector('.e-frozenheader').querySelector('tbody');\n var mHdr = this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody');\n if (this.parent.frozenRows && idx >= this.parent.frozenRows) {\n idx -= this.parent.frozenRows;\n }\n if (fCont.contains(row)) {\n td = td.concat([].slice.call(mCont.children[idx].querySelectorAll('td.e-rowcell')));\n }\n else if (mCont.contains(row)) {\n td = td.concat([].slice.call(fCont.children[idx].querySelectorAll('td.e-rowcell')));\n }\n else if (fHdr.contains(row)) {\n td = td.concat([].slice.call(mHdr.children[idx].querySelectorAll('td.e-rowcell')));\n }\n else if (mHdr.contains(row)) {\n td = td.concat([].slice.call(fHdr.children[idx].querySelectorAll('td.e-rowcell')));\n }\n }\n return td;\n };\n InlineEditRender.prototype.update = function (elements, args) {\n var tdElement = [].slice.call(args.row.querySelectorAll('td.e-rowcell'));\n args.row.innerHTML = '';\n tdElement = this.updateFreezeEdit(args.row, tdElement);\n args.row.appendChild(this.getEditElement(elements, true, tdElement));\n args.row.classList.add('e-editedrow');\n this.refreshFreezeEdit(args.row);\n };\n InlineEditRender.prototype.refreshFreezeEdit = function (row) {\n var td = row.firstChild;\n var fCls;\n var cont;\n var idx = parseInt(row.getAttribute('aria-rowindex'), 10);\n if (this.parent.getFrozenColumns()) {\n if (idx < this.parent.frozenRows) {\n cont = this.parent.getHeaderContent();\n fCls = '.e-frozenheader';\n }\n else {\n cont = this.parent.getContent();\n fCls = '.e-frozencontent';\n }\n var mTd = td.cloneNode(true);\n var fRows = void 0;\n if (cont.querySelector(fCls).contains(row)) {\n fRows = this.parent.getMovableRowByIndex(idx);\n this.updateFrozenCont(fRows, td, mTd);\n }\n else {\n fRows = this.parent.getRowByIndex(idx);\n this.updateFrozenCont(fRows, mTd, td);\n }\n fRows.appendChild(mTd);\n fRows.classList.add('e-editedrow');\n }\n };\n InlineEditRender.prototype.updateFrozenCont = function (row, ele, mEle) {\n row.innerHTML = '';\n this.renderMovable(ele, mEle);\n mEle.querySelector('colgroup').innerHTML = this.parent.getHeaderContent()\n .querySelector('.e-movableheader').querySelector('colgroup').innerHTML;\n ele.setAttribute('colspan', this.parent.getFrozenColumns() + '');\n mEle.setAttribute('colspan', this.parent.getColumns().length - this.parent.getFrozenColumns() + '');\n };\n InlineEditRender.prototype.renderMovable = function (ele, mEle) {\n var frzCols = this.parent.getFrozenColumns();\n for (var i = 0; i < frzCols; i++) {\n mEle.querySelector('tr').removeChild(mEle.querySelector('tr').children[0]);\n }\n for (var i = frzCols, len = ele.querySelector('tr').childElementCount; i < len; i++) {\n ele.querySelector('tr').removeChild(ele.querySelector('tr').children[ele.querySelector('tr').childElementCount - 1]);\n }\n };\n InlineEditRender.prototype.getEditElement = function (elements, isEdit, tdElement) {\n var gObj = this.parent;\n var gLen = 0;\n var isDetail = !isNullOrUndefined(gObj.detailTemplate) || !isNullOrUndefined(gObj.childGrid) ? 1 : 0;\n if (gObj.allowGrouping) {\n gLen = gObj.groupSettings.columns.length;\n }\n var td = createElement('td', {\n className: 'e-editcell e-normaledit',\n attrs: { colspan: (gObj.getVisibleColumns().length + gLen + isDetail).toString() }\n });\n var form = createElement('form', { id: gObj.element.id + 'EditForm', className: 'e-gridform' });\n var table = createElement('table', { className: 'e-table e-inline-edit', attrs: { cellspacing: '0.25' } });\n table.appendChild(gObj.getContentTable().querySelector('colgroup').cloneNode(true));\n var tbody = createElement('tbody');\n var tr = createElement('tr');\n var i = 0;\n if (isDetail) {\n tr.insertBefore(createElement('td', { className: 'e-detailrowcollapse' }), tr.firstChild);\n }\n while (i < gLen) {\n tr.appendChild(createElement('td', { className: 'e-indentcell' }));\n i++;\n }\n var m = 0;\n i = 0;\n while ((isEdit && m < tdElement.length && i < gObj.getColumns().length) || i < gObj.getColumns().length) {\n var span = isEdit ? tdElement[m].getAttribute('colspan') : null;\n var col = gObj.getColumns()[i];\n var td_1 = createElement('td', {\n className: 'e-rowcell', attrs: { style: 'text-align:' + (col.textAlign ? col.textAlign : ''), 'colspan': span ? span : '' }\n });\n if (col.visible) {\n td_1.appendChild(elements[col.uid]);\n if (col.editType === 'booleanedit') {\n td_1.classList.add('e-boolcell');\n }\n else if (col.commands || col.commandsTemplate) {\n addClass([td_1], 'e-unboundcell');\n }\n }\n else {\n td_1.classList.add('e-hide');\n }\n tr.appendChild(td_1);\n i = span ? i + parseInt(span, 10) : i + 1;\n m++;\n }\n tbody.appendChild(tr);\n table.appendChild(tbody);\n form.appendChild(table);\n td.appendChild(form);\n return td;\n };\n InlineEditRender.prototype.removeEventListener = function () {\n //To destroy the renderer\n };\n return InlineEditRender;\n}());\nexport { InlineEditRender };\n","import { createElement, classList } from '@syncfusion/ej2-base';\n/**\n * Edit render module is used to render grid edit row.\n * @hidden\n */\nvar BatchEditRender = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function BatchEditRender(parent) {\n this.parent = parent;\n }\n BatchEditRender.prototype.update = function (elements, args) {\n args.cell.innerHTML = '';\n args.cell.appendChild(this.getEditElement(elements, args));\n args.cell.classList.add('e-editedbatchcell');\n classList(args.row, ['e-editedrow', 'e-batchrow'], []);\n };\n BatchEditRender.prototype.getEditElement = function (elements, args) {\n var gObj = this.parent;\n var form = createElement('form', { id: gObj.element.id + 'EditForm', className: 'e-gridform' });\n form.appendChild(elements[args.columnObject.uid]);\n if (args.columnObject.editType === 'booleanedit') {\n args.cell.classList.add('e-boolcell');\n }\n if (!args.columnObject.editType) {\n args.cell.classList.add('e-inputbox');\n }\n return form;\n };\n BatchEditRender.prototype.removeEventListener = function () {\n //To destroy the renderer\n };\n return BatchEditRender;\n}());\nexport { BatchEditRender };\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { remove, createElement } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { changeButtonType } from '../base/util';\n/**\n * Edit render module is used to render grid edit row.\n * @hidden\n */\nvar DialogEditRender = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function DialogEditRender(parent, serviceLocator) {\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.dialogDestroy, this.destroy, this);\n this.parent.on(events.destroy, this.destroy, this);\n }\n DialogEditRender.prototype.setLocaleObj = function () {\n this.l10n = this.serviceLocator.getService('localization');\n };\n DialogEditRender.prototype.addNew = function (elements, args) {\n this.isEdit = false;\n this.createDialog(elements, args);\n };\n DialogEditRender.prototype.update = function (elements, args) {\n this.isEdit = true;\n this.createDialog(elements, args);\n };\n DialogEditRender.prototype.createDialog = function (elements, args) {\n var gObj = this.parent;\n this.dialog = createElement('div', { id: gObj.element.id + '_dialogEdit_wrapper' });\n gObj.element.appendChild(this.dialog);\n this.setLocaleObj();\n var position = this.parent.element.getBoundingClientRect().height < 400 ?\n { X: 'center', Y: 'top' } : { X: 'center', Y: 'center' };\n this.dialogObj = new Dialog({\n header: this.isEdit ? this.l10n.getConstant('EditFormTitle') + ' ' + args.primaryKeyValue[0] :\n this.l10n.getConstant('AddFormTitle'), isModal: true, visible: true, cssClass: 'e-edit-dialog',\n content: this.getEditElement(elements),\n showCloseIcon: true,\n allowDragging: true,\n position: position,\n close: this.dialogClose.bind(this),\n closeOnEscape: true, width: '330px', target: gObj.element, animationSettings: { effect: 'None' },\n buttons: [{\n click: this.btnClick.bind(this),\n buttonModel: { content: this.l10n.getConstant('SaveButton'), cssClass: 'e-primary', isPrimary: true }\n },\n { click: this.btnClick.bind(this), buttonModel: { cssClass: 'e-flat', content: this.l10n.getConstant('CancelButton') } }]\n });\n this.dialogObj.appendTo(this.dialog);\n changeButtonType(this.dialogObj.element);\n };\n DialogEditRender.prototype.btnClick = function (e) {\n if (this.l10n.getConstant('CancelButton').toLowerCase() === e.target.innerText.trim().toLowerCase()) {\n this.dialogClose();\n }\n else {\n this.parent.endEdit();\n }\n };\n DialogEditRender.prototype.dialogClose = function () {\n this.parent.closeEdit();\n this.destroy();\n };\n DialogEditRender.prototype.destroy = function (args) {\n this.parent.notify(events.destroyForm, {});\n this.parent.isEdit = false;\n this.parent.notify(events.toolbarRefresh, {});\n if (this.dialog && !this.dialogObj.isDestroyed) {\n this.dialogObj.destroy();\n remove(this.dialog);\n }\n };\n DialogEditRender.prototype.getEditElement = function (elements) {\n var gObj = this.parent;\n var div = createElement('div', { className: this.isEdit ? 'e-editedrow' : 'e-insertedrow' });\n var form = createElement('form', { id: gObj.element.id + 'EditForm', className: 'e-gridform' });\n var table = createElement('table', { className: 'e-table', attrs: { cellspacing: '6px' } });\n var tbody = createElement('tbody');\n var cols = gObj.getColumns();\n for (var i = 0; i < cols.length; i++) {\n if (!cols[i].visible || cols[i].commands || cols[i].commandsTemplate) {\n continue;\n }\n var tr = createElement('tr');\n var dataCell = createElement('td', {\n className: 'e-rowcell', attrs: {\n style: 'text-align:' + (this.parent.enableRtl ? 'right' : 'left') + ';width:190px'\n }\n });\n var label = createElement('label', { innerHTML: cols[i].field });\n elements[cols[i].uid].classList.remove('e-input');\n dataCell.appendChild(elements[cols[i].uid]);\n tr.appendChild(dataCell);\n tbody.appendChild(tr);\n }\n table.appendChild(tbody);\n form.appendChild(table);\n div.appendChild(form);\n return div;\n };\n DialogEditRender.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.dialogDestroy, this.destroy);\n this.parent.off(events.destroy, this.destroy);\n };\n return DialogEditRender;\n}());\nexport { DialogEditRender };\n","import { isNullOrUndefined, closest, getValue } from '@syncfusion/ej2-base';\nimport { InlineEditRender } from './inline-edit-renderer';\nimport { BatchEditRender } from './batch-edit-renderer';\nimport { DialogEditRender } from './dialog-edit-renderer';\nimport { createElement, attributes, classList } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { RowModelGenerator } from '../services/row-model-generator';\n/**\n * Edit render module is used to render grid edit row.\n * @hidden\n */\nvar EditRender = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function EditRender(parent, serviceLocator) {\n //Internal variables \n this.editType = {\n 'Inline': InlineEditRender,\n 'Normal': InlineEditRender, 'Batch': BatchEditRender, 'Dialog': DialogEditRender\n };\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.renderer = new this.editType[this.parent.editSettings.mode](parent, serviceLocator);\n this.focus = serviceLocator.getService('focus');\n }\n EditRender.prototype.addNew = function (args) {\n this.renderer.addNew(this.getEditElements(args), args);\n this.convertWidget(args);\n };\n EditRender.prototype.update = function (args) {\n this.renderer.update(this.getEditElements(args), args);\n this.convertWidget(args);\n };\n EditRender.prototype.convertWidget = function (args) {\n var gObj = this.parent;\n var isFocused;\n var cell;\n var value;\n var fForm;\n var frzCols = gObj.getFrozenColumns();\n var form = gObj.element.querySelector('.e-gridform');\n if (frzCols && gObj.editSettings.mode === 'Normal') {\n var rowIndex = parseInt(args.row.getAttribute('aria-rowindex'), 10);\n if (gObj.frozenRows && (args.requestType === 'add' || rowIndex < gObj.frozenRows)) {\n fForm = gObj.element.querySelector('.e-movableheader').querySelector('.e-gridform');\n }\n else {\n fForm = gObj.element.querySelector('.e-movablecontent').querySelector('.e-gridform');\n }\n }\n var cols = gObj.editSettings.mode !== 'Batch' ? gObj.getColumns() : [gObj.getColumnByField(args.columnName)];\n for (var _i = 0, cols_1 = cols; _i < cols_1.length; _i++) {\n var col = cols_1[_i];\n if (!col.visible || col.commands) {\n continue;\n }\n value = (col.valueAccessor(col.field, args.rowData, col));\n if (frzCols && cols.indexOf(col) >= frzCols && gObj.editSettings.mode === 'Normal') {\n cell = fForm.querySelector('[e-mappinguid=' + col.uid + ']');\n }\n else {\n cell = form.querySelector('[e-mappinguid=' + col.uid + ']');\n }\n var temp = col.edit.write;\n if (!isNullOrUndefined(cell)) {\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n temp({\n rowData: args.rowData, element: cell, column: col, requestType: args.requestType, row: args.row,\n foreignKeyData: col.isForeignColumn() && getValue(col.field, args.foreignKeyData)\n });\n }\n else {\n col.edit.write({\n rowData: args.rowData, element: cell, column: col, requestType: args.requestType, row: args.row,\n foreignKeyData: col.isForeignColumn() && getValue(col.field, args.foreignKeyData)\n });\n }\n if (!isFocused && !cell.getAttribute('disabled')) {\n this.focusElement(cell, args.type);\n isFocused = true;\n }\n }\n }\n };\n EditRender.prototype.focusElement = function (elem, type) {\n var chkBox = this.parent.element.querySelector('.e-edit-checkselect');\n if (!isNullOrUndefined(chkBox)) {\n chkBox.nextElementSibling.classList.add('e-focus');\n }\n if (this.parent.editSettings.mode === 'Batch') {\n this.focus.onClick({ target: closest(elem, 'td') }, true);\n }\n else {\n elem.focus();\n }\n if (elem.classList.contains('e-defaultcell')) {\n elem.setSelectionRange(elem.value.length, elem.value.length);\n }\n };\n EditRender.prototype.getEditElements = function (args) {\n var gObj = this.parent;\n var elements = {};\n var cols = gObj.editSettings.mode !== 'Batch' ? gObj.getColumns() : [gObj.getColumnByField(args.columnName)];\n for (var i = 0, len = cols.length; i < len; i++) {\n var col = cols[i];\n if (!col.visible) {\n continue;\n }\n if (col.commands || col.commandsTemplate) {\n var cellRendererFact = this.serviceLocator.getService('cellRendererFactory');\n var model = new RowModelGenerator(this.parent);\n var cellRenderer = cellRendererFact.getCellRenderer(CellType.CommandColumn);\n var cells = model.generateRows(args.rowData)[0].cells;\n var td = cellRenderer.render(cells[i], args.rowData, { 'index': args.row ? args.row.getAttribute('aria-rowindex') : 0 });\n var div = td.firstElementChild;\n div.setAttribute('textAlign', td.getAttribute('textAlign'));\n elements[col.uid] = div;\n continue;\n }\n var value = (col.valueAccessor(col.field, args.rowData, col));\n var tArgs = { column: col, value: value, type: args.requestType, data: args.rowData };\n var temp = col.edit.create;\n var input = void 0;\n if (typeof temp === 'string') {\n temp = getValue(temp, window);\n input = temp(tArgs);\n }\n else {\n input = col.edit.create(tArgs);\n }\n if (typeof input === 'string') {\n var div = createElement('div');\n div.innerHTML = input;\n input = div.firstChild;\n }\n var isInput = input.tagName !== 'input' && input.querySelectorAll('input').length;\n var isComplexField = !isNullOrUndefined(col.field) && col.field.split('.').length > 1;\n var splits = !isNullOrUndefined(col.field) && col.field.split('.');\n attributes(isInput ? input.querySelector('input') : input, {\n name: isComplexField ? splits[0] + splits[1] : col.field, 'e-mappinguid': col.uid,\n id: isComplexField ? gObj.element.id + splits[0] + splits[1] : gObj.element.id + col.field\n });\n classList(input, ['e-input', 'e-field'], []);\n if (col.textAlign === 'Right') {\n input.classList.add('e-ralign');\n }\n if ((col.isPrimaryKey || col.isIdentity) && args.requestType === 'beginEdit' ||\n (col.isIdentity && args.requestType === 'add')) {\n input.setAttribute('disabled', 'true');\n }\n elements[col.uid] = input;\n }\n return elements;\n };\n EditRender.prototype.destroy = function () {\n this.renderer.removeEventListener();\n };\n return EditRender;\n}());\nexport { EditRender };\n","import { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { extend } from '@syncfusion/ej2-base';\nimport { isEditable, addRemoveActiveClasses } from '../base/util';\n/**\n * `BooleanEditCell` is used to handle boolean cell type editing.\n * @hidden\n */\nvar BooleanEditCell = /** @class */ (function () {\n function BooleanEditCell(parent) {\n this.activeClasses = ['e-selectionbackground', 'e-active'];\n this.parent = parent;\n }\n BooleanEditCell.prototype.create = function (args) {\n var col = args.column;\n var classNames = 'e-field e-boolcell';\n if (col.type === 'checkbox') {\n classNames = 'e-field e-boolcell e-edit-checkselect';\n }\n var isComplexField = !isNullOrUndefined(args.column.field) && args.column.field.split('.').length > 1;\n var splits = !isNullOrUndefined(args.column.field) && args.column.field.split('.');\n return createElement('input', {\n className: classNames, attrs: {\n type: 'checkbox', value: args.value, 'e-mappinguid': col.uid,\n id: isComplexField ? this.parent.element.id + splits[0] + splits[1] : this.parent.element.id + col.field,\n name: isComplexField ? splits[0] + splits[1] : col.field\n }\n });\n };\n BooleanEditCell.prototype.read = function (element) {\n return element.checked;\n };\n BooleanEditCell.prototype.write = function (args) {\n var selectChkBox;\n var chkState;\n var isComplexField = !isNullOrUndefined(args.column.field) && args.column.field.split('.').length > 1;\n var splits = !isNullOrUndefined(args.column.field) && args.column.field.split('.');\n if (!isNullOrUndefined(args.row)) {\n selectChkBox = args.row.querySelector('.e-edit-checkselect');\n }\n if (!isComplexField && args.rowData[args.column.field]) {\n chkState = JSON.parse(args.rowData[args.column.field].toString().toLowerCase());\n }\n if (isComplexField && args.rowData[splits[0]][splits[1]]) {\n chkState = JSON.parse(args.rowData[splits[0]][splits[1]].toString().toLowerCase());\n }\n if (!isNullOrUndefined(selectChkBox)) {\n this.editType = this.parent.editSettings.mode;\n this.editRow = args.row;\n if (args.requestType !== 'add') {\n var row = this.parent.getRowObjectFromUID(args.row.getAttribute('data-uid'));\n chkState = row ? row.isSelected : false;\n }\n addRemoveActiveClasses.apply(void 0, [[].slice.call(args.row.querySelectorAll('.e-rowcell')), chkState].concat(this.activeClasses));\n }\n this.obj = new CheckBox(extend({\n label: this.parent.editSettings.mode !== 'Dialog' ? '' : args.column.headerText,\n checked: chkState,\n disabled: !isEditable(args.column, args.requestType, args.element), enableRtl: this.parent.enableRtl,\n change: this.checkBoxChange.bind(this)\n }, args.column.edit.params));\n this.obj.appendTo(args.element);\n };\n BooleanEditCell.prototype.checkBoxChange = function (args) {\n if (this.editRow && this.editType !== 'Dialog') {\n var add = false;\n if (!args.checked) {\n this.editRow.removeAttribute('aria-selected');\n }\n else {\n add = true;\n this.editRow.setAttribute('aria-selected', add.toString());\n }\n addRemoveActiveClasses.apply(void 0, [[].slice.call(this.editRow.querySelectorAll('.e-rowcell')), add].concat(this.activeClasses));\n }\n };\n BooleanEditCell.prototype.destroy = function () {\n if (this.obj) {\n this.obj.destroy();\n }\n };\n return BooleanEditCell;\n}());\nexport { BooleanEditCell };\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { createElement } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { Query, DataManager, DataUtil } from '@syncfusion/ej2-data';\nimport { isEditable } from '../base/util';\nimport { parentsUntil } from '../base/util';\n/**\n * `DropDownEditCell` is used to handle dropdown cell type editing.\n * @hidden\n */\nvar DropDownEditCell = /** @class */ (function () {\n function DropDownEditCell(parent) {\n //constructor\n this.parent = parent;\n }\n DropDownEditCell.prototype.create = function (args) {\n /* tslint:disable-next-line:no-any */\n var splits = !isNullOrUndefined(args.column.field) && args.column.field.split('.');\n /* tslint:disable-next-line:no-any */\n var isComplexField = !isNullOrUndefined(args.column.field) && args.column.field.split('.').length > 1;\n return createElement('input', {\n className: 'e-field', attrs: {\n /* tslint:disable-next-line:no-any */\n id: isComplexField ? this.parent.element.id + splits[0] + splits[1] : this.parent.element.id + args.column.field,\n /* tslint:disable-next-line:no-any */\n name: isComplexField ? splits[0] + splits[1] : args.column.field, type: 'text', 'e-mappinguid': args.column.uid,\n }\n });\n };\n DropDownEditCell.prototype.write = function (args) {\n this.column = args.column;\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n /* tslint:disable-next-line:no-any */\n var isComplexField = !isNullOrUndefined(args.column.field) && args.column.field.split('.').length > 1;\n var splits = !isNullOrUndefined(args.column.field) && args.column.field.split('.');\n this.obj = new DropDownList(extend({\n dataSource: this.parent.dataSource instanceof DataManager ?\n this.parent.dataSource : new DataManager(this.parent.dataSource),\n query: new Query().select(args.column.field), enabled: isEditable(args.column, args.requestType, args.element),\n fields: { value: args.column.field },\n value: isComplexField ? args.rowData[splits[0]][splits[1]] : args.rowData[args.column.field],\n enableRtl: this.parent.enableRtl, actionComplete: this.ddActionComplete.bind(this),\n placeholder: isInline ? '' : args.column.headerText, popupHeight: '200px',\n floatLabelType: isInline ? 'Never' : 'Always', open: this.dropDownOpen.bind(this),\n sortOrder: 'Ascending'\n }, args.column.edit.params));\n this.obj.appendTo(args.element);\n /* tslint:disable-next-line:no-any */\n args.element.setAttribute('name', isComplexField ? splits[0] + splits[1] : args.column.field);\n };\n DropDownEditCell.prototype.read = function (element) {\n return element.ej2_instances[0].value;\n };\n DropDownEditCell.prototype.ddActionComplete = function (e) {\n e.result = DataUtil.distinct(e.result, this.column.isForeignColumn() ? this.column.foreignKeyField : this.column.field, true);\n if (this.column.dataSource) {\n this.column.dataSource.dataSource.json = e.result;\n }\n };\n DropDownEditCell.prototype.dropDownOpen = function (args) {\n var dlgElement = parentsUntil(this.obj.element, 'e-dialog');\n if (!isNullOrUndefined(dlgElement)) {\n var dlgObj = this.parent.element.querySelector('#' + dlgElement.id).ej2_instances[0];\n args.popup.element.style.zIndex = (dlgObj.zIndex + 1).toString();\n }\n };\n DropDownEditCell.prototype.destroy = function () {\n if (this.obj) {\n this.obj.destroy();\n }\n };\n return DropDownEditCell;\n}());\nexport { DropDownEditCell };\n","import { extend } from '@syncfusion/ej2-base';\nimport { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { isEditable } from '../base/util';\n/**\n * `NumericEditCell` is used to handle numeric cell type editing.\n * @hidden\n */\nvar NumericEditCell = /** @class */ (function () {\n function NumericEditCell(parent) {\n this.parent = parent;\n }\n NumericEditCell.prototype.create = function (args) {\n /* tslint:disable-next-line:no-any */\n var isComplexField = !isNullOrUndefined(args.column.field) && args.column.field.split('.').length > 1;\n var splits = !isNullOrUndefined(args.column.field) && args.column.field.split('.');\n return createElement('input', {\n className: 'e-field', attrs: {\n /* tslint:disable-next-line:no-any */\n id: isComplexField ? this.parent.element.id + splits[0] + splits[1] : this.parent.element.id + args.column.field,\n name: isComplexField ? splits[0] + splits[1] : args.column.field, 'e-mappinguid': args.column.uid\n }\n });\n };\n NumericEditCell.prototype.read = function (element) {\n element.blur();\n return element.ej2_instances[0].value;\n };\n NumericEditCell.prototype.write = function (args) {\n var col = args.column;\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n var isComplexField = !isNullOrUndefined(args.column.field) && args.column.field.split('.').length > 1;\n var splits = !isNullOrUndefined(args.column.field) && args.column.field.split('.');\n this.obj = new NumericTextBox(extend({\n value: isComplexField ? parseFloat(args.rowData[splits[0]][splits[1]]) : parseFloat(args.rowData[col.field]),\n enableRtl: this.parent.enableRtl,\n placeholder: isInline ? '' : args.column.headerText,\n enabled: isEditable(args.column, args.requestType, args.element),\n floatLabelType: this.parent.editSettings.mode !== 'Dialog' ? 'Never' : 'Always',\n }, col.edit.params));\n this.obj.appendTo(args.element);\n args.element.setAttribute('name', isComplexField ? splits[0] + splits[1] : args.column.field);\n };\n NumericEditCell.prototype.destroy = function () {\n if (this.obj && !this.obj.isDestroyed) {\n this.obj.destroy();\n }\n };\n return NumericEditCell;\n}());\nexport { NumericEditCell };\n","import { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { isEditable } from '../base/util';\n/**\n * `DefaultEditCell` is used to handle default cell type editing.\n * @hidden\n */\nvar DefaultEditCell = /** @class */ (function () {\n function DefaultEditCell(parent) {\n this.parent = parent;\n }\n DefaultEditCell.prototype.create = function (args) {\n var col = args.column;\n var input = createElement('input', {\n className: 'e-field e-input e-defaultcell', attrs: {\n type: 'text', value: !isNullOrUndefined(args.value) ? args.value : '', 'e-mappinguid': col.uid,\n id: this.parent.element.id + col.field, name: col.field, style: 'text-align:' + col.textAlign,\n }\n });\n return input;\n };\n DefaultEditCell.prototype.read = function (element) {\n return element.value;\n };\n DefaultEditCell.prototype.write = function (args) {\n var col = args.column;\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n Input.createInput({\n element: args.element, floatLabelType: this.parent.editSettings.mode !== 'Dialog' ? 'Never' : 'Always',\n properties: {\n enableRtl: this.parent.enableRtl, enabled: isEditable(args.column, args.requestType, args.element),\n placeholder: isInline ? '' : args.column.headerText\n }\n });\n };\n return DefaultEditCell;\n}());\nexport { DefaultEditCell };\n","import { extend } from '@syncfusion/ej2-base';\nimport { remove, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { parentsUntil, refreshForeignData } from '../base/util';\nimport * as events from '../base/constant';\nimport { RowRenderer } from '../renderer/row-renderer';\n/**\n * `NormalEdit` module is used to handle normal('inline, dialog, external') editing actions.\n * @hidden\n */\nvar NormalEdit = /** @class */ (function () {\n function NormalEdit(parent, serviceLocator, renderer) {\n this.parent = parent;\n this.renderer = renderer;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n NormalEdit.prototype.clickHandler = function (e) {\n var target = e.target;\n var gObj = this.parent;\n if ((((parentsUntil(target, 'e-gridcontent') &&\n parentsUntil(parentsUntil(target, 'e-gridcontent'), 'e-grid').id === gObj.element.id)) || (gObj.frozenRows\n && parentsUntil(target, 'e-headercontent'))) && !parentsUntil(target, 'e-unboundcelldiv')) {\n this.rowIndex = parentsUntil(target, 'e-rowcell') ? parseInt(target.parentElement.getAttribute('aria-rowindex'), 10) : -1;\n if (gObj.isEdit) {\n gObj.editModule.endEdit();\n }\n }\n };\n NormalEdit.prototype.dblClickHandler = function (e) {\n if (parentsUntil(e.target, 'e-rowcell') && this.parent.editSettings.allowEditOnDblClick) {\n this.parent.editModule.startEdit(parentsUntil(e.target, 'e-row'));\n }\n };\n /**\n * The function used to trigger editComplete\n * @return {void}\n * @hidden\n */\n NormalEdit.prototype.editComplete = function (e) {\n this.parent.isEdit = false;\n switch (e.requestType) {\n case 'save':\n if (!(this.parent.isCheckBoxSelection || this.parent.selectionSettings.type === 'Multiple')\n || (!this.parent.isPersistSelection)) {\n this.parent.selectRow(0);\n }\n this.parent.trigger(events.actionComplete, extend(e, {\n requestType: 'save',\n type: events.actionComplete\n }));\n break;\n case 'delete':\n this.parent.selectRow(this.editRowIndex);\n this.parent.trigger(events.actionComplete, extend(e, {\n requestType: 'delete',\n type: events.actionComplete\n }));\n break;\n }\n };\n NormalEdit.prototype.startEdit = function (tr) {\n var gObj = this.parent;\n var primaryKeys = gObj.getPrimaryKeyFieldNames();\n var primaryKeyValues = [];\n this.rowIndex = this.editRowIndex = parseInt(tr.getAttribute('aria-rowindex'), 10);\n this.previousData = gObj.getCurrentViewRecords()[this.rowIndex];\n for (var i = 0; i < primaryKeys.length; i++) {\n primaryKeyValues.push(this.previousData[primaryKeys[i]]);\n }\n this.uid = tr.getAttribute('data-uid');\n var rowObj = gObj.getRowObjectFromUID(this.uid);\n var args = {\n row: tr, primaryKey: primaryKeys, primaryKeyValue: primaryKeyValues, requestType: 'beginEdit',\n rowData: this.previousData, rowIndex: this.rowIndex, type: 'edit', cancel: false,\n foreignKeyData: rowObj && rowObj.foreignKeyData\n };\n gObj.trigger(events.beginEdit, args);\n args.type = 'actionBegin';\n gObj.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n gObj.isEdit = true;\n gObj.clearSelection();\n if (gObj.editSettings.mode === 'Dialog') {\n args.row.classList.add('e-dlgeditrow');\n }\n this.renderer.update(args);\n this.uid = tr.getAttribute('data-uid');\n gObj.editModule.applyFormValidation();\n args.type = 'actionComplete';\n gObj.trigger(events.actionComplete, args);\n if (this.parent.allowTextWrap) {\n this.parent.notify(events.freezeRender, { case: 'textwrap' });\n }\n };\n NormalEdit.prototype.updateRow = function (index, data) {\n var gObj = this.parent;\n var args = {\n requestType: 'save', type: events.actionBegin, data: data, cancel: false,\n previousData: gObj.getCurrentViewRecords()[index]\n };\n gObj.showSpinner();\n gObj.notify(events.updateData, args);\n gObj.refresh();\n };\n NormalEdit.prototype.endEdit = function () {\n var gObj = this.parent;\n if (!this.parent.isEdit || !gObj.editModule.formObj.validate() ||\n (gObj.editModule.mFormObj && !gObj.editModule.mFormObj.validate())) {\n return;\n }\n var editedData = extend({}, this.previousData);\n var args = {\n requestType: 'save', type: events.actionBegin, data: editedData, cancel: false,\n previousData: this.previousData, selectedRow: gObj.selectedRowIndex, foreignKeyData: {}\n };\n editedData = gObj.editModule.getCurrentEditedData(gObj.element.querySelector('.e-gridform'), editedData);\n if (gObj.getFrozenColumns() && gObj.editSettings.mode === 'Normal') {\n var mForm = gObj.element.querySelector('.e-movableheader').querySelector('.e-gridform');\n if (gObj.frozenRows && mForm) {\n editedData = gObj.editModule.getCurrentEditedData(mForm, editedData);\n }\n else {\n editedData = gObj.editModule.getCurrentEditedData(gObj.element.querySelector('.e-movablecontent').querySelector('.e-gridform'), editedData);\n }\n }\n if (gObj.element.querySelectorAll('.e-editedrow').length) {\n args.action = 'edit';\n gObj.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n gObj.showSpinner();\n this.destroyElements();\n gObj.notify(events.updateData, args);\n }\n else {\n args.action = 'add';\n args.selectedRow = 0;\n args.index = this.addedRowIndex;\n gObj.notify(events.modelChanged, args);\n this.addedRowIndex = null;\n if (args.cancel) {\n return;\n }\n this.destroyElements();\n }\n this.stopEditStatus();\n if (gObj.editSettings.mode === 'Dialog' && args.action !== 'add') {\n gObj.element.querySelector('.e-dlgeditrow').classList.remove('e-dlgeditrow');\n }\n };\n NormalEdit.prototype.destroyElements = function () {\n var gObj = this.parent;\n gObj.editModule.destroyWidgets();\n gObj.editModule.destroyForm();\n gObj.notify(events.dialogDestroy, {});\n };\n NormalEdit.prototype.editHandler = function (args) {\n var _this = this;\n if (args.promise) {\n args.promise.then(function (e) { return _this.edSucc(e, args); }).catch(function (e) { return _this.edFail(e); });\n }\n else {\n this.editSuccess(args.data, args);\n }\n };\n NormalEdit.prototype.edSucc = function (e, args) {\n this.editSuccess(e, args);\n };\n NormalEdit.prototype.edFail = function (e) {\n this.editFailure(e);\n };\n NormalEdit.prototype.updateCurrentViewData = function (data) {\n this.parent.getCurrentViewRecords()[this.editRowIndex] = data;\n };\n NormalEdit.prototype.editSuccess = function (e, args) {\n if (!isNullOrUndefined(e)) {\n args.data = e;\n }\n this.parent.trigger(events.beforeDataBound, args);\n args.type = events.actionComplete;\n this.parent.isEdit = false;\n this.refreshRow(args.data);\n this.updateCurrentViewData(args.data);\n this.parent.trigger(events.actionComplete, args);\n if (!(this.parent.isCheckBoxSelection || this.parent.selectionSettings.type === 'Multiple')\n || (!this.parent.isPersistSelection)) {\n this.parent.selectRow(this.rowIndex > -1 ? this.rowIndex : this.editRowIndex);\n }\n this.parent.hideSpinner();\n };\n NormalEdit.prototype.editFailure = function (e) {\n this.parent.trigger(events.actionFailure, e);\n };\n NormalEdit.prototype.refreshRow = function (data) {\n var frzCols = this.parent.getFrozenColumns();\n var row = new RowRenderer(this.serviceLocator, null, this.parent);\n var rowObj = this.parent.getRowObjectFromUID(this.uid);\n if (rowObj) {\n rowObj.changes = data;\n refreshForeignData(rowObj, this.parent.getForeignKeyColumns(), rowObj.changes);\n row.refresh(rowObj, this.parent.getColumns(), true);\n if (frzCols) {\n var uid = void 0;\n if (rowObj.cells.length === frzCols) {\n uid = this.parent.getMovableRows()[rowObj.index].getAttribute('data-uid');\n }\n else {\n uid = this.parent.getRows()[rowObj.index].getAttribute('data-uid');\n }\n rowObj = this.parent.getRowObjectFromUID(uid);\n rowObj.changes = data;\n row.refresh(rowObj, this.parent.columns, true);\n }\n }\n };\n NormalEdit.prototype.closeEdit = function () {\n if (!this.parent.isEdit) {\n return;\n }\n var gObj = this.parent;\n var args = {\n requestType: 'cancel', type: events.actionBegin, data: this.previousData, selectedRow: gObj.selectedRowIndex\n };\n gObj.trigger(events.actionBegin, args);\n if (this.parent.editSettings.mode === 'Dialog') {\n this.parent.notify(events.dialogDestroy, {});\n }\n gObj.isEdit = false;\n this.stopEditStatus();\n args.type = events.actionComplete;\n if (gObj.editSettings.mode !== 'Dialog') {\n this.refreshRow(args.data);\n }\n if (gObj.getContentTable().querySelector('tr.e-emptyrow') &&\n !gObj.getContentTable().querySelector('tr.e-row')) {\n gObj.getContentTable().querySelector('tr.e-emptyrow').classList.remove('e-hide');\n }\n gObj.selectRow(this.rowIndex);\n gObj.trigger(events.actionComplete, args);\n };\n NormalEdit.prototype.addRecord = function (data, index) {\n var gObj = this.parent;\n this.addedRowIndex = !isNullOrUndefined(index) ? index : 0;\n if (data) {\n gObj.notify(events.modelChanged, {\n requestType: 'save', type: events.actionBegin, data: data, selectedRow: 0, action: 'add', index: index\n });\n return;\n }\n if (gObj.isEdit) {\n return;\n }\n this.previousData = {};\n this.uid = '';\n for (var _i = 0, _a = gObj.getColumns(); _i < _a.length; _i++) {\n var col = _a[_i];\n this.previousData[col.field] = data && data[col.field] ? data[col.field] : col.defaultValue;\n }\n var args = {\n cancel: false, foreignKeyData: {},\n requestType: 'add', data: this.previousData, type: events.actionBegin, index: index\n };\n gObj.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n gObj.isEdit = true;\n gObj.clearSelection();\n this.renderer.addNew({ rowData: args.data, requestType: 'add' });\n gObj.editModule.applyFormValidation();\n args.type = events.actionComplete;\n args.row = gObj.element.querySelector('.e-addedrow');\n gObj.trigger(events.actionComplete, args);\n };\n NormalEdit.prototype.deleteRecord = function (fieldname, data) {\n this.editRowIndex = this.parent.selectedRowIndex;\n this.parent.notify(events.modelChanged, {\n requestType: 'delete', type: events.actionBegin, foreignKeyData: {},\n data: data ? [data] : this.parent.getSelectedRecords(), tr: this.parent.getSelectedRows(), cancel: false\n });\n };\n NormalEdit.prototype.stopEditStatus = function () {\n var gObj = this.parent;\n var elem = gObj.element.querySelector('.e-addedrow');\n var mElem;\n var editMElem;\n if (gObj.getFrozenColumns()) {\n mElem = gObj.element.querySelectorAll('.e-addedrow')[1];\n editMElem = gObj.element.querySelectorAll('.e-editedrow')[1];\n if (mElem) {\n remove(mElem);\n }\n if (editMElem) {\n editMElem.classList.remove('e-editedrow');\n }\n }\n if (elem) {\n remove(elem);\n }\n elem = gObj.element.querySelector('.e-editedrow');\n if (elem) {\n elem.classList.remove('e-editedrow');\n }\n };\n /**\n * @hidden\n */\n NormalEdit.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.crudAction, this.editHandler, this);\n this.parent.on(events.doubleTap, this.dblClickHandler, this);\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.dblclick, this.dblClickHandler, this);\n this.parent.on(events.deleteComplete, this.editComplete, this);\n this.parent.on(events.saveComplete, this.editComplete, this);\n };\n /**\n * @hidden\n */\n NormalEdit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.crudAction, this.editHandler);\n this.parent.off(events.doubleTap, this.dblClickHandler);\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.dblclick, this.dblClickHandler);\n this.parent.off(events.deleteComplete, this.editComplete);\n this.parent.off(events.saveComplete, this.editComplete);\n };\n /**\n * @hidden\n */\n NormalEdit.prototype.destroy = function () {\n this.removeEventListener();\n this.renderer.destroy();\n };\n return NormalEdit;\n}());\nexport { NormalEdit };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { NormalEdit } from './normal-edit';\n/**\n * `InlineEdit` module is used to handle inline editing actions.\n * @hidden\n */\nvar InlineEdit = /** @class */ (function (_super) {\n __extends(InlineEdit, _super);\n function InlineEdit(parent, serviceLocator, renderer) {\n var _this = _super.call(this, parent, serviceLocator) || this;\n _this.parent = parent;\n _this.serviceLocator = serviceLocator;\n _this.renderer = renderer;\n return _this;\n }\n InlineEdit.prototype.closeEdit = function () {\n _super.prototype.closeEdit.call(this);\n };\n InlineEdit.prototype.addRecord = function (data, index) {\n _super.prototype.addRecord.call(this, data, index);\n };\n InlineEdit.prototype.endEdit = function () {\n _super.prototype.endEdit.call(this);\n };\n InlineEdit.prototype.updateRow = function (index, data) {\n _super.prototype.updateRow.call(this, index, data);\n };\n InlineEdit.prototype.deleteRecord = function (fieldname, data) {\n _super.prototype.deleteRecord.call(this, fieldname, data);\n };\n InlineEdit.prototype.startEdit = function (tr) {\n _super.prototype.startEdit.call(this, tr);\n };\n return InlineEdit;\n}(NormalEdit));\nexport { InlineEdit };\n","import { extend, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { remove, classList, createElement } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { parentsUntil, inArray, refreshForeignData } from '../base/util';\nimport * as events from '../base/constant';\nimport { RowRenderer } from '../renderer/row-renderer';\nimport { CellRenderer } from '../renderer/cell-renderer';\nimport { Cell } from '../models/cell';\nimport { RowModelGenerator } from '../services/row-model-generator';\n/**\n * `BatchEdit` module is used to handle batch editing actions.\n * @hidden\n */\nvar BatchEdit = /** @class */ (function () {\n function BatchEdit(parent, serviceLocator, renderer) {\n this.cellDetails = {};\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.renderer = renderer;\n this.focus = serviceLocator.getService('focus');\n this.addEventListener();\n }\n /**\n * @hidden\n */\n BatchEdit.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.dblclick, this.dblClickHandler, this);\n this.parent.on(events.beforeCellFocused, this.onBeforeCellFocused, this);\n this.parent.on(events.cellFocused, this.onCellFocused, this);\n this.dataBoundFunction = this.dataBound.bind(this);\n this.parent.addEventListener(events.dataBound, this.dataBoundFunction);\n this.parent.on(events.doubleTap, this.dblClickHandler, this);\n this.parent.on(events.keyPressed, this.keyDownHandler, this);\n };\n /**\n * @hidden\n */\n BatchEdit.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.dblclick, this.dblClickHandler);\n this.parent.off(events.beforeCellFocused, this.onBeforeCellFocused);\n this.parent.off(events.cellFocused, this.onCellFocused);\n this.parent.removeEventListener(events.dataBound, this.dataBoundFunction);\n this.parent.off(events.doubleTap, this.dblClickHandler);\n this.parent.off(events.keyPressed, this.keyDownHandler);\n };\n BatchEdit.prototype.dataBound = function () {\n this.parent.notify(events.toolbarRefresh, {});\n };\n /**\n * @hidden\n */\n BatchEdit.prototype.destroy = function () {\n this.removeEventListener();\n };\n BatchEdit.prototype.clickHandler = function (e) {\n if (!parentsUntil(e.target, this.parent.element.id + '_add', true)) {\n this.saveCell();\n if (parentsUntil(e.target, 'e-rowcell') && !this.parent.isEdit) {\n this.setCellIdx(e.target);\n }\n }\n };\n BatchEdit.prototype.dblClickHandler = function (e) {\n var target = parentsUntil(e.target, 'e-rowcell');\n var tr = parentsUntil(e.target, 'e-row');\n if (target && tr && !isNaN(parseInt(target.getAttribute('aria-colindex'), 10))) {\n this.editCell(parseInt(tr.getAttribute('aria-rowindex'), 10), this.parent.getColumns()[parseInt(target.getAttribute('aria-colindex'), 10)].field);\n }\n };\n BatchEdit.prototype.onBeforeCellFocused = function (e) {\n if (this.parent.isEdit && this.validateFormObj() &&\n (e.byClick || (['tab', 'shiftTab', 'enter', 'shiftEnter'].indexOf(e.keyArgs.action) > -1))) {\n e.cancel = true;\n if (e.byClick) {\n e.clickArgs.preventDefault();\n }\n else {\n e.keyArgs.preventDefault();\n }\n }\n };\n BatchEdit.prototype.onCellFocused = function (e) {\n var frzCols = this.parent.getFrozenColumns();\n var mCont = this.parent.getContent().querySelector('.e-movablecontent');\n var mHdr = this.parent.getHeaderContent().querySelector('.e-movableheader');\n var clear = (!e.container.isContent || !e.container.isDataCell) && !(this.parent.frozenRows && e.container.isHeader);\n if (!e.byKey || clear) {\n return;\n }\n var _a = e.container.indexes, rowIndex = _a[0], cellIndex = _a[1];\n if (frzCols && (mCont.contains(e.element) || (this.parent.frozenRows && mHdr.contains(e.element)))) {\n cellIndex += frzCols;\n }\n if (this.parent.frozenRows && e.container.isContent) {\n rowIndex += this.parent.frozenRows;\n }\n var isEdit = this.parent.isEdit;\n if (!document.querySelectorAll('.e-popup-open').length) {\n isEdit = isEdit && !this.validateFormObj();\n switch (e.keyArgs.action) {\n case 'tab':\n case 'shiftTab':\n if (isEdit) {\n this.editCellFromIndex(rowIndex, cellIndex);\n }\n break;\n case 'enter':\n case 'shiftEnter':\n e.keyArgs.preventDefault();\n if (isEdit) {\n this.editCell(rowIndex, this.cellDetails.column.field);\n }\n break;\n case 'f2':\n this.editCellFromIndex(rowIndex, cellIndex);\n this.focus.focus();\n break;\n }\n }\n };\n BatchEdit.prototype.isAddRow = function (index) {\n return this.parent.getDataRows()[index].classList.contains('e-insertedrow');\n };\n BatchEdit.prototype.editCellFromIndex = function (rowIdx, cellIdx) {\n this.cellDetails.rowIndex = rowIdx;\n this.cellDetails.cellIndex = cellIdx;\n this.editCell(rowIdx, this.parent.getColumns()[cellIdx].field);\n };\n BatchEdit.prototype.closeEdit = function () {\n var gObj = this.parent;\n var rows = this.parent.getRowsObject();\n if (gObj.frozenColumns) {\n rows.push.apply(rows, this.parent.getMovableRowsObject());\n }\n var rowRenderer = new RowRenderer(this.serviceLocator, null, this.parent);\n var tr;\n var mTr;\n var movObj;\n if (gObj.isEdit) {\n this.saveCell(true);\n }\n gObj.clearSelection();\n for (var i = 0; i < rows.length; i++) {\n if (rows[i].isDirty) {\n if (gObj.frozenColumns) {\n movObj = gObj.getMovableRowsObject()[rows[i].index];\n movObj.isDirty = true;\n }\n tr = gObj.getContentTable().querySelector('[data-uid=' + rows[i].uid + ']');\n if (gObj.frozenRows) {\n tr = gObj.getHeaderContent().querySelector('[data-uid=' + rows[i].uid + ']');\n }\n if (gObj.frozenColumns) {\n if (gObj.frozenRows) {\n mTr = gObj.getHeaderContent().querySelector('.e-movableheader')\n .querySelector('[data-uid=' + rows[i].uid + ']');\n }\n else {\n mTr = gObj.getContent().querySelector('.e-movablecontent')\n .querySelector('[data-uid=' + rows[i].uid + ']');\n }\n }\n if (tr || mTr) {\n if (tr && tr.classList.contains('e-insertedrow') || mTr && mTr.classList.contains('e-insertedrow')) {\n if (tr) {\n remove(tr);\n }\n if (mTr && (gObj.frozenColumns || gObj.frozenRows)) {\n remove(mTr);\n }\n this.removeRowObjectFromUID(rows[i].uid);\n i--;\n }\n else {\n delete rows[i].changes;\n rows[i].isDirty = false;\n var ftr = mTr ? mTr : tr;\n classList(ftr, [], ['e-hiddenrow', 'e-updatedtd']);\n rowRenderer.refresh(rows[i], gObj.getColumns(), false);\n }\n }\n }\n }\n if (gObj.getContentTable().querySelector('tr.e-emptyrow') &&\n !gObj.getContentTable().querySelector('tr.e-row')) {\n gObj.getContentTable().querySelector('tr.e-emptyrow').classList.remove('e-hide');\n }\n gObj.notify(events.batchCancel, { rows: this.parent.getRowsObject() });\n gObj.selectRow(this.cellDetails.rowIndex);\n this.refreshRowIdx();\n gObj.notify(events.toolbarRefresh, {});\n this.parent.notify(events.tooltipDestroy, {});\n };\n BatchEdit.prototype.deleteRecord = function (fieldname, data) {\n this.saveCell();\n if (this.validateFormObj()) {\n this.saveCell(true);\n }\n this.bulkDelete(fieldname, data);\n };\n BatchEdit.prototype.addRecord = function (data) {\n this.bulkAddRow(data);\n };\n BatchEdit.prototype.endEdit = function (data) {\n if (this.parent.isEdit && this.validateFormObj()) {\n return;\n }\n this.batchSave();\n };\n BatchEdit.prototype.validateFormObj = function () {\n return this.parent.editModule.formObj && !this.parent.editModule.formObj.validate();\n };\n BatchEdit.prototype.batchSave = function () {\n var gObj = this.parent;\n this.saveCell();\n if (gObj.isEdit) {\n return;\n }\n var changes = this.getBatchChanges();\n var args = { batchChanges: changes, cancel: false };\n gObj.trigger(events.beforeBatchSave, args);\n if (args.cancel) {\n return;\n }\n gObj.showSpinner();\n gObj.notify(events.bulkSave, { changes: changes });\n };\n BatchEdit.prototype.getBatchChanges = function () {\n var changes = {\n addedRecords: [],\n deletedRecords: [],\n changedRecords: []\n };\n var rows = this.parent.getRowsObject();\n var mRows = this.parent.getMovableRowsObject();\n var frzCols = this.parent.getFrozenColumns();\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n if (frzCols) {\n this.mergeBatchChanges(row, mRows[row.index], frzCols);\n }\n if (row.isDirty) {\n switch (row.edit) {\n case 'add':\n changes.addedRecords.push(row.changes);\n break;\n case 'delete':\n changes.deletedRecords.push(row.data);\n break;\n default:\n changes.changedRecords.push(row.changes);\n }\n }\n }\n return changes;\n };\n BatchEdit.prototype.mergeBatchChanges = function (row, mRow, frzCols) {\n if (row.isDirty) {\n if (mRow.isDirty) {\n var i_1 = 0;\n Object.keys(mRow.changes).forEach(function (key) {\n if (i_1 < frzCols) {\n delete mRow.changes[key];\n }\n i_1++;\n });\n extend(row.changes, mRow.changes);\n }\n }\n else if (mRow.isDirty) {\n extend(row, mRow);\n }\n };\n /**\n * @hidden\n */\n BatchEdit.prototype.removeRowObjectFromUID = function (uid) {\n var rows = this.parent.getRowsObject();\n var i = 0;\n for (var len = rows.length; i < len; i++) {\n if (rows[i].uid === uid) {\n break;\n }\n }\n rows.splice(i, 1);\n };\n /**\n * @hidden\n */\n BatchEdit.prototype.addRowObject = function (row) {\n this.parent.getRowsObject().unshift(row);\n };\n BatchEdit.prototype.bulkDelete = function (fieldname, data) {\n var gObj = this.parent;\n var index = data ? this.getIndexFromData(data) : gObj.selectedRowIndex;\n var selectedRows = gObj.getSelectedRows();\n var args = {\n primaryKey: this.parent.getPrimaryKeyFieldNames(),\n rowIndex: index,\n rowData: data ? data : gObj.getSelectedRecords()[0],\n row: data ? gObj.getRows()[index] : selectedRows[0], cancel: false\n };\n if (!args.row) {\n return;\n }\n gObj.trigger(events.beforeBatchDelete, args);\n if (args.cancel) {\n return;\n }\n gObj.clearSelection();\n var uid = args.row.getAttribute('data-uid');\n if (args.row.classList.contains('e-insertedrow')) {\n this.removeRowObjectFromUID(uid);\n remove(args.row);\n }\n else {\n var rowObj = gObj.getRowObjectFromUID(uid);\n rowObj.isDirty = true;\n rowObj.edit = 'delete';\n classList(args.row, ['e-hiddenrow', 'e-updatedtd'], []);\n if (gObj.getFrozenColumns()) {\n classList(data ? gObj.getMovableRows()[index] : selectedRows[1], ['e-hiddenrow', 'e-updatedtd'], []);\n if (gObj.frozenRows && index < gObj.frozenRows) {\n gObj.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody')\n .appendChild(gObj.getMovableRowByIndex(gObj.frozenRows - 1));\n gObj.getHeaderContent().querySelector('.e-frozenheader').querySelector('tbody')\n .appendChild(gObj.getRowByIndex(gObj.frozenRows - 1));\n }\n }\n else if (gObj.frozenRows && index < gObj.frozenRows) {\n gObj.getHeaderContent().querySelector('tbody').appendChild(gObj.getRowByIndex(gObj.frozenRows - 1));\n }\n }\n this.refreshRowIdx();\n gObj.selectRow(index);\n delete args.row;\n gObj.trigger(events.batchDelete, args);\n gObj.notify(events.batchDelete, { rows: this.parent.getRowsObject() });\n gObj.notify(events.toolbarRefresh, {});\n };\n BatchEdit.prototype.refreshRowIdx = function () {\n var rows = [];\n var mRows = [];\n var nonMovableRows = [];\n var frzCols = this.parent.getFrozenColumns();\n if (this.parent.frozenRows) {\n rows = [].slice.call(this.parent.getHeaderTable().querySelector('tbody').children);\n if (frzCols) {\n mRows = [].slice.call(this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody').children);\n for (var i = 0; i < mRows.length; i++) {\n nonMovableRows[i] = createElement('tr', { className: 'emptynonmv' });\n }\n }\n }\n if (frzCols) {\n mRows = mRows.concat([].slice.call(this.parent.getContentTable().querySelector('tbody').children));\n nonMovableRows = nonMovableRows.concat([].slice.call(this.parent.element.querySelector('.e-movablecontent').querySelector('tbody').children));\n }\n rows = rows.concat([].slice.call(this.parent.getContentTable().querySelector('tbody').children));\n for (var i = 0, j = 0, len = rows.length; i < len; i++) {\n if (rows[i].classList.contains('e-row') && !rows[i].classList.contains('e-hiddenrow')) {\n rows[i].setAttribute('aria-rowindex', j.toString());\n if (frzCols) {\n mRows[i].setAttribute('aria-rowindex', j.toString());\n if (nonMovableRows[i].classList.contains('e-row')) {\n nonMovableRows[i].setAttribute('aria-rowindex', j.toString());\n }\n }\n j++;\n }\n else {\n rows[i].removeAttribute('aria-rowindex');\n if (frzCols) {\n mRows[i].removeAttribute('aria-rowindex');\n }\n }\n }\n };\n BatchEdit.prototype.getIndexFromData = function (data) {\n return inArray(data, this.parent.getCurrentViewRecords());\n };\n BatchEdit.prototype.bulkAddRow = function (data) {\n var gObj = this.parent;\n if (!gObj.editSettings.allowAdding) {\n return;\n }\n if (gObj.isEdit) {\n this.saveCell();\n }\n if (gObj.isEdit) {\n return;\n }\n var defaultData = data ? data : this.getDefaultData();\n var args = {\n defaultData: defaultData,\n primaryKey: gObj.getPrimaryKeyFieldNames(),\n cancel: false\n };\n gObj.trigger(events.beforeBatchAdd, args);\n if (args.cancel) {\n return;\n }\n gObj.clearSelection();\n var mTr;\n var mTbody;\n var row = new RowRenderer(this.serviceLocator, null, this.parent);\n var model = new RowModelGenerator(this.parent);\n var modelData = model.generateRows([args.defaultData]);\n var tr = row.render(modelData[0], gObj.getColumns());\n var col;\n var index;\n for (var i = 0; i < this.parent.groupSettings.columns.length; i++) {\n tr.insertBefore(createElement('td', { className: 'e-indentcell' }), tr.firstChild);\n modelData[0].cells.unshift(new Cell({ cellType: CellType.Indent }));\n }\n var tbody = gObj.getContentTable().querySelector('tbody');\n tr.classList.add('e-insertedrow');\n if (tbody.querySelector('.e-emptyrow')) {\n tbody.querySelector('.e-emptyrow').classList.add('e-hide');\n }\n if (gObj.getFrozenColumns()) {\n mTr = this.renderMovable(tr);\n if (gObj.frozenRows) {\n mTbody = gObj.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody');\n }\n else {\n mTbody = gObj.getContent().querySelector('.e-movablecontent').querySelector('tbody');\n }\n mTbody.insertBefore(mTr, mTbody.firstChild);\n addClass(mTr.querySelectorAll('.e-rowcell'), ['e-updatedtd']);\n }\n if (gObj.frozenRows) {\n tbody = gObj.getHeaderContent().querySelector('tbody');\n }\n tbody.insertBefore(tr, tbody.firstChild);\n addClass(tr.querySelectorAll('.e-rowcell'), ['e-updatedtd']);\n modelData[0].isDirty = true;\n modelData[0].changes = extend({}, modelData[0].data);\n modelData[0].edit = 'add';\n this.addRowObject(modelData[0]);\n this.refreshRowIdx();\n this.focus.forgetPrevious();\n gObj.notify(events.batchAdd, { rows: this.parent.getRowsObject() });\n gObj.selectRow(0);\n if (!data) {\n index = this.findNextEditableCell(0, true);\n col = gObj.getColumns()[index];\n this.editCell(0, col.field, true);\n }\n var args1 = {\n defaultData: args.defaultData, row: tr,\n columnObject: col, columnIndex: index, primaryKey: args.primaryKey, cell: tr.cells[index]\n };\n gObj.trigger(events.batchAdd, args1);\n };\n BatchEdit.prototype.renderMovable = function (ele) {\n var mEle = ele.cloneNode(true);\n for (var i = 0; i < this.parent.frozenColumns; i++) {\n mEle.removeChild(mEle.children[0]);\n }\n for (var i = this.parent.frozenColumns, len = ele.childElementCount; i < len; i++) {\n ele.removeChild(ele.children[ele.childElementCount - 1]);\n }\n return mEle;\n };\n BatchEdit.prototype.findNextEditableCell = function (columnIndex, isAdd) {\n var cols = this.parent.getColumns();\n var endIndex = cols.length;\n for (var i = columnIndex; i < endIndex; i++) {\n if (!isAdd && this.checkNPCell(cols[i])) {\n return i;\n }\n else if (isAdd && !cols[i].template && cols[i].visible && cols[i].allowEditing &&\n !(cols[i].isIdentity && cols[i].isPrimaryKey)) {\n return i;\n }\n }\n return -1;\n };\n BatchEdit.prototype.checkNPCell = function (col) {\n return !col.template && col.visible && !col.isPrimaryKey && !col.isIdentity && col.allowEditing;\n };\n BatchEdit.prototype.getDefaultData = function () {\n var gObj = this.parent;\n var data = {};\n var dValues = { 'number': 0, 'string': null, 'boolean': false, 'date': null, 'datetime': null };\n for (var _i = 0, _a = gObj.getColumns(); _i < _a.length; _i++) {\n var col = _a[_i];\n data[col.field] = col.defaultValue ? col.defaultValue : dValues[col.type];\n }\n return data;\n };\n BatchEdit.prototype.setCellIdx = function (target) {\n var gLen = 0;\n if (this.parent.allowGrouping) {\n gLen = this.parent.groupSettings.columns.length;\n }\n this.cellDetails.cellIndex = target.cellIndex - gLen;\n this.cellDetails.rowIndex = parseInt(target.parentElement.getAttribute('aria-rowindex'), 10);\n };\n BatchEdit.prototype.editCell = function (index, field, isAdd) {\n var gObj = this.parent;\n var col = gObj.getColumnByField(field);\n var keys = gObj.getPrimaryKeyFieldNames();\n if (gObj.editSettings.allowEditing && col.allowEditing) {\n if (gObj.isEdit && !(this.cellDetails.column.field === field\n && (this.cellDetails.rowIndex === index && this.parent.getDataRows().length - 1 !== index))) {\n this.saveCell();\n if (this.cellDetails.rowIndex === index && this.cellDetails.column.field === field) {\n return;\n }\n }\n if (gObj.isEdit) {\n return;\n }\n var row = void 0;\n var colIdx = gObj.getColumnIndexByField(field);\n var frzCols = gObj.getFrozenColumns();\n if (frzCols && colIdx >= frzCols) {\n row = gObj.getMovableDataRows()[index];\n }\n else {\n row = gObj.getDataRows()[index];\n }\n if ((keys[0] === col.field && !row.classList.contains('e-insertedrow')) || col.template || col.columns ||\n (col.isPrimaryKey && col.isIdentity)) {\n return;\n }\n var rowObj = gObj.getRowObjectFromUID(row.getAttribute('data-uid'));\n var rowData = extend({}, this.getDataByIndex(index));\n var cells = [].slice.apply(row.cells);\n var isComplexField = !isNullOrUndefined(col.field) && col.field.split('.').length > 1;\n var splits = !isNullOrUndefined(col.field) && col.field.split('.');\n var args = {\n cell: cells[this.getColIndex(cells, this.getCellIdx(col.uid))], row: row,\n columnName: col.field, columnObject: col, isForeignKey: !isNullOrUndefined(col.foreignKeyValue),\n primaryKey: keys, rowData: rowData,\n validationRules: extend({}, col.validationRules ? col.validationRules : {}),\n value: isComplexField ? rowData[splits[0]][splits[1]] : rowData[col.field],\n type: !isAdd ? 'edit' : 'add', cancel: false,\n foreignKeyData: rowObj && rowObj.foreignKeyData\n };\n if (!args.cell) {\n return;\n }\n gObj.trigger(events.cellEdit, args);\n if (args.cancel) {\n return;\n }\n this.cellDetails = {\n rowData: rowData, column: col, value: args.value, isForeignKey: args.isForeignKey, rowIndex: index,\n cellIndex: parseInt(args.cell.getAttribute('aria-colindex'), 10),\n foreignKeyData: args.foreignKeyData\n };\n if (args.cell.classList.contains('e-updatedtd')) {\n this.isColored = true;\n args.cell.classList.remove('e-updatedtd');\n }\n gObj.isEdit = true;\n gObj.clearSelection();\n if (!gObj.isCheckBoxSelection || !gObj.isPersistSelection) {\n gObj.selectRow(this.cellDetails.rowIndex, true);\n }\n this.renderer.update(args);\n this.form = gObj.element.querySelector('#' + gObj.element.id + 'EditForm');\n gObj.editModule.applyFormValidation([col]);\n this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n }\n };\n BatchEdit.prototype.updateCell = function (rowIndex, field, value) {\n var col = this.parent.getColumnByField(field);\n if (col && !col.isPrimaryKey) {\n var td = this.parent.getDataRows()[rowIndex].cells[this.parent.getColumnIndexByField(field)];\n var rowObj = this.parent.getRowObjectFromUID(td.parentElement.getAttribute('data-uid'));\n this.refreshTD(td, col, rowObj, value);\n this.parent.trigger(events.queryCellInfo, {\n cell: td, column: col, data: rowObj.changes\n });\n }\n };\n BatchEdit.prototype.setChanges = function (rowObj, field, value) {\n var isComplexField = !isNullOrUndefined(field) && field.split('.').length > 1;\n var splits = !isNullOrUndefined(field) && field.split('.');\n if (!rowObj.changes) {\n rowObj.changes = extend({}, rowObj.data);\n }\n isComplexField ? rowObj.changes[splits[0]][splits[1]] = value : rowObj.changes[field] = value;\n if (rowObj.data[field] !== value) {\n rowObj.isDirty = true;\n }\n };\n BatchEdit.prototype.updateRow = function (index, data) {\n var keys = Object.keys(data);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var col = keys_1[_i];\n this.updateCell(index, col, data[col]);\n }\n };\n BatchEdit.prototype.getCellIdx = function (uid) {\n var cIdx = this.parent.getColumnIndexByUid(uid) + this.parent.groupSettings.columns.length;\n if (!isNullOrUndefined(this.parent.detailTemplate) || !isNullOrUndefined(this.parent.childGrid)) {\n cIdx++;\n }\n return cIdx;\n };\n BatchEdit.prototype.refreshTD = function (td, column, rowObj, value) {\n var cell = new CellRenderer(this.parent, this.serviceLocator);\n this.setChanges(rowObj, column.field, value);\n var frzCols = this.parent.getFrozenColumns();\n refreshForeignData(rowObj, this.parent.getForeignKeyColumns(), rowObj.changes);\n cell.refreshTD(td, rowObj.cells[this.getCellIdx(column.uid) - (this.getCellIdx(column.uid) >= frzCols ? frzCols : 0)], rowObj.changes);\n td.classList.add('e-updatedtd');\n this.parent.notify(events.toolbarRefresh, {});\n };\n BatchEdit.prototype.getColIndex = function (cells, index) {\n var cIdx = 0;\n if (this.parent.allowGrouping && this.parent.groupSettings.columns) {\n cIdx = this.parent.groupSettings.columns.length;\n }\n if (!isNullOrUndefined(this.parent.detailTemplate) || !isNullOrUndefined(this.parent.childGrid)) {\n cIdx++;\n }\n for (var m = 0; m < cells.length; m++) {\n var colIndex = parseInt(cells[m].getAttribute('aria-colindex'), 10);\n if (colIndex === index - cIdx) {\n return m;\n }\n }\n return -1;\n };\n BatchEdit.prototype.saveCell = function (isForceSave) {\n var gObj = this.parent;\n if (!isForceSave && (!gObj.isEdit || this.validateFormObj())) {\n return;\n }\n var tr = parentsUntil(this.form, 'e-row');\n var column = this.cellDetails.column;\n var editedData = gObj.editModule.getCurrentEditedData(this.form, {});\n var isComplexField = !isNullOrUndefined(column.field) && column.field.split('.').length > 1;\n var splits = !isNullOrUndefined(column.field) && column.field.split('.');\n editedData = extend(this.cellDetails.rowData, editedData);\n var args = {\n columnName: column.field,\n value: isComplexField ? editedData[splits[0]][splits[1]] : editedData[column.field],\n rowData: this.cellDetails.rowData,\n previousValue: this.cellDetails.value,\n columnObject: column,\n cell: this.form.parentElement,\n isForeignKey: this.cellDetails.isForeignKey, cancel: false\n };\n if (!isForceSave) {\n gObj.trigger(events.cellSave, args);\n }\n if (args.cancel) {\n return;\n }\n gObj.editModule.destroyForm();\n gObj.isEdit = false;\n gObj.editModule.destroyWidgets([column]);\n this.parent.notify(events.tooltipDestroy, {});\n this.refreshTD(args.cell, column, gObj.getRowObjectFromUID(tr.getAttribute('data-uid')), args.value);\n removeClass([tr], ['e-editedrow', 'e-batchrow']);\n removeClass([args.cell], ['e-editedbatchcell', 'e-boolcell']);\n if (!isNullOrUndefined(args.value) && args.value.toString() ===\n (!isNullOrUndefined(this.cellDetails.value) ? this.cellDetails.value : '').toString() && !this.isColored) {\n args.cell.classList.remove('e-updatedtd');\n }\n gObj.notify(events.toolbarRefresh, {});\n this.isColored = false;\n };\n BatchEdit.prototype.getDataByIndex = function (index) {\n var row = this.parent.getRowObjectFromUID(this.parent.getDataRows()[index].getAttribute('data-uid'));\n return row.changes ? row.changes : row.data;\n };\n BatchEdit.prototype.keyDownHandler = function (e) {\n if (e.action === 'tab' && this.parent.isEdit) {\n var rowcell = parentsUntil(e.target, 'e-rowcell');\n if (rowcell) {\n var cell = rowcell.querySelector('.e-field');\n if (cell) {\n var visibleColumns = this.parent.getVisibleColumns();\n if (visibleColumns[visibleColumns.length - 1].field === cell.getAttribute('name')) {\n this.saveCell();\n }\n }\n }\n }\n };\n return BatchEdit;\n}());\nexport { BatchEdit };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { NormalEdit } from './normal-edit';\n/**\n * `DialogEdit` module is used to handle dialog editing actions.\n * @hidden\n */\nvar DialogEdit = /** @class */ (function (_super) {\n __extends(DialogEdit, _super);\n function DialogEdit(parent, serviceLocator, renderer) {\n var _this = \n //constructor\n _super.call(this, parent, serviceLocator) || this;\n _this.parent = parent;\n _this.serviceLocator = serviceLocator;\n _this.renderer = renderer;\n return _this;\n }\n DialogEdit.prototype.closeEdit = function () {\n //closeEdit\n _super.prototype.closeEdit.call(this);\n };\n DialogEdit.prototype.addRecord = function (data, index) {\n //addRecord\n _super.prototype.addRecord.call(this, data, index);\n };\n DialogEdit.prototype.endEdit = function () {\n //endEdit\n _super.prototype.endEdit.call(this);\n };\n DialogEdit.prototype.updateRow = function (index, data) {\n _super.prototype.updateRow.call(this, index, data);\n };\n DialogEdit.prototype.deleteRecord = function (fieldname, data) {\n //deleteRecord\n _super.prototype.deleteRecord.call(this, fieldname, data);\n };\n DialogEdit.prototype.startEdit = function (tr) {\n _super.prototype.startEdit.call(this, tr);\n };\n return DialogEdit;\n}(NormalEdit));\nexport { DialogEdit };\n","import { extend } from '@syncfusion/ej2-base';\nimport { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\nimport { isEditable } from '../base/util';\n/**\n * `DatePickerEditCell` is used to handle datepicker cell type editing.\n * @hidden\n */\nvar DatePickerEditCell = /** @class */ (function () {\n function DatePickerEditCell(parent) {\n this.parent = parent;\n }\n DatePickerEditCell.prototype.create = function (args) {\n /* tslint:disable-next-line:no-any */\n var splits = !isNullOrUndefined(args.column.field) && args.column.field.split('.');\n var isComplexField = !isNullOrUndefined(args.column.field) && args.column.field.split('.').length > 1;\n return createElement('input', {\n className: 'e-field', attrs: {\n id: isComplexField ? this.parent.element.id + splits[0] + splits[1] : this.parent.element.id + args.column.field,\n name: isComplexField ? splits[0] + splits[1] : args.column.field, type: 'text', 'e-mappinguid': args.column.uid,\n }\n });\n };\n DatePickerEditCell.prototype.read = function (element) {\n return element.ej2_instances[0].value;\n };\n DatePickerEditCell.prototype.write = function (args) {\n var isInline = this.parent.editSettings.mode !== 'Dialog';\n /* tslint:disable-next-line:no-any */\n var splits = !isNullOrUndefined(args.column.field) && args.column.field.split('.');\n var isComplexField = !isNullOrUndefined(args.column.field) && args.column.field.split('.').length > 1;\n this.obj = new DatePicker(extend({\n floatLabelType: isInline ? 'Never' : 'Always',\n value: isComplexField ? new Date(args.rowData[splits[0]][splits[1]]) : new Date(args.rowData[args.column.field]),\n placeholder: isInline ?\n '' : args.column.headerText, enableRtl: this.parent.enableRtl,\n enabled: isEditable(args.column, args.type, args.element),\n }, args.column.edit.params));\n this.obj.appendTo(args.element);\n };\n DatePickerEditCell.prototype.destroy = function () {\n if (this.obj) {\n this.obj.destroy();\n }\n };\n return DatePickerEditCell;\n}());\nexport { DatePickerEditCell };\n","import { createElement, classList, addClass, removeClass, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { Query, DataManager } from '@syncfusion/ej2-data';\nimport { EventHandler, closest } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { Dialog, calculateRelativeBasedPosition } from '@syncfusion/ej2-popups';\nimport { changeButtonType, createCboxWithWrap, toogleCheckbox, parentsUntil } from '../base/util';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { SearchBox } from '../services/focus-strategy';\n/**\n * The `ColumnChooser` module is used to show or hide columns dynamically.\n */\nvar ColumnChooser = /** @class */ (function () {\n /**\n * Constructor for the Grid ColumnChooser module\n * @hidden\n */\n function ColumnChooser(parent, serviceLocator) {\n this.showColumn = [];\n this.hideColumn = [];\n this.isDlgOpen = false;\n this.dlghide = false;\n this.initialOpenDlg = true;\n this.stateChangeColumns = [];\n this.isInitialOpen = false;\n this.isCustomizeOpenCC = false;\n this.cBoxTrue = createCheckBox(true, { checked: true, label: ' ' });\n this.cBoxFalse = createCheckBox(true, { checked: false, label: ' ' });\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n this.cBoxTrue.insertBefore(createElement('input', {\n className: 'e-chk-hidden e-cc e-cc-chbox', attrs: { type: 'checkbox' }\n }), this.cBoxTrue.firstChild);\n this.cBoxFalse.insertBefore(createElement('input', {\n className: 'e-chk-hidden e-cc e-cc-chbox', attrs: { 'type': 'checkbox' }\n }), this.cBoxFalse.firstChild);\n this.cBoxFalse.querySelector('.e-frame').classList.add('e-uncheck');\n if (this.parent.enableRtl) {\n addClass([this.cBoxTrue, this.cBoxFalse], ['e-rtl']);\n }\n }\n ColumnChooser.prototype.destroy = function () {\n this.removeEventListener();\n this.unWireEvents();\n if (!isNullOrUndefined(this.dlgObj) && this.dlgObj.element && !this.dlgObj.isDestroyed) {\n this.dlgObj.destroy();\n }\n };\n ColumnChooser.prototype.rtlUpdate = function () {\n if (this.parent.enableRtl) {\n addClass(this.innerDiv.querySelectorAll('.e-checkbox-wrapper'), ['e-rtl']);\n }\n else {\n removeClass(this.innerDiv.querySelectorAll('.e-checkbox-wrapper'), ['e-rtl']);\n }\n };\n /**\n * @hidden\n */\n ColumnChooser.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.click, this.clickHandler, this);\n this.parent.on(events.uiUpdate, this.enableAfterRenderEle, this);\n this.parent.on(events.initialEnd, this.render, this);\n this.parent.addEventListener(events.dataBound, this.hideDialog.bind(this));\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.rtlUpdated, this.rtlUpdate, this);\n };\n /**\n * @hidden\n */\n ColumnChooser.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.click, this.clickHandler);\n this.parent.off(events.initialEnd, this.render);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.uiUpdate, this.enableAfterRenderEle);\n this.parent.off(events.rtlUpdated, this.rtlUpdate);\n };\n ColumnChooser.prototype.render = function () {\n this.l10n = this.serviceLocator.getService('localization');\n this.renderDlgContent();\n this.getShowHideService = this.serviceLocator.getService('showHideService');\n };\n ColumnChooser.prototype.clickHandler = function (e) {\n var targetElement = e.target;\n if (!this.isCustomizeOpenCC) {\n if (!isNullOrUndefined(closest(targetElement, '.e-cc')) || !isNullOrUndefined(closest(targetElement, '.e-cc-toolbar'))) {\n if (targetElement.classList.contains('e-columnchooser-btn') || targetElement.classList.contains('e-cc-toolbar')) {\n if ((this.initialOpenDlg && this.dlgObj.visible) || !this.isDlgOpen) {\n this.isDlgOpen = true;\n return;\n }\n }\n else if (targetElement.classList.contains('e-cc-cancel')) {\n targetElement.parentElement.querySelector('.e-ccsearch').value = '';\n this.columnChooserSearch('');\n this.removeCancelIcon();\n }\n }\n else {\n if (!isNullOrUndefined(this.dlgObj) && this.dlgObj.visible && !targetElement.classList.contains('e-toolbar-items')) {\n this.dlgObj.hide();\n this.refreshCheckboxState();\n // this.unWireEvents();\n this.isDlgOpen = false;\n }\n }\n }\n };\n ColumnChooser.prototype.hideDialog = function () {\n if (!isNullOrUndefined(this.dlgObj) && this.dlgObj.visible) {\n this.dlgObj.hide();\n // this.unWireEvents();\n this.isDlgOpen = false;\n }\n };\n /**\n * To render columnChooser when showColumnChooser enabled.\n * @return {void}\n * @hidden\n */\n ColumnChooser.prototype.renderColumnChooser = function (x, y, target) {\n if (!this.dlgObj.visible) {\n var pos = { X: null, Y: null };\n var args1 = {\n requestType: 'beforeOpenColumnChooser', element: this.parent.element,\n columns: this.getColumns(), cancel: false\n };\n this.parent.trigger(events.beforeOpenColumnChooser, args1);\n if (args1.cancel) {\n return;\n }\n this.refreshCheckboxState();\n this.dlgObj.dataBind();\n this.dlgObj.element.style.maxHeight = '430px';\n var elementVisible = this.dlgObj.element.style.display;\n this.dlgObj.element.style.display = 'block';\n var newpos = calculateRelativeBasedPosition(closest(target, '.e-toolbar-item'), this.dlgObj.element);\n this.dlgObj.element.style.display = elementVisible;\n this.dlgObj.element.style.top = newpos.top + closest(target, '.e-cc-toolbar').getBoundingClientRect().height + 'px';\n var dlgWidth = 250;\n if (!isNullOrUndefined(closest(target, '.e-bigger'))) {\n this.dlgObj.width = 258;\n }\n if (Browser.isDevice) {\n this.dlgObj.target = document.body;\n this.dlgObj.position = { X: 'center', Y: 'center' };\n this.dlgObj.refreshPosition();\n this.dlgObj.open = this.mOpenDlg.bind(this);\n }\n else {\n if (this.parent.enableRtl) {\n this.dlgObj.element.style.left = target.offsetLeft + 'px';\n }\n else {\n this.dlgObj.element.style.left = ((newpos.left - dlgWidth) + closest(target, '.e-cc-toolbar').clientWidth) + 2 + 'px';\n }\n }\n this.removeCancelIcon();\n this.dlgObj.show();\n }\n else {\n // this.unWireEvents();\n this.hideDialog();\n this.addcancelIcon();\n }\n };\n /**\n * Column chooser can be displayed on screen by given position(X and Y axis).\n * @param {number} X - Defines the X axis.\n * @param {number} Y - Defines the Y axis.\n * @return {void}\n */\n ColumnChooser.prototype.openColumnChooser = function (X, Y) {\n this.isCustomizeOpenCC = true;\n if (this.dlgObj.visible) {\n this.hideDialog();\n return;\n }\n if (!this.isInitialOpen) {\n this.dlgObj.content = this.renderChooserList();\n }\n else {\n this.refreshCheckboxState();\n }\n this.dlgObj.dataBind();\n this.dlgObj.position = { X: 'center', Y: 'center' };\n if (isNullOrUndefined(X)) {\n this.dlgObj.position = { X: 'center', Y: 'center' };\n this.dlgObj.refreshPosition();\n }\n else {\n this.dlgObj.element.style.top = '';\n this.dlgObj.element.style.left = '';\n this.dlgObj.element.style.top = Y + 'px';\n this.dlgObj.element.style.left = X + 'px';\n }\n this.dlgObj.beforeOpen = this.customDialogOpen.bind(this);\n this.dlgObj.show();\n this.isInitialOpen = true;\n this.dlgObj.beforeClose = this.customDialogClose.bind(this);\n };\n ColumnChooser.prototype.enableAfterRenderEle = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n this.render();\n }\n };\n ColumnChooser.prototype.customDialogOpen = function () {\n var searchElement = this.dlgObj.content.querySelector('input.e-ccsearch');\n EventHandler.add(searchElement, 'keyup', this.columnChooserManualSearch, this);\n };\n ColumnChooser.prototype.customDialogClose = function () {\n var searchElement = this.dlgObj.content.querySelector('input.e-ccsearch');\n EventHandler.remove(searchElement, 'keyup', this.columnChooserManualSearch);\n };\n ColumnChooser.prototype.getColumns = function () {\n var columns = this.parent.getColumns().filter(function (column) { return column.type !== 'checkbox'\n || column.type === 'checkbox' && column.field !== undefined; });\n return columns;\n };\n ColumnChooser.prototype.renderDlgContent = function () {\n var y;\n this.dlgDiv = createElement('div', { className: 'e-ccdlg e-cc', id: this.parent.element.id + '_ccdlg' });\n this.parent.element.appendChild(this.dlgDiv);\n var xpos = this.parent.element.getBoundingClientRect().width - 250;\n var dialoPos = this.parent.enableRtl ? 'left' : 'right';\n var tarElement = this.parent.element.querySelector('.e-ccdiv');\n if (!isNullOrUndefined(tarElement)) {\n y = tarElement.getBoundingClientRect().top;\n }\n var pos = { X: null, Y: null };\n this.dlgObj = new Dialog({\n header: this.l10n.getConstant('ChooseColumns'),\n showCloseIcon: false,\n closeOnEscape: false,\n locale: this.parent.locale,\n visible: false,\n enableRtl: this.parent.enableRtl,\n target: document.getElementById(this.parent.element.id),\n buttons: [{\n click: this.confirmDlgBtnClick.bind(this),\n buttonModel: {\n content: this.l10n.getConstant('OKButton'), isPrimary: true,\n cssClass: 'e-cc e-cc_okbtn',\n }\n },\n {\n click: this.clearActions.bind(this),\n buttonModel: { cssClass: 'e-flat e-cc e-cc-cnbtn', content: this.l10n.getConstant('CancelButton') }\n }],\n content: this.renderChooserList(),\n width: 250,\n cssClass: 'e-cc',\n animationSettings: { effect: 'None' },\n });\n this.dlgObj.appendTo(this.dlgDiv);\n changeButtonType(this.dlgObj.element);\n this.wireEvents();\n };\n ColumnChooser.prototype.renderChooserList = function () {\n this.mainDiv = createElement('div', { className: 'e-main-div e-cc' });\n var searchDiv = createElement('div', { className: 'e-cc-searchdiv e-cc e-input-group' });\n var ccsearchele = createElement('input', {\n className: 'e-ccsearch e-cc e-input',\n attrs: { placeholder: this.l10n.getConstant('Search') }\n });\n var ccsearchicon = createElement('span', { className: 'e-ccsearch-icon e-icons e-cc e-input-group-icon',\n attrs: { title: this.l10n.getConstant('Search') } });\n var conDiv = createElement('div', { className: 'e-cc-contentdiv' });\n this.innerDiv = createElement('div', { className: 'e-innerdiv e-cc' });\n searchDiv.appendChild(ccsearchele);\n searchDiv.appendChild(ccsearchicon);\n this.searchBoxObj = new SearchBox(ccsearchele);\n var innerDivContent = this.refreshCheckboxList(this.parent.getColumns());\n this.innerDiv.appendChild(innerDivContent);\n conDiv.appendChild(this.innerDiv);\n this.mainDiv.appendChild(searchDiv);\n this.mainDiv.appendChild(conDiv);\n return this.mainDiv;\n };\n ColumnChooser.prototype.confirmDlgBtnClick = function (args) {\n this.stateChangeColumns = [];\n if (!isNullOrUndefined(args)) {\n if (this.hideColumn.length) {\n this.columnStateChange(this.hideColumn, false);\n }\n if (this.showColumn.length) {\n this.columnStateChange(this.showColumn, true);\n }\n var params = {\n requestType: 'columnstate', element: this.parent.element,\n columns: this.stateChangeColumns, dialogInstance: this.dlgObj\n };\n this.parent.trigger(events.actionComplete, params);\n this.getShowHideService.setVisible(this.stateChangeColumns);\n this.clearActions();\n this.parent.notify(events.tooltipDestroy, { module: 'edit' });\n }\n };\n ColumnChooser.prototype.columnStateChange = function (stateColumns, state) {\n for (var index = 0; index < stateColumns.length; index++) {\n var colUid = stateColumns[index];\n var currentCol = this.parent.getColumnByUid(colUid);\n currentCol.visible = state;\n this.stateChangeColumns.push(currentCol);\n }\n };\n ColumnChooser.prototype.clearActions = function () {\n this.hideColumn = [];\n this.showColumn = [];\n // this.unWireEvents();\n this.hideDialog();\n this.addcancelIcon();\n };\n ColumnChooser.prototype.checkstatecolumn = function (isChecked, coluid) {\n if (isChecked) {\n if (this.hideColumn.indexOf(coluid) !== -1) {\n this.hideColumn.splice(this.hideColumn.indexOf(coluid), 1);\n }\n if (this.showColumn.indexOf(coluid) === -1) {\n this.showColumn.push(coluid);\n }\n }\n else {\n if (this.showColumn.indexOf(coluid) !== -1) {\n this.showColumn.splice(this.showColumn.indexOf(coluid), 1);\n }\n if (this.hideColumn.indexOf(coluid) === -1) {\n this.hideColumn.push(coluid);\n }\n }\n };\n ColumnChooser.prototype.columnChooserSearch = function (searchVal) {\n var clearSearch = false;\n var fltrCol;\n if (searchVal === '') {\n this.removeCancelIcon();\n fltrCol = this.getColumns();\n clearSearch = true;\n }\n else {\n fltrCol = new DataManager(this.getColumns()).executeLocal(new Query()\n .where('headerText', 'startswith', searchVal, true));\n }\n if (fltrCol.length) {\n this.innerDiv.innerHTML = ' ';\n this.innerDiv.classList.remove('e-ccnmdiv');\n this.innerDiv.appendChild(this.refreshCheckboxList(fltrCol, searchVal));\n if (!clearSearch) {\n this.addcancelIcon();\n }\n }\n else {\n var nMatchele = createElement('span', { className: 'e-cc e-nmatch' });\n nMatchele.innerHTML = this.l10n.getConstant('Matchs');\n this.innerDiv.innerHTML = ' ';\n this.innerDiv.appendChild(nMatchele);\n this.innerDiv.classList.add('e-ccnmdiv');\n }\n this.flag = true;\n this.stopTimer();\n };\n ColumnChooser.prototype.wireEvents = function () {\n EventHandler.add(this.dlgObj.element, 'click', this.checkBoxClickHandler, this);\n EventHandler.add(this.searchBoxObj.searchBox, 'keyup', this.columnChooserManualSearch, this);\n this.searchBoxObj.wireEvent();\n };\n ColumnChooser.prototype.unWireEvents = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n if (this.dlgObj.element) {\n EventHandler.remove(this.dlgObj.element, 'click', this.checkBoxClickHandler);\n }\n EventHandler.remove(this.searchBoxObj.searchBox, 'keyup', this.columnChooserManualSearch);\n this.searchBoxObj.unWireEvent();\n };\n ColumnChooser.prototype.checkBoxClickHandler = function (e) {\n var checkstate;\n var elem = parentsUntil(e.target, 'e-checkbox-wrapper');\n if (elem) {\n toogleCheckbox(elem.parentElement);\n elem.querySelector('.e-chk-hidden').focus();\n if (elem.querySelector('.e-check')) {\n checkstate = true;\n }\n else if (elem.querySelector('.e-uncheck')) {\n checkstate = false;\n }\n else {\n return;\n }\n var columnUid = parentsUntil(elem, 'e-ccheck').getAttribute('uid');\n this.checkstatecolumn(checkstate, columnUid);\n }\n };\n ColumnChooser.prototype.refreshCheckboxList = function (gdCol, searchVal) {\n this.ulElement = createElement('ul', { className: 'e-ccul-ele e-cc' });\n for (var i = 0; i < gdCol.length; i++) {\n var columns = gdCol[i];\n this.renderCheckbox(columns);\n }\n return this.ulElement;\n };\n ColumnChooser.prototype.refreshCheckboxState = function () {\n this.dlgObj.element.querySelector('.e-cc.e-input').value = '';\n this.columnChooserSearch('');\n for (var i = 0; i < this.parent.element.querySelectorAll('.e-cc-chbox').length; i++) {\n var element = this.parent.element.querySelectorAll('.e-cc-chbox')[i];\n var columnUID = parentsUntil(element, 'e-ccheck').getAttribute('uid');\n var column = this.parent.getColumnByUid(columnUID);\n if (column.visible) {\n element.checked = true;\n this.checkState(element.parentElement.querySelector('.e-icons'), true);\n }\n else {\n element.checked = false;\n this.checkState(element.parentElement.querySelector('.e-icons'), false);\n }\n }\n };\n ColumnChooser.prototype.checkState = function (element, state) {\n state ? classList(element, ['e-check'], ['e-uncheck']) : classList(element, ['e-uncheck'], ['e-check']);\n };\n ColumnChooser.prototype.createCheckBox = function (label, checked, uid) {\n var cbox = checked ? this.cBoxTrue.cloneNode(true) : this.cBoxFalse.cloneNode(true);\n cbox.querySelector('.e-label').innerHTML = label;\n return createCboxWithWrap(uid, cbox, 'e-ccheck');\n };\n ColumnChooser.prototype.renderCheckbox = function (column) {\n var cclist;\n var hideColState;\n var showColState;\n var checkBoxObj;\n if (column.showInColumnChooser) {\n cclist = createElement('li', { className: 'e-cclist e-cc', styles: 'list-style:None', id: 'e-ccli_' + column.uid });\n hideColState = this.hideColumn.indexOf(column.uid) === -1 ? false : true;\n showColState = this.showColumn.indexOf(column.uid) === -1 ? false : true;\n var cccheckboxlist = this.createCheckBox(column.headerText, (column.visible && !hideColState) || showColState, column.uid);\n cclist.appendChild(cccheckboxlist);\n this.ulElement.appendChild(cclist);\n }\n };\n ColumnChooser.prototype.columnChooserManualSearch = function (e) {\n this.addcancelIcon();\n this.searchValue = e.target.value;\n var proxy = this;\n this.stopTimer();\n this.startTimer(e);\n };\n ColumnChooser.prototype.startTimer = function (e) {\n var proxy = this;\n var interval = !proxy.flag && e.keyCode !== 13 ? 500 : 0;\n this.timer = window.setInterval(function () { proxy.columnChooserSearch(proxy.searchValue); }, interval);\n };\n ColumnChooser.prototype.stopTimer = function () {\n window.clearInterval(this.timer);\n };\n ColumnChooser.prototype.addcancelIcon = function () {\n this.dlgDiv.querySelector('.e-cc.e-ccsearch-icon').classList.add('e-cc-cancel');\n };\n ColumnChooser.prototype.removeCancelIcon = function () {\n this.dlgDiv.querySelector('.e-cc.e-ccsearch-icon').classList.remove('e-cc-cancel');\n };\n ColumnChooser.prototype.mOpenDlg = function () {\n if (Browser.isDevice) {\n this.dlgObj.element.querySelector('.e-cc-searchdiv').classList.remove('e-input-focus');\n this.dlgObj.element.querySelectorAll('.e-cc-chbox')[0].focus();\n }\n };\n // internally use\n ColumnChooser.prototype.getModuleName = function () {\n return 'columnChooser';\n };\n return ColumnChooser;\n}());\nexport { ColumnChooser };\n","import { Row } from './../models/row';\nimport { CellType } from '../base/enum';\nimport { isNullOrUndefined, Internationalization, getValue } from '@syncfusion/ej2-base';\nimport { Cell } from '../models/cell';\nimport { ValueFormatter } from './../services/value-formatter';\nimport { Query } from '@syncfusion/ej2-data';\nimport { getForeignData } from '../base/util';\n/**\n * @hidden\n * `ExportHelper` for `PdfExport` & `ExcelExport`\n */\nvar ExportHelper = /** @class */ (function () {\n function ExportHelper(parent) {\n this.hideColumnInclude = false;\n this.foreignKeyData = {};\n this.parent = parent;\n }\n ExportHelper.getQuery = function (parent, data) {\n return data.isRemote() ?\n data.generateQuery(true).requiresCount().take(parent.pageSettings.totalRecordsCount) :\n data.generateQuery(true).requiresCount();\n };\n ExportHelper.prototype.getFData = function (value, column) {\n var foreignKeyData = getForeignData(column, {}, value, this.foreignKeyData[column.field])[0];\n return foreignKeyData;\n };\n ExportHelper.prototype.getColumnData = function (gridObj) {\n var _this = this;\n var columnPromise = [];\n var promise;\n var fColumns = gridObj.getForeignKeyColumns();\n if (fColumns.length) {\n fColumns.forEach(function (col) {\n columnPromise.push(col.dataSource.executeQuery(new Query()));\n });\n promise = Promise.all(columnPromise).then(function (e) {\n fColumns.forEach(function (col, index) {\n _this.foreignKeyData[col.field] = e[index].result;\n });\n // tslint:disable-next-line:no-any\n });\n }\n return promise;\n };\n /* tslint:disable:no-any */\n ExportHelper.prototype.getHeaders = function (column, isHideColumnInclude) {\n if (isHideColumnInclude) {\n this.hideColumnInclude = true;\n }\n else {\n this.hideColumnInclude = false;\n }\n var cols = column;\n this.colDepth = this.measureColumnDepth(cols);\n var rows = [];\n var actualColumns = [];\n for (var i = 0; i < this.colDepth; i++) {\n rows[i] = new Row({});\n rows[i].cells = [];\n }\n rows = this.processColumns(rows);\n rows = this.processHeaderCells(rows);\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n for (var i = 0; i < row.cells.length; i++) {\n var cell = row.cells[i];\n if (cell.visible === undefined && cell.cellType !== CellType.StackedHeader) {\n row.cells = this.removeCellFromRow(row.cells, i);\n i = i - 1;\n }\n if ((!isHideColumnInclude) && cell.visible !== undefined && (!cell.visible)) {\n row.cells = this.removeCellFromRow(row.cells, i);\n i = i - 1;\n }\n }\n }\n for (var i = 0; i < cols.length; i++) {\n this.generateActualColumns(cols[i], actualColumns);\n }\n return { rows: rows, columns: actualColumns };\n };\n ExportHelper.prototype.getConvertedWidth = function (input) {\n var value = parseFloat(input);\n /* tslint:disable-next-line:max-line-length */\n return (input.indexOf('%') !== -1) ? (this.parent.element.getBoundingClientRect().width * value / 100) : value;\n };\n ExportHelper.prototype.generateActualColumns = function (column, actualColumns) {\n if (column.commands) {\n return;\n }\n if (!column.columns) {\n if (column.visible || this.hideColumnInclude) {\n actualColumns.push(column);\n }\n }\n else {\n if (column.visible || this.hideColumnInclude) {\n var colSpan = this.getCellCount(column, 0);\n if (colSpan !== 0) {\n for (var i = 0; i < column.columns.length; i++) {\n /* tslint:disable-next-line:max-line-length */\n this.generateActualColumns(column.columns[i], actualColumns);\n }\n }\n }\n }\n };\n ExportHelper.prototype.removeCellFromRow = function (cells, cellIndex) {\n var resultCells = [];\n for (var i = 0; i < cellIndex; i++) {\n resultCells.push(cells[i]);\n }\n for (var i = (cellIndex + 1); i < cells.length; i++) {\n resultCells.push(cells[i]);\n }\n return resultCells;\n };\n ExportHelper.prototype.processHeaderCells = function (rows) {\n var columns = this.parent.enableColumnVirtualization ? this.parent.getColumns() : this.parent.columns;\n for (var i = 0; i < columns.length; i++) {\n if (!columns[i].commands) {\n rows = this.appendGridCells(columns[i], rows, 0, i === 0, false, i === (columns.length - 1));\n }\n }\n return rows;\n };\n /* tslint:disable */\n ExportHelper.prototype.appendGridCells = function (cols, gridRows, index, isFirstObj, isFirstColumn, isLastColumn) {\n /* tslint:enable */\n var lastCol = isLastColumn ? 'e-lastcell' : '';\n if (!cols.columns) {\n gridRows[index].cells.push(this.generateCell(cols, CellType.Header, this.colDepth - index, (isFirstObj ? '' : (isFirstColumn ? 'e-firstcell' : '')) + lastCol, index, this.parent.getColumnIndexByUid(cols.uid)));\n }\n else {\n var colSpan = this.getCellCount(cols, 0);\n if (colSpan) {\n gridRows[index].cells.push(new Cell({\n cellType: CellType.StackedHeader, column: cols, colSpan: colSpan\n }));\n }\n var isFirstCell = void 0;\n var isIgnoreFirstCell = void 0;\n for (var i = 0, len = cols.columns.length; i < len; i++) {\n isFirstCell = false;\n if (cols.columns[i].visible && !isIgnoreFirstCell) {\n isFirstCell = true;\n isIgnoreFirstCell = true;\n }\n /* tslint:disable-next-line:max-line-length */\n gridRows = this.appendGridCells(cols.columns[i], gridRows, index + 1, isFirstObj, i === 0, i === (len - 1) && isLastColumn);\n }\n }\n return gridRows;\n };\n ExportHelper.prototype.generateCell = function (gridColumn, cellType, rowSpan, className, rowIndex, columnIndex) {\n var option = {\n 'visible': gridColumn.visible,\n 'isDataCell': false,\n 'isTemplate': !isNullOrUndefined(gridColumn.headerTemplate),\n 'rowID': '',\n 'column': gridColumn,\n 'cellType': cellType,\n 'rowSpan': rowSpan,\n 'className': className,\n 'index': rowIndex,\n 'colIndex': columnIndex\n };\n if (!option.rowSpan || option.rowSpan < 2) {\n delete option.rowSpan;\n }\n return new Cell(option);\n };\n ExportHelper.prototype.processColumns = function (rows) {\n //TODO: generate dummy column for group, detail, stacked row here; ensureColumns here\n var gridObj = this.parent;\n var columnIndexes = this.parent.getColumnIndexesInView();\n for (var i = 0, len = rows.length; i < len; i++) {\n if (gridObj.allowGrouping) {\n for (var j = 0, len_1 = gridObj.groupSettings.columns.length; j < len_1; j++) {\n if (this.parent.enableColumnVirtualization && columnIndexes.indexOf(j) === -1) {\n continue;\n }\n rows[i].cells.push(this.generateCell({}, CellType.HeaderIndent));\n }\n }\n if (gridObj.detailTemplate || gridObj.childGrid) {\n rows[i].cells.push(this.generateCell({}, CellType.DetailHeader));\n }\n }\n return rows;\n };\n /* tslint:disable:no-any */\n ExportHelper.prototype.getCellCount = function (column, count) {\n if (column.columns) {\n for (var i = 0; i < column.columns.length; i++) {\n count = this.getCellCount(column.columns[i], count);\n }\n }\n else {\n if (column.visible || this.hideColumnInclude) {\n count++;\n }\n }\n return count;\n };\n /* tslint:disable:no-any */\n ExportHelper.prototype.measureColumnDepth = function (column) {\n var max = 0;\n for (var i = 0; i < column.length; i++) {\n var depth = this.checkDepth(column[i], 0);\n if (max < depth) {\n max = depth;\n }\n }\n return max + 1;\n };\n /* tslint:disable:no-any */\n ExportHelper.prototype.checkDepth = function (col, index) {\n if (col.columns) {\n index++;\n for (var i = 0; i < col.columns.length; i++) {\n index = this.checkDepth(col.columns[i], index);\n }\n }\n return index;\n };\n ;\n return ExportHelper;\n}());\nexport { ExportHelper };\n/**\n * @hidden\n * `ExportValueFormatter` for `PdfExport` & `ExcelExport`\n */\nvar ExportValueFormatter = /** @class */ (function () {\n function ExportValueFormatter() {\n this.valueFormatter = new ValueFormatter();\n this.internationalization = new Internationalization();\n }\n /* tslint:disable-next-line:no-any */\n ExportValueFormatter.prototype.returnFormattedValue = function (args, customFormat) {\n if (!isNullOrUndefined(args.value) && args.value) {\n return this.valueFormatter.getFormatFunction(customFormat)(args.value);\n }\n else {\n return '';\n }\n };\n /* tslint:disable-next-line:no-any */\n ExportValueFormatter.prototype.formatCellValue = function (args) {\n if (args.isForeignKey) {\n args.value = getValue(args.column.foreignKeyValue, getForeignData(args.column, {}, args.value)[0]);\n }\n if (args.column.type === 'number' && args.column.format !== undefined && args.column.format !== '') {\n return args.value ? this.internationalization.getNumberFormat({ format: args.column.format })(args.value) : '';\n }\n else if (args.column.type === 'boolean') {\n return args.value ? 'true' : 'false';\n /* tslint:disable-next-line:max-line-length */\n }\n else if ((args.column.type === 'date' || args.column.type === 'datetime' || args.column.type === 'time') && args.column.format !== undefined) {\n if (typeof args.column.format === 'string') {\n var format = void 0;\n if (args.column.type === 'date') {\n format = { type: 'date', skeleton: args.column.format };\n }\n else if (args.column.type === 'time') {\n format = { type: 'time', skeleton: args.column.format };\n }\n else {\n format = { type: 'dateTime', skeleton: args.column.format };\n }\n return this.returnFormattedValue(args, format);\n }\n else {\n if (args.column.format instanceof Object && args.column.format.type === undefined) {\n return (args.value.toString());\n }\n else {\n /* tslint:disable-next-line:max-line-length */\n var customFormat = void 0;\n if (args.column.type === 'date') {\n /* tslint:disable-next-line:max-line-length */\n customFormat = { type: args.column.format.type, format: args.column.format.format, skeleton: args.column.format.skeleton };\n }\n else if (args.column.type === 'time') {\n customFormat = { type: 'time', format: args.column.format.format, skeleton: args.column.format.skeleton };\n }\n else {\n customFormat = { type: 'dateTime', format: args.column.format.format, skeleton: args.column.format.skeleton };\n }\n return this.returnFormattedValue(args, customFormat);\n }\n }\n }\n else {\n if (args.column.type === undefined || args.column.type === null) {\n return '';\n }\n else {\n return (args.value).toString();\n }\n }\n };\n return ExportValueFormatter;\n}());\nexport { ExportValueFormatter };\n","import * as events from '../base/constant';\nimport { Workbook } from '@syncfusion/ej2-excel-export';\nimport { isNullOrUndefined, getEnumValue, compile, extend, getValue } from '@syncfusion/ej2-base';\nimport { Data } from '../actions/data';\nimport { ExportHelper, ExportValueFormatter } from './export-helper';\nimport { SummaryModelGenerator, GroupSummaryModelGenerator, CaptionSummaryModelGenerator } from '../services/summary-model-generator';\nimport { CellType } from '../base/enum';\nimport { Query, DataManager } from '@syncfusion/ej2-data';\n/**\n * @hidden\n * `ExcelExport` module is used to handle the Excel export action.\n */\nvar ExcelExport = /** @class */ (function () {\n /**\n * Constructor for the Grid Excel Export module.\n * @hidden\n */\n function ExcelExport(parent) {\n /* tslint:disable-next-line:no-any */\n this.book = {};\n /* tslint:disable-next-line:no-any */\n this.workSheet = [];\n /* tslint:disable-next-line:no-any */\n this.rows = [];\n /* tslint:disable-next-line:no-any */\n this.columns = [];\n /* tslint:disable-next-line:no-any */\n this.styles = [];\n this.rowLength = 1;\n this.expType = 'AppendToSheet';\n this.includeHiddenColumn = false;\n this.isCsvExport = false;\n this.isElementIdChanged = false;\n this.foreignKeyData = {};\n this.parent = parent;\n this.helper = new ExportHelper(parent);\n }\n /**\n * For internal use only - Get the module name.\n */\n ExcelExport.prototype.getModuleName = function () {\n return 'ExcelExport';\n };\n ExcelExport.prototype.init = function (gObj) {\n if (gObj.element !== null && gObj.element.id === '') {\n gObj.element.id = new Date().toISOString();\n this.isElementIdChanged = true;\n }\n this.parent = gObj;\n if (this.parent.isDestroyed) {\n return;\n }\n this.isExporting = undefined;\n this.book = {};\n /* tslint:disable-next-line:no-any */\n this.workSheet = [];\n /* tslint:disable-next-line:no-any */\n this.rows = [];\n /* tslint:disable-next-line:no-any */\n this.columns = [];\n /* tslint:disable-next-line:no-any */\n this.styles = [];\n this.rowLength = 1;\n /* tslint:disable-next-line:no-any */\n this.footer = undefined;\n this.expType = 'AppendToSheet';\n this.includeHiddenColumn = false;\n this.exportValueFormatter = new ExportValueFormatter();\n };\n /**\n * Export Grid to Excel file.\n * @param {exportProperties} exportProperties - Defines the export properties of the Grid.\n * @param {isMultipleExport} isMultipleExport - Defines is multiple Grid's are exported.\n * @param {workbook} workbook - Defined the Workbook if multiple Grid is exported.\n * @param {isCsv} isCsv - true if export to CSV.\n * @return {Promise}\n */\n /* tslint:disable-next-line:max-line-length */\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.Map = function (grid, exportProperties, isMultipleExport, workbook, isCsv, isBlob) {\n var gObj = grid;\n gObj.trigger(events.beforeExcelExport);\n this.data = new Data(gObj);\n this.isExporting = true;\n this.isBlob = isBlob;\n if (isCsv) {\n this.isCsvExport = isCsv;\n }\n else {\n this.isCsvExport = false;\n }\n return this.processRecords(gObj, exportProperties, isMultipleExport, workbook);\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processRecords = function (gObj, exportProperties, isMultipleExport, workbook) {\n var _this = this;\n if (!isNullOrUndefined(exportProperties) && !isNullOrUndefined(exportProperties.dataSource) &&\n exportProperties.dataSource instanceof DataManager) {\n /* tslint:disable-next-line:no-any */\n return new Promise(function (resolve, reject) {\n /* tslint:disable-next-line:max-line-length */\n /* tslint:disable-next-line:no-any */\n var dataManager = exportProperties.dataSource.executeQuery(new Query());\n dataManager.then(function (r) {\n _this.init(gObj);\n _this.processInnerRecords(gObj, exportProperties, isMultipleExport, workbook, r);\n resolve(_this.book);\n });\n });\n }\n else {\n /* tslint:disable-next-line:no-any */\n var allPromise = [];\n allPromise.push(this.data.getData({}, ExportHelper.getQuery(gObj, this.data)));\n allPromise.push(this.helper.getColumnData(gObj));\n return Promise.all(allPromise).then(function (e) {\n _this.init(gObj);\n _this.processInnerRecords(gObj, exportProperties, isMultipleExport, workbook, e[0]);\n return _this.book;\n }).catch(function (e) {\n _this.parent.trigger(events.actionFailure, e);\n });\n }\n };\n /* tslint:disable-next-line:max-line-length */\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processInnerRecords = function (gObj, exportProperties, isMultipleExport, workbook, r) {\n var blankRows = 5;\n if (!isNullOrUndefined(exportProperties) && !isNullOrUndefined(exportProperties.multipleExport)) {\n /* tslint:disable-next-line:max-line-length */\n this.expType = (!isNullOrUndefined(exportProperties.multipleExport.type) ? exportProperties.multipleExport.type : 'AppendToSheet');\n if (!isNullOrUndefined(exportProperties.multipleExport.blankRows)) {\n blankRows = exportProperties.multipleExport.blankRows;\n }\n }\n if (isNullOrUndefined(workbook)) {\n this.workSheet = [];\n this.rows = [];\n this.columns = [];\n this.styles = [];\n }\n else if (this.expType === 'NewSheet') {\n this.workSheet = workbook.worksheets;\n this.rows = [];\n this.columns = [];\n this.styles = workbook.styles;\n }\n else {\n this.workSheet = [];\n this.rows = workbook.worksheets[0].rows;\n this.columns = workbook.worksheets[0].columns;\n this.styles = workbook.styles;\n this.rowLength = (this.rows[this.rows.length - 1].index + blankRows);\n this.rowLength++;\n }\n if (!isNullOrUndefined(exportProperties)) {\n if (!isNullOrUndefined(isMultipleExport)) {\n if (!isNullOrUndefined(exportProperties.header) && (isMultipleExport || this.expType === 'NewSheet')) {\n this.processExcelHeader(JSON.parse(JSON.stringify(exportProperties.header)));\n }\n if (!isNullOrUndefined(exportProperties.footer)) {\n if (this.expType === 'AppendToSheet') {\n if (!isMultipleExport) {\n this.footer = JSON.parse(JSON.stringify(exportProperties.footer));\n }\n }\n else {\n this.footer = JSON.parse(JSON.stringify(exportProperties.footer));\n }\n }\n }\n else {\n if (!isNullOrUndefined(exportProperties.header)) {\n this.processExcelHeader(JSON.parse(JSON.stringify(exportProperties.header)));\n }\n if (!isNullOrUndefined(exportProperties.footer)) {\n this.footer = JSON.parse(JSON.stringify(exportProperties.footer));\n }\n }\n }\n this.includeHiddenColumn = (!isNullOrUndefined(exportProperties) ? exportProperties.includeHiddenColumn : false);\n /* tslint:disable-next-line:max-line-length */\n /* tslint:disable-next-line:no-any */\n var headerRow = this.helper.getHeaders(gObj.columns, this.includeHiddenColumn);\n var groupIndent = 0;\n /* tslint:disable:no-any */\n if (!isNullOrUndefined((r.result).level)) {\n groupIndent += (r.result).level;\n groupIndent += (r.result).childLevels;\n }\n /* tslint:enable:no-any */\n this.processHeaderContent(gObj, headerRow, exportProperties, groupIndent);\n /* tslint:disable-next-line:max-line-length */\n if (!isNullOrUndefined(exportProperties) && !isNullOrUndefined(exportProperties.dataSource) && !(exportProperties.dataSource instanceof DataManager)) {\n this.processRecordContent(gObj, r, headerRow, isMultipleExport, exportProperties.dataSource);\n }\n else if (!isNullOrUndefined(exportProperties) && exportProperties.exportType === 'CurrentPage') {\n this.processRecordContent(gObj, r, headerRow, isMultipleExport, gObj.getCurrentViewRecords());\n }\n else {\n this.processRecordContent(gObj, r, headerRow, isMultipleExport);\n }\n this.isExporting = false;\n gObj.trigger(events.excelExportComplete, this.isBlob ? { promise: this.blobPromise } : {});\n };\n /* tslint:disable-next-line:max-line-length */\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processRecordContent = function (gObj, returnType, headerRow, isMultipleExport, currentViewRecords) {\n /* tslint:disable-next-line:no-any */\n var column = gObj.columns;\n /* tslint:disable-next-line:no-any */\n var record = undefined;\n if (!isNullOrUndefined(currentViewRecords)) {\n record = currentViewRecords;\n }\n else {\n record = returnType.result;\n }\n if (!isNullOrUndefined(record.level)) {\n this.processGroupedRows(gObj, record, headerRow, record.level);\n }\n else {\n this.processRecordRows(gObj, record, headerRow, 0);\n }\n if (!isNullOrUndefined(returnType.aggregates)) {\n if (!isNullOrUndefined(currentViewRecords)) {\n this.processAggregates(gObj, returnType.result, currentViewRecords);\n }\n else {\n this.processAggregates(gObj, returnType.result);\n }\n }\n //footer template add\n if (!isNullOrUndefined(this.footer)) {\n if ((this.expType === 'AppendToSheet' && !isMultipleExport) || (this.expType === 'NewSheet')) {\n this.processExcelFooter(this.footer);\n }\n }\n /* tslint:disable-next-line:no-any */\n var sheet = {};\n if (this.columns.length > 0) {\n sheet.columns = this.columns;\n }\n sheet.rows = this.rows;\n this.workSheet.push(sheet);\n this.book.worksheets = this.workSheet;\n this.book.styles = this.styles;\n if (!isMultipleExport) {\n if (this.isCsvExport) {\n var book = new Workbook(this.book, 'csv', gObj.locale);\n if (!this.isBlob) {\n book.save('Export.csv');\n }\n else {\n this.blobPromise = book.saveAsBlob('text/csv');\n }\n }\n else {\n var book = new Workbook(this.book, 'xlsx', gObj.locale);\n if (!this.isBlob) {\n book.save('Export.xlsx');\n }\n else {\n this.blobPromise = book.saveAsBlob('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');\n }\n }\n if (this.isElementIdChanged) {\n gObj.element.id = '';\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processGroupedRows = function (gObj, dataSource, headerRow, level) {\n for (var _i = 0, dataSource_1 = dataSource; _i < dataSource_1.length; _i++) {\n var item = dataSource_1[_i];\n /* tslint:disable-next-line:no-any */\n var cells = [];\n var index = 1;\n /* tslint:disable-next-line:no-any */\n var cell = {};\n cell.index = index + level;\n var col = gObj.getColumnByField(item.field);\n /* tslint:disable-next-line:no-any */\n var args = {\n value: item.key,\n column: col,\n style: undefined,\n isForeignKey: col.isForeignColumn(),\n };\n cell.value = this.parent.getColumnByField(item.field).headerText +\n ': ' + this.exportValueFormatter.formatCellValue(args) + ' - ';\n if (item.count > 1) {\n cell.value += item.count + ' items';\n }\n else {\n cell.value += item.count + ' item';\n }\n cell.style = this.getCaptionThemeStyle(this.theme);\n var captionModelGen = new CaptionSummaryModelGenerator(gObj);\n var groupCaptionSummaryRows = captionModelGen.generateRows(item);\n this.fillAggregates(gObj, groupCaptionSummaryRows, dataSource.level + dataSource.childLevels, this.rowLength);\n cells.push(cell);\n if (this.rows[this.rows.length - 1].cells.length > 0) {\n var lIndex = dataSource.level + dataSource.childLevels + groupCaptionSummaryRows[0].cells.length;\n var hIndex = 0;\n for (var _a = 0, _b = this.rows[this.rows.length - 1].cells; _a < _b.length; _a++) {\n var tCell = _b[_a];\n if (tCell.index < lIndex) {\n lIndex = tCell.index;\n }\n if (tCell.index > hIndex) {\n hIndex = tCell.index;\n }\n tCell.style = this.getCaptionThemeStyle(this.theme);\n if (cells[cells.length - 1].index !== tCell.index) {\n cells.push(tCell);\n }\n }\n if ((lIndex - cell.index) > 1) {\n cell.colSpan = lIndex - cell.index;\n }\n while (hIndex < (headerRow.columns.length + level)) {\n /* tslint:disable-next-line:no-any */\n var sCell = {};\n if (dataSource.childLevels === 0) {\n sCell.index = (hIndex);\n }\n else {\n sCell.index = (hIndex + 1);\n }\n sCell.style = this.getCaptionThemeStyle(this.theme);\n cells.push(sCell);\n hIndex++;\n }\n }\n else {\n var span = 0;\n //Calculation for column span when group caption dont have aggregates\n for (var _c = 0, _d = headerRow.columns; _c < _d.length; _c++) {\n var col_1 = _d[_c];\n if (col_1.visible) {\n span++;\n }\n }\n cell.colSpan = (dataSource.childLevels + span);\n }\n this.rows[this.rows.length - 1].cells = cells;\n this.rowLength++;\n if (!isNullOrUndefined(dataSource.childLevels) && dataSource.childLevels > 0) {\n this.processGroupedRows(gObj, item.items, headerRow, item.items.level);\n }\n else {\n this.processRecordRows(gObj, item.items, headerRow, (level));\n this.processAggregates(gObj, item, undefined, (level), true);\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processRecordRows = function (gObj, record, headerRow, level) {\n var rLen = Object.keys(record).length;\n var index = 1;\n /* tslint:disable-next-line:no-any */\n var cells = [];\n for (var r = 0; r < rLen; r++) {\n cells = [];\n index = 1;\n for (var c = 0, len = headerRow.columns.length; c < len; c++) {\n /* tslint:disable-next-line:no-any */\n var value = !isNullOrUndefined(headerRow.columns[c].field) ? getValue(headerRow.columns[c].field, record[r]) : '';\n var column = headerRow.columns[c];\n var foreignKeyData = void 0;\n // tslint:disable-next-line:max-line-length\n if (column.isForeignColumn && column.isForeignColumn()) {\n foreignKeyData = this.helper.getFData(value, column);\n value = getValue(column.foreignKeyValue, foreignKeyData);\n }\n if (!isNullOrUndefined(value)) {\n /* tslint:disable-next-line:no-any */\n var excelCellArgs = { data: record[r], column: headerRow.columns[c], foreignKeyData: foreignKeyData };\n gObj.trigger(events.excelQueryCellInfo, extend(excelCellArgs, {\n column: headerRow.columns[c], data: record[r],\n value: value, style: undefined, colSpan: 1\n }));\n /* tslint:disable-next-line:no-any */\n var cell = {};\n cell.index = index + level;\n cell.value = excelCellArgs.value;\n if (excelCellArgs.colSpan > 1) {\n cell.colSpan = excelCellArgs.colSpan;\n }\n if (!isNullOrUndefined(excelCellArgs.style)) {\n var styleIndex = this.getColumnStyle(gObj, index + level);\n cell.style = this.mergeOptions(this.styles[styleIndex], excelCellArgs.style);\n }\n else {\n cell.style = { name: gObj.element.id + 'column' + (index + level) };\n }\n cells.push(cell);\n }\n index++;\n }\n this.rows.push({ index: this.rowLength++, cells: cells });\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processAggregates = function (gObj, rec, currentViewRecords, indent, byGroup) {\n var summaryModel = new SummaryModelGenerator(gObj);\n /* tslint:disable-next-line:no-any */\n var data = undefined;\n if (!isNullOrUndefined(currentViewRecords)) {\n data = currentViewRecords;\n }\n else {\n data = rec;\n }\n if (indent === undefined) {\n indent = 0;\n }\n if (gObj.groupSettings.columns.length > 0 && byGroup) {\n var groupSummaryModel = new GroupSummaryModelGenerator(gObj);\n var groupSummaryRows = groupSummaryModel.generateRows(data, { level: data.level });\n if (groupSummaryRows.length > 0) {\n this.fillAggregates(gObj, groupSummaryRows, indent);\n }\n }\n else {\n indent = gObj.groupSettings.columns.length > 0 && !byGroup ? gObj.groupSettings.columns.length : indent;\n var sRows = summaryModel.generateRows(data, rec.aggregates);\n if (sRows.length > 0 && !byGroup) {\n this.fillAggregates(gObj, sRows, indent);\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.fillAggregates = function (gObj, cells, indent, customIndex) {\n for (var _i = 0, cells_1 = cells; _i < cells_1.length; _i++) {\n var row = cells_1[_i];\n /* tslint:disable-next-line:no-any */\n var cells_2 = [];\n var index = 0;\n for (var _a = 0, _b = row.cells; _a < _b.length; _a++) {\n var cell = _b[_a];\n /* tslint:disable-next-line:no-any */\n var eCell = {};\n if ((cell.visible || this.includeHiddenColumn)) {\n index++;\n if (cell.isDataCell) {\n eCell.index = index + indent;\n if (!isNullOrUndefined(cell.column.footerTemplate)) {\n eCell.value = this.getAggreateValue(CellType.Summary, cell.column.footerTemplate, cell, row);\n }\n else if (!isNullOrUndefined(cell.column.groupFooterTemplate)) {\n eCell.value = this.getAggreateValue(CellType.GroupSummary, cell.column.groupFooterTemplate, cell, row);\n }\n else if (!isNullOrUndefined(cell.column.groupCaptionTemplate)) {\n eCell.value = this.getAggreateValue(CellType.CaptionSummary, cell.column.groupCaptionTemplate, cell, row);\n }\n else {\n for (var _c = 0, _d = Object.keys(row.data[cell.column.field]); _c < _d.length; _c++) {\n var key = _d[_c];\n if (key === cell.column.type) {\n if (!isNullOrUndefined(row.data[cell.column.field].Sum)) {\n eCell.value = row.data[cell.column.field].Sum;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Average)) {\n eCell.value = row.data[cell.column.field].Average;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Max)) {\n eCell.value = row.data[cell.column.field].Max;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Min)) {\n eCell.value = row.data[cell.column.field].Min;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Count)) {\n eCell.value = row.data[cell.column.field].Count;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].TrueCount)) {\n eCell.value = row.data[cell.column.field].TrueCount;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].FalseCount)) {\n eCell.value = row.data[cell.column.field].FalseCount;\n }\n else if (!isNullOrUndefined(row.data[cell.column.field].Custom)) {\n eCell.value = row.data[cell.column.field].Custom;\n }\n }\n }\n }\n eCell.style = this.getCaptionThemeStyle(this.theme); //{ name: gObj.element.id + 'column' + index };\n if (cell.attributes.style.textAlign) {\n eCell.style.hAlign = cell.attributes.style.textAlign;\n }\n cells_2.push(eCell);\n }\n else {\n if (customIndex === undefined) {\n eCell.index = index + indent;\n eCell.style = this.getCaptionThemeStyle(this.theme); //{ name: gObj.element.id + 'column' + index };\n cells_2.push(eCell);\n }\n }\n }\n }\n if (!isNullOrUndefined(customIndex)) {\n this.rows.push({ index: customIndex, cells: cells_2 });\n }\n else {\n this.rows.push({ index: this.rowLength++, cells: cells_2 });\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.getAggreateValue = function (cellType, template, cell, row) {\n var templateFn = {};\n templateFn[getEnumValue(CellType, cell.cellType)] = compile(template);\n /* tslint:disable-next-line:max-line-length */\n var txt = (templateFn[getEnumValue(CellType, cell.cellType)](row.data[cell.column.field ? cell.column.field : cell.column.columnName]));\n return txt[0].wholeText;\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.mergeOptions = function (JSON1, JSON2) {\n /* tslint:disable-next-line:no-any */\n var result = {};\n /* tslint:disable-next-line:no-any */\n var attrname = Object.keys(JSON1);\n for (var index = 0; index < attrname.length; index++) {\n if (attrname[index] !== 'name') {\n result[attrname[index]] = JSON1[attrname[index]];\n }\n }\n attrname = Object.keys(JSON2);\n for (var index = 0; index < attrname.length; index++) {\n if (attrname[index] !== 'name') {\n result[attrname[index]] = JSON2[attrname[index]];\n }\n }\n return result;\n };\n ExcelExport.prototype.getColumnStyle = function (gObj, columnIndex) {\n var index = 0;\n for (var _i = 0, _a = this.styles; _i < _a.length; _i++) {\n var style = _a[_i];\n if (style.name === gObj.element.id + 'column' + columnIndex) {\n return index;\n }\n index++;\n }\n return undefined;\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processHeaderContent = function (gObj, headerRow, exportProperties, indent) {\n /* tslint:disable-next-line:no-any */\n var column = gObj.columns;\n var rowIndex = 1;\n /* tslint:disable-next-line:no-any */\n var returnValue = headerRow;\n /* tslint:enable:no-any */\n var gridRows = returnValue.rows;\n // Column collection with respect to the records in the grid\n var gridColumns = returnValue.columns;\n /* tslint:disable-next-line:no-any */\n var spannedCells = [];\n if (indent > 0) {\n var index = 0;\n while (index !== indent) {\n this.columns.push({ index: index + 1, width: 30 });\n index++;\n }\n }\n for (var row = 0; row < gridRows.length; row++) {\n var currentCellIndex = 1 + indent;\n /* tslint:disable-next-line:no-any */\n var cells = [];\n for (var column_1 = 0; column_1 < gridRows[row].cells.length; column_1++) {\n /* tslint:disable-next-line:no-any */\n var style = {};\n /* tslint:disable-next-line:no-any */\n var cell = {};\n /* tslint:disable-next-line:no-any */\n var gridCell = gridRows[row].cells[column_1];\n /* tslint:disable-next-line:no-any */\n var result = { contains: true, index: 1 };\n while (result.contains) {\n result = this.getIndex(spannedCells, rowIndex, currentCellIndex);\n currentCellIndex = result.index;\n if (!result.contains) {\n cell.index = result.index;\n break;\n }\n }\n if (!isNullOrUndefined(gridCell.rowSpan) && gridCell.rowSpan !== 1) {\n cell.rowSpan = gridCell.rowSpan;\n for (var i = rowIndex; i < gridCell.rowSpan + rowIndex; i++) {\n /* tslint:disable-next-line:no-any */\n var spannedCell = { rowIndex: 0, columnIndex: 0 };\n spannedCell.rowIndex = i;\n spannedCell.columnIndex = currentCellIndex;\n spannedCells.push(spannedCell);\n }\n }\n if (!isNullOrUndefined(gridCell.colSpan) && gridCell.colSpan !== 1) {\n cell.colSpan = gridCell.colSpan;\n currentCellIndex = currentCellIndex + cell.colSpan - 1;\n }\n cell.value = gridCell.column.headerText;\n if (!isNullOrUndefined(exportProperties) && !isNullOrUndefined(exportProperties.theme)) {\n this.theme = exportProperties.theme;\n }\n style = this.getHeaderThemeStyle(this.theme);\n if (!isNullOrUndefined(gridCell.column.textAlign)) {\n style.hAlign = gridCell.column.textAlign;\n }\n if (!isNullOrUndefined(gridCell.column.headerTextAlign)) {\n style.hAlign = gridCell.column.headerTextAlign;\n }\n cell.style = style;\n cells.push(cell);\n currentCellIndex++;\n }\n this.rows.push({ index: this.rowLength++, cells: cells });\n }\n for (var col = 0; col < gridColumns.length; col++) {\n this.parseStyles(gObj, gridColumns[col], this.getRecordThemeStyle(this.theme), indent + col + 1);\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.getHeaderThemeStyle = function (theme) {\n /* tslint:disable-next-line:no-any */\n var style = {};\n style.fontSize = 12;\n style.borders = { color: '#E0E0E0' };\n if (!isNullOrUndefined(theme) && !isNullOrUndefined(theme.header)) {\n style = this.updateThemeStyle(theme.header, style);\n }\n return style;\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.updateThemeStyle = function (themestyle, style) {\n if (!isNullOrUndefined(themestyle.fontColor)) {\n style.fontColor = themestyle.fontColor;\n }\n if (!isNullOrUndefined(themestyle.fontName)) {\n style.fontName = themestyle.fontName;\n }\n if (!isNullOrUndefined(themestyle.fontSize)) {\n style.fontSize = themestyle.fontSize;\n }\n if (!isNullOrUndefined(themestyle.borders)) {\n if (!isNullOrUndefined(themestyle.borders.color)) {\n style.borders.color = themestyle.borders.color;\n }\n if (!isNullOrUndefined(themestyle.borders.lineStyle)) {\n style.borders.lineStyle = themestyle.borders.lineStyle;\n }\n }\n if (themestyle.bold !== false) {\n style.bold = themestyle.bold;\n }\n return style;\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.getCaptionThemeStyle = function (theme) {\n /* tslint:disable-next-line:no-any */\n var style = {};\n style.fontSize = 13;\n style.backColor = '#F6F6F6';\n if (!isNullOrUndefined(theme) && !isNullOrUndefined(theme.caption)) {\n style = this.updateThemeStyle(theme.caption, style);\n }\n return style;\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.getRecordThemeStyle = function (theme) {\n /* tslint:disable-next-line:no-any */\n var style = {};\n style.fontSize = 13;\n style.borders = { color: '#E0E0E0' };\n if (!isNullOrUndefined(theme) && !isNullOrUndefined(theme.record)) {\n style = this.updateThemeStyle(theme.record, style);\n }\n return style;\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processExcelHeader = function (header) {\n if (!isNullOrUndefined(header.rows) && (this.expType === 'NewSheet' || this.rowLength === 1)) {\n var noRows = void 0;\n if (header.headerRows === undefined) {\n this.rowLength = header.rows.length;\n }\n else {\n this.rowLength = header.headerRows;\n }\n if (this.rowLength < header.rows.length) {\n noRows = this.rowLength;\n }\n else {\n noRows = header.rows.length;\n }\n this.rowLength++;\n for (var row = 0; row < noRows; row++) {\n /* tslint:disable-next-line:no-any */\n var json = header.rows[row];\n //Row index\n if (!(json.index !== null && !isNullOrUndefined(json.index))) {\n json.index = (row + 1);\n }\n this.updatedCellIndex(json);\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.updatedCellIndex = function (json) {\n var cellsLength = json.cells.length;\n for (var cellId = 0; cellId < cellsLength; cellId++) {\n /* tslint:disable-next-line:no-any */\n var jsonCell = json.cells[cellId];\n //cell index\n if (!(jsonCell.index !== null && !isNullOrUndefined(jsonCell.index))) {\n jsonCell.index = (cellId + 1);\n }\n }\n this.rows.push(json);\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.processExcelFooter = function (footer) {\n if (!isNullOrUndefined(footer.rows)) {\n var noRows = void 0;\n if (footer.footerRows === undefined) {\n this.rowLength += footer.rows.length;\n }\n else {\n if (footer.footerRows > footer.rows.length) {\n this.rowLength += (footer.footerRows - footer.rows.length);\n noRows = footer.rows.length;\n }\n else {\n noRows = footer.footerRows;\n }\n }\n for (var row = 0; row < noRows; row++) {\n /* tslint:disable-next-line:no-any */\n var json = footer.rows[row];\n //Row index\n if (json.index === null || json.index === undefined) {\n json.index = this.rowLength++;\n }\n else {\n json.index += this.rowLength;\n }\n this.updatedCellIndex(json);\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.getIndex = function (spannedCells, rowIndex, columnIndex) {\n for (var _i = 0, spannedCells_1 = spannedCells; _i < spannedCells_1.length; _i++) {\n var spannedCell = spannedCells_1[_i];\n if ((spannedCell.rowIndex === rowIndex) && (spannedCell.columnIndex === columnIndex)) {\n columnIndex = columnIndex + 1;\n return { contains: true, index: columnIndex };\n }\n }\n return { contains: false, index: columnIndex };\n };\n /* tslint:disable-next-line:no-any */\n ExcelExport.prototype.parseStyles = function (gObj, col, style, index) {\n if (!isNullOrUndefined(col.format)) {\n if (!isNullOrUndefined(col.format.skeleton)) {\n style.numberFormat = col.format.skeleton;\n if (!isNullOrUndefined(col.format.type)) {\n style.type = col.format.type;\n }\n }\n else {\n style.numberFormat = col.format;\n style.type = col.type;\n }\n }\n if (!isNullOrUndefined(col.textAlign)) {\n style.hAlign = col.textAlign;\n }\n if (Object.keys(style).length > 0) {\n style.name = gObj.element.id + 'column' + index;\n this.styles.push(style);\n }\n if (!isNullOrUndefined(col.width)) {\n /* tslint:disable-next-line:max-line-length */\n this.columns.push({ index: index, width: typeof col.width === 'number' ? col.width : this.helper.getConvertedWidth(col.width) });\n }\n };\n /**\n * To destroy the excel export\n * @return {void}\n * @hidden\n */\n ExcelExport.prototype.destroy = function () {\n //destroy for exporting\n };\n return ExcelExport;\n}());\nexport { ExcelExport };\n","import * as events from '../base/constant';\nimport { PdfDocument, PdfGrid, PdfBorders, PdfPen } from '@syncfusion/ej2-pdf-export';\nimport { PdfStandardFont, PdfFontFamily, PdfFontStyle, PdfBitmap } from '@syncfusion/ej2-pdf-export';\nimport { PdfStringFormat, PdfTextAlignment, PdfColor, PdfSolidBrush } from '@syncfusion/ej2-pdf-export';\nimport { PdfVerticalAlignment, RectangleF, PdfPageTemplateElement } from '@syncfusion/ej2-pdf-export';\nimport { PointF, PdfPageNumberField, PdfCompositeField } from '@syncfusion/ej2-pdf-export';\nimport { PdfPageCountField, SizeF, PdfPageSettings, PdfPageOrientation } from '@syncfusion/ej2-pdf-export';\nimport { ExportHelper, ExportValueFormatter } from './export-helper';\nimport { Data } from '../actions/data';\nimport { SummaryModelGenerator, GroupSummaryModelGenerator, CaptionSummaryModelGenerator } from '../services/summary-model-generator';\nimport { compile, getEnumValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { getValue } from '@syncfusion/ej2-base';\n/**\n * `PDF Export` module is used to handle the exportToPDF action.\n * @hidden\n */\nvar PdfExport = /** @class */ (function () {\n /**\n * Constructor for the Grid PDF Export module\n * @hidden\n */\n function PdfExport(parent) {\n this.hideColumnInclude = false;\n this.currentViewData = false;\n this.customDataSource = false;\n this.isGrouping = false;\n this.parent = parent;\n this.helper = new ExportHelper(parent);\n }\n /**\n * For internal use only - Get the module name.\n */\n PdfExport.prototype.getModuleName = function () {\n return 'PdfExport';\n };\n PdfExport.prototype.init = function (parent) {\n this.exportValueFormatter = new ExportValueFormatter();\n this.pdfDocument = undefined;\n this.hideColumnInclude = false;\n this.currentViewData = false;\n this.parent = parent;\n var gObj = parent;\n this.isGrouping = false;\n this.isExporting = true;\n gObj.trigger(events.beforePdfExport);\n };\n /**\n * Used to map the input data\n * @return {void}\n */\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.Map = function (parent, pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n var _this = this;\n this.data = new Data(this.parent);\n this.isBlob = isBlob;\n /* tslint:disable-next-line:max-line-length */\n if (!isNullOrUndefined(pdfExportProperties) && !isNullOrUndefined(pdfExportProperties.dataSource) && pdfExportProperties.dataSource instanceof DataManager) {\n return new Promise(function (resolve, reject) {\n /* tslint:disable-next-line:no-any */ /* tslint:disable-next-line:max-line-length */\n new DataManager({ url: pdfExportProperties.dataSource.dataSource.url, adaptor: pdfExportProperties.dataSource.adaptor }).executeQuery(new Query()).then(function (returnType) {\n _this.init(parent);\n if (!isNullOrUndefined(pdfDoc)) {\n _this.pdfDocument = pdfDoc;\n }\n else {\n _this.pdfDocument = new PdfDocument();\n }\n _this.processExport(parent, returnType, pdfExportProperties, isMultipleExport);\n _this.isExporting = false;\n parent.trigger(events.pdfExportComplete, _this.isBlob ? { promise: _this.blobPromise } : {});\n resolve(_this.pdfDocument);\n });\n });\n }\n else {\n var allPromise = [];\n allPromise.push(this.data.getData({}, ExportHelper.getQuery(parent, this.data)));\n allPromise.push(this.helper.getColumnData(parent));\n return Promise.all(allPromise).then(function (e) {\n _this.init(parent);\n if (!isNullOrUndefined(pdfDoc)) {\n _this.pdfDocument = pdfDoc;\n }\n else {\n _this.pdfDocument = new PdfDocument();\n }\n _this.processExport(parent, e[0], pdfExportProperties, isMultipleExport);\n _this.isExporting = false;\n parent.trigger(events.pdfExportComplete, _this.isBlob ? { promise: _this.blobPromise } : {});\n return _this.pdfDocument;\n // tslint:disable-next-line:no-any\n });\n }\n };\n /* tslint:disable:no-any */\n PdfExport.prototype.processExport = function (gObj, returnType, pdfExportProperties, isMultipleExport) {\n if (!isNullOrUndefined(pdfExportProperties)) {\n this.gridTheme = pdfExportProperties.theme;\n }\n var columns = gObj.columns;\n var dataSource = returnType.result;\n /* tslint:enable:no-any */\n var section = this.pdfDocument.sections.add();\n /* tslint:disable-next-line:no-any */\n var result = this.processExportProperties(pdfExportProperties, dataSource, section);\n dataSource = result.dataSource;\n /* tslint:disable-next-line:no-any */\n if (!isNullOrUndefined(dataSource.GroupGuid)) {\n this.isGrouping = true;\n }\n section = result.section;\n var pdfPage = section.pages.add();\n // create a grid\n var pdfGrid = new PdfGrid();\n // get header theme style\n /* tslint:disable-next-line:no-any */\n var headerThemeStyle = this.getHeaderThemeStyle();\n var border = headerThemeStyle.border;\n var headerFont = headerThemeStyle.font;\n var headerBrush = headerThemeStyle.brush;\n /* tslint:disable-next-line:no-any */\n var returnValue = this.helper.getHeaders(columns, this.hideColumnInclude);\n var rows = returnValue.rows;\n // Column collection with respect to the records in the grid\n var gridColumns = returnValue.columns;\n // process grid header content\n pdfGrid = this.processGridHeaders(dataSource.childLevels, pdfGrid, rows, gridColumns, border, headerFont, headerBrush);\n // set alignment, width and type of the values of the column\n this.setColumnProperties(gridColumns, pdfGrid);\n /* tslint:disable-next-line:no-any */\n var captionThemeStyle = this.getSummaryCaptionThemeStyle();\n if (!isNullOrUndefined(dataSource) && dataSource.length > 0) {\n if (this.isGrouping) {\n /* tslint:disable-next-line:max-line-length */\n this.processGroupedRecords(pdfGrid, dataSource, gridColumns, gObj, border, 0, captionThemeStyle.font, captionThemeStyle.brush, captionThemeStyle.backgroundBrush, returnType);\n }\n else {\n this.processRecord(border, gridColumns, gObj, dataSource, pdfGrid);\n }\n if (!isNullOrUndefined(returnType.aggregates)) {\n var summaryModel = new SummaryModelGenerator(gObj);\n var sRows = void 0;\n if (this.customDataSource) {\n sRows = summaryModel.generateRows(dataSource, returnType.aggregates);\n }\n else if (this.currentViewData) {\n sRows = summaryModel.generateRows(this.parent.getCurrentViewRecords(), returnType.aggregates);\n }\n else if (this.isGrouping) {\n sRows = summaryModel.generateRows(dataSource.records, returnType.aggregates);\n }\n else {\n sRows = summaryModel.generateRows(returnType.result, returnType.aggregates);\n }\n /* tslint:disable-next-line:max-line-length */\n this.processAggregates(sRows, pdfGrid, border, captionThemeStyle.font, captionThemeStyle.brush, captionThemeStyle.backgroundBrush, false);\n }\n }\n else {\n var row = pdfGrid.rows.addRow();\n row.style.setBorder(border);\n }\n // draw the grid\n pdfGrid.draw(pdfPage, 20, 20);\n if (!isMultipleExport) {\n // save the PDF\n if (!this.isBlob) {\n this.pdfDocument.save('Export.pdf');\n }\n else {\n this.blobPromise = this.pdfDocument.save();\n }\n this.pdfDocument.destroy();\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.getSummaryCaptionThemeStyle = function () {\n if (!isNullOrUndefined(this.gridTheme) && !isNullOrUndefined(this.gridTheme.caption) && this.gridTheme.caption !== null) {\n var fontSize = !isNullOrUndefined(this.gridTheme.caption.fontSize) ? this.gridTheme.caption.fontSize : 9.75;\n var pdfColor = new PdfColor();\n if (!isNullOrUndefined(this.gridTheme.caption.fontColor)) {\n var penBrushColor = this.hexToRgb(this.gridTheme.caption.fontColor);\n pdfColor = new PdfColor(penBrushColor.r, penBrushColor.g, penBrushColor.b);\n }\n /* tslint:disable-next-line:max-line-length */\n return { font: new PdfStandardFont(PdfFontFamily.Helvetica, 10.5), brush: new PdfSolidBrush(new PdfColor(pdfColor)), backgroundBrush: new PdfSolidBrush(new PdfColor(246, 246, 246)) };\n }\n else {\n //Material theme\n /* tslint:disable-next-line:max-line-length */\n return { font: new PdfStandardFont(PdfFontFamily.Helvetica, 9.75), brush: new PdfSolidBrush(new PdfColor(0, 0, 0)), backgroundBrush: new PdfSolidBrush(new PdfColor(246, 246, 246)) };\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.getHeaderThemeStyle = function () {\n var border = new PdfBorders();\n if (!isNullOrUndefined(this.gridTheme) && !isNullOrUndefined(this.gridTheme.header)) {\n if (!isNullOrUndefined(this.gridTheme.header.borders) && !isNullOrUndefined(this.gridTheme.header.borders.color)) {\n var borderColor = this.hexToRgb(this.gridTheme.header.borders.color);\n border.all = new PdfPen(new PdfColor(borderColor.r, borderColor.g, borderColor.b));\n }\n var fontSize = !isNullOrUndefined(this.gridTheme.header.fontSize) ? this.gridTheme.header.fontSize : 10.5;\n var pdfColor = new PdfColor();\n if (!isNullOrUndefined(this.gridTheme.header.fontColor)) {\n var penBrushColor = this.hexToRgb(this.gridTheme.header.fontColor);\n pdfColor = new PdfColor(penBrushColor.r, penBrushColor.g, penBrushColor.b);\n }\n /* tslint:disable-next-line:max-line-length */\n return { border: border, font: new PdfStandardFont(PdfFontFamily.Helvetica, fontSize), brush: new PdfSolidBrush(pdfColor) };\n }\n else {\n //Material theme\n border.all = new PdfPen(new PdfColor(234, 234, 234));\n /* tslint:disable-next-line:max-line-length */\n return { border: border, font: new PdfStandardFont(PdfFontFamily.Helvetica, 10.5), brush: new PdfSolidBrush(new PdfColor(102, 102, 102)) };\n }\n };\n /* tslint:disable-next-line:max-line-length */ /* tslint:disable-next-line:no-any */\n PdfExport.prototype.processGroupedRecords = function (pdfGrid, dataSource, gridColumns, gObj, border, level, font, brush, backgroundBrush, returnType) {\n var groupIndex = level;\n for (var _i = 0, dataSource_1 = dataSource; _i < dataSource_1.length; _i++) {\n var dataSourceItems = dataSource_1[_i];\n var row = pdfGrid.rows.addRow();\n var col = gObj.getColumnByField(dataSourceItems.field);\n /* tslint:disable-next-line:no-any */\n var args = {\n value: dataSourceItems.key,\n column: col,\n style: undefined,\n isForeignKey: col.isForeignColumn(),\n };\n /* tslint:disable-next-line:max-line-length */\n var value = dataSourceItems.field + ': ' + this.exportValueFormatter.formatCellValue(args) + ' - ' + dataSourceItems.count + (dataSource.count > 1 ? ' items' : ' item');\n row.cells.getCell(groupIndex).value = value;\n row.cells.getCell(groupIndex + 1).style.stringFormat = new PdfStringFormat(PdfTextAlignment.Left);\n row.style.setBorder(border);\n row.style.setFont(font);\n row.style.setTextBrush(brush);\n row.style.setBackgroundBrush(backgroundBrush);\n var sRows = void 0;\n var captionSummaryModel = new CaptionSummaryModelGenerator(gObj);\n if (!isNullOrUndefined(dataSourceItems.items.records)) {\n sRows = captionSummaryModel.generateRows(dataSourceItems.items.records, returnType.aggregates);\n }\n else {\n sRows = captionSummaryModel.generateRows(dataSourceItems.items, returnType.aggregates);\n }\n if (!isNullOrUndefined(sRows) && sRows.length === 0) {\n row.cells.getCell(groupIndex + 1).columnSpan = pdfGrid.columns.count - (groupIndex + 1);\n }\n if (!isNullOrUndefined(dataSource.childLevels) && dataSource.childLevels > 0) {\n this.processAggregates(sRows, pdfGrid, border, font, brush, backgroundBrush, true, row, groupIndex);\n /* tslint:disable-next-line:max-line-length */\n this.processGroupedRecords(pdfGrid, dataSourceItems.items, gridColumns, gObj, border, (groupIndex + 1), font, brush, backgroundBrush, returnType);\n var groupSummaryModel = new GroupSummaryModelGenerator(gObj);\n sRows = groupSummaryModel.generateRows(dataSourceItems.items.records, returnType.aggregates);\n this.processAggregates(sRows, pdfGrid, border, font, brush, backgroundBrush, false);\n }\n else {\n this.processAggregates(sRows, pdfGrid, border, font, brush, backgroundBrush, true, row, groupIndex);\n this.processRecord(border, gridColumns, gObj, dataSourceItems.items, pdfGrid, (groupIndex + 1));\n var groupSummaryModel = new GroupSummaryModelGenerator(gObj);\n sRows = groupSummaryModel.generateRows(dataSourceItems.items, returnType.aggregates);\n this.processAggregates(sRows, pdfGrid, border, font, brush, backgroundBrush, false);\n }\n }\n };\n /* tslint:disable-next-line:max-line-length */\n PdfExport.prototype.processGridHeaders = function (childLevels, pdfGrid, rows, gridColumns, border, headerFont, headerBrush) {\n var columnCount = gridColumns.length;\n if (this.isGrouping) {\n columnCount += (childLevels + 1);\n }\n // add columns\n pdfGrid.columns.add(columnCount);\n if (this.isGrouping) {\n for (var i = 0; i < (childLevels + 1); i++) {\n pdfGrid.columns.getColumn(i).width = 20;\n }\n }\n // add header\n pdfGrid.headers.add(rows.length);\n // set cell values of each rows in the header\n for (var i = 0; i < rows.length; i++) {\n var gridHeader = pdfGrid.headers.getHeader(i);\n gridHeader.style.setBorder(border);\n gridHeader.style.setFont(headerFont);\n gridHeader.style.setTextBrush(headerBrush);\n var cellIndex = this.isGrouping ? (childLevels + 1) : 0;\n if (rows[i].cells.length === 0) {\n for (var j = 0; j < gridHeader.cells.count; j++) {\n var cell = gridHeader.cells.getCell(j);\n cell.value = '';\n }\n }\n else {\n for (var j = 0; j < cellIndex; j++) {\n var cell = gridHeader.cells.getCell(j);\n cell.value = '';\n }\n for (var j = 0; j < rows[i].cells.length; j++) {\n var cell = gridHeader.cells.getCell(cellIndex);\n if (cell.value !== null) {\n cell.value = rows[i].cells[j].column.headerText;\n if (!isNullOrUndefined(rows[i].cells[j].column.headerTextAlign)) {\n cell.style.stringFormat = this.getHorizontalAlignment(rows[i].cells[j].column.headerTextAlign);\n }\n if (!isNullOrUndefined(rows[i].cells[j].rowSpan)) {\n cell.rowSpan = rows[i].cells[j].rowSpan;\n /* tslint:disable-next-line:max-line-length */\n cell.style.stringFormat = this.getVerticalAlignment('Bottom', cell.style.stringFormat, rows[i].cells[j].column.textAlign);\n for (var k = 1; k < rows[i].cells[j].rowSpan; k++) {\n pdfGrid.headers.getHeader(i + k).cells.getCell(cellIndex).value = null;\n }\n }\n if (!isNullOrUndefined(rows[i].cells[j].colSpan)) {\n cell.columnSpan = rows[i].cells[j].colSpan;\n }\n cellIndex += cell.columnSpan;\n }\n else {\n cell.value = '';\n cellIndex += cell.columnSpan;\n j = j - 1;\n }\n }\n }\n }\n if (pdfGrid.columns.count >= 6) {\n pdfGrid.style.allowHorizontalOverflow = true;\n }\n return pdfGrid;\n };\n /* tslint:disable-next-line:no-any */ /* tslint:disable-next-line:max-line-length */\n PdfExport.prototype.processExportProperties = function (pdfExportProperties, dataSource, section) {\n if (!isNullOrUndefined(pdfExportProperties)) {\n if (!isNullOrUndefined(pdfExportProperties.theme)) {\n this.gridTheme = pdfExportProperties.theme;\n }\n if (!isNullOrUndefined(pdfExportProperties.pageOrientation) || !isNullOrUndefined(pdfExportProperties.pageSize)) {\n var pdfPageSettings = new PdfPageSettings();\n /* tslint:disable-next-line:max-line-length */\n pdfPageSettings.orientation = (pdfExportProperties.pageOrientation === 'Landscape') ? PdfPageOrientation.Landscape : PdfPageOrientation.Portrait;\n pdfPageSettings.size = this.getPageSize(pdfExportProperties.pageSize);\n section.setPageSettings(pdfPageSettings);\n }\n var clientSize = this.pdfDocument.pageSettings.size;\n if (!isNullOrUndefined(pdfExportProperties.header)) {\n /* tslint:disable-next-line:no-any */\n var header = pdfExportProperties.header;\n var position = new PointF(0, header.fromTop);\n var size = new SizeF((clientSize.width - 80), (header.height * 0.75));\n var bounds = new RectangleF(position, size);\n this.pdfDocument.template.top = this.drawPageTemplate(new PdfPageTemplateElement(bounds), header);\n }\n if (!isNullOrUndefined(pdfExportProperties.footer)) {\n /* tslint:disable-next-line:no-any */\n var footer = pdfExportProperties.footer;\n var position = new PointF(0, ((clientSize.width - 80) - (footer.fromBottom * 0.75)));\n var size = new SizeF((clientSize.width - 80), (footer.height * 0.75));\n var bounds = new RectangleF(position, size);\n this.pdfDocument.template.bottom = this.drawPageTemplate(new PdfPageTemplateElement(bounds), footer);\n }\n if (!isNullOrUndefined(pdfExportProperties.includeHiddenColumn) && !this.isGrouping) {\n this.hideColumnInclude = pdfExportProperties.includeHiddenColumn;\n }\n if (!isNullOrUndefined(pdfExportProperties.dataSource)) {\n if (!(pdfExportProperties.dataSource instanceof DataManager)) {\n dataSource = pdfExportProperties.dataSource;\n }\n this.customDataSource = true;\n this.currentViewData = false;\n }\n else if (!isNullOrUndefined(pdfExportProperties.exportType)) {\n if (pdfExportProperties.exportType === 'CurrentPage') {\n dataSource = this.parent.getCurrentViewRecords();\n this.currentViewData = true;\n this.customDataSource = false;\n }\n else {\n this.currentViewData = false;\n this.customDataSource = false;\n }\n }\n else {\n this.currentViewData = false;\n this.customDataSource = false;\n }\n }\n else {\n this.currentViewData = false;\n this.customDataSource = false;\n }\n return { dataSource: dataSource, section: section };\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.drawPageTemplate = function (template, element) {\n for (var _i = 0, _a = element.contents; _i < _a.length; _i++) {\n var content = _a[_i];\n this.processContentValidation(content);\n switch (content.type) {\n case 'Text':\n /* tslint:disable-next-line:max-line-length */\n if (content.value === '' || content.value === undefined || content.value === null || typeof content.value !== 'string') {\n throw new Error('please enter the valid input value in text content...');\n }\n this.drawText(template, content);\n break;\n case 'PageNumber':\n this.drawPageNumber(template, content);\n break;\n case 'Image':\n if (content.src === undefined || content.src === null || content.src === '') {\n throw new Error('please enter the valid base64 string in image content...');\n }\n this.drawImage(template, content);\n break;\n case 'Line':\n this.drawLine(template, content);\n break;\n default:\n throw new Error('Please set valid content type...');\n }\n }\n return template;\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.processContentValidation = function (content) {\n if (content.type === undefined || content.type === null) {\n throw new Error('please set valid content type...');\n }\n else {\n if (content.type === 'Line') {\n if (content.points === undefined || content.points === null) {\n throw new Error('please enter valid points in ' + content.type + ' content...');\n }\n else {\n if (content.points.x1 === undefined || content.points.x1 === null || typeof content.points.x1 !== 'number') {\n throw new Error('please enter valid x1 co-ordinate in ' + content.type + ' points...');\n }\n if (content.points.y1 === undefined || content.points.y1 === null || typeof content.points.y1 !== 'number') {\n throw new Error('please enter valid y1 co-ordinate in ' + content.type + ' points...');\n }\n if (content.points.x2 === undefined || content.points.x2 === null || typeof content.points.x2 !== 'number') {\n throw new Error('please enter valid x2 co-ordinate in ' + content.type + ' points...');\n }\n if (content.points.y2 === undefined || content.points.y2 === null || typeof content.points.y2 !== 'number') {\n throw new Error('please enter valid y2 co-ordinate in ' + content.type + ' points...');\n }\n }\n }\n else {\n if (content.position === undefined || content.position === null) {\n throw new Error('please enter valid position in ' + content.type + ' content...');\n }\n else {\n if (content.position.x === undefined || content.position.x === null || typeof content.position.x !== 'number') {\n throw new Error('please enter valid x co-ordinate in ' + content.type + ' position...');\n }\n if (content.position.y === undefined || content.position.y === null || typeof content.position.y !== 'number') {\n throw new Error('please enter valid y co-ordinate in ' + content.type + ' position...');\n }\n }\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.drawText = function (pageTemplate, content) {\n var font = this.getFont(content);\n var brush = this.getBrushFromContent(content);\n var pen = null;\n if (!isNullOrUndefined(content.style.textPenColor)) {\n var penColor = this.hexToRgb(content.style.textPenColor);\n pen = new PdfPen(new PdfColor(penColor.r, penColor.g, penColor.b));\n }\n if (brush == null && pen == null) {\n brush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n }\n var value = content.value.toString();\n var x = content.position.x * 0.75;\n var y = content.position.y * 0.75;\n var format;\n var result = this.setContentFormat(content, format);\n if (result !== null && !isNullOrUndefined(result.format) && !isNullOrUndefined(result.size)) {\n pageTemplate.graphics.drawString(value, font, pen, brush, x, y, result.size.width, result.size.height, result.format);\n }\n else {\n pageTemplate.graphics.drawString(value, font, pen, brush, x, y, format);\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.drawPageNumber = function (documentHeader, content) {\n var font = this.getFont(content);\n var brush = null;\n if (!isNullOrUndefined(content.style.textBrushColor)) {\n /* tslint:disable-next-line:max-line-length */\n var brushColor = this.hexToRgb(content.style.textBrushColor);\n brush = new PdfSolidBrush(new PdfColor(brushColor.r, brushColor.g, brushColor.b));\n }\n else {\n brush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n }\n var pageNumber = new PdfPageNumberField(font, brush);\n pageNumber.numberStyle = this.getPageNumberStyle(content.pageNumberType);\n var compositeField;\n var format;\n if (!isNullOrUndefined(content.format)) {\n if (content.format.indexOf('$total') !== -1 && content.format.indexOf('$current') !== -1) {\n var pageCount = new PdfPageCountField(font);\n if (content.format.indexOf('$total') > content.format.indexOf('$current')) {\n format = content.format.replace('$current', '0');\n format = format.replace('$total', '1');\n }\n else {\n format = content.format.replace('$current', '1');\n format = format.replace('$total', '0');\n }\n compositeField = new PdfCompositeField(font, brush, format, pageNumber, pageCount);\n }\n else if (content.format.indexOf('$current') !== -1 && content.format.indexOf('$total') === -1) {\n format = content.format.replace('$current', '0');\n compositeField = new PdfCompositeField(font, brush, format, pageNumber);\n }\n else {\n var pageCount = new PdfPageCountField(font);\n format = content.format.replace('$total', '0');\n compositeField = new PdfCompositeField(font, brush, format, pageCount);\n }\n }\n else {\n format = '{0}';\n compositeField = new PdfCompositeField(font, brush, format, pageNumber);\n }\n var x = content.position.x * 0.75;\n var y = content.position.y * 0.75;\n var result = this.setContentFormat(content, compositeField.stringFormat);\n if (result !== null && !isNullOrUndefined(result.format) && !isNullOrUndefined(result.size)) {\n compositeField.stringFormat = result.format;\n compositeField.bounds = new RectangleF(x, y, result.size.width, result.size.height);\n }\n compositeField.draw(documentHeader.graphics, x, y);\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.drawImage = function (documentHeader, content) {\n var x = content.position.x * 0.75;\n var y = content.position.y * 0.75;\n var width = (!isNullOrUndefined(content.size)) ? (content.size.width * 0.75) : undefined;\n var height = (!isNullOrUndefined(content.size)) ? (content.size.height * 0.75) : undefined;\n var image = new PdfBitmap(content.src);\n if (!isNullOrUndefined(width)) {\n documentHeader.graphics.drawImage(image, x, y, width, height);\n }\n else {\n documentHeader.graphics.drawImage(image, x, y);\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.drawLine = function (documentHeader, content) {\n var x1 = content.points.x1 * 0.75;\n var y1 = content.points.y1 * 0.75;\n var x2 = content.points.x2 * 0.75;\n var y2 = content.points.y2 * 0.75;\n var pen = this.getPenFromContent(content);\n if (!isNullOrUndefined(content.style) && content.style !== null) {\n if (!isNullOrUndefined(content.style.penSize) && content.style.penSize !== null && typeof content.style.penSize === 'number') {\n pen.width = content.style.penSize * 0.75;\n }\n pen.dashStyle = this.getDashStyle(content.style.dashStyle);\n }\n documentHeader.graphics.drawLine(pen, x1, y1, x2, y2);\n };\n /* tslint:disable-next-line:no-any */ /* tslint:disable-next-line:max-line-length */\n PdfExport.prototype.processAggregates = function (sRows, pdfGrid, border, font, brush, backgroundBrush, isCaption, captionRow, groupIndex) {\n for (var _i = 0, sRows_1 = sRows; _i < sRows_1.length; _i++) {\n var row = sRows_1[_i];\n var startIndex = 0;\n var leastCaptionSummaryIndex = -1;\n var index = 0;\n var isEmpty = true;\n /* tslint:disable-next-line:no-any */\n var value = [];\n for (var i = 0; i < pdfGrid.columns.count; i++) {\n /* tslint:disable-next-line:no-any */\n var cell = row.cells[index];\n if (!this.hideColumnInclude) {\n while (cell.visible === undefined) {\n if (!isNullOrUndefined(captionRow)) {\n if (!isNullOrUndefined(captionRow.cells.getCell(i).value)) {\n value.push('');\n value.push(captionRow.cells.getCell(i).value);\n isEmpty = false;\n i += 1;\n }\n else {\n value.push('');\n }\n }\n else {\n value.push('');\n }\n i += 1;\n index = index + 1;\n cell = row.cells[index];\n }\n while (!isNullOrUndefined(cell.visible) && !cell.visible) {\n index = index + 1;\n cell = row.cells[index];\n }\n }\n if (cell.isDataCell) {\n var templateFn = {};\n /* tslint:disable-next-line:max-line-length */\n if (!isNullOrUndefined(cell.column.footerTemplate) || !isNullOrUndefined(cell.column.groupCaptionTemplate) || !isNullOrUndefined(cell.column.groupFooterTemplate)) {\n /* tslint:disable-next-line:no-any */\n var result = this.getTemplateFunction(templateFn, i, leastCaptionSummaryIndex, cell.column);\n templateFn = result.templateFunction;\n leastCaptionSummaryIndex = result.leastCaptionSummaryIndex;\n /* tslint:disable-next-line:max-line-length */\n var txt = (templateFn[getEnumValue(CellType, cell.cellType)](row.data[cell.column.field ? cell.column.field : cell.column.columnName]));\n value.push(txt[0].wholeText);\n isEmpty = false;\n }\n else {\n /* tslint:disable-next-line:no-any */\n var result = this.getSummaryWithoutTemplate(row.data[cell.column.field]);\n if (!isNullOrUndefined(result)) {\n value.push(result);\n }\n }\n }\n else {\n value.push('');\n }\n if (isEmpty && value[i] !== '' && !isNullOrUndefined(value[i]) && value[i] !== null) {\n isEmpty = false;\n }\n index += 1;\n }\n if (!isEmpty) {\n if (!isCaption) {\n var gridRow = pdfGrid.rows.addRow();\n gridRow.style.setBorder(border);\n gridRow.style.setFont(font);\n gridRow.style.setTextBrush(brush);\n gridRow.style.setBackgroundBrush(backgroundBrush);\n for (var i = 0; i < pdfGrid.columns.count; i++) {\n gridRow.cells.getCell(i).value = value[i].toString();\n }\n }\n else {\n for (var i = 0; i < pdfGrid.columns.count; i++) {\n captionRow.cells.getCell(i).value = value[i].toString();\n if (i === (groupIndex + 1) && leastCaptionSummaryIndex !== -1) {\n captionRow.cells.getCell(i).columnSpan = leastCaptionSummaryIndex - (groupIndex + 1);\n }\n else if (i === (groupIndex + 1) && leastCaptionSummaryIndex === -1) {\n captionRow.cells.getCell(i).columnSpan = pdfGrid.columns.count - (groupIndex + 1);\n }\n }\n }\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.getTemplateFunction = function (templateFn, index, leastCaptionSummaryIndex, column) {\n if (!isNullOrUndefined(column.footerTemplate)) {\n templateFn[getEnumValue(CellType, CellType.Summary)] = compile(column.footerTemplate);\n }\n else if (!isNullOrUndefined(column.groupCaptionTemplate)) {\n if (leastCaptionSummaryIndex === -1) {\n leastCaptionSummaryIndex = index;\n }\n templateFn[getEnumValue(CellType, CellType.CaptionSummary)] = compile(column.groupCaptionTemplate);\n }\n else {\n templateFn[getEnumValue(CellType, CellType.GroupSummary)] = compile(column.groupFooterTemplate);\n }\n return { templateFunction: templateFn, leastCaptionSummaryIndex: leastCaptionSummaryIndex };\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.getSummaryWithoutTemplate = function (data) {\n if (!isNullOrUndefined(data.Sum)) {\n return data.Sum;\n }\n else if (!isNullOrUndefined(data.Average)) {\n return data.Average;\n }\n else if (!isNullOrUndefined(data.Max)) {\n return data.Max;\n }\n else if (!isNullOrUndefined(data.Min)) {\n return data.Min;\n }\n else if (!isNullOrUndefined(data.Count)) {\n return data.Count;\n }\n else if (!isNullOrUndefined(data.TrueCount)) {\n return data.TrueCount;\n }\n else if (!isNullOrUndefined(data.FalseCount)) {\n return data.FalseCount;\n }\n else if (!isNullOrUndefined(data.Custom)) {\n return data.Custom;\n }\n };\n // Set alignment, width and type of the values of the column\n /* tslint:disable:no-any */\n /* tslint:disable-next-line:max-line-length */\n PdfExport.prototype.setColumnProperties = function (gridColumns, pdfGrid) {\n var startIndex = this.isGrouping ? (pdfGrid.columns.count - gridColumns.length) : 0;\n for (var i = 0; i < gridColumns.length; i++) {\n if (!isNullOrUndefined(gridColumns[i].textAlign)) {\n pdfGrid.columns.getColumn(i + startIndex).format = this.getHorizontalAlignment(gridColumns[i].textAlign);\n }\n // Need to add width consideration with % value\n if (pdfGrid.style.allowHorizontalOverflow && !isNullOrUndefined(gridColumns[i].width)) {\n /* tslint:disable-next-line:max-line-length */\n pdfGrid.columns.getColumn(i + startIndex).width = typeof gridColumns[i].width === 'number' ? gridColumns[i].width * 0.75 : this.helper.getConvertedWidth(gridColumns[i].width) * 0.75;\n }\n }\n };\n /**\n * set default style properties of each rows in exporting grid\n * @private\n */\n PdfExport.prototype.setRecordThemeStyle = function (row, border) {\n if (!isNullOrUndefined(this.gridTheme) && !isNullOrUndefined(this.gridTheme.record) && this.gridTheme.record !== null) {\n var pdfColor = new PdfColor();\n if (!isNullOrUndefined(this.gridTheme.record.fontColor)) {\n var penBrushColor = this.hexToRgb(this.gridTheme.record.fontColor);\n pdfColor = new PdfColor(penBrushColor.r, penBrushColor.g, penBrushColor.b);\n }\n row.style.setTextBrush(new PdfSolidBrush(pdfColor));\n }\n else {\n row.style.setTextBrush(new PdfSolidBrush(new PdfColor(0, 0, 0)));\n }\n row.style.setBorder(border);\n return row;\n };\n /**\n * generate the formatted cell values\n * @private\n */\n /* tslint:disable-next-line:max-line-length */ /* tslint:disable-next-line:no-any */\n PdfExport.prototype.processRecord = function (border, columns, gObj, dataSource, pdfGrid, groupIndex) {\n var startIndex = this.isGrouping ? groupIndex : 0;\n for (var _i = 0, _a = dataSource; _i < _a.length; _i++) {\n var items = _a[_i];\n // create a new row and set default style properties\n var gridRow = this.setRecordThemeStyle(pdfGrid.rows.addRow(), border);\n for (var j = 0; j < columns.length; j++) {\n /* tslint:disable:no-any */\n var value = (!isNullOrUndefined(columns[j].field) && getValue(columns[j].field, items)) || '';\n var column = columns[j];\n var foreignKeyData = void 0;\n if (column.isForeignColumn && column.isForeignColumn()) {\n foreignKeyData = this.helper.getFData(value, column);\n value = getValue(column.foreignKeyValue, foreignKeyData);\n }\n var data = items;\n var args = {\n data: data,\n value: value,\n column: column,\n style: undefined,\n colSpan: 1\n };\n /* tslint:enable:no-any */\n gObj.trigger(events.pdfQueryCellInfo, args);\n var cell = gridRow.cells.getCell(j + startIndex);\n cell.value = this.exportValueFormatter.formatCellValue(args);\n if (!isNullOrUndefined(args.style)) {\n this.processCellStyle(cell, args);\n }\n if (args.colSpan > 1) {\n if ((j + startIndex + 1 + args.colSpan) > gridRow.cells.count) {\n args.colSpan = gridRow.cells.count - (j + startIndex + 1);\n }\n cell.columnSpan = args.colSpan;\n for (var i = 1; i < cell.columnSpan; i++) {\n var spanCell = gridRow.cells.getCell(j + startIndex + i);\n spanCell.value = '';\n }\n j += (args.colSpan - 1);\n }\n }\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.processCellStyle = function (cell, args) {\n if (!isNullOrUndefined(args.style.backgroundColor)) {\n /* tslint:disable-next-line:max-line-length */\n var backColor = this.hexToRgb(args.style.backgroundColor);\n cell.style.backgroundBrush = new PdfSolidBrush(new PdfColor(backColor.r, backColor.g, backColor.b));\n }\n if (!isNullOrUndefined(args.style.textAlignment)) {\n cell.style.stringFormat = this.getHorizontalAlignment(args.style.textAlignment);\n }\n if (!isNullOrUndefined(args.style.verticalAlignment)) {\n cell.style.stringFormat = this.getVerticalAlignment(args.style.verticalAlignment, cell.style.stringFormat);\n }\n if (!isNullOrUndefined(args.style.textBrushColor)) {\n var textBrushColor = this.hexToRgb(args.style.textBrushColor);\n cell.style.textBrush = new PdfSolidBrush(new PdfColor(textBrushColor.r, textBrushColor.g, textBrushColor.b));\n }\n if (!isNullOrUndefined(args.style.textPenColor)) {\n var textPenColor = this.hexToRgb(args.style.textPenColor);\n cell.style.textPen = new PdfPen(new PdfColor(textPenColor.r, textPenColor.g, textPenColor.b));\n }\n /* tslint:disable-next-line:max-line-length */\n if (!isNullOrUndefined(args.style.fontFamily) || !isNullOrUndefined(args.style.fontSize) || !isNullOrUndefined(args.style.bold) || !isNullOrUndefined(args.style.italic) || !isNullOrUndefined(args.style.underline) || !isNullOrUndefined(args.style.strikeout)) {\n cell.style.font = this.getFont(args);\n }\n if (!isNullOrUndefined(args.style.border)) {\n var border = new PdfBorders();\n var borderWidth = args.style.border.width;\n // set border width\n var width = (!isNullOrUndefined(borderWidth) && typeof borderWidth === 'number') ? (borderWidth * 0.75) : (undefined);\n // set border color\n var color = new PdfColor(196, 196, 196);\n if (!isNullOrUndefined(args.style.border.color)) {\n var borderColor = this.hexToRgb(args.style.border.color);\n color = new PdfColor(borderColor.r, borderColor.g, borderColor.b);\n }\n var pen = new PdfPen(color, width);\n // set border dashStyle 'Solid , Dash, Dot, DashDot, DashDotDot'\n if (!isNullOrUndefined(args.style.border.dashStyle)) {\n pen.dashStyle = this.getDashStyle(args.style.border.dashStyle);\n }\n border.all = pen;\n cell.style.borders = border;\n }\n };\n /**\n * set text alignment of each columns in exporting grid\n * @private\n */\n PdfExport.prototype.getHorizontalAlignment = function (textAlign, format) {\n if (format === undefined) {\n format = new PdfStringFormat();\n }\n switch (textAlign) {\n case 'Right':\n format.alignment = PdfTextAlignment.Right;\n break;\n case 'Center':\n format.alignment = PdfTextAlignment.Center;\n break;\n case 'Justify':\n format.alignment = PdfTextAlignment.Justify;\n break;\n case 'Left':\n format.alignment = PdfTextAlignment.Left;\n break;\n }\n return format;\n };\n /**\n * set vertical alignment of each columns in exporting grid\n * @private\n */\n PdfExport.prototype.getVerticalAlignment = function (verticalAlign, format, textAlign) {\n if (format === undefined) {\n format = new PdfStringFormat();\n format = this.getHorizontalAlignment(textAlign, format);\n }\n switch (verticalAlign) {\n case 'Bottom':\n format.lineAlignment = PdfVerticalAlignment.Bottom;\n break;\n case 'Middle':\n format.lineAlignment = PdfVerticalAlignment.Middle;\n break;\n case 'Top':\n format.lineAlignment = PdfVerticalAlignment.Top;\n break;\n }\n return format;\n };\n PdfExport.prototype.getFontFamily = function (fontFamily) {\n switch (fontFamily) {\n case 'TimesRoman':\n return 2;\n case 'Courier':\n return 1;\n case 'Symbol':\n return 3;\n case 'ZapfDingbats':\n return 4;\n default:\n return 0;\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.getFont = function (content) {\n var fontSize = (!isNullOrUndefined(content.style.fontSize)) ? (content.style.fontSize * 0.75) : 9.75;\n /* tslint:disable-next-line:max-line-length */\n var fontFamily = (!isNullOrUndefined(content.style.fontFamily)) ? (this.getFontFamily(content.style.fontFamily)) : PdfFontFamily.Helvetica;\n var fontStyle = PdfFontStyle.Regular;\n if (!isNullOrUndefined(content.style.bold) && content.style.bold) {\n fontStyle |= PdfFontStyle.Bold;\n }\n if (!isNullOrUndefined(content.style.italic) && content.style.italic) {\n fontStyle |= PdfFontStyle.Italic;\n }\n if (!isNullOrUndefined(content.style.underline) && content.style.underline) {\n fontStyle |= PdfFontStyle.Underline;\n }\n if (!isNullOrUndefined(content.style.strikeout) && content.style.strikeout) {\n fontStyle |= PdfFontStyle.Strikeout;\n }\n return new PdfStandardFont(fontFamily, fontSize, fontStyle);\n };\n PdfExport.prototype.getPageNumberStyle = function (pageNumberType) {\n switch (pageNumberType) {\n case 'LowerLatin':\n return 2;\n case 'LowerRoman':\n return 3;\n case 'UpperLatin':\n return 4;\n case 'UpperRoman':\n return 5;\n default:\n return 1;\n }\n };\n /* tslint:disable-next-line:max-line-length */ /* tslint:disable-next-line:no-any */\n PdfExport.prototype.setContentFormat = function (content, format) {\n if (!isNullOrUndefined(content.size)) {\n var width = content.size.width * 0.75;\n var height = content.size.height * 0.75;\n format = new PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Middle);\n if (!isNullOrUndefined(content.style.hAlign)) {\n switch (content.style.hAlign) {\n case 'Right':\n format.alignment = PdfTextAlignment.Right;\n break;\n case 'Center':\n format.alignment = PdfTextAlignment.Center;\n break;\n case 'Justify':\n format.alignment = PdfTextAlignment.Justify;\n break;\n default:\n format.alignment = PdfTextAlignment.Left;\n }\n }\n if (!isNullOrUndefined(content.style.vAlign)) {\n format = this.getVerticalAlignment(content.style.vAlign, format);\n }\n return { format: format, size: new SizeF(width, height) };\n }\n return null;\n };\n PdfExport.prototype.getPageSize = function (pageSize) {\n switch (pageSize) {\n case 'Letter':\n return new SizeF(612, 792);\n case 'Note':\n return new SizeF(540, 720);\n case 'Legal':\n return new SizeF(612, 1008);\n case 'A0':\n return new SizeF(2380, 3368);\n case 'A1':\n return new SizeF(1684, 2380);\n case 'A2':\n return new SizeF(1190, 1684);\n case 'A3':\n return new SizeF(842, 1190);\n case 'A5':\n return new SizeF(421, 595);\n case 'A6':\n return new SizeF(297, 421);\n case 'A7':\n return new SizeF(210, 297);\n case 'A8':\n return new SizeF(148, 210);\n case 'A9':\n return new SizeF(105, 148);\n // case 'A10':\n // return new SizeF(74, 105);\n case 'B0':\n return new SizeF(2836, 4008);\n case 'B1':\n return new SizeF(2004, 2836);\n case 'B2':\n return new SizeF(1418, 2004);\n case 'B3':\n return new SizeF(1002, 1418);\n case 'B4':\n return new SizeF(709, 1002);\n case 'B5':\n return new SizeF(501, 709);\n case 'Archa':\n return new SizeF(648, 864);\n case 'Archb':\n return new SizeF(864, 1296);\n case 'Archc':\n return new SizeF(1296, 1728);\n case 'Archd':\n return new SizeF(1728, 2592);\n case 'Arche':\n return new SizeF(2592, 3456);\n case 'Flsa':\n return new SizeF(612, 936);\n case 'HalfLetter':\n return new SizeF(396, 612);\n case 'Letter11x17':\n return new SizeF(792, 1224);\n case 'Ledger':\n return new SizeF(1224, 792);\n default:\n return new SizeF(595, 842);\n }\n };\n PdfExport.prototype.getDashStyle = function (dashStyle) {\n switch (dashStyle) {\n case 'Dash':\n return 1;\n case 'Dot':\n return 2;\n case 'DashDot':\n return 3;\n case 'DashDotDot':\n return 4;\n default:\n return 0;\n }\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.getPenFromContent = function (content) {\n var pen = new PdfPen(new PdfColor(0, 0, 0));\n if (!isNullOrUndefined(content.style) && content.style !== null && !isNullOrUndefined(content.style.penColor)) {\n var penColor = this.hexToRgb(content.style.penColor);\n pen = new PdfPen(new PdfColor(penColor.r, penColor.g, penColor.b));\n }\n return pen;\n };\n /* tslint:disable-next-line:no-any */\n PdfExport.prototype.getBrushFromContent = function (content) {\n var brush = null;\n if (!isNullOrUndefined(content.style.textBrushColor)) {\n /* tslint:disable-next-line:max-line-length */\n var brushColor = this.hexToRgb(content.style.textBrushColor);\n brush = new PdfSolidBrush(new PdfColor(brushColor.r, brushColor.g, brushColor.b));\n }\n return brush;\n };\n PdfExport.prototype.hexToRgb = function (hex) {\n if (hex === null || hex === '' || hex.length !== 7) {\n throw new Error('please set valid hex value for color...');\n }\n hex = hex.substring(1);\n var bigint = parseInt(hex, 16);\n var r = (bigint >> 16) & 255;\n var g = (bigint >> 8) & 255;\n var b = bigint & 255;\n return { r: r, g: g, b: b };\n };\n /**\n * To destroy the pdf export\n * @return {void}\n * @hidden\n */\n PdfExport.prototype.destroy = function () {\n //destroy for exporting\n };\n return PdfExport;\n}());\nexport { PdfExport };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement, addClass, removeClass, attributes } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { CellRenderer } from './cell-renderer';\nimport { appendChildren } from '../base/util';\n/**\n * `CommandColumn` used to render command column in grid\n * @hidden\n */\nvar CommandColumnRenderer = /** @class */ (function (_super) {\n __extends(CommandColumnRenderer, _super);\n function CommandColumnRenderer(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.buttonElement = createElement('button', {});\n _this.unbounDiv = createElement('div', { className: 'e-unboundcelldiv', styles: 'display: inline-block' });\n _this.element = createElement('TD', {\n className: 'e-rowcell e-unboundcell', attrs: {\n role: 'gridcell', tabindex: '-1'\n }\n });\n return _this;\n }\n /**\n * Function to render the cell content based on Column object.\n * @param {Column} column\n * @param {Object} data\n * @param {{[x:string]:Object}} attributes?\n * @param {Element}\n */\n CommandColumnRenderer.prototype.render = function (cell, data, attributes) {\n var node = this.element.cloneNode();\n node.appendChild(this.unbounDiv.cloneNode());\n node.setAttribute('aria-label', 'is Command column column header ' + cell.column.headerText);\n if (cell.column.commandsTemplate) {\n appendChildren(node.firstElementChild, cell.column.getColumnTemplate()(data));\n }\n else {\n for (var _i = 0, _a = cell.commands; _i < _a.length; _i++) {\n var command = _a[_i];\n node = this.renderButton(node, command, attributes.index);\n }\n }\n this.setAttributes(node, cell, attributes);\n if (this.parent.isEdit) {\n addClass(node.querySelectorAll('.e-edit-delete'), 'e-hide');\n removeClass(node.querySelectorAll('.e-save-cancel'), 'e-hide');\n }\n else {\n addClass(node.querySelectorAll('.e-save-cancel'), 'e-hide');\n removeClass(node.querySelectorAll('.e-edit-delete'), 'e-hide');\n }\n return node;\n };\n CommandColumnRenderer.prototype.renderButton = function (node, buttonOption, index) {\n var button = this.buttonElement.cloneNode();\n attributes(button, {\n 'id': this.parent.element.id + (buttonOption.type || '') + '_' + index, 'type': 'button',\n title: buttonOption.buttonOption.content || this.localizer.getConstant(buttonOption.type) || buttonOption.type\n });\n button.onclick = buttonOption.buttonOption.click;\n var buttonObj = new Button(buttonOption.buttonOption, button);\n buttonObj.commandType = buttonOption.type;\n node.firstElementChild.appendChild(buttonObj.element);\n switch (buttonOption.type) {\n case 'Edit':\n case 'Delete':\n addClass([button], ['e-edit-delete', 'e-' + buttonOption.type.toLowerCase() + 'button']);\n break;\n case 'Cancel':\n case 'Save':\n addClass([button], ['e-save-cancel', 'e-' + buttonOption.type.toLowerCase() + 'button']);\n break;\n }\n return node;\n };\n return CommandColumnRenderer;\n}(CellRenderer));\nexport { CommandColumnRenderer };\n","import { closest } from '@syncfusion/ej2-base';\nimport { initialEnd, click, keyPressed } from '../base/constant';\nimport { CellType } from '../base/enum';\nimport { CommandColumnRenderer } from '../renderer/command-column-renderer';\n/**\n * `CommandColumn` used to handle the command column actions.\n * @hidden\n */\nvar CommandColumn = /** @class */ (function () {\n function CommandColumn(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.addEventListener();\n }\n CommandColumn.prototype.initiateRender = function () {\n var cellFac = this.locator.getService('cellRendererFactory');\n cellFac.addCellRenderer(CellType.CommandColumn, new CommandColumnRenderer(this.parent, this.locator));\n };\n CommandColumn.prototype.commandClickHandler = function (e) {\n var gObj = this.parent;\n var gID = gObj.element.id;\n var target = closest(e.target, 'button');\n if (!target || !gObj.editModule || !closest(e.target, '.e-unboundcell')) {\n return;\n }\n var buttonObj = target.ej2_instances[0];\n var type = buttonObj.commandType;\n if (buttonObj.disabled) {\n return;\n }\n switch (type) {\n case 'Edit':\n gObj.editModule.endEdit();\n gObj.editModule.startEdit(closest(target, 'tr'));\n break;\n case 'Cancel':\n gObj.editModule.closeEdit();\n break;\n case 'Save':\n gObj.editModule.endEdit();\n break;\n case 'Delete':\n gObj.editModule.endEdit();\n gObj.clearSelection();\n //for toogle issue when dbl click\n gObj.selectRow(parseInt(closest(target, 'tr').getAttribute('aria-rowindex'), 10), false);\n gObj.editModule.deleteRecord();\n break;\n }\n };\n /**\n * For internal use only - Get the module name.\n */\n CommandColumn.prototype.getModuleName = function () {\n return 'commandColumn';\n };\n /**\n * To destroy CommandColumn.\n * @method destroy\n * @return {void}\n */\n CommandColumn.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeEventListener();\n };\n CommandColumn.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(click, this.commandClickHandler);\n this.parent.off(initialEnd, this.initiateRender);\n this.parent.off(keyPressed, this.keyPressHandler);\n };\n CommandColumn.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(click, this.commandClickHandler, this);\n this.parent.on(initialEnd, this.initiateRender, this);\n this.parent.on(keyPressed, this.keyPressHandler, this);\n };\n CommandColumn.prototype.keyPressHandler = function (e) {\n if (e.action === 'enter' && closest(e.target, '.e-unboundcelldiv')) {\n this.commandClickHandler(e);\n e.preventDefault();\n }\n };\n return CommandColumn;\n}());\nexport { CommandColumn };\n","import { closest, isNullOrUndefined, EventHandler } from '@syncfusion/ej2-base';\nimport { createElement, remove } from '@syncfusion/ej2-base';\nimport { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport * as events from '../base/constant';\nimport { Resize } from '../actions/resize';\nimport { Page } from '../actions/page';\nimport { parentsUntil } from '../base/util';\nimport { Group } from '../actions/group';\nimport { Sort } from '../actions/sort';\nimport { PdfExport } from '../actions/pdf-export';\nimport { ExcelExport } from '../actions/excel-export';\nexport var menuClass = {\n header: '.e-gridheader',\n content: '.e-gridcontent',\n edit: '.e-inline-edit',\n batchEdit: '.e-editedbatchcell',\n editIcon: 'e-edit',\n pager: '.e-gridpager',\n delete: 'e-delete',\n save: 'e-save',\n cancel: 'e-cancel',\n copy: 'e-copy',\n pdf: 'e-pdfexport',\n group: 'e-icon-group',\n ungroup: 'e-icon-ungroup',\n csv: 'e-csvexport',\n excel: 'e-excelexport',\n fPage: 'e-icon-first',\n nPage: 'e-icon-next',\n lPage: 'e-icon-last',\n pPage: 'e-icon-prev',\n ascending: 'e-icon-ascending',\n descending: 'e-icon-descending',\n groupHeader: 'e-groupdroparea',\n touchPop: 'e-gridpopup'\n};\n/**\n * The `ContextMenu` module is used to handle context menu actions.\n */\nvar ContextMenu = /** @class */ (function () {\n function ContextMenu(parent, serviceLocator) {\n this.defaultItems = {};\n this.disableItems = [];\n this.hiddenItems = [];\n this.localeText = this.setLocaleKey();\n this.parent = parent;\n this.gridID = parent.element.id;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n /**\n * @hidden\n */\n ContextMenu.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.uiUpdate, this.enableAfterRenderMenu, this);\n this.parent.on(events.initialLoad, this.render, this);\n };\n /**\n * @hidden\n */\n ContextMenu.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialLoad, this.render);\n this.parent.off(events.uiUpdate, this.enableAfterRenderMenu);\n EventHandler.remove(this.element, 'keydown', this.keyDownHandler.bind(this));\n };\n ContextMenu.prototype.keyDownHandler = function (e) {\n if (e.code === 'Tab' || e.which === 9) {\n this.contextMenu.close();\n }\n };\n ContextMenu.prototype.render = function () {\n this.parent.element.classList.add('e-noselect');\n this.l10n = this.serviceLocator.getService('localization');\n this.element = createElement('ul', { id: this.gridID + '_cmenu' });\n EventHandler.add(this.element, 'keydown', this.keyDownHandler.bind(this));\n this.parent.element.appendChild(this.element);\n var target = '#' + this.gridID;\n this.contextMenu = new Menu({\n items: this.getMenuItems(),\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n locale: this.parent.locale,\n target: target,\n select: this.contextMenuItemClick.bind(this),\n beforeOpen: this.contextMenuBeforeOpen.bind(this),\n onOpen: this.contextMenuOpen.bind(this),\n onClose: this.contextMenuOnClose.bind(this),\n cssClass: 'e-grid-menu'\n });\n this.contextMenu.appendTo(this.element);\n };\n ContextMenu.prototype.enableAfterRenderMenu = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n if (this.contextMenu) {\n this.contextMenu.destroy();\n remove(this.element);\n this.parent.element.classList.remove('e-noselect');\n }\n this.render();\n }\n };\n ContextMenu.prototype.getMenuItems = function () {\n var menuItems = [];\n var exportItems = [];\n for (var _i = 0, _a = this.parent.contextMenuItems; _i < _a.length; _i++) {\n var item = _a[_i];\n if (typeof item === 'string' && this.getDefaultItems().indexOf(item) !== -1) {\n if (item.toLocaleLowerCase().indexOf('export') !== -1) {\n exportItems.push(this.buildDefaultItems(item));\n }\n else {\n menuItems.push(this.buildDefaultItems(item));\n }\n }\n else if (typeof item !== 'string') {\n menuItems.push(item);\n }\n }\n if (exportItems.length > 0) {\n var exportGroup = this.buildDefaultItems('export');\n exportGroup.items = exportItems;\n menuItems.push(exportGroup);\n }\n return menuItems;\n };\n ContextMenu.prototype.getLastPage = function () {\n var totalpage = Math.floor(this.parent.pageSettings.totalRecordsCount / this.parent.pageSettings.pageSize);\n if (this.parent.pageSettings.totalRecordsCount % this.parent.pageSettings.pageSize) {\n totalpage += 1;\n }\n return totalpage;\n };\n ContextMenu.prototype.contextMenuOpen = function () {\n this.isOpen = true;\n };\n ContextMenu.prototype.contextMenuItemClick = function (args) {\n var item = this.getKeyFromId(args.item.id);\n switch (item) {\n case 'AutoFitAll':\n this.parent.autoFitColumns([]);\n break;\n case 'AutoFit':\n this.parent.autoFitColumns(this.targetColumn.field);\n break;\n case 'Group':\n this.parent.groupColumn(this.targetColumn.field);\n break;\n case 'Ungroup':\n this.parent.ungroupColumn(this.targetColumn.field);\n break;\n case 'Edit':\n if (this.parent.editSettings.mode === 'Batch') {\n if (this.row && this.cell && !isNaN(parseInt(this.cell.getAttribute('aria-colindex'), 10))) {\n this.parent.editModule.editCell(parseInt(this.row.getAttribute('aria-rowindex'), 10), this.parent.getColumns()[parseInt(this.cell.getAttribute('aria-colindex'), 10)].field);\n }\n }\n else {\n this.parent.editModule.endEdit();\n this.parent.editModule.startEdit(this.row);\n }\n break;\n case 'Delete':\n if (this.parent.editSettings.mode !== 'Batch') {\n this.parent.editModule.endEdit();\n }\n this.parent.editModule.deleteRow(this.row);\n break;\n case 'Save':\n this.parent.editModule.endEdit();\n break;\n case 'Cancel':\n this.parent.editModule.closeEdit();\n break;\n case 'Copy':\n this.parent.copy();\n break;\n case 'PdfExport':\n this.parent.pdfExport();\n break;\n case 'ExcelExport':\n this.parent.excelExport();\n break;\n case 'CsvExport':\n this.parent.csvExport();\n break;\n case 'SortAscending':\n this.isOpen = false;\n this.parent.sortColumn(this.targetColumn.field, 'Ascending');\n break;\n case 'SortDescending':\n this.isOpen = false;\n this.parent.sortColumn(this.targetColumn.field, 'Descending');\n break;\n case 'FirstPage':\n this.parent.goToPage(1);\n break;\n case 'PrevPage':\n this.parent.goToPage(this.parent.pageSettings.currentPage - 1);\n break;\n case 'LastPage':\n this.parent.goToPage(this.getLastPage());\n break;\n case 'NextPage':\n this.parent.goToPage(this.parent.pageSettings.currentPage + 1);\n break;\n }\n args.column = this.targetColumn;\n this.parent.trigger(events.contextMenuClick, args);\n };\n ContextMenu.prototype.contextMenuOnClose = function (args) {\n var parent = 'parentObj';\n if (args.items.length > 0 && args.items[0][parent] instanceof Menu) {\n this.updateItemStatus();\n }\n };\n ContextMenu.prototype.getLocaleText = function (item) {\n return this.l10n.getConstant(this.localeText[item]);\n };\n ContextMenu.prototype.updateItemStatus = function () {\n this.contextMenu.showItems(this.hiddenItems);\n this.contextMenu.enableItems(this.disableItems);\n this.hiddenItems = [];\n this.disableItems = [];\n this.isOpen = false;\n };\n ContextMenu.prototype.contextMenuBeforeOpen = function (args) {\n var changedRecords = 'changedRecords';\n var addedRecords = 'addedRecords';\n var deletedRecords = 'deletedRecords';\n var closestGrid = closest(args.event.target, '.e-grid');\n if (args.event && closestGrid && closestGrid !== this.parent.element) {\n args.cancel = true;\n }\n else if (args.event && (closest(args.event.target, '.' + menuClass.groupHeader)\n || closest(args.event.target, '.' + menuClass.touchPop) ||\n closest(args.event.target, '.e-summarycell') ||\n closest(args.event.target, '.e-groupcaption') ||\n closest(args.event.target, '.e-filterbarcell'))) {\n args.cancel = true;\n }\n else {\n this.targetColumn = this.getColumn(args.event);\n this.selectRow(args.event, this.parent.selectionSettings.type !== 'Multiple');\n for (var _i = 0, _a = args.items; _i < _a.length; _i++) {\n var item = _a[_i];\n var key = this.getKeyFromId(item.id);\n var dItem = this.defaultItems[key];\n if (this.getDefaultItems().indexOf(key) !== -1) {\n if (this.ensureDisabledStatus(key)) {\n this.disableItems.push(item.text);\n }\n if (args.event && (this.ensureTarget(args.event.target, menuClass.edit) ||\n this.ensureTarget(args.event.target, menuClass.batchEdit))) {\n if (key !== 'Save' && key !== 'Cancel') {\n this.hiddenItems.push(item.text);\n }\n }\n else if (this.parent.editSettings.mode === 'Batch' && ((closest(args.event.target, '.e-gridform')) ||\n this.parent.editModule.getBatchChanges()[changedRecords].length ||\n this.parent.editModule.getBatchChanges()[addedRecords].length ||\n this.parent.editModule.getBatchChanges()[deletedRecords].length) && (key === 'Save' || key === 'Cancel')) {\n continue;\n }\n else if (isNullOrUndefined(args.parentItem) && args.event\n && !this.ensureTarget(args.event.target, dItem.target)) {\n this.hiddenItems.push(item.text);\n }\n }\n else if (item.target && args.event &&\n !this.ensureTarget(args.event.target, item.target)) {\n this.hiddenItems.push(item.text);\n }\n }\n this.contextMenu.enableItems(this.disableItems, false);\n this.contextMenu.hideItems(this.hiddenItems);\n this.eventArgs = args.event;\n args.column = this.targetColumn;\n this.parent.trigger(events.contextMenuOpen, args);\n if (this.hiddenItems.length === args.items.length) {\n this.updateItemStatus();\n args.cancel = true;\n }\n }\n };\n ContextMenu.prototype.ensureTarget = function (targetElement, selector) {\n var target = targetElement;\n if (this.ensureFrozenHeader(targetElement) && (selector === menuClass.header || selector === menuClass.content)) {\n target = closest(targetElement, selector === menuClass.header ? 'thead' : 'tbody');\n }\n else if (selector === menuClass.content || selector === menuClass.header) {\n target = parentsUntil(closest(targetElement, '.e-table'), selector.substr(1, selector.length));\n }\n else {\n target = closest(targetElement, selector);\n }\n return target && parentsUntil(target, 'e-grid') === this.parent.element;\n };\n ContextMenu.prototype.ensureFrozenHeader = function (targetElement) {\n return (this.parent.getFrozenColumns() || this.parent.frozenRows)\n && closest(targetElement, menuClass.header) ? true : false;\n };\n ContextMenu.prototype.ensureDisabledStatus = function (item) {\n var _this = this;\n var status = false;\n switch (item) {\n case 'AutoFitAll':\n case 'AutoFit':\n status = !(this.parent.ensureModuleInjected(Resize) && !this.parent.isEdit);\n break;\n case 'Group':\n if (!this.parent.allowGrouping || (this.parent.ensureModuleInjected(Group) && this.targetColumn\n && this.parent.groupSettings.columns.indexOf(this.targetColumn.field) >= 0)) {\n status = true;\n }\n break;\n case 'Ungroup':\n if (!this.parent.allowGrouping || !this.parent.ensureModuleInjected(Group)\n || (this.parent.ensureModuleInjected(Group) && this.targetColumn\n && this.parent.groupSettings.columns.indexOf(this.targetColumn.field) < 0)) {\n status = true;\n }\n break;\n case 'Edit':\n case 'Delete':\n case 'Save':\n case 'Cancel':\n if (!this.parent.editModule || (this.parent.getDataRows().length === 0)) {\n status = true;\n }\n break;\n case 'Copy':\n if (this.parent.getSelectedRowIndexes().length === 0 ||\n this.parent.getCurrentViewRecords().length === 0) {\n status = true;\n }\n break;\n case 'export':\n if ((!this.parent.allowExcelExport || !this.parent.excelExport) ||\n !this.parent.ensureModuleInjected(PdfExport) && !this.parent.ensureModuleInjected(ExcelExport)) {\n status = true;\n }\n break;\n case 'PdfExport':\n if (!(this.parent.allowPdfExport) || !this.parent.ensureModuleInjected(PdfExport)) {\n status = true;\n }\n break;\n case 'ExcelExport':\n case 'CsvExport':\n if (!(this.parent.allowExcelExport) || !this.parent.ensureModuleInjected(ExcelExport)) {\n status = true;\n }\n break;\n case 'SortAscending':\n case 'SortDescending':\n if ((!this.parent.allowSorting) || !this.parent.ensureModuleInjected(Sort)) {\n status = true;\n }\n else if (this.parent.ensureModuleInjected(Sort) && this.parent.sortSettings.columns.length > 0 && this.targetColumn) {\n this.parent.sortSettings.columns.forEach(function (element) {\n if (element.field === _this.targetColumn.field\n && element.direction.toLowerCase() === item.toLowerCase().replace('sort', '').toLocaleLowerCase()) {\n status = true;\n }\n });\n }\n break;\n case 'FirstPage':\n case 'PrevPage':\n if (!this.parent.allowPaging || !this.parent.ensureModuleInjected(Page) ||\n this.parent.getCurrentViewRecords().length === 0 ||\n (this.parent.ensureModuleInjected(Page) && this.parent.pageSettings.currentPage === 1)) {\n status = true;\n }\n break;\n case 'LastPage':\n case 'NextPage':\n if (!this.parent.allowPaging || !this.parent.ensureModuleInjected(Page) ||\n this.parent.getCurrentViewRecords().length === 0 ||\n (this.parent.ensureModuleInjected(Page) && this.parent.pageSettings.currentPage === this.getLastPage())) {\n status = true;\n }\n break;\n }\n return status;\n };\n /**\n * Gets the context menu element from the Grid.\n * @return {Element}\n */\n ContextMenu.prototype.getContextMenu = function () {\n return this.element;\n };\n /**\n * Destroys the context menu component in the Grid.\n * @method destroy\n * @return {void}\n * @hidden\n */\n ContextMenu.prototype.destroy = function () {\n this.contextMenu.destroy();\n remove(this.element);\n this.removeEventListener();\n this.parent.element.classList.remove('e-noselect');\n };\n ContextMenu.prototype.getModuleName = function () {\n return 'contextMenu';\n };\n ContextMenu.prototype.generateID = function (item) {\n return this.gridID + '_cmenu_' + item;\n };\n ContextMenu.prototype.getKeyFromId = function (id) {\n return id.replace(this.gridID + '_cmenu_', '');\n };\n ContextMenu.prototype.buildDefaultItems = function (item) {\n var menuItem;\n switch (item) {\n case 'AutoFitAll':\n case 'AutoFit':\n menuItem = { target: menuClass.header };\n break;\n case 'Group':\n menuItem = { target: menuClass.header, iconCss: menuClass.group };\n break;\n case 'Ungroup':\n menuItem = { target: menuClass.header, iconCss: menuClass.ungroup };\n break;\n case 'Edit':\n menuItem = { target: menuClass.content, iconCss: menuClass.editIcon };\n break;\n case 'Delete':\n menuItem = { target: menuClass.content, iconCss: menuClass.delete };\n break;\n case 'Save':\n menuItem = { target: menuClass.edit, iconCss: menuClass.save };\n break;\n case 'Cancel':\n menuItem = { target: menuClass.edit, iconCss: menuClass.cancel };\n break;\n case 'Copy':\n menuItem = { target: menuClass.content, iconCss: menuClass.copy };\n break;\n case 'export':\n menuItem = { target: menuClass.content };\n break;\n case 'PdfExport':\n menuItem = { target: menuClass.content, iconCss: menuClass.pdf };\n break;\n case 'ExcelExport':\n menuItem = { target: menuClass.content, iconCss: menuClass.excel };\n break;\n case 'CsvExport':\n menuItem = { target: menuClass.content, iconCss: menuClass.csv };\n break;\n case 'SortAscending':\n menuItem = { target: menuClass.header, iconCss: menuClass.ascending };\n break;\n case 'SortDescending':\n menuItem = { target: menuClass.header, iconCss: menuClass.descending };\n break;\n case 'FirstPage':\n menuItem = { target: menuClass.pager, iconCss: menuClass.fPage };\n break;\n case 'PrevPage':\n menuItem = { target: menuClass.pager, iconCss: menuClass.pPage };\n break;\n case 'LastPage':\n menuItem = { target: menuClass.pager, iconCss: menuClass.lPage };\n break;\n case 'NextPage':\n menuItem = { target: menuClass.pager, iconCss: menuClass.nPage };\n break;\n }\n this.defaultItems[item] = {\n text: this.getLocaleText(item), id: this.generateID(item),\n target: menuItem.target, iconCss: menuItem.iconCss ? 'e-icons ' + menuItem.iconCss : ''\n };\n return this.defaultItems[item];\n };\n ContextMenu.prototype.getDefaultItems = function () {\n return ['AutoFitAll', 'AutoFit',\n 'Group', 'Ungroup', 'Edit', 'Delete', 'Save', 'Cancel', 'Copy', 'export',\n 'PdfExport', 'ExcelExport', 'CsvExport', 'SortAscending', 'SortDescending',\n 'FirstPage', 'PrevPage', 'LastPage', 'NextPage'];\n };\n ContextMenu.prototype.setLocaleKey = function () {\n return {\n 'AutoFitAll': 'autoFitAll',\n 'AutoFit': 'autoFit',\n 'Copy': 'Copy',\n 'Group': 'Group',\n 'Ungroup': 'Ungroup',\n 'Edit': 'EditRecord',\n 'Delete': 'DeleteRecord',\n 'Save': 'Save',\n 'Cancel': 'CancelButton',\n 'PdfExport': 'Pdfexport',\n 'ExcelExport': 'Excelexport',\n 'CsvExport': 'Csvexport',\n 'export': 'Export',\n 'SortAscending': 'SortAscending',\n 'SortDescending': 'SortDescending',\n 'FirstPage': 'FirstPage',\n 'LastPage': 'LastPage',\n 'PrevPage': 'PreviousPage',\n 'NextPage': 'NextPage'\n };\n };\n ContextMenu.prototype.getColumn = function (e) {\n var cell = closest(e.target, 'th.e-headercell');\n if (cell) {\n cell.classList.add('e-resized');\n var uid = cell.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n return this.parent.getColumnByUid(uid);\n }\n return null;\n };\n ContextMenu.prototype.selectRow = function (e, isSelectable) {\n this.cell = e.target;\n this.row = closest(e.target, 'tr.e-row') || this.row;\n if (this.row && isSelectable) {\n this.parent.selectRow(parseInt(this.row.getAttribute('aria-rowindex'), 10));\n }\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","import { RowModelGenerator } from '../services/row-model-generator';\n/**\n * FreezeRowModelGenerator is used to generate grid data rows with freeze row and column.\n * @hidden\n */\nvar FreezeRowModelGenerator = /** @class */ (function () {\n function FreezeRowModelGenerator(parent) {\n this.isFrzLoad = 1;\n this.parent = parent;\n this.rowModelGenerator = new RowModelGenerator(this.parent);\n }\n FreezeRowModelGenerator.prototype.generateRows = function (data, notifyArgs) {\n var frzCols = this.parent.getFrozenColumns();\n var row = this.rowModelGenerator.generateRows(data, notifyArgs);\n for (var i = 0, len = row.length; i < len; i++) {\n if (this.isFrzLoad % 2 === 0) {\n row[i].cells = row[i].cells.slice(frzCols, row[i].cells.length);\n }\n else {\n row[i].cells = row[i].cells.slice(0, frzCols);\n }\n }\n this.isFrzLoad++;\n return row;\n };\n return FreezeRowModelGenerator;\n}());\nexport { FreezeRowModelGenerator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement, remove } from '@syncfusion/ej2-base';\nimport { HeaderRender } from './header-renderer';\nimport { ContentRender } from './content-renderer';\nimport { FreezeRowModelGenerator } from '../services/freeze-row-model-generator';\nimport * as events from '../base/constant';\nimport { renderMovable } from '../base/util';\n/**\n * Freeze module is used to render grid content with frozen rows and columns\n * @hidden\n */\nvar FreezeContentRender = /** @class */ (function (_super) {\n __extends(FreezeContentRender, _super);\n function FreezeContentRender(parent, locator) {\n return _super.call(this, parent, locator) || this;\n }\n FreezeContentRender.prototype.renderPanel = function () {\n _super.prototype.renderPanel.call(this);\n var fDiv = createElement('div', { className: 'e-frozencontent' });\n var mDiv = createElement('div', { className: 'e-movablecontent' });\n this.getPanel().firstChild.appendChild(fDiv);\n this.getPanel().firstChild.appendChild(mDiv);\n this.setFrozenContent(fDiv);\n this.setMovableContent(mDiv);\n };\n FreezeContentRender.prototype.renderEmpty = function (tbody) {\n _super.prototype.renderEmpty.call(this, tbody);\n this.getMovableContent().querySelector('tbody').innerHTML = '';\n this.getFrozenContent().querySelector('.e-emptyrow').querySelector('td').colSpan = this.parent.getFrozenColumns();\n this.getFrozenContent().style.borderRightWidth = '0px';\n if (this.parent.frozenRows) {\n this.parent.getHeaderContent().querySelector('.e-frozenheader').querySelector('tbody').innerHTML = '';\n this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('tbody').innerHTML = '';\n }\n };\n FreezeContentRender.prototype.setFrozenContent = function (ele) {\n this.frozenContent = ele;\n };\n FreezeContentRender.prototype.setMovableContent = function (ele) {\n this.movableContent = ele;\n };\n FreezeContentRender.prototype.getFrozenContent = function () {\n return this.frozenContent;\n };\n FreezeContentRender.prototype.getMovableContent = function () {\n return this.movableContent;\n };\n FreezeContentRender.prototype.getModelGenerator = function () {\n return new FreezeRowModelGenerator(this.parent);\n };\n FreezeContentRender.prototype.renderTable = function () {\n _super.prototype.renderTable.call(this);\n this.getFrozenContent().appendChild(this.getTable());\n var mTbl = this.getTable().cloneNode(true);\n this.getMovableContent().appendChild(mTbl);\n remove(this.getMovableContent().querySelector('colgroup'));\n var colGroup = ((this.parent.getHeaderContent().querySelector('.e-movableheader').querySelector('colgroup')).cloneNode(true));\n mTbl.insertBefore(colGroup, mTbl.querySelector('tbody'));\n };\n return FreezeContentRender;\n}(ContentRender));\nexport { FreezeContentRender };\nvar FreezeRender = /** @class */ (function (_super) {\n __extends(FreezeRender, _super);\n function FreezeRender(parent, locator) {\n var _this = _super.call(this, parent, locator) || this;\n _this.addEventListener();\n return _this;\n }\n FreezeRender.prototype.addEventListener = function () {\n this.parent.on(events.freezeRender, this.refreshFreeze, this);\n };\n FreezeRender.prototype.renderTable = function () {\n _super.prototype.renderTable.call(this);\n this.rfshMovable();\n this.updateColgroup();\n this.initializeHeaderDrag();\n this.initializeHeaderDrop();\n this.parent.notify(events.headerRefreshed, { rows: this.rows, args: { isFrozen: false } });\n };\n FreezeRender.prototype.renderPanel = function () {\n _super.prototype.renderPanel.call(this);\n var fDiv = createElement('div', { className: 'e-frozenheader' });\n var mDiv = createElement('div', { className: 'e-movableheader' });\n this.getPanel().firstChild.appendChild(fDiv);\n this.getPanel().firstChild.appendChild(mDiv);\n this.setFrozenHeader(fDiv);\n this.setMovableHeader(mDiv);\n };\n FreezeRender.prototype.refreshUI = function () {\n var tbody = this.getMovableHeader().querySelector('tbody');\n remove(this.getMovableHeader().querySelector('table'));\n _super.prototype.refreshUI.call(this);\n this.rfshMovable();\n this.getMovableHeader().querySelector('tbody').innerHTML = tbody.innerHTML;\n this.updateColgroup();\n renderMovable(this.parent.getContentTable().querySelector('colgroup'), this.parent.getFrozenColumns());\n this.initializeHeaderDrag();\n this.parent.notify(events.headerRefreshed, { rows: this.rows, args: { isFrozen: false } });\n };\n FreezeRender.prototype.rfshMovable = function () {\n this.getFrozenHeader().appendChild(this.getTable());\n this.getMovableHeader().appendChild(this.createTable());\n this.refreshStackedHdrHgt();\n };\n FreezeRender.prototype.refreshFreeze = function (obj) {\n if (obj.case === 'filter') {\n var filterRow = this.getTable().querySelector('.e-filterbar');\n if (this.parent.allowFiltering && filterRow && this.getMovableHeader().querySelector('thead')) {\n this.getMovableHeader().querySelector('thead')\n .appendChild(renderMovable(filterRow, this.parent.getFrozenColumns()));\n }\n }\n else if (obj.case === 'textwrap') {\n var fRows = void 0;\n var mRows = void 0;\n var fHdr = this.getFrozenHeader();\n var mHdr = this.getMovableHeader();\n var cont = this.parent.getContent();\n var wrapMode = this.parent.textWrapSettings.wrapMode;\n var hdrClassList = this.parent.getHeaderContent().firstChild.classList;\n if (wrapMode !== 'Header' || obj.isModeChg) {\n fRows = cont.querySelector('.e-frozencontent').querySelectorAll('tr');\n mRows = cont.querySelector('.e-movablecontent').querySelectorAll('tr');\n this.setWrapHeight(fRows, mRows, obj.isModeChg, true);\n }\n if (wrapMode === 'Content' && this.parent.allowTextWrap) {\n hdrClassList.add('e-wrap');\n }\n else {\n hdrClassList.remove('e-wrap');\n }\n if (wrapMode === 'Both' || obj.isModeChg) {\n fRows = fHdr.querySelectorAll('tr');\n mRows = mHdr.querySelectorAll('tr');\n }\n else {\n fRows = fHdr.querySelector(wrapMode === 'Content' ? 'tbody' : 'thead').querySelectorAll('tr');\n mRows = mHdr.querySelector(wrapMode === 'Content' ? 'tbody' : 'thead').querySelectorAll('tr');\n }\n this.setWrapHeight(fRows, mRows, obj.isModeChg, false, this.colDepth > 1);\n this.refreshStackedHdrHgt();\n }\n };\n FreezeRender.prototype.updateResizeHandler = function () {\n [].slice.call(this.parent.getHeaderContent().querySelectorAll('.e-rhandler')).forEach(function (ele) {\n ele.style.height = ele.parentElement.offsetHeight + 'px';\n });\n };\n FreezeRender.prototype.setWrapHeight = function (fRows, mRows, isModeChg, isContReset, isStackedHdr) {\n var fRowHgt;\n var mRowHgt;\n var isWrap = this.parent.allowTextWrap;\n var wrapMode = this.parent.textWrapSettings.wrapMode;\n var tHead = this.parent.getHeaderContent().querySelector('thead');\n var tBody = this.parent.getHeaderContent().querySelector('tbody');\n for (var i = 0, len = fRows.length; i < len; i++) {\n if (isModeChg && ((wrapMode === 'Header' && isContReset) || ((wrapMode === 'Content' && tHead.contains(fRows[i]))\n || (wrapMode === 'Header' && tBody.contains(fRows[i])))) || isStackedHdr) {\n fRows[i].style.height = null;\n mRows[i].style.height = null;\n }\n fRowHgt = fRows[i].offsetHeight;\n mRowHgt = mRows[i].offsetHeight;\n if (fRows[i].childElementCount && ((isWrap && fRowHgt < mRowHgt) || (!isWrap && fRowHgt > mRowHgt))) {\n fRows[i].style.height = mRowHgt + 'px';\n }\n else if (mRows[i].childElementCount && ((isWrap && fRowHgt > mRowHgt) || (!isWrap && fRowHgt < mRowHgt))) {\n mRows[i].style.height = fRowHgt + 'px';\n }\n }\n };\n FreezeRender.prototype.refreshStackedHdrHgt = function () {\n var fRowSpan;\n var mRowSpan;\n var fTr = this.getFrozenHeader().querySelectorAll('.e-columnheader');\n var mTr = this.getMovableHeader().querySelectorAll('.e-columnheader');\n for (var i = 0, len = fTr.length; i < len; i++) {\n fRowSpan = this.getRowSpan(fTr[i]);\n mRowSpan = this.getRowSpan(mTr[i]);\n if (fRowSpan.min > 1) {\n this.updateStackedHdrRowHgt(i, fRowSpan.max, fTr[i], mTr);\n }\n else if (mRowSpan.min > 1) {\n this.updateStackedHdrRowHgt(i, mRowSpan.max, mTr[i], fTr);\n }\n }\n if (this.parent.allowResizing) {\n this.updateResizeHandler();\n }\n };\n FreezeRender.prototype.getRowSpan = function (row) {\n var rSpan;\n var minRowSpan;\n var maxRowSpan;\n for (var i = 0, len = row.childElementCount; i < len; i++) {\n if (i === 0) {\n minRowSpan = row.children[0].rowSpan;\n }\n rSpan = row.children[i].rowSpan;\n minRowSpan = Math.min(rSpan, minRowSpan);\n maxRowSpan = Math.max(rSpan, minRowSpan);\n }\n return { min: minRowSpan, max: maxRowSpan };\n };\n FreezeRender.prototype.updateStackedHdrRowHgt = function (idx, maxRowSpan, row, rows) {\n var height = 0;\n for (var i = 0; i < maxRowSpan; i++) {\n height += rows[idx + i].offsetHeight;\n }\n row.style.height = height + 'px';\n };\n FreezeRender.prototype.setFrozenHeader = function (ele) {\n this.frozenHeader = ele;\n };\n FreezeRender.prototype.setMovableHeader = function (ele) {\n this.movableHeader = ele;\n };\n FreezeRender.prototype.getFrozenHeader = function () {\n return this.frozenHeader;\n };\n FreezeRender.prototype.getMovableHeader = function () {\n return this.movableHeader;\n };\n FreezeRender.prototype.updateColgroup = function () {\n var mTable = this.getMovableHeader().querySelector('table');\n remove(this.getMovableHeader().querySelector('colgroup'));\n mTable.insertBefore(renderMovable(this.getFrozenHeader().querySelector('colgroup'), this.parent.getFrozenColumns()), mTable.querySelector('thead'));\n };\n return FreezeRender;\n}(HeaderRender));\nexport { FreezeRender };\n","import * as events from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { parentsUntil } from '../base/util';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { FreezeRender, FreezeContentRender } from '../renderer/freeze-renderer';\n/**\n * `Freeze` module is used to handle Frozen rows and columns.\n * @hidden\n */\nvar Freeze = /** @class */ (function () {\n function Freeze(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.addEventListener();\n }\n Freeze.prototype.getModuleName = function () {\n return 'freeze';\n };\n Freeze.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialLoad, this.instantiateRenderer, this);\n this.parent.on(events.initialEnd, this.wireEvents, this);\n };\n Freeze.prototype.wireEvents = function () {\n if (this.parent.frozenRows) {\n EventHandler.add(this.parent.getHeaderContent(), 'dblclick', this.dblClickHandler, this);\n }\n };\n Freeze.prototype.dblClickHandler = function (e) {\n if (parentsUntil(e.target, 'e-grid').id !== this.parent.element.id) {\n return;\n }\n this.parent.notify(events.dblclick, e);\n };\n Freeze.prototype.instantiateRenderer = function () {\n var renderer = this.locator.getService('rendererFactory');\n if (this.parent.getFrozenColumns()) {\n renderer.addRenderer(RenderType.Header, new FreezeRender(this.parent, this.locator));\n renderer.addRenderer(RenderType.Content, new FreezeContentRender(this.parent, this.locator));\n }\n };\n Freeze.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialLoad, this.instantiateRenderer);\n };\n Freeze.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Freeze;\n}());\nexport { Freeze };\n","import { EventHandler, closest, Browser, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { createElement, remove } from '@syncfusion/ej2-base';\nimport { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport { parentsUntil } from '../base/util';\nimport * as events from '../base/constant';\nimport { calculatePosition } from '@syncfusion/ej2-popups';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { Group } from '../actions/group';\nimport { Sort } from '../actions/sort';\nimport { Filter } from '../actions/filter';\nimport { Resize } from '../actions/resize';\n/**\n * 'column menu module used to handle column menu actions'\n */\nvar ColumnMenu = /** @class */ (function () {\n function ColumnMenu(parent, serviceLocator) {\n this.defaultItems = {};\n this.localeText = this.setLocaleKey();\n this.disableItems = [];\n this.hiddenItems = [];\n this.isOpen = false;\n // default class names\n this.GROUP = 'e-icon-group';\n this.UNGROUP = 'e-icon-ungroup';\n this.ASCENDING = 'e-icon-ascending';\n this.DESCENDING = 'e-icon-descending';\n this.ROOT = 'e-columnmenu';\n this.FILTER = 'e-icon-filter';\n this.POP = 'e-filter-popup';\n this.WRAP = 'e-col-menu';\n this.CHOOSER = '_chooser_';\n this.parent = parent;\n this.gridID = parent.element.id;\n this.serviceLocator = serviceLocator;\n this.addEventListener();\n }\n ColumnMenu.prototype.wireEvents = function () {\n var _this = this;\n this.getColumnMenuHandlers().forEach(function (ele) {\n EventHandler.add(ele, 'mousedown', _this.columnMenuHandlerDown, _this);\n });\n };\n ColumnMenu.prototype.unwireEvents = function () {\n var _this = this;\n this.getColumnMenuHandlers().forEach(function (ele) {\n EventHandler.remove(ele, 'mousedown', _this.columnMenuHandlerDown);\n });\n };\n /**\n * To destroy the resize\n * @return {void}\n * @hidden\n */\n ColumnMenu.prototype.destroy = function () {\n this.columnMenu.destroy();\n this.removeEventListener();\n this.unwireFilterEvents();\n this.unwireEvents();\n remove(this.element);\n };\n ColumnMenu.prototype.columnMenuHandlerClick = function (e) {\n if (e.target.classList.contains('e-columnmenu')) {\n if ((this.isOpen && this.headerCell !== this.getHeaderCell(e)) || document.querySelector('.e-grid-menu .e-menu-parent.e-ul')) {\n this.columnMenu.close();\n this.openColumnMenu(e);\n }\n else if (!this.isOpen) {\n this.openColumnMenu(e);\n }\n else {\n this.columnMenu.close();\n }\n }\n };\n ColumnMenu.prototype.openColumnMenu = function (e) {\n var pos = { top: 0, left: 0 };\n this.element.style.cssText = 'display:block;visibility:hidden';\n var elePos = this.element.getBoundingClientRect();\n this.element.style.cssText = 'display:none;visibility:visible';\n this.headerCell = this.getHeaderCell(e);\n if (Browser.isDevice) {\n pos.top = ((window.innerHeight / 2) - (elePos.height / 2));\n pos.left = ((window.innerWidth / 2) - (elePos.width / 2));\n }\n else {\n if (this.parent.enableRtl) {\n pos = calculatePosition(this.headerCell, 'left', 'bottom');\n }\n else {\n pos = calculatePosition(this.headerCell, 'right', 'bottom');\n pos.left -= elePos.width;\n }\n }\n this.columnMenu.open(pos.top, pos.left);\n e.preventDefault();\n };\n ColumnMenu.prototype.columnMenuHandlerDown = function (e) {\n this.isOpen = !(this.element.style.display === 'none' || this.element.style.display === '');\n };\n ColumnMenu.prototype.getColumnMenuHandlers = function () {\n return [].slice.call(this.parent.getHeaderTable().querySelectorAll('.' + this.ROOT));\n };\n /**\n * @hidden\n */\n ColumnMenu.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.headerRefreshed, this.wireEvents, this);\n this.parent.on(events.uiUpdate, this.enableAfterRenderMenu, this);\n this.parent.on(events.initialEnd, this.render, this);\n if (this.isFilterItemAdded()) {\n this.parent.on(events.filterDialogCreated, this.filterPosition, this);\n }\n this.parent.on(events.click, this.columnMenuHandlerClick, this);\n };\n /**\n * @hidden\n */\n ColumnMenu.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.headerRefreshed, this.unwireEvents);\n this.parent.off(events.uiUpdate, this.enableAfterRenderMenu);\n this.parent.off(events.initialEnd, this.render);\n if (this.isFilterItemAdded()) {\n this.parent.off(events.filterDialogCreated, this.filterPosition);\n }\n this.parent.off(events.click, this.columnMenuHandlerClick);\n };\n ColumnMenu.prototype.enableAfterRenderMenu = function (e) {\n if (e.module === this.getModuleName() && e.enable) {\n if (this.columnMenu) {\n this.columnMenu.destroy();\n remove(this.element);\n }\n this.render();\n }\n };\n ColumnMenu.prototype.render = function () {\n this.l10n = this.serviceLocator.getService('localization');\n this.element = createElement('ul', { id: this.gridID + '_columnmenu', className: 'e-colmenu' });\n this.parent.element.appendChild(this.element);\n this.columnMenu = new Menu({\n cssClass: 'e-grid-menu',\n enableRtl: this.parent.enableRtl,\n enablePersistence: this.parent.enablePersistence,\n locale: this.parent.locale,\n items: this.getItems(),\n select: this.columnMenuItemClick.bind(this),\n beforeOpen: this.columnMenuBeforeOpen.bind(this),\n onClose: this.columnMenuOnClose.bind(this),\n beforeItemRender: this.beforeMenuItemRender.bind(this),\n beforeClose: this.columnMenuBeforeClose.bind(this)\n });\n this.columnMenu.appendTo(this.element);\n this.wireFilterEvents();\n };\n ColumnMenu.prototype.wireFilterEvents = function () {\n if (!Browser.isDevice && this.isFilterItemAdded()) {\n EventHandler.add(this.element, 'mouseover', this.appendFilter, this);\n }\n };\n ColumnMenu.prototype.unwireFilterEvents = function () {\n if (!Browser.isDevice && this.isFilterItemAdded()) {\n EventHandler.remove(this.element, 'mouseover', this.appendFilter);\n }\n };\n ColumnMenu.prototype.beforeMenuItemRender = function (args) {\n if (this.isChooserItem(args.item)) {\n var field = this.getKeyFromId(args.item.id, this.CHOOSER);\n var column = this.parent.getColumnByField(field);\n var check = createCheckBox(false, {\n label: args.item.text,\n checked: column.visible\n });\n if (this.parent.enableRtl) {\n check.classList.add('e-rtl');\n }\n args.element.innerHTML = '';\n args.element.appendChild(check);\n }\n else if (args.item.id && this.getKeyFromId(args.item.id) === 'Filter') {\n args.element.appendChild(createElement('span', { className: 'e-icons e-caret' }));\n args.element.className += 'e-filter-item e-menu-caret-icon';\n }\n };\n ColumnMenu.prototype.columnMenuBeforeClose = function (args) {\n var colChooser = args.event ? closest(args.event.target, '.e-menu-item') : null;\n if (!isNullOrUndefined(args.parentItem) &&\n this.getKeyFromId(args.parentItem.id) === 'ColumnChooser' &&\n colChooser && this.isChooserItem(colChooser)) {\n args.cancel = true;\n }\n else if (args.event && (closest(args.event.target, '.' + this.POP)\n || parentsUntil(args.event.target, 'e-popup') ||\n (parentsUntil(args.event.target, 'e-popup-wrapper')))) {\n args.cancel = true;\n }\n };\n ColumnMenu.prototype.isChooserItem = function (item) {\n return item.id && item.id.indexOf('_colmenu_') >= 0 &&\n this.getKeyFromId(item.id, this.CHOOSER).indexOf('_colmenu_') === -1;\n };\n ColumnMenu.prototype.columnMenuBeforeOpen = function (args) {\n args.column = this.targetColumn = this.getColumn();\n this.parent.trigger(events.columnMenuOpen, args);\n for (var _i = 0, _a = args.items; _i < _a.length; _i++) {\n var item = _a[_i];\n var key = this.getKeyFromId(item.id);\n var dItem = this.defaultItems[key];\n if (this.getDefaultItems().indexOf(key) !== -1) {\n if (this.ensureDisabledStatus(key) && !dItem.hide) {\n this.disableItems.push(item.text);\n }\n else if (item.hide) {\n this.hiddenItems.push(item.text);\n }\n }\n }\n this.columnMenu.enableItems(this.disableItems, false);\n this.columnMenu.hideItems(this.hiddenItems);\n };\n ColumnMenu.prototype.ensureDisabledStatus = function (item) {\n var _this = this;\n var status = false;\n switch (item) {\n case 'Group':\n if (!this.parent.allowGrouping || (this.parent.ensureModuleInjected(Group) && this.targetColumn\n && this.parent.groupSettings.columns.indexOf(this.targetColumn.field) >= 0)) {\n status = true;\n }\n break;\n case 'AutoFitAll':\n case 'AutoFit':\n status = !this.parent.ensureModuleInjected(Resize);\n break;\n case 'Ungroup':\n if (!this.parent.ensureModuleInjected(Group) || (this.parent.ensureModuleInjected(Group) && this.targetColumn\n && this.parent.groupSettings.columns.indexOf(this.targetColumn.field) < 0)) {\n status = true;\n }\n break;\n case 'SortDescending':\n case 'SortAscending':\n if (this.parent.allowSorting && this.parent.ensureModuleInjected(Sort)\n && this.parent.sortSettings.columns.length > 0 && this.targetColumn) {\n this.parent.sortSettings.columns.forEach(function (ele) {\n if (ele.field === _this.targetColumn.field\n && ele.direction.toLocaleLowerCase() === item.toLocaleLowerCase().replace('sort', '')) {\n status = true;\n }\n });\n }\n else if (!this.parent.allowSorting || !this.parent.ensureModuleInjected(Sort)) {\n status = true;\n }\n break;\n case 'Filter':\n status = !(this.parent.allowFiltering && (this.parent.filterSettings.type !== 'FilterBar')\n && this.parent.ensureModuleInjected(Filter));\n }\n return status;\n };\n ColumnMenu.prototype.columnMenuItemClick = function (args) {\n var item = this.isChooserItem(args.item) ? 'ColumnChooser' : this.getKeyFromId(args.item.id);\n switch (item) {\n case 'AutoFit':\n this.parent.autoFitColumns(this.targetColumn.field);\n break;\n case 'AutoFitAll':\n this.parent.autoFitColumns([]);\n break;\n case 'Ungroup':\n this.parent.ungroupColumn(this.targetColumn.field);\n break;\n case 'Group':\n this.parent.groupColumn(this.targetColumn.field);\n break;\n case 'SortAscending':\n this.parent.sortColumn(this.targetColumn.field, 'Ascending');\n break;\n case 'SortDescending':\n this.parent.sortColumn(this.targetColumn.field, 'Descending');\n break;\n case 'ColumnChooser':\n var key = this.getKeyFromId(args.item.id, this.CHOOSER);\n var checkbox = args.element.querySelector('.e-checkbox-wrapper .e-frame');\n if (checkbox && checkbox.classList.contains('e-check')) {\n checkbox.classList.remove('e-check');\n this.parent.hideColumns(key, 'field');\n }\n else if (checkbox) {\n this.parent.showColumns(key, 'field');\n checkbox.classList.add('e-check');\n }\n break;\n case 'Filter':\n this.getFilter(args.element, args.item.id);\n break;\n }\n args.column = this.targetColumn;\n this.parent.trigger(events.columnMenuClick, args);\n };\n ColumnMenu.prototype.columnMenuOnClose = function (args) {\n var parent = 'parentObj';\n if (args.items.length > 0 && args.items[0][parent] instanceof Menu) {\n this.columnMenu.enableItems(this.disableItems);\n this.disableItems = [];\n this.columnMenu.showItems(this.hiddenItems);\n this.hiddenItems = [];\n if (this.isFilterPopupOpen()) {\n this.getFilter(args.element, args.element.id, true);\n }\n }\n };\n ColumnMenu.prototype.getDefaultItems = function () {\n return ['AutoFitAll', 'AutoFit', 'SortAscending', 'SortDescending', 'Group', 'Ungroup', 'ColumnChooser', 'Filter'];\n };\n ColumnMenu.prototype.getItems = function () {\n var items = [];\n var defultItems = this.parent.columnMenuItems ? this.parent.columnMenuItems : this.getDefault();\n for (var _i = 0, defultItems_1 = defultItems; _i < defultItems_1.length; _i++) {\n var item = defultItems_1[_i];\n if (typeof item === 'string') {\n if (item === 'ColumnChooser') {\n var col = this.getDefaultItem(item);\n col.items = this.createChooserItems();\n items.push(col);\n }\n else {\n items.push(this.getDefaultItem(item));\n }\n }\n else {\n items.push(item);\n }\n }\n return items;\n };\n ColumnMenu.prototype.getDefaultItem = function (item) {\n var menuItem = {};\n switch (item) {\n case 'SortAscending':\n menuItem = { iconCss: this.ASCENDING };\n break;\n case 'SortDescending':\n menuItem = { iconCss: this.DESCENDING };\n break;\n case 'Group':\n menuItem = { iconCss: this.GROUP };\n break;\n case 'Ungroup':\n menuItem = { iconCss: this.UNGROUP };\n break;\n case 'Filter':\n menuItem = { iconCss: this.FILTER };\n break;\n }\n this.defaultItems[item] = {\n text: this.getLocaleText(item), id: this.generateID(item),\n iconCss: menuItem.iconCss ? 'e-icons ' + menuItem.iconCss : null\n };\n return this.defaultItems[item];\n };\n ColumnMenu.prototype.getLocaleText = function (item) {\n return this.l10n.getConstant(this.localeText[item]);\n };\n ColumnMenu.prototype.generateID = function (item, append) {\n return this.gridID + '_colmenu_' + (append ? append + item : item);\n };\n ColumnMenu.prototype.getKeyFromId = function (id, append) {\n return id.indexOf('_colmenu_') > 0 &&\n id.replace(this.gridID + '_colmenu_' + (append ? append : ''), '');\n };\n ColumnMenu.prototype.getColumnMenu = function () {\n return this.element;\n };\n ColumnMenu.prototype.getModuleName = function () {\n return 'columnMenu';\n };\n ColumnMenu.prototype.setLocaleKey = function () {\n return {\n 'AutoFitAll': 'autoFitAll',\n 'AutoFit': 'autoFit',\n 'Group': 'Group',\n 'Ungroup': 'Ungroup',\n 'SortAscending': 'SortAscending',\n 'SortDescending': 'SortDescending',\n 'ColumnChooser': 'Columnchooser',\n 'Filter': 'FilterMenu'\n };\n };\n ColumnMenu.prototype.getHeaderCell = function (e) {\n return closest(e.target, 'th.e-headercell');\n };\n ColumnMenu.prototype.getColumn = function () {\n if (this.headerCell) {\n var uid = this.headerCell.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n return this.parent.getColumnByUid(uid);\n }\n return null;\n };\n ColumnMenu.prototype.createChooserItems = function () {\n var items = [];\n for (var _i = 0, _a = this.parent.getColumns(); _i < _a.length; _i++) {\n var col = _a[_i];\n if (col.showInColumnChooser && col.field) {\n items.push({ id: this.generateID(col.field, this.CHOOSER), text: col.headerText ? col.headerText : col.field });\n }\n }\n return items;\n };\n ColumnMenu.prototype.appendFilter = function (e) {\n var filter = 'Filter';\n if (!this.defaultItems[filter]) {\n return;\n }\n else {\n var key = this.defaultItems[filter].id;\n if (closest(e.target, '#' + key) && !this.isFilterPopupOpen()) {\n this.getFilter(e.target, key);\n }\n else if (!closest(e.target, '#' + key) && this.isFilterPopupOpen()) {\n this.getFilter(e.target, key, true);\n }\n }\n };\n ColumnMenu.prototype.getFilter = function (target, id, isClose) {\n var filterPopup = this.getFilterPop();\n if (filterPopup) {\n filterPopup.style.display = !Browser.isDevice && isClose ? 'none' : 'block';\n }\n else {\n this.parent.notify(events.filterOpen, {\n col: this.targetColumn, target: target, isClose: isClose, id: id\n });\n }\n };\n ColumnMenu.prototype.setPosition = function (li, ul) {\n var gridPos = this.parent.element.getBoundingClientRect();\n var liPos = li.getBoundingClientRect();\n var left = liPos.left - gridPos.left;\n var top = liPos.top - gridPos.top;\n if (gridPos.height < top) {\n top = top - ul.offsetHeight + liPos.height;\n }\n else if (gridPos.height < top + ul.offsetHeight) {\n top = gridPos.height - ul.offsetHeight;\n }\n if (window.innerHeight < ul.offsetHeight + top + gridPos.top) {\n top = window.innerHeight - ul.offsetHeight - gridPos.top;\n }\n left += (this.parent.enableRtl ? -ul.offsetWidth : liPos.width);\n if (gridPos.width <= left + ul.offsetWidth) {\n left -= liPos.width + ul.offsetWidth;\n }\n else if (left < 0) {\n left += ul.offsetWidth + liPos.width;\n }\n ul.style.top = top + 'px';\n ul.style.left = left + 'px';\n };\n ColumnMenu.prototype.filterPosition = function (e) {\n var filterPopup = this.getFilterPop();\n filterPopup.classList.add(this.WRAP);\n if (!Browser.isDevice) {\n var disp = filterPopup.style.display;\n filterPopup.style.cssText += 'display:block;visibility:hidden';\n var li = this.element.querySelector('.' + this.FILTER);\n if (li) {\n this.setPosition(li.parentElement, filterPopup);\n filterPopup.style.cssText += 'display:' + disp + ';visibility:visible';\n }\n }\n };\n ColumnMenu.prototype.getDefault = function () {\n var items = [];\n if (this.parent.ensureModuleInjected(Resize)) {\n items.push('AutoFitAll');\n items.push('AutoFit');\n }\n if (this.parent.allowGrouping && this.parent.ensureModuleInjected(Group)) {\n items.push('Group');\n items.push('Ungroup');\n }\n if (this.parent.allowSorting && this.parent.ensureModuleInjected(Sort)) {\n items.push('SortAscending');\n items.push('SortDescending');\n }\n items.push('ColumnChooser');\n if (this.parent.allowFiltering && (this.parent.filterSettings.type !== 'FilterBar') &&\n this.parent.ensureModuleInjected(Filter)) {\n items.push('Filter');\n }\n return items;\n };\n ColumnMenu.prototype.isFilterPopupOpen = function () {\n var filterPopup = this.getFilterPop();\n return filterPopup && filterPopup.style.display !== 'none';\n };\n ColumnMenu.prototype.getFilterPop = function () {\n return this.parent.element.querySelector('.' + this.POP);\n };\n ColumnMenu.prototype.isFilterItemAdded = function () {\n return (this.parent.columnMenuItems &&\n this.parent.columnMenuItems.indexOf('Filter') >= 0) || !this.parent.columnMenuItems;\n };\n return ColumnMenu;\n}());\nexport { ColumnMenu };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager, Query, Predicate, DataUtil } from '@syncfusion/ej2-data';\nimport { initForeignKeyColumn, getForeignKeyData, generateQuery } from '../base/constant';\nimport { getDatePredicate } from '../base/util';\nimport { Data } from './data';\n/**\n * `ForeignKey` module is used to handle foreign key column's actions.\n */\nvar ForeignKey = /** @class */ (function (_super) {\n __extends(ForeignKey, _super);\n function ForeignKey(parent, serviceLocator) {\n var _this = _super.call(this, parent, serviceLocator) || this;\n _this.parent = parent;\n _this.serviceLocator = serviceLocator;\n _this.initEvent();\n return _this;\n }\n ForeignKey.prototype.initEvent = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(initForeignKeyColumn, this.initForeignKeyColumns, this);\n this.parent.on(getForeignKeyData, this.getForeignKeyData, this);\n this.parent.on(generateQuery, this.generateQueryFormData, this);\n };\n ForeignKey.prototype.initForeignKeyColumns = function (columns) {\n columns.forEach(function (column) {\n column.dataSource = (column.dataSource instanceof DataManager ? column.dataSource :\n (isNullOrUndefined(column.dataSource) ? new DataManager() : new DataManager(column.dataSource)));\n });\n };\n ForeignKey.prototype.getForeignKeyData = function (args) {\n var _this = this;\n var foreignColumns = args.column ? [args.column] : this.parent.getForeignKeyColumns();\n var allPromise = [];\n foreignColumns.forEach(function (col) {\n var promise;\n var query = args.isComplex ? _this.genarateColumnQuery(col) :\n _this.genarateQuery(col, args.result.result, false, true);\n var dataSource = col.dataSource;\n if (!dataSource.ready || dataSource.dataSource.offline) {\n promise = dataSource.executeQuery(query);\n }\n else {\n promise = dataSource.ready.then(function () {\n return dataSource.executeQuery(query);\n });\n }\n allPromise.push(promise);\n });\n Promise.all(allPromise).then(function (responses) {\n responses.forEach(function (data, index) {\n foreignColumns[index].columnData = data.result;\n });\n args.promise.resolve(args.result);\n }).catch(function (e) {\n if (args.promise && args.promise.reject) {\n args.promise.reject(e);\n }\n return e;\n });\n };\n ForeignKey.prototype.generateQueryFormData = function (args) {\n args.predicate.predicate = this.genarateQuery(args.column, args.column.columnData, true);\n };\n ForeignKey.prototype.genarateQuery = function (column, e, fromData, needQuery) {\n var gObj = this.parent;\n var predicates = [];\n var predicate;\n var query = new Query();\n var field = fromData ? column.foreignKeyField : column.field;\n if (gObj.allowPaging || gObj.enableVirtualization || fromData) {\n e = new DataManager(((gObj.allowGrouping && gObj.groupSettings.columns.length) ?\n e.records : e)).executeLocal(new Query().select(field));\n var filteredValue = DataUtil.distinct(e, field, false);\n field = fromData ? column.field : column.foreignKeyField;\n filteredValue.forEach(function (obj) {\n if (obj && obj.getDay) {\n predicates.push(getDatePredicate({ field: field, operator: 'equal', value: obj, matchCase: false }));\n }\n else {\n predicates.push(new Predicate(field, 'equal', obj, false));\n }\n });\n }\n if (needQuery) {\n return predicates.length ? query.where(Predicate.or(predicates)) : query;\n }\n predicate = (predicates.length ? Predicate.or(predicates) : { predicates: [] });\n return predicate;\n };\n ForeignKey.prototype.genarateColumnQuery = function (column) {\n var gObj = this.parent;\n var query = gObj.query.clone();\n var predicate = [];\n var queryColumn = this.isFiltered(column);\n if (queryColumn.isTrue) {\n query = this.filterQuery(query, queryColumn.column, true);\n }\n if (gObj.searchSettings.key.length) {\n var sSettings = gObj.searchSettings;\n query.search(sSettings.key, column.foreignKeyValue, sSettings.operator, sSettings.ignoreCase);\n }\n return query;\n };\n ForeignKey.prototype.isFiltered = function (column) {\n var filterColumn = this.parent.filterSettings.columns.filter(function (fColumn) {\n return (fColumn.field === column.foreignKeyValue);\n });\n return {\n column: filterColumn, isTrue: !!filterColumn.length\n };\n };\n ForeignKey.prototype.getModuleName = function () {\n return 'foreignKey';\n };\n ForeignKey.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.destroyEvent();\n };\n ForeignKey.prototype.destroyEvent = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(initForeignKeyColumn, this.initForeignKeyColumns);\n this.parent.off(getForeignKeyData, this.getForeignKeyData);\n this.parent.off(generateQuery, this.generateQueryFormData);\n };\n return ForeignKey;\n}(Data));\nexport { ForeignKey };\n","import * as index from '@syncfusion/ej2-grids';\nindex.Grid.Inject( index.Filter,index.Page,index.Selection,index.Sort,index.Group,index.Reorder,index.RowDD,index.DetailRow,index.Toolbar,index.Aggregate,index.Search,index.VirtualScroll,index.Edit,index.Resize,index.ExcelExport,index.PdfExport,index.CommandColumn,index.ContextMenu,index.Freeze,index.ColumnMenu,index.ColumnChooser,index.ForeignKey);\nexport * from '@syncfusion/ej2-grids';\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\n/**\n * Options for customizing the fonts.\n */\nvar Font = /** @class */ (function (_super) {\n __extends(Font, _super);\n function Font() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('16px')\n ], Font.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], Font.prototype, \"color\", void 0);\n __decorate([\n Property('Segoe UI')\n ], Font.prototype, \"fontFamily\", void 0);\n __decorate([\n Property('Regular')\n ], Font.prototype, \"fontWeight\", void 0);\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontStyle\", void 0);\n __decorate([\n Property(1)\n ], Font.prototype, \"opacity\", void 0);\n return Font;\n}(ChildProperty));\nexport { Font };\n/**\n * Configures the margin of linear gauge.\n */\nvar Margin = /** @class */ (function (_super) {\n __extends(Margin, _super);\n function Margin() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(10)\n ], Margin.prototype, \"left\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"right\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"top\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"bottom\", void 0);\n return Margin;\n}(ChildProperty));\nexport { Margin };\n/**\n * Configures the border in linear gauge.\n */\nvar Border = /** @class */ (function (_super) {\n __extends(Border, _super);\n function Border() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Border.prototype, \"color\", void 0);\n __decorate([\n Property(0)\n ], Border.prototype, \"width\", void 0);\n return Border;\n}(ChildProperty));\nexport { Border };\n/**\n * Options for customizing the annotation.\n */\nvar Annotation = /** @class */ (function (_super) {\n __extends(Annotation, _super);\n function Annotation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Annotation.prototype, \"content\", void 0);\n __decorate([\n Property(0)\n ], Annotation.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], Annotation.prototype, \"y\", void 0);\n __decorate([\n Property('None')\n ], Annotation.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property('None')\n ], Annotation.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('-1')\n ], Annotation.prototype, \"zIndex\", void 0);\n __decorate([\n Complex({ size: '12px', color: null }, Font)\n ], Annotation.prototype, \"font\", void 0);\n __decorate([\n Property(null)\n ], Annotation.prototype, \"axisIndex\", void 0);\n __decorate([\n Property(null)\n ], Annotation.prototype, \"axisValue\", void 0);\n return Annotation;\n}(ChildProperty));\nexport { Annotation };\n/**\n * Options for customizing the container of linear gauge.\n */\nvar Container = /** @class */ (function (_super) {\n __extends(Container, _super);\n function Container() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Normal')\n ], Container.prototype, \"type\", void 0);\n __decorate([\n Property(0)\n ], Container.prototype, \"height\", void 0);\n __decorate([\n Property(0)\n ], Container.prototype, \"width\", void 0);\n __decorate([\n Property(10)\n ], Container.prototype, \"roundedCornerRadius\", void 0);\n __decorate([\n Property('transparent')\n ], Container.prototype, \"backgroundColor\", void 0);\n __decorate([\n Complex({ width: 1, color: '#bfbfbf' }, Border)\n ], Container.prototype, \"border\", void 0);\n __decorate([\n Property(0)\n ], Container.prototype, \"offset\", void 0);\n return Container;\n}(ChildProperty));\nexport { Container };\n/**\n * Options for customizing the tooltip in linear gauge.\n */\nvar TooltipSettings = /** @class */ (function (_super) {\n __extends(TooltipSettings, _super);\n function TooltipSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], TooltipSettings.prototype, \"enable\", void 0);\n __decorate([\n Property('#FFFFFF')\n ], TooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Complex({ color: '#686868', size: '13px' }, Font)\n ], TooltipSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], TooltipSettings.prototype, \"enableAnimation\", void 0);\n __decorate([\n Complex({ color: 'black', width: 2 }, Border)\n ], TooltipSettings.prototype, \"border\", void 0);\n return TooltipSettings;\n}(ChildProperty));\nexport { TooltipSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty, Collection } from '@syncfusion/ej2-base';\nimport { Font, Border } from '../model/base';\n/** Options for customizing the axis line. */\nvar Line = /** @class */ (function (_super) {\n __extends(Line, _super);\n function Line() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Line.prototype, \"dashArray\", void 0);\n __decorate([\n Property(null)\n ], Line.prototype, \"height\", void 0);\n __decorate([\n Property(2)\n ], Line.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Line.prototype, \"color\", void 0);\n __decorate([\n Property(0)\n ], Line.prototype, \"offset\", void 0);\n return Line;\n}(ChildProperty));\nexport { Line };\n/**\n * Options for customizing the axis labels appearance.\n */\nvar Label = /** @class */ (function (_super) {\n __extends(Label, _super);\n function Label() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ size: '12px', color: null }, Font)\n ], Label.prototype, \"font\", void 0);\n __decorate([\n Property(false)\n ], Label.prototype, \"useRangeColor\", void 0);\n __decorate([\n Property('')\n ], Label.prototype, \"format\", void 0);\n __decorate([\n Property(0)\n ], Label.prototype, \"offset\", void 0);\n return Label;\n}(ChildProperty));\nexport { Label };\n/**\n * Options for customizing the ranges of an axis.\n */\nvar Range = /** @class */ (function (_super) {\n __extends(Range, _super);\n function Range() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Range.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], Range.prototype, \"end\", void 0);\n __decorate([\n Property('Outside')\n ], Range.prototype, \"position\", void 0);\n __decorate([\n Property('')\n ], Range.prototype, \"color\", void 0);\n __decorate([\n Property(10)\n ], Range.prototype, \"startWidth\", void 0);\n __decorate([\n Property(10)\n ], Range.prototype, \"endWidth\", void 0);\n __decorate([\n Property(0)\n ], Range.prototype, \"offset\", void 0);\n __decorate([\n Complex({ color: '#000000', width: 0 }, Border)\n ], Range.prototype, \"border\", void 0);\n return Range;\n}(ChildProperty));\nexport { Range };\n/**\n * Options for customizing the minor tick lines.\n */\nvar Tick = /** @class */ (function (_super) {\n __extends(Tick, _super);\n function Tick() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(20)\n ], Tick.prototype, \"height\", void 0);\n __decorate([\n Property(2)\n ], Tick.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Tick.prototype, \"interval\", void 0);\n __decorate([\n Property(null)\n ], Tick.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], Tick.prototype, \"offset\", void 0);\n return Tick;\n}(ChildProperty));\nexport { Tick };\n/**\n * Options for customizing the pointers of an axis.\n */\nvar Pointer = /** @class */ (function (_super) {\n __extends(Pointer, _super);\n function Pointer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.animationComplete = true;\n /** @private */\n _this.currentValue = null;\n return _this;\n }\n __decorate([\n Property('Marker')\n ], Pointer.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"value\", void 0);\n __decorate([\n Property('InvertedTriangle')\n ], Pointer.prototype, \"markerType\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"imageUrl\", void 0);\n __decorate([\n Complex({ color: '#808080' }, Border)\n ], Pointer.prototype, \"border\", void 0);\n __decorate([\n Property(10)\n ], Pointer.prototype, \"roundedCornerRadius\", void 0);\n __decorate([\n Property('Far')\n ], Pointer.prototype, \"placement\", void 0);\n __decorate([\n Property(20)\n ], Pointer.prototype, \"height\", void 0);\n __decorate([\n Property(20)\n ], Pointer.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], Pointer.prototype, \"opacity\", void 0);\n __decorate([\n Property(0)\n ], Pointer.prototype, \"animationDuration\", void 0);\n __decorate([\n Property(false)\n ], Pointer.prototype, \"enableDrag\", void 0);\n __decorate([\n Property(0)\n ], Pointer.prototype, \"offset\", void 0);\n __decorate([\n Property(null)\n ], Pointer.prototype, \"description\", void 0);\n return Pointer;\n}(ChildProperty));\nexport { Pointer };\nvar Axis = /** @class */ (function (_super) {\n __extends(Axis, _super);\n function Axis() {\n /**\n * Specifies the minimum value of an axis.\n * @default 0\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.visibleLabels = [];\n return _this;\n }\n __decorate([\n Property(0)\n ], Axis.prototype, \"minimum\", void 0);\n __decorate([\n Property(100)\n ], Axis.prototype, \"maximum\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"isInversed\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"opposedPosition\", void 0);\n __decorate([\n Complex({}, Line)\n ], Axis.prototype, \"line\", void 0);\n __decorate([\n Collection([{}], Range)\n ], Axis.prototype, \"ranges\", void 0);\n __decorate([\n Collection([{}], Pointer)\n ], Axis.prototype, \"pointers\", void 0);\n __decorate([\n Complex({ width: 2, height: 20 }, Tick)\n ], Axis.prototype, \"majorTicks\", void 0);\n __decorate([\n Complex({ width: 1, height: 10 }, Tick)\n ], Axis.prototype, \"minorTicks\", void 0);\n __decorate([\n Complex({}, Label)\n ], Axis.prototype, \"labelStyle\", void 0);\n return Axis;\n}(ChildProperty));\nexport { Axis };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { axisLabelRender } from '../model/constant';\nimport { VisibleLabels, Size, measureText, getLabelFormat, Rect } from '../utils/helper';\nimport { valueToCoefficient, Align, getRangePalette, VisibleRange, withInRange, calculateNiceInterval } from '../utils/helper';\n/**\n * @private\n * To calculate the overall axis bounds for gauge.\n */\nvar AxisLayoutPanel = /** @class */ (function () {\n function AxisLayoutPanel(gauge) {\n this.gauge = gauge;\n }\n /**\n * To calculate the axis bounds\n */\n AxisLayoutPanel.prototype.calculateAxesBounds = function () {\n var axis;\n var bounds;\n var pointer;\n this.gauge.nearSizes = [];\n this.gauge.farSizes = [];\n var x;\n var y;\n var width;\n var height;\n var axisPadding = 8;\n var containerRect = this.gauge.containerBounds;\n this.checkThermometer();\n for (var i = 0; i < this.gauge.axes.length; i++) {\n axis = this.gauge.axes[i];\n axis.checkAlign = new Align(i, ((!axis.opposedPosition) ? 'Near' : 'Far'));\n (!axis.opposedPosition) ? this.gauge.nearSizes.push(1) : this.gauge.farSizes.push(1);\n this.calculateLineBounds(axis, i);\n this.calculateTickBounds(axis, i);\n this.calculateLabelBounds(axis, i);\n if (axis.pointers.length > 0) {\n this.calculatePointerBounds(axis, i);\n }\n if (axis.ranges.length > 0) {\n this.calculateRangesBounds(axis, i);\n }\n bounds = axis.labelBounds;\n if (this.gauge.orientation === 'Vertical') {\n x = (!axis.opposedPosition) ? bounds.x - axisPadding : axis.lineBounds.x;\n y = axis.lineBounds.y;\n height = axis.lineBounds.height;\n width = Math.abs((!axis.opposedPosition) ? (axis.lineBounds.x - x) : ((bounds.x + bounds.width + axisPadding) - x));\n }\n else {\n y = (!axis.opposedPosition) ? bounds.y - bounds.height - axisPadding : axis.lineBounds.y;\n x = axis.lineBounds.x;\n width = axis.lineBounds.width;\n height = Math.abs((!axis.opposedPosition) ? Math.abs(axis.lineBounds.y - y) : (bounds.y + axisPadding) - y);\n }\n axis.bounds = new Rect(x, y, width, height);\n }\n };\n /**\n * Calculate axis line bounds\n * @param axis\n * @param axisIndex\n */\n AxisLayoutPanel.prototype.calculateLineBounds = function (axis, axisIndex) {\n var x;\n var y;\n var width;\n var height;\n var index;\n var prevAxis;\n var lineHeight = axis.line.height;\n var orientation = this.gauge.orientation;\n var containerRect = this.gauge.containerBounds;\n lineHeight = (axis.line.width > 0) ? lineHeight : null;\n if (orientation === 'Vertical') {\n y = (isNullOrUndefined(lineHeight)) ? containerRect.y :\n containerRect.y + ((containerRect.height / 2) - (lineHeight / 2));\n width = axis.line.width;\n height = (isNullOrUndefined(lineHeight)) ? containerRect.height : lineHeight;\n }\n else {\n x = (isNullOrUndefined(lineHeight)) ? containerRect.x :\n containerRect.x + ((containerRect.width / 2) - (lineHeight / 2));\n height = axis.line.width;\n width = (isNullOrUndefined(lineHeight)) ? containerRect.width : lineHeight;\n }\n index = this.checkPreviousAxes(axis, axisIndex);\n if (isNullOrUndefined(index)) {\n if (orientation === 'Vertical') {\n x = (!axis.opposedPosition ? containerRect.x : containerRect.x + containerRect.width) + axis.line.offset;\n }\n else {\n y = (!axis.opposedPosition ? containerRect.y : containerRect.y + containerRect.height) + axis.line.offset;\n }\n }\n else {\n prevAxis = this.gauge.axes[index];\n if (orientation === 'Vertical') {\n x = ((!axis.opposedPosition) ? prevAxis.bounds.x : (prevAxis.bounds.x + prevAxis.bounds.width)) + axis.line.offset;\n }\n else {\n y = ((!axis.opposedPosition) ? prevAxis.bounds.y : (prevAxis.bounds.y + prevAxis.bounds.height)) + axis.line.offset;\n }\n }\n axis.lineBounds = new Rect(x, y, width, height);\n };\n /**\n * Calculate axis tick bounds\n * @param axis\n * @param axisIndex\n */\n AxisLayoutPanel.prototype.calculateTickBounds = function (axis, axisIndex) {\n var x;\n var y;\n var width;\n var height;\n var major;\n var minor;\n var min = Math.min(axis.minimum, axis.maximum);\n var max = Math.max(axis.minimum, axis.maximum);\n min = (min === max) ? max - 1 : min;\n var interval = axis.majorTicks.interval;\n var bounds = axis.lineBounds;\n major = axis.majorTicks;\n minor = axis.minorTicks;\n axis.majorInterval = major.interval;\n axis.minorInterval = minor.interval;\n var size = (this.gauge.orientation === 'Vertical' ? bounds.height : bounds.width);\n var lineSize = (this.gauge.orientation === 'Vertical' ? bounds.width : bounds.height) / 2;\n axis.majorInterval = isNullOrUndefined(axis.majorInterval) ? calculateNiceInterval(min, max, size, this.gauge.orientation)\n : major.interval;\n axis.visibleRange = new VisibleRange(min, max, axis.majorInterval, (max - min));\n axis.minorInterval = (isNullOrUndefined(axis.minorInterval)) ? axis.majorInterval / 2 : axis.minorInterval;\n if (this.gauge.orientation === 'Vertical') {\n x = (!axis.opposedPosition ? (bounds.x - lineSize - major.height) : bounds.x + lineSize) + major.offset;\n axis.majorTickBounds = new Rect(x, bounds.y, major.height, bounds.height);\n x = (!axis.opposedPosition ? (bounds.x - lineSize - minor.height) : bounds.x + lineSize) + minor.offset;\n axis.minorTickBounds = new Rect(x, bounds.y, minor.height, bounds.height);\n }\n else {\n y = (!axis.opposedPosition ? (bounds.y - lineSize - major.height) : bounds.y + lineSize) + major.offset;\n axis.majorTickBounds = new Rect(bounds.x, y, bounds.width, major.height);\n y = (!axis.opposedPosition ? (bounds.y - lineSize - minor.height) : bounds.y + lineSize) + minor.offset;\n axis.minorTickBounds = new Rect(bounds.x, y, bounds.width, minor.height);\n }\n };\n /**\n * To Calculate axis label bounds\n * @param axis\n * @param axisIndex\n */\n AxisLayoutPanel.prototype.calculateLabelBounds = function (axis, axisIndex) {\n var x;\n var y;\n var width;\n var height;\n var padding = 5;\n var bounds = axis.majorTickBounds;\n var offset = axis.labelStyle.offset;\n this.calculateVisibleLabels(axis);\n width = axis.maxLabelSize.width;\n height = axis.maxLabelSize.height / 2;\n if (this.gauge.orientation === 'Vertical') {\n x = (!axis.opposedPosition ? (bounds.x - width - padding) : (bounds.x + bounds.width + padding)) + offset;\n y = axis.lineBounds.y;\n }\n else {\n y = (!axis.opposedPosition ? (bounds.y - padding) : ((bounds.y + bounds.height + padding) + height)) + offset;\n x = axis.lineBounds.x;\n }\n axis.labelBounds = new Rect(x, y, width, height);\n };\n /**\n * Calculate pointer bounds\n * @param axis\n * @param axisIndex\n */\n AxisLayoutPanel.prototype.calculatePointerBounds = function (axis, axisIndex) {\n var pointer;\n var actualValue;\n var length;\n var val = [];\n var range = axis.visibleRange;\n var orientation = this.gauge.orientation;\n var bounds;\n var line = axis.lineBounds;\n var label = axis.labelBounds;\n var currentVal;\n var type;\n var markerType;\n var nearX;\n var farX;\n var nearY;\n var farY;\n var minimumValue = Math.min(range.min, range.max);\n var maximumValue = Math.max(range.min, range.max);\n for (var i = 0; i < axis.pointers.length; i++) {\n pointer = axis.pointers[i];\n pointer.currentValue = pointer.value !== null ?\n pointer.value < minimumValue ? minimumValue : pointer.value > maximumValue ? maximumValue : pointer.value\n : minimumValue;\n if (pointer.width > 0 && withInRange(pointer.currentValue, null, null, range.max, range.min, 'pointer')) {\n this['calculate' + pointer.type + 'Bounds'](axisIndex, axis, i, pointer);\n }\n }\n };\n /**\n * Calculate marker pointer bounds\n * @param axisIndex\n * @param axis\n * @param pointerIndex\n * @param pointer\n */\n AxisLayoutPanel.prototype.calculateMarkerBounds = function (axisIndex, axis, pointerIndex, pointer) {\n var x;\n var y;\n var line = axis.lineBounds;\n var offset = pointer.offset;\n var range = axis.visibleRange;\n var placement = pointer.placement;\n var tick = axis.majorTickBounds;\n var label = axis.labelBounds;\n var border = pointer.border.width;\n if (this.gauge.orientation === 'Vertical') {\n x = (!axis.opposedPosition) ? (placement === 'Near') ? label.x : (placement === 'Center') ? tick.x : line.x :\n placement === 'Far' ? label.x + label.width : (placement === 'Center' ? tick.x + tick.width : line.x);\n x = !axis.opposedPosition ? ((pointer.placement === 'Far' ? x + border : x - border) + (offset)) :\n ((pointer.placement === 'Near' ? x - border : x + border) + (offset));\n y = ((valueToCoefficient(pointer.currentValue, axis, this.gauge.orientation, range) * line.height) + line.y);\n }\n else {\n y = (!axis.opposedPosition) ? (placement === 'Near') ? label.y - label.height : (placement === 'Center') ? tick.y :\n line.y : (placement === 'Far') ? label.y : (placement === 'Center') ? tick.y + tick.height : line.y;\n y = !axis.opposedPosition ? ((pointer.placement === 'Far' ? y + border : y - border) + (offset)) :\n ((pointer.placement === 'Near' ? y - border : y + border) + (offset));\n x = ((valueToCoefficient(pointer.currentValue, axis, this.gauge.orientation, range) * line.width) + line.x);\n }\n pointer.bounds = new Rect(x, y, pointer.width, pointer.height);\n };\n /**\n * Calculate bar pointer bounds\n * @param axisIndex\n * @param axis\n * @param pointerIndex\n * @param pointer\n */\n AxisLayoutPanel.prototype.calculateBarBounds = function (axisIndex, axis, pointerIndex, pointer) {\n var x1;\n var x2;\n var y1;\n var y2;\n var height;\n var width;\n var line = axis.lineBounds;\n var padding = 10;\n var range = axis.visibleRange;\n var orientation = this.gauge.orientation;\n var offset = pointer.offset;\n var container = this.gauge.containerBounds;\n if (orientation === 'Vertical') {\n x1 = (container.width > 0) ? container.x + ((container.width / 2) - (pointer.width / 2)) :\n (!axis.opposedPosition) ? (line.x + padding) : (line.x - pointer.width - padding);\n x1 += (offset);\n y1 = ((valueToCoefficient(pointer.currentValue, axis, orientation, range) * line.height) + line.y);\n y2 = ((valueToCoefficient(range.min, axis, orientation, range) * line.height) + line.y);\n height = Math.abs(y2 - y1);\n y1 = (!axis.isInversed) ? y1 : y2;\n width = pointer.width;\n }\n else {\n x1 = ((valueToCoefficient(range.min, axis, orientation, range) * line.width) + line.x);\n y1 = (container.height > 0) ? (container.y + (container.height / 2) - (pointer.height) / 2) :\n (!axis.opposedPosition) ? (line.y + padding) : (line.y - pointer.height - padding);\n y1 += (offset);\n height = pointer.height;\n x2 = ((valueToCoefficient(pointer.currentValue, axis, orientation, range) * line.width) + line.x);\n width = Math.abs(x2 - x1);\n x1 = (!axis.isInversed) ? x1 : x2;\n }\n pointer.bounds = new Rect(x1, y1, width, height);\n };\n /**\n * Calculate ranges bounds\n * @param axis\n * @param axisIndex\n */\n AxisLayoutPanel.prototype.calculateRangesBounds = function (axis, axisIndex) {\n var range;\n var start;\n var end;\n var line = axis.lineBounds;\n var visibleRange = axis.visibleRange;\n var orientation = this.gauge.orientation;\n var startVal;\n var endVal;\n var pointX;\n var pointY;\n var width;\n var height;\n var position;\n var startWidth;\n var endWidth;\n var colors;\n for (var i = 0; i < axis.ranges.length; i++) {\n range = axis.ranges[i];\n if (withInRange(null, range.start, range.end, visibleRange.max, visibleRange.min, 'range')) {\n start = Math.min(range.start, range.end);\n end = Math.max(range.start, range.end);\n position = range.position;\n startWidth = range.startWidth;\n endWidth = range.endWidth;\n colors = this.gauge.rangePalettes.length ? this.gauge.rangePalettes : getRangePalette();\n range.interior = range.color ? range.color : colors[i % colors.length];\n if (this.gauge.orientation === 'Vertical') {\n pointX = line.x + (range.offset);\n pointY = (valueToCoefficient(end, axis, orientation, visibleRange) * line.height) + line.y;\n height = (valueToCoefficient(start, axis, orientation, visibleRange) * line.height) + line.y;\n height -= pointY;\n startVal = !axis.opposedPosition ? position === 'Inside' ? (pointX + startWidth) : (pointX - startWidth)\n : position === 'Inside' ? (pointX - startWidth) : (pointX + startWidth);\n endVal = !axis.opposedPosition ? position === 'Inside' ? (pointX + endWidth) : (pointX - endWidth) :\n position === 'Inside' ? (pointX - endWidth) : (pointX + endWidth);\n range.path = 'M' + pointX + ' ' + pointY + ' L ' + pointX + ' ' + (pointY + height) +\n ' L ' + startVal + ' ' + (pointY + height) + ' L ' + endVal + ' ' + pointY +\n ' L ' + pointX + ' ' + pointY + ' z ';\n }\n else {\n pointX = (valueToCoefficient(end, axis, orientation, visibleRange) * line.width) + line.x;\n pointY = axis.lineBounds.y + (range.offset);\n width = (valueToCoefficient(start, axis, orientation, visibleRange) * line.width) + line.x;\n width = pointX - width;\n startVal = !axis.opposedPosition ? position === 'Inside' ? (pointY + startWidth) :\n (pointY - startWidth) : (position === 'Inside') ? (pointY - startWidth) :\n (pointY + startWidth);\n endVal = !axis.opposedPosition ? position === 'Inside' ? (pointY + endWidth) : (pointY - endWidth) :\n (position === 'Inside') ? (pointY - endWidth) : (pointY + endWidth);\n range.path = 'M' + pointX + ' ' + pointY + ' L ' + (pointX - width) + ' ' + pointY +\n ' L ' + (pointX - width) + ' ' + startVal + ' L ' + pointX + ' ' + endVal +\n ' L ' + pointX + ' ' + pointY + ' z ';\n }\n }\n }\n };\n AxisLayoutPanel.prototype.checkPreviousAxes = function (currentAxis, axisIndex) {\n var index = axisIndex - 1;\n var prevAxis;\n var isPositive = (index >= 0) ? true : false;\n if (isPositive) {\n prevAxis = this.gauge.axes[index];\n index = (prevAxis.checkAlign.align === currentAxis.checkAlign.align) ? index : this.checkPreviousAxes(currentAxis, index);\n }\n else {\n index = null;\n }\n return index;\n };\n /**\n *\n * @param axis To calculate the visible labels\n */\n AxisLayoutPanel.prototype.calculateVisibleLabels = function (axis) {\n axis.visibleLabels = [];\n var min = axis.visibleRange.min;\n var max = axis.visibleRange.max;\n var interval = axis.visibleRange.interval;\n var format;\n var argsData;\n var style = axis.labelStyle;\n var text;\n var labelSize;\n var customLabelFormat = style.format && style.format.match('{value}') !== null;\n format = this.gauge.intl.getNumberFormat({\n format: getLabelFormat(style.format), useGrouping: this.gauge.useGroupingSeparator\n });\n for (var i = min; (i <= max && interval > 0); i += interval) {\n argsData = {\n cancel: false, name: axisLabelRender, axis: axis,\n text: customLabelFormat ? style.format.replace(new RegExp('{value}', 'g'), format(i)) :\n format(i),\n value: i\n };\n this.gauge.trigger(axisLabelRender, argsData);\n labelSize = measureText(argsData.text, axis.labelStyle.font);\n if (!argsData.cancel) {\n axis.visibleLabels.push(new VisibleLabels(argsData.text, i, labelSize));\n }\n }\n this.getMaxLabelWidth(this.gauge, axis);\n };\n /**\n * Calculate maximum label width for the axis.\n * @return {void}\n * @private\n */\n AxisLayoutPanel.prototype.getMaxLabelWidth = function (gauge, axis) {\n axis.maxLabelSize = new Size(0, 0);\n var label;\n for (var i = 0; i < axis.visibleLabels.length; i++) {\n label = axis.visibleLabels[i];\n label.size = measureText(label.text, axis.labelStyle.font);\n if (label.size.width > axis.maxLabelSize.width) {\n axis.maxLabelSize.width = label.size.width;\n }\n if (label.size.height > axis.maxLabelSize.height) {\n axis.maxLabelSize.height = label.size.height;\n }\n }\n };\n AxisLayoutPanel.prototype.checkThermometer = function () {\n if (this.gauge.container.type === 'Thermometer') {\n this.gauge.axes.map(function (axis, index) {\n if (axis.isInversed) {\n axis.pointers.map(function (pointer, index) {\n if (pointer.type === 'Bar') {\n axis.isInversed = false;\n }\n });\n }\n });\n }\n };\n return AxisLayoutPanel;\n}());\nexport { AxisLayoutPanel };\n","/**\n * Specifies the linear gauge constant value\n */\n/** @private */\nexport var loaded = 'loaded';\n/** @private */\nexport var load = 'load';\n/** @private */\nexport var animationComplete = 'animationComplete';\n/** @private */\nexport var axisLabelRender = 'axisLabelRender';\n/** @private */\nexport var tooltipRender = 'tooltipRender';\n/** @private */\nexport var annotationRender = 'annotationRender';\n/** @private */\nexport var gaugeMouseMove = 'gaugeMouseMove';\n/** @private */\nexport var gaugeMouseLeave = 'gaugeMouseLeave';\n/** @private */\nexport var gaugeMouseDown = 'gaugeMouseDown';\n/** @private */\nexport var gaugeMouseUp = 'gaugeMouseUp';\n/** @private */\nexport var valueChange = 'valueChange';\n/** @private */\nexport var resized = 'resized';\n","import { Animation } from '@syncfusion/ej2-base';\nimport { animationComplete } from '../model/constant';\nimport { Size, valueToCoefficient, PathOption } from '../utils/helper';\nimport { calculateShapes, getBox } from '../utils/helper';\n/**\n * @private\n * To handle the animation for gauge\n */\nvar Animations = /** @class */ (function () {\n function Animations(gauge) {\n this.gauge = gauge;\n }\n /**\n * To do the marker pointer animation.\n * @return {void}\n * @private\n */\n Animations.prototype.performMarkerAnimation = function (element, axis, pointer) {\n var _this = this;\n var markerElement = element;\n var options;\n var timeStamp;\n var range = axis.visibleRange;\n var rectHeight = (this.gauge.orientation === 'Vertical') ? axis.lineBounds.height : axis.lineBounds.width;\n var rectY = (this.gauge.orientation === 'Vertical') ? axis.lineBounds.y : axis.lineBounds.x;\n if (this.gauge.orientation === 'Vertical') {\n pointer.bounds.y = (valueToCoefficient(pointer.currentValue, axis, this.gauge.orientation, range) * rectHeight) + rectY;\n }\n else {\n pointer.bounds.x = (valueToCoefficient(pointer.currentValue, axis, this.gauge.orientation, range) * rectHeight) + rectY;\n }\n options = new PathOption(markerElement.id, null, null, null);\n options = calculateShapes(pointer.bounds, pointer.markerType, new Size(pointer.width, pointer.height), pointer.imageUrl, options, this.gauge.orientation, axis, pointer);\n var currentValue;\n var start = pointer.startValue;\n var end = pointer.currentValue;\n start = (start === end) ? range.min : start;\n var val = Math.abs(start - end);\n var currentPath = options.d;\n new Animation({}).animate(markerElement, {\n duration: pointer.animationDuration,\n progress: function (args) {\n if (args.timeStamp >= args.delay) {\n timeStamp = ((args.timeStamp - args.delay) / args.duration);\n currentValue = (start < end) ? start + (timeStamp * val) : start - (timeStamp * val);\n if (_this.gauge.orientation === 'Vertical') {\n pointer.bounds.y = (valueToCoefficient(currentValue, axis, _this.gauge.orientation, range) *\n rectHeight) + rectY;\n }\n else {\n pointer.bounds.x = (valueToCoefficient(currentValue, axis, _this.gauge.orientation, range) *\n rectHeight) + rectY;\n }\n options = calculateShapes(pointer.bounds, pointer.markerType, new Size(pointer.width, pointer.height), pointer.imageUrl, options, _this.gauge.orientation, axis, pointer);\n markerElement.setAttribute('d', options.d);\n }\n },\n end: function (model) {\n markerElement.setAttribute('d', currentPath);\n pointer.startValue = pointer.currentValue;\n pointer.animationComplete = true;\n _this.gauge.trigger(animationComplete, { axis: axis, pointer: pointer });\n }\n });\n };\n /**\n * Perform the bar pointer animation\n * @param element\n * @param axis\n * @param pointer\n */\n Animations.prototype.performBarAnimation = function (element, axis, pointer) {\n var _this = this;\n var val;\n var radix = 10;\n var timeStamp;\n var value2;\n var value1;\n var height;\n var currentValue;\n var clipHeight;\n var clipY;\n var clipX;\n var clipVal;\n var rectHeight;\n var rectY;\n var rectX;\n var rectWidth;\n var clipWidth;\n var currentHeight;\n var clipElement;\n var range = axis.visibleRange;\n var pointerElement = element;\n var pathElement;\n var svgPathElement;\n var clipRect;\n var lineHeight = (this.gauge.orientation === 'Vertical') ? axis.lineBounds.height : axis.lineBounds.width;\n var lineY = (this.gauge.orientation === 'Vertical') ? axis.lineBounds.y : axis.lineBounds.x;\n var size = new Size(this.gauge.availableSize.width, this.gauge.availableSize.height);\n var start = pointer.startValue;\n var end = pointer.currentValue;\n start = (start === end) ? range.min : start;\n var path = '';\n var currentPath = '';\n var tagName = pointerElement.tagName;\n val = Math.abs(start - end);\n var pointerValue = (valueToCoefficient(end, axis, this.gauge.orientation, range) * lineHeight) + lineY;\n var startPointerVal = (valueToCoefficient(range.min, axis, this.gauge.orientation, range) *\n lineHeight) + lineY;\n rectY = (this.gauge.orientation === 'Vertical') ? !axis.isInversed ? pointerValue : startPointerVal :\n axis.isInversed ? pointerValue : startPointerVal;\n rectHeight = Math.abs(startPointerVal - pointerValue);\n if (this.gauge.container.type === 'Thermometer' && start === 0) {\n clipElement = pointerElement.parentElement.childNodes[1].childNodes[0].childNodes[0];\n if (this.gauge.orientation === 'Vertical') {\n clipY = clipElement.getAttribute('y');\n clipHeight = clipElement.getAttribute('height');\n clipVal = parseInt(clipY, radix) + parseInt(clipHeight, radix);\n clipElement.setAttribute('y', clipVal.toString());\n }\n else {\n clipX = clipElement.getAttribute('x');\n clipWidth = clipElement.getAttribute('width');\n clipVal = parseInt(clipX, radix) + parseInt(clipWidth, radix);\n clipElement.setAttribute('width', '0');\n }\n }\n path = getBox(pointer.bounds, this.gauge.container.type, this.gauge.orientation, new Size(pointer.bounds.width, pointer.bounds.height), 'bar', this.gauge.container.width, axis, pointer.roundedCornerRadius);\n new Animation({}).animate(pointerElement, {\n duration: pointer.animationDuration,\n progress: function (animate) {\n if (animate.timeStamp >= animate.delay) {\n timeStamp = ((animate.timeStamp - animate.delay) / animate.duration);\n currentValue = (start < end) ? start + (timeStamp * val) : start - (timeStamp * val);\n value2 = (valueToCoefficient(currentValue, axis, _this.gauge.orientation, range) * lineHeight) + lineY;\n value1 = (valueToCoefficient(range.min, axis, _this.gauge.orientation, range) * lineHeight) + lineY;\n currentHeight = Math.abs(value2 - value1);\n if (_this.gauge.orientation === 'Vertical') {\n pointer.bounds.y = (!axis.isInversed) ? value2 : value1;\n pointer.bounds.height = currentHeight;\n }\n else {\n pointer.bounds.x = (axis.isInversed) ? value2 : value1;\n pointer.bounds.width = currentHeight;\n }\n if (tagName === 'path') {\n if (start === 0 && _this.gauge.container.type === 'Thermometer') {\n (_this.gauge.orientation === 'Vertical') ?\n clipElement.setAttribute('y', (clipVal - (timeStamp * parseInt(clipHeight, radix))).toString()) :\n clipElement.setAttribute('width', (timeStamp * parseInt(clipWidth, radix)).toString());\n }\n currentPath = getBox(pointer.bounds, _this.gauge.container.type, _this.gauge.orientation, new Size(pointer.bounds.width, pointer.bounds.height), 'bar', _this.gauge.container.width, axis, pointer.roundedCornerRadius);\n pointerElement.setAttribute('d', currentPath);\n }\n else {\n if (_this.gauge.orientation === 'Vertical') {\n pointerElement.setAttribute('y', pointer.bounds.y.toString());\n pointerElement.setAttribute('height', pointer.bounds.height.toString());\n }\n else {\n pointerElement.setAttribute('x', pointer.bounds.x.toString());\n pointerElement.setAttribute('width', pointer.bounds.width.toString());\n }\n }\n }\n },\n end: function (model) {\n if (tagName === 'path') {\n if (start === 0 && _this.gauge.container.type === 'Thermometer') {\n pointerElement.parentElement.children[1].remove();\n }\n else {\n pointerElement.setAttribute('d', path);\n }\n }\n else {\n if (_this.gauge.orientation === 'Vertical') {\n pointerElement.setAttribute('y', rectY.toString());\n pointerElement.setAttribute('height', rectHeight.toString());\n }\n else {\n pointerElement.setAttribute('x', rectY.toString());\n pointerElement.setAttribute('width', rectHeight.toString());\n }\n }\n pointer.startValue = pointer.currentValue;\n _this.gauge.trigger(animationComplete, { axis: axis, pointer: pointer });\n }\n });\n };\n return Animations;\n}());\nexport { Animations };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nimport { Animations } from './animation';\nimport { Size, valueToCoefficient, PathOption, textElement, getElement } from '../utils/helper';\nimport { TextOption, RectOption, calculateShapes, getBox, getPathToRect, getRangeColor } from '../utils/helper';\n/**\n * @private\n * To render the axis elements\n */\nvar AxisRenderer = /** @class */ (function (_super) {\n __extends(AxisRenderer, _super);\n function AxisRenderer(gauge) {\n return _super.call(this, gauge) || this;\n }\n AxisRenderer.prototype.renderAxes = function () {\n var _this = this;\n var axis;\n var major;\n var minor;\n this.axisElements = [];\n this.axisObject = this.gauge.renderer.createGroup({\n id: this.gauge.element.id + '_Axis_Collections',\n transform: 'translate( 0, 0 )'\n });\n for (var i = 0; i < this.gauge.axes.length; i++) {\n axis = this.gauge.axes[i];\n major = axis.majorTicks;\n minor = axis.minorTicks;\n this.htmlObject = this.gauge.renderer.createGroup({ id: this.gauge.element.id + '_Axis_Group_' + i });\n this.drawAxisLine(axis, this.htmlObject, i);\n this.drawRanges(axis, this.htmlObject, i);\n this.drawTicks(axis, major, this.htmlObject, 'MajorTicks', axis.majorTickBounds);\n this.drawTicks(axis, minor, this.htmlObject, 'MinorTicks', axis.minorTickBounds);\n this.drawAxisLabels(axis, this.htmlObject);\n this.drawPointers(axis, this.htmlObject, i);\n this.axisElements.push(this.htmlObject);\n }\n this.axisElements.forEach(function (axisElement) {\n _this.axisObject.appendChild(axisElement);\n });\n this.gauge.svgObject.appendChild(this.axisObject);\n if (this.gauge.nearSizes.length !== this.gauge.farSizes.length && this.gauge.axes.length > 1) {\n this.axisAlign(this.gauge.axes);\n }\n };\n AxisRenderer.prototype.axisAlign = function (axes) {\n var nearAxisWidth = 0;\n var farAxisWidth = 0;\n var axis;\n var tranX;\n var transY;\n if (this.gauge.orientation === 'Vertical') {\n axes.forEach(function (axis, axisIndex) {\n if (!axis.opposedPosition) {\n nearAxisWidth += axis.bounds.width;\n }\n else {\n farAxisWidth += axis.bounds.width;\n }\n });\n nearAxisWidth += this.gauge.containerBounds.width / 2;\n farAxisWidth += this.gauge.containerBounds.width / 2;\n tranX = (nearAxisWidth / 2) - (farAxisWidth / 2);\n this.axisObject.setAttribute('transform', 'translate(' + tranX + ',0)');\n if (!(isNullOrUndefined(this.gauge.containerObject))) {\n this.gauge.containerObject.setAttribute('transform', 'translate(' + tranX + ',0)');\n }\n }\n else {\n axes.forEach(function (axis, axisIndex) {\n if (!axis.opposedPosition) {\n nearAxisWidth += axis.bounds.height;\n }\n else {\n farAxisWidth += axis.bounds.height;\n }\n });\n nearAxisWidth += (this.gauge.containerBounds.height / 2);\n farAxisWidth += (this.gauge.containerBounds.height / 2);\n transY = (nearAxisWidth / 2) - (farAxisWidth / 2);\n this.axisObject.setAttribute('transform', 'translate(0,' + transY + ')');\n if (!(isNullOrUndefined(this.gauge.containerObject))) {\n this.gauge.containerObject.setAttribute('transform', 'translate(0,' + transY + ')');\n }\n }\n };\n AxisRenderer.prototype.drawAxisLine = function (axis, axisObject, axisIndex) {\n var options;\n var rect = axis.lineBounds;\n var path = '';\n if (axis.line.width > 0) {\n path = 'M' + rect.x + ' ' + rect.y + ' L ' + (this.gauge.orientation === 'Vertical' ? rect.x : rect.x + rect.width) +\n ' ' + (this.gauge.orientation === 'Vertical' ? rect.y + rect.height : rect.y) + 'z';\n options = new PathOption(this.gauge.element.id + '_AxisLine_' + axisIndex, axis.line.color, axis.line.width, axis.line.color, 1, axis.line.dashArray, path);\n axisObject.appendChild(this.gauge.renderer.drawPath(options));\n }\n };\n AxisRenderer.prototype.drawTicks = function (axis, ticks, axisObject, tickID, tickBounds) {\n var tickPath = '';\n var pointY;\n var pointX;\n var options;\n var range = axis.visibleRange;\n var line = axis.lineBounds;\n var interval = ((tickID === 'MajorTicks') ? axis.majorInterval : axis.minorInterval);\n for (var i = range.min; (i <= range.max && interval > 0); i += interval) {\n if ((tickID === 'MajorTicks') || (tickID === 'MinorTicks' && i !== range.min && i !== range.max\n && (i % axis.majorInterval) !== 0)) {\n if (this.gauge.orientation === 'Vertical') {\n pointX = tickBounds.x;\n pointY = (valueToCoefficient(i, axis, this.gauge.orientation, range) * line.height) + line.y;\n tickPath = tickPath.concat('M' + pointX + ' ' + pointY + ' ' + 'L' + (pointX + ticks.height) + ' ' + pointY + ' ');\n }\n else {\n pointX = (valueToCoefficient(i, axis, this.gauge.orientation, range) * line.width) + line.x;\n pointY = tickBounds.y;\n tickPath = tickPath.concat('M' + pointX + ' ' + pointY + ' ' + 'L' + pointX + ' ' + (pointY + ticks.height) + ' ');\n }\n }\n }\n options = new PathOption(this.gauge.element.id + '_' + tickID + 'Line_' + 0, ticks.color, ticks.width, ticks.color, 1, null, tickPath);\n axisObject.appendChild(this.gauge.renderer.drawPath(options));\n };\n AxisRenderer.prototype.drawAxisLabels = function (axis, axisObject) {\n var options;\n var pointX;\n var pointY;\n var rect = axis.lineBounds;\n var bounds = axis.labelBounds;\n var tick = axis.majorTickBounds;\n var labelSize;\n var range = axis.visibleRange;\n var anchor;\n var baseline;\n var padding = 5;\n var labelColor;\n var offset = axis.labelStyle.offset;\n var labelElement = this.gauge.renderer.createGroup({ id: this.gauge.element.id + '_AxisLabelsGroup' });\n for (var i = 0; i < axis.visibleLabels.length; i++) {\n labelSize = axis.visibleLabels[i].size;\n labelColor = axis.labelStyle.useRangeColor ? getRangeColor(axis.visibleLabels[i].value, axis.ranges) :\n null;\n labelColor = isNullOrUndefined(labelColor) ? axis.labelStyle.font.color : labelColor;\n if (this.gauge.orientation === 'Vertical') {\n pointY = (valueToCoefficient(axis.visibleLabels[i].value, axis, this.gauge.orientation, range) *\n rect.height) + rect.y;\n pointX = (!axis.opposedPosition ? (tick.x - labelSize.width - padding) + offset : bounds.x);\n pointY += (labelSize.height / 4);\n }\n else {\n pointX = (valueToCoefficient(axis.visibleLabels[i].value, axis, this.gauge.orientation, range) *\n rect.width) + rect.x;\n pointY = bounds.y;\n anchor = 'middle';\n baseline = '';\n }\n options = new TextOption(this.gauge.element.id + '_AxisLabel_' + i, pointX, pointY, anchor, axis.visibleLabels[i].text, null, baseline);\n textElement(options, axis.labelStyle.font, labelColor, labelElement);\n }\n axisObject.appendChild(labelElement);\n };\n AxisRenderer.prototype.drawPointers = function (axis, axisObject, axisIndex) {\n var pointer;\n var clipId;\n var pointesGroup;\n var pointerClipRectGroup;\n pointesGroup = this.gauge.renderer.createGroup({ id: this.gauge.element.id + '_PointersGroup' });\n for (var i = 0; i < axis.pointers.length; i++) {\n pointer = axis.pointers[i];\n clipId = 'url(#' + this.gauge.element.id + '_AxisIndex_' + axisIndex + '_' + '_' + pointer.type + 'ClipRect_' + i + ')';\n if (!(isNullOrUndefined(pointer.bounds))) {\n pointerClipRectGroup = this.gauge.renderer.createGroup({\n 'id': this.gauge.element.id + '_AxisIndex_' + axisIndex + '_' + pointer.type + 'Pointer_' + i,\n 'clip-path': clipId\n });\n if (isNullOrUndefined(pointer.startValue)) {\n pointer.startValue = axis.visibleRange.min;\n }\n this['draw' + pointer.type + 'Pointer'](axis, axisIndex, pointer, i, pointerClipRectGroup);\n pointesGroup.appendChild(pointerClipRectGroup);\n }\n }\n axisObject.appendChild(pointesGroup);\n };\n AxisRenderer.prototype.drawMarkerPointer = function (axis, axisIndex, pointer, pointerIndex, parentElement) {\n var options;\n var pointerID = this.gauge.element.id + '_AxisIndex_' + axisIndex + '_' + pointer.type + 'Pointer' + '_' + pointerIndex;\n var transform = 'translate( 0, 0 )';\n var pointerElement;\n if (getElement(pointerID) && getElement(pointerID).childElementCount > 0) {\n remove(getElement(pointerID));\n }\n options = new PathOption(pointerID, pointer.color, pointer.border.width, pointer.border.color, pointer.opacity, null, null, transform);\n options = calculateShapes(pointer.bounds, pointer.markerType, new Size(pointer.width, pointer.height), pointer.imageUrl, options, this.gauge.orientation, axis, pointer);\n pointerElement = ((pointer.markerType === 'Circle' ? this.gauge.renderer.drawCircle(options)\n : (pointer.markerType === 'Image') ? this.gauge.renderer.drawImage(options) :\n this.gauge.renderer.drawPath(options)));\n parentElement.appendChild(pointerElement);\n if (pointer.animationDuration > 0 && !this.gauge.gaugeResized) {\n pointer.animationComplete = false;\n this.performMarkerAnimation(pointerElement, axis, pointer);\n }\n pointerElement.setAttribute('aria-label', pointer.description || 'Pointer:' + Number(pointer.currentValue).toString());\n };\n AxisRenderer.prototype.drawBarPointer = function (axis, axisIndex, pointer, pointerIndex, parentElement) {\n var rectOptions;\n var clipRectElement;\n var pointerElement;\n var path = '';\n var options;\n var box;\n var radius;\n var bottomRadius;\n var topRadius;\n var size = new Size(this.gauge.availableSize.width, this.gauge.availableSize.height);\n var pointerID = this.gauge.element.id + '_AxisIndex_' + axisIndex + '_' + pointer.type + 'Pointer' + '_' + pointerIndex;\n if (getElement(pointerID) && getElement(pointerID).childElementCount > 0) {\n remove(getElement(pointerID));\n }\n if (this.gauge.container.type === 'Normal') {\n rectOptions = new RectOption(pointerID, pointer.color, pointer.border, pointer.opacity, pointer.bounds, null, null);\n box = pointer.bounds;\n pointerElement = this.gauge.renderer.drawRectangle(rectOptions);\n }\n else {\n path = getBox(pointer.bounds, this.gauge.container.type, this.gauge.orientation, new Size(pointer.bounds.width, pointer.bounds.height), 'bar', this.gauge.container.width, axis, pointer.roundedCornerRadius);\n options = new PathOption(pointerID, pointer.color, pointer.border.width, pointer.border.color, pointer.opacity, null, path);\n pointerElement = this.gauge.renderer.drawPath(options);\n box = getPathToRect(pointerElement.cloneNode(true), size, this.gauge.element);\n }\n if (getElement(pointerID) && getElement(pointerID).childElementCount > 0) {\n var element = getElement(pointerID).firstElementChild;\n if (this.gauge.container.type === 'Normal') {\n element.setAttribute('x', rectOptions.x + '');\n element.setAttribute('y', rectOptions.y + '');\n element.setAttribute('width', rectOptions.width + '');\n element.setAttribute('height', rectOptions.height + '');\n }\n else {\n element.setAttribute('d', options.d);\n }\n }\n else {\n parentElement.appendChild(pointerElement);\n }\n pointerElement.setAttribute('aria-label', pointer.description || 'Pointer:' + Number(pointer.currentValue).toString());\n if (pointer.animationDuration > 0 && !this.gauge.gaugeResized) {\n if (this.gauge.container.type === 'Thermometer' && pointer.startValue === 0) {\n clipRectElement = this.gauge.renderer.drawClipPath(new RectOption(this.gauge.element.id + '_AxisIndex_' + axisIndex + '_' + '_' + pointer.type + 'ClipRect_' + pointerIndex, 'transparent', { width: 1, color: 'Gray' }, 1, box));\n parentElement.appendChild(clipRectElement);\n }\n this.performBarAnimation(pointerElement, axis, pointer);\n }\n };\n AxisRenderer.prototype.drawRanges = function (axis, axisObject, axisIndex) {\n var range;\n var options;\n var rangeElement = this.gauge.renderer.createGroup({ id: this.gauge.element.id + '_RangesGroup' });\n for (var j = 0; j < axis.ranges.length; j++) {\n range = axis.ranges[j];\n if (!(isNullOrUndefined(range.path))) {\n options = new PathOption(this.gauge.element.id + '_AxisIndex_' + axisIndex + '_Range_' + j, range.interior, range.border.width, range.border.color, 1, null, range.path);\n rangeElement.appendChild(this.gauge.renderer.drawPath(options));\n }\n }\n axisObject.appendChild(rangeElement);\n };\n return AxisRenderer;\n}(Animations));\nexport { AxisRenderer };\n","import { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getTemplateFunction, getElement, getElementOffset } from '../utils/helper';\nimport { getFontStyle, valueToCoefficient } from '../utils/helper';\nimport { annotationRender } from '../model/constant';\n/**\n * Represent the annotation rendering for gauge\n */\nvar Annotations = /** @class */ (function () {\n function Annotations(gauge) {\n this.gauge = gauge;\n }\n /**\n * To render annotation elements\n */\n Annotations.prototype.renderAnnotationElements = function () {\n var _this = this;\n var secondaryID = this.gauge.element.id + '_Secondary_Element';\n var annotationGroup = createElement('div', { id: this.gauge.element.id + '_AnnotationsGroup' });\n annotationGroup.style.position = 'absolute';\n annotationGroup.style.top = '0px';\n annotationGroup.style.left = '0px';\n this.gauge.annotations.map(function (annotation, index) {\n if (annotation.content !== null) {\n _this.createAnnotationTemplate(annotationGroup, index);\n }\n });\n if (annotationGroup.childElementCount > 0 && !(isNullOrUndefined(getElement(secondaryID)))) {\n getElement(secondaryID).appendChild(annotationGroup);\n }\n };\n /**\n * To create annotation elements\n */\n Annotations.prototype.createAnnotationTemplate = function (element, annotationIndex) {\n var left;\n var top;\n var templateFn;\n var renderAnnotation = false;\n var templateElement;\n var axis;\n var axisIndex;\n var axisValue;\n var id = this.gauge.element.id + '_Annotation_' + annotationIndex;\n var annotation = this.gauge.annotations[annotationIndex];\n var childElement;\n childElement = createElement('div', {\n id: this.gauge.element.id + '_Annotation_' + annotationIndex, styles: 'position: absolute; z-index:' + annotation.zIndex + ';'\n });\n var argsData = {\n cancel: false, name: annotationRender, content: annotation.content,\n annotation: annotation, textStyle: annotation.font\n };\n this.gauge.trigger(annotationRender, argsData);\n if (!argsData.cancel) {\n templateFn = getTemplateFunction(argsData.content);\n if (templateFn && templateFn(this.gauge).length) {\n templateElement = templateFn(this.gauge);\n while (templateElement.length > 0) {\n childElement.appendChild(templateElement[0]);\n }\n }\n else {\n childElement.appendChild(createElement('div', {\n innerHTML: argsData.content,\n styles: getFontStyle(argsData.textStyle)\n }));\n }\n var offset = getElementOffset(childElement.cloneNode(true), this.gauge.element);\n if (!(isNullOrUndefined(annotation.axisValue))) {\n axisIndex = isNullOrUndefined(annotation.axisIndex) ? 0 : annotation.axisIndex;\n axis = this.gauge.axes[axisIndex];\n var range = axis.visibleRange;\n renderAnnotation = (annotation.axisValue >= range.min && annotation.axisValue <= range.max) ? true : false;\n var line = axis.lineBounds;\n if (this.gauge.orientation === 'Vertical') {\n left = line.x + annotation.x;\n top = ((valueToCoefficient(annotation.axisValue, axis, this.gauge.orientation, range) * line.height) + line.y);\n top += annotation.y;\n }\n else {\n left = ((valueToCoefficient(annotation.axisValue, axis, this.gauge.orientation, range) * line.width) + line.x);\n left += annotation.x;\n top = line.y + annotation.y;\n }\n left -= (offset.width / 2);\n top -= (offset.height / 2);\n }\n else {\n var elementRect = this.gauge.element.getBoundingClientRect();\n var bounds = this.gauge.svgObject.getBoundingClientRect();\n renderAnnotation = true;\n left = Math.abs(bounds.left - elementRect.left);\n top = Math.abs(bounds.top - elementRect.top);\n left = (annotation.horizontalAlignment === 'None') ? (left + annotation.x) : left;\n top = (annotation.verticalAlignment === 'None') ? top + annotation.y : top;\n switch (annotation.verticalAlignment) {\n case 'Near':\n top = top + annotation.y;\n break;\n case 'Center':\n top = top + annotation.y + ((bounds.height / 2) - (offset.height / 2));\n break;\n case 'Far':\n top = (top + bounds.height) + annotation.y - offset.height;\n break;\n }\n switch (annotation.horizontalAlignment) {\n case 'Near':\n left = left + annotation.x;\n break;\n case 'Center':\n left = left + annotation.x + ((bounds.width / 2) - (offset.width / 2));\n break;\n case 'Far':\n left = (left + bounds.width) + annotation.x - offset.width;\n break;\n }\n }\n childElement.style.left = left + 'px';\n childElement.style.top = top + 'px';\n if (renderAnnotation) {\n element.appendChild(childElement);\n }\n }\n };\n /*\n * Get module name.\n */\n Annotations.prototype.getModuleName = function () {\n return 'Annotations';\n };\n /**\n * To destroy the annotation.\n * @return {void}\n * @private\n */\n Annotations.prototype.destroy = function (gauge) {\n // Destroy method performed here\n };\n return Annotations;\n}());\nexport { Annotations };\n","import { createElement, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { tooltipRender } from '../model/constant';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { getElement, getLabelFormat, getTemplateFunction, GaugeLocation, Size } from '../utils/helper';\nimport { getPointer, convertPixelToValue } from '../utils/helper';\n/**\n * Represent the tooltip rendering for gauge\n */\nvar GaugeTooltip = /** @class */ (function () {\n function GaugeTooltip(gauge) {\n this.gauge = gauge;\n this.element = gauge.element;\n this.tooltip = gauge.tooltip;\n this.textStyle = this.tooltip.textStyle;\n this.borderStyle = this.tooltip.border;\n this.ejTooltip = new Tooltip({\n opensOn: 'custom',\n beforeRender: this.onBeforeRender.bind(this),\n beforeOpen: this.tooltipCustomization.bind(this),\n openDelay: 0, closeDelay: 1000\n });\n this.ejTooltip.appendTo(this.element);\n }\n /**\n * Internal use for tooltip rendering\n * @param pointerElement\n */\n GaugeTooltip.prototype.renderTooltip = function (pointerElement) {\n this.pointerElement = pointerElement;\n var clientRect = this.gauge.element.getBoundingClientRect();\n var current = getPointer(pointerElement, this.gauge);\n this.currentAxis = current.axis;\n this.axisIndex = current.axisIndex;\n this.currentPointer = current.pointer;\n var ele = this.appendTargetElement();\n if (pointerElement.getAttribute('data-tooltip-id') === null && ele.getAttribute('aria-describedby') === null) {\n this.ejTooltip.open(ele);\n }\n };\n GaugeTooltip.prototype.appendTargetElement = function () {\n var location = this.getTooltipLocation();\n var element = getElement(this.element.id + '_EJTooltip_');\n var elementSpace = 2;\n if (element) {\n element.style.left = (location.x - (elementSpace / 2)) + 'px';\n element.style.top = (location.y - (elementSpace / 2)) + 'px';\n }\n else {\n element = createElement('div', {\n id: this.element.id + '_EJTooltip_',\n styles: 'position:absolute; left:' + location.x + 'px;top:' + location.y + 'px;'\n });\n element.appendChild(createElement('div', {\n id: this.element.id + '_GaugeTooltip',\n styles: 'position:absolute;width:' + elementSpace + 'px;height:' + elementSpace + 'px;background:transparent'\n }));\n getElement(this.element.id + '_Secondary_Element').appendChild(element);\n }\n return element;\n };\n GaugeTooltip.prototype.getTooltipPosition = function () {\n var position;\n if (this.gauge.orientation === 'Vertical') {\n position = (!this.currentAxis.opposedPosition) ? 'LeftCenter' : 'RightCenter';\n }\n else {\n position = (this.currentAxis.opposedPosition) ? 'TopCenter' : 'BottomCenter';\n }\n return position;\n };\n GaugeTooltip.prototype.getTooltipLocation = function () {\n var location;\n var bounds;\n var radix = 10;\n var lineX;\n var lineY;\n var size = new Size(this.gauge.availableSize.width, this.gauge.availableSize.height);\n var x;\n var y;\n var height;\n var width;\n var lineId = this.gauge.element.id + '_AxisLine_' + this.axisIndex;\n var tickID = this.gauge.element.id + '_MajorTicksLine_' + this.axisIndex;\n var lineBounds;\n if (getElement(lineId)) {\n lineBounds = getElement(lineId).getBoundingClientRect();\n lineX = lineBounds.left;\n lineY = lineBounds.top;\n }\n else {\n lineBounds = getElement(tickID).getBoundingClientRect();\n lineX = (!this.currentAxis.opposedPosition) ? (lineBounds.left + lineBounds.width) : lineBounds.left;\n lineY = (!this.currentAxis.opposedPosition) ? (lineBounds.top + lineBounds.height) : lineBounds.top;\n }\n bounds = this.pointerElement.getBoundingClientRect();\n var elementRect = this.gauge.element.getBoundingClientRect();\n x = bounds.left - elementRect.left;\n y = bounds.top - elementRect.top;\n height = bounds.height;\n width = bounds.width;\n if (this.gauge.orientation === 'Vertical') {\n x = (lineX - elementRect.left);\n y = (this.currentPointer.type === 'Marker') ? y + (height / 2) : (!this.currentAxis.isInversed) ? y : y + height;\n }\n else {\n y = (lineY - elementRect.top);\n x = (this.currentPointer.type === 'Marker') ? (x + width / 2) : (!this.currentAxis.isInversed) ? x + width : x;\n }\n location = new GaugeLocation(x, y);\n return location;\n };\n GaugeTooltip.prototype.onBeforeRender = function (args) {\n var pointerValue = convertPixelToValue(this.element, this.pointerElement, this.gauge.orientation, this.currentAxis, 'tooltip', null);\n var tooltipFormat = this.gauge.tooltip.format || this.currentAxis.labelStyle.format;\n var customLabelFormat = tooltipFormat && tooltipFormat.match('{value}') !== null;\n var format = this.gauge.intl.getNumberFormat({\n format: getLabelFormat(tooltipFormat), useGrouping: this.gauge.useGroupingSeparator\n });\n var content = customLabelFormat ?\n tooltipFormat.replace(new RegExp('{value}', 'g'), format(pointerValue)) :\n format(pointerValue);\n content = this.tooltip.template ? getTemplateFunction(this.tooltip.template)({ 'value': content })[0] : content;\n var argsData = {\n cancel: false, name: tooltipRender,\n content: content,\n border: this.borderStyle,\n axis: this.currentAxis, pointer: this.currentPointer,\n textStyle: this.textStyle\n };\n this.gauge.trigger(tooltipRender, argsData);\n this.ejTooltip.content = argsData.content;\n this.textStyle = argsData.textStyle;\n this.borderStyle = argsData.border;\n this.ejTooltip.position = this.getTooltipPosition();\n this.ejTooltip.dataBind();\n };\n GaugeTooltip.prototype.tooltipCustomization = function (args) {\n var font = this.textStyle;\n var borderColor = this.borderStyle.color;\n var border = this.borderStyle.width;\n var pointerSize = 8;\n var arrowWidth = (pointerSize - border) + 'px';\n var outerWidth;\n var innerWidth;\n args.element.classList.remove('e-popup-close');\n args.element.classList.add('e-popup-open');\n var arrowEle = args.element.querySelector('.e-arrow-tip');\n setStyleAttribute(args.element, {\n 'backgroundColor': this.tooltip.fill, 'borderColor': borderColor || '#212121',\n 'borderWidth': border + 'px'\n });\n setStyleAttribute(args.element.querySelector('.e-tip-content'), {\n 'color': font.color, 'fontFamily': font.fontFamily, 'fontSize': font.size,\n 'fontWeight': font.fontWeight, 'opacity': font.opacity.toString(), 'fontStyle': font.fontStyle\n });\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': 2 * (pointerSize + border) + 'px', 'height': pointerSize + border + 'px'\n });\n if (arrowEle.classList.contains('e-tip-top')) {\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetHeight;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderBottomColor': borderColor,\n 'borderLeftWidth': outerWidth, 'borderRightWidth': outerWidth, 'borderBottomWidth': outerWidth,\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderBottomColor': this.tooltip.fill,\n 'borderLeftWidth': innerWidth, 'borderRightWidth': innerWidth, 'borderBottomWidth': innerWidth,\n 'left': border + 'px', 'top': border + 'px'\n });\n }\n else if (arrowEle.classList.contains('e-tip-bottom')) {\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetHeight;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderTopColor': borderColor,\n 'borderLeftWidth': outerWidth, 'borderRightWidth': outerWidth, 'borderTopWidth': outerWidth,\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderTopColor': this.tooltip.fill,\n 'borderLeftWidth': innerWidth, 'borderRightWidth': innerWidth, 'borderTopWidth': innerWidth,\n 'left': border + 'px', 'top': '0'\n });\n }\n else if (arrowEle.classList.contains('e-tip-left')) {\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': pointerSize + border + 'px', 'height': 2 * (pointerSize + border) + 'px'\n });\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetWidth;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderRightColor': borderColor,\n 'borderTopWidth': outerWidth, 'borderBottomWidth': outerWidth, 'borderRightWidth': outerWidth\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderRightColor': this.tooltip.fill,\n 'borderTopWidth': innerWidth, 'borderBottomWidth': innerWidth, 'borderRightWidth': innerWidth,\n 'left': border + 'px', 'top': border + 'px'\n });\n }\n else {\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': (pointerSize + border) + 'px', 'height': 2 * (pointerSize + border) + 'px'\n });\n pointerSize = args.element.querySelector('.e-arrow-tip').offsetWidth;\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderLeftColor': borderColor,\n 'borderTopWidth': outerWidth, 'borderBottomWidth': outerWidth, 'borderLeftWidth': outerWidth\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n 'borderTopColor': 'transparent', 'borderBottomColor': 'transparent', 'borderLeftColor': this.tooltip.fill,\n 'borderTopWidth': innerWidth, 'borderBottomWidth': innerWidth, 'borderLeftWidth': innerWidth,\n 'left': (border <= 1 ? 0 : -1) + 'px', 'top': border + 'px'\n });\n }\n this.ejTooltip.refresh(args.target);\n setStyleAttribute(args.element, {\n 'display': 'block', 'transitionProperty': 'left,top',\n 'transitionDuration': this.tooltip.enableAnimation ? '1000ms' : '0ms'\n });\n };\n /*\n * Get module name.\n */\n GaugeTooltip.prototype.getModuleName = function () {\n return 'Tooltip';\n };\n /**\n * To destroy the tooltip.\n * @return {void}\n * @private\n */\n GaugeTooltip.prototype.destroy = function (gauge) {\n // Destroy method performed here\n };\n return GaugeTooltip;\n}());\nexport { GaugeTooltip };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, NotifyPropertyChanges, Internationalization } from '@syncfusion/ej2-base';\nimport { SvgRenderer, Browser } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, Complex, Collection, isNullOrUndefined, remove, createElement } from '@syncfusion/ej2-base';\nimport { Border, Font, Container, Margin, Annotation, TooltipSettings } from './model/base';\nimport { Axis } from './axes/axis';\nimport { load, loaded, gaugeMouseMove, gaugeMouseLeave, gaugeMouseDown, gaugeMouseUp, resized, valueChange } from './model/constant';\nimport { Size, valueToCoefficient, calculateShapes, stringToNumber, removeElement, getElement } from './utils/helper';\nimport { measureText, Rect, TextOption, textElement, GaugeLocation, RectOption, PathOption } from './utils/helper';\nimport { getBox, withInRange, getPointer, convertPixelToValue, isPointerDrag } from './utils/helper';\nimport { AxisLayoutPanel } from './axes/axis-panel';\nimport { AxisRenderer } from './axes/axis-renderer';\nimport { Annotations } from './annotations/annotations';\nimport { GaugeTooltip } from './user-interaction/tooltip';\n/**\n * Represents the EJ2 Linear gauge control.\n * ```html\n *
    \n * \n * ```\n */\nvar LinearGauge = /** @class */ (function (_super) {\n __extends(LinearGauge, _super);\n /**\n * @private\n * Constructor for creating the widget\n * @hidden\n */\n function LinearGauge(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private */\n _this.pointerDrag = false;\n /** @private */\n _this.mouseX = 0;\n /** @private */\n _this.mouseY = 0;\n /** @private */\n _this.gaugeResized = false;\n return _this;\n }\n /**\n * Initialize the preRender method.\n */\n LinearGauge.prototype.preRender = function () {\n this.unWireEvents();\n this.trigger(load, { gauge: this });\n this.themeEffect();\n this.initPrivateVariable();\n this.setCulture();\n this.createSvg();\n this.wireEvents();\n };\n LinearGauge.prototype.themeEffect = function () {\n if (this.theme === 'Highcontrast') {\n this.titleStyle.color = this.titleStyle.color || '#FFFFFF';\n this.setThemeColors('#FFFFFF', '#FFFFFF');\n }\n else {\n this.titleStyle.color = this.titleStyle.color || '#424242';\n this.setThemeColors('#686868', '#a6a6a6');\n }\n };\n LinearGauge.prototype.setThemeColors = function (labelcolor, others) {\n for (var _i = 0, _a = this.axes; _i < _a.length; _i++) {\n var axis = _a[_i];\n axis.line.color = axis.line.color || others;\n axis.labelStyle.font.color = axis.labelStyle.font.color || labelcolor;\n axis.majorTicks.color = axis.majorTicks.color || others;\n axis.minorTicks.color = axis.minorTicks.color || others;\n for (var _b = 0, _c = axis.pointers; _b < _c.length; _b++) {\n var pointer = _c[_b];\n pointer.color = pointer.color || others;\n }\n }\n for (var _d = 0, _e = this.annotations; _d < _e.length; _d++) {\n var annotation = _e[_d];\n annotation.font.color = annotation.font.color || labelcolor;\n }\n };\n LinearGauge.prototype.initPrivateVariable = function () {\n this.renderer = new SvgRenderer(this.element.id);\n this.gaugeAxisLayoutPanel = new AxisLayoutPanel(this);\n this.axisRenderer = new AxisRenderer(this);\n };\n /**\n * Method to set culture for chart\n */\n LinearGauge.prototype.setCulture = function () {\n this.intl = new Internationalization();\n };\n /**\n * Methods to create svg element\n */\n LinearGauge.prototype.createSvg = function () {\n this.removeSvg();\n this.calculateSize();\n this.svgObject = this.renderer.createSvg({\n id: this.element.id + '_svg',\n width: this.availableSize.width,\n height: this.availableSize.height\n });\n };\n /**\n * To Remove the SVG.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.removeSvg = function () {\n removeElement(this.element.id + '_Secondary_Element');\n if (!(isNullOrUndefined(this.svgObject)) && !isNullOrUndefined(this.svgObject.parentNode)) {\n remove(this.svgObject);\n }\n };\n /**\n * Method to calculate the size of the gauge\n */\n LinearGauge.prototype.calculateSize = function () {\n var width = stringToNumber(this.width, this.element.offsetWidth) || this.element.offsetWidth || 600;\n var height = stringToNumber(this.height, this.element.offsetHeight) || this.element.offsetHeight || 450;\n this.availableSize = new Size(width, height);\n };\n /**\n * To Initialize the control rendering\n */\n LinearGauge.prototype.render = function () {\n this.renderGaugeElements();\n this.calculateBounds();\n this.renderAxisElements();\n this.trigger(loaded, { gauge: this });\n };\n /**\n * @private\n * To render the gauge elements\n */\n LinearGauge.prototype.renderGaugeElements = function () {\n this.appendSecondaryElement();\n this.renderBorder();\n this.renderTitle();\n this.renderContainer();\n };\n LinearGauge.prototype.appendSecondaryElement = function () {\n if (isNullOrUndefined(getElement(this.element.id + '_Secondary_Element'))) {\n var secondaryElement = createElement('div');\n secondaryElement.id = this.element.id + '_Secondary_Element';\n secondaryElement.setAttribute('style', 'position: relative');\n this.element.appendChild(secondaryElement);\n }\n };\n /**\n * @private\n * To calculate axes bounds\n */\n LinearGauge.prototype.calculateBounds = function () {\n this.gaugeAxisLayoutPanel.calculateAxesBounds();\n };\n /**\n * @private\n * To render axis elements\n */\n LinearGauge.prototype.renderAxisElements = function () {\n this.axisRenderer.renderAxes();\n this.element.appendChild(this.svgObject);\n if (this.annotationsModule) {\n this.annotationsModule.renderAnnotationElements();\n }\n };\n LinearGauge.prototype.renderBorder = function () {\n var width = this.border.width;\n if (width > 0) {\n var rect = new RectOption(this.element.id + '_LinearGaugeBorder', this.background, this.border, 1, new Rect(width / 2, width / 2, this.availableSize.width - width, this.availableSize.height - width), null, null);\n this.svgObject.appendChild(this.renderer.drawRectangle(rect));\n }\n };\n LinearGauge.prototype.renderTitle = function () {\n var x;\n var y;\n var height;\n var width;\n var titleBounds;\n if (this.title) {\n var size = measureText(this.title, this.titleStyle);\n var options = new TextOption(this.element.id + '_LinearGaugeTitle', this.availableSize.width / 2, this.margin.top + (size.height / 2), 'middle', this.title);\n titleBounds = {\n x: options.x - (size.width / 2),\n y: options.y,\n width: size.width,\n height: size.height\n };\n var element = textElement(options, this.titleStyle, this.titleStyle.color, this.svgObject);\n element.setAttribute('aria-label', this.description || this.title);\n element.setAttribute('tabindex', this.tabIndex.toString());\n }\n x = this.margin.left;\n y = (isNullOrUndefined(titleBounds)) ? this.margin.top : titleBounds.y;\n height = (this.availableSize.height - y - this.margin.bottom);\n width = (this.availableSize.width - this.margin.left - this.margin.right);\n this.actualRect = { x: x, y: y, width: width, height: height };\n };\n /*\n * Method to unbind the gauge events\n */\n LinearGauge.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.gaugeOnMouseDown);\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.mouseMove);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.mouseEnd);\n EventHandler.remove(this.element, 'contextmenu', this.gaugeRightClick);\n EventHandler.remove(this.element, (Browser.isPointer ? 'pointerleave' : 'mouseleave'), this.mouseLeave);\n EventHandler.remove(window, (Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.gaugeResize.bind(this));\n };\n /*\n * Method to bind the gauge events\n */\n LinearGauge.prototype.wireEvents = function () {\n /*! Bind the Event handler */\n EventHandler.add(this.element, Browser.touchStartEvent, this.gaugeOnMouseDown, this);\n EventHandler.add(this.element, Browser.touchMoveEvent, this.mouseMove, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.mouseEnd, this);\n EventHandler.add(this.element, 'contextmenu', this.gaugeRightClick, this);\n EventHandler.add(this.element, (Browser.isPointer ? 'pointerleave' : 'mouseleave'), this.mouseLeave, this);\n EventHandler.add(window, (Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.gaugeResize, this);\n this.setStyle(this.element);\n };\n LinearGauge.prototype.setStyle = function (element) {\n element.style.touchAction = isPointerDrag(this.axes) ? 'none' : 'element';\n element.style.msTouchAction = isPointerDrag(this.axes) ? 'none' : 'element';\n element.style.msContentZooming = 'none';\n element.style.msUserSelect = 'none';\n element.style.webkitUserSelect = 'none';\n element.style.position = 'relative';\n };\n /**\n * Handles the gauge resize.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.gaugeResize = function (e) {\n var _this = this;\n var args = {\n gauge: this,\n previousSize: new Size(this.availableSize.width, this.availableSize.height),\n name: resized,\n currentSize: new Size(0, 0)\n };\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n if (this.element.classList.contains('e-lineargauge')) {\n this.resizeTo = setTimeout(function () {\n _this.gaugeResized = true;\n _this.createSvg();\n _this.refreshing = true;\n args.currentSize = new Size(_this.availableSize.width, _this.availableSize.height);\n _this.trigger(resized, args);\n _this.render();\n }, 500);\n }\n return false;\n };\n /**\n * To destroy the gauge element from the DOM.\n */\n LinearGauge.prototype.destroy = function () {\n this.unWireEvents();\n this.removeSvg();\n _super.prototype.destroy.call(this);\n };\n /**\n * @private\n * To render the gauge container\n */\n LinearGauge.prototype.renderContainer = function () {\n var width;\n var height;\n var x;\n var y;\n var options;\n var path = '';\n var topRadius;\n var bottomRadius;\n var fill = this.container.backgroundColor;\n var rect;\n var radius = this.container.width;\n bottomRadius = radius + ((radius / 2) / Math.PI);\n topRadius = radius / 2;\n if (this.orientation === 'Vertical') {\n height = this.actualRect.height;\n height = (this.container.height > 0 ? this.container.height : ((height / 2) - ((height / 2) / 4)) * 2);\n width = this.container.width;\n height = (this.container.type === 'Thermometer') ? height - (bottomRadius * 2) - topRadius : height;\n x = (this.actualRect.x + ((this.actualRect.width / 2) - (this.container.width / 2))) + this.container.offset;\n y = this.actualRect.y + ((this.actualRect.height / 2) - ((this.container.type === 'Thermometer') ?\n ((height + (bottomRadius * 2) - topRadius)) / 2 : height / 2));\n height = height;\n }\n else {\n width = (this.container.height > 0) ? this.container.height :\n ((this.actualRect.width / 2) - ((this.actualRect.width / 2) / 4)) * 2;\n width = (this.container.type === 'Thermometer') ? width - (bottomRadius * 2) - topRadius : width;\n x = this.actualRect.x + ((this.actualRect.width / 2) - ((this.container.type === 'Thermometer') ?\n (width - (bottomRadius * 2) + topRadius) / 2 : width / 2));\n y = (this.actualRect.y + ((this.actualRect.height / 2) - (this.container.width / 2))) + this.container.offset;\n height = this.container.width;\n }\n this.containerBounds = { x: x, y: y, width: width, height: height };\n if (this.containerBounds.width > 0) {\n this.containerObject = this.renderer.createGroup({ id: this.element.id + '_Container_Group', transform: 'translate( 0, 0)' });\n if (this.container.type === 'Normal') {\n rect = new RectOption(this.element.id + '_' + this.container.type + '_Layout', fill, this.container.border, 1, new Rect(x, y, width, height));\n this.containerObject.appendChild(this.renderer.drawRectangle(rect));\n }\n else {\n path = getBox(this.containerBounds, this.container.type, this.orientation, new Size(this.container.height, this.container.width), 'container', null, null, this.container.roundedCornerRadius);\n options = new PathOption(this.element.id + '_' + this.container.type + '_Layout', fill, this.container.border.width, this.container.border.color, 1, '', path);\n this.containerObject.appendChild(this.renderer.drawPath(options));\n }\n this.svgObject.appendChild(this.containerObject);\n }\n };\n /**\n * Handles the mouse down on gauge.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.gaugeOnMouseDown = function (e) {\n var pageX;\n var pageY;\n var target;\n var element = e.target;\n var split = [];\n var clientRect = this.element.getBoundingClientRect();\n var axis;\n var isPointer = false;\n var pointer;\n var current;\n var top;\n var left;\n var pointerElement;\n var svgPath;\n var dragProcess = false;\n var args = this.getMouseArgs(e, 'touchstart', gaugeMouseDown);\n this.trigger(gaugeMouseDown, args);\n this.mouseX = args.x;\n this.mouseY = args.y;\n if (args.target) {\n if (!args.cancel && ((args.target.id.indexOf('MarkerPointer') > -1) || (args.target.id.indexOf('BarPointer') > -1))) {\n current = this.moveOnPointer(args.target);\n if (!(isNullOrUndefined(current)) && current.pointer) {\n this.pointerDrag = true;\n this.mouseElement = args.target;\n }\n }\n }\n return true;\n };\n /**\n * Handles the mouse move.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.mouseMove = function (e) {\n var current;\n var element;\n var args = this.getMouseArgs(e, 'touchmove', gaugeMouseMove);\n this.trigger(gaugeMouseMove, args);\n this.mouseX = args.x;\n this.mouseY = args.y;\n if (args.target && !args.cancel) {\n if ((args.target.id.indexOf('MarkerPointer') > -1) || (args.target.id.indexOf('BarPointer') > -1)) {\n if (this.tooltipModule && this.tooltip.enable) {\n this.tooltipModule.renderTooltip(args.target);\n }\n current = this.moveOnPointer(args.target);\n if (!(isNullOrUndefined(current)) && current.pointer) {\n this.element.style.cursor = current.style;\n }\n }\n else {\n if (this.tooltipModule && this.tooltip.enable) {\n this.tooltipModule.ejTooltip.close();\n }\n this.element.style.cursor = (this.pointerDrag) ? this.element.style.cursor : 'auto';\n }\n this.gaugeOnMouseMove(e);\n }\n return false;\n };\n /**\n * To find the mouse move on pointer.\n * @param element\n */\n LinearGauge.prototype.moveOnPointer = function (element) {\n var current;\n var clientRect = this.element.getBoundingClientRect();\n var axis;\n var isPointer = false;\n var pointer;\n var top;\n var left;\n var pointerElement = getElement(element.id);\n var svgPath = pointerElement;\n var cursorStyle;\n var process;\n current = getPointer(element, this);\n axis = current.axis;\n pointer = current.pointer;\n if (pointer.enableDrag) {\n if (pointer.type === 'Bar') {\n if (this.orientation === 'Vertical') {\n top = pointerElement.getBoundingClientRect().top - clientRect.top;\n top = (!axis.isInversed) ? top : top + svgPath.getBBox().height;\n isPointer = !axis.isInversed ? (this.mouseY < (top + 10) && this.mouseY >= top) :\n (this.mouseY <= top && this.mouseY > (top - 10));\n cursorStyle = 'n-resize';\n }\n else {\n left = pointerElement.getBoundingClientRect().left - clientRect.left;\n left = (!axis.isInversed) ? left + svgPath.getBBox().width : left;\n isPointer = !axis.isInversed ? (this.mouseX > (left - 10) && this.mouseX <= left) :\n (this.mouseX >= left && this.mouseX < (left + 10));\n cursorStyle = 'e-resize';\n }\n }\n else {\n isPointer = true;\n cursorStyle = 'pointer';\n }\n }\n if (isPointer) {\n process = { pointer: isPointer, style: cursorStyle };\n }\n return process;\n };\n /**\n * @private\n * Handle the right click\n * @param event\n */\n LinearGauge.prototype.gaugeRightClick = function (event) {\n if (event.buttons === 2 || event.pointerType === 'touch') {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n return true;\n };\n /**\n * Handles the mouse leave.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.mouseLeave = function (e) {\n var parentNode;\n var args = this.getMouseArgs(e, 'touchmove', gaugeMouseLeave);\n if (!isNullOrUndefined(this.mouseElement)) {\n parentNode = this.element;\n parentNode.style.cursor = '';\n this.mouseElement = null;\n this.pointerDrag = false;\n }\n if (this.tooltip.enable && this.tooltipModule) {\n this.tooltipModule.ejTooltip.close();\n }\n return false;\n };\n /**\n * Handles the mouse move on gauge.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.gaugeOnMouseMove = function (e) {\n var current;\n if (this.pointerDrag) {\n current = getPointer(this.mouseElement, this);\n if (current.pointer.enableDrag && current.pointer.animationComplete) {\n this[current.pointer.type.toLowerCase() + 'Drag'](current.axis, current.pointer);\n }\n }\n return true;\n };\n /**\n * Handles the mouse up.\n * @return {boolean}\n * @private\n */\n LinearGauge.prototype.mouseEnd = function (e) {\n var _this = this;\n var parentNode;\n var tooltipInterval;\n var isTouch = e.pointerType === 'touch' || e.pointerType === '2' || e.type === 'touchend';\n var args = this.getMouseArgs(e, 'touchend', gaugeMouseUp);\n this.trigger(gaugeMouseUp, args);\n if (!isNullOrUndefined(this.mouseElement)) {\n parentNode = this.element;\n parentNode.style.cursor = '';\n this.mouseElement = null;\n this.pointerDrag = false;\n }\n if (!args.cancel && isTouch && this.tooltip.enable && this.tooltipModule) {\n if (args.target.id.indexOf('Pointer') >= 0) {\n this.tooltipModule.renderTooltip(args.target);\n tooltipInterval = setTimeout(function () {\n _this.tooltipModule.ejTooltip.close();\n }, 2000);\n }\n }\n return true;\n };\n /**\n * Handles the mouse event arguments.\n * @return {IMouseEventArgs}\n * @private\n */\n LinearGauge.prototype.getMouseArgs = function (e, type, name) {\n var rect = this.element.getBoundingClientRect();\n var location = new GaugeLocation(-rect.left, -rect.top);\n var isTouch = (e.type === type);\n location.x += isTouch ? e.changedTouches[0].clientX : e.clientX;\n location.y += isTouch ? e.changedTouches[0].clientY : e.clientY;\n return {\n cancel: false, name: name,\n model: this,\n x: location.x, y: location.y,\n target: isTouch ? e.target : e.target\n };\n };\n /**\n * @private\n * @param axis\n * @param pointer\n */\n LinearGauge.prototype.markerDrag = function (axis, pointer) {\n var options;\n var value = convertPixelToValue(this.element, this.mouseElement, this.orientation, axis, 'drag', new GaugeLocation(this.mouseX, this.mouseY));\n var process = withInRange(value, null, null, axis.visibleRange.max, axis.visibleRange.min, 'pointer');\n if (withInRange(value, null, null, axis.visibleRange.max, axis.visibleRange.min, 'pointer')) {\n this.triggerDragEvent(this.mouseElement);\n options = new PathOption('pointerID', pointer.color, pointer.border.width, pointer.border.color, pointer.opacity, null, null, '');\n if (this.orientation === 'Vertical') {\n pointer.bounds.y = this.mouseY;\n }\n else {\n pointer.bounds.x = this.mouseX;\n }\n pointer.currentValue = value;\n options = calculateShapes(pointer.bounds, pointer.markerType, new Size(pointer.width, pointer.height), pointer.imageUrl, options, this.orientation, axis, pointer);\n if (pointer.markerType === 'Image') {\n this.mouseElement.setAttribute('x', (pointer.bounds.x - (pointer.bounds.width / 2)).toString());\n this.mouseElement.setAttribute('y', (pointer.bounds.y - (pointer.bounds.height / 2)).toString());\n }\n else {\n this.mouseElement.setAttribute('d', options.d);\n }\n }\n };\n /**\n * @private\n * @param axis\n * @param pointer\n */\n LinearGauge.prototype.barDrag = function (axis, pointer) {\n var line = axis.lineBounds;\n var range = axis.visibleRange;\n var value1;\n var value2;\n var isDrag;\n var lineHeight = (this.orientation === 'Vertical') ? line.height : line.width;\n var lineY = (this.orientation === 'Vertical') ? line.y : line.x;\n var path;\n value1 = ((valueToCoefficient(range.min, axis, this.orientation, range) * lineHeight) + lineY);\n value2 = ((valueToCoefficient(range.max, axis, this.orientation, range) * lineHeight) + lineY);\n if (this.orientation === 'Vertical') {\n isDrag = (!axis.isInversed) ? (this.mouseY > value2 && this.mouseY < value1) : (this.mouseY > value1 && this.mouseY < value2);\n if (isDrag) {\n if (this.container.type === 'Normal') {\n if (!axis.isInversed) {\n this.mouseElement.setAttribute('y', this.mouseY.toString());\n }\n this.mouseElement.setAttribute('height', Math.abs(value1 - this.mouseY).toString());\n }\n else {\n if (!axis.isInversed) {\n pointer.bounds.y = this.mouseY;\n }\n pointer.bounds.height = Math.abs(value1 - this.mouseY);\n }\n }\n }\n else {\n isDrag = (!axis.isInversed) ? (this.mouseX > value1 && this.mouseX < value2) : (this.mouseX > value2 && this.mouseX < value1);\n if (isDrag) {\n if (this.container.type === 'Normal') {\n if (axis.isInversed) {\n this.mouseElement.setAttribute('x', this.mouseX.toString());\n }\n this.mouseElement.setAttribute('width', Math.abs(value1 - this.mouseX).toString());\n }\n else {\n if (axis.isInversed) {\n pointer.bounds.x = this.mouseX;\n }\n pointer.bounds.width = Math.abs(value1 - this.mouseX);\n }\n }\n }\n if (isDrag && this.mouseElement.tagName === 'path') {\n this.triggerDragEvent(this.mouseElement);\n path = getBox(pointer.bounds, this.container.type, this.orientation, new Size(pointer.bounds.width, pointer.bounds.height), 'bar', this.container.width, axis, pointer.roundedCornerRadius);\n this.mouseElement.setAttribute('d', path);\n }\n };\n /**\n * Triggers when drag the pointer\n * @param activeElement\n */\n LinearGauge.prototype.triggerDragEvent = function (activeElement) {\n var active = getPointer(this.mouseElement, this);\n var value = convertPixelToValue(this.element, this.mouseElement, this.orientation, active.axis, 'tooltip', null);\n var dragArgs = {\n name: 'valueChange',\n gauge: this,\n element: this.mouseElement,\n axisIndex: active.axisIndex,\n axis: active.axis,\n pointerIndex: active.pointerIndex,\n pointer: active.pointer,\n value: value\n };\n this.trigger(valueChange, dragArgs);\n };\n /**\n * To set the pointer value using this method\n * @param axisIndex\n * @param pointerIndex\n * @param value\n */\n LinearGauge.prototype.setPointerValue = function (axisIndex, pointerIndex, value) {\n var axis = this.axes[axisIndex];\n var pointer = axis.pointers[pointerIndex];\n var id = this.element.id + '_AxisIndex_' + axisIndex + '_' + pointer.type + 'Pointer_' + pointerIndex;\n var pointerElement = getElement(id);\n pointer.currentValue = value;\n if ((pointerElement !== null) && withInRange(pointer.currentValue, null, null, axis.visibleRange.max, axis.visibleRange.min, 'pointer')) {\n this.gaugeAxisLayoutPanel['calculate' + pointer.type + 'Bounds'](axisIndex, axis, pointerIndex, pointer);\n this.axisRenderer['draw' + pointer.type + 'Pointer'](axis, axisIndex, pointer, pointerIndex, pointerElement.parentElement);\n }\n };\n /**\n * To set the annotation value using this method.\n * @param annotationIndex\n * @param content\n */\n LinearGauge.prototype.setAnnotationValue = function (annotationIndex, content) {\n var elementExist = getElement(this.element.id + '_Annotation_' + annotationIndex) === null;\n var element = getElement(this.element.id + '_AnnotationsGroup') ||\n createElement('div', {\n id: this.element.id + '_AnnotationsGroup'\n });\n var annotation = this.annotations[annotationIndex];\n if (content !== null) {\n if (getElement(this.element.id + '_Annotation_' + annotationIndex)) {\n getElement(this.element.id + '_Annotation_' + annotationIndex).remove();\n }\n annotation.content = content;\n this.annotationsModule.createAnnotationTemplate(element, annotationIndex);\n if (!elementExist) {\n element.appendChild(getElement(this.element.id + '_Annotation_' + annotationIndex));\n }\n }\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n LinearGauge.prototype.requiredModules = function () {\n var modules = [];\n var annotationEnable = false;\n var tooltipEnable = false;\n this.annotations.map(function (annotation, index) {\n annotationEnable = annotation.content != null;\n });\n if (annotationEnable) {\n modules.push({\n member: 'Annotations',\n args: [this, Annotations]\n });\n }\n if (this.tooltip.enable) {\n modules.push({\n member: 'Tooltip',\n args: [this, GaugeTooltip]\n });\n }\n return modules;\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n LinearGauge.prototype.getPersistData = function () {\n var keyEntity = ['loaded'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Get component name\n */\n LinearGauge.prototype.getModuleName = function () {\n return 'lineargauge';\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n LinearGauge.prototype.onPropertyChanged = function (newProp, oldProp) {\n var renderer = false;\n var refreshBounds = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'height':\n case 'width':\n case 'margin':\n this.createSvg();\n refreshBounds = true;\n break;\n case 'title':\n refreshBounds = (newProp.title === '' || oldProp.title === '');\n renderer = !(newProp.title === '' || oldProp.title === '');\n break;\n case 'titleStyle':\n if (newProp.titleStyle && newProp.titleStyle.size) {\n refreshBounds = true;\n }\n else {\n renderer = true;\n }\n break;\n case 'border':\n renderer = true;\n break;\n case 'background':\n renderer = true;\n break;\n case 'container':\n refreshBounds = true;\n break;\n }\n }\n if (!refreshBounds && renderer) {\n this.removeSvg();\n this.renderGaugeElements();\n this.renderAxisElements();\n }\n if (refreshBounds) {\n this.createSvg();\n this.renderGaugeElements();\n this.calculateBounds();\n this.renderAxisElements();\n }\n };\n __decorate([\n Property(null)\n ], LinearGauge.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], LinearGauge.prototype, \"height\", void 0);\n __decorate([\n Property('Vertical')\n ], LinearGauge.prototype, \"orientation\", void 0);\n __decorate([\n Complex({}, Margin)\n ], LinearGauge.prototype, \"margin\", void 0);\n __decorate([\n Complex({ color: '', width: 0 }, Border)\n ], LinearGauge.prototype, \"border\", void 0);\n __decorate([\n Property('transparent')\n ], LinearGauge.prototype, \"background\", void 0);\n __decorate([\n Property('')\n ], LinearGauge.prototype, \"title\", void 0);\n __decorate([\n Complex({ size: '15px', color: null }, Font)\n ], LinearGauge.prototype, \"titleStyle\", void 0);\n __decorate([\n Complex({}, Container)\n ], LinearGauge.prototype, \"container\", void 0);\n __decorate([\n Collection([{}], Axis)\n ], LinearGauge.prototype, \"axes\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], LinearGauge.prototype, \"tooltip\", void 0);\n __decorate([\n Collection([{}], Annotation)\n ], LinearGauge.prototype, \"annotations\", void 0);\n __decorate([\n Property([])\n ], LinearGauge.prototype, \"rangePalettes\", void 0);\n __decorate([\n Property(false)\n ], LinearGauge.prototype, \"useGroupingSeparator\", void 0);\n __decorate([\n Property(null)\n ], LinearGauge.prototype, \"description\", void 0);\n __decorate([\n Property(1)\n ], LinearGauge.prototype, \"tabIndex\", void 0);\n __decorate([\n Property('Material')\n ], LinearGauge.prototype, \"theme\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"axisLabelRender\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"annotationRender\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"gaugeMouseMove\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"gaugeMouseLeave\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"gaugeMouseDown\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"gaugeMouseUp\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"valueChange\", void 0);\n __decorate([\n Event()\n ], LinearGauge.prototype, \"resized\", void 0);\n LinearGauge = __decorate([\n NotifyPropertyChanges\n ], LinearGauge);\n return LinearGauge;\n}(Component));\nexport { LinearGauge };\n","import * as index from '@syncfusion/ej2-lineargauge';\nindex.LinearGauge.Inject( index.GaugeTooltip,index.Annotations);\nexport * from '@syncfusion/ej2-lineargauge';\n","/**\n * Specifies Maps Themes\n */\nexport var Theme;\n(function (Theme) {\n /** @private */\n Theme.mapsTitleFont = {\n size: '14px',\n fontWeight: 'Medium',\n color: '#424242',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n Theme.mapsSubTitleFont = {\n size: '13px',\n fontWeight: 'Medium',\n color: '#424242',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n Theme.tooltipLabelFont = {\n size: '12px',\n fontWeight: 'Regular',\n color: '#FFFFFF',\n fontStyle: 'Regular',\n fontFamily: 'Roboto'\n };\n /** @private */\n Theme.legendTitleFont = {\n size: '14px',\n fontWeight: 'Regular',\n color: '#757575',\n fontStyle: 'Regular',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n Theme.legendLabelFont = {\n size: '13px',\n fontWeight: 'Medium',\n color: '#757575',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n Theme.dataLabelFont = {\n size: '12px',\n fontWeight: 'Medium',\n color: '#000000',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n})(Theme || (Theme = {}));\nexport var FabricTheme;\n(function (FabricTheme) {\n /** @private */\n FabricTheme.mapsTitleFont = {\n size: '14px',\n fontWeight: 'Semibold',\n color: '#424242',\n fontStyle: 'Semibold',\n fontFamily: 'SegoeUI, Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n FabricTheme.mapsSubTitleFont = {\n size: '13px',\n fontWeight: 'Regular',\n color: '#424242',\n fontStyle: 'Regular',\n fontFamily: 'SegoeUI, Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n FabricTheme.tooltipLabelFont = {\n size: '12px',\n fontWeight: 'Regular',\n color: '#FFFFFF',\n fontStyle: 'Regular',\n fontFamily: 'Roboto'\n };\n /** @private */\n FabricTheme.legendTitleFont = {\n size: '14px',\n fontWeight: 'Regular',\n color: '#757575',\n fontStyle: 'Regular',\n fontFamily: 'SegoeUI, Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n FabricTheme.legendLabelFont = {\n size: '13px',\n fontWeight: 'Medium',\n color: '#757575',\n fontStyle: 'Medium',\n fontFamily: 'SegoeUI, Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n FabricTheme.dataLabelFont = {\n size: '12px',\n fontWeight: 'Medium',\n color: '#000000',\n fontStyle: 'Medium',\n fontFamily: 'SegoeUI, Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n})(FabricTheme || (FabricTheme = {}));\nexport var BootstrapTheme;\n(function (BootstrapTheme) {\n /** @private */\n BootstrapTheme.mapsTitleFont = {\n size: '14px',\n fontWeight: 'Semibold',\n color: '#424242',\n fontStyle: 'Semibold',\n fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n BootstrapTheme.mapsSubTitleFont = {\n size: '13px',\n fontWeight: 'Regular',\n color: '#424242',\n fontStyle: 'Regular',\n fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n BootstrapTheme.tooltipLabelFont = {\n size: '12px',\n fontWeight: 'Regular',\n color: '#FFFFFF',\n fontStyle: 'Regular',\n fontFamily: 'Roboto'\n };\n /** @private */\n BootstrapTheme.legendTitleFont = {\n size: '14px',\n fontWeight: 'Regular',\n color: '#757575',\n fontStyle: 'Regular',\n fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n BootstrapTheme.legendLabelFont = {\n size: '13px',\n fontWeight: 'Medium',\n color: '#757575',\n fontStyle: 'Medium',\n fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n /** @private */\n BootstrapTheme.dataLabelFont = {\n size: '12px',\n fontWeight: 'Medium',\n color: '#000000',\n fontStyle: 'Medium',\n fontFamily: 'Helvetica Neue, Helvetica, Arial, sans-serif'\n };\n})(BootstrapTheme || (BootstrapTheme = {}));\n/**\n * Internal use of Method to getting colors based on themes.\n * @private\n * @param theme\n */\nexport function getShapeColor(theme) {\n return ['#B5E485', '#7BC1E8', '#DF819C', '#EC9B79', '#78D0D3',\n '#D6D572', '#9178E3', '#A1E5B4', '#87A4B4', '#E4C16C'];\n}\n/**\n * HighContrast Theme configuration\n */\nexport var HighContrastTheme;\n(function (HighContrastTheme) {\n /** @private */\n HighContrastTheme.mapsTitleFont = {\n size: '14px',\n fontWeight: 'Medium',\n color: '#FFFFFF',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n HighContrastTheme.mapsSubTitleFont = {\n size: '13px',\n fontWeight: 'Medium',\n color: '#FFFFFF',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n HighContrastTheme.tooltipLabelFont = {\n size: '12px',\n fontWeight: 'Regular',\n color: '#FFFFFF',\n fontStyle: 'Regular',\n fontFamily: 'Roboto'\n };\n /** @private */\n HighContrastTheme.legendTitleFont = {\n size: '14px',\n fontWeight: 'Regular',\n color: '#FFFFFF',\n fontStyle: 'Regular',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n HighContrastTheme.legendLabelFont = {\n size: '13px',\n fontWeight: 'Medium',\n color: '#FFFFFF',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n /** @private */\n HighContrastTheme.dataLabelFont = {\n size: '12px',\n fontWeight: 'Medium',\n color: '#000000',\n fontStyle: 'Medium',\n fontFamily: 'Roboto, Noto, Sans-serif'\n };\n})(HighContrastTheme || (HighContrastTheme = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Maps base doc\n */\nimport { Property, ChildProperty, Complex, Collection } from '@syncfusion/ej2-base';\nimport { Theme } from './theme';\nimport { Point } from '../utils/helper';\n/**\n * Options for customizing the annotation.\n */\nvar Annotation = /** @class */ (function (_super) {\n __extends(Annotation, _super);\n function Annotation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Annotation.prototype, \"content\", void 0);\n __decorate([\n Property('0px')\n ], Annotation.prototype, \"x\", void 0);\n __decorate([\n Property('0px')\n ], Annotation.prototype, \"y\", void 0);\n __decorate([\n Property('None')\n ], Annotation.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property('None')\n ], Annotation.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('-1')\n ], Annotation.prototype, \"zIndex\", void 0);\n return Annotation;\n}(ChildProperty));\nexport { Annotation };\nvar Arrow = /** @class */ (function (_super) {\n __extends(Arrow, _super);\n function Arrow() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Start')\n ], Arrow.prototype, \"position\", void 0);\n __decorate([\n Property('false')\n ], Arrow.prototype, \"showArrow\", void 0);\n __decorate([\n Property(2)\n ], Arrow.prototype, \"size\", void 0);\n __decorate([\n Property('black')\n ], Arrow.prototype, \"color\", void 0);\n __decorate([\n Property(0)\n ], Arrow.prototype, \"offSet\", void 0);\n return Arrow;\n}(ChildProperty));\nexport { Arrow };\n/**\n * Configures the fonts in maps.\n */\nvar Font = /** @class */ (function (_super) {\n __extends(Font, _super);\n function Font() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Font.prototype, \"size\", void 0);\n __decorate([\n Property(null)\n ], Font.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], Font.prototype, \"fontFamily\", void 0);\n __decorate([\n Property(null)\n ], Font.prototype, \"fontWeight\", void 0);\n __decorate([\n Property(null)\n ], Font.prototype, \"fontStyle\", void 0);\n __decorate([\n Property(1)\n ], Font.prototype, \"opacity\", void 0);\n return Font;\n}(ChildProperty));\nexport { Font };\n/**\n * Configures the borders in the maps.\n */\nvar Border = /** @class */ (function (_super) {\n __extends(Border, _super);\n function Border() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Border.prototype, \"color\", void 0);\n __decorate([\n Property(0)\n ], Border.prototype, \"width\", void 0);\n return Border;\n}(ChildProperty));\nexport { Border };\n/**\n * To configure the tooltip settings of the maps.\n */\nvar TooltipSettings = /** @class */ (function (_super) {\n __extends(TooltipSettings, _super);\n function TooltipSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], TooltipSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('')\n ], TooltipSettings.prototype, \"template\", void 0);\n __decorate([\n Property('#363F4C')\n ], TooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 1 }, Border)\n ], TooltipSettings.prototype, \"border\", void 0);\n __decorate([\n Complex(Theme.tooltipLabelFont, Font)\n ], TooltipSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"valuePath\", void 0);\n return TooltipSettings;\n}(ChildProperty));\nexport { TooltipSettings };\n/**\n * Configures the maps margins.\n */\nvar Margin = /** @class */ (function (_super) {\n __extends(Margin, _super);\n function Margin() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(10)\n ], Margin.prototype, \"left\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"right\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"top\", void 0);\n __decorate([\n Property(10)\n ], Margin.prototype, \"bottom\", void 0);\n return Margin;\n}(ChildProperty));\nexport { Margin };\n/**\n * To configure ColorMapping in Maps\n */\nvar ColorMappingSettings = /** @class */ (function (_super) {\n __extends(ColorMappingSettings, _super);\n function ColorMappingSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ColorMappingSettings.prototype, \"from\", void 0);\n __decorate([\n Property(null)\n ], ColorMappingSettings.prototype, \"to\", void 0);\n __decorate([\n Property(null)\n ], ColorMappingSettings.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], ColorMappingSettings.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], ColorMappingSettings.prototype, \"label\", void 0);\n return ColorMappingSettings;\n}(ChildProperty));\nexport { ColorMappingSettings };\n/**\n * To configure the selection settings\n */\nvar SelectionSettings = /** @class */ (function (_super) {\n __extends(SelectionSettings, _super);\n function SelectionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"enable\", void 0);\n __decorate([\n Property('#D2691E')\n ], SelectionSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], SelectionSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(false)\n ], SelectionSettings.prototype, \"enableMultiSelect\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 0 }, Border)\n ], SelectionSettings.prototype, \"border\", void 0);\n return SelectionSettings;\n}(ChildProperty));\nexport { SelectionSettings };\n/**\n * To configure the highlight settings\n */\nvar HighlightSettings = /** @class */ (function (_super) {\n __extends(HighlightSettings, _super);\n function HighlightSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#6B8E23')\n ], HighlightSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(false)\n ], HighlightSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(1)\n ], HighlightSettings.prototype, \"opacity\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 0 }, Border)\n ], HighlightSettings.prototype, \"border\", void 0);\n return HighlightSettings;\n}(ChildProperty));\nexport { HighlightSettings };\n/**\n * NavigationSelectedLine\n */\nvar NavigationLineSettings = /** @class */ (function (_super) {\n __extends(NavigationLineSettings, _super);\n function NavigationLineSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], NavigationLineSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(1)\n ], NavigationLineSettings.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], NavigationLineSettings.prototype, \"longitude\", void 0);\n __decorate([\n Property(null)\n ], NavigationLineSettings.prototype, \"latitude\", void 0);\n __decorate([\n Property('')\n ], NavigationLineSettings.prototype, \"dashArray\", void 0);\n __decorate([\n Property('black')\n ], NavigationLineSettings.prototype, \"color\", void 0);\n __decorate([\n Property(0)\n ], NavigationLineSettings.prototype, \"angle\", void 0);\n __decorate([\n Complex({ showArrow: false, position: 'Start', size: 5, color: 'black' }, Arrow)\n ], NavigationLineSettings.prototype, \"arrowSettings\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], NavigationLineSettings.prototype, \"selectionSettings\", void 0);\n __decorate([\n Complex({}, HighlightSettings)\n ], NavigationLineSettings.prototype, \"highlightSettings\", void 0);\n return NavigationLineSettings;\n}(ChildProperty));\nexport { NavigationLineSettings };\n/**\n * Bubble settings model class\n */\nvar BubbleSettings = /** @class */ (function (_super) {\n __extends(BubbleSettings, _super);\n function BubbleSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({}, Border)\n ], BubbleSettings.prototype, \"border\", void 0);\n __decorate([\n Property(false)\n ], BubbleSettings.prototype, \"visible\", void 0);\n __decorate([\n Property([])\n ], BubbleSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Property(1000)\n ], BubbleSettings.prototype, \"animationDuration\", void 0);\n __decorate([\n Property(0)\n ], BubbleSettings.prototype, \"animationDelay\", void 0);\n __decorate([\n Property('')\n ], BubbleSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(10)\n ], BubbleSettings.prototype, \"minRadius\", void 0);\n __decorate([\n Property(20)\n ], BubbleSettings.prototype, \"maxRadius\", void 0);\n __decorate([\n Property(1)\n ], BubbleSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(null)\n ], BubbleSettings.prototype, \"valuePath\", void 0);\n __decorate([\n Property('Circle')\n ], BubbleSettings.prototype, \"bubbleType\", void 0);\n __decorate([\n Property(null)\n ], BubbleSettings.prototype, \"colorValuePath\", void 0);\n __decorate([\n Collection([], ColorMappingSettings)\n ], BubbleSettings.prototype, \"colorMapping\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], BubbleSettings.prototype, \"tooltipSettings\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], BubbleSettings.prototype, \"selectionSettings\", void 0);\n __decorate([\n Complex({}, HighlightSettings)\n ], BubbleSettings.prototype, \"highlightSettings\", void 0);\n return BubbleSettings;\n}(ChildProperty));\nexport { BubbleSettings };\n/**\n * To configure title of the maps.\n */\nvar CommonTitleSettings = /** @class */ (function (_super) {\n __extends(CommonTitleSettings, _super);\n function CommonTitleSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], CommonTitleSettings.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], CommonTitleSettings.prototype, \"description\", void 0);\n return CommonTitleSettings;\n}(ChildProperty));\nexport { CommonTitleSettings };\n/**\n * To configure subtitle of the maps.\n */\nvar SubTitleSettings = /** @class */ (function (_super) {\n __extends(SubTitleSettings, _super);\n function SubTitleSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({}, Font)\n ], SubTitleSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property('Center')\n ], SubTitleSettings.prototype, \"alignment\", void 0);\n return SubTitleSettings;\n}(CommonTitleSettings));\nexport { SubTitleSettings };\n/**\n * To configure title of the maps.\n */\nvar TitleSettings = /** @class */ (function (_super) {\n __extends(TitleSettings, _super);\n function TitleSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({}, Font)\n ], TitleSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property('Center')\n ], TitleSettings.prototype, \"alignment\", void 0);\n __decorate([\n Complex({}, SubTitleSettings)\n ], TitleSettings.prototype, \"subtitleSettings\", void 0);\n return TitleSettings;\n}(CommonTitleSettings));\nexport { TitleSettings };\n/**\n * Options to configure maps Zooming Settings.\n */\nvar ZoomSettings = /** @class */ (function (_super) {\n __extends(ZoomSettings, _super);\n function ZoomSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"enable\", void 0);\n __decorate([\n Property('Horizontal')\n ], ZoomSettings.prototype, \"toolBarOrientation\", void 0);\n __decorate([\n Property('#737373')\n ], ZoomSettings.prototype, \"color\", void 0);\n __decorate([\n Property('#e61576')\n ], ZoomSettings.prototype, \"highlightColor\", void 0);\n __decorate([\n Property('#e61576')\n ], ZoomSettings.prototype, \"selectionColor\", void 0);\n __decorate([\n Property('Far')\n ], ZoomSettings.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Near')\n ], ZoomSettings.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property(['ZoomIn', 'ZoomOut', 'Reset'])\n ], ZoomSettings.prototype, \"toolbars\", void 0);\n __decorate([\n Property(true)\n ], ZoomSettings.prototype, \"mouseWheelZoom\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"doubleClickZoom\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"pinchZooming\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"zoomOnClick\", void 0);\n __decorate([\n Property(1)\n ], ZoomSettings.prototype, \"zoomFactor\", void 0);\n __decorate([\n Property(10)\n ], ZoomSettings.prototype, \"maxZoom\", void 0);\n __decorate([\n Property(1)\n ], ZoomSettings.prototype, \"minZoom\", void 0);\n return ZoomSettings;\n}(ChildProperty));\nexport { ZoomSettings };\n/**\n * Configures the legend settings.\n */\nvar LegendSettings = /** @class */ (function (_super) {\n __extends(LegendSettings, _super);\n function LegendSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], LegendSettings.prototype, \"toggleVisibility\", void 0);\n __decorate([\n Property(false)\n ], LegendSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('transparent')\n ], LegendSettings.prototype, \"background\", void 0);\n __decorate([\n Property('Layers')\n ], LegendSettings.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], LegendSettings.prototype, \"invertedPointer\", void 0);\n __decorate([\n Property('After')\n ], LegendSettings.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('None')\n ], LegendSettings.prototype, \"labelDisplayMode\", void 0);\n __decorate([\n Property('Circle')\n ], LegendSettings.prototype, \"shape\", void 0);\n __decorate([\n Property('')\n ], LegendSettings.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], LegendSettings.prototype, \"height\", void 0);\n __decorate([\n Complex({}, Font)\n ], LegendSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(15)\n ], LegendSettings.prototype, \"shapeWidth\", void 0);\n __decorate([\n Property(15)\n ], LegendSettings.prototype, \"shapeHeight\", void 0);\n __decorate([\n Property(10)\n ], LegendSettings.prototype, \"shapePadding\", void 0);\n __decorate([\n Complex({ color: '#000000', width: 0 }, Border)\n ], LegendSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ color: '#000000', width: 0 }, Border)\n ], LegendSettings.prototype, \"shapeBorder\", void 0);\n __decorate([\n Complex({}, CommonTitleSettings)\n ], LegendSettings.prototype, \"title\", void 0);\n __decorate([\n Complex({}, Font)\n ], LegendSettings.prototype, \"titleStyle\", void 0);\n __decorate([\n Property('Bottom')\n ], LegendSettings.prototype, \"position\", void 0);\n __decorate([\n Property('Center')\n ], LegendSettings.prototype, \"alignment\", void 0);\n __decorate([\n Property('None')\n ], LegendSettings.prototype, \"orientation\", void 0);\n __decorate([\n Property({ x: 0, y: 0 })\n ], LegendSettings.prototype, \"location\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"fill\", void 0);\n __decorate([\n Property('Default')\n ], LegendSettings.prototype, \"mode\", void 0);\n return LegendSettings;\n}(ChildProperty));\nexport { LegendSettings };\n/**\n * Customization for Data label settings.\n */\nvar DataLabelSettings = /** @class */ (function (_super) {\n __extends(DataLabelSettings, _super);\n function DataLabelSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], DataLabelSettings.prototype, \"visible\", void 0);\n __decorate([\n Complex({ width: 0, color: 'transparent' }, Border)\n ], DataLabelSettings.prototype, \"border\", void 0);\n __decorate([\n Property('black')\n ], DataLabelSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], DataLabelSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(5)\n ], DataLabelSettings.prototype, \"rx\", void 0);\n __decorate([\n Property(5)\n ], DataLabelSettings.prototype, \"ry\", void 0);\n __decorate([\n Complex({}, Font)\n ], DataLabelSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property('')\n ], DataLabelSettings.prototype, \"labelPath\", void 0);\n __decorate([\n Property('None')\n ], DataLabelSettings.prototype, \"smartLabelMode\", void 0);\n __decorate([\n Property('None')\n ], DataLabelSettings.prototype, \"intersectionAction\", void 0);\n __decorate([\n Property('')\n ], DataLabelSettings.prototype, \"template\", void 0);\n return DataLabelSettings;\n}(ChildProperty));\nexport { DataLabelSettings };\n/**\n * To configure the shapeSettings in the maps.\n */\nvar ShapeSettings = /** @class */ (function (_super) {\n __extends(ShapeSettings, _super);\n function ShapeSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#A6A6A6')\n ], ShapeSettings.prototype, \"fill\", void 0);\n __decorate([\n Property([])\n ], ShapeSettings.prototype, \"palette\", void 0);\n __decorate([\n Property(5)\n ], ShapeSettings.prototype, \"circleRadius\", void 0);\n __decorate([\n Complex({ width: 0, color: '#000000' }, Border)\n ], ShapeSettings.prototype, \"border\", void 0);\n __decorate([\n Property('')\n ], ShapeSettings.prototype, \"dashArray\", void 0);\n __decorate([\n Property(1)\n ], ShapeSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(null)\n ], ShapeSettings.prototype, \"colorValuePath\", void 0);\n __decorate([\n Property(null)\n ], ShapeSettings.prototype, \"valuePath\", void 0);\n __decorate([\n Collection([], ColorMappingSettings)\n ], ShapeSettings.prototype, \"colorMapping\", void 0);\n __decorate([\n Property(false)\n ], ShapeSettings.prototype, \"autofill\", void 0);\n return ShapeSettings;\n}(ChildProperty));\nexport { ShapeSettings };\n/**\n * To configure the marker settings for the maps.\n */\nvar MarkerSettings = /** @class */ (function (_super) {\n __extends(MarkerSettings, _super);\n function MarkerSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ color: 'transparent', width: 1 }, Border)\n ], MarkerSettings.prototype, \"border\", void 0);\n __decorate([\n Property(null)\n ], MarkerSettings.prototype, \"dashArray\", void 0);\n __decorate([\n Property(false)\n ], MarkerSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('#FF471A')\n ], MarkerSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(10)\n ], MarkerSettings.prototype, \"height\", void 0);\n __decorate([\n Property(10)\n ], MarkerSettings.prototype, \"width\", void 0);\n __decorate([\n Property(1)\n ], MarkerSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property('Balloon')\n ], MarkerSettings.prototype, \"shape\", void 0);\n __decorate([\n Property('')\n ], MarkerSettings.prototype, \"legendText\", void 0);\n __decorate([\n Property(new Point(0, 0))\n ], MarkerSettings.prototype, \"offset\", void 0);\n __decorate([\n Property('')\n ], MarkerSettings.prototype, \"imageUrl\", void 0);\n __decorate([\n Property(null)\n ], MarkerSettings.prototype, \"template\", void 0);\n __decorate([\n Property([])\n ], MarkerSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], MarkerSettings.prototype, \"tooltipSettings\", void 0);\n __decorate([\n Property(1000)\n ], MarkerSettings.prototype, \"animationDuration\", void 0);\n __decorate([\n Property(0)\n ], MarkerSettings.prototype, \"animationDelay\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], MarkerSettings.prototype, \"selectionSettings\", void 0);\n __decorate([\n Complex({}, HighlightSettings)\n ], MarkerSettings.prototype, \"highlightSettings\", void 0);\n return MarkerSettings;\n}(ChildProperty));\nexport { MarkerSettings };\n/**\n * To configure the layers of the maps.\n */\nvar LayerSettings = /** @class */ (function (_super) {\n __extends(LayerSettings, _super);\n function LayerSettings() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.isBaseLayer = false;\n return _this;\n }\n __decorate([\n Property(null)\n ], LayerSettings.prototype, \"shapeData\", void 0);\n __decorate([\n Property()\n ], LayerSettings.prototype, \"query\", void 0);\n __decorate([\n Complex({}, ShapeSettings)\n ], LayerSettings.prototype, \"shapeSettings\", void 0);\n __decorate([\n Property([])\n ], LayerSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Property('Layer')\n ], LayerSettings.prototype, \"type\", void 0);\n __decorate([\n Property('Geographic')\n ], LayerSettings.prototype, \"geometryType\", void 0);\n __decorate([\n Property('Aerial')\n ], LayerSettings.prototype, \"bingMapType\", void 0);\n __decorate([\n Property('')\n ], LayerSettings.prototype, \"key\", void 0);\n __decorate([\n Property('Geometry')\n ], LayerSettings.prototype, \"layerType\", void 0);\n __decorate([\n Property('http://a.tile.openstreetmap.org/level/tileX/tileY.png')\n ], LayerSettings.prototype, \"urlTemplate\", void 0);\n __decorate([\n Property(true)\n ], LayerSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('name')\n ], LayerSettings.prototype, \"shapeDataPath\", void 0);\n __decorate([\n Property('name')\n ], LayerSettings.prototype, \"shapePropertyPath\", void 0);\n __decorate([\n Property(0)\n ], LayerSettings.prototype, \"animationDuration\", void 0);\n __decorate([\n Collection([], MarkerSettings)\n ], LayerSettings.prototype, \"markerSettings\", void 0);\n __decorate([\n Complex({}, DataLabelSettings)\n ], LayerSettings.prototype, \"dataLabelSettings\", void 0);\n __decorate([\n Collection([], BubbleSettings)\n ], LayerSettings.prototype, \"bubbleSettings\", void 0);\n __decorate([\n Collection([], NavigationLineSettings)\n ], LayerSettings.prototype, \"navigationLineSettings\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], LayerSettings.prototype, \"tooltipSettings\", void 0);\n __decorate([\n Complex({}, SelectionSettings)\n ], LayerSettings.prototype, \"selectionSettings\", void 0);\n __decorate([\n Complex({}, HighlightSettings)\n ], LayerSettings.prototype, \"highlightSettings\", void 0);\n return LayerSettings;\n}(ChildProperty));\nexport { LayerSettings };\n/**\n * Internal use for bing type layer rendering\n */\nvar Tile = /** @class */ (function () {\n function Tile(x, y, height, width, top, left, src) {\n if (height === void 0) { height = 256; }\n if (width === void 0) { width = 256; }\n if (top === void 0) { top = 0; }\n if (left === void 0) { left = 0; }\n if (src === void 0) { src = null; }\n this.x = x;\n this.y = y;\n this.top = top;\n this.left = left;\n this.height = height;\n this.width = width;\n this.src = src;\n }\n return Tile;\n}());\nexport { Tile };\n/**\n * Maps area configuration\n */\nvar MapsAreaSettings = /** @class */ (function (_super) {\n __extends(MapsAreaSettings, _super);\n function MapsAreaSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('transparent')\n ], MapsAreaSettings.prototype, \"background\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 1 }, Border)\n ], MapsAreaSettings.prototype, \"border\", void 0);\n return MapsAreaSettings;\n}(ChildProperty));\nexport { MapsAreaSettings };\n","/**\n * Maps constants doc\n */\n/**\n * Specifies maps load event name.\n * @private\n */\nexport var load = 'load';\n/**\n * Specifies maps loaded event name.\n * @private\n */\nexport var loaded = 'loaded';\n/**\n * Specifies maps click event name.\n * @private\n */\nexport var click = 'click';\n/**\n * Specifies maps loaded event name.\n * @private\n */\nexport var rightClick = 'rightClick';\n/**\n * Specifies maps double click event name.\n * @private\n */\nexport var doubleClick = 'doubleClick';\n/**\n * Specifies maps resize event name.\n * @private\n */\nexport var resize = 'resize';\n/**\n * Specifies the map tooltip render event\n */\nexport var tooltipRender = 'tooltipRender';\n/**\n * Specifies the map shapeSelected event\n */\nexport var shapeSelected = 'shapeSelected';\n/**\n * Specifies the map shapeHighlight event\n */\nexport var shapeHighlight = 'shapeHighlight';\n/**\n * Specifies maps mousemove event name.\n * @private\n */\nexport var mousemove = 'mousemove';\n/**\n * Specifies maps mouseup event name.\n * @private\n */\nexport var mouseup = 'mouseup';\n/**\n * Specifies maps mousedown event name.\n * @private\n */\nexport var mousedown = 'mousedown';\n/**\n * Specifies maps layerRendering event name.\n * @private\n */\nexport var layerRendering = 'layerRendering';\n/**\n * Specifies maps shapeRendering event name.\n * @private\n */\nexport var shapeRendering = 'shapeRendering';\n/**\n * Specifies maps markerRendering event name.\n * @private\n */\nexport var markerRendering = 'markerRendering';\n/**\n * Specifies maps markerClick event name.\n * @private\n */\nexport var markerClick = 'markerClick';\n/**\n * Specifies maps markerMouseMove event name.\n * @private\n */\nexport var markerMouseMove = 'markerMouseMove';\n/**\n * Specifies maps dataLabelRendering event name.\n * @private\n */\nexport var dataLabelRendering = 'dataLabelRendering';\n/**\n * Specifies maps bubbleRendering event name.\n * @private\n */\nexport var bubbleRendering = 'bubbleRendering';\n/**\n * Specifies maps bubbleClick event name.\n * @private\n */\nexport var bubbleClick = 'bubbleClick';\n/**\n * Specifies maps bubbleMouseMove event name.\n * @private\n */\nexport var bubbleMouseMove = 'bubbleMouseMove';\n/**\n * Specifies maps animationComplete event name.\n * @private\n */\nexport var animationComplete = 'animationComplete';\n/**\n * Specifies maps legendRendering event name.\n * @private\n */\nexport var legendRendering = 'legendRendering';\n/**\n * Specifies maps annotationRendering event name.\n * @private\n */\nexport var annotationRendering = 'annotationRendering';\n/**\n * Specifies maps itemSelection event name\n * @private\n */\nexport var itemSelection = 'itemSelection';\n/**\n * Specifies maps itemHighlight event name\n */\nexport var itemHighlight = 'itemHighlight';\n/**\n * Specifies maps beforePrint event name\n */\nexport var beforePrint = 'beforePrint';\n","/**\n * Bing map src doc\n */\nvar BingMap = /** @class */ (function () {\n function BingMap(maps) {\n this.maps = maps;\n }\n BingMap.prototype.getBingMap = function (tile, key, type, language) {\n var quadKey = '';\n for (var i = this.maps.tileZoomLevel; i > 0; i--) {\n var digit = 0;\n var mask = 1 << (i - 1);\n if ((tile.x & mask) !== 0) {\n digit++;\n }\n if ((tile.y & mask) !== 0) {\n digit += 2;\n }\n quadKey = quadKey + '' + digit;\n }\n var layerType = '';\n if (type === 'Aerial') {\n layerType = 'A,G';\n }\n else if (type === 'AerialWithLabel') {\n layerType = 'A,G,L';\n }\n else {\n layerType = 'G,VE,BX,L,LA';\n }\n return 'http://ak.dynamic.t2.tiles.virtualearth.net/comp/ch/' + quadKey + '?mkt=' + language + '&ur=IN&it=' + layerType +\n '&shading=hill&og=45&n=z&Key=' + key;\n };\n return BingMap;\n}());\nexport { BingMap };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * ColorMapping class\n */\nvar ColorMapping = /** @class */ (function () {\n function ColorMapping(maps) {\n this.maps = maps;\n }\n /**\n * To get color based on shape settings.\n * @private\n */\n ColorMapping.prototype.getShapeColorMapping = function (shapeSettings, layerData, color) {\n var colorValuePath = shapeSettings.colorValuePath ? shapeSettings.colorValuePath : shapeSettings.valuePath;\n var equalValue = layerData[colorValuePath];\n var colorValue = Number(equalValue);\n var shapeColor = this.getColorByValue(shapeSettings.colorMapping, colorValue, equalValue);\n return shapeColor ? shapeColor : color;\n };\n /**\n * To color by value and color mapping\n */\n ColorMapping.prototype.getColorByValue = function (colorMapping, colorValue, equalValue) {\n if (isNaN(colorValue) && isNullOrUndefined(equalValue)) {\n return null;\n }\n var fill = '';\n for (var _i = 0, colorMapping_1 = colorMapping; _i < colorMapping_1.length; _i++) {\n var colorMap = colorMapping_1[_i];\n if ((colorMap.from && colorMap.to && (colorValue >= colorMap.from && colorValue <= colorMap.to)) ||\n (colorMap.value === equalValue)) {\n fill = colorMap.color;\n }\n }\n return fill || ((!colorMapping.length) ? equalValue : null);\n };\n return ColorMapping;\n}());\nexport { ColorMapping };\n","import { isNullOrUndefined, extend, createElement, Ajax } from '@syncfusion/ej2-base';\nimport { getShapeColor } from '../model/theme';\nimport { GeoLocation, isCustomPath, convertGeoToPoint, Point, PathOption, Size, PolylineOption, getElementByID } from '../utils/helper';\nimport { MapLocation, RectOption, getTranslate, convertTileLatLongToPoint, checkShapeDataFields, CircleOption } from '../utils/helper';\nimport { Tile } from '../model/base';\nimport { BingMap } from './bing-map';\nimport { ColorMapping } from './color-mapping';\nimport { layerRendering, shapeRendering } from '../index';\n/**\n * To calculate and render the shape layer\n */\nvar LayerPanel = /** @class */ (function () {\n function LayerPanel(map) {\n this.tileTranslatePoint = new MapLocation(0, 0);\n this.isMapCoordinates = true;\n this.ajaxProcessCount = 0;\n this.mapObject = map;\n this.ajaxModule = new Ajax();\n this.ajaxResponse = [];\n }\n /* tslint:disable:no-string-literal */\n LayerPanel.prototype.measureLayerPanel = function () {\n var _this = this;\n var imageSize = 30;\n var layerCollection = this.mapObject.layersCollection;\n var areaRect = this.mapObject.mapAreaRect;\n var padding = 10;\n var secondaryEle = getElementByID(this.mapObject.element.id + '_Secondary_Element');\n if (this.mapObject.isTileMap && secondaryEle) {\n this.tileSvgObject = this.mapObject.renderer.createSvg({\n id: this.mapObject.element.id + '_Tile_SVG', width: areaRect.width,\n height: areaRect.height,\n style: 'pointer-events:none'\n });\n secondaryEle.appendChild(this.tileSvgObject);\n }\n this.layerGroup = (this.mapObject.renderer.createGroup({\n id: this.mapObject.element.id + '_Layer_Collections',\n 'clip-path': 'url(#' + this.mapObject.element.id + '_MapArea_ClipRect)'\n }));\n this.clipRectElement = this.mapObject.renderer.drawClipPath(new RectOption(this.mapObject.element.id + '_MapArea_ClipRect', 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: this.mapObject.isTileMap ? 0 : areaRect.x, y: this.mapObject.isTileMap ? 0 : areaRect.y,\n width: areaRect.width, height: areaRect.height\n }));\n this.layerGroup.appendChild(this.clipRectElement);\n this.mapObject.baseMapBounds = null;\n this.mapObject.baseMapRectBounds = null;\n this.mapObject.baseSize = null;\n var layerCount = layerCollection.length - 1;\n layerCollection.forEach(function (layer, index) {\n _this.currentLayer = layer;\n _this.processLayers(layer, index);\n });\n };\n LayerPanel.prototype.processLayers = function (layer, layerIndex) {\n this.layerObject = (this.mapObject.renderer.createGroup({\n id: this.mapObject.element.id + '_LayerIndex_' + layerIndex\n }));\n var eventArgs = {\n cancel: false, name: layerRendering, index: layerIndex,\n layer: layer, maps: this.mapObject\n };\n this.mapObject.trigger(layerRendering, eventArgs);\n if (!eventArgs.cancel) {\n if (layer.layerType !== 'Geometry') {\n var center = new Point(this.mapObject.centerPosition.longitude, this.mapObject.centerPosition.latitude);\n this.currentFactor = this.calculateFactor(layer);\n if (isNullOrUndefined(this.mapObject.tileZoomLevel)) {\n this.mapObject.tileZoomLevel = this.mapObject.zoomSettings.zoomFactor;\n }\n this.mapObject.tileTranslatePoint = this.panTileMap(this.mapObject.availableSize.width, this.mapObject.availableSize.height, center);\n this.generateTiles(this.mapObject.tileZoomLevel, this.mapObject.tileTranslatePoint);\n if (this.mapObject.markerModule) {\n this.mapObject.markerModule.markerRender(this.layerObject, layerIndex, this.mapObject.tileZoomLevel);\n }\n if (this.mapObject.navigationLineModule) {\n this.layerObject.appendChild(this.mapObject.navigationLineModule.renderNavigation(this.currentLayer, this.mapObject.tileZoomLevel, layerIndex));\n }\n this.translateLayerElements(this.layerObject, layerIndex);\n this.layerGroup.appendChild(this.layerObject);\n }\n else {\n if (!isNullOrUndefined(layer.shapeData) && (!isNullOrUndefined(layer.shapeData['geometries']) ||\n !isNullOrUndefined(layer.shapeData['features']))) {\n var featureData = (!isNullOrUndefined(layer.shapeData['geometries']) &&\n layer.shapeData['geometries'].length > 0 ? layer.shapeData['geometries'] :\n layer.shapeData['features']);\n layer.layerData = [];\n var bbox = layer.shapeData['bbox'];\n if (!isNullOrUndefined(bbox) && layer.isBaseLayer) {\n this.mapObject.baseMapBounds = new GeoLocation({ min: bbox[0][1], max: bbox[1][1] }, { min: bbox[0][0], max: bbox[1][0] });\n }\n else if (isNullOrUndefined(this.mapObject.baseMapBounds) && !isCustomPath(featureData)) {\n this.calculateRectBounds(featureData);\n // if (isNullOrUndefined(this.mapObject.baseSize)) {\n // let minSize: Point = convertGeoToPoint(\n // this.mapObject.baseMapBounds.latitude.min,\n // this.mapObject.baseMapBounds.longitude.min, this.calculateFactor(layer), layer, this.mapObject\n // );\n // let maxSize: Point = convertGeoToPoint(\n // this.mapObject.baseMapBounds.latitude.max,\n // this.mapObject.baseMapBounds.longitude.max, this.calculateFactor(layer), layer, this.mapObject\n // );\n // this.mapObject.baseSize = new Size(Math.abs(minSize.x - maxSize.x), Math.abs(minSize.y - maxSize.y));\n // }\n }\n this.calculatePathCollection(layerIndex, featureData);\n }\n }\n }\n if (!this.mapObject.isTileMap) {\n this.mapObject.svgObject.appendChild(this.layerGroup);\n }\n else if (this.tileSvgObject) {\n this.tileSvgObject.appendChild(this.layerGroup);\n }\n };\n //tslint:disable:max-func-body-length\n LayerPanel.prototype.bubbleCalculation = function (bubbleSettings, range) {\n if (bubbleSettings.dataSource != null && bubbleSettings != null) {\n if (bubbleSettings.colorValuePath == null) {\n return;\n }\n for (var i = 0; i < bubbleSettings.dataSource.length; i++) {\n var bubbledata = parseFloat(bubbleSettings.dataSource[i][bubbleSettings.valuePath]);\n if (i !== 0) {\n if (bubbledata > range.max) {\n range.max = bubbledata;\n }\n else if (bubbledata < range.min) {\n range.min = bubbledata;\n }\n }\n else {\n range.max = range.min = bubbledata;\n }\n }\n }\n };\n // tslint:disable-next-line:max-func-body-length\n LayerPanel.prototype.calculatePathCollection = function (layerIndex, renderData) {\n var _this = this;\n this.groupElements = [];\n if ((!isCustomPath(renderData))) {\n this.currentFactor = this.calculateFactor(this.currentLayer);\n }\n this.rectBounds = null;\n var shapeSettings = this.currentLayer.shapeSettings;\n renderData.forEach(function (geometryData, index) {\n if (!isNullOrUndefined(geometryData['geometry']) || !isNullOrUndefined(geometryData['coordinates'])) {\n var type = !isNullOrUndefined(geometryData['geometry']) ? geometryData['geometry']['type'] : geometryData['type'];\n var coords = !isNullOrUndefined(geometryData['geometry']) ? geometryData['geometry']['coordinates'] :\n geometryData['coordinates'];\n var data = geometryData['geometry'];\n var properties = geometryData['properties'];\n _this.generatePoints(type, coords, data, properties);\n }\n });\n this.currentLayer.rectBounds = this.rectBounds;\n if (isNullOrUndefined(this.mapObject.baseMapRectBounds) && this.currentLayer.isBaseLayer) {\n this.mapObject.baseMapRectBounds = this.rectBounds;\n }\n var colors = shapeSettings.palette.length > 1 ? shapeSettings.palette : getShapeColor(this.mapObject.theme);\n var labelTemplateEle = createElement('div', {\n id: this.mapObject.element.id + '_LayerIndex_' + layerIndex + '_Label_Template_Group',\n className: 'template',\n styles: 'pointer-events: none; overflow: hidden; position: absolute;' +\n 'top:' + this.mapObject.mapAreaRect.y + 'px;' +\n 'left:' + this.mapObject.mapAreaRect.x + 'px;' +\n 'height:' + this.mapObject.mapAreaRect.height + 'px;' +\n 'width:' + this.mapObject.mapAreaRect.width + 'px;'\n });\n var _loop_1 = function (i) {\n var k = void 0;\n var currentShapeData = this_1.currentLayer.layerData[i];\n var pathOptions = void 0;\n var polyLineOptions = void 0;\n var circleOptions = void 0;\n var groupElement = void 0;\n var drawObject = void 0;\n var path = '';\n var points = '';\n var fill = (shapeSettings.autofill) ? colors[i % colors.length] : shapeSettings.fill;\n if (shapeSettings.colorValuePath !== null && !isNullOrUndefined(currentShapeData['property'])) {\n k = checkShapeDataFields(this_1.currentLayer.dataSource, currentShapeData['property'], this_1.currentLayer.shapeDataPath, this_1.currentLayer.shapePropertyPath);\n if (k !== null && shapeSettings.colorMapping.length === 0) {\n fill = this_1.currentLayer.dataSource[k][shapeSettings.colorValuePath];\n }\n else if (currentShapeData['property'][shapeSettings.colorValuePath] && this_1.currentLayer.dataSource.length === 0 &&\n shapeSettings.colorMapping.length === 0) {\n fill = currentShapeData['property'][shapeSettings.colorValuePath];\n }\n }\n var shapeID = this_1.mapObject.element.id + '_LayerIndex_' + layerIndex + '_ShapeIndex_' + i + '_dataIndex_' + k;\n fill = this_1.getShapeColorMapping(this_1.currentLayer, currentShapeData['property'], fill);\n var eventArgs = {\n cancel: false, name: shapeRendering, index: i,\n data: this_1.currentLayer.dataSource ? this_1.currentLayer.dataSource[k] : null, maps: this_1.mapObject,\n shape: shapeSettings, fill: fill, border: { width: shapeSettings.border.width, color: shapeSettings.border.color }\n };\n this_1.mapObject.trigger(shapeRendering, eventArgs);\n var drawingType = !isNullOrUndefined(currentShapeData['_isMultiPolygon'])\n ? 'MultiPolygon' : isNullOrUndefined(currentShapeData['type']) ? currentShapeData[0]['type'] : currentShapeData['type'];\n drawingType = (drawingType === 'Polygon' || drawingType === 'MultiPolygon') ? 'Polygon' : drawingType;\n if (this_1.groupElements.length < 1) {\n groupElement = this_1.mapObject.renderer.createGroup({\n id: this_1.mapObject.element.id + '_LayerIndex_' + layerIndex + '_' + drawingType + '_Group', transform: ''\n });\n this_1.groupElements.push(groupElement);\n }\n else {\n for (var i_1 = 0; i_1 < this_1.groupElements.length; i_1++) {\n var ele = this_1.groupElements[i_1];\n if (ele.id.indexOf(drawingType) > -1) {\n groupElement = ele;\n break;\n }\n else if (i_1 >= this_1.groupElements.length - 1) {\n groupElement = this_1.mapObject.renderer.createGroup({\n id: this_1.mapObject.element.id + '_LayerIndex_' + layerIndex + '_' + drawingType + '_Group'\n });\n this_1.groupElements.push(groupElement);\n break;\n }\n }\n }\n var pathEle = void 0;\n switch (drawingType) {\n case 'Polygon':\n if (!currentShapeData['_isMultiPolygon']) {\n path += 'M' + (currentShapeData[0]['point']['x']) + ' ' + (currentShapeData[0]['point']['y']);\n currentShapeData.map(function (shapeData) {\n path += ' L ' + (shapeData['point']['x']) + ' ' + (shapeData['point']['y']);\n });\n }\n else {\n path = this_1.generateMultiPolygonPath(currentShapeData);\n }\n path += ' z ';\n if (path.length > 3) {\n pathOptions = new PathOption(shapeID, eventArgs.fill, eventArgs.border.width, eventArgs.border.color, shapeSettings.opacity, shapeSettings.dashArray, path);\n pathEle = this_1.mapObject.renderer.drawPath(pathOptions);\n }\n break;\n case 'LineString':\n currentShapeData.map(function (lineData) {\n points += lineData['point']['x'] + ' , ' + lineData['point']['y'] + ' ';\n });\n polyLineOptions = new PolylineOption(shapeID, points, eventArgs.fill, eventArgs.border.width, eventArgs.border.color, shapeSettings.opacity, shapeSettings.dashArray);\n pathEle = this_1.mapObject.renderer.drawPolyline(polyLineOptions);\n break;\n case 'Point':\n var pointData = currentShapeData['point'];\n circleOptions = new CircleOption(shapeID, eventArgs.fill, eventArgs.border, shapeSettings.opacity, pointData['x'], pointData['y'], shapeSettings.circleRadius, null);\n pathEle = this_1.mapObject.renderer.drawCircle(circleOptions);\n break;\n case 'Path':\n path = currentShapeData['point'];\n pathOptions = new PathOption(shapeID, eventArgs.fill, eventArgs.border.width, eventArgs.border.color, shapeSettings.opacity, shapeSettings.dashArray, path);\n pathEle = this_1.mapObject.renderer.drawPath(pathOptions);\n break;\n }\n if (!isNullOrUndefined(pathEle)) {\n pathEle.setAttribute('aria-label', ((!isNullOrUndefined(currentShapeData['property'])) ?\n (currentShapeData['property'][this_1.currentLayer.shapePropertyPath]) : ''));\n pathEle.setAttribute('tabindex', (this_1.mapObject.tabIndex + i + 2).toString());\n groupElement.appendChild(pathEle);\n }\n };\n var this_1 = this;\n for (var i = 0; i < this.currentLayer.layerData.length; i++) {\n _loop_1(i);\n }\n var bubbleG;\n if (this.currentLayer.bubbleSettings.length && this.mapObject.bubbleModule) {\n var length_1 = this.currentLayer.bubbleSettings.length;\n var bubble_1;\n var _loop_2 = function (j) {\n bubble_1 = this_2.currentLayer.bubbleSettings[j];\n bubbleG = this_2.mapObject.renderer.createGroup({\n id: this_2.mapObject.element.id + '_LayerIndex_' + layerIndex + '_bubble_Group_' + j\n });\n var range = { min: 0, max: 0 };\n this_2.bubbleCalculation(bubble_1, range);\n bubble_1.dataSource.map(function (bubbleData, i) {\n _this.renderBubble(_this.currentLayer, bubbleData, colors[i % colors.length], range, j, i, bubbleG, layerIndex, bubble_1);\n });\n this_2.groupElements.push(bubbleG);\n };\n var this_2 = this;\n for (var j = 0; j < length_1; j++) {\n _loop_2(j);\n }\n }\n var group = (this.mapObject.renderer.createGroup({\n id: this.mapObject.element.id + '_layerIndex_' + layerIndex + '_dataLableIndex_Group', style: 'pointer-events: none;'\n }));\n if (this.mapObject.dataLabelModule && this.currentLayer.dataLabelSettings.visible) {\n renderData.map(function (currentShapeData, i) {\n _this.renderLabel(_this.currentLayer, layerIndex, currentShapeData, group, i, labelTemplateEle);\n });\n this.groupElements.push(group);\n }\n if (this.mapObject.navigationLineModule) {\n this.groupElements.push(this.mapObject.navigationLineModule.renderNavigation(this.currentLayer, this.currentFactor, layerIndex));\n }\n this.groupElements.map(function (element) {\n _this.layerObject.appendChild(element);\n });\n if (this.mapObject.markerModule) {\n this.mapObject.markerModule.markerRender(this.layerObject, layerIndex, this.currentFactor);\n }\n this.translateLayerElements(this.layerObject, layerIndex);\n this.layerGroup.appendChild(this.layerObject);\n };\n /**\n * render datalabel\n */\n LayerPanel.prototype.renderLabel = function (layer, layerIndex, shape, group, shapeIndex, labelTemplateEle) {\n this.mapObject.dataLabelModule.renderLabel(layer, layerIndex, shape, layer.layerData, group, labelTemplateEle, shapeIndex);\n };\n /**\n * To render path for multipolygon\n */\n LayerPanel.prototype.generateMultiPolygonPath = function (currentShapeData) {\n var path = '';\n var shape;\n for (var j = 0; j < currentShapeData.length; j++) {\n path += 'M' + (currentShapeData[j][0]['point']['x']) + ' ' + (currentShapeData[j][0]['point']['y']);\n shape = currentShapeData[j];\n shape.map(function (shapeData) {\n path += ' L ' + (shapeData['point']['x']) + ' ' + (shapeData['point']['y']);\n });\n }\n return path;\n };\n /**\n * To render bubble\n */\n LayerPanel.prototype.renderBubble = function (layer, bubbleData, color, range, bubbleIndex, dataIndex, group, layerIndex, bubbleSettings) {\n if (isNullOrUndefined(this.mapObject.bubbleModule) || !bubbleSettings.visible) {\n return null;\n }\n color = bubbleSettings.fill ? bubbleSettings.fill : color;\n this.mapObject.bubbleModule.id = this.mapObject.element.id + '_LayerIndex_' + layerIndex + '_BubbleIndex_' +\n bubbleIndex + '_dataIndex_' + dataIndex;\n this.mapObject.bubbleModule.renderBubble(bubbleSettings, bubbleData, color, range, bubbleIndex, dataIndex, layerIndex, layer, group);\n };\n /**\n * To get the shape color from color mapping module\n */\n LayerPanel.prototype.getShapeColorMapping = function (layer, shape, color) {\n color = color ? color : layer.shapeSettings.fill;\n if (layer.shapeSettings.colorMapping.length === 0 && isNullOrUndefined(layer.dataSource)) {\n return color;\n }\n var index = checkShapeDataFields(layer.dataSource, shape, layer.shapeDataPath, layer.shapePropertyPath);\n var colorMapping = new ColorMapping(this.mapObject);\n if (isNullOrUndefined(layer.dataSource[index])) {\n return color;\n }\n return colorMapping.getShapeColorMapping(layer.shapeSettings, layer.dataSource[index], color);\n };\n LayerPanel.prototype.generatePoints = function (type, coordinates, data, properties) {\n var _this = this;\n var latitude;\n var longitude;\n var newData = [];\n switch (type.toLowerCase()) {\n case 'polygon':\n newData = this.calculatePolygonBox(coordinates[0], data, properties);\n if (newData.length > 0) {\n newData['property'] = properties;\n newData['type'] = type;\n newData['_isMultiPolygon'] = false;\n this.currentLayer.layerData.push(newData);\n }\n break;\n case 'multipolygon':\n var multiPolygonDatas = [];\n for (var i = 0; i < coordinates.length; i++) {\n newData = this.calculatePolygonBox(coordinates[i][0], data, properties);\n if (newData.length > 0) {\n multiPolygonDatas.push(newData);\n }\n }\n multiPolygonDatas['property'] = properties;\n multiPolygonDatas['type'] = type;\n multiPolygonDatas['_isMultiPolygon'] = true;\n this.currentLayer.layerData.push(multiPolygonDatas);\n break;\n case 'linestring':\n coordinates.map(function (points, index) {\n latitude = points[1];\n longitude = points[0];\n var point = convertGeoToPoint(latitude, longitude, _this.currentFactor, _this.currentLayer, _this.mapObject);\n newData.push({\n point: point, lat: latitude, lng: longitude\n });\n });\n newData['property'] = properties;\n newData['type'] = type;\n this.currentLayer.layerData.push(newData);\n break;\n case 'point':\n latitude = coordinates[1];\n longitude = coordinates[0];\n var point = convertGeoToPoint(latitude, longitude, this.currentFactor, this.currentLayer, this.mapObject);\n this.currentLayer.layerData.push({\n point: point, type: type, lat: latitude, lng: longitude, property: properties\n });\n break;\n case 'path':\n this.currentLayer.layerData.push({\n point: data['d'], type: type, property: properties\n });\n break;\n }\n };\n LayerPanel.prototype.calculateFactor = function (layer) {\n var horFactor;\n var verFactor = 1;\n var divide = 10;\n var exp = 'e+1';\n var bounds = this.mapObject.baseMapBounds;\n var mapSize = new Size(this.mapObject.mapAreaRect.width, this.mapObject.mapAreaRect.height - 5);\n var mapHeight;\n var mapWidth;\n if (bounds) {\n var start = convertGeoToPoint(bounds.latitude.min, bounds.longitude.min, null, layer, this.mapObject);\n var end = convertGeoToPoint(bounds.latitude.max, bounds.longitude.max, null, layer, this.mapObject);\n mapHeight = end.y - start.y;\n mapWidth = end.x - start.x;\n }\n else {\n mapHeight = mapWidth = 500;\n }\n if (mapHeight < mapSize.height) {\n horFactor = parseFloat(Math.abs(Number(mapSize.height / Number(mapHeight.toString() + exp)) * 100).toString().split('.')[0])\n / divide;\n }\n else {\n horFactor = mapSize.height / mapHeight;\n }\n if (mapWidth < mapSize.width) {\n verFactor = parseFloat(Math.abs(Number(mapSize.width / Number(mapWidth.toString() + exp)) * 100).toString().split('.')[0])\n / divide;\n }\n else {\n verFactor = mapSize.width / mapWidth;\n }\n return (Math.min(verFactor, horFactor));\n };\n LayerPanel.prototype.translateLayerElements = function (layerElement, index) {\n var childNode;\n if (!isNullOrUndefined(this.mapObject.baseMapRectBounds)) {\n var duration = this.currentLayer.animationDuration;\n var animate = duration !== 0 || isNullOrUndefined(this.mapObject.zoomModule);\n var translate = getTranslate(this.mapObject, this.currentLayer, animate);\n var scale = this.mapObject.previousScale = translate['scale'];\n var location_1 = this.mapObject.previousPoint = translate['location'];\n this.mapObject.baseTranslatePoint = this.mapObject.translatePoint = location_1;\n this.mapObject.baseScale = this.mapObject.scale = scale;\n for (var i = 0; i < layerElement.childElementCount; i++) {\n childNode = layerElement.childNodes[i];\n if (!(childNode.id.indexOf('_Markers_Group') > -1) &&\n (!(childNode.id.indexOf('_bubble_Group') > -1)) &&\n (!(childNode.id.indexOf('_dataLableIndex_Group') > -1))) {\n var transform = 'scale( ' + scale + ' ) '\n + 'translate( ' + location_1.x + ' ' + location_1.y + ' ) ';\n childNode.setAttribute('transform', transform);\n if (duration > 0 && !isNullOrUndefined(this.mapObject.zoomModule)) {\n translate = getTranslate(this.mapObject, this.currentLayer);\n this.mapObject.scale = translate['scale'];\n this.mapObject.translatePoint = translate['location'];\n }\n }\n }\n }\n else if (this.mapObject.isTileMap) {\n for (var i = 0; i < layerElement.childElementCount; i++) {\n childNode = layerElement.childNodes[i];\n if (!(childNode.id.indexOf('_Markers_Group') > -1) &&\n (!(childNode.id.indexOf('_bubble_Group') > -1)) &&\n (!(childNode.id.indexOf('_dataLableIndex_Group') > -1)) &&\n (!(childNode.id.indexOf('_line_Group') > -1))) {\n var transform = 'scale( ' + this.mapObject.scale + ' ) ' + 'translate( ' + this.mapObject.translatePoint.x\n + ' ' + this.mapObject.translatePoint.y + ' ) ';\n childNode.setAttribute('transform', transform);\n }\n }\n }\n };\n LayerPanel.prototype.calculateRectBounds = function (layerData) {\n var _this = this;\n layerData.forEach(function (obj, index) {\n if (!isNullOrUndefined(obj['geometry']) || !isNullOrUndefined(obj['coordinates'])) {\n var type = !isNullOrUndefined(obj['geometry']) ? obj['geometry']['type'] : obj['type'];\n var coordinates = !isNullOrUndefined(obj['geometry']) ? obj['geometry']['coordinates'] : obj['coordinates'];\n switch (type.toLowerCase()) {\n case 'polygon':\n _this.calculateRectBox(coordinates[0]);\n break;\n case 'multipolygon':\n coordinates.map(function (point, index) {\n _this.calculateRectBox(point[0]);\n });\n break;\n }\n }\n });\n };\n LayerPanel.prototype.calculatePolygonBox = function (coordinates, data, properties) {\n var _this = this;\n var newData = [];\n var bounds = this.mapObject.baseMapBounds;\n coordinates.map(function (currentPoint, index) {\n var latitude = currentPoint[1];\n var longitude = currentPoint[0];\n if ((longitude >= bounds.longitude.min && longitude <= bounds.longitude.max)\n && (latitude >= bounds.latitude.min && latitude <= bounds.latitude.max)) {\n var point = convertGeoToPoint(latitude, longitude, _this.currentFactor, _this.currentLayer, _this.mapObject);\n if (isNullOrUndefined(_this.rectBounds)) {\n _this.rectBounds = { min: { x: point.x, y: point.y }, max: { x: point.x, y: point.y } };\n }\n else {\n _this.rectBounds['min']['x'] = Math.min(_this.rectBounds['min']['x'], point.x);\n _this.rectBounds['min']['y'] = Math.min(_this.rectBounds['min']['y'], point.y);\n _this.rectBounds['max']['x'] = Math.max(_this.rectBounds['max']['x'], point.x);\n _this.rectBounds['max']['y'] = Math.max(_this.rectBounds['max']['y'], point.y);\n }\n newData.push({\n point: point,\n lat: latitude,\n lng: longitude\n });\n }\n });\n return newData;\n };\n LayerPanel.prototype.calculateRectBox = function (coordinates) {\n var _this = this;\n coordinates.forEach(function (currentCoords) {\n if (isNullOrUndefined(_this.mapObject.baseMapBounds)) {\n _this.mapObject.baseMapBounds = new GeoLocation({ min: currentCoords[1], max: currentCoords[1] }, { min: currentCoords[0], max: currentCoords[0] });\n }\n else {\n _this.mapObject.baseMapBounds.latitude.min = Math.min(_this.mapObject.baseMapBounds.latitude.min, currentCoords[1]);\n _this.mapObject.baseMapBounds.latitude.max = Math.max(_this.mapObject.baseMapBounds.latitude.max, currentCoords[1]);\n _this.mapObject.baseMapBounds.longitude.min = Math.min(_this.mapObject.baseMapBounds.longitude.min, currentCoords[0]);\n _this.mapObject.baseMapBounds.longitude.max = Math.max(_this.mapObject.baseMapBounds.longitude.max, currentCoords[0]);\n }\n });\n };\n LayerPanel.prototype.generateTiles = function (zoomLevel, tileTranslatePoint) {\n var userLang = this.mapObject.locale;\n var size = this.mapObject.availableSize;\n this.tiles = [];\n var xcount;\n var ycount;\n xcount = ycount = Math.pow(2, zoomLevel);\n var width = size.width / 2;\n var height = size.height / 2;\n var baseLayer = this.mapObject.layers[this.mapObject.baseLayerIndex];\n this.urlTemplate = baseLayer.urlTemplate;\n var endY = Math.min(ycount, ((-tileTranslatePoint.y + size.height) / 256) + 1);\n var endX = Math.min(xcount, ((-tileTranslatePoint.x + size.width) / 256) + 1);\n var startX = (-(tileTranslatePoint.x + 256) / 256);\n var startY = (-(tileTranslatePoint.y + 256) / 256);\n var bing = new BingMap(this.mapObject);\n for (var i = Math.round(startX); i < Math.round(endX); i++) {\n for (var j = Math.round(startY); j < Math.round(endY); j++) {\n var x = 256 * i + tileTranslatePoint.x;\n var y = 256 * j + tileTranslatePoint.y;\n if (x > -256 && x <= size.width && y > -256 && y < size.height) {\n if (i >= 0 && j >= 0) {\n var tile = new Tile(i, j);\n tile.left = x;\n tile.top = y;\n if (baseLayer.layerType === 'Bing') {\n tile.src = bing.getBingMap(tile, baseLayer.key, baseLayer.bingMapType, userLang);\n }\n else {\n tile.src = this.urlTemplate.replace('level', zoomLevel.toString()).replace('tileX', tile.x.toString())\n .replace('tileY', tile.y.toString());\n }\n this.tiles.push(tile);\n }\n }\n }\n }\n var proxTiles = extend([], this.tiles, [], true);\n for (var _i = 0, _a = this.mapObject.layers; _i < _a.length; _i++) {\n var layer = _a[_i];\n if (!(layer.type === 'SubLayer' && layer.visible)) {\n continue;\n }\n if (layer.layerType === 'OSM' || layer.layerType === 'Bing') {\n for (var _b = 0, proxTiles_1 = proxTiles; _b < proxTiles_1.length; _b++) {\n var baseTile = proxTiles_1[_b];\n var subtile = extend(baseTile, {}, {}, true);\n if (layer.layerType === 'Bing') {\n subtile.src = bing.getBingMap(subtile, layer.key, layer.bingMapType, userLang);\n }\n else {\n subtile.src = layer.urlTemplate.replace('level', zoomLevel.toString()).replace('tileX', baseTile.x.toString())\n .replace('tileY', baseTile.y.toString());\n }\n this.tiles.push(subtile);\n }\n }\n }\n this.arrangeTiles();\n };\n LayerPanel.prototype.arrangeTiles = function () {\n var htmlString = this.templateCompiler(this.tiles);\n if (getElementByID(this.mapObject.element.id + '_tile_parent')) {\n document.getElementById(this.mapObject.element.id + '_tile_parent').innerHTML = htmlString;\n }\n };\n LayerPanel.prototype.templateCompiler = function (tiles) {\n var tileElment = '';\n for (var _i = 0, tiles_1 = tiles; _i < tiles_1.length; _i++) {\n var tile = tiles_1[_i];\n tileElment += '
    ';\n }\n return tileElment;\n };\n LayerPanel.prototype.panTileMap = function (factorX, factorY, centerPosition) {\n var level = this.mapObject.tileZoomLevel;\n var padding = 20;\n var x;\n var y;\n var totalSize = Math.pow(2, level) * 256;\n x = (factorX / 2) - (totalSize / 2);\n y = (factorY / 2) - (totalSize / 2);\n var position = convertTileLatLongToPoint(centerPosition, level, { x: x, y: y }, this.isMapCoordinates);\n x -= position.x - (factorX / 2);\n y = (y - (position.y - (factorY / 2))) + padding;\n this.mapObject.scale = Math.pow(2, level - 1);\n this.mapObject.translatePoint = new Point(((x - (0.5 * this.mapObject.scale)) / this.mapObject.scale), ((y - (0.5 * this.mapObject.scale)) / this.mapObject.scale));\n return new Point(x, y);\n };\n return LayerPanel;\n}());\nexport { LayerPanel };\n","import { annotationRendering } from '../index';\nimport { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getTemplateFunction, getElementOffset, getElementByID } from '../utils/helper';\n/**\n * Represent the annotation rendering for map\n */\nvar Annotations = /** @class */ (function () {\n function Annotations(map) {\n this.map = map;\n }\n Annotations.prototype.renderAnnotationElements = function () {\n var _this = this;\n var secondaryID = this.map.element.id + '_Secondary_Element';\n var annotationGroup = createElement('div', { id: this.map.element.id + '_Annotations_Group' });\n annotationGroup.style.position = 'absolute';\n annotationGroup.style.top = '0px';\n annotationGroup.style.left = '0px';\n this.map.annotations.map(function (annotation, index) {\n if (annotation.content !== null) {\n _this.createAnnotationTemplate(annotationGroup, annotation, index);\n }\n });\n if (annotationGroup.childElementCount > 0 && !(isNullOrUndefined(getElementByID(secondaryID)))) {\n getElementByID(secondaryID).appendChild(annotationGroup);\n }\n };\n /**\n * To create annotation elements\n */\n Annotations.prototype.createAnnotationTemplate = function (parentElement, annotation, annotationIndex) {\n var left;\n var top;\n var templateFn;\n var map = this.map;\n var templateElement;\n var availSize = map.availableSize;\n var id = map.element.id + '_Annotation_' + annotationIndex;\n var childElement = createElement('div', {\n id: map.element.id + '_Annotation_' + annotationIndex, styles: 'position: absolute; z-index:' + annotation.zIndex + ';'\n });\n var argsData = {\n cancel: false, name: annotationRendering, content: annotation.content,\n annotation: annotation\n };\n this.map.trigger(annotationRendering, argsData);\n templateFn = getTemplateFunction(argsData.content);\n if (templateFn && templateFn(this.map).length) {\n templateElement = templateFn(this.map);\n while (templateElement.length > 0) {\n childElement.appendChild(templateElement[0]);\n }\n }\n else {\n childElement.appendChild(createElement('div', {\n innerHTML: argsData.content\n }));\n }\n var offset = getElementOffset(childElement.cloneNode(true), map.element);\n var elementRect = map.element.getBoundingClientRect();\n var bounds = map.svgObject.getBoundingClientRect();\n left = Math.abs(bounds.left - elementRect.left);\n top = Math.abs(bounds.top - elementRect.top);\n var annotationXValue = (annotation.x.indexOf('%') > -1) ? (availSize.width / 100) * parseFloat(annotation.x) :\n parseFloat(annotation.x);\n var annotationYValue = (annotation.y.indexOf('%') > -1) ? (availSize.height / 100) * parseFloat(annotation.y) :\n parseFloat(annotation.y);\n left = (annotation.horizontalAlignment === 'None') ? (left + annotationXValue) : left;\n top = (annotation.verticalAlignment === 'None') ? (top + annotationYValue) : top;\n switch (annotation.verticalAlignment) {\n case 'Near':\n top = (top + annotationYValue);\n break;\n case 'Center':\n top = (top + annotationYValue) + ((bounds.height / 2) - (offset.height / 2));\n break;\n case 'Far':\n top = (top + bounds.height + annotationYValue) - offset.height;\n break;\n }\n switch (annotation.horizontalAlignment) {\n case 'Near':\n left = (left + annotationXValue);\n break;\n case 'Center':\n left = (left + annotationXValue) + ((bounds.width / 2) - (offset.width / 2));\n break;\n case 'Far':\n left = (left + bounds.width + annotationXValue) - offset.width;\n break;\n }\n childElement.style.left = left + 'px';\n childElement.style.top = top + 'px';\n parentElement.appendChild(childElement);\n };\n /*\n * Get module name.\n */\n Annotations.prototype.getModuleName = function () {\n return 'Annotations';\n };\n /**\n * To destroy the annotation.\n * @return {void}\n * @private\n */\n Annotations.prototype.destroy = function (map) {\n // Destroy method performed here\n };\n return Annotations;\n}());\nexport { Annotations };\n","import { print as printWindow, createElement, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { getElement } from '../utils/helper';\nimport { beforePrint } from '../model/constants';\nimport { PdfPageOrientation, PdfDocument, PdfBitmap } from '@syncfusion/ej2-pdf-export';\n/**\n * Annotation Module handles the Annotation for Maps\n */\nvar ExportUtils = /** @class */ (function () {\n /**\n * Constructor for Maps\n * @param control\n */\n function ExportUtils(control) {\n this.control = control;\n }\n /**\n * To print the Maps\n * @param elements\n */\n ExportUtils.prototype.print = function (elements) {\n this.printWindow = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth + ',tabbar=no');\n this.printWindow.moveTo(0, 0);\n this.printWindow.resizeTo(screen.availWidth, screen.availHeight);\n var argsData = {\n cancel: false, htmlContent: this.getHTMLContent(elements), name: beforePrint\n };\n this.control.trigger(beforePrint, argsData);\n if (!argsData.cancel) {\n printWindow(argsData.htmlContent, this.printWindow);\n }\n };\n /**\n * To get the html string of the Maps\n * @param elements\n * @private\n */\n ExportUtils.prototype.getHTMLContent = function (elements) {\n var div = createElement('div');\n if (elements) {\n if (elements instanceof Array) {\n elements.forEach(function (value) {\n div.appendChild(getElement(value).cloneNode(true));\n });\n }\n else if (elements instanceof Element) {\n div.appendChild(elements.cloneNode(true));\n }\n else {\n div.appendChild(getElement(elements).cloneNode(true));\n }\n }\n else {\n div.appendChild(this.control.element.cloneNode(true));\n }\n return div;\n };\n /**\n * To export the file as image/svg format\n * @param type\n * @param fileName\n */\n ExportUtils.prototype.export = function (type, fileName, orientation) {\n var _this = this;\n var element = createElement('canvas', {\n id: 'ej2-canvas',\n attrs: {\n 'width': this.control.availableSize.width.toString(),\n 'height': this.control.availableSize.height.toString()\n }\n });\n var isDownload = !(Browser.userAgent.toString().indexOf('HeadlessChrome') > -1);\n orientation = isNullOrUndefined(orientation) ? PdfPageOrientation.Landscape : orientation;\n var svgData = '' +\n this.control.svgObject.outerHTML +\n '';\n var url = window.URL.createObjectURL(new Blob(type === 'SVG' ? [svgData] :\n [(new XMLSerializer()).serializeToString(this.control.svgObject)], { type: 'image/svg+xml' }));\n if (type === 'SVG') {\n this.triggerDownload(fileName, type, url, isDownload);\n }\n else {\n var image_1 = new Image();\n var ctx_1 = element.getContext('2d');\n image_1.onload = (function () {\n ctx_1.drawImage(image_1, 0, 0);\n window.URL.revokeObjectURL(url);\n if (type === 'PDF') {\n var document_1 = new PdfDocument();\n var imageString = element.toDataURL('image/jpeg').replace('image/jpeg', 'image/octet-stream');\n document_1.pageSettings.orientation = orientation;\n imageString = imageString.slice(imageString.indexOf(',') + 1);\n document_1.pages.add().graphics.drawImage(new PdfBitmap(imageString), 0, 0, (_this.control.availableSize.width - 60), _this.control.availableSize.height);\n if (isDownload) {\n document_1.save(fileName + '.pdf');\n document_1.destroy();\n }\n }\n else {\n _this.triggerDownload(fileName, type, element.toDataURL('image/png').replace('image/png', 'image/octet-stream'), isDownload);\n }\n });\n image_1.src = url;\n }\n };\n /**\n * To trigger the download element\n * @param fileName\n * @param type\n * @param url\n */\n ExportUtils.prototype.triggerDownload = function (fileName, type, url, isDownload) {\n createElement('a', {\n attrs: {\n 'download': fileName + '.' + type.toLocaleLowerCase(),\n 'href': url\n }\n }).dispatchEvent(new MouseEvent(isDownload ? 'click' : 'move', {\n view: window,\n bubbles: false,\n cancelable: true\n }));\n };\n return ExportUtils;\n}());\nexport { ExportUtils };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * Maps Component file\n */\nimport { Component, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { EventHandler, Browser, isNullOrUndefined, createElement } from '@syncfusion/ej2-base';\nimport { SvgRenderer, Event, remove, L10n, Collection, Internationalization, Complex } from '@syncfusion/ej2-base';\nimport { Size, createSvg, Point, removeElement, triggerShapeEvent, showTooltip, getElement } from './utils/helper';\nimport { ZoomSettings, LegendSettings } from './model/base';\nimport { LayerSettings, TitleSettings, Border, Margin, MapsAreaSettings, Annotation } from './model/base';\nimport { load, click, loaded, resize, shapeSelected } from './model/constants';\nimport { Theme, BootstrapTheme, FabricTheme, HighContrastTheme } from './model/theme';\nimport { LayerPanel } from './layers/layer-panel';\nimport { Rect, RectOption, measureText, getElementByID, MapAjax } from '../maps/utils/helper';\nimport { findPosition, textTrim, TextOption, renderTextElement, convertGeoToPoint } from '../maps/utils/helper';\nimport { Annotations } from '../maps/user-interaction/annotation';\nimport { MarkerSettings } from './index';\nimport { changeBorderWidth } from './index';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { ExportUtils } from '../maps/utils/export';\n/**\n * Represents the Maps control.\n * ```html\n *
    \n * \n * ```\n */\nvar Maps = /** @class */ (function (_super) {\n __extends(Maps, _super);\n /**\n * Constructor for creating the widget\n */\n function Maps(options, element) {\n var _this = _super.call(this, options, element) || this;\n /**\n * Check layer whether is normal or tile\n * @private\n */\n _this.isTileMap = false;\n /** @private */\n _this.baseSize = new Size(0, 0);\n /** @private */\n _this.translatePoint = new Point(0, 0);\n /** @private */\n _this.baseTranslatePoint = new Point(0, 0);\n /** @private */\n _this.tileTranslatePoint = new Point(0, 0);\n /** @private */\n _this.baseTileTranslatePoint = new Point(0, 0);\n /** @private */\n _this.isDevice = Browser.isDevice;\n return _this;\n }\n /**\n * Gets the localized label by locale keyword.\n * @param {string} key\n * @return {string}\n */\n Maps.prototype.getLocalizedLabel = function (key) {\n return this.localeObject.getConstant(key);\n };\n /**\n * Initializing pre-required values.\n */\n Maps.prototype.preRender = function () {\n this.trigger(load, { maps: this });\n this.themeEffect();\n this.initPrivateVariable();\n this.unWireEVents();\n this.createSVG();\n this.wireEVents();\n this.setCulture();\n };\n Maps.prototype.setTextStyle = function (theme, font) {\n font.color = font.color || theme.color;\n font.size = font.size || theme.size;\n font.fontFamily = font.fontFamily || theme.fontFamily;\n font.fontStyle = font.fontStyle || theme.fontStyle;\n font.fontWeight = font.fontWeight || theme.fontWeight;\n };\n /**\n * To change font styles of map based on themes\n */\n Maps.prototype.themeEffect = function () {\n switch (this.theme) {\n case 'Material':\n this.setTextStyle(Theme.mapsTitleFont, this.titleSettings.textStyle);\n this.setTextStyle(Theme.mapsSubTitleFont, this.titleSettings.subtitleSettings.textStyle);\n this.setTextStyle(Theme.legendLabelFont, this.legendSettings.textStyle);\n this.setTextStyle(Theme.legendTitleFont, this.legendSettings.textStyle);\n this.setLabelFont(this.layers, Theme.dataLabelFont);\n break;\n case 'Bootstrap':\n this.setTextStyle(BootstrapTheme.mapsTitleFont, this.titleSettings.textStyle);\n this.setTextStyle(BootstrapTheme.mapsSubTitleFont, this.titleSettings.subtitleSettings.textStyle);\n this.setTextStyle(BootstrapTheme.legendLabelFont, this.legendSettings.textStyle);\n this.setTextStyle(BootstrapTheme.legendTitleFont, this.legendSettings.textStyle);\n this.setLabelFont(this.layers, BootstrapTheme.dataLabelFont);\n break;\n case 'Fabric':\n this.setTextStyle(FabricTheme.mapsTitleFont, this.titleSettings.textStyle);\n this.setTextStyle(FabricTheme.mapsSubTitleFont, this.titleSettings.subtitleSettings.textStyle);\n this.setTextStyle(FabricTheme.legendLabelFont, this.legendSettings.textStyle);\n this.setTextStyle(FabricTheme.legendTitleFont, this.legendSettings.textStyle);\n this.setLabelFont(this.layers, FabricTheme.dataLabelFont);\n break;\n case 'Highcontrast':\n this.setTextStyle(HighContrastTheme.mapsTitleFont, this.titleSettings.textStyle);\n this.setTextStyle(HighContrastTheme.mapsSubTitleFont, this.titleSettings.subtitleSettings.textStyle);\n this.setTextStyle(HighContrastTheme.legendLabelFont, this.legendSettings.textStyle);\n this.setTextStyle(HighContrastTheme.legendTitleFont, this.legendSettings.textStyle);\n this.setLabelFont(this.layers, HighContrastTheme.dataLabelFont);\n break;\n }\n };\n /**\n * To change datalabel font\n * @param layers\n * @param style\n */\n Maps.prototype.setLabelFont = function (layers, style) {\n for (var _i = 0, layers_1 = layers; _i < layers_1.length; _i++) {\n var layer = layers_1[_i];\n this.setTextStyle(style, layer.dataLabelSettings.textStyle);\n }\n };\n /**\n * To Initialize the control rendering.\n */\n Maps.prototype.render = function () {\n this.findBaseAndSubLayers();\n this.createSecondaryElement();\n this.addTabIndex();\n this.renderBorder();\n this.renderTitle(this.titleSettings, 'title', null, null);\n this.renderArea();\n this.processRequestJsonData();\n };\n /* tslint:disable:no-string-literal */\n Maps.prototype.processRequestJsonData = function () {\n var _this = this;\n var length = this.layersCollection.length - 1;\n this.serverProcess = { request: 0, response: 0 };\n this.layersCollection.forEach(function (layer, layerIndex) {\n if (layer.shapeData instanceof DataManager) {\n _this.serverProcess['request']++;\n var dataModule = layer.shapeData;\n var queryModule = layer.query instanceof Query ? layer.query : new Query();\n var dataManager = dataModule.executeQuery(queryModule);\n dataManager.then(function (e) {\n _this.processResponseJsonData('DataManager', e, layer);\n });\n }\n else if (layer.shapeData instanceof MapAjax) {\n _this.serverProcess['request']++;\n var mapAjax = layer.shapeData;\n var processLayer = layer;\n var xhr_1 = new XMLHttpRequest();\n xhr_1.open('GET', mapAjax.url, true);\n xhr_1.addEventListener('load', function () {\n _this.processResponseJsonData('Ajax', xhr_1.responseText, layer);\n });\n xhr_1.send(mapAjax.sendData);\n }\n if (_this.serverProcess['request'] === _this.serverProcess['response'] && length === layerIndex) {\n _this.processResponseJsonData(null);\n }\n });\n };\n Maps.prototype.processResponseJsonData = function (type, data, layer) {\n if (type) {\n this.serverProcess['response']++;\n layer.shapeData = (type === 'DataManager') ? !isNullOrUndefined(data['result']) ? data['result'] : data['actual'] :\n JSON.parse(data);\n }\n if (!isNullOrUndefined(type) && this.serverProcess['request'] === this.serverProcess['response']) {\n var collection = this.layersCollection;\n this.layersCollection = [];\n for (var i = 0; i < collection.length; i++) {\n if (collection[i].isBaseLayer) {\n this.layersCollection.push(collection[i]);\n }\n }\n for (var j = 0; j < collection.length; j++) {\n if (!collection[j].isBaseLayer) {\n this.layersCollection.push(collection[j]);\n }\n }\n this.renderMap();\n }\n else if (isNullOrUndefined(type)) {\n this.renderMap();\n }\n };\n Maps.prototype.renderMap = function () {\n if (this.legendModule && this.legendSettings.visible) {\n this.legendModule.renderLegend();\n }\n this.createTile();\n if (this.zoomSettings.enable && this.zoomModule) {\n this.zoomModule.createZoomingToolbars();\n }\n this.mapLayerPanel.measureLayerPanel();\n this.element.appendChild(this.svgObject);\n //this.setSecondaryElementPosition();\n this.arrangeTemplate();\n if (this.annotationsModule) {\n this.annotationsModule.renderAnnotationElements();\n }\n this.zoomingChange();\n this.trigger(loaded, { maps: this });\n };\n /**\n * Render the map area border\n */\n Maps.prototype.renderArea = function () {\n var rect = new RectOption(this.element.id + '_MapAreaBorder', this.mapsArea.background, this.mapsArea.border, 1, this.mapAreaRect);\n this.svgObject.appendChild(this.renderer.drawRectangle(rect));\n };\n /**\n * To add tab index for map element\n */\n Maps.prototype.addTabIndex = function () {\n this.element.setAttribute('aria-label', this.description || 'Maps Element');\n this.element.setAttribute('tabindex', this.tabIndex.toString());\n };\n // private setSecondaryElementPosition(): void {\n // if (!this.isTileMap) {\n // let element: HTMLDivElement = getElementByID(this.element.id + '_Secondary_Element') as HTMLDivElement;\n // let rect: ClientRect = this.element.getBoundingClientRect();\n // let svgRect: ClientRect = getElementByID(this.element.id + '_svg').getBoundingClientRect();\n // element.style.marginLeft = Math.max(svgRect.left - rect.left, 0) + 'px';\n // element.style.marginTop = Math.max(svgRect.top - rect.top, 0) + 'px';\n // }\n // }\n Maps.prototype.zoomingChange = function () {\n var left;\n var top;\n if (getElementByID(this.element.id + '_Layer_Collections') && this.zoomModule) {\n this.zoomModule.layerCollectionEle = getElementByID(this.element.id + '_Layer_Collections');\n }\n if (this.isTileMap && getElementByID(this.element.id + '_Tile_SVG') && getElementByID(this.element.id + '_tile_parent')) {\n var tileRect = getElementByID(this.element.id + '_tile_parent').getBoundingClientRect();\n var tileSvgRect = getElementByID(this.element.id + '_Tile_SVG').getBoundingClientRect();\n left = (tileRect.left - tileSvgRect.left);\n top = (tileRect.top - tileSvgRect.top);\n getElementByID(this.element.id + '_Tile_SVG').setAttribute('transform', 'translate(' + left + ' ' + top + ')');\n var markerTemplateElements = document.getElementsByClassName('template');\n if (!isNullOrUndefined(markerTemplateElements) && markerTemplateElements.length > 0) {\n for (var i = 0; i < markerTemplateElements.length; i++) {\n var templateGroupEle = markerTemplateElements[i];\n templateGroupEle.style.left = left + 'px';\n templateGroupEle.style.top = top + 'px';\n }\n }\n }\n if (this.zoomSettings.zoomFactor >= 1) {\n if (this.zoomModule && this.zoomModule.toolBarGroup && this.zoomSettings.enable) {\n this.zoomModule.alignToolBar();\n }\n var elements = this.svgObject.querySelector('#' + this.element.id + '_Layer_Collections');\n if (!isNullOrUndefined(elements) && elements.childElementCount > 0) {\n for (var i = 0; i < elements.childNodes.length; i++) {\n var childElement = elements.childNodes[i];\n if (childElement.tagName === 'g') {\n var layerIndex = parseFloat(childElement.id.split('_')[2]);\n for (var j = 0; j < childElement.childNodes.length; j++) {\n var childNode = childElement.childNodes[j];\n if (!(childNode.id.indexOf('_Markers_Group') > -1) &&\n (!(childNode.id.indexOf('_bubble_Group') > -1)) &&\n (!(childNode.id.indexOf('_dataLableIndex_Group') > -1))) {\n changeBorderWidth(childNode, layerIndex, this.scale, this);\n }\n }\n }\n }\n }\n if (this.zoomModule && (this.previousScale !== this.scale)) {\n this.zoomModule.applyTransform(true);\n }\n }\n };\n Maps.prototype.createSecondaryElement = function () {\n if (isNullOrUndefined(document.getElementById(this.element.id + '_Secondary_Element'))) {\n var secondaryElement = createElement('div', {\n id: this.element.id + '_Secondary_Element',\n styles: 'position: absolute;z-index:1;'\n });\n this.element.appendChild(secondaryElement);\n }\n };\n Maps.prototype.arrangeTemplate = function () {\n var secondaryEle = getElementByID(this.element.id + '_Secondary_Element');\n if (document.getElementById(this.element.id + '_Legend_Border')) {\n document.getElementById(this.element.id + '_Legend_Border').style.pointerEvents = 'none';\n }\n var templateElements = document.getElementsByClassName('template');\n if (!isNullOrUndefined(templateElements) && templateElements.length > 0 && getElementByID(this.element.id + '_Layer_Collections')) {\n for (var i = 0; i < templateElements.length; i++) {\n var templateGroupEle = templateElements[i];\n if (!isNullOrUndefined(templateGroupEle) && templateGroupEle.childElementCount > 0) {\n var layerOffset = getElementByID(this.element.id + '_Layer_Collections').getBoundingClientRect();\n var elementOffset = getElementByID(templateGroupEle.id).getBoundingClientRect();\n for (var j = 0; j < templateGroupEle.childElementCount; j++) {\n var currentTemplate = templateGroupEle.childNodes[j];\n var templateOffset = currentTemplate.getBoundingClientRect();\n currentTemplate.style.left = ((this.isTileMap ? parseFloat(currentTemplate.style.left) :\n ((layerOffset.left < elementOffset.left ? (parseFloat(currentTemplate.style.left) -\n Math.abs(elementOffset.left - layerOffset.left)) : (parseFloat(currentTemplate.style.left) +\n Math.abs(elementOffset.left - layerOffset.left))))) - (templateOffset.width / 2)) + 'px';\n currentTemplate.style.top = ((this.isTileMap ? parseFloat(currentTemplate.style.top) :\n ((layerOffset.top < elementOffset.top ? (parseFloat(currentTemplate.style.top) -\n Math.abs(elementOffset.top - layerOffset.top)) : (parseFloat(currentTemplate.style.top) +\n Math.abs(elementOffset.top - layerOffset.top))))) - (templateOffset.height / 2)) + 'px';\n }\n }\n }\n }\n };\n Maps.prototype.createTile = function () {\n var mainLayer = this.layersCollection[0];\n var padding = 20;\n if (mainLayer.isBaseLayer && (mainLayer.layerType === 'OSM' || mainLayer.layerType === 'Bing')) {\n removeElement(this.element.id + '_tile_parent');\n var elementRect = this.element.getBoundingClientRect();\n var parentRect = this.element.parentElement.getBoundingClientRect();\n var left = Math.abs(elementRect.left - parentRect.left);\n var top_1 = Math.abs(elementRect.top - parentRect.top);\n var ele = createElement('div', {\n id: this.element.id + '_tile_parent', styles: 'position: absolute; left: ' +\n (this.mapAreaRect.x + left) + 'px; top: ' + (this.mapAreaRect.y + top_1 + padding) + 'px; height: ' +\n (this.mapAreaRect.height) + 'px; width: '\n + (this.mapAreaRect.width) + 'px; overflow: hidden;'\n });\n this.element.appendChild(ele);\n }\n };\n /**\n * To initilize the private varibales of maps.\n */\n Maps.prototype.initPrivateVariable = function () {\n this.renderer = new SvgRenderer(this.element.id);\n this.mapLayerPanel = new LayerPanel(this);\n };\n Maps.prototype.findBaseAndSubLayers = function () {\n var _this = this;\n var baseIndex = this.baseLayerIndex;\n var mainLayers = [];\n var subLayers = [];\n this.layersCollection = [];\n this.layers.forEach(function (layer) {\n (layer.type === 'Layer') ? mainLayers.push(layer) : subLayers.push(layer);\n });\n for (var i = 0; i < mainLayers.length; i++) {\n var baseLayer = mainLayers[i];\n if (baseLayer.visible && baseIndex === i) {\n baseLayer.isBaseLayer = true;\n this.isTileMap = (baseLayer.layerType === 'Geometry') ? false : true;\n this.layersCollection.push(baseLayer);\n break;\n }\n else if (i === mainLayers.length - 1) {\n this.layersCollection.push(mainLayers[0]);\n break;\n }\n }\n subLayers.map(function (subLayer, subLayerIndex) {\n if (subLayer.visible) {\n _this.layersCollection.push(subLayer);\n }\n });\n };\n /**\n * @private\n * Render the map border\n */\n Maps.prototype.renderBorder = function () {\n var width = this.border.width;\n if (width > 0 || this.background) {\n var borderRect = new RectOption(this.element.id + '_MapBorder', this.background, this.border, 1, new Rect(width / 2, width / 2, this.availableSize.width - width, this.availableSize.height - width));\n this.svgObject.appendChild(this.renderer.drawRectangle(borderRect));\n }\n };\n /**\n * @private\n * Render the title and subtitle\n */\n Maps.prototype.renderTitle = function (title, type, bounds, groupEle) {\n var style = title.textStyle;\n var height;\n var width = Math.abs((this.margin.left + this.margin.right) - this.availableSize.width);\n if (title.text) {\n if (isNullOrUndefined(groupEle)) {\n groupEle = this.renderer.createGroup({ id: this.element.id + '_Title_Group' });\n }\n var trimmedTitle = textTrim(width, title.text, style);\n var elementSize = measureText(trimmedTitle, style);\n var rect = (isNullOrUndefined(bounds)) ? new Rect(this.margin.left, this.margin.top, this.availableSize.width, this.availableSize.height) : bounds;\n var location_1 = findPosition(rect, title.alignment, elementSize, type);\n var options = new TextOption(this.element.id + '_Map_' + type, location_1.x, location_1.y, 'start', trimmedTitle);\n var titleBounds = new Rect(location_1.x, location_1.y, elementSize.width, elementSize.height);\n var element = renderTextElement(options, style, style.color, groupEle);\n element.setAttribute('aria-label', this.description || title.text);\n element.setAttribute('tabindex', (this.tabIndex + (type === 'title' ? 1 : 2)).toString());\n if ((type === 'title' && !title.subtitleSettings.text) || (type === 'subtitle')) {\n height = Math.abs((titleBounds.y + this.margin.bottom) - this.availableSize.height);\n this.mapAreaRect = new Rect(this.margin.left, titleBounds.y + 10, width, height - 10);\n }\n if (type !== 'subtitle' && title.subtitleSettings.text) {\n this.renderTitle(title.subtitleSettings, 'subtitle', titleBounds, groupEle);\n }\n else {\n this.svgObject.appendChild(groupEle);\n }\n }\n else {\n height = Math.abs((this.margin.top + this.margin.bottom) - this.availableSize.height);\n this.mapAreaRect = new Rect(this.margin.left, this.margin.top, width, height);\n }\n };\n /**\n * To create svg element for maps\n */\n Maps.prototype.createSVG = function () {\n this.removeSvg();\n createSvg(this);\n };\n /**\n * To Remove the SVG\n */\n Maps.prototype.removeSvg = function () {\n removeElement(this.element.id + '_Secondary_Element');\n removeElement(this.element.id + '_tile_parent');\n if (document.getElementsByClassName('e-tooltip-wrap')[0]) {\n remove(document.getElementsByClassName('e-tooltip-wrap')[0]);\n }\n if (this.svgObject) {\n while (this.svgObject.childNodes.length > 0) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode) {\n remove(this.svgObject);\n }\n }\n };\n /**\n * To bind event handlers for maps.\n */\n Maps.prototype.wireEVents = function () {\n //let cancelEvent: string = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n EventHandler.add(this.element, 'click', this.mapsOnClick, this);\n // EventHandler.add(this.element, 'contextmenu', this.mapsOnRightClick, this);\n EventHandler.add(this.element, 'dblclick', this.mapsOnDoubleClick, this);\n EventHandler.add(this.element, Browser.touchStartEvent, this.mouseDownOnMap, this);\n EventHandler.add(this.element, Browser.touchMoveEvent, this.mouseMoveOnMap, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.mouseEndOnMap, this);\n // EventHandler.add(this.element, cancelEvent, this.mouseLeaveOnMap, this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.mapsOnResize.bind(this));\n };\n /**\n * To unbind event handlers from maps.\n */\n Maps.prototype.unWireEVents = function () {\n //let cancelEvent: string = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n EventHandler.remove(this.element, 'click', this.mapsOnClick);\n // EventHandler.remove(this.element, 'contextmenu', this.mapsOnRightClick);\n EventHandler.remove(this.element, 'dblclick', this.mapsOnDoubleClick);\n EventHandler.remove(this.element, Browser.touchStartEvent, this.mouseDownOnMap);\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.mouseMoveOnMap);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.mouseEndOnMap);\n //EventHandler.remove(this.element, cancelEvent, this.mouseLeaveOnMap);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.mapsOnResize);\n };\n /**\n * To handle the click event for the maps.\n */\n /* tslint:disable:no-string-literal */\n Maps.prototype.mapsOnClick = function (e) {\n var targetEle = e.target;\n var targetId = targetEle.id;\n var eventArgs = {\n cancel: false, name: click, target: targetId, x: e.clientX, y: e.clientY\n };\n this.trigger(click, eventArgs);\n if (targetEle.id.indexOf('ShapeIndex') !== -1) {\n var layerIndex = parseInt(targetEle.id.split('_LayerIndex_')[1].split('_')[0], 10);\n triggerShapeEvent(targetId, this.layers[layerIndex].selectionSettings, this, shapeSelected);\n }\n if (this.markerModule) {\n this.markerModule.markerClick(e);\n }\n if (this.bubbleModule) {\n this.bubbleModule.bubbleClick(e);\n }\n if (!eventArgs.cancel) {\n this.notify(click, targetEle);\n }\n };\n /**\n *\n */\n Maps.prototype.mouseEndOnMap = function (e) {\n var pageX;\n var pageY;\n var target;\n var touchArg;\n var rect = this.element.getBoundingClientRect();\n var element = e.target;\n if (e.type.indexOf('touch') !== -1) {\n this.isTouch = true;\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n pageY = touchArg.changedTouches[0].clientY;\n target = touchArg.target;\n }\n else {\n this.isTouch = e.pointerType === 'touch';\n pageX = e.clientX;\n pageY = e.clientY;\n target = e.target;\n }\n if (this.isTouch) {\n this.titleTooltip(e, pageX, pageY, true);\n }\n this.notify(Browser.touchEndEvent, e);\n e.preventDefault();\n return false;\n };\n /**\n *\n */\n Maps.prototype.mouseDownOnMap = function (e) {\n var pageX;\n var pageY;\n var target;\n var touchArg;\n var rect = this.element.getBoundingClientRect();\n var element = e.target;\n this.notify(Browser.touchStartEvent, e);\n };\n /**\n * To handle the double click event for the maps.\n */\n Maps.prototype.mapsOnDoubleClick = function (e) {\n this.notify('dblclick', e);\n };\n /**\n *\n */\n /* tslint:disable:no-string-literal */\n Maps.prototype.mouseMoveOnMap = function (e) {\n var pageX;\n var pageY;\n var touchArg;\n var target;\n var touches = null;\n target = (e.type === 'touchmove') ? e.target :\n target = e.target;\n if (target.id.indexOf('_MarkerIndex_') > -1 && this.markerModule) {\n this.markerModule.markerExplode(target.id, target);\n }\n // if (target.id.indexOf('ShapeIndex') !== -1 && !this.highlightSettings.enable) {\n // triggerShapeEvent(target.id, this.highlightSettings, this, shapeHighlight);\n // }\n if (this.markerModule) {\n this.markerModule.markerMove(e);\n }\n if (this.bubbleModule) {\n this.bubbleModule.bubbleMove(e);\n }\n this.onMouseMove(e);\n this.notify(Browser.touchMoveEvent, e);\n };\n Maps.prototype.onMouseMove = function (e) {\n var element = e.target;\n var pageX;\n var pageY;\n var target;\n var touchArg;\n if (!this.isTouch) {\n this.titleTooltip(e, e.pageX, e.pageY);\n }\n return false;\n };\n Maps.prototype.titleTooltip = function (event, x, y, isTouch) {\n var targetId = event.target.id;\n if ((targetId === (this.element.id + '_Map_title')) && (event.target.textContent.indexOf('...') > -1)) {\n showTooltip(this.titleSettings.text, this.titleSettings.textStyle.size, x, y, this.element.offsetWidth, this.element.offsetHeight, this.element.id + '_EJ2_Title_Tooltip', getElement(this.element.id + '_Secondary_Element'), isTouch);\n }\n else {\n removeElement(this.element.id + '_EJ2_Title_Tooltip');\n }\n };\n /*\n\n /**\n * To handle the window resize event on maps.\n */\n Maps.prototype.mapsOnResize = function (e) {\n var _this = this;\n var args = {\n name: resize,\n previousSize: this.availableSize,\n currentSize: new Size(0, 0),\n maps: this\n };\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n if (this.element.classList.contains('e-maps')) {\n this.resizeTo = setTimeout(function () {\n _this.unWireEVents();\n _this.createSVG();\n _this.refreshing = true;\n _this.wireEVents();\n args.currentSize = _this.availableSize;\n _this.trigger(resize, args);\n _this.render();\n }, 500);\n }\n return false;\n };\n Maps.prototype.zoomByPosition = function (centerPosition, zoomFactor) {\n var lattitude = centerPosition.latitude;\n var longitude = centerPosition.longitude;\n var factor = this.mapLayerPanel.calculateFactor(this.layersCollection[0]);\n var position = convertGeoToPoint(lattitude, longitude, factor, this.layersCollection[0], this);\n if (this.zoomModule) {\n this.zoomModule.performZooming(position, zoomFactor, 'ZoomIn');\n }\n };\n /**\n * To add layers to maps\n */\n Maps.prototype.addLayer = function (layer) {\n this.layers.push(new LayerSettings(this.layers[0], 'layers', layer));\n this.refresh();\n };\n /**\n * To remove layers from maps\n */\n Maps.prototype.removeLayer = function (index) {\n this.layers.splice(index, 1);\n this.refresh();\n };\n /**\n * To add marker to layers\n */\n Maps.prototype.addMarker = function (layerIndex, marker) {\n var currentMarker = this.layers[layerIndex].markerSettings;\n currentMarker.push(new MarkerSettings(currentMarker[0], 'markerSettings', marker));\n this.refresh();\n };\n /**\n * Method to set culture for maps\n */\n Maps.prototype.setCulture = function () {\n this.intl = new Internationalization();\n this.setLocaleConstants();\n this.localeObject = new L10n(this.getModuleName(), this.defaultLocalConstants, this.locale);\n };\n /**\n * Method to set locale constants\n */\n Maps.prototype.setLocaleConstants = function () {\n // Need to modify after the api confirm\n this.defaultLocalConstants = {\n ZoomIn: 'ZoomIn',\n Zoom: 'Zoom',\n ZoomOut: 'ZoomOut',\n Pan: 'Pan',\n Reset: 'Reset',\n };\n };\n /**\n * To destroy maps control.\n */\n Maps.prototype.destroy = function () {\n this.unWireEVents();\n _super.prototype.destroy.call(this);\n };\n /**\n * Get component name\n */\n Maps.prototype.getModuleName = function () {\n return 'maps';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Maps.prototype.getPersistData = function () {\n return '';\n };\n /**\n * Called internally if any of the property value changed.\n * @private\n */\n Maps.prototype.onPropertyChanged = function (newProp, oldProp) {\n var render = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'background':\n this.renderBorder();\n break;\n case 'height':\n case 'width':\n this.createSVG();\n render = true;\n break;\n }\n }\n if (render) {\n this.render();\n }\n };\n /**\n * To provide the array of modules needed for maps rendering\n * @return {ModuleDeclaration[]}\n * @private\n */\n Maps.prototype.requiredModules = function () {\n var modules = [];\n var isVisible = this.findVisibleLayers(this.layers);\n var annotationEnable = false;\n this.annotations.map(function (annotation, index) {\n annotationEnable = annotation.content != null;\n });\n if (this.isBubbleVisible()) {\n modules.push({\n member: 'Bubble',\n args: [this]\n });\n }\n if (isVisible.highlight) {\n modules.push({\n member: 'Highlight',\n args: [this]\n });\n }\n if (isVisible.selection) {\n modules.push({\n member: 'Selection',\n args: [this]\n });\n }\n if (this.legendSettings.visible) {\n modules.push({\n member: 'Legend',\n args: [this]\n });\n }\n if (this.zoomSettings.enable || this.zoomSettings.zoomFactor > this.zoomSettings.minZoom) {\n modules.push({\n member: 'Zoom',\n args: [this]\n });\n }\n if (this.isMarkersVisible()) {\n modules.push({\n member: 'Marker',\n args: [this]\n });\n }\n if (this.isDataLabelVisible()) {\n modules.push({\n member: 'DataLabel',\n args: [this]\n });\n }\n if (this.isNavigationVisible()) {\n modules.push({\n member: 'NavigationLine',\n args: [this]\n });\n }\n if (isVisible.tooltip) {\n modules.push({\n member: 'MapsTooltip',\n args: [this]\n });\n }\n if (annotationEnable) {\n modules.push({\n member: 'Annotations',\n args: [this, Annotations]\n });\n }\n return modules;\n };\n /**\n * To find marker visibility\n */\n Maps.prototype.isMarkersVisible = function () {\n var isVisible = false;\n this.layers.forEach(function (layer, layerIndex) {\n for (var i = 0; i < layer.markerSettings.length; i++) {\n if (layer.markerSettings[i].visible) {\n isVisible = true;\n break;\n }\n }\n });\n return isVisible;\n };\n /**\n * To find DataLabel visibility\n */\n Maps.prototype.isDataLabelVisible = function () {\n var isVisible = false;\n for (var i = 0; i < this.layers.length; i++) {\n if (this.layers[i].dataLabelSettings.visible) {\n isVisible = true;\n break;\n }\n }\n return isVisible;\n };\n /**\n * To find navigation line visibility\n */\n Maps.prototype.isNavigationVisible = function () {\n var isVisible = false;\n this.layers.forEach(function (layer, layerIndex) {\n for (var i = 0; i < layer.navigationLineSettings.length; i++) {\n if (layer.navigationLineSettings[i].visible) {\n isVisible = true;\n break;\n }\n }\n });\n return isVisible;\n };\n /**\n * To find marker visibility\n */\n Maps.prototype.isBubbleVisible = function () {\n var isVisible = false;\n for (var _i = 0, _a = this.layers; _i < _a.length; _i++) {\n var layer = _a[_i];\n if (this.getBubbleVisible(layer)) {\n isVisible = true;\n break;\n }\n }\n return isVisible;\n };\n /**\n * To find the bubble visibility from layer\n * @private\n */\n Maps.prototype.getBubbleVisible = function (layer) {\n var isVisible = false;\n for (var _i = 0, _a = layer.bubbleSettings; _i < _a.length; _i++) {\n var bubble = _a[_i];\n if (bubble.visible) {\n isVisible = true;\n break;\n }\n }\n return isVisible;\n };\n /**\n * Handles the print method for chart control.\n */\n Maps.prototype.print = function (id) {\n var exportChart = new ExportUtils(this);\n exportChart.print(id);\n };\n /**\n * Handles the export method for chart control.\n * @param type\n * @param fileName\n */\n Maps.prototype.export = function (type, fileName, orientation) {\n var exportMap = new ExportUtils(this);\n exportMap.export(type, fileName, orientation);\n };\n /**\n * To find visibility of layers and markers for required modules load.\n */\n Maps.prototype.findVisibleLayers = function (layers, isLayerVisible, isBubblevisible, istooltipVisible, isSelection, isHighlight) {\n if (isLayerVisible === void 0) { isLayerVisible = false; }\n if (isBubblevisible === void 0) { isBubblevisible = false; }\n if (istooltipVisible === void 0) { istooltipVisible = false; }\n if (isSelection === void 0) { isSelection = false; }\n if (isHighlight === void 0) { isHighlight = false; }\n var bubbles;\n var markers;\n var navigationLine;\n for (var _i = 0, layers_2 = layers; _i < layers_2.length; _i++) {\n var layer = layers_2[_i];\n isLayerVisible = layer.visible || isLayerVisible;\n if (layer.visible) {\n bubbles = layer.bubbleSettings;\n markers = layer.markerSettings;\n navigationLine = layer.navigationLineSettings;\n for (var _a = 0, navigationLine_1 = navigationLine; _a < navigationLine_1.length; _a++) {\n var navigation = navigationLine_1[_a];\n if (navigation.visible) {\n isSelection = navigation.highlightSettings.enable || isSelection;\n isHighlight = navigation.selectionSettings.enable || isHighlight;\n }\n }\n for (var _b = 0, markers_1 = markers; _b < markers_1.length; _b++) {\n var marker = markers_1[_b];\n if (marker.visible) {\n istooltipVisible = marker.tooltipSettings.visible || istooltipVisible;\n isSelection = marker.selectionSettings.enable || isSelection;\n isHighlight = marker.highlightSettings.enable || isHighlight;\n }\n if (istooltipVisible) {\n break;\n }\n }\n for (var _c = 0, bubbles_1 = bubbles; _c < bubbles_1.length; _c++) {\n var bubble = bubbles_1[_c];\n if (bubble.visible) {\n istooltipVisible = bubble.tooltipSettings.visible || istooltipVisible;\n isSelection = bubble.selectionSettings.enable || isSelection;\n isHighlight = bubble.highlightSettings.enable || isHighlight;\n }\n if (istooltipVisible) {\n break;\n }\n }\n istooltipVisible = layer.tooltipSettings.visible || istooltipVisible;\n isSelection = layer.selectionSettings.enable || isSelection;\n isHighlight = layer.highlightSettings.enable || isHighlight;\n }\n if (isLayerVisible && isBubblevisible && istooltipVisible) {\n break;\n }\n }\n return {\n layer: isLayerVisible, bubble: isBubblevisible, tooltip: istooltipVisible,\n selection: isSelection, highlight: isHighlight\n };\n };\n __decorate([\n Property(null)\n ], Maps.prototype, \"background\", void 0);\n __decorate([\n Property(false)\n ], Maps.prototype, \"useGroupingSeparator\", void 0);\n __decorate([\n Property(null)\n ], Maps.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], Maps.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Maps.prototype, \"height\", void 0);\n __decorate([\n Complex({}, TitleSettings)\n ], Maps.prototype, \"titleSettings\", void 0);\n __decorate([\n Complex({}, ZoomSettings)\n ], Maps.prototype, \"zoomSettings\", void 0);\n __decorate([\n Complex({}, LegendSettings)\n ], Maps.prototype, \"legendSettings\", void 0);\n __decorate([\n Collection([], LayerSettings)\n ], Maps.prototype, \"layers\", void 0);\n __decorate([\n Collection([], Annotation)\n ], Maps.prototype, \"annotations\", void 0);\n __decorate([\n Complex({}, Margin)\n ], Maps.prototype, \"margin\", void 0);\n __decorate([\n Complex({ color: '#DDDDDD', width: 0 }, Border)\n ], Maps.prototype, \"border\", void 0);\n __decorate([\n Property('Material')\n ], Maps.prototype, \"theme\", void 0);\n __decorate([\n Property('Mercator')\n ], Maps.prototype, \"projectionType\", void 0);\n __decorate([\n Property(0)\n ], Maps.prototype, \"baseLayerIndex\", void 0);\n __decorate([\n Property(null)\n ], Maps.prototype, \"description\", void 0);\n __decorate([\n Property(1)\n ], Maps.prototype, \"tabIndex\", void 0);\n __decorate([\n Property({ latitude: null, longitude: null })\n ], Maps.prototype, \"centerPosition\", void 0);\n __decorate([\n Complex({}, MapsAreaSettings)\n ], Maps.prototype, \"mapsArea\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"doubleClick\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"rightClick\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"resize\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"shapeSelected\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"itemSelection\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"itemHighlight\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"shapeHighlight\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"layerRendering\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"shapeRendering\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"markerRendering\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"markerClick\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"markerMouseMove\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"dataLabelRendering\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"bubbleRendering\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"bubbleClick\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"bubbleMouseMove\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], Maps.prototype, \"annotationRendering\", void 0);\n Maps = __decorate([\n NotifyPropertyChanges\n ], Maps);\n return Maps;\n}(Component));\nexport { Maps };\n","import { ColorMapping, bubbleRendering } from '../index';\nimport { bubbleClick, bubbleMouseMove } from '../index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CircleOption, MapLocation, findMidPointOfPolygon, Point, drawCircle, elementAnimate, getTranslate } from '../utils/helper';\nimport { RectOption, Rect, drawRectangle } from '../utils/helper';\n/**\n * Bubble module class\n */\nvar Bubble = /** @class */ (function () {\n function Bubble(maps) {\n /**\n * Bubble Id for current layer\n */\n this.id = '';\n this.maps = maps;\n this.bubbleCollection = [];\n }\n /**\n * To render bubble\n */\n /* tslint:disable:no-string-literal */\n Bubble.prototype.renderBubble = function (bubbleSettings, shapeData, color, range, bubbleIndex, dataIndex, layerIndex, layer, group) {\n var layerData = layer.layerData;\n var colorValuePath = bubbleSettings.colorValuePath;\n var equalValue = shapeData[colorValuePath];\n var colorValue = Number(shapeData[colorValuePath]);\n var bubbleValue = Number(shapeData[bubbleSettings.valuePath]);\n if (isNaN(bubbleValue) && isNaN(colorValue) && isNullOrUndefined(equalValue)) {\n return null;\n }\n var radius = this.getRatioOfBubble(bubbleSettings.minRadius, bubbleSettings.maxRadius, bubbleValue, range.min, range.max);\n var colorMapping = new ColorMapping(this.maps);\n var shapeColor = colorMapping.getColorByValue(bubbleSettings.colorMapping, colorValue, equalValue);\n shapeColor = shapeColor ? shapeColor : color;\n var shapePoints = [[]];\n var midIndex = 0;\n var pointsLength = 0;\n var currentLength = 0;\n for (var i = 0, len = layerData.length; i < len; i++) {\n var shape = layerData[i];\n shape = shape['property'];\n if (shapeData[layer.shapeDataPath] === shape[layer.shapePropertyPath]) {\n if (!layerData[i]['_isMultiPolygon']) {\n shapePoints.push(this.getPoints(layerData[i], []));\n currentLength = shapePoints[shapePoints.length - 1].length;\n if (pointsLength < currentLength) {\n pointsLength = currentLength;\n midIndex = shapePoints.length - 1;\n }\n }\n else {\n var layer_1 = layerData[i];\n for (var j = 0; j < layer_1.length; j++) {\n shapePoints.push(this.getPoints(layer_1[j], []));\n currentLength = shapePoints[shapePoints.length - 1].length;\n if (pointsLength < currentLength) {\n pointsLength = currentLength;\n midIndex = shapePoints.length - 1;\n }\n }\n }\n }\n }\n var center = findMidPointOfPolygon(shapePoints[midIndex]);\n if (!isNullOrUndefined(center)) {\n var centerY = this.maps.projectionType === 'Mercator' ? center['y'] : (-center['y']);\n var eventArgs = {\n cancel: false, name: bubbleRendering, border: bubbleSettings.border,\n cx: center['x'], cy: centerY, data: shapeData, fill: shapeColor, maps: this.maps,\n radius: radius\n };\n this.maps.trigger(bubbleRendering, eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n var bubbleElement = void 0;\n if (bubbleSettings.bubbleType === 'Circle') {\n var circle = new CircleOption(this.id, eventArgs.fill, eventArgs.border, bubbleSettings.opacity, 0, 0, eventArgs.radius, null);\n bubbleElement = drawCircle(this.maps, circle, group);\n }\n else {\n var y = this.maps.projectionType === 'Mercator' ? (eventArgs.cy - radius) : (eventArgs.cy + radius);\n var rectangle = new RectOption(this.id, eventArgs.fill, eventArgs.border, bubbleSettings.opacity, new Rect(0, 0, radius * 2, radius * 2), 2, 2);\n eventArgs.cx -= radius;\n eventArgs.cy = y;\n bubbleElement = drawRectangle(this.maps, rectangle, group);\n }\n this.bubbleCollection.push({\n LayerIndex: layerIndex,\n BubbleIndex: bubbleIndex,\n DataIndex: dataIndex,\n element: bubbleElement,\n center: { x: eventArgs.cx, y: eventArgs.cy }\n });\n var animate = layer.animationDuration !== 0 || isNullOrUndefined(this.maps.zoomModule);\n var translate = getTranslate(this.maps, layer, animate);\n var scale = translate['scale'];\n var transPoint = translate['location'];\n var position = new MapLocation((this.maps.isTileMap ? (eventArgs.cx) : ((eventArgs.cx + transPoint.x) * scale)), (this.maps.isTileMap ? (eventArgs.cy) : ((eventArgs.cy + transPoint.y) * scale)));\n bubbleElement.setAttribute('transform', 'translate( ' + (position.x) + ' ' + (position.y) + ' )');\n var bubble = (bubbleSettings.dataSource.length - 1) === dataIndex ? 'bubble' : null;\n if (bubbleSettings.bubbleType === 'Square') {\n position.x += radius;\n position.y += radius * (this.maps.projectionType === 'Mercator' ? 1 : -1);\n }\n else {\n radius = 0;\n }\n if (bubbleSettings.animationDuration > 0) {\n elementAnimate(bubbleElement, bubbleSettings.animationDelay, bubbleSettings.animationDuration, position, this.maps, bubble, radius);\n }\n }\n };\n Bubble.prototype.getPoints = function (shape, points) {\n shape.map(function (current, index) {\n points.push(new Point(current['point']['x'], current['point']['y']));\n });\n return points;\n };\n Bubble.prototype.getRatioOfBubble = function (min, max, value, minValue, maxValue) {\n var percent = (100 / (maxValue - minValue)) * (value - minValue);\n var bubbleRadius = (((max - min) / 100) * percent) + min;\n if (maxValue === minValue) {\n bubbleRadius = (((max - min) / 100)) + min;\n }\n return bubbleRadius;\n };\n /**\n * To check and trigger bubble click event\n */\n Bubble.prototype.bubbleClick = function (e) {\n var target = e.target.id;\n if (target.indexOf('_LayerIndex_') === -1) {\n return;\n }\n var data = this.getbubble(target);\n if (isNullOrUndefined(data)) {\n return;\n }\n var eventArgs = {\n cancel: false, name: bubbleClick, data: data, maps: this.maps,\n target: target, x: e.clientX, y: e.clientY\n };\n this.maps.trigger(bubbleClick, eventArgs);\n };\n /**\n * To get bubble from target id\n */\n Bubble.prototype.getbubble = function (target) {\n var id = target.split('_LayerIndex_');\n var index = parseInt(id[1].split('_')[0], 10);\n var layer = this.maps.layers[index];\n var data;\n if (target.indexOf('_BubbleIndex_') > -1) {\n var bubbleIndex = parseInt(id[1].split('_BubbleIndex_')[1], 10);\n if (!isNaN(bubbleIndex)) {\n data = layer.dataSource[bubbleIndex];\n return data;\n }\n }\n return null;\n };\n /**\n * To check and trigger bubble move event\n */\n Bubble.prototype.bubbleMove = function (e) {\n var target = e.target.id;\n if (target.indexOf('_LayerIndex_') === -1) {\n return;\n }\n var data = this.getbubble(target);\n if (isNullOrUndefined(data)) {\n return;\n }\n var eventArgs = {\n cancel: false, name: bubbleMouseMove, data: data, maps: this.maps,\n target: target, x: e.clientX, y: e.clientY\n };\n this.maps.trigger(bubbleMouseMove, eventArgs);\n };\n /**\n * Get module name.\n */\n Bubble.prototype.getModuleName = function () {\n return 'Bubble';\n };\n /**\n * To destroy the bubble.\n * @return {void}\n * @private\n */\n Bubble.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n };\n return Bubble;\n}());\nexport { Bubble };\n","import { markerRendering, convertTileLatLongToPoint, MapLocation } from '../index';\nimport { markerClick, markerMouseMove } from '../index';\nimport { isNullOrUndefined, merge, createElement, remove } from '@syncfusion/ej2-base';\nimport { CircleOption, PathOption, Point, getTranslate, convertGeoToPoint } from '../utils/helper';\nimport { getTemplateFunction, getElementByID, convertElement, calculateShapes, Size, RectOption, Rect, elementAnimate } from '../utils/helper';\n/**\n * Marker class\n */\nvar Marker = /** @class */ (function () {\n function Marker(maps) {\n this.maps = maps;\n this.trackElements = [];\n }\n /* tslint:disable:no-string-literal */\n Marker.prototype.markerRender = function (layerElement, layerIndex, factor) {\n var _this = this;\n var templateFn;\n var currentLayer = this.maps.layersCollection[layerIndex];\n this.markerSVGObject = this.maps.renderer.createGroup({ id: this.maps.element.id + '_Markers_Group' });\n var markerTemplateEle = createElement('div', {\n id: this.maps.element.id + '_LayerIndex_' + layerIndex + '_Markers_Template_Group',\n className: 'template',\n styles: 'overflow: hidden; position: absolute;pointer-events: none;' +\n 'top:' + (this.maps.isTileMap ? 0 : this.maps.mapAreaRect.y) + 'px;' +\n 'left:' + (this.maps.isTileMap ? 0 : this.maps.mapAreaRect.x) + 'px;' +\n 'height:' + this.maps.mapAreaRect.height + 'px;' +\n 'width:' + this.maps.mapAreaRect.width + 'px;'\n });\n currentLayer.markerSettings.map(function (markerSettings, markerIndex) {\n var markerData = markerSettings.dataSource;\n markerData.forEach(function (data, dataIndex) {\n var eventArgs = {\n cancel: false, name: markerRendering, fill: markerSettings.fill, height: markerSettings.height,\n width: markerSettings.width, imageUrl: markerSettings.imageUrl, shape: markerSettings.shape,\n template: markerSettings.template, data: data, maps: _this.maps, marker: markerSettings,\n border: markerSettings.border\n };\n _this.maps.trigger(markerRendering, eventArgs);\n var lng = data['longitude'];\n var lat = data['latitude'];\n var offset = markerSettings.offset;\n if (!eventArgs.cancel && markerSettings.visible && !isNullOrUndefined(lng) && !isNullOrUndefined(lat)) {\n var markerID = _this.maps.element.id + '_LayerIndex_' + layerIndex + '_MarkerIndex_'\n + markerIndex + '_DataIndex_' + dataIndex;\n var location_1 = (_this.maps.isTileMap) ? convertTileLatLongToPoint(new MapLocation(lng, lat), factor, _this.maps.tileTranslatePoint, true) : convertGeoToPoint(lat, lng, factor, currentLayer, _this.maps);\n var animate = currentLayer.animationDuration !== 0 || isNullOrUndefined(_this.maps.zoomModule);\n var translate = (_this.maps.isTileMap) ? new Object() : getTranslate(_this.maps, currentLayer, animate);\n var scale = translate['scale'];\n var transPoint = translate['location'];\n if (eventArgs.template) {\n templateFn = getTemplateFunction(eventArgs.template);\n if (templateFn && templateFn(_this.maps).length) {\n var templateElement = templateFn(_this.maps);\n var markerElement = convertElement(templateElement, markerID, data, markerIndex, _this.maps);\n markerElement.style.left = ((_this.maps.isTileMap ? location_1.x :\n ((Math.abs(_this.maps.baseMapRectBounds['min']['x'] - location_1.x)) * scale)) + offset.x) + 'px';\n markerElement.style.top = ((_this.maps.isTileMap ? location_1.y :\n ((Math.abs(_this.maps.baseMapRectBounds['min']['y'] - location_1.y)) * scale)) + offset.y) + 'px';\n markerTemplateEle.appendChild(markerElement);\n }\n }\n else {\n var shapeCustom = {\n size: new Size(eventArgs.width, eventArgs.height),\n fill: eventArgs.fill, borderColor: eventArgs.border.color,\n borderWidth: eventArgs.border.width, opacity: markerSettings.opacity,\n dashArray: markerSettings.dashArray\n };\n var ele = _this.drawSymbol(eventArgs.shape, eventArgs.imageUrl, { x: 0, y: 0 }, markerID, shapeCustom);\n var x = (_this.maps.isTileMap ? location_1.x : (location_1.x + transPoint.x) * scale) + offset.x;\n var y = (_this.maps.isTileMap ? location_1.y : (location_1.y + transPoint.y) * scale) + offset.y;\n ele.setAttribute('transform', 'translate( ' + x + ' ' + y + ' )');\n _this.markerSVGObject.appendChild(ele);\n var element = (markerData.length - 1) === dataIndex ? 'marker' : null;\n var markerPoint = new Point(x, y);\n if (markerSettings.animationDuration > 0) {\n elementAnimate(ele, markerSettings.animationDelay, markerSettings.animationDuration, markerPoint, _this.maps, element);\n }\n }\n }\n });\n });\n if (this.markerSVGObject.childElementCount > 0) {\n layerElement.appendChild(this.markerSVGObject);\n }\n if (markerTemplateEle.childElementCount > 0 && getElementByID(this.maps.element.id + '_Secondary_Element')) {\n getElementByID(this.maps.element.id + '_Secondary_Element').appendChild(markerTemplateEle);\n }\n };\n Marker.prototype.markerExplode = function (targetId, targetElement) {\n var layerIndex = parseFloat(targetId.split('_')[2]);\n var markerIndex = parseFloat(targetId.split('_')[4]);\n var dataIndex = parseFloat(targetId.split('_')[6]);\n var layer = this.maps.layersCollection[layerIndex];\n var marker = layer.markerSettings[markerIndex];\n var element = ((marker.shape === 'Balloon') ? targetElement.parentNode : targetElement);\n var lat = marker.dataSource[dataIndex]['latitude'];\n var lng = marker.dataSource[dataIndex]['longitude'];\n var factor = 1;\n var transform = element.getAttribute('transform') || '';\n var transX = parseFloat(transform.split(' ')[1]);\n var transY = parseFloat(transform.split(' ')[2]);\n var location = { x: transX, y: transY };\n var elements = document.getElementsByClassName('EJ2-Map_Trackball');\n if (elements.length > 0 && this.previousExplodeId !== targetId) {\n this.removeTrackElements();\n }\n if (elements.length === 0 && marker.shape !== 'Image' && isNullOrUndefined(marker.template)) {\n for (var i = 0; i < 2; i++) {\n var markerID = this.maps.element.id + '_LayerIndex_' + layerIndex + '_MarkerIndex_'\n + markerIndex + '_Trackball_' + i;\n var shape = {\n size: new Size((marker.width + 5) + (i ? 20 : 0), (marker.height + 5) + (i ? 10 : 0)),\n fill: marker.fill, borderColor: i ? 'transparent' : marker.border.color,\n borderWidth: i ? 0 : marker.border.width, opacity: i ? 0.2 : marker.opacity,\n dashArray: marker.dashArray\n };\n if (marker.shape === 'Balloon') {\n var rect = element.getBoundingClientRect();\n var currentWidth = (rect.width / 2) - (shape['size'].width / 2);\n var currentHeight = (rect.height / 2) - (shape['size'].height / 2);\n location.y -= currentHeight;\n location.x += currentWidth / 4;\n }\n var trackEle = this.drawSymbol(marker.shape, marker.imageUrl, location, markerID, shape);\n location.x = transX;\n location.y = transY;\n trackEle.setAttribute('style', 'pointer-events:none');\n trackEle.setAttribute('class', 'EJ2-Map_Trackball');\n this.trackElements.push(trackEle);\n element.parentNode.appendChild(trackEle);\n }\n this.previousExplodeId = targetId;\n this.removeMarkerExplode();\n }\n };\n /**\n * @private\n */\n Marker.prototype.removeMarkerExplode = function () {\n this.isMarkerExplode = window.setTimeout(this.removeTrackElements, 2000);\n };\n Marker.prototype.removeTrackElements = function () {\n var elements = document.getElementsByClassName('EJ2-Map_Trackball');\n for (var i = 0, len = elements.length; i < len; i++) {\n this.previousExplodeId = '';\n remove(elements[0]);\n }\n };\n Marker.prototype.drawSymbol = function (shape, imageUrl, location, markerID, shapeCustom) {\n var markerEle;\n var x;\n var y;\n var size = shapeCustom['size'];\n var borderColor = shapeCustom['borderColor'];\n var borderWidth = parseFloat(shapeCustom['borderWidth']);\n var fill = shapeCustom['fill'];\n var dashArray = shapeCustom['dashArray'];\n var border = { color: borderColor, width: borderWidth };\n var opacity = shapeCustom['opacity'];\n var circleOptions;\n var pathOptions;\n var rectOptions;\n pathOptions = new PathOption(markerID, fill, borderWidth, borderColor, opacity, dashArray, '');\n if (shape === 'Circle') {\n var radius = (size.width + size.height) / 4;\n circleOptions = new CircleOption(markerID, fill, border, opacity, location.x, location.y, radius, dashArray);\n markerEle = this.maps.renderer.drawCircle(circleOptions);\n }\n else if (shape === 'Rectangle') {\n x = location.x - (size.width / 2);\n y = location.y - (size.height / 2);\n rectOptions = new RectOption(markerID, fill, border, opacity, new Rect(x, y, size.width, size.height), null, null, '', dashArray);\n markerEle = this.maps.renderer.drawRectangle(rectOptions);\n }\n else if (shape === 'Image') {\n x = location.x - (size.width / 2);\n y = location.y - (size.height / 2);\n merge(pathOptions, { 'href': imageUrl, 'height': size.height, 'width': size.width, x: x, y: y });\n markerEle = this.maps.renderer.drawImage(pathOptions);\n }\n else {\n markerEle = calculateShapes(this.maps, shape, pathOptions, size, location, this.markerSVGObject);\n }\n return markerEle;\n };\n /**\n * To check and trigger marker click event\n */\n Marker.prototype.markerClick = function (e) {\n var target = e.target.id;\n if (target.indexOf('_LayerIndex_') === -1) {\n return;\n }\n var options = this.getMarker(target);\n if (isNullOrUndefined(options)) {\n return;\n }\n var eventArgs = {\n cancel: false, name: markerClick, data: options.data, maps: this.maps, marker: options.marker,\n target: target, x: e.clientX, y: e.clientY\n };\n this.maps.trigger(markerClick, eventArgs);\n };\n /**\n * To get marker from target id\n */\n Marker.prototype.getMarker = function (target) {\n var id = target.split('_LayerIndex_');\n var index = parseInt(id[1].split('_')[0], 10);\n var layer = this.maps.layers[index];\n var data;\n var marker;\n if (target.indexOf('_MarkerIndex_') > -1) {\n var markerIndex = parseInt(id[1].split('_MarkerIndex_')[1].split('_')[0], 10);\n var dataIndex = parseInt(id[1].split('_DataIndex_')[1].split('_')[0], 10);\n marker = layer.markerSettings[markerIndex];\n if (!isNaN(markerIndex)) {\n data = marker.dataSource[dataIndex];\n return { marker: marker, data: data };\n }\n }\n return null;\n };\n /**\n * To check and trigger marker move event\n */\n Marker.prototype.markerMove = function (e) {\n var targetId = e.target.id;\n if (targetId.indexOf('_LayerIndex_') === -1) {\n return;\n }\n var options = this.getMarker(targetId);\n if (isNullOrUndefined(options)) {\n return;\n }\n var eventArgs = {\n cancel: false, name: markerMouseMove, data: options.data, maps: this.maps,\n target: targetId, x: e.clientX, y: e.clientY\n };\n this.maps.trigger(markerMouseMove, eventArgs);\n };\n /**\n * Get module name.\n */\n Marker.prototype.getModuleName = function () {\n return 'Marker';\n };\n /**\n * To destroy the layers.\n * @return {void}\n * @private\n */\n Marker.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n };\n return Marker;\n}());\nexport { Marker };\n","import { findMidPointOfPolygon, Rect, filter, getTemplateFunction, getTranslate, RectOption, convertElementFromLabel, Point, TextOption, renderTextElement, textTrim, measureText, Internalize } from '../utils/helper';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\n/**\n * DataLabel class\n */\nvar DataLabel = /** @class */ (function () {\n function DataLabel(maps) {\n this.intersect = [];\n this.value = { rightWidth: 0, leftWidth: 0, heightTop: 0, heightBottom: 0 };\n this.maps = maps;\n this.dataLabelCollections = [];\n }\n //tslint:disable:max-func-body-length\n DataLabel.prototype.getDataLabel = function (dataSource, labelPath, shapeName, shapeDataPath) {\n var text;\n for (var i = 0; i < dataSource.length; i++) {\n var data = dataSource[i];\n if ((data[shapeDataPath]) === shapeName) {\n text = data;\n break;\n }\n }\n return text;\n };\n DataLabel.prototype.renderLabel = function (layer, layerIndex, shape, layerData, group, labelTemplateElement, index) {\n var dataLabel = layer.dataLabelSettings;\n var style = layer.dataLabelSettings.textStyle;\n var markerEle;\n var templateFn;\n var options;\n var dataLabelSettings = layer.dataLabelSettings;\n var labelpath = layer.dataLabelSettings.labelPath;\n var shapePoint = [[]];\n var midIndex = 0;\n var pointsLength = 0;\n var shapeData = shape;\n var element;\n var data;\n var text = '';\n var datasrcObj;\n var currentLength = 0;\n var location;\n var labelId = this.maps.element.id + '_LayerIndex_' + layerIndex + '_shapeIndex_' + index + '_LabelIndex_' + index;\n var textLocation = new Point(0, 0);\n /* tslint:disable:no-string-literal */\n for (var i = 0, len = layerData.length; i < len; i++) {\n var shapes = layerData[i];\n shape = shapes['property'];\n if (!isNullOrUndefined(shapes['property']) && shapeData['properties']['name'] === shape['name']) {\n if (!layerData[i]['_isMultiPolygon']) {\n shapePoint.push(this.getPoint(layerData[i], []));\n currentLength = shapePoint[shapePoint.length - 1].length;\n if (pointsLength < currentLength) {\n pointsLength = currentLength;\n midIndex = shapePoint.length - 1;\n }\n }\n else {\n var layer_1 = layerData[i];\n for (var j = 0; j < layer_1.length; j++) {\n shapePoint.push(this.getPoint(layer_1[j], []));\n currentLength = shapePoint[shapePoint.length - 1].length;\n if (pointsLength < currentLength) {\n pointsLength = currentLength;\n midIndex = shapePoint.length - 1;\n }\n }\n }\n }\n }\n if (!isNullOrUndefined(layer.dataSource) && layer.dataSource.length > 0) {\n var localData = extend([], layer.dataSource, null, true);\n datasrcObj = this.getDataLabel(localData, labelpath, shapeData['properties'][layer.shapePropertyPath], layer.shapeDataPath);\n datasrcObj[labelpath] = datasrcObj[labelpath];\n text = datasrcObj[labelpath];\n }\n else {\n text = shapeData['properties'][labelpath];\n }\n location = findMidPointOfPolygon(shapePoint[midIndex]);\n if (!isNullOrUndefined(text) && !isNullOrUndefined(location)) {\n location['y'] = (this.maps.projectionType === 'Mercator') ? location['y'] : (-location['y']);\n data = location;\n if (!isNullOrUndefined(this.maps.format) && !isNaN(parseFloat(text))) {\n text = Internalize(this.maps, parseFloat(text));\n if (!isNullOrUndefined(datasrcObj)) {\n datasrcObj[labelpath] = text;\n }\n }\n var eventargs = {\n name: 'labelRendering', maps: this.maps, cancel: false, border: dataLabel.border, datalabel: dataLabel,\n fill: dataLabel.fill, template: dataLabel.template, text: text\n };\n this.maps.trigger('labelRendering', eventargs);\n var border = { color: 'yellow' };\n var position = [];\n var width = location['rightMax']['x'] - location['leftMax']['x'];\n var textSize = measureText(text, style);\n var trimmedLable = textTrim(width, text, style);\n var elementSize = measureText(trimmedLable, style);\n var startY = location['y'] - textSize['height'] / 4;\n var endY = location['y'] + textSize['height'] / 4;\n var start = location['y'] - textSize['height'] / 4;\n var end = location['y'] + textSize['height'] / 4;\n position = filter(shapePoint[midIndex], startY, endY);\n if (position.length > 5 && (!isNullOrUndefined(shapeData['geometry']) ? shapeData['geometry']['type'] !== 'MultiPolygon' :\n shapeData['type'] !== 'MultiPolygon')) {\n var location1 = findMidPointOfPolygon(position);\n location['x'] = location1['x'];\n width = location1['rightMax']['x'] - location1['leftMax']['x'];\n }\n var xpositionEnds = location['x'] + textSize['width'] / 2;\n var xpositionStart = location['x'] - textSize['width'] / 2;\n trimmedLable = textTrim(width, text, style);\n elementSize = measureText(trimmedLable, style);\n this.value[index] = { rightWidth: xpositionEnds, leftWidth: xpositionStart, heightTop: start, heightBottom: end };\n var animate = layer.animationDuration !== 0 || isNullOrUndefined(this.maps.zoomModule);\n var translate = getTranslate(this.maps, layer, animate);\n var scale = translate['scale'];\n var transPoint = translate['location'];\n var labelElement = void 0;\n if (eventargs.template !== '') {\n templateFn = getTemplateFunction(eventargs.template);\n var templateElement = templateFn(this.maps);\n labelElement = convertElementFromLabel(templateElement, labelId, !isNullOrUndefined(datasrcObj) ? datasrcObj : shapeData['properties'], index, this.maps);\n labelElement.style.left = ((Math.abs(this.maps.baseMapRectBounds['min']['x'] - location['x'])) * scale) + 'px';\n labelElement.style.top = ((Math.abs(this.maps.baseMapRectBounds['min']['y'] - location['y'])) * scale) + 'px';\n labelTemplateElement.appendChild(labelElement);\n var labelWidth = labelElement.offsetWidth;\n var labelHeight = labelElement.offsetHeight;\n // if (labelWidth > width || labelWidth === 0 || labelHeight > location['height']) {\n // labelElement.style.display = 'None';\n // }\n }\n else {\n if (dataLabelSettings.smartLabelMode === 'Trim') {\n options = new TextOption(labelId, textLocation.x, textLocation.y, 'middle', trimmedLable, '', '');\n }\n if (dataLabelSettings.smartLabelMode === 'None') {\n options = new TextOption(labelId, (textLocation.x), textLocation.y, 'middle', text, '', '');\n }\n if (dataLabelSettings.smartLabelMode === 'Hide') {\n text = (width >= textSize['width']) ? text : '';\n options = new TextOption(labelId, (textLocation.x), (textLocation.y), 'middle', text, '', '');\n }\n text = options['text'];\n if (dataLabelSettings.intersectionAction === 'Hide') {\n for (var i = 0; i < this.intersect.length; i++) {\n if (!isNullOrUndefined(this.intersect[i])) {\n if (this.value[index]['leftWidth'] > this.intersect[i]['rightWidth']\n || this.value[index]['rightWidth'] < this.intersect[i]['leftWidth']\n || this.value[index]['heightTop'] > this.intersect[i]['heightBottom']\n || this.value[index]['heightBottom'] < this.intersect[i]['heightTop']) {\n text = text;\n }\n else {\n text = '';\n break;\n }\n }\n }\n this.intersect.push(this.value[index]);\n options = new TextOption(labelId, textLocation.x, textLocation.y, 'middle', text, '', '');\n }\n var difference = void 0;\n if (dataLabelSettings.intersectionAction === 'Trim') {\n for (var j = 0; j < this.intersect.length; j++) {\n if (!isNullOrUndefined(this.intersect[j])) {\n if (this.intersect[j]['rightWidth'] < this.value[index]['leftWidth']\n || this.intersect[j]['leftWidth'] > this.value[index]['rightWidth']\n || this.intersect[j]['heightBottom'] < this.value[index]['heightTop']\n || this.intersect[j]['heightTop'] > this.value[index]['heightBottom']) {\n trimmedLable = text;\n difference = 0;\n }\n else {\n if (this.value[index]['leftWidth'] > this.intersect[j]['leftWidth']) {\n width = this.intersect[j]['rightWidth'] - this.value[index]['leftWidth'];\n difference = width - (this.value[index]['rightWidth'] - this.value[index]['leftWidth']);\n trimmedLable = textTrim(difference, text, style);\n break;\n }\n if (this.value[index]['leftWidth'] < this.intersect[j]['leftWidth']) {\n width = this.value[index]['rightWidth'] - this.intersect[j]['leftWidth'];\n difference = Math.abs(width - (this.value[index]['rightWidth'] - this.value[index]['leftWidth']));\n trimmedLable = textTrim(difference, text, style);\n break;\n }\n }\n }\n }\n this.intersect.push(this.value[index]);\n options = new TextOption(labelId, textLocation.x, (textLocation.y), 'middle', trimmedLable, '', '');\n }\n if (dataLabelSettings.intersectionAction === 'None') {\n options = new TextOption(labelId, (textLocation.x), (textLocation.y), 'middle', text, '', '');\n }\n if (trimmedLable.length > 1) {\n var border_1 = eventargs.border;\n if (border_1['width'] > 1) {\n var fill = eventargs.fill;\n var opacity = dataLabelSettings.opacity;\n var rx = dataLabelSettings.rx;\n var ry = dataLabelSettings.ry;\n var x = location['x'] - textSize['width'] / 2;\n var y = location['y'] - textSize['height'] / 2;\n var rectOptions = new RectOption(this.maps.element.id + '_LayerIndex_' + layerIndex + '_shapeIndex_' + index + '_rectIndex_' + index, fill, border_1, opacity, new Rect(x, y, textSize['width'], textSize['height']), rx, ry);\n var rect = this.maps.renderer.drawRectangle(rectOptions);\n group.appendChild(rect);\n }\n }\n element = renderTextElement(options, style, style.color, group);\n element.setAttribute('transform', 'translate( ' + ((location['x'] + transPoint.x) * scale) + ' '\n + (((location['y'] + transPoint.y) * scale) + (elementSize.height / 4)) + ' )');\n group.appendChild(element);\n }\n this.dataLabelCollections.push({\n location: { x: location['x'], y: (location['y'] + elementSize.height / 4) },\n element: isNullOrUndefined(labelElement) ? element : labelElement,\n layerIndex: layerIndex,\n shapeIndex: index,\n labelIndex: index\n });\n if (labelTemplateElement.childElementCount > 0 && !this.maps.element.contains(labelTemplateElement)) {\n document.getElementById(this.maps.element.id + '_Secondary_Element').appendChild(labelTemplateElement);\n }\n }\n };\n DataLabel.prototype.getPoint = function (shapes, points) {\n shapes.map(function (current, index) {\n points.push(new Point(current['point']['x'], current['point']['y']));\n });\n return points;\n };\n /**\n * Get module name.\n */\n DataLabel.prototype.getModuleName = function () {\n return 'DataLabel';\n };\n /**\n * To destroy the layers.\n * @return {void}\n * @private\n */\n DataLabel.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n };\n return DataLabel;\n}());\nexport { DataLabel };\n","import { convertTileLatLongToPoint } from '../index';\nimport { convertGeoToPoint, Point, PathOption } from '../utils/helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * navigation-selected-line\n */\nvar NavigationLine = /** @class */ (function () {\n function NavigationLine(maps) {\n this.maps = maps;\n }\n /* tslint:disable:no-string-literal */\n //tslint:disable:max-func-body-length\n NavigationLine.prototype.renderNavigation = function (layer, factor, layerIndex) {\n var navigationEle;\n var navigation;\n navigation = layer.navigationLineSettings;\n var longitude;\n var point = [];\n var latitude;\n var visible;\n var angle;\n var width;\n var color;\n var dashArray;\n var pathOption;\n var direction;\n var markerWidth;\n var arcId;\n var radius;\n var showArrow;\n var arrowColor;\n var arrowSize;\n var arrowSettings;\n var arrowPosition;\n var startArrow;\n var endArrow;\n var offSet;\n var offSetValue;\n var navigationGroup;\n var d;\n var group = (this.maps.renderer.createGroup({\n id: this.maps.element.id + '_layerIndex_' + layerIndex + '_line_Group'\n }));\n for (var i = 0; i < navigation.length; i++) {\n latitude = navigation[i]['properties']['latitude'];\n longitude = navigation[i]['properties']['longitude'];\n visible = navigation[i]['properties']['visible'];\n angle = navigation[i]['properties']['angle'];\n width = navigation[i]['width'] || 1;\n color = navigation[i]['color'];\n dashArray = navigation[i]['properties']['dashArray'];\n arrowSettings = navigation[i]['properties']['arrowSettings'];\n showArrow = (isNullOrUndefined(arrowSettings)) ? false : arrowSettings['properties']['showArrow'];\n if (longitude['length'] === latitude['length'] && visible) {\n for (var i_1 = 0; i_1 < longitude['length']; i_1++) {\n var location_1 = (this.maps.isTileMap) ? convertTileLatLongToPoint(new Point(longitude[i_1], latitude[i_1]), factor, this.maps.tileTranslatePoint, true) : convertGeoToPoint(latitude[i_1], longitude[i_1], factor, layer, this.maps);\n point.push(location_1);\n }\n }\n navigationGroup = (this.maps.renderer.createGroup({\n id: this.maps.element.id + '_layerIndex_' + layerIndex + '_NavigationGroup' + i + ''\n }));\n for (var j = 0; j < point['length'] - 1; j++) {\n angle = (-1 > angle) ? -1 : angle;\n angle = (1 < angle) ? 1 : angle;\n var arcId_1 = this.maps.element.id + '_LayerIndex_' + layerIndex + '_NavigationIndex_' + i + '_Line' + j + '';\n var radius_1 = this.convertRadius(point[j], point[j + 1]);\n if (angle <= 1 && angle > 0) {\n direction = 0;\n if (point[j]['x'] > point[j + 1]['x']) {\n direction = 1;\n }\n }\n if (angle >= -1 && angle < 0) {\n direction = 1;\n if (point[j]['x'] > point[j + 1]['x']) {\n direction = 0;\n }\n }\n if (point[j]['x'] !== point[j + 1]['x']) {\n if (showArrow) {\n arrowColor = arrowSettings['properties']['color'];\n arrowSize = arrowSettings['properties']['size'];\n offSetValue = (arrowSettings['properties']['offSet'] === undefined) ? 0 : arrowSettings['properties']['offSet'];\n var divide = (Math.round(arrowSize / 2));\n arrowPosition = arrowSettings['properties']['position'];\n startArrow = (arrowPosition === 'Start') ? 'url(#triangle' + i + ')' : null;\n endArrow = (arrowPosition === 'End') ? 'url(#triangle' + i + ')' : null;\n if (offSet !== 0 && angle === 0) {\n offSet = (arrowPosition === 'Start') ? offSetValue : -(offSetValue);\n }\n offSet = (isNullOrUndefined(offSet)) ? 0 : offSet;\n var triId = this.maps.element.id + '_triangle';\n var defElement = this.maps.renderer.createDefs();\n defElement.innerHTML += '';\n var markerEle = defElement.querySelector('#' + 'triangle' + i);\n markerEle.setAttribute('markerWidth', (arrowSize.toString()));\n markerEle.setAttribute('markerHeight', (arrowSize.toString()));\n markerEle.setAttribute('refX', (divide - offSet).toString());\n markerEle.setAttribute('refY', divide.toString());\n markerEle.setAttribute('orient', 'auto');\n var d2 = 'M 0,0 L 0,' + arrowSize + ' L ' + divide + ', ' + divide + ' Z';\n pathOption = new PathOption(triId, arrowColor, width, color, 1, dashArray, d2);\n navigationEle = this.maps.renderer.drawPath(pathOption);\n markerEle.appendChild(navigationEle);\n defElement.appendChild(markerEle);\n navigationGroup.appendChild(defElement);\n }\n d = (angle === 0) ? 'M ' + point[j]['x'] + ',' + point[j]['y'] + 'L ' + point[j + 1]['x']\n + ',' + point[j + 1]['y'] + '' :\n 'M ' + point[j]['x'] + ',' + point[j]['y'] + ' A ' + (angle * radius_1) + ' ' +\n (angle * radius_1) + ' ' + 0 + ',' + 0 + ',' + direction + ' , ' + point[j + 1]['x'] + ',' + point[j + 1]['y'] + ' ';\n pathOption = new PathOption(arcId_1, 'none', 2, color, 1, dashArray, d);\n navigationEle = this.maps.renderer.drawPath(pathOption);\n if (!isNullOrUndefined(arrowPosition)) {\n (arrowPosition === 'Start') ? navigationEle.setAttribute('marker-start', startArrow)\n : navigationEle.setAttribute('marker-end', endArrow);\n }\n navigationGroup.appendChild(navigationEle);\n group.appendChild(navigationGroup);\n }\n }\n point = [];\n }\n return group;\n };\n NavigationLine.prototype.convertRadius = function (point1, point2) {\n var value1 = point2['x'] - point1['x'];\n var value2 = point2['y'] - point1['y'];\n var value = Math.sqrt((Math.pow(value1, 2) + Math.pow(value2, 2)));\n return value;\n };\n /**\n * Get module name.\n */\n NavigationLine.prototype.getModuleName = function () {\n return 'NavigationLine';\n };\n /**\n * To destroy the layers.\n * @return {void}\n * @private\n */\n NavigationLine.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n };\n return NavigationLine;\n}());\nexport { NavigationLine };\n","import { legendRendering } from '../index';\nimport { Rect, measureText, PathOption, textTrim, querySelector, getTemplateFunction } from '../utils/helper';\nimport { RectOption, Size, TextOption, Point, renderTextElement, drawSymbol } from '../utils/helper';\nimport { isNullOrUndefined, Browser, EventHandler, remove } from '@syncfusion/ej2-base';\n/**\n * Legend module class\n */\nvar Legend = /** @class */ (function () {\n function Legend(maps) {\n this.legendBorderRect = new Rect(0, 0, 0, 0);\n this.totalPages = [];\n this.page = 0;\n this.currentPage = 0;\n this.interactiveLocation = new Point(0, 0);\n this.legendItemRect = new Rect(0, 0, 0, 0);\n this.heightIncrement = 0;\n this.widthIncrement = 0;\n this.textMaxWidth = 0;\n this.areaRect = new Rect(0, 0, 0, 0);\n this.maps = maps;\n this.addEventListener();\n }\n Legend.prototype.renderLegend = function () {\n this.calculateLegendBounds();\n this.drawLegend();\n };\n /* tslint:disable-next-line:max-func-body-length */\n Legend.prototype.calculateLegendBounds = function () {\n var _this = this;\n var map = this.maps;\n var legend = map.legendSettings;\n this.legendCollection = [];\n var spacing = 10;\n var leftPadding = 10;\n var topPadding = map.mapAreaRect.y;\n this.legendRenderingCollections = [];\n map.layersCollection.forEach(function (layer, layerIndex) {\n if (!isNullOrUndefined(layer.shapeData)) {\n var layerData = layer.shapeData['features'];\n var dataPath = layer.shapeDataPath;\n var propertyPath = layer.shapePropertyPath;\n var dataSource = layer.dataSource;\n var colorValuePath = void 0;\n var colorMapping = void 0;\n if (legend.type === 'Layers' && layer.visible) {\n colorValuePath = layer.shapeSettings.colorValuePath;\n colorMapping = layer.shapeSettings.colorMapping;\n _this.getLegends(layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath);\n }\n else if (legend.type === 'Bubbles') {\n for (var _i = 0, _a = layer.bubbleSettings; _i < _a.length; _i++) {\n var bubble = _a[_i];\n if (bubble.visible) {\n colorValuePath = bubble.colorValuePath;\n colorMapping = bubble.colorMapping;\n dataSource = bubble.dataSource;\n _this.getLegends(layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath);\n }\n }\n }\n else {\n _this.getMarkersLegendCollections(layerIndex, layer.markerSettings);\n }\n }\n });\n var defaultSize = 25;\n var legendTitle = map.legendSettings.title.text;\n var titleTextStyle = map.legendSettings.titleStyle;\n if (this.legendCollection.length > 0) {\n var legendMode = legend.mode;\n var shapeX = 0;\n var shapeY = 0;\n var textX = 0;\n var textY = 0;\n var shapePadding = legend.shapePadding;\n var textPadding = 10;\n var shapeHeight = legend.shapeHeight;\n var shapeWidth = legend.shapeWidth;\n var shapeLocation = [];\n var textLocation = [];\n var legendRectCollection = [];\n var location_1;\n var position = legend.position;\n var labelAction = legend.labelDisplayMode;\n var arrangement = (legend.orientation === 'None') ? ((position === 'Top' || position === 'Bottom')\n ? 'Horizontal' : 'Vertical') : legend.orientation;\n var legendWidth = (legend.width.length > 1) ? (legend.width.indexOf('%') > -1) ? (map.availableSize.width / 100)\n * parseInt(legend.width, 10) : parseInt(legend.width, 10) : null;\n var legendHeight = (legend.height.length > 1) ? (legend.height.indexOf('%') > -1) ? (map.availableSize.height / 100) *\n parseInt(legend.height, 10) : parseInt(legend.height, 10) : null;\n var legendItemStartX_1;\n var legendItemStartY_1;\n var startX = 0;\n var startY = 0;\n var legendtitleSize = measureText(legendTitle, titleTextStyle);\n if (legendMode === 'Interactive') {\n var itemTextStyle = legend.textStyle;\n var rectWidth = void 0;\n var rectHeight = void 0;\n var legendLength = this.legendCollection.length;\n rectWidth = (arrangement === 'Horizontal') ? (isNullOrUndefined(legendWidth)) ? (map.mapAreaRect.width / legendLength) :\n (legendWidth / legendLength) : (isNullOrUndefined(legendWidth)) ? defaultSize : legendWidth;\n rectHeight = (arrangement === 'Horizontal') ? (isNullOrUndefined(legendHeight)) ? defaultSize : legendHeight :\n (isNullOrUndefined(legendHeight)) ? (map.mapAreaRect.height / legendLength) : (legendHeight / legendLength);\n startX = 0;\n startY = legendtitleSize.height + spacing;\n var position_1 = legend.labelPosition;\n var textX_1 = 0;\n var textY_1 = 0;\n var textPadding_1 = 10;\n var itemStartX = 0;\n var itemStartY = 0;\n var maxTextHeight = 0;\n var maxTextWidth = 0;\n for (var i = 0; i < this.legendCollection.length; i++) {\n startX = (arrangement === 'Horizontal') ? (startX + rectWidth) : startX;\n startY = (arrangement === 'Horizontal') ? startY : (startY + rectHeight);\n var legendText = this.legendCollection[i]['text'];\n var itemTextSize = new Size(0, 0);\n if (labelAction === 'None') {\n itemTextSize = measureText(legendText, itemTextStyle);\n }\n else if (labelAction === 'Trim') {\n legendText = textTrim((arrangement === 'Horizontal' ? rectWidth : rectHeight), legendText, itemTextStyle);\n itemTextSize = measureText(legendText, itemTextStyle);\n }\n else {\n legendText = '';\n }\n maxTextHeight = Math.max(maxTextHeight, itemTextSize.height);\n maxTextWidth = Math.max(maxTextWidth, itemTextSize.width);\n if (itemTextSize.width > 0 && itemTextSize.height > 0) {\n if (arrangement === 'Horizontal') {\n textX_1 = startX + (rectWidth / 2);\n textY_1 = (position_1 === 'After') ? (startY + rectHeight + (itemTextSize.height / 2)) + textPadding_1 :\n (startY - textPadding_1);\n }\n else {\n textX_1 = (position_1 === 'After') ? startX - (itemTextSize.width / 2) - textPadding_1\n : (startX + rectWidth + itemTextSize.width / 2) + textPadding_1;\n textY_1 = startY + (rectHeight / 2) + (itemTextSize.height / 4);\n }\n }\n if (i === 0) {\n itemStartX = (arrangement === 'Horizontal') ? startX : (position_1 === 'After') ?\n textX_1 - (itemTextSize.width / 2) : startX;\n itemStartY = (arrangement === 'Horizontal') ? (position_1 === 'After') ? startY :\n textY_1 - (itemTextSize.height / 2) : startY;\n }\n else if (i === this.legendCollection.length - 1) {\n legendWidth = (arrangement === 'Horizontal') ? Math.abs((startX + rectWidth) - itemStartX) :\n (rectWidth + maxTextWidth + textPadding_1);\n legendHeight = (arrangement === 'Horizontal') ? (rectHeight + (maxTextHeight / 2) + textPadding_1) :\n Math.abs((startY + rectHeight) - itemStartY);\n }\n this.legendRenderingCollections.push({\n fill: this.legendCollection[i]['fill'], x: startX, y: startY,\n width: rectWidth, height: rectHeight,\n text: legendText, textX: textX_1, textY: textY_1,\n textWidth: itemTextSize.width, textHeight: itemTextSize.height\n });\n }\n this.legendItemRect = { x: itemStartX, y: itemStartY, width: legendWidth, height: legendHeight };\n }\n else {\n legendWidth = (isNullOrUndefined(legendWidth)) ? map.mapAreaRect.width : legendWidth;\n legendHeight = (isNullOrUndefined(legendHeight)) ? map.mapAreaRect.height : legendHeight;\n var j = 0;\n for (var i = 0; i < this.legendCollection.length; i++) {\n var legendItem = this.legendCollection[i];\n if (isNullOrUndefined(this.totalPages[this.page])) {\n this.totalPages[this.page] = { Page: (this.page + 1), Collection: [] };\n }\n var legendTextSize = measureText(legendItem['text'], legend.textStyle);\n this.textMaxWidth = Math.max(this.textMaxWidth, legendTextSize.width);\n if (i === 0) {\n startX = shapeX = (leftPadding + (shapeWidth / 2));\n startY = shapeY = topPadding + legendtitleSize.height + (shapeHeight > legendTextSize.height ? shapeHeight / 2\n : (legendTextSize.height / 4));\n }\n else {\n var maxSize = (legendTextSize.height > shapeHeight) ? legendTextSize.height : shapeHeight;\n if (arrangement === 'Horizontal') {\n var prvePositionX = (textLocation[j - 1].x + textLocation[j - 1].width) + textPadding + shapeWidth;\n if ((prvePositionX + shapePadding + legendTextSize.width) > legendWidth) {\n var nextPositionY = (textLocation[j - 1].y > (shapeLocation[j - 1].y + (shapeHeight / 2)) ?\n textLocation[j - 1].y : (shapeLocation[j - 1].y + (shapeHeight / 2))) + topPadding;\n if ((nextPositionY + maxSize) > legendHeight) {\n this.getPageChanged();\n j = 0;\n shapeLocation = [];\n textLocation = [];\n legendRectCollection = [];\n shapeX = startX;\n shapeY = startY;\n }\n else {\n shapeX = (shapeLocation[0].x);\n shapeY = (nextPositionY + (maxSize / 2));\n }\n }\n else {\n shapeX = (prvePositionX - (shapeWidth / 2));\n shapeY = (shapeLocation[j - 1]).y;\n }\n }\n else {\n var prevPositionY = textLocation[j - 1].y > shapeLocation[j - 1].y + (shapeHeight / 2) ?\n textLocation[j - 1].y : shapeLocation[j - 1].y + (shapeHeight / 2);\n if ((prevPositionY + topPadding + maxSize) > legendHeight) {\n var nextPositionX = (textLocation[j - 1].x + this.textMaxWidth + textPadding);\n if ((nextPositionX + shapePadding + legendTextSize.width) > legendWidth) {\n shapeX = startX;\n shapeY = startY;\n legendRectCollection = [];\n textLocation = [];\n shapeLocation = [];\n this.getPageChanged();\n j = 0;\n }\n else {\n shapeX = nextPositionX + (shapeWidth / 2);\n shapeY = (shapeLocation[0].y);\n }\n }\n else {\n shapeX = shapeLocation[j - 1].x;\n shapeY = prevPositionY + topPadding + (shapeHeight / 2);\n }\n }\n }\n textX = shapeX + (shapeWidth / 2) + shapePadding;\n textY = shapeY + (legendTextSize.height / 4);\n shapeLocation.push({ x: shapeX, y: shapeY });\n textLocation.push({ x: textX, y: textY, width: legendTextSize.width, height: (legendTextSize.height / 2) });\n this.totalPages[this.page]['Collection'].push({\n DisplayText: legendItem['text'],\n ImageSrc: legendItem['imageSrc'],\n Shape: { x: shapeX, y: shapeY },\n Text: { x: textX, y: textY },\n Fill: legendItem['fill'],\n Rect: {\n x: shapeLocation[j].x - (shapeWidth / 2),\n y: (shapeLocation[j].y - (shapeHeight / 2)) < (textY - legendTextSize.height) ?\n (shapeLocation[j].y - (shapeHeight / 2)) : (textY - legendTextSize.height),\n width: Math.abs((shapeLocation[j].x - (shapeWidth / 2)) - (textX + legendTextSize.width)),\n height: ((shapeHeight > legendTextSize.height) ? shapeHeight : legendTextSize.height)\n }\n });\n j++;\n }\n var collection = this.totalPages[0]['Collection'];\n collection.forEach(function (legendObj, index) {\n var legendRect = new Rect(legendObj['Rect']['x'], legendObj['Rect']['y'], legendObj['Rect']['width'], legendObj['Rect']['height']);\n if (index === 0) {\n legendItemStartX_1 = legendRect.x;\n legendItemStartY_1 = legendRect.y;\n }\n _this.widthIncrement = Math.max(_this.widthIncrement, Math.abs(legendItemStartX_1 - (legendRect.x + legendRect.width)));\n _this.heightIncrement = Math.max(_this.heightIncrement, Math.abs(legendItemStartY_1 - (legendRect.y + legendRect.height)));\n });\n legendWidth = ((this.widthIncrement < legendWidth) ? this.widthIncrement : legendWidth);\n legendHeight = ((this.heightIncrement < legendHeight) ? this.heightIncrement : legendHeight);\n this.legendItemRect = {\n x: collection[0]['Rect']['x'], y: collection[0]['Rect']['y'],\n width: legendWidth, height: legendHeight\n };\n }\n }\n };\n /**\n *\n */\n Legend.prototype.getLegends = function (layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath) {\n this.getRangeLegendCollection(layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath);\n this.getEqualLegendCollection(layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath);\n this.getDataLegendCollection(layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath);\n };\n Legend.prototype.getPageChanged = function () {\n this.page++;\n if (isNullOrUndefined(this.totalPages[this.page])) {\n this.totalPages[this.page] = { Page: (this.page + 1), Collection: [] };\n }\n };\n Legend.prototype.drawLegend = function () {\n var map = this.maps;\n var legend = map.legendSettings;\n var render = map.renderer;\n var textOptions;\n var textFont = legend.textStyle;\n this.legendGroup = render.createGroup({ id: map.element.id + '_Legend_Group' });\n var eventArgs = {\n name: legendRendering, cancel: false, fill: '', shape: legend.shape,\n shapeBorder: legend.shapeBorder\n };\n if (legend.mode === 'Interactive') {\n for (var i = 0; i < this.legendRenderingCollections.length; i++) {\n var itemId = map.element.id + '_Legend_Index_' + i;\n var textId = map.element.id + '_Legend_Index_' + i + '_Text';\n var item = this.legendRenderingCollections[i];\n var bounds = new Rect(item['x'], item['y'], item['width'], item['height']);\n var textLocation = new Point(item['textX'], item['textY']);\n eventArgs.fill = item['fill'];\n map.trigger(legendRendering, eventArgs);\n var rectOptions = new RectOption(itemId, eventArgs.fill, eventArgs.shapeBorder, 1, bounds);\n textOptions = new TextOption(textId, textLocation.x, textLocation.y, 'middle', item['text'], '', '');\n renderTextElement(textOptions, textFont, textFont.color, this.legendGroup);\n this.legendGroup.appendChild(render.drawRectangle(rectOptions));\n }\n this.renderLegendBorder();\n }\n else {\n this.drawLegendItem(this.currentPage);\n }\n };\n Legend.prototype.drawLegendItem = function (page) {\n var map = this.maps;\n var legend = map.legendSettings;\n var spacing = 10;\n var shapeSize = new Size(legend.shapeWidth, legend.shapeHeight);\n var textOptions;\n var renderOptions;\n var render = map.renderer;\n var shapeBorder = legend.shapeBorder;\n var eventArgs = {\n name: legendRendering, cancel: false, fill: '', shape: legend.shape\n };\n if (page >= 0 && page < this.totalPages.length) {\n if (querySelector(this.legendGroup.id, this.maps.element.id)) {\n remove(querySelector(this.legendGroup.id, this.maps.element.id));\n }\n var strokeColor = (legend.shape === 'HorizontalLine' || legend.shape === 'VerticalLine'\n || legend.shape === 'Cross') ? isNullOrUndefined(legend.fill) ? '#000000' : legend.fill : shapeBorder.color;\n var strokeWidth = (legend.shape === 'HorizontalLine' || legend.shape === 'VerticalLine'\n || legend.shape === 'Cross') ? (shapeBorder.width === 0) ?\n 1 : shapeBorder.width : shapeBorder.width;\n eventArgs.shapeBorder = { width: strokeWidth, color: strokeColor };\n for (var i = 0; i < this.totalPages[page]['Collection'].length; i++) {\n var collection = this.totalPages[page]['Collection'][i];\n var legendElement = render.createGroup({ id: map.element.id + '_Legend_Index_' + i });\n var legendText = collection['DisplayText'];\n eventArgs.fill = collection['Fill'];\n eventArgs.shape = ((legend.type === 'Markers') ? ((isNullOrUndefined(collection['ImageSrc'])) ?\n legend.shape : 'Image') : legend.shape);\n map.trigger(legendRendering, eventArgs);\n var shapeId = map.element.id + '_Legend_Shape_Index_' + i;\n var textId = map.element.id + '_Legend_Text_Index_' + i;\n var shapeLocation = collection['Shape'];\n var textLocation = collection['Text'];\n var imageUrl = ((isNullOrUndefined(collection['ImageSrc'])) ? legend.shape : collection['ImageSrc']);\n var renderOptions_1 = new PathOption(shapeId, eventArgs.fill, eventArgs.shapeBorder.width, eventArgs.shapeBorder.color, 1, '');\n legendElement.appendChild(drawSymbol(shapeLocation, eventArgs.shape, shapeSize, collection['ImageSrc'], renderOptions_1));\n textOptions = new TextOption(textId, textLocation.x, textLocation.y, 'start', legendText, '', '');\n renderTextElement(textOptions, legend.textStyle, legend.textStyle.color, legendElement);\n this.legendGroup.appendChild(legendElement);\n }\n var pagingGroup = void 0;\n var width = spacing;\n var height = (spacing / 2);\n if (this.page !== 0) {\n var pagingText = (page + 1) + '/' + this.totalPages.length;\n var pagingFont = legend.textStyle;\n var pagingTextSize = measureText(pagingText, pagingFont);\n var leftPageX = (this.legendItemRect.x + this.legendItemRect.width) - pagingTextSize.width -\n (width * 2) - spacing;\n var rightPageX = (this.legendItemRect.x + this.legendItemRect.width);\n var locY = (this.legendItemRect.y + this.legendItemRect.height) + (height / 2) + spacing;\n var pageTextX = rightPageX - width - (pagingTextSize.width / 2) - (spacing / 2);\n pagingGroup = render.createGroup({ id: map.element.id + '_Legend_Paging_Group' });\n var leftPageElement = render.createGroup({ id: map.element.id + '_Legend_Left_Paging_Group' });\n var rightPageElement = render.createGroup({ id: map.element.id + '_Legend_Right_Paging_Group' });\n var rightPath = ' M ' + rightPageX + ' ' + locY + ' L ' + (rightPageX - width) + ' ' + (locY - height) +\n ' L ' + (rightPageX - width) + ' ' + (locY + height) + ' z ';\n var leftPath = ' M ' + leftPageX + ' ' + locY + ' L ' + (leftPageX + width) + ' ' + (locY - height) +\n ' L ' + (leftPageX + width) + ' ' + (locY + height) + ' z ';\n var leftPageOptions = new PathOption(map.element.id + '_Left_Page', '#a6a6a6', 0, '#a6a6a6', 1, '', leftPath);\n leftPageElement.appendChild(render.drawPath(leftPageOptions));\n var leftRectPageOptions = new RectOption(map.element.id + '_Left_Page_Rect', 'transparent', {}, 1, new Rect(leftPageX - (width / 2), (locY - (height * 2)), width * 2, spacing * 2), null, null, '', '');\n leftPageElement.appendChild(render.drawRectangle(leftRectPageOptions));\n this.wireEvents(leftPageElement);\n var rightPageOptions = new PathOption(map.element.id + '_Right_Page', '#a6a6a6', 0, '#a6a6a6', 1, '', rightPath);\n rightPageElement.appendChild(render.drawPath(rightPageOptions));\n var rightRectPageOptions = new RectOption(map.element.id + '_Right_Page_Rect', 'transparent', {}, 1, new Rect((rightPageX - width), (locY - height), width, spacing), null, null, '', '');\n rightPageElement.appendChild(render.drawRectangle(rightRectPageOptions));\n this.wireEvents(rightPageElement);\n pagingGroup.appendChild(leftPageElement);\n pagingGroup.appendChild(rightPageElement);\n var pageTextOptions = {\n 'id': map.element.id + '_Paging_Text',\n 'x': pageTextX,\n 'y': locY + (pagingTextSize.height / 4),\n 'fill': '#a6a6a6',\n 'font-size': '14px',\n 'font-style': pagingFont.fontStyle,\n 'font-family': pagingFont.fontFamily,\n 'font-weight': pagingFont.fontWeight,\n 'text-anchor': 'middle',\n 'transform': '',\n 'opacity': 1,\n 'dominant-baseline': ''\n };\n pagingGroup.appendChild(render.createText(pageTextOptions, pagingText));\n this.legendGroup.appendChild(pagingGroup);\n }\n this.renderLegendBorder();\n }\n };\n Legend.prototype.renderLegendBorder = function () {\n var map = this.maps;\n var legend = map.legendSettings;\n var legendTitle = legend.title.text;\n var textStyle = legend.titleStyle;\n var textOptions;\n var spacing = 10;\n var trimTitle = textTrim((this.legendItemRect.width + (spacing * 2)), legendTitle, textStyle);\n var textSize = measureText(trimTitle, textStyle);\n this.legendBorderRect = new Rect((this.legendItemRect.x - spacing), (this.legendItemRect.y - spacing - textSize.height), (this.legendItemRect.width) + (spacing * 2), (this.legendItemRect.height) + (spacing * 2) + textSize.height +\n (legend.mode === 'Interactive' ? 0 : (this.page !== 0) ? spacing : 0));\n if (legendTitle) {\n textOptions = new TextOption(map.element.id + '_LegendTitle', (this.legendItemRect.x) + (this.legendItemRect.width / 2), this.legendItemRect.y - (textSize.height / 2), 'middle', trimTitle, '');\n renderTextElement(textOptions, textStyle, textStyle.color, this.legendGroup);\n }\n var renderOptions = new RectOption(map.element.id + '_Legend_Border', legend.background, legend.border, 1, this.legendBorderRect, null, null, '', '');\n this.legendGroup.appendChild(map.renderer.drawRectangle(renderOptions));\n this.translate = (legend.position !== 'Float') ?\n this.getLegendAlignment(map, this.legendBorderRect.width, this.legendBorderRect.height, legend) : legend.location;\n this.legendGroup.setAttribute('transform', 'translate( ' + (this.translate.x + (-(this.legendBorderRect.x))) + ' ' +\n (this.translate.y + (-(this.legendBorderRect.y))) + ' )');\n map.svgObject.appendChild(this.legendGroup);\n };\n Legend.prototype.changeNextPage = function (e) {\n this.currentPage = (e.target.id.indexOf('_Left_Page_') > -1) ? (this.currentPage - 1) :\n (this.currentPage + 1);\n this.legendGroup = this.maps.renderer.createGroup({ id: this.maps.element.id + '_Legend_Group' });\n this.drawLegendItem(this.currentPage);\n if (querySelector(this.maps.element.id + '_Legend_Border', this.maps.element.id)) {\n querySelector(this.maps.element.id + '_Legend_Border', this.maps.element.id).style.pointerEvents = 'none';\n }\n };\n Legend.prototype.getLegendAlignment = function (map, width, height, legend) {\n var x;\n var y;\n var spacing = 10;\n var totalWidth = map.availableSize.width;\n var totalHeight = map.availableSize.height;\n switch (legend.position) {\n case 'Top':\n case 'Bottom':\n map.mapAreaRect.height = (map.mapAreaRect.height - height);\n x = (totalWidth / 2) - (width / 2);\n y = (legend.position === 'Top') ? map.mapAreaRect.y : (map.mapAreaRect.y + map.mapAreaRect.height);\n map.mapAreaRect.y = (legend.position === 'Top') ? map.mapAreaRect.y + height + spacing : map.mapAreaRect.y;\n break;\n case 'Left':\n case 'Right':\n map.mapAreaRect.width = (map.mapAreaRect.width - width);\n x = (legend.position === 'Left') ? map.mapAreaRect.x : map.mapAreaRect.x + map.mapAreaRect.width;\n y = (totalHeight / 2) - (height / 2);\n map.mapAreaRect.x = (legend.position === 'Left') ? map.mapAreaRect.x + width : map.mapAreaRect.x;\n break;\n }\n switch (legend.alignment) {\n case 'Near':\n if (legend.position === 'Top' || legend.position === 'Bottom') {\n x = map.mapAreaRect.x;\n }\n else {\n y = map.mapAreaRect.y;\n }\n break;\n case 'Far':\n if (legend.position === 'Top' || legend.position === 'Bottom') {\n x = totalWidth - width;\n }\n else {\n y = totalHeight - height;\n }\n break;\n }\n return new Point(x, y);\n };\n Legend.prototype.getMarkersLegendCollections = function (layerIndex, markers) {\n var _this = this;\n markers.forEach(function (marker, markerIndex) {\n var dataSource = marker.dataSource;\n var field = marker.legendText;\n var templateFn;\n dataSource.forEach(function (data, dataIndex) {\n var imageSrc = null;\n if (marker.visible && (!isNullOrUndefined(data['latitude'])) && (!isNullOrUndefined(data['longitude']))) {\n if (marker.template) {\n templateFn = getTemplateFunction(marker.template);\n var templateElement = templateFn(_this.maps);\n var markerEle = isNullOrUndefined(templateElement.childElementCount) ? templateElement[0] :\n templateElement;\n imageSrc = markerEle.querySelector('img').src;\n }\n var text = isNullOrUndefined(data[field]) ? '' : data[field];\n _this.legendCollection.push({\n layerIndex: layerIndex, markerIndex: markerIndex, dataIndex: dataIndex,\n fill: marker.fill, text: text, imageSrc: imageSrc\n });\n }\n });\n });\n };\n Legend.prototype.getRangeLegendCollection = function (layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath) {\n var _this = this;\n var legendText;\n var fill = this.maps.legendSettings.fill;\n var _loop_1 = function (colorMap) {\n if (!isNullOrUndefined(colorMap.from) && !isNullOrUndefined(colorMap.to)) {\n legendText = !isNullOrUndefined(colorMap.label) ? colorMap.label : colorMap.from + ' - ' + colorMap.to;\n var rangeData_1 = [];\n var colorMapProcess_1 = false;\n dataSource.forEach(function (data, dataIndex) {\n var colorValue = parseFloat(data[colorValuePath]);\n if (colorValue >= colorMap.from && colorValue <= colorMap.to) {\n colorMapProcess_1 = true;\n rangeData_1.push(_this.getLegendData(layerIndex, dataIndex, data, dataPath, layerData, propertyPath, colorValue));\n }\n });\n if (!colorMapProcess_1) {\n rangeData_1.push({\n layerIndex: layerIndex, shapeIndex: null, dataIndex: null,\n name: null, value: null\n });\n }\n var legendFill = (isNullOrUndefined(fill)) ? colorMap.color : fill;\n this_1.getOverallLegendItemsCollection(legendText, legendFill, rangeData_1);\n }\n };\n var this_1 = this;\n for (var _i = 0, colorMapping_1 = colorMapping; _i < colorMapping_1.length; _i++) {\n var colorMap = colorMapping_1[_i];\n _loop_1(colorMap);\n }\n };\n Legend.prototype.getOverallLegendItemsCollection = function (legendText, legendFill, legendData) {\n var newColllection = [];\n if (legendData.length > 0) {\n for (var i = 0; i < legendData.length; i++) {\n var collection = legendData[i];\n if (collection.length > 0) {\n for (var j = 0; j < collection.length; j++) {\n newColllection.push(collection[j]);\n }\n }\n else {\n newColllection.push(legendData[i]);\n }\n newColllection['_isVisible'] = true;\n }\n this.legendCollection.push({ text: legendText, fill: legendFill, data: newColllection });\n }\n };\n Legend.prototype.getEqualLegendCollection = function (layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath) {\n var _this = this;\n var fill = this.maps.legendSettings.fill;\n var legendText;\n var _loop_2 = function (colorMap) {\n if (!isNullOrUndefined(colorMap.value)) {\n legendText = !isNullOrUndefined(colorMap.label) ? colorMap.label : colorMap.value;\n var equalData_1 = [];\n var eqaulColorProcess_1 = false;\n dataSource.forEach(function (data, dataIndex) {\n var equalValue = data[colorValuePath];\n if (equalValue === colorMap.value) {\n eqaulColorProcess_1 = true;\n equalData_1.push(_this.getLegendData(layerIndex, dataIndex, data, dataPath, layerData, propertyPath, equalValue));\n }\n });\n if (!eqaulColorProcess_1) {\n equalData_1.push({\n layerIndex: layerIndex, shapeIndex: null, dataIndex: null,\n name: null, value: null\n });\n }\n var legendFill = (isNullOrUndefined(fill)) ? colorMap.color : fill;\n this_2.getOverallLegendItemsCollection(legendText, legendFill, equalData_1);\n }\n };\n var this_2 = this;\n for (var _i = 0, colorMapping_2 = colorMapping; _i < colorMapping_2.length; _i++) {\n var colorMap = colorMapping_2[_i];\n _loop_2(colorMap);\n }\n };\n Legend.prototype.getDataLegendCollection = function (layerIndex, layerData, colorMapping, dataSource, dataPath, colorValuePath, propertyPath) {\n var _this = this;\n var legendText;\n var fill = this.maps.legendSettings.fill;\n if (!isNullOrUndefined(colorValuePath)) {\n dataSource.forEach(function (data, dataIndex) {\n var dataValue = data[colorValuePath];\n var newData = [];\n var legendFill = (isNullOrUndefined(fill)) ? dataValue : fill;\n if (!isNullOrUndefined(dataValue) && colorMapping.length === 0) {\n legendText = data[dataPath];\n newData.push(_this.getLegendData(layerIndex, dataIndex, data, dataPath, layerData, propertyPath, dataValue));\n }\n _this.getOverallLegendItemsCollection(legendText, legendFill, newData);\n });\n }\n };\n Legend.prototype.interactiveHandler = function (e) {\n var target = e.target;\n var legend = this.maps.legendSettings;\n var id = this.maps.element.id + '_Interactive_Legend';\n var hoverId = legend.type === 'Layers' ? '_ShapeIndex_' : (legend.type === 'Markers') ? '_MarkerIndex_' :\n '_BubbleIndex_';\n if (target.id.indexOf(hoverId) > 1) {\n var layerIndex = parseFloat(target.id.split('_')[2]);\n var dataIndex = parseFloat(target.id.split('_')[6]);\n var fill = void 0;\n var stroke = void 0;\n var strokeWidth = void 0;\n if (!(isNullOrUndefined(querySelector(id, this.maps.element.id)))) {\n remove(querySelector(id, this.maps.element.id));\n }\n var layer = this.maps.layersCollection[layerIndex];\n if (legend.visible && this.legendRenderingCollections.length > 0\n && legend.mode === 'Interactive' && (legend.type === 'Layers' ? layer.visible :\n legend.type === 'Markers' ? layer.markerSettings[parseFloat(target.id.split('_')[4])].visible :\n (this.maps.getBubbleVisible(this.maps.layersCollection[layerIndex])))) {\n var svgRect = this.maps.svgObject.getBoundingClientRect();\n for (var i = 0; i < this.legendCollection.length; i++) {\n var currentData = this.legendCollection[i];\n var legendElement = querySelector(this.maps.element.id + '_Legend_Index_' + i, this.maps.element.id);\n var legendRect = legendElement.getBoundingClientRect();\n var rect = new Rect(Math.abs(legendRect.left - svgRect.left), Math.abs(legendRect.top - svgRect.top), legendRect.width, legendRect.height);\n fill = legendElement.getAttribute('fill');\n stroke = legend.shapeBorder.color;\n strokeWidth = legend.shapeBorder.width;\n if (!isNullOrUndefined(currentData['data'])) {\n var data = currentData['data'];\n for (var j = 0; j < data.length; j++) {\n if (dataIndex === data[j]['dataIndex'] && layerIndex === data[j]['layerIndex']) {\n this.renderInteractivePointer(legend, fill, stroke, id, strokeWidth, rect);\n break;\n }\n }\n }\n }\n }\n }\n else {\n if (!(isNullOrUndefined(querySelector(id, this.maps.element.id)))) {\n remove(querySelector(id, this.maps.element.id));\n }\n }\n };\n Legend.prototype.renderInteractivePointer = function (legend, fill, stroke, id, strokeWidth, rect) {\n var path;\n var pathOptions;\n var locX;\n var locY;\n var height = 10;\n var width = 10;\n var direction = (legend.orientation === 'None') ? (legend.position === 'Top' || legend.position === 'Bottom')\n ? 'Horizontal' : 'Vertical' : legend.orientation;\n if (direction === 'Horizontal') {\n if (!legend.invertedPointer) {\n locX = rect.x + (rect.width / 2);\n locY = rect.y;\n path = ' M ' + locX + ' ' + locY + ' L ' + (locX - width) + ' ' + (locY - height) +\n ' L ' + (locX + width) + ' ' + (locY - height) + ' Z ';\n }\n else {\n locX = rect.x + (rect.width / 2);\n locY = rect.y + (rect.height);\n path = ' M ' + locX + ' ' + locY + ' L ' + (locX - width) + ' ' + (locY + height) +\n ' L ' + (locX + width) + ' ' + (locY + height) + ' Z ';\n }\n }\n else {\n if (!legend.invertedPointer) {\n locX = rect.x + (rect.width);\n locY = rect.y + (rect.height / 2);\n path = ' M ' + locX + ' ' + locY + ' L ' + (locX + width) + ' ' + (locY - height) +\n ' L ' + (locX + width) + ' ' + (locY + height) + ' z ';\n }\n else {\n locX = rect.x;\n locY = rect.y + (rect.height / 2);\n path = ' M ' + locX + ' ' + locY + ' L ' + (locX - width) + ' ' + (locY - height) +\n ' L ' + (locX - width) + ' ' + (locY + height) + ' z ';\n }\n }\n pathOptions = new PathOption(id, fill, strokeWidth, stroke, 1, '', path);\n this.maps.svgObject.appendChild(this.maps.renderer.drawPath(pathOptions));\n };\n Legend.prototype.wireEvents = function (element) {\n EventHandler.add(element, Browser.touchStartEvent, this.changeNextPage, this);\n };\n Legend.prototype.addEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.on(Browser.touchMoveEvent, this.interactiveHandler, this);\n this.maps.on(Browser.touchEndEvent, this.interactiveHandler, this);\n // this.maps.on(click, this.legendClick, this);\n };\n // private legendClick(targetEle: Element): void {\n // if (targetEle.parentElement.id.indexOf(this.maps.element.id + '_Legend_Index_') > -1) {\n // let mapElement: Element;\n // let data: object;\n // let legendIndex: number = parseFloat(targetEle.parentElement.id.substr((this.maps.element.id + '_Legend_Index_').length));\n // let selectedItem: object[] = this.legendCollection[legendIndex]['data'];\n // let childElement: Element;\n // let isVisible: boolean = selectedItem['_isVisible'];\n // if (this.maps.legendSettings.toggleVisibility) {\n // for (let i: number = 0; i < selectedItem.length; i++) {\n // data = this.legendCollection[legendIndex]['data'][i];\n // mapElement = querySelector(\n // this.maps.element.id + '_LayerIndex_' + data['layerIndex'] +\n // '_ShapeIndex_' + data['shapeIndex'] + '_dataIndex_' + data['dataIndex'],\n // this.maps.element.id);\n // if (isVisible) {\n // mapElement.setAttribute('opacity', '0');\n // } else {\n // mapElement.setAttribute('opacity', '1');\n // }\n // }\n // selectedItem['_isVisible'] = isVisible ? false : true;\n // } else if (this.maps.legendSettings.legendSelection && this.maps.selectionSettings.enable) {\n // this.selectShapes(targetEle, legendIndex);\n // }\n // }\n // }\n // private selectShapes(targetEle: Element, legendIndex: number): void {\n // let mapElement: Element;\n // let selectedElements: NodeListOf;\n // let selectedLength: number;\n // let childElement: HTMLElement = targetEle.parentElement.childNodes[0] as HTMLElement;\n // let legendSelected: boolean = targetEle.parentElement.id.indexOf('_Legend_Index_') &&\n // childElement.getAttribute('class') ? true : false;\n // if (!this.maps.selectionSettings.enableMultiSelect) {\n // selectedElements = querySelectorAll('selectionMapStyle', document.body);\n // selectedLength = selectedElements.length;\n // for (let i: number = 0; i < selectedLength; i++) {\n // removeClass(selectedElements[selectedElements.length - 1]);\n // }\n // if (!legendSelected) {\n // this.select(legendIndex, targetEle);\n // }\n // } else {\n // if (legendSelected) {\n // for (let data of this.legendCollection[legendIndex]['data']) {\n // mapElement = querySelector(\n // this.maps.element.id + '_LayerIndex_' + data['layerIndex'] +\n // '_ShapeIndex_' + data['shapeIndex'] + '_dataIndex_' + data['dataIndex'],\n // this.maps.element.id);\n // removeClass(mapElement);\n // }\n // removeClass(childElement);\n // } else {\n // this.select(legendIndex, targetEle);\n // }\n // }\n // }\n // private select(legendIndex: number, targetEle: Element): void {\n // let mapElement: Element;\n // let childElement: HTMLElement = targetEle.parentElement.childNodes[0] as HTMLElement;\n // for (let i: number = 0; i < this.legendCollection.length; i++) {\n // if (i === legendIndex && !childElement.getAttribute('class')) {\n // for (let data of this.legendCollection[i]['data']) {\n // mapElement = querySelector(\n // this.maps.element.id + '_LayerIndex_' + data['layerIndex'] +\n // '_ShapeIndex_' + data['shapeIndex'] + '_dataIndex_' + data['dataIndex'],\n // this.maps.element.id);\n // let eventArgs: IShapeSelectedEventArgs = {\n // cancel: false,\n // name: shapeSelected,\n // fill: this.maps.selectionSettings.fill,\n // opacity: this.maps.selectionSettings.opacity,\n // border: this.maps.selectionSettings.border\n // };\n // if (!document.getElementById('selectionMap')) {\n // document.body.appendChild(createStyle('selectionMap', 'selectionMapStyle', eventArgs));\n // }\n // mapElement.setAttribute('class', 'selectionMapStyle');\n // }\n // childElement.setAttribute('class', 'selectionMapStyle');\n // }\n // }\n // }\n Legend.prototype.removeEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.off(Browser.touchMoveEvent, this.interactiveHandler);\n this.maps.off(Browser.touchEndEvent, this.interactiveHandler);\n // this.maps.off(click, this.legendClick);\n };\n Legend.prototype.getLegendData = function (layerIndex, dataIndex, data, dataPath, layerData, shapePropertyPath, value) {\n var legendData = [];\n if (Object.prototype.toString.call(layerData) === '[object Array]') {\n for (var i = 0; i < layerData.length; i++) {\n var shapeData = layerData[i];\n if (shapeData['properties'][shapePropertyPath] === data[dataPath]) {\n legendData.push({\n layerIndex: layerIndex, shapeIndex: i, dataIndex: dataIndex,\n name: data[dataPath], value: value\n });\n }\n }\n }\n return legendData;\n };\n /**\n * Get module name.\n */\n Legend.prototype.getModuleName = function () {\n return 'Legend';\n };\n /**\n * To destroy the legend.\n * @return {void}\n * @private\n */\n Legend.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n this.removeEventListener();\n };\n return Legend;\n}());\nexport { Legend };\n","import { itemHighlight } from '../index';\nimport { Browser, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getElementsByClassName, getElement, removeClass, createStyle, customizeStyle, getTargetElement } from '../utils/helper';\n/**\n * Highlight module class\n */\n/* tslint:disable:no-string-literal */\nvar Highlight = /** @class */ (function () {\n function Highlight(maps) {\n this.maps = maps;\n this.addEventListener();\n }\n /**\n * To bind events for highlight module\n */\n Highlight.prototype.addEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.on(Browser.touchMoveEvent, this.mouseMove, this);\n this.maps.on(Browser.touchStartEvent, this.mouseMove, this);\n };\n /**\n * To unbind events for highlight module\n */\n Highlight.prototype.removeEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.off(Browser.touchMoveEvent, this.mouseMove);\n this.maps.off(Browser.touchStartEvent, this.mouseMove);\n };\n /**\n * Public method for highlight module\n */\n Highlight.prototype.addHighlight = function (layerIndex, name, enable) {\n var targetEle = getTargetElement(layerIndex, name, enable, this.maps);\n if (enable) {\n this.mapHighlight(targetEle, null, null);\n }\n else {\n removeClass(targetEle);\n }\n };\n Highlight.prototype.mouseMove = function (e) {\n var targetEle = e.target;\n var layerIndex;\n var isTouch = e.pointerType === 'touch' || e.pointerType === '2' || (e.type.indexOf('touch') > -1);\n if ((targetEle.id.indexOf('LayerIndex') !== -1 || targetEle.id.indexOf('NavigationIndex') > -1) &&\n targetEle.getAttribute('class') !== 'ShapeselectionMapStyle' && !isTouch) {\n layerIndex = parseInt(targetEle.id.split('_LayerIndex_')[1].split('_')[0], 10);\n var shapeData = void 0;\n var data = void 0;\n var shapeIn = void 0;\n var dataIndex = void 0;\n if (targetEle.id.indexOf('ShapeIndex') > -1) {\n shapeIn = parseInt(targetEle.id.split('_ShapeIndex_')[1].split('_')[0], 10);\n shapeData = this.maps.layers[layerIndex].shapeData['features'] ?\n this.maps.layers[layerIndex].shapeData['features'][shapeIn]['properties'] : null;\n dataIndex = parseInt(targetEle.id.split('_dataIndex_')[1].split('_')[0], 10);\n data = isNullOrUndefined(dataIndex) ? null : this.maps.layers[layerIndex].dataSource[dataIndex];\n this.highlightSettings = this.maps.layers[layerIndex].highlightSettings;\n }\n else if (targetEle.id.indexOf('BubbleIndex') > -1) {\n var bubble = parseInt(targetEle.id.split('_BubbleIndex_')[1].split('_')[0], 10);\n dataIndex = parseInt(targetEle.id.split('_dataIndex_')[1].split('_')[0], 10);\n data = this.maps.layers[layerIndex].bubbleSettings[bubble].dataSource[dataIndex];\n this.highlightSettings = this.maps.layers[layerIndex].bubbleSettings[bubble].highlightSettings;\n }\n else if (targetEle.id.indexOf('MarkerIndex') > -1) {\n var marker = parseInt(targetEle.id.split('_MarkerIndex_')[1].split('_')[0], 10);\n dataIndex = parseInt(targetEle.id.split('_DataIndex_')[1].split('_')[0], 10);\n data = this.maps.layers[layerIndex].markerSettings[marker].dataSource[dataIndex];\n this.highlightSettings = this.maps.layers[layerIndex].markerSettings[marker].highlightSettings;\n }\n else {\n var index = parseInt(targetEle.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n layerIndex = parseInt(targetEle.id.split('_LayerIndex_')[1].split('_')[0], 10);\n shapeData = null;\n data = {\n latitude: this.maps.layers[layerIndex].navigationLineSettings[index].latitude,\n longitude: this.maps.layers[layerIndex].navigationLineSettings[index].longitude\n };\n this.highlightSettings = this.maps.layers[layerIndex].navigationLineSettings[index].highlightSettings;\n }\n if (this.highlightSettings.enable) {\n this.mapHighlight(targetEle, shapeData, data);\n }\n else {\n var element = document.getElementsByClassName('highlightMapStyle')[0];\n if (!isNullOrUndefined(element)) {\n removeClass(element);\n if (element.id.indexOf('NavigationIndex') > -1) {\n var index = parseInt(element.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n var layerIndex_1 = parseInt(element.parentElement.id.split('_layerIndex_')[1].split('_')[0], 10);\n element.setAttribute('stroke-width', this.maps.layers[layerIndex_1].navigationLineSettings[index].width.toString());\n element.setAttribute('stroke', this.maps.layers[layerIndex_1].navigationLineSettings[index].color);\n }\n }\n }\n }\n else if (getElementsByClassName('highlightMapStyle').length > 0) {\n targetEle = getElementsByClassName('highlightMapStyle')[0];\n if (targetEle.id.indexOf('NavigationIndex') > -1) {\n var index = parseInt(targetEle.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n layerIndex = parseInt(targetEle.parentElement.id.split('_layerIndex_')[1].split('_')[0], 10);\n targetEle.setAttribute('stroke-width', this.maps.layers[layerIndex].navigationLineSettings[index].width.toString());\n targetEle.setAttribute('stroke', this.maps.layers[layerIndex].navigationLineSettings[index].color);\n }\n removeClass(targetEle);\n }\n };\n Highlight.prototype.mapHighlight = function (targetEle, shapeData, data) {\n var eventArgs = {\n opacity: this.highlightSettings.opacity,\n fill: targetEle.id.indexOf('NavigationIndex') === -1 ? this.highlightSettings.fill : 'none',\n border: { color: this.highlightSettings.border.color, width: this.highlightSettings.border.width },\n name: itemHighlight,\n target: targetEle.id,\n cancel: false,\n shapeData: shapeData,\n data: data\n };\n this.maps.trigger(itemHighlight, eventArgs);\n this.highlightMap(targetEle, eventArgs);\n };\n Highlight.prototype.highlightMap = function (targetEle, eventArgs) {\n var parentElement;\n var children;\n if (targetEle.getAttribute('class') === 'highlightMapStyle') {\n return;\n }\n else {\n if (getElementsByClassName('highlightMapStyle').length > 0) {\n var elem = getElementsByClassName('highlightMapStyle')[0];\n removeClass(elem);\n if (elem.id.indexOf('NavigationIndex') > -1) {\n var index = parseInt(elem.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n var layerIndex = parseInt(elem.parentElement.id.split('_layerIndex_')[1].split('_')[0], 10);\n elem.setAttribute('stroke-width', this.maps.layers[layerIndex].navigationLineSettings[index].width.toString());\n elem.setAttribute('stroke', this.maps.layers[layerIndex].navigationLineSettings[index].color);\n }\n }\n if (!getElement('highlightMap')) {\n document.body.appendChild(createStyle('highlightMap', 'highlightMapStyle', eventArgs));\n }\n else {\n customizeStyle('highlightMap', 'highlightMapStyle', eventArgs);\n }\n targetEle.setAttribute('stroke-width', eventArgs.border.width.toString());\n targetEle.setAttribute('stroke', eventArgs.border.color);\n targetEle.setAttribute('class', 'highlightMapStyle');\n }\n };\n /**\n * Get module name.\n */\n Highlight.prototype.getModuleName = function () {\n return 'Highlight';\n };\n /**\n * To destroy the highlight.\n * @return {void}\n * @private\n */\n Highlight.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n this.removeEventListener();\n };\n return Highlight;\n}());\nexport { Highlight };\n","import { click, itemSelection } from '../index';\nimport { getElementsByClassName, getElement, createStyle, customizeStyle, removeClass, getTargetElement } from '../utils/helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Selection module class\n */\nvar Selection = /** @class */ (function () {\n /* tslint:disable:no-string-literal */\n function Selection(maps) {\n this.maps = maps;\n this.addEventListener();\n }\n /**\n * For binding events to selection module\n */\n Selection.prototype.addEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.on(click, this.mouseClick, this);\n };\n /**\n * For removing events from selection modue\n */\n Selection.prototype.removeEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.off(click, this.mouseClick);\n };\n Selection.prototype.mouseClick = function (targetEle) {\n if (targetEle.id.indexOf('LayerIndex') > -1 || targetEle.id.indexOf('NavigationIndex') > -1) {\n var layerIndex = void 0;\n var shapeData = void 0;\n var data = void 0;\n var shapeIndex = void 0;\n var dataIndex = void 0;\n layerIndex = parseInt(targetEle.id.split('_LayerIndex_')[1].split('_')[0], 10);\n if (targetEle.id.indexOf('ShapeIndex') > -1) {\n shapeIndex = parseInt(targetEle.id.split('_ShapeIndex_')[1].split('_')[0], 10);\n shapeData = this.maps.layers[layerIndex].shapeData['features'] ?\n this.maps.layers[layerIndex].shapeData['features'][shapeIndex]['properties'] : null;\n dataIndex = parseInt(targetEle.id.split('_dataIndex_')[1].split('_')[0], 10);\n data = isNullOrUndefined(dataIndex) ? null : this.maps.layers[layerIndex].dataSource[dataIndex];\n this.selectionsettings = this.maps.layers[layerIndex].selectionSettings;\n this.selectionType = 'Shape';\n }\n else if (targetEle.id.indexOf('BubbleIndex') > -1) {\n var bubbleIndex = parseInt(targetEle.id.split('_BubbleIndex_')[1].split('_')[0], 10);\n dataIndex = parseInt(targetEle.id.split('_dataIndex_')[1].split('_')[0], 10);\n data = this.maps.layers[layerIndex].bubbleSettings[bubbleIndex].dataSource[dataIndex];\n this.selectionsettings = this.maps.layers[layerIndex].bubbleSettings[bubbleIndex].selectionSettings;\n this.selectionType = 'Bubble';\n }\n else if (targetEle.id.indexOf('MarkerIndex') > -1) {\n var markerIndex = parseInt(targetEle.id.split('_MarkerIndex_')[1].split('_')[0], 10);\n dataIndex = parseInt(targetEle.id.split('_DataIndex_')[1].split('_')[0], 10);\n data = this.maps.layers[layerIndex].markerSettings[markerIndex].dataSource[dataIndex];\n this.selectionsettings = this.maps.layers[layerIndex].markerSettings[markerIndex].selectionSettings;\n this.selectionType = 'Marker';\n }\n else {\n var index = parseInt(targetEle.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n shapeData = null;\n data = {\n latitude: this.maps.layers[layerIndex].navigationLineSettings[index].latitude,\n longitude: this.maps.layers[layerIndex].navigationLineSettings[index].longitude\n };\n this.selectionsettings = this.maps.layers[layerIndex].navigationLineSettings[index].selectionSettings;\n this.selectionType = 'navigationline';\n }\n if (this.selectionsettings.enable) {\n this.selectMap(targetEle, shapeData, data);\n }\n }\n };\n /**\n * Public method for selection\n */\n Selection.prototype.addSelection = function (layerIndex, name, enable) {\n var targetEle = getTargetElement(layerIndex, name, enable, this.maps);\n if (enable) {\n this.selectMap(targetEle, null, null);\n }\n else {\n removeClass(targetEle);\n }\n };\n /**\n * Method for selection\n */\n Selection.prototype.selectMap = function (targetEle, shapeData, data) {\n var parentElement;\n var children;\n var selectionsettings = this.selectionsettings;\n var eventArgs = {\n opacity: this.selectionsettings.opacity,\n fill: this.selectionType !== 'navigationline' ? this.selectionsettings.fill : 'none',\n border: { color: this.selectionsettings.border.color, width: this.selectionsettings.border.width },\n name: itemSelection,\n target: targetEle.id,\n cancel: false,\n shapeData: shapeData,\n data: data\n };\n this.maps.trigger(itemSelection, eventArgs);\n // if (this.maps.legendSettings.visible && !this.maps.legendSettings.toggleVisibility && this.maps.legendSettings.legendSelection) {\n // this.removeLegendSelection(this.maps.legendModule.legendCollection, targetEle);\n // }\n if (targetEle.getAttribute('class') === this.selectionType + 'selectionMapStyle') {\n removeClass(targetEle);\n if (targetEle.id.indexOf('NavigationIndex') > -1) {\n var index = parseInt(targetEle.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n var layerIndex = parseInt(targetEle.parentElement.id.split('_layerIndex_')[1].split('_')[0], 10);\n targetEle.setAttribute('stroke-width', this.maps.layers[layerIndex].navigationLineSettings[index].width.toString());\n targetEle.setAttribute('stroke', this.maps.layers[layerIndex].navigationLineSettings[index].color);\n }\n }\n else {\n if (!this.selectionsettings.enableMultiSelect && getElementsByClassName(this.selectionType + 'selectionMapStyle').length > 0) {\n var ele = getElementsByClassName(this.selectionType + 'selectionMapStyle')[0];\n removeClass(ele);\n if (ele.id.indexOf('NavigationIndex') > -1) {\n var index = parseInt(targetEle.id.split('_NavigationIndex_')[1].split('_')[0], 10);\n var layerIndex = parseInt(targetEle.parentElement.id.split('_layerIndex_')[1].split('_')[0], 10);\n ele.setAttribute('stroke-width', this.maps.layers[layerIndex].navigationLineSettings[index].width.toString());\n ele.setAttribute('stroke', this.maps.layers[layerIndex].navigationLineSettings[index].color);\n }\n }\n if (!getElement(this.selectionType + 'selectionMap')) {\n document.body.appendChild(createStyle(this.selectionType + 'selectionMap', this.selectionType + 'selectionMapStyle', eventArgs));\n }\n else {\n customizeStyle(this.selectionType + 'selectionMap', this.selectionType + 'selectionMapStyle', eventArgs);\n }\n targetEle.setAttribute('stroke-width', eventArgs.border.width.toString());\n targetEle.setAttribute('stroke', eventArgs.border.color);\n targetEle.setAttribute('class', this.selectionType + 'selectionMapStyle');\n }\n };\n /**\n * Remove legend selection\n */\n // private removeLegendSelection(legendCollection: Object[], targetEle: Element): void {\n // let shape: Element;\n // if (!this.selectionsettings.enableMultiSelect) {\n // for (let i: number = 0; i < legendCollection.length; i++) {\n // for (let data of legendCollection[i]['data']) {\n // shape = getElement(this.maps.element.id + '_LayerIndex_' + data['layerIndex'] +\n // '_ShapeIndex_' + data['shapeIndex'] + '_dataIndex_' + data['dataIndex']);\n // removeClass(shape);\n // }\n // }\n // }\n // }\n /**\n * Get module name.\n */\n Selection.prototype.getModuleName = function () {\n return 'Selection';\n };\n /**\n * To destroy the selection.\n * @return {void}\n * @private\n */\n Selection.prototype.destroy = function (maps) {\n /**\n * Destroy method performed here\n */\n this.removeEventListener();\n };\n return Selection;\n}());\nexport { Selection };\n","import { tooltipRender } from '../../index';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { setStyleAttribute, createElement, Browser, isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { getTemplateFunction, MapLocation, getElement, checkShapeDataFields, Internalize } from '../utils/helper';\n/**\n * Tooltip module class\n */\nvar MapsTooltip = /** @class */ (function () {\n function MapsTooltip(maps) {\n this.isTouch = false;\n this.touchDelay = 0;\n this.maps = maps;\n this.element = maps.element;\n this.addEventListener();\n this.ejTooltip = new Tooltip({\n opensOn: 'custom',\n position: 'TopCenter',\n beforeRender: this.onBeforeRender.bind(this),\n beforeOpen: this.tooltipCustomization.bind(this),\n openDelay: 0, closeDelay: 1,\n });\n this.ejTooltip.appendTo(this.element);\n }\n /**\n * To bind events for tooltip module\n */\n MapsTooltip.prototype.addEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.on(Browser.touchMoveEvent, this.mouseMove, this);\n this.maps.on(Browser.touchEndEvent, this.mouseMove, this);\n };\n /**\n * To unbind events for tooltip module\n */\n MapsTooltip.prototype.removeEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n this.maps.off(Browser.touchMoveEvent, this.mouseMove);\n this.maps.off(Browser.touchEndEvent, this.mouseMove);\n };\n MapsTooltip.prototype.mouseMove = function (e) {\n if (this.isTouch && new Date().getTime() < this.touchDelay) {\n return;\n }\n this.setMouseXY(e);\n this.renderTooltip(e);\n };\n MapsTooltip.prototype.setMouseXY = function (e) {\n var pageX;\n var pageY;\n if (e.type.indexOf('touch') > -1) {\n this.isTouch = true;\n var touchArg = e;\n pageY = touchArg.changedTouches[0].clientY;\n pageX = touchArg.changedTouches[0].clientX;\n }\n else {\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2';\n pageX = e.clientX;\n pageY = e.clientY;\n }\n this.mouse = new MapLocation(pageX, pageY);\n this.touchDelay = new Date().getTime() + 100;\n };\n /**\n * Method to render the tooltip for maps.\n */\n MapsTooltip.prototype.renderTooltip = function (e) {\n if (this.previousId === e.target.id) {\n this.ejTooltip.refresh(this.appendTargetElement(this.mouse, 0));\n }\n else if (this.manipulateTarget(e.target)) {\n this.shapeColor = e.target.getAttribute('fill');\n if (document.querySelector('.e-tip-content') && !this.setTooltipContent(this.options) && !this.isTouch) {\n var args = {\n type: null, cancel: false, element: this.customTooltip, event: e,\n name: 'custom', target: this.tooltipEle\n };\n this.tooltipCustomization(args);\n return;\n }\n else {\n this.closeTooltip(1);\n }\n this.ejTooltip.open(this.appendTargetElement(this.mouse));\n }\n else {\n this.closeTooltip(1);\n }\n };\n MapsTooltip.prototype.getTargetElement = function (element) {\n var hoverElements = ['_ShapeIndex_', '_MarkerIndex_', '_BubbleIndex_'];\n if (!isNullOrUndefined(element.id) && element.id.length > 0 && element.id !== this.maps.element.id) {\n for (var i = 0; i < hoverElements.length; i++) {\n if (element.id.indexOf(hoverElements[i]) > -1) {\n this.tooltipEle = element;\n break;\n }\n else if (i === hoverElements.length - 1) {\n this.getTargetElement(element.parentNode);\n }\n }\n }\n else if (element.id !== this.maps.element.id) {\n this.getTargetElement(element.parentNode);\n }\n };\n /* tslint:disable:no-string-literal */\n MapsTooltip.prototype.closeTooltip = function (delay, duration, effect) {\n if (duration === void 0) { duration = 0; }\n if (effect === void 0) { effect = 'None'; }\n this.ejTooltip.closeDelay = duration;\n this.ejTooltip.close({ delay: delay, duration: duration, effect: effect });\n this.previousId = null;\n };\n /* tslint:disable:no-string-literal */\n MapsTooltip.prototype.manipulateTarget = function (currentTarget) {\n this.tooltipEle = null;\n this.getTargetElement(currentTarget);\n if (isNullOrUndefined(this.tooltipEle)) {\n return false;\n }\n var target = this.tooltipEle.id;\n this.previousId = target;\n var index = parseFloat(target.split('_')[2]);\n var layer = this.maps.layersCollection[index];\n if (target.indexOf('_ShapeIndex_') > -1) {\n this.options = layer.tooltipSettings;\n var shape = parseInt(target.split('_')[4], 10);\n if (isNullOrUndefined(layer.shapeData['features'])) {\n return false;\n }\n var value = layer.shapeData['features'][shape]['properties'];\n index = checkShapeDataFields(layer.dataSource, value, layer.shapeDataPath, layer.shapePropertyPath);\n if (this.options.visible && ((!isNullOrUndefined(index) && !isNaN(index)) || (!isNullOrUndefined(value)))) {\n this.currentData = layer.dataSource[index] || value;\n return true;\n }\n }\n else if (target.indexOf('_MarkerIndex_') > -1) {\n var markerIndex = parseInt(target.split('_')[4], 10);\n var dataIndex = parseInt(target.split('_')[6], 10);\n var marker = layer.markerSettings[markerIndex];\n this.options = marker.tooltipSettings;\n if (!isNaN(markerIndex) && this.options.visible) {\n this.currentData = marker.dataSource[dataIndex];\n return true;\n }\n }\n else if (target.indexOf('_BubbleIndex_') > -1) {\n var bubbleIndex = parseInt(target.split('_')[4], 10);\n var dataIndex = parseInt(target.split('_')[6], 10);\n this.options = layer.bubbleSettings[bubbleIndex].tooltipSettings;\n if (!isNaN(bubbleIndex) && this.options.visible) {\n this.currentData = layer.bubbleSettings[bubbleIndex].dataSource[dataIndex];\n return true;\n }\n }\n return false;\n };\n /**\n * Method to append the target element for tooltip\n */\n MapsTooltip.prototype.appendTargetElement = function (location, padding) {\n if (padding === void 0) { padding = 10; }\n var element = getElement(this.element.id + '_MapsTooltip');\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n location.x -= svgRect.left;\n location.y -= (padding + svgRect.top);\n this.position = location;\n if (element) {\n element.style.left = location.x + 'px';\n element.style.top = location.y + 'px';\n }\n else {\n element = createElement('div', {\n id: this.element.id + '_MapsTooltip',\n styles: 'position: absolute;left:' + location.x + 'px;top:' + location.y +\n 'px;width:2px;height:2px;background:transparent;pointer-events:none;'\n });\n getElement(this.element.id + '_Secondary_Element').appendChild(element);\n }\n return element;\n };\n MapsTooltip.prototype.formatter = function (format, data) {\n if (isNullOrUndefined(format)) {\n return null;\n }\n var keys = Object.keys(data);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n format = format.split('${' + key + '}').join(data[key]);\n }\n return format;\n };\n /**\n * Method to perform the tooltip for maps.\n */\n MapsTooltip.prototype.onBeforeRender = function (args) {\n args.cancel = this.setTooltipContent(this.options);\n this.ejTooltip.dataBind();\n };\n /**\n * To get content for the current toolitp\n */\n MapsTooltip.prototype.setTooltipContent = function (options) {\n if (options === void 0) { options = this.options; }\n var localData = extend({}, this.currentData, null, true);\n if (this.maps.format && !isNaN(parseFloat(localData[options.valuePath]))) {\n localData[options.valuePath] = Internalize(this.maps, parseFloat(localData[options.valuePath]));\n }\n var content = this.formatter(options.format, localData) || localData[options.valuePath];\n content = options.template ? this.joinElements(getTemplateFunction(options.template)(localData)) : content;\n this.textStyle = extend(options.textStyle, options.textStyle, null, true);\n this.textStyle.color = this.textStyle.color || this.shapeColor;\n var argsData = {\n cancel: false, name: tooltipRender,\n content: content,\n border: options.border,\n textStyle: this.textStyle,\n fill: options.fill,\n };\n this.maps.trigger(tooltipRender, argsData);\n this.border = argsData.border;\n this.shapeColor = argsData.fill;\n this.ejTooltip.content = argsData.content;\n return argsData.cancel || (isNullOrUndefined(argsData.content) || argsData.content === '');\n };\n MapsTooltip.prototype.joinElements = function (elements) {\n var elementString = '';\n [].forEach.call(elements, function (ele) {\n elementString += ele.outerHTML;\n });\n return elementString;\n };\n /**\n * Method to customize the tooltip elements for maps.\n */\n MapsTooltip.prototype.tooltipCustomization = function (args, options) {\n if (options === void 0) { options = this.options; }\n this.customTooltip = args.element;\n if (options.template) {\n setStyleAttribute(args.element, {\n 'backgroundColor': 'transparent', 'borderColor': 'transparent',\n 'borderWidth': '1px', 'pointer-events': 'none'\n });\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': '0px', 'height': '0px'\n });\n if (this.isTouch) {\n this.closeTooltip(1, 1500, 'FadeOut');\n }\n return null;\n }\n var font = this.textStyle;\n var borderColor = this.border.color;\n var border = this.border.width;\n var pointerSize = 8;\n var arrowWidth = (pointerSize - border) + 'px';\n var outerWidth;\n var innerWidth;\n var arrowEle = args.element.querySelector('.e-arrow-tip');\n setStyleAttribute(args.element, {\n 'backgroundColor': this.shapeColor, 'borderColor': borderColor || '#212121',\n 'borderWidth': border + 'px', 'pointer-events': 'none', 'borderRadius': '5px', 'padding-left': '5px',\n 'padding-right': '5px', 'padding-top': '3px', 'padding-bottom': '3px'\n });\n setStyleAttribute(args.element.querySelector('.e-tip-content'), {\n 'color': font.color, 'fontFamily': font.fontFamily, 'fontSize': font.size,\n 'fontWeight': font.fontWeight, 'fontStyle': font.fontStyle, 'padding-left': '5px',\n 'padding-right': '5px', 'padding-top': '3px', 'padding-bottom': '3px'\n });\n setStyleAttribute(args.element.querySelector('.e-arrow-tip'), {\n 'width': 2 * (pointerSize + border) + 'px', 'height': pointerSize + border + 'px'\n });\n if (arrowEle.classList.contains('e-tip-top')) {\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderBottomColor': borderColor,\n 'borderLeftWidth': outerWidth, 'borderRightWidth': outerWidth, 'borderBottomWidth': outerWidth,\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n color: this.shapeColor, top: '0px'\n });\n }\n else if (arrowEle.classList.contains('e-tip-bottom')) {\n outerWidth = pointerSize + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-outer'), {\n 'borderRightColor': 'transparent', 'borderLeftColor': 'transparent', 'borderTopColor': borderColor,\n 'borderLeftWidth': outerWidth, 'borderRightWidth': outerWidth, 'borderTopWidth': outerWidth,\n });\n innerWidth = (pointerSize - border) + 'px';\n setStyleAttribute(args.element.querySelector('.e-arrow-tip-inner'), {\n color: this.shapeColor\n });\n }\n setStyleAttribute(args.element, {\n 'display': 'block', 'transitionProperty': 'left,top',\n 'transitionDuration': '1ms'\n });\n if (this.isTouch) {\n this.closeTooltip(1000, 1500, 'FadeOut');\n }\n };\n /**\n * Get module name.\n */\n MapsTooltip.prototype.getModuleName = function () {\n return 'MapsTooltip';\n };\n /**\n * To destroy the tooltip.\n * @return {void}\n * @private\n */\n MapsTooltip.prototype.destroy = function (maps) {\n this.removeEventListener();\n this.ejTooltip.destroy();\n };\n return MapsTooltip;\n}());\nexport { MapsTooltip };\n","import { doubleClick } from '../../index';\nimport { Point, getElementByID, PathOption, Rect, convertGeoToPoint, CircleOption, convertTileLatLongToPoint } from '../utils/helper';\nimport { RectOption, createTooltip, calculateScale, getTouchCenter, getTouches, targetTouches } from '../utils/helper';\nimport { MapLocation, zoomAnimate, smoothTranslate } from '../utils/helper';\nimport { isNullOrUndefined, EventHandler, Browser, remove, createElement } from '@syncfusion/ej2-base';\nimport { changeBorderWidth } from '../index';\n/**\n * Zoom module class\n */\n/* tslint:disable:max-line-length */\nvar Zoom = /** @class */ (function () {\n function Zoom(maps) {\n this.isPanning = false;\n this.mouseEnter = false;\n this.isTouch = false;\n this.rectZoomingStart = false;\n this.pinchRect = new Rect(0, 0, 0, 0);\n this.browserName = Browser.info.name;\n this.isPointer = Browser.isPointer;\n this.handled = false;\n this.pinchFactor = 1;\n this.startTouches = [];\n this.maps = maps;\n this.wheelEvent = this.browserName === 'mozilla' ? (this.isPointer ? 'mousewheel' : 'DOMMouseScroll') : 'mousewheel';\n this.cancelEvent = this.isPointer ? 'pointerleave' : 'mouseleave';\n this.selectionColor = this.maps.zoomSettings.selectionColor;\n this.fillColor = this.maps.zoomSettings.color;\n this.addEventListener();\n this.groupElements = [];\n }\n /* tslint:disable:no-string-literal */\n Zoom.prototype.performZooming = function (position, newZoomFactor, type) {\n var map = this.maps;\n var prevLevel = map.tileZoomLevel;\n var prevScale = map.scale;\n var maxZoom = map.zoomSettings.maxZoom;\n var minZoom = map.zoomSettings.minZoom;\n if ((!map.isTileMap) && (type === 'ZoomIn' ? newZoomFactor >= minZoom && newZoomFactor <= maxZoom : newZoomFactor >= minZoom)) {\n var availSize = map.mapAreaRect;\n var minBounds = map.baseMapRectBounds['min'];\n var maxBounds = map.baseMapRectBounds['max'];\n var mapTotalWidth = Math.abs(minBounds['x'] - maxBounds['x']);\n var mapTotalHeight = Math.abs(minBounds['y'] - maxBounds['y']);\n var point = map.translatePoint;\n var translatePointX = point.x - (((availSize.width / prevScale) - (availSize.width / newZoomFactor)) / (availSize.width / position.x));\n var translatePointY = point.y - (((availSize.height / prevScale) - (availSize.height / newZoomFactor)) / (availSize.height / position.y));\n var currentHeight = Math.abs(map.baseMapRectBounds['max']['y'] - map.baseMapRectBounds['min']['y']) * newZoomFactor;\n translatePointX = (currentHeight < map.mapAreaRect.height) ? (availSize.x + ((-(minBounds['x'])) + ((availSize.width / 2) - (mapTotalWidth / 2)))) : translatePointX;\n translatePointY = (currentHeight < map.mapAreaRect.height) ? (availSize.y + ((-(minBounds['y'])) + ((availSize.height / 2) - (mapTotalHeight / 2)))) : translatePointY;\n map.translatePoint = new Point(translatePointX, translatePointY);\n map.scale = newZoomFactor;\n }\n else if ((map.isTileMap) && (newZoomFactor >= minZoom && newZoomFactor <= maxZoom)) {\n this.getTileTranslatePosition(prevLevel, newZoomFactor, position);\n map.tileZoomLevel = newZoomFactor;\n map.scale = Math.pow(2, newZoomFactor - 1);\n map.mapLayerPanel.generateTiles(newZoomFactor, map.tileTranslatePoint);\n map.translatePoint.x = (map.tileTranslatePoint.x - (0.5 * map.scale)) / map.scale;\n map.translatePoint.y = (map.tileTranslatePoint.y - (0.5 * map.scale)) / map.scale;\n }\n this.applyTransform();\n map.trigger(doubleClick, this);\n };\n Zoom.prototype.getTileTranslatePosition = function (prevLevel, currentLevel, position) {\n var map = this.maps;\n var tileDefaultSize = 256;\n var bounds = getElementByID(this.maps.element.id).getBoundingClientRect();\n var prevSize = Math.pow(2, prevLevel) * 256;\n var totalSize = Math.pow(2, currentLevel) * 256;\n var x = ((position.x - map.tileTranslatePoint.x) / prevSize) * 100;\n var y = ((position.y - map.tileTranslatePoint.y) / prevSize) * 100;\n map.tileTranslatePoint.x = (currentLevel === 1) ? (bounds.width / 2) - ((tileDefaultSize * 2) / 2) :\n position.x - ((x * totalSize) / 100);\n map.tileTranslatePoint.y = (currentLevel === 1) ? (bounds.height / 2) - ((tileDefaultSize * 2) / 2) :\n position.y - ((y * totalSize) / 100);\n };\n Zoom.prototype.performRectZooming = function () {\n var map = this.maps;\n var size = map.availableSize;\n var prevLevel = map.tileZoomLevel;\n var zoomRect = this.zoomingRect;\n if (zoomRect.height > 0 && zoomRect.width > 0) {\n var x = this.zoomingRect.x + (this.zoomingRect.width / 2);\n var y = this.zoomingRect.y + (this.zoomingRect.height / 2);\n var zoomCalculationFactor = void 0;\n if (!map.isTileMap) {\n var scale = map.previousScale = map.scale;\n zoomCalculationFactor = scale + Math.round((((size.width / zoomRect.width) + (size.height / zoomRect.height)) / 2));\n var translatePoint = map.previousPoint = map.translatePoint;\n var translatePointX = translatePoint.x - (((size.width / scale) - (size.width / zoomCalculationFactor)) / (size.width / x));\n var translatePointY = translatePoint.y - (((size.height / scale) - (size.height / zoomCalculationFactor)) / (size.height / y));\n map.translatePoint = new Point(translatePointX, translatePointY);\n map.scale = zoomCalculationFactor;\n }\n else {\n zoomCalculationFactor = prevLevel + (Math.round(prevLevel + (((size.width / zoomRect.width) + (size.height / zoomRect.height)) / 2)));\n this.getTileTranslatePosition(prevLevel, zoomCalculationFactor, { x: x, y: y });\n map.tileZoomLevel = zoomCalculationFactor;\n map.mapLayerPanel.generateTiles(zoomCalculationFactor, map.tileTranslatePoint);\n map.translatePoint.x = (map.tileTranslatePoint.x - (0.5 * Math.pow(2, zoomCalculationFactor))) /\n (Math.pow(2, zoomCalculationFactor));\n map.translatePoint.y = (map.tileTranslatePoint.y - (0.5 * Math.pow(2, zoomCalculationFactor))) /\n (Math.pow(2, zoomCalculationFactor));\n map.scale = (Math.pow(2, zoomCalculationFactor));\n }\n this.applyTransform(true);\n this.zoomingRect = null;\n }\n };\n Zoom.prototype.setInteraction = function (newInteraction) {\n this.lastScale = 1;\n this.interaction = newInteraction;\n };\n Zoom.prototype.updateInteraction = function () {\n if (this.fingers === 2) {\n this.setInteraction('zoom');\n }\n else {\n this.setInteraction(null);\n }\n };\n Zoom.prototype.performPinchZooming = function (e) {\n var touches = null;\n var map = this.maps;\n var prevLevel = map.tileZoomLevel;\n var availSize = map.mapAreaRect;\n var scale = calculateScale(this.touchStartList, this.touchMoveList);\n var touchCenter = getTouchCenter(getTouches(this.touchMoveList, this.maps));\n var newScale = scale / this.lastScale;\n this.lastScale = scale;\n this.pinchFactor *= newScale;\n this.pinchFactor = Math.min(this.maps.zoomSettings.maxZoom, Math.max(this.pinchFactor, this.maps.zoomSettings.minZoom));\n var zoomCalculationFactor = this.pinchFactor;\n var translatePointX;\n var translatePointY;\n if (!map.isTileMap) {\n var minBounds = map.baseMapRectBounds['min'];\n var maxBounds = map.baseMapRectBounds['max'];\n var mapTotalWidth = Math.abs(minBounds['x'] - maxBounds['x']);\n var mapTotalHeight = Math.abs(minBounds['y'] - maxBounds['y']);\n var translatePoint = map.translatePoint;\n var currentHeight = Math.abs(map.baseMapRectBounds['max']['y'] - map.baseMapRectBounds['min']['y']) * zoomCalculationFactor;\n var translatePointX_1 = translatePoint.x - (((availSize.width / map.scale) - (availSize.width / zoomCalculationFactor)) / (availSize.width / touchCenter.x));\n var translatePointY_1 = translatePoint.y - (((availSize.height / map.scale) - (availSize.height / zoomCalculationFactor)) / (availSize.height / touchCenter.y));\n // translatePointX = (currentHeight < map.mapAreaRect.height) ? (availSize.x + ((-(minBounds['x'])) + ((availSize.width / 2) - (mapTotalWidth / 2)))) : translatePointX;\n //translatePointY = (currentHeight < map.mapAreaRect.height) ? (availSize.y + ((-(minBounds['y'])) + ((availSize.height / 2) - (mapTotalHeight / 2)))) : translatePointY;\n map.translatePoint = new Point(translatePointX_1, translatePointY_1);\n map.scale = zoomCalculationFactor;\n }\n else {\n var newTileFactor = zoomCalculationFactor;\n this.getTileTranslatePosition(prevLevel, newTileFactor, { x: touchCenter.x, y: touchCenter.y });\n map.tileZoomLevel = newTileFactor;\n map.mapLayerPanel.generateTiles(newTileFactor, map.tileTranslatePoint);\n map.translatePoint.x = (map.tileTranslatePoint.x - (0.5 * Math.pow(2, newTileFactor))) /\n (Math.pow(2, newTileFactor));\n map.translatePoint.y = (map.tileTranslatePoint.y - (0.5 * Math.pow(2, newTileFactor))) /\n (Math.pow(2, newTileFactor));\n map.scale = (Math.pow(2, newTileFactor));\n }\n this.applyTransform();\n };\n Zoom.prototype.drawZoomRectangle = function () {\n var map = this.maps;\n var down = this.mouseDownPoints;\n var move = this.mouseMovePoints;\n var x;\n var y;\n var width;\n var height;\n var border = { width: 1, color: '#009900' };\n width = Math.abs(move.x - down.x);\n height = Math.abs(move.y - down.y);\n x = ((move.x > down.x) ? down.x : down.x - width);\n y = ((move.y > down.y) ? down.y : down.y - height);\n var elementRect = getElementByID(map.element.id).getBoundingClientRect();\n if ((x > map.mapAreaRect.x && x < (map.mapAreaRect.x + map.mapAreaRect.width)) &&\n (y > map.mapAreaRect.y) && (y < map.mapAreaRect.y + map.mapAreaRect.height)) {\n this.zoomingRect = new Rect(x, y, width, height);\n var rectSVGObject = map.renderer.createSvg({\n id: map.element.id + '_Selection_Rect_Zooming',\n width: map.availableSize.width,\n height: map.availableSize.height,\n });\n var rectOption = new RectOption(map.element.id + '_ZoomRect', '#d3d3d3', border, 0.5, this.zoomingRect, 0, 0, '', '3');\n rectSVGObject.appendChild(map.renderer.drawRectangle(rectOption));\n getElementByID(map.element.id + '_Secondary_Element').appendChild(rectSVGObject);\n }\n };\n /**\n * To animate the zooming process\n */\n Zoom.prototype.animateTransform = function (element, animate, x, y, scale) {\n var duration = this.currentLayer.animationDuration;\n if (!animate || duration === 0) {\n element.setAttribute('transform', 'scale(' + (scale) + ') translate( ' + x + ' ' + y + ' )');\n return;\n }\n zoomAnimate(element, 0, duration, new MapLocation(x, y), scale, this.maps.mapAreaRect, this.maps);\n };\n Zoom.prototype.applyTransform = function (animate) {\n var layerIndex;\n this.templateCount = 0;\n var scale = this.maps.scale;\n var x = this.maps.translatePoint.x;\n var y = this.maps.translatePoint.y;\n var collection = [];\n if (this.layerCollectionEle) {\n for (var i = 0; i < this.layerCollectionEle.childElementCount; i++) {\n var layerElement = this.layerCollectionEle.childNodes[i];\n if (layerElement.tagName === 'g') {\n this.templateCount++;\n var index = parseFloat(layerElement.id.split('_')[2]);\n this.currentLayer = this.maps.layersCollection[index];\n var factor = this.maps.mapLayerPanel.calculateFactor(this.currentLayer);\n for (var j = 0; j < layerElement.childElementCount; j++) {\n var currentEle = layerElement.childNodes[j];\n if (!(currentEle.id.indexOf('_Markers_Group') > -1) && (!(currentEle.id.indexOf('_bubble_Group') > -1))\n && (!(currentEle.id.indexOf('_dataLableIndex_Group') > -1))) {\n if (this.maps.isTileMap && (currentEle.id.indexOf('_line_Group') > -1)) {\n currentEle.remove();\n layerElement.appendChild(this.maps.navigationLineModule.renderNavigation(this.currentLayer, this.maps.tileZoomLevel, index));\n }\n else {\n changeBorderWidth(currentEle, index, scale, this.maps);\n this.animateTransform(currentEle, animate, x, y, scale);\n }\n }\n else if (currentEle.id.indexOf('_Markers_Group') > -1) {\n for (var k = 0; k < currentEle.childElementCount; k++) {\n this.markerTranslate(currentEle.childNodes[k], factor, x, y, scale, 'Marker', animate);\n }\n }\n else if (currentEle.id.indexOf('_bubble_Group') > -1) {\n var childElement = void 0;\n for (var k = 0; k < currentEle.childElementCount; k++) {\n childElement = currentEle.childNodes[k];\n var bubbleTransform = childElement.getAttribute('transform');\n layerIndex = parseFloat(childElement.id.split('_')[2]);\n var bubleIndex = parseFloat(childElement.id.split('_')[4]);\n var dataIndex = parseFloat(childElement.id.split('_')[6]);\n for (var l = 0; l < this.maps.bubbleModule.bubbleCollection.length; l++) {\n var bubbleCollection = this.maps.bubbleModule.bubbleCollection[l];\n if (bubbleCollection['LayerIndex'] === layerIndex && bubbleCollection['BubbleIndex'] === bubleIndex &&\n bubbleCollection['DataIndex'] === dataIndex) {\n var centerX = bubbleCollection['center']['x'];\n var centerY = bubbleCollection['center']['y'];\n var currentX = ((centerX + x) * scale);\n var currentY = ((centerY + y) * scale);\n var duration = this.currentLayer.animationDuration;\n if (!animate || duration === 0) {\n childElement.setAttribute('transform', 'translate( ' + currentX + ' ' + currentY + ' )');\n }\n else {\n smoothTranslate(childElement, 0, duration, new MapLocation(currentX, currentY));\n }\n break;\n }\n }\n }\n }\n else if (currentEle.id.indexOf('_dataLableIndex_Group') > -1) {\n for (var k = 0; k < currentEle.childElementCount; k++) {\n this.dataLabelTranslate(currentEle.childNodes[k], factor, x, y, scale, 'DataLabel', animate);\n }\n }\n }\n }\n }\n if (!animate || this.currentLayer.animationDuration === 0) {\n this.processTemplate(x, y, scale, this.maps);\n }\n }\n };\n /**\n * To translate the layer template elements\n * @private\n */\n Zoom.prototype.processTemplate = function (x, y, scale, maps) {\n for (var i = 0; i < this.templateCount; i++) {\n this.currentLayer = maps.layersCollection[i];\n var factor = maps.mapLayerPanel.calculateFactor(this.currentLayer);\n var markerTemplateElement = getElementByID(maps.element.id + '_LayerIndex_' +\n i + '_Markers_Template_Group');\n var datalabelTemplateElemement = getElementByID(maps.element.id + '_LayerIndex_'\n + i + '_Label_Template_Group');\n if ((!isNullOrUndefined(markerTemplateElement)) && markerTemplateElement.childElementCount > 0) {\n for (var k = 0; k < markerTemplateElement.childElementCount; k++) {\n this.markerTranslate(markerTemplateElement.childNodes[k], factor, x, y, scale, 'Template');\n }\n }\n if ((!isNullOrUndefined(datalabelTemplateElemement)) && datalabelTemplateElemement.childElementCount > 0) {\n for (var k = 0; k < datalabelTemplateElemement.childElementCount; k++) {\n this.dataLabelTranslate(datalabelTemplateElemement.childNodes[k], factor, x, y, scale, 'Template');\n }\n }\n }\n };\n Zoom.prototype.dataLabelTranslate = function (element, factor, x, y, scale, type, animate) {\n if (animate === void 0) { animate = false; }\n var labelCollection = this.maps.dataLabelModule.dataLabelCollections;\n var layerIndex = parseFloat(element.id.split('_')[2]);\n var shapeIndex = parseFloat(element.id.split('_')[4]);\n var labelIndex = parseFloat(element.id.split('_')[6]);\n var duration = this.currentLayer.animationDuration;\n for (var l = 0; l < labelCollection.length; l++) {\n var label = labelCollection[l];\n if (label['layerIndex'] === layerIndex && label['shapeIndex'] === shapeIndex\n && label['labelIndex'] === labelIndex) {\n var labelX = label['location']['x'];\n var labelY = label['location']['y'];\n if (type === 'Template') {\n var layerEle = getElementByID(this.maps.element.id + '_Layer_Collections');\n labelX = ((Math.abs(this.maps.baseMapRectBounds['min']['x'] - labelX)) * scale);\n labelY = ((Math.abs(this.maps.baseMapRectBounds['min']['y'] - labelY)) * scale);\n var templateOffset = element.getBoundingClientRect();\n var layerOffset = layerEle.getBoundingClientRect();\n var elementOffset = element.parentElement.getBoundingClientRect();\n var x_1 = ((labelX) + (layerOffset.left - elementOffset.left) - (templateOffset.width / 2));\n var y_1 = ((labelY) + (layerOffset.top - elementOffset.top) - (templateOffset.height / 2));\n element.style.left = x_1 + 'px';\n element.style.top = y_1 + 'px';\n }\n else {\n labelX = ((labelX + x) * scale);\n labelY = ((labelY + y) * scale);\n if (!animate || duration === 0) {\n element.setAttribute('transform', 'translate( ' + labelX + ' ' + labelY + ' )');\n }\n else {\n smoothTranslate(element, 0, duration, new MapLocation(labelX, labelY));\n }\n }\n }\n }\n };\n Zoom.prototype.markerTranslate = function (element, factor, x, y, scale, type, animate) {\n if (animate === void 0) { animate = false; }\n var layerIndex = parseInt(element.id.split('_')[2], 10);\n var markerIndex = parseInt(element.id.split('_')[4], 10);\n var dataIndex = parseInt(element.id.split('_')[6], 10);\n var layer = this.maps.layersCollection[layerIndex];\n var marker = layer.markerSettings[markerIndex];\n if (!isNullOrUndefined(marker) && !isNullOrUndefined(marker.dataSource) && !isNullOrUndefined(marker.dataSource[dataIndex])) {\n var lng = marker.dataSource[dataIndex]['longitude'];\n var lat = marker.dataSource[dataIndex]['latitude'];\n var duration = this.currentLayer.animationDuration;\n var location_1 = (this.maps.isTileMap) ? convertTileLatLongToPoint(new Point(lng, lat), this.maps.tileZoomLevel, this.maps.tileTranslatePoint, true) : convertGeoToPoint(lat, lng, factor, layer, this.maps);\n if (this.maps.isTileMap) {\n if (type === 'Template') {\n var templateOffset = element.getBoundingClientRect();\n element.style.left = (location_1.x - (templateOffset.width / 2)) + 'px';\n element.style.top = (location_1.y - (templateOffset.height / 2)) + 'px';\n }\n else {\n element.setAttribute('transform', 'translate( ' + location_1.x + ' ' + location_1.y + ' )');\n }\n }\n else {\n if (type === 'Template') {\n location_1.x = ((Math.abs(this.maps.baseMapRectBounds['min']['x'] - location_1.x)) * scale);\n location_1.y = ((Math.abs(this.maps.baseMapRectBounds['min']['y'] - location_1.y)) * scale);\n var templateOffset = element.getBoundingClientRect();\n var layerOffset = getElementByID(this.maps.element.id + '_Layer_Collections').getBoundingClientRect();\n var elementOffset = element.parentElement.getBoundingClientRect();\n element.style.left = (((location_1.x) + (layerOffset.left - elementOffset.left) -\n (templateOffset.width / 2)) + marker.offset.x) + 'px';\n element.style.top = (((location_1.y) + (layerOffset.top - elementOffset.top)\n - (templateOffset.height / 2)) + marker.offset.y) + 'px';\n }\n else {\n location_1.x = (((location_1.x + x) * scale) + marker.offset.x);\n location_1.y = (((location_1.y + y) * scale) + marker.offset.y);\n if (!animate || duration === 0) {\n element.setAttribute('transform', 'translate( ' + location_1.x + ' ' + location_1.y + ' )');\n }\n else {\n smoothTranslate(element, 0, duration, location_1);\n }\n }\n }\n }\n };\n Zoom.prototype.panning = function () {\n var map = this.maps;\n var areaRect = map.mapAreaRect;\n var down = this.mouseDownPoints;\n var move = this.mouseMovePoints;\n var scale = map.scale;\n var translatePoint = map.translatePoint;\n var x;\n var y;\n var transY;\n var transX;\n if (!map.isTileMap) {\n var x_2 = translatePoint.x - (down.x - move.x) / scale;\n var y_2 = translatePoint.y - (down.y - move.y) / scale;\n var layerRect = getElementByID(map.element.id + '_Layer_Collections').getBoundingClientRect();\n var elementRect = getElementByID(map.element.id + '_svg').getBoundingClientRect();\n var panningXDirection = (((down.x - move.x) < 0 ? layerRect.left <= (elementRect.left + map.mapAreaRect.x) :\n ((layerRect.left + layerRect.width) >= (elementRect.left + elementRect.width) + map.mapAreaRect.x + map.margin.left)));\n var panningYDirection = (((down.y - move.y) < 0 ? layerRect.top <= (elementRect.top + map.mapAreaRect.y) :\n ((layerRect.top + layerRect.height) >= (elementRect.top + elementRect.height) + map.mapAreaRect.y + map.margin.top)));\n if (panningXDirection && panningYDirection) {\n map.translatePoint = new Point(x_2, y_2);\n this.applyTransform();\n }\n }\n else if (this.maps.tileZoomLevel > 1) {\n x = map.tileTranslatePoint.x - (down.x - move.x);\n y = map.tileTranslatePoint.y - (down.y - move.y);\n map.tileTranslatePoint.x = x;\n map.tileTranslatePoint.y = y;\n map.mapLayerPanel.generateTiles(map.tileZoomLevel, map.tileTranslatePoint);\n map.translatePoint.x = (map.tileTranslatePoint.x - (down.x - move.x)) / map.scale;\n map.translatePoint.y = (map.tileTranslatePoint.y - (down.y - move.y)) / map.scale;\n this.applyTransform();\n }\n this.mouseDownPoints = this.mouseMovePoints;\n };\n Zoom.prototype.toolBarZooming = function (zoomFactor, type) {\n var map = this.maps;\n var prevLevel = map.tileZoomLevel;\n var scale = map.previousScale = map.scale;\n var maxZoom = map.zoomSettings.maxZoom;\n var minZoom = map.zoomSettings.minZoom;\n var size = map.mapAreaRect;\n zoomFactor = (type === 'ZoomOut') ? (Math.round(zoomFactor) === 1 ? 1 : zoomFactor) : zoomFactor;\n if ((!map.isTileMap) && (type === 'ZoomIn' ? zoomFactor >= minZoom && zoomFactor <= maxZoom : zoomFactor >= minZoom)) {\n var translatePoint = map.previousPoint = map.translatePoint;\n var min = map.baseMapRectBounds['min'];\n var max = map.baseMapRectBounds['max'];\n var mapWidth = Math.abs(max['x'] - min['x']);\n var mapHeight = Math.abs(min['y'] - max['y']);\n var translatePointX = translatePoint.x - (((size.width / scale) - (size.width / zoomFactor)) / 2);\n var translatePointY = translatePoint.y - (((size.height / scale) - (size.height / zoomFactor)) / 2);\n var currentHeight = Math.abs(map.baseMapRectBounds['max']['y'] - map.baseMapRectBounds['min']['y']) * zoomFactor;\n translatePointX = (currentHeight < map.mapAreaRect.height) ? (size.x + ((-(min['x'])) + ((size.width / 2) - (mapWidth / 2))))\n : translatePointX;\n translatePointY = (currentHeight < map.mapAreaRect.height) ? (size.y + ((-(min['y'])) + ((size.height / 2) - (mapHeight / 2))))\n : translatePointY;\n map.translatePoint = new Point(translatePointX, translatePointY);\n map.scale = zoomFactor;\n }\n else if ((map.isTileMap) && (zoomFactor >= minZoom && zoomFactor <= maxZoom)) {\n var tileZoomFactor = zoomFactor;\n map.scale = Math.pow(2, tileZoomFactor - 1);\n map.tileZoomLevel = tileZoomFactor;\n var position = { x: map.availableSize.width / 2, y: map.availableSize.height / 2 };\n this.getTileTranslatePosition(prevLevel, tileZoomFactor, position);\n map.mapLayerPanel.generateTiles(tileZoomFactor, map.tileTranslatePoint);\n map.translatePoint.x = (map.tileTranslatePoint.x - (0.5 * map.scale)) / map.scale;\n map.translatePoint.y = (map.tileTranslatePoint.y - (0.5 * map.scale)) / map.scale;\n }\n this.applyTransform(true);\n };\n /* tslint:disable:max-func-body-length */\n Zoom.prototype.createZoomingToolbars = function () {\n var map = this.maps;\n this.toolBarGroup = map.renderer.createGroup({\n id: map.element.id + '_Zooming_KitCollection',\n opacity: 0.3,\n });\n var kitHeight = 16;\n var kitWidth = 16;\n var xSpacing = 15;\n var ySpacing = 15;\n var padding = 20;\n var orientation = map.zoomSettings.toolBarOrientation;\n var toolbarsCollection = map.zoomSettings.toolbars;\n var shadowElement = '';\n shadowElement += '';\n shadowElement += '';\n var toolBarLength = map.zoomSettings.toolbars.length;\n var toolWidth = (map.zoomSettings.toolBarOrientation === 'Horizontal') ? (toolBarLength * kitWidth) + (toolBarLength * padding) : (kitWidth * 2);\n var toolHeight = (map.zoomSettings.toolBarOrientation === 'Horizontal') ? (kitHeight * 2) : (toolBarLength * kitHeight) + (toolBarLength * padding);\n this.toolBarGroup.appendChild(map.renderer.drawRectangle(new RectOption(map.element.id + '_Zooming_Rect', 'transparent', { color: 'transparent', width: 1 }, 1, new Rect(0, 0, toolWidth, toolHeight), 0, 0)));\n var defElement = map.renderer.createDefs();\n defElement.innerHTML = shadowElement;\n this.toolBarGroup.appendChild(defElement);\n var outerElement = map.renderer.drawRectangle(new RectOption(map.element.id + '_Zooming_Rect', 'transparent', { color: 'transparent', width: 1 }, 0.1, new Rect(0, 0, toolWidth, toolHeight), 0, 0));\n outerElement.setAttribute('filter', 'url(#chart_shadow)');\n this.toolBarGroup.appendChild(outerElement);\n var performFunction;\n for (var i = 0; i < toolbarsCollection.length; i++) {\n var toolbar_1 = toolbarsCollection[i];\n var pathOptions = void 0;\n var polyOptions = void 0;\n this.currentToolbarEle = map.renderer.createGroup({\n id: map.element.id + '_Zooming_ToolBar_' + toolbar_1 + '_Group',\n transform: 'translate( ' + xSpacing + ' ' + ySpacing + ' ) '\n });\n this.currentToolbarEle.setAttribute('class', 'e-maps-toolbar');\n var fillColor = '';\n var direction = '';\n var polygonDirection = '';\n switch (toolbar_1.toLowerCase()) {\n case 'zoom':\n direction = 'M0.001,14.629L1.372,16l4.571-4.571v-0.685l0.228-0.274c1.051,0.868,2.423,1.417,3.885,1.417c3.291,0,';\n direction += '5.943-2.651,5.943-5.943S13.395,0,10.103,0S4.16,2.651,4.16,5.943c0,1.508,0.503,2.834,1.417,3.885l-0.274,0.228H4.571';\n direction = direction + 'L0.001,14.629L0.001,14.629z M5.943,5.943c0-2.285,1.828-4.114,4.114-4.114s4.114,1.828,4.114,';\n this.currentToolbarEle.appendChild(map.renderer.drawPath(new PathOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1, this.fillColor, 1, this.fillColor, 1, null, direction + '4.114s-1.828,4.114-4.114,4.114S5.943,8.229,5.943,5.943z')));\n this.zoomElements = this.currentToolbarEle;\n this.wireEvents(this.currentToolbarEle, this.performToolBarAction);\n break;\n case 'zoomin':\n direction = 'M 8, 0 L 8, 16 M 0, 8 L 16, 8';\n this.currentToolbarEle.appendChild(map.renderer.drawPath(new PathOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1 + '_Path', this.fillColor, 3, this.fillColor, 1, null, direction)));\n this.zoomInElements = this.currentToolbarEle;\n this.wireEvents(this.currentToolbarEle, this.performToolBarAction);\n break;\n case 'zoomout':\n direction = 'M 0, 8 L 16, 8';\n this.currentToolbarEle.appendChild(map.renderer.drawPath(new PathOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1, this.fillColor, 3, this.fillColor, 1, null, direction)));\n this.zoomOutElements = this.currentToolbarEle;\n this.wireEvents(this.currentToolbarEle, this.performToolBarAction);\n break;\n case 'pan':\n direction = 'M5,3h2.3L7.275,5.875h1.4L8.65,3H11L8,0L5,3z M3,11V8.7l2.875,0.025v-1.4L3,7.35V5L0,8L3,';\n direction += '11z M11,13H8.7l0.025-2.875h-1.4L7.35,13H5l3,3L11,13z M13,5v2.3l-2.875-0.025v1.4L13,8.65V11l3-3L13,5z';\n this.currentToolbarEle.appendChild(map.renderer.drawPath(new PathOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1, this.selectionColor, 1, this.selectionColor, 1, null, direction)));\n this.panColor = this.selectionColor;\n this.panElements = this.currentToolbarEle;\n this.wireEvents(this.currentToolbarEle, this.performToolBarAction);\n break;\n case 'reset':\n direction = 'M12.364,8h-2.182l2.909,3.25L16,8h-2.182c0-3.575-2.618-6.5-5.818-6.5c-1.128,0-2.218,0.366-3.091,';\n direction += '1.016l1.055,1.178C6.581,3.328,7.272,3.125,8,3.125C10.4,3.125,12.363,5.319,12.364,8L12.364,8z M11.091,';\n direction += '13.484l-1.055-1.178C9.419,12.672,8.728,12.875,8,12.875c-2.4,0-4.364-2.194-4.364-4.875h2.182L2.909,4.75L0,8h2.182c0,';\n this.currentToolbarEle.appendChild(map.renderer.drawPath(new PathOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1, this.fillColor, null, null, 1, null, direction + '3.575,2.618,6.5,5.818,6.5C9.128,14.5,10.219,14.134,11.091,13.484L11.091,13.484z')));\n this.wireEvents(this.currentToolbarEle, this.performToolBarAction);\n break;\n }\n this.currentToolbarEle.appendChild(map.renderer.drawCircle(new CircleOption(map.element.id + '_Zooming_ToolBar_' + toolbar_1 + '_Rect', 'transparent', { color: this.fillColor, width: 1 }, 1, 8, 8, 16, '')));\n xSpacing = (orientation === 'Horizontal') ? (xSpacing + (kitWidth + padding)) : xSpacing;\n ySpacing = (orientation === 'Horizontal') ? ySpacing : (ySpacing + (kitHeight + padding));\n this.toolBarGroup.appendChild(this.currentToolbarEle);\n }\n };\n Zoom.prototype.performToolBarAction = function (e) {\n var target = e.target;\n e.stopImmediatePropagation();\n var isTouch = e.pointerType === 'touch' || e.pointerType === '2' || (e.type.indexOf('touch') > -1);\n var toolbar = target.id.split('_')[3];\n if (isTouch) {\n this.handled = true;\n this.performZoomingByToolBar(toolbar);\n }\n else if ((e.type === 'mousedown' || e.type === 'pointerdown') && !this.handled) {\n this.handled = false;\n this.performZoomingByToolBar(toolbar);\n }\n else {\n this.handled = false;\n }\n };\n /**\n *\n * @private\n */\n Zoom.prototype.performZoomingByToolBar = function (type) {\n var map = this.maps;\n switch (type.toLowerCase()) {\n case 'zoom':\n this.panColor = this.fillColor;\n this.zoomColor = this.selectionColor;\n this.applySelection(this.zoomElements, this.selectionColor);\n this.applySelection(this.panElements, this.fillColor);\n break;\n case 'pan':\n this.panColor = this.selectionColor;\n this.zoomColor = this.fillColor;\n this.applySelection(this.zoomElements, this.fillColor);\n this.applySelection(this.panElements, this.selectionColor);\n break;\n case 'zoomin':\n this.toolBarZooming((map.isTileMap ? map.tileZoomLevel : map.scale) + 1, 'ZoomIn');\n break;\n case 'zoomout':\n this.toolBarZooming((map.isTileMap ? map.tileZoomLevel : map.scale) - 1, 'ZoomOut');\n break;\n case 'reset':\n this.toolBarZooming(1, 'ZoomOut');\n this.applySelection(this.zoomElements, this.fillColor);\n this.applySelection(this.panElements, this.selectionColor);\n }\n this.panningStyle(type.toLowerCase());\n };\n Zoom.prototype.panningStyle = function (toolbar) {\n var svg = getElementByID(this.maps.element.id + '_svg');\n if (toolbar === 'pan' || this.isPanning) {\n svg.setAttribute('class', 'e-maps-panning');\n }\n else {\n svg.setAttribute('class', '');\n }\n };\n Zoom.prototype.applySelection = function (elements, color) {\n if (!elements) {\n return;\n }\n var childElement;\n for (var i = 0; i < elements.childElementCount; i++) {\n childElement = elements.childNodes[i];\n if (childElement.tagName !== 'circle') {\n childElement.setAttribute('fill', color);\n childElement.setAttribute('stroke', color);\n }\n }\n };\n Zoom.prototype.showTooltip = function (e) {\n var text = e.target.id.split('_')[3];\n if (!this.isTouch) {\n createTooltip('EJ2_Map_Toolbar_Tip', this.maps.getLocalizedLabel(text), (e.pageY + 10), (e.pageX + 10), '10px');\n }\n };\n Zoom.prototype.removeTooltip = function () {\n if (getElementByID('EJ2_Map_Toolbar_Tip')) {\n remove(getElementByID('EJ2_Map_Toolbar_Tip'));\n }\n };\n Zoom.prototype.alignToolBar = function () {\n var map = this.maps;\n var padding = 10;\n var element = createElement('div', { id: map.element.id + '_ToolBar', styles: 'position:absolute;z-index:2' });\n var rectSVGObject = map.renderer.createSvg({\n id: map.element.id + '_Zooming_ToolBar', width: 10, height: 10,\n });\n rectSVGObject.appendChild(this.toolBarGroup);\n element.appendChild(rectSVGObject);\n if (getElementByID(map.element.id + '_Secondary_Element')) {\n getElementByID(map.element.id + '_Secondary_Element').appendChild(element);\n }\n var toolBarSize = this.toolBarGroup.getBoundingClientRect();\n rectSVGObject.setAttribute('height', (toolBarSize.height + padding / 2).toString());\n rectSVGObject.setAttribute('width', (toolBarSize.width + padding / 2).toString());\n var size = map.mapAreaRect;\n var x = 0;\n var y = 0;\n switch (map.zoomSettings.verticalAlignment) {\n case 'Near':\n y = size.y;\n break;\n case 'Center':\n y = (size.height / 2) - (toolBarSize.height / 2);\n break;\n case 'Far':\n y = (size.height - toolBarSize.height) - padding;\n break;\n }\n switch (map.zoomSettings.horizontalAlignment) {\n case 'Near':\n x = size.x;\n break;\n case 'Center':\n x = (size.width / 2) - (toolBarSize.width / 2);\n break;\n case 'Far':\n x = (size.width - toolBarSize.width) - padding;\n break;\n }\n element.style.left = x + 'px';\n element.style.top = y + 'px';\n var color = this.maps.zoomSettings.highlightColor;\n var css = ' .e-maps-toolbar:hover > circle { stroke:' + color + '; } .e-maps-toolbar:hover > path { fill: ' + color + ' ; stroke: ' + color + '; }';\n var style = document.createElement('style');\n style.appendChild(document.createTextNode(css));\n element.appendChild(style);\n };\n /**\n * To bind events.\n * @return {void}\n * @private\n */\n Zoom.prototype.wireEvents = function (element, process) {\n EventHandler.add(element, Browser.touchStartEvent, process, this);\n EventHandler.add(element, 'mouseover', this.showTooltip, this);\n EventHandler.add(element, 'mouseout', this.removeTooltip, this);\n };\n Zoom.prototype.mapMouseWheel = function (e) {\n if (this.maps.zoomSettings.enable && this.maps.zoomSettings.mouseWheelZoom) {\n var position = this.getMousePosition(e.pageX, e.pageY);\n var map = this.maps;\n var size = map.availableSize;\n var prevLevel = map.tileZoomLevel;\n var prevScale = map.scale;\n var delta = 1;\n var value = (map.isTileMap) ? prevLevel : prevScale;\n if (((position.x > map.mapAreaRect.x) && (position.x < (map.mapAreaRect.x + map.mapAreaRect.width))) &&\n (position.y > map.mapAreaRect.y) && position.y < (map.mapAreaRect.y + map.mapAreaRect.height)) {\n e.preventDefault();\n var direction = (this.browserName === 'mozilla' && !this.isPointer) ?\n -(e.detail) / 3 > 0 ? 'ZoomIn' : 'ZoomOut' : (e.wheelDelta / 120) > 0 ? 'ZoomIn' : 'ZoomOut';\n if (direction === 'ZoomIn') {\n this.performZooming(position, (value + delta), direction);\n }\n else {\n this.performZooming(position, (value - delta), direction);\n }\n }\n }\n };\n Zoom.prototype.doubleClick = function (e) {\n var pageX = e.pageX;\n var pageY = e.pageY;\n var target = e.target;\n if (this.maps.zoomSettings.enable && this.maps.zoomSettings.doubleClickZoom) {\n var position = this.getMousePosition(pageX, pageY);\n var map = this.maps;\n var size = map.availableSize;\n var prevLevel = map.tileZoomLevel;\n var prevScale = map.scale;\n var value = (map.isTileMap) ? prevLevel : prevScale;\n if (((position.x > map.mapAreaRect.x) && (position.x < (map.mapAreaRect.x + map.mapAreaRect.width))) &&\n (position.y > map.mapAreaRect.y) && position.y < (map.mapAreaRect.y + map.mapAreaRect.height)) {\n this.performZooming(position, (value + 1), 'ZoomIn');\n }\n }\n };\n Zoom.prototype.mouseDownHandler = function (e) {\n var pageX;\n var pageY;\n var target;\n var touches = null;\n var element = e.target;\n if (e.type === 'touchstart') {\n this.isTouch = true;\n touches = e.touches;\n target = e.target;\n pageX = touches[0].clientX;\n pageY = touches[0].clientY;\n }\n else {\n pageX = e.pageX;\n pageY = e.pageY;\n target = e.target;\n }\n this.isPanning = this.panColor === this.selectionColor ? true : this.zoomColor !== this.selectionColor;\n this.rectZoomingStart = ((!this.isPanning) && this.maps.zoomSettings.enable);\n this.mouseDownPoints = this.getMousePosition(pageX, pageY);\n if (this.isTouch) {\n this.firstMove = true;\n this.pinchFactor = this.maps.scale;\n this.fingers = touches.length;\n }\n };\n Zoom.prototype.mouseMoveHandler = function (e) {\n var pageX;\n var pageY;\n var map = this.maps;\n var touchArg;\n var target;\n var touches = null;\n var zoom = this.maps.zoomSettings;\n if (e.type === 'touchmove') {\n this.isTouch = true;\n target = e.target;\n touches = e.touches;\n pageX = touches[0].clientX;\n pageY = touches[0].clientY;\n }\n else {\n pageX = e.pageX;\n pageY = e.pageY;\n target = e.target;\n }\n if (getElementByID(map.element.id + '_Zooming_KitCollection')) {\n if (target.id.indexOf('_Zooming_') > -1) {\n getElementByID(map.element.id + '_Zooming_KitCollection').setAttribute('opacity', '1');\n }\n else {\n getElementByID(map.element.id + '_Zooming_KitCollection').setAttribute('opacity', '0.3');\n }\n }\n if (this.isTouch) {\n if (this.maps.zoomSettings.pinchZooming) {\n if (this.firstMove && touches.length === 2) {\n this.rectZoomingStart = false;\n this.updateInteraction();\n this.touchStartList = targetTouches(e);\n }\n else if (this.touchStartList.length === 2 && touches.length === 2) {\n this.touchMoveList = targetTouches(e);\n e.preventDefault();\n this.rectZoomingStart = false;\n this.performPinchZooming(e);\n }\n this.firstMove = false;\n }\n }\n this.mouseMovePoints = this.getMousePosition(pageX, pageY);\n var targetId = e.target['id'];\n var targetEle = e.target;\n if (zoom.enable && this.isPanning) {\n e.preventDefault();\n this.maps.element.style.cursor = 'pointer';\n this.panning();\n }\n if (this.isTouch ? (touches.length === 1 && this.rectZoomingStart) : this.rectZoomingStart) {\n e.preventDefault();\n this.drawZoomRectangle();\n }\n };\n Zoom.prototype.mouseUpHandler = function (e) {\n var map = this.maps;\n this.rectZoomingStart = false;\n this.isPanning = false;\n this.isTouch = false;\n this.touchStartList = [];\n this.touchMoveList = [];\n this.lastScale = 1;\n this.maps.element.style.cursor = 'auto';\n var zoomRectElement = getElementByID(this.maps.element.id + '_Selection_Rect_Zooming');\n if (zoomRectElement && this.maps.zoomSettings.enable) {\n remove(zoomRectElement);\n this.performRectZooming();\n }\n };\n Zoom.prototype.mouseCancelHandler = function (e) {\n this.isPanning = false;\n this.isTouch = false;\n this.rectZoomingStart = false;\n var zoomRectElement = getElementByID(this.maps.element.id + '_Selection_Rect_Zooming');\n if (zoomRectElement && this.maps.zoomSettings.enable) {\n remove(zoomRectElement);\n this.performRectZooming();\n }\n };\n Zoom.prototype.click = function (e) {\n var map = this.maps;\n if (map.zoomSettings.zoomOnClick && e.target.id.indexOf('_ShapeIndex_') > -1 && !map.zoomSettings.doubleClickZoom\n && (this.zoomColor === this.selectionColor && this.zoomElements)) {\n var bounds = e.target.getBBox();\n var boundwidth = bounds.width;\n var boundHeight = bounds.height;\n var layerScale = void 0;\n var baseScale = 1;\n var availWidth = map.availableSize.width;\n var availHeight = map.availableSize.height;\n layerScale = ((availWidth - 100) / (availHeight - 100) > boundwidth / boundHeight) ? (availHeight - 100) / boundHeight :\n (availWidth - 100) / boundwidth;\n var zoomFactor = (layerScale - baseScale + 1);\n var leftPos = ((availWidth / 2) - ((boundwidth * map.scale) / 2)) / layerScale;\n var topPos = ((availHeight / 2) - ((boundHeight * map.scale) / 2)) / layerScale;\n var translatePointX = (-bounds.x) + leftPos;\n var translatePointY = (-bounds.y) + topPos;\n map.previousScale = map.scale;\n map.previousPoint = map.translatePoint;\n map.scale = layerScale;\n map.translatePoint = { x: translatePointX, y: translatePointY };\n this.applyTransform(true);\n }\n };\n Zoom.prototype.getMousePosition = function (pageX, pageY) {\n var map = this.maps;\n var elementRect = map.element.getBoundingClientRect();\n var pageXOffset = map.element.ownerDocument.defaultView.pageXOffset;\n var pageYOffset = map.element.ownerDocument.defaultView.pageYOffset;\n var clientTop = map.element.ownerDocument.documentElement.clientTop;\n var clientLeft = map.element.ownerDocument.documentElement.clientLeft;\n var positionX = elementRect.left + pageXOffset - clientLeft;\n var positionY = elementRect.top + pageYOffset - clientTop;\n return new Point((pageX - positionX), (pageY - positionY));\n };\n Zoom.prototype.addEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n EventHandler.add(this.maps.element, this.wheelEvent, this.mapMouseWheel, this);\n EventHandler.add(this.maps.element, 'click', this.click, this);\n EventHandler.add(this.maps.element, 'dblclick', this.doubleClick, this);\n this.maps.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.maps.on(Browser.touchStartEvent, this.mouseDownHandler, this);\n this.maps.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n EventHandler.add(this.maps.element, this.cancelEvent, this.mouseCancelHandler, this);\n };\n Zoom.prototype.removeEventListener = function () {\n if (this.maps.isDestroyed) {\n return;\n }\n EventHandler.remove(this.maps.element, this.wheelEvent, this.mapMouseWheel);\n EventHandler.remove(this.maps.element, 'click', this.click);\n EventHandler.remove(this.maps.element, 'dblclick', this.doubleClick);\n this.maps.off(Browser.touchMoveEvent, this.mouseMoveHandler);\n this.maps.off(Browser.touchStartEvent, this.mouseDownHandler);\n this.maps.off(Browser.touchEndEvent, this.mouseUpHandler);\n this.maps.off(this.cancelEvent, this.mouseCancelHandler);\n };\n /**\n * Get module name.\n */\n Zoom.prototype.getModuleName = function () {\n return 'Zoom';\n };\n /**\n * To destroy the zoom.\n * @return {void}\n * @private\n */\n Zoom.prototype.destroy = function (maps) {\n this.removeEventListener();\n /**\n * Destroy method performed here\n */\n };\n return Zoom;\n}());\nexport { Zoom };\n","import * as index from '@syncfusion/ej2-maps';\nindex.Maps.Inject( index.Bubble,index.Legend,index.Marker,index.Highlight,index.Selection,index.MapsTooltip,index.Zoom,index.DataLabel,index.NavigationLine,index.Annotations);\nexport * from '@syncfusion/ej2-maps';\n","/**\n * Constants\n */\n/** @hidden */\nexport var cellClick = 'cellClick';\n/** @hidden */\nexport var cellDoubleClick = 'cellDoubleClick';\n/** @hidden */\nexport var actionBegin = 'actionBegin';\n/** @hidden */\nexport var actionComplete = 'actionComplete';\n/** @hidden */\nexport var actionFailure = 'actionFailure';\n/** @hidden */\nexport var navigating = 'navigating';\n/** @hidden */\nexport var renderCell = 'renderCell';\n/** @hidden */\nexport var eventClick = 'eventClick';\n/** @hidden */\nexport var eventRendered = 'eventRendered';\n/** @hidden */\nexport var dataBinding = 'dataBinding';\n/** @hidden */\nexport var dataBound = 'dataBound';\n/** @hidden */\nexport var popupOpen = 'popupOpen';\n/**\n * Specifies schedule internal events\n */\n/** @hidden */\nexport var initialLoad = 'initial-load';\n/** @hidden */\nexport var initialEnd = 'initial-end';\n/** @hidden */\nexport var dataReady = 'data-ready';\n/** @hidden */\nexport var contentReady = 'content-ready';\n/** @hidden */\nexport var scroll = 'scroll';\n/** @hidden */\nexport var scrollUiUpdate = 'scroll-ui-update';\n/** @hidden */\nexport var uiUpdate = 'ui-update';\n/** @hidden */\nexport var documentClick = 'document-click';\n/** @hidden */\nexport var cellMouseDown = 'cell-mouse-down';\n","/**\n * CSS Constants\n */\n/** @hidden */\nexport var ROOT = 'e-schedule';\n/** @hidden */\nexport var RTL = 'e-rtl';\n/** @hidden */\nexport var DEVICE = 'e-device';\n/** @hidden */\nexport var ICON = 'e-icons';\n/** @hidden */\nexport var ENABLE_CLASS = 'e-enable';\n/** @hidden */\nexport var DISABLE_CLASS = 'e-disable';\n/** @hidden */\nexport var TABLE_CONTAINER_CLASS = 'e-table-container';\n/** @hidden */\nexport var SCHEDULE_TABLE_CLASS = 'e-schedule-table';\n/** @hidden */\nexport var ALLDAY_CELLS_CLASS = 'e-all-day-cells';\n/** @hidden */\nexport var HEADER_POPUP_CLASS = 'e-header-popup';\n/** @hidden */\nexport var HEADER_CALENDAR_CLASS = 'e-header-calendar';\n/** @hidden */\nexport var ALLDAY_ROW_CLASS = 'e-all-day-row';\n/** @hidden */\nexport var CONTENT_TABLE_CLASS = 'e-content-table';\n/** @hidden */\nexport var WORK_CELLS_CLASS = 'e-work-cells';\n/** @hidden */\nexport var WORK_HOURS_CLASS = 'e-work-hours';\n/** @hidden */\nexport var POPUP_OPEN = 'e-popup-open';\n/** @hidden */\nexport var DATE_HEADER_WRAP_CLASS = 'e-date-header-wrap';\n/** @hidden */\nexport var DATE_HEADER_CONTAINER_CLASS = 'e-date-header-container';\n/** @hidden */\nexport var HEADER_CELLS_CLASS = 'e-header-cells';\n/** @hidden */\nexport var WORKDAY_CLASS = 'e-work-days';\n/** @hidden */\nexport var OTHERMONTH_CLASS = 'e-other-month';\n/** @hidden */\nexport var CURRENT_DAY_CLASS = 'e-current-day';\n/** @hidden */\nexport var CURRENTDATE_CLASS = 'e-current-date';\n/** @hidden */\nexport var EXPANDED_CELL_CLASS = 'e-expanded';\n/** @hidden */\nexport var APPOINTMENT_ROW_CLASS = 'e-appointment-detail-row';\n/** @hidden */\nexport var APPOINTMENT_CELL_CLASS = 'e-appointment-detail-td';\n/** @hidden */\nexport var CURRENT_PANEL_CLASS = 'e-current-panel';\n/** @hidden */\nexport var PREVIOUS_PANEL_CLASS = 'e-previous-panel';\n/** @hidden */\nexport var NEXT_PANEL_CLASS = 'e-next-panel';\n/** @hidden */\nexport var TRANSLATE_CLASS = 'e-translate';\n/** @hidden */\nexport var LEFT_INDENT_CLASS = 'e-left-indent';\n/** @hidden */\nexport var LEFT_INDENT_WRAP_CLASS = 'e-left-indent-wrap';\n/** @hidden */\nexport var TIME_CELLS_WRAP_CLASS = 'e-time-cells-wrap';\n/** @hidden */\nexport var TIME_CELLS_CLASS = 'e-time-cells';\n/** @hidden */\nexport var ALTERNATE_CELLS_CLASS = 'e-alternate-cells';\n/** @hidden */\nexport var CURRENT_TIME_CLASS = 'e-current-time';\n/** @hidden */\nexport var CURRENT_TIMELINE_CLASS = 'e-current-timeline';\n/** @hidden */\nexport var PREVIOUS_TIMELINE_CLASS = 'e-previous-timeline';\n/** @hidden */\nexport var HIDE_CHILDS_CLASS = 'e-hide-childs';\n/** @hidden */\nexport var SCROLL_CONTAINER_CLASS = 'e-scroll-container';\n/** @hidden */\nexport var WRAPPER_CLASS = 'e-wrapper';\n/** @hidden */\nexport var TIMELINE_WRAPPER_CLASS = 'e-timeline-wrapper';\n/** @hidden */\nexport var APPOINTMENT_WRAPPER_CLASS = 'e-appointment-wrapper';\n/** @hidden */\nexport var DAY_WRAPPER_CLASS = 'e-day-wrapper';\n/** @hidden */\nexport var TOOLBAR_CONTAINER = 'e-schedule-toolbar-container';\n/** @hidden */\nexport var HEADER_TOOLBAR = 'e-schedule-toolbar';\n/** @hidden */\nexport var SELECTED_CELL_CLASS = 'e-selected-cell';\n/** @hidden */\nexport var APPOINTMENT_WRAP_CLASS = 'e-appointment-wrap';\n/** @hidden */\nexport var APPOINTMENT_CONTAINER_CLASS = 'e-appointment-container';\n/** @hidden */\nexport var APPOINTMENT_CLASS = 'e-appointment';\n/** @hidden */\nexport var APPOINTMENT_BORDER = 'e-appointment-border';\n/** @hidden */\nexport var APPOINTMENT_DETAILS = 'e-appointment-details';\n/** @hidden */\nexport var APPOINTMENT_SUBJECT_WRAP = 'e-subject-wrap';\n/** @hidden */\nexport var APPOINTMENT_SUBJECT = 'e-subject';\n/** @hidden */\nexport var APPOINTMENT_TIME = 'e-time';\n/** @hidden */\nexport var APPOINTMENT_LOCATION = 'e-location';\n/** @hidden */\nexport var TABLE_WRAP_CLASS = 'e-table-wrap';\n/** @hidden */\nexport var OUTER_TABLE_CLASS = 'e-outer-table';\n/** @hidden */\nexport var CONTENT_WRAP_CLASS = 'e-content-wrap';\n/** @hidden */\nexport var AGENDA_CELLS_CLASS = 'e-agenda-cells';\n/** @hidden */\nexport var AGENDA_CURRENT_DAY_CLASS = 'e-current-day';\n/** @hidden */\nexport var AGENDA_HEADER_CLASS = 'e-day-date-header';\n/** @hidden */\nexport var NAVIGATE_CLASS = 'e-navigate';\n/** @hidden */\nexport var DATE_HEADER_CLASS = 'e-date-header';\n/** @hidden */\nexport var DAY_HEADER_CLASS = 'e-day-header';\n/** @hidden */\nexport var AGENDA_HIDDEN_CLASS = 'e-item-hide';\n/** @hidden */\nexport var AGENDA_ALIGN_CLASS = 'e-item-align';\n/** @hidden */\nexport var AGENDA_DAY_BORDER_CLASS = 'e-day-border';\n/** @hidden */\nexport var AGENDA_DATETIME_CLASS = 'e-date-time';\n/** @hidden */\nexport var AGENDA_EMPTY_EVENT_CLASS = 'e-empty-event';\n/** @hidden */\nexport var AGENDA_NO_EVENT_CLASS = 'e-no-event';\n/** @hidden */\nexport var APPOINTMENT_INDICATOR_CLASS = 'e-appointment-indicator';\n/** @hidden */\nexport var EVENT_INDICATOR_CLASS = 'e-indicator';\n/** @hidden */\nexport var EVENT_ICON_UP_CLASS = 'e-up-icon';\n/** @hidden */\nexport var EVENT_ICON_DOWN_CLASS = 'e-down-icon';\n/** @hidden */\nexport var EVENT_ICON_LEFT_CLASS = 'e-left-icon';\n/** @hidden */\nexport var EVENT_ICON_RIGHT_CLASS = 'e-right-icon';\n/** @hidden */\nexport var EVENT_RECURRENCE_ICON_CLASS = 'e-recurrence-icon';\n/** @hidden */\nexport var EVENT_RECURRENCE_EDIT_ICON_CLASS = 'e-recurrence-edit-icon';\n/** @hidden */\nexport var HEADER_ROW_CLASS = 'e-header-row';\n/** @hidden */\nexport var ALLDAY_APPOINTMENT_WRAPPER_CLASS = 'e-all-day-appointment-wrapper';\n/** @hidden */\nexport var ALLDAY_APPOINTMENT_CLASS = 'e-all-day-appointment';\n/** @hidden */\nexport var ALLDAY_WRAPPER_CLASS = 'e-all-day-wrapper';\n/** @hidden */\nexport var EVENT_COUNT_CLASS = 'e-appointment-hide';\n/** @hidden */\nexport var ROW_COUNT_WRAPPER_CLASS = 'e-row-count-wrapper';\n/** @hidden */\nexport var ALLDAY_APPOINTMENT_SECTION_CLASS = 'e-all-day-appointment-section';\n/** @hidden */\nexport var APPOINTMENT_ROW_EXPAND_CLASS = 'e-appointment-expand';\n/** @hidden */\nexport var APPOINTMENT_ROW_COLLAPSE_CLASS = 'e-appointment-collapse';\n/** @hidden */\nexport var MORE_INDICATOR_CLASS = 'e-more-indicator';\n/** @hidden */\nexport var APPOINTMENT_SELECTION_CLASS = 'e-appointment-selection';\n/** @hidden */\nexport var APPOINTMENT_CELL_SELECT_CLASS = 'e-appointment-cell-select';\n/** @hidden */\nexport var SCHEDULE_INNER_CLASS = 'e-schedule-inner';\n/** @hidden */\nexport var QUICK_POPUP_ROOT_CLASS = 'e-schedule-quick-popup';\n/** @hidden */\nexport var QUICK_POPUP_CLASS = 'e-quick-popup';\n/** @hidden */\nexport var QUICK_POPUP_SUBJECT_CLASS = 'e-quick-subject';\n/** @hidden */\nexport var QUICK_POPUP_TABLE_CLASS = 'e-quick-popup-table';\n/** @hidden */\nexport var QUICK_POPUP_ICON_CLASS = 'e-quick-popup-icon-container';\n/** @hidden */\nexport var QUICK_POPUP_CLOSE_ICON_CLASS = 'e-close-icon-container';\n/** @hidden */\nexport var QUICK_POPUP_EDIT_ICON_CLASS = 'e-edit-icon-container';\n/** @hidden */\nexport var QUICK_POPUP_CONTENT_CLASS = 'e-quick-content';\n/** @hidden */\nexport var QUICK_POPUP_RIGHT_FIELDS_CLASS = 'e-right-fields';\n/** @hidden */\nexport var QUICK_POPUP_DATE_TIME_DETAILS_CLASS = 'e-quick-date-time-details';\n/** @hidden */\nexport var DEVICE_DATE_TIME_DETAILS_CLASS = 'e-device-date-time-details';\n/** @hidden */\nexport var DEVICE_RECURRENCE_SUMMARY_CLASS = 'e-device-recurrence-summary';\n/** @hidden */\nexport var QUICK_POPUP_LOCATION_DETAILS_CLASS = 'e-quick-location-details';\n/** @hidden */\nexport var QUICK_POPUP_FOOTER_CLASS = 'e-quick-footer';\n/** @hidden */\nexport var QUICK_POPUP_EVENT_DETAILS_CLASS = 'e-event-details';\n/** @hidden */\nexport var QUICK_POPUP_EVENT_TITLE_CLASS = 'e-event-title';\n/** @hidden */\nexport var QUICK_POPUP_EVENT_CREATE_CLASS = 'e-event-create';\n/** @hidden */\nexport var QUICK_POPUP_EDIT_EVENT_CLASS = 'e-event-edit';\n/** @hidden */\nexport var TOOLTIP_CLOSE_CLASS = 'e-tooltip-close';\n/** @hidden */\nexport var QUICK_POPUP_DELETE_EVENT_CLASS = 'e-event-delete';\n/** @hidden */\nexport var QUICK_POPUP_TEXT_ALIGN_CLASS = 'e-text-ellipsis';\n/** @hidden */\nexport var MORE_POPUP_WRAPPER_CLASS = 'e-more-event-popup-wrapper';\n/** @hidden */\nexport var SELECT_POPUP_WRAPPER_CLASS = 'e-select-event-popup-wrapper';\n/** @hidden */\nexport var MORE_EVENT_POPUP_CLASS = 'e-more-event-popup';\n/** @hidden */\nexport var MORE_EVENT_HEADER_CLASS = 'e-more-event-header';\n/** @hidden */\nexport var MORE_EVENT_DATE_HEADER_CLASS = 'e-more-event-date-header';\n/** @hidden */\nexport var MORE_EVENT_HEADER_DAY_CLASS = 'e-header-day';\n/** @hidden */\nexport var MORE_EVENT_HEADER_DATE_CLASS = 'e-header-date';\n/** @hidden */\nexport var MORE_EVENT_CLOSE_CLASS = 'e-more-event-close';\n/** @hidden */\nexport var MORE_EVENT_CLOSE_ICON_CLASS = 'e-close-icon';\n/** @hidden */\nexport var MORE_EVENT_CONTENT_CLASS = 'e-more-event-content';\n/** @hidden */\nexport var MORE_EVENT_WRAPPER_CLASS = 'e-more-appointment-wrapper';\n/** @hidden */\nexport var QUICK_DIALOG_CLASS = 'e-quick-dialog';\n/** @hidden */\nexport var DIALOG_FOOTER_CONTENT_CLASS = 'e-footer-content';\n/** @hidden */\nexport var QUICK_DIALOG_EDIT_EVENT_CLASS = 'e-quick-dialog-edit-event';\n/** @hidden */\nexport var QUICK_DIALOG_EDIT_SERIES_CLASS = 'e-quick-dialog-edit-series';\n/** @hidden */\nexport var QUICK_DIALOG_DELETE_CLASS = 'e-quick-dialog-delete';\n/** @hidden */\nexport var QUICK_DIALOG_CANCEL_CLASS = 'e-quick-dialog-cancel';\n/** @hidden */\nexport var QUICK_DIALOG_ALERT_BTN_CLASS = 'e-quick-dialog-alert-btn';\n/** @hidden */\nexport var QUICK_DIALOG_HIDE_BTN_CLASS = 'e-quick-dialog-hide-btn';\n/** @hidden */\nexport var EVENT_WINDOW_DIALOG_CLASS = 'e-schedule-dialog';\n/** @hidden */\nexport var EVENT_WINDOW_DEVICE_CLASS = 'e-device';\n/** @hidden */\nexport var EVENT_WINDOW_FORM_DIV_CLASS = 'e-schedule-form-container';\n/** @hidden */\nexport var EVENT_WINDOW_FORM_CLASS = 'e-schedule-form';\n/** @hidden */\nexport var EVENT_WINDOW_ALLDAY_TZ_DIV_CLASS = 'e-all-day-time-zone-row';\n/** @hidden */\nexport var EVENT_WINDOW_ALL_DAY_CLASS = 'e-all-day';\n/** @hidden */\nexport var EVENT_WINDOW_TZ_CLASS = 'e-time-zone';\n/** @hidden */\nexport var EVENT_WINDOW_REPEAT_DIV_CLASS = 'e-repeat-parent-row';\n/** @hidden */\nexport var EVENT_WINDOW_REPEAT_CLASS = 'e-repeat';\n/** @hidden */\nexport var EVENT_WINDOW_TITLE_LOCATION_DIV_CLASS = 'e-title-location-row';\n/** @hidden */\nexport var EVENT_WINDOW_TITLE_CLASS = 'e-subject';\n/** @hidden */\nexport var EVENT_WINDOW_LOCATION_CLASS = 'e-location';\n/** @hidden */\nexport var EVENT_WINDOW_START_END_DIV_CLASS = 'e-start-end-row';\n/** @hidden */\nexport var EVENT_WINDOW_START_CLASS = 'e-start';\n/** @hidden */\nexport var EVENT_WINDOW_END_CLASS = 'e-end';\n/** @hidden */\nexport var EVENT_WINDOW_DESCRIPTION_CLASS = 'e-description';\n/** @hidden */\nexport var EVENT_WINDOW_TIME_ZONE_DIV_CLASS = 'e-time-zone-row';\n/** @hidden */\nexport var EVENT_WINDOW_START_TZ_CLASS = 'e-start-time-zone';\n/** @hidden */\nexport var EVENT_WINDOW_END_TZ_CLASS = 'e-end-time-zone';\n/** @hidden */\nexport var EVENT_WINDOW_BACK_ICON_CLASS = 'e-back-icon';\n/** @hidden */\nexport var EVENT_WINDOW_SAVE_ICON_CLASS = 'e-save-icon';\n/** @hidden */\nexport var EVENT_WINDOW_DELETE_BUTTON_CLASS = 'e-event-delete';\n/** @hidden */\nexport var EVENT_WINDOW_CANCEL_BUTTON_CLASS = 'e-event-cancel';\n/** @hidden */\nexport var EVENT_WINDOW_SAVE_BUTTON_CLASS = 'e-event-save';\n/** @hidden */\nexport var EVENT_WINDOW_DIALOG_PARENT_CLASS = 'e-dialog-parent';\n/** @hidden */\nexport var EVENT_WINDOW_TITLE_TEXT_CLASS = 'e-title-text';\n/** @hidden */\nexport var EVENT_WINDOW_ICON_DISABLE_CLASS = 'e-icon-disable';\n/** @hidden */\nexport var SELECTED_EVENT_EDIT_CLASS = 'e-edit-icon';\n/** @hidden */\nexport var SELECTED_EVENT_DELETE_CLASS = 'e-delete-icon';\n/** @hidden */\nexport var SELECTED_DATE_TIME_CLASS = 'e-date-time-icon';\n/** @hidden */\nexport var SELECTED_CALENDER_CLASS = 'e-calendar-icon';\n/** @hidden */\nexport var SELECTED_EVENT_TITLE_CLASS = 'e-dialog-title';\n/** @hidden */\nexport var SELECTED_EVENT_CONTAINER_CLASS = 'e-event-container';\n/** @hidden */\nexport var SELECTED_EVENT_CLOSE_CLASS = 'e-event-close';\n/** @hidden */\nexport var EVENT_TIME_ZONE_CLASS = 'e-event-zone-icon';\n/** @hidden */\nexport var EVENT_ZONE_DETAILS_CLASS = 'e-event-zone-details';\n/** @hidden */\nexport var EVENT_DETAILS_CLASS = 'e-event-details';\n/** @hidden */\nexport var EVENT_NOTE_CLASS = 'e-event-note-icon';\n/** @hidden */\nexport var EVENT_NOTE_DETAILS_CLASS = 'e-event-note-details';\n/** @hidden */\nexport var EVENT_DISABLE_CLASS = 'e-event-disable';\n/** @hidden */\nexport var EVENT_EDIT_DISABLE_CLASS = 'e-event-edit-disable';\n/** @hidden */\nexport var ERROR_VALIDATION_CLASS = 'e-schedule-error';\n/** @hidden */\nexport var EVENT_TOOLTIP_ROOT_CLASS = 'e-schedule-event-tooltip';\n/** @hidden */\nexport var ALLDAY_ROW_ANIMATE_CLASS = 'e-animate';\n","import { isNullOrUndefined, createElement, remove, closest, addClass, removeClass, extend } from '@syncfusion/ej2-base';\nimport { Toolbar } from '@syncfusion/ej2-navigations';\nimport { Calendar } from '@syncfusion/ej2-calendars';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\n/**\n * Header module\n */\nvar HeaderRenderer = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function HeaderRenderer(parent) {\n this.parent = parent;\n this.l10n = this.parent.localeObj;\n this.renderHeader();\n this.addEventListener();\n }\n HeaderRenderer.prototype.addEventListener = function () {\n this.parent.on(events.documentClick, this.closeHeaderPopup, this);\n };\n HeaderRenderer.prototype.removeEventListener = function () {\n this.parent.off(events.documentClick, this.closeHeaderPopup);\n };\n HeaderRenderer.prototype.closeHeaderPopup = function (e) {\n var closestEle = closest(e.event.target, '.e-date-range,.e-header-popup,.e-day,.e-selected');\n if (!isNullOrUndefined(closestEle)) {\n return;\n }\n this.hideHeaderPopup();\n };\n /** @hidden */\n HeaderRenderer.prototype.hideHeaderPopup = function () {\n if (this.headerPopup) {\n this.headerPopup.hide();\n }\n };\n HeaderRenderer.prototype.renderHeader = function () {\n this.element = createElement('div', { className: cls.TOOLBAR_CONTAINER });\n var toolbarEle = createElement('div', { className: cls.HEADER_TOOLBAR });\n this.element.appendChild(toolbarEle);\n this.parent.element.insertBefore(this.element, this.parent.element.firstElementChild);\n this.renderToolbar();\n };\n HeaderRenderer.prototype.renderToolbar = function () {\n var items = this.getItems();\n var args = extend({}, { requestType: 'toolbarItemRendering', items: items });\n this.parent.trigger(events.actionBegin, args);\n this.toolbarObj = new Toolbar({\n items: items,\n overflowMode: 'Popup',\n clicked: this.toolbarClickHandler.bind(this),\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale\n });\n this.toolbarObj.appendTo(this.parent.element.querySelector('.' + cls.HEADER_TOOLBAR));\n this.updateActiveView();\n this.parent.trigger(events.actionComplete, { requestType: 'toolBarItemRendered', items: items });\n };\n HeaderRenderer.prototype.updateItems = function () {\n if (this.toolbarObj) {\n var items = this.getItems();\n this.parent.trigger(events.actionBegin, { requestType: 'toolbarItemRendering', items: items });\n this.toolbarObj.items = items;\n this.toolbarObj.dataBind();\n this.parent.trigger(events.actionComplete, { requestType: 'toolBarItemRendered', items: items });\n }\n };\n HeaderRenderer.prototype.getPopUpRelativeElement = function () {\n if (this.parent.isAdaptive) {\n return this.toolbarObj.element;\n }\n return this.element.querySelector('.e-date-range');\n };\n HeaderRenderer.prototype.setDayOfWeek = function (index) {\n if (this.headerCalendar) {\n this.headerCalendar.firstDayOfWeek = index;\n this.headerCalendar.dataBind();\n }\n };\n HeaderRenderer.prototype.setCalendarDate = function (date) {\n if (this.headerCalendar) {\n this.headerCalendar.value = date;\n this.headerCalendar.dataBind();\n }\n };\n HeaderRenderer.prototype.getCalendarView = function () {\n if (this.parent.currentView === 'Month' || this.parent.currentView === 'MonthAgenda') {\n return 'Year';\n }\n return 'Month';\n };\n HeaderRenderer.prototype.setCalendarView = function () {\n if (this.headerCalendar) {\n var calendarView = this.getCalendarView();\n this.headerCalendar.depth = calendarView;\n this.headerCalendar.start = calendarView;\n this.headerCalendar.refresh();\n }\n };\n HeaderRenderer.prototype.setRtl = function (isRtl) {\n if (this.headerPopup) {\n this.headerPopup.enableRtl = isRtl;\n this.headerPopup.dataBind();\n }\n if (this.headerCalendar) {\n this.headerCalendar.enableRtl = isRtl;\n this.headerCalendar.dataBind();\n }\n this.toolbarObj.enableRtl = isRtl;\n this.toolbarObj.dataBind();\n };\n HeaderRenderer.prototype.updateActiveView = function () {\n var currentViewCls = '.e-' + this.parent.currentView.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n var selEle = this.toolbarObj.element.querySelectorAll('.e-active-view');\n removeClass(selEle, ['e-active-view']);\n addClass(this.toolbarObj.element.querySelectorAll(currentViewCls), ['e-active-view']);\n };\n HeaderRenderer.prototype.updateDateRange = function (text) {\n if (text === void 0) { text = this.getDateRangeText(); }\n var selEle = this.toolbarObj.element.querySelector('.e-date-range');\n selEle.setAttribute('aria-label', text);\n selEle.querySelector('.e-tbar-btn-text').innerHTML = text;\n };\n HeaderRenderer.prototype.getDateRangeText = function () {\n return this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM y' });\n };\n HeaderRenderer.prototype.getItems = function () {\n var items = [];\n var showInPopup = this.parent.isAdaptive;\n items.push({\n align: 'Left', prefixIcon: 'e-icon-prev', tooltipText: 'Previous', overflow: 'Show',\n cssClass: 'e-prev', htmlAttributes: { 'aria-label': 'previous period' }\n });\n items.push({\n align: 'Left', prefixIcon: 'e-icon-next', tooltipText: 'Next', overflow: 'Show',\n cssClass: 'e-next', htmlAttributes: { 'aria-label': 'next period' }\n });\n items.push({\n align: 'Left', text: this.getDateRangeText(), suffixIcon: 'e-icon-down-arrow', cssClass: 'e-date-range',\n overflow: 'Show', htmlAttributes: { 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'title' }\n });\n if (this.parent.isAdaptive) {\n items.push({\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-add', text: this.l10n.getConstant('newEvent'),\n cssClass: 'e-add', overflow: 'Show'\n });\n items.push({\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-today', text: this.l10n.getConstant('today'),\n cssClass: 'e-today', overflow: 'Show'\n });\n }\n else {\n items.push({\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-day', text: this.l10n.getConstant('today'),\n cssClass: 'e-today', overflow: 'Show'\n });\n if (this.parent.views.length > 1) {\n items.push({\n align: 'Right', type: 'Separator', cssClass: 'e-schedule-seperator'\n });\n }\n }\n if (this.parent.views.length > 1) {\n for (var _i = 0, _a = this.parent.views; _i < _a.length; _i++) {\n var item = _a[_i];\n typeof (item) === 'string' ? items.push(this.getItemObject(item.toLowerCase())) :\n items.push(this.getItemObject(item.option.toLowerCase()));\n }\n }\n return items;\n };\n HeaderRenderer.prototype.getItemObject = function (viewName) {\n var view;\n var showInPopup = this.parent.isAdaptive;\n switch (viewName) {\n case 'day':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-day', text: this.l10n.getConstant('day'),\n cssClass: 'e-day'\n };\n break;\n case 'week':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-week', text: this.l10n.getConstant('week'),\n cssClass: 'e-week'\n };\n break;\n case 'workweek':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-workweek', text: this.l10n.getConstant('workWeek'),\n cssClass: 'e-work-week'\n };\n break;\n case 'month':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-month', text: this.l10n.getConstant('month'),\n cssClass: 'e-month'\n };\n break;\n case 'agenda':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-agenda', text: this.l10n.getConstant('agenda'),\n cssClass: 'e-agenda'\n };\n break;\n // case 'weekagenda':\n // view = {\n // align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-week', text: this.l10n.getConstant('weekAgenda'),\n // cssClass: 'e-week-agenda'\n // };\n // break;\n // case 'workweekagenda':\n // view = {\n // align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-workweek',\n // text: this.l10n.getConstant('workWeekAgenda'), cssClass: 'e-work-week-agenda'\n // };\n // break;\n case 'monthagenda':\n view = {\n align: 'Right', showAlwaysInPopup: showInPopup, prefixIcon: 'e-icon-month-agenda',\n text: this.l10n.getConstant('monthAgenda'), cssClass: 'e-month-agenda'\n };\n break;\n }\n return view;\n };\n HeaderRenderer.prototype.renderHeaderPopup = function () {\n var headerPopupEle = createElement('div', { className: cls.HEADER_POPUP_CLASS });\n var headerCalendarEle = createElement('div', { className: cls.HEADER_CALENDAR_CLASS });\n headerPopupEle.appendChild(headerCalendarEle);\n this.element.appendChild(headerPopupEle);\n this.headerPopup = new Popup(headerPopupEle, {\n actionOnScroll: 'hide',\n targetType: 'relative',\n relateTo: this.getPopUpRelativeElement(),\n position: { X: 'left', Y: 'bottom' },\n enableRtl: this.parent.enableRtl\n });\n var calendarView = this.getCalendarView();\n this.headerCalendar = new Calendar({\n value: this.parent.selectedDate,\n firstDayOfWeek: this.parent.firstDayOfWeek,\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n depth: calendarView,\n start: calendarView,\n change: this.calendarChange.bind(this)\n });\n this.headerCalendar.appendTo(headerCalendarEle);\n this.headerPopup.hide();\n };\n HeaderRenderer.prototype.calendarChange = function (args) {\n if (args.value.getTime() !== this.parent.selectedDate.getTime()) {\n this.parent.changeDate(args.value);\n }\n this.headerPopup.hide();\n };\n HeaderRenderer.prototype.toolbarClickHandler = function (args) {\n if (!args.item) {\n return;\n }\n switch (args.item.cssClass) {\n case 'e-date-range':\n if (!this.headerPopup) {\n this.renderHeaderPopup();\n }\n if (this.headerPopup.element.classList.contains(cls.POPUP_OPEN)) {\n this.headerPopup.hide();\n }\n else {\n this.headerPopup.show();\n }\n break;\n case 'e-day':\n this.parent.changeView('Day', args.originalEvent);\n break;\n case 'e-week':\n this.parent.changeView('Week', args.originalEvent);\n break;\n case 'e-work-week':\n this.parent.changeView('WorkWeek', args.originalEvent);\n break;\n case 'e-month':\n this.parent.changeView('Month', args.originalEvent);\n break;\n case 'e-agenda':\n this.parent.changeView('Agenda', args.originalEvent);\n break;\n // case 'e-week-agenda':\n // this.parent.changeView('weekAgenda', args.originalEvent);\n // break;\n // case 'e-work-week-agenda':\n // this.parent.changeView('workWeekAgenda', args.originalEvent);\n // break;\n case 'e-month-agenda':\n this.parent.changeView('MonthAgenda', args.originalEvent);\n break;\n case 'e-today':\n if (!this.parent.isSelectedDate(util.resetTime(new Date()))) {\n this.parent.changeDate(util.resetTime(new Date()), args.originalEvent);\n }\n break;\n case 'e-prev':\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('previous'), args.originalEvent);\n break;\n case 'e-next':\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('next'), args.originalEvent);\n break;\n case 'e-add':\n var data = void 0;\n if (this.parent.activeCellsData) {\n data = this.parent.activeCellsData;\n }\n else {\n var today = new Date();\n var majorSlot = 60;\n var minorSlotCount = 2;\n var msMajorInterval = majorSlot * util.MS_PER_MINUTE;\n var msInterval = msMajorInterval / minorSlotCount;\n var startTime = new Date(this.parent.selectedDate.getTime());\n startTime.setHours(today.getHours(), (Math.round(startTime.getMinutes() / msInterval) * msInterval), 0);\n var endTime = new Date(new Date(startTime.getTime()).setMilliseconds(startTime.getMilliseconds() + msInterval));\n data = extend({ startTime: startTime, endTime: endTime, isAllDay: false }, { cancel: false, event: args.originalEvent });\n }\n this.parent.eventWindow.openEditor(data, 'Add');\n break;\n }\n var toolbarPopUp = this.toolbarObj.element.querySelector('.e-toolbar-pop');\n if (toolbarPopUp) {\n toolbarPopUp.ej2_instances[0].hide({ name: 'SlideUp', duration: 100 });\n }\n };\n HeaderRenderer.prototype.getHeaderElement = function () {\n return this.element;\n };\n /**\n * Get module name.\n */\n HeaderRenderer.prototype.getModuleName = function () {\n return 'headerbar';\n };\n /**\n * To destroy the headerbar.\n * @return {void}\n * @private\n */\n HeaderRenderer.prototype.destroy = function () {\n if (!this.toolbarObj.isDestroyed) {\n this.toolbarObj.destroy();\n this.removeEventListener();\n remove(this.element);\n }\n };\n return HeaderRenderer;\n}());\nexport { HeaderRenderer };\n","import { formatUnit } from '@syncfusion/ej2-base';\nimport { contentReady, uiUpdate, scrollUiUpdate } from '../base/constant';\n/**\n * `Scroll` module\n */\nvar Scroll = /** @class */ (function () {\n /**\n * Constructor for the scrolling.\n * @hidden\n */\n function Scroll(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * For internal use only - Get the module name.\n * @private\n */\n Scroll.prototype.getModuleName = function () {\n return 'scroll';\n };\n /**\n * @hidden\n */\n Scroll.prototype.setWidth = function () {\n this.parent.element.style.width = formatUnit(this.parent.width);\n };\n /**\n * @hidden\n */\n Scroll.prototype.setHeight = function () {\n this.parent.element.style.height = formatUnit(this.parent.height);\n };\n /**\n * @hidden\n */\n Scroll.prototype.addEventListener = function () {\n this.parent.on(contentReady, this.setDimensions, this);\n this.parent.on(uiUpdate, this.onPropertyChanged, this);\n };\n /**\n * @hidden\n */\n Scroll.prototype.removeEventListener = function () {\n this.parent.off(contentReady, this.setDimensions);\n this.parent.off(uiUpdate, this.onPropertyChanged);\n };\n Scroll.prototype.setDimensions = function () {\n this.setWidth();\n this.setHeight();\n var cssProps = this.getCssProperties(this.parent.enableRtl);\n var data = { cssProperties: cssProps, module: this.getModuleName() };\n this.parent.notify(scrollUiUpdate, data);\n };\n /**\n * @hidden\n */\n Scroll.prototype.getCssProperties = function (enableRtl) {\n var css = {};\n css.border = enableRtl ? 'borderLeftWidth' : 'borderRightWidth';\n css.padding = enableRtl ? 'paddingLeft' : 'paddingRight';\n return css;\n };\n Scroll.prototype.onPropertyChanged = function (e) {\n this.setDimensions();\n };\n /**\n * @hidden\n */\n Scroll.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Scroll;\n}());\nexport { Scroll };\n","import { addClass, removeClass, Touch, remove, EventHandler } from '@syncfusion/ej2-base';\nimport { closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * `touch` module is used to handle touch interactions.\n */\nvar ScheduleTouch = /** @class */ (function () {\n function ScheduleTouch(parent) {\n this.parent = parent;\n this.element = this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS);\n this.touchObj = new Touch(this.element, {\n scroll: this.scrollHandler.bind(this),\n swipe: this.swipeHandler.bind(this),\n tapHold: this.tapHoldHandler.bind(this),\n swipeSettings: { swipeThresholdDistance: 1 }\n });\n EventHandler.add(this.element, 'transitionend', this.onTransitionEnd, this);\n this.touchLeftDirection = this.parent.enableRtl ? 'Right' : 'Left';\n this.touchRightDirection = this.parent.enableRtl ? 'Left' : 'Right';\n }\n ScheduleTouch.prototype.scrollHandler = function (e) {\n if (this.parent.currentView === 'Agenda' ||\n (e.originalEvent && !isNullOrUndefined(closest(e.originalEvent.target, '.' + cls.APPOINTMENT_WRAP_CLASS)))) {\n return;\n }\n if (!this.timeStampStart) {\n this.timeStampStart = Date.now();\n }\n if (this.element.classList.contains(cls.TRANSLATE_CLASS)) {\n this.onTransitionEnd();\n }\n if (e.scrollDirection === 'Left' || e.scrollDirection === 'Right') {\n var args = { requestType: 'dateNavigate', cancel: false, event: e.originalEvent };\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n var scrollDiv = this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n if (scrollDiv && scrollDiv.scrollWidth > scrollDiv.clientWidth) {\n return;\n }\n else {\n this.isScrollTriggered = true;\n e.originalEvent.preventDefault();\n e.originalEvent.stopPropagation();\n }\n }\n if (e.scrollDirection === this.touchLeftDirection) {\n if (!this.nextPanel) {\n this.renderPanel(cls.NEXT_PANEL_CLASS, 'next');\n this.nextPanel = {\n element: this.parent.activeView.getPanel(),\n selectedDate: new Date(this.parent.selectedDate.getTime())\n };\n this.setDimensions(this.nextPanel.element);\n }\n var x = this.parent.enableRtl ? e.distanceX : -e.distanceX;\n this.element.style.transform = 'translatex(' + (this.getTranslateX(this.element) + x) + 'px)';\n }\n else if (e.scrollDirection === this.touchRightDirection) {\n var prevWidth = 0;\n if (!this.previousPanel) {\n this.renderPanel(cls.PREVIOUS_PANEL_CLASS, 'previous');\n this.previousPanel = {\n element: this.parent.activeView.getPanel(),\n selectedDate: new Date(this.parent.selectedDate.getTime())\n };\n this.setDimensions(this.previousPanel.element);\n prevWidth = this.previousPanel.element.offsetWidth;\n }\n var x = this.parent.enableRtl ? prevWidth - e.distanceX : -prevWidth + e.distanceX;\n this.element.style.transform = 'translatex(' + (this.getTranslateX(this.element) + x) + 'px)';\n }\n };\n ScheduleTouch.prototype.swipeHandler = function (e) {\n if (!this.isScrollTriggered) {\n return;\n }\n this.isScrollTriggered = false;\n if (e.swipeDirection === 'Left' || e.swipeDirection === 'Right') {\n var time = Date.now() - this.timeStampStart;\n var offsetDist = (e.distanceX * 1.66);\n if (offsetDist > time || (e.distanceX > (this.parent.element.offsetWidth / 2))) {\n this.swapPanels(e.swipeDirection);\n if (offsetDist > time && (e.distanceX > (this.parent.element.offsetWidth / 2))) {\n this.element.style.transitionDuration = ((offsetDist / time) / 10) + 's';\n }\n this.confirmSwipe(e.swipeDirection);\n }\n else {\n this.cancelSwipe();\n }\n var args = { requestType: 'dateNavigate', cancel: false, event: e.originalEvent };\n this.parent.trigger(events.actionComplete, args);\n }\n else {\n this.cancelSwipe();\n }\n this.timeStampStart = null;\n };\n ScheduleTouch.prototype.tapHoldHandler = function (e) {\n var target = closest(e.originalEvent.target, '.' + cls.APPOINTMENT_CLASS);\n if (!isNullOrUndefined(target)) {\n this.parent.quickPopup.eventHold(e.originalEvent);\n return;\n }\n target = closest(e.originalEvent.target, '.' + cls.WORK_CELLS_CLASS) ||\n closest(e.originalEvent.target, '.' + cls.ALLDAY_CELLS_CLASS) ||\n closest(e.originalEvent.target, '.' + cls.HEADER_CELLS_CLASS);\n if (!isNullOrUndefined(target)) {\n this.parent.activeCellsData = this.parent.getCellDetails(target);\n this.parent.eventWindow.openEditor(this.parent.activeCellsData, 'Add');\n return;\n }\n };\n ScheduleTouch.prototype.renderPanel = function (clsName, nextPrevType) {\n if (!this.currentPanel) {\n this.currentPanel = {\n element: this.parent.activeView.getPanel(),\n selectedDate: new Date(this.parent.selectedDate.getTime())\n };\n this.setDimensions(this.currentPanel.element);\n }\n else {\n this.parent.setProperties({ selectedDate: this.currentPanel.selectedDate }, true);\n }\n this.parent.setProperties({ selectedDate: this.parent.activeView.getNextPreviousDate(nextPrevType) }, true);\n this.parent.activeView.getRenderDates();\n this.parent.activeView.renderLayout(clsName);\n };\n ScheduleTouch.prototype.swapPanels = function (direction) {\n if (direction === this.touchLeftDirection) {\n var temp = this.nextPanel;\n this.nextPanel = this.currentPanel;\n this.currentPanel = temp;\n }\n else {\n var temp = this.previousPanel;\n this.previousPanel = this.currentPanel;\n this.currentPanel = temp;\n }\n };\n ScheduleTouch.prototype.confirmSwipe = function (swipeDirection) {\n var previousDate = swipeDirection === this.touchLeftDirection ? this.nextPanel.selectedDate : this.previousPanel.selectedDate;\n var navArgs = {\n action: 'date', cancel: false, previousDate: previousDate, currentDate: this.currentPanel.selectedDate\n };\n this.parent.trigger(events.navigating, navArgs);\n if (navArgs.cancel) {\n this.swapPanels(swipeDirection);\n this.cancelSwipe();\n return;\n }\n this.parent.activeView.setPanel(this.currentPanel.element);\n this.parent.setProperties({ selectedDate: this.currentPanel.selectedDate }, true);\n var translateX;\n if (this.parent.enableRtl) {\n translateX = swipeDirection === this.touchLeftDirection ?\n (this.previousPanel ? this.previousPanel.element.offsetLeft : this.currentPanel.element.offsetWidth) : 0;\n }\n else {\n translateX = swipeDirection === this.touchLeftDirection ? -this.currentPanel.element.offsetLeft : 0;\n }\n addClass([this.element], cls.TRANSLATE_CLASS);\n this.element.style.transform = 'translatex(' + (translateX) + 'px)';\n if (this.parent.headerModule) {\n this.parent.headerModule.updateDateRange(this.parent.activeView.getDateRangeText());\n }\n this.parent.renderModule.refreshDataManager();\n };\n ScheduleTouch.prototype.cancelSwipe = function () {\n this.parent.activeView.setPanel(this.currentPanel.element);\n this.parent.setProperties({ selectedDate: this.currentPanel.selectedDate }, true);\n this.parent.activeView.getRenderDates();\n addClass([this.element], cls.TRANSLATE_CLASS);\n var prevWidth = this.previousPanel ? this.previousPanel.element.offsetWidth : 0;\n this.element.style.transform = 'translatex(' + (this.parent.enableRtl ? prevWidth : -this.currentPanel.element.offsetLeft) + 'px)';\n };\n ScheduleTouch.prototype.onTransitionEnd = function () {\n removeClass([this.element], cls.TRANSLATE_CLASS);\n this.element.style.transitionDuration = '';\n this.element.style.transform = '';\n if (this.previousPanel) {\n remove(this.previousPanel.element);\n this.previousPanel = null;\n removeClass([this.currentPanel.element], cls.PREVIOUS_PANEL_CLASS);\n addClass([this.currentPanel.element], cls.CURRENT_PANEL_CLASS);\n }\n if (this.nextPanel) {\n remove(this.nextPanel.element);\n this.nextPanel = null;\n removeClass([this.currentPanel.element], cls.NEXT_PANEL_CLASS);\n addClass([this.currentPanel.element], cls.CURRENT_PANEL_CLASS);\n }\n this.currentPanel = null;\n this.parent.activeView.getPanel().style.width = '';\n };\n ScheduleTouch.prototype.getTranslateX = function (element) {\n var style = window.getComputedStyle(element);\n return new WebKitCSSMatrix(style.webkitTransform).m41;\n };\n ScheduleTouch.prototype.setDimensions = function (element) {\n element.style.width = (this.parent.element.clientWidth) + 'px';\n };\n ScheduleTouch.prototype.resetValues = function () {\n this.currentPanel = null;\n this.previousPanel = null;\n this.nextPanel = null;\n this.timeStampStart = null;\n this.element.style.transform = '';\n this.element.innerHTML = '';\n removeClass([this.element], cls.TRANSLATE_CLASS);\n };\n /**\n * @hidden\n */\n ScheduleTouch.prototype.destroy = function () {\n this.touchObj.destroy();\n EventHandler.remove(this.element, 'transitionend', this.onTransitionEnd);\n this.resetValues();\n };\n return ScheduleTouch;\n}());\nexport { ScheduleTouch };\n","import { KeyboardEvents, closest, EventHandler, extend } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, addClass } from '@syncfusion/ej2-base';\nimport * as event from '../base/constant';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\n/**\n * Keyboard interaction\n */\nvar KeyboardInteraction = /** @class */ (function () {\n function KeyboardInteraction(parent) {\n this.selectedCells = [];\n this.keyConfigs = {\n downArrow: 'downarrow',\n upArrow: 'uparrow',\n rightArrow: 'rightarrow',\n leftArrow: 'leftarrow',\n shiftDownArrow: 'shift+downarrow',\n shiftUpArrow: 'shift+uparrow',\n shiftRightArrow: 'shift+rightarrow',\n shiftLeftArrow: 'shift+leftarrow',\n ctrlLeftArrow: 'ctrl+leftarrow',\n ctrlRightArrow: 'ctrl+rightarrow',\n altOne: 'alt+1',\n altTwo: 'alt+2',\n altThree: 'alt+3',\n altFour: 'alt+4',\n altFive: 'alt+5',\n altSix: 'alt+6',\n enter: 'enter',\n escape: 'escape',\n delete: 'delete',\n home: 'home',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n tab: 'tab',\n shiftTab: 'shift+tab'\n };\n this.parent = parent;\n this.parent.element.tabIndex = this.parent.element.tabIndex === -1 ? 0 : this.parent.element.tabIndex;\n this.keyboardModule = new KeyboardEvents(this.parent.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n this.addEventListener();\n }\n KeyboardInteraction.prototype.keyActionHandler = function (e) {\n switch (e.action) {\n case 'downArrow':\n case 'shiftDownArrow':\n this.processDown(e, e.shiftKey);\n break;\n case 'upArrow':\n case 'shiftUpArrow':\n this.processUp(e, e.shiftKey);\n break;\n case 'leftArrow':\n case 'shiftLeftArrow':\n this.processLeft(e, e.shiftKey);\n break;\n case 'rightArrow':\n case 'shiftRightArrow':\n this.processRight(e, e.shiftKey);\n break;\n case 'ctrlLeftArrow':\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('previous'), e);\n if (this.parent.headerModule) {\n this.parent.headerModule.element.querySelector('.e-prev button').focus();\n }\n break;\n case 'ctrlRightArrow':\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('next'), e);\n if (this.parent.headerModule) {\n this.parent.headerModule.element.querySelector('.e-next button').focus();\n }\n break;\n case 'altOne':\n case 'altTwo':\n case 'altThree':\n case 'altFour':\n case 'altFive':\n case 'altSix':\n this.processViewNavigation(e);\n break;\n case 'enter':\n this.processEnter(e);\n break;\n case 'home':\n this.focusFirstCell();\n break;\n case 'tab':\n case 'shiftTab':\n this.processTab(e, e.shiftKey);\n break;\n case 'delete':\n this.processDelete(e);\n break;\n case 'escape':\n this.processEscape();\n }\n };\n KeyboardInteraction.prototype.addEventListener = function () {\n this.parent.on(event.cellMouseDown, this.onCellMouseDown, this);\n };\n KeyboardInteraction.prototype.removeEventListener = function () {\n this.parent.off(event.cellMouseDown, this.onCellMouseDown);\n };\n KeyboardInteraction.prototype.onCellMouseDown = function (e) {\n if (e.event.shiftKey) {\n return;\n }\n this.initialTarget = e.event.target;\n if (this.parent.activeViewOptions.readonly || this.parent.currentView === 'MonthAgenda') {\n return;\n }\n if (e.event.target.classList.contains(cls.WORK_CELLS_CLASS)) {\n EventHandler.add(this.parent.getContentTable(), 'mousemove', this.onMouseSelection, this);\n EventHandler.add(this.parent.getContentTable(), 'mouseup', this.onMoveup, this);\n }\n if (e.event.target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var allDayRow = this.parent.getAllDayRow();\n if (allDayRow) {\n EventHandler.add(allDayRow, 'mousemove', this.onMouseSelection, this);\n EventHandler.add(allDayRow, 'mouseup', this.onMoveup, this);\n }\n }\n };\n KeyboardInteraction.prototype.onMouseSelection = function (e) {\n var target = closest(e.target, '.' + cls.WORK_CELLS_CLASS + ',.' + cls.ALLDAY_CELLS_CLASS);\n if (target) {\n this.selectCells(true, target);\n }\n };\n KeyboardInteraction.prototype.onAppointmentSelection = function (e) {\n var target = closest(e.target, '.' + cls.APPOINTMENT_CLASS);\n var selectedElements = this.parent.eventBase.getSelectedEventElements(target);\n };\n KeyboardInteraction.prototype.onMoveup = function (e) {\n if (e.target.classList.contains(cls.WORK_CELLS_CLASS)) {\n EventHandler.remove(this.parent.getContentTable(), 'mousemove', this.onMouseSelection);\n EventHandler.remove(this.parent.getContentTable(), 'mouseup', this.onMoveup);\n }\n if (e.target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var allDayRow = this.parent.getAllDayRow();\n if (allDayRow) {\n EventHandler.remove(allDayRow, 'mousemove', this.onMouseSelection);\n EventHandler.remove(allDayRow, 'mouseup', this.onMoveup);\n }\n }\n };\n KeyboardInteraction.prototype.processEnter = function (e) {\n if (this.parent.activeViewOptions.readonly) {\n return;\n }\n var target = (e.target);\n if (target.classList.contains(cls.WORK_CELLS_CLASS) || target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n if (this.selectedCells.length > 1) {\n var start = this.parent.getCellDetails(this.selectedCells[0]);\n var end = this.parent.getCellDetails(this.selectedCells[this.selectedCells.length - 1]);\n start.endTime = end.endTime;\n start.element = target;\n this.parent.activeCellsData = start;\n }\n else {\n this.parent.activeCellsData = this.parent.getCellDetails(target);\n }\n var args = extend(this.parent.activeCellsData, { cancel: false, event: e });\n this.parent.notify(event.cellClick, args);\n return;\n }\n if (target.classList.contains(cls.APPOINTMENT_CLASS) || target.classList.contains(cls.MORE_EVENT_CLOSE_CLASS) ||\n target.classList.contains(cls.ALLDAY_APPOINTMENT_SECTION_CLASS) || target.classList.contains(cls.MORE_INDICATOR_CLASS)) {\n target.click();\n return;\n }\n if (target.classList.contains(cls.MORE_EVENT_HEADER_DATE_CLASS)) {\n this.parent.setProperties({ selectedDate: new Date(parseInt(target.getAttribute('data-date'), 10)) }, true);\n this.parent.changeView('Day');\n this.processEscape();\n return;\n }\n };\n KeyboardInteraction.prototype.getCells = function (isInverseTable, start, end) {\n var tableEle = this.parent.getContentTable();\n var cells = [].slice.call(tableEle.querySelectorAll('td'));\n var maxRow = tableEle.rows.length;\n var maxColumn = tableEle.rows[0].cells.length;\n if (start.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var allDayRow = this.parent.getAllDayRow();\n cells = [].slice.call(allDayRow.cells);\n maxRow = 1;\n maxColumn = allDayRow.cells.length;\n }\n var startIndex = cells.indexOf(start);\n var endIndex = cells.indexOf(end);\n var inverseCells = [];\n if (isInverseTable) {\n for (var i = 0; i < maxColumn; i++) {\n for (var j = 0; j < maxRow; j++) {\n inverseCells.push(cells[maxColumn * j + i]);\n }\n }\n startIndex = inverseCells.indexOf(start);\n endIndex = inverseCells.indexOf(end);\n }\n if (startIndex > endIndex) {\n var temp = startIndex;\n startIndex = endIndex;\n endIndex = temp;\n }\n var sCells = isInverseTable ? inverseCells : cells;\n return sCells.slice(startIndex, endIndex + 1);\n };\n KeyboardInteraction.prototype.focusFirstCell = function () {\n if (this.parent.currentView === 'Agenda') {\n var focusCell = this.parent.getContentTable().querySelector('.' + cls.AGENDA_CELLS_CLASS);\n focusCell.setAttribute('tabindex', '0');\n focusCell.focus();\n return;\n }\n this.parent.eventBase.removeSelectedAppointmentClass();\n this.selectCells(false, this.parent.getWorkCellElements()[0]);\n };\n KeyboardInteraction.prototype.isInverseTableSelect = function () {\n return this.parent.activeView.isInverseTableSelect;\n };\n /** @hidden */\n KeyboardInteraction.prototype.selectCells = function (isMultiple, target) {\n this.parent.removeSelectedClass();\n if (isMultiple) {\n var selectedCells = this.getCells(this.isInverseTableSelect(), this.initialTarget, target);\n this.selectedCells = selectedCells;\n if (selectedCells.length > 2 && !target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n selectedCells = selectedCells.concat(this.getAllDayCells(selectedCells));\n }\n this.parent.addSelectedClass(selectedCells, target);\n }\n else {\n this.initialTarget = target;\n this.selectedCells = [target];\n this.parent.addSelectedClass([target], target);\n }\n };\n KeyboardInteraction.prototype.selectAppointment = function (isReverse, target, isMoreEvent) {\n if (isMoreEvent === void 0) { isMoreEvent = false; }\n var appointments;\n if (isMoreEvent) {\n var moreEventWrapper = this.parent.element.querySelector('.' + cls.MORE_EVENT_WRAPPER_CLASS);\n appointments = [].slice.call(moreEventWrapper.children);\n }\n else {\n appointments = this.getAppointmentElements();\n }\n if (appointments.length < 0) {\n return;\n }\n this.parent.eventBase.removeSelectedAppointmentClass();\n var nextAppEle;\n if (target.classList.contains(cls.APPOINTMENT_CLASS)) {\n var targetIndex = appointments.indexOf(target);\n nextAppEle = appointments[(isReverse ? targetIndex - 1 : targetIndex + 1)];\n }\n else {\n nextAppEle = isReverse ? appointments[appointments.length - 1] : appointments[0];\n }\n if (nextAppEle) {\n this.parent.eventBase.addSelectedAppointments([nextAppEle], nextAppEle);\n nextAppEle.focus();\n }\n };\n KeyboardInteraction.prototype.selectAppointmentElementFromWorkCell = function (isReverse, target) {\n var _this = this;\n this.parent.eventBase.removeSelectedAppointmentClass();\n this.parent.removeSelectedClass();\n if (target.classList.contains(cls.WORK_CELLS_CLASS) || target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var appointmentElements_1 = this.getUniqueAppointmentElements();\n var filteredElements_1 = [];\n var selectedDate_1 = parseInt(target.getAttribute('data-date'), 10);\n var selectedSeriesEvents = this.parent.eventsProcessed.filter(function (eventObject) {\n return (!isReverse ? (eventObject[_this.parent.eventFields.startTime].getTime() >= selectedDate_1) :\n (eventObject[_this.parent.eventFields.startTime].getTime() <= selectedDate_1));\n });\n selectedSeriesEvents.filter(function (event) {\n appointmentElements_1.filter(function (element) {\n if (JSON.stringify(event.Guid) === JSON.stringify(element.getAttribute('data-guid'))) {\n filteredElements_1.push(element);\n }\n });\n });\n if (filteredElements_1.length > 0) {\n var selectedElement = isReverse ? filteredElements_1[filteredElements_1.length - 1] : filteredElements_1[0];\n var focusElements = this.getAppointmentElementsByGuid(selectedElement.getAttribute('data-guid'));\n this.parent.eventBase.addSelectedAppointments(focusElements, focusElements[focusElements.length - 1]);\n (focusElements[focusElements.length - 1]).focus();\n }\n }\n };\n KeyboardInteraction.prototype.getAllDayCells = function (cells) {\n var allDayRow = this.parent.getAllDayRow();\n if (!allDayRow) {\n return [];\n }\n var startCell = cells[0];\n var endCell = cells[cells.length - 1];\n var start = this.parent.getCellDetails(startCell);\n var end = this.parent.getCellDetails(endCell);\n if (end.endTime.getTime() - start.startTime.getTime() >= util.MS_PER_DAY) {\n var allDayCells = [].slice.call(allDayRow.cells);\n return allDayCells.slice(startCell.cellIndex, endCell.cellIndex + 1);\n }\n return [];\n };\n KeyboardInteraction.prototype.getAppointmentElements = function () {\n return [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n };\n KeyboardInteraction.prototype.getAppointmentElementsByGuid = function (guid) {\n return [].slice.call(this.parent.element.querySelectorAll('div[data-guid=\"' + guid + '\"]'));\n };\n KeyboardInteraction.prototype.getUniqueAppointmentElements = function () {\n var appointments = this.getAppointmentElements();\n var appointmentElements = [];\n appointments.map(function (value) {\n return value.getAttribute('data-guid');\n }).filter(function (value, index, self) {\n if (self.indexOf(value) === index) {\n appointmentElements.push(appointments[index]);\n }\n });\n return appointmentElements;\n };\n KeyboardInteraction.prototype.getWorkCellFromAppointmentElement = function (target) {\n var selectedObject = this.parent.eventBase.getEventByGuid(target.getAttribute('data-guid'));\n return this.parent.eventBase.selectWorkCellByTime([selectedObject]);\n };\n KeyboardInteraction.prototype.processViewNavigation = function (e) {\n var index = parseInt(e.key, 10) - 1;\n if (index < this.parent.views.length) {\n var view = this.parent.viewOptions[Object.keys(this.parent.viewOptions)[index]].option;\n this.parent.changeView(view, e);\n if (this.parent.headerModule) {\n this.parent.headerModule.element.querySelector('.e-active-view button').focus();\n }\n }\n };\n KeyboardInteraction.prototype.processUp = function (e, isMultiple) {\n if ((isMultiple && this.parent.currentView === 'MonthAgenda')) {\n return;\n }\n var target = (e.target);\n var selectedElements = this.parent.getSelectedElements();\n var selectedEventElements = this.parent.eventBase.getSelectedAppointments();\n var moreEventWrapper = this.parent.element.querySelector('.' + cls.MORE_POPUP_WRAPPER_CLASS);\n if (selectedElements.length > 0 && !e.target.classList.contains(cls.WORK_CELLS_CLASS)) {\n target = selectedElements[selectedElements.length - 1];\n }\n if (selectedEventElements.length > 0 && !moreEventWrapper.classList.contains(cls.POPUP_OPEN) &&\n ['Day', 'Week', 'WorkWeek', 'Month'].indexOf(this.parent.currentView) !== -1) {\n target = this.getWorkCellFromAppointmentElement(selectedEventElements[selectedEventElements.length - 1]);\n this.parent.eventBase.removeSelectedAppointmentClass();\n }\n if (target.classList.contains(cls.WORK_CELLS_CLASS) && !this.parent.element.querySelector('.' + cls.POPUP_OPEN)) {\n var tableEle = this.parent.getContentTable();\n var curRowIndex = target.parentNode.rowIndex;\n if (curRowIndex > 0 && curRowIndex < tableEle.rows.length) {\n this.selectCells(isMultiple, tableEle.rows[curRowIndex - 1].cells[target.cellIndex]);\n }\n }\n else if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n this.selectAppointment(true, target);\n }\n };\n KeyboardInteraction.prototype.processDown = function (e, isMultiple) {\n if ((isMultiple && this.parent.currentView === 'MonthAgenda')) {\n return;\n }\n var target = (e.target);\n var selectedCells = this.parent.getSelectedElements();\n var selectedElements = this.parent.eventBase.getSelectedAppointments();\n var moreEventWrapper = this.parent.element.querySelector('.' + cls.MORE_POPUP_WRAPPER_CLASS);\n if (selectedCells.length > 0 && !e.target.classList.contains(cls.WORK_CELLS_CLASS)) {\n target = selectedCells[selectedCells.length - 1];\n }\n if (selectedElements.length > 0 && !moreEventWrapper.classList.contains(cls.POPUP_OPEN) &&\n ['Day', 'Week', 'WorkWeek', 'Month'].indexOf(this.parent.currentView) !== -1) {\n target = this.getWorkCellFromAppointmentElement(selectedElements[selectedElements.length - 1]);\n this.parent.eventBase.removeSelectedAppointmentClass();\n }\n var tableEle = this.parent.getContentTable();\n if (target.classList.contains(cls.WORK_CELLS_CLASS) && !this.parent.element.querySelector('.' + cls.POPUP_OPEN)) {\n var curRowIndex = target.parentNode.rowIndex;\n if (curRowIndex >= 0 && curRowIndex < tableEle.rows.length - 1) {\n this.selectCells(isMultiple, tableEle.rows[curRowIndex + 1].cells[target.cellIndex]);\n }\n }\n else if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n this.selectAppointment(false, target);\n }\n };\n KeyboardInteraction.prototype.processLeftRight = function (target, isMultiple) {\n var tableEle = this.parent.getContentTable();\n var curRowIndex = target.parentNode.rowIndex;\n var key = {\n element: tableEle,\n rowIndex: curRowIndex,\n columnIndex: target.cellIndex,\n maxIndex: tableEle.rows[curRowIndex].cells.length\n };\n return key;\n };\n KeyboardInteraction.prototype.isCancelLeftRightAction = function (isMultiple) {\n if (this.parent.currentView === 'Agenda' || (isMultiple && this.parent.currentView === 'MonthAgenda')) {\n return true;\n }\n var moreEventWrapper = this.parent.element.querySelector('.' + cls.MORE_POPUP_WRAPPER_CLASS);\n if (moreEventWrapper.classList.contains(cls.POPUP_OPEN)) {\n return true;\n }\n return false;\n };\n KeyboardInteraction.prototype.processRight = function (e, isMultiple) {\n if (this.isCancelLeftRightAction(isMultiple)) {\n return;\n }\n var selectedCells = this.parent.getSelectedElements();\n var selectedAppointments = this.parent.eventBase.getSelectedAppointments();\n var target = (e.target);\n if (selectedCells.length > 0 && !target.classList.contains(cls.WORK_CELLS_CLASS) &&\n !target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n target = selectedCells[selectedCells.length - 1];\n }\n if (selectedAppointments.length > 0) {\n target = this.getWorkCellFromAppointmentElement(selectedAppointments[selectedAppointments.length - 1]);\n this.parent.eventBase.removeSelectedAppointmentClass();\n }\n if (target.classList.contains(cls.WORK_CELLS_CLASS)) {\n var key = this.processLeftRight(target, isMultiple);\n if (key.columnIndex >= 0 && key.columnIndex < key.maxIndex - 1) {\n this.selectCells(isMultiple, key.element.rows[key.rowIndex].cells[target.cellIndex + 1]);\n }\n else if (key.columnIndex === key.maxIndex - 1) {\n if (!this.isInverseTableSelect() && key.rowIndex < key.element.rows.length - 1) {\n this.selectCells(isMultiple, key.element.rows[key.rowIndex + 1].cells[0]);\n }\n else if (!isMultiple) {\n var rowIndex = this.isInverseTableSelect() ? key.rowIndex : 0;\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('next'), e);\n var tableEle = this.parent.getContentTable();\n this.selectCells(false, tableEle.rows[rowIndex].cells[0]);\n }\n }\n }\n else if (target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var curColIndex = target.cellIndex;\n var allDayRow = this.parent.getAllDayRow();\n var maxColIndex = allDayRow.cells.length;\n if (curColIndex >= 0 && curColIndex < maxColIndex - 1) {\n this.selectCells(isMultiple, allDayRow.cells[curColIndex + 1]);\n }\n else if (curColIndex === maxColIndex - 1 && !isMultiple) {\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('next'), e);\n var allDayRow_1 = this.parent.getAllDayRow();\n this.selectCells(false, allDayRow_1.cells[0]);\n }\n }\n };\n KeyboardInteraction.prototype.processLeft = function (e, isMultiple) {\n if (this.isCancelLeftRightAction(isMultiple)) {\n return;\n }\n var target = (e.target);\n var selectedCells = this.parent.getSelectedElements();\n if (selectedCells.length > 0 && !target.classList.contains(cls.WORK_CELLS_CLASS) &&\n !target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n target = selectedCells[selectedCells.length - 1];\n }\n var selectedElements = this.parent.eventBase.getSelectedAppointments();\n if (selectedElements.length > 0) {\n target = this.getWorkCellFromAppointmentElement(selectedElements[selectedElements.length - 1]);\n this.parent.eventBase.removeSelectedAppointmentClass();\n }\n if (target.classList.contains(cls.WORK_CELLS_CLASS)) {\n var key = this.processLeftRight(target, isMultiple);\n if (key.columnIndex > 0 && key.columnIndex < key.maxIndex) {\n this.selectCells(isMultiple, key.element.rows[key.rowIndex].cells[target.cellIndex - 1]);\n }\n else if (key.columnIndex === 0) {\n if (!this.isInverseTableSelect() && key.rowIndex > 0) {\n this.selectCells(isMultiple, key.element.rows[key.rowIndex - 1].cells[key.maxIndex - 1]);\n }\n else if (!isMultiple) {\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('previous'), e);\n var tableEle = this.parent.getContentTable();\n var rowIndex = this.isInverseTableSelect() ? key.rowIndex : tableEle.rows.length - 1;\n this.selectCells(false, tableEle.rows[rowIndex].cells[key.maxIndex - 1]);\n }\n }\n }\n else if (target.classList.contains(cls.ALLDAY_CELLS_CLASS)) {\n var curColIndex = target.cellIndex;\n var allDayRow = this.parent.getAllDayRow();\n var maxColIndex = allDayRow.cells.length;\n if (curColIndex > 0 && curColIndex < maxColIndex) {\n this.selectCells(isMultiple, allDayRow.cells[curColIndex - 1]);\n }\n else if (curColIndex === 0 && !isMultiple) {\n this.parent.changeDate(this.parent.activeView.getNextPreviousDate('previous'), e);\n var allDayRow_2 = this.parent.getAllDayRow();\n this.selectCells(false, allDayRow_2.cells[maxColIndex - 1]);\n }\n }\n };\n KeyboardInteraction.prototype.processTab = function (e, isReverse) {\n var target = e.target;\n var selectedAppointments = this.parent.eventBase.getSelectedAppointments();\n var moreEventWrapper = this.parent.element.querySelector('.' + cls.MORE_POPUP_WRAPPER_CLASS);\n if (closest(target, '.' + cls.MORE_POPUP_WRAPPER_CLASS)) {\n if (isNullOrUndefined(moreEventWrapper) || !moreEventWrapper.classList.contains(cls.POPUP_OPEN)) {\n return;\n }\n var moreEventList = [].slice.call(moreEventWrapper.querySelector('.' + cls.MORE_EVENT_WRAPPER_CLASS).children);\n var focusElement = moreEventList[moreEventList.length - 1];\n if (selectedAppointments.length > 0) {\n target = selectedAppointments[selectedAppointments.length - 1];\n }\n if (target.classList.contains(cls.MORE_EVENT_CLOSE_CLASS) && !isReverse) {\n moreEventWrapper.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS).focus();\n }\n else if (target.classList.contains(cls.MORE_EVENT_HEADER_DATE_CLASS) && !isReverse) {\n this.selectAppointment(isReverse, target, true);\n }\n else if (target.classList.contains(cls.MORE_EVENT_HEADER_DATE_CLASS) && isReverse) {\n moreEventWrapper.querySelector('.' + cls.MORE_EVENT_CLOSE_CLASS).focus();\n }\n else if (target.classList.contains(cls.MORE_EVENT_CLOSE_CLASS) && isReverse) {\n this.parent.eventBase.removeSelectedAppointmentClass();\n this.parent.eventBase.addSelectedAppointments([focusElement], focusElement);\n focusElement.focus();\n }\n else if (target.classList.contains(cls.APPOINTMENT_CLASS)) {\n if (isReverse && (target.getAttribute('data-guid') === (moreEventList[0]).getAttribute('data-guid'))) {\n this.parent.eventBase.removeSelectedAppointmentClass();\n moreEventWrapper.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS).focus();\n }\n else if (!isReverse && (target.getAttribute('data-guid') === (focusElement).getAttribute('data-guid'))) {\n this.parent.eventBase.removeSelectedAppointmentClass();\n moreEventWrapper.querySelector('.' + cls.MORE_EVENT_CLOSE_CLASS).focus();\n }\n else {\n this.selectAppointment(isReverse, target, true);\n }\n }\n e.preventDefault();\n return;\n }\n var appointments = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n if (target.classList.contains(cls.ROOT)) {\n this.parent.eventBase.removeSelectedAppointmentClass();\n return;\n }\n if (target.classList.contains(cls.APPOINTMENT_CLASS)) {\n if (selectedAppointments.length > 0) {\n target = selectedAppointments[selectedAppointments.length - 1];\n }\n this.parent.eventBase.removeSelectedAppointmentClass();\n if (!isReverse && target.getAttribute('data-guid') === appointments[appointments.length - 1].getAttribute('data-guid') ||\n isReverse && target.getAttribute('data-guid') === appointments[0].getAttribute('data-guid')) {\n return;\n }\n if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n this.selectAppointment(isReverse, target);\n e.preventDefault();\n }\n return;\n }\n var selectedCells = this.parent.getSelectedElements();\n if (selectedCells.length > 0 && !target.classList.contains(cls.APPOINTMENT_CLASS)) {\n target = selectedCells[selectedCells.length - 1];\n this.selectAppointmentElementFromWorkCell(isReverse, target);\n e.preventDefault();\n return;\n }\n };\n KeyboardInteraction.prototype.processDelete = function (e) {\n if (document.activeElement.classList.contains(cls.APPOINTMENT_CLASS)) {\n addClass([document.activeElement], cls.APPOINTMENT_BORDER);\n this.parent.activeEventData = this.parent.eventBase.getSelectedEvents();\n this.parent.quickPopup.deleteClick();\n }\n this.parent.quickPopup.morePopup.hide();\n };\n KeyboardInteraction.prototype.processEscape = function () {\n this.parent.quickPopup.onClosePopup();\n this.parent.quickPopup.morePopup.hide();\n if (this.parent.headerModule) {\n this.parent.headerModule.hideHeaderPopup();\n }\n };\n /**\n * Get module name.\n */\n KeyboardInteraction.prototype.getModuleName = function () {\n return 'keyboard';\n };\n /**\n * To destroy the keyboard module.\n * @return {void}\n * @private\n */\n KeyboardInteraction.prototype.destroy = function () {\n this.removeEventListener();\n this.keyboardModule.destroy();\n };\n return KeyboardInteraction;\n}());\nexport { KeyboardInteraction };\n","import { Query, DataManager } from '@syncfusion/ej2-data';\n/**\n * data module is used to generate query and data source.\n * @hidden\n */\nvar Data = /** @class */ (function () {\n /**\n * Constructor for data module\n * @private\n */\n function Data(dataSource, query) {\n this.initDataManager(dataSource, query);\n }\n /**\n * The function used to initialize dataManager and query\n * @return {void}\n * @private\n */\n Data.prototype.initDataManager = function (dataSource, query) {\n this.dataManager = dataSource instanceof DataManager ? dataSource : new DataManager(dataSource);\n this.query = query instanceof Query ? query : new Query();\n };\n /**\n * The function used to generate updated Query from schedule model\n * @return {void}\n * @private\n */\n Data.prototype.generateQuery = function (startDate, endDate) {\n var query = this.query.clone();\n if (startDate) {\n query.addParams('StartDate', startDate.toISOString());\n }\n if (endDate) {\n query.addParams('EndDate', endDate.toISOString());\n }\n return query;\n };\n /**\n * The function used to get dataSource by executing given Query\n * @param {Query} query - A Query that specifies to generate dataSource\n * @return {void}\n * @private\n */\n Data.prototype.getData = function (query) {\n return this.dataManager.executeQuery(query);\n };\n return Data;\n}());\nexport { Data };\n","/**\n * Time zone\n */\nvar Timezone = /** @class */ (function () {\n function Timezone() {\n }\n Timezone.prototype.offset = function (date, timezone) {\n var localOffset = date.getTimezoneOffset();\n try {\n var convertedDate = new Date(date.toLocaleString('en-US', { timeZone: timezone }));\n if (!isNaN(convertedDate.getTime())) {\n return ((date.getTime() - convertedDate.getTime()) / 60000) + localOffset;\n }\n return 0;\n }\n catch (error) {\n return 0;\n }\n };\n Timezone.prototype.convert = function (date, fromOffset, toOffset) {\n if (typeof fromOffset === 'string') {\n fromOffset = this.offset(date, fromOffset);\n }\n if (typeof toOffset === 'string') {\n toOffset = this.offset(date, toOffset);\n }\n var fromLocalOffset = date.getTimezoneOffset();\n date = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\n var toLocalOffset = date.getTimezoneOffset();\n return new Date(date.getTime() + (toLocalOffset - fromLocalOffset) * 60000);\n };\n Timezone.prototype.add = function (date, timezone) {\n return this.convert(date, date.getTimezoneOffset(), timezone);\n };\n Timezone.prototype.remove = function (date, timezone) {\n return this.convert(date, timezone, date.getTimezoneOffset());\n };\n Timezone.prototype.removeLocalOffset = function (date) {\n return new Date(+date - (date.getTimezoneOffset() * 60000));\n };\n return Timezone;\n}());\nexport { Timezone };\nexport var localTimezoneName = Intl.DateTimeFormat().resolvedOptions().timeZone || 'UTC';\nexport var timezoneData = [\n { Value: 'Pacific/Niue', Text: '(UTC-11:00) Niue' },\n { Value: 'Pacific/Pago_Pago', Text: '(UTC-11:00) Pago Pago' },\n { Value: 'Pacific/Honolulu', Text: '(UTC-10:00) Hawaii Time' },\n { Value: 'Pacific/Rarotonga', Text: '(UTC-10:00) Rarotonga' },\n { Value: 'Pacific/Tahiti', Text: '(UTC-10:00) Tahiti' },\n { Value: 'Pacific/Marquesas', Text: '(UTC-09:30) Marquesas' },\n { Value: 'America/Anchorage', Text: '(UTC-09:00) Alaska Time' },\n { Value: 'Pacific/Gambier', Text: '(UTC-09:00) Gambier' },\n { Value: 'America/Los_Angeles', Text: '(UTC-08:00) Pacific Time' },\n { Value: 'America/Tijuana', Text: '(UTC-08:00) Pacific Time - Tijuana' },\n { Value: 'America/Vancouver', Text: '(UTC-08:00) Pacific Time - Vancouver' },\n { Value: 'America/Whitehorse', Text: '(UTC-08:00) Pacific Time - Whitehorse' },\n { Value: 'Pacific/Pitcairn', Text: '(UTC-08:00) Pitcairn' },\n { Value: 'America/Denver', Text: '(UTC-07:00) Mountain Time' },\n { Value: 'America/Phoenix', Text: '(UTC-07:00) Mountain Time - Arizona' },\n { Value: 'America/Mazatlan', Text: '(UTC-07:00) Mountain Time - Chihuahua, Mazatlan' },\n { Value: 'America/Dawson_Creek', Text: '(UTC-07:00) Mountain Time - Dawson Creek' },\n { Value: 'America/Edmonton', Text: '(UTC-07:00) Mountain Time - Edmonton' },\n { Value: 'America/Hermosillo', Text: '(UTC-07:00) Mountain Time - Hermosillo' },\n { Value: 'America/Yellowknife', Text: '(UTC-07:00) Mountain Time - Yellowknife' },\n { Value: 'America/Belize', Text: '(UTC-06:00) Belize' },\n { Value: 'America/Chicago', Text: '(UTC-06:00) Central Time' },\n { Value: 'America/Mexico_City', Text: '(UTC-06:00) Central Time - Mexico City' },\n { Value: 'America/Regina', Text: '(UTC-06:00) Central Time - Regina' },\n { Value: 'America/Tegucigalpa', Text: '(UTC-06:00) Central Time - Tegucigalpa' },\n { Value: 'America/Winnipeg', Text: '(UTC-06:00) Central Time - Winnipeg' },\n { Value: 'America/Costa_Rica', Text: '(UTC-06:00) Costa Rica' },\n { Value: 'America/El_Salvador', Text: '(UTC-06:00) El Salvador' },\n { Value: 'Pacific/Galapagos', Text: '(UTC-06:00) Galapagos' },\n { Value: 'America/Guatemala', Text: '(UTC-06:00) Guatemala' },\n { Value: 'America/Managua', Text: '(UTC-06:00) Managua' },\n { Value: 'America/Cancun', Text: '(UTC-05:00) America Cancun' },\n { Value: 'America/Bogota', Text: '(UTC-05:00) Bogota' },\n { Value: 'Pacific/Easter', Text: '(UTC-05:00) Easter Island' },\n { Value: 'America/New_York', Text: '(UTC-05:00) Eastern Time' },\n { Value: 'America/Iqaluit', Text: '(UTC-05:00) Eastern Time - Iqaluit' },\n { Value: 'America/Toronto', Text: '(UTC-05:00) Eastern Time - Toronto' },\n { Value: 'America/Guayaquil', Text: '(UTC-05:00) Guayaquil' },\n { Value: 'America/Havana', Text: '(UTC-05:00) Havana' },\n { Value: 'America/Jamaica', Text: '(UTC-05:00) Jamaica' },\n { Value: 'America/Lima', Text: '(UTC-05:00) Lima' },\n { Value: 'America/Nassau', Text: '(UTC-05:00) Nassau' },\n { Value: 'America/Panama', Text: '(UTC-05:00) Panama' },\n { Value: 'America/Port-au-Prince', Text: '(UTC-05:00) Port-au-Prince' },\n { Value: 'America/Rio_Branco', Text: '(UTC-05:00) Rio Branco' },\n { Value: 'America/Halifax', Text: '(UTC-04:00) Atlantic Time - Halifax' },\n { Value: 'America/Barbados', Text: '(UTC-04:00) Barbados' },\n { Value: 'Atlantic/Bermuda', Text: '(UTC-04:00) Bermuda' },\n { Value: 'America/Boa_Vista', Text: '(UTC-04:00) Boa Vista' },\n { Value: 'America/Caracas', Text: '(UTC-04:00) Caracas' },\n { Value: 'America/Curacao', Text: '(UTC-04:00) Curacao' },\n { Value: 'America/Grand_Turk', Text: '(UTC-04:00) Grand Turk' },\n { Value: 'America/Guyana', Text: '(UTC-04:00) Guyana' },\n { Value: 'America/La_Paz', Text: '(UTC-04:00) La Paz' },\n { Value: 'America/Manaus', Text: '(UTC-04:00) Manaus' },\n { Value: 'America/Martinique', Text: '(UTC-04:00) Martinique' },\n { Value: 'America/Port_of_Spain', Text: '(UTC-04:00) Port of Spain' },\n { Value: 'America/Porto_Velho', Text: '(UTC-04:00) Porto Velho' },\n { Value: 'America/Puerto_Rico', Text: '(UTC-04:00) Puerto Rico' },\n { Value: 'America/Santo_Domingo', Text: '(UTC-04:00) Santo Domingo' },\n { Value: 'America/Thule', Text: '(UTC-04:00) Thule' },\n { Value: 'America/St_Johns', Text: '(UTC-03:30) Newfoundland Time - St. Johns' },\n { Value: 'America/Araguaina', Text: '(UTC-03:00) Araguaina' },\n { Value: 'America/Asuncion', Text: '(UTC-03:00) Asuncion' },\n { Value: 'America/Belem', Text: '(UTC-03:00) Belem' },\n { Value: 'America/Argentina/Buenos_Aires', Text: '(UTC-03:00) Buenos Aires' },\n { Value: 'America/Campo_Grande', Text: '(UTC-03:00) Campo Grande' },\n { Value: 'America/Cayenne', Text: '(UTC-03:00) Cayenne' },\n { Value: 'America/Cuiaba', Text: '(UTC-03:00) Cuiaba' },\n { Value: 'America/Fortaleza', Text: '(UTC-03:00) Fortaleza' },\n { Value: 'America/Godthab', Text: '(UTC-03:00) Godthab' },\n { Value: 'America/Maceio', Text: '(UTC-03:00) Maceio' },\n { Value: 'America/Miquelon', Text: '(UTC-03:00) Miquelon' },\n { Value: 'America/Montevideo', Text: '(UTC-03:00) Montevideo' },\n { Value: 'Antarctica/Palmer', Text: '(UTC-03:00) Palmer' },\n { Value: 'America/Paramaribo', Text: '(UTC-03:00) Paramaribo' },\n { Value: 'America/Punta_Arenas', Text: '(UTC-03:00) Punta Arenas' },\n { Value: 'America/Recife', Text: '(UTC-03:00) Recife' },\n { Value: 'Antarctica/Rothera', Text: '(UTC-03:00) Rothera' },\n { Value: 'America/Bahia', Text: '(UTC-03:00) Salvador' },\n { Value: 'America/Santiago', Text: '(UTC-03:00) Santiago' },\n { Value: 'Atlantic/Stanley', Text: '(UTC-03:00) Stanley' },\n { Value: 'America/Noronha', Text: '(UTC-02:00) Noronha' },\n { Value: 'America/Sao_Paulo', Text: '(UTC-02:00) Sao Paulo' },\n { Value: 'Atlantic/South_Georgia', Text: '(UTC-02:00) South Georgia' },\n { Value: 'Atlantic/Azores', Text: '(UTC-01:00) Azores' },\n { Value: 'Atlantic/Cape_Verde', Text: '(UTC-01:00) Cape Verde' },\n { Value: 'America/Scoresbysund', Text: '(UTC-01:00) Scoresbysund' },\n { Value: 'Africa/Abidjan', Text: '(UTC+00:00) Abidjan' },\n { Value: 'Africa/Accra', Text: '(UTC+00:00) Accra' },\n { Value: 'Africa/Bissau', Text: '(UTC+00:00) Bissau' },\n { Value: 'Atlantic/Canary', Text: '(UTC+00:00) Canary Islands' },\n { Value: 'Africa/Casablanca', Text: '(UTC+00:00) Casablanca' },\n { Value: 'America/Danmarkshavn', Text: '(UTC+00:00) Danmarkshavn' },\n { Value: 'Europe/Dublin', Text: '(UTC+00:00) Dublin' },\n { Value: 'Africa/El_Aaiun', Text: '(UTC+00:00) El Aaiun' },\n { Value: 'Atlantic/Faroe', Text: '(UTC+00:00) Faeroe' },\n { Value: 'Etc/UTC', Text: '(UTC+00:00) UTC (no daylight saving)' },\n { Value: 'Europe/Lisbon', Text: '(UTC+00:00) Lisbon' },\n { Value: 'Europe/London', Text: '(UTC+00:00) London' },\n { Value: 'Africa/Monrovia', Text: '(UTC+00:00) Monrovia' },\n { Value: 'Atlantic/Reykjavik', Text: '(UTC+00:00) Reykjavik' },\n { Value: 'UTC', Text: 'UTC' },\n { Value: 'Africa/Algiers', Text: '(UTC+01:00) Algiers' },\n { Value: 'Europe/Amsterdam', Text: '(UTC+01:00) Amsterdam' },\n { Value: 'Europe/Andorra', Text: '(UTC+01:00) Andorra' },\n { Value: 'Europe/Berlin', Text: '(UTC+01:00) Berlin' },\n { Value: 'Europe/Brussels', Text: '(UTC+01:00) Brussels' },\n { Value: 'Europe/Budapest', Text: '(UTC+01:00) Budapest' },\n { Value: 'Europe/Belgrade', Text: '(UTC+01:00) Central European Time - Belgrade' },\n { Value: 'Europe/Prague', Text: '(UTC+01:00) Central European Time - Prague' },\n { Value: 'Africa/Ceuta', Text: '(UTC+01:00) Ceuta' },\n { Value: 'Europe/Copenhagen', Text: '(UTC+01:00) Copenhagen' },\n { Value: 'Europe/Gibraltar', Text: '(UTC+01:00) Gibraltar' },\n { Value: 'Africa/Lagos', Text: '(UTC+01:00) Lagos' },\n { Value: 'Europe/Luxembourg', Text: '(UTC+01:00) Luxembourg' },\n { Value: 'Europe/Madrid', Text: '(UTC+01:00) Madrid' },\n { Value: 'Europe/Malta', Text: '(UTC+01:00) Malta' },\n { Value: 'Europe/Monaco', Text: '(UTC+01:00) Monaco' },\n { Value: 'Africa/Ndjamena', Text: '(UTC+01:00) Ndjamena' },\n { Value: 'Europe/Oslo', Text: '(UTC+01:00) Oslo' },\n { Value: 'Europe/Paris', Text: '(UTC+01:00) Paris' },\n { Value: 'Europe/Rome', Text: '(UTC+01:00) Rome' },\n { Value: 'Europe/Stockholm', Text: '(UTC+01:00) Stockholm' },\n { Value: 'Europe/Tirane', Text: '(UTC+01:00) Tirane' },\n { Value: 'Africa/Tunis', Text: '(UTC+01:00) Tunis' },\n { Value: 'Europe/Vienna', Text: '(UTC+01:00) Vienna' },\n { Value: 'Europe/Warsaw', Text: '(UTC+01:00) Warsaw' },\n { Value: 'Europe/Zurich', Text: '(UTC+01:00) Zurich' },\n { Value: 'Asia/Amman', Text: '(UTC+02:00) Amman' },\n { Value: 'Europe/Athens', Text: '(UTC+02:00) Athens' },\n { Value: 'Asia/Beirut', Text: '(UTC+02:00) Beirut' },\n { Value: 'Europe/Bucharest', Text: '(UTC+02:00) Bucharest' },\n { Value: 'Africa/Cairo', Text: '(UTC+02:00) Cairo' },\n { Value: 'Europe/Chisinau', Text: '(UTC+02:00) Chisinau' },\n { Value: 'Asia/Damascus', Text: '(UTC+02:00) Damascus' },\n { Value: 'Asia/Gaza', Text: '(UTC+02:00) Gaza' },\n { Value: 'Europe/Helsinki', Text: '(UTC+02:00) Helsinki' },\n { Value: 'Asia/Jerusalem', Text: '(UTC+02:00) Jerusalem' },\n { Value: 'Africa/Johannesburg', Text: '(UTC+02:00) Johannesburg' },\n { Value: 'Africa/Khartoum', Text: '(UTC+02:00) Khartoum' },\n { Value: 'Europe/Kiev', Text: '(UTC+02:00) Kiev' },\n { Value: 'Africa/Maputo', Text: '(UTC+02:00) Maputo' },\n { Value: 'Europe/Kaliningrad', Text: '(UTC+02:00) Moscow-01 - Kaliningrad' },\n { Value: 'Asia/Nicosia', Text: '(UTC+02:00) Nicosia' },\n { Value: 'Europe/Riga', Text: '(UTC+02:00) Riga' },\n { Value: 'Europe/Sofia', Text: '(UTC+02:00) Sofia' },\n { Value: 'Europe/Tallinn', Text: '(UTC+02:00) Tallinn' },\n { Value: 'Africa/Tripoli', Text: '(UTC+02:00) Tripoli' },\n { Value: 'Europe/Vilnius', Text: '(UTC+02:00) Vilnius' },\n { Value: 'Africa/Windhoek', Text: '(UTC+02:00) Windhoek' },\n { Value: 'Asia/Baghdad', Text: '(UTC+03:00) Baghdad' },\n { Value: 'Europe/Istanbul', Text: '(UTC+03:00) Istanbul' },\n { Value: 'Europe/Minsk', Text: '(UTC+03:00) Minsk' },\n { Value: 'Europe/Moscow', Text: '(UTC+03:00) Moscow+00 - Moscow' },\n { Value: 'Africa/Nairobi', Text: '(UTC+03:00) Nairobi' },\n { Value: 'Asia/Qatar', Text: '(UTC+03:00) Qatar' },\n { Value: 'Asia/Riyadh', Text: '(UTC+03:00) Riyadh' },\n { Value: 'Antarctica/Syowa', Text: '(UTC+03:00) Syowa' },\n { Value: 'Asia/Tehran', Text: '(UTC+03:30) Tehran' },\n { Value: 'Asia/Baku', Text: '(UTC+04:00) Baku' },\n { Value: 'Asia/Dubai', Text: '(UTC+04:00) Dubai' },\n { Value: 'Indian/Mahe', Text: '(UTC+04:00) Mahe' },\n { Value: 'Indian/Mauritius', Text: '(UTC+04:00) Mauritius' },\n { Value: 'Europe/Samara', Text: '(UTC+04:00) Moscow+01 - Samara' },\n { Value: 'Indian/Reunion', Text: '(UTC+04:00) Reunion' },\n { Value: 'Asia/Tbilisi', Text: '(UTC+04:00) Tbilisi' },\n { Value: 'Asia/Yerevan', Text: '(UTC+04:00) Yerevan' },\n { Value: 'Asia/Kabul', Text: '(UTC+04:30) Kabul' },\n { Value: 'Asia/Aqtau', Text: '(UTC+05:00) Aqtau' },\n { Value: 'Asia/Aqtobe', Text: '(UTC+05:00) Aqtobe' },\n { Value: 'Asia/Ashgabat', Text: '(UTC+05:00) Ashgabat' },\n { Value: 'Asia/Dushanbe', Text: '(UTC+05:00) Dushanbe' },\n { Value: 'Asia/Karachi', Text: '(UTC+05:00) Karachi' },\n { Value: 'Indian/Kerguelen', Text: '(UTC+05:00) Kerguelen' },\n { Value: 'Indian/Maldives', Text: '(UTC+05:00) Maldives' },\n { Value: 'Antarctica/Mawson', Text: '(UTC+05:00) Mawson' },\n { Value: 'Asia/Yekaterinburg', Text: '(UTC+05:00) Moscow+02 - Yekaterinburg' },\n { Value: 'Asia/Tashkent', Text: '(UTC+05:00) Tashkent' },\n { Value: 'Asia/Colombo', Text: '(UTC+05:30) Colombo' },\n { Value: 'Asia/Kolkata', Text: '(UTC+05:30) India Standard Time' },\n { Value: 'Asia/Katmandu', Text: '(UTC+05:45) Katmandu' },\n { Value: 'Asia/Almaty', Text: '(UTC+06:00) Almaty' },\n { Value: 'Asia/Bishkek', Text: '(UTC+06:00) Bishkek' },\n { Value: 'Indian/Chagos', Text: '(UTC+06:00) Chagos' },\n { Value: 'Asia/Dhaka', Text: '(UTC+06:00) Dhaka' },\n { Value: 'Asia/Omsk', Text: '(UTC+06:00) Moscow+03 - Omsk' },\n { Value: 'Asia/Thimphu', Text: '(UTC+06:00) Thimphu' },\n { Value: 'Antarctica/Vostok', Text: '(UTC+06:00) Vostok' },\n { Value: 'Indian/Cocos', Text: '(UTC+06:30) Cocos' },\n { Value: 'Asia/Yangon', Text: '(UTC+06:30) Rangoon' },\n { Value: 'Asia/Bangkok', Text: '(UTC+07:00) Bangkok' },\n { Value: 'Indian/Christmas', Text: '(UTC+07:00) Christmas' },\n { Value: 'Antarctica/Davis', Text: '(UTC+07:00) Davis' },\n { Value: 'Asia/Saigon', Text: '(UTC+07:00) Hanoi' },\n { Value: 'Asia/Hovd', Text: '(UTC+07:00) Hovd' },\n { Value: 'Asia/Jakarta', Text: '(UTC+07:00) Jakarta' },\n { Value: 'Asia/Krasnoyarsk', Text: '(UTC+07:00) Moscow+04 - Krasnoyarsk' },\n { Value: 'Asia/Brunei', Text: '(UTC+08:00) Brunei' },\n { Value: 'Asia/Shanghai', Text: '(UTC+08:00) China Time - Beijing' },\n { Value: 'Asia/Choibalsan', Text: '(UTC+08:00) Choibalsan' },\n { Value: 'Asia/Hong_Kong', Text: '(UTC+08:00) Hong Kong' },\n { Value: 'Asia/Kuala_Lumpur', Text: '(UTC+08:00) Kuala Lumpur' },\n { Value: 'Asia/Macau', Text: '(UTC+08:00) Macau' },\n { Value: 'Asia/Makassar', Text: '(UTC+08:00) Makassar' },\n { Value: 'Asia/Manila', Text: '(UTC+08:00) Manila' },\n { Value: 'Asia/Irkutsk', Text: '(UTC+08:00) Moscow+05 - Irkutsk' },\n { Value: 'Asia/Singapore', Text: '(UTC+08:00) Singapore' },\n { Value: 'Asia/Taipei', Text: '(UTC+08:00) Taipei' },\n { Value: 'Asia/Ulaanbaatar', Text: '(UTC+08:00) Ulaanbaatar' },\n { Value: 'Australia/Perth', Text: '(UTC+08:00) Western Time - Perth' },\n { Value: 'Asia/Pyongyang', Text: '(UTC+08:30) Pyongyang' },\n { Value: 'Asia/Dili', Text: '(UTC+09:00) Dili' },\n { Value: 'Asia/Jayapura', Text: '(UTC+09:00) Jayapura' },\n { Value: 'Asia/Yakutsk', Text: '(UTC+09:00) Moscow+06 - Yakutsk' },\n { Value: 'Pacific/Palau', Text: '(UTC+09:00) Palau' },\n { Value: 'Asia/Seoul', Text: '(UTC+09:00) Seoul' },\n { Value: 'Asia/Tokyo', Text: '(UTC+09:00) Tokyo' },\n { Value: 'Australia/Darwin', Text: '(UTC+09:30) Central Time - Darwin' },\n { Value: 'Antarctica/DumontDUrville', Text: '(UTC+10:00) Dumont D\"Urville' },\n { Value: 'Australia/Brisbane', Text: '(UTC+10:00) Eastern Time - Brisbane' },\n { Value: 'Pacific/Guam', Text: '(UTC+10:00) Guam' },\n { Value: 'Asia/Vladivostok', Text: '(UTC+10:00) Moscow+07 - Vladivostok' },\n { Value: 'Pacific/Port_Moresby', Text: '(UTC+10:00) Port Moresby' },\n { Value: 'Pacific / Chuuk', Text: '(UTC+10:00) Truk' },\n { Value: 'Australia/Adelaide', Text: '(UTC+10:30) Central Time - Adelaide' },\n { Value: 'Antarctica/Casey', Text: '(UTC+11:00) Casey' },\n { Value: 'Australia/Hobart', Text: '(UTC+11:00) Eastern Time - Hobart' },\n { Value: 'Australia/Sydney', Text: '(UTC+11:00) Eastern Time - Melbourne, Sydney' },\n { Value: 'Pacific/Efate', Text: '(UTC+11:00) Efate' },\n { Value: 'Pacific/Guadalcanal', Text: '(UTC+11:00) Guadalcanal' },\n { Value: 'Pacific/Kosrae', Text: '(UTC+11:00) Kosrae' },\n { Value: 'Asia/Magadan', Text: '(UTC+11:00) Moscow+08 - Magadan' },\n { Value: 'Pacific / Norfolk', Text: '(UTC+11:00) Norfolk' },\n { Value: 'Pacific/Noumea', Text: '(UTC+11:00) Noumea' },\n { Value: 'Pacific/Pohnpei', Text: '(UTC+11:00) Ponape' },\n { Value: 'Pacific/Funafuti', Text: '(UTC+12:00) Funafuti' },\n { Value: 'Pacific/Kwajalein', Text: '(UTC+12:00) Kwajalein' },\n { Value: 'Pacific/Majuro', Text: '(UTC+12:00) Majuro' },\n { Value: 'Asia/Kamchatka', Text: '(UTC+12:00) Moscow+09 - Petropavlovsk - Kamchatskiy' },\n { Value: 'Pacific / Nauru', Text: '(UTC+12:00) Nauru' },\n { Value: 'Pacific/Tarawa', Text: '(UTC+12:00) Tarawa' },\n { Value: 'Pacific/Wake', Text: '(UTC+12:00) Wake' },\n { Value: 'Pacific/Wallis', Text: '(UTC+12:00) Wallis' },\n { Value: 'Pacific/Auckland', Text: '(UTC+13:00) Auckland' },\n { Value: 'Pacific/Enderbury', Text: '(UTC+13:00) Enderbury' },\n { Value: 'Pacific/Fakaofo', Text: '(UTC+13:00) Fakaofo' },\n { Value: 'Pacific/Fiji', Text: '(UTC+13:00) Fiji' },\n { Value: 'Pacific/Tongatapu', Text: '(UTC+13:00) Tongatapu' },\n { Value: 'Pacific/Apia', Text: '(UTC+14:00) Apia' },\n { Value: 'Pacific/Kiritimati', Text: '(UTC+14:00) Kiritimati' }\n];\n","import { isNullOrUndefined, closest, addClass, extend, EventHandler, removeClass } from '@syncfusion/ej2-base';\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data';\nimport { Timezone } from '../timezone/timezone';\nimport { generate } from '../../recurrence-editor/date-generator';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\nimport * as event from '../base/constant';\n/**\n * EventBase for appointment rendering\n */\nvar EventBase = /** @class */ (function () {\n /**\n * Constructor for EventBase\n */\n function EventBase(parent) {\n this.slots = [];\n this.parent = parent;\n this.timezone = new Timezone();\n }\n EventBase.prototype.processData = function (events, timeZonePropChanged, oldTimezone) {\n var start = this.parent.activeView.startDate();\n var end = this.parent.activeView.endDate();\n var fields = this.parent.eventFields;\n this.parent.eventsProcessed = [];\n var processed = [];\n var temp = 1;\n var generateID = false;\n if (events.length > 0 && isNullOrUndefined(events[0][fields.id])) {\n generateID = true;\n }\n for (var _i = 0, events_1 = events; _i < events_1.length; _i++) {\n var event_1 = events_1[_i];\n if (generateID) {\n event_1[fields.id] = temp++;\n }\n if (timeZonePropChanged) {\n this.processTimezoneChange(event_1, oldTimezone);\n }\n else {\n this.processTimezone(event_1);\n }\n if (!isNullOrUndefined(event_1[fields.recurrenceRule]) && isNullOrUndefined(event_1[fields.recurrenceID])) {\n processed = processed.concat(this.generateOccurrence(event_1));\n }\n else {\n event_1.Guid = this.generateGuid();\n processed.push(event_1);\n }\n }\n this.parent.eventsProcessed = this.filterEvents(start, end, processed);\n return processed;\n };\n EventBase.prototype.timezonePropertyChange = function (oldTimezone) {\n var processed = this.processData(this.parent.eventsData, true, oldTimezone);\n this.parent.notify(event.dataReady, { processedData: processed });\n };\n EventBase.prototype.processTimezoneChange = function (event, oldTimezone) {\n var fields = this.parent.eventFields;\n if (oldTimezone && this.parent.timezone) {\n event[fields.startTime] = this.timezone.convert(event[fields.startTime], oldTimezone, this.parent.timezone);\n event[fields.endTime] = this.timezone.convert(event[fields.endTime], oldTimezone, this.parent.timezone);\n }\n else if (!oldTimezone && this.parent.timezone) {\n event[fields.startTime] = this.timezone.add(event[fields.startTime], this.parent.timezone);\n event[fields.endTime] = this.timezone.add(event[fields.endTime], this.parent.timezone);\n }\n else if (oldTimezone && !this.parent.timezone) {\n event[fields.startTime] = this.timezone.remove(event[fields.startTime], oldTimezone);\n event[fields.endTime] = this.timezone.remove(event[fields.endTime], oldTimezone);\n }\n };\n EventBase.prototype.processTimezone = function (event) {\n var fields = this.parent.eventFields;\n if (event[fields.startTimezone] || event[fields.endTimezone]) {\n var startTimezone = event[fields.startTimezone] || event[fields.endTimezone];\n var endTimezone = event[fields.endTimezone] || event[fields.startTimezone];\n event[fields.startTime] = this.timezone.add(event[fields.startTime], startTimezone);\n event[fields.endTime] = this.timezone.add(event[fields.endTime], endTimezone);\n if (this.parent.timezone) {\n var zone = this.parent.timezone;\n event[fields.startTime] = this.timezone.convert(event[fields.startTime], startTimezone, zone);\n event[fields.endTime] = this.timezone.convert(event[fields.endTime], endTimezone, zone);\n }\n }\n else if (this.parent.timezone) {\n event[fields.startTime] = this.timezone.add(event[fields.startTime], this.parent.timezone);\n event[fields.endTime] = this.timezone.add(event[fields.endTime], this.parent.timezone);\n }\n };\n EventBase.prototype.filterEvents = function (startDate, endDate, collection) {\n var appointments = !isNullOrUndefined(collection) ? collection : this.parent.eventsProcessed;\n var fieldMapping = this.parent.eventFields;\n var predicate = new Predicate(fieldMapping.startTime, 'greaterthanorequal', startDate).\n and(new Predicate(fieldMapping.endTime, 'greaterthanorequal', startDate)).\n and(new Predicate(fieldMapping.startTime, 'lessthan', endDate)).\n or(new Predicate(fieldMapping.startTime, 'lessthanorequal', startDate).\n and(new Predicate(fieldMapping.endTime, 'greaterthan', startDate)));\n var filter = new DataManager({ json: appointments }).executeLocal(new Query().where(predicate));\n return this.sortByTime(filter);\n };\n EventBase.prototype.sortByTime = function (appointments) {\n var fieldMapping = this.parent.eventFields;\n appointments.sort(function (a, b) {\n var d1 = a[fieldMapping.startTime];\n var d2 = b[fieldMapping.startTime];\n return d1.getTime() - d2.getTime();\n });\n return appointments;\n };\n EventBase.prototype.sortByDateTime = function (appointments) {\n var fieldMapping = this.parent.eventFields;\n appointments.sort(function (object1, object2) {\n var d3 = object1[fieldMapping.startTime];\n var d4 = object2[fieldMapping.startTime];\n var d5 = object1[fieldMapping.endTime];\n var d6 = object2[fieldMapping.endTime];\n var d1 = d5.getTime() - d3.getTime();\n var d2 = d6.getTime() - d4.getTime();\n return (d3.getTime() - d4.getTime() || d2 - d1);\n });\n return appointments;\n };\n EventBase.prototype.getSmallestMissingNumber = function (array) {\n var large = Math.max.apply(Math, array);\n for (var i = 0; i < large; i++) {\n if (array.indexOf(i) === -1) {\n return i;\n }\n }\n return large + 1;\n };\n EventBase.prototype.splitEventByDay = function (event) {\n var eventFields = this.parent.eventFields;\n var data = [];\n var eventStartTime = event[eventFields.startTime];\n var eventEndTime = event[eventFields.endTime];\n var isDifferentDate = util.resetTime(new Date(eventStartTime.getTime())) <\n util.resetTime(new Date(eventEndTime.getTime()));\n if (isDifferentDate) {\n var start = new Date(eventStartTime.getTime());\n var end = util.addDays(util.resetTime(new Date(eventStartTime.getTime())), 1);\n var endDate = (eventEndTime.getHours() === 0 && eventEndTime.getMinutes() === 0) ?\n eventEndTime : util.addDays(eventEndTime, 1);\n var index = 1;\n var eventLength = util.getDaysCount(eventStartTime.getTime(), endDate.getTime());\n while (end <= eventEndTime) {\n var app = extend({}, event);\n app[eventFields.startTime] = start;\n app[eventFields.endTime] = end;\n app.data = { index: index, count: eventLength };\n app.Guid = this.generateGuid();\n app.isSpanned = true;\n data.push(app);\n start = end;\n if ((new Date(start.getTime()).setHours(0, 0, 0, 0) === new Date(eventEndTime.getTime()).setHours(0, 0, 0, 0))\n && !(end.getTime() === eventEndTime.getTime())) {\n end = new Date(new Date(start.getTime()).setHours(eventEndTime.getHours(), eventEndTime.getMinutes()));\n }\n else {\n end = util.addDays(util.resetTime(new Date(start.getTime())), 1);\n }\n index++;\n }\n }\n else {\n data.push(event);\n }\n return data;\n };\n EventBase.prototype.splitEvent = function (event, dateRender) {\n var fields = this.parent.eventFields;\n var start = util.resetTime(new Date(event[fields.startTime] + '')).getTime();\n var end = util.resetTime(new Date(event[fields.endTime] + '')).getTime();\n if (util.getDateInMs(event[fields.endTime]) <= 0) {\n var temp = util.addDays(util.resetTime(new Date(event[fields.endTime] + '')), -1).getTime();\n end = start > temp ? start : temp;\n }\n var orgStart = start;\n var orgEnd = end;\n var ranges = [];\n if (start !== end) {\n if (start < dateRender[0].getTime()) {\n start = dateRender[0].getTime();\n }\n if (end > dateRender[dateRender.length - 1].getTime()) {\n end = dateRender[dateRender.length - 1].getTime();\n }\n var cStart = start;\n for (var level = 0; level < this.slots.length; level++) {\n var slot = this.slots[level];\n var firstSlot = slot[0];\n cStart = (cStart <= firstSlot && end >= firstSlot) ? firstSlot : cStart;\n if (cStart > end || firstSlot > end) {\n break;\n }\n if (this.parent.activeViewOptions.showWeekend && this.parent.currentView !== 'WorkWeek') {\n var startIndex = slot.indexOf(cStart);\n if (startIndex !== -1) {\n var endIndex = slot.indexOf(end);\n var hasBreak = endIndex !== -1;\n endIndex = hasBreak ? endIndex : slot.length - 1;\n var count = ((endIndex - startIndex) + 1);\n var isLeft = (slot[startIndex] !== orgStart);\n var isRight = (slot[endIndex] !== orgEnd);\n ranges.push(this.cloneEventObject(event, slot[startIndex], slot[endIndex], count, isLeft, isRight));\n if (hasBreak) {\n break;\n }\n }\n }\n else {\n if (this.dateInRange(cStart, slot[0], slot[slot.length - 1])) {\n var availSlot = [];\n for (var i = 0; i < slot.length; i++) {\n if (this.dateInRange(slot[i], orgStart, orgEnd)) {\n availSlot.push(slot[i]);\n }\n }\n if (availSlot.length > 0) {\n var cnt = availSlot.length;\n var isLeft = (availSlot[0] !== orgStart);\n var isRight = (availSlot[availSlot.length - 1] !== orgEnd);\n ranges.push(this.cloneEventObject(event, availSlot[0], availSlot[availSlot.length - 1], cnt, isLeft, isRight));\n }\n }\n }\n }\n }\n else {\n ranges.push(this.cloneEventObject(event, start, end, 1, false, false));\n }\n return ranges;\n };\n EventBase.prototype.cloneEventObject = function (event, start, end, count, isLeft, isRight) {\n var fields = this.parent.eventFields;\n var e = extend({}, event, null, true);\n var data = { count: count, isLeft: isLeft, isRight: isRight };\n data[fields.startTime] = event[fields.startTime];\n data[fields.endTime] = event[fields.endTime];\n e.data = data;\n e[fields.startTime] = new Date(start);\n e[fields.endTime] = new Date(end);\n return e;\n };\n EventBase.prototype.dateInRange = function (date, start, end) {\n return start <= date && date <= end;\n };\n EventBase.prototype.getSelectedEventElements = function (target) {\n this.removeSelectedAppointmentClass();\n if (this.parent.selectedElements.length <= 0) {\n this.parent.selectedElements.push(target);\n }\n else {\n var isAlreadySelected = this.parent.selectedElements.filter(function (element) {\n return element.getAttribute('data-guid') === target.getAttribute('data-guid');\n });\n if (isAlreadySelected.length <= 0) {\n var focusElements = [].slice.call(this.parent.element.\n querySelectorAll('div[data-guid=\"' + target.getAttribute('data-guid') + '\"]'));\n for (var _i = 0, focusElements_1 = focusElements; _i < focusElements_1.length; _i++) {\n var element = focusElements_1[_i];\n this.parent.selectedElements.push(element);\n }\n }\n else {\n var selectedElements = this.parent.selectedElements.filter(function (element) {\n return element.getAttribute('data-guid') !== target.getAttribute('data-guid');\n });\n this.parent.selectedElements = selectedElements;\n }\n }\n if (target && this.parent.selectedElements.length > 0) {\n this.addSelectedAppointments(this.parent.selectedElements, this.parent.selectedElements[0]);\n }\n return this.parent.selectedElements;\n };\n EventBase.prototype.getSelectedEvents = function () {\n var _this = this;\n var eventSelect = [];\n var elementSelect = [];\n var selectAppointments = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_BORDER));\n selectAppointments.filter(function (element, index, selectAppointments) {\n eventSelect.push(_this.getEventByGuid(element.getAttribute('data-guid')));\n elementSelect.push(element);\n });\n return {\n event: eventSelect.length > 1 ? eventSelect : eventSelect[0],\n element: elementSelect.length > 1 ? elementSelect : elementSelect[0]\n };\n };\n EventBase.prototype.removeSelectedAppointmentClass = function () {\n var selectedAppointments = this.getSelectedAppointments();\n for (var _i = 0, selectedAppointments_1 = selectedAppointments; _i < selectedAppointments_1.length; _i++) {\n var appointment = selectedAppointments_1[_i];\n appointment.setAttribute('aria-selected', 'false');\n }\n removeClass(selectedAppointments, cls.APPOINTMENT_BORDER);\n };\n EventBase.prototype.addSelectedAppointments = function (cells, focusCell) {\n for (var _i = 0, cells_1 = cells; _i < cells_1.length; _i++) {\n var cell = cells_1[_i];\n cell.setAttribute('aria-selected', 'true');\n }\n addClass(cells, cls.APPOINTMENT_BORDER);\n };\n EventBase.prototype.getSelectedAppointments = function () {\n return [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_BORDER + ',.' + cls.APPOINTMENT_CLASS + ':focus'));\n };\n EventBase.prototype.focusElement = function () {\n var selectedCell = this.parent.getSelectedElements();\n if (selectedCell.length > 0) {\n if (this.parent.keyboardInteractionModule) {\n var target = (this.parent.activeCellsData.element ||\n selectedCell[selectedCell.length - 1]);\n this.parent.keyboardInteractionModule.selectCells(false, target);\n }\n return;\n }\n var selectedAppointments = this.getSelectedAppointments();\n if (selectedAppointments.length > 0) {\n selectedAppointments[selectedAppointments.length - 1].focus();\n return;\n }\n };\n EventBase.prototype.selectWorkCellByTime = function (eventsData) {\n var target;\n if (this.parent.currentView === 'Agenda' || this.parent.currentView === 'MonthAgenda') {\n return target;\n }\n if (eventsData.length > 0) {\n var selectedObject = eventsData[eventsData.length - 1];\n var eventStartTime = selectedObject[this.parent.eventFields.startTime];\n var nearestTime = new Date(+eventStartTime).setMinutes(0, 0, 0);\n var isAllDay = this.isAllDayAppointment(selectedObject);\n if (this.parent.currentView === 'Month' || isAllDay) {\n nearestTime = new Date(+eventStartTime).setHours(0, 0, 0, 0);\n }\n var targetArea = void 0;\n if (isAllDay && ['Day', 'Week', 'WorkWeek'].indexOf(this.parent.currentView) !== -1) {\n targetArea = this.parent.getAllDayRow();\n }\n else {\n targetArea = this.parent.getContentTable();\n }\n target = targetArea.querySelector('[data-date=\"' + nearestTime + '\"]');\n if (target) {\n this.parent.activeCellsData = this.parent.getCellDetails(target);\n if (this.parent.keyboardInteractionModule) {\n this.parent.keyboardInteractionModule.selectCells(false, target);\n }\n return target;\n }\n }\n return target;\n };\n EventBase.prototype.isAllDayAppointment = function (event) {\n var fieldMapping = this.parent.eventFields;\n var isAllDay = event[fieldMapping.isAllDay];\n var isFullDay = ((event[fieldMapping.endTime].getTime() - event[fieldMapping.startTime].getTime())\n / util.MS_PER_DAY) >= 1;\n return (isAllDay || isFullDay) ? true : false;\n };\n EventBase.prototype.addEventListener = function () {\n this.parent.on(event.documentClick, this.appointmentBorderRemove, this);\n };\n EventBase.prototype.appointmentBorderRemove = function (event) {\n var target = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n var element = event.event.target;\n if (closest(element, '.' + cls.APPOINTMENT_CLASS)) {\n this.parent.removeSelectedClass();\n }\n else if (!closest(element, '.' + cls.POPUP_OPEN)) {\n this.removeSelectedAppointmentClass();\n }\n };\n EventBase.prototype.wireAppointmentEvents = function (element) {\n EventHandler.add(element, 'click', this.eventClick, this);\n EventHandler.add(element, 'dblclick', this.eventDoubleClick, this);\n };\n EventBase.prototype.eventClick = function (eventData) {\n if (eventData.ctrlKey && eventData.which === 1 && this.parent.keyboardInteractionModule) {\n this.parent.selectedElements = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_BORDER));\n this.parent.keyboardInteractionModule.onAppointmentSelection(eventData);\n return;\n }\n this.removeSelectedAppointmentClass();\n this.activeEventData(eventData);\n var args = extend(this.parent.activeEventData, { cancel: false });\n this.parent.trigger(event.eventClick, args);\n if (args.cancel) {\n this.removeSelectedAppointmentClass();\n return;\n }\n this.parent.notify(event.eventClick, this.parent.activeEventData);\n };\n EventBase.prototype.eventDoubleClick = function (e) {\n this.parent.quickPopup.quickPopup.animation = { close: { effect: 'None' } };\n this.parent.quickPopup.quickPopup.close();\n if (e.type === 'touchstart') {\n this.activeEventData(e);\n }\n this.removeSelectedAppointmentClass();\n var fieldMapping = this.parent.eventFields;\n if (!isNullOrUndefined(this.parent.activeEventData.event) &&\n isNullOrUndefined(this.parent.activeEventData.event[fieldMapping.recurrenceID])) {\n this.parent.currentAction = 'Save';\n this.parent.eventWindow.openEditor(this.parent.activeEventData.event, 'Save');\n }\n else {\n this.parent.currentAction = 'EditOccurrence';\n this.parent.quickPopup.openRecurrenceAlert();\n }\n };\n EventBase.prototype.getEventByGuid = function (guid) {\n return new DataManager({ json: this.parent.eventsProcessed }).executeLocal(new Query().where('Guid', 'equal', guid))[0];\n };\n EventBase.prototype.generateGuid = function () {\n return 'xyxxxxyx-xxxy-yxxx-xyxx-xxyxxxxyyxxx'.replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0;\n var v = (c === 'x') ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n };\n EventBase.prototype.getEventMaxId = function () {\n var fields = this.parent.eventFields;\n if (this.parent.eventsData.length < 1) {\n return 0;\n }\n return Math.max.apply(Math, this.parent.eventsData.map(function (event) { return event[fields.id]; }));\n };\n EventBase.prototype.activeEventData = function (eventData) {\n var target = closest(eventData.target, '.' + cls.APPOINTMENT_CLASS);\n var guid = target.getAttribute('data-guid');\n this.addSelectedAppointments([].slice.call(this.parent.element.querySelectorAll('div[data-guid=\"' + guid + '\"]')));\n var eventObject = this.getEventByGuid(guid);\n if (eventObject.isSpanned) {\n var fields_1 = this.parent.eventFields;\n eventObject = this.parent.eventsData.filter(function (obj) {\n return obj[fields_1.id] === eventObject[fields_1.id];\n })[0];\n }\n this.parent.activeEventData = { event: eventObject, element: target };\n };\n EventBase.prototype.generateOccurrence = function (event, viewDate) {\n var fields = this.parent.eventFields;\n var startDate = event[fields.startTime];\n var endDate = event[fields.endTime];\n var occurrenceCollection = [];\n var currentViewDate = isNullOrUndefined(viewDate) ? this.parent.activeView.startDate() : viewDate;\n var dates = generate(startDate, event[fields.recurrenceRule], event[fields.recurrenceException], this.parent.firstDayOfWeek, undefined, currentViewDate);\n var date = dates.shift();\n var duration = endDate.getTime() - startDate.getTime();\n while (date) {\n var clonedObject = extend({}, event, null, true);\n clonedObject[fields.startTime] = new Date(date);\n clonedObject[fields.endTime] = new Date(new Date(date).setMilliseconds(duration));\n clonedObject[fields.recurrenceID] = clonedObject[fields.id];\n clonedObject.Guid = this.generateGuid();\n occurrenceCollection.push(clonedObject);\n date = dates.shift();\n }\n return occurrenceCollection;\n };\n EventBase.prototype.getRecurrenceEvent = function (eventData) {\n var eventFields = this.parent.eventFields;\n var parentApp = new DataManager(this.parent.eventsData).\n executeLocal(new Query().where(eventFields.id, 'equal', eventData[eventFields.recurrenceID]));\n return parentApp[0];\n };\n EventBase.prototype.getOccurrencesByID = function (id) {\n var fields = this.parent.eventFields;\n var occurrenceCollection = [];\n var parentObject = this.parent.eventsData.filter(function (obj) { return obj[fields.id] === id; });\n for (var _i = 0, _a = parentObject; _i < _a.length; _i++) {\n var event_2 = _a[_i];\n if (!isNullOrUndefined(event_2[fields.recurrenceRule])) {\n occurrenceCollection = occurrenceCollection.concat(this.generateOccurrence(event_2));\n }\n }\n return occurrenceCollection;\n };\n EventBase.prototype.getOccurrencesByRange = function (startTime, endTime) {\n var fields = this.parent.eventFields;\n var occurrenceCollection = [];\n for (var _i = 0, _a = this.parent.eventsData; _i < _a.length; _i++) {\n var event_3 = _a[_i];\n if (!isNullOrUndefined(event_3[fields.recurrenceRule])) {\n occurrenceCollection = occurrenceCollection.concat(this.generateOccurrence(event_3));\n }\n }\n var filter = occurrenceCollection.filter(function (obj) {\n return obj[fields.startTime] >= startTime && obj[fields.endTime] <= endTime && !isNullOrUndefined(obj[fields.recurrenceID]);\n });\n return filter;\n };\n return EventBase;\n}());\nexport { EventBase };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Query, DataManager, Predicate } from '@syncfusion/ej2-data';\nimport { getRecurrenceStringFromDate } from '../../recurrence-editor/date-generator';\nimport * as events from '../base/constant';\nimport { Timezone } from '../timezone/timezone';\n/**\n * Schedule CRUD operations\n */\nvar Crud = /** @class */ (function () {\n function Crud(parent) {\n this.parent = parent;\n this.timezone = new Timezone();\n }\n Crud.prototype.getQuery = function () {\n var start = this.parent.activeView.startDate();\n var end = this.parent.activeView.endDate();\n return this.parent.dataModule.generateQuery(start, end);\n };\n Crud.prototype.refreshData = function (args) {\n var _this = this;\n var actionArgs = { requestType: args.requestType, cancel: false, data: args.data };\n if (this.parent.dataModule.dataManager.dataSource.offline) {\n this.parent.trigger(events.actionComplete, actionArgs);\n this.parent.renderModule.refreshDataManager();\n return;\n }\n else {\n args.promise.then(function (e) {\n if (_this.parent.isDestroyed) {\n return;\n }\n _this.parent.trigger(events.actionComplete, actionArgs);\n if (actionArgs.cancel) {\n return;\n }\n _this.parent.renderModule.refreshDataManager();\n }).catch(function (e) {\n if (_this.parent.isDestroyed) {\n return;\n }\n _this.parent.trigger(events.actionFailure, { error: e });\n });\n }\n };\n Crud.prototype.addEvent = function (eventData) {\n var fields = this.parent.eventFields;\n var promise = null;\n var editParms = { addedRecords: [], changedRecords: [], deletedRecords: [] };\n var args = { requestType: 'eventCreate', cancel: false, data: eventData };\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n if (eventData instanceof Array) {\n for (var _i = 0, _a = eventData; _i < _a.length; _i++) {\n var event_1 = _a[_i];\n this.processCrudTimezone(event_1);\n editParms.addedRecords.push(event_1);\n }\n promise = this.parent.dataModule.dataManager.saveChanges(editParms, fields.id, null, this.getQuery());\n }\n else {\n this.processCrudTimezone(eventData);\n promise = this.parent.dataModule.dataManager.insert(eventData, null, this.getQuery());\n }\n var crudArgs = { requestType: 'eventCreated', cancel: false, data: eventData, promise: promise };\n this.refreshData(crudArgs);\n };\n Crud.prototype.saveEvent = function (event, action) {\n var fields = this.parent.eventFields;\n var promise = null;\n var editParms = { addedRecords: [], changedRecords: [], deletedRecords: [] };\n var args = { requestType: 'eventChange', cancel: false };\n var dataObj = [];\n (event instanceof Array) ? dataObj = event : dataObj.push(event);\n var data = event;\n if (isNullOrUndefined(action)) {\n args.data = data;\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n this.processCrudTimezone(data);\n promise = this.parent.dataModule.dataManager.update(fields.id, event, null, this.getQuery());\n }\n else {\n var parentEvent = this.parent.eventBase.getRecurrenceEvent(data);\n switch (action) {\n case 'EditOccurrence':\n args.data = { occurrence: event, parent: parentEvent };\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n var exDate = this.excludeDateCheck(data[fields.startTime], parentEvent[fields.recurrenceException]);\n if (exDate !== parentEvent[fields.recurrenceException]) {\n parentEvent[fields.recurrenceException] = exDate;\n data[fields.recurrenceID] = parentEvent[fields.id];\n this.processCrudTimezone(parentEvent);\n editParms.changedRecords.push(parentEvent);\n this.processCrudTimezone(data);\n editParms.addedRecords.push(data);\n }\n else {\n this.processCrudTimezone(data);\n editParms.changedRecords.push(data);\n }\n break;\n case 'EditSeries':\n args.data = data;\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n var delApp = new DataManager(this.parent.eventsData).\n executeLocal(new Query().where(fields.recurrenceID, 'equal', parentEvent[fields.id]));\n data[fields.id] = parentEvent[fields.id];\n data[fields.recurrenceException] = null;\n data[fields.recurrenceID] = null;\n this.processCrudTimezone(data);\n editParms.changedRecords.push(data);\n for (var _i = 0, delApp_1 = delApp; _i < delApp_1.length; _i++) {\n var event_2 = delApp_1[_i];\n editParms.deletedRecords.push(event_2);\n }\n break;\n }\n promise = this.parent.dataModule.dataManager.saveChanges(editParms, fields.id, null, this.getQuery());\n }\n this.parent.eventBase.selectWorkCellByTime(dataObj);\n var crudArgs = { requestType: 'eventChanged', cancel: false, data: args.data, promise: promise };\n this.refreshData(crudArgs);\n };\n Crud.prototype.deleteEvent = function (id, action) {\n var fields = this.parent.eventFields;\n var editParms = { addedRecords: [], changedRecords: [], deletedRecords: [] };\n var dataObj = [];\n var normalEvent = [];\n var recEvent = [];\n switch (typeof id) {\n case 'string':\n case 'number':\n dataObj = new DataManager(this.parent.eventsData).\n executeLocal(new Query().where(fields.id, 'equal', id));\n break;\n case 'object':\n (id instanceof Array) ? dataObj = id : dataObj.push(id);\n break;\n }\n for (var _i = 0, dataObj_1 = dataObj; _i < dataObj_1.length; _i++) {\n var event_3 = dataObj_1[_i];\n (!isNullOrUndefined(event_3[fields.recurrenceRule])) ? recEvent.push(event_3) : normalEvent.push(event_3);\n }\n var args = { requestType: 'eventRemove', cancel: false };\n if (action !== 'DeleteOccurrence') {\n args.data = dataObj;\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n }\n if (isNullOrUndefined(action) || normalEvent.length > 0) {\n for (var _a = 0, normalEvent_1 = normalEvent; _a < normalEvent_1.length; _a++) {\n var event_4 = normalEvent_1[_a];\n editParms.deletedRecords.push(event_4);\n }\n }\n if (recEvent.length > 0) {\n switch (action) {\n case 'Delete':\n case 'DeleteOccurrence':\n for (var i = 0; i < recEvent.length; i++) {\n var parentEvent = this.parent.eventBase.getRecurrenceEvent(recEvent[i]);\n args.data = { occurrence: recEvent[i], parent: parentEvent };\n this.parent.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n parentEvent[fields.recurrenceException] =\n this.excludeDateCheck(recEvent[i][fields.startTime], parentEvent[fields.recurrenceException]);\n this.processCrudTimezone(parentEvent);\n editParms.changedRecords.push(parentEvent);\n if (recEvent[i][fields.id] !== parentEvent[fields.id]) {\n editParms.deletedRecords.push(recEvent[i]);\n }\n }\n break;\n case 'DeleteSeries':\n for (var _b = 0, recEvent_1 = recEvent; _b < recEvent_1.length; _b++) {\n var app = recEvent_1[_b];\n var predicate = new Predicate(fields.id, 'equal', app[fields.recurrenceID]).\n or(new Predicate(fields.recurrenceID, 'equal', app[fields.recurrenceID]));\n var delApp = new DataManager(this.parent.eventsData).executeLocal(new Query().where(predicate));\n for (var _c = 0, delApp_2 = delApp; _c < delApp_2.length; _c++) {\n var event_5 = delApp_2[_c];\n editParms.deletedRecords.push(event_5);\n }\n editParms.deletedRecords.push(app);\n }\n break;\n }\n }\n var promise;\n promise = this.parent.dataModule.dataManager.saveChanges(editParms, fields.id, null, this.getQuery());\n this.parent.eventBase.selectWorkCellByTime(dataObj);\n var crudArgs = { requestType: 'eventRemoved', cancel: false, data: args.data, promise: promise };\n this.refreshData(crudArgs);\n };\n Crud.prototype.processCrudTimezone = function (events) {\n var fields = this.parent.eventFields;\n if (events[fields.startTimezone] || events[fields.endTimezone]) {\n var startTimezone = events[fields.startTimezone] || events[fields.endTimezone];\n var endTimezone = events[fields.endTimezone] || events[fields.startTimezone];\n if (this.parent.timezone) {\n var zone = this.parent.timezone;\n events[fields.startTime] = this.timezone.convert(events[fields.startTime], startTimezone, zone);\n events[fields.endTime] = this.timezone.convert(events[fields.endTime], endTimezone, zone);\n events[fields.startTime] = this.timezone.remove(events[fields.startTime], zone);\n events[fields.endTime] = this.timezone.remove(events[fields.endTime], zone);\n }\n else {\n events[fields.startTime] = this.timezone.remove(events[fields.startTime], startTimezone);\n events[fields.endTime] = this.timezone.remove(events[fields.endTime], endTimezone);\n }\n }\n else if (this.parent.timezone) {\n events[fields.startTime] = this.timezone.remove(events[fields.startTime], this.parent.timezone);\n events[fields.endTime] = this.timezone.remove(events[fields.endTime], this.parent.timezone);\n }\n };\n Crud.prototype.excludeDateCheck = function (eventStartTime, exceptionDateList) {\n var exDate = getRecurrenceStringFromDate(eventStartTime);\n if (!isNullOrUndefined(exceptionDateList)) {\n if (exceptionDateList.indexOf(exDate) === -1) {\n exceptionDateList = !(isNullOrUndefined(exceptionDateList)) ? exceptionDateList + ',' + exDate : exDate;\n }\n }\n else {\n exceptionDateList = exDate;\n }\n return exceptionDateList;\n };\n return Crud;\n}());\nexport { Crud };\n","import { createElement, remove } from '@syncfusion/ej2-base';\nimport { FormValidator } from '@syncfusion/ej2-inputs';\nimport * as cls from '../base/css-constant';\n/**\n * Appointment window field validation\n */\nvar FieldValidator = /** @class */ (function () {\n function FieldValidator(parent) {\n this.parent = parent;\n }\n FieldValidator.prototype.renderFormValidator = function (form, rules) {\n var _this = this;\n this.formObj = new FormValidator(form, {\n customPlacement: function (inputElement, error) {\n _this.errorPlacement(inputElement, error);\n },\n rules: rules,\n validationComplete: function (args) {\n _this.validationComplete(args);\n }\n });\n };\n FieldValidator.prototype.validationComplete = function (args) {\n var elem = document.querySelector('#' + args.inputName + '_Error');\n if (elem) {\n if (args.status === 'failure') {\n elem.style.display = '';\n }\n else {\n elem.style.display = 'none';\n }\n }\n };\n FieldValidator.prototype.errorPlacement = function (inputElement, error) {\n var id = error.getAttribute('for');\n var elem = document.querySelector('#' + id + '_Error');\n if (!elem) {\n this.createTooltip(inputElement, error, id, '');\n }\n };\n FieldValidator.prototype.createTooltip = function (element, error, name, display) {\n var dlgContent;\n var client;\n var inputClient = element.getBoundingClientRect();\n var quickPopupElement = document.querySelector('.' + cls.QUICK_POPUP_ROOT_CLASS);\n if (quickPopupElement) {\n dlgContent = quickPopupElement.querySelector('.' + cls.QUICK_POPUP_CLASS);\n client = dlgContent.getBoundingClientRect();\n }\n else {\n dlgContent = document.querySelector('.e-schedule-dialog .e-dlg-content');\n client = dlgContent.getBoundingClientRect();\n }\n var div = createElement('div', {\n className: 'e-tooltip-wrap e-popup ' + cls.ERROR_VALIDATION_CLASS,\n id: name + '_Error',\n styles: 'display:' + display + ';top:' +\n (inputClient.bottom - client.top + dlgContent.scrollTop + 9) + 'px;left:' +\n (inputClient.left - client.left + dlgContent.scrollLeft + inputClient.width / 2) + 'px;'\n });\n var content = createElement('div', { className: 'e-tip-content' });\n content.appendChild(error);\n var arrow = createElement('div', { className: 'e-arrow-tip e-tip-top' });\n arrow.appendChild(createElement('div', { className: 'e-arrow-tip-outer e-tip-top' }));\n arrow.appendChild(createElement('div', { className: 'e-arrow-tip-inner e-tip-top' }));\n div.appendChild(content);\n div.appendChild(arrow);\n dlgContent.appendChild(div);\n div.style.left = (parseInt(div.style.left, 10) - div.offsetWidth / 2) + 'px';\n };\n FieldValidator.prototype.destroyToolTip = function () {\n var elements = [].slice.call(document.querySelectorAll('.' + cls.ERROR_VALIDATION_CLASS));\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var elem = elements_1[_i];\n remove(elem);\n }\n this.formObj.reset();\n };\n /**\n * @hidden\n */\n FieldValidator.prototype.destroyForm = function () {\n if (this.formObj && !this.formObj.isDestroyed) {\n this.formObj.destroy();\n }\n };\n return FieldValidator;\n}());\nexport { FieldValidator };\n","import { compile, closest, EventHandler, isNullOrUndefined, formatUnit } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, createElement, remove, extend } from '@syncfusion/ej2-base';\nimport { Dialog, Popup, Tooltip } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { Crud } from '../actions/crud';\nimport { timezoneData } from '../timezone/timezone';\nimport { FieldValidator } from './form-validator';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\nimport * as util from '../base/util';\nvar moreEventHeight = 20;\n/**\n * Quick Popups interactions\n */\nvar QuickPopups = /** @class */ (function () {\n /**\n * Constructor for QuickPopups\n */\n function QuickPopups(parent) {\n this.isMultipleEventSelect = false;\n this.parent = parent;\n this.l10n = this.parent.localeObj;\n this.crudAction = new Crud(parent);\n this.fieldValidator = new FieldValidator(this.parent);\n this.render();\n this.addEventListener();\n }\n QuickPopups.prototype.render = function () {\n this.renderQuickPopup();\n this.renderQuickDialog();\n this.renderMoreEventPopup();\n this.renderEventPopup();\n };\n QuickPopups.prototype.renderQuickPopup = function () {\n this.quickPopup = new Tooltip({\n animation: { open: { effect: 'FadeIn' }, close: { effect: 'FadeOut' } },\n afterOpen: this.afterQuickPopupOpen.bind(this),\n beforeOpen: this.beforeQuickPopupOpen.bind(this),\n beforeClose: this.beforeQuickPopupClose.bind(this),\n afterClose: this.afterQuickPopupClose.bind(this),\n cssClass: cls.QUICK_POPUP_ROOT_CLASS,\n enableRtl: this.parent.enableRtl, isSticky: true,\n opensOn: 'Custom',\n showTipPointer: false\n });\n this.quickPopup.appendTo(this.parent.element);\n this.primaryButton = new Button({\n cssClass: 'e-primary',\n disabled: this.parent.activeViewOptions.readonly,\n enableRtl: this.parent.enableRtl\n });\n this.flatButton = new Button({\n cssClass: 'e-flat',\n disabled: this.parent.activeViewOptions.readonly,\n enableRtl: this.parent.enableRtl\n });\n };\n QuickPopups.prototype.renderQuickDialog = function () {\n this.quickDialog = new Dialog({\n animationSettings: { effect: 'Zoom' },\n buttons: [\n { buttonModel: { isPrimary: true }, click: this.dialogButtonClick.bind(this) },\n { buttonModel: { isPrimary: false }, click: this.dialogButtonClick.bind(this) }\n ],\n cssClass: cls.QUICK_DIALOG_CLASS,\n closeOnEscape: true,\n enableRtl: this.parent.enableRtl,\n beforeClose: this.beforeQuickDialogClose.bind(this),\n isModal: true,\n position: { X: 'center', Y: 'center' },\n showCloseIcon: true,\n target: document.body,\n visible: false,\n width: 'auto'\n });\n var dialogElement = createElement('div', { id: this.parent.element.id + 'QuickDialog' });\n this.parent.element.appendChild(dialogElement);\n this.quickDialog.appendTo(dialogElement);\n };\n QuickPopups.prototype.renderMoreEventPopup = function () {\n var moreEventWrapper = createElement('div', { className: cls.MORE_POPUP_WRAPPER_CLASS + ' e-popup-close' });\n this.parent.element.appendChild(moreEventWrapper);\n var moreEventHeader = '
    ' +\n '
    ' +\n '
    ' +\n '
    ';\n var moreEventArgs = {\n classList: [\n cls.MORE_EVENT_POPUP_CLASS, cls.MORE_EVENT_HEADER_CLASS, cls.MORE_EVENT_DATE_HEADER_CLASS,\n cls.MORE_EVENT_HEADER_DAY_CLASS, cls.MORE_EVENT_HEADER_DATE_CLASS + ' ' + cls.NAVIGATE_CLASS, cls.MORE_EVENT_CLOSE_CLASS\n ],\n l10n: { close: this.l10n.getConstant('close'), noTitle: this.l10n.getConstant('noTitle') }\n };\n var moreEventContent = compile(moreEventHeader)(moreEventArgs)[0];\n this.morePopup = new Popup(moreEventWrapper, {\n targetType: 'relative',\n content: moreEventContent,\n enableRtl: this.parent.enableRtl,\n hideAnimation: { name: 'ZoomOut', duration: 300 },\n showAnimation: { name: 'ZoomIn', duration: 300 },\n open: this.afterMorePopupOpen.bind(this),\n close: this.afterMorePopupClose.bind(this),\n collision: { X: 'flip', Y: 'flip' },\n viewPortElement: this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS),\n zIndex: 10\n });\n var closeButton = new Button({ iconCss: 'e-icons e-close-icon', cssClass: 'e-round', isPrimary: false });\n closeButton.appendTo(moreEventContent.querySelector('.' + cls.MORE_EVENT_CLOSE_CLASS));\n EventHandler.add(moreEventContent.querySelector('.' + cls.MORE_EVENT_CLOSE_CLASS), 'click', this.closeClick, this);\n EventHandler.add(moreEventContent.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS), 'click', this.dayNavigationClick, this);\n };\n QuickPopups.prototype.dayNavigationClick = function (e) {\n var navigateEle = closest(e.target, '.' + cls.NAVIGATE_CLASS);\n if (!isNullOrUndefined(navigateEle)) {\n var date = this.parent.getDateFromElement(e.currentTarget);\n if (!isNullOrUndefined(date) && !this.parent.isAdaptive) {\n this.closeClick();\n this.parent.setProperties({ selectedDate: date }, true);\n this.parent.changeView('Day');\n }\n }\n };\n QuickPopups.prototype.renderEventPopup = function () {\n var viewHeight = document.body.offsetHeight;\n var toolBarHeight = this.parent.element.querySelector('.' + cls.TOOLBAR_CONTAINER);\n var eventWrapper = createElement('div', {\n className: cls.SELECT_POPUP_WRAPPER_CLASS + ' e-popup-close'\n });\n this.parent.element.appendChild(eventWrapper);\n var eventTemplate = '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ';\n var eventSelectTemplate = '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ';\n var eventArgs = {\n classList: [\n cls.QUICK_POPUP_CLASS, cls.QUICK_POPUP_TABLE_CLASS, cls.SELECTED_EVENT_CLOSE_CLASS,\n cls.SELECTED_EVENT_EDIT_CLASS, cls.SELECTED_EVENT_DELETE_CLASS, cls.ICON,\n cls.QUICK_POPUP_EVENT_TITLE_CLASS, cls.QUICK_POPUP_TEXT_ALIGN_CLASS, cls.QUICK_POPUP_DATE_TIME_DETAILS_CLASS,\n cls.QUICK_POPUP_CONTENT_CLASS, cls.SELECTED_DATE_TIME_CLASS, cls.APPOINTMENT_TIME, cls.SELECTED_EVENT_TITLE_CLASS,\n cls.SELECTED_EVENT_CONTAINER_CLASS, cls.APPOINTMENT_LOCATION, cls.SELECTED_CALENDER_CLASS,\n cls.QUICK_POPUP_LOCATION_DETAILS_CLASS, cls.EVENT_WINDOW_TZ_CLASS, cls.EVENT_TIME_ZONE_CLASS,\n cls.EVENT_ZONE_DETAILS_CLASS, cls.EVENT_DETAILS_CLASS, cls.EVENT_NOTE_CLASS, cls.EVENT_NOTE_DETAILS_CLASS,\n cls.QUICK_POPUP_ICON_CLASS, cls.QUICK_POPUP_CLOSE_ICON_CLASS, cls.QUICK_POPUP_EDIT_ICON_CLASS,\n cls.DEVICE_DATE_TIME_DETAILS_CLASS, cls.DEVICE_RECURRENCE_SUMMARY_CLASS\n ],\n id: this.parent.element.id,\n l10n: {\n close: this.l10n.getConstant('closeButton'),\n delete: this.l10n.getConstant('delete'),\n editSeries: this.l10n.getConstant('editSeries'),\n editEvent: this.l10n.getConstant('editEvent')\n }\n };\n this.selectedEventPopup = compile(eventTemplate)(eventArgs)[0];\n this.multipleEventPopup = compile(eventSelectTemplate)(eventArgs)[0];\n this.eventPopup = new Popup(eventWrapper, {\n targetType: 'relative',\n content: this.selectedEventPopup,\n collision: { X: 'fit', Y: 'fit' },\n enableRtl: this.parent.enableRtl,\n hideAnimation: { name: 'ZoomOut' },\n showAnimation: { name: 'ZoomIn' },\n relateTo: document.body\n });\n eventWrapper.querySelector('.' + cls.QUICK_POPUP_TABLE_CLASS).style.height = formatUnit((viewHeight * 25) / 100);\n eventWrapper.querySelector('.' + cls.QUICK_POPUP_CONTENT_CLASS).style.height = formatUnit((viewHeight * 75) / 100);\n EventHandler.add(this.selectedEventPopup.querySelector('.' + cls.SELECTED_EVENT_CLOSE_CLASS), 'click', this.closeClick, this);\n EventHandler.add(this.selectedEventPopup.querySelector('.' + cls.SELECTED_EVENT_EDIT_CLASS), 'click', this.editClick, this);\n EventHandler.add(this.selectedEventPopup.querySelector('.' + cls.SELECTED_EVENT_DELETE_CLASS), 'click', this.deleteClick, this);\n EventHandler.add(this.multipleEventPopup.querySelector('.' + cls.SELECTED_EVENT_CLOSE_CLASS), 'click', this.closeClick, this);\n EventHandler.add(this.multipleEventPopup.querySelector('.' + cls.SELECTED_EVENT_EDIT_CLASS), 'click', this.editClick, this);\n EventHandler.add(this.multipleEventPopup.querySelector('.' + cls.SELECTED_EVENT_DELETE_CLASS), 'click', this.deleteClick, this);\n };\n QuickPopups.prototype.openRecurrenceAlert = function () {\n var dialogFooter = this.quickDialog.element.querySelector('.' + cls.DIALOG_FOOTER_CONTENT_CLASS).children;\n dialogFooter[0].innerHTML = (this.parent.currentAction === 'Delete') ? this.l10n.getConstant('deleteEvent') :\n this.l10n.getConstant('editEvent');\n dialogFooter[1].innerHTML = (this.parent.currentAction === 'Delete') ? this.l10n.getConstant('deleteSeries') :\n this.l10n.getConstant('editSeries');\n this.quickDialog.content = (this.parent.currentAction === 'Delete') ? this.l10n.getConstant('deleteRecurrenceContent') :\n this.l10n.getConstant('editContent');\n this.quickDialog.header = (this.parent.currentAction === 'Delete') ? this.l10n.getConstant('deleteEvent') :\n this.l10n.getConstant('editEvent');\n this.quickDialogClass('Recurrence');\n this.showQuickDialog('RecurrenceAlert');\n };\n QuickPopups.prototype.openDeleteAlert = function () {\n if (this.parent.activeViewOptions.readonly) {\n return;\n }\n var dialogFooter = this.quickDialog.element.querySelector('.' + cls.DIALOG_FOOTER_CONTENT_CLASS).children;\n dialogFooter[0].innerHTML = this.l10n.getConstant('delete');\n dialogFooter[1].innerHTML = this.l10n.getConstant('cancel');\n this.quickDialog.content = this.l10n.getConstant('deleteContent');\n this.quickDialog.header = this.l10n.getConstant('deleteEvent');\n this.quickDialogClass('Delete');\n this.showQuickDialog('DeleteAlert');\n };\n QuickPopups.prototype.openValidationError = function (type) {\n this.quickDialog.header = this.l10n.getConstant('alert');\n this.quickDialog.content = this.l10n.getConstant(type);\n var dialogFooter = this.quickDialog.element.querySelector('.' + cls.DIALOG_FOOTER_CONTENT_CLASS).children;\n dialogFooter[0].innerHTML = this.l10n.getConstant('ok');\n dialogFooter[1].innerHTML = this.l10n.getConstant('cancel');\n this.quickDialogClass('Alert');\n this.showQuickDialog('ValidationAlert');\n };\n QuickPopups.prototype.showQuickDialog = function (popupType) {\n this.quickDialog.dataBind();\n var eventProp = {\n type: popupType, cancel: false, data: this.parent.activeEventData,\n element: this.quickDialog.element\n };\n this.parent.trigger(event.popupOpen, eventProp);\n if (eventProp.cancel) {\n return;\n }\n this.quickDialog.show();\n };\n QuickPopups.prototype.createMoreEventList = function (events) {\n var fields = this.parent.eventFields;\n var moreEventContentEle = createElement('div', { className: cls.MORE_EVENT_CONTENT_CLASS });\n var moreEventWrapperEle = createElement('div', { className: cls.MORE_EVENT_WRAPPER_CLASS });\n for (var _i = 0, events_1 = events; _i < events_1.length; _i++) {\n var event_1 = events_1[_i];\n var appointmentEle = createElement('div', {\n id: '' + event_1[fields.id],\n className: cls.APPOINTMENT_CLASS,\n attrs: {\n 'data-guid': event_1.Guid,\n 'role': 'button', 'tabindex': '0', 'aria-readonly': 'false', 'aria-selected': 'false', 'aria-grabbed': 'true',\n 'aria-label': isNullOrUndefined(event_1[fields.subject]) ?\n this.parent.eventSettings.fields.subject.default : event_1[fields.subject]\n }\n });\n appointmentEle.appendChild(createElement('div', {\n className: cls.APPOINTMENT_SUBJECT,\n innerHTML: event_1[fields.subject] || this.parent.eventSettings.fields.subject.default\n }));\n if (!isNullOrUndefined(event_1[fields.recurrenceRule])) {\n var iconClass = (event_1[fields.id] === event_1[fields.recurrenceID]) ?\n cls.EVENT_RECURRENCE_ICON_CLASS : cls.EVENT_RECURRENCE_EDIT_ICON_CLASS;\n appointmentEle.appendChild(createElement('div', { className: cls.ICON + ' ' + iconClass }));\n }\n this.parent.eventBase.wireAppointmentEvents(appointmentEle);\n moreEventWrapperEle.appendChild(appointmentEle);\n }\n moreEventContentEle.appendChild(moreEventWrapperEle);\n return moreEventContentEle;\n };\n QuickPopups.prototype.eventHold = function (args) {\n var target = args.target;\n this.isMultipleEventSelect = false;\n if (!isNullOrUndefined(closest(target, '.' + cls.APPOINTMENT_CLASS)) && this.parent.isAdaptive) {\n target = closest(target, '.' + cls.APPOINTMENT_CLASS);\n this.parent.selectedElements = [];\n this.isMultipleEventSelect = true;\n this.selectedEventDialog(target);\n return;\n }\n };\n QuickPopups.prototype.cellClick = function (args) {\n if (!this.parent.showQuickInfo || this.parent.currentView === 'MonthAgenda') {\n return;\n }\n var target = closest(args.event.target, '.' + cls.WORK_CELLS_CLASS + ',.' +\n cls.ALLDAY_CELLS_CLASS + ',.' + cls.HEADER_CELLS_CLASS);\n if (isNullOrUndefined(target) || args.event.target.classList.contains(cls.MORE_INDICATOR_CLASS)) {\n return;\n }\n var timeDetails = this.parent.activeCellsData.isAllDay ? this.l10n.getConstant('allDay') :\n this.getDateFormat(this.parent.activeCellsData.startTime, 'hm') + ' - ' +\n this.getDateFormat(this.parent.activeCellsData.endTime, 'hm');\n var temp = {};\n temp[this.parent.eventFields.startTime] = this.parent.activeCellsData.startTime;\n temp[this.parent.eventFields.endTime] = this.parent.activeCellsData.endTime;\n temp[this.parent.eventFields.isAllDay] = this.parent.activeCellsData.isAllDay;\n var cellDetails = this.getFormattedString(temp, 'cell');\n var cellTemplate = '
    ' +\n '' +\n '' +\n '
    ' +\n '
    ' + cellDetails.details + '
    ' +\n '
    ${l10n.moreDetails}
    ' +\n '
    ${l10n.save}
    ';\n var cellArgs = {\n classList: [\n cls.QUICK_POPUP_CLASS, cls.QUICK_POPUP_TABLE_CLASS, cls.EVENT_WINDOW_FORM_CLASS, cls.QUICK_POPUP_SUBJECT_CLASS,\n cls.QUICK_POPUP_DATE_TIME_DETAILS_CLASS, cls.QUICK_POPUP_FOOTER_CLASS, cls.QUICK_POPUP_EVENT_DETAILS_CLASS,\n cls.QUICK_POPUP_EVENT_CREATE_CLASS, cls.QUICK_POPUP_TEXT_ALIGN_CLASS\n ],\n id: this.parent.element.id,\n l10n: {\n moreDetails: this.l10n.getConstant('moreDetails'),\n save: this.l10n.getConstant('save')\n }\n };\n var quickCellPopup = compile(cellTemplate)(cellArgs)[0];\n Input.createInput({\n element: quickCellPopup.querySelector('.' + cls.QUICK_POPUP_SUBJECT_CLASS),\n properties: { placeholder: this.l10n.getConstant('addTitle') }\n });\n this.flatButton.appendTo(quickCellPopup.querySelector('.' + cls.QUICK_POPUP_EVENT_DETAILS_CLASS));\n this.primaryButton.appendTo(quickCellPopup.querySelector('.' + cls.QUICK_POPUP_EVENT_CREATE_CLASS));\n EventHandler.add(quickCellPopup.querySelector('.' + cls.QUICK_POPUP_EVENT_CREATE_CLASS), 'click', this.saveClick, this);\n EventHandler.add(quickCellPopup.querySelector('.' + cls.QUICK_POPUP_EVENT_DETAILS_CLASS), 'click', this.detailsClick, this);\n this.quickPopup.content = quickCellPopup;\n this.quickPopup.target = '.' + cls.WORK_CELLS_CLASS;\n this.quickPopup.dataBind();\n this.applyFormValidation();\n if (this.morePopup) {\n this.morePopup.hide();\n }\n if (!this.parent.isAdaptive && target.getAttribute('data-tooltip-id') === null) {\n this.quickPopup.close();\n this.quickPopup.open(target);\n }\n else {\n quickCellPopup.querySelector('.' + cls.QUICK_POPUP_SUBJECT_CLASS).focus();\n }\n };\n QuickPopups.prototype.applyFormValidation = function () {\n var form = this.quickPopup.content\n .querySelector('.' + cls.EVENT_WINDOW_FORM_CLASS);\n var rules = {};\n rules[this.parent.eventSettings.fields.subject.name] = this.parent.eventSettings.fields.subject.validation;\n this.fieldValidator.renderFormValidator(form, rules);\n };\n QuickPopups.prototype.eventClick = function (events) {\n if (this.parent.eventTooltip) {\n this.parent.eventTooltip.close();\n }\n if (!this.parent.showQuickInfo) {\n return;\n }\n if (this.parent.isAdaptive) {\n if (this.isMultipleEventSelect) {\n this.selectedEventDialog(closest(events.element, '.' + cls.APPOINTMENT_CLASS));\n }\n else {\n this.deviceEventClick(events);\n }\n }\n else {\n var eventData = events.event;\n var args = this.getFormattedString(eventData, 'event');\n var eventTemplate = '
    ' +\n '' +\n '' +\n '
    ' + args.eventSubject + '
    ' + args.details + '
    ' +\n '' +\n '
    ${l10n.edit}
    ';\n var eventArgs = {\n classList: [\n cls.QUICK_POPUP_CLASS, cls.QUICK_POPUP_TABLE_CLASS, cls.QUICK_POPUP_EVENT_TITLE_CLASS,\n cls.QUICK_POPUP_DATE_TIME_DETAILS_CLASS, cls.QUICK_POPUP_FOOTER_CLASS, cls.QUICK_POPUP_DELETE_EVENT_CLASS,\n cls.QUICK_POPUP_EDIT_EVENT_CLASS, cls.QUICK_POPUP_TEXT_ALIGN_CLASS\n ],\n id: this.parent.element.id,\n l10n: {\n delete: this.l10n.getConstant('delete'),\n edit: this.l10n.getConstant('edit')\n }\n };\n var quickEventPopup = compile(eventTemplate)(eventArgs)[0];\n this.flatButton.appendTo(quickEventPopup.querySelector('.' + cls.QUICK_POPUP_DELETE_EVENT_CLASS));\n this.primaryButton.appendTo(quickEventPopup.querySelector('.' + cls.QUICK_POPUP_EDIT_EVENT_CLASS));\n EventHandler.add(quickEventPopup.querySelector('.' + cls.QUICK_POPUP_DELETE_EVENT_CLASS), 'click', this.deleteClick, this);\n EventHandler.add(quickEventPopup.querySelector('.' + cls.QUICK_POPUP_EDIT_EVENT_CLASS), 'click', this.editClick, this);\n this.quickPopup.content = quickEventPopup;\n this.quickPopup.target = '.' + cls.APPOINTMENT_CLASS;\n this.quickPopup.dataBind();\n if (this.morePopup && !closest(events.element, '.' + cls.MORE_EVENT_WRAPPER_CLASS)) {\n this.morePopup.hide();\n }\n if (!this.parent.isAdaptive && events.element.getAttribute('data-tooltip-id') === null) {\n this.quickPopup.close();\n this.quickPopup.open(events.element);\n }\n else {\n this.quickPopup.content.querySelector('.' + cls.QUICK_POPUP_EDIT_EVENT_CLASS).focus();\n }\n }\n };\n QuickPopups.prototype.deviceEventClick = function (events) {\n var fields = this.parent.eventFields;\n var eventData = events.event;\n var eventSelectSubject = (isNullOrUndefined(eventData[fields.subject])) ?\n this.l10n.getConstant('noTitle') : eventData[fields.subject];\n var eventTimeDetails = (eventData[fields.isAllDay]) ? this.l10n.getConstant('allDay') :\n this.getDateFormat(eventData[fields.startTime], 'hm') + ' - ' +\n this.getDateFormat(eventData[fields.endTime], 'hm');\n var eventSelectDetails = this.getTimeDetails(eventData) + ' (' + eventTimeDetails + ')';\n this.selectedEventPopup.querySelector('.' + cls.QUICK_POPUP_EVENT_TITLE_CLASS).innerHTML = eventSelectSubject;\n this.selectedEventPopup.querySelector('.' + cls.DEVICE_DATE_TIME_DETAILS_CLASS).innerHTML = eventSelectDetails;\n this.selectedEventPopup.querySelector('.' + cls.QUICK_POPUP_LOCATION_DETAILS_CLASS).innerHTML =\n (!isNullOrUndefined(eventData[fields.location])) ? eventData[fields.location] : '';\n this.selectedEventPopup.querySelector('.' + cls.EVENT_ZONE_DETAILS_CLASS).innerHTML = this.getTimezone(eventData);\n this.selectedEventPopup.querySelector('.' + cls.EVENT_NOTE_DETAILS_CLASS).innerHTML =\n (!isNullOrUndefined(eventData[fields.description])) ? eventData[fields.description] : '';\n if (!isNullOrUndefined(eventData[fields.recurrenceRule])) {\n var recurrenceEditor = this.parent.eventWindow.getRecurrenceEditorInstance();\n var ruleSummary = recurrenceEditor.getRuleSummary(eventData[fields.recurrenceRule]);\n this.selectedEventPopup.querySelector('.' + cls.DEVICE_RECURRENCE_SUMMARY_CLASS).innerHTML =\n ruleSummary.charAt(0).toUpperCase() + ruleSummary.slice(1);\n }\n else {\n this.selectedEventPopup.querySelector('.' + cls.DEVICE_RECURRENCE_SUMMARY_CLASS).innerHTML = '';\n }\n if (isNullOrUndefined(eventData[fields.location]) || eventData[fields.location] === '') {\n addClass([this.selectedEventPopup.querySelector('.' + cls.APPOINTMENT_LOCATION)], cls.DISABLE_CLASS);\n }\n else {\n removeClass([this.selectedEventPopup.querySelector('.' + cls.APPOINTMENT_LOCATION)], cls.DISABLE_CLASS);\n }\n if (isNullOrUndefined(eventData[fields.startTimezone]) && isNullOrUndefined(eventData[fields.endTimezone])) {\n addClass([this.selectedEventPopup.querySelector('.' + cls.EVENT_WINDOW_TZ_CLASS)], cls.DISABLE_CLASS);\n }\n else {\n removeClass([this.selectedEventPopup.querySelector('.' + cls.EVENT_WINDOW_TZ_CLASS)], cls.DISABLE_CLASS);\n }\n if (isNullOrUndefined(eventData[fields.description]) || eventData[fields.description] === '') {\n addClass([this.selectedEventPopup.querySelector('.' + cls.EVENT_DETAILS_CLASS)], cls.DISABLE_CLASS);\n }\n else {\n removeClass([this.selectedEventPopup.querySelector('.' + cls.EVENT_DETAILS_CLASS)], cls.DISABLE_CLASS);\n }\n this.eventPopup.content = this.selectedEventPopup;\n if (this.eventPopup && !closest(events.element, '.' + cls.MORE_EVENT_WRAPPER_CLASS)) {\n this.showEventPopup('ViewEventInfo');\n }\n };\n QuickPopups.prototype.showEventPopup = function (popupType) {\n var eventProp = {\n type: popupType, cancel: false, data: this.parent.activeEventData.event,\n target: this.parent.activeEventData.element, element: this.eventPopup.element\n };\n this.parent.trigger(event.popupOpen, eventProp);\n if (eventProp.cancel) {\n return;\n }\n this.eventPopup.show();\n };\n QuickPopups.prototype.getFormattedString = function (eventData, type) {\n var fields = this.parent.eventFields;\n var eventSubject = isNullOrUndefined(eventData[fields.subject]) ? this.l10n.getConstant('noTitle') :\n eventData[fields.subject];\n var startDate = eventData[fields.startTime];\n var endDate = eventData[fields.endTime];\n var startDateDetails = this.getDateFormat(startDate, 'long');\n var endDateDetails = (eventData[fields.isAllDay] && endDate.getHours() === 0 && endDate.getMinutes() === 0) ?\n this.getDateFormat(util.addDays(new Date(endDate.getTime()), -1), 'long') : this.getDateFormat(endDate, 'long');\n var startTimeDetail = this.getDateFormat(startDate, 'hm');\n var endTimeDetail = this.getDateFormat(endDate, 'hm');\n var details;\n var allDayLength = (endDate.getTime() - startDate.getTime()) / util.MS_PER_DAY;\n var spanLength = endDate.getDate() !== startDate.getDate() &&\n (endDate.getTime() - startDate.getTime()) / (60 * 60 * 1000) < 24 ? 1 : 0;\n if (eventData[fields.isAllDay] || allDayLength >= 1 || spanLength > 0) {\n details = startDateDetails + ' (' +\n (eventData[fields.isAllDay] ? this.l10n.getConstant('allDay') : startTimeDetail) + ')';\n if (allDayLength > 1 || spanLength > 0) {\n details += ' - ' + endDateDetails + ' (' +\n (eventData[fields.isAllDay] ? this.l10n.getConstant('allDay') : endTimeDetail) + ')';\n }\n }\n else {\n details = startDateDetails + ' (' + (startTimeDetail + ' - ' + endTimeDetail) + ')';\n }\n return { eventSubject: eventSubject, details: details };\n };\n QuickPopups.prototype.moreEventClick = function (data) {\n if (!this.parent.showQuickInfo) {\n return;\n }\n if (this.morePopup.element.querySelector('.' + cls.MORE_EVENT_CONTENT_CLASS)) {\n this.morePopup.element.querySelector('.' + cls.MORE_EVENT_CONTENT_CLASS).remove();\n }\n this.morePopup.element.children[0].appendChild(this.createMoreEventList(data.event));\n var selectedDate = ((data.date).getTime()).toString();\n var target = closest(data.element, '.' + cls.MORE_INDICATOR_CLASS);\n this.morePopup.element.querySelector('.' + cls.MORE_EVENT_HEADER_DAY_CLASS).innerHTML = this.getDateFormat(data.date, 'E');\n this.morePopup.element.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS).innerHTML = this.getDateFormat(data.date, 'd');\n this.morePopup.element.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS).setAttribute('data-date', selectedDate);\n this.morePopup.relateTo = closest(target, '.' + cls.WORK_CELLS_CLASS);\n var eventProp = { type: 'EventContainer', data: data, cancel: false, element: this.morePopup.element };\n this.parent.trigger(event.popupOpen, eventProp);\n if (eventProp.cancel) {\n return;\n }\n this.morePopup.show();\n };\n QuickPopups.prototype.saveClick = function () {\n if (!this.quickPopup.content.querySelector('.' + cls.EVENT_WINDOW_FORM_CLASS)\n .ej2_instances[0].validate()) {\n return;\n }\n this.quickPopup.close();\n var fields = this.parent.eventFields;\n var saveObj = {};\n saveObj[fields.id] = this.parent.eventBase.getEventMaxId() + 1;\n saveObj[fields.subject] =\n this.quickPopup.content.querySelector('.' + cls.QUICK_POPUP_SUBJECT_CLASS).value ||\n this.parent.eventSettings.fields.subject.default;\n saveObj[fields.startTime] = this.parent.activeCellsData.startTime;\n saveObj[fields.endTime] = this.parent.activeCellsData.endTime;\n saveObj[fields.isAllDay] = this.parent.activeCellsData.isAllDay;\n this.crudAction.addEvent(saveObj);\n };\n QuickPopups.prototype.detailsClick = function () {\n var subject = this.quickPopup.content.querySelector('.' + cls.QUICK_POPUP_SUBJECT_CLASS).value;\n if (subject !== '') {\n var args = extend(this.parent.activeCellsData, { subject: subject });\n }\n this.fieldValidator.destroyToolTip();\n this.quickPopup.close();\n this.parent.eventWindow.openEditor(this.parent.activeCellsData, 'Add');\n };\n QuickPopups.prototype.editClick = function (event) {\n this.quickPopup.close({ effect: 'None' });\n this.morePopup.hide();\n var data = this.parent.activeEventData.event;\n this.parent.currentAction = 'EditSeries';\n if (this.parent.isAdaptive) {\n this.eventPopup.hide();\n this.isMultipleEventSelect = false;\n if (!isNullOrUndefined(data[this.parent.eventFields.recurrenceRule])) {\n this.parent.currentAction = 'EditOccurrence';\n this.openRecurrenceAlert();\n return;\n }\n }\n if (!isNullOrUndefined(data[this.parent.eventFields.recurrenceRule])) {\n this.parent.currentAction = 'EditOccurrence';\n this.openRecurrenceAlert();\n }\n else {\n this.parent.eventWindow.openEditor(data, this.parent.currentAction);\n }\n };\n QuickPopups.prototype.deleteClick = function () {\n this.quickPopup.close({ effect: 'None' });\n this.morePopup.hide();\n if (this.parent.isAdaptive) {\n this.eventPopup.hide();\n this.isMultipleEventSelect = false;\n }\n this.parent.currentAction = 'Delete';\n if (this.parent.activeEventData.event[this.parent.eventFields.recurrenceRule]) {\n this.openRecurrenceAlert();\n }\n else {\n this.openDeleteAlert();\n }\n };\n QuickPopups.prototype.closeClick = function () {\n this.morePopup.hide();\n this.eventPopup.hide();\n this.isMultipleEventSelect = false;\n };\n QuickPopups.prototype.dialogButtonClick = function (event) {\n this.quickDialog.hide();\n if (event.target.classList.contains(cls.QUICK_DIALOG_EDIT_EVENT_CLASS)) {\n this.parent.currentAction = (this.parent.currentAction === 'Delete') ? 'DeleteOccurrence' : 'EditOccurrence';\n switch (this.parent.currentAction) {\n case 'EditOccurrence':\n this.parent.eventWindow.openEditor(this.parent.activeEventData.event, this.parent.currentAction);\n break;\n case 'DeleteOccurrence':\n this.crudAction.deleteEvent(this.parent.activeEventData.event, this.parent.currentAction);\n break;\n }\n }\n else if (event.target.classList.contains(cls.QUICK_DIALOG_EDIT_SERIES_CLASS)) {\n this.parent.currentAction = (this.parent.currentAction === 'Delete') ? 'DeleteSeries' : 'EditSeries';\n switch (this.parent.currentAction) {\n case 'EditSeries':\n var parentEvent = this.parent.eventBase.getRecurrenceEvent(this.parent.activeEventData.event);\n this.parent.eventWindow.openEditor(parentEvent, this.parent.currentAction);\n break;\n case 'DeleteSeries':\n this.crudAction.deleteEvent(this.parent.activeEventData.event, this.parent.currentAction);\n break;\n }\n }\n else if (event.target.classList.contains(cls.QUICK_DIALOG_DELETE_CLASS)) {\n this.crudAction.deleteEvent(this.parent.activeEventData.event, this.parent.currentAction);\n }\n };\n QuickPopups.prototype.selectedEventDialog = function (target) {\n var selectedElements = this.parent.eventBase.getSelectedEventElements(target);\n this.parent.activeEventData = this.parent.eventBase.getSelectedEvents();\n if (selectedElements.length === 1) {\n this.multipleEventPopup.querySelector('.' + cls.SELECTED_EVENT_TITLE_CLASS).innerHTML =\n selectedElements[0].querySelector('.' + cls.APPOINTMENT_SUBJECT).textContent;\n removeClass([this.multipleEventPopup.querySelector('.' + cls.SELECTED_EVENT_EDIT_CLASS)], cls.EVENT_EDIT_DISABLE_CLASS);\n this.eventPopup.content = this.multipleEventPopup;\n if (this.eventPopup && !closest(target, '.' + cls.MORE_EVENT_WRAPPER_CLASS)) {\n this.showEventPopup('EditEventInfo');\n }\n }\n else if (selectedElements.length <= 0) {\n this.parent.selectedElements = [];\n this.isMultipleEventSelect = false;\n this.eventPopup.hide();\n }\n else if (selectedElements.length > 1) {\n this.multipleEventPopup.querySelector('.' + cls.SELECTED_EVENT_TITLE_CLASS).innerHTML =\n '(' + selectedElements.length.toString() + ')' + ' ' + this.l10n.getConstant('selectedItems');\n addClass([this.multipleEventPopup.querySelector('.' + cls.SELECTED_EVENT_EDIT_CLASS)], cls.EVENT_EDIT_DISABLE_CLASS);\n }\n };\n QuickPopups.prototype.getTimezone = function (event) {\n var fields = this.parent.eventFields;\n var zoneDetails = '';\n timezoneData.filter(function (zoneData) {\n if (!isNullOrUndefined(event[fields.startTimezone]) && zoneData.Value === event[fields.startTimezone]) {\n zoneDetails = zoneData.Text.split(') ')[0] + ')' + zoneDetails;\n }\n if (!isNullOrUndefined(event[fields.endTimezone]) && zoneData.Value === event[fields.endTimezone]) {\n zoneDetails = zoneDetails + ' ' + zoneData.Text.split(') ')[0] + ')';\n }\n });\n return zoneDetails;\n };\n QuickPopups.prototype.getTimeDetails = function (event) {\n var fields = this.parent.eventFields;\n var startDate = event[fields.startTime];\n var endDate = event[fields.endTime];\n var allDayLength = (endDate.getTime() - startDate.getTime()) / util.MS_PER_DAY;\n var timeDetails = '';\n if (this.getDateFormat(startDate, 'yMd') === this.getDateFormat(endDate, 'yMd') || (event[fields.isAllDay] && allDayLength === 1)) {\n timeDetails = this.parent.globalize.formatDate(startDate, { format: 'MMMM d, yyyy' });\n }\n else {\n timeDetails = this.parent.globalize.formatDate(startDate, { format: 'MMM dd' }) + ' - ' +\n this.parent.globalize.formatDate(endDate, { format: 'MMM dd, yyyy' });\n }\n return timeDetails;\n };\n QuickPopups.prototype.getDateFormat = function (date, formatString) {\n return this.parent.globalize.formatDate(date, { skeleton: formatString });\n };\n QuickPopups.prototype.afterQuickPopupOpen = function (args) {\n if (this.quickPopup.content.querySelector('.' + cls.QUICK_POPUP_SUBJECT_CLASS)) {\n this.quickPopup.content.querySelector('.' + cls.QUICK_POPUP_SUBJECT_CLASS).focus();\n }\n if (this.quickPopup.content.querySelector('.' + cls.QUICK_POPUP_EDIT_EVENT_CLASS)) {\n this.quickPopup.content.querySelector('.' + cls.QUICK_POPUP_EDIT_EVENT_CLASS).focus();\n }\n };\n QuickPopups.prototype.beforeQuickPopupOpen = function (args) {\n args.element.querySelector('.' + cls.TOOLTIP_CLOSE_CLASS).setAttribute('title', this.l10n.getConstant('close'));\n EventHandler.add(args.element, 'keydown', this.keyPress, this);\n var eventProp = {\n type: 'QuickInfo', cancel: false, data: this.getDataFromTarget(args.target),\n target: args.target, element: args.element\n };\n this.parent.trigger(event.popupOpen, eventProp);\n if (eventProp.cancel) {\n args.cancel = true;\n }\n };\n QuickPopups.prototype.getDataFromTarget = function (target) {\n if (target.classList.contains(cls.APPOINTMENT_CLASS)) {\n return this.parent.activeEventData.event;\n }\n return this.parent.activeCellsData;\n };\n QuickPopups.prototype.beforeQuickPopupClose = function (args) {\n EventHandler.remove(args.element, 'keydown', this.keyPress);\n };\n QuickPopups.prototype.beforeQuickDialogClose = function (args) {\n this.parent.eventBase.focusElement();\n };\n QuickPopups.prototype.keyPress = function (event) {\n var popupElement = this.quickPopup.content;\n if (event.keyCode === 9) {\n var buttonObj = void 0;\n if (event.target === popupElement.querySelector('.' + cls.QUICK_POPUP_EVENT_CREATE_CLASS) && !event.shiftKey) {\n event.preventDefault();\n (popupElement.querySelector('.' + cls.QUICK_POPUP_SUBJECT_CLASS)).focus();\n }\n if (event.target === popupElement.querySelector('.' + cls.QUICK_POPUP_EDIT_EVENT_CLASS) && !event.shiftKey) {\n event.preventDefault();\n popupElement.querySelector('.' + cls.QUICK_POPUP_DELETE_EVENT_CLASS).focus();\n }\n if (event.target === popupElement.querySelector('.' + cls.QUICK_POPUP_SUBJECT_CLASS) && event.shiftKey) {\n event.preventDefault();\n popupElement.querySelector('.' + cls.QUICK_POPUP_EVENT_CREATE_CLASS).focus();\n }\n if (event.target === popupElement.querySelector('.' + cls.QUICK_POPUP_DELETE_EVENT_CLASS) && event.shiftKey) {\n event.preventDefault();\n popupElement.querySelector('.' + cls.QUICK_POPUP_EDIT_EVENT_CLASS).focus();\n }\n }\n if (event.keyCode === 13) {\n if (event.target === popupElement.querySelector('.' + cls.QUICK_POPUP_EVENT_DETAILS_CLASS)) {\n event.target.click();\n }\n else if (event.target === popupElement.querySelector('.' + cls.QUICK_POPUP_EVENT_CREATE_CLASS) ||\n event.target === popupElement.querySelector('.' + cls.QUICK_POPUP_EDIT_EVENT_CLASS) ||\n event.target === popupElement.querySelector('.' + cls.QUICK_POPUP_DELETE_EVENT_CLASS)) {\n event.target.click();\n }\n else if (event.target === popupElement.querySelector('.' + cls.QUICK_POPUP_SUBJECT_CLASS)) {\n popupElement.querySelector('.' + cls.QUICK_POPUP_EVENT_CREATE_CLASS).click();\n event.preventDefault();\n }\n }\n if (event.keyCode === 27) {\n this.parent.quickPopup.onClosePopup();\n }\n };\n QuickPopups.prototype.afterMorePopupOpen = function (event) {\n var moreEventWrapper = this.parent.element.querySelector('.' + cls.MORE_POPUP_WRAPPER_CLASS);\n moreEventWrapper.querySelector('.' + cls.MORE_EVENT_HEADER_DATE_CLASS).focus();\n this.morePopup.refreshPosition();\n };\n QuickPopups.prototype.afterMorePopupClose = function (event) {\n //this.parent.eventBase.focusElement();\n if (!isNullOrUndefined(this.parent.element.querySelector('.' + cls.MORE_EVENT_WRAPPER_CLASS))) {\n (this.parent.element.querySelector('.' + cls.MORE_EVENT_WRAPPER_CLASS)).remove();\n }\n };\n QuickPopups.prototype.afterQuickPopupClose = function (args) {\n this.parent.eventBase.focusElement();\n };\n QuickPopups.prototype.quickDialogClass = function (action) {\n var buttonElement = this.quickDialog.element.querySelector('.' + cls.DIALOG_FOOTER_CONTENT_CLASS).children;\n var classList = [\n cls.QUICK_DIALOG_EDIT_EVENT_CLASS, cls.QUICK_DIALOG_EDIT_SERIES_CLASS,\n cls.QUICK_DIALOG_DELETE_CLASS, cls.QUICK_DIALOG_CANCEL_CLASS, cls.QUICK_DIALOG_ALERT_BTN_CLASS, cls.QUICK_DIALOG_HIDE_BTN_CLASS\n ];\n removeClass(buttonElement, classList);\n switch (action) {\n case 'Recurrence':\n addClass([buttonElement[0]], cls.QUICK_DIALOG_EDIT_EVENT_CLASS);\n addClass([buttonElement[1]], cls.QUICK_DIALOG_EDIT_SERIES_CLASS);\n addClass([buttonElement[1]], 'e-flat');\n break;\n case 'Delete':\n addClass([buttonElement[0]], cls.QUICK_DIALOG_DELETE_CLASS);\n addClass([buttonElement[1]], cls.QUICK_DIALOG_CANCEL_CLASS);\n removeClass([buttonElement[1]], 'e-flat');\n break;\n case 'Alert':\n addClass([buttonElement[0]], cls.QUICK_DIALOG_ALERT_BTN_CLASS);\n addClass([buttonElement[1]], cls.QUICK_DIALOG_HIDE_BTN_CLASS);\n break;\n }\n };\n QuickPopups.prototype.documentClick = function (e) {\n var target = e.event.target;\n if (!closest(target, '.' + cls.QUICK_POPUP_ROOT_CLASS) && target.getAttribute('data-tooltip-id') === null) {\n this.quickPopup.close();\n }\n if (!closest(target, '.' + cls.MORE_POPUP_WRAPPER_CLASS) && !target.classList.contains(cls.MORE_INDICATOR_CLASS)) {\n this.morePopup.hide();\n }\n };\n QuickPopups.prototype.onClosePopup = function () {\n this.quickPopup.close();\n this.eventPopup.hide();\n this.isMultipleEventSelect = false;\n this.parent.eventBase.focusElement();\n };\n QuickPopups.prototype.addEventListener = function () {\n this.parent.on(event.cellClick, this.cellClick, this);\n this.parent.on(event.eventClick, this.eventClick, this);\n this.parent.on(event.documentClick, this.documentClick, this);\n };\n QuickPopups.prototype.destroy = function () {\n this.quickPopup.destroy();\n this.morePopup.destroy();\n this.eventPopup.destroy();\n this.quickDialog.destroy();\n remove(this.quickDialog.element);\n this.quickDialog.element = null;\n this.fieldValidator.destroyForm();\n };\n return QuickPopups;\n}());\nexport { QuickPopups };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport * as cls from '../base/css-constant';\nimport * as util from '../base/util';\n/**\n * Tooltip on appointments in Schedule\n */\nvar EventTooltip = /** @class */ (function () {\n function EventTooltip(parent) {\n this.parent = parent;\n this.l10n = this.parent.localeObj;\n this.tooltipObj = new Tooltip({\n content: 'No title',\n position: 'BottomRight',\n offsetY: 10,\n mouseTrail: this.parent.isAdaptive ? false : true,\n showTipPointer: false,\n cssClass: cls.EVENT_TOOLTIP_ROOT_CLASS,\n target: '.' + cls.APPOINTMENT_CLASS,\n beforeRender: this.onBeforeRender.bind(this),\n enableRtl: this.parent.enableRtl\n });\n this.tooltipObj.appendTo(this.parent.element);\n }\n EventTooltip.prototype.onBeforeRender = function (args) {\n if (!isNullOrUndefined(args.target.getAttribute('data-tooltip-id'))) {\n return;\n }\n var record = this.parent.eventBase.getEventByGuid(args.target.getAttribute('data-guid'));\n var content = '';\n if (!isNullOrUndefined(this.parent.eventSettings.tooltipTemplate)) {\n content = this.parent.getEventTooltipTemplate()(record)[0];\n }\n else {\n var globalize = this.parent.globalize;\n var fields = this.parent.eventFields;\n var eventStart = new Date('' + record[fields.startTime]);\n var eventEnd = new Date('' + record[fields.endTime]);\n eventEnd = (eventEnd.getHours() === 0 && eventEnd.getMinutes() === 0) ? new Date(eventEnd.setMilliseconds(-1000)) : eventEnd;\n var startDate = util.resetTime(new Date('' + eventStart));\n var endDate = util.resetTime(new Date('' + eventEnd));\n var tooltipSubject = isNullOrUndefined(record[fields.subject]) ? this.parent.eventSettings.fields.subject.default :\n record[fields.subject];\n var tooltipLocation = !isNullOrUndefined(record[fields.location]) ? record[fields.location] : '';\n var startMonthDate = globalize.formatDate(eventStart, { type: 'date', skeleton: 'MMMd' });\n var endMonthDate = globalize.formatDate(eventEnd, { type: 'date', skeleton: 'MMMd' });\n var startMonthYearDate = globalize.formatDate(eventStart, { type: 'date', skeleton: 'yMMMd' });\n var endMonthYearDate = globalize.formatDate(eventEnd, { type: 'date', skeleton: 'yMMMd' });\n var startTime = globalize.formatDate(eventStart, { type: 'time', skeleton: 'short' });\n var endTime = globalize.formatDate(eventEnd, { type: 'time', skeleton: 'short' });\n var tooltipDetails = void 0;\n if (startDate.getTime() === endDate.getTime()) {\n tooltipDetails = globalize.formatDate(eventStart, { type: 'date', skeleton: 'long' });\n }\n else {\n tooltipDetails = (startDate.getFullYear() === endDate.getFullYear()) ? (startMonthDate + ' - ' + endMonthYearDate) :\n (startMonthYearDate + ' - ' + endMonthYearDate);\n }\n var tooltipTime = (record[fields.isAllDay]) ? this.l10n.getConstant('allDay') : (startTime + ' - ' + endTime);\n content = '
    ' + tooltipSubject + '
    ' +\n '
    ' + tooltipLocation + '
    ' +\n '
    ' + tooltipDetails + '
    ' +\n '
    ' + tooltipTime + '
    ';\n }\n this.tooltipObj.content = content;\n };\n EventTooltip.prototype.close = function () {\n this.tooltipObj.close();\n };\n /**\n * To destroy the event tooltip.\n * @return {void}\n * @private\n */\n EventTooltip.prototype.destroy = function () {\n this.tooltipObj.destroy();\n this.tooltipObj = null;\n };\n return EventTooltip;\n}());\nexport { EventTooltip };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, NotifyPropertyChanges, Event, Browser } from '@syncfusion/ej2-base';\nimport { getDefaultDateObject, getValue, cldrData, L10n } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\nimport { Button, RadioButton } from '@syncfusion/ej2-buttons';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { extractObjectFromRule, generate, generateSummary, getRecurrenceStringFromDate } from './date-generator';\nvar HEADER = 'e-editor';\nvar INPUTWARAPPER = 'e-input-wrapper';\nvar INPUTWARAPPERSIDE = 'e-input-wrapper-side';\nvar REPEATELEMENT = 'e-repeat-element';\nvar REPEATINTERVAL = 'e-repeat-interval';\nvar INTERVALCLASS = 'e-interval';\nvar DAYWRAPPER = 'e-days';\nvar WEEKWRAPPER = 'e-non-week';\nvar WEEKPOSITION = 'e-week-position';\nvar YEAREXPANDERWRAPPER = 'e-year-expander';\nvar YEAREXPANDERELEMENT = 'e-year-expander-element';\nvar MONETHEXPANDERWRAPPER = 'e-month-expander';\nvar MONTHEXPANDERELEMENT = 'e-month-expander-element';\nvar MONTHEXPANDERCHECKBOXWRAPPER = 'e-month-expander-checkbox-wrapper';\nvar FORMLEFT = 'e-form-left';\nvar FORMRIGHT = 'e-form-right';\nvar MONTHDAYWRAPPER = 'e-month-day';\nvar MONTHEXPANNDERELEM = 'e-month-expander-wrapper';\nvar MONTHPOS = 'e-month-pos';\nvar MONTHWEEK = 'e-month-week';\nvar ENDON = 'e-end-on';\nvar MONTHEXPANDERLABEL = 'e-month-expander-label';\nvar WEEKEXPANDERLABEL = 'e-week-expander-label';\nvar ENDONLABEL = 'e-end-on-label';\nvar ENDONLEFT = 'e-end-on-left';\nvar MONTHDAYELEMENT = 'e-monthday-element';\nvar ENDONELEMENT = 'e-end-on-element';\nvar ENDONDATE = 'e-end-on-date';\nvar UNTILDATE = 'e-until-date';\nvar ENDONCOUNTWRAPPER = 'e-end-on-count';\nvar ENDONCOUNT = 'e-recurrence-count';\nvar HIDEWRAPPER = 'e-hide-recurrence-element';\nvar RTLCLASS = 'e-rtl';\nvar PRIMARY = 'e-primary';\nvar ACTIVE = 'e-active';\nvar RECURRENCETABLE = 'e-recurrence-table';\nvar REPEATCONTENT = 'e-repeat-content';\nvar NONE = 'none';\nvar DAILY = 'daily';\nvar WEEKLY = 'weekly';\nvar MONTHLY = 'monthly';\nvar YEARLY = 'yearly';\nvar NEVER = 'never';\nvar UNTIL = 'until';\nvar COUNT = 'count';\nvar TEXTFIELD = 'text';\nvar VALUEFIELD = 'value';\nvar LAST = 'last';\nvar REPEAT = 'repeat';\nvar REPEATEVERY = 'repeatEvery';\nvar ON = 'on';\nvar END = 'end';\nvar MONTH = 'month';\nvar RADIOLABEL = 'onDay';\nvar RULEUNTIL = 'UNTIL';\nvar RULEBYDAY = 'BYDAY';\nvar RULEBYMONTHDAY = 'BYMONTHDAY';\nvar RULEBYMONTH = 'BYMONTH';\nvar RULEBYYEARDAY = 'BYYEARDAY';\nvar RULEBYWEEKNO = 'BYWEEKNO';\nvar RULEINTERVAL = 'INTERVAL';\nvar RULECOUNT = 'COUNT';\nvar RULESETPOS = 'BYSETPOS';\nvar RULEFREQ = 'FREQ';\nvar RULEDAILY = 'DAILY';\nvar RULEWEEKLY = 'WEEKLY';\nvar RULEMONTHLY = 'MONTHLY';\nvar RULEYEARLY = 'YEARLY';\nvar RULESUNDAY = 'SU';\nvar RULEMONDAY = 'MO';\nvar RULETUESDAY = 'TU';\nvar RULEWEDNESDAY = 'WE';\nvar RULETHURSDAY = 'TH';\nvar RULEFRIDAY = 'FR';\nvar RULESATURDAY = 'SA';\nvar KEYSUNDAY = 'sun';\nvar KEYMONDAY = 'mon';\nvar KEYTUESDAY = 'tue';\nvar KEYWEDNESDAY = 'wed';\nvar KEYTHURSDAY = 'thu';\nvar KEYFRIDAY = 'fri';\nvar KEYSATURDAY = 'sat';\nvar EQUAL = '=';\nvar SEMICOLON = ';';\nvar COMMA = ',';\nvar FIRST = 'first';\nvar SECOND = 'second';\nvar THIRD = 'third';\nvar FOURTH = 'fourth';\nvar DAYS = '';\nvar MONTHS = 'months';\nvar YEARS = 'years';\nvar contentType = {\n none: '',\n daily: 'days',\n weekly: 'weeks',\n monthly: 'months',\n yearly: 'years'\n};\nvar valueData = {\n 'sun': RULESUNDAY,\n 'mon': RULEMONDAY,\n 'tue': RULETUESDAY,\n 'wed': RULEWEDNESDAY,\n 'thu': RULETHURSDAY,\n 'fri': RULEFRIDAY,\n 'sat': RULESATURDAY\n};\nvar neverClassList = [DAYWRAPPER, WEEKWRAPPER, ENDON, INTERVALCLASS, YEAREXPANDERWRAPPER, MONETHEXPANDERWRAPPER];\nvar weekClassList = [WEEKWRAPPER];\nvar monthClassList = [DAYWRAPPER, YEAREXPANDERWRAPPER];\nvar yearClassList = [DAYWRAPPER];\nvar dailyClassList = [DAYWRAPPER, WEEKWRAPPER, YEAREXPANDERWRAPPER, MONETHEXPANDERWRAPPER];\nvar noEndClassList = [ENDONDATE, ENDONCOUNTWRAPPER];\nvar endOnCountClassList = [ENDONDATE];\nvar endOnDateClassList = [ENDONCOUNTWRAPPER];\n/**\n * Represents the RecurrenceEditor component.\n * ```html\n *
    \n * ```\n * ```typescript\n * \n * ```\n */\nvar RecurrenceEditor = /** @class */ (function (_super) {\n __extends(RecurrenceEditor, _super);\n /**\n * Constructor for creating the widget\n * @param {object} options?\n */\n function RecurrenceEditor(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.defaultLocale = {\n none: 'None',\n daily: 'Daily',\n weekly: 'Weekly',\n monthly: 'Monthly',\n month: 'Month',\n yearly: 'Yearly',\n never: 'Never',\n until: 'Until',\n count: 'Count',\n first: 'First',\n second: 'Second',\n third: 'Third',\n fourth: 'Fourth',\n last: 'Last',\n repeat: 'Repeat',\n repeatEvery: 'Repeat every',\n on: 'Repeat On',\n end: 'End',\n onDay: 'Day',\n days: 'Day(s)',\n weeks: 'Week(s)',\n months: 'Month(s)',\n years: 'Year(s)',\n every: 'every',\n summaryTimes: 'time(s)',\n summaryOn: 'on',\n summaryUntil: 'until',\n summaryRepeat: 'Repeats',\n summaryDay: 'day(s)',\n summaryWeek: 'week(s)',\n summaryMonth: 'month(s)',\n summaryYear: 'year(s)',\n };\n _this.renderStatus = false;\n _this.destroyStatus = false;\n _this.dayButtons = [];\n _this.monthButtons = [];\n return _this;\n }\n RecurrenceEditor.prototype.startState = function (freq, endOn, startDate) {\n this.showFormElement();\n this.updateForm(freq);\n this.freshOnEndForm();\n this.updateEndOnForm(endOn);\n this.selectMonthDay(startDate);\n this.updateUntilDate(startDate);\n this.onMonthDay.setProperties({ checked: true });\n };\n RecurrenceEditor.prototype.preRender = function () {\n this.localeObj = new L10n(this.getModuleName(), this.defaultLocale, this.locale);\n // pre render code snippets\n };\n RecurrenceEditor.prototype.applyCustomClass = function (cssClass) {\n if (cssClass) {\n this.element.classList.add(cssClass);\n }\n };\n RecurrenceEditor.prototype.initialize = function () {\n this.destroyStatus = false;\n this.renderComponent();\n this.startState(this.repeatType.value.toString().toUpperCase(), NEVER, this.startDate);\n this.updateForm(this.repeatType.value.toString());\n this.applyCustomClass(this.cssClass);\n };\n RecurrenceEditor.prototype.triggerChangeEvent = function () {\n if (this.renderStatus) {\n var value = this.getRecurrenceRule();\n this.trigger('change', { value: value });\n this.setProperties({ value: value }, false);\n }\n };\n RecurrenceEditor.prototype.resetDayButton = function () {\n var elements = this.element.querySelectorAll('.' +\n DAYWRAPPER + ' button');\n for (var index = 0; index < elements.length; index++) {\n elements[index].classList.remove(ACTIVE);\n elements[index].classList.remove(PRIMARY);\n }\n };\n RecurrenceEditor.prototype.daySelection = function (dayIndex) {\n this.resetDayButton();\n var days = [0, 1, 2, 3, 4, 5, 6];\n this.rotateArray(days, this.firstDayOfWeek);\n var element = this.element.querySelector('.' +\n DAYWRAPPER + ' button[data-index=\"' + days.indexOf(dayIndex) + '\"]');\n if (element) {\n element.classList.add(ACTIVE);\n element.classList.add(PRIMARY);\n }\n };\n RecurrenceEditor.prototype.rtlClass = function (status) {\n if (status) {\n this.element.classList.add(RTLCLASS);\n }\n else {\n this.element.classList.remove(RTLCLASS);\n }\n };\n RecurrenceEditor.prototype.updateUntilDate = function (date) {\n var tempDate = new Date(date.getTime());\n tempDate.setDate(tempDate.getDate() + 60);\n this.untilDateObj.setProperties({ value: tempDate });\n };\n RecurrenceEditor.prototype.selectMonthDay = function (date) {\n var weekday = [KEYSUNDAY, KEYMONDAY, KEYTUESDAY, KEYWEDNESDAY, KEYTHURSDAY, KEYFRIDAY, KEYSATURDAY];\n this.monthDate.setProperties({ value: date.getDate() });\n this.monthWeekDays.setProperties({ value: valueData[weekday[date.getDay()]] });\n this.monthValue.setProperties({ value: '' + (date.getMonth() + 1) });\n this.monthWeekPos.setProperties({ value: this.getDayPosition(date) });\n this.daySelection(date.getDay());\n };\n RecurrenceEditor.prototype.updateForm = function (state) {\n var elements;\n var btn;\n this.repeatType.setProperties({ value: state });\n switch (state) {\n case NONE:\n for (var index = 0; index < neverClassList.length; index++) {\n btn = this.element.querySelector('.' + neverClassList[index]);\n btn.classList.add(HIDEWRAPPER);\n }\n break;\n case WEEKLY:\n for (var index = 0; index < weekClassList.length; index++) {\n btn = this.element.querySelector('.' + weekClassList[index]);\n btn.classList.add(HIDEWRAPPER);\n }\n break;\n case MONTHLY:\n for (var index = 0; index < monthClassList.length; index++) {\n btn = this.element.querySelector('.' + monthClassList[index]);\n btn.classList.add(HIDEWRAPPER);\n }\n break;\n case YEARLY:\n for (var index = 0; index < yearClassList.length; index++) {\n btn = this.element.querySelector('.' + yearClassList[index]);\n btn.classList.add(HIDEWRAPPER);\n }\n break;\n case DAILY:\n for (var index = 0; index < dailyClassList.length; index++) {\n btn = this.element.querySelector('.' + dailyClassList[index]);\n btn.classList.add(HIDEWRAPPER);\n }\n break;\n }\n };\n RecurrenceEditor.prototype.updateEndOnForm = function (state) {\n var element;\n this.endType.setProperties({ value: state });\n switch (state) {\n case NEVER:\n for (var index = 0; index < noEndClassList.length; index++) {\n element = this.element.querySelector('.' + noEndClassList[index]);\n element.classList.add(HIDEWRAPPER);\n }\n break;\n case UNTIL:\n for (var index = 0; index < endOnDateClassList.length; index++) {\n element = this.element.querySelector('.' + endOnDateClassList[index]);\n element.classList.add(HIDEWRAPPER);\n }\n break;\n case COUNT:\n for (var index = 0; index < endOnCountClassList.length; index++) {\n element = this.element.querySelector('.' + endOnCountClassList[index]);\n element.classList.add(HIDEWRAPPER);\n }\n break;\n }\n };\n RecurrenceEditor.prototype.freshOnEndForm = function () {\n var btn;\n for (var index = 0; index < noEndClassList.length; index++) {\n btn = this.element.querySelector('.' + noEndClassList[index]);\n if (btn) {\n btn.classList.remove(HIDEWRAPPER);\n }\n }\n };\n RecurrenceEditor.prototype.showFormElement = function () {\n var btn;\n var elements = this.element.querySelectorAll('.' + HIDEWRAPPER);\n for (var index = 0; index < neverClassList.length; index++) {\n btn = this.element.querySelector('.' + neverClassList[index]);\n btn.classList.remove(HIDEWRAPPER);\n }\n };\n RecurrenceEditor.prototype.renderDropdowns = function () {\n var self = this;\n this.repeatType = new DropDownList({\n //set the data to dataSource property\n dataSource: this.getRepeatData(),\n floatLabelType: 'Always',\n enableRtl: this.enableRtl,\n index: this.selectedType,\n fields: {\n text: TEXTFIELD,\n value: VALUEFIELD\n },\n placeholder: this.localeObj.getConstant(REPEAT),\n change: function (args) {\n if (self.destroyStatus) {\n return;\n }\n self.setProperties({ selectedType: args.value }, false);\n self.element.querySelector('.' + REPEATCONTENT).innerHTML = self.localeObj.getConstant(contentType[args.value]);\n self.showFormElement();\n self.updateForm(args.value);\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n // set placeholder to DropDownList input element\n this.repeatType.appendTo(this.element.querySelector('.' + REPEATELEMENT));\n this.endType = new DropDownList({\n dataSource: this.getEndData(),\n popupWidth: this.getPopupWidth(),\n enableRtl: this.enableRtl,\n index: 1,\n fields: {\n text: TEXTFIELD,\n value: VALUEFIELD\n },\n change: function (args) {\n if (self.destroyStatus) {\n return;\n }\n self.freshOnEndForm();\n self.updateEndOnForm(args.value);\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n this.endType.appendTo(this.element.querySelector('.' + ENDONELEMENT));\n this.monthWeekPos = new DropDownList({\n dataSource: this.getMonthPosData(),\n popupWidth: this.getPopupWidth(),\n enableRtl: this.enableRtl,\n fields: {\n text: TEXTFIELD,\n value: VALUEFIELD\n },\n index: 1,\n change: function (args) {\n if (self.destroyStatus) {\n return;\n }\n self.onWeekDay.setProperties({ checked: true });\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n this.monthDayRendering();\n // render initialized DropDownList\n };\n RecurrenceEditor.prototype.setDefaultValue = function () {\n var formelement = [].slice.call(this.element.querySelectorAll('.e-control .e-numerictextbox'));\n for (var index = 0, len = formelement.length; index < len; index++) {\n var element = formelement[index];\n var value = void 0;\n var instance = element.ej2_instances[0];\n if (instance.element.classList.contains(REPEATINTERVAL)) {\n instance.value = 1;\n instance.dataBind();\n }\n else if (instance.element.classList.contains(ENDONCOUNT)) {\n instance.value = 10;\n instance.dataBind();\n }\n }\n };\n RecurrenceEditor.prototype.resetFormValues = function () {\n var recurreneElement = [].slice.call(this.element.querySelectorAll('.e-control [type=\"text\"]'));\n for (var index = 0, len = recurreneElement.length; index < len; index++) {\n var element = recurreneElement[index];\n var value = void 0;\n if (element.classList.contains('e-datepicker')) {\n var instance = element.ej2_instances[0];\n if (instance.value) {\n instance.value = instance.value;\n instance.dataBind();\n }\n else {\n this.updateUntilDate(this.startDate);\n }\n }\n else if (element.classList.contains('e-dropdownlist')) {\n var instance = element.ej2_instances[0];\n instance.index = instance.index || 0;\n instance.dataBind();\n }\n else if (element.classList.contains('e-numerictextbox')) {\n var instance = element.ej2_instances[0];\n var value_1 = void 0;\n if (instance.element.classList.contains(REPEATINTERVAL)) {\n value_1 = 1;\n }\n else if (instance.element.classList.contains(ENDONCOUNT)) {\n value_1 = 10;\n }\n else {\n value_1 = this.startDate.getDate();\n }\n instance.value = instance.value || value_1;\n instance.dataBind();\n }\n }\n };\n RecurrenceEditor.prototype.getPopupWidth = function () {\n return Browser.isDevice ? '100%' : 'auto';\n };\n RecurrenceEditor.prototype.monthDayRendering = function () {\n var self = this;\n this.monthWeekPos.appendTo(this.element.querySelector('.' + MONTHPOS));\n //dayData\n this.monthWeekDays = new DropDownList({\n //set the data to dataSource property\n dataSource: this.getDayData('wide'),\n popupWidth: this.getPopupWidth(),\n enableRtl: this.enableRtl,\n fields: {\n text: TEXTFIELD,\n value: VALUEFIELD\n },\n index: 1,\n change: function (args) {\n if (self.destroyStatus) {\n return;\n }\n self.onWeekDay.setProperties({ checked: true });\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n // render initialized DropDownList\n this.monthWeekDays.appendTo(this.element.querySelector('.' + MONTHWEEK));\n //dayData\n this.monthValue = new DropDownList({\n //set the data to dataSource property\n dataSource: this.getMonthData(),\n fields: {\n text: TEXTFIELD,\n value: VALUEFIELD\n },\n floatLabelType: 'Always',\n enableRtl: this.enableRtl,\n index: 7,\n change: function (args) {\n if (self.destroyStatus) {\n return;\n }\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n // render initialized DropDownList\n this.monthValue.appendTo(this.element.querySelector('.' + YEAREXPANDERELEMENT));\n };\n RecurrenceEditor.prototype.renderDatePickers = function () {\n var self = this;\n this.untilDateObj = new DatePicker({\n enableRtl: this.enableRtl,\n min: this.minDate,\n max: this.maxDate,\n change: function (args) {\n if (args.value) {\n self.triggerChangeEvent();\n }\n }\n });\n this.untilDateObj.appendTo(this.element.querySelector('.' + UNTILDATE));\n };\n RecurrenceEditor.prototype.dayButtonRender = function () {\n var _this = this;\n var btns = this.element.querySelectorAll('.' +\n DAYWRAPPER + ' button');\n var btn;\n var self = this;\n for (var index = 0; index < btns.length; index++) {\n btn = btns[index];\n var button = new Button({\n isToggle: true,\n enableRtl: this.enableRtl\n });\n button.appendTo(btn);\n this.dayButtons.push(button);\n EventHandler.add(btn, 'click', function (args) {\n var btns = _this.element.querySelectorAll('.' +\n DAYWRAPPER + ' button.' + PRIMARY);\n var element = args.target;\n if (!element.classList.contains(PRIMARY)) {\n element.classList.add(PRIMARY);\n self.triggerChangeEvent();\n }\n else if (btns.length > 1) {\n element.classList.remove(PRIMARY);\n self.triggerChangeEvent();\n }\n });\n }\n };\n RecurrenceEditor.prototype.radioButtonRender = function () {\n var self = this;\n this.onMonthDay = new RadioButton({\n label: this.localeObj.getConstant(RADIOLABEL),\n enableRtl: this.enableRtl,\n name: 'monthType',\n value: 'day',\n change: function (args) {\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n this.onMonthDay.appendTo(this.element.querySelector('.' + MONTHEXPANDERELEMENT));\n this.monthButtons.push(this.onMonthDay);\n this.onWeekDay = new RadioButton({\n label: '',\n name: 'monthType',\n enableRtl: this.enableRtl,\n value: 'daypos',\n change: function (args) {\n self.resetFormValues();\n self.triggerChangeEvent();\n }\n });\n this.onWeekDay.appendTo(this.element.querySelector('.' + MONTHEXPANNDERELEM));\n this.monthButtons.push(this.onWeekDay);\n };\n RecurrenceEditor.prototype.numericTextboxRender = function () {\n var self = this;\n this.recurrenceCount = new NumericTextBox({\n value: 10,\n format: '#',\n enableRtl: this.enableRtl,\n floatLabelType: 'Always',\n min: 1,\n change: function (args) {\n self.triggerChangeEvent();\n }\n });\n this.recurrenceCount.appendTo(this.element.querySelector('.' + ENDONCOUNT));\n this.monthDate = new NumericTextBox({\n value: 1,\n format: '#',\n enableRtl: this.enableRtl,\n min: 1,\n max: 31,\n change: function (args) {\n self.onMonthDay.setProperties({ checked: true });\n self.triggerChangeEvent();\n }\n });\n this.monthDate.appendTo(this.element.querySelector('.' + MONTHDAYWRAPPER));\n this.repeatInterval = new NumericTextBox({\n value: 1,\n format: '#',\n min: 1,\n enableRtl: this.enableRtl,\n floatLabelType: 'Always',\n placeholder: this.localeObj.getConstant(REPEATEVERY),\n change: function (args) {\n self.triggerChangeEvent();\n }\n });\n this.repeatInterval.appendTo(this.element.querySelector('.' + REPEATINTERVAL));\n };\n RecurrenceEditor.prototype.renderComponent = function () {\n this.setTemplate();\n this.renderDropdowns();\n this.renderDatePickers();\n this.dayButtonRender();\n this.radioButtonRender();\n this.numericTextboxRender();\n };\n RecurrenceEditor.prototype.rotateArray = function (data, count) {\n var temp;\n for (var index = 0; index < count; index++) {\n temp = data.shift();\n data.push(temp);\n }\n };\n RecurrenceEditor.prototype.getEndData = function () {\n var endData = [NEVER, UNTIL, COUNT];\n var self = this;\n var dataSource = [];\n endData.forEach(function (data) {\n dataSource.push({ text: self.localeObj.getConstant(data), value: data });\n });\n return dataSource;\n };\n RecurrenceEditor.prototype.getDayPosition = function (date) {\n var temp = new Date(date.getTime());\n var endDate = new Date(date.getTime());\n var day = date.getDay();\n var positionCollection = [];\n temp.setDate(1);\n endDate.setDate(1);\n endDate.setMonth(endDate.getMonth() + 1);\n while (temp < endDate) {\n if (temp.getDay() === day) {\n positionCollection.push(temp.getTime());\n }\n temp.setDate(temp.getDate() + 1);\n }\n if (positionCollection.indexOf(date.getTime()) === positionCollection.length - 1) {\n return -1;\n }\n return (positionCollection.indexOf(date.getTime()) + 1);\n };\n RecurrenceEditor.prototype.getRepeatData = function () {\n var data = [];\n var self = this;\n this.frequencies.forEach(function (element) {\n var textValue = (element === NONE) ? NEVER : element;\n data.push({ text: self.localeObj.getConstant(textValue), value: element });\n });\n return data;\n };\n RecurrenceEditor.prototype.getMonthPosData = function () {\n var monthpos = [FIRST, SECOND, THIRD, FOURTH, LAST];\n var monthposValue = {\n first: 1,\n second: 2,\n third: 3,\n fourth: 4,\n last: -1\n };\n var self = this;\n var dataSource = [];\n monthpos.forEach(function (data) {\n dataSource.push({ text: self.localeObj.getConstant(data), value: monthposValue[data] });\n });\n return dataSource;\n };\n RecurrenceEditor.prototype.getDayData = function (format) {\n var weekday = [KEYSUNDAY, KEYMONDAY, KEYTUESDAY, KEYWEDNESDAY, KEYTHURSDAY, KEYFRIDAY, KEYSATURDAY];\n var dayData = [];\n var cldrObj;\n var temp = ((format === 'narrow') ? 'narrow' : 'wide');\n this.rotateArray(weekday, this.firstDayOfWeek);\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrObj = (getValue('days.stand-alone.' + temp, getDefaultDateObject()));\n }\n else {\n cldrObj = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.days.stand-alone.' + temp, cldrData));\n }\n for (var _i = 0, weekday_1 = weekday; _i < weekday_1.length; _i++) {\n var obj = weekday_1[_i];\n dayData.push({ text: getValue(obj, cldrObj), value: valueData[obj] });\n }\n return dayData;\n };\n RecurrenceEditor.prototype.getMonthData = function () {\n var monthData = [];\n var cldrObj;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrObj = (getValue('months.stand-alone.wide', getDefaultDateObject()));\n }\n else {\n cldrObj = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.months.stand-alone.wide', cldrData));\n }\n for (var _i = 0, _a = Object.keys(cldrObj); _i < _a.length; _i++) {\n var obj = _a[_i];\n monthData.push({\n text: getValue(obj, cldrObj),\n value: obj\n });\n }\n return monthData;\n };\n RecurrenceEditor.prototype.setTemplate = function () {\n var dayData = this.getDayData('narrow');\n this.element.innerHTML = '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '' +\n '' +\n '
    ' +\n '
    ' + this.localeObj.getConstant(ON) + '
    ' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '' +\n '
    ' +\n '
    ' +\n '
    ' + this.localeObj.getConstant(ON) + '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '
    ' +\n '' +\n '' +\n '' +\n '' +\n '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '' +\n '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '' +\n '
    ' +\n '' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' + this.localeObj.getConstant(END) + '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '
    ' +\n '' +\n '
    ' +\n '
    ';\n };\n RecurrenceEditor.prototype.getSelectedDaysData = function () {\n var ruleData = RULEBYDAY + EQUAL;\n var elements = this.element.querySelectorAll('.' + DAYWRAPPER + ' button.' + PRIMARY);\n var weekday = [RULESUNDAY, RULEMONDAY, RULETUESDAY, RULEWEDNESDAY, RULETHURSDAY, RULEFRIDAY, RULESATURDAY];\n this.rotateArray(weekday, this.firstDayOfWeek);\n for (var index = 0; index < elements.length; index++) {\n ruleData += weekday[parseInt(elements[index].getAttribute('data-index'), 10)] + (index === (elements.length - 1) ? '' : COMMA);\n }\n return ruleData + SEMICOLON;\n };\n RecurrenceEditor.prototype.getSelectedMonthData = function () {\n var ruleData;\n if (this.onWeekDay.checked) {\n ruleData = RULEBYDAY + EQUAL + this.monthWeekDays.value + SEMICOLON\n + RULESETPOS + EQUAL + this.monthWeekPos.value + SEMICOLON;\n }\n else {\n ruleData = RULEBYMONTHDAY + EQUAL + this.monthDate.value + SEMICOLON;\n }\n return ruleData;\n };\n RecurrenceEditor.prototype.getIntervalData = function () {\n return RULEINTERVAL + EQUAL + this.repeatInterval.value + SEMICOLON;\n };\n RecurrenceEditor.prototype.getEndOnCount = function () {\n return RULECOUNT + EQUAL + this.recurrenceCount.value + SEMICOLON;\n };\n RecurrenceEditor.prototype.getYearMonthRuleData = function () {\n return RULEBYMONTH + EQUAL + this.monthValue.value + SEMICOLON;\n };\n RecurrenceEditor.prototype.updateWeekButton = function (keys) {\n var weekday = [RULESUNDAY, RULEMONDAY, RULETUESDAY, RULEWEDNESDAY, RULETHURSDAY, RULEFRIDAY, RULESATURDAY];\n this.rotateArray(weekday, this.firstDayOfWeek);\n var index;\n for (var _i = 0, _a = this.dayButtons; _i < _a.length; _i++) {\n var obj = _a[_i];\n index = parseInt(obj.element.getAttribute('data-index'), 10);\n if (keys.indexOf(weekday[index]) !== -1) {\n obj.setProperties({ isPrimary: true });\n }\n else {\n obj.setProperties({ isPrimary: false });\n }\n }\n };\n RecurrenceEditor.prototype.updateMonthUI = function () {\n if (this.ruleObject.monthDay.length) {\n this.monthDate.setProperties({ value: this.ruleObject.monthDay[0] });\n this.onMonthDay.setProperties({ checked: true });\n }\n else {\n this.onWeekDay.setProperties({ checked: true });\n this.monthWeekPos.setProperties({ value: this.ruleObject.setPosition });\n for (var _i = 0, _a = Object.keys(valueData); _i < _a.length; _i++) {\n var key = _a[_i];\n if (valueData[key] === this.ruleObject.day[0]) {\n this.monthWeekDays.setProperties({ value: this.ruleObject.day[0] });\n break;\n }\n }\n }\n };\n RecurrenceEditor.prototype.updateUI = function (repeat, state) {\n this.repeatInterval.setProperties({ value: this.ruleObject.interval });\n switch (state) {\n case UNTIL:\n this.untilDateObj.setProperties({ value: this.ruleObject.until });\n break;\n case COUNT:\n this.recurrenceCount.setProperties({ value: this.ruleObject.count });\n break;\n }\n switch (repeat) {\n case WEEKLY:\n this.updateWeekButton(this.ruleObject.day);\n break;\n case YEARLY:\n this.monthValue.setProperties({ index: (this.ruleObject.month[0] - 1) });\n this.updateMonthUI();\n break;\n case MONTHLY:\n this.updateMonthUI();\n break;\n }\n };\n RecurrenceEditor.prototype.getUntilData = function () {\n var tempStr = getRecurrenceStringFromDate(this.untilDateObj.value);\n return RULEUNTIL + EQUAL + tempStr + SEMICOLON;\n };\n RecurrenceEditor.prototype.destroyComponents = function () {\n this.recurrenceCount.destroy();\n this.monthDate.destroy();\n this.repeatInterval.destroy();\n this.untilDateObj.destroy();\n this.repeatType.destroy();\n this.endType.destroy();\n this.monthWeekPos.destroy();\n this.monthWeekDays.destroy();\n this.monthValue.destroy();\n this.dayButtons.forEach(function (element) {\n element.destroy();\n });\n this.monthButtons.forEach(function (element) {\n element.destroy();\n });\n };\n RecurrenceEditor.prototype.resetFields = function () {\n this.startState(NONE, NEVER, this.startDate);\n this.setDefaultValue();\n };\n RecurrenceEditor.prototype.getRuleSummary = function (rule) {\n if (rule === void 0) { rule = this.getRecurrenceRule(); }\n return generateSummary(rule, this.localeObj, this.locale);\n };\n RecurrenceEditor.prototype.getRecurrenceDates = function (startDate, rule, excludeDate, maximumCount, viewDate) {\n if (viewDate === void 0) { viewDate = this.startDate; }\n return generate(startDate, rule, excludeDate, this.firstDayOfWeek, maximumCount, viewDate);\n };\n RecurrenceEditor.prototype.getRecurrenceRule = function () {\n var ruleData = RULEFREQ + EQUAL;\n switch (this.repeatType.value) {\n case DAILY:\n ruleData += RULEDAILY + SEMICOLON;\n break;\n case WEEKLY:\n ruleData += RULEWEEKLY + SEMICOLON + this.getSelectedDaysData();\n break;\n case MONTHLY:\n ruleData += RULEMONTHLY +\n SEMICOLON +\n this.getSelectedMonthData();\n break;\n case YEARLY:\n ruleData += RULEYEARLY +\n SEMICOLON +\n this.getSelectedMonthData() +\n this.getYearMonthRuleData();\n break;\n case NONE:\n return '';\n }\n ruleData += this.getIntervalData();\n switch (this.endType.value) {\n case UNTIL:\n ruleData += this.getUntilData();\n break;\n case COUNT:\n ruleData += this.getEndOnCount();\n break;\n }\n return ruleData;\n };\n RecurrenceEditor.prototype.setRecurrenceRule = function (rule, startDate) {\n if (startDate === void 0) { startDate = this.startDate; }\n if (!rule) {\n this.repeatType.setProperties({ value: NONE });\n }\n this.ruleObject = extractObjectFromRule(rule);\n var endon = this.ruleObject.count ? COUNT : (this.ruleObject.until ? UNTIL : NEVER);\n switch (this.ruleObject.freq) {\n case RULEDAILY:\n this.startState(DAILY, endon, startDate);\n this.updateUI(DAILY, endon);\n break;\n case RULEWEEKLY:\n this.startState(WEEKLY, endon, startDate);\n this.updateUI(WEEKLY, endon);\n break;\n case RULEMONTHLY:\n this.startState(MONTHLY, endon, startDate);\n this.updateUI(MONTHLY, endon);\n break;\n case RULEYEARLY:\n this.startState(YEARLY, endon, startDate);\n this.updateUI(YEARLY, endon);\n break;\n }\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n RecurrenceEditor.prototype.destroy = function () {\n this.destroyStatus = true;\n this.destroyComponents();\n this.element.innerHTML = '';\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n RecurrenceEditor.prototype.getModuleName = function () {\n return 'recurrenceeditor';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\n */\n RecurrenceEditor.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Initialize the control rendering\n * @returns void\n * @private\n */\n RecurrenceEditor.prototype.render = function () {\n this.initialize();\n this.rtlClass(this.enableRtl);\n this.renderStatus = true;\n };\n /**\n * Called internally, if any of the property value changed.\n * @private\n */\n RecurrenceEditor.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'startDate':\n this.selectMonthDay(newProp.startDate);\n this.updateUntilDate(newProp.startDate);\n this.endType.setProperties({ index: 0 });\n break;\n case 'enableRtl':\n this.rtlClass(newProp.enableRtl);\n break;\n case 'cssClass':\n this.applyCustomClass(newProp.cssClass);\n break;\n case 'selectedType':\n this.repeatType.setProperties({ index: this.selectedType });\n break;\n case 'minDate':\n this.untilDateObj.setProperties({ minDate: this.minDate });\n break;\n case 'maxDate':\n this.untilDateObj.setProperties({ maxDate: this.maxDate });\n break;\n }\n }\n };\n __decorate([\n Property(['none', 'daily', 'weekly', 'monthly', 'yearly'])\n ], RecurrenceEditor.prototype, \"frequencies\", void 0);\n __decorate([\n Property(0)\n ], RecurrenceEditor.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property(new Date())\n ], RecurrenceEditor.prototype, \"startDate\", void 0);\n __decorate([\n Property('null')\n ], RecurrenceEditor.prototype, \"dateFormat\", void 0);\n __decorate([\n Property('en-US')\n ], RecurrenceEditor.prototype, \"locale\", void 0);\n __decorate([\n Property('')\n ], RecurrenceEditor.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], RecurrenceEditor.prototype, \"enableRtl\", void 0);\n __decorate([\n Property('')\n ], RecurrenceEditor.prototype, \"value\", void 0);\n __decorate([\n Property(new Date(1900, 1, 1))\n ], RecurrenceEditor.prototype, \"minDate\", void 0);\n __decorate([\n Property(new Date(2099, 12, 31))\n ], RecurrenceEditor.prototype, \"maxDate\", void 0);\n __decorate([\n Property(0)\n ], RecurrenceEditor.prototype, \"selectedType\", void 0);\n __decorate([\n Event()\n ], RecurrenceEditor.prototype, \"change\", void 0);\n RecurrenceEditor = __decorate([\n NotifyPropertyChanges\n ], RecurrenceEditor);\n return RecurrenceEditor;\n}(Component));\nexport { RecurrenceEditor };\n","import { createElement, isNullOrUndefined, addClass, remove, EventHandler, extend, append } from '@syncfusion/ej2-base';\nimport { cldrData, removeClass, getValue, getDefaultDateObject } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { CheckBox, Button } from '@syncfusion/ej2-buttons';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { DateTimePicker } from '@syncfusion/ej2-calendars';\nimport { Timezone, localTimezoneName, timezoneData } from '../timezone/timezone';\nimport { FieldValidator } from './form-validator';\nimport { RecurrenceEditor } from '../../recurrence-editor/recurrence-editor';\nimport * as cls from '../base/css-constant';\nimport * as event from '../base/constant';\nimport * as util from '../base/util';\nvar EVENT_FIELD = 'e-field';\nvar REPEAT_CONTAINER_CLASS = 'e-recurrence-container';\nvar REPEAT_BUTTON_ICON_CLASS = 'e-recurrence-edit';\nvar REPEAT_BUTTON_CLASS = 'e-recurrence-edit-button';\nvar REPEAT_DIALOG_CLASS = 'e-recurrence-dialog';\nvar HIDE_STYLE_CLASS = 'e-hide';\n/**\n * Event editor window\n */\nvar EventWindow = /** @class */ (function () {\n /**\n * Constructor for event window\n */\n function EventWindow(parent) {\n this.parent = parent;\n this.l10n = this.parent.localeObj;\n this.fields = this.parent.eventFields;\n this.fieldValidator = new FieldValidator(this.parent);\n this.timezone = new Timezone();\n this.renderEventWindow();\n }\n EventWindow.prototype.renderEventWindow = function () {\n var dialogContent = this.getEventWindowContent();\n this.element = createElement('div', { id: this.parent.element.id + '_dialog_wrapper' });\n this.parent.element.appendChild(this.element);\n if (this.parent.isAdaptive) {\n this.dialogObject = new Dialog({\n animationSettings: { effect: 'Zoom' },\n content: dialogContent,\n cssClass: cls.EVENT_WINDOW_DIALOG_CLASS + ' ' + cls.EVENT_WINDOW_DEVICE_CLASS,\n enableRtl: this.parent.enableRtl,\n header: '
    ' +\n this.l10n.getConstant('newEvent') + '
    ',\n height: '100%',\n isModal: true,\n showCloseIcon: false,\n target: document.body,\n visible: false,\n beforeOpen: this.onBeforeOpen.bind(this),\n beforeClose: this.onBeforeClose.bind(this)\n });\n }\n else {\n this.dialogObject = new Dialog({\n animationSettings: { effect: 'Zoom' },\n buttons: [{\n buttonModel: { content: this.l10n.getConstant('deleteButton'), cssClass: cls.EVENT_WINDOW_DELETE_BUTTON_CLASS },\n click: this.eventDelete.bind(this)\n }, {\n buttonModel: {\n content: this.l10n.getConstant('saveButton'), cssClass: 'e-primary ' + cls.EVENT_WINDOW_SAVE_BUTTON_CLASS,\n isPrimary: true\n },\n click: this.eventSave.bind(this)\n }, {\n buttonModel: { cssClass: cls.EVENT_WINDOW_CANCEL_BUTTON_CLASS, content: this.l10n.getConstant('cancelButton') },\n click: this.dialogClose.bind(this)\n }],\n content: dialogContent,\n cssClass: cls.EVENT_WINDOW_DIALOG_CLASS,\n enableRtl: this.parent.enableRtl,\n header: '
    ' + this.l10n.getConstant('newEvent') + '
    ',\n isModal: true,\n showCloseIcon: true,\n target: document.body,\n visible: false,\n width: '500px',\n beforeOpen: this.onBeforeOpen.bind(this),\n beforeClose: this.onBeforeClose.bind(this)\n });\n }\n this.dialogObject.appendTo(this.element);\n addClass([this.element.parentElement], cls.EVENT_WINDOW_DIALOG_CLASS + '-container');\n if (this.parent.isAdaptive) {\n EventHandler.add(this.element.querySelector('.' + cls.EVENT_WINDOW_BACK_ICON_CLASS), 'click', this.dialogClose, this);\n EventHandler.add(this.element.querySelector('.' + cls.EVENT_WINDOW_SAVE_ICON_CLASS), 'click', this.eventSave, this);\n }\n this.applyFormValidation();\n };\n EventWindow.prototype.openEditor = function (data, type) {\n this.parent.quickPopup.quickPopup.close({ effect: 'None' });\n if (!this.parent.isAdaptive && isNullOrUndefined(this.parent.editorTemplate)) {\n removeClass([this.dialogObject.element.querySelector('.e-recurrenceeditor')], cls.DISABLE_CLASS);\n }\n switch (type) {\n case 'Add':\n this.cellClickAction = true;\n this.onCellDetailsUpdate(data);\n break;\n case 'Save':\n case 'EditOccurrence':\n case 'EditSeries':\n if (type === 'EditOccurrence' && !this.parent.isAdaptive && isNullOrUndefined(this.parent.editorTemplate)) {\n addClass([this.dialogObject.element.querySelector('.e-recurrenceeditor')], cls.DISABLE_CLASS);\n }\n this.cellClickAction = false;\n this.onEventDetailsUpdate(data);\n break;\n }\n };\n EventWindow.prototype.setDialogContent = function () {\n this.dialogObject.content = this.getEventWindowContent();\n this.dialogObject.dataBind();\n };\n EventWindow.prototype.onBeforeOpen = function (args) {\n var eventProp = { type: 'Editor', data: this.eventData, cancel: false, element: this.element };\n this.parent.trigger(event.popupOpen, eventProp);\n args.cancel = eventProp.cancel;\n };\n EventWindow.prototype.onBeforeClose = function (args) {\n this.parent.eventBase.focusElement();\n };\n EventWindow.prototype.getEventWindowContent = function () {\n var container = createElement('div', { className: cls.EVENT_WINDOW_FORM_DIV_CLASS });\n var form = createElement('form', {\n id: this.parent.element.id + 'EditForm',\n className: cls.EVENT_WINDOW_FORM_CLASS\n });\n if (!isNullOrUndefined(this.parent.editorTemplate)) {\n var templeteEle = this.parent.getEditorTemplate()();\n append([].slice.call(templeteEle), form);\n }\n else {\n var content = this.getDefaultEventWindowContent();\n form.appendChild(content);\n }\n container.appendChild(form);\n return container;\n };\n EventWindow.prototype.getDefaultEventWindowContent = function () {\n var parentDiv = this.createDivElement('e-dialog-parent');\n var titleLocationDiv = this.createDivElement(cls.EVENT_WINDOW_TITLE_LOCATION_DIV_CLASS);\n var titleDiv = this.renderTextBox(cls.EVENT_WINDOW_TITLE_CLASS);\n var locationDiv = this.renderTextBox(cls.EVENT_WINDOW_LOCATION_CLASS);\n titleLocationDiv.appendChild(titleDiv);\n titleLocationDiv.appendChild(locationDiv);\n var startEndDateTimeDiv = this.createDivElement(cls.EVENT_WINDOW_START_END_DIV_CLASS);\n var startDateTimeDiv = this.renderDateTimePicker(cls.EVENT_WINDOW_START_CLASS, this.onTimeChange.bind(this));\n var endDateTimeDiv = this.renderDateTimePicker(cls.EVENT_WINDOW_END_CLASS);\n startEndDateTimeDiv.appendChild(startDateTimeDiv);\n startEndDateTimeDiv.appendChild(endDateTimeDiv);\n var timezoneParentDiv = this.createDivElement(cls.EVENT_WINDOW_TIME_ZONE_DIV_CLASS);\n var startTimezoneDiv = this.renderDropDown(cls.EVENT_WINDOW_START_TZ_CLASS);\n var endTimezoneDiv = this.renderDropDown(cls.EVENT_WINDOW_END_TZ_CLASS);\n timezoneParentDiv.appendChild(startTimezoneDiv);\n timezoneParentDiv.appendChild(endTimezoneDiv);\n var allDayTimezoneDiv = this.createDivElement(cls.EVENT_WINDOW_ALLDAY_TZ_DIV_CLASS);\n var allDayDiv = this.renderCheckBox(cls.EVENT_WINDOW_ALL_DAY_CLASS);\n var timezoneDiv = this.renderCheckBox(cls.EVENT_WINDOW_TZ_CLASS);\n allDayTimezoneDiv.appendChild(allDayDiv);\n allDayTimezoneDiv.appendChild(timezoneDiv);\n var repeatParentDiv = this.createDivElement(cls.EVENT_WINDOW_REPEAT_DIV_CLASS);\n var repeatDiv = this.renderCheckBox(cls.EVENT_WINDOW_REPEAT_CLASS);\n var repeatEditConainer = createElement('span', {\n className: REPEAT_CONTAINER_CLASS\n });\n var button = createElement('button', {\n className: REPEAT_BUTTON_CLASS,\n attrs: { type: 'button', 'title': this.l10n.getConstant('editRecurrence') }\n });\n var buttonObj = new Button({ iconCss: REPEAT_BUTTON_ICON_CLASS + ' e-icons', cssClass: 'e-medium' });\n repeatEditConainer.appendChild(button);\n buttonObj.appendTo(button);\n repeatDiv.appendChild(repeatEditConainer);\n repeatParentDiv.appendChild(repeatDiv);\n var description = this.createDivElement(cls.EVENT_WINDOW_DESCRIPTION_CLASS + '-row');\n var descriptionDiv = this.renderTextBox(cls.EVENT_WINDOW_DESCRIPTION_CLASS);\n description.appendChild(descriptionDiv);\n parentDiv.appendChild(titleLocationDiv);\n parentDiv.appendChild(startEndDateTimeDiv);\n parentDiv.appendChild(allDayTimezoneDiv);\n parentDiv.appendChild(timezoneParentDiv);\n parentDiv.appendChild(repeatParentDiv);\n if (!this.parent.isAdaptive) {\n this.createRecurrenceEditor(parentDiv);\n }\n else {\n EventHandler.add(button, 'click', this.loadRecurrenceEditor, this);\n }\n parentDiv.appendChild(description);\n return parentDiv;\n };\n EventWindow.prototype.createRecurrenceEditor = function (parentDiv) {\n var rec = createElement('div');\n parentDiv.appendChild(rec);\n this.recurrenceEditor = this.renderRecurrenceEditor();\n this.recurrenceEditor.appendTo(rec);\n };\n EventWindow.prototype.createDivElement = function (className) {\n return createElement('div', { className: className });\n };\n EventWindow.prototype.createInputElement = function (className, fieldName, type) {\n return createElement(type || 'input', {\n className: className, attrs: {\n type: 'text', name: fieldName, value: ''\n }\n });\n };\n EventWindow.prototype.renderDateTimePicker = function (value, changeEvent) {\n var dateTimeDiv = this.createDivElement(value + '-container');\n var fieldName = this.getFieldName(value);\n var dateTimeInput = this.createInputElement(value + ' ' + EVENT_FIELD, fieldName);\n dateTimeDiv.appendChild(dateTimeInput);\n var dateTimePicker = new DateTimePicker({\n change: changeEvent, enableRtl: this.parent.enableRtl, floatLabelType: 'Always',\n format: (isNullOrUndefined(this.parent.dateFormat) ?\n this.getFormat('dateFormats') : this.parent.dateFormat) + ' ' + this.getFormat('timeFormats'),\n placeholder: this.l10n.getConstant(value.substr(2)), value: new Date(), width: '100%'\n });\n dateTimePicker.appendTo(dateTimeInput);\n return dateTimeDiv;\n };\n EventWindow.prototype.onTimeChange = function (args) {\n var startObj = this.getInstance(cls.EVENT_WINDOW_START_CLASS);\n if (startObj.element.parentElement.classList.contains('e-input-focus')) {\n var endObj = this.getInstance(cls.EVENT_WINDOW_END_CLASS);\n var duration = 0;\n if (this.cellClickAction) {\n duration = util.MS_PER_MINUTE * 30;\n }\n else {\n var eventData = this.parent.activeEventData.event;\n duration = eventData[this.fields.endTime].getTime() - eventData[this.fields.startTime].getTime();\n }\n endObj.value = new Date(startObj.value.getTime() + duration);\n endObj.dataBind();\n }\n };\n EventWindow.prototype.renderDropDown = function (value) {\n var labelValue;\n var fieldName = this.getFieldName(value);\n labelValue = value === cls.EVENT_WINDOW_START_TZ_CLASS ? 'startTimezone' : 'endTimezone';\n var timezoneDiv = this.createDivElement(value + '-container');\n var timezoneInput = this.createInputElement(value + ' ' + EVENT_FIELD, fieldName);\n timezoneDiv.appendChild(timezoneInput);\n var drowDownList = new DropDownList({\n allowFiltering: true, change: this.onTimezoneChange, dataSource: timezoneData,\n enableRtl: this.parent.enableRtl, fields: { text: 'Text', value: 'Value' },\n filterBarPlaceholder: 'Search Timezone', filtering: function (e) {\n var query = new Query();\n query = (e.text !== '') ? query.where('Text', 'contains', e.text, true) : query;\n e.updateData(timezoneData, query);\n },\n floatLabelType: 'Always', placeholder: this.l10n.getConstant(labelValue), popupHeight: '230px'\n });\n drowDownList.appendTo(timezoneInput);\n timezoneInput.setAttribute('name', fieldName);\n return timezoneDiv;\n };\n EventWindow.prototype.onTimezoneChange = function () {\n if (this.element.getAttribute('name') === 'StartTimezone') {\n var startTimezoneObj = document.querySelector('.' + cls.EVENT_WINDOW_START_TZ_CLASS).ej2_instances[0];\n var endTimezoneObj = document.querySelector('.' + cls.EVENT_WINDOW_END_TZ_CLASS).ej2_instances[0];\n endTimezoneObj.value = startTimezoneObj.value;\n endTimezoneObj.dataBind();\n }\n };\n EventWindow.prototype.renderCheckBox = function (value) {\n var checkBoxDiv = this.createDivElement(value + '-container');\n var fieldName = this.getFieldName(value);\n var checkBoxInput = this.createInputElement(value + ' ' + EVENT_FIELD, fieldName);\n checkBoxDiv.appendChild(checkBoxInput);\n var labelText;\n if (value === cls.EVENT_WINDOW_ALL_DAY_CLASS) {\n labelText = 'e-allDay';\n }\n else if (value === cls.EVENT_WINDOW_TZ_CLASS) {\n labelText = 'e-timezone';\n }\n else {\n labelText = value;\n }\n var checkBox = new CheckBox({\n change: this.onChange.bind(this),\n cssClass: value,\n enableRtl: this.parent.enableRtl,\n label: this.l10n.getConstant(labelText.substr(2)),\n });\n checkBox.appendTo(checkBoxInput);\n checkBoxInput.setAttribute('name', fieldName);\n if (fieldName === 'Repeat') {\n this.repeatStatus = checkBox;\n }\n return checkBoxDiv;\n };\n EventWindow.prototype.renderTextBox = function (value) {\n var textBoxDiv = this.createDivElement(value + '-container');\n var fieldName = this.getFieldName(value);\n var labelText = value === cls.EVENT_WINDOW_TITLE_CLASS ? 'e-title' : value;\n var textBoxInput = this.createInputElement(value + ' ' + EVENT_FIELD, fieldName, (value === cls.EVENT_WINDOW_DESCRIPTION_CLASS) ? 'textarea' : 'input');\n textBoxDiv.appendChild(textBoxInput);\n Input.createInput({\n element: textBoxInput, floatLabelType: 'Always',\n properties: {\n enableRtl: this.parent.enableRtl,\n placeholder: this.l10n.getConstant(labelText.substr(2))\n }\n });\n return textBoxDiv;\n };\n EventWindow.prototype.getFieldName = function (name) {\n var fieldName;\n if (name === 'e-subject') {\n fieldName = this.fields.subject;\n }\n else if (name === 'e-location') {\n fieldName = this.fields.location;\n }\n else if (name === 'e-start') {\n fieldName = this.fields.startTime;\n }\n else if (name === 'e-end') {\n fieldName = this.fields.endTime;\n }\n else if (name === 'e-description') {\n fieldName = this.fields.description;\n }\n else if (name === 'e-all-day') {\n fieldName = this.fields.isAllDay;\n }\n else if (name === 'e-start-time-zone') {\n fieldName = this.fields.startTimezone;\n }\n else if (name === 'e-end-time-zone') {\n fieldName = this.fields.endTimezone;\n }\n else if (name === 'e-time-zone') {\n fieldName = 'Timezone';\n }\n else if (name === 'e-repeat') {\n fieldName = 'Repeat';\n }\n return fieldName;\n };\n EventWindow.prototype.onChange = function (args) {\n var target = (args.event.target);\n if (target.classList.contains(cls.EVENT_WINDOW_ALL_DAY_CLASS)) {\n this.onAllDayChange(args.checked);\n }\n else if (target.classList.contains(cls.EVENT_WINDOW_TZ_CLASS)) {\n this.timezoneChangeStyle(args.checked);\n }\n else if (target.classList.contains(cls.EVENT_WINDOW_REPEAT_CLASS)) {\n this.onRepeatChange(args.checked);\n }\n };\n EventWindow.prototype.renderRepeatDialog = function () {\n var element = createElement('div');\n this.repeatDialogObject = new Dialog({\n header: this.l10n.getConstant('recurrence'),\n visible: false,\n content: '
    ',\n closeOnEscape: true,\n width: '90%',\n buttons: [{\n click: this.repeatSaveDialog.bind(this),\n buttonModel: { content: this.l10n.getConstant('save'), cssClass: 'e-save', isPrimary: true }\n },\n { click: this.repeatCancelDialog.bind(this), buttonModel: { cssClass: 'e-cancel', content: this.l10n.getConstant('cancel') } }],\n target: this.element,\n animationSettings: { effect: 'Zoom' },\n enableRtl: this.parent.enableRtl,\n isModal: true,\n cssClass: REPEAT_DIALOG_CLASS,\n open: this.repeatOpenDialog.bind(this)\n });\n this.element.appendChild(element);\n this.repeatDialogObject.appendTo(element);\n this.createRecurrenceEditor(this.repeatDialogObject.element.querySelector('.e-dlg-content'));\n };\n EventWindow.prototype.loadRecurrenceEditor = function () {\n this.repeatDialogObject.setProperties({ visible: true });\n if (this.recurrenceEditor && this.repeatRule) {\n this.recurrenceEditor.setRecurrenceRule(this.repeatRule);\n }\n };\n EventWindow.prototype.onRepeatChange = function (state) {\n if (state) {\n if (!this.repeatDialogObject) {\n this.renderRepeatDialog();\n }\n this.recurrenceEditor.setProperties({ startDate: this.repeatStartDate, selectedType: 0 });\n this.loadRecurrenceEditor();\n }\n else {\n if (this.repeatDialogObject) {\n this.repeatDialogObject.setProperties({ visible: false });\n }\n this.repeatRule = '';\n if (this.recurrenceEditor) {\n this.recurrenceEditor.setRecurrenceRule(this.repeatRule);\n this.updateRepeatLabel(this.repeatRule);\n }\n var element = this.element.querySelector('.' + REPEAT_CONTAINER_CLASS);\n element.classList.add(HIDE_STYLE_CLASS);\n }\n };\n EventWindow.prototype.repeatSaveDialog = function () {\n this.repeatRule = this.recurrenceEditor.getRecurrenceRule();\n var element = this.element.querySelector('.' + REPEAT_CONTAINER_CLASS);\n if (this.recurrenceEditor.getRecurrenceRule()) {\n element.classList.remove(HIDE_STYLE_CLASS);\n }\n else {\n element.classList.add(HIDE_STYLE_CLASS);\n this.repeatStatus.setProperties({ checked: false });\n }\n this.updateRepeatLabel(this.repeatRule);\n this.closeRepeatDialog();\n };\n EventWindow.prototype.closeRepeatDialog = function () {\n this.repeatDialogObject.setProperties({ visible: false });\n };\n EventWindow.prototype.repeatCancelDialog = function () {\n this.closeRepeatDialog();\n if (this.recurrenceEditor) {\n this.recurrenceEditor.setRecurrenceRule(this.repeatTempRule);\n }\n if (!this.repeatTempRule) {\n this.repeatStatus.setProperties({ checked: false });\n }\n };\n EventWindow.prototype.repeatOpenDialog = function () {\n this.repeatTempRule = this.recurrenceEditor.getRecurrenceRule();\n };\n EventWindow.prototype.onCellDetailsUpdate = function (args) {\n this.element.querySelector('.' + cls.EVENT_WINDOW_FORM_CLASS).removeAttribute('data-id');\n var event = args;\n this.element.querySelector('.' + cls.EVENT_WINDOW_TITLE_TEXT_CLASS).innerHTML = this.l10n.getConstant('newEvent');\n var eventObj = {};\n if (event.subject) {\n eventObj[this.fields.subject] = event.subject;\n }\n eventObj[this.fields.startTime] = event.startTime;\n eventObj[this.fields.endTime] = event.endTime;\n eventObj[this.fields.isAllDay] = event.isAllDay;\n eventObj.Timezone = false;\n this.repeatStartDate = eventObj[this.fields.startTime];\n this.repeatRule = '';\n this.showDetails(eventObj);\n if (this.element.querySelector('.' + cls.EVENT_WINDOW_DELETE_BUTTON_CLASS)) {\n this.element.querySelector('.' + cls.EVENT_WINDOW_DELETE_BUTTON_CLASS).setAttribute('style', 'display:none');\n }\n if (this.recurrenceEditor) {\n this.recurrenceEditor.setProperties({ startDate: event.startTime, selectedType: 0 });\n }\n if (this.parent.isAdaptive && isNullOrUndefined(this.parent.editorTemplate)) {\n var element = this.element.querySelector('.' + REPEAT_CONTAINER_CLASS);\n element.classList.add(HIDE_STYLE_CLASS);\n this.updateRepeatLabel(this.repeatRule);\n }\n this.dialogObject.show();\n };\n EventWindow.prototype.applyFormValidation = function () {\n var form = this.element.querySelector('.' + cls.EVENT_WINDOW_FORM_CLASS);\n var rules = {};\n rules[this.parent.eventSettings.fields.subject.name] = this.parent.eventSettings.fields.subject.validation;\n rules[this.parent.eventSettings.fields.location.name] = this.parent.eventSettings.fields.location.validation;\n rules[this.parent.eventSettings.fields.startTime.name] = this.parent.eventSettings.fields.startTime.validation;\n rules[this.parent.eventSettings.fields.endTime.name] = this.parent.eventSettings.fields.endTime.validation;\n rules[this.parent.eventSettings.fields.description.name] = this.parent.eventSettings.fields.description.validation;\n this.fieldValidator.renderFormValidator(form, rules);\n };\n EventWindow.prototype.showDetails = function (eventData) {\n var eventObj = extend({}, eventData, null, true);\n if (eventObj[this.fields.isAllDay]) {\n var temp = util.addDays(new Date(+eventObj[this.fields.endTime]), -1).getTime();\n eventObj[this.fields.endTime] = (+eventObj[this.fields.startTime] > temp) ? eventObj[this.fields.endTime] : new Date(temp);\n }\n this.eventData = eventObj;\n var formelement = this.getFormElements();\n var keyNames = Object.keys(eventObj);\n for (var index = 0, len = formelement.length; index < len; index++) {\n var columnName = formelement[index].name;\n if (!isNullOrUndefined(columnName)) {\n if (keyNames.indexOf(columnName) !== -1) {\n this.setValueToElement(formelement[index], eventObj[columnName]);\n }\n else {\n this.setDefaultValueToElement(formelement[index]);\n }\n }\n }\n if (isNullOrUndefined(this.parent.editorTemplate)) {\n this.onAllDayChange(eventObj[this.fields.isAllDay]);\n var timezoneObj = this.getInstance(cls.EVENT_WINDOW_TZ_CLASS + '.' + EVENT_FIELD);\n if (!(isNullOrUndefined(eventObj[this.fields.startTimezone]) && isNullOrUndefined(eventObj[this.fields.endTimezone]))) {\n timezoneObj.checked = true;\n timezoneObj.dataBind();\n }\n this.timezoneChangeStyle(timezoneObj.checked);\n delete eventObj.Timezone;\n }\n };\n EventWindow.prototype.onAllDayChange = function (allDayStatus) {\n var startObj = this.getInstance(cls.EVENT_WINDOW_START_CLASS);\n var endObj = this.getInstance(cls.EVENT_WINDOW_END_CLASS);\n var format;\n if (allDayStatus) {\n format = (isNullOrUndefined(this.parent.dateFormat)) ? this.getFormat('dateFormats') : this.parent.dateFormat;\n addClass(this.element.querySelectorAll('.e-time-icon'), cls.EVENT_WINDOW_ICON_DISABLE_CLASS);\n startObj.format = endObj.format = format;\n }\n else {\n format = (isNullOrUndefined(this.parent.dateFormat)) ? this.getFormat('dateFormats') + ' ' + this.getFormat('timeFormats') :\n this.parent.dateFormat + ' ' + this.getFormat('timeFormats');\n removeClass(this.element.querySelectorAll('.e-time-icon'), cls.EVENT_WINDOW_ICON_DISABLE_CLASS);\n startObj.format = endObj.format = format;\n }\n if (this.cellClickAction) {\n this.updateDateTime(allDayStatus, startObj, endObj);\n }\n startObj.dataBind();\n endObj.dataBind();\n };\n EventWindow.prototype.updateDateTime = function (allDayStatus, startObj, endObj) {\n var startDate;\n var endDate;\n if (allDayStatus) {\n startDate = util.resetTime(new Date(this.parent.activeCellsData.startTime.getTime()));\n endDate = this.parent.activeCellsData.isAllDay ?\n util.addDays(new Date(this.parent.activeCellsData.endTime.getTime()), -1) :\n util.resetTime(new Date(this.parent.activeCellsData.startTime.getTime()));\n }\n else {\n startDate = new Date(this.parent.activeCellsData.startTime.getTime());\n if (this.parent.currentView === 'Month' || this.parent.currentView === 'MonthAgenda' || this.parent.activeCellsData.isAllDay) {\n var startHour = this.parent.globalize.parseDate(this.parent.workHours.start, { skeleton: 'Hm' });\n startDate.setHours(startHour.getHours(), startHour.getMinutes(), startHour.getSeconds());\n endDate = new Date(startDate.getTime());\n endDate.setMilliseconds(util.MS_PER_MINUTE * 30);\n }\n else {\n endDate = new Date(this.parent.activeCellsData.endTime.getTime());\n }\n }\n startObj.value = startDate;\n endObj.value = endDate;\n startObj.dataBind();\n endObj.dataBind();\n };\n EventWindow.prototype.getFormat = function (formatType) {\n var format;\n if (this.parent.locale === 'en' || this.parent.locale === 'en-US') {\n format = getValue(formatType + '.short', getDefaultDateObject());\n }\n else {\n format = getValue('main.' + '' + this.parent.locale + '.dates.calendars.gregorian.' + formatType + '.short', cldrData);\n }\n return format;\n };\n EventWindow.prototype.onEventDetailsUpdate = function (eventObj) {\n if (!this.parent.isAdaptive) {\n this.element.querySelector('.' + cls.EVENT_WINDOW_DELETE_BUTTON_CLASS).setAttribute('style', 'display:inline');\n }\n this.element.querySelector('.' + cls.EVENT_WINDOW_TITLE_TEXT_CLASS).innerHTML = this.l10n.getConstant('editEvent');\n this.element.querySelector('.' + cls.EVENT_WINDOW_FORM_CLASS).setAttribute('data-id', eventObj[this.fields.id].toString());\n if (isNullOrUndefined(this.parent.editorTemplate)) {\n eventObj = extend({}, eventObj, null, true);\n var timezoneObj = this.getInstance(cls.EVENT_WINDOW_TZ_CLASS + '.' + EVENT_FIELD);\n var timezoneValue = void 0;\n if (eventObj[this.fields.startTimezone] || eventObj[this.fields.endTimezone]) {\n timezoneValue = true;\n eventObj[this.fields.startTimezone] = eventObj[this.fields.startTimezone] || eventObj[this.fields.endTimezone];\n eventObj[this.fields.endTimezone] = eventObj[this.fields.endTimezone] || eventObj[this.fields.startTimezone];\n if (this.parent.timezone) {\n var startTz = eventObj[this.fields.startTimezone];\n var endTz = eventObj[this.fields.endTimezone];\n eventObj[this.fields.startTime] =\n this.timezone.convert(eventObj[this.fields.startTime], this.parent.timezone, startTz);\n eventObj[this.fields.endTime] =\n this.timezone.convert(eventObj[this.fields.endTime], this.parent.timezone, endTz);\n }\n }\n else {\n timezoneValue = false;\n }\n eventObj.Timezone = timezoneValue;\n timezoneObj.checked = timezoneValue;\n timezoneObj.dataBind();\n }\n this.showDetails(eventObj);\n if (eventObj[this.fields.recurrenceRule] && this.recurrenceEditor) {\n this.recurrenceEditor.setRecurrenceRule(eventObj[this.fields.recurrenceRule], eventObj[this.fields.startTime]);\n }\n else if (!this.parent.isAdaptive && this.recurrenceEditor) {\n this.recurrenceEditor.setRecurrenceRule('');\n }\n this.repeatStartDate = eventObj[this.fields.startTime];\n this.repeatRule = '';\n if (eventObj[this.fields.recurrenceRule]) {\n if (this.recurrenceEditor) {\n this.recurrenceEditor.setRecurrenceRule(eventObj[this.fields.recurrenceRule], eventObj[this.fields.startTime]);\n }\n this.repeatRule = eventObj[this.fields.recurrenceRule];\n }\n if (this.parent.isAdaptive && isNullOrUndefined(this.parent.editorTemplate)) {\n var element = this.element.querySelector('.' + REPEAT_CONTAINER_CLASS);\n if (eventObj[this.fields.recurrenceRule]) {\n element.classList.remove(HIDE_STYLE_CLASS);\n this.repeatStatus.setProperties({ checked: true });\n }\n else {\n element.classList.add(HIDE_STYLE_CLASS);\n this.repeatStatus.setProperties({ checked: false });\n }\n this.updateRepeatLabel(this.repeatRule);\n }\n if (this.parent.readonly) {\n var saveButton = this.element.querySelector('.' + cls.EVENT_WINDOW_SAVE_BUTTON_CLASS);\n saveButton.ej2_instances[0].disabled = true;\n var deleteButton = this.element.querySelector('.' + cls.EVENT_WINDOW_DELETE_BUTTON_CLASS);\n deleteButton.ej2_instances[0].disabled = true;\n }\n this.dialogObject.show();\n };\n EventWindow.prototype.renderRecurrenceEditor = function () {\n return new RecurrenceEditor({\n cssClass: this.parent.cssClass,\n dateFormat: this.parent.dateFormat,\n enableRtl: this.parent.enableRtl,\n firstDayOfWeek: this.parent.firstDayOfWeek,\n locale: this.parent.locale\n });\n };\n EventWindow.prototype.updateRepeatLabel = function (repeatRule) {\n if (this.parent.isAdaptive && !this.repeatDialogObject) {\n this.renderRepeatDialog();\n }\n var data = repeatRule ?\n (this.l10n.getConstant('repeats') + ' ' + this.recurrenceEditor.getRuleSummary(repeatRule)) : this.l10n.getConstant('repeat');\n this.repeatStatus.setProperties({ label: data });\n };\n EventWindow.prototype.dialogClose = function (args) {\n this.dialogObject.hide();\n this.fieldValidator.destroyToolTip();\n this.resetFormFields();\n if (!this.parent.isAdaptive && this.recurrenceEditor) {\n this.recurrenceEditor.resetFields();\n }\n };\n EventWindow.prototype.timezoneChangeStyle = function (value) {\n var timezoneDiv = this.element.querySelector('.' + cls.EVENT_WINDOW_TIME_ZONE_DIV_CLASS);\n if (value) {\n addClass([timezoneDiv], cls.ENABLE_CLASS);\n var startTimezoneObj = this.getInstance(cls.EVENT_WINDOW_START_TZ_CLASS);\n var endTimezoneObj = this.getInstance(cls.EVENT_WINDOW_END_TZ_CLASS);\n var timezone = startTimezoneObj.dataSource;\n if (!startTimezoneObj.value || !this.parent.timezone) {\n var found = timezone.some(function (tz) { return tz.Value === localTimezoneName; });\n if (!found) {\n var obj = {};\n obj = { Value: localTimezoneName, Text: localTimezoneName };\n timezone.push(obj);\n startTimezoneObj.dataSource = timezone;\n endTimezoneObj.dataSource = timezone;\n startTimezoneObj.dataBind();\n endTimezoneObj.dataBind();\n }\n }\n startTimezoneObj.value = startTimezoneObj.value || this.parent.timezone || localTimezoneName;\n endTimezoneObj.value = endTimezoneObj.value || this.parent.timezone || localTimezoneName;\n startTimezoneObj.dataBind();\n endTimezoneObj.dataBind();\n }\n else {\n removeClass([timezoneDiv], cls.ENABLE_CLASS);\n }\n };\n EventWindow.prototype.resetFormFields = function () {\n var formelement = this.getFormElements();\n for (var index = 0, len = formelement.length; index < len; index++) {\n var columnName = formelement[index].name;\n if (!isNullOrUndefined(columnName) && columnName !== '') {\n this.setDefaultValueToElement(formelement[index]);\n }\n }\n };\n EventWindow.prototype.eventSave = function () {\n if (!this.element.querySelector('.' + cls.EVENT_WINDOW_FORM_CLASS)\n .ej2_instances[0].validate()) {\n return;\n }\n var eventObj = {};\n var formelement = this.getFormElements();\n for (var index = 0, len = formelement.length; index < len; index++) {\n var columnName = formelement[index].name;\n if (!isNullOrUndefined(columnName) && columnName !== '' && isNullOrUndefined(eventObj[columnName])) {\n eventObj[columnName] = this.getValueFromElement(formelement[index]);\n }\n }\n if (!eventObj.Timezone) {\n eventObj[this.fields.startTimezone] = null;\n eventObj[this.fields.endTimezone] = null;\n }\n if (isNullOrUndefined(this.parent.editorTemplate)) {\n delete eventObj.Timezone;\n delete eventObj.Repeat;\n if (!eventObj[this.fields.startTime] || !eventObj[this.fields.endTime]) {\n this.parent.quickPopup.openValidationError('invalidDateError');\n return;\n }\n if (eventObj[this.fields.startTime] > eventObj[this.fields.endTime]) {\n this.parent.quickPopup.openValidationError('startEndError');\n return;\n }\n }\n var eventId = this.getEventIdFromForm();\n if (!isNullOrUndefined(eventObj[this.fields.subject])) {\n eventObj[this.fields.subject] = eventObj[this.fields.subject] !== '' ?\n eventObj[this.fields.subject] : this.parent.eventSettings.fields.subject.default;\n }\n if (eventObj[this.fields.isAllDay]) {\n eventObj[this.fields.startTime] = util.resetTime(eventObj[this.fields.startTime]);\n eventObj[this.fields.endTime] = util.addDays(util.resetTime(eventObj[this.fields.endTime]), 1);\n }\n var ruleData = this.recurrenceEditor ? this.recurrenceEditor.getRecurrenceRule() : null;\n eventObj[this.fields.recurrenceRule] = ruleData ? ruleData : undefined;\n if (!isNullOrUndefined(eventId)) {\n var editedData = new DataManager({ json: this.parent.eventsData }).\n executeLocal(new Query().where(this.fields.id, 'equal', parseInt(eventId, 10)))[0];\n eventObj = extend({}, editedData, eventObj);\n if (!isNullOrUndefined(editedData[this.fields.recurrenceRule])) {\n if (this.parent.currentAction === 'EditOccurrence' && !eventObj[this.fields.recurrenceID]) {\n eventObj[this.fields.id] = this.parent.eventBase.getEventMaxId() + 1;\n }\n if (this.parent.currentAction === 'EditSeries' || eventObj[this.fields.id] !==\n editedData[this.fields.id]) {\n eventObj[this.fields.recurrenceID] = editedData[this.fields.id];\n }\n this.parent.saveEvent(eventObj, this.parent.currentAction);\n }\n else {\n this.parent.saveEvent(eventObj);\n }\n }\n else {\n eventObj[this.fields.id] = this.parent.eventBase.getEventMaxId() + 1;\n this.parent.addEvent(eventObj);\n }\n this.dialogObject.hide();\n };\n EventWindow.prototype.getEventIdFromForm = function () {\n return this.element.querySelector('.' + cls.EVENT_WINDOW_FORM_CLASS).getAttribute('data-id');\n };\n EventWindow.prototype.getFormElements = function () {\n return [].slice.call(this.element.querySelectorAll('.' + EVENT_FIELD));\n };\n EventWindow.prototype.getValueFromElement = function (element) {\n var value;\n if (element.classList.contains('e-datepicker')) {\n value = element.ej2_instances[0].value;\n }\n else if (element.classList.contains('e-datetimepicker')) {\n value = element.ej2_instances[0].value;\n }\n else if (element.classList.contains('e-dropdownlist')) {\n value = element.ej2_instances[0].value;\n }\n else if (element.classList.contains('e-checkbox')) {\n value = element.ej2_instances[0].checked;\n }\n else {\n if (element.type === 'checkbox') {\n value = element.checked;\n }\n else {\n value = element.value;\n }\n }\n return value;\n };\n EventWindow.prototype.setValueToElement = function (element, value) {\n if (element.classList.contains('e-datepicker')) {\n var instance = element.ej2_instances[0];\n instance.value = value;\n instance.dataBind();\n }\n else if (element.classList.contains('e-datetimepicker')) {\n var instance = element.ej2_instances[0];\n instance.value = value;\n instance.dataBind();\n }\n else if (element.classList.contains('e-dropdownlist')) {\n var instance = element.ej2_instances[0];\n instance.value = value;\n instance.dataBind();\n }\n else if (element.classList.contains('e-checkbox')) {\n var instance = element.ej2_instances[0];\n instance.checked = value;\n instance.dataBind();\n }\n else {\n if (element.type !== 'checkbox') {\n element.value = value;\n }\n else {\n element.checked = value;\n }\n }\n };\n EventWindow.prototype.setDefaultValueToElement = function (element) {\n if (element.classList.contains('e-datepicker')) {\n var instance = element.ej2_instances[0];\n instance.value = new Date();\n instance.dataBind();\n }\n else if (element.classList.contains('e-datetimepicker')) {\n var instance = element.ej2_instances[0];\n instance.value = new Date();\n instance.dataBind();\n }\n else if (element.classList.contains('e-dropdownlist')) {\n var instance = element.ej2_instances[0];\n instance.value = null;\n instance.dataBind();\n }\n else if (element.classList.contains('e-checkbox')) {\n var instance = element.ej2_instances[0];\n instance.checked = false;\n instance.dataBind();\n }\n else {\n if (element.type === 'checkbox') {\n element.checked = false;\n }\n else {\n element.value = '';\n }\n }\n };\n EventWindow.prototype.getInstance = function (className) {\n return this.element.querySelector('.' + className).ej2_instances[0];\n };\n EventWindow.prototype.eventDelete = function (args) {\n switch (this.parent.currentAction) {\n case 'EditOccurrence':\n var fields = this.parent.eventFields;\n if (!isNullOrUndefined(this.parent.activeEventData.event[fields.recurrenceRule])) {\n this.parent.currentAction = 'DeleteOccurrence';\n }\n else {\n this.parent.currentAction = 'Delete';\n }\n break;\n case 'EditSeries':\n this.parent.currentAction = 'DeleteSeries';\n break;\n }\n this.dialogObject.hide();\n this.parent.quickPopup.openDeleteAlert();\n };\n EventWindow.prototype.getRecurrenceEditorInstance = function () {\n if (this.parent.isAdaptive && !this.repeatDialogObject) {\n this.renderRepeatDialog();\n }\n return this.recurrenceEditor;\n };\n /**\n * To destroy the event window.\n * @return {void}\n * @private\n */\n EventWindow.prototype.destroy = function () {\n if (this.recurrenceEditor) {\n this.recurrenceEditor.destroy();\n }\n if (this.repeatDialogObject) {\n this.repeatDialogObject.destroy();\n remove(this.repeatDialogObject.element);\n }\n if (this.dialogObject) {\n this.dialogObject.destroy();\n this.dialogObject = null;\n }\n if (this.element) {\n remove(this.element);\n this.element = null;\n }\n this.fieldValidator.destroyForm();\n };\n return EventWindow;\n}());\nexport { EventWindow };\n","import { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * Schedule DOM rendering\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render\n */\n function Render(parent) {\n this.parent = parent;\n }\n Render.prototype.render = function (viewName) {\n this.initializeLayout(viewName);\n this.refreshDataManager();\n };\n Render.prototype.initializeLayout = function (viewName) {\n if (this.parent.activeView) {\n this.parent.activeView.removeEventListener();\n this.parent.activeView.destroy();\n }\n switch (viewName) {\n case 'Day':\n this.parent.activeView = this.parent.dayModule;\n break;\n case 'Week':\n this.parent.activeView = this.parent.weekModule;\n break;\n case 'WorkWeek':\n this.parent.activeView = this.parent.workWeekModule;\n break;\n case 'Month':\n this.parent.activeView = this.parent.monthModule;\n break;\n case 'Agenda':\n this.parent.activeView = this.parent.agendaModule;\n break;\n // case 'weekAgenda':\n // this.parent.activeView = this.parent.weekAgendaModule;\n // break;\n // case 'workWeekAgenda':\n // this.parent.activeView = this.parent.workWeekAgendaModule;\n // break;\n case 'MonthAgenda':\n this.parent.activeView = this.parent.monthAgendaModule;\n break;\n }\n if (isNullOrUndefined(this.parent.activeView)) {\n var firstView = this.parent.viewOptions[Object.keys(this.parent.viewOptions)[0]].option;\n if (firstView) {\n this.parent.setProperties({ currentView: firstView }, true);\n if (this.parent.headerModule) {\n this.parent.headerModule.updateActiveView();\n this.parent.headerModule.setCalendarView();\n }\n return this.initializeLayout(firstView);\n }\n throw Error('Inject required modules');\n }\n this.updateLabelText(viewName);\n this.parent.activeView.addEventListener();\n this.parent.activeView.getRenderDates();\n this.parent.activeView.renderLayout(cls.CURRENT_PANEL_CLASS);\n if (this.parent.headerModule) {\n this.parent.headerModule.updateDateRange(this.parent.activeView.getDateRangeText());\n }\n };\n Render.prototype.updateLabelText = function (view) {\n var content = this.parent.activeView.getLabelText(view);\n this.parent.element.setAttribute('role', 'presentation');\n this.parent.element.setAttribute('aria-label', content);\n };\n Render.prototype.refreshDataManager = function () {\n var _this = this;\n var start = this.parent.activeView.startDate();\n var end = this.parent.activeView.endDate();\n var dataManager = this.parent.dataModule.getData(this.parent.dataModule.generateQuery(start, end));\n dataManager.then(function (e) { return _this.dataManagerSuccess(e); })\n .catch(function (e) { return _this.dataManagerFailure(e); });\n };\n Render.prototype.dataManagerSuccess = function (e) {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.trigger(events.dataBinding, e);\n this.parent.eventsData = extend([], e.result, null, true);\n var processed = this.parent.eventBase.processData(this.parent.eventsData);\n this.parent.notify(events.dataReady, { processedData: processed });\n this.parent.trigger(events.dataBound);\n };\n Render.prototype.dataManagerFailure = function (e) {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.trigger(events.actionFailure, { error: e });\n };\n return Render;\n}());\nexport { Render };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configuration of options related to working hours on Schedule.\n */\nvar WorkHours = /** @class */ (function (_super) {\n __extends(WorkHours, _super);\n function WorkHours() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], WorkHours.prototype, \"highlight\", void 0);\n __decorate([\n Property('09:00')\n ], WorkHours.prototype, \"start\", void 0);\n __decorate([\n Property('18:00')\n ], WorkHours.prototype, \"end\", void 0);\n return WorkHours;\n}(ChildProperty));\nexport { WorkHours };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * A Class that holds the collection of event fields that requires to be mapped with the dataSource\n * fields along with its available configuration settings. Each field in it accepts both string and Object\n * data type. When each of the field is assigned with simple `string` value, it is assumed that the dataSource field\n * name is mapped with it. If the `object` type is defined on each fields, then the validation related settings and mapping of\n * those fields with dataSource can be given altogether within it.\n */\nvar Field = /** @class */ (function (_super) {\n __extends(Field, _super);\n function Field() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property({ name: 'Id' })\n ], Field.prototype, \"id\", void 0);\n __decorate([\n Property({ name: 'Subject', default: 'Add title' })\n ], Field.prototype, \"subject\", void 0);\n __decorate([\n Property({ name: 'StartTime' })\n ], Field.prototype, \"startTime\", void 0);\n __decorate([\n Property({ name: 'EndTime' })\n ], Field.prototype, \"endTime\", void 0);\n __decorate([\n Property({ name: 'StartTimezone' })\n ], Field.prototype, \"startTimezone\", void 0);\n __decorate([\n Property({ name: 'EndTimezone' })\n ], Field.prototype, \"endTimezone\", void 0);\n __decorate([\n Property({ name: 'Location' })\n ], Field.prototype, \"location\", void 0);\n __decorate([\n Property({ name: 'Description' })\n ], Field.prototype, \"description\", void 0);\n __decorate([\n Property({ name: 'IsAllDay' })\n ], Field.prototype, \"isAllDay\", void 0);\n __decorate([\n Property({ name: 'RecurrenceID' })\n ], Field.prototype, \"recurrenceID\", void 0);\n __decorate([\n Property({ name: 'RecurrenceRule' })\n ], Field.prototype, \"recurrenceRule\", void 0);\n __decorate([\n Property({ name: 'RecurrenceException' })\n ], Field.prototype, \"recurrenceException\", void 0);\n return Field;\n}(ChildProperty));\nexport { Field };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { Field } from './fields';\n/**\n * Holds the configuration of event related options and dataSource binding to Schedule.\n */\nvar EventSettings = /** @class */ (function (_super) {\n __extends(EventSettings, _super);\n function EventSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], EventSettings.prototype, \"template\", void 0);\n __decorate([\n Property([])\n ], EventSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], EventSettings.prototype, \"query\", void 0);\n __decorate([\n Complex({}, Field)\n ], EventSettings.prototype, \"fields\", void 0);\n __decorate([\n Property(false)\n ], EventSettings.prototype, \"enableTooltip\", void 0);\n __decorate([\n Property()\n ], EventSettings.prototype, \"tooltipTemplate\", void 0);\n return EventSettings;\n}(ChildProperty));\nexport { EventSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Event, Animation } from '@syncfusion/ej2-base';\nimport { EventHandler, Browser, Internationalization, getDefaultDateObject, cldrData, L10n } from '@syncfusion/ej2-base';\nimport { getValue, compile, extend, isNullOrUndefined, NotifyPropertyChanges, Complex } from '@syncfusion/ej2-base';\nimport { removeClass, addClass, createElement } from '@syncfusion/ej2-base';\nimport { HeaderRenderer } from '../renderer/header-renderer';\nimport { Scroll } from '../actions/scroll';\nimport { ScheduleTouch } from '../actions/touch';\nimport { KeyboardInteraction } from '../actions/keyboard';\nimport { Data } from '../actions/data';\nimport { EventBase } from '../event-renderer/event-base';\nimport { QuickPopups } from '../popups/quick-popups';\nimport { EventTooltip } from '../popups/event-tooltip';\nimport { EventWindow } from '../popups/event-window';\nimport { Render } from '../renderer/renderer';\nimport { WorkHours } from '../models/work-hours';\nimport { Crud } from '../actions/crud';\nimport { EventSettings } from '../models/event-settings';\nimport * as events from '../base/constant';\nimport * as cls from '../base/css-constant';\nimport * as util from '../base/util';\n/**\n * Represents the Schedule component that displays a list of events scheduled against specific date and timings,\n * thus helping us to plan and manage it properly.\n * ```html\n *
    \n * ```\n * ```typescript\n * \n * ```\n */\nvar Schedule = /** @class */ (function (_super) {\n __extends(Schedule, _super);\n /**\n * Constructor for creating the Schedule widget\n * @hidden\n */\n function Schedule(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Core method that initializes the control rendering.\n * @private\n */\n Schedule.prototype.render = function () {\n addClass([this.element], cls.ROOT);\n if (this.enableRtl) {\n addClass([this.element], cls.RTL);\n }\n else {\n removeClass([this.element], cls.RTL);\n }\n if (this.isAdaptive) {\n addClass([this.element], cls.DEVICE);\n }\n else {\n removeClass([this.element], cls.DEVICE);\n }\n if (this.cssClass) {\n addClass([this.element], this.cssClass);\n }\n this.validateDate();\n this.eventTooltipTemplateFn = this.templateParser(this.eventSettings.tooltipTemplate);\n this.editorTemplateFn = this.templateParser(this.editorTemplate);\n this.scrollModule = new Scroll(this);\n this.scrollModule.setWidth();\n this.scrollModule.setHeight();\n if (this.showHeaderBar) {\n this.headerModule = new HeaderRenderer(this);\n }\n this.element.appendChild(createElement('div', { className: cls.TABLE_CONTAINER_CLASS }));\n if (Browser.isDevice || Browser.isTouch) {\n this.scheduleTouchModule = new ScheduleTouch(this);\n }\n this.renderModule = new Render(this);\n this.eventBase = new EventBase(this);\n this.initializeDataModule();\n this.initializeView(this.currentView);\n this.initializePopups();\n this.wireEvents();\n };\n Schedule.prototype.validateDate = function () {\n // persist the selected date value\n this.setProperties({ selectedDate: new Date('' + this.selectedDate) }, true);\n };\n Schedule.prototype.setViewOptions = function (isModuleLoad) {\n if (isModuleLoad === void 0) { isModuleLoad = false; }\n this.viewOptions = {};\n var viewName;\n var selectedView;\n for (var _i = 0, _a = this.views; _i < _a.length; _i++) {\n var view = _a[_i];\n var isOptions = (typeof view === 'string') ? false : true;\n if (typeof view === 'string') {\n viewName = view;\n }\n else {\n viewName = view.option;\n if (view.isSelected) {\n selectedView = viewName;\n }\n }\n var obj = extend({ option: viewName }, isOptions ? view : {});\n var fieldViewName = viewName.charAt(0).toLowerCase() + viewName.slice(1);\n this.viewOptions[fieldViewName] = obj;\n }\n if (!isModuleLoad && selectedView) {\n this.setProperties({ currentView: selectedView }, true);\n }\n };\n Schedule.prototype.getActiveViewOptions = function (viewName) {\n var scheduleOptions = {\n dateFormat: this.dateFormat,\n endHour: this.endHour,\n isSelected: false,\n option: null,\n readonly: this.readonly,\n startHour: this.startHour,\n allowVirtualScrolling: true,\n cellTemplate: this.cellTemplate,\n eventTemplate: this.eventSettings.template,\n dateHeaderTemplate: this.dateHeaderTemplate,\n workDays: this.workDays,\n showWeekend: this.showWeekend\n };\n return extend(scheduleOptions, this.viewOptions[viewName.charAt(0).toLowerCase() + viewName.slice(1)]);\n };\n Schedule.prototype.initializeDataModule = function () {\n this.eventFields = {\n id: this.eventSettings.fields.id.name,\n subject: this.eventSettings.fields.subject.name,\n startTime: this.eventSettings.fields.startTime.name,\n endTime: this.eventSettings.fields.endTime.name,\n startTimezone: this.eventSettings.fields.startTimezone.name,\n endTimezone: this.eventSettings.fields.endTimezone.name,\n location: this.eventSettings.fields.location.name,\n description: this.eventSettings.fields.description.name,\n isAllDay: this.eventSettings.fields.isAllDay.name,\n recurrenceID: this.eventSettings.fields.recurrenceID.name,\n recurrenceRule: this.eventSettings.fields.recurrenceRule.name,\n recurrenceException: this.eventSettings.fields.recurrenceException.name,\n };\n this.dataModule = new Data(this.eventSettings.dataSource, this.eventSettings.query);\n this.crudModule = new Crud(this);\n };\n Schedule.prototype.initializeView = function (viewName) {\n this.activeViewOptions = this.getActiveViewOptions(viewName);\n this.initializeTemplates();\n this.renderModule.render(viewName);\n };\n Schedule.prototype.initializeTemplates = function () {\n this.cellTemplateFn = this.templateParser(this.activeViewOptions.cellTemplate);\n this.dateHeaderTemplateFn = this.templateParser(this.activeViewOptions.dateHeaderTemplate);\n this.appointmentTemplateFn = this.templateParser(this.activeViewOptions.eventTemplate);\n };\n Schedule.prototype.initializePopups = function () {\n if (this.eventSettings.enableTooltip) {\n this.eventTooltip = new EventTooltip(this);\n }\n this.eventWindow = new EventWindow(this);\n this.quickPopup = new QuickPopups(this);\n };\n Schedule.prototype.getDayNames = function (type) {\n var culShortNames = [];\n var cldrObj;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrObj = (getValue('days.stand-alone.' + type, getDefaultDateObject()));\n }\n else {\n cldrObj = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.days.format.' + type, cldrData));\n }\n for (var _i = 0, _a = Object.keys(cldrObj); _i < _a.length; _i++) {\n var obj = _a[_i];\n culShortNames.push(getValue(obj, cldrObj));\n }\n return culShortNames;\n };\n Schedule.prototype.changeView = function (view, event, muteOnChange) {\n if (!muteOnChange && view === this.currentView) {\n return;\n }\n var args = { requestType: 'viewNavigate', cancel: false, event: event };\n this.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n var navArgs = { action: 'view', cancel: false, previousView: this.currentView, currentView: view };\n this.trigger(events.navigating, navArgs);\n if (navArgs.cancel) {\n return;\n }\n this.setProperties({ currentView: view }, true);\n if (this.headerModule) {\n this.headerModule.updateActiveView();\n this.headerModule.setCalendarView();\n }\n this.initializeView(this.currentView);\n this.animateLayout();\n args = { requestType: 'viewNavigate', cancel: false, event: event };\n this.trigger(events.actionComplete, args);\n };\n Schedule.prototype.changeDate = function (selectedDate, event) {\n var args = { requestType: 'dateNavigate', cancel: false, event: event };\n this.trigger(events.actionBegin, args);\n if (args.cancel) {\n return;\n }\n var navArgs = {\n action: 'date', cancel: false, previousDate: this.selectedDate, currentDate: selectedDate\n };\n this.trigger(events.navigating, navArgs);\n if (navArgs.cancel) {\n return;\n }\n this.setProperties({ selectedDate: selectedDate }, true);\n if (this.headerModule) {\n this.headerModule.setCalendarDate(selectedDate);\n }\n this.initializeView(this.currentView);\n this.animateLayout();\n args = { requestType: 'dateNavigate', cancel: false, event: event };\n this.trigger(events.actionComplete, args);\n };\n Schedule.prototype.isSelectedDate = function (date) {\n return date.setHours(0, 0, 0, 0) === new Date('' + this.selectedDate).setHours(0, 0, 0, 0);\n };\n Schedule.prototype.animateLayout = function () {\n new Animation({ duration: 600, name: 'FadeIn', timingFunction: 'easeIn' }).animate(this.activeView.element);\n };\n /**\n * To provide the array of modules needed for control rendering\n * @return {ModuleDeclaration[]}\n * @hidden\n */\n Schedule.prototype.requiredModules = function () {\n var modules = [];\n this.setViewOptions(true);\n for (var _i = 0, _a = Object.keys(this.viewOptions); _i < _a.length; _i++) {\n var view = _a[_i];\n modules.push({\n member: view,\n args: [this]\n });\n }\n return modules;\n };\n /**\n * Initializes the values of private members.\n * @private\n */\n Schedule.prototype.preRender = function () {\n this.isAdaptive = Browser.isDevice;\n this.globalize = new Internationalization(this.locale);\n this.uiStateValues = { expand: false, isInitial: true, left: 0, top: 0 };\n this.activeCellsData = { startTime: new Date(), endTime: new Date(), isAllDay: false };\n this.defaultLocale = {\n day: 'Day',\n week: 'Week',\n workWeek: 'Work Week',\n month: 'Month',\n agenda: 'Agenda',\n weekAgenda: 'Week Agenda',\n workWeekAgenda: 'Work Week Agenda',\n monthAgenda: 'Month Agenda',\n today: 'Today',\n noEvents: 'No events',\n allDay: 'All day',\n start: 'Start',\n end: 'End',\n more: 'more',\n close: 'Close',\n cancel: 'Cancel',\n noTitle: '(No Title)',\n delete: 'Delete',\n deleteEvent: 'Delete Event',\n selectedItems: 'Items selected',\n deleteSeries: 'Delete Series',\n edit: 'Edit',\n editSeries: 'Edit Series',\n editEvent: 'Edit Event',\n createEvent: 'Create',\n subject: 'Subject',\n addTitle: 'Add title',\n moreDetails: 'More Details',\n save: 'Save',\n editContent: 'Do you want to edit only this event or entire series?',\n deleteRecurrenceContent: 'Do you want to delete only this event or entire series?',\n deleteContent: 'Are you sure you want to delete this event?',\n newEvent: 'New Event',\n title: 'Title',\n location: 'Location',\n description: 'Description',\n timezone: 'Timezone',\n startTimezone: 'Start Timezone',\n endTimezone: 'End Timezone',\n repeat: 'Repeat',\n saveButton: 'Save',\n cancelButton: 'Cancel',\n deleteButton: 'Delete',\n recurrence: 'Recurrence',\n editRecurrence: 'Edit Recurrence',\n repeats: 'Repeats',\n alert: 'Alert',\n startEndError: 'The selected end date occurs before the start date.',\n invalidDateError: 'The entered date value is invalid.',\n ok: 'Ok'\n };\n this.localeObj = new L10n(this.getModuleName(), this.defaultLocale, this.locale);\n this.eventsData = [];\n this.eventsProcessed = [];\n this.currentAction = null;\n this.selectedElements = [];\n this.setViewOptions();\n };\n /**\n * Binding events to the Schedule element.\n * @hidden\n */\n Schedule.prototype.wireEvents = function () {\n var resize = 'onorientationchange' in window ? 'orientationchange' : 'resize';\n EventHandler.add(window, resize, this.onScheduleResize, this);\n EventHandler.add(document, Browser.touchStartEvent, this.onDocumentClick, this);\n if (this.allowKeyboardInteraction) {\n this.keyboardInteractionModule = new KeyboardInteraction(this);\n }\n };\n Schedule.prototype.removeSelectedClass = function () {\n var selectedCells = this.getSelectedElements();\n for (var _i = 0, selectedCells_1 = selectedCells; _i < selectedCells_1.length; _i++) {\n var cell = selectedCells_1[_i];\n cell.setAttribute('aria-selected', 'false');\n cell.removeAttribute('tabindex');\n }\n removeClass(selectedCells, cls.SELECTED_CELL_CLASS);\n };\n Schedule.prototype.addSelectedClass = function (cells, focusCell) {\n for (var _i = 0, cells_1 = cells; _i < cells_1.length; _i++) {\n var cell = cells_1[_i];\n cell.setAttribute('aria-selected', 'true');\n }\n addClass(cells, cls.SELECTED_CELL_CLASS);\n focusCell.setAttribute('tabindex', '0');\n focusCell.focus();\n };\n Schedule.prototype.selectCell = function (element) {\n this.removeSelectedClass();\n this.addSelectedClass([element], element);\n };\n Schedule.prototype.getSelectedElements = function () {\n return [].slice.call(this.element.querySelectorAll('.' + cls.SELECTED_CELL_CLASS));\n };\n Schedule.prototype.getAllDayRow = function () {\n return this.element.querySelector('.' + cls.ALLDAY_ROW_CLASS);\n };\n Schedule.prototype.getContentTable = function () {\n return this.element.querySelector('.' + cls.CONTENT_TABLE_CLASS);\n };\n Schedule.prototype.getWorkCellElements = function () {\n return [].slice.call(this.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS));\n };\n Schedule.prototype.getIndexOfDate = function (collection, date) {\n return collection.map(Number).indexOf(+date);\n };\n Schedule.prototype.isAllDayCell = function (td) {\n if (this.currentView === 'Month' || td.classList.contains(cls.ALLDAY_CELLS_CLASS) ||\n td.classList.contains(cls.HEADER_CELLS_CLASS)) {\n return true;\n }\n return false;\n };\n Schedule.prototype.getDateFromElement = function (td) {\n if (!isNullOrUndefined(td.getAttribute('data-date'))) {\n var dateInMS = parseInt(td.getAttribute('data-date'), 10);\n return new Date(dateInMS);\n }\n return undefined;\n };\n Schedule.prototype.getCellTemplate = function () {\n return this.cellTemplateFn;\n };\n Schedule.prototype.getDateHeaderTemplate = function () {\n return this.dateHeaderTemplateFn;\n };\n Schedule.prototype.getAppointmentTemplate = function () {\n return this.appointmentTemplateFn;\n };\n Schedule.prototype.getEventTooltipTemplate = function () {\n return this.eventTooltipTemplateFn;\n };\n Schedule.prototype.getEditorTemplate = function () {\n return this.editorTemplateFn;\n };\n Schedule.prototype.onDocumentClick = function (args) {\n this.notify(events.documentClick, { event: args });\n };\n Schedule.prototype.onScheduleResize = function (args) {\n if (this.currentView === 'Month') {\n this.notify(events.dataReady, {});\n }\n };\n Schedule.prototype.templateParser = function (template) {\n if (template) {\n var error = void 0;\n try {\n if (document.querySelectorAll(template).length) {\n return compile(document.querySelector(template).innerHTML.trim());\n }\n }\n catch (error) {\n return compile(template);\n }\n }\n return undefined;\n };\n /**\n * Unbinding events from the element on widget destroy.\n * @hidden\n */\n Schedule.prototype.unwireEvents = function () {\n var resize = 'onorientationchange' in window ? 'orientationchange' : 'resize';\n EventHandler.remove(window, resize, this.onScheduleResize);\n EventHandler.remove(document, 'click', this.onDocumentClick);\n if (this.keyboardInteractionModule) {\n this.keyboardInteractionModule.destroy();\n }\n };\n /**\n * Core method to return the component name.\n * @private\n */\n Schedule.prototype.getModuleName = function () {\n return 'schedule';\n };\n /**\n * Returns the properties to be maintained in the persisted state.\n * @private\n */\n Schedule.prototype.getPersistData = function () {\n return this.addOnPersist(['currentView', 'selectedDate']);\n };\n /**\n * Called internally, if any of the property value changed.\n * @private\n */\n Schedule.prototype.onPropertyChanged = function (newProp, oldProp) {\n var requireRefresh = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n case 'height':\n this.notify(events.uiUpdate, {\n module: 'scroll',\n properties: { width: newProp.width, height: newProp.height }\n });\n break;\n case 'views':\n this.setViewOptions();\n if (this.headerModule) {\n this.headerModule.updateItems();\n }\n this.changeView(this.currentView, null, true);\n break;\n case 'currentView':\n this.changeView(newProp.currentView, null, true);\n break;\n case 'selectedDate':\n this.changeDate(newProp.selectedDate);\n break;\n case 'dateFormat':\n this.activeViewOptions = this.getActiveViewOptions(this.currentView);\n if (this.headerModule) {\n this.headerModule.updateDateRange(this.activeView.getDateRangeText());\n }\n break;\n case 'showHeaderBar':\n if (this.headerModule) {\n this.headerModule.destroy();\n this.headerModule = null;\n }\n if (newProp.showHeaderBar) {\n this.headerModule = new HeaderRenderer(this);\n }\n var cssProps = this.enableRtl ? { border: 'borderLeftWidth', padding: 'paddingLeft' } :\n { border: 'borderRightWidth', padding: 'paddingRight' };\n var uiArgs = { cssProperties: cssProps };\n this.notify(events.scrollUiUpdate, uiArgs);\n break;\n case 'showWeekend':\n case 'workDays':\n case 'startHour':\n case 'endHour':\n case 'workHours':\n case 'readonly':\n requireRefresh = true;\n break;\n case 'locale':\n this.refresh();\n break;\n case 'firstDayOfWeek':\n if (this.headerModule) {\n this.headerModule.setDayOfWeek(newProp.firstDayOfWeek);\n }\n requireRefresh = true;\n break;\n case 'showTimeIndicator':\n this.activeView.highlightCurrentTime();\n break;\n case 'cellTemplate':\n this.activeViewOptions.cellTemplate = newProp.cellTemplate;\n this.cellTemplateFn = this.templateParser(this.activeViewOptions.cellTemplate);\n requireRefresh = true;\n break;\n case 'dateHeaderTemplate':\n this.activeViewOptions.dateHeaderTemplate = newProp.dateHeaderTemplate;\n this.dateHeaderTemplateFn = this.templateParser(this.activeViewOptions.dateHeaderTemplate);\n requireRefresh = true;\n break;\n case 'eventSettings':\n this.onEventSettingsPropertyChanged(newProp.eventSettings, oldProp.eventSettings);\n break;\n case 'timezone':\n this.eventBase.timezonePropertyChange(oldProp.timezone);\n break;\n case 'enableRtl':\n if (this.headerModule) {\n this.headerModule.setRtl(this.enableRtl);\n }\n if (this.enableRtl) {\n addClass([this.element], cls.RTL);\n }\n else {\n removeClass([this.element], cls.RTL);\n }\n requireRefresh = true;\n break;\n default:\n this.extendedPropertyChange(prop, newProp, oldProp);\n break;\n }\n }\n if (requireRefresh) {\n this.initializeView(this.currentView);\n }\n };\n Schedule.prototype.extendedPropertyChange = function (prop, newProp, oldProp) {\n switch (prop) {\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass);\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass);\n }\n break;\n case 'hideEmptyAgendaDays':\n case 'agendaDaysCount':\n this.activeViewOptions = this.getActiveViewOptions(this.currentView);\n this.changeView(this.currentView, null, true);\n break;\n case 'allowKeyboardInteraction':\n if (this.keyboardInteractionModule) {\n this.keyboardInteractionModule.destroy();\n this.keyboardInteractionModule = null;\n }\n if (newProp.allowKeyboardInteraction) {\n this.keyboardInteractionModule = new KeyboardInteraction(this);\n }\n break;\n case 'editorTemplate':\n if (!isNullOrUndefined(this.editorTemplate)) {\n this.editorTemplateFn = this.templateParser(this.editorTemplate);\n }\n this.eventWindow.setDialogContent();\n break;\n }\n };\n Schedule.prototype.onEventSettingsPropertyChanged = function (newProp, oldProp) {\n var requireRefresh = false;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'dataSource':\n case 'query':\n case 'fields':\n this.initializeDataModule();\n requireRefresh = true;\n break;\n case 'template':\n this.activeViewOptions.eventTemplate = newProp.template;\n this.appointmentTemplateFn = this.templateParser(this.activeViewOptions.eventTemplate);\n requireRefresh = true;\n break;\n case 'enableTooltip':\n if (this.eventTooltip) {\n this.eventTooltip.destroy();\n this.eventTooltip = null;\n }\n if (newProp.enableTooltip) {\n this.eventTooltip = new EventTooltip(this);\n }\n break;\n case 'tooltipTemplate':\n this.eventTooltipTemplateFn = this.templateParser(this.eventSettings.tooltipTemplate);\n break;\n }\n }\n if (requireRefresh) {\n this.renderModule.refreshDataManager();\n }\n };\n /**\n * Sets different working hours on the required working days by accepting the required start and end time as well as the date collection\n * as its parameters.\n * @method setWorkHours\n * @param {date} dates Collection of dates on which the given start and end hour range needs to be applied.\n * @param {string} start Defines the work start hour.\n * @param {string} end Defines the work end hour.\n * @returns {void}\n */\n Schedule.prototype.setWorkHours = function (dates, start, end) {\n var startHour = this.globalize.parseDate(start, { skeleton: 'Hm' });\n var endHour = this.globalize.parseDate(end, { skeleton: 'Hm' });\n var tableEle = this.getContentTable();\n if (isNullOrUndefined(startHour) || isNullOrUndefined(endHour) || !tableEle) {\n return;\n }\n startHour.setMilliseconds(0);\n endHour.setMilliseconds(0);\n var viewStartHour = this.activeView.getStartHour();\n if (startHour < viewStartHour) {\n startHour = viewStartHour;\n }\n if (endHour > this.activeView.getEndHour()) {\n endHour = this.activeView.getEndHour();\n }\n var msMajorInterval = 60 * util.MS_PER_MINUTE;\n var msInterval = msMajorInterval / 2;\n var startIndex = Math.round((util.getDateInMs(startHour) - util.getDateInMs(viewStartHour)) / msInterval);\n var endIndex = Math.ceil((util.getDateInMs(endHour) - util.getDateInMs(viewStartHour)) / msInterval);\n var cells = [];\n for (var _i = 0, dates_1 = dates; _i < dates_1.length; _i++) {\n var date = dates_1[_i];\n util.resetTime(date);\n var colIndex = this.getIndexOfDate(this.activeView.renderDates, date);\n if (colIndex >= 0) {\n for (var i = startIndex; i < endIndex; i++) {\n cells.push(tableEle.rows[i].cells[colIndex]);\n }\n }\n }\n addClass(cells, cls.WORK_HOURS_CLASS);\n };\n /**\n * Retrieves the start and end time information of the specific cell element.\n * @method getCellDetails\n * @param {Element} td The cell element whose start and end time details are to be retrieved.\n * @returns {CellClickEventArgs} Object An object holding the startTime, endTime and all-day information along with the target HTML\n * element will be returned.\n */\n Schedule.prototype.getCellDetails = function (td) {\n var startTime = this.getDateFromElement(td);\n var endTime;\n if (td.classList.contains(cls.ALLDAY_CELLS_CLASS) || td.classList.contains(cls.HEADER_CELLS_CLASS)) {\n endTime = util.addDays(new Date(startTime.getTime()), 1);\n }\n else {\n endTime = this.activeView.getEndDateFromStartDate(startTime);\n }\n var data = {\n startTime: startTime,\n endTime: endTime,\n isAllDay: this.isAllDayCell(td),\n element: td\n };\n return data;\n };\n /**\n * Scrolls the Schedule content area to the specified time.\n * @method scrollTo\n * @param {string} hour Accepts the time value in the skeleton format of 'Hm'.\n * @returns {void}\n */\n Schedule.prototype.scrollTo = function (hour) {\n if (this.activeView.scrollToHour) {\n this.activeView.scrollToHour(hour);\n }\n };\n /**\n * Adds the newly created event into the Schedule dataSource.\n * @method addEvent\n * @param {Object | Object[]} data Single or collection of event objects to be added into Schedule.\n * @returns {void}\n */\n Schedule.prototype.addEvent = function (data) {\n this.crudModule.addEvent(data);\n };\n /**\n * Updates the changes made in the event object by passing it as an parameter into the dataSource.\n * @method saveEvent\n * @param {[key: string]: Object} data Single or collection of event objects to be saved into Schedule.\n * @param {CurrentAction} currentAction Denotes the action that takes place either for editing occurrence or series.\n * The valid current action names are `EditOccurrence` or `EditSeries`.\n * @returns {void}\n */\n Schedule.prototype.saveEvent = function (data, currentAction) {\n this.crudModule.saveEvent(data, currentAction);\n };\n /**\n * Deletes the events based on the provided ID or event collection in the argument list.\n * @method deleteEvent\n * @param {{[key: string]: Object}} id Single event objects to be removed from the Schedule.\n * @param {{[key: string]: Object }[]} id Collection of event objects to be removed from the Schedule.\n * @param {string | number} id Accepts the ID of the event object which needs to be removed from the Schedule.\n * @param {CurrentAction} currentAction Denotes the delete action that takes place either on occurrence or series events.\n * The valid current action names are `Delete`, `DeleteOccurrence` or `DeleteSeries`.\n * @returns {void}\n */\n Schedule.prototype.deleteEvent = function (id, currentAction) {\n this.crudModule.deleteEvent(id, currentAction);\n };\n /**\n * Retrieves the entire collection of events bound to the Schedule.\n * @method getEvents\n * @returns {Object[]} Returns the collection of event objects from the Schedule.\n */\n Schedule.prototype.getEvents = function () {\n return this.eventsData;\n };\n /**\n * Retrieves the occurrences of a single recurrence event based on the provided parent ID.\n * @method getOccurrencesByID\n * @param {number} eventID ID of the parent recurrence data from which the occurrences are fetched.\n * @returns {Object[]} Returns the collection of occurrence event objects.\n */\n Schedule.prototype.getOccurrencesByID = function (eventID) {\n var occurrenceObj = this.eventBase.getOccurrencesByID(eventID);\n return occurrenceObj;\n };\n /**\n * Retrieves all the occurrences that lies between the specific start and end time range.\n * @method getOccurrencesByRange\n * @param {Date} startTime Denotes the start time range.\n * @param {Date} endTime Denotes the end time range.\n * @returns {Object[]} Returns the collection of occurrence event objects that lies between the provided start and end time.\n */\n Schedule.prototype.getOccurrencesByRange = function (startTime, endTime) {\n var occurrenceObj = this.eventBase.getOccurrencesByRange(startTime, endTime);\n return occurrenceObj;\n };\n /**\n * Retrieves the events that lies on the current date range of the active view of Schedule.\n * @method getCurrentViewEvents\n * @returns {Object[]} Returns the collection of events.\n */\n Schedule.prototype.getCurrentViewEvents = function () {\n return this.eventsProcessed;\n };\n /**\n * Refreshes the event dataSource. This method may be useful when the events alone in the Schedule needs to be re-rendered.\n * @method refreshEvents\n * @returns {void}\n */\n Schedule.prototype.refreshEvents = function () {\n this.renderModule.refreshDataManager();\n };\n /**\n * To get the appointment object from element.\n * @method getEventDetails\n * @param {Element} element Denotes the event UI element on the Schedule.\n * @returns {Object} Returns the event details.\n */\n Schedule.prototype.getEventDetails = function (element) {\n var guid = element.getAttribute('data-guid');\n if (guid) {\n return this.eventBase.getEventByGuid(guid);\n }\n return {};\n };\n /**\n * To check whether the given time range slots are available for event creation or already occupied by other events.\n * @method isSlotAvailable\n * @param {Date} startTime Denotes the start time of the slot.\n * @param {Date} endTime Denotes the end time of the slot.\n * @returns {boolean} Returns true, if the slot that lies in the provided time range does not contain any other events.\n */\n Schedule.prototype.isSlotAvailable = function (startTime, endTime) {\n var getAvailableObject = this.eventBase.filterEvents(startTime, endTime);\n return (getAvailableObject.length) ? false : true;\n };\n /**\n * To manually open the event editor on specific time or on certain events.\n * @method openEditor\n * @param {Object} data It can be either cell data or event data.\n * @param {CurrentAction} action Defines the action for which the editor needs to be opened such as either for new event creation or\n * for editing of existing events. The applicable action names that can be used here are `Add`, `Save`, `EditOccurrence`\n * and `EditSeries`.\n * @returns {void}\n */\n Schedule.prototype.openEditor = function (data, action) {\n this.eventWindow.openEditor(data, action);\n };\n /**\n * This method has been added to adjust the size of the outer event wrapper class that holds the collection of events,\n * while trying to set manual height and width to the Schedule cells.\n * @method adjustEventWrapper\n * @returns {void}\n */\n Schedule.prototype.adjustEventWrapper = function () {\n this.activeView.adjustEventWrapper();\n };\n /**\n * Destroys the Schedule component.\n * @method destroy\n * @return {void}\n */\n Schedule.prototype.destroy = function () {\n if (this.quickPopup) {\n this.quickPopup.destroy();\n }\n if (this.eventWindow) {\n this.eventWindow.destroy();\n }\n this.unwireEvents();\n if (this.headerModule) {\n this.headerModule.destroy();\n this.headerModule = null;\n }\n if (this.scrollModule) {\n this.scrollModule.destroy();\n }\n if (this.activeView) {\n this.activeView.removeEventListener();\n this.activeView.destroy();\n this.activeView = null;\n }\n if (this.scheduleTouchModule) {\n this.scheduleTouchModule.destroy();\n }\n _super.prototype.destroy.call(this);\n this.element.innerHTML = '';\n removeClass([this.element], cls.ROOT);\n };\n __decorate([\n Property('auto')\n ], Schedule.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Schedule.prototype, \"height\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"showHeaderBar\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"showTimeIndicator\", void 0);\n __decorate([\n Property('Week')\n ], Schedule.prototype, \"currentView\", void 0);\n __decorate([\n Property(['Day', 'Week', 'WorkWeek', 'Month', 'Agenda'])\n ], Schedule.prototype, \"views\", void 0);\n __decorate([\n Property(new Date())\n ], Schedule.prototype, \"selectedDate\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"dateFormat\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"showWeekend\", void 0);\n __decorate([\n Property(0)\n ], Schedule.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property([1, 2, 3, 4, 5])\n ], Schedule.prototype, \"workDays\", void 0);\n __decorate([\n Property('00:00')\n ], Schedule.prototype, \"startHour\", void 0);\n __decorate([\n Property('24:00')\n ], Schedule.prototype, \"endHour\", void 0);\n __decorate([\n Complex({}, WorkHours)\n ], Schedule.prototype, \"workHours\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"allowKeyboardInteraction\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"dateHeaderTemplate\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"cellTemplate\", void 0);\n __decorate([\n Property(false)\n ], Schedule.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"showQuickInfo\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"editorTemplate\", void 0);\n __decorate([\n Property(7)\n ], Schedule.prototype, \"agendaDaysCount\", void 0);\n __decorate([\n Property(true)\n ], Schedule.prototype, \"hideEmptyAgendaDays\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"timezone\", void 0);\n __decorate([\n Complex({}, EventSettings)\n ], Schedule.prototype, \"eventSettings\", void 0);\n __decorate([\n Property()\n ], Schedule.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Schedule.prototype, \"enableRtl\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"cellClick\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"cellDoubleClick\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"navigating\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"renderCell\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"eventClick\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"eventRendered\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"dataBinding\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"popupOpen\", void 0);\n __decorate([\n Event()\n ], Schedule.prototype, \"dataBound\", void 0);\n Schedule = __decorate([\n NotifyPropertyChanges\n ], Schedule);\n return Schedule;\n}(Component));\nexport { Schedule };\n","import { createElement, prepend, isNullOrUndefined, getValue, getDefaultDateObject, cldrData } from '@syncfusion/ej2-base';\nimport { getDateInMs, addDays, resetTime, WEEK_LENGTH } from '../base/util';\nimport * as cls from '../base/css-constant';\n/**\n * view base\n */\nvar ViewBase = /** @class */ (function () {\n /**\n * Constructor\n */\n function ViewBase(parent) {\n var _this = this;\n this.customHelper = {\n getDayName: function (dt) {\n return _this.parent.getDayNames('abbreviated')[dt.getDay()];\n },\n getDate: function (dt) {\n return _this.parent.globalize.formatDate(dt, { format: 'd' });\n },\n getTime: function (dt) {\n if (_this.parent.isAdaptive) {\n return _this.parent.globalize.formatDate(dt, { skeleton: 'h' });\n }\n return _this.parent.globalize.formatDate(dt, { skeleton: 'hm' });\n }\n };\n this.parent = parent;\n this.l10n = this.parent.localeObj;\n }\n ViewBase.prototype.createTableLayout = function (className) {\n var clsName = className || '';\n var table = createElement('table', { className: cls.SCHEDULE_TABLE_CLASS + ' ' + clsName });\n var tbody = createElement('tbody');\n table.appendChild(tbody);\n return table;\n };\n ViewBase.prototype.renderPanel = function (type) {\n if (type === cls.PREVIOUS_PANEL_CLASS) {\n prepend([this.element], this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS));\n }\n else {\n this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS).appendChild(this.element);\n }\n };\n ViewBase.prototype.setPanel = function (panel) {\n this.element = panel;\n };\n ViewBase.prototype.getPanel = function () {\n return this.element;\n };\n ViewBase.prototype.adjustEventWrapper = function () {\n // Here adjust the events wrapper width based in work cells\n };\n ViewBase.prototype.startDate = function () {\n return this.renderDates[0];\n };\n ViewBase.prototype.endDate = function () {\n return addDays(this.renderDates[this.renderDates.length - 1], 1);\n };\n ViewBase.prototype.getStartHour = function () {\n var startHour = this.parent.globalize.parseDate(this.parent.activeViewOptions.startHour, { skeleton: 'Hm' });\n if (isNullOrUndefined(startHour)) {\n startHour = new Date(2000, 0, 0, 0);\n }\n return startHour;\n };\n ViewBase.prototype.getEndHour = function () {\n var endHour = this.parent.globalize.parseDate(this.parent.activeViewOptions.endHour, { skeleton: 'Hm' });\n if (isNullOrUndefined(endHour)) {\n endHour = new Date(2000, 0, 0, 0);\n }\n return endHour;\n };\n ViewBase.prototype.isCurrentDate = function (date) {\n return date.setHours(0, 0, 0, 0) === new Date().setHours(0, 0, 0, 0);\n };\n ViewBase.prototype.isCurrentMonth = function (date) {\n return date.getFullYear() === new Date().getFullYear() && date.getMonth() === new Date().getMonth();\n };\n ViewBase.prototype.isWorkDay = function (date) {\n if (this.parent.activeViewOptions.workDays.indexOf(date.getDay()) >= 0) {\n return true;\n }\n return false;\n };\n ViewBase.prototype.isWorkHour = function (date) {\n var startHour = this.parent.globalize.parseDate(this.parent.workHours.start, { skeleton: 'Hm' });\n var endHour = this.parent.globalize.parseDate(this.parent.workHours.end, { skeleton: 'Hm' });\n if (isNullOrUndefined(startHour) || isNullOrUndefined(endHour)) {\n return false;\n }\n startHour.setMilliseconds(0);\n endHour.setMilliseconds(0);\n if (getDateInMs(date) < getDateInMs(startHour) || getDateInMs(date) >= getDateInMs(endHour) || !this.isWorkDay(date)) {\n return false;\n }\n return true;\n };\n ViewBase.prototype.getRenderDates = function () {\n this.renderDates = [];\n this.renderDates.push(resetTime(this.parent.selectedDate));\n };\n ViewBase.prototype.getNextPreviousDate = function (type) {\n if (type === 'next') {\n return addDays(this.parent.selectedDate, WEEK_LENGTH);\n }\n else {\n return addDays(this.parent.selectedDate, -WEEK_LENGTH);\n }\n };\n ViewBase.prototype.getLabelText = function (view) {\n return this.parent.localeObj.getConstant(view) + ' of ' +\n this.parent.globalize.formatDate(this.parent.selectedDate, { skeleton: 'long' });\n };\n ViewBase.prototype.getDateRangeText = function () {\n if (this.parent.isAdaptive) {\n return this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM y' });\n }\n return this.formatDateRange(this.renderDates[0], this.renderDates[this.renderDates.length - 1]);\n };\n ViewBase.prototype.formatDateRange = function (startDate, endDate) {\n var globalize = this.parent.globalize;\n if (!isNullOrUndefined(this.parent.activeViewOptions.dateFormat)) {\n if (!endDate) {\n return globalize.formatDate(startDate, { format: this.parent.activeViewOptions.dateFormat });\n }\n return globalize.formatDate(startDate, { format: this.parent.activeViewOptions.dateFormat }) + ' - ' +\n globalize.formatDate(endDate, { format: this.parent.activeViewOptions.dateFormat });\n }\n var formattedStr;\n var longDateFormat;\n if (this.parent.locale === 'en' || this.parent.locale === 'en-US') {\n longDateFormat = getValue('dateFormats.long', getDefaultDateObject());\n }\n else {\n longDateFormat = getValue('main.' + '' + this.parent.locale + '.dates.calendars.gregorian.dateFormats.long', cldrData);\n }\n if (!endDate) {\n return globalize.formatDate(startDate, { format: longDateFormat });\n }\n var dateFormat = longDateFormat.trim().toLocaleLowerCase();\n if (dateFormat.substr(0, 1) === 'd') {\n if (startDate.getFullYear() === endDate.getFullYear()) {\n if (startDate.getMonth() === endDate.getMonth()) {\n formattedStr = globalize.formatDate(startDate, { format: 'dd' }) + ' - ' +\n globalize.formatDate(endDate, { format: 'dd MMMM yyyy' });\n }\n else {\n formattedStr = globalize.formatDate(startDate, { format: 'dd MMM' }) + ' - ' +\n globalize.formatDate(endDate, { format: 'dd MMM yyyy' });\n }\n }\n else {\n formattedStr = globalize.formatDate(startDate, { format: 'dd MMM yyyy' }) + ' - ' +\n globalize.formatDate(endDate, { format: 'dd MMM yyyy' });\n }\n }\n else if (dateFormat.substr(0, 1) === 'm') {\n if (startDate.getFullYear() === endDate.getFullYear()) {\n if (startDate.getMonth() === endDate.getMonth()) {\n formattedStr = globalize.formatDate(startDate, { format: 'MMMM dd' }) + ' - ' +\n globalize.formatDate(endDate, { format: 'dd, yyyy' });\n }\n else {\n formattedStr = globalize.formatDate(startDate, { format: 'MMM dd' }) + ' - ' +\n globalize.formatDate(endDate, { format: 'MMM dd, yyyy' });\n }\n }\n else {\n formattedStr = globalize.formatDate(startDate, { format: 'MMM dd, yyyy' }) + ' - ' +\n globalize.formatDate(endDate, { format: 'MMM dd, yyyy' });\n }\n }\n else {\n formattedStr = globalize.formatDate(startDate, { format: longDateFormat }) + ' - ' +\n globalize.formatDate(endDate, { format: longDateFormat });\n }\n return formattedStr;\n };\n ViewBase.prototype.getMobileDateElement = function (date, className) {\n var wrap = createElement('div', { className: className });\n var dateEle = createElement('div', { className: 'e-m-date' });\n dateEle.innerHTML = this.parent.globalize.formatDate(date, { format: 'd' });\n var dayEle = createElement('div', { className: 'e-m-day' });\n dayEle.innerHTML = this.parent.globalize.formatDate(date, { format: 'E' });\n wrap.appendChild(dateEle);\n wrap.appendChild(dayEle);\n return wrap;\n };\n return ViewBase;\n}());\nexport { ViewBase };\n","import { extend, closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * Work cell interactions\n */\nvar WorkCellInteraction = /** @class */ (function () {\n function WorkCellInteraction(parent) {\n this.parent = parent;\n }\n WorkCellInteraction.prototype.cellMouseDown = function (e) {\n this.parent.notify(event.cellMouseDown, { event: e });\n };\n WorkCellInteraction.prototype.cellClick = function (e) {\n if (closest(e.target, '.' + cls.APPOINTMENT_CLASS)) {\n return;\n }\n var navigateEle = closest(e.target, '.' + cls.NAVIGATE_CLASS);\n if (isNullOrUndefined(navigateEle) || isNullOrUndefined(this.parent.viewOptions.day) || (this.parent.currentView === 'Day')) {\n if (this.parent.activeViewOptions.readonly) {\n return;\n }\n var target = e.currentTarget;\n var isWorkCell = target.classList.contains(cls.WORK_CELLS_CLASS) || target.classList.contains(cls.ALLDAY_CELLS_CLASS);\n if (isWorkCell && e.shiftKey && e.which === 1 && this.parent.keyboardInteractionModule) {\n this.parent.keyboardInteractionModule.onMouseSelection(e);\n return;\n }\n this.parent.activeCellsData = this.parent.getCellDetails(target);\n var args = extend(this.parent.activeCellsData, { cancel: false, event: e, name: 'cellClick' });\n this.parent.trigger(event.cellClick, args);\n if (args.cancel) {\n return;\n }\n if (isWorkCell) {\n this.parent.selectCell(target);\n }\n this.parent.notify(event.cellClick, args);\n }\n else {\n var date = this.parent.getDateFromElement(e.currentTarget);\n if (!isNullOrUndefined(date) && !this.parent.isAdaptive) {\n this.parent.setProperties({ selectedDate: date }, true);\n this.parent.changeView('Day');\n }\n }\n };\n WorkCellInteraction.prototype.cellDblClick = function (e) {\n var target = closest(e.target, '.' + cls.APPOINTMENT_CLASS);\n if (!isNullOrUndefined(target) || this.parent.activeViewOptions.readonly) {\n return;\n }\n var args = extend(this.parent.activeCellsData, { cancel: false, event: e, name: 'cellDoubleClick' });\n this.parent.trigger(event.cellDoubleClick, args);\n if (args.cancel) {\n return;\n }\n this.parent.eventWindow.openEditor(this.parent.activeCellsData, 'Add');\n };\n return WorkCellInteraction;\n}());\nexport { WorkCellInteraction };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { append, createElement, extend, EventHandler, prepend, Animation } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setStyleAttribute, remove, removeClass, addClass } from '@syncfusion/ej2-base';\nimport { EventBase } from './event-base';\nimport * as util from '../base/util';\nimport * as events from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * Vertical view appointment rendering\n */\nvar AppointmentRendering = /** @class */ (function (_super) {\n __extends(AppointmentRendering, _super);\n /**\n * Constructor for vertical view\n */\n function AppointmentRendering(parent) {\n var _this = _super.call(this, parent) || this;\n _this.renderedEvents = [];\n _this.renderedAllDayEvents = [];\n _this.overlapEvents = [];\n _this.moreEvents = [];\n _this.minorSlotCount = 2;\n _this.majorSlot = 60;\n _this.allDayLevel = 0;\n _this.startHour = _this.parent.activeView.getStartHour();\n _this.endHour = _this.parent.activeView.getEndHour();\n _this.element = _this.parent.activeView.getPanel();\n _this.fields = _this.parent.eventFields;\n _this.animation = new Animation({ progress: _this.animationUiUpdate.bind(_this) });\n _this.addEventListener();\n return _this;\n }\n AppointmentRendering.prototype.renderAppointments = function () {\n var expandCollapse = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_SECTION_CLASS);\n EventHandler.remove(expandCollapse, 'click', this.rowExpandCollapse);\n EventHandler.add(expandCollapse, 'click', this.rowExpandCollapse, this);\n var appointmentWrapper = [].slice.call(this.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n for (var _i = 0, appointmentWrapper_1 = appointmentWrapper; _i < appointmentWrapper_1.length; _i++) {\n var wrap = appointmentWrapper_1[_i];\n remove(wrap);\n }\n var alldayCountWrapper = [].slice.call(this.element.querySelectorAll('.' + cls.ROW_COUNT_WRAPPER_CLASS));\n for (var _a = 0, alldayCountWrapper_1 = alldayCountWrapper; _a < alldayCountWrapper_1.length; _a++) {\n var wrap = alldayCountWrapper_1[_a];\n remove(wrap);\n }\n this.allDayElement = [].slice.call(this.element.querySelectorAll('.' + cls.ALLDAY_CELLS_CLASS + ':first-child'));\n this.setAllDayRowHeight(0);\n this.renderedEvents = [];\n this.renderedAllDayEvents = [];\n var allDayEvents = [];\n this.dateRender = this.parent.activeView.renderDates;\n this.cellHeight = this.element.querySelector('.' + cls.WORK_CELLS_CLASS).offsetHeight;\n var eventsList = this.parent.eventsProcessed;\n if (eventsList.length > 0) {\n for (var day = 0, length_1 = this.dateRender.length; day < length_1; day++) {\n this.renderedEvents = [];\n var startDateTime = new Date(this.dateRender[day].getTime());\n var endDateTime = util.addDays(this.dateRender[day], 1);\n var filterEvents = this.filterEvents(startDateTime, endDateTime);\n for (var count = 0, length1 = filterEvents.length; count < length1; count++) {\n var event_1 = filterEvents[count];\n if (this.isAllDayAppointment(event_1)) {\n allDayEvents.push(extend({}, event_1, null, true));\n }\n else {\n this.renderVerticalEvents(event_1, day);\n }\n }\n }\n if (allDayEvents.length > 0) {\n allDayEvents = allDayEvents.filter(function (item, index, arr) {\n return index === arr.map(function (item) { return item.Guid; }).indexOf(item.Guid);\n });\n removeClass(this.allDayElement, cls.ALLDAY_ROW_ANIMATE_CLASS);\n this.renderAllDayEvents(this.sortByDateTime(allDayEvents));\n }\n this.parent.notify(events.contentReady, {});\n addClass(this.allDayElement, cls.ALLDAY_ROW_ANIMATE_CLASS);\n }\n };\n AppointmentRendering.prototype.createAppointmentElement = function (record, isAllDay, data) {\n var fieldMapping = this.parent.eventFields;\n var appointmentWrapper = createElement('div', {\n id: 'Appointment_' + record[fieldMapping.id],\n className: cls.APPOINTMENT_CLASS,\n attrs: {\n 'data-guid': record.Guid,\n 'role': 'button',\n 'tabindex': '0',\n 'aria-readonly': 'false',\n 'aria-selected': 'false',\n 'aria-grabbed': 'true',\n 'aria-label': isNullOrUndefined(record[fieldMapping.subject]) ?\n this.parent.eventSettings.fields.subject.default : record[fieldMapping.subject]\n }\n });\n var appointmentDetails = createElement('div', { className: cls.APPOINTMENT_DETAILS });\n appointmentWrapper.appendChild(appointmentDetails);\n var templateElement;\n var eventData = data;\n if (!isNullOrUndefined(this.parent.activeViewOptions.eventTemplate)) {\n templateElement = this.parent.getAppointmentTemplate()(record);\n }\n else {\n var recordSubject = isNullOrUndefined(record[fieldMapping.subject]) ?\n this.parent.eventSettings.fields.subject.default : record[fieldMapping.subject];\n var appointmentSubject = createElement('div', {\n className: cls.APPOINTMENT_SUBJECT,\n innerHTML: recordSubject\n });\n if (isAllDay) {\n if (record[fieldMapping.isAllDay]) {\n templateElement = [appointmentSubject];\n }\n else {\n templateElement = [];\n var appointmentStartTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: this.parent.globalize.formatDate(record[fieldMapping.startTime], { skeleton: 'hm' })\n });\n var appointmentEndTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: this.parent.globalize.formatDate(record[fieldMapping.endTime], { skeleton: 'hm' }),\n });\n addClass([appointmentSubject], 'e-text-center');\n if (!eventData.isLeft) {\n templateElement.push(appointmentStartTime);\n }\n templateElement.push(appointmentSubject);\n if (!eventData.isRight) {\n templateElement.push(appointmentEndTime);\n }\n }\n }\n else {\n var timeStr = this.parent.globalize.formatDate(record[fieldMapping.startTime], { skeleton: 'hm' }) + ' - ' +\n this.parent.globalize.formatDate(record[fieldMapping.endTime], { skeleton: 'hm' });\n var appointmentTime = createElement('div', {\n className: cls.APPOINTMENT_TIME + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : ''),\n innerHTML: timeStr,\n });\n var appointmentLocation = createElement('div', {\n className: cls.APPOINTMENT_LOCATION, innerHTML: record[fieldMapping.location]\n });\n templateElement = [appointmentSubject, appointmentTime, appointmentLocation];\n }\n }\n append([].slice.call(templateElement), appointmentDetails);\n if (!isNullOrUndefined(record[fieldMapping.recurrenceRule])) {\n var iconClass = (record[fieldMapping.id] === record[fieldMapping.recurrenceID]) ?\n cls.EVENT_RECURRENCE_ICON_CLASS : cls.EVENT_RECURRENCE_EDIT_ICON_CLASS;\n var recurrenceIcon = createElement('div', {\n className: cls.ICON + ' ' + iconClass + (this.parent.isAdaptive ? ' ' + cls.DISABLE_CLASS : '')\n });\n isAllDay ? appointmentDetails.appendChild(recurrenceIcon) : appointmentWrapper.appendChild(recurrenceIcon);\n }\n if (isAllDay) {\n this.renderSpannedIcon(appointmentDetails, eventData, isAllDay);\n }\n else {\n this.renderSpannedIcon(appointmentWrapper, eventData, isAllDay);\n }\n return appointmentWrapper;\n };\n AppointmentRendering.prototype.createMoreIndicator = function (allDayRow, count, currentDay) {\n var countWrapper = allDayRow[currentDay + count];\n if (countWrapper.childElementCount <= 0) {\n var innerCountWrap = createElement('div', {\n className: cls.ROW_COUNT_WRAPPER_CLASS,\n id: cls.ROW_COUNT_WRAPPER_CLASS + '-' + (currentDay + count).toString()\n });\n var moreIndicatorElement = createElement('div', {\n className: cls.MORE_INDICATOR_CLASS,\n attrs: { 'tabindex': '0', 'data-index': (currentDay + count).toString(), 'data-count': '1' },\n innerHTML: '+1 ' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more'))\n });\n innerCountWrap.appendChild(moreIndicatorElement);\n countWrapper.appendChild(innerCountWrap);\n EventHandler.add(moreIndicatorElement, 'click', this.rowExpandCollapse, this);\n }\n else {\n var countCell = countWrapper.firstChild;\n countCell.firstChild.setAttribute('data-count', (parseInt(countCell.firstChild.getAttribute('data-count'), 10) + 1).toString());\n countCell.firstChild.innerHTML =\n '+' + (parseInt(countCell.firstChild.getAttribute('data-count'), 10)).toString() + ' ' +\n (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more'));\n }\n };\n AppointmentRendering.prototype.renderSpannedIcon = function (element, spanEvent, isAllDay) {\n if (isAllDay) {\n if (spanEvent.isLeft) {\n var iconLeft = createElement('div', {\n className: cls.EVENT_INDICATOR_CLASS + ' ' + cls.ICON + ' ' + cls.EVENT_ICON_LEFT_CLASS\n });\n prepend([iconLeft], element);\n }\n if (spanEvent.isRight) {\n var iconRight = createElement('div', {\n className: cls.EVENT_INDICATOR_CLASS + ' ' + cls.ICON + ' ' + cls.EVENT_ICON_RIGHT_CLASS\n });\n append([iconRight], element);\n }\n }\n else {\n if (spanEvent.isTop) {\n var iconTop = createElement('div', {\n className: cls.EVENT_INDICATOR_CLASS + ' ' + cls.ICON + ' ' + cls.EVENT_ICON_UP_CLASS\n });\n prepend([iconTop], element);\n }\n if (spanEvent.isBottom) {\n var iconBottom = createElement('div', {\n className: cls.EVENT_INDICATOR_CLASS + ' ' + cls.ICON + ' ' + cls.EVENT_ICON_DOWN_CLASS\n });\n append([iconBottom], element);\n }\n }\n };\n AppointmentRendering.prototype.isSpannedEvent = function (record, day) {\n var currentDate = util.resetTime(this.dateRender[day]);\n var fieldMapping = this.parent.eventFields;\n var startEndHours = util.getStartEndHours(currentDate, this.startHour, this.endHour);\n var event = extend({}, record, null, true);\n event.isSpanned = { isBottom: false, isTop: false };\n if (record[fieldMapping.startTime].getTime() < startEndHours.startHour.getTime()) {\n event[fieldMapping.startTime] = startEndHours.startHour;\n event.isSpanned.isTop = true;\n }\n if (record[fieldMapping.endTime].getTime() > startEndHours.endHour.getTime()) {\n event[fieldMapping.endTime] = startEndHours.endHour;\n event.isSpanned.isBottom = true;\n }\n return event;\n };\n AppointmentRendering.prototype.renderAllDayEvents = function (event) {\n this.moreEvents = [];\n this.overlapList = [];\n this.allDayLevel = 0;\n this.slots = [];\n this.slots.push(this.dateRender.map(function (date) { return +date; }));\n for (var day = 0, length_2 = this.dateRender.length; day < length_2; day++) {\n var fieldMapping = this.parent.eventFields;\n var filterEvents = this.filterEvents(new Date(this.dateRender[day].getTime()), util.addDays(this.dateRender[day], 1), event);\n var allDayRowCell = this.element.querySelector('.' + cls.ALLDAY_CELLS_CLASS + ':first-child');\n var eventWrapper = this.element.querySelector('.' + cls.ALLDAY_WRAPPER_CLASS + ':nth-child(' + (day + 1) + ')');\n var _loop_1 = function (count, length1) {\n var eventObj = filterEvents[count];\n var record = this_1.splitEvent(eventObj, this_1.dateRender)[0];\n var cellTop = allDayRowCell.offsetTop;\n var eStart = new Date(record[fieldMapping.startTime].getTime());\n var eEnd = new Date(record[fieldMapping.endTime].getTime());\n var dates = this_1.dateRender;\n var appWidth = 0;\n var appLeft = '0%';\n var topValue = 1;\n var appLevel = 0;\n var isDateRange = dates[0].getTime() <= eStart.getTime() &&\n util.addDays(dates[dates.length - 1], 1).getTime() >= eStart.getTime();\n if (eStart <= eEnd && isDateRange) {\n var isAlreadyRendered = this_1.renderedAllDayEvents.filter(function (event) {\n return event.Guid === eventObj.Guid;\n });\n if (isAlreadyRendered.length === 0) {\n var allDayDifference = record.data.count;\n var allDayIndex = this_1.getOverlapIndex(record, day, true);\n record.Index = allDayIndex;\n this_1.allDayLevel = (this_1.allDayLevel < allDayIndex) ? allDayIndex : this_1.allDayLevel;\n var widthAdjustment = record.data.isRight ? 0 :\n this_1.parent.currentView === 'Day' ? 4 : 7;\n if (allDayDifference >= 0) {\n appWidth = (allDayDifference * 100) - widthAdjustment;\n }\n this_1.renderedAllDayEvents.push(extend({}, record, null, true));\n var allDayRow = [].slice.call(this_1.element.querySelector('.' + cls.ALLDAY_ROW_CLASS).children);\n var appointmentElement = this_1.createAppointmentElement(eventObj, true, record.data);\n addClass([appointmentElement], cls.ALLDAY_APPOINTMENT_CLASS);\n eventWrapper.appendChild(appointmentElement);\n var appHeight = appointmentElement.offsetHeight;\n topValue += (allDayIndex === 0 ? cellTop : (cellTop + (allDayIndex * appHeight))) + 1;\n setStyleAttribute(appointmentElement, { 'width': appWidth + '%', 'top': topValue + 'px' });\n var args = { data: eventObj, element: appointmentElement };\n this_1.parent.trigger(events.eventRendered, args);\n if (allDayIndex > 1) {\n this_1.moreEvents.push(appointmentElement);\n for (var count_1 = 0, length_3 = allDayDifference; count_1 < length_3; count_1++) {\n this_1.createMoreIndicator(allDayRow, count_1, day);\n }\n }\n allDayRowCell.setAttribute('data-count', this_1.allDayLevel.toString());\n var allDayRowHeight = ((!this_1.parent.uiStateValues.expand && this_1.allDayLevel > 2) ?\n (3 * appHeight) : ((this_1.allDayLevel + 1) * appHeight)) + 4;\n this_1.setAllDayRowHeight(allDayRowHeight);\n this_1.addOrRemoveClass();\n this_1.wireAppointmentEvents(appointmentElement);\n }\n }\n };\n var this_1 = this;\n for (var count = 0, length1 = filterEvents.length; count < length1; count++) {\n _loop_1(count, length1);\n }\n }\n };\n AppointmentRendering.prototype.renderVerticalEvents = function (eventObj, day) {\n var record = this.isSpannedEvent(eventObj, day);\n var eStart = record[this.fields.startTime];\n var eEnd = record[this.fields.endTime];\n var appWidth = '0%';\n var appLeft = '0%';\n var topValue = 0;\n var appLevel = 0;\n var isDateRange = this.dateRender[0].getTime() <= eStart.getTime() &&\n util.addDays(this.dateRender[this.dateRender.length - 1], 1).getTime() >= eStart.getTime();\n if (eStart < eEnd && isDateRange) {\n var appHeight = 0;\n var startEndHours = util.getStartEndHours(util.resetTime(this.dateRender[day]), this.startHour, this.endHour);\n if (startEndHours.endHour.getTime() <= eEnd.getTime() && startEndHours.startHour.getTime() >= eStart.getTime()) {\n appHeight = this.getAppointmentHeight(this.cellHeight, startEndHours.startHour, startEndHours.endHour);\n }\n else if (startEndHours.endHour.getTime() <= eEnd.getTime()) {\n appHeight = this.getAppointmentHeight(this.cellHeight, eStart, startEndHours.endHour);\n }\n else if (startEndHours.startHour.getTime() >= eStart.getTime()) {\n appHeight = this.getAppointmentHeight(this.cellHeight, startEndHours.startHour, eEnd);\n }\n else {\n appHeight = (eEnd.getTime() - eStart.getTime()) / (60 * 1000) * (this.cellHeight * this.minorSlotCount) / this.majorSlot;\n }\n appHeight = (appHeight < this.cellHeight) ? this.cellHeight : appHeight;\n if (eStart.getTime() > startEndHours.startHour.getTime()) {\n topValue = this.getTopValue(eStart, day);\n }\n var appIndex = this.getOverlapIndex(record, day, false);\n record.Index = appIndex;\n this.overlapList.push(record);\n if (this.overlapList.length > 1) {\n (isNullOrUndefined(this.overlapEvents[appIndex])) ? this.overlapEvents[appIndex] = [record] :\n this.overlapEvents[appIndex].push(record);\n }\n else {\n this.overlapEvents = [];\n this.overlapEvents.push([record]);\n }\n var width = this.parent.currentView === 'Day' ? 97 : 94;\n appWidth = ((width - this.overlapEvents.length) / this.overlapEvents.length) + '%';\n var argsData = { index: appIndex, left: appLeft, width: appWidth, day: day, record: record };\n var tempData = this.adjustOverlapElements(argsData);\n appWidth = (tempData.appWidth);\n this.renderedEvents.push(extend({}, record, null, true));\n var appointmentWrap = [].slice.call(this.element.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS).children);\n var appointmentElement = this.createAppointmentElement(eventObj, false, record.isSpanned);\n setStyleAttribute(appointmentElement, { 'width': tempData.appWidth, 'height': appHeight + 'px', 'top': topValue + 'px' });\n var iconHeight = appointmentElement.querySelectorAll('.' + cls.EVENT_INDICATOR_CLASS).length * 15;\n var maxHeight = appHeight - 40 - iconHeight;\n if (!this.parent.isAdaptive && appointmentElement.querySelector('.' + cls.APPOINTMENT_SUBJECT)) {\n appointmentElement.querySelector('.' + cls.APPOINTMENT_SUBJECT).style.maxHeight = maxHeight + 'px';\n }\n if (this.parent.enableRtl) {\n setStyleAttribute(appointmentElement, { 'right': tempData.appLeft });\n }\n else {\n setStyleAttribute(appointmentElement, { 'left': tempData.appLeft });\n }\n appointmentWrap[argsData.day].appendChild(appointmentElement);\n var args = { data: eventObj, element: appointmentElement };\n this.parent.trigger(events.eventRendered, args);\n this.wireAppointmentEvents(appointmentElement);\n }\n };\n AppointmentRendering.prototype.getTopValue = function (date, day) {\n var startEndHours = util.getStartEndHours(util.resetTime(this.dateRender[day]), this.startHour, this.endHour);\n var startHour = startEndHours.startHour;\n var diffInMinutes = ((date.getHours() - startHour.getHours()) * 60) + (date.getMinutes() - startHour.getMinutes());\n return (diffInMinutes * this.cellHeight * this.minorSlotCount) / this.majorSlot;\n };\n AppointmentRendering.prototype.getAppointmentHeight = function (cellHeight, startDate, endDate) {\n return (((endDate.getTime() - startDate.getTime()) / (1000 * 60)) / (this.majorSlot / this.minorSlotCount)) * cellHeight;\n };\n AppointmentRendering.prototype.getOverlapIndex = function (record, day, isAllDay) {\n var _this = this;\n var fieldMapping = this.parent.eventFields;\n var eventsList;\n this.overlapEvents = [];\n if (isAllDay) {\n var date_1 = new Date(this.dateRender[day].getTime());\n eventsList = this.renderedAllDayEvents.filter(function (app) {\n return ((util.resetTime(app[fieldMapping.startTime]).getTime() <= util.resetTime(date_1).getTime()) &&\n (util.resetTime(app[fieldMapping.endTime]).getTime() >= util.resetTime(date_1).getTime()));\n });\n }\n else {\n var appointmentList_1 = this.renderedEvents;\n var appointment_1 = [];\n this.overlapList = appointmentList_1.filter(function (obj) {\n return obj[fieldMapping.endTime] > record[fieldMapping.startTime] &&\n obj[fieldMapping.startTime] < record[fieldMapping.endTime];\n });\n this.overlapList.forEach(function (obj) {\n var filterList = appointmentList_1.filter(function (list) {\n return list[fieldMapping.endTime] >= obj[fieldMapping.startTime] &&\n list[fieldMapping.startTime] <= obj[fieldMapping.endTime];\n });\n var collection = _this.overlapList.filter(function (val) { return filterList.indexOf(val) === -1; });\n return appointment_1.concat(collection);\n });\n this.overlapList = this.overlapList.concat(appointment_1);\n eventsList = this.overlapList.filter(function (obj) {\n return obj[fieldMapping.endTime] > record[fieldMapping.startTime] &&\n obj[fieldMapping.startTime] < record[fieldMapping.endTime];\n });\n for (var _i = 0, eventsList_1 = eventsList; _i < eventsList_1.length; _i++) {\n var event_2 = eventsList_1[_i];\n var record_1 = event_2;\n var index = record_1.Index;\n (isNullOrUndefined(this.overlapEvents[index])) ? this.overlapEvents[index] = [event_2] :\n this.overlapEvents[index].push(event_2);\n }\n }\n var appIndex;\n if (eventsList.length > 0) {\n var appLevel = eventsList.map(function (obj) { return obj.Index; });\n appIndex = (appLevel.length > 0) ? this.getSmallestMissingNumber(appLevel) : 0;\n }\n else {\n appIndex = -1;\n }\n return (appIndex === -1) ? 0 : appIndex;\n };\n AppointmentRendering.prototype.adjustOverlapElements = function (args) {\n var data = { appWidth: args.width, appLeft: args.left };\n for (var i = 0, length1 = this.overlapEvents.length; i < length1; i++) {\n if (!isNullOrUndefined(this.overlapEvents[i])) {\n for (var j = 0, length2 = this.overlapEvents[i].length; j < length2; j++) {\n var element = this.element.querySelector('#e-appointment-wrapper-' + args.day);\n if (element.childElementCount > 0) {\n var eleGuid = this.overlapEvents[i][j].Guid;\n if (element.querySelectorAll('div[data-guid=\"' + eleGuid + '\"]').length > 0 && eleGuid !== args.record.Guid) {\n var apps = element.querySelector('div[data-guid=\"' + eleGuid + '\"]');\n if (parseFloat(args.width) <= parseFloat(apps.style.width)) {\n (this.parent.enableRtl) ? apps.style.right = ((parseFloat(args.width) + 1) * i) + '%' :\n apps.style.left = ((parseFloat(args.width) + 1) * i) + '%';\n apps.style.width = ((parseFloat(args.width))) + '%';\n data.appWidth = apps.style.width;\n }\n }\n else {\n var appWidth = args.width;\n if (isNullOrUndefined(this.overlapEvents[i - 1])) {\n var width = this.parent.currentView === 'Day' ? 97 : 94;\n appWidth = ((width - this.overlapEvents.length) / this.overlapEvents.length) + '%';\n }\n var leftPosition = ((parseInt(appWidth, 0) + 1) * args.index) + '%';\n data.appWidth = appWidth;\n data.appLeft = leftPosition;\n }\n }\n }\n }\n }\n return data;\n };\n AppointmentRendering.prototype.setAllDayRowHeight = function (height) {\n for (var _i = 0, _a = this.allDayElement; _i < _a.length; _i++) {\n var element = _a[_i];\n element.style.height = (height / 12) + 'em';\n }\n this.animation.animate(this.allDayElement[0]);\n };\n AppointmentRendering.prototype.addOrRemoveClass = function () {\n var _this = this;\n this.moreEvents.filter(function (element) {\n if (!_this.parent.uiStateValues.expand && _this.allDayLevel > 2) {\n addClass([element], cls.EVENT_COUNT_CLASS);\n element.setAttribute('tabindex', '-1');\n }\n else {\n removeClass([element], cls.EVENT_COUNT_CLASS);\n element.setAttribute('tabindex', '0');\n }\n });\n var moreEventCount = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_SECTION_CLASS);\n if (this.parent.uiStateValues.expand) {\n removeClass([moreEventCount], cls.APPOINTMENT_ROW_EXPAND_CLASS);\n addClass([moreEventCount], cls.APPOINTMENT_ROW_COLLAPSE_CLASS);\n }\n else {\n removeClass([moreEventCount], cls.APPOINTMENT_ROW_COLLAPSE_CLASS);\n addClass([moreEventCount], cls.APPOINTMENT_ROW_EXPAND_CLASS);\n }\n (this.allDayLevel > 2) ? removeClass([moreEventCount], cls.DISABLE_CLASS) : addClass([moreEventCount], cls.DISABLE_CLASS);\n var countCell = [].slice.call(this.element.querySelectorAll('.' + cls.ROW_COUNT_WRAPPER_CLASS));\n countCell.filter(function (element) {\n (!_this.parent.uiStateValues.expand && _this.allDayLevel > 2) ? removeClass([element], cls.DISABLE_CLASS) :\n addClass([element], cls.DISABLE_CLASS);\n });\n };\n AppointmentRendering.prototype.getEventHeight = function () {\n var eventElement = createElement('div', { className: cls.APPOINTMENT_CLASS, styles: 'visibility:hidden' });\n var eventWrapper = this.element.querySelector('.' + cls.ALLDAY_WRAPPER_CLASS + ':first-child');\n eventWrapper.appendChild(eventElement);\n var height = eventElement.offsetHeight;\n eventElement.remove();\n return height;\n };\n AppointmentRendering.prototype.rowExpandCollapse = function (event) {\n var target = this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_SECTION_CLASS);\n this.parent.uiStateValues.expand = target.classList.contains(cls.APPOINTMENT_ROW_EXPAND_CLASS);\n var rowHeight;\n if (this.parent.uiStateValues.expand) {\n target.setAttribute('title', 'Collapse-all-day-section');\n target.setAttribute('aria-label', 'Collapse section');\n rowHeight = ((this.allDayLevel + 1) * this.getEventHeight()) + 4;\n }\n else {\n target.setAttribute('title', 'Expand-all-day-section');\n target.setAttribute('aria-label', 'Expand section');\n rowHeight = (3 * this.getEventHeight()) + 4;\n }\n this.setAllDayRowHeight(rowHeight);\n this.addOrRemoveClass();\n this.animation.animate(target);\n };\n AppointmentRendering.prototype.animationUiUpdate = function () {\n this.parent.notify(events.contentReady, {});\n };\n return AppointmentRendering;\n}(EventBase));\nexport { AppointmentRendering };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { compile, isNullOrUndefined, extend, EventHandler, formatUnit } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, removeClass, append, prepend } from '@syncfusion/ej2-base';\nimport { WorkCellInteraction } from '../actions/work-cells';\nimport { ViewBase } from './view-base';\nimport { AppointmentRendering } from '../event-renderer/vertical-view';\nimport * as util from '../base/util';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\nvar DATE_HEADER_TEMPLATE = '
    ${getDayName(date)}
    ' +\n '
    ${getDate(date)}
    ';\nvar MAJOR_SLOT_TEMPLATE = '${getTime(date)}';\nvar MINOR_SLOT_TEMPLATE = ' ';\n/**\n * vertical view\n */\nvar VerticalView = /** @class */ (function (_super) {\n __extends(VerticalView, _super);\n /**\n * Constructor for vertical view\n */\n function VerticalView(parent) {\n var _this = _super.call(this, parent) || this;\n _this.currentDateIndex = 0;\n _this.minorSlotCount = 2;\n _this.majorSlot = 60;\n _this.viewClass = 'e-day-view';\n _this.isInverseTableSelect = true;\n _this.workCellAction = new WorkCellInteraction(parent);\n return _this;\n }\n VerticalView.prototype.addEventListener = function () {\n this.parent.on(event.scrollUiUpdate, this.scrollUiUpdate, this);\n this.parent.on(event.dataReady, this.renderEvents, this);\n };\n VerticalView.prototype.removeEventListener = function () {\n this.parent.off(event.scrollUiUpdate, this.scrollUiUpdate);\n this.parent.off(event.dataReady, this.renderEvents);\n };\n VerticalView.prototype.renderEvents = function () {\n var appointment = new AppointmentRendering(this.parent);\n appointment.renderAppointments();\n };\n VerticalView.prototype.onContentScroll = function (e) {\n var target = e.target;\n this.getTimeCellsElement().scrollTop = target.scrollTop;\n this.getDatesHeaderElement().firstChild.scrollLeft = target.scrollLeft;\n this.parent.uiStateValues.top = target.scrollTop;\n this.parent.uiStateValues.left = target.scrollLeft;\n this.parent.quickPopup.quickPopup.close();\n };\n VerticalView.prototype.scrollUiUpdate = function (args) {\n var headerHeight = 0;\n if (this.parent.headerModule) {\n headerHeight += this.parent.headerModule.getHeaderElement().offsetHeight;\n }\n var timecells = this.getTimeCellsElement();\n var content = this.getScrollableElement();\n var header = this.getDatesHeaderElement();\n // if (this.parent.isAdaptive) {\n // content.style.height = 'auto';\n // } else {\n // timecells.style.height = content.style.height = 'auto';\n // }\n var scrollerHeight = formatUnit(this.parent.element.offsetHeight - headerHeight - header.offsetHeight - 2);\n if (this.parent.isAdaptive) {\n content.style.height = scrollerHeight;\n }\n else {\n timecells.style.height = content.style.height = scrollerHeight;\n }\n var scrollBarWidth = util.getScrollBarWidth();\n // tslint:disable:no-any\n if (content.offsetWidth - content.clientWidth > 0) {\n header.firstChild.style[args.cssProperties.border] = scrollBarWidth > 0 ? '1px' : '0px';\n header.style[args.cssProperties.padding] = scrollBarWidth > 0 ? scrollBarWidth - 1 + 'px' : '0px';\n }\n else {\n header.firstChild.style[args.cssProperties.border] = '';\n header.style[args.cssProperties.padding] = '';\n }\n // tslint:enable:no-any\n timecells.style.paddingBottom = (content.offsetHeight - content.clientHeight > 0) ? formatUnit(scrollBarWidth) : '';\n if (this.parent.uiStateValues.isInitial) {\n this.scrollToWorkHour();\n this.parent.uiStateValues.isInitial = false;\n }\n else {\n this.getScrollableElement().scrollTop = this.parent.uiStateValues.top;\n }\n };\n VerticalView.prototype.scrollToWorkHour = function () {\n if (this.parent.workHours.highlight) {\n var firstWorkHourCell = this.element.querySelector('.' + cls.WORK_HOURS_CLASS);\n if (firstWorkHourCell) {\n this.getScrollableElement().scrollTop = firstWorkHourCell.offsetTop;\n this.parent.uiStateValues.top = firstWorkHourCell.offsetTop;\n this.parent.uiStateValues.left = 0;\n }\n }\n };\n VerticalView.prototype.scrollToHour = function (hour) {\n var date = this.parent.globalize.parseDate(hour, { skeleton: 'Hm' });\n if (isNullOrUndefined(date)) {\n return;\n }\n this.getScrollableElement().scrollTop = this.getTopFromDateTime(date);\n };\n VerticalView.prototype.generateColLevels = function () {\n var columns = this.renderDates;\n var colLevels = [];\n var level = [];\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var col = columns_1[_i];\n var classList = [cls.HEADER_CELLS_CLASS];\n if (this.isCurrentDate(col)) {\n classList.push(cls.CURRENT_DAY_CLASS);\n }\n level.push({ date: col, type: 'dateHeader', className: classList });\n }\n colLevels.push(level);\n return colLevels;\n };\n VerticalView.prototype.isWorkHourRange = function (date) {\n return (this.getStartHour().getTime() <= date.getTime()) && (this.getEndHour().getTime() >= date.getTime());\n };\n VerticalView.prototype.highlightCurrentTime = function () {\n var _this = this;\n if (this.parent.showTimeIndicator && this.isWorkHourRange(new Date())) {\n var flag = false;\n for (var i = 0; i < this.renderDates.length; i++) {\n if (this.isCurrentDate(this.renderDates[i])) {\n flag = true;\n this.currentDateIndex = i;\n break;\n }\n }\n if (flag) {\n this.changeCurrentTimePosition();\n if (isNullOrUndefined(this.currentTimeIndicatorTimer)) {\n this.currentTimeIndicatorTimer = window.setInterval(function () { _this.changeCurrentTimePosition(); }, util.MS_PER_MINUTE);\n }\n }\n else {\n this.clearCurrentTimeIndicatorTimer();\n }\n }\n else {\n this.clearCurrentTimeIndicatorTimer();\n }\n };\n VerticalView.prototype.clearCurrentTimeIndicatorTimer = function () {\n if (!isNullOrUndefined(this.currentTimeIndicatorTimer)) {\n window.clearInterval(this.currentTimeIndicatorTimer);\n this.currentTimeIndicatorTimer = null;\n this.removeCurrentTimeIndicatorElements();\n }\n };\n VerticalView.prototype.removeCurrentTimeIndicatorElements = function () {\n var currentTimeEle = this.element.querySelector('.' + cls.CURRENT_TIME_CLASS);\n var timelineEle = this.element.querySelector('.' + cls.TIMELINE_WRAPPER_CLASS);\n if (currentTimeEle) {\n remove(currentTimeEle);\n }\n if (timelineEle) {\n remove(timelineEle);\n }\n };\n VerticalView.prototype.changeCurrentTimePosition = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.removeCurrentTimeIndicatorElements();\n var firstRow = this.parent.getContentTable().rows[0];\n var firstCell = firstRow.cells[0];\n var currentCell = firstRow.cells[this.currentDateIndex];\n var cellWidth = 100 / firstRow.cells.length;\n var prevLineWidth = (cellWidth * (currentCell.cellIndex - firstCell.cellIndex)) + '%';\n var currentLineWidth = cellWidth + '%';\n var top = this.getTopFromDateTime(new Date());\n var topInPx = formatUnit(top);\n var timeCellsWrap = this.getTimeCellsElement();\n var rowIndex = Math.floor(top / firstCell.offsetHeight);\n if (isNullOrUndefined(rowIndex)) {\n return;\n }\n removeClass(timeCellsWrap.querySelectorAll('.' + cls.HIDE_CHILDS_CLASS), cls.HIDE_CHILDS_CLASS);\n addClass([timeCellsWrap.querySelectorAll('tr')[rowIndex].lastChild], cls.HIDE_CHILDS_CLASS);\n var timelineWrap = createElement('div', { className: cls.TIMELINE_WRAPPER_CLASS });\n var previousDateTimelineEle = createElement('div', {\n className: cls.PREVIOUS_TIMELINE_CLASS,\n styles: 'width:' + formatUnit(prevLineWidth) + '; left: 0; right: 0; top:' + topInPx\n });\n var currentDateTimelineEle = createElement('div', {\n className: cls.CURRENT_TIMELINE_CLASS,\n styles: 'width:' + currentLineWidth + '; ' + (this.parent.enableRtl ? 'right:' : 'left:') + prevLineWidth + ';top:' + topInPx\n });\n var currentTimeEle = createElement('div', {\n innerHTML: this.parent.globalize.formatDate(new Date(), { skeleton: 'hm' }),\n className: cls.CURRENT_TIME_CLASS,\n styles: 'width: 100%; position: absolute; left: 0; right: 0; top:' + topInPx\n });\n prepend([currentTimeEle], timeCellsWrap);\n currentTimeEle.style.top = formatUnit(currentTimeEle.offsetTop - (currentTimeEle.offsetHeight / 2));\n prepend([previousDateTimelineEle, currentDateTimelineEle], timelineWrap);\n prepend([timelineWrap], this.getContentAreaElement().querySelector('.' + cls.WRAPPER_CLASS));\n };\n VerticalView.prototype.getTopFromDateTime = function (date) {\n var startHour = this.getStartHour();\n var diffInMinutes = ((date.getHours() - startHour.getHours()) * 60) + (date.getMinutes() - startHour.getMinutes());\n return (diffInMinutes * this.getWorkCellHeight() * this.minorSlotCount) / this.majorSlot;\n };\n VerticalView.prototype.getWorkCellHeight = function () {\n return this.element.querySelector('.e-work-cells').offsetHeight;\n };\n VerticalView.prototype.getTdContent = function (date, type) {\n var cntEle;\n switch (type) {\n case 'dateHeader':\n if (this.parent.activeViewOptions.dateHeaderTemplate) {\n var args = { date: date, type: type };\n cntEle = this.parent.getDateHeaderTemplate()(args);\n }\n else {\n cntEle = compile(DATE_HEADER_TEMPLATE, this.customHelper)({ date: date });\n }\n break;\n case 'majorSlot':\n cntEle = compile(MAJOR_SLOT_TEMPLATE, this.customHelper)({ date: date });\n break;\n case 'minorSlot':\n cntEle = compile(MINOR_SLOT_TEMPLATE, this.customHelper)({ date: date });\n break;\n case 'alldayCells':\n if (this.parent.cellTemplate) {\n var args = { date: date, type: type };\n cntEle = this.parent.getCellTemplate()(args);\n }\n break;\n }\n return cntEle;\n };\n VerticalView.prototype.renderLayout = function (type) {\n this.setPanel(createElement('div', { className: cls.TABLE_WRAP_CLASS }));\n var clsList = ['e-vertical-view', this.viewClass];\n clsList.push(type);\n this.renderPanel(type);\n addClass([this.element], clsList);\n this.element.appendChild(this.createTableLayout(cls.OUTER_TABLE_CLASS));\n this.colLevels = this.generateColLevels();\n this.renderHeader();\n this.renderContent();\n this.highlightCurrentTime();\n this.parent.notify(event.contentReady, {});\n };\n VerticalView.prototype.renderHeader = function () {\n var tr = createElement('tr');\n var indentTd = createElement('td', { className: cls.LEFT_INDENT_CLASS });\n var dateTd = createElement('td');\n indentTd.appendChild(this.renderLeftIndent());\n dateTd.appendChild(this.renderDatesHeader());\n tr.appendChild(indentTd);\n tr.appendChild(dateTd);\n prepend([tr], this.element.querySelector('tbody'));\n };\n VerticalView.prototype.renderContent = function () {\n var tr = createElement('tr');\n var workTd = createElement('td');\n if (this.parent.isAdaptive) {\n workTd.setAttribute('colspan', '2');\n var scrollContainer = createElement('div', { className: cls.SCROLL_CONTAINER_CLASS });\n scrollContainer.appendChild(this.renderTimeCells());\n scrollContainer.appendChild(this.renderContentArea());\n workTd.appendChild(scrollContainer);\n tr.appendChild(workTd);\n }\n else {\n var timesTd = createElement('td');\n timesTd.appendChild(this.renderTimeCells());\n workTd.appendChild(this.renderContentArea());\n tr.appendChild(timesTd);\n tr.appendChild(workTd);\n }\n this.element.querySelector('tbody').appendChild(tr);\n };\n VerticalView.prototype.renderLeftIndent = function () {\n var wrap = createElement('div', { className: cls.LEFT_INDENT_WRAP_CLASS });\n var tbl = this.createTableLayout();\n var trEle = createElement('tr');\n var rowCount = this.colLevels.length;\n for (var i = 0; i < rowCount; i++) {\n var ntr_1 = trEle.cloneNode();\n var level = this.colLevels[i];\n var data_1 = { className: [level[0].className[0]], type: 'emptyCells' };\n ntr_1.appendChild(this.createTd(data_1));\n tbl.querySelector('tbody').appendChild(ntr_1);\n }\n var ntr = trEle.cloneNode();\n var appointmentExpandCollapse = createElement('div', {\n attrs: { 'tabindex': '0', title: 'Expand-all-day-section', 'aria-disabled': 'false', 'aria-label': 'Expand section' },\n className: cls.ALLDAY_APPOINTMENT_SECTION_CLASS + ' ' + cls.APPOINTMENT_ROW_EXPAND_CLASS + ' ' +\n cls.ICON + ' ' + cls.DISABLE_CLASS,\n });\n var data = { className: [cls.ALLDAY_CELLS_CLASS], type: 'emptyCells' };\n var nth = this.createTd(data);\n nth.appendChild(appointmentExpandCollapse);\n ntr.appendChild(nth);\n tbl.querySelector('tbody').appendChild(ntr);\n wrap.appendChild(tbl);\n return wrap;\n };\n VerticalView.prototype.renderDatesHeader = function () {\n var container = createElement('div', { className: cls.DATE_HEADER_CONTAINER_CLASS });\n var wrap = createElement('div', { className: cls.DATE_HEADER_WRAP_CLASS });\n var innerWrap = createElement('div', { className: cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS });\n container.appendChild(wrap);\n var tbl = this.createTableLayout();\n var trEle = createElement('tr');\n var rowCount = this.colLevels.length;\n var lastLevel = this.colLevels[rowCount - 1];\n for (var i = 0; i < rowCount; i++) {\n var ntr_2 = trEle.cloneNode();\n addClass([ntr_2], cls.HEADER_ROW_CLASS);\n var level = this.colLevels[i];\n var colspan = lastLevel.length / level.length;\n for (var j = 0; j < level.length; j++) {\n var td = level[j];\n td.colSpan = colspan;\n ntr_2.appendChild(this.createTd(td));\n }\n tbl.querySelector('tbody').appendChild(ntr_2);\n }\n var ntr = trEle.cloneNode();\n addClass([ntr], cls.ALLDAY_ROW_CLASS);\n for (var j = 0; j < lastLevel.length; j++) {\n var td = extend({}, lastLevel[j]);\n td.className = [cls.ALLDAY_CELLS_CLASS];\n td.type = 'alldayCells';\n var ntd = this.createTd(td);\n ntd.setAttribute('data-date', td.date.getTime().toString());\n ntd.setAttribute('data-index', j.toString());\n var appointmentWrap = createElement('div', {\n id: cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS + '-' + j.toString(),\n className: cls.ALLDAY_WRAPPER_CLASS,\n attrs: { 'data-index': j.toString() },\n styles: 'width:calc(' + 100 / this.renderDates.length + '%)'\n });\n innerWrap.appendChild(appointmentWrap);\n this.wireCellEvents(ntd);\n ntr.appendChild(ntd);\n }\n tbl.querySelector('tbody').appendChild(ntr);\n wrap.appendChild(innerWrap);\n wrap.appendChild(tbl);\n return container;\n };\n VerticalView.prototype.createTd = function (td) {\n var tdEle = createElement('th');\n if (td.className) {\n addClass([tdEle], td.className);\n }\n if (td.date && td.type) {\n var ele = this.getTdContent(td.date, td.type);\n if (ele && ele.length) {\n append([].slice.call(ele), tdEle);\n }\n }\n if (td.type === 'dateHeader' && td.className.indexOf(cls.HEADER_CELLS_CLASS) >= 0) {\n tdEle.setAttribute('data-date', td.date.getTime().toString());\n EventHandler.add(tdEle, 'click', this.workCellAction.cellClick, this);\n EventHandler.add(tdEle, 'dblclick', this.workCellAction.cellDblClick, this);\n }\n var args = { elementType: td.type, element: tdEle, date: td.date };\n this.parent.trigger(event.renderCell, args);\n return tdEle;\n };\n VerticalView.prototype.wireCellEvents = function (element) {\n EventHandler.add(element, 'mousedown', this.workCellAction.cellMouseDown, this);\n EventHandler.add(element, 'click', this.workCellAction.cellClick, this);\n EventHandler.add(element, 'dblclick', this.workCellAction.cellDblClick, this);\n };\n VerticalView.prototype.renderTimeCells = function () {\n var _this = this;\n var wrap = createElement('div', { className: cls.TIME_CELLS_WRAP_CLASS });\n var tbl = this.createTableLayout();\n var trEle = createElement('tr');\n var handler = function (r) {\n r.type = r.first ? 'majorSlot' : 'minorSlot';\n r.className = r.last ? [cls.TIME_CELLS_CLASS] : [];\n var ntr = trEle.cloneNode();\n var data = { date: r.date, type: r.type, className: r.className };\n ntr.appendChild(_this.createTd(data));\n tbl.querySelector('tbody').appendChild(ntr);\n return r;\n };\n this.getTimeSlotRows(handler);\n wrap.appendChild(tbl);\n return wrap;\n };\n VerticalView.prototype.renderContentArea = function () {\n var _this = this;\n var wrap = createElement('div', { className: cls.CONTENT_WRAP_CLASS });\n var innerWrap = createElement('div', { className: cls.WRAPPER_CLASS });\n wrap.appendChild(innerWrap);\n var tbl = this.createTableLayout(cls.CONTENT_TABLE_CLASS);\n var tr = createElement('tr', { attrs: { role: 'row' } });\n var td = createElement('td', { attrs: { role: 'gridcell', 'aria-selected': 'false' } });\n var tbody = tbl.querySelector('tbody');\n var columns = this.renderDates;\n var handler = function (r) {\n var ntr = tr.cloneNode();\n for (var _i = 0, columns_2 = columns; _i < columns_2.length; _i++) {\n var col = columns_2[_i];\n var ntd = td.cloneNode();\n var clsName = r.last ? [cls.WORK_CELLS_CLASS] : [cls.WORK_CELLS_CLASS, cls.ALTERNATE_CELLS_CLASS];\n var cellDate = util.resetTime(new Date('' + col));\n util.setTime(cellDate, util.getDateInMs(r.date));\n if (_this.parent.workHours.highlight && _this.isWorkHour(cellDate)) {\n clsName.push(cls.WORK_HOURS_CLASS);\n }\n addClass([ntd], clsName);\n if (_this.parent.cellTemplate) {\n var args_1 = { date: cellDate, type: 'workCells' };\n append([].slice.call(_this.parent.getCellTemplate()(args_1)), ntd);\n }\n ntd.setAttribute('data-date', cellDate.getTime().toString());\n _this.wireCellEvents(ntd);\n var args = { elementType: 'workCells', element: ntd, date: cellDate };\n _this.parent.trigger(event.renderCell, args);\n ntr.appendChild(ntd);\n }\n tbody.appendChild(ntr);\n return r;\n };\n this.getTimeSlotRows(handler);\n var innerAppointmentWrap = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n for (var day = 0, length_1 = this.renderDates.length; day < length_1; day++) {\n var appointmentWrap = createElement('div', {\n id: cls.APPOINTMENT_WRAPPER_CLASS + '-' + day.toString(),\n className: cls.DAY_WRAPPER_CLASS,\n attrs: { 'data-dayindex': day.toString() },\n styles: 'width:calc(' + 100 / this.renderDates.length + '%)'\n });\n innerAppointmentWrap.appendChild(appointmentWrap);\n }\n innerWrap.appendChild(innerAppointmentWrap);\n wrap.appendChild(tbl);\n EventHandler.add(wrap, 'scroll', this.onContentScroll, this);\n return wrap;\n };\n VerticalView.prototype.getScrollableElement = function () {\n if (this.parent.isAdaptive) {\n return this.element.querySelector('.' + cls.SCROLL_CONTAINER_CLASS);\n }\n else {\n return this.getContentAreaElement();\n }\n };\n VerticalView.prototype.getDatesHeaderElement = function () {\n return this.element.querySelector('.' + cls.DATE_HEADER_CONTAINER_CLASS);\n };\n VerticalView.prototype.getTimeCellsElement = function () {\n return this.element.querySelector('.' + cls.TIME_CELLS_WRAP_CLASS);\n };\n VerticalView.prototype.getContentAreaElement = function () {\n return this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n };\n VerticalView.prototype.getEndDateFromStartDate = function (start) {\n var msMajorInterval = this.majorSlot * util.MS_PER_MINUTE;\n var msInterval = msMajorInterval / this.minorSlotCount;\n var end = new Date(start.getTime());\n end.setMilliseconds(end.getMilliseconds() + msInterval);\n return end;\n };\n VerticalView.prototype.adjustEventWrapper = function () {\n var tblWidth = this.element.querySelector('.' + cls.CONTENT_TABLE_CLASS).offsetWidth;\n this.element.querySelector('.' + cls.WRAPPER_CLASS).style.width = tblWidth + 'px';\n this.element.querySelector('.' + cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS).style.width = tblWidth + 'px';\n };\n VerticalView.prototype.getTimeSlotRows = function (handler) {\n var rows = [];\n var startHour = this.getStartHour();\n var endHour = this.getEndHour();\n var msMajorInterval = this.majorSlot * util.MS_PER_MINUTE;\n var msInterval = msMajorInterval / this.minorSlotCount;\n var length = Math.round(util.MS_PER_DAY / msInterval);\n var msStartHour = startHour.getTime();\n var msEndHour = endHour.getTime();\n if (msStartHour !== msEndHour) {\n length = Math.round((msEndHour - msStartHour) / msInterval);\n }\n var dt = new Date(msStartHour);\n for (var i = 0; i < length; i++) {\n var majorTickDivider = i % (msMajorInterval / msInterval);\n var row = {\n date: new Date('' + dt),\n first: (majorTickDivider === 0),\n middle: (majorTickDivider < this.minorSlotCount - 1),\n last: (majorTickDivider === this.minorSlotCount - 1),\n type: ''\n };\n if (handler) {\n handler(row);\n }\n rows.push(row);\n dt.setMilliseconds(msInterval);\n }\n return rows;\n };\n /**\n * Get module name.\n */\n VerticalView.prototype.getModuleName = function () {\n return 'verticalView';\n };\n /**\n * To destroy the vertical view.\n * @return {void}\n * @private\n */\n VerticalView.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.clearCurrentTimeIndicatorTimer();\n if (this.element) {\n EventHandler.remove(this.getContentAreaElement(), 'scroll', this.onContentScroll);\n remove(this.element);\n this.element = null;\n if (this.parent.scheduleTouchModule) {\n this.parent.scheduleTouchModule.resetValues();\n }\n }\n };\n return VerticalView;\n}(ViewBase));\nexport { VerticalView };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { VerticalView } from './vertical-view';\nimport * as util from '../base/util';\n/**\n * day view\n */\nvar Day = /** @class */ (function (_super) {\n __extends(Day, _super);\n /**\n * Constructor for day view\n */\n function Day(parent) {\n var _this = _super.call(this, parent) || this;\n _this.viewClass = 'e-day-view';\n return _this;\n }\n Day.prototype.getNextPreviousDate = function (type) {\n var daysCount = (type === 'next') ? 1 : -1;\n if (this.parent.activeViewOptions.showWeekend) {\n return util.addDays(this.parent.selectedDate, daysCount);\n }\n else {\n var date = util.addDays(this.parent.selectedDate, daysCount);\n while (!this.isWorkDay(date)) {\n date = util.addDays(date, daysCount);\n }\n return date;\n }\n };\n Day.prototype.getDateRangeText = function () {\n if (this.parent.isAdaptive) {\n return this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM y' });\n }\n return this.formatDateRange(this.parent.selectedDate);\n };\n /**\n * Get module name.\n */\n Day.prototype.getModuleName = function () {\n return 'day';\n };\n return Day;\n}(VerticalView));\nexport { Day };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { VerticalView } from './vertical-view';\nimport * as util from '../base/util';\n/**\n * week view\n */\nvar Week = /** @class */ (function (_super) {\n __extends(Week, _super);\n /**\n * Constructor\n */\n function Week(parent) {\n var _this = _super.call(this, parent) || this;\n _this.viewClass = 'e-week-view';\n return _this;\n }\n Week.prototype.getRenderDates = function () {\n this.renderDates = [];\n var selectedDate = util.resetTime(this.parent.selectedDate);\n var start = util.getWeekFirstDate(selectedDate, this.parent.firstDayOfWeek);\n for (var i = 0, length_1 = util.WEEK_LENGTH; i < length_1; i++) {\n if (this.parent.activeViewOptions.showWeekend) {\n this.renderDates.push(start);\n }\n else {\n if (this.isWorkDay(start)) {\n this.renderDates.push(start);\n }\n }\n start = util.addDays(start, 1);\n }\n };\n /**\n * Get module name.\n */\n Week.prototype.getModuleName = function () {\n return 'week';\n };\n return Week;\n}(VerticalView));\nexport { Week };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { VerticalView } from './vertical-view';\nimport * as util from '../base/util';\n/**\n * work week view\n */\nvar WorkWeek = /** @class */ (function (_super) {\n __extends(WorkWeek, _super);\n /**\n * Constructor\n */\n function WorkWeek(par) {\n var _this = _super.call(this, par) || this;\n _this.viewClass = 'e-work-week-view';\n return _this;\n }\n WorkWeek.prototype.getRenderDates = function () {\n this.renderDates = [];\n var start = util.getWeekFirstDate(util.resetTime(this.parent.selectedDate), this.parent.firstDayOfWeek);\n for (var i = 0, length_1 = util.WEEK_LENGTH; i < length_1; i++) {\n if (this.isWorkDay(start)) {\n this.renderDates.push(start);\n }\n start = util.addDays(start, 1);\n }\n };\n /**\n * Get module name.\n */\n WorkWeek.prototype.getModuleName = function () {\n return 'workWeek';\n };\n return WorkWeek;\n}(VerticalView));\nexport { WorkWeek };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { append, prepend, createElement, extend, EventHandler, closest, addClass } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setStyleAttribute, remove } from '@syncfusion/ej2-base';\nimport { EventBase } from './event-base';\nimport * as cls from '../base/css-constant';\nimport * as events from '../base/constant';\nimport * as util from '../base/util';\nvar EVENT_GAP = 0;\n/**\n * Month view events render\n */\nvar MonthEvent = /** @class */ (function (_super) {\n __extends(MonthEvent, _super);\n /**\n * Constructor for month events\n */\n function MonthEvent(parent) {\n var _this = _super.call(this, parent) || this;\n _this.renderedEvents = [];\n _this.element = _this.parent.activeView.getPanel();\n _this.fields = _this.parent.eventFields;\n _this.addEventListener();\n return _this;\n }\n MonthEvent.prototype.renderAppointments = function () {\n var appointmentWrapper = [].slice.call(this.element.querySelectorAll('.' + cls.APPOINTMENT_WRAPPER_CLASS));\n for (var _i = 0, appointmentWrapper_1 = appointmentWrapper; _i < appointmentWrapper_1.length; _i++) {\n var wrap = appointmentWrapper_1[_i];\n remove(wrap);\n }\n this.renderedEvents = [];\n this.dateRender = this.parent.activeView.renderDates;\n this.workCells = [].slice.call(this.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS));\n this.cellWidth = this.workCells[0].offsetWidth;\n this.cellHeight = this.workCells[0].offsetHeight;\n this.eventHeight = this.getElementHeightFromClass(this.element, cls.APPOINTMENT_CLASS);\n this.monthHeaderHeight = this.getOuterHeight(this.workCells[0].querySelector('.' + cls.DATE_HEADER_CLASS));\n var eventsList = this.parent.eventsProcessed;\n this.sortByDateTime(eventsList);\n var dates = this.dateRender.map(function (date) { return +date; });\n this.slots = [];\n var noOfDays = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH : this.parent.activeViewOptions.workDays.length;\n while (dates.length > 0) {\n this.slots.push(dates.splice(0, noOfDays));\n }\n for (var _a = 0, eventsList_1 = eventsList; _a < eventsList_1.length; _a++) {\n var event_1 = eventsList_1[_a];\n var splittedEvents = this.splitEvent(event_1, this.dateRender);\n for (var _b = 0, splittedEvents_1 = splittedEvents; _b < splittedEvents_1.length; _b++) {\n var event_2 = splittedEvents_1[_b];\n this.renderAppointmentMonth(event_2);\n }\n }\n };\n MonthEvent.prototype.getElementHeightFromClass = function (container, elementClass) {\n var height = 0;\n var el = createElement('div', { className: elementClass }).cloneNode();\n el.style.visibility = 'hidden';\n el.style.position = 'absolute';\n container.appendChild(el);\n height = this.getOuterHeight(el);\n remove(el);\n return height;\n };\n MonthEvent.prototype.getOuterHeight = function (element) {\n var style = getComputedStyle(element);\n return element.offsetHeight + (parseInt(style.marginTop, 10) || 0) + (parseInt(style.marginBottom, 10) || 0);\n };\n MonthEvent.prototype.createAppointmentElement = function (record) {\n var appointmentWrapper = createElement('div', {\n id: 'Appointment_' + record[this.fields.id],\n className: cls.APPOINTMENT_CLASS,\n attrs: {\n 'data-guid': record.Guid,\n 'role': 'button',\n 'tabindex': '0',\n 'aria-readonly': 'false',\n 'aria-selected': 'false',\n 'aria-grabbed': 'true',\n 'aria-label': isNullOrUndefined(record[this.fields.subject]) ?\n this.parent.eventSettings.fields.subject.default : record[this.fields.subject]\n }\n });\n var appointmentDetails = createElement('div', { className: cls.APPOINTMENT_DETAILS });\n appointmentWrapper.appendChild(appointmentDetails);\n var templateElement;\n var eventData = record.data;\n if (!isNullOrUndefined(this.parent.activeViewOptions.eventTemplate)) {\n templateElement = this.parent.getAppointmentTemplate()(record);\n }\n else {\n var eventSubject = isNullOrUndefined(record[this.fields.subject]) ?\n this.parent.eventSettings.fields.subject.default : record[this.fields.subject];\n var eventLocation = isNullOrUndefined(record[this.fields.location]) ?\n this.parent.eventSettings.fields.location.default : record[this.fields.location];\n var appointmentSubject = createElement('div', {\n className: cls.APPOINTMENT_SUBJECT,\n innerHTML: eventSubject + (eventLocation ? ('; ' + eventLocation) : '')\n });\n var appointmentStartTime = createElement('div', {\n className: cls.APPOINTMENT_TIME,\n innerHTML: this.parent.globalize.formatDate(eventData[this.fields.startTime], { skeleton: 'hm' }),\n styles: 'display:' + (this.parent.isAdaptive ? 'none' : 'block')\n });\n var appointmentEndTime = createElement('div', {\n className: cls.APPOINTMENT_TIME,\n innerHTML: this.parent.globalize.formatDate(eventData[this.fields.endTime], { skeleton: 'hm' }),\n styles: 'display:' + (this.parent.isAdaptive ? 'none' : 'block')\n });\n if (record[this.fields.isAllDay]) {\n templateElement = [appointmentSubject];\n addClass([appointmentSubject], 'e-text-center');\n }\n else if (eventData.count <= 1 && !eventData.isLeft && !eventData.isRight) {\n templateElement = [appointmentStartTime, appointmentSubject];\n }\n else {\n templateElement = [];\n addClass([appointmentSubject], 'e-text-center');\n if (!eventData.isLeft) {\n templateElement.push(appointmentStartTime);\n }\n templateElement.push(appointmentSubject);\n if (!eventData.isRight) {\n templateElement.push(appointmentEndTime);\n }\n }\n }\n append([].slice.call(templateElement), appointmentDetails);\n if (!isNullOrUndefined(record[this.fields.recurrenceRule])) {\n var iconClass = (record[this.fields.id] === record[this.fields.recurrenceID]) ?\n cls.EVENT_RECURRENCE_ICON_CLASS : cls.EVENT_RECURRENCE_EDIT_ICON_CLASS;\n appointmentDetails.appendChild(createElement('div', {\n className: cls.ICON + ' ' + iconClass,\n styles: 'display:' + (this.parent.isAdaptive ? 'none' : 'block')\n }));\n }\n if (eventData.isLeft) {\n var iconLeft = createElement('div', {\n className: cls.EVENT_INDICATOR_CLASS + ' ' + cls.ICON + ' ' + cls.EVENT_ICON_LEFT_CLASS\n });\n prepend([iconLeft], appointmentDetails);\n }\n if (eventData.isRight) {\n var iconRight = createElement('div', {\n className: cls.EVENT_INDICATOR_CLASS + ' ' + cls.ICON + ' ' + cls.EVENT_ICON_RIGHT_CLASS\n });\n append([iconRight], appointmentDetails);\n }\n return appointmentWrapper;\n };\n MonthEvent.prototype.renderAppointmentMonth = function (event) {\n var startTime = event[this.fields.startTime];\n var endTime = event[this.fields.endTime];\n var day = this.parent.getIndexOfDate(this.dateRender, util.resetTime(startTime));\n if (day < 0) {\n return;\n }\n var overlapCount = this.getIndex(event, startTime);\n event.Index = overlapCount;\n var appWidth;\n var appTop = 0;\n var moreIndicatorHeight = 19;\n var appHeight = this.eventHeight;\n this.renderedEvents.push(extend({}, event, null, true));\n var diffInDays = event.data.count;\n if (startTime.getTime() <= endTime.getTime()) {\n var appWidth_1 = (diffInDays * this.cellWidth) - 1;\n var cellTd = this.workCells[day];\n appTop = (overlapCount * (appHeight + EVENT_GAP));\n if (this.cellHeight > this.monthHeaderHeight + ((overlapCount + 1) * (appHeight + EVENT_GAP)) + moreIndicatorHeight) {\n var appointmentElement = this.createAppointmentElement(event);\n this.wireAppointmentEvents(appointmentElement);\n setStyleAttribute(appointmentElement, { 'width': appWidth_1 + 'px', 'height': appHeight + 'px', 'top': appTop + 'px' });\n if (cellTd.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS)) {\n cellTd.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS).appendChild(appointmentElement);\n }\n else {\n var wrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n wrapper.appendChild(appointmentElement);\n cellTd.appendChild(wrapper);\n }\n var args = { data: event, element: appointmentElement };\n this.parent.trigger(events.eventRendered, args);\n }\n else {\n for (var i = 0; i < diffInDays; i++) {\n var cellTd_1 = this.workCells[day + i];\n if (cellTd_1 && isNullOrUndefined(cellTd_1.querySelector('.' + cls.MORE_INDICATOR_CLASS))) {\n var startDateTime = new Date(this.dateRender[day + i].getTime());\n var endDateTime = util.addDays(this.dateRender[day + i], 1);\n var filterEvents = this.filterEvents(startDateTime, endDateTime, this.parent.eventsProcessed);\n var appArea = this.cellHeight - this.monthHeaderHeight - moreIndicatorHeight;\n var renderedAppCount = Math.floor(appArea / (appHeight + EVENT_GAP));\n var count = (filterEvents.length - renderedAppCount) <= 0 ? 1 : (filterEvents.length - renderedAppCount);\n var moreIndicatorElement = createElement('div', {\n className: cls.MORE_INDICATOR_CLASS,\n innerHTML: '+' + count + ' ' + (this.parent.isAdaptive ? '' : this.parent.localeObj.getConstant('more')),\n attrs: {\n 'tabindex': '0',\n 'data-start-date': startDateTime.getTime().toString(),\n 'data-end-date': endDateTime.getTime().toString()\n }\n });\n moreIndicatorElement.style.top = appArea + 'px';\n if (cellTd_1.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS)) {\n cellTd_1.querySelector('.' + cls.APPOINTMENT_WRAPPER_CLASS).appendChild(moreIndicatorElement);\n }\n else {\n var wrapper = createElement('div', { className: cls.APPOINTMENT_WRAPPER_CLASS });\n wrapper.appendChild(moreIndicatorElement);\n cellTd_1.appendChild(wrapper);\n }\n EventHandler.add(moreIndicatorElement, 'click', this.moreIndicatorClick, this);\n }\n }\n }\n }\n };\n MonthEvent.prototype.getIndex = function (record, date) {\n var appIndex = -1;\n var appointments = this.renderedEvents;\n if (appointments.length > 0) {\n var appointmentsList = [];\n for (var _i = 0, appointments_1 = appointments; _i < appointments_1.length; _i++) {\n var app = appointments_1[_i];\n if ((util.resetTime(app[this.fields.startTime]).getTime() <= util.resetTime(date).getTime()) &&\n (util.resetTime(app[this.fields.endTime]).getTime() >= util.resetTime(date).getTime())) {\n appointmentsList.push(app);\n }\n }\n var appLevel = appointmentsList.map(function (obj) { return obj.Index; });\n appIndex = (appLevel.length > 0) ? this.getSmallestMissingNumber(appLevel) : 0;\n }\n return (appIndex === -1) ? 0 : appIndex;\n };\n MonthEvent.prototype.moreIndicatorClick = function (event) {\n var target = closest(event.target, '.' + cls.MORE_INDICATOR_CLASS);\n var startDate = new Date(parseInt(target.getAttribute('data-start-date'), 10));\n var endDate = new Date(parseInt(target.getAttribute('data-end-date'), 10));\n var filteredEvents = this.filterEvents(startDate, endDate, this.parent.eventsProcessed);\n var moreEventArgs = { date: startDate, event: filteredEvents, element: event.target };\n if (!isNullOrUndefined(startDate) && this.parent.isAdaptive) {\n this.parent.setProperties({ selectedDate: startDate }, true);\n this.parent.changeView('Day');\n }\n else {\n this.parent.quickPopup.moreEventClick(moreEventArgs);\n }\n };\n return MonthEvent;\n}(EventBase));\nexport { MonthEvent };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { EventHandler, formatUnit, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, append, prepend } from '@syncfusion/ej2-base';\nimport { WorkCellInteraction } from '../actions/work-cells';\nimport { ViewBase } from './view-base';\nimport * as util from '../base/util';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\nimport { MonthEvent } from '../event-renderer/month';\n/**\n * month view\n */\nvar Month = /** @class */ (function (_super) {\n __extends(Month, _super);\n /**\n * Constructor for month view\n */\n function Month(parent) {\n var _this = _super.call(this, parent) || this;\n _this.dayNameFormat = 'wide';\n _this.viewClass = 'e-month-view';\n _this.isInverseTableSelect = false;\n _this.workCellAction = new WorkCellInteraction(parent);\n return _this;\n }\n Month.prototype.addEventListener = function () {\n this.parent.on(event.scrollUiUpdate, this.onScrollUiUpdate, this);\n this.parent.on(event.dataReady, this.onDataReady, this);\n this.parent.on(event.cellClick, this.onCellClick, this);\n };\n Month.prototype.removeEventListener = function () {\n this.parent.off(event.scrollUiUpdate, this.onScrollUiUpdate);\n this.parent.off(event.dataReady, this.onDataReady);\n this.parent.off(event.cellClick, this.onCellClick);\n };\n Month.prototype.onDataReady = function (args) {\n var monthEvent = new MonthEvent(this.parent);\n monthEvent.renderAppointments();\n };\n Month.prototype.onCellClick = function (event) {\n // Here cell click\n };\n Month.prototype.onContentScroll = function (e) {\n this.getDatesHeaderElement().firstChild.scrollLeft = e.target.scrollLeft;\n };\n Month.prototype.onScrollUiUpdate = function (args) {\n var headerHeight = 0;\n if (this.parent.headerModule) {\n headerHeight += this.parent.headerModule.getHeaderElement().offsetHeight;\n }\n var header = this.getDatesHeaderElement();\n var content = this.getContentAreaElement();\n content.style.height = 'auto';\n content.style.height = formatUnit(this.parent.element.offsetHeight - headerHeight - header.offsetHeight - 2);\n // tslint:disable:no-any\n if (content.offsetWidth - content.clientWidth > 0) {\n var scrollBarWidth = util.getScrollBarWidth();\n header.firstChild.style[args.cssProperties.border] = scrollBarWidth > 0 ? '1px' : '0px';\n header.style[args.cssProperties.padding] = scrollBarWidth > 0 ? scrollBarWidth - 1 + 'px' : '0px';\n }\n else {\n header.firstChild.style[args.cssProperties.border] = '';\n header.style[args.cssProperties.padding] = '';\n }\n // tslint:enable:no-any\n };\n Month.prototype.generateColLevels = function () {\n var count = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH : this.parent.activeViewOptions.workDays.length;\n var colLevels = [];\n var level = [];\n for (var col = 0; col < count; col++) {\n var classList = [cls.HEADER_CELLS_CLASS];\n if (this.isCurrentMonth(this.parent.selectedDate) && new Date().getDay() === col) {\n classList.push(cls.CURRENT_DAY_CLASS);\n }\n level.push({ date: this.renderDates[col], type: 'monthHeader', className: classList });\n }\n colLevels.push(level);\n return colLevels;\n };\n Month.prototype.getDayNameFormat = function () {\n if (this.parent.isAdaptive) {\n return 'abbreviated';\n }\n return 'wide';\n };\n Month.prototype.renderLayout = function (type) {\n this.dayNameFormat = this.getDayNameFormat();\n this.setPanel(createElement('div', { className: cls.TABLE_WRAP_CLASS }));\n var clsList = [this.viewClass];\n clsList.push(type);\n addClass([this.element], clsList);\n this.renderPanel(type);\n this.element.appendChild(this.createTableLayout(cls.OUTER_TABLE_CLASS));\n this.colLevels = this.generateColLevels();\n this.renderHeader();\n this.renderContent();\n this.parent.notify(event.contentReady, {});\n };\n Month.prototype.wireCellEvents = function (element) {\n EventHandler.add(element, 'mousedown', this.workCellAction.cellMouseDown, this);\n EventHandler.add(element, 'click', this.workCellAction.cellClick, this);\n EventHandler.add(element, 'dblclick', this.workCellAction.cellDblClick, this);\n };\n Month.prototype.renderHeader = function () {\n var tr = createElement('tr');\n var dateTd = createElement('td');\n dateTd.appendChild(this.renderDatesHeader());\n tr.appendChild(dateTd);\n prepend([tr], this.element.querySelector('tbody'));\n };\n Month.prototype.renderContent = function () {\n var tr = createElement('tr');\n var workTd = createElement('td');\n workTd.appendChild(this.renderContentArea());\n tr.appendChild(workTd);\n this.element.querySelector('tbody').appendChild(tr);\n this.renderAppointmentContainer();\n };\n Month.prototype.renderAppointmentContainer = function () {\n //Here needs to render mobile view appointment details on selected date\n };\n Month.prototype.renderDatesHeader = function () {\n var container = createElement('div', { className: cls.DATE_HEADER_CONTAINER_CLASS });\n var wrap = createElement('div', { className: cls.DATE_HEADER_WRAP_CLASS });\n container.appendChild(wrap);\n var table = this.createTableLayout();\n var trEle = createElement('tr');\n var rowsCount = this.colLevels.length;\n var lastLevel = this.colLevels[rowsCount - 1];\n for (var i = 0; i < rowsCount; i++) {\n var level = this.colLevels[i];\n var ntr = trEle.cloneNode();\n var colspan = lastLevel.length / level.length;\n for (var j = 0; j < level.length; j++) {\n var td = level[j];\n td.colSpan = colspan;\n ntr.appendChild(this.createHeaderCell(td));\n }\n table.querySelector('tbody').appendChild(ntr);\n }\n wrap.appendChild(table);\n return container;\n };\n Month.prototype.createHeaderCell = function (td) {\n var tdEle = createElement('th');\n if (td.className) {\n addClass([tdEle], td.className);\n }\n if (td.type === 'monthHeader') {\n var ele = createElement('span', { innerHTML: this.parent.getDayNames(this.dayNameFormat)[td.date.getDay()] });\n tdEle.appendChild(ele);\n }\n var args = { elementType: td.type, element: tdEle, date: td.date };\n this.parent.trigger(event.renderCell, args);\n return tdEle;\n };\n Month.prototype.isOtherMonth = function (date) {\n return this.parent.selectedDate.getMonth() !== date.getMonth();\n };\n Month.prototype.renderContentArea = function () {\n var wrap = createElement('div', { className: cls.CONTENT_WRAP_CLASS });\n var tbl = this.createTableLayout(cls.CONTENT_TABLE_CLASS);\n var tbody = tbl.querySelector('tbody');\n var tr = createElement('tr', { attrs: { role: 'row' } });\n var td = createElement('td', { attrs: { role: 'gridcell', 'aria-selected': 'false' } });\n var count = this.parent.activeViewOptions.showWeekend ? util.WEEK_LENGTH : this.parent.activeViewOptions.workDays.length;\n var noOfRows = this.renderDates.length / count;\n var startCol = 0;\n var endCol = count;\n for (var row = 0; row < noOfRows; row++) {\n var ntr = tr.cloneNode();\n for (startCol = 0 + startCol; startCol < endCol; startCol++) {\n var data = { date: this.renderDates[startCol], type: 'monthCells', className: [cls.WORK_CELLS_CLASS] };\n var ntd = td.cloneNode();\n if (this.isOtherMonth(data.date)) {\n data.className.push(cls.OTHERMONTH_CLASS);\n }\n if (this.parent.workHours.highlight && this.isWorkDay(data.date)) {\n data.className.push(cls.WORKDAY_CLASS);\n }\n if (this.isCurrentDate(data.date)) {\n data.className.push(cls.CURRENTDATE_CLASS);\n }\n if (this.parent.currentView === 'MonthAgenda' && this.parent.isSelectedDate(data.date)) {\n data.className.push(cls.SELECTED_CELL_CLASS);\n }\n addClass([ntd], data.className);\n ntd.setAttribute('data-date', data.date.getTime().toString());\n this.renderDateHeaderElement(data, ntd);\n if (this.parent.cellTemplate) {\n var args_1 = { date: data.date, type: data.type };\n append([].slice.call(this.parent.getCellTemplate()(args_1)), ntd);\n }\n this.wireCellEvents(ntd);\n var args = { elementType: data.type, element: ntd, date: data.date };\n this.parent.trigger(event.renderCell, args);\n ntr.appendChild(ntd);\n }\n endCol = endCol + count;\n startCol = startCol + 0;\n tbody.appendChild(ntr);\n }\n wrap.appendChild(tbl);\n EventHandler.add(wrap, 'scroll', this.onContentScroll, this);\n return wrap;\n };\n Month.prototype.getDatesHeaderElement = function () {\n return this.element.querySelector('.' + cls.DATE_HEADER_CONTAINER_CLASS);\n };\n Month.prototype.getContentAreaElement = function () {\n return this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n };\n Month.prototype.renderDateHeaderElement = function (data, ntd) {\n var dateHeader = createElement('div', { className: cls.DATE_HEADER_CLASS });\n dateHeader.innerHTML = (data.date.getDate() === 1 && !this.isCurrentDate(data.date) && !this.parent.isAdaptive) ?\n this.parent.globalize.formatDate(data.date, { format: 'MMM d' }) :\n this.parent.globalize.formatDate(data.date, { skeleton: 'd' });\n ntd.appendChild(dateHeader);\n if (this.getModuleName() === 'month') {\n addClass([dateHeader], cls.NAVIGATE_CLASS);\n }\n };\n Month.prototype.getRenderDates = function () {\n this.renderDates = [];\n var currentDate = util.resetTime(this.parent.selectedDate);\n var monthStart = util.getWeekFirstDate(util.firstDateOfMonth(currentDate), this.parent.firstDayOfWeek);\n var lastWeekOfMonth = util.getWeekFirstDate(util.lastDateOfMonth(currentDate), this.parent.firstDayOfWeek);\n var monthEnd = util.addDays(lastWeekOfMonth, util.WEEK_LENGTH - 1);\n var start = new Date(monthStart.getFullYear(), monthStart.getMonth(), monthStart.getDate());\n do {\n if (this.parent.activeViewOptions.showWeekend) {\n this.renderDates.push(start);\n }\n else {\n if (this.isWorkDay(start)) {\n this.renderDates.push(start);\n }\n }\n start = util.addDays(start, 1);\n } while (start.getTime() <= monthEnd.getTime());\n };\n Month.prototype.getNextPreviousDate = function (type) {\n if (type === 'next') {\n return util.addMonths(this.parent.selectedDate, 1);\n }\n else {\n return util.addMonths(this.parent.selectedDate, -1);\n }\n };\n Month.prototype.getEndDateFromStartDate = function (start) {\n return util.addDays(new Date(start.getTime()), 1);\n };\n Month.prototype.getDateRangeText = function () {\n if (this.parent.isAdaptive || isNullOrUndefined(this.parent.activeViewOptions.dateFormat)) {\n return this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM y' });\n }\n return this.formatDateRange(this.parent.selectedDate);\n };\n Month.prototype.getLabelText = function (view) {\n return this.parent.localeObj.getConstant(view) + ' of ' +\n this.parent.globalize.formatDate(this.parent.selectedDate, { format: 'MMMM y' });\n };\n /**\n * Get module name.\n */\n Month.prototype.getModuleName = function () {\n return 'month';\n };\n /**\n * To destroy the month.\n * @return {void}\n * @private\n */\n Month.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n if (this.element) {\n remove(this.element);\n this.element = null;\n if (this.parent.scheduleTouchModule) {\n this.parent.scheduleTouchModule.resetValues();\n }\n }\n };\n return Month;\n}(ViewBase));\nexport { Month };\n","import { isNullOrUndefined, addClass, createElement, append, EventHandler } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\nimport * as event from '../base/constant';\n/**\n * AgendaBase for event rendering\n */\nvar AgendaBase = /** @class */ (function () {\n /**\n * Constructor for AgendaBase\n */\n function AgendaBase(parent) {\n this.parent = parent;\n this.l10n = this.parent.localeObj;\n }\n AgendaBase.prototype.createAgendaContentElement = function (type, listData, aTd) {\n var listElement;\n if (type === 'noEvents') {\n var noEvents = [{ 'subject': this.l10n.getConstant('noEvents') }];\n listElement = ListBase.createList(noEvents, {\n moduleName: 'agenda',\n listClass: this.parent.activeView.viewClass,\n itemClass: this.parent.activeView.viewClass,\n template: '
    ${subject}
    '\n });\n }\n else {\n listElement = ListBase.createList(listData, {\n moduleName: 'agenda',\n listClass: this.parent.activeView.viewClass,\n itemClass: this.parent.activeView.viewClass\n });\n for (var li = 0, length_1 = listData.length; li < length_1; li++) {\n var appWrapper = createElement('div', {\n id: 'Appointment_' + listData[li][this.parent.eventFields.id],\n className: cls.APPOINTMENT_CLASS, attrs: {\n 'data-guid': listData[li].Guid,\n 'role': 'button',\n 'tabindex': '0',\n 'aria-readonly': 'false',\n 'aria-selected': 'false',\n 'aria-grabbed': 'true',\n 'aria-label': isNullOrUndefined(listData[li][this.parent.eventFields.subject]) ?\n this.parent.eventSettings.fields.subject.default : listData[li][this.parent.eventFields.subject]\n }\n });\n var templateEle = void 0;\n if (!isNullOrUndefined(this.parent.activeViewOptions.eventTemplate)) {\n templateEle = this.parent.getAppointmentTemplate()(listData[li]);\n }\n else {\n templateEle = this.createAppointment(listData[li]);\n }\n append([].slice.call(templateEle), appWrapper);\n listElement.children[li].innerHTML = appWrapper.outerHTML;\n var args = { data: listData[li], element: listElement.children[li] };\n this.parent.trigger(event.eventRendered, args);\n }\n }\n aTd.appendChild(listElement);\n addClass([aTd], cls.AGENDA_DAY_BORDER_CLASS);\n return aTd;\n };\n AgendaBase.prototype.createAppointment = function (event) {\n var fieldMapping = this.parent.eventFields;\n var recordSubject = isNullOrUndefined(event[fieldMapping.subject]) ?\n this.parent.eventSettings.fields.subject.default : event[fieldMapping.subject];\n var appSubjectWrap = createElement('div', { className: cls.APPOINTMENT_SUBJECT_WRAP });\n if (!isNullOrUndefined(event[fieldMapping.location]) && event[fieldMapping.location] !== '') {\n recordSubject += ',';\n }\n appSubjectWrap.appendChild(createElement('div', {\n className: cls.APPOINTMENT_SUBJECT,\n innerHTML: recordSubject\n }));\n if (!isNullOrUndefined(event[fieldMapping.location])) {\n appSubjectWrap.appendChild(createElement('div', {\n className: cls.APPOINTMENT_LOCATION,\n innerHTML: event[fieldMapping.location]\n }));\n }\n if (!isNullOrUndefined(event[fieldMapping.recurrenceRule])) {\n var iconClass = (event[fieldMapping.id] === event[fieldMapping.recurrenceID]) ?\n cls.EVENT_RECURRENCE_ICON_CLASS : cls.EVENT_RECURRENCE_EDIT_ICON_CLASS;\n appSubjectWrap.appendChild(createElement('div', { className: cls.ICON + ' ' + iconClass }));\n }\n var strDate = event[fieldMapping.startTime];\n var endDate = event[fieldMapping.endTime];\n var isAllDay = event[fieldMapping.isAllDay];\n var allDayStr = this.l10n.getConstant('allDay');\n var timeStr = this.parent.globalize.formatDate(strDate, { skeleton: 'hm' }) + ' - ' +\n this.parent.globalize.formatDate(endDate, { skeleton: 'hm' });\n if (!isNullOrUndefined(event.data)) {\n var eventString = (endDate.getTime() - strDate.getTime()) / util.MS_PER_DAY >= 1 ? allDayStr : timeStr;\n allDayStr = eventString + ' (' + this.l10n.getConstant('day') + ' ' + event.data.index + '/' +\n event.data.count + ')';\n }\n var appDateTime = createElement('div', {\n className: cls.AGENDA_DATETIME_CLASS,\n innerHTML: (!isNullOrUndefined(event.data) || isAllDay) ? allDayStr : timeStr\n });\n return [appSubjectWrap, appDateTime];\n };\n AgendaBase.prototype.processAgendaEvents = function (events) {\n var eventsProcessed = [];\n for (var _i = 0, events_1 = events; _i < events_1.length; _i++) {\n var event_1 = events_1[_i];\n var splited = this.parent.eventBase.splitEventByDay(event_1);\n eventsProcessed = eventsProcessed.concat(splited.length > 1 ? splited : event_1);\n }\n return eventsProcessed;\n };\n AgendaBase.prototype.wireEventActions = function () {\n var eventElement = [].slice.call(this.parent.element.querySelectorAll('.' + cls.APPOINTMENT_CLASS));\n for (var _i = 0, eventElement_1 = eventElement; _i < eventElement_1.length; _i++) {\n var element = eventElement_1[_i];\n this.parent.eventBase.wireAppointmentEvents(element);\n }\n var dateHeaderElement = [].slice.call(this.parent.element.querySelectorAll('.e-m-date'));\n for (var _a = 0, dateHeaderElement_1 = dateHeaderElement; _a < dateHeaderElement_1.length; _a++) {\n var element = dateHeaderElement_1[_a];\n EventHandler.add(element, 'click', this.parent.agendaModule.dayNavigationClick, this);\n }\n };\n return AgendaBase;\n}());\nexport { AgendaBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { formatUnit, isNullOrUndefined, append, closest } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, removeClass, EventHandler } from '@syncfusion/ej2-base';\nimport { AgendaBase } from '../event-renderer/agenda-base';\nimport { ViewBase } from './view-base';\nimport * as util from '../base/util';\nimport * as event from '../base/constant';\nimport * as cls from '../base/css-constant';\n/**\n * agenda view\n */\nvar Agenda = /** @class */ (function (_super) {\n __extends(Agenda, _super);\n /**\n * Constructor for agenda view\n */\n function Agenda(parent) {\n var _this = _super.call(this, parent) || this;\n _this.viewClass = 'e-agenda-view';\n _this.isInverseTableSelect = false;\n _this.agendaDates = {};\n _this.virtualScrollTop = 1;\n _this.minDate = new Date(1900, 0, 1);\n _this.maxDate = new Date(2099, 11, 31);\n _this.agendaBase = new AgendaBase(parent);\n return _this;\n }\n /**\n * Get module name.\n */\n Agenda.prototype.getModuleName = function () {\n return 'agenda';\n };\n Agenda.prototype.renderLayout = function () {\n this.agendaDates = {};\n this.element = createElement('div', { className: cls.TABLE_WRAP_CLASS });\n addClass([this.element], this.viewClass);\n this.element.appendChild(this.createTableLayout(cls.OUTER_TABLE_CLASS));\n this.parent.element.querySelector('.' + cls.TABLE_CONTAINER_CLASS).appendChild(this.element);\n var eTr = createElement('tr');\n this.element.querySelector('tbody').appendChild(eTr);\n var workTd = createElement('td');\n eTr.appendChild(workTd);\n var wrap = createElement('div', { className: cls.CONTENT_WRAP_CLASS });\n workTd.appendChild(wrap);\n var tbl = this.createTableLayout(cls.CONTENT_TABLE_CLASS);\n wrap.appendChild(tbl);\n var tBody = tbl.querySelector('tbody');\n var agendaDate = util.resetTime(this.parent.selectedDate);\n this.renderEmptyContent(tBody, agendaDate);\n this.wireEvents();\n this.parent.notify(event.contentReady, {});\n };\n Agenda.prototype.eventLoad = function (args) {\n this.parent.eventsProcessed = this.agendaBase.processAgendaEvents(args.processedData);\n var agendaDate = util.resetTime(this.parent.selectedDate);\n var tBody = this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS + ' tbody');\n tBody.innerHTML = '';\n this.renderContent(tBody, agendaDate);\n this.agendaBase.wireEventActions();\n var contentArea = closest(tBody, '.' + cls.CONTENT_WRAP_CLASS);\n contentArea.scrollTop = 1;\n };\n Agenda.prototype.renderContent = function (tBody, agendaDate) {\n var fieldMapping = this.parent.eventFields;\n var firstDate = new Date(agendaDate.getTime());\n var lastDate = this.getEndDateFromStartDate(firstDate);\n var isObject = this.appointmentFiltering(firstDate, lastDate);\n if (isObject.length === 0) {\n lastDate = firstDate;\n firstDate = new Date(this.minDate.getTime());\n isObject = this.appointmentFiltering(firstDate, lastDate);\n if (isObject.length === 0) {\n firstDate = lastDate;\n lastDate = new Date(this.maxDate.getTime());\n isObject = this.appointmentFiltering(firstDate, lastDate);\n }\n }\n if (isObject.length > 0) {\n var appoint = isObject;\n agendaDate = appoint[0][fieldMapping.startTime];\n this.updateHeaderText(appoint[0][fieldMapping.startTime]);\n }\n var endDate;\n if (!this.parent.hideEmptyAgendaDays || (this.parent.agendaDaysCount > 0 && isObject.length > 0)) {\n var noOfDays = (!this.parent.hideEmptyAgendaDays || !this.parent.activeViewOptions.allowVirtualScrolling ||\n this.parent.agendaDaysCount < isObject.length) ? this.parent.agendaDaysCount : isObject.length;\n for (var day = 0; day < noOfDays; day++) {\n var filterData = [];\n filterData = this.appointmentFiltering(agendaDate);\n var nTr = this.createTableRowElement(agendaDate, 'data');\n if (this.element.querySelector('tr[aria-rowindex=\"' + parseInt(nTr.getAttribute('aria-rowindex'), 10) + '\"]')) {\n continue;\n }\n var dTd = nTr.children[0];\n var aTd = nTr.children[1];\n if (filterData.length > 0 || (!this.parent.hideEmptyAgendaDays && filterData.length === 0)) {\n var elementType = (!this.parent.hideEmptyAgendaDays && filterData.length === 0) ? 'noEvents' : 'data';\n dTd.appendChild(this.createDateHeaderElement(agendaDate));\n nTr.appendChild(dTd);\n nTr.appendChild(this.agendaBase.createAgendaContentElement(elementType, filterData, aTd));\n tBody.appendChild(nTr);\n }\n else if (this.parent.activeViewOptions.allowVirtualScrolling) {\n day--;\n }\n if (this.isCurrentDate(new Date(agendaDate.getTime()))) {\n addClass(dTd.children, cls.AGENDA_CURRENT_DAY_CLASS);\n }\n agendaDate = util.addDays(agendaDate, 1);\n if (agendaDate.getTime() > lastDate.getTime()) {\n break;\n }\n }\n endDate = new Date(agendaDate.getTime() - util.MS_PER_DAY);\n }\n else {\n this.renderEmptyContent(tBody, agendaDate);\n endDate = util.addDays(agendaDate, this.parent.agendaDaysCount - 1);\n }\n this.agendaDates = { start: firstDate, end: endDate };\n };\n Agenda.prototype.renderEmptyContent = function (tBody, agendaDate) {\n var eTr = this.createTableRowElement(agendaDate, 'noEvents');\n var eTd = eTr.children[0];\n var noEvents = createElement('div', {\n className: cls.AGENDA_EMPTY_EVENT_CLASS,\n innerHTML: this.l10n.getConstant('noEvents')\n });\n eTd.appendChild(noEvents);\n tBody.appendChild(eTr);\n };\n Agenda.prototype.createTableRowElement = function (date, type) {\n var daysCount = util.getDaysCount(this.parent.selectedDate.getTime(), date.getTime());\n var tr = createElement('tr', { attrs: { 'role': 'row', 'aria-rowindex': daysCount.toString() } });\n var td = createElement('td', {\n attrs: {\n 'class': cls.AGENDA_CELLS_CLASS,\n 'role': 'gridcell',\n 'aria-selected': 'false',\n 'aria-colindex': daysCount.toString(),\n 'data-date': date.getTime().toString()\n }\n });\n var dTd = td.cloneNode();\n var aTd = td.cloneNode();\n tr.appendChild(dTd);\n if (type !== 'noEvents') {\n tr.appendChild(aTd);\n }\n return tr;\n };\n Agenda.prototype.createDateHeaderElement = function (date) {\n var dateHeader;\n if (this.parent.activeViewOptions.dateHeaderTemplate) {\n dateHeader = createElement('div', { className: cls.AGENDA_HEADER_CLASS });\n var templateArgs = { date: date, type: 'dateHeader' };\n var template = this.parent.getDateHeaderTemplate()(templateArgs);\n append([].slice.call(template), dateHeader);\n }\n else {\n dateHeader = this.getMobileDateElement(date, cls.AGENDA_HEADER_CLASS);\n }\n return dateHeader;\n };\n Agenda.prototype.agendaScrolling = function (event) {\n this.parent.quickPopup.quickPopup.close();\n if (this.parent.activeViewOptions.allowVirtualScrolling) {\n this.virtualScrolling(event);\n }\n };\n Agenda.prototype.virtualScrolling = function (event) {\n var target = event.target;\n var scrollTop = target.scrollTop;\n var scrollHeight = target.scrollHeight;\n var offsetHeight = target.clientHeight;\n var totalHeight = scrollTop + offsetHeight;\n var direction = (this.virtualScrollTop < scrollTop) ? 'next' : 'previous';\n var tBody = target.querySelector('tbody');\n var emptyTBody = createElement('tbody');\n var topElement = this.getElementFromScrollerPosition(event, direction);\n var scrollDate = new Date(parseInt(topElement.getAttribute('data-date'), 0));\n var filterDate;\n var filterData;\n if (scrollTop === 0) {\n filterDate = this.getPreviousNextDate(util.addDays(scrollDate, -1), direction);\n filterData = this.appointmentFiltering(filterDate.start, filterDate.end);\n if (filterData.length > 0 || !this.parent.hideEmptyAgendaDays) {\n this.renderContent(emptyTBody, filterDate.start);\n tBody.innerHTML = emptyTBody.innerHTML + tBody.innerHTML;\n this.agendaBase.wireEventActions();\n for (var s = 0, element = tBody.children; s < element.length; s++) {\n if (element[s].getAttribute('aria-rowindex') === topElement.getAttribute('aria-colindex')) {\n var scrollToValue = element[s].offsetTop -\n this.element.querySelector('.e-agenda-item').offsetHeight;\n target.scrollTop = scrollToValue;\n break;\n }\n }\n this.updateHeaderText(scrollDate);\n }\n }\n else if (totalHeight === scrollHeight) {\n filterDate = this.getPreviousNextDate(util.addDays(scrollDate, 1), direction);\n filterData = this.appointmentFiltering(filterDate.start, filterDate.end);\n if (filterData.length > 0 || !this.parent.hideEmptyAgendaDays) {\n this.renderContent(emptyTBody, filterDate.start);\n tBody.innerHTML += emptyTBody.innerHTML;\n this.agendaBase.wireEventActions();\n this.updateHeaderText(scrollDate);\n }\n }\n else {\n this.updateHeaderText(scrollDate);\n }\n this.virtualScrollTop = scrollTop;\n var selectedElements = this.parent.eventBase.getSelectedAppointments();\n if (selectedElements.length > 0) {\n selectedElements[selectedElements.length - 1].focus();\n }\n };\n Agenda.prototype.getElementFromScrollerPosition = function (event, direction) {\n var filterElement;\n var target = event.target;\n var scrollTop = target.scrollTop;\n var scrollHeight = target.scrollHeight;\n var offsetHeight = target.clientHeight;\n var totalHeight = scrollTop + offsetHeight;\n var liCollection = [].slice.call(target.querySelectorAll('.e-agenda-item'));\n var li;\n var liDetails;\n if (liCollection.length > 0) {\n if (scrollTop === 0) {\n li = liCollection[0];\n filterElement = closest(li, '.' + cls.AGENDA_CELLS_CLASS);\n }\n else if (totalHeight === scrollHeight) {\n li = liCollection[liCollection.length - 1];\n filterElement = closest(li, '.' + cls.AGENDA_CELLS_CLASS);\n }\n else {\n for (var a = 0, length_1 = liCollection.length; a < length_1; a++) {\n li = liCollection[a];\n liDetails = li.getBoundingClientRect();\n if (liDetails.top >= 0) {\n filterElement = closest(li, '.' + cls.AGENDA_CELLS_CLASS);\n break;\n }\n }\n }\n }\n return filterElement;\n };\n Agenda.prototype.updateHeaderText = function (date) {\n if (this.parent.showHeaderBar) {\n var dateRangeText = this.getDateRangeText(date);\n var headerElement = this.parent.headerModule.element.querySelector('.e-date-range');\n headerElement.setAttribute('aria-label', dateRangeText);\n headerElement.querySelector('.e-tbar-btn-text').innerHTML = dateRangeText;\n }\n };\n Agenda.prototype.getPreviousNextDate = function (date, type) {\n var currentDate = new Date(date.getTime());\n var firstDate = this.getStartDateFromEndDate(date);\n var lastDate = this.getEndDateFromStartDate(date);\n var daysCount = 0;\n do {\n var filterData = this.appointmentFiltering(currentDate);\n if (filterData.length > 0 || !this.parent.hideEmptyAgendaDays) {\n daysCount++;\n }\n currentDate = util.addDays(currentDate, (type === 'next') ? 1 : -1);\n if (currentDate < firstDate || currentDate > lastDate) {\n break;\n }\n } while (daysCount !== this.parent.agendaDaysCount);\n var endDate = util.addDays(currentDate, (type === 'next') ? -1 : 1);\n return (type === 'next') ? { start: date, end: util.addDays(endDate, 1) } : { start: endDate, end: util.addDays(date, 1) };\n };\n Agenda.prototype.appointmentFiltering = function (startDate, endDate) {\n var dateStart;\n var dateEnd;\n if (!isNullOrUndefined(startDate) && isNullOrUndefined(endDate)) {\n dateStart = util.resetTime(new Date(startDate.getTime()));\n dateEnd = util.setTime(new Date(dateStart.getTime()), util.MS_PER_DAY);\n }\n else {\n dateStart = new Date(startDate.getTime());\n dateEnd = new Date(endDate.getTime());\n }\n var filterData = this.parent.eventBase.filterEvents(dateStart, dateEnd);\n return filterData;\n };\n Agenda.prototype.getStartDateFromEndDate = function (endDate) {\n var filterDate;\n var fieldMapping = this.parent.eventFields;\n if (this.parent.eventsProcessed.length > 0) {\n var firstDate = Math.min.apply(Math, this.parent.eventsProcessed.map(function (a) {\n var date = a[fieldMapping.startTime];\n return date.getTime();\n }));\n filterDate = this.parent.hideEmptyAgendaDays ? new Date(firstDate) : this.minDate;\n }\n else {\n filterDate = this.parent.hideEmptyAgendaDays ? util.addMonths(endDate, -1) : this.minDate;\n }\n return util.resetTime(filterDate);\n };\n Agenda.prototype.getEndDateFromStartDate = function (startDate) {\n var filterDate;\n var fieldMapping = this.parent.eventFields;\n if (this.parent.eventsProcessed.length > 0) {\n var lastDate = Math.max.apply(Math, this.parent.eventsProcessed.map(function (a) {\n var date = a[fieldMapping.endTime];\n return date.getTime();\n }));\n filterDate = this.parent.hideEmptyAgendaDays ? new Date(lastDate) : this.maxDate;\n }\n else {\n filterDate = this.parent.hideEmptyAgendaDays ? util.addMonths(startDate, 1) : this.maxDate;\n }\n return util.resetTime(util.addDays(filterDate, 1));\n };\n Agenda.prototype.getNextPreviousDate = function (type) {\n var noOfDays = (type === 'next') ? 1 : -1;\n return util.addDays(this.parent.selectedDate, noOfDays);\n };\n Agenda.prototype.startDate = function () {\n return util.resetTime(this.parent.selectedDate);\n };\n Agenda.prototype.endDate = function () {\n if (this.parent.activeViewOptions.allowVirtualScrolling) {\n return this.getEndDateFromStartDate(this.startDate());\n }\n else {\n return util.addDays(this.startDate(), this.parent.agendaDaysCount);\n }\n };\n Agenda.prototype.getDateRangeText = function (date) {\n var formatDate = (this.parent.activeViewOptions.dateFormat) ? this.parent.activeViewOptions.dateFormat : 'MMMM y';\n if (this.parent.activeViewOptions.allowVirtualScrolling || this.parent.isAdaptive) {\n var currentDate = isNullOrUndefined(date) ? this.parent.selectedDate : date;\n return this.parent.globalize.formatDate(currentDate, { format: formatDate });\n }\n else {\n var startDate = this.parent.selectedDate;\n var endDate = util.addDays(startDate, this.parent.agendaDaysCount - 1);\n return this.formatDateRange(startDate, endDate);\n }\n };\n Agenda.prototype.dayNavigationClick = function (e) {\n var date = this.parent.getDateFromElement(closest(e.currentTarget, '.' + cls.AGENDA_CELLS_CLASS));\n if (!isNullOrUndefined(date) && !this.parent.isAdaptive) {\n this.parent.setProperties({ selectedDate: date }, true);\n this.parent.changeView('Day');\n }\n };\n Agenda.prototype.wireEvents = function () {\n EventHandler.add(this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS), event.scroll, this.agendaScrolling, this);\n };\n Agenda.prototype.unWireEvents = function () {\n EventHandler.remove(this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS), event.scroll, this.agendaScrolling);\n var dateHeaderElement = [].slice.call(this.element.querySelectorAll('.e-m-date'));\n for (var _i = 0, dateHeaderElement_1 = dateHeaderElement; _i < dateHeaderElement_1.length; _i++) {\n var element = dateHeaderElement_1[_i];\n EventHandler.remove(element, 'click', this.dayNavigationClick);\n }\n };\n Agenda.prototype.addEventListener = function () {\n this.parent.on(event.scrollUiUpdate, this.onAgendaScrollUiUpdate, this);\n this.parent.on(event.dataReady, this.eventLoad, this);\n };\n Agenda.prototype.removeEventListener = function () {\n this.parent.off(event.scrollUiUpdate, this.onAgendaScrollUiUpdate);\n this.parent.off(event.dataReady, this.eventLoad);\n };\n Agenda.prototype.onAgendaScrollUiUpdate = function (args) {\n var headerHeight = 2;\n if (this.parent.headerModule) {\n headerHeight += this.parent.headerModule.getHeaderElement().offsetHeight;\n if (this.parent.activeViewOptions.allowVirtualScrolling) {\n addClass(this.parent.headerModule.element.querySelectorAll('.e-prev,.e-next'), cls.AGENDA_HIDDEN_CLASS);\n addClass([this.parent.headerModule.element.querySelector('.e-date-range')], cls.AGENDA_ALIGN_CLASS);\n }\n else {\n removeClass(this.parent.headerModule.element.querySelectorAll('.e-prev,.e-next'), cls.AGENDA_HIDDEN_CLASS);\n removeClass([this.parent.headerModule.element.querySelector('.e-date-range')], cls.AGENDA_ALIGN_CLASS);\n }\n }\n var contentArea = this.element.querySelector('.' + cls.CONTENT_WRAP_CLASS);\n contentArea.style.height = formatUnit(this.parent.element.offsetHeight - headerHeight);\n };\n /**\n * To destroy the agenda.\n * @return {void}\n * @private\n */\n Agenda.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n if (this.element) {\n this.unWireEvents();\n remove(this.element);\n this.element = null;\n if (this.parent.headerModule && this.parent.activeViewOptions.allowVirtualScrolling) {\n removeClass(this.parent.headerModule.element.querySelectorAll('.e-prev,.e-next'), cls.AGENDA_HIDDEN_CLASS);\n removeClass([this.parent.headerModule.element.querySelector('.e-date-range')], cls.AGENDA_ALIGN_CLASS);\n }\n }\n };\n return Agenda;\n}(ViewBase));\nexport { Agenda };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { createElement, addClass, formatUnit, remove } from '@syncfusion/ej2-base';\nimport { AgendaBase } from '../event-renderer/agenda-base';\nimport { Month } from './month';\nimport * as util from '../base/util';\nimport * as cls from '../base/css-constant';\n/**\n * month agenda view\n */\nvar MonthAgenda = /** @class */ (function (_super) {\n __extends(MonthAgenda, _super);\n /**\n * Constructor\n */\n function MonthAgenda(parent) {\n var _this = _super.call(this, parent) || this;\n _this.dayNameFormat = 'narrow';\n _this.viewClass = 'e-month-agenda-view';\n _this.agendaDates = {};\n _this.agendaBase = new AgendaBase(parent);\n return _this;\n }\n MonthAgenda.prototype.renderAppointmentContainer = function () {\n var contentArea = this.getContentAreaElement();\n var appWrap = createElement('div', { className: cls.APPOINTMENT_WRAP_CLASS });\n contentArea.appendChild(appWrap);\n this.appendAppContainer(appWrap);\n this.setEventWrapperHeight();\n };\n MonthAgenda.prototype.getDayNameFormat = function () {\n if (this.parent.isAdaptive) {\n return 'narrow';\n }\n return 'abbreviated';\n };\n MonthAgenda.prototype.setEventWrapperHeight = function () {\n var headerHeight = (this.parent.headerModule ? this.parent.headerModule.getHeaderElement().offsetHeight : 0) + 2;\n var contentArea = this.getContentAreaElement().firstChild;\n var dateHeader = this.element.querySelector('.' + cls.DATE_HEADER_WRAP_CLASS);\n var availableHeight = this.parent.element.offsetHeight - headerHeight - dateHeader.offsetHeight - contentArea.offsetHeight;\n var eventWrapper = this.element.querySelector('.' + cls.APPOINTMENT_WRAP_CLASS);\n eventWrapper.style.height = formatUnit(availableHeight);\n };\n MonthAgenda.prototype.onDataReady = function (args) {\n this.setEventWrapperHeight();\n this.clearElements();\n this.parent.eventsProcessed = this.agendaBase.processAgendaEvents(args.processedData);\n var count = 0;\n for (var _i = 0, _a = this.renderDates; _i < _a.length; _i++) {\n var date = _a[_i];\n var filterData = this.appointmentFiltering(date);\n var workCell = this.element.querySelectorAll('.' + cls.WORK_CELLS_CLASS)[count];\n if (filterData.length > 0) {\n if (!workCell.querySelector('.' + cls.APPOINTMENT_INDICATOR_CLASS)) {\n workCell.appendChild(createElement('div', { className: cls.APPOINTMENT_INDICATOR_CLASS }));\n }\n if (date.getTime() === util.resetTime(new Date(this.parent.selectedDate.getTime())).getTime()) {\n this.onEventRender(filterData);\n }\n }\n count++;\n }\n };\n MonthAgenda.prototype.onCellClick = function (event) {\n var filterData = this.appointmentFiltering(event.startTime);\n this.onEventRender(filterData);\n this.parent.setProperties({ selectedDate: new Date('' + event.startTime) }, true);\n };\n MonthAgenda.prototype.onEventRender = function (events) {\n var appWrap = this.element.querySelector('.' + cls.APPOINTMENT_WRAP_CLASS);\n appWrap.innerHTML = '';\n if (events.length > 0) {\n var appContainer = createElement('div', { className: cls.APPOINTMENT_CONTAINER_CLASS });\n appWrap.appendChild(this.agendaBase.createAgendaContentElement('data', events, appContainer));\n }\n else {\n this.appendAppContainer(appWrap);\n }\n this.agendaBase.wireEventActions();\n };\n MonthAgenda.prototype.appointmentFiltering = function (date) {\n var dateStart = util.resetTime(new Date(date.getTime()));\n var dateEnd = util.setTime(new Date(dateStart.getTime()), util.MS_PER_DAY);\n return this.parent.eventBase.filterEvents(dateStart, dateEnd);\n };\n MonthAgenda.prototype.clearElements = function () {\n var appointmentIndicators = [].slice.call(this.element.querySelectorAll('.' + cls.APPOINTMENT_INDICATOR_CLASS));\n for (var _i = 0, appointmentIndicators_1 = appointmentIndicators; _i < appointmentIndicators_1.length; _i++) {\n var appointmentIndicator = appointmentIndicators_1[_i];\n remove(appointmentIndicator);\n }\n this.appendAppContainer(this.element.querySelector('.' + cls.APPOINTMENT_WRAP_CLASS));\n };\n MonthAgenda.prototype.appendAppContainer = function (appWrap) {\n var app = createElement('div', { className: cls.APPOINTMENT_CONTAINER_CLASS });\n addClass([app], cls.AGENDA_NO_EVENT_CLASS);\n app.innerHTML = this.l10n.getConstant('noEvents');\n appWrap.innerHTML = '';\n appWrap.appendChild(app);\n };\n /**\n * Get module name.\n */\n MonthAgenda.prototype.getModuleName = function () {\n return 'monthAgenda';\n };\n return MonthAgenda;\n}(Month));\nexport { MonthAgenda };\n","import * as index from '@syncfusion/ej2-schedule';\nindex.Schedule.Inject( index.Day,index.Week,index.WorkWeek,index.Month,index.Agenda,index.MonthAgenda);\nexport * from '@syncfusion/ej2-schedule';\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Collection, Event, NotifyPropertyChanges, detach, Property, EventHandler, addClass, attributes } from '@syncfusion/ej2-base';\nimport { createElement, getUniqueID, closest, rippleEffect } from '@syncfusion/ej2-base';\nimport { Component, select } from '@syncfusion/ej2-base';\nimport { Browser, classList, removeClass } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Popup, getZindexPartial } from '@syncfusion/ej2-popups';\nimport { getModel, Item } from './../common/common';\nvar classNames = {\n DISABLED: 'e-disabled',\n FOCUS: 'e-focused',\n ICON: 'e-menu-icon',\n ITEM: 'e-item',\n POPUP: 'e-dropdown-popup',\n RTL: 'e-rtl',\n SEPARATOR: 'e-separator',\n VERTICAL: 'e-vertical'\n};\n/**\n * DropDownButton component is used to toggle contextual overlays for displaying list of action items.\n * It can contain both text and images.\n * ``````html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar DropDownButton = /** @class */ (function (_super) {\n __extends(DropDownButton, _super);\n /**\n * Constructor for creating the widget\n * @param {DropDownButtonModel} options?\n * @param {string|HTMLButtonElement} element?\n */\n function DropDownButton(options, element) {\n return _super.call(this, options, element) || this;\n }\n DropDownButton.prototype.preRender = function () {\n /** */\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @returns string\n */\n DropDownButton.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * To open/close DropDownButton popup based on current state of the DropDownButton.\n * @returns void\n */\n DropDownButton.prototype.toggle = function () {\n this.canOpen() ? this.openPopUp() : this.closePopup();\n };\n /**\n * Initialize the Component rendering\n * @returns void\n * @private\n */\n DropDownButton.prototype.render = function () {\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\n }\n };\n DropDownButton.prototype.createPopup = function () {\n var div = createElement('div', {\n className: classNames.POPUP,\n id: this.element.id + '-popup'\n });\n document.body.appendChild(div);\n this.dropDown = new Popup(div, {\n relateTo: this.element,\n collision: { X: Browser.isDevice ? 'fit' : 'flip', Y: 'flip' },\n position: { X: 'left', Y: 'bottom' },\n targetType: 'relative',\n content: this.target ? this.getTargetElement() : '',\n zIndex: getZindexPartial(div)\n });\n this.dropDown.hide();\n attributes(this.element, (_a = {},\n _a['role'] = 'menu',\n _a['aria-haspopup'] = this.items.length || this.target ? 'true' : 'false',\n _a['aria-expanded'] = 'false',\n _a['aria-owns'] = this.getPopUpElement().id,\n _a));\n if (this.cssClass) {\n addClass([div], this.cssClass.split(' '));\n }\n if (this.enableRtl) {\n div.classList.add(classNames.RTL);\n }\n var _a;\n };\n DropDownButton.prototype.getTargetElement = function () {\n return typeof (this.target) === 'string' ? select(this.target) : this.target;\n };\n DropDownButton.prototype.createItems = function (items) {\n var showIcon = this.hasIcon(items, 'iconCss');\n var span;\n var item;\n var li;\n var eventArgs;\n var ul = createElement('ul', {\n attrs: { 'tabindex': '0' }\n });\n for (var i = 0; i < items.length; i++) {\n item = items[i];\n li = createElement('li', {\n innerHTML: item.url ? '' : item.text,\n className: item.separator ? classNames.ITEM + ' ' + classNames.SEPARATOR : classNames.ITEM,\n attrs: { 'role': 'menuItem', 'tabindex': '-1' },\n id: item.id ? item.id : getUniqueID('e-' + this.getModuleName() + '-item')\n });\n if (item.iconCss) {\n span = createElement('span', { className: classNames.ICON + ' ' + item.iconCss });\n li.insertBefore(span, li.childNodes[0]);\n }\n else {\n if (showIcon && !item.separator) {\n li.classList.add('e-blank-icon');\n }\n }\n if (item.url) {\n li.appendChild(this.createAnchor(item));\n }\n eventArgs = { item: item, element: li };\n this.trigger('beforeItemRender', eventArgs);\n ul.appendChild(li);\n }\n return ul;\n };\n DropDownButton.prototype.hasIcon = function (items, field) {\n for (var i = 0, len = items.length; i < len; i++) {\n if (items[i][field]) {\n return true;\n }\n }\n return false;\n };\n DropDownButton.prototype.createAnchor = function (item) {\n return createElement('a', { className: 'e-menu-text e-menu-url', innerHTML: item.text, attrs: { 'href': item.url } });\n };\n DropDownButton.prototype.initialize = function () {\n this.button = new Button({\n iconCss: this.iconCss, cssClass: this.cssClass, content: this.content,\n disabled: this.disabled, enableRtl: this.enableRtl, enablePersistence: this.enablePersistence\n });\n this.button.appendTo(this.element);\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n this.setIconPositionTop();\n this.appendArrowSpan();\n this.createPopup();\n this.setActiveElem();\n };\n DropDownButton.prototype.setIconPositionTop = function () {\n var iconSpan = this.element.querySelector('.e-icon-left');\n if (iconSpan && this.iconPosition === 'Top') {\n addClass([this.element], 'e-top-icon-btn');\n removeClass([iconSpan], 'e-icon-left');\n addClass([iconSpan], 'e-icon-top');\n }\n };\n DropDownButton.prototype.appendArrowSpan = function () {\n this.element.appendChild(createElement('span', {\n className: 'e-btn-icon e-icons ' + 'e-icon-' + (this.cssClass.indexOf(classNames.VERTICAL) > -1\n ? 'bottom' : 'right') + ' e-caret'\n }));\n };\n DropDownButton.prototype.setActiveElem = function () {\n this.activeElem = this.element;\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n DropDownButton.prototype.getModuleName = function () {\n return 'dropdown-btn';\n };\n DropDownButton.prototype.canOpen = function () {\n return this.getPopUpElement().classList.contains('e-popup-close');\n };\n /**\n * Destroys the widget.\n * @returns void\n */\n DropDownButton.prototype.destroy = function () {\n var _this = this;\n detach(this.element.querySelector('span.e-caret'));\n _super.prototype.destroy.call(this);\n this.button.destroy();\n ['role', 'aria-haspopup', 'aria-expanded', 'aria-owns'].forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n removeClass([this.element, this.activeElem], ['e-ddb-active', 'e-btn']);\n detach(this.getPopUpElement());\n this.unWireEvents();\n };\n DropDownButton.prototype.getPopUpElement = function () {\n return this.dropDown.element;\n };\n DropDownButton.prototype.getULElement = function () {\n return this.getPopUpElement().children[0];\n };\n DropDownButton.prototype.wireEvents = function () {\n var popupElement = this.getPopUpElement();\n EventHandler.add(document, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyBoardHandler, this);\n if (!this.target) {\n EventHandler.add(popupElement, 'keydown', this.keyBoardHandler, this);\n }\n rippleEffect(popupElement, { selector: '.' + classNames.ITEM });\n };\n DropDownButton.prototype.keyBoardHandler = function (e) {\n if (e.target === this.element && (e.keyCode === 9 || (!e.altKey && e.keyCode === 40) || e.keyCode === 38)) {\n return;\n }\n else {\n if (e.keyCode !== 9) {\n e.preventDefault();\n }\n }\n switch (e.keyCode) {\n case 38:\n case 40:\n if (e.altKey && (e.keyCode === 38 || e.keyCode === 40)) {\n this.keyEventHandler(e);\n }\n else {\n this.upDownKeyHandler(e);\n }\n break;\n case 9:\n case 13:\n case 27:\n case 32:\n this.keyEventHandler(e);\n break;\n }\n };\n DropDownButton.prototype.upDownKeyHandler = function (e) {\n var ul = this.getULElement();\n var defaultIdx = e.keyCode === 40 ? 0 : ul.childElementCount - 1;\n var liIdx = defaultIdx;\n var li = null;\n for (var i = 0, len = ul.children.length; i < len; i++) {\n if (ul.children[i].classList.contains(classNames.FOCUS)) {\n li = ul.children[i];\n liIdx = i;\n li.classList.remove(classNames.FOCUS);\n e.keyCode === 40 ? liIdx++ : liIdx--;\n if (liIdx === (e.keyCode === 40 ? ul.childElementCount : -1)) {\n liIdx = defaultIdx;\n }\n }\n }\n li = ul.children[liIdx];\n liIdx = this.isValidLI(li, liIdx, e.keyCode);\n if (liIdx !== -1) {\n addClass([ul.children[liIdx]], classNames.FOCUS);\n ul.children[liIdx].focus();\n }\n };\n DropDownButton.prototype.isValidLI = function (li, index, keyCode, count) {\n if (count === void 0) { count = 0; }\n if (li.classList.contains(classNames.SEPARATOR) || li.classList.contains(classNames.DISABLED)) {\n if (index === (keyCode === 40 ? this.items.length - 1 : 0)) {\n index = keyCode === 40 ? 0 : this.items.length - 1;\n }\n else {\n keyCode === 40 ? index++ : index--;\n }\n }\n li = this.getULElement().children[index];\n if (li.classList.contains(classNames.SEPARATOR) || li.classList.contains(classNames.DISABLED)) {\n count++;\n if (count === this.items.length) {\n return index = -1;\n }\n index = this.isValidLI(li, index, keyCode, count);\n }\n return index;\n };\n DropDownButton.prototype.keyEventHandler = function (e) {\n if (e.keyCode === 27 || e.keyCode === 38 || e.keyCode === 9) {\n if (!this.canOpen()) {\n this.closePopup(e);\n this.element.focus();\n }\n }\n else {\n this.clickHandler(e);\n }\n };\n DropDownButton.prototype.getLI = function (elem) {\n return elem.tagName === 'LI' ? elem : closest(elem, 'li');\n };\n DropDownButton.prototype.clickHandler = function (e) {\n var trgt = e.target;\n var canOpen = this.canOpen();\n if (closest(trgt, '#' + this.element.id)) {\n if (canOpen) {\n this.openPopUp(e);\n }\n else {\n this.closePopup(e);\n this.activeElem.focus();\n }\n }\n else {\n if (closest(trgt, '#' + this.getPopUpElement().id)) {\n var eventArgs = void 0;\n var liIdx = void 0;\n var item = void 0;\n var li = this.getLI(trgt);\n if (li) {\n liIdx = Array.prototype.indexOf.call(this.getULElement().children, li);\n item = this.items[liIdx];\n if (item) {\n eventArgs = { element: li, item: item };\n this.trigger('select', eventArgs);\n }\n this.closePopup(e);\n this.activeElem.focus();\n }\n }\n else {\n if (!canOpen) {\n this.closePopup(e);\n }\n }\n }\n };\n DropDownButton.prototype.openPopUp = function (e) {\n if (e === void 0) { e = null; }\n if (!this.target) {\n this.getPopUpElement().appendChild(this.createItems(this.items));\n }\n var ul = this.getULElement();\n var beforeOpenArgs = { element: ul, items: this.items, event: e, cancel: false };\n this.trigger('beforeOpen', beforeOpenArgs);\n if (!beforeOpenArgs.cancel) {\n this.dropDown.show();\n addClass([this.activeElem], 'e-ddb-active');\n this.element.setAttribute('aria-expanded', 'true');\n ul.focus();\n var openArgs = { element: ul, items: this.items };\n this.trigger('open', openArgs);\n }\n };\n DropDownButton.prototype.closePopup = function (e) {\n if (e === void 0) { e = null; }\n var ul = this.getULElement();\n var beforeCloseArgs = { element: ul, items: this.items, event: e, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs);\n if (!beforeCloseArgs.cancel) {\n this.dropDown.hide();\n removeClass([this.activeElem], 'e-ddb-active');\n this.element.setAttribute('aria-expanded', 'false');\n var closeArgs = { element: ul, items: this.items };\n this.trigger('close', closeArgs);\n if (!this.target) {\n detach(ul);\n }\n }\n };\n DropDownButton.prototype.unWireEvents = function () {\n EventHandler.remove(document, 'click', this.clickHandler);\n EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);\n EventHandler.remove(this.getPopUpElement(), 'keydown', this.keyBoardHandler);\n };\n /**\n * Called internally if any of the property value changed.\n * @param {DropDownButtonModel} newProp\n * @param {DropDownButtonModel} oldProp\n * @returns void\n * @private\n */\n DropDownButton.prototype.onPropertyChanged = function (newProp, oldProp) {\n var btnModel = ['content', 'cssClass', 'iconCss', 'disabled', 'enableRtl'];\n if (newProp.iconPosition === 'Left') {\n btnModel.push('iconPosition');\n }\n this.button.setProperties(getModel(newProp, btnModel));\n var popupElement = this.getPopUpElement();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'content':\n if (!this.element.querySelector('span.e-caret')) {\n this.appendArrowSpan();\n }\n break;\n case 'cssClass':\n if (newProp.cssClass.indexOf(classNames.VERTICAL) > -1) {\n var arrowSpan = this.element.querySelector('span.e-caret');\n classList(arrowSpan, ['e-icon-bottom'], ['e-icon-right']);\n }\n if (oldProp.cssClass) {\n removeClass([popupElement], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([popupElement], newProp.cssClass.split(' '));\n }\n break;\n case 'iconPosition':\n this.setIconPositionTop();\n break;\n case 'enableRtl':\n popupElement.classList.toggle(classNames.RTL);\n break;\n case 'target':\n this.target = newProp.target;\n detach(this.getULElement());\n popupElement.appendChild(this.getTargetElement());\n this.dropDown.content = this.getTargetElement();\n break;\n case 'items':\n this.dropDown.refresh();\n if (popupElement.classList.contains('e-popup-open')) {\n classList(popupElement, ['e-popup-close'], ['e-popup-open']);\n }\n break;\n }\n }\n };\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], DropDownButton.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"iconCss\", void 0);\n __decorate([\n Property('Left')\n ], DropDownButton.prototype, \"iconPosition\", void 0);\n __decorate([\n Collection([], Item)\n ], DropDownButton.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"target\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"select\", void 0);\n DropDownButton = __decorate([\n NotifyPropertyChanges\n ], DropDownButton);\n return DropDownButton;\n}(Component));\nexport { DropDownButton };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/// \nimport { Event, createElement, remove, addClass, removeClass, detach, getValue, setValue } from '@syncfusion/ej2-base';\nimport { EventHandler, Collection, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { attributes, getUniqueID, getInstance, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { getModel, Item } from './../common/common';\nimport { DropDownButton } from '../drop-down-button/drop-down-button';\nvar RTL = 'e-rtl';\nvar TAGNAME = 'EJS-SPLITBUTTON';\n/**\n * SplitButton component has primary and secondary button. Primary button is used to select\n * default action and secondary button is used to toggle contextual overlays for displaying list of\n * action items. It can contain both text and images.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar SplitButton = /** @class */ (function (_super) {\n __extends(SplitButton, _super);\n /**\n * Constructor for creating the widget\n * @param {SplitButtonModel} options?\n * @param {string|HTMLButtonElement} element?\n */\n function SplitButton(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize Angular support.\n * @private\n */\n SplitButton.prototype.preRender = function () {\n var ele = this.element;\n if (ele.tagName === TAGNAME) {\n var ejInstance = getValue('ej2_instances', ele);\n var btn = createElement('button');\n var wrapper = createElement(TAGNAME, { className: 'e-' + this.getModuleName() + '-wrapper' });\n for (var idx = 0, len = ele.attributes.length; idx < len; idx++) {\n btn.setAttribute(ele.attributes[idx].nodeName, ele.attributes[idx].nodeValue);\n }\n ele.parentNode.insertBefore(wrapper, ele);\n detach(ele);\n ele = btn;\n wrapper.appendChild(ele);\n setValue('ej2_instances', ejInstance, ele);\n this.wrapper = wrapper;\n this.element = ele;\n }\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n };\n SplitButton.prototype.render = function () {\n this.initWrapper();\n this.createPrimaryButton();\n this.createSecondaryButton();\n this.setAria();\n this.wireEvents();\n };\n SplitButton.prototype.initWrapper = function () {\n if (!this.wrapper) {\n this.wrapper = createElement('div', { className: 'e-' + this.getModuleName() + '-wrapper' });\n this.element.parentNode.insertBefore(this.wrapper, this.element);\n }\n this.element.classList.remove('e-' + this.getModuleName());\n if (this.enableRtl) {\n this.wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([this.wrapper], this.cssClass.split(' '));\n }\n };\n SplitButton.prototype.createPrimaryButton = function () {\n var btnModel = {\n cssClass: this.cssClass,\n enableRtl: this.enableRtl,\n iconCss: this.iconCss,\n content: this.content,\n disabled: this.disabled\n };\n this.primaryBtnObj = new Button(btnModel, this.element);\n this.element.classList.add('e-' + this.getModuleName());\n this.wrapper.appendChild(this.element);\n this.setIconPositionTop();\n this.setActiveElem();\n };\n SplitButton.prototype.createSecondaryButton = function () {\n var _this = this;\n var btnElem = createElement('button', {\n className: 'e-icon-btn',\n attrs: { 'tabindex': '-1' },\n id: this.element.id + '_dropdownbtn'\n });\n this.wrapper.appendChild(btnElem);\n var dropDownBtnModel = {\n cssClass: this.cssClass,\n disabled: this.disabled,\n enableRtl: this.enableRtl,\n items: this.items,\n target: this.target,\n beforeItemRender: function (args) {\n _this.trigger('beforeItemRender', args);\n },\n beforeOpen: function (args) {\n _this.trigger('beforeOpen', args);\n },\n open: function (args) {\n _this.trigger('open', args);\n },\n close: function (args) {\n _this.trigger('close', args);\n },\n select: function (args) {\n _this.trigger('select', args);\n }\n };\n this.secondaryBtnObj = new DropDownButton(dropDownBtnModel, btnElem);\n this.secondaryBtnObj.dropDown.relateTo = this.wrapper;\n this.dropDown = this.secondaryBtnObj.dropDown;\n this.secondaryBtnObj.activeElem = this.element;\n EventHandler.remove(this.getPopUpElement(), 'keydown', this.secondaryBtnObj.keyBoardHandler);\n this.secondaryBtnObj.element.querySelector('.e-btn-icon').classList.remove('e-icon-right');\n };\n SplitButton.prototype.setAria = function () {\n attributes(this.element, {\n 'role': 'listbox', 'aria-expanded': 'false', 'aria-haspopup': 'true',\n 'aria-label': this.element.textContent + ' splitbutton', 'aria-owns': this.secondaryBtnObj.dropDown.element.id\n });\n };\n /**\n * Get component name.\n * @returns string\n * @private\n */\n SplitButton.prototype.getModuleName = function () {\n return 'split-btn';\n };\n /**\n * To open/close SplitButton popup based on current state of the SplitButton.\n * @returns void\n */\n SplitButton.prototype.toggle = function () {\n this.secondaryBtnObj.toggle();\n };\n SplitButton.prototype.destroy = function () {\n var _this = this;\n this.primaryBtnObj.destroy();\n this.secondaryBtnObj.destroy();\n if (this.wrapper.tagName === TAGNAME) {\n this.wrapper.innerHTML = '';\n removeClass([this.wrapper], ['e-rtl', 'e-' + this.getModuleName() + '-wrapper']);\n removeClass([this.wrapper], this.cssClass.split(' '));\n }\n else {\n removeClass([this.element], ['e-' + this.getModuleName(), RTL]);\n ['role', 'aria-label', 'aria-haspopup', 'aria-expanded', 'aria-owns'].forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n this.wrapper.parentNode.insertBefore(this.element, this.wrapper);\n remove(this.wrapper);\n }\n this.unWireEvents();\n };\n SplitButton.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.primaryBtnClickHandler, this);\n EventHandler.add(this.getPopUpElement(), 'keydown', this.keyBoardHandler, this);\n new KeyboardEvents(this.element, {\n keyAction: this.btnKeyBoardHandler.bind(this),\n keyConfigs: {\n altdownarrow: 'alt+downarrow'\n }\n });\n };\n SplitButton.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'click', this.primaryBtnClickHandler);\n getInstance(this.element, KeyboardEvents).destroy();\n };\n SplitButton.prototype.primaryBtnClickHandler = function () {\n this.trigger('click', { element: this.element });\n };\n SplitButton.prototype.btnKeyBoardHandler = function (e) {\n switch (e.action) {\n case 'altdownarrow':\n this.clickHandler(e);\n break;\n }\n };\n /**\n * Called internally if any of the property value changed.\n * @param {SplitButtonModel} newProp\n * @param {SplitButtonModel} oldProp\n * @returns void\n */\n SplitButton.prototype.onPropertyChanged = function (newProp, oldProp) {\n var model = ['content', 'iconCss', 'cssClass', 'disabled', 'enableRtl'];\n if (newProp.iconPosition === 'Left') {\n model.push('iconPosition');\n }\n this.primaryBtnObj.setProperties(getModel(newProp, model));\n model = ['items', 'beforeOpen', 'beforeItemRender', 'select', 'open',\n 'close', 'cssClass', 'disabled', 'enableRtl'];\n this.secondaryBtnObj.setProperties(getModel(newProp, model));\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.wrapper], oldProp.cssClass.split(' '));\n }\n addClass([this.wrapper], newProp.cssClass.split(' '));\n break;\n case 'iconPosition':\n this.setIconPositionTop();\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n addClass([this.wrapper], RTL);\n }\n else {\n removeClass([this.wrapper], RTL);\n }\n break;\n }\n }\n };\n __decorate([\n Property('')\n ], SplitButton.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], SplitButton.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], SplitButton.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], SplitButton.prototype, \"iconCss\", void 0);\n __decorate([\n Property('Left')\n ], SplitButton.prototype, \"iconPosition\", void 0);\n __decorate([\n Collection([], Item)\n ], SplitButton.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], SplitButton.prototype, \"target\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"select\", void 0);\n SplitButton = __decorate([\n NotifyPropertyChanges\n ], SplitButton);\n return SplitButton;\n}(DropDownButton));\nexport { SplitButton };\n"],"names":["createInstance","classFunction","params","arrayParam","unshift","undefined","Function","prototype","bind","apply","setImmediate","handler","unbind","num","Uint16Array","window","msCrypto","crypto","getRandomValues","secret","ret","i","combineArray","messageHandler","event","source","data","length","addEventListener","postMessage","removeEventListener","getValue","nameSpace","obj","value","splits","split","isUndefined","setValue","key","keys","start","fromObj","isNullOrUndefined","deleteObject","isObject","constructor","getEnumValue","enumObject","enumValue","merge","destination","temrObj","tempProp","_i","keys_1","Object","extend","copied","first","second","deep","result","arguments","_loop_1","arguments_1","obj1","forEach","clone","src","copy","getUniqueID","definedName","uid","debounce","eventFunction","delay","out","_this","this","args","clearTimeout","setTimeout","compareElementParent","child","parent","node","document","parentNode","throwError","message","Error","e","stack","print","element","printWindow","div","createElement","links","slice","call","getElementsByTagName","querySelectorAll","reference","open","appendChild","cloneNode","len","outerHTML","write","innerHTML","close","focus","interval","setInterval","ready","clearInterval","formatUnit","indexOf","getInstance","component","elem","querySelector","instances","_a","inst","uniqueID","tagName","properties","className","id","styles","setAttribute","attrs","attributes","addClass","elements","classes","classList","getClassList","ele","_b","classList_1","contains","add","removeClass","classList_2","remove","push","isVisible","style","visibility","offsetWidth","prepend","fromElements","toElement","docFrag","createDocumentFragment","insertBefore","firstElementChild","append","detach","removeChild","EventHandler","clearEvents","select","selector","context","selectAll","closest","el","nodeType","matches","setStyleAttribute","addClasses","removeClasses","msMatchesSelector","webkitMatchesSelector","getObject","instance","curKey","defaultValue","type","hasOwnProperty","getObjectArray","isSetter","isFactory","curType","setProperties","propertyGetter","Property","target","propertyDescriptor","set","newValue","oldVal","saveChanges","propertySetter","get","enumerable","configurable","defineProperty","addPropertyCollection","Complex","complexSetter","complexGetter","Collection","oldValueCollection","newValCollection","complexArraySetter","defCollection","complexArrayGetter","Event","eventDescriptor","oldValue","finalContext","getParentContext","prefix","NotifyPropertyChanges","classConstructor","propertyType","propList","props","complexProps","colProps","events","propNames","complexPropNames","colPropNames","eventNames","propertyName","getBuilderProperties","builderObject","propCollections","isPropertyArray","rex","prop","test","childType","tempValue","_c","curText","rippleEffect","rippleOptions","done","rippleModel","ignore","rippleFlag","isCenterRipple","duration","getRippleModel","isRippleEnabled","rippleHandler","rippleUpHandler","rippleLeaveHandler","Browser","isPointer","removeAttribute","offset","getBoundingClientRect","offsetX","pageX","body","scrollLeft","offsetY","pageY","scrollTop","Math","max","abs","left","right","top","bottom","radius","sqrt","diameter","x","y","rippleElement","toString","getComputedStyle","getPropertyValue","transform","removeRipple","eventArgs","rippleElements","opacity","getElementsByClassName","setCulture","cultureName","defaultCulture","onIntlChange","notify","locale","getNumericObject","numObject","IntlBase","getDependables","cldrData","mapper","dateObject","numSystem","symbPattern","pattern","getSymbolPattern","getFormatData","dateSeparator","getDateSeparator","getDefaultDateObject","compile","template","helper","fnCode","str","localKeys","replace","LINES","DBL_QUOTED_STR","exp","match","cnt","matchStr","CALL_FUNCTION","rlStr","ELSEIF_STMT","WORD","trim","addNameSpace","QUOTES","IF_STMT","strs","FOR_STMT","rlStr_1","mtc","fnStr","fNameSpace","ELSE_STMT","IF_OR_FOR","evalExp","addNS","ignoreList","NOT_NUMBER","templateString","compiler","engineObj","propName","HAS_ROW","childNodes","wrapperInitialize","tag","WRAPPER","ejInstance","input","wrapper","role","aria-checked","index","nodeName","nodeValue","getTextNode","childnode","createCheckBox","enableRipple","options","cssClass","enableRtl","rippleSpan","frameSpan","checked","label","labelSpan","rippleMouseHandler","event_1","createEvent","initEvent","dispatchEvent","calculateRelativeBasedPosition","anchor","fixedElement","anchorPos","tempAnchor","offsetParent","position","offsetLeft","offsetTop","parentElement","calculatePosition","currentElement","positionX","positionY","fixedParent","parentDocument","ownerDocument","posX","posY","pos","elementRect","setPosx","getElementHCenter","setPosy","getElementTop","getElementRight","getElementVCenter","getElementLeft","getElementBottom","updatePosition","toLowerCase","getBodyScrollTop","documentElement","getBodyScrollLeft","height","width","fit","viewPortElement","axis","X","Y","elemData","targetContainer","containerWidth","getTargetContainerWidth","getViewPortWidth","containerLeft","ContainerLeft","containerRight","ContainerRight","overLeft","overRight","containerHeight","getTargetContainerHeight","getViewPortHeight","containerTop","ContainerTop","containerBottom","ContainerBottom","overTop","overBottom","isCollide","elemOffset","yAxis","topCollideCheck","xAxis","leftCollideCheck","topSide","rightSide","leftSide","bottomSide","flip","tEdge","TL","TR","BL","BR","eEdge","edge","updateElementData","setPosition","leftFlip","topFlip","setPopup","eStatus","deepCheck","collideSide","getTargetContainerLeft","getTargetContainerTop","innerHeight","innerWidth","getScrollableParent","eleStyle","scrollParents","overflowRegex","parentStyle","overflow","overflowY","overflowX","getZindexPartial","parentZindex","defaultView","childrenZindex","children","isEqualNode","finalValue","concat","createSpinner","container","spinnerContainer","CLS_SPINWRAP","spinnerInnerContainer","CLS_SPININWRAP","wrap","inner_wrap","create_spinner_container","spinTemplate","theme","getTheme","defaultSize","DEFT_MAT_WIDTH","DEFT_FAB_WIDTH","DEFT_BOOT_WIDTH","parseFloat","calculateRadius","setTheme","labelEle","CLS_SPINLABEL","textContent","createLabel","CLS_SPINTEMPLATE","replaceContent","spinCSSClass","CLS_HIDESPIN","createMaterialSpinner","random_generator","globalTimeOut","timeOut","innerContainer","svgMaterial","createElementNS","CLS_MATERIALSPIN","matCirclePath","CLS_SPINCIRCLE","firstChild","create_material_element","svg","path","strokeSize","getStrokeSize","transformOrigin","drawArc","PI","getDashOffset","mat_calculate_attributes","create_fabric_element","CLS_FABRICSPIN","fb_calculate_attributes","createFabricSpinner","svgBoot","CLS_BOOTSPIN","item","bootCircle","defaultRadius","create_bootstrap_element","startArc","defineArcPoints","circleEle","boot_calculate_attributes","createBootstrapSpinner","CLS_HIGHCONTRASTSPIN","createHighContrastSpinner","generateSeries","begin","stop","formSeries","series","end","count","increment","toFixed","random","combine","charAt","floor","themeClass","svgFabric","fabricCirclePath","fabricCircleArc","CLS_SPINARC","animateMaterial","spinnerInfo","easing","mat_animation","currentTime","min","Date","getTime","startTime","updatePath","change","globalInfo","previousId","getSize","rotate","createCircle","easeAnimation","current","timestamp","timecount","innerConainer","trgClass","centerX","centerY","circle","join","defineCircle","endArc","defineArc","angle","radians","cos","sin","showSpinner","showHideSpinner","isHide","spinnerWrap","inner","CLS_SHOWSPIN","svgEle","getAttribute","isAnimate","globalObject","globalVariables","timeOutVar","startMatAnimate","boot_animate","rotation","animateBootstrap","hideSpinner","createMask","autocomplete","autocorrect","autocapitalize","spellcheck","aria-live","aria-valuenow","mask","splitMask","splitInnerMask","j","pushIntoRegExpCollec","chkSpace","customRegExpCollec","hiddenMask","promptChar","escapeMaskValue","promptMask","customCharacters","RegExp","escapeNumber","substring","aria-invalid","applyMask","setElementValue","setMaskValue","wireEvents","maskInputKeyDownHandler","maskInputKeyPressHandler","maskInputKeyUpHandler","maskInputFocusHandler","maskInputBlurHandler","maskInputPasteHandler","maskInputCutHandler","maskInputDropHandler","unwireEvents","unstrippedValue","strippedValue","k","checkMask","regExpCollec","focusEventArgs","selectionStart","selectionEnd","trigger","isFocus","placeholder","setSelectionRange","floatLabelType","labelElement","TOPLABEL","sIndex_1","eIndex_1","oldValue_1","redoCollec","maskKeyPress","validateValue","sIndex_2","eIndex","undoCollec","startIndex","endIndex","value_1","preventDefault","keyCode","ctrlKey","removeMaskInputValues","startValue","collec","splice","mobileRemoveFunction","sIndex","oldEventVal","isRemove","isDeleted","initStartIndex","initEndIndex","maskValue","curMask","multipleDel","prompt_1","elementValue","triggerMaskChangeEvent","code","String","fromCharCode","isIosInvalid","changeEventArgs","maskedValue","isInteraction","removeMaskError","addedValues","val_1","startIndex_1","isSpace","isAndroid","preventUnsupportedValues","val","prevValue","isCtrlKey","eventOldVal","allowText","prevSupport","isEqualVal","keyValue","customValArr","curVal","caseCount","toUpperCase","addMaskErrorClass","sIdx","idx","ctrl","chkSupport","timer","INPUTGROUP","FLOATINPUT","ERROR","BOTTOMLABEL","Input","getMaskInput","UTILMASK","inputEle","regularExpressions","getUtilMaskEle","getFieldValues","dataItem","fields","fieldData","isHeader","field","property","validateNullOrUndefined","defaultToString","getSeriesColor","palette","getThemeColor","axisLabel","axisTitle","axisLine","majorGridLine","minorGridLine","majorTickLine","minorTickLine","chartTitle","legendLabel","background","areaBorder","errorBar","crosshairLine","crosshairFill","crosshairLabel","tooltipFill","tooltipBoldLabel","tooltipLightLabel","tooltipHeaderLine","markerShadow","selectionRectFill","selectionRectStroke","selectionCircleStroke","measureText","text","font","htmlObject","getElementById","fontSize","size","fontWeight","fontStyle","fontFamily","whiteSpace","lineHeight","Size","clientWidth","clientHeight","rotateTextSize","chart","box","renderer","SvgRenderer","font-size","font-style","font-family","font-weight","text-anchor","createText","delayRedraw","svgObject","removeElement","getElement","logBase","base","log","showTooltip","areaWidth","isTouch","tooltip","inside","range","withIn","withInRange","previousPoint","currentPoint","nextPoint","mX2","logWithIn","xValue","mX1","mX3","xStart","visibleRange","xEnd","ceil","sum","values","values_1","subArraySum","last","yName","subtractThickness","rect","thickness","subtractRect","degreeToLocation","degree","center","radian","ChartLocation","getAngle","point","atan2","subArray","valueToCoefficient","isInversed","TransformToVisible","isInverted","valueType","labelPlacement","CoefficientToVector","valueToPolarCoefficient","primaryXAxis","startAngle","clipRect","indexFinder","isPoint","ids","Index","parseInt","coefficient","delta","dateTimeInterval","visibleLabels","createTooltip","createZoomingLabels","isVertical","arrowLocation","direction","opposedPosition","chartRect","availableSize","endLabel","startLabel","labelStyle","findDirection","Rect","drawPath","PathOption","themeStyle","textElement","TextOption","color","withInBounds","bounds","getValueXByPoint","getValueYByPoint","findClipRect","requireInvertedAxis","firstToLowerCase","substr","getMinPointsDelta","seriesCollection","xValues","minVal","minDelta","Number","MAX_VALUE","visible","name","xAxisName","points","map","sort","xMin","getAnimationFunction","effect","functionName","linear","endValue","markerAnimate","pointIndex","isLabel","Animation","animate","progress","timeStamp","model","templateAnimate","drawSymbol","location","shape","url","temp","calculateShapes","renderOption","locX","locY","rx","ry","cx","cy","d","yValue","href","calculateLegendShapes","getRectLocation","startLocation","endLocation","outerRect","minMax","getTemplateFunction","templateFn","templateComplier","createTemplate","childElement","content","templateElement","getFontStyle","measureElementRect","findlElement","length_1","getPoint","xLength","yLength","appendElement","hasChildNodes","getDraggedRectLocation","x1","y1","x2","y2","checkBounds","getLabelText","labelFormat","customLabelFormat","seriesType","high","low","median","maximum","minimum","upperQuartile","lowerQuartile","outliers","liers","format","stopTimer","collections","currentRect","some","isOverlap","containsRect","calculateRect","textSize","margin","convertToHexCode","componentToHex","r","g","b","hex","convertHexToColor","exec","ColorValue","colorNameToHex","isRGBValue","getSaturationColor","factor","colorCode","rgb","round","getMedian","half","fill","space","stroke","mode","cartesianlarge","cartesiansmall","getAccumulationLegend","textTrim","maxWidth","stringToNumber","containerSize","rX","rY","arrowPadding","tipX","tipY","tipRadius","startX","startY","isMinus","tspanElement","renderOptions","dominant-baseline","baseLine","createTSpan","calculateSize","createSvg","getTitle","title","titleCollection","textOverflow","textWrap","titlePositionX","chartSize","leftPadding","rightPadding","titleStyle","textAlignment","currentLabel","maximumWidth","textCollection","labelCollection","getSeriesFromIndex","visibleSeries","visibleSeries_1","pointByIndex","points_1","toPixel","maxDimension","setStyles","border","stroke-width","appendPath","gauge","calculateSum","from","to","getAngleFromValue","maximumValue","minimumValue","endAngle","isClockWise","isCompleteAngle","getDegree","getValueFromAngle","totalAngle","getAngleFromLocation","getLocationFromAngle","GaugeLocation","getPathArc","startWidth","endWidth","startRadius","endRadius","arcRadius","getRangePath","getCirclePath","innerStart","innerEnd","clockWise","getCompleteArc","innerRadius","getCompletePath","getPointer","targetId","tempString","axisIndex","pointerIndex","getLabelFormat","getRangeColor","ranges","currentRange","filter","rangeColor","incrementalSearch","items","selectedIndex","ignoreCase","queryString","prevString","activeClass","listItems","strLength","innerText","Search","inputVal","searchType","itemData","queryStr","toLocaleLowerCase","itemsData","highlightSearch","query","contentElement","parent_1","createTextNode","replaceChild","revert","ignoreRegex","replaceQuery","li","createFloatLabel","overAllWrapper","searchWrapper","inputElement","floatLinelement","floatLabelElement","FLOATLINE","FLOATTEXT","aria-labelledby","LABELTOP","LABELBOTTOM","updateFloatLabelState","setPlaceHolder","doesImplementInterface","checkFor","valueAccessor","column","getUpdateUsingRaf","updateFunction","callBack","requestAnimationFrame","iterateArrayOrObject","collection","predicate","pred","templateCompiler","baseTemplateComplier","setStyleAndAttributes","customAttributes","copyAttr","literals","baseExtend","exclude","moved","prepareColumns","columns","autoWidth","c","Column","headerText","foreignKeyValue","foreignKeyField","setCssInGridPopUp","popUp","isBottomTail","popUpSpan","targetPosition","display","clientY","changedTouches","offsetHeight","popup","getPosition","getPopupLeftPosition","getActualProperties","ChildProperty","parentsUntil","isID","getElementIndex","inArray","getActualPropFromColl","coll","clientX","getUid","appendChildren","parents","calculateAggregate","customAggregate","DataUtil","aggregates","getScrollBarWidth","scrollWidth","divNode","cssText","getRowHeight","rowHeight","table","isEditable","col","row","isOldRow","isIdentity","isPrimaryKey","allowEditing","isActionPrevent","dlg","editSettings","showConfirmDialog","action","Array","changeButtonType","elements_1","setFormatter","serviceLocator","fmtr","getService","getFormatFunction","skeleton","setParser","getParserFunction","addRemoveActiveClasses","cells","distinctStringValues","res","getFilterMenuPostion","dialogObj","grid","elementVisible","newpos","dlgWidth","leftPos","getZIndexCalcualtion","zIndex","toogleCheckbox","span","createCboxWithWrap","removeAddCboxClasses","refreshForeignData","getForeignData","foreignKeyData","cell","isForeignKey","lValue","fField","Query","fdata","dataSource","DataManager","offline","json","columnData","getDay","where","getDatePredicate","operator","matchCase","executeLocal","getColumnByForeignKeyValue","filterObject","datePredicate","prevDate","nextDate","prevObj","nextObj","setHours","predicateSt","Predicate","predicateEnd","and","or","ejpredicate","renderMovable","frzCols","mEle","childElementCount","setStateAndProperties","attribute","summaryIterator","callback","convertPixelToValue","pointerElement","orientation","pointerRect","lineBounds","newSize","divideVal","getPathToRect","tempDiv","svgRect","getBBox","isPointerDrag","axes","pointerEnable","pointers","pointer","enableDrag","getElementOffset","calculateNiceInterval","currentInterval","desiredIntervalsCount","getActualDesiredIntervalsCount","niceInterval","minInterval","pow","intervalDivs_1","interior","getRangePalette","placement","getBox","boxName","cornerRadius","rectWidth","rectHeight","bottomRadius","topRadius","addValue","y1_1","locHeight","x1_1","locWidth","maps","isDevice","degreesToRadians","deg","radiansToDegrees","convertGeoToPoint","latitude","longitude","layer","mapModel","lat","lng","mapSize","mapAreaRect","longitudeMinMax","baseMapBounds","latitudeMinMax","latRadian","lngRadian","projectionType","geometryType","pixelOrigin","Point","sinY","calculateBound","aitoff","tan","Infinity","roundTo","xToCoordinate","yToCoordinate","convertTileLatLongToPoint","zoomLevel","tileTranslatePoint","isMapCoordinates","sinLatitude","pixelX","pixelY","mapObject","totalSize","baseSize","cosy","sincia","sinci","acos","a","renderTextElement","convertElement","markerId","mapObj","templateHtml","convertElementFromLabel","labelId","appendShape","drawCircle","drawRectangle","markerEle","tempGroup","drawBalloon","balloon","createGroup","checkShapeDataFields","dataPath","propertyPath","pointObject","findMidPointOfPolygon","startX1","startY1","xSum","ySum","rightMinPoint","rightMaxPoint","leftMinPoint","leftMaxPoint","bottomMinPoint","bottomMaxPoint","topMinPoint","topMaxPoint","rightMin","rightMax","leftMin","leftMax","topMax","topMin","bottomMax","bottomMin","isCustomPath","layerData","customPath","findPosition","alignment","getTranslate","scaleFactor","zoomFactor","zoomSettings","baseMapRectBounds","mapWidth","mapHeight","centerPosition","leftPosition","topPosition","mapLayerPanel","calculateFactor","scale","getElementByID","Internalize","formatFunction","intl","getNumberFormat","useGrouping","useGroupingSeparator","getShapeData","layerIndex","shapeIndex","layers","shapeData","shapeDataPath","shapePropertyPath","triggerShapeEvent","selection","eventName","cancel","elementSelector","targetEle","getTargetElement","enable","createStyle","customizeStyle","elementAnimate","animationComplete","timeout","areaHeight","demo","size1","wordWrap","changeBorderWidth","childNode","l","changeNavaigationLineWidth","currentStroke","layersCollection","shapeSettings","m","navigationLineSettings","targetTouches","touches","calculateScale","startTouches","endTouches","startDistance","getDistance","getTouches","posTop","pageXOffset","posLeft","pageYOffset","touch","getTouchCenter","reduce","zoomAnimate","previousLocation","preScale","previousScale","diffScale","currentLocation","MapLocation","currentScale","slopeFactor","slope","slopeIntersection","slopeValue","intercept","horizontalDifference","verticalDifference","translatePoint","zoomModule","processTemplate","process","clearAnimation","startAnimation","cancelAnimationFrame","smoothTranslate","diffx","diffy","getWeekFirstDate","date1","firstDayOfWeek","date","setDate","getDate","firstDateOfMonth","getFullYear","getMonth","lastDateOfMonth","dt","setTime","time","tzOffsetBefore","getTimezoneOffset","tzOffsetDiff","MS_PER_DAY","resetTime","getDateInMs","addDays","addMonths","day","setMonth","getMaxDays","getStartEndHours","startHour","endHour","getHours","setMinutes","getMinutes","setSeconds","getSeconds","date2","getDaysCount","startDate","endDate","strTime","getMonthSummary","ruleObject","cldrObj","localeObj","summary","monthDay","getConstant","WEEKPOS","DAYINDEXOBJECT","generate","rule","excludeDate","startDayOfWeek","maximumCount","viewDate","MAXOCCURRENCE","cacheDate","extractObjectFromRule","modifiedDate","tempViewDate","until","maxOccurrence","dayIndex","setFirstDayOfWeek","DAYINDEX","tempExcludeDate","parsedDate","getDateFromRecurrenceDateString","freq","tempDate","expectedCount","compareDates","validateRules","excludeDateHandler","dailyType","getStartDateForWeek","expectedDays","dayCycleData","processWeekDays","weeklyType","monthlyType","yearDay","weekNo","checkYearlyType","state","startDay","firstWeekSpan","maxDate","minDate","stDate","weekNos","processWeekNo","LEAPYEAR","getMaxYearDay","processYearDay","yearlyType","recDateString","zeroIndex","validateMonthlyRuleType","month","beginDate","monthCollection","weekCollection","monthInit","datas","week","dayData","chDate","setNextValidDate","monthlyDayTypeProcess","mainDate","validateProperDate","monthlyDateTypeProcess","NORMALYEAR","monthData","setFullYear","rules","validRules","splitData","dayCycle","checkYear","expectedyearDay","currentDate","startDateCollection","diff","getYearDay","shift","days","expectedMonth","expectedDate","checkDayIndex","checkMonth","checkDate","getRecurrenceStringFromDate","getUTCFullYear","roundDateValues","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getModel","headerRegex","defaultType","Ajax","async","send","Promise","resolve","reject","httpRequest","XMLHttpRequest","onreadystatechange","stateChange","setRequestHeader","contentType","beforeSend","successHandler","onSuccess","failureHandler","reason","onFailure","responseText","dataType","JSON","parse","error","readyState","status","statusText","getResponseHeader","responseHeaders","header","headers","getAllResponseHeaders","addOrGetEventData","__eventList","listener","bindTo","intDebounce","debounceListener","eventData","copyData","eventProp","eventData_1","Observer","ranArray","boundedEvents","on","cntxt","notExist","isHandlerPresent","off","curObject","indexLocation","argument","curObject_1","cur","destroy","boundedEvents_1","Base","isProtectedOnChange","changedProperties","oldProperties","refreshing","finalUpdate","childChangedProperties","modelObserver","addInstance","isDestroyed","muteOnChange","prevDetection","dataBind","callChildDataBind","obj_1","clearChanges","getOwnPropertyNames","newChanges","oldChanges","onPropertyChanged","moduleClass","getModuleName","ej2_instances","REGX_MOBILE","REGX_IE","REGX_IE11","REGX_IOS","REGX_IOS7","REGX_ANDROID","REGX_WINDOWS","REGX_VERSION","REGX_BROWSER","OPERA","EDGE","CHROME","PANTHOMEJS","SAFARI","WEBKIT","MSIE","MOZILLA","browserDetails","extractBrowserDetail","browserInfo","culture","clientInfo","userAgent","version","language","navigator","getEvent","move","getTouchStartEvent","getTouchEndEvent","getTouchMoveEvent","regX","uA","info","isMSPointer","isWebView","cordova","PhoneGap","phonegap","forge","touchStartEvent","touchMoveEvent","touchEndEvent","__extends","extendStatics","setPrototypeOf","__proto__","p","__","create","__decorate","decorators","desc","getOwnPropertyDescriptor","Reflect","decorate","_super","ease","easeIn","easeOut","easeInOut","elasticInOut","elasticIn","elasticOut","Animation_1","element_1","delayAnimation","animation","animationId","frameId","applyAnimation","step","timerId","prevTimeStamp","avg","timingFunction","performance","now","fail","newProp","oldProp","CanvasRenderer","rootID","rootId","getOptionValue","createCanvas","canvasObj","ctx","getContext","setCanvasSize","setAttributes","lineWidth","dashArray","dashArrayString","setLineDash","strokeStyle","drawLine","save","beginPath","moveTo","lineTo","restore","dataUrl","toDataURL","canvasCtx","globalAlpha","drawCornerRadius","fillStyle","fillRect","arcTo","closePath","canvasTranslate","dataSplit","borderWidth","flag","translate","innerR","c1","c2","c3","c4","bezierCurveTo","arc","counterClockWise","drawText","textAlign","baseline","textBaseline","labelRotation","fillText","drawPolyline","drawEllipse","circumference","scaleX","scaleY","drawImage","imageObj","Image","createLinearGradient","colors","myGradient","colorStop","setGradientValues","createRadialGradient","colorName","newColorStop","stopColor","addColorStop","setElementAttributes","updateCanvasAttributes","img_1","onload","ModuleLoader","loadedModules","inject","requiredModules","moduleList","reqLength","clearUnusedModule","modl","moduleList_1","module","modName","member","isModuleLoaded","moduleObject","memberName","getMemberName","isProperty","loadedModule","clean","modules","usedModules","arg","removableModule_1","mod","isArray","parentObj","controlParent","isParentArray","updateChange","updateTimeOut","changeTime_1","curIndex","defaultNumberingSystem","latn","_digits","_type","defaultNumberSymbols","decimal","group","percentSign","plusSign","minusSign","infinity","nan","exponential","latnNumberSystem","ParserBase","getMainObject","cName","getNumberingSystem","numberingSystems","reverseObject","propKeys_1","getSymbolRegex","regexStr","getSymbolMatch","matchKeys_1","constructRegex","convertValueParts","regex","getDefaultNumberingSystem","nSystem","getCurrentNumericOptions","curObj","numberSystem","needSymbols","digits","numericPair","numberParseRegex","numericRegex","symbolNumberSystem","symbolMatch","getNumberMapper","isNumber","numberSymbols","timeSeparator","latnNumberSystem_1","nPair","nRegex","errorText","ms","ls","mf","lf","NumberFormat","numberFormatter","option","cldr","symbolPattern","fOptions","cOptions","dOptions","dependable","numberMapper","parser","parserObject","currencySymbol","getCurrencySymbol","numericObject","currency","defaultCurrencyCode","percentSymbol","minusSymbol","symbols","formatRegex","customFormat","getProperNumericSkeleton","isCurrency","isPercent","isAccount","groupOne","checkValueRange","maximumSignificantDigits","minimumSignificantDigits","maximumFractionDigits","minimumFractionDigits","fractionDigits","defaultCurrency","nData","pData","groupSeparator","groupData","getGroupingDetails","minimumFraction","mval","maximumFraction","mfrac","lfrac","isNaN","isFinite","intNumberFormatter","negativeDataRegex","pattern_1","lastIndexOf","primary","s","secondary","val1","val2","checkbothExist","isFraction","decide","dint","str1","str2","checkRange","curData","zeroData","fValue","processSignificantDigits","processFraction","minimumIntegerDigits","processMinimumIntegers","toExponential","groupNumbers","latnParseRegex","nlead","nend","toPrecision","level1","sep","decimalSymbol","level2","lead","getResultantPattern","resPattern","iType","basicPatterns","dPattern","tPattern","defaultObject","patternMatcher","needFraction","cSymbol","fractionOnly","customRegex","changeCurrencySymbol","groupPattern","fraction","fmatch","fractionRegex","sym","currencyCode","isCurrencyPercent","parts","actual","symbol","part","loc","typeMapper","patternRegex","patternMatch","G","M","L","H","'"," a","yy","EEEE","E","currencyFormatRegex","curWithoutNumberRegex","$","%","-","0","1","dateParseRegex","dates","calendars","gregorian","months","stand-alone","abbreviated","2","3","4","5","6","7","8","9","10","11","12","narrow","wide","sun","mon","tue","wed","thu","fri","sat","short","dayPeriods","am","pm","eras","eraNames","0-alt-variant","1-alt-variant","eraAbbr","eraNarrow","dateFormats","full","long","medium","timeFormats","dateTimeFormats","availableFormats","Ed","Ehm","EHm","Ehms","EHms","Gy","GyMMM","GyMMMd","GyMMMEd","h","hm","Hm","hms","Hms","hmsv","Hmsv","hmv","Hmv","Md","MEd","MMM","MMMd","MMMEd","MMMMd","yM","yMd","yMEd","yMMM","yMMMd","yMMMEd","yMMMM","timeZoneNames","hourFormat","gmtFormat","gmtZeroFormat","numbers","currencies","USD","displayName","symbol-alt-narrow","EUR","GBP","minimumGroupingDigits","symbols-numberSystem-latn","list","superscriptingExponent","perMille","decimalFormats-numberSystem-latn","standard","percentFormats-numberSystem-latn","currencyFormats-numberSystem-latn","accounting","scientificFormats-numberSystem-latn","monthIndex","C","P","N","A","formatSplit","integerPart","fractionPart","customNumberFormat","dateObj","getActualDateTimeFormat","isExcelFormat","actualPattern","tLength","timeZonePattern","options_1","timeZone","numMapper","timezone","DateFormat","getTimeZoneValue","getActualNumberFormat","minFrac","parseOptions","custom","curMatch","curCode","hasNegativePattern","minDigits","maxDigits","fractionDigitsPattern","integer","minimumIntegerPattern","no","groupingPattern","cPattern","lastPageID","abbreviateRegexGlobal","weekdayKey","timeSetter","datePartMatcher","z","Z","dateFormat","formatOptions","dateSeperator","patternMatch_1","char","weekday","designator","eText","era","intDateFormatter","matches_1","curval","processNumber","curstr","desig","dec","checkTwodigitNumber","tVal","curPattern","ishour","latnRegex","minute","hour","DateParser","dateParser","hourOnly","numOptions","regexString","evalposition","gmtCorrection","zCorrectTemp","isgmtTraversed","nRegx","canUpdate","charKey","optional","weekObject","hour12","tzone","hpattern","parseTimeZoneRegx","parserRegex","parsedDateParts","internalDateParse","getDateObject","setMilliseconds","year","tKeys_1","tValue","pDate","lDate","lastDay","tzValue","retOptions","props_1","matchString","internalNumberParser","tmatch","getZoneValue","tZone","splitStr","cRegex","ival","parseRegex","groupRegex","NumberParser","numberParser","symbolRegex","symbolpattern","getParsedNumber","isNegative","NaN","exponent","rightToLeft","Internationalization","getDateFormat","getCulture","getDateParser","getNumberParser","formatNumber","formatDate","parseDate","parseNumber","getDatePattern","getNumberPattern","componentCount","lastHistoryLen","Component","randomId","needsID","moduleLoader","localObserver","detectFunction","appendTo","enablePersistence","setPersistData","refresh","preRender","injectModules","render","mergePersistData","event_2","getInjectedModules","injectedModules","Inject","localStorage","getItem","setItem","getPersistData","clearTemplate","templateName","isHistoryChanged","pageID","history","hash","charCodeAt","addOnPersist","persistObj","objValue","stringify","ignoreOnPersist","iterateJsonProperties","newObj","newList","this_1","defaultPosition","Position","Draggable","dragLimit","Draggable_1","getDefaultPosition","padding","diffX","diffY","droppables","toggleEvents","isIE","scope","isUnWire","handle","initialize","evt","currentTarget","abort","intCoord","getCoordinates","initialPosition","relativeXPosition","relativeYPosition","intDragStart","intDestroy","intCordinate","styleProp","marginLeft","marginTop","marginRight","marginBottom","dragTarget","intClosest","calculateParentPosition","getMousePosition","distance","getHelperElement","dragTargetElement","helperElement","parentClientRect","dragStart","curTarget","getProperTargetElement","dragArea","setDragArea","enableTailMode","posValue","getProcessedPositionValue","intDrag","intDragStop","setGlobalDroppables","queryPositionInfo","docHeight","getDocumentWidthHeight","docWidth","drag","eleObj","checkTargetElement","intOver","dragData","hoverObject","intOut","tLeft","tTop","pagex","pagey","dLeft","dTop","skipDistanceCheck","helperWidth","helperHeight","iTop","iLeft","dragValue","docBody","docEle","dragStop","dragStopCalled","intDrop","eleWidthBound","eleHeightBound","elementArea","tborder","tpadding","lowerKey","prevStyle","elementFromPoint","cursorAt","sender","reset","draggable","draggedElement","dropIns","getDropInstance","drop","eleInst","eleInst_1","Droppable","mouseOver","area","accept","isDrag","isDropArea","canDrop","droppedElement","coord","backspace","tab","enter","control","alt","pause","capslock","escape","pageup","pagedown","home","leftarrow","uparrow","rightarrow","downarrow","insert","delete","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","semicolon","plus","comma","minus","dot","forwardslash","graveaccent","openbracket","backslash","closebracket","singlequote","KeyboardEvents","keyPressHandler","isAltKey","altKey","isShiftKey","shiftKey","curkeyCode","which","keyConfigs","configCollection_1","rconfig","rKeyObj","KeyboardEvents_1","getKeyConfigData","keyAction","config","configCache","keyData","getKeyCode","keyVal","L10n","controlName","localeStrings","setLocale","intLocale","intGetControlConstant","currentLocale","load","localeObject","svgLink","svgObj","setSVGSize","line","rectangle","polyline","ellipse","drawPolygon","polygon","img","setAttributeNS","preserveAspectRatio","tSpan","createTitle","createDefs","createClipPath","clipPath","createForeignObject","foreignObject","createPattern","newOptions","fx","fy","drawGradient","gradientType","defs","gradient","stop_1","drawClipPath","drawCircularClipPath","SwipeSettings","swipeRegex","Touch","touchAction","tapCount","startEvent","isTouchMoved","movedDirection","startPoint","lastMovedPoint","startEventData","hScrollLocked","vScrollLocked","tStampStart","timeOutTapHold","tapHoldEvent","tapHoldThreshold","moveEvent","endEvent","movedPoint","eScrollArgs","calcScrollPoints","startEvents","originalEvent","distanceX","distanceY","scrollDirection","velocity","getVelocity","timeOutTap","endPoint","eSwipeArgs","tDistance","swipeSettings","swipeThresholdDistance","calcPoints","swipeArgs","swipeDirection","defaultArgs","canTrigger","scrollBool","isScrollable","checkSwipe","tap","tapThreshold","modeClear","lastTapTime","eTapArgs","pnt","newX","newY","newT","xDist","yDist","Engine","isRipple","data_1","complexFactorySetter","complexFactoryGetter","complexArrayFactorySetter","complexArrayFactoryGetter","builderFunction","classObj","array","keys_2","encodeURIComponent","siblings","childNodes_1","curNode","Node","ELEMENT_NODE","attrVal","cssClassName","Button","isPrimary","setIconCss","disabled","controlStatus","iconCss","iconPosition","isToggle","btnClickHandler","unWireEvents","DISABLED","RIPPLE","RIPPLECHECK","RIPPLEINDETERMINATE","CheckBox","isKeyPressed","changeState","ariaState","getWrapper","indeterminate","clickHandler","focusOutHandler","focusHandler","setDisabled","initWrapper","for","labelPosition","setText","keyDownHandler","labelMouseHandler","mouseDownHandler","labelWrap","RadioButton","RadioButton_1","changeHandler","radioGrp","radioWrap","getLabel","nextElementSibling","labelRippleHandler","textLabel","rippleLabel","PositionData","CLASSNAMES","Popup","setEnableRtl","refreshPosition","setContent","actionOnScroll","wireScrollEvents","unwireScrollEvents","orientationOnChange","getRelateToElement","scrollRefresh","parent_2","relateToElement","relateTo","hide","targetVisible","isElementOnViewport","targetInvisibleStatus","scrollElement","parent_3","isElementVisible","parent_4","win","windowView","scrollY","scrollX","outerWidth","outerHeight","reposition","checkFixedParent","checkCollision","getAnchorPosition","anchorEle","eleRect","anchorRect","targetType","callFlip","param","callFit","horz","collision","vert","show","animationOptions","showAnimation","hideAnimation","ButtonProps","AnimationSettings","ROOT","DLG_HEADER_CONTENT","DLG_HEADER","DLG_FOOTER_CONTENT","MODAL_DLG","DLG_CLOSE_ICON","SCROLL_DISABLED","FULLSCREEN","DLG_CLOSE_ICON_BTN","Dialog","initRender","headerContent","classArray","clonedEle","closeIconClickEventHandler","closedFrom","dlgOverlayClickEventHandler","l10n","keyDown","isModal","buttonObj","btnObj","activeElement","focusableElements","isTagName","isContentEdit","hasAttribute","closeOnEscape","primaryButtonEle","buttonIndex_1","buttons","buttonModel","click","setCSSClass","setMaxHeight","setTargetContent","setHeader","showCloseIcon","renderCloseIcon","contentEle","footerTemplate","setFooterTemplate","setButton","allowDragging","setAllowDragging","aria-modal","setIsModal","dlgContainer","popupObj","focusContent","unBindEvent","storeActiveElement","positionChange","setEnableRTL","setOverlayZindex","dlgOverlay","dragObj","buttonContent","btn","ftrTemplateContent","aria-describedby","maxHeight","isContent","contentDiv","headerEle","createHeaderContent","closeIcon","closeIconBtnObj","closeIconTitle","oldCSSClass","getValidFocusNode","u","tabIndex","disableElement","getAutoFocusNode","validNode","t","elementMatch","Element","bindEvent","isFullScreen","fullScreen","openAnimation","animationSettings","dialogOpen","closeAnimation","ARROW_TIP","ARROW_TIP_OUTER","ARROW_TIP_INNER","TIP_BOTTOM","TIP_RIGHT","POPUP_OPEN","POPUP_CLOSE","Tooltip","formatPosition","tooltipPositionY","tooltipPositionX","renderArrow","setTipClass","tip","tipClass","tooltipEle","renderPopup","elePos","mouseTrail","getTooltipPosition","openPopupHandler","closePopupHandler","offsetPos","calculateTooltipOffset","collisionFlipFit","tooltipEventArgs","clear","tooltipEleWidth","tooltipEleHeight","arrowEle","tipWidth","tipHeight","tipAdjust","showTipPointer","tipHeightAdjust","tipWidthAdjust","updateTipPosition","selEle","adjustArrow","leftValue","topValue","tooltipWidth","tooltipHeight","arrowInnerELe","tipPosExclude","tipPointerPosition","POINTER_ADJUST","renderContent","tooltipContent","isSticky","tipClose","ICON","onStickyClose","addDescribedBy","describedby","data-tooltip-id","removeDescribedBy","orgdescribedby","tapHoldHandler","autoCloseTimer","targetHover","touchEndHandler","targetClick","hideTooltip","targetList_1","ctrlId","target_1","restoreElement","wireMouseEvents","showTimer","hideTimer","isHidden","TOOLTIP_WRAP","aria-hidden","PopupAnimation","openDelay","horizontal","vertical","affectedPos","collidedPosition","eleOffset","arrowleft","targetElement","closeAnimation_1","closeDelay","unwireMouseEvents","onMouseOut","onMouseMove","eventPageX","eventPageY","colpos","touchEnd","scrollHandler","opensOn","triggerList_1","getTriggerList","wireFocusEvents","touchModule","tapHold","targetList_2","triggerList_2","unwireFocusEvents","targetList_3","triggerList_3","trgt","RTL","DISABLE","INPUT","CLEARICON","CLEARICONHIDE","NOFLOATLABEL","INPUTCUSTOMTAG","FLOATCUSTOMTAG","_focusFn","getParentNode","_blurFn","createFloatingInput","inputObject","wireFloatingEvents","createInputContainer","customTag","updateLabelState","updateIconState","button","createClearButton","initial","insertAdjacentElement","readOnly","wireClearBtnEvents","validateLabel","tagClass","setCssClass","oldClass","setPlaceholder","aria-placeholder","setReadonly","isReadonly","readonly","isRtl","setEnabled","isEnable","disabledAttrs","aria-disabled","removeAttributes","addAttributes","setClearButton","isClear","clearButton","appendSpan","iconClass","createInput","showClearButton","enabled","setPropertyValue","removeFloating","unwireFloatingEvents","addFloating","iconEle","inputObj","floatLine","floatText","ErrorOption","SPINICON","INCREMENT","DECREMENT","INTREGEXP","NumericTextBox","isPrevFocused","decimalSeparator","intRegExp","isCalled","cloneElement","angularTagName","tabindex","incrementTitle","decrementTitle","isValidState","inputStyle","inputName","cultureInfo","initCultureInfo","initCultureFunc","checkAttributes","validateMinMax","validateStep","updatePlaceholder","createWrapper","showSpinButton","spinBtnCreation","changeValue","decimals","roundNumber","attributes_1","inputWrapper","aria-readonly","hiddenInput","spinDown","aria-label","spinUp","wireSpinBtnEvents","formattedValue","aria-valuemin","aria-valuemax","operation","isInteract","isFocused","performAction","raiseChangeEvent","checkErrorClass","bindClearEvent","resetHandler","focusIn","focusOut","pasteHandler","mouseDownOnSpinner","mouseUpOnSpinner","touchMoveOnSpinner","unwireSpinBtnEvents","parsedInput","updateValue","previousValue","beforeUpdate","isKeyDown","updatedValue","correctRounding","strictMode","trimValue","floatExp","floatValue","floatStep","valueCount","stepCount","roundValue","precision","divide","updateCurrency","propVal","numberOfDecimals","decimalPart","modifyText","validateState","result1","result2","cancelEvent","metaKey","currentChar","stopPropagation","fractionRule","validateDecimalOnType","mouseWheel","rawEvent","wheelDelta","detail","formatValue","ele_1","getElementData","mouseUpClick","decrement","getText","propValue","#","?","&","MaskUndo","MaskedTextBox","isInitial","resetMaskedTextBox","setMaskPlaceholder","setWidth","setVal","strippedValue_1","strippedVal","getMaskedValue","TicksData","TooltipData","classNames","Slider","horDir","verDir","transition","rangeBar","transitionOnMaterialTooltip","scaleTransform","customAriaText","tickElementCollection","tooltipFormatInfo","ticksFormatInfo","internationalization","ticks","formatString","formatInfo","makeRoundNumber","elementVal","fractionalToInteger","noOfDecimals","tens","setZindex","tooltipElement","firstTooltipElement","secondTooltipElement","sliderContainer","showOn","sliderTrack","isMaterial","setHandler","createRangeBar","setOrientClass","class","showButtons","setButtons","rangeValueUpdate","previousVal","checkHandleValue","previousChanged","renderScale","renderTooltip","firstHandle","secondHandle","setAriaAttributes","createSecondHandle","secondMaterialHandle","createFirstHandle","firstMaterialHandle","wireFirstHandleEvt","handleFocus","transitionEnd","handleOver","handleLeave","wireSecondHandleEvt","handleStart","activeHandle","handlePos1","handlePos2","getHandle","tooltipObj","firstTooltipObj","secondTooltipObj","refreshTooltip","openMaterialTooltip","tooltipAnimation","closeTooltip","handleFocusOut","tooltipValue","preDir","setTooltipContent","addTooltipClass","setAriaAttrValue","content_1","formatContent","handleVal1","content_2","ariaContent","handleVal2","count_1","getTooltipTransformProperties","previousTooltipClass","tooltipPlacement","tooltipPosition","tooltipBeforeOpen","transformProperties","wireMaterialTooltipEvent","sliderDown","tooltipPositionCalculation","cursor","checkTooltipPosition","firstHandleTooltipPosition","secondHandleTooltipPosition","tooltipClass","beforeOpen","beforeCollision","afterClose","tooltipAfterClose","firstBtn","secondBtn","buttonTitle","enabledRTL","buttonFocusOut","repeatButton","openTooltip","hVal","handleValueUpdate","changeHandleValue","refreshTooltipOnMove","repeatHandlerMouse","buttonClick","repeatInterval","materialChange","repeatHandlerUp","changeEvent","orien","ul","smallStep","showSmallTicks","largeStep","steps","tickWidth","islargeTick","largestep","repeat","createTick","formatTicksValue","decimalPoints","lastChild","lastElementChild","ticksWrapper","tickElements","scaleAlignment","tickText","tickElement","tickValuePosition","other","otherChild","ariaValueText","isTickFormatted","valuenow","aria-valuetext","buttonUp","setRangeBar","checkHandlePosition","preHandlePos1","setHandlePosition","validateRangeValue","setRangeValue","modifyZindex","updateRangeValue","previous","setPreviousVal","rtl","preHandlePos2","tempStartEnd","onResize","xyToPosition","top_1","stepValueCalculation","percentStep","remain","addition","f","positionToValue","sliderBarClick","handlepos","handleVal","focusedElement","checkRepeatedValue","sliderBarMove","sliderBarUp","currentValue","wireButtonEvt","sliderFocusOut","onresize","keyUp","hover","relatedTarget","blur","transformProperties_1","hiddenHandle_1","handle_1","changeSliderType","updateConfig","changeRtl","changeOrientation","setMinMaxValue","setTooltip","setReadOnly","VALIDATE_EMAIL","VALIDATE_URL","VALIDATE_DATE_ISO","VALIDATE_DIGITS","VALIDATE_PHONE","VALIDATE_CREDITCARD","ListBase","FormValidator","validated","errorRules","allowSubmit","required","infoElement","selectQuery","defaultMessages","email","dateIso","creditcard","number","maxLength","minLength","rangeLength","tel","equalTo","inputElements","createHTML5Rules","FormValidator_1","addRules","removeRules","validate","selected","rules_1","name_1","clearForm","getInputElement","errorClass","validClass","elements_2","getErrorElement","hideMessage","defRules","acceptedTypes","allRule","defRules_1","defRule","annotationRule","ruleCon","ruleName","rulesList","ruleFirstName","ruleSecondName","minvalue","maxvalue","annotationMessage","isCheckable","keyUpHandler","submitHandler","rules_2","errorMessage","getErrorMessage","errorRule","isValid","removeErrorRules","showMessage","createErrorElement","errorElement","currentRule","formElement","checkValidator","ruleValue","formats","errorOption","Message","errorContainer","containerId","customPlacement","nextSibling","checkRequired","inputType","compareTo","Label","LIST_PARENT","FILE","STATUS","CLEAR_ICON","REMOVE_ICON","DRAG_HOVER","PROGRESS_WRAPPER","PROGRESSBAR","PROGRESSBAR_TEXT","UPLOAD_INPROGRESS","UPLOAD_SUCCESS","UPLOAD_FAILED","TEXT_CONTAINER","VALIDATION_FAILS","ICON_FOCUSED","FilesProp","ButtonsProps","AsyncSettings","Uploader","initialAttr","multiple","fileList","filesData","uploadedFilesData","isForm","setExtensions","allowedExtensions","clearAll","setControlStatus","setMultipleSelection","setRTL","reRenderFileList","browse","upload","renderButtonTemplates","unBindDropEvents","setDropArea","listParent","showFileList","actionButtons","renderPreLoadFiles","setLocalizedTexts","preLocaleObj","browseButton","localizedTexts","uploadWrapper","updateFileList","getKeyValue","autoUpload","uploadButton","removeActionButtons","createFileList","renderActionButtons","localeText","Browse","Clear","Upload","dropFilesHint","invalidMaxFileSize","invalidMinFileSize","invalidFileType","uploadFailedMessage","uploadSuccessMessage","removedSuccessMessage","removedFailedMessage","inProgress","readyToUploadMessage","checkHTMLAttributes","asyncSettings","saveUrl","removeUrl","next","renderBrowseButton","initializeUpload","wireActionButtonEvents","uploadButtonClick","clearButtonClick","unwireActionButtonEvents","uploadText","clearText","dropAreaWrapper","fileDropArea","aria-activedescendant","files","clearData","files_1","fileData","getFileNameOnly","rawFile","validationMessages","minSize","maxSize","statusCode","checkActionButtonStatus","dropTextArea","dropArea","dropZoneElement","enableDropText","bindDropEvents","newAttr","createAttribute","setAttributeNode","checkAutoUpload","browseButtonClick","onSelectFiles","removeFocus","keyboardModule","keyActionHandler","resetForm","setTabFocus","setReverseFocus","removeFiles","iconElements","iconElement","dropElement","dragHover","onDragLeave","selectedElement","removeFilesData","file","customTemplate","getLiElement","removeUploadedFile","selectedFiles","ajax","removeCompleted","removeFailed","currentRequest","formData","FormData","updateFormData","customFormData","updateStatus","rootElement","statusElement","targetFiles","dataTransfer","sortFileList","eventArgs_1","getFileType","validatedFileSize","isModified","modifiedFilesData","progressInterval","checkExtension","dataFiles","updateSortedFileList","previousListClone","added","liElement","removedList_1","oldList","createParentUL","dropFiles","extensions_1","extension","fileSize","minSizeError","maxSizeError","minFileSize","maxFileSize","createCustomfileList","fileData_1","listItem","data-file-name","uploadTemplateFn","length_2","fileData_2","textContainer","fileExtension","rtlContainer","bytesToSize","truncateName","nameElement","dataset","tail","setInitialAttributes","filterfileList","filterFiles","liElements","createProgressBar","progressbarWrapper","progressBar","progressbarInnerWrapper","progressbarText","updateProgressbar","loaded","total","changeProgressValue","progressValue","uploadInProgress","customUI","updateProgressBarClasses","uploadComplete","removeProgressbar","uploadFailed","callType","progressAnimation","animateProgressBar","extensions","uploadTemplate","exception","customData","bytes","fileNames","sortedFilesData","sortedFileNames_1","name_2","state_1","validUrl","removeFiles_1","getFilesData","subQuery","isChild","queries","fKey","fromTable","lookups","expands","sortedColumns","groupedColumns","setKey","using","dataManager","execute","always","executeQuery","cloned","subQuerySelector","isCountRequired","tableName","addParams","fn","expand","tables","fieldName","ignoreAccent","search","searchKey","fieldNames","comparer","fnOperators","sortBy","isFromGroup","sorts","order","endsWith","fnSort","filterQueries","sortByDesc","page","pageIndex","pageSize","take","nos","skip","hierarchy","selectorFn","foreignKey","requiresCount","aggregate","q","filterQueryLists","singles","filtered","isComplex","processOperator","condition","predicates","combinePredicates","fromJson","fromJSONData","record","isAnd","toJson","preds","consts","GroupGuid","startsWith","fnAscending","fnDescending","localeCompare","extractFields","jsonArray","newData","level","groupDs","jsonData","indx","childLevels","grouped","groupedArray","records","_loop_2","this_2","getVal","tempObj","_loop_3","aggs","buildHierarchy","lookup","pKey","grp","fKeyData","getFieldList","copyObj","ds","middle","ignoreDiacritics","diacritics","callAdaptorFunction","adaptor","fnName","param1","param2","isnull","isPlainObject","isCors","xhr","getGuid","rand","arr","Uint8Array","isNull","getItemFromComparer","castRequired","distinct","requiresCompleteRecord","tmp","serverTimezoneOffset","average","truecount","falsecount","operatorSymbols","<",">","<=",">=","==","!=","*=","$=","^=","odBiOperator","lessthan","lessthanorequal","greaterthan","greaterthanorequal","equal","notequal","odUniOperator","endswith","startswith","odv4UniOperator","Ⓐ","A","À","Á","Â","Ầ","Ấ","Ẫ","Ẩ","Ã","Ā","Ă","Ằ","Ắ","Ẵ","Ẳ","Ȧ","Ǡ","Ä","Ǟ","Ả","Å","Ǻ","Ǎ","Ȁ","Ȃ","Ạ","Ậ","Ặ","Ḁ","Ą","Ⱥ","Ɐ","Ꜳ","Æ","Ǽ","Ǣ","Ꜵ","Ꜷ","Ꜹ","Ꜻ","Ꜽ","Ⓑ","B","Ḃ","Ḅ","Ḇ","Ƀ","Ƃ","Ɓ","Ⓒ","C","Ć","Ĉ","Ċ","Č","Ç","Ḉ","Ƈ","Ȼ","Ꜿ","Ⓓ","D","Ḋ","Ď","Ḍ","Ḑ","Ḓ","Ḏ","Đ","Ƌ","Ɗ","Ɖ","Ꝺ","DZ","DŽ","Dz","Dž","Ⓔ","E","È","É","Ê","Ề","Ế","Ễ","Ể","Ẽ","Ē","Ḕ","Ḗ","Ĕ","Ė","Ë","Ẻ","Ě","Ȅ","Ȇ","Ẹ","Ệ","Ȩ","Ḝ","Ę","Ḙ","Ḛ","Ɛ","Ǝ","Ⓕ","F","Ḟ","Ƒ","Ꝼ","Ⓖ","G","Ǵ","Ĝ","Ḡ","Ğ","Ġ","Ǧ","Ģ","Ǥ","Ɠ","Ꞡ","Ᵹ","Ꝿ","Ⓗ","H","Ĥ","Ḣ","Ḧ","Ȟ","Ḥ","Ḩ","Ḫ","Ħ","Ⱨ","Ⱶ","Ɥ","Ⓘ","I","Ì","Í","Î","Ĩ","Ī","Ĭ","İ","Ï","Ḯ","Ỉ","Ǐ","Ȉ","Ȋ","Ị","Į","Ḭ","Ɨ","Ⓙ","J","Ĵ","Ɉ","Ⓚ","K","Ḱ","Ǩ","Ḳ","Ķ","Ḵ","Ƙ","Ⱪ","Ꝁ","Ꝃ","Ꝅ","Ꞣ","Ⓛ","L","Ŀ","Ĺ","Ľ","Ḷ","Ḹ","Ļ","Ḽ","Ḻ","Ł","Ƚ","Ɫ","Ⱡ","Ꝉ","Ꝇ","Ꞁ","LJ","Lj","Ⓜ","M","Ḿ","Ṁ","Ṃ","Ɱ","Ɯ","Ⓝ","N","Ǹ","Ń","Ñ","Ṅ","Ň","Ṇ","Ņ","Ṋ","Ṉ","Ƞ","Ɲ","Ꞑ","Ꞥ","NJ","Nj","Ⓞ","O","Ò","Ó","Ô","Ồ","Ố","Ỗ","Ổ","Õ","Ṍ","Ȭ","Ṏ","Ō","Ṑ","Ṓ","Ŏ","Ȯ","Ȱ","Ö","Ȫ","Ỏ","Ő","Ǒ","Ȍ","Ȏ","Ơ","Ờ","Ớ","Ỡ","Ở","Ợ","Ọ","Ộ","Ǫ","Ǭ","Ø","Ǿ","Ɔ","Ɵ","Ꝋ","Ꝍ","Ƣ","Ꝏ","Ȣ","Ⓟ","P","Ṕ","Ṗ","Ƥ","Ᵽ","Ꝑ","Ꝓ","Ꝕ","Ⓠ","Q","Ꝗ","Ꝙ","Ɋ","Ⓡ","R","Ŕ","Ṙ","Ř","Ȑ","Ȓ","Ṛ","Ṝ","Ŗ","Ṟ","Ɍ","Ɽ","Ꝛ","Ꞧ","Ꞃ","Ⓢ","S","ẞ","Ś","Ṥ","Ŝ","Ṡ","Š","Ṧ","Ṣ","Ṩ","Ș","Ş","Ȿ","Ꞩ","Ꞅ","Ⓣ","T","Ṫ","Ť","Ṭ","Ț","Ţ","Ṱ","Ṯ","Ŧ","Ƭ","Ʈ","Ⱦ","Ꞇ","Ꜩ","Ⓤ","U","Ù","Ú","Û","Ũ","Ṹ","Ū","Ṻ","Ŭ","Ü","Ǜ","Ǘ","Ǖ","Ǚ","Ủ","Ů","Ű","Ǔ","Ȕ","Ȗ","Ư","Ừ","Ứ","Ữ","Ử","Ự","Ụ","Ṳ","Ų","Ṷ","Ṵ","Ʉ","Ⓥ","V","Ṽ","Ṿ","Ʋ","Ꝟ","Ʌ","Ꝡ","Ⓦ","W","Ẁ","Ẃ","Ŵ","Ẇ","Ẅ","Ẉ","Ⱳ","Ⓧ","X","Ẋ","Ẍ","Ⓨ","Y","Ỳ","Ý","Ŷ","Ỹ","Ȳ","Ẏ","Ÿ","Ỷ","Ỵ","Ƴ","Ɏ","Ỿ","Ⓩ","Z","Ź","Ẑ","Ż","Ž","Ẓ","Ẕ","Ƶ","Ȥ","Ɀ","Ⱬ","Ꝣ","ⓐ","a","ẚ","à","á","â","ầ","ấ","ẫ","ẩ","ã","ā","ă","ằ","ắ","ẵ","ẳ","ȧ","ǡ","ä","ǟ","ả","å","ǻ","ǎ","ȁ","ȃ","ạ","ậ","ặ","ḁ","ą","ⱥ","ɐ","ꜳ","æ","ǽ","ǣ","ꜵ","ꜷ","ꜹ","ꜻ","ꜽ","ⓑ","b","ḃ","ḅ","ḇ","ƀ","ƃ","ɓ","ⓒ","c","ć","ĉ","ċ","č","ç","ḉ","ƈ","ȼ","ꜿ","ↄ","ⓓ","d","ḋ","ď","ḍ","ḑ","ḓ","ḏ","đ","ƌ","ɖ","ɗ","ꝺ","dz","dž","ⓔ","e","è","é","ê","ề","ế","ễ","ể","ẽ","ē","ḕ","ḗ","ĕ","ė","ë","ẻ","ě","ȅ","ȇ","ẹ","ệ","ȩ","ḝ","ę","ḙ","ḛ","ɇ","ɛ","ǝ","ⓕ","f","ḟ","ƒ","ꝼ","ⓖ","g","ǵ","ĝ","ḡ","ğ","ġ","ǧ","ģ","ǥ","ɠ","ꞡ","ᵹ","ꝿ","ⓗ","h","ĥ","ḣ","ḧ","ȟ","ḥ","ḩ","ḫ","ẖ","ħ","ⱨ","ⱶ","ɥ","ƕ","ⓘ","i","ì","í","î","ĩ","ī","ĭ","ï","ḯ","ỉ","ǐ","ȉ","ȋ","ị","į","ḭ","ɨ","ı","ⓙ","j","ĵ","ǰ","ɉ","ⓚ","k","ḱ","ǩ","ḳ","ķ","ḵ","ƙ","ⱪ","ꝁ","ꝃ","ꝅ","ꞣ","ⓛ","l","ŀ","ĺ","ľ","ḷ","ḹ","ļ","ḽ","ḻ","ſ","ł","ƚ","ɫ","ⱡ","ꝉ","ꞁ","ꝇ","lj","ⓜ","m","ḿ","ṁ","ṃ","ɱ","ɯ","ⓝ","n","ǹ","ń","ñ","ṅ","ň","ṇ","ņ","ṋ","ṉ","ƞ","ɲ","ʼn","ꞑ","ꞥ","nj","ⓞ","o","ò","ó","ô","ồ","ố","ỗ","ổ","õ","ṍ","ȭ","ṏ","ō","ṑ","ṓ","ŏ","ȯ","ȱ","ö","ȫ","ỏ","ő","ǒ","ȍ","ȏ","ơ","ờ","ớ","ỡ","ở","ợ","ọ","ộ","ǫ","ǭ","ø","ǿ","ɔ","ꝋ","ꝍ","ɵ","ƣ","ȣ","ꝏ","ⓟ","p","ṕ","ṗ","ƥ","ᵽ","ꝑ","ꝓ","ꝕ","ⓠ","q","ɋ","ꝗ","ꝙ","ⓡ","r","ŕ","ṙ","ř","ȑ","ȓ","ṛ","ṝ","ŗ","ṟ","ɍ","ɽ","ꝛ","ꞧ","ꞃ","ⓢ","s","ß","ś","ṥ","ŝ","ṡ","š","ṧ","ṣ","ṩ","ș","ş","ȿ","ꞩ","ꞅ","ẛ","ⓣ","t","ṫ","ẗ","ť","ṭ","ț","ţ","ṱ","ṯ","ŧ","ƭ","ʈ","ⱦ","ꞇ","ꜩ","ⓤ","u","ù","ú","û","ũ","ṹ","ū","ṻ","ŭ","ü","ǜ","ǘ","ǖ","ǚ","ủ","ů","ű","ǔ","ȕ","ȗ","ư","ừ","ứ","ữ","ử","ự","ụ","ṳ","ų","ṷ","ṵ","ʉ","ⓥ","v","ṽ","ṿ","ʋ","ꝟ","ʌ","ꝡ","ⓦ","w","ẁ","ẃ","ŵ","ẇ","ẅ","ẘ","ẉ","ⱳ","ⓧ","x","ẋ","ẍ","ⓨ","y","ỳ","ý","ŷ","ỹ","ȳ","ẏ","ÿ","ỷ","ẙ","ỵ","ƴ","ɏ","ỿ","ⓩ","z","ź","ẑ","ż","ž","ẓ","ẕ","ƶ","ȥ","ɀ","ⱬ","ꝣ","Ά","Έ","Ή","Ί","Ϊ","Ό","Ύ","Ϋ","Ώ","ά","έ","ή","ί","ϊ","ΐ","ό","ύ","ϋ","ΰ","ω","ς","expected","notnull","processSymbols","parseJson","jsonText","jsonReviver","iterateAndReviveArray","iterateAndReviveJson","dupValue","dateParse","toTimeZone","isJson","isGuid","replacer","jsonReplacer","arrayReplacer","keys_3","addSelfOffset","toJSON","toUTC","utc","unix","Adaptor","requestType","pvt","processResponse","JsonAdaptor","processQuery","countFlg","agg","batchRequest","dm","changes","addedRecords","changedRecords","update","deletedRecords","onWhere","onAggregates","onSearch","onSortBy","fnCompare","onGroup","aggQuery","onPage","onRange","onTake","onSkip","onSelect","keyField","UrlAdaptor","hierarchyFilters","getQueryRequest","request","groups","filters","searches","getFiltersFrom","req","getRequestQuery","reqParams","pvtData","convertToQueryString","request1","requests","getAggregateResult","batchUrl","crudUrl","changed","deleted","insertUrl","keyColumn","updateUrl","predicats","aggregateData","ODataAdaptor","multipartAccept","batch","changeSet","batchPre","contentId","batchContent","changeSetContent","batchChangeSetContentType","onPredicate","requiresCast","guid","returnValue","getField","onComplexPredicate","onEachWhere","onEachSearch","onEachSort","reverse","onCount","settings","overrideMimeType","dataCopy","results","emptyAndBatch","processBatchResponse","versionCheck","requiresFormat","keys_4","initialGuid","cid","cSet","generateInsertRequest","generateUpdateRequest","generateDeleteRequest","generateBodyContent","method","stat","cIdx","jsonObj","exVal","changeGuid","ODataV4Adaptor","getModulename","isDate","WebApiAdaptor","Count","Items","WebMethodAdaptor","RemoteSaveAdaptor","CacheAdaptor","isCrudAction","isInsertAction","cacheAdaptor","guidId","forDel","requestTime","removeItem","generateKey","currentFilter","newQuery","cachedItems","crossDomain","timeTillExpiration","cachingPageSize","enableCaching","jsonp","defaultQuery","isDataAvailable","then","setDefaultQuery","deffered","Deferred","nextTick","getDeferedArgs","makeRequest","promise","extendRequest","fnSuccess","fnFail","cache","processData","isSelector","virtualSelectRecords","fnQueryChild","subDeffer","childArgs","subUrl","childReq","subData","virtualRecords","catch","all","pResult","cResult","deff","doAjaxRequest","defer","icon","check","expanded","hasChild","collapsible","image","iconWrapper","createListFromArray","isSingleLevel","generateUL","createListItemFromArray","subChild","curOpt","defaultListBaseOptions","getModuleClass","moduleName","genUID","itemCreating","generateSingleLevelLI","generateLI","itemCreated","createListItemFromJson","defaultMappedFields","ariaAttributes","defaultAriaAttributes","typeofData","curItem","innerEle","showCheckBox","showIcon","itemClass","htmlAttributes","imageUrl","attr","imageAttributes","subDS","hasChildren","processSubChild","subLi","createListFromJson","expandCollapse","expandElement","expandIconPosition","expandIconClass","listClass","elementArray","addSorting","sortOrder","getDataSource","createJsonFromElement","curEle","jsonAr","childs","i_1","getAllAttributes","urlAttributes","typeof","elementAttributes","innerElements","grpLI","elementID","groupItemRole","itemRole","anchorTag","uID","groupTemplate","compiledString","innerDiv","wrapperRole","itemText","ulElement","listRole","isChecked","groupBy","createList","getSiblingLI","isPrevious","siblingLI","liIndex","liCollections","groupDataSource","cusQuery","itemObj","grpItem","renderContentTemplate","liCollection","renderGroupTemplate","headerItems","category","headerData","headerItems_1","generateIcon","TimePickerBase","effectsConfig","None","SlideLeft","SlideDown","Zoom","Fade","effectsRTLConfig","FieldSettings","ListView","curDSLevel","curViewDS","moveDown","moveUp","back","animateOptions","isNestedList","currentLiElements","resetList","selectedData","selectedId","aniObj","setHTMLAttribute","setEnable","setSize","listBaseOption","reRender","headerTitle","setCheckbox","getSubDS","resetCurrentList","enableElement","isEnabled","showBack","showHeader","innerHeaderEle","textEle","hedBackButton","switchView","fromView","toView","fPos_1","overflow_1","anim","curUL","renderCheckbox","isValidLI","checkboxElement","frameElement_1","checkInternally","checkBoxPosition","checkItem","toggleCheckBase","HTMLLIElement","getLiFromObjOrElement","checkboxIcon","setSelectedItemData","unCheckItem","checkAllItem","toggleAllCheckBase","unCheckAllItem","checkIcon","args_1","getItemData","selectedItems","removeHover","removeSelect","setSelectLI","setCheckboxLI","hoverHandler","curLi","setHoverLI","leaveHandler","homeKeyHandler","arrowKeyHandler","prev","enterKeyHandler","spaceKeyHandler","tabFocus","swipeActionHandler","focusout","swipe","focusedLI_1","hoverLI","selectedLI_1","selectEventData","renderSubList","isInteracted","selectedLI","lastLi","hoverSiblingLI","curLIs","levelKeys","localData","levelKeys_1","curDSJSON","findItemFromDS","getElementUID","curDS","resultJSON","getQuery","setViewDataSource","isInAnimation","setLocalData","renderList","contentContainer","renderIntoDom","rippleFn","classAr","pID","pop","toUL","fromUL","selectItem","selectMultipleItems","getParentId","parentId","getSelectedItems","liTextCollection","liDataCollection","dataParent","tempData","findItem","enableItem","setItemState","disableItem","showItem","showHideItem","hideItem","addItem","removeItemFromList","valid","liCollection_1","idx_1","liCollection_2","idx_2","ds_1","curAr_1","fields_1","idx_3","removeMultipleItems","OVERLAY","OTHERMONTH","SELECTED","FOCUSEDDATE","OTHERMONTHROW","ZOOMIN","Calendar","controlUp","controlDown","moveLeft","moveRight","pageUp","pageDown","shiftPageUp","shiftPageDown","controlHome","controlEnd","globalize","todayDisabled","todayDate","data-role","calendarElement","processDate","validateDate","minMaxUpdate","checkDateValue","changedArgs","headerElement","iconContainer","previousIcon","nextIcon","headerTitleElement","aria-atomic","previousDate","contentHdr","contentBody","showTodayButton","contentFooter","getCultureValues","culShortNames","getCultureObjects","shortNames","html","tableHeadElement","weekNumber","shiftArray","renderYears","renderDecades","renderMonths","updateFooter","todayElement","l10","toDateString","today","footer","todayButtonClick","navTitle","keyActionHandle","getViewNumber","depth","navigateTo","view","currentView","focusedDate","tableBodyElement","selectedDate","depthValue","levelRestrict","KeyboardNavigate","selectDate","contentClick","firstDay","addYears","isMinMaxRange","addDay","navigatePreviousHandler","navigatePrevious","navigateNextHandler","navigateNext","triggerChange","navigateHandler","triggerNavigate","minMaxDate","localDate","numCells","tdEles","renderDays","renderTemplate","currentMonth","titleUpdate","getMilliseconds","setStartDate","weekEle","weekAnchor","getWeek","dateFormatOptions","tdEle","dayCell","dayLink","renderDaycellArg","isDisabled","isOutOfRange","renderDayCellEvent","otherMnthBool","disabledCls","getDateVal","removeTheadEle","valueUtil","curDate","yr","curYrs","minYr","minMonth","maxYr","maxMonth","localMonth","localYr","startYr","endYr","startHdrYr","endHdrYr","startYear","rowIterator","valueOf","aria-selected","lastDate","timeOffset","findlastDay","classNm","trEle","iconHandler","setAriaActivedescendant","eve","getIdValue","setvalue","setActiveDescendant","focusedEle","selectedEle","previousIconHandler","compareMonth","nextIconHandler","compareYear","compareDecade","stringVal","ld","tzOffset","dateString","setDateDecade","setDateYear","navigatedEvent","navigatedArgs","compare","modifier","findNextTD","rangeValue","tmpDate","INPUTFOCUS","ACTIVE","DatePicker","previousEleValue","isDateIconClicked","altUpArrow","altDownArrow","calendarKeyConfigs","bindEvents","updateInput","ariaAttrs","aria-haspopup","aria-owns","aria-expanded","INPUTWRAPPER","isCalendar","disabledDates","dateOptions","dateTimeFormat","dateValue","tempFormat","dateIconHandler","inputFocusHandler","inputBlurHandler","keyboardModules","inputKeyActionHandle","CalendarKeyActionHandle","strictModeUpdate","changeTrigger","calendarKeyboardModules","documentHandler","createCalendar","popupWrapper","modelHeader","modal","yearHeading","h2","daySpan","monthSpan","selectCalendar","outOfRange","prevent","preventArgs","triggerEvent","ensureInputAttribute","ngTag","inputEleCopy","checkHtmlAttributes","valueCopy","previousValCopy","dateIdString","LEFTCALENDER","RIGHTCALENDER","STARTDATE","ENDDATE","RANGEHOVER","STARTLABEL","ENDLABEL","CALENDAR","HEADER","TITLE","ICONCONTAINER","RANGECONTAINER","FOCUSDATE","CONTENT","DAYSPAN","WEEKNUMBER","DATEDISABLED","ICONDISABLED","LISTCLASS","ListBaseClasses","HOVER","OVERFLOW","Presets","DateRangePicker","isCustomRange","isCustomWindow","presetsItem","isTab","isKeyPopup","dateDisabled","isRangeIconClicked","isMaxDaysClicked","disabledDays","presetKeyConfig","keyInputConfigs","defaultConstant","customRange","applyText","cancelText","selectedDays","isMobile","matchMedia","angularTag","initProperty","navNextFunction","navNextMonth","navPrevFunction","navPrevMonth","deviceNavNextFunction","deviceNavNext","deviceNavPrevFunction","deviceNavPrevious","shiftTab","processPresets","presets","validateDates","activeIndex","rangeIconHandler","inputKeyboardModule","inputHandler","isPopupOpen","applyFunction","minDays","maxDays","createPopup","isPreset","createPresets","listRippleEffect","renderControl","createControl","bindCalendarEvents","updateRange","leftCalendar","rightCalendar","disabledDateRender","updateHeader","clearCalendarEvents","leftCalPrevIcon","leftCalNextIcon","rightCalPrevIcon","rightCalNextIcon","updateNavIcons","compareMonths","leftCalCurrentDate","rightCalCurrentDate","calendarIconEvent","deviceCalendarEvent","startButton","deviceHeaderClick","endButton","calendarIconRipple","leftKeyboardModule","keyInputHandler","rightKeyboardModule","bindCalendarCellEvents","removeFocusedDate","calendar","updateDeviceCalendar","deviceNavigation","deviceCalendar","removeClassDisabled","updateMinMaxDays","selectableDates","separator","refreshControl","clearRange","previousStartValue","previousEndValue","inputStr","keyCalendarUpdate","isLeftCalendar","updateCalendarElement","navInCalendar","leftLimit","rightLimit","keyNavigation","rightDateLimit","leftDateLimit","selectRange","yearDate","presetElement","checkMinMaxDays","presetHeight","isDateDisabled","calendarFocus","tdCells_1","hoverSelection","focusedDate_1","tdCells_2","isDisabledCell","eleDate","elementCollection","elementCollection_1","tdCells_3","addSelectedAttributes","rangeArgs","inputValue","otherMonthSelect","isStartDate","sameDate","tdCell","MouseEvent","removeSelection","applyButton","endEle","endEle_1","endEle_2","ele_2","removeSelectedAttributes","tdCells_4","maxEle","tdCells_5","calendar_1","tdCells_6","disabledDayCnt","start_1","end_1","updateControl","createHeader","labelContainer","endBtn","startBtn","changeIcon","disableInput","validateRangeStrict","validateMinMaxDays","validateRange","renderCalendar","isSameMonth","selectNextMonth","selectStartMonth","calendarContainer","prevIcon","leftContainer","rightContainer","controlContainer","headerContainer","footerSection","cancelBtn","CANCEL","applyBtn","APPLY","cancelButton","cancelFunction","deviceHeaderUpdate","popupKeyboardModule","popupKeyActionHandle","onMouseClick","setListSelection","onMouseOver","onMouseLeave","renderCustomPopup","removeListSelection","applyPresetRange","listTag","wireListEvents","unWireListEvents","popupWidth","btnKeyboardModule","presetKeyboardModule","presetKeyActionHandler","popupKeyBoardHandler","rangeContainer","listMoveDown","setScrollPosition","listMoveUp","hvrItem","getHoverLI","actItem","getActiveLI","previousElementSibling","listHeight","active","nextEle","liHeight","setEleWidth","virtualRenderCellArgs","virtualRenderCellEvent","isStartDisabled","isEndDisabled","getSelectedRange","refreshChange","DAY","MONTH","YEAR","NAVIGATION","FOCUS","createListItems","timeFormat","timeCollections","TimePicker","disableItemCollection","keyConfigure","down","up","createInputElement","validateInterval","validateDisable","getFormattedValue","setMinMax","initMin","initMax","popupCreation","valueIsDisable","resetState","initValue","isNavigate","isPreventBlur","isTextSelected","valueWithMinutes","aria-autocomplete","isNullOrEmpty","unBindEvents","ariaAttribute","generateList","listWrapper","addSelection","getPopupHeight","popupHeight","popupCalculation","firstItem","isEmptyList","textIndent","paddingRight","paddingLeft","containerStyle","setPopupPosition","setPopupWidth","createDateObj","checkErrorState","disableTimeIcon","selectInputText","getMeridianText","getCursorSelection","getActiveElement","borderLeftWidth","scrollTo","setScrollTo","findScrollTop","initialTime","scrollTime","cldrTimeFormat","cldrDateFormat","getCultureDateObject","getCultureTimeObject","dateToNumeric","getExactDateTime","checkValue","updatePlaceHolder","popupHandler","closePopup","mouseUpHandler","curPos","cursorDetails","focusSelection","isSeparator","keyHandler","objToString","previousState","setSelection","animModel","documentClickHandler","checkValueChange","isNavigation","valueProcess","currentLi","setHover","maxVal","dateVal","strictOperation","setCurrentDate","maxValue","minValue","inputEvent","clearHandler","setZIndex","getSeparator","getTextFormat","strArray","newval","findNextElement","textVal","timeVal","validLiElement","backward","elementIndex","isCheck","nextItem","offsetValue","lastItemOffsetValue","ulPadding","paddingTop","isUpdate","hoveredItem","getHoverItem","setActiveClass","TimeParse","listBaseOptions","getProperty","HOUR","MINUTE","SECOND","MILLISECOND","DATETIMEPOPUPWRAPPER","DateTimePicker","previousDateTime","isTimePopupOpen","popupObject","dateTimeWrapper","keyboardHandler","unBindInputEvents","timekeyConfigure","cldrDateTimeFormat","bindInputEvents","validateMinMaxRange","isDateObject","disablePopupButton","checkValidState","isDisable","timeIcon","renderTimeIcon","timeHandler","dateHandler","inputKeyAction","getCldrFormat","isDatePopupOpen","toggle","listCreation","endTime","listDetails","wireTimeListEvents","addTimeSelection","setTimeScrollPosition","openPopup","timeModal","TimeKeyActionHandle","unWireTimeListEvents","setDimension","setTimeHover","removeTimeHover","setInputValue","popupElement","getFullDateTime","combineDateTime","minutes","seconds","timeValue","setTimeActiveClass","setTimeActiveDescendant","removeTimeSelection","getTimeHoverItem","calculateStartEnd","hours","milliseconds","tempStartValue","tempMin","tempEndValue","tempMax","getTimeActiveElement","status_1","millisecond","findNextTimeElement","dateTimeVal","listCount","timeElementValue","setTimeValue","timeKeyHandler","nextItemValue","Encoding","includeBom","emitBOM","encodingType","initBOM","getByteCount","chars","utf8Len","getByteCountInternal","codePoint","isHighSurrogate","codeUnit","toCodepoint","highCodeUnit","lowCodeUnit","charIndex","charCount","byteCount","isUtf8","charCode","getBytes","RangeError","ArrayBuffer","getBytesOfUtf8Encoding","getBytesOfUnicodeEncoding","getBytesOfAnsiEncoding","getString","byteLength","byteCal","getStringOfUtf8Encoding","byteUnicode","getStringofUnicodeEncoding","bufview","charcode","uint","uint16","byteUni","byte16","Save","fileName","buffer","mimeType","getMimeType","Blob","isMicrosoftBrowser","msSaveBlob","downloadLink","saveInternal","hasDownloadAttribute","download","dataUrl_1","URL","createObjectURL","revokeObjectURL","reader_1","FileReader","onloadend","readAsDataURL","StreamWriter","encoding","bufferBlob","bufferText","init","flush","enc","setBomByte","arrayUnicode","uint8","arrayUtf8","utf8","bufferArray","writeLine","arrLiteralCodes","Int16Array","arrLiteralLengths","arrDistanceCodes","arrDistanceLengths","CompressedStreamWriter","noWrap","pendingBuffer","pendingBufLength","pendingBufCache","pendingBufBitsInCache","bufferPosition","extraBits","currentHash","matchStart","matchLength","matchPrevAvail","blockStart","stringStart","lookAhead","totalBytesIn","inputOffset","inputEnd","windowSize","windowMask","hashSize","hashMask","hashShift","maxDist","checkSum","treeLiteral","CompressorHuffmanTree","treeDistances","treeCodeLengths","arrDistances","arrLiterals","stream","dataWindow","hashHead","hashPrevious","writeZLibHeader","compressedString","encode","inputBuffer","ChecksumCalculator","checksumUpdate","pendingBufferFlush","compressData","headerDate","pendingBufferWriteShortBytes","finish","success","fillWindow","canFlush","compressSlow","lookAheadCompleted","slideWindow","prevMatch","prevLen","discardMatch","matchPreviousBest","matchPreviousAvailable","huffmanIsFull","insertString","findLongestMatch","huffmanTallyLit","huffmanTallyDist","huffmanFlushBlock","lastBlock","more","subarray","updateHash","chainLen","niceLen","scan","bestEnd","bestLength","limit","stringEnd","scanEnd1","scanEnd","literal","codeFrequencies","dist","lc","huffmanLengthCode","dc","huffmanDistanceCode","stored","storedOffset","storedLength","buildTree","calculateBLFreq","blTreeCodes","codeLengths","huffCodeLengthOrders","opt_len","getEncodedLength","static_len","huffmanFlushStoredBlock","pendingBufferWriteBits","setStaticCodes","huffmanCompressBlock","huffmanReset","huffmanSendAllTrees","pendingBufferAlignToByte","pendingBufferWriteShort","pendingBufferWriteByteBlock","buildCodes","treeLength","rank","writeTree","literalLen","writeCodeToStream","bits","Uint32Array","pendingBufferFlushBits","isClose","writer","elementCount","minCodes","codeMinCount","codeFrequency","lengthCount","Int32Array","codeCount","codeLength","codes","lengths","lengthTemp","nextCode","bitsCount","bitReverse","reverseBits","blTree","maxCount","minCount","curLen","nextLen","maxRepeatCount","minRepeatCount","currentRepeatCount","currentCodeLength","codesCount","arrTree","n","pPos","nodesCount","iIndex","constructHuffmanTree","buildLength","lastVal","minDepth","numNodes","numLeafs","calculateOptimalCodeLength","iIncreasableLength","recreateTree","nodePtr","childPtr","childIndex","bitLength","checksum","checksum_uint","s1","s2","checkSumBitOffset","checksumIterationCount","checksumBase","crc32Table","ZipArchive","ZipArchiveItem","addDirectory","directoryName","zipArchive","saveAsBlob","blob","skipFileSave","zipData","dirLength","getCompressedData","constructZippedObject","isDirectory","writeZippedContent","crc32Value","compressedData","compressedSize","uncompressedDataSize","compressionType","calculateCrc32Value","readAsArrayBuffer","compressor","currentIndex","nextIndex","zipParts","extFileAttr","writeHeader","localHeader","centralDir","writeCentralDirectory","zipHeader","getModifiedTime","getModifiedDate","localDirLen","cenDirLen","getArrayBuffer","writeFooter","externalFileAttribute","centralLength","localLength","modTime","modiDate","itemName","InternalEnum","Dictionary","toStringFunction","nElements","toStr","pair","previousElement","keysArray","namesOfKeys","index1","pair1","valuesArray","namesOfValues","index2","pair2","containsKey","PdfName","stringStartMark","internalValue","isSaving6","position6","normalizeValue","status6","index6","escapeString","crossTable","newName","stringValue","len_1","ch","delimiters","replacements","Operators","forTest","endObj","slash","newLine","endStream","xref","trailer","startxref","eof","beginText","endText","appendLineSegment","fillEvenOdd","fillStroke","fillStrokeEvenOdd","appendbeziercurve","appendRectangle","saveState","restoreState","paintXObject","modifyCtm","modifyTM","setLineWidth","setLineCapStyle","setLineJoinStyle","setDashPattern","setFlatnessTolerance","closeStrokePath","closeFillStrokePath","setCharacterSpace","setWordSpace","setHorizontalScaling","setTextLeading","setFont","setRenderingMode","setTextRise","setTextScaling","setCoords","goToNextLine","setTextWithFormatting","setTextOnNewLine","selectcolorspaceforstroking","selectcolorspacefornonstroking","setrbgcolorforstroking","setrbgcolorfornonstroking","setcmykcolorforstroking","setcmykcolorfornonstroking","setgraycolorforstroking","setgraycolorfornonstroking","clipPathEvenOdd","endPath","setGraphicsState","comment","evenOdd","setMiterLimit","DictionaryProperties","pages","kids","resources","mediaBox","root","decodeParms","type1","baseFont","subtype","contents","procset","colorSpace","extGState","xObject","bitsPerComponent","dctdecode","blackIs1","predictor","deviceRgb","link","annot","uri","annots","ca","CA","xyz","dest","BM","flatedecode","bBox","form","PdfDictionary","dictionary","position7","primitiveItems","suffix","object","archive","encrypt","dictionaryProperties","freezeChanges","status7","isSaving7","index7","getArchive","setArchive","setEncrypt","modify","getEncrypt","freezer","bChanged","onBeginSave","beginSave","onTemplateBeginSave","pageBeginDrawTemplate","pageBeginSave","onBeginAnnotationSave","annotationBeginSave","onSectionBeginSave","saveEvent","sectionBeginSave","bRaiseEvent","saveItems","SaveSectionCollectionEventHandler","SaveAnnotationEventHandler","SaveSectionEventHandler","SaveTemplateEventHandler","PdfNumber","position5","status5","isSaving5","index5","intValue","floatToString","returnString","PdfArray","startMark","endMark","position9","clonedObject9","internalElements","tempArray","tempNumberArray","pdfNumber","status9","isSaving9","index9","pdfCrossTable","markedChange","tempElement","getItems","newArray","fromRectangle","tempElements","markChanged","removeAt","PdfStream","dicPrefix","dicSuffix","clonedObject2","bCompress","isImageStream","dataStream2","bCompress2","clearStream","internalStream","compressContent","sw","getCompressedString","addFilter","filterName","PdfReferenceHolder","isImage","bytesToString","byteArray","output","ForceEncoding","SourceType","PdfHorizontalAlignment","PdfString","bHex","position1","clonedObject1","bDecrypted","isParentDecrypted","isPacked","isFormField","isColorSpace","isHexString","status1","isSaving1","bytesToHex","stringMark","CrossTable","newString","hexStringMark","hexFormatPattern","PdfReference","objNumber","genNumber","index3","position3","status3","isSaving3","obj2","index4","position4","objectIndex","primitiveObject","status4","isSaving4","pdfReference","cTable","isSaving","getReference","PdfAction","pdfDictionary","PdfUriAction","uniformResourceIdentifier","PdfVerticalAlignment","PdfTextAlignment","TextRenderingMode","PdfLineJoin","PdfLineCap","PdfDashStyle","PdfFillMode","PdfColorSpace","PdfBlendMode","PdfGraphicsUnit","PdfGridImagePosition","PdfFontStyle","PdfColor","color1","color2","color3","color4","redColor","greenColor","blueColor","grayColor","gray","alpha","filled","maxColourChannelValue","cyanColor","magentaColor","yellowColor","blackColor","assignCMYK","red","green","blue","black","cyan","magenta","yellow","isEmpty","rgbToString","ifStroking","colour","rgbStrings","toArray","Rgb","grayStringsSroke","grayStringsFill","PointF","SizeF","RectangleF","arg1","arg2","arg3","arg4","pointf","sizef","PdfBrush","PdfSolidBrush","pdfColor","monitorChanges","brush","streamWriter","getResources","currentColorSpace","setColorAndSpace","resetChanges","PdfFontFamily","PdfFontType","PdfWordWrapType","PdfSubSuperScript","FontEncoding","LineType","PdfStringFormat","scalingFactor","internalLineLimit","wordWrapType","Word","verticalAlignment","Top","isRightToLeft","internalCharacterSpacing","internalWordSpacing","leading","clip","pdfSubSuperScript","internalParagraphIndent","firstLineIndent","trailingSpaces","isNoClip","initialLineIndent","StringTokenizer","textValue","currentPosition","getCharsCount","numSymbols","readLine","text2","peekLine","readWord","peekWord","word","read","peek","spaces","whiteSpacePattern","PdfStringLayouter","isOverloadWithPosition","layout","arg5","arg6","arg7","clientSize","doLayout","rectSize","pageHeight","reader","PdfStringLayoutResult","lineResult","lines","lineIndent","getLineIndent","layoutLine","numSymbolsInserted","returnedValue","copyToResult","numInserted","finalizeResult","firstLine","paragraphIndent","getLineHeight","lineSpacing","getLineWidth","layoutLineHeight","lineType","FirstParagraphLine","addToLineResult","NewLineBreak","builder","curLine","curIndent","isSingleWord","curLineWidth","getWrapType","Character","ln","LayoutBreak","LastParagraphLine","layoutLines","breakType","LineInfo","actualSize","lineLimit","expHeight","trimLine","size_1","textRemainder","empty","ObjectStatus","PdfFont","Regular","setStyle","metrics","getHeight","Bold","Italic","Strikeout","Underline","fontMetrics","pdfFontInternals","measureString","temparg2","layoutArea","temparg3","equalsTo","equalsToFont","getInternals","setInternals","internals","applyFormatSettings","realWidth","characterSpacing","wordSpacing","charSizeMultiplier","syncObject","PdfWriter","pdfDocument","overload","tempOverload","ObjectType","PdfMainObjectCollection","objectCollections","mainObjectCollection","primitiveObjectCollection","isNew","objInfo","ObjectInfo","Registered","lookFor","wasNew","trySetReference","found","setReference","pdfObject","objectCollectionIndex","PdfDocumentBase","isStreamCopied","PdfDocument","objects","currentSavingObject","pdfCatalog","setMainObjectCollection","setCrossTable","setCatalog","catalog","filename","SW","encoding_1","SW_1","blobData","docSave","PdfPageOrientation","PdfCatalog","sections","tempDictionaryProperties","PdfCrossTable","maxGenNumIndex","objectCount","merging","internalTrailer","pdfObjects","saveHead","mappedReferences","markTrailerReferences","saveObjects","saveCount","xrefPos","registerObject","saveSections","saveTrailer","saveTheEndess","objectCollection","prevXRef","objectNum","prepareSubsection","saveSubsection","Free","generation","isFree","addOffsetLength","addGenNumberLength","generateFileVersion","bNew","getSubReference","objnumber","nextObjNumber","tempIndex","tempkey","tempvalue","bForceNew","saveIndirectObject","currentSavingObj","doSaveObject","free","RegisteredObject","dereference","tempOffset","offsetNumber","tempReference","Normal","PdfPageSize","letter","note","legal","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","a10","b0","b1","b2","b3","b4","b5","archE","archD","archC","archB","archA","flsa","halfLetter","letter11x17","ledger","PdfPageRotateAngle","PdfNumberStyle","PdfDockStyle","PdfAlignmentStyle","TemplateType","ImageFormat","PdfMargins","pdfMargin","setMargins","leftMargin","topMargin","rightMargin","bottomMargin","margin1","margin2","margin3","margin4","PdfPageSettings","margins","pageMargins","rotateAngle","RotateAngle0","pageOrientation","Portrait","pageOrigin","isRotation","updateSize","Landscape","getActualSize","PdfStreamWriter","dictionaryName","writeOperator","executeObject","useEvenOddRule","fillStrokePath","fillPath","closeFillPath","textScaling","strokePath","restoreGraphicsState","saveGraphicsState","startNextLine","writePoint","setLeading","setTextRenderingMode","renderingMode","setCharacterSpacing","charSpacing","setWordSpacing","showNextLineText","checkTextParam","writeText","setColorSpace","temparg1","op","matrix","opcode","updateY","string","writeComment","forStroking","setLineDashPattern","patternOffset","setLineDashPatternHelper","tempPattern","miterLimit","setLineCap","lineCapStyle","setLineJoin","lineJoinStyle","PdfPen","dashOffsetValue","penDashPattern","pdfDashStyle","Solid","pdfLineCap","pdfLineJoin","penWidth","internalMiterLimit","setBrush","Custom","Dash","Dot","DashDot","DashDotDot","sBrush","pdfBrush","currentPen","dashControl","lineJoin","lineCap","pen","getPattern","dashOffset","dashPattern","PdfTransformationMatrix","radDegFactor","transformationMatrix","Matrix","multiply","degreesX","degRadFactor","metrixElements","tempMatrix","dispose","ProcedureSets","pdf","imageB","imageC","imageI","TemporaryDictionary","mKeys","mValues","ReferenceError","PdfTransparency","PdfAutomaticFieldInfoCollection","automaticFieldsInformation","fieldInfo","automaticFields","PdfGraphicsElement","drawHelper","graphics","bNeedSave","gState","translateTransform","drawInternal","PdfAutomaticField","internalBounds","internalTemplateSize","internalFont","internalBrush","internalPen","internalStringFormat","performDrawHelper","scalingX","scalingY","getFont","stringFormat","draw","location_1","PdfAutomaticFieldInfo","getBrush","defaultFont","getPageFromGraphics","currentPage","pageNumberFieldLocation","pageNumberField","PdfGraphics","previousTextRenderingMode","Fill","previousCharacterSpacing","previousWordSpacing","previousTextScaling","procedureSets","isNormalRender","isUseFontSize","isItalic","isEmfTextScaled","isEmf","isEmfPlus","isBaselineFormat","emfScalingFactor","colorSpaceChanged","isPointOverload","currentColorSpaces","isImageOptimized","graphicsState","istransparencySet","internalAutomaticFields","startCutIndex","pdfStreamWriter","canvasSize","pdfStringLayoutResult","internalMediaBoxUpperRightBound","clipBounds","pageLayer","bStateSaved","currentBrush","currentFont","bCSInitialized","currentStringFormat","requireProcedureSet","drawPdfTemplate","bNeedScale","getTranslateTransform","getScaleTransform","getName","newLocation","drawString","arg8","arg9","temparg4","temparg5","temparg6","temparg7","temparg8","temparg9","checkCorrectLayoutRectangle","drawStringLayoutResult","stateControl","Winding","isPen","isBrush","isEvenOdd","Alternate","physicalDimension","setResources","resource","getLineBounds","lineIndex","layoutRectangle","lineCount","getTextVerticalAlignShift","hShift","getHorizontalAlignShift","shouldJustify","layoutedRectangle","Center","Right","lineAlignment","Middle","Bottom","setLayer","pageSave","performDraw","applyStringSettings","horizontalScalingFactor","subSuperScript","SubScript","getDescent","getAscent","resultHeight","remainingString","drawLayoutResult","underlineStrikeoutText","getNextPage","section","getPages","setClip","tm","getTextRenderingMode","cs","ws","textHeight","boundsHeight","vAlignShift","lineInfo","hAlignShift","drawAsciiLine","justifyLine","boundsWidth","hasWordSpacing","whitespacesCount","wordSpace","initializeCoordinates","justifyStyle","Justify","goodWidth","hasSpaces","goodLineBreakStyle","underline","strikeout","linePen","createUnderlineStikeoutPen","vShift","underlineYOffset","strikeoutYOffset","FillStroke","Stroke","ClipFlag","layoutBounds","firstParagraphLine","Left","lastDocumentCS","lastGraphicsCS","initCurrentColorSpace","penControl","brushControl","fontControl","colorspace","curSubSuper","prevSubSuper","fontName","setTransparency","trasparencies","transp","td","TransparencyData","name_3","clipTranslateMargins","clipArea","rotateTransform","getRotateTransform","mediaBoxUpperRightBound","cropBox","PdfGraphicsState","textRenderingMode","doRestoreState","pathTypesValuesMask","transparencyObject","GetResourceEventHandler","internalTextRenderingMode","internalTextScaling","pdfColorSpace","pdfGraphics","pdfPen","pdfFont","alphaPen","alphaBrush","blendMode","PdfPageLayer","streamClipPageTemplates","sublayer","contentLength","pdfPage","clipPageTemplates","layerid","layerName","initializeGraphics","PdfPageLayerCollection","sign","oPage","gr","sc","isSame","origin","getActualBounds","pageSettings","PdfCollection","parentLayerCount","optionalContent","PdfPageBase","lPage","parseLayers","firstArgument","secondArgument","addLayer","insertLayer","loadedPage","saveStream","restoreStream","saveData","PdfTemplate","writeTransformation","tempSize","templateSize","PdfResources","addType","addSubType","ByteArray","mPosition","dataView","DataView","readByte","getBuffer","writeFromBase64String","base64","encodedString","chr1","chr2","chr3","enc2","enc3","keyStr","resultIndex","totalLength","PdfBoolean","objectStatus","saving","boolToStr","PdfLayoutType","ImageDecoder","mFormat","Unknown","mbitsPerComponent","mStream","mHeight","mWidth","mImageData","internalBuffer","checkIfJpeg","Jpeg","parseJpegImage","imgData","mJpegHeader","getImageDictionary","imageData","imageStream","decodedString","imageDataAsNumberArray","compress","getColorSpace","getDecodeParams","decodeParams","mPngHeader","GIF_HEADER","BMP_HEADER","PdfUnitConverter","dpi","updateProportionsHelper","convertUnits","convertFromPixels","convertToPixels","proportions","pixelPerInch","horizontalResolution","verticalResolution","PdfImage","imageWidth","imageHeight","imagePhysicalDimension","getPointSize","dpiX","dpiY","ucX","ucY","ptWidth","Pixel","ptHeight","PdfBitmap","imageStatus","loadImage","initializeAsync","decoder","baseDictionary","getNames","primitive","names","sName","generateName","pdfNames","fonts","procedureSetName","procSets","removeFont","Guid","getNewGuidString","xobjects","savable","transDic","parentXObjects","hasSameImageStream","oldReference","randomString","randomNumber","defLayerIndex","modified","pageDictionary","pdfSection","defaultLayerIndex","layerCollection","PdfAnnotationCollection","alreadyExistsAnnotationError","missingAnnotationException","internalAnnotations","lists","annotation","doAdd","setPage","layoutResult","lastPosition","setColor","colours","PdfPage","annotationCollection","defaultLayer","annotations","setSection","resetProgress","isProgressOn","getClientSize","doc","drawPageTemplates","containsTemplates","backLayer","drawTemplates","frontLayer","PageAddedEventArgs","PdfSectionPageCollection","PdfDocumentTemplate","leftTemplate","checkElement","topTemplate","rightTemplate","bottomTemplate","evenLeft","evenTop","evenRight","evenBottom","oddLeft","oddTop","oddRight","oddBottom","getLeft","isEven","EvenLeft","OddLeft","getTop","EvenTop","OddTop","getRight","EvenRight","OddRight","getBottom","EvenBottom","OddBottom","pageCollectionIndex","PdfSectionTemplate","rightValue","bottomValue","stampValue","PdfSection","pageAdded","pdfPages","initialSettings","sectionCollection","pagesReferences","pageTemplate","pagesCollection","pointToNativePdf","setPageSettings","PageSettingsState","pageCount","foreground","documentHeaders","getDocumentTemplates","documentTemplates","templates","applyDocumentTopTemplate","applyDocumentBottomTemplate","applyDocumentLeftTemplate","applyDocumentRightTemplate","page_1","checkPresence","pageAddedMethod","rh","onPageAdded","document_1","getLeftIndentWidth","getTopIndentHeight","getRightIndentWidth","getBottomIndentHeight","includeMargins","templateWidth","docTemplateWidth","templateHeight","docTemplateHeight","temproaryPages","applyPageSettings","parentSettings","PdfSectionCollection","rotateFactor","drawTemplatesHelper","pageRotate","sectionCount","pdfSectionCollection","section_1","checkSection","countPages","PdfDocumentPageCollection","pdfPageCollectionIndex","previousPageOrientation","getLastSection","getPageByIndex","getPage","sectionStartIndex","numPages","PdfCacheCollection","referenceObjects","pdfFontCollection","createNewGroup","isMerging","defaultMargin","documentPageCollection","cacheCollection","defaultStandardFont","PdfStandardFont","Helvetica","Cmyk","GrayScale","checkPagesPresence","PdfFontMetrics","lineGap","ascent","descent","getLineGap","clearTypeFonts","clearTypeFontCollection","subScriptSizeFactor","SuperScript","superscriptSizeFactor","widthTable","WidthTable","internalWidthTable","StandardWidthTable","widths","PdfStandardFontMetricsFactory","getMetrics","getHelveticaMetrics","Courier","getCourierMetrics","TimesRoman","getTimesMetrics","Symbol","getSymbolMetrics","ZapfDingbats","getZapfDingbatsMetrics","subSuperScriptFactor","helveticaBoldItalicAscent","helveticaBoldItalicDescent","postScriptName","helveticaBoldItalicName","arialBoldWidth","helveticaBoldAscent","helveticaBoldDescent","helveticaBoldName","helveticaItalicAscent","helveticaItalicDescent","helveticaItalicName","arialWidth","helveticaAscent","helveticaDescent","helveticaName","courierBoldItalicAscent","courierBoldItalicDescent","courierBoldItalicName","fixedWidth","courierBoldAscent","courierBoldDescent","courierBoldName","courierItalicAscent","courierItalicDescent","courierItalicName","courierAscent","courierDescent","courierName","timesBoldItalicAscent","timesBoldItalicDescent","timesBoldItalicName","timesRomanBoldItalicWidths","timesBoldAscent","timesBoldDescent","timesBoldName","timesRomanBoldWidth","timesItalicAscent","timesItalicDescent","timesItalicName","timesRomanItalicWidth","timesAscent","timesDescent","timesName","timesRomanWidth","symbolAscent","symbolDescent","symbolName","symbolWidth","zapfDingbatsAscent","zapfDingbatsDescent","zapfDingbatsName","zapfDingbatsWidth","fontFamilyPrototype","encodings","pdfFontFamily","checkStyle","initializeInternals","convert","getCharWidthInternal","stFont","fontFamilyEqual","lineReducer","styleEqual","createInternals","WinAnsiEncoding","charOffset","PdfAnnotation","textBrush","textFont","internalColor","darkness","nativeRectangle","initialHeight","tempLoacation","PdfLinkAnnotation","PdfActionLinkAnnotation","pdfAction","getSetAction","PdfDocumentLinkAnnotation","pdfDestination","PdfLayoutBreakType","PdfDestinationMode","ElementLayouter","layoutElement","isBoundsChanged","layoutInternal","PdfLayoutFormat","baseFormat","break","paginateBounds","boundsSet","usePaginateBounds","layoutType","Paginate","FitPage","layoutPaginateBounds","PdfLayoutParams","layoutFormat","PdfLayoutResult","PdfLayoutElement","bEmbedFonts","TextLayouter","currentBounds","pageResult","TextPageLayoutResult","remainder","layoutOnPage","getLayoutResult","PdfTextLayoutResult","lastLineBounds","checkCorrectBounds","stringResult","textFinished","FitElement","PdfTextWebLink","getTextPageBounds","verticalShift","remainderText","lastLineTextBounds","PdfTextElement","hasPointOverload","isPdfTextElement","stringLayoutResult","previousPosition","calculateResultBounds","lineSize","startPosition","PdfUriAnnotation","pdfUriAction","uriAction","uniformResourceLocator","uriAnnotation","recalculateBounds","defaultBorder","previousFontStyle","calculateBounds","drawMultipleLineWithPoint","drawMultipleLineWithBounds","PdfNumbersConvertor","intArabic","numberStyle","Numeric","LowerLatin","arabicToLetter","LowerRoman","arabicToRoman","UpperLatin","UpperRoman","retval","generateNumber","arabic","convertToLetter","appendChar","magnitude","numberstring","letterLimit","acsiiStartIndex","PdfTemplateValuePair","pdfTemplate","PdfMultipleValueField","drawLocation","PdfPageNumberField","internalNumberStyle","internalGetValue","PdfCompositeField","internalText","automaticField","PdfSingleValueField","painterGraphics","PdfPageCountField","PdfBorderOverlapStyle","PdfDestination","destinationMode","Location","destinationLocation","initializePrimitive","simplePage","FitToPage","PdfPageTemplateElement","dockStyle","resetAlignment","alignmentStyle","setAlignment","isForeground","templateType","updateDocking","dock","canBeSet","TopLeft","MiddleLeft","BottomLeft","TopCenter","TopRight","MiddleRight","BottomRight","BottomCenter","MiddleCenter","getAlignmentBounds","getDockBounds","getSimpleAlignmentBounds","getTemplateAlignmentBounds","actualBounds","getSimpleDockBounds","getTemplateDockBounds","PdfBorders","defaultBorderPenLeft","dashStyle","defaultBorderPenRight","defaultBorderPenTop","defaultBorderPenBottom","leftPen","rightPen","topPen","bottomPen","PdfPaddings","leftPad","rightPad","topPad","bottomPad","PdfHorizontalOverflowType","PdfGridStyleBase","gridBackgroundBrush","gridTextBrush","gridTextPen","gridFont","PdfGridStyle","gridBorderOverlapStyle","Overlap","bAllowHorizontalOverflow","gridHorizontalOverflowType","LastPage","gridCellSpacing","gridCellPadding","PdfGridCellStyle","gridCellBorders","default","PdfGridRowStyle","gridRowBackgroundBrush","setBackgroundBrush","getCell","backgroundBrush","gridRowTextBrush","setTextBrush","gridRowTextPen","setTextPen","textPen","gridRowFont","gridRowBorder","setBorder","borders","setParent","Theme","PdfGridCell","cellWidth","cellHeight","finsh","rowSpanRemainingHeight","gridRowSpan","colSpan","gridRow","internalIsCellMergeContinue","internalIsRowMergeContinue","internalIsCellMergeStart","internalIsRowMergeStart","remaining","objectValue","rowSpanExists","cellStyle","measureHeight","columnSpanExists","isComplete","measureWidth","layouter","getTextFont","webLink","cellPadding","cellSpacing","drawCellBackground","getBackgroundBrush","adjustContentLayoutArea","returnBounds","rowSpan","cancelSubsequentSpans","allowHorizontalOverflow","rowOverflowIndex","adjustOuterLayoutArea","getTextPen","getTextBrush","strFormat","getStringFormat","innerLayoutArea","imageBounds","drawCellBorders","borderOverlapStyle","Inside","p1","p2","Square","currentColIndex","columnSpan","totalWidth","compWidth","getColumn","currentRowIndex","rows","rowCollection","totalHeight","getHeader","getRow","rowMergeComplete","calculateWidth","cellIndex","PdfGridCellCollection","tempcell","PdfGridColumn","columnWidth","isCustomWidth","PdfGridColumnCollection","internalColumns","measureColumnsWidth","initialWidth","isPageWidth","getDefaultWidths","subFactor","PdfGridRow","gridRowOverflowIndex","isRowHeightSet","isRowMergeComplete","pdfGrid","bRowSpanExists","gridCells","rowStyle","gridRowBreakHeight","bColumnSpanExists","PdfGridRowCollection","addRow","temprow","PdfGridHeaderCollection","PdfGridLayoutFormat","PdfGrid","gridSize","isRearranged","pageBounds","listOfNavigatePages","columnRanges","breakRow","beginCellDraw","endCellDraw","beginPageLayout","endPageLayout","bRepeatHeader","gridColumns","gridRows","gridHeaders","gridInitialWidth","gridStyle","pageWidth","childGrid","measure","isGridLayouter","setSpan","gridLocation","currentCellIndex","rowCount","colCount","isCellMergeContinue","isRowMergeContinue","isCellMergeStart","isRowMergeStart","getFormat","currentPageBounds","currentGraphics","isChildGrid","hType","horizontalOverflowType","determineColumnDrawRanges","rowWidth","internalWidth","internalHeight","isCorrectWidth","isCorrectHeight","startColumn","endColumn","cellWidths","availableWidth","subWidths","layoutedPages","startPage","cellBounds","cellStartIndex","cellEndIndex","returnObject","raiseBeforePageLayout","drawRow","repeatRow","originalHeight","repeatRowIndex","rowResult","isFinish","OnePage","repeatHeader","i_2","maximumCellBoundsWidth","rowLayoutBoundsWidth","NextPage","reArrangePages","raisePageLayouted","nextPage","pageindex","PdfGridLayoutResult","ReCalculateHeight","currentRow","raiseBeginPageLayout","PdfGridBeginPageLayoutEventArgs","startRowIndex","PdfGridEndPageLayoutEventArgs","raiseEndPageLayout","result_1","RowLayoutResult","rowHeightWithSpan","maxSpan","currRowIndex","rowMaxHeight","nextRow","calculatedHeight","rowBreakHeight","location_2","cancelSpans","CheckIfDefaultFormat","cellstyle","RaiseBeforeCellDraw","RaiseAfterCellDraw","defaultFormat","measureTrailingSpaces","noClip","rowIndex","raiseBeginCellDraw","PdfGridBeginCellDrawEventArgs","raiseEndCellDraw","PdfGridEndCellDrawEventArgs","GridCellEventArgs","gridRowIndex","gridCellIndex","gridBounds","bSkip","PdfCancelEventArgs","isCancel","BeginPageLayoutEventArgs","EndPageLayoutEventArgs","nextPdfPage","startRow","layoutedBounds","bIsFinished","axisLabelFont","axisTitleFont","chartTitleFont","crosshairLabelFont","tooltipLabelFont","legendLabelFont","stripLineLabelFont","Connector","Font","Border","ChartArea","Margin","Indexes","CornerRadius","seriesIndex","EmptyPointSettings","TooltipSettings","Mean","verticalStandardMean","verticalSquareRoot","horizontalStandardMean","horizontalSquareRoot","verticalMean","horizontalMean","PolarArc","currentXPosition","CustomizeOption","StackValues","startValues","endValues","RectOption","CircleOption","PolygonOption","Thickness","PointData","lierIndex","AccPointData","ControlPoints","controlPoint1","controlPoint2","DoubleRange","mStart","mEnd","Double","calculateNumericNiceInterval","actualDesiredIntervalsCount","desiredIntervals","intervalDivs","getActualRange","initializeDoubleRange","actualRange","doubleRange","POSITIVE_INFINITY","NEGATIVE_INFINITY","calculateRangeAndInterval","calculateRange","applyRangePadding","calculateVisibleLabels","setRange","series_1","paddingInterval","rangePadding","findMinMax","yMin","yMax","xMax","getRangePadding","findAdditional","findNormal","updateActualRange","calculateVisibleRange","zoomPosition","enableAutoIntervalOnZooming","triggerRangeRender","tempInterval","isCustom","triggerLabelRender","getMaxLabelWidth","isStack100","legendRender","textRender","pointRender","seriesRender","axisLabelRender","axisRangeCalculated","axisMultiLabelRender","tooltipRender","chartMouseMove","chartMouseClick","chartMouseLeave","chartMouseDown","chartMouseUp","zoomComplete","dragComplete","annotationRender","ChartAnnotationSettings","LabelBorder","MultiLevelCategories","StripLineSettings","MultiLevelLabels","Row","nearSizes","farSizes","computeSize","findTickSize","crossInAxis","findLabelSize","lineStyle","MajorGridLines","MinorGridLines","AxisLine","MajorTickLines","MinorTickLines","CrosshairTooltip","Axis","axisBottomLine","crossAt","updatedRect","multiLevelLabelHeight","crossAxis","tickPosition","isInside","majorTickLines","innerPadding","titleSize","labelSize","maxLabelSize","placeNextToAxisLine","findDifference","updateCrossValue","baseRange","maximumLabels","argsData","VisibleLabels","pointX","previousEnd","isIntersect","labelIntersectAction","rotatedLabel","edgeLabelPlacement","findMultiRows","multiLevelLabelModule","multiLevelLabels","getMultilevelLabelsHeight","currentX","store","getModule","baseModule","originalText","CartesianAxisLayoutPanel","chartModule","measureAxis","seriesClipRect","initialClipRect","leftSize","rightSize","topSize","bottomSize","measureRowAxis","measureColumnAxis","calculateAxisSize","refreshAxis","calculateRowSize","arrangeAxis","measureDefinition","computedHeight","calculateColumnSize","computedWidth","definition","axis_1","nearCount","farCount","len_2","computedTop","plotOffset","len_3","len_4","computedLeft","actualIndex","axisCollections","axis_2","verticalAxes","getActualRow","pushAxis","horizontalAxes","getActualColumn","crossesAt","isTransposed","crossesInAxis","updateCrossAt","primaryYAxis","dateFormatter","labels","axisCollection","actualLength","columnIndex","rowTop","remainingHeight","columnLeft","remainingWidth","renderAxes","outsideElement","axisElement","axisLineElement","findAxisPosition","drawAxisLine","majorGridLines","drawXAxisGridLine","drawXAxisLabels","drawXAxisBorder","drawXAxisTitle","drawYAxisGridLine","drawYAxisLabels","drawYAxisBorder","drawYAxisTitle","drawBottomLine","isRow","definitionName","optionsLine","plotX","plotY","stroke-dasharray","minorDirection","pointY","majorGrid","majorTick","minorGird","minorTick","tickSize","axisLineSize","ticksbwtLabel","isBorder","minorGridLines","minorTickLines","minorTicksPerInterval","drawAxisMinorLine","renderGridLine","renderTickLine","chartArea","elementSize","isLabelInside","isOpposed","createZoomingLabel","gap","endY","labelBorder","endX","createAxisBorderElement","renderYAxisMultiLevelLabels","description","labelIndex","logStart","coor","isTickInside","logInterval","logPosition","ticksX","ticksY","findLogNumeric","labelPadding","rotateSize","diffHeight","yLocation","intervalLength","islabelInside","anglePadding","findAxisLabel","axisRect","renderXAxisMultiLevelLabels","borderElement","findParentNode","zoomElement","ChartData","currentPoints","previousPoints","getData","drawType","isRectSeries","marker","mouseX","mouseY","getRectPoint","isSelected","selectionMode","selectionModule","rectPoints","fromCenterX","fromCenterY","clickAngle","distanceFromCenter","arcAngle","regionData","regions","chartAreaType","checkRegionContainsPoint","regionRect","region","getClosest","xData","xData_1","getClosestX","DataLabelSettings","MarkerSettings","Points","symbolLocations","Trendline","setDataSource","trendLineModule","initDataSource","visibleSeriesCount","ErrorBarCapSettings","ChartSegment","ErrorBarSettings","SeriesBase","currentViewData","processJsonData","textMappingName","Series","dataLabel","processWaterfallData","sizeMax","getSeriesType","dataPoint","pushCategoryData","pushData","setEmptyPoint","isArea","findSplinePoint","xName","volume","pointColorMapping","findVisibility","emptyPointSettings","yData","getAverage","yValues","setXYMinMax","setHiloMinMax","isIndexed","refreshDataManager","dataModule","generateQuery","dataManagerSuccess","isRemoteData","recordsCount","refreshChart","refreshTechnicalIndicator","trendlines","refreshBound","drawPoints","delayedAnimation","refreshAxisLabel","findSeriesCollection","isStack","rowSeries","_d","_e","_f","_g","rectSeriesInChart","calculateStackedValue","isStacking100","columnItem","calculateStackingValues","stackingGroup","lastValue","lastPositive","lastNegative","frequencies","findFrequencies","seriesCollection_1","pointsLength","percent","stackedValues","seriesCollection_2","renderSeries","createSeriesElements","errorBarModule","dataLabelModule","appendSeriesElement","seriesElements","performAnimation","elementId","explodeValue","markerHeight","markerWidth","clipRectElement","symbolElement","seriesElement","clip-path","errorBarElement","dataLabelElements","shapeElement","animateSeries","doAnimation","doErrorBarAnimation","markerRender","doMarkerAnimation","doDataLabelAnimation","setPointColor","setBorderColor","Data","initDataManager","MarkerExplode","mouseMoveHandler","crosshair","markerMove","startMove","explodeSeries","shared","chartAxisLayoutPanel","pointData","chartSeries","enableTooltip","removeHighlightedMarker","markerExplode","drawTrackBall","seriesMarker","symbolId","borderColor","colorValue","Marker","renderMarker","shapeOption","isBoxPlot","markerClipRect","getRangeLowPoint","markerElements","incFactor","lowPoint","LegendSettings","BaseLegend","columnCount","pageButtonSize","pageXCollections","maxColumns","isTrimmed","legend","legendSettings","legendID","isChartControl","calculateLegendBounds","legendBounds","library","getLegendBounds","getLocation","setBounds","maxItemHeight","legendHeight","legendWidth","alignLegend","legendSize","renderLegend","firstLegend","findFirstLegendPosition","legendCollections","shapeHeight","legendGroup","legendTranslateGroup","createLegendElements","legendSeriesGroup","shapeWidth","textOptions","totalPages","textPadding","shapePadding","previousLegend","legendOption","generateId","getRenderPoint","renderSymbol","renderText","toggleVisibility","isPaging","renderPagingElements","legendCollection","legendCollection_1","legendItemsGroup","clippath","symbolColor","markerShape","symbolOption","markerVisibility","fontcolor","textStyle","textOption","paginggroup","iconSize","clipPathHeight","pageTextElement","translatePage","pagingText","pageNumber","changePage","pageText","clearTooltip","LegendOptions","TechnicalIndicator","targetSeries","ExportUtils","resizeTo","screen","availWidth","availHeight","htmlContent","getHTMLContent","export","isDownload","svgData","XMLSerializer","serializeToString","triggerDownload","image_1","ctx_1","imageString","msSaveOrOpenBlob","msToBlob","bubbles","cancelable","CrosshairSettings","ZoomSettings","Chart","initPrivateVariable","refreshDefinition","tooltipModule","createChartSvg","calculateAreaType","calculateVisibleSeries","initTechnicalIndicators","initTrendLines","calculateVisibleAxis","getLocalizedLabel","legendModule","getLegendOptions","isCalculateStacking","rectCount","renderElements","renderBorder","renderTitle","renderAreaBorder","renderSeriesElements","applyZoomkit","performSelection","setSecondaryElementPosition","renderAnnotation","yAxisElements","stripLineModule","renderStripLine","initializeModuleElements","dataLabelCollections","indicators","indicatorElements","hasTrendlines","trendLineElements","isTrendline","tooltipDiv","initializeIndicator","initializeTrendLine","appendElementsAfterSeries","indicator","createIndicatorElements","getTrendLineElements","isZoomed","enablePan","performedUI","applyZoomToolkit","annotationModule","renderAnnotations","selectedDataIndexes","invokeSelection","redrawSelection","initializeDataModule","techIndicator","titleHeight","trendIndex","trendLine","sourceIndex","initSeriesCollection","yAxisName","polarSeriesModule","radarSeriesModule","isPanning","isAxisZoomed","series_2","initAxis","isSeries","seriesName","palettes","addSeries","removeSeries","removeSvg","stopEvent","chartOnMouseDown","mouseMove","mouseEnd","chartOnMouseClick","chartRightClick","mouseLeave","chartResize","longPress","crosshairModule","pointerType","zooming","disableScroll","enableSelectionZooming","enableMouseWheelZooming","enablePinchZooming","msTouchAction","msContentZooming","msUserSelect","webkitUserSelect","isOrientation","setMouseXY","touchArg","chartOnMouseMove","chartOnMouseLeave","isChartDrag","pointClick","triggerPointEvent","pointMove","titleTooltip","axisTooltip","texts","categories","mouseDownX","previousMouseMoveX","mouseDownY","previousMouseMoveY","isDoubleTap","threshold","chartOnMouseUp","setLocaleConstants","defaultLocalConstants","setAnnotationValue","annotationIndex","processAnnotation","ZoomIn","ZoomOut","Pan","Reset","ResetZoom","enableAnnotation","errorBarVisible","dataLabelEnable","isLegend","currentModule","findIndicatorModules","findTrendLineModules","findAxisModule","datetimeEnabled","categoryEnabled","logarithmicEnabled","striplineEnabled","dateTimeCategoryEnabled","multiLevelEnabled","axisCollections_1","findStriplineVisibility","stripLines","macdEnable","bandEnable","isLine","isSpline","markerEnable","trendline","striplines","striplines_1","removeLength","pinchTarget","definitions","definitions_1","axisChange","refreshBounds","crosshairTooltip","isMultiSelect","NiceInterval","calculateDateTimeNiceInterval","totalDays","actualIntervalType","intervalType","getSkeleton","DateTime","datetimeInterval","getYear","getHour","endMinute","endSecond","endYear","endMonth","endDay","increaseDateTimeInterval","alignRangeStart","skeletonType","sDate","intervalSize","sResult","Category","Logarithmic","logEnd","calculateLogNiceInterval","axisFormat","isCustomFormat","DateTimeCategory","axisSize","sameInterval","sameValue","StripLine","measureStripLine","stripline","actualStart","actualEnd","getFromTovalue","startFromAxis","findValue","getToValue","striplineGroup","axes_1","renderRectangle","textMid","ty","tx","getTextStart","horizontalAlignment","invertAlignment","xy","LineBase","improveChartPerformance","tempPoints","xVisibleRange","yVisibleRange","seriesPoints","areaBounds","xTolerance","yTolerance","prevXValue","prevYValue","xVal","yVal","seriesPoints_1","currentPoint_1","getLineDirection","firstPoint","secondPoint","getPointLocation","point1","point2","appendLinePath","pathElement","doProgressiveAnimation","strokeDashArray","pathLength","getTotalLength","storePointLocation","doLinearAnimation","elementHeight","elementWidth","xCenter","yCenter","LineSeries","prevPoint","getCoordinate","visiblePoints","visiblePoints_1","isClosed","ColumnBase","getSideBySideInfo","enableSideBySidePlacement","getSideBySidePositions","seriesSpacing","columnSpacing","pointSpacing","getRectangle","findRectPosition","vSeries","updateSymbolLocation","updateYRegion","updateXRegion","calculateRoundedRectPath","topLeft","topRight","bottomLeft","bottomRight","rectElements","animateRect","isPlot","ColumnSeries","sideBySideInfo","pointColumn","MultiColoredSeries","getAreaPathDirection","startPath","getAreaEmptyDirection","isXSegment","segments","segment","getAxisValue","sortSegments","chartSegments","segmentAxis","access","applySegmentAxis","includeSegment","createClipRect","isX","isRequired","startPointLocation","endPointLocation","segmentValue","AreaSeries","currentXValue","BarSeries","pointBar","PolarRadarPanel","drawYAxisLine","vector","vector2","minorGirdLine","xLoc","yLoc","tickXSize","tickYSize","labelText","firstLabelX","lastLabelX","textAnchor","tickOptions","gridOptions","PolarSeries","columnDrawTypeRender","itemCurrentXPos","pointStartAngle","pointEndAngle","dStartX","dStartY","dEndX","dEndY","sumofYValues","rangeInterval","getSeriesPosition","doPolarRadarAnimation","animateElement","chartcenterX","chartcenterY","RadarSeries","StackingBarSeries","stackedValue","pointStack","CandleSeries","centerRegion","tickRegion","getPathString","triggerPointRenderEvent","drawCandle","getCandleColor","enableSolidCandles","bullFillColor","bearFillColor","topRect","midRect","candleElement","StackingColumnSeries","StepLineSeries","pathOptions","lineLength","StepAreaSeries","StackingAreaSeries","polarAreaType","lineDirection","stackedvalue","previousSeries","getPreviousSeries","ScatterSeries","RangeColumnSeries","rangePoint","WaterfallSeries","originValue","prevEndValue","currentEndValue","prevRegion","intermediateOrigin","isSum","isIntermediateSum","totalSum","isSumIndex","currentRegion","prevLeft","currentLeft","prevBottom","currentBottom","connector","intermediateSumIndexes","sumIndexes","summaryFillColor","negativeFillColor","intermediateSum","sumIndex","HiloSeries","HiloOpenCloseSeries","highLowRect","updateTickRegion","open_1","close_1","drawHiloOpenClosePath","RangeAreaSeries","command","closed","highPoint","closeRangeAreaPath","BubbleSeries","segmentRadius","percentChange","maxRadius","minRadius","maximumSize","bubblePoint","SplineBase","splinePoints","filterEmptyPoints","findSplineCoefficients","getPreviousIndex","getControlPoints","getNextIndex","coefficient1","coefficient2","coefficient3","dy1","dy2","interPoint","slopeLength","ySpline","ySplineDuplicate","dx","dy","cardinalSplineTension","splineType","ySpline1","ySpline2","ySplineDuplicate1","ySplineDuplicate2","deltaX2","SplineSeries","pt1","pt2","bpt1","bpt2","SplineAreaSeries","controlPt1","controlPt2","startPoint1","TechnicalAnalysis","signalLine","setSeriesProperties","indicatorElement","getDataPoint","sourcePoint","macdPositiveColor","macdNegativeColor","getRangePoint","setSeriesRange","SmaIndicator","smaPoints","validData","signalSeries","period","EmaIndicator","emaPoints","prevAverage","TmaIndicator","tmaPoints","signalSeries_1","validData_1","smaValues","k_1","AccumulationDistributionIndicator","sourceSeries","adPoints","calculateADPoints","AtrIndicator","calculateATRPoints","highLow","highClose","lowClose","trueRange","MomentumIndicator","upperLine","upperCollection","signalCollection","upperSeries","RsiIndicator","showZones","lowerLine","lowerCollection","overBought","overSold","prevClose","gain","loss","close_2","StochasticIndicator","periodLine","lowerSeries","periodCollection","calculatePeriod","kPeriod","smaCalculation","dPeriod","pointCollection","lowValues","highValues","closeValues","modifiedSource","mins","maxs","MIN_VALUE","BollingerBands","rangeArea","bandColor","enableBand","bandCollection","rangeAreaSeries","deviationSum","multiplier","standardDeviation","deviations","bollingerPoints","sma","lowerBand","upperBand","j_1","mb","lb","ub","MacdIndicator","macdType","macdSeries","macdLine","histogramSeries","macdLineSeries","fastPeriod","slowPeriod","macdCollection","histogramCollection","shortEMA","calculateEMAValues","longEMA","macdValues","getMACDVales","getMACDPoints","signalEMA","getSignalPoints","getHistogramPoints","initialEMA","emaValues","emaPercent","emaAvg","macdPoints","dataMACDIndex","macdIndex","signalEma","dataSignalIndex","signalIndex","shortEma","longEma","dataHistogramIndex","histogramIndex","Trendlines","trendLineSeries","legendShape","createTrendLineElements","trendLineElement","trendPoint","findSlopeIntercept","xAvg","yAvg","xyAvg","xxAvg","yyAvg","trendlineSeries","setLinearRange","setExponentialRange","setMovingAverageRange","setPolynomialRange","setPowerRange","setLogarithmicRange","splineSeriesModule","slopeIntercept","getExponentialPoints","xLogValue","yLogValue","xPointsLgr","getLogarithmicPoints","xPolyValues","yPolyValues","getPolynomialPoints","powerPoints","getPowerPoints","getLinearPoints","xAvgValues","getMovingAveragePoints","slopeInterceptLog","midPoint","pts","x1Log","backwardForecast","y1Log","x2Log","y2Log","x3Log","forwardForecast","y3Log","slopeInterceptPower","x3","y3","polynomialOrder","polynomialSlopes","subIndex","numArray","newIndex","nIndex","num2","nIndex2","nnIndex","nnIndex2","gaussJordanElimination","getPoints","nullCount","slopeInterceptLinear","x1Linear","y1Linear","x2Linear","y2Linear","slopeInterceptExp","ptsExp","getPolynomialYValue","slopes","numArray1","numArray2","numArray3","num1","index4_1","num3","num4","iindex4","iandex4","iindex1","iindex2","Crosshair","mouseLeaveHandler","removeCrosshair","isIos","isIos7","disableTrackTooltip","horizontalCross","verticalCross","crossGroup","stopAnimation","valueX","valueY","axisTooltipGroup","renderCrosshairLine","renderAxisTooltip","axisGroup","textElem","getAxisText","tooltipLocation","isTop","isBottom","isLeft","isRight","labelValue","tooltipRect","boundsX","boundsY","crosshairInterval","BaseTooltip","markerPoint","getTooltipElement","isTooltip","inverted","updateTemplateFn","formattedText","textElements","groupElement","isFirst","isChart","areaRect","cartesain","removeHighlight","highlightPoints","renderTooltipElement","tipLocation","sharedTooltipLocation","seriesTooltipLocation","headerSize","pathElement_1","pointRect","enableAnimation","updateDiv","animateTooltipDiv","shadowElement","defElement","changeText","Side","isRender","tspanOption","subWidth","tspanStyle","headerSpace","isColumn","width_1","firstElement","symbolLocation","clipX","clipY","tooltipGroup","rectOpacity","isRect","endAnimation","highlightPoint","highlight","currenDiff","firstText","removeText","toolTipInterval","removeTooltip","renderGroupedTooltip","renderSeriesTooltip","findHeader","parseTemplate","markerSide","findData","getTooltipText","getSymbolLocation","getTemplateText","drawMarker","findMouseValue","getBoxLocation","formatPointValue","extraPoints","markerGroup","findColor","dataValue","getPrototypeOf","isXPoint","isYPoint","getIndicatorTooltipFormat","data_2","Toolkit","selectionColor","fillColor","createPanButton","panElements","pan","createZoomButton","zoomElements","zoom","createZoomInButton","polygonDirection","zoomInElements","elementOpacity","zoomIn","createZoomOutButton","zoomOutElements","zoomOut","createResetButton","toolkitElements","touchMoveList","touchStartList","zoomInOutCalculation","applySelection","zoomFactor_1","zoomPosition_1","cumulative_1","browserName","wheelEvent","toolkit","zoomingRect","zoomAxes","zoomkitOpacity","isIOS","renderZooming","calculateZoomAxesRange","doPan","drawZoomingRectangle","translateX","translateY","enableDeferredZooming","setTransform","performZoomRedraw","doZoom","previousZF","previousZP","currentZF","currentZP","zoomRect","previousZoomFactor","previousZoomPosition","currentZoomFactor","currentZoomPosition","performMouseWheelZooming","cumulative","performPinchZooming","translateXValue","translateYValue","pinchRect","elementOffset","touchDown","touchMove","touch0StartX","touch0StartY","touch0EndX","touch0EndY","touch1StartX","touch1StartY","touch1EndX","touch1EndY","calculatePinchZoomFactor","selectionMin","selectionMax","rangeMin","rangeMax","axisTrans","actualMin","actualDelta","transX","transY","isPinch","xAxisLoc","yAxisLoc","axisRange","showZoomingToolkit","outerElement","toolboxItems","toolbarItems","xPosition","currentItem","zoomToolkitMove","zoomToolkitLeave","showToolkit","chartMouseWheel","mouseCancelHandler","addTouchPointer","touchList","pointerId","BaseSelection","seriesStyles","seriesclass","styleId","selectionStyle","unselected","concatIndexes","userIndexes","localIndexes","checkVisibility","selectedIndexes","uniqueSeries","selectedIndexes_1","uniqueSeries_1","addSvgClass","elementClassName","removeSvgClass","getChildren","Selection","completeSelection","calculateSelectedElements","mousedown","initPrivateVariables","closeIconId","draggedRectGroup","draggedRect","isSeriesMode","selectDataIndex","generateStyle","indexes","indexes_1","getElementByIndex","getClusterElements","clusters","findElements","getSeriesElements","blurEffect","clusterSelection","selectedElements","removeMultiSelectEelments","getSelectionClass","removeStyles","addOrRemoveIndex","applyStyles","toEquals","chartId","checkSelectionElements","parentClassName","selectElement","checkSeriesOnly","oldMode","removeSelectedElements","legendSelection","seriesStyle","isBlurEffectNeeded","elements_3","seriesElements_1","calculateDragSelectedElements","dragRect","axisOffset","removeOffset","selectedPointValues","selectedSeriesValues","xAxisOffset_1","yAxisOffset_1","isCurrentPoint","createCloseButton","selectedDataValues","drawDraggingRect","cartesianLayout","dragGroup","removeDraggedElements","changeCursorStyle","resizingSelectionRect","tapped","resize","findResizeMode","resizing","chartSvgObject","cursorStyle","resizeMode","resizeEdges","isResize","rectelement","seriesElements_2","draggedRectMoved","grabbedPoint","doDrawing","dragging","rectGrabbing","getDragRect","DataLabel","errorHeight","commonId","calculateErrorHeight","chartBackground","positiveHeight","negativeHeight","rgbValue","contrast","yAxisInversed","labelLength","fontBackground","isDataLabelShape","createDataLabelTemplate","calculateTextPosition","isShape","vAxis","hAxis","labelRegion","getLabelLocation","locationY","alignmentValue","calculateAlignment","calculateRectPosition","locationX","calculatePathPosition","calculatePolarRectPosition","columnRadius","labelLocation","textLength","extraSpace","calculateRectActualPosition","calculateTopAndOuterPosition","calculatePathActualPosition","labelRect","isOverLap","finalPosition","updateLabelLocation","markerSize","positionIndex","intersectY","shapeElements","textNode","ErrorBar","renderErrorBar","capId","errorbar","errorBarCap","errorDirection","point_1","errorX","errorY","verticalError","horizontalError","capOption","capPath","findLocation","horizontalPositiveError","verticalPositiveError","horizontalNegativeError","verticalNegativeError","getErrorDirection","calculateFixedValue","calculatePercentageValue","calculateStandardDeviationValue","getMean","meanCalculation","calculateStandardErrorValue","calculateCustomValue","getHorizontalDirection","mid","errorMode","capLength","capDirection","getVerticalDirection","getBothDirection","pathH","pathV","paths","verStandardMean","horStandardMean","verSquareRoot","horSquareRoot","sumOfX","sumOfY","errorBarClipRect","errorBarElements","Legend","visibleSeriesCollection","visibleSeriesCollection_1","extraHeight","extraWidth","legendEventArgs","columnHeight","prevLegend","previousBound","availwidth","LegendClick","refreshSeries","legendItemsId_1","AnnotationBase","setAnnotationPixelValue","accumulationBound","setAnnotationPointValue","isLog","xAnnotation","setAccumulationPointValue","annotationElement","coordinateUnits","setElementStyle","accPoint","setAlignmentValue","ChartAnnotation","BoxAndWhiskerSeries","centerRegion_1","findBoxPlotValues","boxPlotMode","updateTipRegion","renderBoxAndWhisker","tipRegion","updateTipSize","midWidth","midHeight","topWidth","topHeight","showMean","yCount","quartile","getExclusiveQuartileValue","getInclusiveQuartileValue","getQuartileValues","getMinMaxOutlier","percentile","integerRank","fractionRank","isEvenList","halfLength","lowerQuartileArray","upperQuartileArray","rangeIQR","MultiColoredAreaSeries","startRegion","rendered","generatePathOption","MultiColoredLineSeries","MultiLevelLabel","xAxisPrevHeight","xAxisMultiLabelHeight","yAxisPrevHeight","yAxisMultiLabelHeight","multiLevelLabelsHeight","prevHeight","axisValue","multiLevel","categoryLabel","maximumTextWidth","pathRect","isOutside","triggerMultiLabelRender","renderXAxisLabelBorder","multiElements","createBorderElement","padding1","padding2","value1","groupLabel","renderYAxisLabelBorder","clipId","axisId","borderIndex","AccumulationAnnotationSettings","AccumulationDataLabelSettings","AccPoints","labelVisible","AccumulationSeries","sumOfPoints","accumulation","resultData","seriesCounts","findSumOfPoints","sumOfClub","clubValue","groupTo","setPoints","isClub","pushPoints","lastGroupTo","clubPoint","setAccEmptyPoint","seriesGroup","renderPoints","datalabelGroup","accumulationDataLabelModule","renderDataLabel","findMaxBounds","labelBound","pieSeriesModule","accumulationLegendModule","explodeDistance","pointId","renderPoint","getSeriesElement","findAreaRect","totalbound","bound","AccumulationBase","pieCenter","pieRadius","pieLabelRadius","labelRadius","isCircular","processExplode","explodePoints","deExplodeAll","invokeExplode","explodeAll","explodeIndex","accumulationSelectionModule","deExplodeSlice","explode","midAngle","isExplode","explodeSlice","sliceId","setTranslate","setElementTransform","PieBase","initProperties","initAngles","connectorStyle","explodeOffset","findCenter","defaultLabelBound","accumulationRect","getSeriesBound","accumulationRectCenter","getRectFromAngle","nextQuandrant","lastQuadrant","getDoughnutPath","getPiePath","PieSeries","getPathOption","groupId","clipslice","AccumulationChart","accBaseModule","isIE11Pointer","accumulationMouseMove","accumulationMouseEnd","accumulationMouseStart","accumulationOnMouseClick","accumulationRightClick","accumulationMouseLeave","accumulationResize","previousSize","currentSize","createPieSvg","createSecondaryElement","doGrouppingProcess","processSelection","tooltipParent","getSmartLegendLocation","refreshPoints","findDatalabelVisibility","refreshElements","TriangularBase","actualChartArea","triangleSize","neckSize","neckWidth","neckHeight","initializeSizeRatio","gapRatio","coEff","spacing","yRatio","heightRatio","setLabelLocation","labelOffset","findPath","locations","FunnelSeries","getSegmentData","endTop","endBottom","endMin","bottomY","emptySpaceAtLeft","seriesTop","line3","line6","PyramidSeries","pyramidMode","calculateSurfaceSegments","sumOfValues","gapHeight","preSum","getSurfaceHeight","currY","coef","surface","solveQuadraticEquation","root1","root2","sd","AccumulationLegend","titleRect","totalRowCount","getMaxColumn","maxPageColumn","maxColumnWidth","columns_1","getAvailWidth","legendX","availablewidth","legendBound","getTitleRect","legendByIndex","legendCollections_1","legendItemsId","currentSeries","AccumulationDataLabel","getDataLabelPosition","getLabelDistance","getLabelRegion","marginValue","labelAngle","enableSmartLabels","getSmartLabel","circular","findPreviousPoint","isOverlapping","isConnectorLineOverlapping","setOuterSmartLabel","setPointVisibileFalse","textTrimming","textsize","getOverlappedAngle","setSmartLabelForSegments","textRegion","overlapHeight","getEdgeOfLabel","previousstart","previousend","isLineRectangleIntersect","line1","line2","isLinesIntersect","point11","point12","lies","getConnectorPath","getConnectorStartPoint","getPolyLinePath","controlPoints","getBezierPoint","p0","labelshape","isTemplate","getTemplateSize","correctLabelRegion","setTemplateStyle","getSaturatedColor","clientRect","labelColor","doTemplateAnimation","saturatedColor","getLabelBackground","backgroundColor","AccumulationTooltip","getPieData","AccumulationSelection","indexes_2","checkEquals","pieId","checkPointVisibility","elementClass","parentClass","selectedDataIndexes_1","AccumulationAnnotation","pie","index.Chart","index.LineSeries","index.ScatterSeries","index.ColumnSeries","index.SplineSeries","index.SplineAreaSeries","index.StripLine","index.AreaSeries","index.StepLineSeries","index.StepAreaSeries","index.StackingColumnSeries","index.StackingAreaSeries","index.BarSeries","index.StackingBarSeries","index.RangeColumnSeries","index.BubbleSeries","index.Tooltip","index.Crosshair","index.Category","index.DateTime","index.Logarithmic","index.Legend","index.Zoom","index.DataLabel","index.Selection","index.ChartAnnotation","index.HiloSeries","index.HiloOpenCloseSeries","index.WaterfallSeries","index.RangeAreaSeries","index.CandleSeries","index.PolarSeries","index.RadarSeries","index.SmaIndicator","index.TmaIndicator","index.EmaIndicator","index.AccumulationDistributionIndicator","index.MacdIndicator","index.AtrIndicator","index.RsiIndicator","index.MomentumIndicator","index.StochasticIndicator","index.BollingerBands","index.BoxAndWhiskerSeries","index.ErrorBar","index.Trendlines","index.DateTimeCategory","index.MultiColoredLineSeries","index.MultiColoredAreaSeries","index.MultiLevelLabel","index.AccumulationChart","index.PieSeries","index.FunnelSeries","index.PyramidSeries","index.AccumulationTooltip","index.AccumulationLegend","index.AccumulationSelection","index.AccumulationDataLabel","index.AccumulationAnnotation","isDescending","sortData","axisLineColor","tickLineColor","pointerColor","Line","Range","Tick","Cap","NeedleTail","Annotation","Pointer","Annotations","autoAngle","updateLocation","currentRadius","GaugeTooltip","borderStyle","ejTooltip","beforeRender","onBeforeRender","tooltipCustomization","currentPointer","currentAxis","appendTargetElement","tooltipFormat","pointerSize","borderRightColor","borderLeftColor","borderBottomColor","borderRightWidth","borderBottomWidth","borderTopColor","borderTopWidth","transitionProperty","transitionDuration","AxisRenderer","drawAxisOuterLine","setRangeColor","drawAxisLabels","nearSize","farSize","hiddenLabel","findAnchor","useRangeColor","drawMinorTickLines","minorTickElements","minorLineStyle","minorTicks","minorInterval","isRangeColor","majorValues","calculateTicks","drawMajorTickLines","majorTickElements","majorLineStyle","majorTicks","axisLineWidth","drawAxisRange","rangeElement","rangeIndex","calculateRangeRadius","rangeColors","PointerRenderer","drawPointers","calculatePointerRadius","setPointerValue","doPointerAnimation","drawNeedlePointer","pointerRadius","rectDirection","pointerWidth","needleTail","cap","drawMarkerPointer","drawRangeBarPointer","animatePointer","performRangeBarAnimation","performNeedleAnimation","sweepAngle","pointAngle","minAngle","AxisLayoutPanel","axisRenderer","pointerRenderer","measureAxisSize","calculateAxesRadius","totalRadius","rangeMaximumRadius","calculateNumericInterval","calculateAxisValues","isMajorTickOutside","isMinorTickOutside","isLabelOutside","majorTickOffset","minorTickOffset","axesElements","annotationsModule","CircularGauge","pointerneedRefresh","themeEffect","setThemeColors","labelcolor","others","gaugeOnMouseDown","gaugeRightClick","gaugeResize","setGaugeStyle","getMouseArgs","dragArgs","activePointer","enablePointerDrag","activeAxis","pointerDrag","gaugeAxisLayoutPanel","calculateSvgSize","isElementExist","annotationEnable","refreshWithoutAnimation","index.CircularGauge","index.GaugeTooltip","index.Annotations","dropDownBaseClasses","noData","fixedHead","grouping","DropDownBase","getPropObject","newProperty","oldProperty","getValueByText","listData","checkValueCase","isTextByValue","typeOfData","dataSource_1","checkingAccent","checkIgnoreCase","getItemValue","checkNonIgnoreCase","itemValue","stringTrim","textItem","typedText","l10nUpdate","actionFailure","noRecordsTemplate","actionFailureTemplate","getTextByValue","enableRtlElements","jsonElement","renderItemsBySelect","setListData","getJSONfromOption","optionGroup","scrollTimer","isRequested","isActive","renderItems","onActionComplete","onActionFailure","postRender","listElement","focusItem","selectedItem","listEle","getSortedDataSource","listOption","setFloatingHeader","fixedHeaderElement","setFixedHeader","scrollStop","topIndex","itemTemplate","templateListItem","liWidth","firstLi","textField","getIndexByValue","setFields","updateSelection","updateDataSource","setUpdateInitial","isEmptyData","rippleFun","wrapperElement","itemIndex","itemsCount","selectedItemValue","updateActionCompleteData","tempLi","getDataByValue","dropDownListClasses","disable","inputFocus","iconAnimation","device","backIcon","filterBarClearIcon","filterInput","filterParent","mobileFilter","clearIcon","clearIconHide","popupFullScreen","disableIcon","hiddenElement","DropDownList","initializeData","isDocumentClick","isFilterFocus","beforePopupOpen","initRemoteRender","isNotSearchList","isTyped","preventFocus","preventAutoFill","isValidKey","typedString","isEscapeKey","isTabKey","actionCompleteData","isUpdated","prevSelectPoints","isSelectCustom","isDropDownClick","preventAltUp","isCustomFilter","isSecondClick","floatLabelChange","floatElement","resetFocusElement","resetSelection","onChangeEvent","allowFiltering","valueTempElement","setHTMLAttributes","htmlAttr","getAriaAttributes","hidePopup","preventTabIndex","getNgDirective","getElementByText","getElementByValue","listItems_1","liItem","updateValues","setHiddenValue","onBlur","isFilterLayout","focusOutAction","onFocusOut","onFocus","wireEvent","dropDownClick","bindCommonEvent","unBindCommonEvent","searchKeyEvent","spinnerElement","filterInputObj","preventAction","preventHomeEnd","isEditTextBox","isTabAction","focusEle","isSelectFocusItem","pageUpSelection","getPageCount","pageDownSelection","showPopup","focusDropDown","selectCurrentItem","previousItem","unWireEvent","onDocumentClick","activeStateChange","proxy_1","cloneElements","updateSelectedItem","preventSelect","focusedItem","activeItem","valueTemplate","setValueTemplate","previousSibling","dataText","detachChangeEvent","onFilterUp","searchLists","onFilterDown","getSelectionPoints","removeFillSelection","isFiltering","preventDefaultAction","updateData","filteringAction","baseEventArgs","filterQuery","focusIndexItem","setSearchBox","filterBarPlaceholder","clearIconElement","searchKeyModule","onInput","addNewItem","newElement","highlightedItem","refreshPopup","popupEle","searchBox","headerTemplate","searchBoxHeight","getOffsetValue","getFocusElement","setSearchBoxPosition","backIconElement","clickOnBackIcon","scrollParentElements_1","listScroll","popupStyles","borderTop","borderBottom","destroyPopup","clearElement","popupOffset","lastItem","paddingBottom","scrollBottom","currentOffset","nextBottom","nextOffset","boxRange","isPopupButton","scrollableParentElements_1","setOldText","setOldValue","ddlProps","proxy_2","onpopstate","pushState","ComboBox","preventBlur","targetFocus","customValue","allowCustom","valueMuteChange","aria-hasPopup","setHoverList","inlineSearch","autofill","setAutoFill","isHover","currentFillValue","isAndroidAutoFill","setAutoFillSelection","prevEnd","curEnd","prevStart","curStart","isKeyNavigate","changeData","comboProps","isEscape","searchItem","AutoComplete","isFiltered","filterType","mapping","suggestionCount","isDownUpKey","filterAction","postBackAction","showPopupButton","atcProps","HIDE_LIST","CHIP","CHIP_CLOSE","CHIP_SELECTED","ZERO_SIZE","CLOSEICON_CLASS","CLOSE_ICON_HIDE","MultiSelect","mobFilter","focused","scrollFocusStatus","keyDownStatus","enableRTL","allowCustomValue","hideSelectedItem","closePopupOnSelect","updateHTMLAttribute","updateReadonly","updateClearButton","overAllClear","componentWrapper","updateCssClass","onPopupShown","focusAtFirstListItem","isFirstClick","mainList","refreshListItems","addListFocus","focusAtLastListItem","aria-multiselectable","updateListARIA","removelastSelection","chipCollectionWrapper","tempValues","removeValue","removeChipSelection","updateDelimeter","delimiterChar","makeTextBoxEmpty","mainData","refreshSelection","targetInputElement","showSelectAll","mainListCollection","remoteCustomValue","checkForCustomValue","tempQuery","unwireListEvents","setInitialValue","selectAllAction","setDynValue","initialValueUpdate","initialUpdate","refreshPlaceHolder","updateValueState","ariaValue","checkSelectAll","checkMaxSelection","searchCount","searchActiveCount","openClick","openOnClick","KeyUp","expandTextbox","checkTextLength","dataUpdater","dataChecks","wrapperClick","updateDelimView","removeChipFocus","refreshInputHight","floatLabelBlur","validateValues","newVal","getPagingCount","showDelimWrapper","viewWrapper","floatLabelFocus","delimiterWrapper","hideDelimWrapper","calcPopupWidth","popupKeyActions","updateAriaAttribute","onKeyDown","moveByList","selectByKey","escapeAction","moveBy","removeSelectedChip","selectListByKey","showOverAllClear","hideOverAllClear","maximumSelectionLength","updateListSelection","selectedElem","addChipSelection","moveByTop","chipClick","onChipRemove","setFloatLabelType","updateMainList","removeChip","updateChipStatus","element2","addListSelection","addChip","dispatchSelect","isNotTrigger","initStatus","getChip","closeElements","onMobileChipInteraction","chipElem","chipClose","chip","data-value","chipContent","setClass","mouseIn","mouseOut","fieldProperty","listCurrentOptions","overAllHeight","onListMouseDown","selectAllHeight","ClearAll","windowResize","delim","indexItem","selectItems","temp1","mainlist","addListHover","ariaCheck","delimChar","wrapperleng","remainContent","overflowCountTemplate","raminElement","remainSize","overAllContainer","remainValue","newTemp","selectAllItem","onLoadSelect","dropDownIcon","msProps","mainLiLength","liLength","DELIMITER_VIEW","placeholderText","placeholderElement","showDropDownIcon","dropIcon","CHECK","CheckBoxSelection","activeLi","activeEle","listSelection","setSelectAll","setDeviceSearchBox","getFocus","setReorder","getActiveList","checboxCreate","itemCreated_1","checkboxEle","checkAllParent","selectAllSpan","checkWrapper","validateCheckNode","checkWrap","isPrevent","unSelect","selectAllText","unSelectAllText","enableSelectionOrder","activeLiCount","ulEle","index.MultiSelect","index.CheckBoxSelection","CellType","CellStyle","numFmtId","backColor","fontColor","italic","bold","wrapText","hAlign","vAlign","numberFormat","Borders","isGlobalStyle","sz","CellXfs","Alignment","CellStyleXfs","CellStyles","xfId","NumFmt","formatCode","mLine","mColor","Cell","Cells","inserted","Rows","Worksheets","Worksheet","isSummaryRowBelow","HyperLink","Grouping","FreezePane","MergeCell","MergeCells","mergeCell","mCell","isIntersecting","intersectingCell","Width","Height","ref","ValueFormatter","displayText","CsvHelper","csvStr","formatter","globalStyles","Map","worksheets","parseWorksheet","parseRows","rows_1","parseRow","parseCell","csv","parseCellValue","has","dwlLink","BlobHelper","getBlob","Workbook","saveType","sharedStringCount","unitsProportions","hyperlinkStyle","mSaveType","mArchive","sharedString","mFonts","mBorders","mStyles","printTitles","cellStyles","mNumFmt","mFills","mCellXfs","mCellStyleXfs","parserCellStyle","tFormat","parserWorksheets","builtInProperties","BuiltInProperties","parserBuiltInProperties","csvHelper","jsonBuiltInProperties","author","comments","company","manager","subject","createdDate","tags","jsonSheet","sheet","mergeCells","mHyperLinks","parserColumns","parserRows","freeze","parserFreezePanes","printTitle","parserPrintTitle","pageSetup","hyperLinks","mergeOptions","applyProperties","sourceJson","destJson","getCellName","getColumnName","strColumnName","iCurrentDigit","titleRowName","printTitleName","fromRow","toRow","titleColName","fromColumn","toColumn","freezePanes","leftCell","columnsLength","rowsLength","rowId","parserRow","parseGrouping","parseCells","outlineLevel","isCollapsed","cellsLength","spanMin","spanMax","cellId","jsonCell","refName","processMergeCells","hyperlink","hyperLink","getCellValueType","rId","styleIndex","parseCellType","spans","applyGlobalStyle","cellStyleXfs","compareResult","compareStyleXfs","cellXfs","applyAlignment","borderId","fillId","fontId","toCompareStyle","baseStyle","cellType","defStyleIndex","parserBorder","leftBorder","rightBorder","topBorder","bottomBorder","processCellStyle","switchNumberFormat","numFmt","returnFormat","compareStyle","compareFontResult","isNewFont","isNewBorder","bStyle","isAllBorder","toCompareBorder","allBorderStyle","globalStyleIndex","toOADate","blobSaveType","proxyUrl","xlsxMatch","csvMatch","saveWorkbook","saveWorksheets","saveSharedString","saveStyles","saveApp","saveCore","saveContentType","saveTopLevelRelation","saveWorkbookRelation","workbookTemp","sheets","printTitle_1","addToArchive","saveWorksheet","sheetBlob","sheetString","saveFreezePanes","colString","pixelsToColumnWidth","rowString","pixelsToRowHeight","_h","_j","hLink","saveSheetRelations","pixels","dDigitWidth","trunc","relStr","paneString","sstStart","si","processString","styleTemp","saveNumberFormats","saveFonts","saveFills","saveBorders","saveCellStyleXfs","saveCellXfs","saveCellStyles","numFmtStyle_1","fillsStyle","bordersStyle","cellStyleString","cellXfsStyle","cellStyleXf","cellXf","appString","coreString","toISOString","wbRelation","contentTypeString","sheetsOverride","xmlString","archiveItem","startCell","endCell","dateToTicks","isLeapYear","timeToTicks","daysTo1899","CLS_DISABLE","CLS_HSCROLLNAV","HScroll","browser","browserCheck","ieCheck","uniqueId","scroll","touchHandler","createNavIcon","scrollEle","buildTag","scrollDiv","innerEle_1","scrollItems","nav","clsRight","navItem","CLS_NAVRIGHTARROW","clsLeft","navEle","navLeftItem","CLS_NAVLEFTARROW","eventBinding","onKeyPress","keyTimer","keyTimeout","eleScrolling","onKeyUp","tabHoldHandler","repeatScroll","clickEventHandler","scrollDis","rootEle","scrlLeft","scrollStep","arrowDisabling","addDisable","removeDisable","navLeftEle","navRightEle","disEle","CLS_ITEMS","CLS_ITEM","CLS_SEPARATOR","CLS_POPUPICON","CLS_POPUPDOWN","CLS_TBARTEXT","CLS_TBAROVERFLOW","CLS_POPOVERFLOW","CLS_TBARNAV","CLS_TBARPOS","CLS_POPUPCLASS","CLS_POPUP","CLS_TBARNAVACT","CLS_POPPRI","Item","Toolbar","popupOpen","popupClose","trgtEle","ctrlTem","clearProperty","popObj","tbarAlign","attrb","scrollModule","tbarItemsCol","popupPriCount","keyModule","docKeyDown","destroyHScroll","docEvent","tbarEle","tbarAlgEle","lefts","centers","rights","popEle","destroyItems","tbarItems","destroyMode","popupRefresh","elementFocus","fChild","activeEleSwitch","clstElement","tbrNavChk","keyHandling","clst","navChk","scrollChk","popAnimate","eleFocus","nodes","popupCheck","popFrstEle","activeEleRemove","tbarScrollChk","sib","skipEle","isNOU","clsList","isPopupElement","popupNav","popupClickHandler","CLS_RTL","aria-orientation","renderOverflowMode","itemPositioning","checkPopupRefresh","initHScroll","innerItems","checkOverflow","itemWidthCal","innerItem","itemWidth","eleWidth","popNav","scrollNav","refreshOverflow","priorityCheck","offsetWid","overflowMode","removePositioning","createPopupEle","innerNav","createPopupIcon","checkPriority","removeProperty","pushingPoppedEle","tbarObj","popupPri","eleHeight","nodeIndex","nodePri","tbResize","tbarElement","eleItem","popupInit","toolEle","popupElePos","popIcon","scrollVal","overflowHeight","inEle","pre","popPriority","eleWid","sepCheck","itemCount","itemPopCount","checkClass","rVal","cls","mrgn","fstEleCheck","tbarEleMrgn","eleWid_1","minWidth","sepEle","popedEle","tbarPriRef","sepPri","des","elWid","wid","ig","ignoreCount","priEleCnt","eleSep","ignoreCheck","eleSepWidth","prevSep","popupEleRefresh","ignoreEleFetch","ignoreEle","ignoreInx","popupEleWidth","tbarWidth","tbarItemsWid","elWidth","btnText","eleSplice","align","sepBeforePri_1","refreshPositioning","tbarWid","popWid","tbarItemAlign","itemEle","showAlwaysInPopup","alignDiv","alignEle","leftAlign_1","ctrlTemplate","itemEleDom","innerPos","renderSubComponent","setAttr","enableItems","addItems","itemsDiv","itemAgn","items_1","algIndex","removeItems","removeItemByIndex","eleIdx","indexAgn","templateRender","templateProp","isComponent","itemType","tempStr","buttonRendering","dom","iconPos","textStr","btnTxt","prefixIcon","suffixIcon","tooltipText","itemClick","showTextOn","sTxt","itemsRerender","tEle","changedProb","CLS_ACRDN_ROOT","CLS_HEADER","CLS_HEADERCTN","CLS_CONTENT","CLS_CTENT","CLS_TOOGLEICN","CLS_CTNHIDE","CLS_SLCTED","CLS_ACTIVE","CLS_TOGANIMATE","CLS_EXPANDSTATE","AccordionActionSettings","AccordionAnimationSettings","AccordionItem","Accordion","isDestroy","templateEle","eleStr","nested","isNested","expandedItems","initExpand","expandMode","initItemExpand","innerEles","aria-level","toggleIconGenerate","tglIcon","hdrColIcon","expandItem","renderInnerItem","acrdnItem","acrdnHdr","acrdnCtn","acrdnCtnItem","acrdActive","getIndexByItem","contentRendering","ariaAttrUpdate","cntclkCheck","acrdAniEle","acrdAniEle_1","sameContentCheck","sameHeader","acrdnCtn_1","expandState","collapse","eleMoveFocus","clstItem","headerEleGenerate","ctnEle","hdrEle","fetchElement","hdr","hdrIcnEle","hdrIcon","temString","eleVal","itemcnt","ctn","trgtItemEle","isExpanded","eff","expandedItemsPush","expandProgress","expandAnimation","ef","icn","minHeight","expandedItemsPop","collapseProgress","collapseAnimation","trgtItEl","trgtHeight","itemHeight","itemAttribUpdate","itemLen","innerItemEle","expandedItemRefresh","eleHeader","isExpand","itemExpand","updateItem","acrdn","changedProp","DOWNARROW","FOCUSED","SEPARATOR","HIDE","MenuItem","ContextMenu","navIdx","isTapHold","ejInst","ngElement","createItems","targetElems","cmenuHandler","moverHandler","delegateClickHandler","keyBoardHandler","closeMenu","upDownKeyHandler","rightEnterKeyHandler","leftEscKeyHandler","cul","defaultIdx","fliIdx","fli","getLIByClass","getIdx","cli","openMenu","sli","canOpen","ulIndex","isMenuVisible","closeArgs","beforeCloseArgs","parentItem","toggleAnimation","ICONS","hdata","hli","getIndex","toggleVisiblity","collide","xCollision","hasField","toRawObject","menuItems","getLI","showItemOnClick","cliWrapper","isInstLI","setLISelected","showSubMenu","cliIdx","culIdx","classname","skipHdr","getChangedItemIndex","insertAfter","uls","isMenuOpen","isCallBack","showItems","showHideItems","hideItems","ishide","iitems","insertItems","isAfter","menuitem","CLS_HIDDEN","CLS_ICON_CLOSE","CLS_WRAP","CLS_TB_ITEMS","CLS_TB_ITEM","CLS_TB_POPUP","CLS_PROGRESS","TabActionSettings","TabAnimationSettings","Header","TabItem","Tab","prevIndex","animObj","tbObj","expTemplateContent","cntEle","isPopup","isSwipeed","css","renderContainer","setOrientation","headerPlacement","renderHeader","tbItems","bdrLine","CLS_INDICATOR","scrCnt","setContentHeight","tabItems","btnCls","CLS_ICONS","hdrItems","aria-controls","cont","parseObject","clicked","setCloseButton","showCloseButton","hdrItem","inHTML","tbCount","tItems","txt","isReplace","tHtml","txtEmpty","wrapAttrs","tCont","tItem","removeActiveClass","hdrActEle","extIndex","findEle","checkPopupOverflow","tbPop","tbrItems","ripEle","tbItem","actEleId","prevEle","trg","refreshActElePosition","prevCtnAnimation","triggerPrevAnimation","oldCnt","animateObj","triggerAnimation","prevActiveEle","newCnt","getTrgContent","idNo","openEff","clsEff","setActiveBorder","keyPressed","trgParent","trgIndex","getEleIndex","templateCompile","tempEle","getContent","place","heightAdjustMode","hsCnt","bar","tbWidth","setActive","trg_1","eleTrg","curActItem","refreshItemVisibility","eventArg","prevItem","previousIndex","isSwiped","setItems","refreshActiveBorder","spaceKeyDown","swipeHandler","tabKeyModule","removeTab","actEle","nxtSib","scrBar","scrStart","scrEnd","eleStart","eleEnd","eleViewRange","closeButtonTitle","enableTab","addTab","addedItems","removingArgs","removedItem","removedIndex","cntTrg","removedArgs","hideTab","cntItem","tempHdrEle","COLLAPSIBLE","EXPANDABLE","LISTITEM","LISTTEXT","PARENTITEM","LOAD","PROCESS","TEXTWRAP","TREEINPUT","SIBLING","DROPNEXT","FULLROW","EXPANDED","NODECOLLAPSED","CHECKBOXWRAP","CHECKBOXFRAME","treeAriaAttr","treeRole","FieldsSettings","ActionSettings","NodeAnimationSettings","TreeView","mouseDownStatus","checkActionNodes","dragStartAction","ctrlDown","ctrlUp","ctrlEnter","ctrlHome","ctrlEnd","ctrlA","shiftDown","shiftUp","shiftEnter","shiftHome","shiftEnd","csDown","csUp","csEnter","csHome","csEnd","beforeNodeCreate","navigateUrl","treeList","isLoaded","setTouchClass","selectedNodes","checkedNodes","setDataBinding","setExpandOnType","setRipple","wireEditingEvents","setDragAndDrop","allowDragAndDrop","setFullRow","fullRowSelect","nodeTemplateFn","nodeTemplate","iconModel","rippleIconFn","setMultiSelect","firstUl","treeData","isNumberTypeId","getType","setRootData","finalize","rootData","parentID","getDataType","groupedData","getGroupedData","rootItems","getChildNodes","isSorted","getSortedData","finalizeNode","touchClass","addCheck","frame","frameMouseHandler","createFullRow","allowMultiSelection","addActionClass","nodeData","actionValue","iNodes","sNodes","selectNode","cNodes","eNodes","renderChildNodes","updateList","updateCheckedProp","nodes_1","ensureParentCheckState","checkBoxEle","parentUL","currentParent","ensureChildCheckState","checkBoxes","checkedState","currentLoadData","isNodeChecked","doCheckBoxAction","doCheck","liEle","checkBox","isAdd","currLi","getCheckEvent","removeCheck","getNodeData","firstNode","updateIdAttr","doSelectionAction","sUids","sNode","selectGivenNodes","preventContextMenu","setFocusElement","triggerClickEvent","expandAction","collapseNode","toggleSelect","nodeCheckingEvent","nodeCheckedEvent","expandNode","proxy","setHeight","expandedNode","animateHeight","expandArgs","getExpandEvent","colArgs","currentHeight","parentLi","expandChild","eicon","childItems","mapper_1","getChildFields","getNodeObject","ensureCheckNode","renderSubChild","getFields","nodeLevel","dataLevel","getChildMapper","isRoot","getChildGroup","objlen","dataId","cIcons","multiSelect","unselectNode","getSelectEvent","removeSelectAll","startNode","liList","currNode","addSelect","focusedNode","getFocusedNode","expandOnType","expandOn","expandHandler","expandCollapseAction","inpEle","oldText","checkNode","openNode","shiftKeySelect","navigateNode","navigateRootNode","createTextbox","navigateToFocus","isUp","focusNode","getScrollParent","parentPos","isVisibleInViewport","scrollIntoView","txtWrap","scrollHeight","isTowards","nextNode","getNextNode","getPrevNode","toBeOpened","focusNextNode","setFocus","isBackwards","rootNode","getRootNode","getEndNode","fNode","prevNode","endNode","preNode","hoveredNode","fromDS","pNode","pid","reRenderNodes","newClass","editingHandler","oldInpEle","updateOldText","getEditEvent","innerHtml","wireInputEvents","editData","editFields","inputFocusOut","newText","txtEle","appendNewText","isInput","getChildNodeObject","childData","toBind","initializeDrag","destroyDrag","virtualEle","dragRoot","dragWrap","dragLi","isSameNode","cloneEle","DRAGITEM","nLen","cNode","getDragEvent","dragAction","removeVirtualEle","dropTarget","dropRoot","dropObj","over","dropAction","dropWrap","dropLi","isDescendant","virEle","renderVirtualEle","appendNode","dropAsSiblingNode","dropAsChildNode","dropUl","dragParentUl","dragParentLi","updateElement","updateAriaLevel","updateInstance","dropParentUl","expandParent","dragIcon","updateChildAriaLevel","sibEle","dropData","draggedNode","draggedNodeData","droppedNode","droppedNodeData","addFullRow","toAdd","rowDiv","addMultiSelect","liEles_1","liEles_2","collapseByLevel","excludeHiddenNodes","getVisibleNodes","collapseAllNodes","expandByLevel","expandAllNodes","eIcons","vNodes","removeNode","updateSelectedNodes","doGivenAction","toExpand","addGivenNodes","isRemote","updateMapper","refNode","doDisableAction","doEnableAction","touchEditObj","wireClickEvent","touchClickObj","wireExpandOnEvent","proxy_3","touchExpandObj","matched","setCheckedNodes","uncheckAll","checkAll","addNodes","beginEdit","collapseAll","disableNodes","enableNodes","ensureVisible","expandAll","getNode","moveNodes","sourceNodes","removeNodes","updateNode","CLOSE","OPEN","TRASITION","VISIBILITY","DISABLEANIMATION","CONTEXT","SIDEBARABSOLUTE","Sidebar","setContext","enableDock","setDock","setMediaQuery","setType","setCloseOnDocumentClick","closeOnDocumentClick","documentclickHandler","dockSize","z-index","classELement","destroyBackDrop","sibling","showBackdrop","eventArguments","setAnimation","createBackDrop","isOpen","mediaQuery","enableGestureHandler","setEnableGestures","enableGestures","mainContentEle","sidebarEle","margin-left","margin-right","allowSorting","allowResizing","allowGrouping","showColumnMenu","enableGroupByFormat","showInColumnChooser","edit","sortDirection","valueFormatter","commands","commandsTemplate","headerTemplateFn","fltrTemplateFn","isForeignColumn","editType","sortComparer","a_1","getSortDirection","setSortDirection","getFormatter","formatFn","getParser","parserFn","getColumnTemplate","getHeaderTemplate","getFilterItemTemplate","getDomSetter","disableHtmlEncode","queryCellInfo","actionBegin","actionComplete","dataBound","rowSelecting","rowSelected","rowDeselecting","rowDeselected","cellSelecting","cellSelected","cellDeselecting","cellDeselected","columnDragStart","columnDrag","columnDrop","rowDragStart","rowDrag","rowDrop","printComplete","detailDataBound","batchAdd","batchCancel","batchDelete","beforeDataBound","beforeOpenColumnChooser","filterChoiceRequest","filterAfterOpen","filterBeforeOpen","initialLoad","initialEnd","dataReady","contentReady","uiUpdate","onEmpty","inBoundModelChanged","modelChanged","colGroupRefresh","headerRefreshed","pageComplete","sortComplete","filterComplete","searchComplete","reorderComplete","rowDragAndDropComplete","groupComplete","ungroupComplete","cellSelectionComplete","beforeCellFocused","cellFocused","columnVisibilityChanged","columnWidthChanged","columnPositionChanged","rowsAdded","rowsRemoved","columnDragStop","headerDrop","dataSourceModified","refreshVirtualBlock","dblclick","toolbarRefresh","autoCol","tooltipDestroy","saveComplete","deleteComplete","preventBatch","dialogDestroy","crudAction","addDeleteAction","destroyForm","doubleTap","excelExportComplete","pdfExportComplete","freezeRender","filterOpen","filterDialogCreated","filterMenuClose","initForeignKeyColumn","getForeignKeyData","showEmptyGrid","dataStateChange","dataSourceChanged","rtlUpdated","RenderType","ToolbarItem","CheckBoxFilter","filterSettings","existingPredicate","filterState","cBoxTrue","cBoxFalse","closeDialog","searchHandler","searchBoxKeyUp","searchBoxClick","sInput","refreshCheckboxes","updateSearchIcon","sIcon","updateModel","actualPredicate","filteredColumns","sortSettings","allowCaseSensitive","getAndSetChkElem","sBox","hideSearchbox","spinner","cBox","showDialog","events.filterBeforeOpen","filterModel","columnName","columnType","events.actionBegin","btnClick","isExcel","created","dialogCreated","getAllData","events.filterDialogCreated","openDialog","events.filterMenuClose","clearFilter","filterCollection","fltrBtnHandler","optr","caseSen","defaults","isNotEqual","itemsCnt","fObj","searchInput","initiateFilter","fColl","firstVal","parsed","predicte","filterChoiceCount","processSearch","getPredicateFromCols","getPredicate","predicateList","fPredicate","foreignColumn","getForeignKeyColumns","events.generateQuery","events.filterChoiceRequest","processDataOperation","allPromise","runArray","dataSuccess","fullData","cols","getDistinct","filteredData","processDataSource","events.filterAfterOpen","events.actionComplete","updateResult","createFilterItems","updateAllCBoxes","updateIndeterminatenBtn","cBoxes_1","createCheckbox","cBoxes","isColFiltered","getCheckedState","generatePredicate","updateDateFilter","getCaseValue","dataState","isPending","resolver","events.rowsAdded","addRows","events.rowsRemoved","removeRows","events.dataSourceModified","events.destroy","events.updateData","crudActions","events.addDeleteAction","gObj","skipPage","searchQuery","aggregateQuery","sortQuery","pageQuery","groupQuery","isForeign","allowPaging","enableVirtualization","groupSettings","getColumnByField","isGrpFmt","formatGroupColumn","sortGrp","sSettings","searchSettings","getColumns","fGeneratePredicate","skipFoerign","actualFilter","colType","checkBoxCols","defaultFltrCols","excelPredicate","defaultFltrCols_1","column_1","sType","events.showEmptyGrid","getKey","getPrimaryKeyFieldNames","eventPromise","crud","deferred_1","events.crudAction","getStateEventArgument","endEdit","setState","events.dataSourceChanged","toIndex","getState","adaptr","dataArgs","def","editArgs","events.dataStateChange","isSpanned","CellMergeRender","cellArgs","cellRenderer","getCellRenderer","cellSpan","spanText","aria-colSpan","enableColumnVirtualization","backupMergeCells","fName","setMergeCells","generteKey","fname","splitKey","getMergeCells","updateVirtualCells","mCells","getIndexFromAllColumns","vColumnIndices","getColumnIndexesInView","getVisibleColumns","RowRenderer","rowTemplate","refreshRow","isChanged","refreshMergeCells","tr","cells_1","rowArgs","attrCopy","chekBoxEnable","isDataRow","getSelectedRowIndexes","isCheckBoxSelection","checkAllRows","buildAttributeFromRow","cellRendererFact","DetailExpand","Filter","CommandColumn","isAltRow","RowModelGenerator","generateRows","generateRow","ensureColumns","detailTemplate","generateCell","indent","enableAltRow","refreshForeignKeyRow","generateCells","dummy","oIndex","opt","isDataCell","rowID","getColumnIndexByField","refreshRows","SummaryModelGenerator","groupFooterTemplate","groupCaptionTemplate","columnSelector","buildSummaryData","getGeneratedRow","summaryRow","raw","indents","getIndentByLevel","indentLength","getGeneratedCell","getCellType","Indent","sColumn","scolumn","single","setTemplate","types","disp","Summary","GroupSummaryModelGenerator","v","GroupSummary","CaptionSummaryModelGenerator","CaptionSummary","GroupModelGenerator","summaryModelGen","captionModelGen","getGroupedRecords","generateDataRows","generateCaptionRow","getCaptionRowCells","visibles","groupedLen","generateIndentCell","Expand","captionCells","cIndex_1","wFlag","tmpFlag","GroupCaption","GroupCaptionEmpty","cRow","ContentRender","freezeRows","movableRows","events.columnDrop","rafCallback","ariaService","setBusy","getPanel","getFrozenColumns","isFrozen","events.contentReady","events.dataBound","allowTextWrap","events.freezeRender","case","generator","getModelGenerator","events.columnVisibilityChanged","setVisible","events.colGroupRefresh","events.uiUpdate","enableAfterRender","renderPanel","setOptions","busy","setPanel","renderTable","createContentTable","setTable","getTable","multiselectable","selectionSettings","allowRowDragAndDrop","initializeContentDrop","frozenRows","getHeaderContent","cellspacing","setColGroup","getColGroup","splitRows","freezeRowElements","rowElements","refreshContentRows","hdrTbody","frag","hdrfrag","modelData","fCont","mCont","tbody","getRowTemplate","isTR","colcount","getHeaderTable","appendContent","contentPanel","panel","contentTable","getRows","getMovableRows","getRowElements","getMovableRowElements","setRowElements","colgroup","colGroup","fRows","mRows","rowLen","cellLen","testRow","clen","getNormalizedColumnIndex","canSkip","displayVal","renderEmpty","getRowByIndex","getDataRows","getVirtualRowIndex","getMovableRowByIndex","getMovableDataRows","HeaderRender","frzIdx","parentEle","allowReordering","visualElement","headercelldiv","getColumnByUid","events.columnDragStart","events.columnDrag","events.columnDragStop","events.headerDrop","widthService","events.columnPositionChanged","colPosRefresh","headerDiv","createHeaderTable","initializeHeaderDrag","initializeHeaderDrop","events.headerRefreshed","headerPanel","headerTable","tHead","createTable","findHeaderRow","thead","caption","bodyCell","rowBody","updateColGroup","colHeader","rowRenderer","headerRow","colDepth","getObjDepth","getHeaderCells","HeaderIndent","DetailHeader","appendCells","isFirstObj","isFirstCol","isLastCol","isMovable","lastCol","getCellCnt","frzObj","refreshFrozenHdr","isPartial","isComp","frozenColumns","StackedHeader","getColSpan","getColumnIndexByUid","frozenCnt","frzCol","colIndex","refreshUI","setWidthToColumns","updateDefaultCursor","gCells","textWrapSettings","wrapMode","checkDepth","showDropArea","headerRows","CellRenderer","locator","localizer","getGui","evaluate","fData","dummyData","invokeFormatter","refreshCell","refreshTD","displayAsCheckBox","localeStr","fromFormatter","appendHtml","persistSelection","buildAttributeFromCell","clipMode","isCheckBoxType","AriaService","setExpand","setSort","isBusy","invalid","setGrabbed","isGrabbed","grabbed","setDropTarget","isTarget","dropeffect","haspopup","HeaderCellRenderer","hTxtEle","sortEle","gui","chkAllBox","fltrMenuEle","prepareHeader","ariaAttr","innerDIV","e-mappinguid","checkAllWrap","matchFlColumns","extendPrepareHeader","gridObj","headerTextAlign","matchFilteredColumns","StackedHeaderCellRenderer","toolTip","IndentCellRenderer","GroupCaptionCellRenderer","fKeyValue","captionTemplate","GroupCaptionEmptyCellRenderer","ExpandCellRenderer","HeaderIndentCellRenderer","DetailHeaderIndentCellRenderer","DetailExpandCellRenderer","Render","emptyGrid","headerRenderer","getRenderer","contentRenderer","Content","emptyRow","refreshComplete","isEdit","isFActon","isNeedForeignAction","getFData","events.actionFailure","deffered_1","events.getForeignKeyData","disablePageWiseAggregates","validateGroupRecords","dataManagerFailure","deferred","sendBulkRequest","dmSuccess","dmFailure","renderEmptyRow","isTrigger","colspan","events.onEmpty","dynamicColumnChange","getCurrentViewRecords","updateColumnType","isColTypeDef","events.beforeDataBound","events.tooltipDestroy","totalRecordsCount","updatesOnInitialRender","events.dataReady","alert","events.toolbarRefresh","buildColumns","events.autoCol","instantiateRenderer","addRenderer","cellrender","addCellRenderer","events.initialLoad","events.modelChanged","group0","groupN","addWhere","curFilter","rPredicate","updateGroupInfo","untouched","uGroup","itemGroup","uGroupItem","CellRendererFactory","cellRenderMap","ServiceLocator","services","register","RendererFactory","rendererMap","rName","ColumnWidthService","setColumnWidth","cWidth","getWidth","setWidthToTable","headerCol","getContentTable","fWidth","mHdr","contentCol","getSiblingsHeight","getHeightFromDirection","getTableWidth","tWidth","setWidthToFrozenTable","freezeWidth","setWidthToMovableTable","movableWidth","FocusStrategy","currentInfo","oneTime","swap","forget","skipFocus","focusByClick","prevIndexes","focusCheck","validator","passiveFocus","skipAction","getFocusInfo","elementToFocus","onClick","force","clearOutline","beforeArgs","byKey","byClick","clickArgs","event.beforeCellFocused","skipOn","keyArgs","bValue","outline","swapInfo","jump","toHeader","toFrozen","getNextCurrent","setActiveByKey","clearIndicator","getFocusedElement","fContent","fHeader","setFocusedElement","addFocus","event.cellFocused","isJump","getInfo","refreshMatrix","FixedContentFocus","ContentFocus","FixedHeaderFocus","HeaderFocus","cFocus","updateRow","handlerInstance","passiveHandler","event.keyPressed","event.click","event.contentReady","event.headerRefreshed","restoreFocus","event.batchAdd","event.batchCancel","event.batchDelete","event.detailDataBound","event.onEmpty","internalCellFocus","getPrevIndexes","forgetPrevious","actions","getFocusable","allow","inValid","rIndex","cIndex","keyActions","rightArrow","leftArrow","upArrow","downArrow","shiftRight","shiftLeft","indexesByKey","getCurrentFromAction","isPresent","shouldFocusChange","rN","cN","oRowIndex","oCellIndex","isDirty","frozenSwap","enterFrozen","optionals","defaultLen","isData","isSelectable","SearchBox","searchFocus","searchBlur","PageSettings","__assign","assign","selectedRowIndexes","selectedRowCellIndexes","selectedRecords","isMultiShiftRequest","isMultiCtrlRequest","enableSelectMultiTouch","selectedRowState","chkAllCollec","isCheckedOnAdd","persistSelectedData","isCancelDeSelect","isPreventCellSelect","factory","initializeSelection","onActionBegin","fDataUpdate","rowObj","getRowObj","hidePopUp","clearSelection","isEditing","editModule","formObj","isPersistSelection","getSelectedMovableRow","selectRow","selectedRow","selectedMovableRow","selectData","isRowType","isRowSelected","prevRowIndex","isCtrlPressed","isShiftPressed","previousRow","previousRowIndex","addMovableArgs","events.rowSelecting","clearRow","updateRowSelection","selectedRowIndex","updateRowProps","events.rowSelected","targetObj","mRow","mObj","previousMovRow","selectRowsByRange","selectRows","getCollectionFromIndexes","rowIndexes","isSingleSel","prevRow","rowIndexes_1","rowIdx","addRowsToSelection","rowIndexes_2","isUnSelected","rowDeselect","events.rowDeselecting","addRemoveClassesForRow","events.rowDeselected","clearRowSelection","updatePersistCollection","chkState","primaryKey","updateCheckBoxes","chkBox","checkedTarget","setCheckAllState","clearCellSelection","movableRow","rowDeselectObj","getRowObjectFromUID","getSelectedMovableCell","getMovableCellFromIndex","getColIndex","selectCell","isCellType","selectedCell","getCellFromIndex","isCellSelected","prevCIdxs","currentCell","previousRowCellIndex","prevECIdxs","previousRowCell","getCellIndex","events.cellSelecting","clearCell","updateCellSelection","updateCellProps","selectedRowCellIndex","events.cellSelected","rIdx","selectCellsByRange","cellIndexes","stIndex","edIndex","cellSelectionMode","getLastColIndex","addAttribute","selectCells","rowCellIndexes","addRowCellIndex","addCellsToSelection","getMovableRowsObject","cellIndexes_1","selectedCellIdx","cellDeselect","events.cellDeselecting","events.cellDeselected","rowCellIndex","isRowAvail","selectedCells","getSelectedCellsElement","rowCell","cLen","addMovableRows","gBRect","isDragged","isCellDrag","selectLikeExcel","startCellIndex","gridElement","postion","clearSelAfterRefresh","events.initialEnd","events.cellSelectionComplete","events.inBoundModelChanged","events.cellFocused","onCellFocused","actionBeginFunction","actionCompleteFunction","refreshHeader","addEventListener_checkbox","removeEventListener_checkbox","getCheckAllBox","checkBoxSelectionChanged","initPerisistSelection","gobj","checkboxColumn","chkField","ensureCheckboxFieldSelection","getDataModule","refreshPersistSelection","setRowSelection","checkState","editChkBox","onDataBound","checkSelectAllAction","cRenderer","editForm","getCheckAllStatus","triggerChkChangeEvent","checkSelect","rowCellSelectionHandler","moveIntoUncheckCollection","checkedLen","spanEle","popUpClickHandler","chkSelect","checkboxOnly","headerAction","thLen","applyDownUpKey","applyRightLeftKey","shiftDownKey","applyShiftLeftRightKey","applyHomeEndKey","applyCtrlHomeEndKey","ctrlPlusA","applySpaceSelection","applyUpDown","getSelectedRecords","getRowsObject","onDataBoundFunction","actionCompleteFunc","actionCompleteHandler","events.click","searchString","events.preventBatch","refreshSearch","events.searchComplete","onSearchComplete","ShowHide","showBy","getToggleFields","hideBy","getKeyBy","allowSelection","Scroll","lastScrollTop","previousValues","oneTimeReady","toolbarModule","toolbar","mHdrHeight","ensureOverflow","setPadding","getThreshold","cssProps","getCssProperties","removePadding","onContentScroll","scrollTarget","isFooter","onFreezeContentScroll","onWheelScroll","deltaMode","deltaY","onTouchScroll","pageXY","getPointXY","setPageXY","getFooterContent","Print","isAsyncPrint","printing","renderPrintGrid","printWind","isPrintGrid","printGridModel","printGridProp","printMode","printGrid","Grid","selectedRows","removeColGroup","waitingPop","events.printComplete","groupCaption","colGroups","AggregateColumn","getTemplate","setPropertiesSilent","AggregateRow","Clipboard","copyContent","isSelect","events.keyPressed","clipBoardTextArea","setCopyData","withHeader","getSelection","headerTextArray","getCopyData","checkBoxSelection","colIndexes","getColumnHeaderByIndex","isCell","isElement","queryCommandSupported","execCommand","removeAllRanges","rowCellIndxes","getSelectedRowCellIndexes","SortDescriptor","SortSettings","FilterSettings","SelectionSettings","SearchSettings","RowDropSettings","TextWrapSettings","GroupSettings","EditSettings","inViewIndexes","freezeRefresh","mergePersistGridData","keyEntity","currentObject","ignoreInArrays","ignoreOnColumn","ignoreInColumn","allowExcelExport","allowPdfExport","isDetail","toolbarTemplate","isCommandColumn","allowAdding","allowDeleting","extendRequiredModules","contextMenuItems","showColumnChooser","isForeignKeyEnabled","initializeServices","mediaCol","isInitialLoad","filterOperators","greaterThan","greaterThanOrEqual","lessThan","lessThanOrEqual","notEqual","defaultLocale","EmptyRecord","True","False","InvalidFilterMessage","GroupDropArea","UnGroup","GroupDisable","FilterbarTitle","EmptyDataSourceError","Add","Edit","Cancel","Update","Delete","Pdfexport","Excelexport","Wordexport","Csvexport","Columnchooser","EditOperationAlert","DeleteOperationAlert","SaveButton","OKButton","CancelButton","EditFormTitle","AddFormTitle","BatchSaveConfirm","BatchSaveLostChanges","ConfirmDelete","CancelEdit","ChooseColumns","SearchColumns","Matchs","FilterButton","ClearButton","StartsWith","EndsWith","Contains","Equal","NotEqual","LessThan","LessThanOrEqual","GreaterThan","GreaterThanOrEqual","ChooseDate","EnterValue","Copy","Group","Ungroup","autoFitAll","autoFit","Export","FirstPage","PreviousPage","SortAscending","SortDescending","EditRecord","DeleteRecord","FilterMenu","SelectAll","Blanks","FilterTrue","FilterFalse","NoResult","ClearFilter","NumberFilter","TextFilter","DateFilter","MatchCase","Between","CustomFilter","CustomFilterPlaceHolder","CustomFilterDatePlaceHolder","AND","OR","ShowRowsWhere","ctrlAltPageUp","ctrlAltPageDown","altPageUp","altPageDown","ctrlDownArrow","ctrlUpArrow","ctrlPlusP","ctrlPlusC","ctrlShiftPlusH","renderModule","getMediaColumns","searchModule","processModel","gridRender","addListener","updateStackedFilter","gcol","getShowHideService","hideAtMedia","media","mediaQueryUpdate","showHider","refreshMediaCol","eventInitializer","removeListener","destroyDependentModules","focusModule","checkCursor","requireRefresh","requireGridRefresh","headerModule","rowTemplateFn","detailTemplateFn","updateColumnObject","extendedPropertyChange","updateRTL","getToolbar","contextMenuModule","getContextMenu","columnMenuModule","getColumnMenu","events.rtlUpdated","updateResizeLines","updateGridLines","columnMenuItems","applyTextWrap","removeTextWrap","isModeChg","pending_1","gResult_1","enableHover","filterModule","refreshFilter","headerRows_1","updateColumnModel","columnModel","updateFrozenColumns","isRefresh","inview","vLen","getLocaleConstants","setColumnIndexesInView","setGridHeaderContent","contentModule","setGridContentTable","setGridContent","setGridHeaderTable","footerElement","getFooterContentTable","getPager","gridPager","setGridPager","getRowInfo","row_1","rowsObject","rowData","mrows","dRows","setCellValue","fieldIdx","pkName","rowObjects","events.queryCellInfo","setRowData","rowObject","getColumnHeaderByField","getColumnHeaderByUid","getUidByColumnField","getColumnFieldNames","columnNames","getDetailTemplate","getSelectedRows","showColumns","hideColumns","getFrozenCount","goToPage","pageNo","pagerModule","updateExternalMessage","sortColumn","isMultiSort","sortModule","clearSorting","removeSortColumn","filterByColumn","filterOperator","filterValue","actualFilterValue","actualOperator","clearFiltering","removeFilteredColsByField","isClearFilterBar","printModule","deleteRecord","fieldname","startEdit","closeEdit","addRecord","deleteRow","clipboardModule","recalcIndentWidth","indentWidth","perPixel","events.columnWidthChanged","reorderColumns","fromFName","toFName","reorderModule","autoFitColumns","resizeModule","createColumnchooser","columnChooserModule","renderColumnChooser","valueFormatterService","gCols","sCols","sLen","showGroupedColumn","parentDetails","parentKeyFieldValue","initForeignColumn","events.initForeignKeyColumn","rendererFactory","createGridPopUpElement","gridLines","toolTipObj","getTooltipStatus","htable","ctable","isEllipsisTooltip","myTableDiv","mySubDiv","myTable","myTr","mytd","mouseClickHandler","dblClickHandler","allowKeyboard","dataBoundFunction","checkEdit","events.dblclick","filterClear","keyPress","saveCell","dataObj","mergeColumns","storedColumn","ind","localCol","setInjectedModules","refreshColumns","excelExport","excelExportProperties","isMultipleExport","workbook","isBlob","excelExportModule","csvExport","pdfExport","pdfExportProperties","pdfDoc","pdfExportModule","groupColumn","groupModule","ungroupColumn","isContextMenuOpen","ensureModuleInjected","destroyTemplate","propertyNames","Sort","contentRefresh","isModelChanged","aria","sortedColumn","getSortedColsIndexByField","sortedCols","sCol","getSortColumnFromField","lastSortedCol","allowMultiSorting","removeSortIcons","updateSortedCols","addSortIcons","events.sortComplete","refreshSortIcons","colObj","initiateSort","showPopUp","allowUnsort","enableSortMultiTouch","filterElement","updateAriaAttr","NumericContainer","pagerElement","renderNumericContainer","refreshNumericLinks","updateTotalPages","updateLinksHtml","updateStyles","pagerObj","renderFirstNPrev","renderPrevPagerSet","renderNextPagerSet","renderNextNLast","pagerContainer","prevPager","PP","nextPager","NP","previousPageNo","currentPageSet","customText","updateFirstNPrevStyles","updatePrevPagerSetStyles","updateNextPagerSetStyles","updateNextNLastStyles","firstPage","firstPageDisabled","prevPage","prevPageDisabled","lastPage","lastPageDisabled","nextPageDisabled","PagerMessage","pageNoMsgElem","pageCountMsgElem","regx","Pager","defaultConstants","currentPageInfo","totalItemsInfo","firstPageTooltip","lastPageTooltip","nextPageTooltip","previousPageTooltip","nextPagerTooltip","previousPagerTooltip","pagerDropDown","containerModule","pagerMessageModule","enableExternalMessage","checkpagesizes","pagerTemplate","initLocalization","renderFirstPrevDivForDevice","enablePagerMessage","renderNextLastDivForDevice","pagerdropdownModule","addAriaLabel","externalMessageModule","checkGoToPage","currentPageChanged","setDropDownValue","pageSizes","newPageNo","oldPageNo","enableQueryString","updateQueryString","getPagerTemplate","updatedUrl","getUpdatedURL","PagerDropDown","pagerDropDownDiv","dropDownDiv","defaultTextDiv","pagerCons","pageSizesModule","pageSizesArray","dropDownListObject","onChange","ExternalMessage","externalMessage","Global","Page","pagerDestroy","gridExtend","dropDownChanged","addAriaAttr","numericContainerNew","numericContainer","numericContainerDiv","isForceCancel","previousPage","appendToElement","handlers","complete","updateLayout","inboundChange","events.pageComplete","FilterCellRenderer","filterBarTemplate","templateWrite","FlMenuOptrUI","customFltrOperators","customFilterOperators","renderOperatorUI","dlgConetntEle","dlgObj","optrData","customOptr","operators","dropDatasource","selectedValue","dropSelectedVal","optrDiv","optrInput","dropOptr","dropDownOpen","selValue","selectedField","getFlOperator","StringFilterUI","serLocator","actObj","getAutoCompleteOptions","getOptrInstance","localizeText","filteredValue","filterOptr","filterObj","actuiObj","NumberFilterUI","numericTxtObj","BooleanFilterUI","dropInstance","drpuiObj","DateFilterUI","fltrSettings","colFormat","inputElem","datePickerObj","FilterMenuRenderer","fltrObj","isDialogOpen","colTypes","boolean","datetime","flMuiObj","renderDlgContent","mainDiv","dlgDiv","filterBtnClick","clearBtnClick","renderFilterUI","writeMethod","renderFlValueUI","valueDiv","instanceofFilterUI","ui","dlgContentEle","flValue","flOptrValue","targ","flIcon","ExcelFilter","getCMenuDS","unwireExEvents","cmenu","createMenu","isCheckIcon","menu","createMenuElem","ensureTextFilter","iconName","isSubMenu","wireExEvents","clickExHandler","menuItem","destroyCMenu","menuObj","submenu","isCMenuOpen","selectedMenu","menuOptions","selectHandler","onClose","beforeClose","preventClose","client","contextRect","getContextBounds","getCMenuYPosition","getSelectedText","contextWidth","filterLength","renderDialogue","overlayClick","removeDialog","createdDialog","removeObjects","datePicker","renderCustomFilter","dlgFields","fieldSet","checkBoxValue","fOperator","sValue","sOperator","andRadio","firstOperator","firstValue","secondOperator","secondValue","mPredicate","fpred","fieldElement","xlfloptr","menuText","getSelectedValue","renderRadioButton","radioDiv","frstpredicate","secndpredicate","renderMatchCase","orRadio","valueInput","renderAutoComplete","renderNumericTextBox","renderDate","matchCaseDiv","matchCaseInput","completeAction","nextFlMenuOpen","Menu","Excel","fltrDlgDetails","getLocalizedCustomOperators","fltrElem","updateFilterMsg","filterBarElement","currentFilterObject","getFilteredColsIndexByField","currentFilteringColumn","events.filterComplete","events.filterOpen","columnMenuFilter","filterIconClickHandler","filterCell","checkForSkipInput","filterStatusMsg","applyColumnFormat","checkAlreadyColFiltered","addFilteredClass","getFlvalue","setFormatForFlColumn","refreshFilterSettings","getFilterBarElement","fltrElement","filterDialogOpen","customOperators","filterHandler","localizedStrings","processFilter","updateCrossIcon","showFilterBarStatus","getFormatFlValue","isSkip","skipInput","startTimer","onTimerTick","immediateModeDelay","templateRead","validateFilterValue","getOperator","singleOp","multipleOp","=","!","numOptr","stringOperator","numberOperator","dateOperator","datetimeOperator","booleanOperator","gClient","fClient","datepickerEle","targetText","filterIconElement","resizeClassList","suppress","Resize","isDblClk","findColumn","resizeColumn","headerTextClone","contentTextClone","indentWidthClone","contentText","wHeader","wContent","columnbyindex","calcTableWidth","tableWidth","offsetWidthValue","refreshHeight","setHandlerHeight","getResizeHandlers","resizeStart","callAutoFit","getTargetColumn","refreshColumnWidth","parentElementWidth","appendHelper","getPointX","minMove","removeHelper","cancelResizeAction","resizeEnd","updateCursor","removeEvents","setHelperHeight","mousemove","colData","updateHelper","doubleTapEvent","calcPos","fLeft","parentOffset","getUserAgent","timeoutHandler","Reorder","events.reorderComplete","createReorderElement","chkDropPosition","srcElem","destElem","closestElement","targetParentContainerIndex","chkDropAllCols","isFound","findColParent","getColumnsModel","subCols","sourceUid_1","colMatchIndex_1","destUid_1","moveColumns","oldIdx","destIndex","getColParent","srcIdx","fromIndex","flatColumns","fTh","mTh","fHeaders","setDisplay","updateScrollPostion","updateArrowPosition","draggableType","cliRect","cliRectBaseLeft","cliRectBaseRight","scrollElem","setScrollLeft","cliRectBase","RowDD","events.rowDragStart","dropElem","rowDropSettings","targetID","isDragStop","getElementFromPosition","events.rowDrag","events.rowDrop","events.rowDragAndDropComplete","getTargetIdx","targetRow","srcControl","targetIndex","isAppliedGroup","isAppliedUnGroup","events.groupComplete","events.ungroupComplete","grpRow","expandCollapseRows","applySortFromTarget","unGroupFromTarget","toogleGroupFromHeader","showToggleButton","gHeader","cellIdx","rowNodes","expandElem","renderGroupDropArea","initDragAndDrop","refreshToggleBtn","groupElem","updateGroupDropArea","dragLabel","initializeGHeaderDrop","initializeGHeaderDrag","colName","addColToGroupDrop","groupAddSortingQuery","removeColFromGroupDrop","groupedColumn","childDiv","ej-mappingname","headerCell","showUngroupButton","getGHeaderCell","updateGroupedColumn","updateButtonVisibility","clearGrouping","DetailRow","toogleExpandcollapse","uid_1","isDetailRow","detailRow","detailCell","parentPrimaryKeys","parentKeyField","parentRowData","injectedModues","gridElem","events.detailDataBound","detailElement","getTDfromIndex","predefinedItems","gridID","preItems_1","itemStr","localeName","ColumnChooser","createToolbar","tool","toolbarClickHandler","viewStr","searchElement","refreshToolbarItems","updateSearchBox","disableItems","hasData","toolbarItems_1","getItemObject","itemObject","gID","tarElement","searchBoxObj","FooterRenderer","gridModule","modelGenerator","movableContent","fDiv","mDiv","frozenContent","tFoot","freezeTable","renderSummaryContent","cStart","cEnd","summaries","dummies","fragment","rowrenderer","srow","frozenDiv","onScroll","refreshCol","mheaderCol","fheaderCol","onWidthChange","getColFromIndex","updateFooterTableWidth","fCol","SummaryCellRenderer","Aggregate","initiateRender","cellFac","footerRenderer","prepareSummaryInfo","getFormatFromType","cModel","InterSectionObserver","fromWheel","sentinelInfo","containerRect","entered","observe","onEnterCallback","virtualScrollHandler","prevTop","debounced100","debounced50","debounceEvent","sentinel","setPageHeight","VirtualRowModelGenerator","cOffsets","rowModelGenerator","notifyArgs","virtualInfo","loadNext","loadSelf","nextInfo","getBlockIndexes","loadedBlocks","checkAndResetCache","blockIndexes","isBlockAvailable","getStartIndex","updateGroupRow","block","columnIndexes","blk","even","getColumnIndexes","sLeft","calWidth","iOffset","offsetVal","refreshColOffsets","gLen","currentFirst","iterateGroup","oRow","VirtualContentRenderer","preventEvent","offsets","tmpOffsets","VirtualElementHandler","offsetKeys","eventListener","vgenerator","renderWrapper","renderPlaceHolder","getBlockHeight","observer","adjustTable","scrollListener","scrollArgs","viewInfo","getInfoFromView","prevInfo","tempBlocks","infoType","getPageFromTop","blocks","ensureBlocks","every","mIdx","old","isEndBlock","getTotalBlocks","newChild","cBlock","cOffset","getColumnOffset","refreshOffsets","getTranslateY","setWrapperWidth","sTop","setVirtualHeight","getOffset","onDataReady","maxPage","resetScrollPosition","cHeight","isOnenter","endTranslate","blockHeight","maxBlock","onEntered","getBlockSize","totalBlocks","startIdx","bSize","rem","refreshVirtualElement","VirtualHeaderRenderer","gen","VirtualScroll","ensurePageSize","blockSize","InlineEditRender","addNew","mTbody","getEditElement","renderMovableform","updateFreezeEdit","fHdr","tdElement","refreshFreezeEdit","fCls","mTd","updateFrozenCont","td_1","BatchEditRender","columnObject","DialogEditRender","events.dialogDestroy","setLocaleObj","createDialog","dialog","primaryKeyValue","dialogClose","events.destroyForm","dataCell","EditRender","Inline","Batch","getEditElements","convertWidget","fForm","cols_1","focusElement","tArgs","isComplexField","BooleanEditCell","activeClasses","selectChkBox","editRow","checkBoxChange","DropDownEditCell","isInline","ddActionComplete","dlgElement","NumericEditCell","DefaultEditCell","NormalEdit","allowEditOnDblClick","editComplete","editRowIndex","primaryKeys","primaryKeyValues","previousData","applyFormValidation","mFormObj","editedData","getCurrentEditedData","mForm","destroyElements","addedRowIndex","stopEditStatus","destroyWidgets","editHandler","edSucc","edFail","editSuccess","editFailure","updateCurrentViewData","mElem","editMElem","events.doubleTap","events.deleteComplete","events.saveComplete","InlineEdit","BatchEdit","cellDetails","events.beforeCellFocused","onBeforeCellFocused","setCellIdx","editCell","validateFormObj","editCellFromIndex","isAddRow","mTr","removeRowObjectFromUID","events.batchCancel","refreshRowIdx","bulkDelete","bulkAddRow","batchSave","getBatchChanges","batchChanges","mergeBatchChanges","addRowObject","getIndexFromData","events.batchDelete","nonMovableRows","defaultData","getDefaultData","events.batchAdd","findNextEditableCell","args1","checkNPCell","dValues","colIdx","getDataByIndex","getCellIdx","validationRules","isColored","updateCell","setChanges","isForceSave","rowcell","visibleColumns","DialogEdit","DatePickerEditCell","editCellType","dropdownedit","numericedit","datepickeredit","booleanedit","defaultedit","updateEditObj","createAlertDlg","createConfirmDlg","updateColTypeObj","tapEvent","alertDObj","refreshToolbar","showDeleteConfirmDialog","endEditing","editFormValidate","getCurrentEditCellData","getValueFromType","destroyToolTip","dlgWidget","dlgOk","dlgCancel","alertClick","btnOptions","executeAction","inputs","preventObj","mRules","cols_2","createFormObj","validationComplete","valErrorPlacement","getElemTable","isFHdr","gcontent","isScroll","inputClient","arrow","showColumn","hideColumn","isDlgOpen","dlghide","initialOpenDlg","stateChangeColumns","isInitialOpen","isCustomizeOpenCC","rtlUpdate","enableAfterRenderEle","hideDialog","refreshCheckboxState","columnChooserSearch","removeCancelIcon","addcancelIcon","events.beforeOpenColumnChooser","mOpenDlg","openColumnChooser","renderChooserList","customDialogOpen","customDialogClose","columnChooserManualSearch","confirmDlgBtnClick","clearActions","searchDiv","ccsearchele","ccsearchicon","conDiv","innerDivContent","refreshCheckboxList","columnStateChange","dialogInstance","stateColumns","colUid","currentCol","checkstatecolumn","coluid","searchVal","fltrCol","clearSearch","nMatchele","checkBoxClickHandler","checkstate","columnUid","gdCol","columnUID","cbox","cclist","hideColState","showColState","cccheckboxlist","searchValue","ExportHelper","hideColumnInclude","getColumnData","columnPromise","fColumns","getHeaders","isHideColumnInclude","measureColumnDepth","actualColumns","processColumns","processHeaderCells","removeCellFromRow","generateActualColumns","getConvertedWidth","getCellCount","resultCells","appendGridCells","isFirstColumn","isLastColumn","isIgnoreFirstCell","gridColumn","ExportValueFormatter","returnFormattedValue","formatCellValue","ExcelExport","book","workSheet","rowLength","expType","includeHiddenColumn","isCsvExport","isElementIdChanged","isExporting","exportValueFormatter","exportProperties","isCsv","processRecords","processInnerRecords","blankRows","multipleExport","processExcelHeader","groupIndent","processHeaderContent","exportType","processRecordContent","events.excelExportComplete","blobPromise","returnType","currentViewRecords","processRecordRows","processGroupedRows","processAggregates","processExcelFooter","getCaptionThemeStyle","groupCaptionSummaryRows","fillAggregates","lIndex","hIndex","tCell","sCell","rLen","excelCellArgs","getColumnStyle","rec","byGroup","summaryModel","groupSummaryRows","sRows","customIndex","cells_2","eCell","Sum","Average","Max","Min","TrueCount","FalseCount","getAggreateValue","wholeText","JSON1","JSON2","attrname","spannedCells","gridCell","spannedCell","getHeaderThemeStyle","parseStyles","getRecordThemeStyle","updateThemeStyle","themestyle","noRows","updatedCellIndex","footerRows","spannedCells_1","PdfExport","customDataSource","isGrouping","processExport","events.pdfExportComplete","gridTheme","processExportProperties","headerThemeStyle","headerFont","headerBrush","processGridHeaders","setColumnProperties","captionThemeStyle","getSummaryCaptionThemeStyle","processGroupedRecords","processRecord","penBrushColor","hexToRgb","groupIndex","dataSourceItems","captionSummaryModel","gridHeader","getHorizontalAlignment","getVerticalAlignment","pdfPageSettings","getPageSize","fromTop","drawPageTemplate","fromBottom","processContentValidation","drawPageNumber","getBrushFromContent","textPenColor","penColor","setContentFormat","documentHeader","textBrushColor","brushColor","getPageNumberStyle","pageNumberType","compositeField","getPenFromContent","penSize","getDashStyle","isCaption","captionRow","sRows_1","leastCaptionSummaryIndex","getSummaryWithoutTemplate","templateFunction","setRecordThemeStyle","verticalAlign","getFontFamily","bigint","CommandColumnRenderer","buttonElement","unbounDiv","renderButton","buttonOption","onclick","commandType","commandClickHandler","menuClass","batchEdit","editIcon","pager","ungroup","excel","fPage","nPage","pPage","ascending","descending","groupHeader","touchPop","defaultItems","hiddenItems","setLocaleKey","enableAfterRenderMenu","contextMenu","getMenuItems","contextMenuItemClick","contextMenuBeforeOpen","onOpen","contextMenuOpen","contextMenuOnClose","exportItems","getDefaultItems","buildDefaultItems","exportGroup","getLastPage","totalpage","getKeyFromId","targetColumn","updateItemStatus","getLocaleText","closestGrid","dItem","ensureDisabledStatus","ensureTarget","ensureFrozenHeader","generateID","AutoFitAll","AutoFit","CsvExport","PrevPage","FreezeRowModelGenerator","isFrzLoad","FreezeContentRender","setFrozenContent","setMovableContent","getMovableContent","getFrozenContent","mTbl","FreezeRender","refreshFreeze","rfshMovable","updateColgroup","setFrozenHeader","setMovableHeader","getMovableHeader","getFrozenHeader","refreshStackedHdrHgt","filterRow","hdrClassList","setWrapHeight","updateResizeHandler","isContReset","isStackedHdr","fRowHgt","mRowHgt","isWrap","tBody","fRowSpan","mRowSpan","fTr","getRowSpan","updateStackedHdrRowHgt","rSpan","minRowSpan","maxRowSpan","frozenHeader","movableHeader","mTable","Freeze","ColumnMenu","GROUP","UNGROUP","ASCENDING","DESCENDING","FILTER","POP","WRAP","CHOOSER","getColumnMenuHandlers","columnMenuHandlerDown","columnMenu","unwireFilterEvents","columnMenuHandlerClick","getHeaderCell","openColumnMenu","isFilterItemAdded","filterPosition","columnMenuItemClick","columnMenuBeforeOpen","columnMenuOnClose","beforeItemRender","beforeMenuItemRender","columnMenuBeforeClose","wireFilterEvents","appendFilter","isChooserItem","colChooser","checkbox","getFilter","isFilterPopupOpen","defultItems_1","getDefault","getDefaultItem","createChooserItems","filterPopup","getFilterPop","gridPos","liPos","ForeignKey","initForeignKeyColumns","generateQueryFormData","foreignColumns","genarateColumnQuery","genarateQuery","responses","fromData","needQuery","queryColumn","isTrue","filterColumn","fColumn","destroyEvent","index.Grid","index.Filter","index.Page","index.Sort","index.Group","index.Reorder","index.RowDD","index.DetailRow","index.Toolbar","index.Aggregate","index.Search","index.VirtualScroll","index.Edit","index.Resize","index.ExcelExport","index.PdfExport","index.CommandColumn","index.ContextMenu","index.Freeze","index.ColumnMenu","index.ColumnChooser","index.ForeignKey","Container","VisibleRange","Align","calculateAxesBounds","containerBounds","checkThermometer","checkAlign","calculateLineBounds","calculateTickBounds","calculateLabelBounds","calculatePointerBounds","calculateRangesBounds","labelBounds","prevAxis","checkPreviousAxes","major","minor","majorInterval","majorTickBounds","minorTickBounds","calculateMarkerBounds","tick","calculateBarBounds","startVal","endVal","rangePalettes","Animations","performMarkerAnimation","markerElement","rectY","markerType","currentPath","animationDuration","performBarAnimation","value2","clipHeight","clipVal","clipWidth","clipElement","lineY","pointerValue","startPointerVal","roundedCornerRadius","axisElements","axisObject","drawRanges","drawTicks","axisAlign","tranX","nearAxisWidth","farAxisWidth","containerObject","tickID","tickBounds","tickPath","pointesGroup","pointerClipRectGroup","pointerID","gaugeResized","drawBarPointer","rectOptions","renderAnnotationElements","secondaryID","annotationGroup","createAnnotationTemplate","getTooltipLocation","lineX","lineId","LinearGauge","renderGaugeElements","renderAxisElements","appendSecondaryElement","secondaryElement","titleBounds","actualRect","moveOnPointer","mouseElement","gaugeOnMouseMove","svgPath","markerDrag","triggerDragEvent","barDrag","elementExist","index.LinearGauge","MinMax","GeoLocation","PolylineOption","LineOption","PatternOptions","patternUnits","patternContentUnits","patternTransform","MapAjax","sendData","mapsTitleFont","mapsSubTitleFont","legendTitleFont","dataLabelFont","FabricTheme","BootstrapTheme","HighContrastTheme","Arrow","ColorMappingSettings","HighlightSettings","NavigationLineSettings","showArrow","BubbleSettings","CommonTitleSettings","SubTitleSettings","TitleSettings","ShapeSettings","LayerSettings","isBaseLayer","Tile","MapsAreaSettings","layerRendering","shapeRendering","markerRendering","markerMouseMove","bubbleRendering","bubbleMouseMove","legendRendering","annotationRendering","itemSelection","itemHighlight","BingMap","getBingMap","tile","quadKey","tileZoomLevel","digit","layerType","ColorMapping","getShapeColorMapping","equalValue","colorValuePath","valuePath","shapeColor","getColorByValue","colorMapping","colorMapping_1","colorMap","LayerPanel","ajaxProcessCount","ajaxModule","ajaxResponse","measureLayerPanel","secondaryEle","isTileMap","tileSvgObject","layerGroup","currentLayer","processLayers","layerObject","currentFactor","panTileMap","generateTiles","markerModule","navigationLineModule","renderNavigation","translateLayerElements","featureData","bbox","calculateRectBounds","calculatePathCollection","bubbleCalculation","bubbleSettings","bubbledata","renderData","groupElements","rectBounds","geometryData","coords","generatePoints","labelTemplateEle","currentShapeData","polyLineOptions","circleOptions","shapeID","drawingType","pathEle","generateMultiPolygonPath","lineData","circleRadius","bubbleG","bubbleModule","bubble_1","bubbleData","renderBubble","dataLabelSettings","renderLabel","bubbleIndex","dataIndex","coordinates","calculatePolygonBox","multiPolygonDatas","horFactor","verFactor","layerElement","baseTranslatePoint","baseScale","calculateRectBox","currentCoords","userLang","tiles","xcount","ycount","baseLayer","baseLayerIndex","urlTemplate","bing","bingMapType","proxTiles","proxTiles_1","baseTile","subtile","arrangeTiles","htmlString","tileElment","tiles_1","factorX","factorY","availSize","annotationXValue","annotationYValue","Maps","baseTileTranslatePoint","unWireEVents","createSVG","wireEVents","setTextStyle","titleSettings","subtitleSettings","setLabelFont","layers_1","findBaseAndSubLayers","addTabIndex","renderArea","processRequestJsonData","serverProcess","response","queryModule","processResponseJsonData","mapAjax","xhr_1","renderMap","createTile","createZoomingToolbars","arrangeTemplate","zoomingChange","mapsArea","layerCollectionEle","tileRect","tileSvgRect","markerTemplateElements","templateGroupEle","toolBarGroup","alignToolBar","applyTransform","pointerEvents","templateElements","layerOffset","currentTemplate","templateOffset","mainLayer","parentRect","baseIndex","mainLayers","subLayers","subLayer","subLayerIndex","borderRect","groupEle","trimmedTitle","mapsOnClick","mapsOnDoubleClick","mouseDownOnMap","mouseMoveOnMap","mouseEndOnMap","mapsOnResize","markerClick","bubbleClick","bubbleMove","zoomByPosition","performZooming","removeLayer","addMarker","currentMarker","markerSettings","findVisibleLayers","isBubbleVisible","minZoom","isMarkersVisible","isDataLabelVisible","isNavigationVisible","getBubbleVisible","isLayerVisible","isBubblevisible","istooltipVisible","isSelection","isHighlight","markers","layers_2","navigationLine_1","navigation","highlightSettings","markers_1","tooltipSettings","bubbles_1","bubble","Bubble","bubbleCollection","bubbleValue","getRatioOfBubble","shapePoints","midIndex","currentLength","layer_1","bubbleElement","bubbleType","LayerIndex","BubbleIndex","DataIndex","transPoint","animationDelay","bubbleRadius","getbubble","trackElements","markerSVGObject","markerTemplateEle","markerIndex","markerData","markerID","shapeCustom","previousExplodeId","removeTrackElements","currentWidth","trackEle","removeMarkerExplode","isMarkerExplode","getMarker","intersect","rightWidth","leftWidth","heightTop","heightBottom","getDataLabel","labelPath","shapeName","labelTemplateElement","datasrcObj","labelpath","shapePoint","textLocation","shapes","eventargs","datalabel","trimmedLable","location1","xpositionEnds","xpositionStart","smartLabelMode","intersectionAction","border_1","NavigationLine","navigationEle","pathOption","arrowColor","arrowSize","arrowSettings","arrowPosition","startArrow","endArrow","offSet","offSetValue","navigationGroup","arcId_1","radius_1","convertRadius","triId","legendBorderRect","interactiveLocation","legendItemRect","heightIncrement","widthIncrement","textMaxWidth","drawLegend","topPadding","legendRenderingCollections","getLegends","getMarkersLegendCollections","legendTitle","titleTextStyle","legendItemStartX_1","legendItemStartY_1","legendMode","shapeX","shapeY","textX","textY","shapeLocation","labelAction","labelDisplayMode","arrangement","legendtitleSize","itemTextStyle","legendLength","position_1","textX_1","textY_1","itemStartX","itemStartY","maxTextHeight","maxTextWidth","legendText","itemTextSize","textWidth","legendItem","legendTextSize","prvePositionX","nextPositionY","getPageChanged","prevPositionY","nextPositionX","DisplayText","ImageSrc","Shape","Text","legendObj","legendRect","getRangeLegendCollection","getEqualLegendCollection","getDataLegendCollection","shapeBorder","itemId","textId","renderLegendBorder","drawLegendItem","shapeSize","strokeColor","strokeWidth","legendElement","shapeId","renderOptions_1","pagingGroup","pagingFont","pagingTextSize","leftPageX","rightPageX","pageTextX","leftPageElement","rightPageElement","rightPath","leftPath","leftPageOptions","leftRectPageOptions","rightPageOptions","rightRectPageOptions","pageTextOptions","trimTitle","getLegendAlignment","changeNextPage","imageSrc","rangeData_1","colorMapProcess_1","getLegendData","legendFill","getOverallLegendItemsCollection","legendData","newColllection","equalData_1","eqaulColorProcess_1","colorMapping_2","interactiveHandler","hoverId","currentData","renderInteractivePointer","invertedPointer","Highlight","addHighlight","mapHighlight","shapeIn","layerIndex_1","highlightMap","mouseClick","selectionsettings","selectionType","selectMap","enableMultiSelect","MapsTooltip","touchDelay","mouse","manipulateTarget","customTooltip","hoverElements","joinElements","elementString","pointer-events","borderRadius","padding-left","padding-right","padding-top","padding-bottom","mouseEnter","rectZoomingStart","handled","pinchFactor","newZoomFactor","prevLevel","prevScale","maxZoom","minBounds","maxBounds","mapTotalWidth","mapTotalHeight","translatePointX","translatePointY","getTileTranslatePosition","currentLevel","prevSize","performRectZooming","zoomCalculationFactor","setInteraction","newInteraction","lastScale","interaction","updateInteraction","fingers","touchCenter","newScale","newTileFactor","translatePointX_1","translatePointY_1","drawZoomRectangle","mouseDownPoints","mouseMovePoints","rectSVGObject","rectOption","animateTransform","templateCount","currentEle","markerTranslate","bubleIndex","currentY","dataLabelTranslate","markerTemplateElement","datalabelTemplateElemement","labelX","labelY","layerEle","x_1","y_1","panning","x_2","y_2","layerRect","panningXDirection","panningYDirection","toolBarZooming","tileZoomFactor","xSpacing","ySpacing","toolBarOrientation","toolbarsCollection","toolbars","toolBarLength","toolWidth","toolHeight","toolbar_1","currentToolbarEle","performToolBarAction","panColor","stopImmediatePropagation","performZoomingByToolBar","zoomColor","panningStyle","toolBarSize","highlightColor","mapMouseWheel","mouseWheelZoom","doubleClick","doubleClickZoom","firstMove","pinchZooming","zoomRectElement","zoomOnClick","boundwidth","boundHeight","layerScale","topPos","clientTop","clientLeft","index.Maps","index.Bubble","index.Marker","index.Highlight","index.MapsTooltip","index.NavigationLine","svgElement","replaceTheme","ensureTemplate","cellClick","navigating","renderCell","eventClick","eventRendered","scrollUiUpdate","documentClick","cellMouseDown","DISABLE_CLASS","TABLE_CONTAINER_CLASS","ALLDAY_CELLS_CLASS","ALLDAY_ROW_CLASS","CONTENT_TABLE_CLASS","WORK_CELLS_CLASS","WORK_HOURS_CLASS","DATE_HEADER_WRAP_CLASS","DATE_HEADER_CONTAINER_CLASS","HEADER_CELLS_CLASS","CURRENT_PANEL_CLASS","PREVIOUS_PANEL_CLASS","TRANSLATE_CLASS","HIDE_CHILDS_CLASS","APPOINTMENT_WRAPPER_CLASS","TOOLBAR_CONTAINER","SELECTED_CELL_CLASS","APPOINTMENT_WRAP_CLASS","APPOINTMENT_CONTAINER_CLASS","APPOINTMENT_CLASS","APPOINTMENT_BORDER","APPOINTMENT_DETAILS","APPOINTMENT_SUBJECT","APPOINTMENT_LOCATION","TABLE_WRAP_CLASS","OUTER_TABLE_CLASS","CONTENT_WRAP_CLASS","AGENDA_CELLS_CLASS","NAVIGATE_CLASS","AGENDA_ALIGN_CLASS","APPOINTMENT_INDICATOR_CLASS","EVENT_INDICATOR_CLASS","EVENT_RECURRENCE_ICON_CLASS","EVENT_RECURRENCE_EDIT_ICON_CLASS","ALLDAY_APPOINTMENT_WRAPPER_CLASS","ALLDAY_WRAPPER_CLASS","ROW_COUNT_WRAPPER_CLASS","ALLDAY_APPOINTMENT_SECTION_CLASS","APPOINTMENT_ROW_EXPAND_CLASS","APPOINTMENT_ROW_COLLAPSE_CLASS","MORE_INDICATOR_CLASS","QUICK_POPUP_ROOT_CLASS","QUICK_POPUP_CLASS","QUICK_POPUP_SUBJECT_CLASS","QUICK_POPUP_TABLE_CLASS","QUICK_POPUP_DATE_TIME_DETAILS_CLASS","DEVICE_DATE_TIME_DETAILS_CLASS","DEVICE_RECURRENCE_SUMMARY_CLASS","QUICK_POPUP_LOCATION_DETAILS_CLASS","QUICK_POPUP_EVENT_DETAILS_CLASS","QUICK_POPUP_EVENT_TITLE_CLASS","QUICK_POPUP_EVENT_CREATE_CLASS","QUICK_POPUP_EDIT_EVENT_CLASS","QUICK_POPUP_DELETE_EVENT_CLASS","QUICK_POPUP_TEXT_ALIGN_CLASS","MORE_POPUP_WRAPPER_CLASS","MORE_EVENT_HEADER_DATE_CLASS","MORE_EVENT_CLOSE_CLASS","MORE_EVENT_CONTENT_CLASS","MORE_EVENT_WRAPPER_CLASS","DIALOG_FOOTER_CONTENT_CLASS","QUICK_DIALOG_EDIT_EVENT_CLASS","QUICK_DIALOG_EDIT_SERIES_CLASS","QUICK_DIALOG_DELETE_CLASS","QUICK_DIALOG_CANCEL_CLASS","QUICK_DIALOG_ALERT_BTN_CLASS","QUICK_DIALOG_HIDE_BTN_CLASS","EVENT_WINDOW_DIALOG_CLASS","EVENT_WINDOW_FORM_CLASS","EVENT_WINDOW_TZ_CLASS","EVENT_WINDOW_DESCRIPTION_CLASS","EVENT_WINDOW_START_TZ_CLASS","EVENT_WINDOW_END_TZ_CLASS","EVENT_WINDOW_DELETE_BUTTON_CLASS","SELECTED_EVENT_EDIT_CLASS","SELECTED_EVENT_DELETE_CLASS","SELECTED_EVENT_TITLE_CLASS","SELECTED_EVENT_CLOSE_CLASS","EVENT_ZONE_DETAILS_CLASS","EVENT_DETAILS_CLASS","EVENT_NOTE_DETAILS_CLASS","EVENT_EDIT_DISABLE_CLASS","EVENT_TOOLTIP_ROOT_CLASS","HeaderRenderer","events.documentClick","closeHeaderPopup","hideHeaderPopup","headerPopup","cls.TOOLBAR_CONTAINER","toolbarEle","renderToolbar","toolbarObj","updateActiveView","updateItems","getPopUpRelativeElement","isAdaptive","setDayOfWeek","headerCalendar","setCalendarDate","getCalendarView","setCalendarView","calendarView","setRtl","currentViewCls","updateDateRange","getDateRangeText","showInPopup","views","viewName","renderHeaderPopup","headerPopupEle","headerCalendarEle","calendarChange","changeDate","cls.POPUP_OPEN","changeView","isSelectedDate","util.resetTime","activeView","getNextPreviousDate","activeCellsData","msMajorInterval","isAllDay","eventWindow","openEditor","toolbarPopUp","getHeaderElement","setDimensions","cssProperties","ScheduleTouch","cls.TABLE_CONTAINER_CLASS","touchObj","onTransitionEnd","touchLeftDirection","touchRightDirection","cls.APPOINTMENT_WRAP_CLASS","timeStampStart","cls.TRANSLATE_CLASS","cls.CONTENT_WRAP_CLASS","isScrollTriggered","nextPanel","getTranslateX","prevWidth","previousPanel","cls.PREVIOUS_PANEL_CLASS","offsetDist","swapPanels","confirmSwipe","cancelSwipe","cls.APPOINTMENT_CLASS","cls.WORK_CELLS_CLASS","cls.ALLDAY_CELLS_CLASS","cls.HEADER_CELLS_CLASS","getCellDetails","quickPopup","eventHold","clsName","nextPrevType","currentPanel","getRenderDates","renderLayout","navArgs","events.navigating","cls.CURRENT_PANEL_CLASS","WebKitCSSMatrix","webkitTransform","m41","resetValues","KeyboardInteraction","shiftDownArrow","shiftUpArrow","shiftRightArrow","shiftLeftArrow","ctrlLeftArrow","ctrlRightArrow","altOne","altTwo","altThree","altFour","altFive","altSix","processDown","processUp","processLeft","processRight","processViewNavigation","processEnter","focusFirstCell","processTab","processDelete","processEscape","event.cellMouseDown","onCellMouseDown","initialTarget","activeViewOptions","onMouseSelection","onMoveup","allDayRow","getAllDayRow","onAppointmentSelection","eventBase","getSelectedEventElements","event.cellClick","cls.MORE_EVENT_CLOSE_CLASS","cls.ALLDAY_APPOINTMENT_SECTION_CLASS","cls.MORE_INDICATOR_CLASS","cls.MORE_EVENT_HEADER_DATE_CLASS","getCells","isInverseTable","tableEle","maxRow","maxColumn","inverseCells","focusCell","cls.AGENDA_CELLS_CLASS","removeSelectedAppointmentClass","getWorkCellElements","isInverseTableSelect","isMultiple","removeSelectedClass","getAllDayCells","addSelectedClass","selectAppointment","isReverse","isMoreEvent","appointments","moreEventWrapper","cls.MORE_EVENT_WRAPPER_CLASS","getAppointmentElements","nextAppEle","addSelectedAppointments","selectAppointmentElementFromWorkCell","appointmentElements_1","getUniqueAppointmentElements","filteredElements_1","selectedDate_1","eventsProcessed","eventObject","eventFields","focusElements","getAppointmentElementsByGuid","util.MS_PER_DAY","appointmentElements","self","getWorkCellFromAppointmentElement","selectedObject","getEventByGuid","selectWorkCellByTime","viewOptions","getSelectedElements","selectedEventElements","getSelectedAppointments","cls.MORE_POPUP_WRAPPER_CLASS","curRowIndex","processLeftRight","maxIndex","isCancelLeftRightAction","selectedAppointments","curColIndex","maxColIndex","allDayRow_1","allDayRow_2","moreEventList","cls.APPOINTMENT_BORDER","activeEventData","getSelectedEvents","deleteClick","morePopup","onClosePopup","Timezone","localOffset","convertedDate","toLocaleString","fromOffset","toOffset","fromLocalOffset","toLocalOffset","removeLocalOffset","localTimezoneName","Intl","DateTimeFormat","resolvedOptions","timezoneData","Value","TIMES","ON","EVERY","UNTIL","DAYS","WEEKS","MONTHS","YEARS","SU","MO","TU","WE","TH","FR","SA","EventBase","slots","timeZonePropChanged","oldTimezone","processed","events_1","processTimezoneChange","processTimezone","recurrenceRule","recurrenceID","generateOccurrence","generateGuid","filterEvents","timezonePropertyChange","eventsData","event.dataReady","processedData","startTimezone","endTimezone","zone","fieldMapping","sortByTime","d1","d2","sortByDateTime","object1","object2","d3","d4","d5","d6","getSmallestMissingNumber","large","splitEventByDay","eventStartTime","eventEndTime","util.addDays","eventLength","util.getDaysCount","app","splitEvent","dateRender","util.getDateInMs","orgStart","orgEnd","slot","firstSlot","showWeekend","hasBreak","cloneEventObject","dateInRange","availSlot","focusElements_1","eventSelect","elementSelect","selectAppointments","selectedAppointments_1","keyboardInteractionModule","nearestTime","isAllDayAppointment","targetArea","isFullDay","event.documentClick","appointmentBorderRemove","wireAppointmentEvents","eventDoubleClick","event.eventClick","currentAction","openRecurrenceAlert","getEventMaxId","occurrenceCollection","currentViewDate","recurrenceException","clonedObject","getRecurrenceEvent","getOccurrencesByID","getOccurrencesByRange","event_3","Crud","refreshData","actionArgs","addEvent","editParms","processCrudTimezone","crudArgs","parentEvent","occurrence","exDate","excludeDateCheck","delApp","delApp_1","deleteEvent","normalEvent","recEvent","dataObj_1","normalEvent_1","event_4","recEvent_1","delApp_2","event_5","exceptionDateList","FieldValidator","renderFormValidator","errorPlacement","dlgContent","quickPopupElement","cls.QUICK_POPUP_ROOT_CLASS","cls.QUICK_POPUP_CLASS","QuickPopups","isMultipleEventSelect","fieldValidator","renderQuickPopup","renderQuickDialog","renderMoreEventPopup","renderEventPopup","afterOpen","afterQuickPopupOpen","beforeQuickPopupOpen","beforeQuickPopupClose","afterQuickPopupClose","primaryButton","flatButton","quickDialog","dialogButtonClick","beforeQuickDialogClose","dialogElement","moreEventArgs","cls.NAVIGATE_CLASS","noTitle","moreEventContent","afterMorePopupOpen","afterMorePopupClose","closeClick","dayNavigationClick","getDateFromElement","viewHeight","eventWrapper","cls.SELECT_POPUP_WRAPPER_CLASS","cls.QUICK_POPUP_TABLE_CLASS","cls.SELECTED_EVENT_CLOSE_CLASS","cls.SELECTED_EVENT_EDIT_CLASS","cls.SELECTED_EVENT_DELETE_CLASS","cls.ICON","cls.QUICK_POPUP_EVENT_TITLE_CLASS","cls.QUICK_POPUP_TEXT_ALIGN_CLASS","cls.QUICK_POPUP_DATE_TIME_DETAILS_CLASS","cls.SELECTED_EVENT_TITLE_CLASS","cls.APPOINTMENT_LOCATION","cls.QUICK_POPUP_LOCATION_DETAILS_CLASS","cls.EVENT_WINDOW_TZ_CLASS","cls.EVENT_ZONE_DETAILS_CLASS","cls.EVENT_DETAILS_CLASS","cls.EVENT_NOTE_DETAILS_CLASS","cls.DEVICE_DATE_TIME_DETAILS_CLASS","cls.DEVICE_RECURRENCE_SUMMARY_CLASS","editSeries","editEvent","selectedEventPopup","multipleEventPopup","eventPopup","editClick","dialogFooter","cls.DIALOG_FOOTER_CONTENT_CLASS","quickDialogClass","showQuickDialog","openDeleteAlert","openValidationError","popupType","event.popupOpen","createMoreEventList","moreEventContentEle","cls.MORE_EVENT_CONTENT_CLASS","moreEventWrapperEle","appointmentEle","data-guid","aria-grabbed","eventSettings","cls.APPOINTMENT_SUBJECT","cls.EVENT_RECURRENCE_ICON_CLASS","cls.EVENT_RECURRENCE_EDIT_ICON_CLASS","selectedEventDialog","showQuickInfo","cellTemplate","getFormattedString","details","cls.EVENT_WINDOW_FORM_CLASS","cls.QUICK_POPUP_SUBJECT_CLASS","cls.QUICK_POPUP_EVENT_DETAILS_CLASS","cls.QUICK_POPUP_EVENT_CREATE_CLASS","moreDetails","quickCellPopup","saveClick","detailsClick","validation","eventTooltip","deviceEventClick","eventTemplate","eventSubject","cls.QUICK_POPUP_DELETE_EVENT_CLASS","cls.QUICK_POPUP_EDIT_EVENT_CLASS","quickEventPopup","eventSelectSubject","eventTimeDetails","eventSelectDetails","getTimeDetails","getTimezone","ruleSummary","getRecurrenceEditorInstance","getRuleSummary","cls.DISABLE_CLASS","showEventPopup","startDateDetails","endDateDetails","startTimeDetail","endTimeDetail","allDayLength","spanLength","moreEventClick","saveObj","cls.QUICK_DIALOG_EDIT_EVENT_CLASS","cls.QUICK_DIALOG_EDIT_SERIES_CLASS","cls.QUICK_DIALOG_DELETE_CLASS","cls.EVENT_EDIT_DISABLE_CLASS","zoneDetails","zoneData","getDataFromTarget","cls.QUICK_DIALOG_CANCEL_CLASS","cls.QUICK_DIALOG_ALERT_BTN_CLASS","cls.QUICK_DIALOG_HIDE_BTN_CLASS","EventTooltip","cls.EVENT_TOOLTIP_ROOT_CLASS","tooltipTemplate","eventStart","eventEnd","tooltipSubject","startMonthDate","startMonthYearDate","endMonthYearDate","getEventTooltipTemplate","INPUTWARAPPER","INPUTWARAPPERSIDE","REPEATINTERVAL","DAYWRAPPER","WEEKWRAPPER","YEAREXPANDERWRAPPER","YEAREXPANDERELEMENT","MONETHEXPANDERWRAPPER","MONTHEXPANDERELEMENT","MONTHEXPANNDERELEM","ENDONDATE","ENDONCOUNTWRAPPER","ENDONCOUNT","HIDEWRAPPER","PRIMARY","none","daily","weekly","monthly","yearly","valueData","neverClassList","weekClassList","monthClassList","yearClassList","dailyClassList","noEndClassList","endOnCountClassList","endOnDateClassList","RecurrenceEditor","never","third","fourth","repeatEvery","onDay","weeks","years","summaryTimes","summaryOn","summaryUntil","summaryRepeat","summaryDay","summaryWeek","summaryMonth","summaryYear","renderStatus","destroyStatus","dayButtons","monthButtons","startState","endOn","showFormElement","updateForm","freshOnEndForm","updateEndOnForm","selectMonthDay","updateUntilDate","onMonthDay","applyCustomClass","renderComponent","repeatType","triggerChangeEvent","getRecurrenceRule","resetDayButton","daySelection","rotateArray","rtlClass","untilDateObj","monthDate","monthWeekDays","monthValue","monthWeekPos","getDayPosition","endType","renderDropdowns","getRepeatData","selectedType","resetFormValues","getEndData","getPopupWidth","getMonthPosData","onWeekDay","monthDayRendering","setDefaultValue","formelement","recurreneElement","getDayData","getMonthData","renderDatePickers","dayButtonRender","btns","radioButtonRender","numericTextboxRender","recurrenceCount","positionCollection","monthposValue","weekday_1","getSelectedDaysData","ruleData","RULEBYDAY","getSelectedMonthData","RULEBYMONTHDAY","getIntervalData","RULEINTERVAL","getEndOnCount","RULECOUNT","getYearMonthRuleData","RULEBYMONTH","updateWeekButton","updateMonthUI","updateUI","getUntilData","RULEUNTIL","destroyComponents","resetFields","cldrObj1","generateSummary","getRecurrenceDates","RULEFREQ","RULEDAILY","RULEWEEKLY","RULEMONTHLY","RULEYEARLY","setRecurrenceRule","endon","EVENT_FIELD","REPEAT_CONTAINER_CLASS","EventWindow","renderEventWindow","dialogContent","getEventWindowContent","dialogObject","cls.EVENT_WINDOW_DIALOG_CLASS","onBeforeOpen","onBeforeClose","cls.EVENT_WINDOW_DELETE_BUTTON_CLASS","eventDelete","eventSave","editorTemplate","cellClickAction","onCellDetailsUpdate","onEventDetailsUpdate","setDialogContent","getDefaultEventWindowContent","templeteEle","getEditorTemplate","parentDiv","createDivElement","titleLocationDiv","titleDiv","renderTextBox","locationDiv","startEndDateTimeDiv","startDateTimeDiv","renderDateTimePicker","onTimeChange","endDateTimeDiv","timezoneParentDiv","startTimezoneDiv","renderDropDown","cls.EVENT_WINDOW_START_TZ_CLASS","endTimezoneDiv","cls.EVENT_WINDOW_END_TZ_CLASS","allDayTimezoneDiv","allDayDiv","renderCheckBox","timezoneDiv","repeatParentDiv","repeatDiv","repeatEditConainer","REPEAT_BUTTON_ICON_CLASS","cls.EVENT_WINDOW_DESCRIPTION_CLASS","descriptionDiv","loadRecurrenceEditor","createRecurrenceEditor","recurrenceEditor","renderRecurrenceEditor","dateTimeDiv","getFieldName","dateTimeInput","startObj","util.MS_PER_MINUTE","timezoneInput","onTimezoneChange","filtering","startTimezoneObj","endTimezoneObj","checkBoxDiv","checkBoxInput","repeatStatus","textBoxDiv","textBoxInput","onAllDayChange","timezoneChangeStyle","onRepeatChange","renderRepeatDialog","repeatDialogObject","repeatSaveDialog","repeatCancelDialog","repeatOpenDialog","repeatRule","repeatStartDate","updateRepeatLabel","closeRepeatDialog","repeatTempRule","eventObj","showDetails","getFormElements","keyNames","setValueToElement","setDefaultValueToElement","timezoneObj","allDayStatus","updateDateTime","workHours","formatType","timezoneValue","startTz","endTz","resetFormFields","tz","getValueFromElement","Repeat","eventId","getEventIdFromForm","initializeLayout","dayModule","weekModule","workWeekModule","monthModule","agendaModule","monthAgendaModule","firstView","updateLabelText","WorkHours","Field","EventSettings","Schedule","eventTooltipTemplateFn","templateParser","editorTemplateFn","showHeaderBar","scheduleTouchModule","initializeView","initializePopups","setViewOptions","isModuleLoad","selectedView","isOptions","fieldViewName","getActiveViewOptions","allowVirtualScrolling","dateHeaderTemplate","workDays","crudModule","initializeTemplates","cellTemplateFn","dateHeaderTemplateFn","appointmentTemplateFn","getDayNames","previousView","animateLayout","uiStateValues","workWeek","agenda","weekAgenda","workWeekAgenda","monthAgenda","noEvents","allDay","deleteSeries","addTitle","editContent","deleteRecurrenceContent","deleteContent","newEvent","saveButton","deleteButton","recurrence","editRecurrence","repeats","startEndError","invalidDateError","ok","onScheduleResize","allowKeyboardInteraction","selectedCells_1","cls.SELECTED_CELL_CLASS","cls.ALLDAY_ROW_CLASS","cls.CONTENT_TABLE_CLASS","getIndexOfDate","isAllDayCell","dateInMS","getCellTemplate","getDateHeaderTemplate","getAppointmentTemplate","uiArgs","events.scrollUiUpdate","highlightCurrentTime","onEventSettingsPropertyChanged","setWorkHours","viewStartHour","getStartHour","getEndHour","dates_1","renderDates","cls.WORK_HOURS_CLASS","getEndDateFromStartDate","scrollToHour","getEvents","eventID","getCurrentViewEvents","refreshEvents","getEventDetails","isSlotAvailable","adjustEventWrapper","ViewBase","customHelper","getDayName","createTableLayout","cls.SCHEDULE_TABLE_CLASS","isCurrentDate","isCurrentMonth","isWorkDay","isWorkHour","formatDateRange","longDateFormat","getMobileDateElement","dateEle","dayEle","WorkCellInteraction","isWorkCell","cellDblClick","AppointmentRendering","renderedEvents","renderedAllDayEvents","overlapEvents","moreEvents","minorSlotCount","majorSlot","allDayLevel","animationUiUpdate","renderAppointments","rowExpandCollapse","appointmentWrapper_1","alldayCountWrapper_1","cls.ROW_COUNT_WRAPPER_CLASS","allDayElement","setAllDayRowHeight","allDayEvents","startDateTime","endDateTime","length1","renderVerticalEvents","renderAllDayEvents","createAppointmentElement","appointmentWrapper","appointmentDetails","cls.APPOINTMENT_DETAILS","recordSubject","appointmentSubject","appointmentStartTime","appointmentEndTime","timeStr","recurrenceIcon","renderSpannedIcon","createMoreIndicator","currentDay","countWrapper","innerCountWrap","moreIndicatorElement","data-index","data-count","countCell","spanEvent","cls.EVENT_INDICATOR_CLASS","isSpannedEvent","startEndHours","util.getStartEndHours","overlapList","allDayRowCell","cls.ALLDAY_WRAPPER_CLASS","cellTop","eStart","eEnd","appWidth","isDateRange","allDayDifference","allDayIndex","getOverlapIndex","widthAdjustment","appointmentElement","appHeight","events.eventRendered","length_3","allDayRowHeight","addOrRemoveClass","getAppointmentHeight","getTopValue","appIndex","adjustOverlapElements","appointmentWrap","cls.APPOINTMENT_WRAPPER_CLASS","appLeft","eventsList","date_1","appointmentList_1","appointment_1","filterList","eventsList_1","appLevel","length2","eleGuid","apps","moreEventCount","cls.APPOINTMENT_ROW_EXPAND_CLASS","cls.APPOINTMENT_ROW_COLLAPSE_CLASS","getEventHeight","eventElement","VerticalView","currentDateIndex","viewClass","workCellAction","event.scrollUiUpdate","renderEvents","getTimeCellsElement","getDatesHeaderElement","headerHeight","timecells","getScrollableElement","scrollerHeight","scrollBarWidth","util.getScrollBarWidth","scrollToWorkHour","firstWorkHourCell","getTopFromDateTime","generateColLevels","colLevels","isWorkHourRange","showTimeIndicator","changeCurrentTimePosition","currentTimeIndicatorTimer","clearCurrentTimeIndicatorTimer","removeCurrentTimeIndicatorElements","currentTimeEle","timelineEle","firstRow","firstCell","prevLineWidth","currentLineWidth","topInPx","timeCellsWrap","cls.HIDE_CHILDS_CLASS","timelineWrap","previousDateTimelineEle","currentDateTimelineEle","getContentAreaElement","getWorkCellHeight","getTdContent","cls.TABLE_WRAP_CLASS","cls.OUTER_TABLE_CLASS","indentTd","dateTd","renderLeftIndent","renderDatesHeader","workTd","scrollContainer","renderTimeCells","renderContentArea","timesTd","tbl","ntr_1","createTd","ntr","appointmentExpandCollapse","nth","cls.DATE_HEADER_CONTAINER_CLASS","cls.DATE_HEADER_WRAP_CLASS","innerWrap","cls.ALLDAY_APPOINTMENT_WRAPPER_CLASS","lastLevel","ntr_2","ntd","wireCellEvents","elementType","event.renderCell","getTimeSlotRows","columns_2","cellDate","util.setTime","innerAppointmentWrap","data-dayindex","msInterval","tblWidth","msStartHour","msEndHour","majorTickDivider","Day","daysCount","Week","util.getWeekFirstDate","WorkWeek","par","MonthEvent","workCells","eventHeight","getElementHeightFromClass","monthHeaderHeight","getOuterHeight","noOfDays","splittedEvents_1","renderAppointmentMonth","eventLocation","overlapCount","appTop","diffInDays","appWidth_1","cellTd","cellTd_1","appArea","renderedAppCount","data-start-date","data-end-date","moreIndicatorClick","appointmentsList","appointments_1","Month","dayNameFormat","onScrollUiUpdate","onCellClick","getDayNameFormat","renderAppointmentContainer","rowsCount","createHeaderCell","isOtherMonth","noOfRows","startCol","endCol","renderDateHeaderElement","dateHeader","monthStart","util.firstDateOfMonth","monthEnd","util.lastDateOfMonth","util.WEEK_LENGTH","util.addMonths","AgendaBase","createAgendaContentElement","aTd","appWrapper","createAppointment","event.eventRendered","appSubjectWrap","strDate","allDayStr","processAgendaEvents","splited","wireEventActions","eventElement_1","dateHeaderElement_1","Agenda","agendaDates","virtualScrollTop","agendaBase","eTr","agendaDate","renderEmptyContent","eventLoad","firstDate","appointmentFiltering","appoint","updateHeaderText","hideEmptyAgendaDays","agendaDaysCount","filterData","nTr","createTableRowElement","dTd","createDateHeaderElement","eTd","aria-rowindex","aria-colindex","data-date","templateArgs","agendaScrolling","virtualScrolling","filterDate","emptyTBody","topElement","getElementFromScrollerPosition","scrollDate","getPreviousNextDate","scrollToValue","dateRangeText","getStartDateFromEndDate","dateStart","dateEnd","onAgendaScrollUiUpdate","cls.AGENDA_ALIGN_CLASS","MonthAgenda","contentArea","appWrap","appendAppContainer","setEventWrapperHeight","availableHeight","clearElements","workCell","cls.APPOINTMENT_INDICATOR_CLASS","onEventRender","appContainer","cls.APPOINTMENT_CONTAINER_CLASS","appointmentIndicators_1","index.Schedule","index.Day","index.Week","index.WorkWeek","index.Month","index.Agenda","index.MonthAgenda","DropDownButton","openPopUp","dropDown","getPopUpElement","hasIcon","createAnchor","setIconPositionTop","appendArrowSpan","setActiveElem","iconSpan","activeElem","getULElement","keyEventHandler","liIdx","beforeOpenArgs","openArgs","btnModel","TAGNAME","SplitButton","createPrimaryButton","createSecondaryButton","setAria","primaryBtnObj","btnElem","dropDownBtnModel","secondaryBtnObj","primaryBtnClickHandler","btnKeyBoardHandler","altdownarrow"],"mappings":"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,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,KACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,KACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,IACVC,IAAU,I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AK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,KAMThB,EAA8B8B,YAC1B,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAM/E9B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IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,IAAK,IAAM,IAAK,IAAK,IAAK,IAAM,IAAK,IAAK,IAAK,EACzE,IAAK,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAM,IAAK,IAAM,IAAK,IAAK,IAAK,EACzE,IAAK,IAAK,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EACzE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,KAMT3C,EAA8B2D,aAC1B,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,IAClE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAM,IAAK,IAClE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAClE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,GAMxC3D,EAA8B+D,mBAC1B,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACjE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,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,GACnCkvD,IACI7iD,KAAY0tU,KACbG,EAASl6U,UAAW,cAAU,GACjCkvD,IACI1jD,GAAS,IACV0uU,EAASl6U,UAAW,qBAAiB,GACxCkvD,IACI1jD,KACD0uU,EAASl6U,UAAW,oBAAgB,GACvCkvD,IACI1jD,KACD0uU,EAASl6U,UAAW,qBAAiB,GACxCkvD,IACI1jD,EAAS,SACV0uU,EAASl6U,UAAW,iBAAa,GACpCkvD,IACI1jD,GAAS,IACV0uU,EAASl6U,UAAW,oBAAgB,GACvCkvD,IACIpiD,KACDotU,EAASl6U,UAAW,eAAW,GAClCkvD,IACIpiD,KACDotU,EAASl6U,UAAW,iBAAa,GACpCkvD,IACIpiD,KACDotU,EAASl6U,UAAW,gBAAY,GACnCkvD,IACIpiD,KACDotU,EAASl6U,UAAW,iBAAa,GACpCkvD,IACIpiD,KACDotU,EAASl6U,UAAW,gBAAY,GACnCkvD,IACIpiD,KACDotU,EAASl6U,UAAW,mBAAe,GACtCkvD,IACIpiD,KACDotU,EAASl6U,UAAW,oBAAgB,GACvCkvD,IACIpiD,KACDotU,EAASl6U,UAAW,mBAAe,GACtCkvD,IACIpiD,KACDotU,EAASl6U,UAAW,qBAAiB,GACxCkvD,IACIpiD,KACDotU,EAASl6U,UAAW,sBAAkB,GACzCkvD,IACIpiD,KACDotU,EAASl6U,UAAW,oBAAgB,GACvCkvD,IACIpiD,KACDotU,EAASl6U,UAAW,qBAAiB,GACxCkvD,IACIpiD,KACDotU,EAASl6U,UAAW,oBAAgB,GACvCkvD,IACIpiD,KACDotU,EAASl6U,UAAW,mBAAe,GACtCkvD,IACIpiD,KACDotU,EAASl6U,UAAW,kBAAc,GACrCkvD,IACIpiD,KACDotU,EAASl6U,UAAW,mBAAe,GACtCkvD,IACIpiD,KACDotU,EAASl6U,UAAW,oBAAgB,GACvCkvD,IACIpiD,KACDotU,EAASl6U,UAAW,qBAAiB,GACxCkvD,IACIpiD,KACDotU,EAASl6U,UAAW,oBAAgB,GACvCkvD,IACIpiD,KACDotU,EAASl6U,UAAW,qBAAiB,GACxCk6U,EAAWhrR,IACP9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nCkvD,IACI7iD,KAAY6gP,KACb6mL,EAAK/za,UAAW,sBAAkB,GACrCkvD,IACI1iD,KAAeqga,KAChBkH,EAAK/za,UAAW,cAAU,GAC7BkvD,IACI1iD,KAAey7R,KAChB8rI,EAAK/za,UAAW,mBAAe,GAClCkvD,IACI7iD,KAAY0mO,KACbghM,EAAK/za,UAAW,cAAU,GAC7BkvD,IACI7iD,GAAU4qB,MAAO,UAAW3d,MAAO,GAAKu5N,KACzCkhM,EAAK/za,UAAW,cAAU,GAC7BkvD,IACI1jD,EAAS,aACVuoa,EAAK/za,UAAW,aAAS,GAC5BkvD,IACI1jD,EAAS,aACVuoa,EAAK/za,UAAW,sBAAkB,GACrCkvD,IACI1jD,EAAS,IACVuoa,EAAK/za,UAAW,sBAAkB,GACrCkvD,IACI1jD,EAAS,OACVuoa,EAAK/za,UAAW,mBAAe,GAClCkvD,IACI1jD,EAAS,IACVuoa,EAAK/za,UAAW,gBAAY,GAC/BkvD,IACI1jD,GAAW0nC,SAAU,KAAMC,UAAW,QACvC4gY,EAAK/za,UAAW,sBAAkB,GACrCkvD,IACI7iD,KAAY2ga,KACb+G,EAAK/za,UAAW,gBAAY,GAC/BkvD,IACIpiD,KACDina,EAAK/za,UAAW,YAAQ,GAC3BkvD,IACIpiD,KACDina,EAAK/za,UAAW,mBAAe,GAClCkvD,IACIpiD,KACDina,EAAK/za,UAAW,cAAU,GAC7BkvD,IACIpiD,KACDina,EAAK/za,UAAW,aAAS,GAC5BkvD,IACIpiD,KACDina,EAAK/za,UAAW,mBAAe,GAClCkvD,IACIpiD,KACDina,EAAK/za,UAAW,kBAAc,GACjCkvD,IACIpiD,KACDina,EAAK/za,UAAW,cAAU,GAC7BkvD,IACIpiD,KACDina,EAAK/za,UAAW,qBAAiB,GACpCkvD,IACIpiD,KACDina,EAAK/za,UAAW,qBAAiB,GACpCkvD,IACIpiD,KACDina,EAAK/za,UAAW,qBAAiB,GACpCkvD,IACIpiD,KACDina,EAAK/za,UAAW,qBAAiB,GACpCkvD,IACIpiD,KACDina,EAAK/za,UAAW,sBAAkB,GACrCkvD,IACIpiD,KACDi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"} \ No newline at end of file diff --git a/Views/Excel/AttendanceTracker.cshtml b/Views/Excel/AttendanceTracker.cshtml deleted file mode 100644 index ed57d8cc6..000000000 --- a/Views/Excel/AttendanceTracker.cshtml +++ /dev/null @@ -1,54 +0,0 @@ -@using Syncfusion.EJ2 - -@section ActionDescription{ - This sample demonstrates how to use Attendance Tracker in spreadsheets using Excel (XlsIO) Library. - } - -@section Meta{ - - } - -@section Description{ - Attendance Tracker or Attendance sheet is essential to any organization. This Attendance tracker is designed to keep one month data. In this application, Employee Name, Supervisor, Present Count, Absent Count, Leave Count, Unplanned%, Planned% and dates for a particular month are available. -
    -
    -Features: -
    -
    Essential XlsIO supports Attendance Tracker application features. This sample demonstrates following features: -
    -
    -
      -
    • Conditional formatting
    • -
    • Advanced options of Excel--such as color scales, data bars
    • -
    • Number formats
    • -
    • Formulas
    • -
    • Text styles (bold, italic, underline, font name, and font color)
    • -
    - } -@section ControlsSection{ -
    - @{Html.BeginForm("AttendanceTracker", "Excel", FormMethod.Post); - { -
    -

    - Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    -
    -
    - -
    -
    - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Attendance Tracker Example - Syncfusion Demos - } -@section Header{ -

    Example of Attendance Tracker in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/AutoFill.cshtml b/Views/Excel/AutoFill.cshtml deleted file mode 100644 index 2c0da84f5..000000000 --- a/Views/Excel/AutoFill.cshtml +++ /dev/null @@ -1,226 +0,0 @@ -@using Syncfusion.EJ2 -@model EJ2MVCSampleBrowser.Models.AutoFillOptionsModel -@{ - ViewBag.Title = "Excel AutoFill"; -} - -@section ControlsSection { -
    -

    - Click the "Create Document" button to generate and view the Excel file. You can enter the Step Value and Stop Value as either a number or a date in MM/DD/YYYY format, and the generated document can be opened using Microsoft Excel or Excel Viewer. -

    -
    - @using (Html.BeginForm("AutoFill", "excel", FormMethod.Post)) - { -
    - - - - - -
    - -
    - - @Html.DropDownListFor(m => m.SelectedAutoFillOption, - (IEnumerable)ViewBag.AutoFillOptions, - new { @class = "form-control", style = "width: 200px; display: inline-block;", id = "autoFillOption" }) -
    - -
    - - @Html.DropDownListFor(m => m.SeriesBy, - (IEnumerable)ViewBag.SeriesByList, - new { @class = "form-control", style = "width: 200px; display: inline-block; margin-right: 10px;", id = "seriesBy" }) -
    - -
    - @Html.CheckBoxFor(model => model.Trend, new - { - @class = "form-check-input", - @id = "trendCheckbox", - @style = "margin: 0 2px 0 5px; transform: translateY(1px);" - }) - -
    - -
    - - @Html.TextBoxFor(m => m.StepValue, - new { @class = "form-control", style = "width: 200px; display: inline-block;", id = "stepValue", placeholder = "Enter Value", disabled = "disabled" }) -
    - -
    - - @Html.TextBoxFor(m => m.StopValue, - new { @class = "form-control", style = "width: 200px; display: inline-block;", id = "stopValue", placeholder = "Enter Value", disabled = "disabled" }) -
    - -
    - -
    - } -
    -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to use the Auto Fill and Fill Series options using XlsIO. -
    -} -@section Description{ -
    -

    The Auto Fill and Fill Series features enable users to programmatically populate a range of Excel cells based on defined patterns, sequences, or trends. These capabilities help reduce manual data entry by automatically generating values using built-in logic.

    -

    Features:

    -
      -
    • Allows automatic filling of cells with common sequences, including numbers, months, and custom patterns.
    • -
    • Offers Fill Series options, including linear, growth, and date-based sequences.
    • -
    • Supports configuration of step value, stop value, series direction, and trend usage.
    • -
    -
    -} -@section Meta{ - -} -@section Title{ - ASP.NET MVC Excel (XlsIO) library - AutoFill Example - Syncfusion Demos -} -@section Header{ -

    Example of Auto Fill and Fill Series in ASP.NET MVC Excel (XlsIO) Library

    -} - -@section Scripts { - -} \ No newline at end of file diff --git a/Views/Excel/AutoFilter.cshtml b/Views/Excel/AutoFilter.cshtml deleted file mode 100644 index 8b7e9d8fe..000000000 --- a/Views/Excel/AutoFilter.cshtml +++ /dev/null @@ -1,245 +0,0 @@ -@using Syncfusion.EJ2 - -@section ActionDescription{ - This sample demonstrates how to use Autofilters in spreadsheets using Excel (XlsIO) Library. -} - -@section Meta{ - - } - -@section Description{ - XlsIO can filter a range of cells dynamically without any dependency of Microsoft Excel. -
    -
    - Features: -
    -
    -
      -
    • Custom Filter
    • -
    • Text Filter
    • -
    • DateTime Filter
    • -
    • Dynamic Filter
    • -
    • Color Filter
    • -
    • Icon Filter
    • -
    • Advanced Filter
    • -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("AutoFilter", "Excel", FormMethod.Post); - { -
    -

    - Click the "Input Template" button to view the input Excel document and click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    -
    -
    -   - -
    -
    -
    -
    -                     - - -   - - -
    -
    -                                          - - -
    - -
    -                       - - -   - - -
    -
    -                              - -
    -
    -                  - -                                         -
    -
    -
    - - - - - -
    -                           - -
    - @Html.EJS().ComboBox("selectIcon").Width("70%").DataSource((IEnumerable)ViewData["datasource"]).Fields(new Syncfusion.EJ2.DropDowns.ComboBoxFieldSettings { Text = "iconId" }).ItemTemplate("
    ${iconId}
    ").Placeholder("Select Icon").ShowClearButton().Index(0).Text("1").Change("onChange").Render() -
    -
    - @Html.EJS().ComboBox("selectIcon2").Width("70%").DataSource((IEnumerable)ViewData["datasource2"]).Fields(new Syncfusion.EJ2.DropDowns.ComboBoxFieldSettings { Text = "iconId" }).ItemTemplate("
    ${iconId}
    ").Placeholder("Select Icon").ShowClearButton().Index(0).Change("onChange").Text("1").Render() -
    -
    - @Html.EJS().ComboBox("selectIcon3").Width("70%").DataSource((IEnumerable)ViewData["datasource3"]).Fields(new Syncfusion.EJ2.DropDowns.ComboBoxFieldSettings { Text = "iconId" }).ItemTemplate("
    ${iconId}
    ").Placeholder("Select Icon").ShowClearButton().Index(0).Change("onChange").Text("1").Render() -
    - -
    -
    -
    -
    -
    - - - - - - -
    - - -    - - -
    -
    -
    - -
    - - - - - - Html.EndForm(); - } - } -
    -} -@section Scripts{ - - -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Filters Example - Syncfusion Demos - } -@section Header{ -

    Example of Filters in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/AutoShapes.cshtml b/Views/Excel/AutoShapes.cshtml deleted file mode 100644 index b06ce2b3a..000000000 --- a/Views/Excel/AutoShapes.cshtml +++ /dev/null @@ -1,54 +0,0 @@ -@using Syncfusion.EJ2 - -@section ActionDescription{ - This sample demonstrates how to use AutoShapes in spreadsheets using Excel (XlsIO) Library. - } - -@section Meta{ - - } - -@section Description{ - AutoShapes help you to draw objects on your document. You can create various shapes using AutoShapeType enumeration. Once you insert an AutoShape, you can also put a text inside it and you can move or resize them as you wish. -
    -
    The IShape interface is the in-memory representation of the AutoShapes in an Excel workbook. These are used to create Autoshapes and to set properties for those shapes. The ITextFrame interface can be used to set various shape text formats. -
    -
    -Features: -
    -
    Essential XlsIO supports all major AutoShape features.This sample demonstrates following features: -
    -
    -
      -
    • Shape Text
    • -
    • Text Alignment
    • -
    • SolidFill
    • -
    - } -@section ControlsSection{ -
    - @{Html.BeginForm("AutoShapes", "Excel", FormMethod.Post); - { -
    -

    - Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    -
    -
    - -
    -
    - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - AutoShapes Example - Syncfusion Demos - } -@section Header{ -

    Example of AutoShapes in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/BoxAndWhisker.cshtml b/Views/Excel/BoxAndWhisker.cshtml deleted file mode 100644 index 043a0f140..000000000 --- a/Views/Excel/BoxAndWhisker.cshtml +++ /dev/null @@ -1,47 +0,0 @@ -@using Syncfusion.EJ2 - -@section ActionDescription{ - This sample demonstrates how to create Box and Whisker chart using Excel (XlsIO) Library. - } - -@section Meta{ - - } - -@section ControlsSection{ -
    - @{Html.BeginForm("BoxAndWhisker", "Excel", FormMethod.Post); - { -
    -

    - Click the "Input Template" button to view the input Excel document and click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    - Save As : - - -   - - -
    -
    -
    - - - Html.EndForm(); - } - } -
    - -} -@section Description{ - A box and whisker chart shows distribution of data into quartiles, highlighting the mean and outliers. The boxes may have lines extending vertically called “whiskers”. These lines indicate variability outside the upper and lower quartiles, and any point outside those lines or whiskers is considered an outlier.
    - Essential XlsIO has APIs for creating and modifying Box and Whisker charts. -} -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Box and Whisker Example - Syncfusion Demos - } -@section Header{ -

    Example of Box and Whisker in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/BudgetPlanner.cshtml b/Views/Excel/BudgetPlanner.cshtml deleted file mode 100644 index 34e7ac67f..000000000 --- a/Views/Excel/BudgetPlanner.cshtml +++ /dev/null @@ -1,58 +0,0 @@ -@using Syncfusion.EJ2 -@section ControlsSection{ -
    - @{Html.BeginForm("BudgetPlanner", "Excel", FormMethod.Post); - { -

    - Click the "Input Template" button to view the input Excel document and click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    - Save As : - - -   - - -
    -
    -
    - - -
    - Html.EndForm(); - } - } -
    -} -@section Description{ - It may be difficult to decide how much you can afford to save or how much you can spend every month. This budget planner application created using Essential XlsIO will help you to determine your monthly disposable income. Enter your annual income and expenses in the Quick Budget Sheet to assess your financial position.
    -
    - Features: -
    -
    -
      -
    • Text box insertion and formatting
    • -
    • Image insertion
    • -
    • Number formats
    • -
    • Formulas
    • -
    • Charts
    • -
    • Views-heading, sheet hiding, row-column hiding, and tab colors
    • -
    • Data validation list
    • -
    • Text styles (bold, italic, underline, font name, and font color)
    • -
    -} -@section ActionDescription{ -

    - This sample demonstrates how to create a simple Budget planner using Excel (XlsIO) Library. -

    -} -@section Meta{ - - } -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Budget Planner Example - Syncfusion Demos - } -@section Header{ -

    Example of Budget Planner in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/CallCenterDashboard.cshtml b/Views/Excel/CallCenterDashboard.cshtml deleted file mode 100644 index 95bc0385e..000000000 --- a/Views/Excel/CallCenterDashboard.cshtml +++ /dev/null @@ -1,49 +0,0 @@ -@using Syncfusion.EJ2 -@section ControlsSection{ -
    - @{Html.BeginForm("CallCenterDashboard", "Excel", FormMethod.Post); - { -

    - Click the "Input Template" button to view the input Excel document and click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    - - -
    - Html.EndForm(); - } - } -
    -} -@section Description{ - Call Center dashboard helps in assessing the performance in different levels such as call center level, agent level, and department level over a period of time.
    -
    - Features: -
    -
    -
      -
    • Number formats
    • -
    • Formulas
    • -
    • Cell style formattings (Borders, Font, Alignment, Fill color)
    • -
    • Rich-text formatting
    • -
    • Macros for scroll-bars and option buttons
    • -
    • Advanced conditional formatting with icon sets
    • -
    • Sparklines
    • -
    • Charts
    • -
    -} -@section ActionDescription{ -

    - This sample demonstrates how to create a simple Call Center dashboard using Excel (XlsIO) Library. -

    -} -@section Meta{ - - } -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Call Center Dashboard Example - Syncfusion Demos - } -@section Header{ -

    Example of Call Center Dashboard in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/ChartWorksheet.cshtml b/Views/Excel/ChartWorksheet.cshtml deleted file mode 100644 index 29777d032..000000000 --- a/Views/Excel/ChartWorksheet.cshtml +++ /dev/null @@ -1,63 +0,0 @@ -@using Syncfusion.EJ2 - -@section ActionDescription{ - This sample demonstrates how to create a simple chart sheet using Excel (XlsIO) Library. - } - -@section Meta{ - - } - -@section Description{ -
    -

    - A chart sheet is a worksheet in a workbook that has its own sheet name. These are employed to give a clearer view when using a large chart with a large data. The chart is linked to worksheet data and is updated automatically when there are changes. - The IChart interface is the in-memory representation of the chart worksheet in an Excel workbook. These are used to create charts and to set properties for those charts. The IChartSerie interface can be used to set various formats for a series. -

    -
    - Features: -
    -
    -
      -
    • Axes
    • -
    • Labels
    • -
    • Titles
    • -
    • Gradients
    • -
    • Chart Types
    • -
    • Chart Filters
    • -
    -
    -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("ChartWorksheet", "Excel", FormMethod.Post); - { -

    - Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    - Save As : - - -   - - -
    -
    -
    - -
    - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Chart Worksheet Example - Syncfusion Demos - } -@section Header{ -

    Example of Chart Worksheet in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/CollectionObjects.cshtml b/Views/Excel/CollectionObjects.cshtml deleted file mode 100644 index 3fe713091..000000000 --- a/Views/Excel/CollectionObjects.cshtml +++ /dev/null @@ -1,72 +0,0 @@ -@using Syncfusion.EJ2 - -@section ActionDescription{ - This sample demonstrates how to use Collection Objects in spreadsheets using Excel (XlsIO) Library. -} -@section Meta{ - - } -@section Description{ - Essential XlsIO allows you to import/export data from/to Collection Objects. Collection object usually holds a set of instance variables or properties, also known as attributes. -
    -
    This sample demonstrates the usage of Collection objects using Essential XlsIO. -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("collectionobjects", "excel", FormMethod.Post); - { -
    -

    - Click the "Import From Excel" button to import data from nested class into the ListView. -

    -

    - Click the "Export To Excel" button to view the Excel document created by exporting the nested class data from the ListView using Essential XlsIO. - Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    - @Html.EJS().Grid("Export").AllowPaging(true).DataSource((IEnumerable)ViewData["DataSource"]).Columns(col => - { - col.Field("ID").HeaderText("ID").IsPrimaryKey(true).Visible(false).TextAlign(Syncfusion.EJ2.Grids.TextAlign.Left).Width("40").Add(); - col.Field("BrandName").HeaderText("Brand").Width("70").TextAlign(Syncfusion.EJ2.Grids.TextAlign.Left).Add(); - col.Field("VehicleType.VehicleName").HeaderText("Vehicle Type").Width("70").TextAlign(Syncfusion.EJ2.Grids.TextAlign.Left).Add(); - col.Field("VehicleType.Model.ModelName").HeaderText("Model").Width("70").TextAlign(Syncfusion.EJ2.Grids.TextAlign.Left).Add(); - }).Width("550").Height("250").Render() - -
    -
    -
    - Save As : - - -   - - -
    -
    -
    -
    - - - -
    -
    - - - - Html.EndForm(); - } - } - -} -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Collection Objects Example - Syncfusion Demos - } -@section Header{ -

    Example of Collection Objects in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/Comments.cshtml b/Views/Excel/Comments.cshtml deleted file mode 100644 index a64d224ac..000000000 --- a/Views/Excel/Comments.cshtml +++ /dev/null @@ -1,49 +0,0 @@ -@using Syncfusion.EJ2 - -@section ActionDescription{ - The sample shows how to add notes and comments in Excel document using Essential XlsIO. -} - -@section Meta{ - -} -@section Description{ -
    -

    Notes were formally called comments in earlier versions of Excel and do not have a reply option. These are used for making simple notes related to the data.

    -

    Comments are now threaded, and allow you to have discussions with other users about the data. It has reply option. When other users reply, it creates conversation in the workbook for the specific cells.

    -
    -} - -@section ControlsSection -{ -
    - @{Html.BeginForm("Comments", "Excel", FormMethod.Post); - { -

    - Click the "Input Template" button to view the input Excel document. -

    -

    - Click the "Create Document" button to view the output Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -

    - Click the "Convert To PDF" button to view the generated PDF document. -

    -
    -
    - - - -
    - Html.EndForm(); - } - } -
    -} - - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Comments Example - Syncfusion Demos -} -@section Header{ -

    Example of Comments in ASP.NET MVC Excel (XlsIO) Library

    -} \ No newline at end of file diff --git a/Views/Excel/ComputeAllformulas.cshtml b/Views/Excel/ComputeAllformulas.cshtml deleted file mode 100644 index e1da5d75f..000000000 --- a/Views/Excel/ComputeAllformulas.cshtml +++ /dev/null @@ -1,52 +0,0 @@ -@using Syncfusion.EJ2 - -@section ActionDescription{ - This sample demonstrates how to use formulas in spreadsheets using Excel (XlsIO) Library. -} -@section Meta{ - - } -@section Description{ -

    - Essential XlsIO can compute the values of a formula entered during run time using the calculate engine that is integrated in XlsIO. This makes it possible to retrieve the values of formulas that were entered using Excel (XlsIO) Library during run time. Currently, over 400 functions are supported, which covers all common usage scenarios. -

    -
    - Features: -
    -
    -
      -
    • Writing formulas using Excel (XlsIO) Library
    • -
    • Formula calculation using the integrated calculate engine
    • -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("ComputeAllformulas", "Excel", FormMethod.Post); - { -

    - Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    - Save As : - - -   - - -
    -
    -
    - -
    - Html.EndForm(); - } - } -
    -} -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Compute All Formulas Example - Syncfusion Demos - } -@section Header{ -

    Example of Compute All Formulas in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/ConditionalFormatting.cshtml b/Views/Excel/ConditionalFormatting.cshtml deleted file mode 100644 index 6112911f8..000000000 --- a/Views/Excel/ConditionalFormatting.cshtml +++ /dev/null @@ -1,59 +0,0 @@ -@using Syncfusion.EJ2 - -@section ActionDescription{ - This sample demonstrates how to apply conditional formats using Excel (XlsIO) Library. - } - -@section Meta{ - - } - -@section Description{ -

    - Microsoft Office Excel provide enhanced conditional formatting support from Excel 2007 onwards. Conditional formatting allows you to apply formatting to one or more cells based on the value of the cell or the value of a formula. - XlsIO also supports applying more than three conditional formats to a single cell in XLSX format, whereas XLS format allows only three conditional formats in a cell.
    -

    -
    -Note: It is not possible to apply more than three conditional formats in earlier versions of Excel.
    -
    -Features: -
    -
    -
      -
    • Apply conditional formats to a range of cells
    • -
    • Advanced options of Excel, such as color scales, icon sets and data bars
    • -
    • Format unique and duplicate values in single line
    • -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("ConditionalFormatting", "Excel", FormMethod.Post); - { -

    - Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    - Save As : - - -   - - -
    -
    -
    - @Html.EJS().Button("createbtn").Content("Create Document").Render() -
    - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Conditional Formatting Example - Syncfusion Demos - } -@section Header{ -

    Example of Conditional Formatting in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/Create.cshtml b/Views/Excel/Create.cshtml deleted file mode 100644 index 6027e25de..000000000 --- a/Views/Excel/Create.cshtml +++ /dev/null @@ -1,59 +0,0 @@ -@using Syncfusion.EJ2 - -@section ActionDescription{ - This sample demonstrates how to create a simple Excel document with formulas and formatting using Excel (XlsIO) Library. -} - -@section Meta{ - - } - -@section Description{ - Essential XlsIO has support for creating richly formatted spreadsheets from scratch independent of Excel. Advanced features, like data validation, conditional formatting, charts, pivot tables are also supported. This sample demonstrates the creation of a simple, multi-sheet workbook. Formats like Excel 97-2003, Excel 2007, Excel 2010, Excel 2013, Excel 2016, CSV, SpreadsheetML, Excel 2007 Template, and Excel 2007 Macro Enabled Template are supported and demonstrated here.
    -
    In this sample, a new instance of XlsIO is created. This instance has no open workbooks. A workbook is created with the IWorkbook interface. This workbook has one worksheet by default and number of worksheets can be created based on the need. The IRange interface can be used to access the cell and write the content.
    -
    - Features: -
    -
    -
      -
    • Create workbooks from scratch in various file formats such as, .xls, .xlsx, .csv, .xml, .xltx, .xltm
    • -
    • Create more numbers of sheets
    • -
    • Write text in range of cells
    • -
    -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("Create", "Excel", FormMethod.Post); - { -

    - Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    -
    - Save As : - - -   - - -
    -
    -
    -
    - @Html.EJS().Button("createbtn").Content("Create Document").Render() -
    - Html.EndForm(); - } - } -
    -} - - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Create Example - Syncfusion Demos - } -@section Header{ -

    Example of Create in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/CreateMacro.cshtml b/Views/Excel/CreateMacro.cshtml deleted file mode 100644 index 27586d466..000000000 --- a/Views/Excel/CreateMacro.cshtml +++ /dev/null @@ -1,58 +0,0 @@ -@using Syncfusion.EJ2 - -@section ActionDescription{ - This sample demonstrates how to create macros using Excel (XlsIO) Library. -} - -@section Meta{ - - } - -@section Description{ - Essential XlsIO supports creating macro files from scratch programmatically. -
    -
    Features: -
    -
    -
      -
    • Create Excel chart from macro code for the data provided in the Excel workbook.
    • -
    • Save the macro-enabled file in various file formats (XLS, XLSM, XLTM).
    • -
    -} - -@section ControlsSection{ -
    - @{Html.BeginForm("CreateMacro", "Excel", FormMethod.Post); - { -

    - Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    -
    - Save As : - - -   - - -   - - -
    -
    -
    -
    - @Html.EJS().Button("createbtn").Content("Create Document").Render() -
    - Html.EndForm(); - } - } -
    - } -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Create Macro Example - Syncfusion Demos - } -@section Header{ -

    Example of Create Macro in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/DataSorting.cshtml b/Views/Excel/DataSorting.cshtml deleted file mode 100644 index 7be6e746b..000000000 --- a/Views/Excel/DataSorting.cshtml +++ /dev/null @@ -1,242 +0,0 @@ -@using Syncfusion.EJ2 - - -@section ActionDescription{ - This sample demonstrates how to sort data in spreadsheet using Excel (XlsIO) Library. -} -@section Meta{ - - } -@section Description{ - Essential XlsIO can sort a range of cells dynamically, at runtime without any dependency on MS Excel. It sorts the data based on values and colors. -
    -
    Features: -
    -
    -
      -
    • Supports to sort the large data
    • -
    • Sorts based on the selected algorithm
    • -
    • Sorts the data based on the cell and font color
    • -
    -} -@section ControlsSection -{ -
    - @{Html.BeginForm("DataSorting", "Excel", FormMethod.Post); - { -
    -

    - Click the "View Input Template" button to view the input Excel document and click the "Sort Values" button to view the output Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - Sort On Values -
    -
    - Choose the column to sort: -
    - - - - - -
    -
    - First Column:                  -
    - -
    -
    -
    -
    - - Add Level -
    -
    - - - - - -
    -
    - Second Column:             -
    - -
    -
    - - - - -
    -
    - - Add Level -
    -
    - - - - - -
    -
    - Third Column:                  -
    - -
    -
    -
    - Order By -
    - - - - -
    - - - - -
    - - - -
    - - - - -
    - - -
    -
    - - - - -
    - - -
    -
    -
    -
    - -
    - -
    -
    - - - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Data Sorting Example - Syncfusion Demos - } -@section Header{ -

    Example of Data Sorting in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/DataValidation.cshtml b/Views/Excel/DataValidation.cshtml deleted file mode 100644 index fc710e71f..000000000 --- a/Views/Excel/DataValidation.cshtml +++ /dev/null @@ -1,61 +0,0 @@ -@using Syncfusion.EJ2 - -@section ActionDescription{ - This sample demonstrates how to use data validation in spreadsheets using Excel (XlsIO) Library. -} - -@section Meta{ - - } - -@section Description{ - Data validation helps to control the kind of information that is entered in a worksheet cells. It provides users with the following options: -
    -
    -
      -
    • A list of choices
    • -
    • Restriction of entries to specific type or size
    • -
    -
    - Essential XlsIO has support for reading and writing data validations. This sample focuses on writing a data validation in an Excel template.
    -
    Features: -
    -
    -
      -
    • Text validation
    • -
    • Validating input text length based on the given constraints
    • -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("DataValidation", "Excel", FormMethod.Post); - { -

    - Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    - Save As : - - -   - - -
    -
    -
    - @Html.EJS().Button("normalbtn").Content("Create Document").Render() -
    - Html.EndForm(); - } - } -
    - -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Data Validation Example - Syncfusion Demos - } -@section Header{ -

    Example of Data Validation in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/Default.cshtml b/Views/Excel/Default.cshtml deleted file mode 100644 index b6f5ce6dc..000000000 --- a/Views/Excel/Default.cshtml +++ /dev/null @@ -1,57 +0,0 @@ -@using Syncfusion.EJ2 -@section ControlsSection{ -
    - @{Html.BeginForm("Default", "Excel", FormMethod.Post); - { -

    - Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    - Save As : - - -   - - -
    -
    -
    - @Html.EJS().Button("normalbtn").Content("Create Document").Render() -
    - Html.EndForm(); - } - } -
    -} -@section Description{ - It may be difficult to decide how much you can afford to save or how much you can spend every month. This budget planner application created using Essential XlsIO will help you to determine your monthly disposable income. Enter your annual income and expenses in the Quick Budget Sheet to assess your financial position.
    -
    - Features: -
    -
    -
      -
    • Text box insertion and formatting
    • -
    • Image insertion
    • -
    • Number formats
    • -
    • Formulas
    • -
    • Charts
    • -
    • Views-heading, sheet hiding, row-column hiding, and tab colors
    • -
    • Data validation list
    • -
    • Text styles (bold, italic, underline, font name, and font color)
    • -
    -} -@section Meta{ - - } -@section ActionDescription{ -

    - This sample demonstrates how to create a simple Budget planner using Excel (XlsIO) Library. -

    -} -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Default Example - Syncfusion Demos - } -@section Header{ -

    Example of Default in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/DocumentationSettings.cshtml b/Views/Excel/DocumentationSettings.cshtml deleted file mode 100644 index d21ea0244..000000000 --- a/Views/Excel/DocumentationSettings.cshtml +++ /dev/null @@ -1,46 +0,0 @@ -@using Syncfusion.EJ2; - -@section ActionDescription{ - This sample demonstrates how to include document properties to spreadsheets using Excel (XlsIO) Library. -} -@section Meta{ - - } -@section Description{ - Document properties are details about a file. They include information about title, author name, subject, keywords, etc. You can also have custom properties. Essential XlsIO provides support for custom properties. -
    -
    Excel provides various page-setup options to control the way your spreadsheet fits onto paper; this is done using the "Page Setup" dialog. This allows you to select the size and orientation of the paper, the width of the margins, the headers and footers for each page, and the order of printing cells for sheets that will take several pieces of paper. -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("DocumentationSettings", "Excel", FormMethod.Post); - { -

    - Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    - Save As : - - -   - - -
    -
    -
    - @Html.EJS().Button("createbtn").Content("Create Document").Render() -
    - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Documentation Settings Example - Syncfusion Demos - } -@section Header{ -

    Example of Documentation Settings in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/EditMacro.cshtml b/Views/Excel/EditMacro.cshtml deleted file mode 100644 index a2e6bc357..000000000 --- a/Views/Excel/EditMacro.cshtml +++ /dev/null @@ -1,58 +0,0 @@ -@using Syncfusion.EJ2 - -@section ActionDescription{ - This sample demonstrates how to edit macros using Excel (XlsIO) Library. -} - -@section Meta{ - - } - -@section Description{ - Essential XlsIO supports creating macro files from scratch and edit the macro code programmatically. -
    -
    Features: -
    -
    -
      -
    • Open existing macro-enabled Excel template.
    • -
    • Modify the macro code to change the chart type.
    • -
    • Save the edited macro-enabled file in various file formats (XLS, XLSM, XLTM).
    • -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("EditMacro", "Excel", FormMethod.Post); - { -

    - Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    -
    - Save As : - - -   - - -   - - -
    -
    -
    -
    - @Html.EJS().Button("createbtn").Content("Create Document").Render() -
    - Html.EndForm(); - } - } -
    -} -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Edit Macro Example - Syncfusion Demos - } -@section Header{ -

    Example of Edit Macro in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/EmbeddedChart.cshtml b/Views/Excel/EmbeddedChart.cshtml deleted file mode 100644 index b79b96546..000000000 --- a/Views/Excel/EmbeddedChart.cshtml +++ /dev/null @@ -1,55 +0,0 @@ -@using Syncfusion.EJ2; - -@section ActionDescription{ - This sample demonstrates how to create a simple chart using Excel (XlsIO) Library. - } - -@section Meta{ - - } - -@section Description{ -

    - Essential XlsIO has APIs for creating an embedded chart. The IChartShape interface represents the embedded chart in memory. This object can be used to format and modify chart settings, which is similar to modifying chart properties using Excel. -

    -
    Features: -
    -
    -
      -
    • Creation of embedded chart types
    • -
    • Creation of chart from values in a template document
    • -
    -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("EmbeddedChart", "Excel", FormMethod.Post); - { -

    - Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    - Save As : - - -   - - -
    -
    -
    - -
    - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Embedded Chart Example - Syncfusion Demos - } -@section Header{ -

    Example of Embedded Chart in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/EncryptAndDecrypt.cshtml b/Views/Excel/EncryptAndDecrypt.cshtml deleted file mode 100644 index 64906a18d..000000000 --- a/Views/Excel/EncryptAndDecrypt.cshtml +++ /dev/null @@ -1,64 +0,0 @@ -@using Syncfusion.EJ2; - -@section ActionDescription{ - This sample demonstrates how to encrypt and decrypt workbooks using Excel (XlsIO) Library. -} - -@section Meta{ - - } - -@section Description{ - This sample focuses on the encryption and decryption of an Excel 2007, Excel 2010, Excel 2013 and Excel 2016 workbook using Essential XlsIO. -
    -
    Encryption is a method of protecting workbook data.It is based on a password that converts the data into a form that cannot be understood; it also restricts anonymous users from accessing a document. Decryption is the process of converting encrypted data back into its original form so that data can be read from the workbook. -
    -
    A password for encrypting a workbook can be set in Microsoft Excel 2007, Excel 2010 and Excel 2013 through the Office Menu->Prepare->Encrypt Document command. -
    -
    - Note: Password protection of a workbook file is different from the workbook structure and window protection you can set in the Review->Protect Workbook -
    -
    -
    - Features: -
    -
    -
      -
    • Encrypting with a password
    • -
    • Decrypting with a password
    • -
    -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("EncryptAndDecrypt", "Excel", FormMethod.Post); - { -

    - Click the "Encrypt Document" button to view the encrypted Excel document and "Decrypt Document" to view the decrypted Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    - Save As : - - -   - - -
    -
    -
    - - -
    - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Encrypt and Decrypt Example - Syncfusion Demos - } -@section Header{ -

    Example of Encrypt and Decrypt in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/ExcelToJSON.cshtml b/Views/Excel/ExcelToJSON.cshtml deleted file mode 100644 index aa81c6d73..000000000 --- a/Views/Excel/ExcelToJSON.cshtml +++ /dev/null @@ -1,80 +0,0 @@ -@using Syncfusion.EJ2; - -@section ActionDescription{ - This sample demonstrates the conversion of Excel documents to JSON file using Essential XlsIO. -} -@section Meta{ - - } -@section Description{ -

    - Essential XlsIO supports to convert Excel data to JSON files by simply saving the workbook using the SaveAsJson method. -

    -
    - Features: -
    -
    -
      -
    • Save as a simple JSON file or a JSON file with XML schema
    • -
    • Save a workbook to JSON
    • -
    • Save a worksheet to JSON
    • -
    • Save a range to JSON
    • -
    • Save as a stream with the above features
    • -
    -} - -@section ControlsSection{ -
    - @{Html.BeginForm("ExcelToJSON", "Excel", FormMethod.Post); - { -
    -
    -
    -

    - Click the "Input Template" button to view the input Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -

    - Click the "Convert to JSON" button to view the converted JSON file. -

    -
    -
    -
    -
    - -     - -       - - -
    -
    -
    -
    -
    - -     - -
    -
    -
    -
    - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Excel To JSON Example - Syncfusion Demos - } -@section Header{ -

    Example of Excel To JSON in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/ExcelToODS.cshtml b/Views/Excel/ExcelToODS.cshtml deleted file mode 100644 index 9f35153a0..000000000 --- a/Views/Excel/ExcelToODS.cshtml +++ /dev/null @@ -1,48 +0,0 @@ -@using Syncfusion.EJ2; - -@section ActionDescription{ - This sample demonstrates how to convert excel spreadsheets to Open Document spreadsheets using Excel (XlsIO) Library. - } -@section Meta{ - - } -@section Description{ - This sample demonstrates Excel to ODS export in Essential XlsIO. -
    -
    - Features: -
    -
    -
      -
    • Converts Excel files to OpenDocument Spreadsheet (ODS), a file format for Excel documents developed by Sun for the Open Office suite.
    • -
    -
    - } -@section ControlsSection{ -
    - @{Html.BeginForm("ExcelToODS", "Excel", FormMethod.Post); - { -
    -

    - Click the "Excel To ODS" button to view the Open Document Spreadsheet generated by Essential XlsIO. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the document. -

    -
    -
    -
    -
    - -
    -
    -
    - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Excel To ODS Example - Syncfusion Demos - } -@section Header{ -

    Example of Excel To ODS in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/ExcelToPDF.cshtml b/Views/Excel/ExcelToPDF.cshtml deleted file mode 100644 index 04dc1f68e..000000000 --- a/Views/Excel/ExcelToPDF.cshtml +++ /dev/null @@ -1,138 +0,0 @@ -@using Syncfusion.EJ2; - - -@section ActionDescription{ - This sample demonstrates how to convert spreadsheets to PDF documents using Excel (XlsIO) Library. -} - -@section Meta{ - - } - -@section Description{ -

    - This sample illustrates the conversion of Microsoft Excel document to PDF. -

    -
    -
    Essential XlsIO allows to export Excel document to PDF by using the Convert method of ExcelToPDFConverter class. -
    -
    Features: -
    -
    -
      -
    • Supports conversion of Excel document to PDF document with cell values, cell styles, tables, charts, autoshapes, pictures, etc.
    • -
    -
    - Note: Installation of Essential PDF and ExcelChartToImageConverter is necessary to run this sample -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("exceltopdf", "excel", FormMethod.Post); - { -

    - Click the "Input Template" button to view the input Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -

    - Click the "Convert to PDF" button will convert the Excel document to PDF. PDF viewer is needed to view the converted PDF document. -

    -
    - -
    -       - - - - - - - - - - - - - - -
    -       - - - - -        - - - -
    -       - - - - -        - - - -
    -
    -
    -
    - -
    -
    -
    -
    -       - - -
          Missing fonts in the device will be substituted to Calibri.
    -       - - -
          Missing fonts in the device will be substituted from embedded resource.
    -
    -
    -
    - - - -                      - - -
    - - - -
    -
    -
    -
    - Html.EndForm(); - } - } -
    - -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Excel To PDF Example - Syncfusion Demos - } -@section Header{ -

    Example of Excel To PDF in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/ExcelToPDFUA.cshtml b/Views/Excel/ExcelToPDFUA.cshtml deleted file mode 100644 index 55514fa16..000000000 --- a/Views/Excel/ExcelToPDFUA.cshtml +++ /dev/null @@ -1,63 +0,0 @@ -@using Syncfusion.EJ2 -@{ViewData["Title"] = " Essential DocIO (Word) : Export, DOC to PDF/UA, Conversion : Syncfusion";} -@section ControlsSection{ -
    - @{Html.BeginForm("ExcelToPDFUA", "excel", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
    -
    - Select the Excel document to be converted to PDF/UA, and click the "ConvertToPDF" button. Please note that a PDF Viewer is required to view the resulting PDF document. -
    -
    - -
    - - - - -
    -
    -
    - -
    -
    -
    -
    - @ViewData["Message"] -
    - Html.EndForm(); - } - } -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to convert Excel documents to PDF/UA documents using XlsIO. -
    -} -@section Description{ -
    -
    The .NET Excel (XlsIO) library allows you to convert Excel documents into tagged PDFs that are compliant with Section 508 and PDF/UA standards. This ensures that the content of the PDF is accessible and can be easily read by users who require assistive technology. -
    -
    - -} -@section Meta{ - -} -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Excel to PDF/UA Example - Syncfusion Demos -} -@section Header{ -

    Example of Excel to PDF/UA in ASP.NET MVC Excel (XlsIO) Library

    -} \ No newline at end of file diff --git a/Views/Excel/ExpensesReport.cshtml b/Views/Excel/ExpensesReport.cshtml deleted file mode 100644 index 3d4437db0..000000000 --- a/Views/Excel/ExpensesReport.cshtml +++ /dev/null @@ -1,53 +0,0 @@ -@using Syncfusion.EJ2 - -@section ActionDescription{ - This sample demonstrates how to create a simple Excel report for expenses with data, chart, formula, and cell formatting using Excel (XlsIO) Library. -} - -@section Meta{ - - } - -@section Description{ - Expenses report is used for visualizing a company's financial statistics. This demo shows a expenses report with the difference between expected cost and actual cost for the different categories of a company’s expenses. -
    -
    - Features: -
    -
    This sample demonstrates the following features: -
    -
    -
      -
    • Cell formattings
    • -
    • Chart
    • -
    • Number formats
    • -
    • Formulas
    • -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("ExpensesReport", "Excel", FormMethod.Post); - { -
    -

    - Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    -
    -
    - -
    -
    - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Expenses Report Example - Syncfusion Demos - } -@section Header{ -

    Example of Expenses Report in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/ExternalConnection.cshtml b/Views/Excel/ExternalConnection.cshtml deleted file mode 100644 index a26d54baa..000000000 --- a/Views/Excel/ExternalConnection.cshtml +++ /dev/null @@ -1,56 +0,0 @@ -@using Syncfusion.EJ2; - -@section ControlsSection{ -
    - @{Html.BeginForm("ExternalConnection", "Excel", FormMethod.Post); - { -
    -

    - Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    -
    -
    - - @Html.EJS().DropDownList("country").Placeholder("Select a Country").DataSource(ViewData["country"]).Width("250").Render() -
    -
    -
    -
    -
    - - - -
    -
    - Html.EndForm(); - } - } -
    -} - -@section ActionDescription{ - This sample demonstrates how to import data to spreadsheets from external connections using Excel (XlsIO) Library. -} - -@section Meta{ - -} -@section Description{ - Data can be imported from database to an Excel document using External Connection. Additionally, the Refresh() option will refresh data while opening Excel documents. -
    -
    Features: -
    -
    -
      -
    • To add the connection to workbook
    • -
    • To add the query table to worksheet using the connection
    • -
    • Using the refresh() to import the data to worksheet from the DB
    • -
    -
    -} \ No newline at end of file diff --git a/Views/Excel/ExternalFormula.cshtml b/Views/Excel/ExternalFormula.cshtml deleted file mode 100644 index de04013ea..000000000 --- a/Views/Excel/ExternalFormula.cshtml +++ /dev/null @@ -1,80 +0,0 @@ -@using Syncfusion.EJ2 - -@section ActionDescription{ - This sample demonstrates how to use External formula in spreadsheets using Excel (XlsIO) Library. -} - -@section Meta{ - - } - -@section Description{ -

    - External Formula that refers to a value in another workbook. An external formula is a reference to a cell or range of cells in another workbook. -

    -
    - Features: -
    -
    -
      -
    • Reading formula strings using Excel (XlsIO) Library
    • -
    • Reading evaluated formulas using Excel (XlsIO) Library
    • -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("externalformula", "excel", FormMethod.Post); - { -
    -

    - Click the "Read Formula" button to view the formula and its CalculatedValue. Click the "Write Formula" button to view the Excel spreadsheet generated by Essential XlsIO. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    -
    -
    - -     - -
    -
    -
    -
    -
    -
    -
    - -    - -
    -
    - -
    -
    -
    -
    -
    - - -
    -
    - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - External Formula Example - Syncfusion Demos - } -@section Header{ -

    Example of External Formula in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/FindAndExtract.cshtml b/Views/Excel/FindAndExtract.cshtml deleted file mode 100644 index 66d780e8e..000000000 --- a/Views/Excel/FindAndExtract.cshtml +++ /dev/null @@ -1,83 +0,0 @@ -@using Syncfusion.EJ2 - -@section ActionDescription{ - This sample demonstrates how to extract data from a spreadsheet using Excel (XlsIO) Library. - } - -@section Meta{ - - } - -@section Description{ -

    - This sample demonstrates some of the rich APIs of Essential XlsIO. -

    -
    Features: -
    -
    -
      -
    • Find numbers, text, or dates
    • -
    • Read or extract display text and values in a cell
    • -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("findandextract", "excel", FormMethod.Post); - { -
    -

    - Select any item from the below listbox and click the "Extract Data" button to extract the data from the spreasheet using Essential XlsIO. -

    -
    -
    -
    -
    - @Html.EJS().DropDownList("selectoption").Placeholder("Select a Format").DataSource(ViewData["selectoption"]).Value(ViewData["selectoptionValue"]).Width("350").Render() -
    -
    -
    -
    -
    - - - - - - - - - - - - - -
    - Display Text - - @Html.ViewData["displayText"] -
    -
    - Value in the Cell - - @Html.ViewData["valueText"] -
    -
    -
    -
    -
    -
    -
    - -
    -
    - Html.EndForm(); - } - } -
    -} -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Find And Extract Example - Syncfusion Demos - } -@section Header{ -

    Example of Find And Extract in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/FormControls.cshtml b/Views/Excel/FormControls.cshtml deleted file mode 100644 index 8ce9b02e8..000000000 --- a/Views/Excel/FormControls.cshtml +++ /dev/null @@ -1,55 +0,0 @@ -@using Syncfusion.EJ2; - -@section ActionDescription{ - This sample demonstrates how to use form controls in spreadsheet using Excel (XlsIO) Library. -} -@section Meta{ - - } -@section Description{ - Essential XlsIO can read and write form controls such as text boxes, check boxes, combo boxes and option buttons. -
    -
    Features: -
    -
    -
      -
    • Creating rich reports with text boxes, check boxes, and combo boxes using Excel (XlsIO) Library
    • -
    • Text box formatting
    • -
    • Check boxes with Cell Link
    • -
    • Combo boxes with formatting
    • -
    • Option button with formatting
    • -
    -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("FormControls", "Excel", FormMethod.Post); - { -

    - Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    - Save As : - - -   - - -
    -
    -
    - -
    - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Form Controls Example - Syncfusion Demos - } -@section Header{ -

    Example of Form Controls in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/FormatCells.cshtml b/Views/Excel/FormatCells.cshtml deleted file mode 100644 index be4e119fe..000000000 --- a/Views/Excel/FormatCells.cshtml +++ /dev/null @@ -1,60 +0,0 @@ -@using Syncfusion.EJ2 - -@section ActionDescription{ - This sample demonstrates how to apply formatting to the cells using Excel (XlsIO) Library. - } - -@section Meta{ - - } - -@section Description{ -

    - Formatting worksheets makes them more attractive and easier to use. Excel provides various options for setting font, font size, color, and background. - The "Format Cells" dialog in Excel has six tabs, each with several characteristics that allow you to set various formats for a cell. You can set number formats, horizontal and vertical alignment, text control operations, font and font styles, and borders for the cells.
    -

    -
    - Features: -
    -
    -
      -
    • Various styles such as colors, font settings, borders, and alignments
    • -
    • Number formats
    • -
    • Patterns
    • -
    • Conditional formatting
    • -
    • RTF
    • -
    • Image insertion
    • -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("FormatCells", "Excel", FormMethod.Post); - { -

    - Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    - Save As : - - -   - - -
    -
    -
    - -
    - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Format Cells Example - Syncfusion Demos - } -@section Header{ -

    Example of Format Cells in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/Formulas.cshtml b/Views/Excel/Formulas.cshtml deleted file mode 100644 index ee2f7eab6..000000000 --- a/Views/Excel/Formulas.cshtml +++ /dev/null @@ -1,83 +0,0 @@ -@using Syncfusion.EJ2 - -@section ActionDescription{ - This sample demonstrates how to use formulas in spreadsheets using Excel (XlsIO) Library. - } - -@section Meta{ - - } - -@section Description{ -

    - Formulas are entries in Excel that have an equation that calculates the value to be displayed. A typical formula might contain cells, constants, and even functions. Essential XlsIO has support for reading and writing formulas. -

    -
    -Features: -
    -
    -
      -
    • Writing array formulas
    • -
    • Writing Excel built-in formulas
    • -
    • Reading formula strings using Excel (XlsIO) Library
    • -
    • Reading evaluated formulas using Excel (XlsIO) Library
    • -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("formulas", "excel", FormMethod.Post); - { -
    -

    - Click the "Read Formula" button to view the formula and its CalculatedValue. Click the "Write Formula" button to view the Excel spreadsheet generated by Essential XlsIO. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    -
    -
    - -     - - -
    -
    -
    -
    -
    -
    -
    - -    - -
    -
    - -
    -
    -
    -
    -
    - - -
    -
    - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Formulas Example - Syncfusion Demos - } -@section Header{ -

    Example of Formulas in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/FunnelChart.cshtml b/Views/Excel/FunnelChart.cshtml deleted file mode 100644 index 01f56138a..000000000 --- a/Views/Excel/FunnelChart.cshtml +++ /dev/null @@ -1,50 +0,0 @@ -@using Syncfusion.EJ2 - -@section ActionDescription{ - This sample demonstrates how to create Funnel chart using Excel (XlsIO) Library. - } - -@section Meta{ - - } - -@section Description{ -

    - Funnel charts are a type of chart, often used to represent stages in a sales process and show the amount of potential revenue for each stage. This type of chart can also be useful in identifying potential problem areas in an organization's sales processes. -

    -

    - Essential XlsIO has APIs for creating and modifying funnel charts. -

    -} -@section ControlsSection{ -
    - @{Html.BeginForm("FunnelChart", "Excel", FormMethod.Post); - { -

    - Click the "Input Template" button to view the input Excel document and click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    - Save As : - - -   - - -
    -
    -
    - - -
    - Html.EndForm(); - } - } -
    -} -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Funnel Chart Example - Syncfusion Demos - } -@section Header{ -

    Example of Funnel Chart in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/GroupShapes.cshtml b/Views/Excel/GroupShapes.cshtml deleted file mode 100644 index 6a871eb0a..000000000 --- a/Views/Excel/GroupShapes.cshtml +++ /dev/null @@ -1,67 +0,0 @@ -@using Syncfusion.EJ2; - -@section ControlsSection{ -
    - @{Html.BeginForm("GroupShapes", "Excel", FormMethod.Post); - { -
    -

    - Click the "Input Template" button to view the input Excel document and "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    -
    - - -   - - -   - - -
    -
    -
    -
    -
    - - -
    -
    -
    - Html.EndForm(); - } - } -
    -} -@section ActionDescription{ - This sample demonstrates how to use group shapes in spreadsheets using Excel (XlsIO) Library. -} -@section Meta{ - - } -@section Description{ -
    - Essential XlsIO allows to group multiple shapes and ungroup the shapes in worksheet. The IGroupShape interface is the in-memory representation of the - group shapes in an Excel workbook. -
    -
    - Features: -
    -
    - This sample demonstrates following features: -
    -
    -
      -
    • Grouping multiple shapes into a single group shape.
    • -
    • Ungroup the group shape and all its inner shapes.
    • -
    -
    -
    -} -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Group Shapes Example - Syncfusion Demos - } -@section Header{ -

    Example of Group Shapes in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/HTMLToWorksheet.cshtml b/Views/Excel/HTMLToWorksheet.cshtml deleted file mode 100644 index 7153a6088..000000000 --- a/Views/Excel/HTMLToWorksheet.cshtml +++ /dev/null @@ -1,57 +0,0 @@ -@using Syncfusion.EJ2 - -@section ControlsSection{ -
    - @{Html.BeginForm("HTMLToWorksheet", "Excel", FormMethod.Post); - { -

    - Click the "Input Template" button to view the input HTML document. -

    -

    - Click the "Import" button to view the output Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    - - -
    -
    - - -
    - Html.EndForm(); - } - } -
    -} - -@section ActionDescription{ - This sample demonstrates how to convert HTML table to worksheet using Essential XlsIO. -} - -@section Meta{ - - } -@section Description{ -
    -

    - Essential XlsIO supports importing HTML tables into Excel worksheets. The ImportHtmlTable method loads an HTML file and imports all the tables in the file to the worksheet. -

    -
    -
    - Features: -
    -
    -
      -
    • Imports HTML table
    • -
    • Imports with table formatting
    • -
    -
    -
    -} -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Import HTML Table Example - Syncfusion Demos - } -@section Header{ -

    Example of Import HTML Table in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/ImportExportDataTable.cshtml b/Views/Excel/ImportExportDataTable.cshtml deleted file mode 100644 index 8b8353dbc..000000000 --- a/Views/Excel/ImportExportDataTable.cshtml +++ /dev/null @@ -1,102 +0,0 @@ -@using Syncfusion.EJ2 - -@section ActionDescription{ - This sample demonstrates exporting data from Excel to a data table, and import data from the data table to the Grid. -} -@section Meta{ - - } -@section Description{ - The ImportDataTable and ExportDataTable methods makes it easier to work with ADO.NET data tables. It just takes one line of code to import data from data table to a Spreadsheet or export data from Spreadsheet to a data table. -
    -
    Features :
    -
      -
    • Usage of helper methods to work with ADO.NET
    • -
    • Import data from Spreadsheet to a data table
    • -
    • Export data from data table to Spreadsheet
    • -
    • Apply row and column styles
    • -
    • Export data from Spreadsheet to a data table by skipping specific rows, replacing cell values in the data table, and stop exporting
    • -
    -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("importexportdatatable", "excel", FormMethod.Post); - { -
    -

    - Click the "Input Template" button to view the input Excel document. -

    -

    - Click the "Import from Excel" button to import data from Excel and view the data in the grid. Here, the data will be exported to a data table with customized options and imported to the grid. -

    -

    - Click the "Export to Excel" button to create a new Microsoft Excel document and export the data from the grid to an Excel workbook. -

    -

    - Note : You need to have a MS Excel Viewer installed in order to view the generated Excel file. -

    - @Html.EJS().Grid("Export").AllowPaging(true).DataSource((System.Data.DataTable)ViewData["dataSource"]).Columns(col => - { - col.Field("CustomerID").HeaderText("Customer ID").TextAlign(Syncfusion.EJ2.Grids.TextAlign.Left).Width("60").Add(); - col.Field("CompanyName").HeaderText("Company Name").Width("80").TextAlign(Syncfusion.EJ2.Grids.TextAlign.Left).Add(); - col.Field("ContactName").HeaderText("ContactName").Width("70").TextAlign(Syncfusion.EJ2.Grids.TextAlign.Left).Add(); - col.Field("ContactTitle").HeaderText("ContactTitle").Width("70").TextAlign(Syncfusion.EJ2.Grids.TextAlign.Left).Add(); - col.Field("Address").HeaderText("Address").Width("100").TextAlign(Syncfusion.EJ2.Grids.TextAlign.Left).Add(); - col.Field("City").HeaderText("City").Width("60").TextAlign(Syncfusion.EJ2.Grids.TextAlign.Left).Add(); - }).Width("850").Height("250").Render() -
    -
    -
    -
    -
    - Import Options : -

    - - -
    - - -
    - - -
    -
    -
    -
    - Export As : -

    - - -
    - - -
    -
    -
    -
    -

    -

    - -

    -
    -
    -
    - -
    - - Html.EndForm(); - } - } -
    -} -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Import Export DataTable Example - Syncfusion Demos - } -@section Header{ -

    Example of Import Export DataTable in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/ImportJSON.cshtml b/Views/Excel/ImportJSON.cshtml deleted file mode 100644 index eb54deedf..000000000 --- a/Views/Excel/ImportJSON.cshtml +++ /dev/null @@ -1,47 +0,0 @@ -@using Syncfusion.EJ2; - -@section ActionDescription{ - This sample demonstrates how to import dynamic objects in spreadsheets using Excel (XlsIO) Library. -} -@section Meta{ - - } -@section Description{ - Essential XlsIO allows you to import dynamic objects into the Excel workbook.The dynamic objects can be either the ExpandoObjects or user-defined dynamic objects. -
    -
    - In this sample, user-defined dynamic objects have been created at run time from JSON file and imported into Excel workbook. -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("ImportJSON", "Excel", FormMethod.Post); - { -

    - Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    - Save As : - - -   - - -
    -
    -
    - @Html.EJS().Button("createbtn").Content("Create Document").Render() -
    - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Import JSON Example - Syncfusion Demos - } -@section Header{ -

    Example of Import JSON in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/ImportNestedCollection.cshtml b/Views/Excel/ImportNestedCollection.cshtml deleted file mode 100644 index 78303f341..000000000 --- a/Views/Excel/ImportNestedCollection.cshtml +++ /dev/null @@ -1,172 +0,0 @@ -@using Syncfusion.EJ2 - -@section ActionDescription{ - This sample demonstrates how to use Nested Collection in spreadsheets using Excel (XlsIO) Library. -} -@section Meta{ - - } -@section Description{ - Essential XlsIO allows you to import data directly from nested collection objects with import data layout and group options. -
    -
    This sample demonstrates the usage of Nested Collection objects using Essential XlsIO. -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("ImportNestedCollection", "Excel", FormMethod.Post); - { -
    -

    - Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    - @*
    -
    -   - -
    -
    -
    *@ -
    -
    - - - - - -
    - - - -
    -
    -
    -
    -
    -
    - - - - - -
    - - -
    -
    -
    -
    -
    -
    - - - - - -
    - -
    - - -
    - - -    - -
    -
    -
    -
    -
    - - - - - -
    - -
    -
    - - - - - - Html.EndForm(); - } - } -
    -} -@section Scripts{ - - -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Import Nested Collection Example - Syncfusion Demos - } -@section Header{ -

    Example of Import Nested Collection in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/InteractiveFeatures.cshtml b/Views/Excel/InteractiveFeatures.cshtml deleted file mode 100644 index 6a318a8cd..000000000 --- a/Views/Excel/InteractiveFeatures.cshtml +++ /dev/null @@ -1,53 +0,0 @@ -@using Syncfusion.EJ2; - - -@section ActionDescription{ - This sample demonstrates how to use interactive features in spreadsheet using Excel (XlsIO) Library. -} - -@section Meta{ - - } - -@section Description{ - Excel has the following interactive features:
    -
    -
      -
    • Comments
    • -
    • Hyperlinks
    • -
    - Comments are notes used to provide context to your data in Excel cells. They are basically used to denote the content in a cell. Text in the comments can be richly formatted to emphasize a comment concerning the cell. -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("InteractiveFeatures", "Excel", FormMethod.Post); - { -

    - Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    - Save As : - - -   - - -
    -
    -
    - @Html.EJS().Button("normalbtn").Content("Create Document").Render() -
    - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Interactive Features Example - Syncfusion Demos - } -@section Header{ -

    Example of Interactive Features in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/Invoice.cshtml b/Views/Excel/Invoice.cshtml deleted file mode 100644 index 2d8835089..000000000 --- a/Views/Excel/Invoice.cshtml +++ /dev/null @@ -1,68 +0,0 @@ - -@section ActionDescription{ - This sample demonstrates how to create ADO application with XlsIO. - } - -@section Meta{ - -} - -@section Description{ - This sample focuses on creating an application using an Essential XlsIO and ADO connection. -
    -
    An Excel template is read by XlsIO and an invoice is generated for the given invoice ID; this is done by fetching data corresponding to the particular ID from the Northwind database. Price, total, and other calculations are performed with simple formulas using Essential XlsIO. -
    -
    Features: -
    -
    -
      -
    • Creating rich reports with styles
    • -
    • ADO .NET connectivity
    • -
    • Formulas
    • -
    -
    - } -@section ControlsSection{ -
    - @{Html.BeginForm("Invoice", "Excel", FormMethod.Post); - { -
    -

    - Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    -
    -
    - - @Html.DropDownList("id") -
    -
    -
    -
    -
    - - - -           - - -
    -
    -
    - -
    -
    - Html.EndForm(); - } - } -
    -} \ No newline at end of file diff --git a/Views/Excel/Performance.cshtml b/Views/Excel/Performance.cshtml deleted file mode 100644 index f08a9451b..000000000 --- a/Views/Excel/Performance.cshtml +++ /dev/null @@ -1,107 +0,0 @@ -@using Syncfusion.EJ2; -@section ActionDescription{ - This sample demonstrates the performance of XlsIO when handling larger files. -} -@section Meta{ - - } -@section Description{ - Essential XlsIO is known for its high performance and simple APIs that have most of the functionalities of Excel. -
    -
    - Features: -
    -
    -
      -
    • Creating rich, large reports with styles.
    • -
    • Performance optimization methods.
    • -
    • Import on Save option to serialize data while saving the workbook, which is recommended for importing large data without formatting.
    • -
    - Notes: -
    -
    -
      -
    • When more styles are added, it is recommended that you use global styles within BeginUpdate and EndUpdate calls.
    • -
    • The use of IMigrantRange will reduce the amount of memory used when large amounts of strings are involved.
    • -
    -} - -@section ControlsSection{ -
    - @{Html.BeginForm("Performance", "Excel", FormMethod.Post); - { -
    -

    - Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    -
    -
    - - - - - -
    Enter the number of rows
    -
    -
    -
    - - - - - -
    Enter the number of columns
    -
    -
    -
    -
    -
    -
    - Save As : - - -   - - -
    -
    -
    -
    - - -
    -

    Import on Save option directly serialize data while saving the workbook.

    -
    -
    -
    - -
    -
    - -
    -
    - - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Chart Performance Example - Syncfusion Demos - } -@section Header{ -

    Example of Chart Performance in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/PivotChart.cshtml b/Views/Excel/PivotChart.cshtml deleted file mode 100644 index 8434125c8..000000000 --- a/Views/Excel/PivotChart.cshtml +++ /dev/null @@ -1,51 +0,0 @@ -@using Syncfusion.EJ2; - -@section ActionDescription{ - This sample demonstrates how to use Pivot Charts in spreadsheets using Excel (XlsIO) Library. - } -@section Meta{ - - } -@section Description{ - The pivot chart provides a graphical representation of pivot table data, allowing for rapid analysis of information. Essential XlsIO has an API for creating a pivot chart from pivot table data while allowing you to use different chart types. -
    -
    -Features: -
    -
    -
      -
    • Creating a pivot chart from template data.
    • -
    • Customizing a pivot chart with various properties
    • -
    • pivot charts with built-in Excel chart types.
    • -
    -
    -Note: This feature is currently not supported for the .xls format. -
    - } -@section ControlsSection{ -
    - @{Html.BeginForm("PivotChart", "Excel", FormMethod.Post); - { -
    -

    - Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    -
    -
    - -
    -
    - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Pivot Chart Example - Syncfusion Demos - } -@section Header{ -

    Example of Pivot Chart in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/PivotLayout.cshtml b/Views/Excel/PivotLayout.cshtml deleted file mode 100644 index b8bd3675f..000000000 --- a/Views/Excel/PivotLayout.cshtml +++ /dev/null @@ -1,70 +0,0 @@ -@section ActionDescription{ - This sample deomonstrates how to layout pivot table using Excel (XlsIO) Library. -} - -@section Meta{ - - } - -@section Description{ - When there is a need to summarize large reports, Excel allows you to summarize data through pivot table insertion. Microsoft Excel supplies various built-in styles for pivot tables, allowing the creation of pivot tables with rich formats and more flexibility in summarizing reports. -
    -
    - Features: -
    -
    -
      -
    • Create and layout pivot table from template data
    • -
    • Format pivot table cells with cell styles
    • -
    • Convert pivot table to PDF
    • -
    -} - -@section ControlsSection{ -
    - @{Html.BeginForm("PivotLayout", "Excel", FormMethod.Post); - { -
    -
    -

    - Click the "Create Pivot Table" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -

    - Click the "Convert Pivot Table" button to view the converted PDF document. PDF viewer is needed to view the converted PDF document. -

    -
    -
    -
    -
    -
    - Layout options: - - -   - - -   - - -
    -
    -
    -
    - - -
    -
    -
    - Html.EndForm(); - } - } -
    -} - - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Pivot Table Layout Example - Syncfusion Demos - } -@section Header{ -

    Example of Pivot Table Layout in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/PivotTable.cshtml b/Views/Excel/PivotTable.cshtml deleted file mode 100644 index af3c316b9..000000000 --- a/Views/Excel/PivotTable.cshtml +++ /dev/null @@ -1,114 +0,0 @@ -@section ActionDescription{ - This sample demonstrates how to use PivotTable in spreadsheets using Excel (XlsIO) Library. - } -@section Meta{ - - } -@section Description{ - When there is a need to summarize large reports, Excel allows you to summarize data through pivot table insertion. Microsoft Excel supplies various built-in styles for pivot tables, allowing the creation of pivot tables with rich formats and more flexibility in summarizing reports. -
    -
    -Features: -
    -
    -
      -
    • Creating pivot tables from template data
    • -
    • Customizing pivot tables with various properties
    • -
    • Formatting pivot tables with built-in styles
    • -
    -
    - } -@section ControlsSection{ -
    - @{Html.BeginForm("PivotTable", "Excel", FormMethod.Post); - { -
    -

    - Click the "Create Document" button to view the created Excel document and "Customize Pivot Table" button to view the Excel document created with customized pivot table. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    -
    -
    - - - - - -         -
    -
    -
    - - - - - -         -
    -
    -
    - - -         -
    -
    - - -
    -
    - - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Pivot Table Example - Syncfusion Demos - } -@section Header{ -

    Example of Pivot Table in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/RangeManipulation.cshtml b/Views/Excel/RangeManipulation.cshtml deleted file mode 100644 index 686ef67f9..000000000 --- a/Views/Excel/RangeManipulation.cshtml +++ /dev/null @@ -1,57 +0,0 @@ -@using Syncfusion.EJ2; - -@section ActionDescription{ - This sample demonstrates how to manipulate cells in a spreadsheet using Excel (XlsIO) Library. -} -@section Meta{ - - } -@section Description{ -

    - A range is a group or block of cells in a worksheet. Ranges are identified by cell references or addresses of the cells in the upper-left and lower-right corners of the range. These two references are separated by a colon (:), which tells Excel to include all the cells between these start and end points. An adjacent cell's range can be depicted as "A5:F10". -

    -
    This sample demonstrates Essential XlsIO's support for manipulating a range of cells.
    -
    - Features: -
    -
    -
      -
    • Named range usage
    • -
    -
    -
    - Named ranges are a powerful tool in Excel that allows to assign a meaningful name to a single cell or a range of cells. For example, you can assign the name "Cell1" to cell "C1" and then use the name "Cell1" anytime you would normally use the cell C1. This allows the user to name a collection of cells or a single cell, making it more readable. -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("RangeManipulation", "Excel", FormMethod.Post); - { -

    - Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    - Save As : - - -   - - -
    -
    -
    - @Html.EJS().Button("normalbtn").Content("Create Document").Render() -
    - Html.EndForm(); - } - } -
    - } - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Range Manipulation Example - Syncfusion Demos - } -@section Header{ -

    Example of Range Manipulation in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/ReplaceOptions.cshtml b/Views/Excel/ReplaceOptions.cshtml deleted file mode 100644 index 1d890a1dd..000000000 --- a/Views/Excel/ReplaceOptions.cshtml +++ /dev/null @@ -1,99 +0,0 @@ -@using Syncfusion.EJ2 - -@section ActionDescription{ - This sample demonstrates how to find a particular text in a cell in the spreadsheet and replace it using Excel (XlsIO) Library. - } - -@section Meta{ - - } - -@section Description{ -

    - This sample demonstrates some of the replace options in Essential XlsIO. -

    -
    - Features: -
    -
    -
      -
    • Find numbers, text, boolean or dates and replaces them with the given data on specified replace options
    • -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("ReplaceOptions", "Excel", FormMethod.Post); - { -
    -

    - Click the "Input Template" button to view the input Excel document and "Replace" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    -
    - - - - - - - - - - - - -
    -
    - Find what: -
    - - -
    -
    - Match case -
    -
    -

    - Replace with: - -
    - -
    -
    -
    - Match entire cell contents -
    -
    -
    -
    -
    - - - -                - - -
    - - - -
    -
    - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Replace Options Example - Syncfusion Demos - } -@section Header{ -

    Example of Replace Options in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/RowColumnManipulation.cshtml b/Views/Excel/RowColumnManipulation.cshtml deleted file mode 100644 index 56735621a..000000000 --- a/Views/Excel/RowColumnManipulation.cshtml +++ /dev/null @@ -1,56 +0,0 @@ -@using Syncfusion.EJ2; - -@section ActionDescription{ - This sample demonstrates how to customize rows and columns in a spreadsheet using Excel (XlsIO) Library. -} -@section Meta{ - - } -@section Description{ - Rows and columns in Excel can be customized, as required, with a number of options. Some of the major manipulations that can be done with rows and columns are setting row height, setting column width, hiding or un-hiding, and grouping or ungrouping. -
    -
    Features: -
    -
    -
      -
    • Reading template document
    • -
    • Setting row height
    • -
    • Setting column width
    • -
    • Hiding and un-hiding
    • -
    • Grouping and ungrouping
    • -
    -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("RowColumnManipulation", "Excel", FormMethod.Post); - { -

    - Click the "Input Template" button to view the input Excel document and click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    - Save As : - - -   - - -
    -
    -
    - - -
    - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Row-Column Manipulation Example - Syncfusion Demos - } -@section Header{ -

    Example of Row-Column Manipulation in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/Slicer.cshtml b/Views/Excel/Slicer.cshtml deleted file mode 100644 index e55226df8..000000000 --- a/Views/Excel/Slicer.cshtml +++ /dev/null @@ -1,87 +0,0 @@ -@using Syncfusion.EJ2 - - -@section ActionDescription{ - The sample shows how to create and use slicers in table using Excel (XlsIO) Library. -} -@section Meta{ - -} -@section Description{ - Slicers are UI filters that help to display only specific data based on the selection criteria. It provides easy and simple UI options to enable/disable the filters in a table. -
    -
    Features: -
    -
    -
      -
    • Create slicers and filter table data.
    • -
    • Format slicers with built-in styles.
    • -
    -} -@section ControlsSection -{ -
    - @{Html.BeginForm("Slicer", "Excel", FormMethod.Post); - { -
    -
    -
    -

    - Click the "Input Template" button to view the input Excel document and click the "Create Document" button to view the output Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -

    - Choose the columns to create slicers. -

    -
    -
    -
    -
    - -     - -
    -
    -
    -
    -
    - -     - - - -
    -
    -
    -
    -
    - -     - -
    -
    -
    -
    - Html.EndForm(); - } - } -
    - } - - @section Title{ - ASP.NET MVC Excel (XlsIO) library - Slicers Example - Syncfusion Demos - } - @section Header{ -

    Example of Slicers in ASP.NET MVC Excel (XlsIO) Library

    - } diff --git a/Views/Excel/Sparklines.cshtml b/Views/Excel/Sparklines.cshtml deleted file mode 100644 index 2c0174895..000000000 --- a/Views/Excel/Sparklines.cshtml +++ /dev/null @@ -1,45 +0,0 @@ -@using Syncfusion.EJ2 - -@section ActionDescription{ - This sample demonstrates how to create sparkline charts using Excel (XlsIO) Library. - } - -@section Meta{ - - } - -@section Description{ -

    - Sparkline is a small chart in a worksheet cell that provides visual representation of data. Essential XlsIO has the APIs for creating and manipulating sparklines.
    -

    -
    Features: -
    -
    -
      -
    • Creation of Sparkline types
    • -
    • Sparkline creation from values fetched from a template document
    • -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("Sparklines", "Excel", FormMethod.Post); - { -

    - Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    - -
    - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Sparklines Example - Syncfusion Demos - } -@section Header{ -

    Example of Sparklines in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/StylesAndFormatting.cshtml b/Views/Excel/StylesAndFormatting.cshtml deleted file mode 100644 index fb3b7cc71..000000000 --- a/Views/Excel/StylesAndFormatting.cshtml +++ /dev/null @@ -1,52 +0,0 @@ -@using Syncfusion.EJ2 - -@section ActionDescription{ - This sample demonstrates how to apply styles and formatting using Excel (XlsIO) Library. - } - -@section Meta{ - - } - -@section Description{ -

    - Excel 2007, Excel 2010, Excel 2013 and Excel 2016 are known for its various styles and formatting that gives an attractive appearance. Microsoft brings up the gradient styles and a number of new colors. Essential XlsIO supports formatting cells with gradient and RGB colors. - This sample demonstrates Essential XlsIO's support for various styles and formatting in Excel 2007, Excel 2010, Excel 2013 and Excel 2016 formats. Both built-in styles and custom styles using the interior method IStyle are used for setting gradient styles. -

    -
    -Features: -
    -
    -
      -
    • Creating a calendar using Excel (XlsIO) Library
    • -
    • Built-in styles
    • -
    • Custom styles
    • -
    • Gradients
    • -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("StylesAndFormatting", "Excel", FormMethod.Post); - { -

    - Click the "Input Template" button to view the input Excel document and click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    -
    - - -
    -
    - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Styles and Formatting Example - Syncfusion Demos - } -@section Header{ -

    Example of Styles and Formatting in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/Sunburst.cshtml b/Views/Excel/Sunburst.cshtml deleted file mode 100644 index 6caa10b10..000000000 --- a/Views/Excel/Sunburst.cshtml +++ /dev/null @@ -1,45 +0,0 @@ -@using Syncfusion.EJ2 - -@section ActionDescription{ - This sample demonstrates how to create Sunburst chart using Excel (XlsIO) Library. - } - -@section Meta{ - - } -@section Description{ - The sunburst chart is ideal for displaying hierarchical data. Each level of the hierarchy is represented by one ring or circle with the innermost circle as the top of the hierarchy. A sunburst chart without any hierarchical data (one level of categories), looks similar to a doughnut chart. However, a sunburst chart with multiple levels of categories shows how the outer rings relate to the inner rings. -

    Essential XlsIO has APIs for creating and modifying sunburst charts. -} -@section ControlsSection{ -
    - @{Html.BeginForm("Sunburst", "Excel", FormMethod.Post); - { -

    - Click the "Input Template" button to view the input Excel document and click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    - Save As : - - -   - - -
    -
    -
    - - -
    - Html.EndForm(); - } - } -
    -} -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Sunburst Example - Syncfusion Demos - } -@section Header{ -

    Example of Sunburst in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/TableFormula.cshtml b/Views/Excel/TableFormula.cshtml deleted file mode 100644 index 694e3a10d..000000000 --- a/Views/Excel/TableFormula.cshtml +++ /dev/null @@ -1,45 +0,0 @@ -@using Syncfusion.EJ2 - -@section ActionDescription{ - This sample demonstrates how to use formulas in spreadsheets using Excel (XlsIO) Library. -} -@section Meta{ - - } -@section Description{ -

    - In Excel 2013 and later versions calculated column formula can be used in tables.
    - XlsIO supports reading and writing calculated columns and formulas. -

    -
    - Features: -
    -
    -
      -
    • Adding tables to a spreadsheet
    • -
    • Advanced options of Excel tables such as total rows and styles
    • -
    • Writing calculated column formula
    • -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("TableFormula", "Excel", FormMethod.Post); - { -

    - Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    - -
    - Html.EndForm(); - } - } -
    -} -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Table Formula Example - Syncfusion Demos - } -@section Header{ -

    Example of Table Formula in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/Tables.cshtml b/Views/Excel/Tables.cshtml deleted file mode 100644 index 014780cee..000000000 --- a/Views/Excel/Tables.cshtml +++ /dev/null @@ -1,61 +0,0 @@ -@using Syncfusion.EJ2 - -@section ActionDescription{ - This sample deomonstrates how to use tables in spreadsheets using Excel (XlsIO) Library. -} - -@section Meta{ - - } - -@section Description{ - Microsoft Office Excel 2007, Excel 2010 and Excel 2013 provides tables support that makes managing and analyzing data with ease and efficient. These tables come with specific style support. -
    -
    XlsIO supports reading and writing tables in Excel 2007, Excel 2010 and Excel 2013 formats. Tables can be created from any input range of sheet data and the total row can be inserted into the table. Styles can also be applied to the tables. -
    -
    - Features: -
    -
    -
      -
    • Adding tables to a spreadsheet
    • -
    • Advanced options of Excel tables such as Total Rows and Styles
    • -
    • Advanced options of Excel tables such as Custom Table Styles
    • -
    -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("Tables", "Excel", FormMethod.Post); - { -
    -

    - Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    -
    -
    - - -
    -
    -
    -
    -
    - -
    -
    -
    - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Table Example - Syncfusion Demos - } -@section Header{ -

    Example of Table in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/TemplateMarker.cshtml b/Views/Excel/TemplateMarker.cshtml deleted file mode 100644 index 8f1de4bf6..000000000 --- a/Views/Excel/TemplateMarker.cshtml +++ /dev/null @@ -1,84 +0,0 @@ -@using Syncfusion.EJ2; - -@section ActionDescription{ - This sample demonstrates how to use TemplateMarker in spreadsheets using Excel (XlsIO) Library. -} -@section Meta{ - - } -@section Description{ - A template marker is a special marker symbol created in an Excel template that will be bound to data. -
    -
    Essential XlsIO allows you to create and bind markers with data from various sources, such as data tables, variables, and arrays. This allows users to control the format of the data when it is bound to a template document. -
    -} -@section ControlsSection{ - @{Html.BeginForm("TemplateMarker", "Excel", FormMethod.Post); - { -
    -
    -

    - Click the "Input Template" button to view the input Excel document and click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    -
    -
    -
    - Import Options : - - -   - - -
    -
    -
    -
    - Marker With Images -
    - - -
    - - -
    - - -
    - - -
    - - -
    -
    -
    -
    - - - - - - -
    - - -   - - -
    -
    -
    - -
    - Html.EndForm(); - } - } -} -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Template Marker Example - Syncfusion Demos - } -@section Header{ -

    Example of Template Marker in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/Treemap.cshtml b/Views/Excel/Treemap.cshtml deleted file mode 100644 index 4e482e352..000000000 --- a/Views/Excel/Treemap.cshtml +++ /dev/null @@ -1,46 +0,0 @@ -@using Syncfusion.EJ2 - - -@section ActionDescription{ - This sample demonstrates how to create Treemap chart using Excel (XlsIO) Library. - } -@section Meta{ - - } -@section Description{ - - A treemap chart provides a hierarchical view of your data and makes it easy to spot patterns, such as which items are a store's best sellers. The tree branches are represented by rectangles and each sub-branch is shown as a smaller rectangle. The treemap chart displays categories by color and proximity and can easily show lots of data which would be difficult with other chart types. -

    Essential XlsIO has APIs for creating and modifying treemap charts. -} -@section ControlsSection{ -
    - @{Html.BeginForm("Treemap", "Excel", FormMethod.Post); - { -

    - Click the "Input Template" button to view the input Excel document and click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    - Save As : - - -   - - -
    -
    -
    - - -
    - Html.EndForm(); - } - } -
    -} -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Treemap Example - Syncfusion Demos - } -@section Header{ -

    Example of Treemap in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/WhatIfAnalysis.cshtml b/Views/Excel/WhatIfAnalysis.cshtml deleted file mode 100644 index b2bb9d274..000000000 --- a/Views/Excel/WhatIfAnalysis.cshtml +++ /dev/null @@ -1,46 +0,0 @@ -@using Syncfusion.EJ2 - -@section ControlsSection{ -
    - @{Html.BeginForm("WhatIfAnalysis", "Excel", FormMethod.Post); - { -

    - Click the "Input Template" button to view the input Excel document. -

    -

    - Click the "Create Document" button to view the output Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    - - -
    -
    - - -
    - Html.EndForm(); - } - } -
    -} - -@section ActionDescription{ - The sample shows how to create different scenarios of What-If Analysis using Essential XlsIO. -} - -@section Meta{ - -} -@section Description{ -
    -

    What-If Analysis is the process of changing the values in cells to see how those changes will affect the outcome of formulas on the worksheet. Essential XlsIO supports the What-If Analysis of Scenarios type.

    -

    A Scenario is a set of values that Excel saves and can substitute automatically in cells on a worksheet. It is possible to create and save different groups of values on a worksheet and then switch to any of these new scenarios to view different results.

    -
    -} -@section Title{ - ASP.NET MVC Excel (XlsIO) library - What-If Analysis Example - Syncfusion Demos -} -@section Header{ -

    Example of What-If Analysis in ASP.NET MVC Excel (XlsIO) Library

    -} \ No newline at end of file diff --git a/Views/Excel/WorkbookProtection.cshtml b/Views/Excel/WorkbookProtection.cshtml deleted file mode 100644 index a41de8803..000000000 --- a/Views/Excel/WorkbookProtection.cshtml +++ /dev/null @@ -1,57 +0,0 @@ -@using Syncfusion.EJ2; - -@section ActionDescription{ - This sample demonstrates how to set protection for a workbook using Excel (XlsIO) Library. -} -@section Meta{ - - } -@section Description{ - You can lock the structure of a workbook, which prevents users from adding or deleting worksheets or from displaying hidden worksheets. You can also prevent users from changing the size or position of worksheet windows. Workbook structure and window protection apply to the entire workbook. -
    -
    - Features: -
    -
    -
      -
    • Protecting a workbook with a password
    • -
    • Protecting a window or structure from modification
    • -
    • Removing protection of a workbook with a password
    • -
    -
    - To protect a workbook, point to Protection on the Tools menu, and then click Protect Workbook. You can choose which elements you want to protect (workbook structure, windows, or both) by selecting or clearing the corresponding check boxes. -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("WorkbookProtection", "Excel", FormMethod.Post); - { -

    - Click the "Protect Workbook" button to view the protected Excel document and "Unprotect Workbook" to view the unprotected Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    - Save As : - - -   - - -
    -
    -
    - - -
    - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Workbook Protection Example - Syncfusion Demos - } -@section Header{ -

    Example of Workbook Protection in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/WorksheetManipulation.cshtml b/Views/Excel/WorksheetManipulation.cshtml deleted file mode 100644 index 7a0766af1..000000000 --- a/Views/Excel/WorksheetManipulation.cshtml +++ /dev/null @@ -1,56 +0,0 @@ -@using Syncfusion.EJ2; - -@section ActionDescription{ - This sample demonstrates how to customize spreadsheets using Excel (XlsIO) Library. -} -@section Meta{ - - } -@section Description{ - Excel provides options for working with worksheet manipulations. You can copy a worksheet, move a worksheet from one position to another, rename a worksheet, delete a worksheet, insert a worksheet, and insert tab color. These options provide users with great flexibility to work with worksheets. -
    -
    Features: -
    -
    -
      -
    • Selecting a worksheet from one workbook and copying it to another workbook with or without worksheet elements
    • -
    • Sheet renaming
    • -
    • Moving
    • -
    • Deleting
    • -
    • Sheet activation
    • -
    -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("WorksheetManipulation", "Excel", FormMethod.Post); - { -

    - Click the "Input Template" button to view the input Excel document and click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    - Save As : - - -   - - -
    -
    -
    - - -
    - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Worksheet Management Example - Syncfusion Demos - } -@section Header{ -

    Example of Worksheet Management in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/WorksheetProtection.cshtml b/Views/Excel/WorksheetProtection.cshtml deleted file mode 100644 index e2d8edb40..000000000 --- a/Views/Excel/WorksheetProtection.cshtml +++ /dev/null @@ -1,47 +0,0 @@ -@using Syncfusion.EJ2; - -@section ActionDescription{ - This sample demonstrates how to Lock and Unlock spreadsheets using Excel (XlsIO) Library. -} -@section Meta{ - - } -@section Description{ - Microsoft Excel offers a special way for protecting specific data and certain worksheets with or without a password. This prevents anyone from changing, moving, or deleting important data. -
    -
    Excel allows you to edit or lock a range of cells in a protected worksheet by using the Protection tab in the Format Cells dialog. By default, all cells are locked, but they are not hidden when the worksheet is protected. Worksheets can be protected by choosing the Tools - Protection - Protect Sheet option in Excel. -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("WorksheetProtection", "Excel", FormMethod.Post); - { -

    - Click the "Lock Worksheet" button to view the locked Excel document and "Unlock Worksheet" to view the unlocked Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    - Save As : - - -   - - -
    -
    -
    - - -
    - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Worksheet Protection Example - Syncfusion Demos - } -@section Header{ -

    Example of Worksheet Protection in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/WorksheetToImage.cshtml b/Views/Excel/WorksheetToImage.cshtml deleted file mode 100644 index d49686712..000000000 --- a/Views/Excel/WorksheetToImage.cshtml +++ /dev/null @@ -1,60 +0,0 @@ -@using Syncfusion.EJ2; - -@section ActionDescription{ - This sample demonstrates how to convert spreadsheets to image using Excel (XlsIO) Library. -} -@section Meta{ - - } -@section Description{ - A worksheet can be converted to an image that is subject to few limitations. The image can be of any format, and it can also be saved as a memory stream. -
    -
    - Features: -
    -
    -
      -
    • Worksheet to image conversion
    • -
    • Saving workbooks as images of Bitmaps and metafiles
    • -
    -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("WorksheetToImage", "Excel", FormMethod.Post); - { -

    - Click the "Input Template" button to view the input Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -

    - Click the "Convert To Image" button to view the converted image. -

    -
    -
    - Image Format : - - -   - - -   - - -
    -
    -
    - - -
    - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Worksheet To Image Example - Syncfusion Demos - } -@section Header{ -

    Example of Worksheet To Image in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/Excel/YearlySales.cshtml b/Views/Excel/YearlySales.cshtml deleted file mode 100644 index ea755a5fc..000000000 --- a/Views/Excel/YearlySales.cshtml +++ /dev/null @@ -1,53 +0,0 @@ -@using Syncfusion.EJ2 - -@section ActionDescription{ - This sample demonstrates how to create a simple Excel report for yearly sales with data, chart, formulas, and cell formatting using Excel (XlsIO) Library. -} - -@section Meta{ - - } - -@section Description{ - A yearly sales report is used for visualizing a company’s yearly growth. This demo shows the product sales of a company for each month in a specific year by visualizing the data with charts. -
    -
    - Features: -
    -
    This sample demonstrates the following features: -
    -
    -
      -
    • Cell formattings
    • -
    • Chart
    • -
    • Number formats
    • -
    • Formulas
    • -
    -} -@section ControlsSection{ -
    - @{Html.BeginForm("YearlySales", "Excel", FormMethod.Post); - { -
    -

    - Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

    -
    -
    -
    -
    - -
    -
    - Html.EndForm(); - } - } -
    -} - -@section Title{ - ASP.NET MVC Excel (XlsIO) library - Yearly Sales Example - Syncfusion Demos - } -@section Header{ -

    Example of Yearly Sales in ASP.NET MVC Excel (XlsIO) Library

    - } \ No newline at end of file diff --git a/Views/PDF/AdventureCycle.cshtml b/Views/PDF/AdventureCycle.cshtml deleted file mode 100644 index fd1fb2c2f..000000000 --- a/Views/PDF/AdventureCycle.cshtml +++ /dev/null @@ -1,107 +0,0 @@ -@section ControlsSection{ - -
    - @{Html.BeginForm("adventurecycle", "pdf", FormMethod.Post); - { -
    -
    -
    -
    - - - - - - - - - - -
    - Click the button to view an PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    - Choose built-in styles   - @Html.DropDownList("styleName", null, "GridTable4", new {@class="e-btn"}) -
    -
    - - - - - - - - - - - - - - - - - - -
    -
    -

    - Built-in style settings -

    -
    - @Html.EJS().CheckBox("header").Name("Header").Value("header").Checked(true).Label("Header row").Render() - - @Html.EJS().CheckBox("bandedrow").Name("Bandedrow").Value("bandedrow").Checked(true).Label("Banded row").Render() - - @Html.EJS().CheckBox("firstcolumn").Name("Firstcolumn").Value("firstcolumn").Label("First column").Render() -
    - @Html.EJS().CheckBox("lastrow").Name("Lastrow").Value("lastrow").Label("Last row").Render() - - @Html.EJS().CheckBox("bandedcolumn").Name("Bandedcolumn").Value("bandedcolumn").Label("Banded column").Render() - - @Html.EJS().CheckBox("lastcolumn").Name("Lastcolumn").Value("lastcolumn").Label("Last column").Render() -
    -
    -
    - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    - Html.EndForm(); - }} -
    -} -@section ActionDescription{ -
    - This sample demonstrates creation of simple table report in the PDF document using PDF Grid. When opens in a new tabbuilt-in table stylesopens in a new tab are applied to the grid, it will appear like Microsoft Office table style and more styling options are available. -
    -} -@section Meta{ - - } -@section Description{ -
    - More information about the tables can be found in this documentation section.opens in a new tab -
    -} - - - - -@section Title{ - ASP.NET MVC PDF library - Adventure Cycle Works Example - Syncfusion Demos - } -@section Header{ -

    Example of Adventure Cycle Works in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/AnnotationFlatten.cshtml b/Views/PDF/AnnotationFlatten.cshtml deleted file mode 100644 index 4c053abbf..000000000 --- a/Views/PDF/AnnotationFlatten.cshtml +++ /dev/null @@ -1,116 +0,0 @@ -@section ControlsSection -{ -
    - @{Html.BeginForm("annotationflatten", "pdf", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
    - Click the button to view an PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. - -
    -
    -
    -
    - - - - - - -
    -
    - Annotation Creation: -
    - - - - - - - - - -
    - @Html.EJS().CheckBox("checkboxFlatten").Name("checkboxFlatten").Value("Flatten").Label("Flatten annotation").Render() -
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    -
    - - - - - - -
    -
    - Annotation Flatten: -
    - - - - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    -
    -
    - - Html.EndForm(); - }} - -
    -} -@section Scripts { - -} -@section ActionDescription{ -
    - This sample demonstrates the creation of different types of annotations such as ink, free text, pop up, text markup annotation, and more. The Essential PDF supports 20+ annotations with create, edit, and delete support. -
    -} -@section Meta{ - -} -@section Description{ -
    - This feature can be used for reviewing purpose. - More information about the annotations can be found in this documentation section. -
    -} -@section Title{ - ASP.NET MVC PDF library - Annotations Example - Syncfusion Demos -} -@section Header{ -

    Example of Annotations in ASP.NET MVC PDF Library

    -} \ No newline at end of file diff --git a/Views/PDF/Attachments.cshtml b/Views/PDF/Attachments.cshtml deleted file mode 100644 index 2649bca8b..000000000 --- a/Views/PDF/Attachments.cshtml +++ /dev/null @@ -1,77 +0,0 @@ -@section ControlsSection{ -
    - @{Html.BeginForm("attachments", "pdf", FormMethod.Post); - { -
    -
    -
    - - - - - - - - - - - - - -
    - Click the button to view an PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    - @Html.EJS().CheckBox("checked").Name("encrypt").Value("IsChecked").Change("onChange").Checked(false).Label("Encrypt attachment").Render() -
    -
    -
    - -
    -
    -
    - -
    -
    -
    -
    - Html.EndForm(); - }} -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to attach files in the PDF document. The attachment files can be of any file format type with information. It is also possible to extract and remove attachments from the PDF document. -
    -} -@section Meta{ - - } -@section Description{ -
    - More information about the attachments can be found in this documentation section. -
    -} - - -@section Title{ - ASP.NET MVC PDF library - File Attachments Example - Syncfusion Demos - } -@section Header{ -

    Example of File Attachments in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/AutoTag.cshtml b/Views/PDF/AutoTag.cshtml deleted file mode 100644 index af856ba9d..000000000 --- a/Views/PDF/AutoTag.cshtml +++ /dev/null @@ -1,50 +0,0 @@ -@section ControlsSection{ - -
    - @{Html.BeginForm("autotag", "pdf", FormMethod.Post); - { -
    - Click the button to view a PDF document generated by Essential PDF. - Please note that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    -
    - - @Html.EJS().RadioButton("rdButtonUA_1").Name("accessibilityLevel").Value("PDF_UA_1").Checked(true).Label("PDF/UA-1").Render()    - @Html.EJS().RadioButton("rdButtonUA_2").Name("accessibilityLevel").Value("PDF_UA_2").Checked(false).Label("PDF/UA-2").Render()    - @Html.EJS().RadioButton("rdButtonWTPDF").Name("accessibilityLevel").Value("WTPDF").Checked(false).Label("Well Tagged PDF").Render() -
    -
    -
    - -
    - Html.EndForm(); - }} -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to create tagged PDF or accessible PDF from the scratch using auto tag feature. The auto tag feature will tag the document based on PDF element created in the document. -
    -} -@section Meta{ - - } -@section Description{ -
    - This feature can be used for the people who require assistive technologies when the electronic content is ready. The Essential PDF supports creating tagged PDF with Section 508 compliant. More information about the tagged PDF can be found in this documentation section. -
    -} - -@section Title{ - ASP.NET MVC PDF library - Autotag Example - Syncfusion Demos - } -@section Header{ -

    Example of Autotag in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/Barcode.cshtml b/Views/PDF/Barcode.cshtml deleted file mode 100644 index 1a2270fdf..000000000 --- a/Views/PDF/Barcode.cshtml +++ /dev/null @@ -1,50 +0,0 @@ -@section ControlsSection -{ -
    - @{Html.BeginForm("barcode", "pdf", FormMethod.Post); - { -
    -
    -
    - - - - - - - -
    - Click the button to view the PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    - -
    -
    -
    -
    - Html.EndForm(); - }} - -
    -} -@section ActionDescription{ -
    - This sample demonstrates the creation of barcode in the PDF document. Barcode font is not required to create barcode. It supports both 1D and 2D barcode with many customizing properties. -
    -} -@section Meta{ - - } -@section Description{ -
    - This feature can be used in invoice, super markets, health care systems and more. - More information about the barcode can be found in this documentation section. -
    -} -@section Title{ - ASP.NET MVC PDF library - Barcode Example - Syncfusion Demos - } -@section Header{ -

    Example of Barcode in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/Booklet.cshtml b/Views/PDF/Booklet.cshtml deleted file mode 100644 index 651331151..000000000 --- a/Views/PDF/Booklet.cshtml +++ /dev/null @@ -1,72 +0,0 @@ -@section ControlsSection{ -
    - @{Html.BeginForm("booklet", "pdf", FormMethod.Post); - { -
    - - - - -
    - Click the button to view an PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    -

    - @Html.Label("", (string)ViewData["Error"]) -

    - -
    -
    - - - - -
    - @Html.EJS().CheckBox("doubleside").Name("CheckBoxDoubleSide").Value("DoubleSide").Label("Double Side").Render() -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - - - - -
    -
    - -
    -
    -
    -
    -
    - Html.EndForm(); - }} -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to create a booklet from the existing PDF document. -
    -} -@section Meta{ - - } -@section Description{ -
    - This feature can be used to print the PDF document in book format. -
    -} -@section Title{ - ASP.NET MVC PDF library - Booklet Example - Syncfusion Demos - } -@section Header{ -

    Example of Booklet in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/Bookmarks.cshtml b/Views/PDF/Bookmarks.cshtml deleted file mode 100644 index edcef2b6a..000000000 --- a/Views/PDF/Bookmarks.cshtml +++ /dev/null @@ -1,49 +0,0 @@ -@section ControlsSection{ - -
    - @{Html.BeginForm("bookmarks", "pdf", FormMethod.Post); - { -
    -
    -
    - - - - - - - -
    - Click the button to view an PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    - -
    -
    -
    -
    - Html.EndForm(); - }} -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to add bookmark with different styles in the document.  - It is also possible to insert, remove, change text appearance, change destination and more from the PDF document. -
    -} -@section Meta{ - - } -@section Description{ -
    - More information about the bookmarks can be found in this documentation section. -
    -} -@section Title{ - ASP.NET MVC PDF library - Bookmarks Example - Syncfusion Demos - } -@section Header{ -

    Example of Bookmarks in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/BulletsandLists.cshtml b/Views/PDF/BulletsandLists.cshtml deleted file mode 100644 index 7d7307e6e..000000000 --- a/Views/PDF/BulletsandLists.cshtml +++ /dev/null @@ -1,55 +0,0 @@ -@section ControlsSection{ -
    - @{Html.BeginForm("bulletslists", "pdf", FormMethod.Post); - { -
    -
    -
    -
    - - - - - - - -
    - Click the button to view an PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    - -
    -
    - - -
    -
    -
    -
    - - Html.EndForm(); - }} - -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to list the content in ordered and unordered list. The ordered list can be number or alphabets and the unordered list can be bullets, circles, and images. -
    -} -@section Meta{ - - } -@section Description{ -
    - -
    -} - -@section Title{ - ASP.NET MVC PDF library - Bullets and Lists Example - Syncfusion Demos - } -@section Header{ -

    Example of Bullets and Lists in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/ComplexScript.cshtml b/Views/PDF/ComplexScript.cshtml deleted file mode 100644 index 937c6ab42..000000000 --- a/Views/PDF/ComplexScript.cshtml +++ /dev/null @@ -1,50 +0,0 @@ -@section ControlsSection - { -
    - @{Html.BeginForm("complexscript", "pdf", FormMethod.Post); - { -
    - Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    - - Html.EndForm(); - } - } -
    -} -@section ActionDescription{ -
    - This sample demonstrates drawing complex script language text in the PDF document. It is possible to draw complex languages such as Thai, Hindi, Tamil, Kannada and more. -
    -
    -
    - Note: In this sample, we have used Tahoma font from the system to draw Thai characters. So, please make sure to install the font to work properly. -
    -} -@section Meta{ - - } -@section Description{ -
    - It is also possible to draw Unicode text. - More information about drawing text can be found in this documentation section. -
    -} - -@section Title{ - ASP.NET MVC PDF library - Complex Script Example - Syncfusion Demos - } -@section Header{ -

    Example of Complex Script in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/CompressExistingPDF.cshtml b/Views/PDF/CompressExistingPDF.cshtml deleted file mode 100644 index a2d142f78..000000000 --- a/Views/PDF/CompressExistingPDF.cshtml +++ /dev/null @@ -1,132 +0,0 @@ -@section ControlsSection{ - - - -
    - @{Html.BeginForm("compressexistingpdf", "pdf", FormMethod.Post, new { enctype = "multipart/form-data" }); - } -
    - - - - -
    - Click the button to view the PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    -
    -
    -
    -

    Choose a PDF file to compress

    -
    - - - - -
    -
    - -
    -
    -
    -
    -

    - @Html.Label("", (string)ViewData["lab"]) -

    - -
    -

    - Compression Options -

    -
    - - - - - - - - - - - -
    - @Html.EJS().CheckBox("compressImage").Name("compressImage").Value("true").Change("isCompressImageOnChanged").Checked(true).Label("Compress Image").Render() -         - - Image Quality      - - @Html.DropDownList("imageQuality", (IEnumerable)ViewData["PriorityID"], new { @class = "e-btn" })               -
    - @Html.EJS().CheckBox("optPageContents").Name("optPageContents").Value("true").Checked(true).Label("Optimize Page Contents").Render() -      - @Html.EJS().CheckBox("removeMetaData").Name("removeMetaData").Value("true").Checked(true).Label("Remove Metadata Information").Render() -
    - @Html.EJS().CheckBox("optFont").Name("optFont").Value("true").Checked(true).Label("Optimize Font").Render() - -

    -

    -
    -
    -
    -
    -
    -
    - - - - -
    - -
    -
    -
    - } - - -@section ActionDescription{ -
    - This sample demonstrates the optimization of an existing PDF document based on image quality, page content, metadata, and font to reduce the file size of the PDF document. -
    -} -@section Meta{ - - } -@section Description{ -
    - This feature can be used to reduce response times in web based applications, mails and more. - More information about compression can be found in this documentation section. -
    -} -@section Title{ - ASP.NET MVC PDF library - Compress Existing PDF Example - Syncfusion Demos - } -@section Header{ -

    Example of Compress Existing PDF in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/CustomTag.cshtml b/Views/PDF/CustomTag.cshtml deleted file mode 100644 index 8bd1a92fa..000000000 --- a/Views/PDF/CustomTag.cshtml +++ /dev/null @@ -1,50 +0,0 @@ -@section ControlsSection{ - -
    - @{Html.BeginForm("customtag", "pdf", FormMethod.Post); - { -
    -
    -
    - - - - - - - -
    - Click the button to view the PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    - -
    -
    -
    -
    - Html.EndForm(); - }} -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to create tagged PDF or accessible PDF from the scratch with custom tags. -
    -} -@section Meta{ - - } -@section Description{ -
    - This feature can be used for the people who require assistive technologies when the electronic content is ready. The Essential PDF supports creating tagged PDF with Section 508 compliant. More information about the tagged PDF can be found in this documentation section. -
    -} - - -@section Title{ - ASP.NET MVC PDF library - Customtag Example - Syncfusion Demos - } -@section Header{ -

    Example of Customtag in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/Default.cshtml b/Views/PDF/Default.cshtml deleted file mode 100644 index 2170c5811..000000000 --- a/Views/PDF/Default.cshtml +++ /dev/null @@ -1,52 +0,0 @@ -@section ControlsSection{ -
    - @{Html.BeginForm("default", "pdf", FormMethod.Post); - { -
    -
    -
    - - - - - - - - -
    - Click the button to view the PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    - -
    -
    - -
    -
    - Html.EndForm(); - } } -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to create a simple PDF document with text and images. -
    -} -@section Meta{ - - } -@section Description{ -
    - Likewise, we can create, conference registration form, feedback forms and more. -
    -} - - - -@section Title{ - ASP.NET MVC PDF library - Default Example - Syncfusion Demos - } -@section Header{ -

    Example of Default in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/DigitalSignature.cshtml b/Views/PDF/DigitalSignature.cshtml deleted file mode 100644 index fd21b3c64..000000000 --- a/Views/PDF/DigitalSignature.cshtml +++ /dev/null @@ -1,232 +0,0 @@ -@section ControlsSection{ - -
    - @{Html.BeginForm("digitalsignature", "pdf", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
    - - - - -
    - Click the button to view the PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    -
    -

    - @Html.Label("", (string)ViewData["lab"]) -

    -
    -
    -
    - - - - - - -
    - Signature Settings -
    - - - - - - - - - - - -
    - Cryptographic Standard: - - @Html.EJS().RadioButton("RadioButtonList1_0").Label("CMS").Name("Cryptographic").Value("CMS").Checked(true).Render() - - - @Html.EJS().RadioButton("RadioButtonList1_1").Label("CAdES").Name("Cryptographic").Value("CAdES").Render() - -
    -
    - Digest Algorithm: - - @Html.EJS().RadioButton("RadioButtonList3_0").Label("SHA1").Name("digestAlgorithm").Value("SHA1").Render() - - - @Html.EJS().RadioButton("RadioButtonList3_1").Label("SHA256").Name("digestAlgorithm").Value("SHA256").Checked(true).Render() - - - @Html.EJS().RadioButton("RadioButtonList3_2").Label("SHA384").Name("digestAlgorithm").Value("SHA384").Render() - - - @Html.EJS().RadioButton("RadioButtonList3_3").Label("SHA512").Name("digestAlgorithm").Value("SHA512").Render() - - - @Html.EJS().RadioButton("RadioButtonList3_4").Label("RIPEMD160").Name("digestAlgorithm").Value("RIPEMD160").Render() - -
    -
    -
    - -
    -
    -
    -
    -
    - - - - - - -
    - Sign new PDF document
    -
    - - - - - - - - - - -
    - Signature Type: - - @Html.EJS().RadioButton("RadioButtonList2_0").Label("Standard").Name("RadioButtonList2").Value("Standard").Checked(true).Render() - - - @Html.EJS().RadioButton("RadioButtonList2_1").Label("Author").Name("RadioButtonList2").Value("Author").Render() - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    -
    - - - - - - -
    - Sign existing PDF document
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - Source - -
    -
    -
    - Certificate - - -
    -
    -
    - Password - -
    -
    -
    - Reason - -
    - -
    -
    - Contact - -
    -
    -
    - Location - -
    -
    - -
    -
    -
    -
    -
    -
    - - Html.EndForm(); - }} -
    -} -@section ActionDescription{ -
    - This sample demonstrates how a PDF document can be secured with certificates and signed with either standard or author signatures. Now added the support for Elliptic Curve Digital Signature Algorithm (ECDSA) to sign the PDF document. -
    -} -@section Meta{ - - } -@section Description{ -
    - It is also possible to digitally sign with timestamp. - More information about the digital signature and timestamp can be found in this documentation section. -
    -} - - - -@section Title{ - ASP.NET MVC PDF library - Digital Signature Example - Syncfusion Demos - } -@section Header{ -

    Example of Digital Signature in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/DigitalSignatureValidation.cshtml b/Views/PDF/DigitalSignatureValidation.cshtml deleted file mode 100644 index ea6a9ad1f..000000000 --- a/Views/PDF/DigitalSignatureValidation.cshtml +++ /dev/null @@ -1,46 +0,0 @@ -@model EJ2MVCSampleBrowser.Models.SignatureValidationMesssage -@section ControlsSection{ -
    - @{Html.BeginForm("digitalsignaturevalidation", "pdf", FormMethod.Post); - { -
    - - Click the button to validate the digital signature by using Essential PDF. - -
    -
    -
    -
    - - - - -
    -
    - -
    -
    -
    -
    - - Html.EndForm(); - }} -
    - @Html.TextAreaFor(s => s.Message, 1, 1, new { @style = "width:850px; height:225px", @readonly = "readonly" }) -
    - -} -@section ActionDescription{ -
    - This sample demonstrates how to validate the digital signatures in existing PDF document. -
    -} -@section Meta{ - - } -@section Title{ - ASP.NET MVC PDF library - Digital Signature Validation Example - Syncfusion Demos - } -@section Header{ -

    Example of Digital Signature Validation in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/DoctoPDF.cshtml b/Views/PDF/DoctoPDF.cshtml deleted file mode 100644 index 819570779..000000000 --- a/Views/PDF/DoctoPDF.cshtml +++ /dev/null @@ -1,45 +0,0 @@ - -@section ControlsSection{ -
    - @{ViewData["Title"] = " Essential DocIO (Word) : Word To PDF : Syncfusion";} - - @{Html.BeginForm("doctopdf", "pdf", FormMethod.Post, new { enctype = "multipart/form-data" }); - - { - -
    -
    - - Click the button to view the resultant PDF document being converted from Word document using Essential DocIO and Essential PDF. Please note that PDF viewer is required to view the resultant PDF. - -
    -
    -
    -
    -
    - -
    -
    -
    - @ViewData["Message"] -
    -
    -
    - - Html.EndForm(); - }} -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to convert word document to PDF. The Essential PDF supports customization in the conversion such as changing image quality, font embedding and more. -
    -} -@section Meta{ - -} -@section Description{ -
    - More information about the Word to PDF conversion can be found in this documentation section. -
    -} \ No newline at end of file diff --git a/Views/PDF/DocumentSettings.cshtml b/Views/PDF/DocumentSettings.cshtml deleted file mode 100644 index 0183479db..000000000 --- a/Views/PDF/DocumentSettings.cshtml +++ /dev/null @@ -1,50 +0,0 @@ -@section ControlsSection{ -
    - @{Html.BeginForm("documentsettings", "pdf", FormMethod.Post); - { -
    -
    -
    - - - - - - - -
    - Click the button to view the PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    - -
    -
    - -
    -
    - Html.EndForm(); - }} -
    -} -@section ActionDescription{ -
    - This sample demonstrates adding PDF document properties such as title, author, keyword, subject, and producer etc. -
    -} -@section Meta{ - - } -@section Description{ -
    - It is also possible to add advance XMP metadata properties such as basic schema, custom schema, Dublin core schema, rights management schema, basic job schema and more. - More information about the document settings can be found in this documentation section. -
    -} - -@section Title{ - ASP.NET MVC PDF library - Document Settings Example - Syncfusion Demos - } -@section Header{ -

    Example of Document Settings in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/DrawingShapes.cshtml b/Views/PDF/DrawingShapes.cshtml deleted file mode 100644 index d3a7d52a5..000000000 --- a/Views/PDF/DrawingShapes.cshtml +++ /dev/null @@ -1,51 +0,0 @@ -@section ControlsSection{ - -
    - @{Html.BeginForm("drawingshapes", "pdf", FormMethod.Post); - { -
    -
    -
    - - - - - - - -
    - Click the button to view an PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    - -
    -
    -
    -
    - - Html.EndForm(); - }} -
    -} -@section ActionDescription{ -
    - This sample demonstrates drawing shapes - such as Ellipse, Arcs, Polygon, Pie, and Rectangle in the PDF document with gradient and color spaces. -
    -} -@section Meta{ - - } -@section Description{ -
    - -
    -} - -@section Title{ - ASP.NET MVC PDF library - Drawing Shapes Example - Syncfusion Demos - } -@section Header{ -

    Example of Drawing Shapes in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/Encryption.cshtml b/Views/PDF/Encryption.cshtml deleted file mode 100644 index 9d898688b..000000000 --- a/Views/PDF/Encryption.cshtml +++ /dev/null @@ -1,158 +0,0 @@ -@using Syncfusion.EJ2 -@using Syncfusion.EJ2.DropDowns -@using EJ2MVCSampleBrowser.Models - -@{ViewData["Title"] = " Essential PDF : Encryption : Syncfusion";} - -@{Html.BeginForm("encryption", "pdf", FormMethod.Post); } - -@section ControlsSection{ -
    -
    - Click the button below to view a PDF created with Essential PDF. - Please note that Adobe Reader or its equivalent is required to view the resultant document. However, AES-GCM encryption is not supported by Adobe Reader to view such documents, use Foxit Reader or another compatible PDF viewer. -
    -
    -
    -
    -
    -
    - - @Html.EJS().RadioButton("rdButton40").Label("40 Bit RC4").Name("encryptionType").Value("40_RC4").Change("hideDropDownList").Render() -    - @Html.EJS().RadioButton("rdButton128RC4").Label("128 Bit RC4").Name("encryptionType").Value("128_RC4").Change("hideDropDownList").Render() -    - @Html.EJS().RadioButton("rdButton128AES").Label("128 Bit AES").Name("encryptionType").Value("128_AES").Change("hideDropDownList").Checked(true).Render() -    - @Html.EJS().RadioButton("rdButton256").Label("256 Bit AES").Name("encryptionType").Value("256_AES").Change("hideDropDownList").Render() -    - @Html.EJS().RadioButton("rdButton256Revision6").Label("256 Bit AES Revision 6").Name("encryptionType").Value("256_AES_Revision_6").Change("hideDropDownList").Render() -    - @Html.EJS().RadioButton("rdButton256AESGCM").Label("256 Bit AES GCM").Name("encryptionType").Value("256_AES_GCM").Change("hideDropDownList").Render() -
    - -
    -
    - - - - - - - - - - - - - -
    -
    - - - - - - - - - - - - - - - -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -} -@section ActionDescription{ -

    - This sample demonstrates how to encrypt the PDF document with encryption standards like 40-bit RC4, 128-bit RC4, 128-bit AES, 256-bit AES, advanced encryption standard 256-bit AES Revision 6 (PDF 2.0) and 256-bit AES-GCM (PDF 2.0) to protect documents against unauthorized access. -

    -} -@section Meta{ - - } -@section Description{ -

    - It is possible to protect with user password or owner password or both passwords and also possible to change or remove password and permission. - More information about encryption or decryption can be found in this documentation section. -

    -} - -@section Title{ - ASP.NET MVC PDF library - Encryption Example - Syncfusion Demos - } -@section Header{ -

    Example of Encryption in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/ExportasImage.cshtml b/Views/PDF/ExportasImage.cshtml deleted file mode 100644 index d05c9286d..000000000 --- a/Views/PDF/ExportasImage.cshtml +++ /dev/null @@ -1,57 +0,0 @@ -@section ControlsSection{ -
    - @{Html.BeginForm("exportasimage", "pdf", FormMethod.Post); - { -
    -
    -
    - - - - - - - -
    - Click the button to view an PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    - -   - -
    -
    -
    -
    -
    -
    - -
    - - Html.EndForm(); - }} - -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to export as images from the PDF document or PDF to image. The exported images can be saved into any raster image format. -
    -} -@section Meta{ - - } -@section Description{ -
    - This feature will be used to convert PDF to rasterized images to reduce the file size, prevent editing capability, prevent text extraction, and view document content without PDF viewing software. - More information about export as image can be found in this documentation section. -
    -} - -@section Title{ - ASP.NET MVC PDF library - Export as Image Example - Syncfusion Demos - } -@section Header{ -

    Example of Export as Image in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/FindPDFCorruption.cshtml b/Views/PDF/FindPDFCorruption.cshtml deleted file mode 100644 index 081ce06cd..000000000 --- a/Views/PDF/FindPDFCorruption.cshtml +++ /dev/null @@ -1,46 +0,0 @@ -@model EJ2MVCSampleBrowser.Models.FindPDFCorruptionMessage -@section ControlsSection{ -
    - @{Html.BeginForm("findpdfcorruption", "pdf", FormMethod.Post); - { -
    - - Click the button to find PDF document corruption by using Essential PDF. - -
    -
    -
    -
    - - - - -
    -
    - -
    -
    -
    -
    - - Html.EndForm(); - }} -
    - @Html.TextAreaFor(s => s.Message, 1, 1, new { @style = "width:100%; height:56px",@readonly="readonly" }) -
    - -} -@section Description{ -
    - This feature allows you to find only PDF syntax level corruptions. -
    -} -@section Meta{ - - } -@section Title{ - ASP.NET MVC PDF library - Find PDF Corruption Example - Syncfusion Demos - } -@section Header{ -

    Example of Find PDF Corruption in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/FormFilling.cshtml b/Views/PDF/FormFilling.cshtml deleted file mode 100644 index 6c9411afa..000000000 --- a/Views/PDF/FormFilling.cshtml +++ /dev/null @@ -1,69 +0,0 @@ -@using Syncfusion.EJ2 -@model EJ2MVCSampleBrowser.Models.UserRegisterationModel -@{ - ViewData["Title"] = " Essential PDF : Form Filling : Syncfusion"; -} - -@{ViewData["Title"] = " Essential PDF : Form Filling : Syncfusion";} - -@{Html.BeginForm("formfilling", "pdf", FormMethod.Post); } - -@section ControlsSection{ -
    -
    -
    - Click the Create PDF button to view a PDF document generated using pdf template - form, loaded in memory, it’s fields filled with appropriate data by using - Essential PDF. Please note that Adobe Reader or its equivalent is required to view - the resultant document -
    -
    -
    - - @Html.TextBoxFor(m => m.Name, new { @class = "form-control", @id = "Name" }) - - - @Html.DropDownListFor(m => m.Gender, new SelectList(new[] { "Male", "Female", "Unspecified" }), new { @class = "form-control", @id = "Gender" }) - - - @Html.TextBoxFor(m => m.DateOfBirth, "{0:yyyy-MM-dd}", new { @class = "form-control", @type = "date", @id = "DateOfBirth" }) - - - @Html.TextBoxFor(m => m.EmailID, new { @class = "form-control", @type = "email", @id = "EmailID" }) - - - @Html.DropDownListFor(m => m.StateDropdown, Model.States, "Select State", new { @class = "form-control", @id = "StateDropdown" }) - -
    - @Html.CheckBoxFor(m => m.Newsletter, new { @class = "form-check-input", @id = "Newsletter" }) - -
    -
    - - - -
    -
    -} -@section ActionDescription{ -

    - This sample demonstrates how to fill and flatten the form fields to personalize your PDF document. It is also possible to create, edit, and delete the form fields using the Essential PDF library. -

    -} -@section Meta{ - -} -@section Description{ -

    - This feature can be used in filling forms from the database or from user, and read form fields for transferring user data to database. - More information about the forms can be found in this documentation section. -

    -} - - -@section Title{ - ASP.NET MVC PDF library - Form Filling Example - Syncfusion Demos -} -@section Header{ -

    Example of Form Filling in ASP.NET MVC PDF Library

    -} diff --git a/Views/PDF/GraphicBrushes.cshtml b/Views/PDF/GraphicBrushes.cshtml deleted file mode 100644 index dbbf1cc4e..000000000 --- a/Views/PDF/GraphicBrushes.cshtml +++ /dev/null @@ -1,45 +0,0 @@ -@section ControlsSection{ -
    - @{Html.BeginForm("graphicbrushes", "pdf", FormMethod.Post); - { - -
    - Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    - - Html.EndForm(); - } - } -
    -} -@section ActionDescription{ -
    - This sample demonstrates drawing shapes with different brushes such as solid, tiling, hatch, Linear gradient, Radial gradient, and with different color spaces such as Cal RGB, ICC, Exponential interpolation, pantone, and indexed color space. -
    -} -@section Meta{ - - } -@section Description{ -
    - -
    -} - -@section Title{ - ASP.NET MVC PDF library - Graphic Brushes Example - Syncfusion Demos - } -@section Header{ -

    Example of Graphic Brushes in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/HeadersandFooters.cshtml b/Views/PDF/HeadersandFooters.cshtml deleted file mode 100644 index 089153677..000000000 --- a/Views/PDF/HeadersandFooters.cshtml +++ /dev/null @@ -1,45 +0,0 @@ -@section ControlsSection{ -
    - @{Html.BeginForm("headersfooters", "pdf", FormMethod.Post); - { -
    - Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    - - Html.EndForm(); - } - } -
    -} -@section ActionDescription{ -
    - This sample demonstrates adding headers and footers with images, text, and shapes in all pages of the document. -
    -} -@section Meta{ - - } -@section Description{ -
    - The Essential PDF also supports composite fields for adding page number, total pages and more. - More information about the document settings can be found in this documentation section. -
    -} - -@section Title{ - ASP.NET MVC PDF library - Headers and Footers Example - Syncfusion Demos - } -@section Header{ -

    Example of Headers and Footers in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/HelloWorld.cshtml b/Views/PDF/HelloWorld.cshtml deleted file mode 100644 index bd129568c..000000000 --- a/Views/PDF/HelloWorld.cshtml +++ /dev/null @@ -1,44 +0,0 @@ -@using Syncfusion.EJ2 - -@{ViewData["Title"] = " Essential PDF : Hello World : Syncfusion";} - -@{Html.BeginForm("helloworld", "pdf", FormMethod.Post); } -@section ControlsSection{ -
    -
    - Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -} -@section ActionDescription{ -

    - This sample demonstrates the creation of simple PDF document. It draws the string “Hello world!” in the desired location using the PDF standard font. -

    -} -@section Meta{ - - } -@section Description{ -

    - It is also possible to draw different languages of text with different fonts using TrueType fonts and CJK fonts. -

    -} - - -@section Title{ - ASP.NET MVC PDF library - Hello World Example - Syncfusion Demos - } -@section Header{ -

    Example of Hello World in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/HtmltoPDF.cshtml b/Views/PDF/HtmltoPDF.cshtml deleted file mode 100644 index 2b985809b..000000000 --- a/Views/PDF/HtmltoPDF.cshtml +++ /dev/null @@ -1,49 +0,0 @@ -@section ControlsSection{ - -
    - @{Html.BeginForm("htmltopdf", "pdf", FormMethod.Post); - { - - Html.EndForm(); - }} -
    - } -@section ActionDescription{ -
    - This sample demonstrates how to convert a URL to PDF using the HTML to PDF C# library. This PDF is reliable and accurate. This sample also contains many customization options and features. -
    -} -@section Meta{ - - } -@section Description{ -
    -

    - The Syncfusion HTML to PDF converter is a .NET library for converting webpages, SVG, MHTML, and HTML to PDF files using C#. It is reliable and accurate. Also, all graphics, images, text, fonts, and the layout of the original HTML document or webpage are preserved in the converted file. -

    -

    - The HTML-to-PDF converter works seamlessly in various platforms: Azure App Services, Azure Functions, AWS Lambda, Docker, WinForms, WPF, Blazor, ASP.NET MVC, ASP.NET Core with Windows, Linux, and MacOS. -

    - Key features - -
    -} - -@section Title{ - ASP.NET MVC PDF library - HTML to PDF Example - Syncfusion Demos - } -@section Header{ -

    Example of HTML to PDF in ASP.NET MVC PDF Library

    - } diff --git a/Views/PDF/ImageExtraction.cshtml b/Views/PDF/ImageExtraction.cshtml deleted file mode 100644 index 449fd13bc..000000000 --- a/Views/PDF/ImageExtraction.cshtml +++ /dev/null @@ -1,53 +0,0 @@ -@section ControlsSection{ - -
    - @{Html.BeginForm("imageextraction", "pdf", FormMethod.Post); - { -
    -
    -
    - - - - - - - -
    - Click the button to view the PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    - -   - -
    -
    -
    -
    - Html.EndForm(); - }} -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to extract images from the PDF document. The extracted images can be saved into any raster image format. -
    -} -@section Meta{ - - } -@section Description{ -
    - This feature will be used to extract the images from the PDF document for further processing such as OCR (Optical Character Recognition) scanned images and enhance the photos for replacing the images and so on for indexing and archiving purpose. - More information about the image extraction can be found in this documentation section. -
    -} - - -@section Title{ - ASP.NET MVC PDF library - Image Extraction Example - Syncfusion Demos - } -@section Header{ -

    Example of Image Extraction in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/ImageInsertion.cshtml b/Views/PDF/ImageInsertion.cshtml deleted file mode 100644 index 418c2b3de..000000000 --- a/Views/PDF/ImageInsertion.cshtml +++ /dev/null @@ -1,46 +0,0 @@ -@section ControlsSection{ -
    - @{Html.BeginForm("imageinsertion", "pdf", FormMethod.Post); - { - -
    - Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    - - Html.EndForm(); - } - } -
    -} -@section ActionDescription{ -
    - This sample demonstrates insertion of various raster and vector images (JPEG, PNG, TIFF, EMF, and GIF) in the PDF document. - This sample also demonstrates the image masking capability in the Essential PDF library. -
    -} -@section Meta{ - - } -@section Description{ -
    - It is also possible to rotate and paginate the images in the PDF document. - More information about the images can be found in this documentation section. -
    -} -@section Title{ - ASP.NET MVC PDF library - Image Insertion Example - Syncfusion Demos - } -@section Header{ -

    Example of Image Insertion in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/ImageToPdf.cshtml b/Views/PDF/ImageToPdf.cshtml deleted file mode 100644 index 619421b9e..000000000 --- a/Views/PDF/ImageToPdf.cshtml +++ /dev/null @@ -1,97 +0,0 @@ -@section ControlsSection { -
    - @{Html.BeginForm("imagetopdf", "pdf", FormMethod.Post, new { enctype = "multipart/form-data" }); - { - -
    - Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    - Select the image files to convert into PDF document -
    -
    -
    - -
    -
    -
    -

    - @Html.Label("", (string)ViewData["lab"]) -

    -
    -
    - -
    - - - - - - - - - - -
    - Page Size  :               - -
    - Page Orientation  :   - -
    - Page Margin  :          - -
    -
    - -
    -
    -
    -
    -
    - -
    -
    -
    - -
    - - - Html.EndForm(); - } - } -
    -} -@section ActionDescription{ -
    - This sample demonstrates to converter various raster images (JPEG, PNG, TIFF, and GIF) to a PDF document. -
    -} -@section Meta{ - - } -@section Description{ -
    - It is also possible to add margins and customize the page size based on the images. - More information about the images can be found in this documentation section. -
    -} -@section Title{ - ASP.NET MVC PDF library - Image to PDF Example - Syncfusion Demos - } -@section Header{ -

    Example of Image to PDF in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/ImportAndStamp.cshtml b/Views/PDF/ImportAndStamp.cshtml deleted file mode 100644 index 91401950c..000000000 --- a/Views/PDF/ImportAndStamp.cshtml +++ /dev/null @@ -1,58 +0,0 @@ -@section ControlsSection{ -
    - @{Html.BeginForm("ImportAndStamp", "PDF", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
    - Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    -

    - @Html.Label("", (string)ViewBag.lab) -

    -
    -
    - -
    -
    -
    - Stamping Text:  - -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    - - Html.EndForm(); - } - } -
    -} -@section ActionDescription{ -

    - This sample demonstrates how to stamp an existing PDF document using text. The Essential PDF supports both stamp and watermark with text and images in the PDF document. -

    -} -@section Meta{ - - } -@section Description{ -

    - This feature can be used to stamp the PDF document for draft, confidential, review purpose only, company logo, copyright notice and more. -More information about the stamp or watermark can be found in this documentation section. -

    -} -@section Title{ - ASP.NET MVC PDF library - Import and Stamp Example - Syncfusion Demos - } -@section Header{ -

    Example of Import and Stamp in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/InteractiveFeatures.cshtml b/Views/PDF/InteractiveFeatures.cshtml deleted file mode 100644 index 92ca391d3..000000000 --- a/Views/PDF/InteractiveFeatures.cshtml +++ /dev/null @@ -1,46 +0,0 @@ -@using Syncfusion.EJ2; - -@{ViewData["Title"] = " Essential PDF : Interactive Features : Syncfusion";} - -@{Html.BeginForm("interactivefeatures", "pdf", FormMethod.Post); } - -@section ControlsSection{ -
    -
    - Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -} -@section ActionDescription{ -

    - This sample demonstrates the creation of interactive invoice with attachment, product total price calculation based on the quantity using PDF JavaScript -

    -} -@section Meta{ - - } -@section Description{ -

    - This example can be used in the real-time invoice generation with print, submit online, or mail the order functionalities. -

    -} - - - -@section Title{ - ASP.NET MVC PDF library - Interactive Features Example - Syncfusion Demos - } -@section Header{ -

    Example of Interactive Features in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/InvoiceSample.cshtml b/Views/PDF/InvoiceSample.cshtml deleted file mode 100644 index 919a9aa32..000000000 --- a/Views/PDF/InvoiceSample.cshtml +++ /dev/null @@ -1,47 +0,0 @@ -@section ControlsSection{ - -
    - @{Html.BeginForm("invoicesample", "pdf", FormMethod.Post); - { -
    -
    -
    - Click the button to view the PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    - Select the Order ID : - @Html.DropDownList("id") -
    -
    -
    - - - - -
    -
    - -
    -
    -
    -
    -
    - Html.EndForm(); - }} -
    - } -@section ActionDescription{ -
    - This sample demonstrates the creation of invoice from the scratch using several elements such as images, text, shapes, and tables -
    -} -@section Meta{ - -} -@section Description{ -
    - Likewise, we can create pay slips, bills, bank statements and more using our Essential PDF library. -
    -} - diff --git a/Views/PDF/JobApplication.cshtml b/Views/PDF/JobApplication.cshtml deleted file mode 100644 index 550e2dd51..000000000 --- a/Views/PDF/JobApplication.cshtml +++ /dev/null @@ -1,46 +0,0 @@ -@section ControlsSection{ -
    - @{Html.BeginForm("jobapplication", "pdf", FormMethod.Post); - { -
    - Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    - - Html.EndForm(); - } - } -
    -} -@section ActionDescription{ -
    - This sample demonstrates the creation of job application form from the scratch using form fields. The user can fill the online job application, then download as a PDF document. - -
    -} -@section Meta{ - - } -@section Description{ -
    - This is a good example that illustrates how to use the Essential PDF in any requirements like invoice, job applications, pay slips, bank statements and more. -
    -} - - -@section Title{ - ASP.NET MVC PDF library - Job Application Example - Syncfusion Demos - } -@section Header{ -

    Example of Job Application in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/Layers.cshtml b/Views/PDF/Layers.cshtml deleted file mode 100644 index 76c88ea5e..000000000 --- a/Views/PDF/Layers.cshtml +++ /dev/null @@ -1,46 +0,0 @@ -@section ControlsSection{ -
    - @{Html.BeginForm("layers", "pdf", FormMethod.Post); - { - -
    - Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    - - Html.EndForm(); - } - } -
    -} -@section ActionDescription{ -
    - This sample demonstrates adding layers (Optional Content Group) with different shapes in the PDF document. - The Essential PDF also supports to create, merge, and toggle the layers. -
    -} -@section Meta{ - - } -@section Description{ -
    - This feature can be used in CAD drawings, maps, layered artworks, and multi-language documents. - More information about the layers can be found in this documentation section. -
    -} -@section Title{ - ASP.NET MVC PDF library - Layers Example - Syncfusion Demos - } -@section Header{ -

    Example of Layers in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/MergeDocuments.cshtml b/Views/PDF/MergeDocuments.cshtml deleted file mode 100644 index 475f63e72..000000000 --- a/Views/PDF/MergeDocuments.cshtml +++ /dev/null @@ -1,60 +0,0 @@ -@section ControlsSection{ -
    - @{Html.BeginForm("mergedocuments", "pdf", FormMethod.Post); - { - - -
    - Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    -
    -
    -
    -
    - @Html.EJS().CheckBox("OptimizeResources").Name("OptimizeResources").Value("OptimizeResources").Checked(true).Label("Optimize PDF Resources").Render() - @Html.EJS().CheckBox("MergeAccessibilityTags").Name("MergeAccessibilityTags").Value("MergeAccessibilityTags").Checked(true).Label("Merge Accessibility Tags").Render() -
    -
    -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    - - Html.EndForm(); - } - } -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to merge two different PDF documents into single PDF document. It is also possible to import pages to the PDF document. -
    -} -@section Meta{ - - } -@section Description{ -
    - This feature can be used to assemble PDF documents for printing, electronic distribution, and bundle PDF for archiving. - More information about the merge and import pages can be found in this documentation section. -
    -} - -@section Title{ - ASP.NET MVC PDF library - Merge Documents Example - Syncfusion Demos - } -@section Header{ -

    Example of Merge Documents in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/MultiColumnHtmlText.cshtml b/Views/PDF/MultiColumnHtmlText.cshtml deleted file mode 100644 index 5636b3974..000000000 --- a/Views/PDF/MultiColumnHtmlText.cshtml +++ /dev/null @@ -1,51 +0,0 @@ -@section ControlsSection{ - -
    - @{Html.BeginForm("multicolumnhtml", "pdf", FormMethod.Post); - { -
    -
    -
    - - - - - - - - -
    - Click the button to view the PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    - -
    -
    -
    -
    - Html.EndForm(); - }} -
    -} -@section ActionDescription{ -
    - This sample demonstrates drawing multi column HTML text in the PDF document. It supports basic HTML tags. Refer to this section for more details. This feature will be used to create newsletters and e-books. -
    -} -@section Meta{ - - } -@section Description{ -
    - Refer to this section for more details about converting complex HTML with advanced CSS to PDF. -
    -} - - -@section Title{ - ASP.NET MVC PDF library - Multi Column HTML Text Example - Syncfusion Demos - } -@section Header{ -

    Example of Multi Column HTML Text in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/NamedBookmark.cshtml b/Views/PDF/NamedBookmark.cshtml deleted file mode 100644 index 0be867db0..000000000 --- a/Views/PDF/NamedBookmark.cshtml +++ /dev/null @@ -1,42 +0,0 @@ -@section ControlsSection{ - -
    - @{Html.BeginForm("namedbookmark", "pdf", FormMethod.Post); - { -
    -
    -
    - - - - - - - - -
    - Click the button to view an PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    - -
    -
    -
    -
    - Html.EndForm(); - }} -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to create a named destination in the PDF document. -
    Named destination is the process of linking pages or destination within PDF document and can be used to open the PDF with the desired location and magnification in a webpage. -
    -} -@section Description{ -
    - More information about the named destination can be found in this documentation section. -
    -} - diff --git a/Views/PDF/NamedDestination.cshtml b/Views/PDF/NamedDestination.cshtml deleted file mode 100644 index 59564aa90..000000000 --- a/Views/PDF/NamedDestination.cshtml +++ /dev/null @@ -1,47 +0,0 @@ -@section ControlsSection{ -
    - @{Html.BeginForm("nameddestination", "pdf", FormMethod.Post); - { - -
    - Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    - - Html.EndForm(); - } - } -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to create a named destination in the PDF document. -
    -} -@section Meta{ - - } -@section Description{ -
    - Named destination is the process of linking pages or destination within PDF document and can be used to open the PDF with the desired location and magnification in a webpage. - More information about the named destination can be found in this documentation section. -
    -} - - -@section Title{ - ASP.NET MVC PDF library - Named Destination Example - Syncfusion Demos - } -@section Header{ -

    Example of Named Destination in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/NorthwindReport.cshtml b/Views/PDF/NorthwindReport.cshtml deleted file mode 100644 index 1f1d75cc9..000000000 --- a/Views/PDF/NorthwindReport.cshtml +++ /dev/null @@ -1,98 +0,0 @@ -@section ControlsSection{ - - -
    - @{Html.BeginForm("northwindreport", "pdf", FormMethod.Post); - { -
    -
    -
    - - - - - - - - - - -
    - Click the button to view an PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    - Choose built-in styles   - @Html.DropDownList("styleName", "GridTable4") -
    - - - - - - - - - - - - - - - - - -
    -
    - - Built-in style settings - -
    - - Header row - - - Banded row - - - First column -
    - - Last row - - - Banded column - - - Last column -
    -
    - - - - -
    -
    - -
    -
    -
    -
    - Html.EndForm(); - }} -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to generate table report with company logo and name in header of the PDF document. Built-in table styles are also applied to the grid, it will appear like Microsoft Office table style and more styling options are available. -
    -} -@section Meta{ - -} -@section Description{ -
    - More information about the tables can be found in this documentation section. -
    -} - diff --git a/Views/PDF/OpenTypeFont.cshtml b/Views/PDF/OpenTypeFont.cshtml deleted file mode 100644 index cca5d6e30..000000000 --- a/Views/PDF/OpenTypeFont.cshtml +++ /dev/null @@ -1,46 +0,0 @@ -@section ControlsSection - { -
    - @{Html.BeginForm("opentypefont", "pdf", FormMethod.Post); - { -
    - Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    - - Html.EndForm(); - } - } -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to draw a text with OpenType font in a PDF document. -
    -} -@section Meta{ - - } -@section Description{ -
    - It is also possible to draw Unicode text. - More information about drawing text can be found in this documentation section. -
    -} - -@section Title{ - ASP.NET MVC PDF library - OpenType Font Example - Syncfusion Demos - } -@section Header{ -

    Example of OpenType Font in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/OverlayDocuments.cshtml b/Views/PDF/OverlayDocuments.cshtml deleted file mode 100644 index b3baed9f2..000000000 --- a/Views/PDF/OverlayDocuments.cshtml +++ /dev/null @@ -1,50 +0,0 @@ -@section ControlsSection{ -
    - @{Html.BeginForm("overlaydocuments", "pdf", FormMethod.Post); - { - - -
    - Click the button to generate a PDF document by applying the border specified in - the “Border template” on all the pages in the “Source Template" - using Essential PDF. Please note that Adobe Reader or its equivalent is required - to view the resultant document. -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    - - Html.EndForm(); - } - } -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to overlay two different PDF documents into a single PDF document. -
    -} -@section Meta{ - - } -@section Description{ -
    - This feature can be used to draw template pages from one document into another for easy designing. -
    -} - -@section Title{ - ASP.NET MVC PDF library - Overlay Documents Example - Syncfusion Demos - } -@section Header{ -

    Example of Overlay Documents in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/PDFToImage.cshtml b/Views/PDF/PDFToImage.cshtml deleted file mode 100644 index d325a0df4..000000000 --- a/Views/PDF/PDFToImage.cshtml +++ /dev/null @@ -1,50 +0,0 @@ -@section ControlsSection{ -
    - @{Html.BeginForm("pdftoimage", "pdf", FormMethod.Post); - { -
    -
    -
    - - - - - - - -
    - Click the "Convert to Image" button to convert the first page of the PDF document to Image using PdfToImageConverter. - Click the "View Template" button to view the PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    - -   - -
    -
    -
    -
    - Html.EndForm(); - }} -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to convert a PDF document to an image using the PdfToImageConverter. It supports customization in image conversion, such as setting a transparent background and removing annotations for a specific page or range of pages. -
    -} -@section Meta{ - - } -@section Description{ -
    - More information about the PDF to Image conversion using the PdfToImageConverter can be found in this documentation section. -
    -} -@section Title{ - ASP.NET Core PdfToImageConverter - PDF To Image Example - Syncfusion Demos - } -@section Header{ -

    Example of PDF To Image using ASP.NET Core PdfToImageConverter

    - } \ No newline at end of file diff --git a/Views/PDF/PageSettings.cshtml b/Views/PDF/PageSettings.cshtml deleted file mode 100644 index 399a064a6..000000000 --- a/Views/PDF/PageSettings.cshtml +++ /dev/null @@ -1,104 +0,0 @@ -@section ControlsSection{ - -
    - @{Html.BeginForm("pagesettings", "pdf", FormMethod.Post); - { -
    - Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - Page Size              :   - @Html.DropDownList("pagesize", (IEnumerable)ViewData["PageSizeList"], new { @class = "e-btn", @id = "pagesize", @onchange = "updatePageDetails()", style = "width: 120px;" }) -
    - Page Orientation  :   - @Html.DropDownList("pageOrientation", (IEnumerable)ViewData["PageOrientationList"], new { @class = "e-btn", @id = "pageOrientation", @onchange = "updatePageDetails()", style = "width: 120px;" }) -
    - Page Margin         :   - @Html.DropDownList("pageMargin", (IEnumerable)ViewData["PageMarginList"], new { @class = "e-btn", @id = "pageMargin", @onchange = "updatePageDetails()", style = "width: 120px;" }) -
    - Page Rotation       :   - @Html.DropDownList("pageRotation", (IEnumerable)ViewData["PageRotationList"], new { @class = "e-btn", @id = "pageRotation", @onchange = "updatePageDetails()", style = "width: 120px;" }) -
    - Pages Count         :   - - - -
    - @Html.EJS().CheckBox("applyTransition").Name("applyTransition").Checked(true).Value("ApplyTransition").Render() - Apply Transition -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    - Html.EndForm(); - } - } -
    - -} -@section ActionDescription{ -
    - This sample demonstrates adding pages with different settings such as rotation, orientation, page size, and transition. -
    -} -@section Meta{ - - } -@section Description{ -
    - It is also possible to add or insert pages and sections, remove pages, rearrange pages and more. - More information about the pages and sections can be found in this documentation section. -
    -} - -@section Title{ - ASP.NET MVC PDF library - Page Settings Example - Syncfusion Demos - } -@section Header{ -

    Example of Page Settings in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/PdfA1bConverter.cshtml b/Views/PDF/PdfA1bConverter.cshtml deleted file mode 100644 index 12625a8bb..000000000 --- a/Views/PDF/PdfA1bConverter.cshtml +++ /dev/null @@ -1,64 +0,0 @@ -@section ControlsSection{ - -
    - @{Html.BeginForm("pdfa1bconverter", "pdf", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
    - - - - -
    - Click the button to view an PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    -
    -
    -
    -
    - Choose a PDF file to convert - - - - -
    -
    -
    - -
    -
    -
    -
    -

    - @Html.Label("", (string)ViewData["lab"]) -

    - - - - -
    - -
    -
    -
    -
    - Html.EndForm(); - }} -
    -} -@section ActionDescription{ -
    - This sample demonstrates the conversion of PDF to PDF/A-1b standard document using Essential PDF. -
    -} -@section Meta{ - -} -@section Description{ -
    - This feature can be used for long term archiving and standardization. - More information about conformance can be found in this documentation section. -
    -} - diff --git a/Views/PDF/PdfCompression.cshtml b/Views/PDF/PdfCompression.cshtml deleted file mode 100644 index 5b606cc46..000000000 --- a/Views/PDF/PdfCompression.cshtml +++ /dev/null @@ -1,65 +0,0 @@ -@section ControlsSection{ - - -
    - @{Html.BeginForm("pdfcompression", "pdf", FormMethod.Post); - { - -
    -
    - - - - - - - -
    - Click the button to view an PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    - Choose the compression level -   - @Html.DropDownList("compress", (IEnumerable)ViewData["PriorityID"], new { @class = "e-btn" }) -
    -
    - Image Compression -       - @Html.DropDownList("img", (IEnumerable)ViewData["PriorityID"], new { @class = "e-btn" }) -
    -
    -
    -
    - - - - -
    -
    - -
    -
    - Html.EndForm(); - }} -
    -} -@section ActionDescription{ -
    - This sample demonstrates the creation of compressed PDF document. It compresses the content stream and images in the PDF document based on the quality factor. -
    -} -@section Meta{ - - } -@section Description{ -
    - It is also possible to compress the existing PDF document by removing the metadata, optimizing the font, and page content. -
    -} -@section Title{ - ASP.NET MVC PDF library - PDF Compression Level Example - Syncfusion Demos - } -@section Header{ -

    Example of PDF Compression Level in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/PdfConformance.cshtml b/Views/PDF/PdfConformance.cshtml deleted file mode 100644 index d8210c61a..000000000 --- a/Views/PDF/PdfConformance.cshtml +++ /dev/null @@ -1,65 +0,0 @@ -@using Syncfusion.EJ2 -@using Syncfusion.EJ2.DropDowns -@using EJ2MVCSampleBrowser.Models -@{ViewData["Title"] = " Essential PDF :PdfConformance : Syncfusion";} -@{Html.BeginForm("pdfconformance", "pdf", FormMethod.Post); } -@section ControlsSection - { -
    -
    - Click the button to view a PDF/A conformance document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    -
    -
    -
    - - - -
    - - - @Html.EJS().DropDownList("conformance").Width("130px").Index(0).PopupHeight("200px").DataSource(ViewData["data"]).Render() - - -
    - - - -
     
    -
    - -
    -
    -
    -
    - - - -
    -} -@section ActionDescription{ -
    - This sample demonstrates various PDF conformance support in Essential PDF. -
    -} -@section Meta{ - - } -@section Description{ -
    - This feature can be used for long term archiving and standardization. - More information about conformance can be found in this documentation section. -
    -} - - -@section Title{ - ASP.NET MVC PDF library - PDF Conformance Example - Syncfusion Demos - } -@section Header{ -

    Example of PDF Conformance in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/PdfToPdfAConverter.cshtml b/Views/PDF/PdfToPdfAConverter.cshtml deleted file mode 100644 index 30a5c520d..000000000 --- a/Views/PDF/PdfToPdfAConverter.cshtml +++ /dev/null @@ -1,79 +0,0 @@ -@section ControlsSection{ - -
    - @{Html.BeginForm("pdftopdfaconverter", "pdf", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
    - - - - -
    - Click the button to view an PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    -
    -
    -
    -
    - Choose a PDF file to convert - - - - -
    -
    -
    - -
    -
    - - - - -
    - Please select the conformance  :   - @Html.DropDownList("conformance", (IEnumerable)ViewData["PriorityID"], new { @class = "e-btn" }) -
    -
    -
    -

    - @Html.Label("", (string)ViewData["lab"]) -

    - - - - -
    - -
    -
    -
    -
    - Html.EndForm(); - }} -
    -} -@section ActionDescription{ -
    - This sample demonstrates the conversion of PDF to PDF/A-1b standard document using Essential PDF. -
    -} -@section Meta{ - - } -@section Description{ -
    - This feature can be used for long term archiving and standardization. - More information about conformance can be found in this documentation section. -
    -} - - -@section Title{ - ASP.NET MVC PDF library - PDF to PDF-A Example - Syncfusion Demos - } -@section Header{ -

    Example of PDF to PDF-A in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/Portfolio.cshtml b/Views/PDF/Portfolio.cshtml deleted file mode 100644 index d1374bcb5..000000000 --- a/Views/PDF/Portfolio.cshtml +++ /dev/null @@ -1,47 +0,0 @@ -@section ControlsSection{ -
    - @{Html.BeginForm("portfolio", "pdf", FormMethod.Post); - { - -
    - Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    - - Html.EndForm(); - } - } -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to create portfolio in the PDF document. You can also extract and remove files from the PDF portfolio. -
    - This feature allows the user to bring content together from variety of sources including documents, drawings, images, emails, spreadsheets, and web pages. - -
    -} -@section Meta{ - - } -@section Description{ -
    - More information about the portfolio can be found in this documentation section. -
    -} -@section Title{ - ASP.NET MVC PDF library - Portfolio Example - Syncfusion Demos - } -@section Header{ -

    Example of Portfolio in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/RTFtoPDF.cshtml b/Views/PDF/RTFtoPDF.cshtml deleted file mode 100644 index 7d9277f59..000000000 --- a/Views/PDF/RTFtoPDF.cshtml +++ /dev/null @@ -1,50 +0,0 @@ -@section ControlsSection{ - -
    - @{Html.BeginForm("rtftopdf", "pdf", FormMethod.Post); - { -
    -
    -
    - - - - - - - -
    - Click the button to view an PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    - -
    -
    -
    -
    - Html.EndForm(); - }} -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to convert RTF document to PDF. -
    -} -@section Meta{ - - } -@section Description{ -
    - More information about the RTF to PDF document conversion can be found in this documentation section. -
    -} - - -@section Title{ - ASP.NET MVC PDF library - RTF to PDF Example - Syncfusion Demos - } -@section Header{ -

    Example of RTF to PDF in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/RearrangePages.cshtml b/Views/PDF/RearrangePages.cshtml deleted file mode 100644 index a114adada..000000000 --- a/Views/PDF/RearrangePages.cshtml +++ /dev/null @@ -1,50 +0,0 @@ -@section ControlsSection{ -
    - @{Html.BeginForm("rearrangepages", "pdf", FormMethod.Post); - { - -
    - Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    -
    -
    -
    -
    - -
    -
    -
    - -
    -
    -
    -
    - - Html.EndForm(); - } - } -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to rearrange pages from an existing PDF document to make the document meaningful. -
    -} -@section Meta{ - - } -@section Description{ -
    - More information about rearrange pages can be found in this documentation section. -
    -} - - -@section Title{ - ASP.NET MVC PDF library - Rearrange Pages Example - Syncfusion Demos - } -@section Header{ -

    Example of Rearrange Pages in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/Redaction.cshtml b/Views/PDF/Redaction.cshtml deleted file mode 100644 index aa835a5c5..000000000 --- a/Views/PDF/Redaction.cshtml +++ /dev/null @@ -1,180 +0,0 @@ -@section ControlsSection{ -
    - @{ using (Html.BeginForm("redaction", "pdf", FormMethod.Post, new { enctype = "multipart/form-data" })) - { - -
    - Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    -
    - - - - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    -
    -

    - @Html.Label("", (string)ViewData["lab"]) -

    -
    - Use choose file option to select the PDF document and redact the content -
    -
    - - - - - - - - - - - - -
    -
    - -
    -
    -
    -
    - - - - - - - - - - - - - - - - - -
    - X - -
    - -
    -
    -
    - -
    -
    - Y - -
    - -
    -
    -
    - -
    -
    - Width - -
    - -
    -
    -
    - -
    -
    - Height - -
    - -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    - - - Html.EndForm(); - } - } -
    -} -@section ActionDescription{ -
    - This sample demonstrates redacting a text from the PDF document. It is also possible to redact the images. The redaction is a process of removing sensitive or unwanted information from the PDF document. -
    -} -@section Meta{ - - } - -@section Title{ - ASP.NET MVC PDF library - Redaction Example - Syncfusion Demos - } -@section Header{ -

    Example of Redaction in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/RemoveImages.cshtml b/Views/PDF/RemoveImages.cshtml deleted file mode 100644 index 04f37fdbe..000000000 --- a/Views/PDF/RemoveImages.cshtml +++ /dev/null @@ -1,71 +0,0 @@ -@section ControlsSection{ -
    - @{ using (Html.BeginForm("removeimages", "pdf", FormMethod.Post, new { enctype = "multipart/form-data" })) - { - -
    - Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    -
    - - - - - - - - - -
    -
    - -
    -
    -
    - -
    -
    -
    -
    - Html.EndForm(); - } - } -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to remove images from an existing PDF document. -
    -} -@section Meta{ - - } - -@section Title{ - ASP.NET MVC PDF library - Remove Images Example - Syncfusion Demos - } -@section Header{ -

    Example of Remove Images in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/ReplaceFonts.cshtml b/Views/PDF/ReplaceFonts.cshtml deleted file mode 100644 index daeee5ad4..000000000 --- a/Views/PDF/ReplaceFonts.cshtml +++ /dev/null @@ -1,53 +0,0 @@ -@section ControlsSection{ - -
    - @{Html.BeginForm("replacefonts", "pdf", FormMethod.Post); - { -
    -
    -
    - - - - - - - - -
    - Click the button to view an PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    - -   - -
    -
    -
    -
    - Html.EndForm(); - }} -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to replace fonts from an existing PDF document. -
    -} -@section Meta{ - - } -@section Description{ -
    - When the font in the PDF document is not available in your machine or if you want to change the existing font, this feature can be used. More information about replacing font can be found in this documentation section. -
    -} - - -@section Title{ - ASP.NET MVC PDF library - Replace Fonts Example - Syncfusion Demos - } -@section Header{ -

    Example of Replace Fonts in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/ReplaceImages.cshtml b/Views/PDF/ReplaceImages.cshtml deleted file mode 100644 index 356b0ee24..000000000 --- a/Views/PDF/ReplaceImages.cshtml +++ /dev/null @@ -1,53 +0,0 @@ -@section ControlsSection{ - -
    - @{Html.BeginForm("replaceimages", "pdf", FormMethod.Post); - { -
    -
    -
    - - - - - - - -
    - Click the button to view an PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    - -   - -
    - -
    -
    -
    - Html.EndForm(); - }} -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to replace images from an existing PDF document. - It is also possible to replace images with high or low-quality images or replace with a blank image etc. -
    -} -@section Meta{ - - } -@section Description{ -
    - More information about replace images can be found in this documentation section. -
    -} - -@section Title{ - ASP.NET MVC PDF library - Replace Images Example - Syncfusion Demos - } -@section Header{ -

    Example of Replace Images in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/RtlSupport.cshtml b/Views/PDF/RtlSupport.cshtml deleted file mode 100644 index 7e7a68e3e..000000000 --- a/Views/PDF/RtlSupport.cshtml +++ /dev/null @@ -1,46 +0,0 @@ -@section ControlsSection - { -
    - @{Html.BeginForm("rtlsupport", "pdf", FormMethod.Post); - { -
    - Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    - - Html.EndForm(); - } - } -
    -} -@section ActionDescription{ -
    - This sample demonstrates drawing right-to-left language text in the PDF document. It is possible to draw RTL languages such as Arabic, Hebrew, Persian, Urdu and more. -
    -} -@section Meta{ - - } -@section Description{ -
    - It is also possible to draw Unicode text. - More information about drawing text can be found in this documentation section. -
    -} - -@section Title{ - ASP.NET MVC PDF library - RTL Support Example - Syncfusion Demos - } -@section Header{ -

    Example of RTL Support in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/SplitPDF.cshtml b/Views/PDF/SplitPDF.cshtml deleted file mode 100644 index ecb5ec14e..000000000 --- a/Views/PDF/SplitPDF.cshtml +++ /dev/null @@ -1,148 +0,0 @@ -@section ControlsSection{ -
    - @{ using (Html.BeginForm("splitpdf", "pdf", FormMethod.Post, new { enctype = "multipart/form-data" })) - { - -
    - Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    -
    -

    - @Html.Label("", (string)ViewData["lab"]) -

    -
    - - - -
    -
    -
    - Select the below options to split by: -
    -
    - -
    - - -   - -   - -
    -
    - - -
    - Enter page ranges to split:

    From
    - - - To - -
    - - - - - - -
    -
    -
    -
    -
    - -
    -
    -
    -
    - - Html.EndForm(); - } - } -
    -} - -@section ActionDescription{ -
    - This sample demonstrates how to split the PDF pages into multiple PDF documents. -
    -} -@section Meta{ - -} -@section Description{ -
    - This feature will be used to split the necessary pages from the PDF document, split a large sized PDF into a smaller one and more. -
    -} -@section Title{ - ASP.NET MVC PDF library - Split PDF Example - Syncfusion Demos -} -@section Header{ -

    Example of Split PDF in ASP.NET MVC PDF Library

    -} - - - diff --git a/Views/PDF/TableFeatures.cshtml b/Views/PDF/TableFeatures.cshtml deleted file mode 100644 index 3a928e581..000000000 --- a/Views/PDF/TableFeatures.cshtml +++ /dev/null @@ -1,46 +0,0 @@ -@using Syncfusion.EJ2; - -@{ViewData["Title"] = " Essential PDF : Table Features : Syncfusion";} - -@{Html.BeginForm("tablefeatures", "pdf", FormMethod.Post); } - -@section ControlsSection{ -
    -
    - Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -} -@section ActionDescription{ -

    - This sample demonstrates the creation of richly formatted table to keep your data organized for both basic and advanced operation on cells, rows, and columns along with headers and footers. -

    -} -@section Meta{ - - } -@section Description{ -

    - More information about the document settings can be found in this documentation section. -

    -} - - - -@section Title{ - ASP.NET MVC PDF library - Table Features Example - Syncfusion Demos - } -@section Header{ -

    Example of Table Features in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/TextExtraction.cshtml b/Views/PDF/TextExtraction.cshtml deleted file mode 100644 index 28ef7a583..000000000 --- a/Views/PDF/TextExtraction.cshtml +++ /dev/null @@ -1,87 +0,0 @@ -@section ControlsSection{ -
    - @{Html.BeginForm("textextraction", "pdf", FormMethod.Post, new { enctype = "multipart/form-data" }); - { - -
    - - Click the button to extract the text from the PDF document using Essential PDF. - -
    -
    -
    -
    - - - - -
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    - - - - - - - - - - - - - -
    - Select a PDF file to extract text from specified page. -
    - -
    -
    - Page number to extract text    : - -
    -
    - -
    -
    -
    -

    - @Html.Label("", (string)ViewData["Message"]) -

    -
    - -
    - - Html.EndForm(); - }} -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to extract the text from the PDF document. -
    -} -@section Meta{ - - } -@section Description{ -
    - This feature can be used to extract information such as user data, billing information from invoice, address, and so on from the PDF document for indexing and archiving. - More information about the text extraction can be found in this documentation section. -
    -} - -@section Title{ - ASP.NET MVC PDF library - Text Extraction Example - Syncfusion Demos - } -@section Header{ -

    Example of Text Extraction in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/TextFlow.cshtml b/Views/PDF/TextFlow.cshtml deleted file mode 100644 index d012b2f78..000000000 --- a/Views/PDF/TextFlow.cshtml +++ /dev/null @@ -1,47 +0,0 @@ -@section ControlsSection{ -
    - @{Html.BeginForm("textflow", "pdf", FormMethod.Post); - { -
    - Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    - - Html.EndForm(); - } - } -
    -} -@section ActionDescription{ -
    - This sample demonstrates the creation of PDF document with large text that flows over multiple pages. You can also draw multiple paragraphs sequentially. -
    -} -@section Meta{ - - } -@section Description{ -
    - This feature can be used to create a large text in the PDF document. - More information about the text element can be found in this documentation section. -
    -} - - - -@section Title{ - ASP.NET MVC PDF library - Text Flow Example - Syncfusion Demos - } -@section Header{ -

    Example of Text Flow in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/TiffToPdf.cshtml b/Views/PDF/TiffToPdf.cshtml deleted file mode 100644 index fe4fb3c34..000000000 --- a/Views/PDF/TiffToPdf.cshtml +++ /dev/null @@ -1,52 +0,0 @@ -@section ControlsSection{ - -
    - @{Html.BeginForm("tifftopdf", "pdf", FormMethod.Post); - { -
    -
    -
    - - - - - - - -
    - Click the button to view an PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    - -
    -
    -
    -
    -
    - - Html.EndForm(); - }} - -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to convert single or multi frame TIFF images to PDF. -
    -} -@section Meta{ - - } -@section Description{ -
    - More information about TIFF to PDF document can be found in this documentation section. -
    -} - -@section Title{ - ASP.NET MVC PDF library - TIFF to PDF Example - Syncfusion Demos - } -@section Header{ -

    Example of TIFF to PDF in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/WatermarkPDF.cshtml b/Views/PDF/WatermarkPDF.cshtml deleted file mode 100644 index 92e6362b8..000000000 --- a/Views/PDF/WatermarkPDF.cshtml +++ /dev/null @@ -1,108 +0,0 @@ -@section ControlsSection { -
    - @{ - Html.BeginForm("watermarkpdf", "pdf", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
    - Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    -

    - @Html.Label("", (string)ViewData["lab"]) -

    -
    -
    -
    - - - - -
    -
    -
    -     Stamping Text:  - -
    -
    -
    -     Set Transparency:  - -
    -
    - - -   @Html.EJS().CheckBox("imageWatermark").Name("imageWatermark").Value("Watermark").Label("Image Watermark").Change("toggleImageUpload").Render() - - -
    -
    -
    - -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    - Html.EndForm(); - } - } -
    -} - - - - -@section ActionDescription{ -

    - This sample demonstrates how to stamp an existing PDF document using text. The Essential PDF supports both stamp and watermark with text and images in the PDF document. -

    -} -@section Meta{ - -} -@section Description{ -

    - This feature can be used to stamp the PDF document for draft, confidential, review purpose only, company logo, copyright notice and more. - More information about the stamp or watermark can be found in this documentation section. -

    -} -@section Title{ - ASP.NET MVC PDF library - Import and Stamp Example - Syncfusion Demos -} -@section Header{ -

    Example of Import and Stamp in ASP.NET MVC PDF Library

    -} diff --git a/Views/PDF/WordtoPDF.cshtml b/Views/PDF/WordtoPDF.cshtml deleted file mode 100644 index ec0c50bfd..000000000 --- a/Views/PDF/WordtoPDF.cshtml +++ /dev/null @@ -1,50 +0,0 @@ -@section ControlsSection{ -
    - @{ViewData["Title"] = " Essential DocIO (Word) : Word To PDF : Syncfusion";} - - @{Html.BeginForm("wordtopdf", "pdf", FormMethod.Post, new { enctype = "multipart/form-data" }); - - { - -
    -
    - - Click the button to view the resultant PDF document being converted from Word document using Essential DocIO and Essential PDF. Please note that PDF viewer is required to view the resultant PDF. - -
    -
    -
    -
    -
    - -
    -
    -
    - @ViewData["Message"] -
    -
    -
    - - Html.EndForm(); - }} -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to convert word document to PDF. The Essential PDF supports customization in the conversion such as changing image quality, font embedding and more. -
    -} -@section Meta{ - - } -@section Description{ -
    - More information about the Word to PDF conversion can be found in this documentation section. -
    -} -@section Title{ - ASP.NET MVC PDF library - Word to PDF Example - Syncfusion Demos - } -@section Header{ -

    Example of Word to PDF in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/XFAFormCreation.cshtml b/Views/PDF/XFAFormCreation.cshtml deleted file mode 100644 index be2aea5cf..000000000 --- a/Views/PDF/XFAFormCreation.cshtml +++ /dev/null @@ -1,51 +0,0 @@ -@section ControlsSection{ - -
    - @{Html.BeginForm("xfaformcreation", "pdf", FormMethod.Post); - { -
    -
    -
    -
    -
    - - - - - - - -
    - Click the button to view an PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    - -
    -
    -
    -
    -
    - Html.EndForm(); - }} -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to create registration form using XFA form fields. The Essential PDF supports to create dynamic and static XFA form fields. -
    -} -@section Meta{ - - } -@section Description{ -
    - More information about the XFA can be found in this documentation section. -
    -} -@section Title{ - ASP.NET MVC PDF library - XFA Form Creation Example - Syncfusion Demos - } -@section Header{ -

    Example of XFA Form Creation in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/XFAFormFilling.cshtml b/Views/PDF/XFAFormFilling.cshtml deleted file mode 100644 index 8fe3fdd7c..000000000 --- a/Views/PDF/XFAFormFilling.cshtml +++ /dev/null @@ -1,63 +0,0 @@ -@section ControlsSection{ - - - -
    - @{Html.BeginForm("xfaformfilling", "pdf", FormMethod.Post); - { - -
    -
    -
    -
    - - - - - - - - - - -
    - Click the button to view an PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    - @Html.EJS().CheckBox("Flatten").Name("Flatten").Value("Flatten").Label("Flatten XFA Form").Render() -
    -
    - -   - -
    -
    -
    -
    -
    -
    - Html.EndForm(); - }} -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to fill and flatten XFA form fields. It is possible to edit and remove the existing XFA form fields. -
    -} -@section Meta{ - - } -@section Description{ -
    - This feature can be used in filling forms from the database or from user and read out form fields for transferring user data to database. - More information about the XFA can be found in this documentation section. -
    -} -@section Title{ - ASP.NET MVC PDF library - XFA Form Filling Example - Syncfusion Demos - } -@section Header{ -

    Example of XFA Form Filling in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/XPStoPDF.cshtml b/Views/PDF/XPStoPDF.cshtml deleted file mode 100644 index 7ead17bc1..000000000 --- a/Views/PDF/XPStoPDF.cshtml +++ /dev/null @@ -1,49 +0,0 @@ -@section ControlsSection{ -
    - @{Html.BeginForm("xpstopdf", "pdf", FormMethod.Post); - { -
    -
    -
    - - - - - - - -
    - Click the button to view an PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    - -
    -
    -
    -
    -
    - Html.EndForm(); - } - } -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to convert XPS to PDF document. -
    -} -@section Meta{ - - } -@section Description{ -
    - More information about XPS to PDF document can be found in this documentation section. -
    -} -@section Title{ - ASP.NET MVC PDF library - XPS to PDF Example - Syncfusion Demos - } -@section Header{ -

    Example of XPS to PDF in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PDF/Zugferd.cshtml b/Views/PDF/Zugferd.cshtml deleted file mode 100644 index 687be28f5..000000000 --- a/Views/PDF/Zugferd.cshtml +++ /dev/null @@ -1,49 +0,0 @@ -@section ControlsSection{ - -
    - @{Html.BeginForm("zugferd", "pdf", FormMethod.Post); - { -
    -
    -
    - - - - - - - -
    - Click the button to view an ZUGFeRD PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
    -
    - -
    -
    -
    -
    - Html.EndForm(); - }} -
    -} -@section ActionDescription{ -
    - This sample demonstrates how to create ZUGFeRD PDF invoice using Essential PDF. -
    -} -@section Meta{ - - } -@section Description{ -
    - This feature can be used for long term archiving and standardization. More information about conformance can be found in this documentation section. -
    -} - -@section Title{ - ASP.NET MVC PDF library - Zugferd Invoice Example - Syncfusion Demos - } -@section Header{ -

    Example of Zugferd Invoice in ASP.NET MVC PDF Library

    - } \ No newline at end of file diff --git a/Views/PdfViewer/Annotations.cshtml b/Views/PdfViewer/Annotations.cshtml deleted file mode 100644 index 3fcf56216..000000000 --- a/Views/PdfViewer/Annotations.cshtml +++ /dev/null @@ -1,309 +0,0 @@ -@using Syncfusion.EJ2 -@{ - ViewData["Title"] = "Annotations"; - Layout = "~/Views/Shared/_Layout.cshtml"; -} -@{ - string serviceUrl = VirtualPathUtility.ToAbsolute("~/api/PdfViewer/"); -} - -@section ControlsSection{ -
    -
    - -
    - -
    - @Html.EJS().Switch("checked").Checked(true).Change("change").CssClass("buttonSwitch").Render() -
    - - @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/annotations-v2.pdf").ResourceUrl("https://cdn.syncfusion.com/ej2/23.2.6/dist/ej2-pdfviewer-lib").DocumentLoad("documentLoad").DownloadEnd("documentLoad").Render() -
    -} - -@section Meta{ - - } -@section ActionDescription{ -
    -

    This sample demonstrates the creation of different types of annotations such as Text Markup, Shapes, Measurements, Free text, Stamps, Handwritten signature, ink, and sticky notes in the PDF Viewer. And also we can customize the added annotations or we can include new annotations through user interaction from the PDF Viewer.

    -
    -} -@section Description{ -
    -

    - More information on adding annotation programmatically can be found in this - - documentation section - opens in a new tab. -

    - -
    -} -@*custom code start*@ - -@*custom code end*@ - -@section Title{ - ASP.NET MVC PDF Viewer Annotations Example - Syncfusion Demos - } -@section Header{ -

    Example of Annotations in ASP.NET MVC PDF Viewer Control

    - } - \ No newline at end of file diff --git a/Views/PdfViewer/ContextMenu.cshtml b/Views/PdfViewer/ContextMenu.cshtml deleted file mode 100644 index 4d6454971..000000000 --- a/Views/PdfViewer/ContextMenu.cshtml +++ /dev/null @@ -1,322 +0,0 @@ -@using Syncfusion.EJ2 -@{ - ViewData["Title"] = "DefaultFunctionalities"; - Layout = "~/Views/Shared/_Layout.cshtml"; -} -@{ - string serviceUrl = VirtualPathUtility.ToAbsolute("~/api/PdfViewer/"); -} - -@section ControlsSection{ -
    -
    - -
    - -
    - @Html.EJS().Switch("checked").Checked(true).Change("change").CssClass("buttonSwitch").Render() -
    - @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ResourceUrl("https://cdn.syncfusion.com/ej2/23.2.6/dist/ej2-pdfviewer-lib").CustomContextMenuSelect("customContextMenuSelect").CustomContextMenuBeforeOpen("customContextMenuBeforeOpen").DocumentLoad("documentLoad").Render() -
    - -
    -
    -
    Properties
    -
    - - - - - - - - - -
    Hide Default Context Menu - @Html.EJS().CheckBox("enable").Change("contextmenuHelper").Checked(false).CssClass("multiline").Render() -
    Add Custom option at bottom - @Html.EJS().CheckBox("position").Change("contextmenuHelper").Checked(false).CssClass("multiline").Render() -
    -
    -} - -@section Meta{ - - } -@section ActionDescription{ -
    -

    Explore how to tailor context menus for PDF pages, annotations, and form fields in this sample.

    -
    -} -@section Description{ -
    -

    - This customization empowers users to add new context menus on PDF pages, annotations, and form fields. In this sample: -

    -
      -
    • Selecting text on pages reveals a custom context menu, enabling users to search for the selected text on Google.
    • -
    • Annotations and Form fields can be locked directly from the context menu.
    • -
    • Customization is achieved using the following APIs:
    • -
        -
      • Customize the context menu by selectively displaying custom options, hiding existing menu items, controlled by boolean parameters in the addCustomMenu() method.
      • -
      • Position custom menu items either above or below existing ones, adjusting boolean parameters in the addCustomMenu() method.
      • -
      • Tailor the visibility of custom menu items using the customContextMenuBeforeOpen event.
      • -
      • Implement specific functionalities for custom options through the customContextMenuSelect event.
      • -
      -
    -
    -
    -

    - More information on the PDF Viewer instantiation can be found in this - - documentation sectionopens in a new tab. -

    - -
    -} -@*custom code start*@ - - - -@*custom code end*@ -@section Title{ - ASP.NET MVC PDF Viewer Context Menu Example - Syncfusion Demos - } -@section Header{ -

    Example of Context Menu in ASP.NET MVC PDF Viewer Control

    - } - diff --git a/Views/PdfViewer/CustomToolbar.cshtml b/Views/PdfViewer/CustomToolbar.cshtml deleted file mode 100644 index fe2d39153..000000000 --- a/Views/PdfViewer/CustomToolbar.cshtml +++ /dev/null @@ -1,1040 +0,0 @@ -@{ - ViewData["Title"] = "PdfViewer"; - Layout = "~/Views/Shared/_Layout.cshtml"; -} -@{ - string serviceUrl = VirtualPathUtility.ToAbsolute("~/api/PdfViewer/"); - - string stampMenu = "#stampMenu"; - string SignatureToolbar = "#SignatureToolbar"; - string formFieldSignatureMenu = "#formFieldSignatureMenu"; - -} -@using Syncfusion.EJ2 -@using Syncfusion.EJ2.Navigations -@using Syncfusion.EJ2.PdfViewer - -@section ControlsSection{ -
    -
    - -
    - -
    - @Html.EJS().Switch("checked").Checked(true).Change("change").CssClass("buttonSwitch").Render() -
    - @Html.EJS().Toolbar("topToolbar").Height("56px").Items(new List { -new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-icons e-folder",TooltipText = "Open",Align=ItemAlign.Left,Click="openFile"}, -new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-icons e-save" ,TooltipText = "Save",Align=ItemAlign.Left,Click="saveClicked"}, -new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-icons e-chevron-left",TooltipText = "Previous Page",Align=ItemAlign.Center,Click="previousClicked",Id="previousPage"}, -new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-icons e-chevron-right", TooltipText = "Next Page",Align=ItemAlign.Center,Click="nextClicked",Id="nextPage"}, -new ToolbarItem {Template="
    " ,PrefixIcon = "e-pv-next-page-navigation-icon", TooltipText = "Page Number",Align=ItemAlign.Center}, -new ToolbarItem { Type = ItemType.Input, Template="
    of 0
    " , PrefixIcon = "e-pv-next-page-navigation-icon", TooltipText = "Page Number",Click="currentPageClicked",Align=ItemAlign.Center}, -new ToolbarItem {Type = ItemType.Separator , TooltipText="separator" ,Align=ItemAlign.Center}, -new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-icons e-mouse-pointer", TooltipText = "Text Selection Tool",Align=ItemAlign.Center,Click="textSelection"}, -new ToolbarItem{Type=ItemType.Button, PrefixIcon="e-icons e-pan", TooltipText="Pan Tool", Align=ItemAlign.Center,Click="panMode"}, -new ToolbarItem {Type = ItemType.Separator , TooltipText="separator" ,Align=ItemAlign.Center}, -new ToolbarItem{ Type= ItemType.Button ,PrefixIcon="e-icons e-annotation-edit", TooltipText="Edit Annotation",Align=ItemAlign.Center,Click="openEditAnnotation"}, -new ToolbarItem {Type = ItemType.Separator , TooltipText="separator" ,Align=ItemAlign.Center}, -new ToolbarItem{ Type= ItemType.Button ,PrefixIcon="e-icons e-split-vertical", TooltipText="Add and Edit Form Fields",Align=ItemAlign.Center,Click="addEditFormFields"}, -new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-icons e-search" ,TooltipText = "Search",Align=ItemAlign.Right,Click="findText"}, -new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-icons e-print" ,TooltipText = "Print",Align=ItemAlign.Right,Click="printClicked"}, -}).Render() -
    - @Html.EJS().Toolbar("editAnnotationToolbar").Height("50px").Items(new List - { - new ToolbarItem{Type= ItemType.Button,PrefixIcon="e-icons e-highlight-color",TooltipText="Highlight", Align=ItemAlign.Center,Click="highlight"}, - new ToolbarItem{Type=ItemType.Button,PrefixIcon="e-icons e-underline",TooltipText="UnderLine",Align=ItemAlign.Center,Click="underLine"}, - new ToolbarItem{Type=ItemType.Button,PrefixIcon="e-icons e-strikethrough",TooltipText="StrikeThrough",Align=ItemAlign.Center,Click="strikeThrough"}, - new ToolbarItem{Type=ItemType.Button,PrefixIcon="e-icons e-squiggly",TooltipText="Squiggly",Align=ItemAlign.Center,Click="squiggly"}, - new ToolbarItem {Type = ItemType.Separator , TooltipText="separator" ,Align=ItemAlign.Center}, - new ToolbarItem{Type=ItemType.Button,PrefixIcon="e-icons e-line",TooltipText="Add Line",Align=ItemAlign.Center,Click="addLine"}, - new ToolbarItem{Type=ItemType.Button,PrefixIcon="e-icons e-arrow-right-up",TooltipText="Add Arrow",Align=ItemAlign.Center,Click="addArrow"}, - new ToolbarItem{Type=ItemType.Button,PrefixIcon="e-icons e-rectangle",TooltipText="Add Rectangle",Align=ItemAlign.Center,Click="addRectangle"}, - new ToolbarItem{Type=ItemType.Button,PrefixIcon="e-icons e-circle",TooltipText="Add Circle",Align=ItemAlign.Center,Click="addCircle"}, - new ToolbarItem{Type=ItemType.Button,PrefixIcon="e-icons e-pentagon",TooltipText="Add Polygon",Align=ItemAlign.Center,Click="addPolygon"}, - new ToolbarItem {Type = ItemType.Separator , TooltipText="separator" ,Align=ItemAlign.Center}, - new ToolbarItem{Type=ItemType.Button,PrefixIcon="e-icons e-length",TooltipText="Calibrate Distance",Align=ItemAlign.Center,Click="distance"}, - new ToolbarItem{Type=ItemType.Button,PrefixIcon="e-icons e-perimeter",TooltipText="Calibrate Permiter ",Align=ItemAlign.Center,Click="perimeter"}, - new ToolbarItem{Type=ItemType.Button,PrefixIcon="e-icons e-area",TooltipText="Calibrate Area",Align=ItemAlign.Center,Click="area"}, - new ToolbarItem{Type=ItemType.Button,PrefixIcon="e-icons e-radius",TooltipText="Calibrate Radius",Align=ItemAlign.Center,Click="radius"}, - new ToolbarItem{Type=ItemType.Button,PrefixIcon="e-icons e-volume",TooltipText="Calibrate Volume",Align=ItemAlign.Center,Click="volume"}, - new ToolbarItem {Type = ItemType.Separator , TooltipText="separator" ,Align=ItemAlign.Center}, - new ToolbarItem{Type=ItemType.Button,PrefixIcon="e-icons e-text-annotation",TooltipText="Free Text",Align=ItemAlign.Center,Click="freeText"}, - new ToolbarItem {Type = ItemType.Separator , TooltipText="separator" ,Align=ItemAlign.Center}, - new ToolbarItem { Type = ItemType.Input, Template=@stampMenu, TooltipText = "Add Stamp",Align=ItemAlign.Center}, - new ToolbarItem {Type = ItemType.Separator , TooltipText="separator" ,Align=ItemAlign.Center}, - new ToolbarItem { Type = ItemType.Input, Template=@SignatureToolbar, TooltipText = "Add Signature",Align=ItemAlign.Center}, - new ToolbarItem {Type = ItemType.Separator , TooltipText="separator" ,Align=ItemAlign.Center}, - new ToolbarItem{Type=ItemType.Button,PrefixIcon="e-icons e-style", TooltipText="Ink",Align=ItemAlign.Center,Click="ink"}, - - - }).Render() -
    - -
    - @Html.EJS().Toolbar("formFieldToolbar").Height("50px").Items(new List { - new ToolbarItem {Type=ItemType.Button,PrefixIcon="e-icons e-text-form",TooltipText="TextBox",Align=ItemAlign.Center,Click="textBox"}, - new ToolbarItem {Type=ItemType.Button,PrefixIcon="e-icons e-password",TooltipText="Password",Align=ItemAlign.Center,Click="passWord"}, - new ToolbarItem {Type=ItemType.Button,PrefixIcon="e-icons e-check-box",TooltipText="CheckBox",Align=ItemAlign.Center,Click="checkBox"}, - new ToolbarItem {Type=ItemType.Button,PrefixIcon="e-icons e-radio-button",TooltipText="RadioButton",Align=ItemAlign.Center,Click="radioButton"}, - new ToolbarItem {Type=ItemType.Button,PrefixIcon="e-icons e-drop-down",TooltipText="Dropdown",Align=ItemAlign.Center,Click="dropDown"}, - new ToolbarItem {Type=ItemType.Button,PrefixIcon="e-icons e-list-unordered",TooltipText="ListBox",Align=ItemAlign.Center,Click="listBox"}, - new ToolbarItem { Type = ItemType.Input, Template=formFieldSignatureMenu, TooltipText = "Add Signature",Align=ItemAlign.Center}, - - }).Render() -
    - - - @Html.EJS().PdfViewer("pdfviewer").EnableToolbar(false).EnableNavigationToolbar(false).EnableThumbnail(false).DocumentLoad("documentLoaded").PageChange("pageChanged").DocumentPath("https://cdn.syncfusion.com/content/pdf/hive-succinctly.pdf").EnableAnnotationToolbar(false).EnableCommentPanel(false).ResourceUrl("https://cdn.syncfusion.com/ej2/23.2.6/dist/ej2-pdfviewer-lib").Render() - -
    - @Html.EJS().Toolbar("magnificationToolbar").Items(new List { -new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-pv-fit-page-icon", TooltipText = "Fit to page",Click="pageFitClicked"}, -new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-icons e-circle-add",TooltipText = "Zoom in",Click="zoomInClicked" }, -new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-icons e-circle-remove", TooltipText = "Zoom out",Click="zoomOutClicked"}, -}).Render() - @Html.EJS().Menu("stampMenu").Items(ViewData["menuItem"]).Select("onItemSelect").ShowItemOnClick(true).Render() - @Html.EJS().Menu("SignatureToolbar").Items(ViewData["signItem"]).Select("onSignatureClick").ShowItemOnClick(true).Render() - @Html.EJS().Menu("formFieldSignatureMenu").Items(ViewData["signItem"]).Select("onSignatureClick").ShowItemOnClick(true).Render() - -
    -
    -} - -@section Meta{ - -} - -@section ActionDescription{ -
    -

    This example illustrates the process of crafting a customized toolbar within the PDF Viewer, allowing you to incorporate specific tools tailored to your needs.

    -
    -} - -@section Description{ -
    -

    - - This sample demonstrate how to perform the PDF Viewer core functionalities using a custom toolbar.In this example, you can see PDF Viewer control API in action to perform the functionalities. -

    -

      -
    • Load document - viewer.load(fileName, password)
    • -
    • Save - viewer.download()
    • -
    • Go to Previous Page - viewer.navigation.goToPreviousPage()
    • -
    • Go to Next Page - viewer.navigation.goToNextPage()
    • -
    • Go to Page - viewer.navigation.goToPage(pageindex)
    • -
    • TextSelection - textSelection()
    • -
    • Pan - panMode()
    • -
    • Annotation Edit - openEditAnnotation()
    • -
    • FormFields Edit - addEditFormFields()
    • -
    • Search Text - viewer.textSearch.searchText(searchText,isMatchCase)
    • -
    • Search Next - viewer.textSearch.searchNext()
    • -
    • Search Previous - viewer.textSearch.searchPrevious()
    • -
    • Cancel Search Text - viewer.textSearch.cancelTextSearch()
    • -
    • Print - viewer.print.print()
    • -
    • Fit To Page - viewer.magnification.fitToPage()
    • -
    • Zoom In - viewer.magnification.zoomIn()
    • -
    • Zoom Out - viewer.magnification.zoomOut()
    • -
    - More information on the PDF Viewer instantiation can be found in this - - documentation section - opens in a new tab. -

    -
    -} -@*custom code start*@ - -@*custom code end*@ - -@section Title{ - ASP.NET MVC PDF Viewer Custom Toolbar Example - Syncfusion Demos -} -@section Header{ -

    Example of Custom Toolbar in ASP.NET MVC PDF Viewer Control

    -} diff --git a/Views/PdfViewer/Default.cshtml b/Views/PdfViewer/Default.cshtml deleted file mode 100644 index 8a71d9ed1..000000000 --- a/Views/PdfViewer/Default.cshtml +++ /dev/null @@ -1,120 +0,0 @@ -@using Syncfusion.EJ2 -@{ - ViewData["Title"] = "DefaultFunctionalities"; - Layout = "~/Views/Shared/_Layout.cshtml"; -} -@{ - string serviceUrl = VirtualPathUtility.ToAbsolute("~/api/PdfViewer/"); -} - -@section ControlsSection{ -
    -
    - -
    - -
    - @Html.EJS().Switch("checked").Checked(true).Change("change").CssClass("buttonSwitch").Render() -
    - @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ResourceUrl("https://cdn.syncfusion.com/ej2/23.2.6/dist/ej2-pdfviewer-lib").Render() -
    -} - -@section Meta{ - - } -@section ActionDescription{ -
    -

    This sample demonstrate the core features of PDF Viewer such as PDF viewing, printing, navigation, text search and selection, zooming, panning etc. with its built-in toolbar.

    -
    -} -@section Description{ -
    -

    - The PDF Viewer component enables you to view and print the PDF files. This sample demonstrate the following key features of PDF Viewer, -

    -
      -
    • View the PDF document
    • -
    • Core interactions - Scrolling, Zooming, panning and page navigation
    • -
    • Built-in toolbar
    • -
    • Select and copy text from PDF file
    • -
    • Search a text easily across the PDF document
    • -
    • Easy navigation with the help of Bookmarks, thumbnails, hyperlinks and table of contents
    • -
    • View modes - fit to page and fit to width
    • -
    • Print the entire document or a specific page directly from the browser.
    • -
    -
    -
    -

    - More information on the PDF Viewer instantiation can be found in this - - documentation sectionopens in a new tab. -

    - -
    -} -@*custom code start*@ - - -@*custom code end*@ -@section Title{ - ASP.NET MVC PDF Viewer Default Functionalities Example - Syncfusion Demos - } -@section Header{ -

    Example of Default Functionalities in ASP.NET MVC PDF Viewer Control

    - } - \ No newline at end of file diff --git a/Views/PdfViewer/DocumentList.cshtml b/Views/PdfViewer/DocumentList.cshtml deleted file mode 100644 index 8281507f8..000000000 --- a/Views/PdfViewer/DocumentList.cshtml +++ /dev/null @@ -1,415 +0,0 @@ -@using Syncfusion.EJ2.Popups -@using Syncfusion.EJ2 -@{ - ViewData["Title"] = "DocumentList"; - Layout = "~/Views/Shared/_Layout.cshtml"; -} -@{ - string serviceUrl = VirtualPathUtility.ToAbsolute("~/api/PdfViewer/"); -} - -@section ControlsSection{ -
    -
    - -
    - -
    - @Html.EJS().Switch("checked").Checked(true).Change("change").CssClass("buttonSwitch").Render() -
    - @{ - List commands = new List(); - commands.Add(new { buttonOption = new { cssClass = "e-icons e-eye e-flat" }, title = "View" }); - commands.Add(new { buttonOption = new { cssClass = "e-icons e-edit e-flat" }, title = "Edit" }); - - } - @(Html.EJS().Grid("Grid") - .DataSource((IEnumerable)ViewData["dataSource"]).RecordClick("recordClick") - .Columns(col => - { - col.Template("#filetemplate").HeaderText("File Name").Add(); - col.HeaderText("Author").Field("Author").Add(); - col.HeaderText("Actions").TextAlign(Syncfusion.EJ2.Grids.TextAlign.Center).Commands(commands).Add(); - }).Render() - ) - - @Html.EJS().Dialog("defaultDialog").Open("dialogOpen").Close("dialogClose").IsModal(true).ContentTemplate(@
    -
    - @Html.EJS().PdfViewer("pdfviewer").ResourceUrl("https://cdn.syncfusion.com/ej2/23.2.6/dist/ej2-pdfviewer-lib").DocumentLoad("documentLoaded").Height("745px").Render() -
    -
    ).ShowCloseIcon(true).CloseOnEscape(true).Created("created").Width("90%").Height("90%").Render() - -} - -@section PreScripts { - -} - - - - -@*custom code start*@ -@section Meta{ - -} -@*custom code end*@ -@section ActionDescription{ -
    -

    - This demonstration showcases the process of presenting a list of PDF documents in a grid layout and accessing the document for viewing or editing through the PDF Viewer within a dialog box. -

    -
    -} -@section Description{ -
    -

    - More information on adding annotation programmatically can be found in this - - documentation section - opens in a new tab. -

    -
    -} - - -@section Title{ - ASP.NET MVC PDF Viewer Document List Example - Syncfusion Demos -} -@section Header{ -

    Example of Document List in ASP.NET MVC PDF Viewer Control

    -} diff --git a/Views/PdfViewer/ESigningFormDesigner.cshtml b/Views/PdfViewer/ESigningFormDesigner.cshtml deleted file mode 100644 index 834d4c48a..000000000 --- a/Views/PdfViewer/ESigningFormDesigner.cshtml +++ /dev/null @@ -1,551 +0,0 @@ -@using Syncfusion.EJ2 -@{ - ViewData["Title"] = "ESigningFormDesigner"; - Layout = "~/Views/Shared/_Layout.cshtml"; -} -@using Syncfusion.EJ2 -@using Syncfusion.EJ2.DropDowns -@using Syncfusion.EJ2.Navigations -@{ - string dropdownMenu = "#e-pv-e-sign-dropdown-menu-mob"; -} - -@section ControlsSection { -
    -
    - @{ - List userDetails = new List - { - new { Name = "Andrew Fuller", Eimg = "profile2", Id = "ff0000", Mail = "andrew@mycompany.com", fieldIds = new List() }, - new { Name = "Anne Dodsworth", Eimg = "profile1", Id = "00ff00", Mail = "anne@mycompany.com", fieldIds = new List() } - }; - ViewData["userDetails"] = userDetails; - } -
    - @Html.EJS().DropDownList("e-pv-e-sign-employees-mob").DataSource((IEnumerable)ViewData["userDetails"]).PopupHeight("200px").Index(0).Fields(new DropDownListFieldSettings { Text = "Name", Value = "Id" }).ItemTemplate("
    employee
    ${Name}
    ${Mail}
    ").ValueTemplate("
    employee
    ${Name}
    ${Mail}
    ").Select("userChange").Render() - -
    - @Html.EJS().Toolbar("e-pv-e-sign-toolbar-section").Created("toolbarCreated").Height("50px").Items(new List { - new ToolbarItem { Type = ItemType.Input, Template=@dropdownMenu, TooltipText = "User Dropdown",Align=ItemAlign.Left}, - new ToolbarItem {Type=ItemType.Button,PrefixIcon="e-icons e-download",Id="e-pv-e-sign-download",TooltipText="Download",Text="Download",Align=ItemAlign.Right,Click="downloadFile"} - }).Render() -
    -
    - @{Html.EJS().Sidebar("sidebarObj").Width("200px").Position(Syncfusion.EJ2.Navigations.SidebarPosition.Left).EnableGestures(false).ContentTemplate(@
    -
    - Fields -
    -
    - @Html.EJS().DropDownList("e-pv-e-sign-employees").DataSource((IEnumerable)ViewData["userDetails"]).PopupHeight("200px").Index(0).Fields(new DropDownListFieldSettings { Text = "Name", Value = "Id" }).ItemTemplate("
    employee
    ${Name}
    ${Mail}
    ").ValueTemplate("
    employee
    ${Name}
    ${Mail}
    ").Select("userChange").Render() - -
    - @Html.EJS().Button("signature-btn").Content("Signature").CssClass("e-outline e-pv-e-sign-form-field-property").IconCss("e-icons e-signature").Click("signature").Render() - @Html.EJS().Button("initial-btn").Content("Initial").CssClass("e-outline e-pv-e-sign-form-field-property").IconCss("e-icons e-font-name").Click("initial").Render() -
    -
    - @Html.EJS().Button("textbox-btn").Content("Textbox").CssClass("e-outline e-pv-e-sign-form-field-property").IconCss("e-icons e-text-form").Render() - @Html.EJS().Button("password-btn").Content("Password").CssClass("e-outline e-pv-e-sign-form-field-property").IconCss("e-icons e-password").Click("password").Render() -
    -
    - @Html.EJS().Button("checkbox-btn").Content("Checkbox").CssClass("e-outline e-pv-e-sign-form-field-property").IconCss("e-icons e-check-box").Click("checkBox").Render() - @Html.EJS().Button("radio-btn").Content("Radio").CssClass("e-outline e-pv-e-sign-form-field-property").IconCss("e-icons e-radio-button").Click("radioButton").Render() -
    -
    - @Html.EJS().Button("dropdown-btn").Content("Dropdown").CssClass("e-outline e-pv-e-sign-form-field-property").IconCss("e-icons e-drop-down").Click("dropDown").Render() - @Html.EJS().Button("list-btn").Content("Listbox").CssClass("e-outline e-pv-e-sign-form-field-property").IconCss("e-icons e-list-unordered").Click("listBox").Render() -
    - ).HtmlAttributes(ViewData["HtmlAttributes"]).Render();} -
    - @Html.EJS().PdfViewer("pdfviewer").EnableToolbar(false).EnableNavigationToolbar(false).EnableAnnotationToolbar(false).DownloadFileName("eSign_designMode.pdf").ShowNotificationDialog(false).DocumentPath("https://cdn.syncfusion.com/content/PDFViewer/Fill+and+Sign.pdf").DocumentLoad("documentLoad").ResourceUrl("https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib").FormFieldAdd("addFormField").PageClick("pageClick").ToolbarSettings(ts => ts.ShowTooltip(true).ToolbarItems("OpenOption,PageNavigationTool,MagnificationTool,DownloadOption,PrintOption,FormDesignerEditTool")).Render() -
    -
    - @Html.EJS().Toolbar("e-pv-e-sign-toolbar-section-mob").Height("48px").OverflowMode(OverflowMode.Scrollable).Items(new List { - new ToolbarItem {Type=ItemType.Button,PrefixIcon="e-icons e-signature",Click="signature"}, - new ToolbarItem {Type=ItemType.Button,PrefixIcon="e-icons e-font-name",Click="initial"}, - new ToolbarItem {Type=ItemType.Button,PrefixIcon="e-icons e-text-form",Click="textBox"}, - new ToolbarItem {Type=ItemType.Button,PrefixIcon="e-icons e-password",Click="password"}, - new ToolbarItem {Type=ItemType.Button,PrefixIcon="e-icons e-check-box",Click="checkBox"}, - new ToolbarItem {Type=ItemType.Button,PrefixIcon="e-icons e-radio-button",Click="radioButton"}, - new ToolbarItem {Type=ItemType.Button,PrefixIcon="e-icons e-drop-down",Click="dropDown"}, - new ToolbarItem {Type=ItemType.Button,PrefixIcon="e-icons e-list-unordered",Click="listBox"}, - }).Render() -
    - - - -} - -@section Meta { - -} - -@section ActionDescription { -
    -

    - This sample enables the design of a PDF form that accommodates signatures from two different users. The form includes distinct fields for each user: when the first user is selected, specific fields can be added that apply only to that user. Upon switching the user via the dropdown menu, new fields can be added for the second user. The fields for each user are distinguishable by different background colors. -

    -
    -} - -@section Description { -
    -

    - More information on the PDF Viewer instantiation can be found in this - - documentation section - . - . -

    - -
    -} - - - - - - -@section Title { - ASP.NET MVC PDF Viewer eSigning Form Designer Example - Syncfusion Demos -} -@section Header { -

    Example of eSigning Form Designer in ASP.NET MVC PDF Viewer Control

    -} diff --git a/Views/PdfViewer/ESigningPdfForms.cshtml b/Views/PdfViewer/ESigningPdfForms.cshtml deleted file mode 100644 index e70db4a8c..000000000 --- a/Views/PdfViewer/ESigningPdfForms.cshtml +++ /dev/null @@ -1,429 +0,0 @@ -@using Syncfusion.EJ2 -@{ - ViewData["Title"] = "ESigningPdfForms"; - Layout = "~/Views/Shared/_Layout.cshtml"; -} -@using Syncfusion.EJ2 -@using Syncfusion.EJ2.DropDowns -@using Syncfusion.EJ2.Navigations -@using Syncfusion.EJ2.Popups -@{ - string url = VirtualPathUtility.ToAbsolute("~/api/PdfViewer/FlattenDownload"); -} -@{ - string dropdownMenu = "#e-pv-e-sign-dropdown-menu"; - string btntemplate = "#e-pv-e-sign-btn-template"; -} - -@section ControlsSection{ -
    - @{ - List userDetails = new List -{ - new { Name = "Andrew Fuller", Eimg = "profile2", Id = "ff0000", Mail = "andrew@mycompany.com", fieldIds = new List() }, - new { Name = "Anne Dodsworth", Eimg = "profile1", Id = "00ff00", Mail = "anne@mycompany.com", fieldIds = new List() } - }; - ViewData["userDetails"] = userDetails; - } -
    - @Html.EJS().DropDownList("e-pv-e-sign-employees").DataSource((IEnumerable)ViewData["userDetails"]).PopupHeight("200px").Index(0).Fields(new DropDownListFieldSettings { Text = "Name", Value = "Id" }).ItemTemplate("
    employee
    ${Name}
    ${Mail}
    ").ValueTemplate("
    ${Name}
    ${Mail}
    ").Select("userChange").Render() - -
    - @Html.EJS().Toolbar("e-pv-e-sign-toolbar-section").Height("50px").Items(new List { - new ToolbarItem { Type = ItemType.Input, Template=@dropdownMenu, TooltipText = "User Dropdown",Align=ItemAlign.Left}, - new ToolbarItem { Type = ItemType.Input, Template=@btntemplate, TooltipText = "Finish Signing",Align=ItemAlign.Right,Click="finishSigning"}, - }).Render() -
    - @Html.EJS().PdfViewer("pdfviewer").EnableToolbar(false).EnableAnnotationToolbar(false).EnableNavigationToolbar(false).DownloadFileName("eSign_designMode.pdf").ShowNotificationDialog(false).DocumentPath("https://cdn.syncfusion.com/content/pdf/eSign_filling.pdf").DocumentLoad("documentLoad").ResourceUrl("https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib").FormFieldPropertiesChange("fieldChange").Height("640px").ToolbarSettings(ts => ts.ShowTooltip(true).ToolbarItems("OpenOption,PageNavigationTool,MagnificationTool,DownloadOption,PrintOption,FormDesignerEditTool")).ZoomMode(Syncfusion.EJ2.PdfViewer.ZoomMode.FitToPage).Render() -
    - @Html.EJS().Dialog("modal_dialog").AnimationSettings(new DialogAnimationSettings() { Effect = DialogEffect.None }).IsModal(true).ContentTemplate(@
    Content
    ).CloseOnEscape(true).Width("335px").Created("modalCreated").Buttons((List)ViewData["ModalButton"]).Visible(false).Render() -
    -
    - @Html.EJS().Button("e-pv-e-sign-finishSigning").Content("Finish Signing").CssClass("e-outline").Render() -
    - -} - -@section Meta{ - -} -@section ActionDescription{ -
    -

    This sample demonstrates the creation of the supported Form fields in the PDF Viewer such as Textbox, Password, Checkbox, Radio Button, Drop Down, List box, Signature, and Initial. We can also customize these fields and can include new fields through the user interaction by switching to the designer mode.

    -
    -} -@section Description{ -
    -

    - More information on the PDF Viewer instantiation can be found on this - - documentation section - opens in a new tab - . -

    - -
    -} -@*custom code start*@ - -@*custom code end*@ - -@*custom code end*@ -@section Title{ - ASP.NET MVC PDF Viewer eSigning PDF Forms Example - Syncfusion Demos -} -@section Header{ -

    Example of eSigning PDF Forms in ASP.NET MVC PDF Viewer Control

    -} diff --git a/Views/PdfViewer/FormDesigner.cshtml b/Views/PdfViewer/FormDesigner.cshtml deleted file mode 100644 index b83f2a88a..000000000 --- a/Views/PdfViewer/FormDesigner.cshtml +++ /dev/null @@ -1,174 +0,0 @@ -@using Syncfusion.EJ2 -@{ - ViewData["Title"] = "FormDesigner"; - Layout = "~/Views/Shared/_Layout.cshtml"; -} -@{ - string serviceUrl = VirtualPathUtility.ToAbsolute("~/api/PdfViewer/"); -} - -@section ControlsSection{ -
    -
    - -
    - -
    - @Html.EJS().Switch("checked").Checked(true).Change("change").CssClass("buttonSwitch").Render() -
    - @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/form-designer.pdf").ResourceUrl("https://cdn.syncfusion.com/ej2/23.2.6/dist/ej2-pdfviewer-lib").DocumentLoad("documentLoad").DownloadEnd("documentLoad").ValidateFormFields("validateFormFields").EnableFormFieldsValidation(true).ShowNotificationDialog(false).Render() -
    -} - -@section Meta{ - - } -@section ActionDescription{ -
    -

    This sample demonstrates the creation of the supported Form fields in the PDF Viewer such as Textbox, Password, Checkbox, Radio Button, Drop Down, List box, Signature, and Initial. We can also customize these fields and can include new fields through the user interaction by switching to the designer mode.

    -
    -} -@section Description{ -
    -

    - More information on the PDF Viewer instantiation can be found on this - - documentation section - opens in a new tab. -

    - -
    -} -@*custom code start*@ - -@*custom code end*@ - -@*custom code end*@ -@section Title{ - ASP.NET MVC PDF Viewer Form Designer Example - Syncfusion Demos - } -@section Header{ -

    Example of Form Designer in ASP.NET MVC PDF Viewer Control

    - } - \ No newline at end of file diff --git a/Views/PdfViewer/FormFilling.cshtml b/Views/PdfViewer/FormFilling.cshtml deleted file mode 100644 index 7190e2bfd..000000000 --- a/Views/PdfViewer/FormFilling.cshtml +++ /dev/null @@ -1,165 +0,0 @@ -@using Syncfusion.EJ2 - -@{ - ViewData["Title"] = "Form Filling"; - Layout = "~/Views/Shared/_Layout.cshtml"; -} -@{ - string serviceUrl = VirtualPathUtility.ToAbsolute("~/api/PdfViewer/"); -} - -@section ControlsSection{ -
    -
    - -
    - -
    - @Html.EJS().Switch("checked").Checked(true).Change("change").CssClass("buttonSwitch").Render() -
    - @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/form-filling-document.pdf").ResourceUrl("https://cdn.syncfusion.com/ej2/23.2.6/dist/ej2-pdfviewer-lib").ValidateFormFields("validateFormFields").EnableFormFieldsValidation(true).ShowNotificationDialog(false).Render() -
    -} - -@section Meta{ - - } -@section ActionDescription{ -
    -

    This sample demonstrates the form filling features of PDF Viewer and allows you to edit the form fields, download and print the edited form fields PDF documents.

    -
    -} -@section Description{ -
    -

    - The PDF Viewer component enables you to view and print the PDF files. This sample demonstrate the following key features of PDF Viewer, -

    -
      -
    • View the PDF document
    • -
    • Core interactions - Scrolling, Zooming, panning and page navigation
    • -
    • Built-in toolbar
    • -
    • Select and copy text from PDF file
    • -
    • Search a text easily across the PDF document
    • -
    • Easy navigation with the help of Bookmarks, thumbnails, hyperlinks and table of contents
    • -
    • View modes - fit to page and fit to width
    • -
    • Print the entire document or a specific page directly from the browser.
    • -
    -
    -
    -

    - More information on the PDF Viewer instantiation can be found in this - - documentation section - opens in a new tab. -

    - -
    -} -@*custom code start*@ - -@*custom code end*@ - -@*custom code end*@ - -@section Title{ - ASP.NET MVC PDF Viewer Form Filling Example - Syncfusion Demos - } -@section Header{ -

    Example of Form Filling in ASP.NET MVC PDF Viewer Control

    - } - \ No newline at end of file diff --git a/Views/PdfViewer/HandwrittenSignature.cshtml b/Views/PdfViewer/HandwrittenSignature.cshtml deleted file mode 100644 index a1cbc3d0e..000000000 --- a/Views/PdfViewer/HandwrittenSignature.cshtml +++ /dev/null @@ -1,119 +0,0 @@ -@using Syncfusion.EJ2 -@{ - ViewData["Title"] = "HandwrittenSignature"; -} -@{ - string serviceUrl = VirtualPathUtility.ToAbsolute("~/api/PdfViewer/"); -} - -@section ControlsSection{ -
    -
    - -
    - -
    - @Html.EJS().Switch("checked").Checked(true).Change("change").CssClass("buttonSwitch").Render() -
    - @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/handwritten-signature.pdf").ResourceUrl("https://cdn.syncfusion.com/ej2/23.2.6/dist/ej2-pdfviewer-lib").DocumentLoad("documentLoad").Render() -
    -} - -@section Meta{ - - } -@section ActionDescription{ -
    -

    This sample demonstrates the Handwritten signature and initial support of the PDF Viewer. The signature or initial support reduces the paperwork of reviewing the contents and it is verified digitally.

    -
    -} -@section Description{ -
    -

    - In the PDF Viewer component, we can explicitly open the Handwritten signature dialog or initial dialog using the method setAnnotationMode. -

    -
    -
    -

    - More information on the PDF Viewer instantiation can be found on this - - documentation section - opens in a new tab. -

    - -
    -} -@*custom code start*@ - -@*custom code end*@ - -@*custom code end*@ - -@section Title{ - ASP.NET MVC PDF Viewer Handwritten Signature Example - Syncfusion Demos - } -@section Header{ -

    Example of Handwritten Signature in ASP.NET MVC PDF Viewer Control

    - } \ No newline at end of file diff --git a/Views/PdfViewer/InvisibleDigitalSignature.cshtml b/Views/PdfViewer/InvisibleDigitalSignature.cshtml deleted file mode 100644 index 8735ac876..000000000 --- a/Views/PdfViewer/InvisibleDigitalSignature.cshtml +++ /dev/null @@ -1,263 +0,0 @@ -@using Syncfusion.EJ2 -@using Syncfusion.EJ2.Navigations -@using Syncfusion.EJ2.PdfViewer -@using Syncfusion.EJ2.Notifications; -@{ - ViewData["Title"] = "InvisibleDigitalSignature"; -} -@{ - string resourceUrl = "https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib"; - string addSignatureUrl = VirtualPathUtility.ToAbsolute("~/api/PdfViewer/AddSignature"); - string validateSignatureUrl = VirtualPathUtility.ToAbsolute("~/api/PdfViewer/ValidateSignature"); -} -@section ControlsSection{ -
    - @Html.EJS().Toolbar("topToolbar").Height("56px").Items(new List - { - new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-pv-open-document-icon",TooltipText = "Open",Align=ItemAlign.Left,Click="openDocument"}, - new ToolbarItem { Type = ItemType.Button, Text="Complete Signing", Width="150px", TooltipText="Finish Signing", Id="pdfviewer_sign",Align=ItemAlign.Right,Click="signDocument", Disabled=true}, - new ToolbarItem { Type = ItemType.Button, PrefixIcon="e-btn-icon e-pv-download-document-icon e-icons", TooltipText="Download", Id="downloadButton",Align=ItemAlign.Right,Click="downloadClicked"}, - }).Render() - @Html.EJS().Message("msg_success").Severity(Severity.Success).Visible(false).Render() - @Html.EJS().Message("msg_warning").Severity(Severity.Warning).Visible(false).Render() - @Html.EJS().Message("msg_error").Severity(Severity.Error).Visible(false).Render() - @Html.EJS().PdfViewer("pdfviewer").EnableToolbar(false).EnableNavigationToolbar(false).EnableThumbnail(false).EnableAnnotationToolbar(false).EnableTextSelection(false).EnableBookmark(false).ResourceUrl(resourceUrl).DocumentPath("https://cdn.syncfusion.com/content/pdf/InvisibleDigitalSignature.pdf").DocumentLoad("documentLoaded").AddSignature("addSignature").Render() - -
    -} - -@section Meta{ - -} -@section ActionDescription{ -
    -

    This sample demonstrates how to digitally sign a PDF document from code behind using Syncfusion's PDF Viewer and PDF Library

    -
    -} -@section Description{ - -
    -

    - This sample operates correctly when a signature field is present in the PDF document. If all signature fields - are signed, the "Finish Signing" button becomes enabled. Clicking this button adds a digital signature - certificate programmatically and reloads the digitally signed document into the viewer. -

    - -
    - -

    The below are the messages shown in the respective scenarios:

    - -
    - -

    1. The document has been digitally signed, but it has been modified since it was signed and at least one - signature is invalid.

    -
      -
    • This message appears if the digitally signed document is edited after reloading.
    • -
    - -

    2. The document has been digitally signed and at least one signature has a problem.

    - -
      -
    • This message is shown if the digital signature is not registered on the machine and is not in the trusted - list. Adding the certificate to the trusted list is necessary.
    • -
    - -

    3. The document has been digitally signed and all the signatures are valid.

    - -
      -
    • This message indicates that the document is digitally signed without any issues.
    • -
    - -

    - More information on the PDF Viewer instantiation can be found on this - - documentation section opens in a new tab. -

    - -
    -} - -@*custom code start*@ - -@*custom code end*@ - -@*custom code end*@ -@section Title{ - ASP.NET MVC PDF Viewer Invisible Digital Signature Example - Syncfusion Demos -} -@section Header{ -

    Example of Invisible Digital Signature in ASP.NET MVC PDF Viewer Control

    -} \ No newline at end of file diff --git a/Views/PdfViewer/InvisibleSignature.cshtml b/Views/PdfViewer/InvisibleSignature.cshtml deleted file mode 100644 index 9ecb2554a..000000000 --- a/Views/PdfViewer/InvisibleSignature.cshtml +++ /dev/null @@ -1,263 +0,0 @@ -@using Syncfusion.EJ2 -@using Syncfusion.EJ2.Navigations -@using Syncfusion.EJ2.PdfViewer -@using Syncfusion.EJ2.Notifications; -@{ - ViewData["Title"] = "InvisibleSignature"; -} -@{ - string resourceUrl = "https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib"; - string addSignatureUrl = VirtualPathUtility.ToAbsolute("~/api/PdfViewer/AddSignature"); - string validateSignatureUrl = VirtualPathUtility.ToAbsolute("~/api/PdfViewer/ValidateSignature"); -} -@section ControlsSection{ -
    - @Html.EJS().Toolbar("topToolbar").Height("56px").Items(new List - { - new ToolbarItem { Type = ItemType.Button, PrefixIcon = "e-pv-open-document-icon",TooltipText = "Open",Align=ItemAlign.Left,Click="openDocument"}, - new ToolbarItem { Type = ItemType.Button, Text="Complete Signing", Width="150px", TooltipText="Finish Signing", Id="pdfviewer_sign",Align=ItemAlign.Right,Click="signDocument", Disabled=true}, - new ToolbarItem { Type = ItemType.Button, PrefixIcon="e-btn-icon e-pv-download-document-icon e-icons", TooltipText="Download", Id="downloadButton",Align=ItemAlign.Right,Click="downloadClicked"}, - }).Render() - @Html.EJS().Message("msg_success").Severity(Severity.Success).Visible(false).Render() - @Html.EJS().Message("msg_warning").Severity(Severity.Warning).Visible(false).Render() - @Html.EJS().Message("msg_error").Severity(Severity.Error).Visible(false).Render() - @Html.EJS().PdfViewer("pdfviewer").EnableToolbar(false).EnableNavigationToolbar(false).EnableThumbnail(false).EnableAnnotationToolbar(false).EnableTextSelection(false).EnableBookmark(false).ResourceUrl(resourceUrl).DocumentPath("https://cdn.syncfusion.com/content/pdf/InvisibleDigitalSignature.pdf").DocumentLoad("documentLoaded").AddSignature("addSignature").Render() - -
    -} - -@section Meta{ - -} -@section ActionDescription{ -
    -

    This sample demonstrates how to digitally sign a PDF document from code behind using Syncfusion's PDF Viewer and PDF Library

    -
    -} -@section Description{ - -
    -

    - This sample operates correctly when a signature field is present in the PDF document. If all signature fields - are signed, the "Finish Signing" button becomes enabled. Clicking this button adds a digital signature - certificate programmatically and reloads the digitally signed document into the viewer. -

    - -
    - -

    The below are the messages shown in the respective scenarios:

    - -
    - -

    1. The document has been digitally signed, but it has been modified since it was signed and at least one - signature is invalid.

    -
      -
    • This message appears if the digitally signed document is edited after reloading.
    • -
    - -

    2. The document has been digitally signed and at least one signature has a problem.

    - -
      -
    • This message is shown if the digital signature is not registered on the machine and is not in the trusted - list. Adding the certificate to the trusted list is necessary.
    • -
    - -

    3. The document has been digitally signed and all the signatures are valid.

    - -
      -
    • This message indicates that the document is digitally signed without any issues.
    • -
    - -

    - More information on the PDF Viewer instantiation can be found on this - - documentation section opens in a new tab. -

    - -
    -} - -@*custom code start*@ - -@*custom code end*@ - -@*custom code end*@ -@section Title{ - ASP.NET MVC PDF Viewer Invisible Signature Example - Syncfusion Demos -} -@section Header{ -

    Example of Invisible Signature in ASP.NET MVC PDF Viewer Control

    -} \ No newline at end of file diff --git a/Views/PdfViewer/MultiFormatViewer.cshtml b/Views/PdfViewer/MultiFormatViewer.cshtml deleted file mode 100644 index 6d7ff08b0..000000000 --- a/Views/PdfViewer/MultiFormatViewer.cshtml +++ /dev/null @@ -1,365 +0,0 @@ -@using Syncfusion.EJ2 -@{ - ViewData["Title"] = "MultiFormatViewer"; - Layout = "~/Views/Shared/_Layout.cshtml"; -} -@{ - string serviceUrl = VirtualPathUtility.ToAbsolute("~/api/PdfViewer/"); - string Url = VirtualPathUtility.ToAbsolute("~/api/PdfViewer/LoadFile"); -} -@section ControlsSection{ -
    -
    -
    - @Html.EJS().Button("browse").Content("Browse...").Click("browseClick").Render() -
    -

    OR

    - Drop files (Word, Excel, PowerPoint, Image, PDF) -
    -
    -
    -
    -

    -

    -
    - - - - -
    -
    - @Html.EJS().Uploader("fileUpload").Selected("onSelect").Multiple(false).DropArea("#dropArea").AllowedExtensions(".doc, .docx, .rtf, .docm, .dotm, .dotx, .dot, .xls, .xlsx, .pptx, .pptm, .potx, .potm .jpeg, .png, .bmp, .pdf, .jpg").Render() -
    -
    - -
    -} -@section Meta{ - -} -@section ActionDescription{ -
    -

    This sample shows how it loads various file types like PDFs, images, and Microsoft Office documents (Word, Excel, PowerPoint) into the PDF Viewer.

    -
    -} -@section Description{ -
    -

    - This sample provides a hands-on demonstration of the PDF Viewer's ability to load and display a diverse range of file formats, including PDFs, images, and Microsoft Office documents such as Word, Excel, and PowerPoint files. Users can interact with the sample in the following ways: -

    -
      -
    • Use the Browse button to select any file of interest.
    • -
    • Alternatively, drag and drop a chosen file into the designated file pick area.
    • -
    • Once a valid file is selected, it will be seamlessly loaded into the PDF Viewer located below, allowing users to easily view and interact with the content.
    • -
    • Support for various file formats, including:
    • -
        -
      • PDF - '.pdf'
      • -
      • Excel - '.xlsx','.xls'
      • -
      • Image - '.jpeg','.jpg','.png','.bmp'
      • -
      • PowerPoint - '.pptx','.pptm','.potx','.potm'
      • -
      • Word - '.doc','.docx','dot','dotx','docm','dotm','rtf'
      • -
      -
    -

    Note : The PDF conversions are performed using the appropriate libraries, while the role of the PDF Viewer is solely to display the converted PDF document.

    -
    -
    -

    - More information on the PDF Viewer instantiation can be found in this - - documentation section - opens in a new tab. -

    -
    -} -@section PreScripts { - -} -@*custom code start*@ - -@*custom code end*@ -@section Title{ - ASP.NET MVC PDF Viewer Multi-Format Viewer Example - Syncfusion Demos -} -@section Header{ -

    Example of Multi-Format Viewer in ASP.NET MVC PDF Viewer Control

    -} diff --git a/Views/PdfViewer/OrganizePages.cshtml b/Views/PdfViewer/OrganizePages.cshtml deleted file mode 100644 index fda308d1b..000000000 --- a/Views/PdfViewer/OrganizePages.cshtml +++ /dev/null @@ -1,134 +0,0 @@ -@using Syncfusion.EJ2 -@{ - ViewData["Title"] = "OrganizePages"; - Layout = "~/Views/Shared/_Layout.cshtml"; -} -@{ - string serviceUrl = VirtualPathUtility.ToAbsolute("~/api/PdfViewer/"); - object pageOrganizerSettings = new { showImageZoomingSlider = true }; -} - -@section ControlsSection{ -
    -
    - -
    - -
    - @Html.EJS().Switch("checked").Checked(true).Change("change").CssClass("buttonSwitch").Render() -
    - @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf").ResourceUrl("https://cdn.syncfusion.com/ej2/23.2.6/dist/ej2-pdfviewer-lib").DocumentLoad("documentLoad").PageOrganizerSettings(pageOrganizerSettings).Render() -
    -} - -@section Meta{ - - } -@section ActionDescription{ -
    -

    This sample showcases the page organization features of the PDF Viewer component, allowing users to effortlessly insert, delete, rearrange, copy, import, undo, redo, and rotate pages. Additionally, users can select all pages for collective adjustments and save changes instantly or download the edited document.

    -
    -} -@section Description{ -
    -

    - Explore the comprehensive page organization capabilities of the PDF Viewer component through this sample. Users can seamlessly manage the PDF documents with the following functionalities: -

    -
      -
    • Add new pages to the document to integrate additional content seamlessly.
    • -
    • Remove unnecessary pages with ease, streamlining document management.
    • -
    • Resolve orientation issues by rotating pages clockwise right or counterclockwise left as required.
    • -
    • Conveniently select all pages for uniform adjustments and modifications.
    • -
    • Rearrange pages by dragging and dropping selected pages to the desired position.
    • -
    • Copy pages by selecting the thumbnails and using the copy option; duplicates are added next to the selected pages.
    • -
    • Click the "Import Documents" icon in the toolbar to import a document. If any thumbnail is selected, the new document will be imported next to it; otherwise, it will be imported as the first thumbnail.
    • -
    • Undo and redo actions are available at the organize pages dialog.
    • -
    • Enjoy real-time updates as any changes made to the page organization are instantly reflected within the PDF Viewer, when you click on the Save button.
    • -
    • Utilize the Save As feature to preserve edits, enabling users to download the modified version of the PDF document for future reference.
    • -
    • Zoom in or out of page images using the slider opened through the page zoom icon available in the toolbar or using keyboard accessibility.
    • -
    -
    -

    - More information on the PDF Viewer instantiation can be found in this - - documentation sectionopens in a new tab. -

    - -
    -} -@*custom code start*@ - - -@*custom code end*@ -@section Title{ - ASP.NET MVC PDF Viewer Organize Pages Example - Syncfusion Demos - } -@section Header{ -

    Example of Organize Pages in ASP.NET MVC PDF Viewer Control

    - } - diff --git a/Views/PdfViewer/ProgrammaticOperations.cshtml b/Views/PdfViewer/ProgrammaticOperations.cshtml deleted file mode 100644 index 1a559a908..000000000 --- a/Views/PdfViewer/ProgrammaticOperations.cshtml +++ /dev/null @@ -1,2662 +0,0 @@ -@using Syncfusion.EJ2 -@using Syncfusion.EJ2.DropDowns -@using EJ2MVCSampleBrowser.Models -@using Syncfusion.EJ2.Inputs -@{ - ViewBag.Title = "ProgrammaticOperations"; - Layout = "~/Views/Shared/_Layout.cshtml"; -} - -@{ - string serviceUrl = VirtualPathUtility.ToAbsolute("~/api/PdfViewer/"); - string syncfusionLogo = "data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAMwAAADJCAMAAABYMS1zAAAAllBMVEX///8rNXz2kh7b3OXQ0d8jLnlMU4wfK3hYXpH5+fvz8/bv7/SRlbYAAGyLj7GMkLBGToqdoLt4fKS1t8vIydoAGHEXJXUMHnP1hAD1jAD9483+9u7707L4sXSDh6s0PoL3oE76xpr4qV/97d/5vov96NYADW/2m0b7zaX2mTv4t3v5uYT83cL4rms+R4YAAGX2kjBubpsmc7m7AAAEKUlEQVR4nO3c6VbiQBAF4Dai7AiikCbIjuyK7/9ykziTCJLuVLUcu5O5938d8x2kUr0chEAQBEEQpBgJbD/A9RLMVnPbz3C1LHw5Gdh+iCtl7Xue3AxtP8ZVMpReGOlNC/DF2Xt/I+U295rlRHoxZ5ZzzXyWWELNZGn7eX6SYHdiidrA3vYT/SBT3zuPXNt+JOOsv1tCzSKnX5y9vLB4nr/N5TQw8NIwnjzksA3MV6mWqKnlrg0EM4UlmgbyNtu8KC2fs43tx2NlobFEnDzNNmst5bMN5EYzzLKEmlVOmtpgo/8n+/fFyUVTW6ob2ZlG5qCpBbpGdhbf/QXbjmoJNTvHZ5sp3ZI521S7oxY93biqwSga3Wr+/ppjyZptaq3XMjm9Rox569Or3p/Ufz51UtZqdPs2tYf+DTl3CaZdplc11Zj5kWnxtAs2q5hANSlr4+9UTc0mRjMp6zWqfRubmK2ZJdRs0lu0RQyrKX/TTBzDEKZLVeQxfWPdGoY0XSosqpnTFka55KdgVK8aSxizpvzPolxEW8LMLvf7qPHVS2hrn4ypRreAttYADF8y2qMBe615aoTRHgxYfGkOjwYfjnbpbHOc2U/YCwD9EYfVqZm4lZHE32ktttczW05T818yNjTsYkRwcVim+R+bZG1nWMakHpcpLJvMPU3rGLGXtC+OzL6CYh8jlqT5mbKf6QDm/PRfFcq5swsYEewyLaRTZycwYVPLOGyiHc+4gYkW0bpzwMym7BZG7DUaSdwvdwYTzjaqN45PvRfoDkbMD+kan3zI5BBGBIs0jU8/N3cJk3rqLDMmZXcxlws21pm5Y5jvCzY54xz8uYYRy8PpzcbsSdlpjAhO9m2OvLN/9zDRbBNzmLcaHcQks41cMOucxIh91NTkjFvmJkYMVlJKdpWjmOi8k3+3xFWMCAxuljiLMUmxMKP3Z3JeWzFm3KRX6a6bXDfVpw4jyWNxihq6i0BX1rBiVPVrFgRBkIKkVmekZlSV9OaAEwNLtfvxSE9ye7bFKPpIXpovjBxMBs1Ws0dOPxln3p7pVV/jjGSEvCd7ivnNQZNzUA4MMMAAAwwwwAADDDDAAAMMMMAAAwwwwAADDDDAAAMMMMAAAwwwwPzvmOcCYVoFwlRLXUZKcRmnqJtcBBoysnb+lxkRBEEQSuq3jNTjKk6RYVUt/Xl1qXbuK/R04qpHRlE7mQAYRZV2SfHEmtQajN+e7T/GmArnt2fjC8TipnedX6xVYxhTc3mUYIxms/GdSRUHwxg0gQEGGGCAAQYYYIABBhhggAEGGGCAAQYYYIABBhhggAEGGGCAAaaImELdA3i9I6f3henTq5pfNzTK9CqjGxqdt3ty2g8x5qNNrxonmAq96H5sgBH1EiPJPdhbTlVyq4lTVDK41YQgCIIgCIIgSFr+AKg+KPUzaG6DAAAAAElFTkSuQmCC"; -} - -@section ControlsSection{ -
    -
    -
    -
    - -
    - -
    -
    - @Html.EJS().Switch("checked").Checked(true).Change("change").CssClass("buttonSwitch").Render() -
    -
    - @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/annotations-v3.pdf").ResourceUrl("https://cdn.syncfusion.com/ej2/23.2.6/dist/ej2-pdfviewer-lib").DocumentLoad("documentLoaded").AnnotationSelect("AnnotationSelectedEvent").AnnotationUnSelect("AnnotationUnSelectedEvent").AnnotationResize("UpdateAnnotationPropertiesToPanel").AnnotationMove("UpdateAnnotationPropertiesToPanel").AnnotationRemove("AnnotationUnSelectedEvent").EnableAnnotationToolbar(false).ToolbarSettings(new Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings { ShowTooltip = true, ToolbarItems = new List { "OpenOption", "UndoRedoTool", "PageNavigationTool", "MagnificationTool", "PanTool", "SelectionTool", "CommentTool", "SubmitForm", "FormDesignerEditTool", "FreeTextAnnotationOption", "InkAnnotationOption", "ShapeAnnotationOption", "StampAnnotation", "SignatureOption", "SearchOption", "PrintOption", "DownloadOption" }, FormDesignerToolbarItems = new List { "TextboxTool", "PasswordTool", "CheckBoxTool", "RadioButtonTool", "DropdownTool", "ListboxTool", "DrawSignatureTool", "DeleteTool"} }).Render() -
    -
    - -
    -
    - Properties - -
    - -
    -
    -
    Annotation Type
    -
    - @Html.EJS().DropDownList("annotations").PopupHeight("220px").Index(2).Change("onAnnotationChange").Created("function(args) { onElementCreated('annotations', 'annotationType'); } ").DataSource( - (IEnumerable)ViewBag.annotationData).Fields(new DropDownListFieldSettings { Text = "Text", Value = "ID" }).Render() -
    - - -
    Page Number
    -
    - @Html.EJS().NumericTextBox("pageNumber").Min(1).Format("n0").Change("function(args) { onPropertiesValueChanges('pageNumber',args); }").Created("function(args) { onElementCreated('pageNumber', 'pageNumber'); } ").Render() -
    -
    Settings:
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - X Position -
    - @Html.EJS().NumericTextBox("x-position").Format("###.##").Min(0).Change("function(args) { onPropertiesValueChanges('x',args); }").Created("function(args) { onElementCreated('x-position', 'x'); } ").ShowSpinButton(false).Render() -
    -
    -
    -
    - Y Position -
    - @Html.EJS().NumericTextBox("y-position").Format("###.##").Min(0).Change("function(args) { onPropertiesValueChanges('y',args); }").Created("function(args) { onElementCreated('y-position', 'y'); } ").ShowSpinButton(false).Render() -
    -
    -
    -
    - Width -
    - @Html.EJS().NumericTextBox("width").Min(0).Format("###.##").Change("function(args) { onPropertiesValueChanges('width',args); }").Created("function(args) { onElementCreated('width', 'width'); } ").ShowSpinButton(false).Render() -
    -
    -
    -
    - Height -
    - @Html.EJS().NumericTextBox("height").Min(0).Format("###.##").Change("function(args) { onPropertiesValueChanges('height',args); }").Created("function(args) { onElementCreated('height', 'height'); } ").ShowSpinButton(false).Render() -
    -
    -
    -
    - Shape Opacity -
    - @Html.EJS().NumericTextBox("shape").Min(0).Max(100).Change("function(args) { onPropertiesValueChanges('opacity',args); }").Created("function(args) { onElementCreated('shape', 'opacity'); } ").Format("###.##").ShowSpinButton(false).Render() -
    -
    -
    -
    - Fill Color -
    - @Html.EJS().ColorPicker("fill-color").Mode(Syncfusion.EJ2.Inputs.ColorPickerMode.Palette).Change("function(args) { onPropertiesValueChanges('fillColor',args); }").Created("function(args) { onElementCreated('fill-color', 'fillColor'); } ").Render() - -
    - -
    -
    -
    - Stroke Thickness -
    - @Html.EJS().NumericTextBox("Stroke").Min(1).Max(12).Format("###.##").Change("function(args) { onPropertiesValueChanges('thickness',args); }").Created("function(args) { onElementCreated('Stroke', 'thickness'); } ").ShowSpinButton(false).Render() -
    -
    -
    -
    - Stroke Color -
    - @Html.EJS().ColorPicker("stroke-color").Change("function(args) { onPropertiesValueChanges('strokeColor',args); }").Created("function(args) { onElementCreated('stroke-color', 'strokeColor'); } ").Mode(Syncfusion.EJ2.Inputs.ColorPickerMode.Palette).Render() -
    -
    -
    -
    - -
    -
    - - -
    - -
    -
    - -
    -
    - - - -
    - - - - - - - - - -
    - @Html.EJS().CheckBox("printChecked").Checked(true).Change("function(args) { onPropertiesValueChanges('isPrint',args); }").Created("function(args) { onElementCreated('printChecked', 'isPrint'); } ").Render() - Print Annotation
    - @Html.EJS().CheckBox("lockChecked").Checked(false).Change("onLockCheckedChange").Created("function(args) { onElementCreated('lockChecked', 'isLocked'); } ").Render() - Lock Annotation
    -
    - -
    Add Comments
    -
    Author
    -
    - @Html.EJS().TextBox("author").CssClass("e-outline").Change("function(args) { onPropertiesValueChanges('author',args); }").Created("function(args) { onElementCreated('author', 'author'); } ").Render() -
    -
    Content
    -
    - @Html.EJS().TextBox("comments").CssClass("e-outline").Placeholder("New Comment").Change("function(args) { onPropertiesValueChanges('comment',args); }").Created("function(args) { onElementCreated('comments', 'comment'); } ").Focus("onCommentFocus").Blur("onCommentBlur").Render() -
    -
    Status
    -
    - @Html.EJS().DropDownList("status").PopupHeight("220px").Index(2).DataSource( - (IEnumerable)ViewBag.commentStatus).Fields(new DropDownListFieldSettings { Text = "Text", Value = "ID" }).Change("function(args) { onPropertiesValueChanges('state',args); }").Created("function(args) { onElementCreated('status', 'state'); } ").Render() -
    -
    - - - - - -
    - @Html.EJS().CheckBox("replyChecked").Change("onReplyCheckedChange").Created("function(args) { onElementCreated('replyChecked', 'isReply'); } ").Checked(false).Render() - Reply
    -
    -
    -
    -
    - -
    - -
    - -
    -
    - -} - -@section Meta{ - -} - -@section ActionDescription{ -
    -

    - This sample demonstrates the creation of various types of annotations in the PDF viewer, including text markup, shapes, measurements, free text, stamps, handwritten signatures, ink, and sticky notes. Additionally, we can customize existing annotations or add new annotations programmatically in the PDF viewer using the provided options. -

    -
    -} - -@section Description{ -
    -

    The PDF Viewer component allows the process of programmatically adding or modifying annotations within a PDF document. With the ability to programmatically add any type of annotation using the AnnotationAdd API and edit existing annotations using the editAnnotation API, users can seamlessly enhance their PDF viewing experience.

    -
    -

    The creation of an annotation when clicking the 'Add annotation' button is depending upon the selected properties from the Property panel. To update an existing annotation, users can select the desired annotation, modify its properties, and then click the 'Update' button.

    -
    -

    We can programmatically add or update the following types of the annotation in the pdf viewer

    - -
    -
    -

    - More information on the PDF Viewer instantiation can be found in this - - documentation section - . - -

    - -
    -} - - - - - - -@section Title{ - ASP.NET MVC PDF Viewer Programmatic Operations Example - Syncfusion Demos -} -@section Header{ -

    Example of Programmatic Operations in ASP.NET MVC PDF Viewer Control

    -} diff --git a/Views/PdfViewer/ReadOnly.cshtml b/Views/PdfViewer/ReadOnly.cshtml deleted file mode 100644 index 7f0d032ee..000000000 --- a/Views/PdfViewer/ReadOnly.cshtml +++ /dev/null @@ -1,127 +0,0 @@ -@using Syncfusion.EJ2 -@using Syncfusion.EJ2.PdfViewer -@{ - ViewData["Title"] = "ReadOnly"; - Layout = "~/Views/Shared/_Layout.cshtml"; -} -@{ - string serviceUrl = VirtualPathUtility.ToAbsolute("~/api/PdfViewer/"); -} -@{ - PdfViewerAnnotationSettings annotationSettings = new PdfViewerAnnotationSettings() - { - IsLock = true - }; - - -} - -@section ControlsSection{ -
    -
    - -
    - -
    - @Html.EJS().Switch("checked").Checked(true).Change("change").CssClass("buttonSwitch").Render() -
    - @Html.EJS().PdfViewer("pdfviewer").DocumentPath("https://cdn.syncfusion.com/content/pdf/restricted-formfield.pdf").ResourceUrl("https://cdn.syncfusion.com/ej2/23.2.6/dist/ej2-pdfviewer-lib").EnableStickyNotesAnnotation(false).DocumentLoad("documentLoad").AnnotationSettings(annotationSettings).ToolbarSettings(new Syncfusion.EJ2.PdfViewer.PdfViewerToolbarSettings { ShowTooltip = true, ToolbarItems = "OpenOption PanTool PageNavigationTool MagnificationTool PrintOption" }).Render() -
    -} - -@section Meta{ - -} -@section ActionDescription{ -
    -

    The sample showcases the PDF viewer operating in a read-only mode, which restricts the ability to make changes to annotations, form fields, and also disables text selection.

    -
    -} -@section Description{ -
    -

    - More information on the PDF Viewer instantiation can be found in this - - documentation section - opens in a new tab. -

    - -
    -} -@*custom code start*@ - - -@*custom code end*@ -@section Title{ - ASP.NET MVC PDF Viewer Read-Only Example - Syncfusion Demos -} -@section Header{ -

    Example of Read-Only in ASP.NET MVC PDF Viewer Control

    -} diff --git a/Views/PdfViewer/Redaction.cshtml b/Views/PdfViewer/Redaction.cshtml deleted file mode 100644 index 63f620e73..000000000 --- a/Views/PdfViewer/Redaction.cshtml +++ /dev/null @@ -1,652 +0,0 @@ -@using Syncfusion.EJ2 -@using Syncfusion.EJ2.Navigations - -@{ - ViewData["Title"] = "Redaction"; - Layout = "~/Views/Shared/_Layout.cshtml"; -} -@{ - -} -@{ - string resourceUrl = "https://cdn.syncfusion.com/ej2/27.2.2/dist/ej2-pdfviewer-lib"; - string url = VirtualPathUtility.ToAbsolute("~/api/PdfViewer/Redaction"); -} - -@section ControlsSection{ - @{ - var asyncSettings = new Syncfusion.EJ2.Inputs.UploaderAsyncSettings { SaveUrl = "https://ej2services.syncfusion.com/production/web-services/api/FileUploader/Save", RemoveUrl = "https://ej2services.syncfusion.com/production/web-services/api/FileUploader/Remove" }; - var alertanimation = new Syncfusion.EJ2.Popups.DialogAnimationSettings { Effect = Syncfusion.EJ2.Popups.DialogEffect.None }; - } - -
    -
    -
    -
    -
    -
    -
    - @(Html.EJS().AppBar("defaultAppBar").ColorMode(AppBarColor.Primary).ContentTemplate(@
    - Redaction -
    - @Html.EJS().Button("defaultButtonLogin").CssClass("e-inherit login").IconCss("e-icons e-download e-btn-icon e-icon-left").Content("Download").Click("downloadClicked").Render() -
    ).Render()) -
    -
    -
    -
    - @Html.EJS().Toolbar("topToolbar").Items(new List { - new ToolbarItem {Type = ItemType.Button, PrefixIcon = "e-icons e-folder",TooltipText = "Open" , Text="Open",CssClass="e-pv-redact-sb-open-container" ,Click="openFile"}, - new ToolbarItem {Type = ItemType.Separator , TooltipText="separator"}, - new ToolbarItem {Type =ItemType.Button,PrefixIcon= "e-icon e-text-annotation",TooltipText= "Text" , Text="Text" , Click="addText"}, - new ToolbarItem {Type =ItemType.Button,PrefixIcon= "e-icons e-image",TooltipText= "Image" , Text="Image" , Click="imgClick"}, - new ToolbarItem {Type = ItemType.Button, PrefixIcon="e-icons e-opacity",TooltipText ="Pattern" , Text ="Pattern" , Click="addPattern" }, - new ToolbarItem {Type = ItemType.Button, PrefixIcon ="e-icons black-out" ,TooltipText="Blackout" , Text="Blackout",CssClass="e-pv-redact-sb-black-out-container" ,Click="addBlackout" }, - new ToolbarItem {Type = ItemType.Button ,PrefixIcon="e-icons white-out" , TooltipText="Whiteout" ,Text="Whiteout" , CssClass="e-pv-redact-sb-white-out-container" , Click= "addWhiteout"}, - new ToolbarItem {Type = ItemType.Separator , TooltipText="separator"}, - new ToolbarItem {Type = ItemType.Button, PrefixIcon="e-icons e-redact" , TooltipText="Redaction" ,Disabled=true , Text="Redact" ,Id="redaction" , Click="redaction"}, - }).Render() -
    -
    - @Html.EJS().Toolbar("e-pv-secondary-toolbar").Items(new List { - new ToolbarItem {Type = ItemType.Button, PrefixIcon = "e-icons e-chevron-left",TooltipText = "Previous Page",Disabled=true ,Click="previousClicked",Id="previousPage"}, - new ToolbarItem {Template="
    1 / 1
    " ,PrefixIcon = "e-pv-next-page-navigation-icon", TooltipText = "Page Number"}, - new ToolbarItem {Type = ItemType.Button, PrefixIcon = "e-icons e-chevron-right", TooltipText = "Next Page",Click="nextClicked" ,Disabled=true,Id="nextPage"}, - new ToolbarItem {Type = ItemType.Separator , TooltipText="separator"}, - new ToolbarItem {Template = "#combo-element", Type = ItemType.Input ,TooltipText = "Zoom"} - }).Render() -
    - -
    - - @Html.EJS().PdfViewer("pdfviewer").EnableToolbar(false).EnableNavigationToolbar(false).EnableAnnotationToolbar(false).DocumentPath("https://cdn.syncfusion.com/content/pdf/programmatical-annotations.pdf").ResourceUrl(resourceUrl).DocumentLoad("documentLoaded").DownloadEnd("documentLoaded").PageChange("pageChange").AnnotationAdd("annotationAdd").AnnotationRemove("annotationRemove").EnableCommentPanel(false).Render() - - @Html.EJS().ComboBox("combo-element").Value("100%").ShowClearButton(false).Change("zoomValueChange").Width("95px").PopupWidth("85px").DataSource((string[])ViewData["zoomList"]).Render() -
    - @Html.EJS().Dialog("modal_dialog").IsModal(true).Header("Upload Image").ShowCloseIcon(true).Created("created").Width("477px").MinHeight("485px").Visible(false).ContentTemplate(@
    @Html.EJS().Uploader("UploadFiles").Multiple(false).Change("onFileChange").AllowedExtensions(".png, .jpg, .jpeg,").AsyncSettings(asyncSettings).Render()
    (Only JPG and PNG images will be accepted)
    ).Target("#e-pv-redact-sb-panel").Buttons((List)ViewData["ModalButton"]).Render() -
    - -
    - -} - -@section Meta{ - -} -@section ActionDescription{ -
    -

    The PDF Viewer facilitates the permanent removal of sensitive or confidential data from PDF files. Simplifying the redaction process, Syncfusion�s .NET PDF library includes features for seamless implementation.

    -
    -} -@section Description{ -
    -

    This example showcases the implementation of redaction using rectangle annotation, leveraging the Redaction feature in File formats.

    -
    -

    - Various types of redactions are demonstrated: -

    -
    -
      -
    • Displaying text over the redacted area
    • -
    • Adding an image to the redacted area
    • -
    • Drawing patterns on the redacted area
    • -
    • Blacking out the redacted area
    • -
    • Whitening out the redacted area
    • -
    -
    -

    Upon selecting areas on a page or across different pages with different redaction options, users can click the `Redact button`. This action redacts the document and reloads it into the PDF Viewer. The redacted document can then be saved or downloaded.

    -
    -} -@*custom code start*@ - -@*custom code end*@ - -@section Title{ - ASP.NET MVC PDF Viewer Redaction Example - Syncfusion Demos -} -@section Header{ -

    Example of Redaction in ASP.NET MVC PDF Viewer Control

    -} diff --git a/Views/PdfViewer/RightToLeft.cshtml b/Views/PdfViewer/RightToLeft.cshtml deleted file mode 100644 index 04908634b..000000000 --- a/Views/PdfViewer/RightToLeft.cshtml +++ /dev/null @@ -1,372 +0,0 @@ -@using Syncfusion.EJ2 -@{ - ViewData["Title"] = "Right To Left"; -} -@{ - string serviceUrl = VirtualPathUtility.ToAbsolute("~/api/PdfViewer/"); -} - -@section ControlsSection{ -
    -
    - -
    - -
    - @Html.EJS().Switch("checked").Checked(true).Change("change").CssClass("buttonSwitch").Render() -
    - @Html.EJS().PdfViewer("pdfviewer").EnableRtl(true).Locale("ar-AE").DocumentPath("https://cdn.syncfusion.com/content/pdf/rtl-text.pdf").ResourceUrl("https://cdn.syncfusion.com/ej2/23.2.6/dist/ej2-pdfviewer-lib").DocumentLoad("documentLoad").Render() -
    - -} - -@section Meta{ - - } -@section ActionDescription{ -
    -

    RTL provides an option to switch the text direction and layout of the PDF Viewer from right to left. It improves the user experiences and accessibility for users who use right-to-left languages (Arabic, Farsi, Urdu, etc.). To enable RTL PDF Viewer, set the enableRtl to true.

    -
    -} -@section Description{ -
    -

    In this example, you can see PDF Viewer right-to-left and the locale set in arabic[locale value is ar-AE]

    -

    By default, locale value is en-US. If you want to change the en-US culture to a different culture, you have to change the locale accordingly.

    -
    -
    -

    - More information on the PDF Viewer features can be found in this - - documentation section - opens in a new tab. -

    - -
    -} -@*custom code start*@ - -@*custom code end*@ - -@*custom code end*@ -@section Title{ - ASP.NET MVC PDF Viewer Right To Left Example - Syncfusion Demos - } -@section Header{ -

    Example of Right To Left in ASP.NET MVC PDF Viewer Control

    - } - \ No newline at end of file diff --git a/Views/Spreadsheet/CellDataBinding.cshtml b/Views/Spreadsheet/CellDataBinding.cshtml deleted file mode 100644 index 7edae0d57..000000000 --- a/Views/Spreadsheet/CellDataBinding.cshtml +++ /dev/null @@ -1,156 +0,0 @@ -@using Syncfusion.EJ2 -@using Syncfusion.EJ2.Spreadsheet - -@section ControlsSection{ -
    - @Html.EJS().Spreadsheet("spreadsheet").ShowRibbon(false).ShowFormulaBar(false).Sheets(sheet => - { - sheet.Name("Monthly Budget").SelectedRange("D13").Rows(row => - { - row.Cells(cell => - { - cell.Value("Category").Style(new SpreadsheetCellStyle() { FontWeight = FontWeight.Bold, TextAlign = TextAlign.Center }).Add(); - cell.Value("Planned cost").Style(new SpreadsheetCellStyle() { FontWeight = FontWeight.Bold, TextAlign = TextAlign.Center }).Add(); - cell.Value("Actual cost").Style(new SpreadsheetCellStyle() { FontWeight = FontWeight.Bold, TextAlign = TextAlign.Center }).Add(); - cell.Value("Difference").Style(new SpreadsheetCellStyle() { FontWeight = FontWeight.Bold, TextAlign = TextAlign.Center }).Add(); - }).Add(); - row.Cells(cell => - { - cell.Value("Food").Add(); - cell.Value("7000").Format("$#,##0.00").Add(); - cell.Value("8120").Format("$#,##0.00").Add(); - cell.Formula("=B2-C2").Format("$#,##0.00").Add(); - }).Add(); - row.Cells(cell => - { - cell.Value("Loan").Add(); - cell.Value("1500").Format("$#,##0.00").Add(); - cell.Value("1500").Format("$#,##0.00").Add(); - cell.Formula("=B3-C3").Format("$#,##0.00").Add(); - }).Add(); - row.Cells(cell => - { - cell.Value("Medical").Add(); - cell.Value("300").Format("$#,##0.00").Add(); - cell.Value("0").Format("$#,##0.00").Add(); - cell.Formula("=B4-C4").Format("$#,##0.00").Add(); - }).Add(); - row.Cells(cell => - { - cell.Value("Clothing").Add(); - cell.Value("400").Format("$#,##0.00").Add(); - cell.Value("140").Format("$#,##0.00").Add(); - cell.Formula("=B5-C5").Format("$#,##0.00").Add(); - }).Add(); - row.Cells(cell => - { - cell.Value("Education").Add(); - cell.Value("900").Format("$#,##0.00").Add(); - cell.Value("750").Format("$#,##0.00").Add(); - cell.Formula("=B6-C6").Format("$#,##0.00").Add(); - }).Add(); - row.Cells(cell => - { - cell.Value("Insurance").Add(); - cell.Value("30").Format("$#,##0.00").Add(); - cell.Value("30").Format("$#,##0.00").Add(); - cell.Formula("=B7-C7").Format("$#,##0.00").Add(); - }).Add(); - row.Cells(cell => - { - cell.Value("Utilities").Add(); - cell.Value("130").Format("$#,##0.00").Add(); - cell.Value("160").Format("$#,##0.00").Add(); - cell.Formula("=B8-C8").Format("$#,##0.00").Add(); - }).Add(); - row.Cells(cell => - { - cell.Value("Enterainment").Add(); - cell.Value("500").Format("$#,##0.00").Add(); - cell.Value("730").Format("$#,##0.00").Add(); - cell.Formula("=B9-C9").Format("$#,##0.00").Add(); - }).Add(); - row.Cells(cell => - { - cell.Value("Maintainance").Add(); - cell.Value("50").Format("$#,##0.00").Add(); - cell.Value("70").Format("$#,##0.00").Add(); - cell.Formula("=B10-C10").Format("$#,##0.00").Add(); - }).Add(); - row.Cells(cell => - { - cell.Value("Transportation").Add(); - cell.Value("250").Format("$#,##0.00").Add(); - cell.Value("400").Format("$#,##0.00").Add(); - cell.Formula("=B11-C11").Format("$#,##0.00").Add(); - }).Add(); - row.Cells(cell => - { - cell.Value("Gifts/Donations").Add(); - cell.Value("0").Format("$#,##0.00").Add(); - cell.Value("100").Format("$#,##0.00").Add(); - cell.Formula("=B12-C12").Format("$#,##0.00").Add(); - }).Add(); - row.Cells(cell => - { - cell.Index(2).Value("Total Difference:").Style(new SpreadsheetCellStyle() { FontWeight = FontWeight.Bold, TextAlign = TextAlign.Right }).Add(); - cell.Formula("=D2-D12").Format("$#,##0.00").Style(new SpreadsheetCellStyle() { FontWeight = FontWeight.Bold }).Add(); - }).Add(); - }).Columns(column => - { - column.Width(110).Add(); - column.Width(115).Add(); - column.Width(110).Add(); - column.Width(100).Add(); - }).Add(); - }).Render() -
    -} - -@section Meta{ - - } -@section ActionDescription{ -
    -

    - This sample illustrates a monthly budget for a home using planned versus actual costs with cell data binding feature. -

    -
    -} -@section Description{ -
    -

    - The Spreadsheet component supports data binding for individual cells in a sheet. You can set value, - styles and format to a cell using following properties: -

      -
    • index - Specify index for a cell.
    • -
    • value - Specify cell value.
    • -
    • style - Specify style for the cell.
    • -
    • format - Apply number formatting for the cell.
    • -
    -

    -

    - More information about cell data binding feature can be found in this - - documentation - opens in a new tab section. -

    -
    - } -@*custom code start*@ - -@*custom code end*@ - -@section Title{ - ASP.NET MVC Spreadsheet Cell Data Binding Example - Syncfusion Demos - } -@section Header{ -

    Example of Cell Data Binding in ASP.NET MVC Spreadsheet Control

    - } \ No newline at end of file diff --git a/Views/Spreadsheet/CellFormatting.cshtml b/Views/Spreadsheet/CellFormatting.cshtml deleted file mode 100644 index 88d0c4875..000000000 --- a/Views/Spreadsheet/CellFormatting.cshtml +++ /dev/null @@ -1,145 +0,0 @@ -@using Syncfusion.EJ2 -@using Syncfusion.EJ2.Spreadsheet - -@section ControlsSection{ -
    - @Html.EJS().Spreadsheet("spreadsheet").ShowRibbon(false).ShowFormulaBar(false).Created("createdHandler").BeforeCellRender("beforeCellRender").Sheets(sheet => - { - sheet.Name("Order Details").ShowGridLines(false).Ranges(ranges => - { - ranges.DataSource((IEnumerable)ViewData["orderDetails"]).Add(); - }).Rows(row =>{ - row.Height(36).Cells(cell =>{ - cell.Value("Order ID").Style(new SpreadsheetCellStyle() { TextAlign = TextAlign.Right }).Add(); - cell.Value("Customer Name").Style(new SpreadsheetCellStyle() { TextIndent = "2pt" }).Add(); - cell.Value("Order Date").Style(new SpreadsheetCellStyle() { TextAlign = TextAlign.Right }).Add(); - cell.Style(new SpreadsheetCellStyle() { TextIndent = "2pt" }).Add(); - cell.Index(5).Value("Postal Code").Style(new SpreadsheetCellStyle() { TextAlign = TextAlign.Right }).Add(); - cell.Index(7).Style(new SpreadsheetCellStyle() { TextAlign = TextAlign.Center }).Add(); - cell.Style(new SpreadsheetCellStyle() { TextAlign = TextAlign.Right }).Add(); - cell.Style(new SpreadsheetCellStyle() { TextIndent = "2pt" }).Add(); - }).Add(); - row.Height(42).Add(); - row.Height(42).Add(); - row.Height(42).Add(); - row.Height(42).Add(); - row.Height(42).Add(); - row.Height(42).Add(); - row.Height(42).Add(); - row.Height(42).Add(); - row.Height(42).Add(); - row.Height(42).Add(); - row.Height(42).Add(); - row.Height(42).Add(); - row.Height(42).Add(); - row.Height(42).Add(); - row.Height(42).Add(); - }).Columns(column => { - column.Width(80).Add(); - column.Width(140).Add(); - column.Width(100).Add(); - column.Width(232).Add(); - column.Width(120).Add(); - column.Width(100).Add(); - column.Width(100).Add(); - column.Width(120).Add(); - column.Width(80).Add(); - }).Add(); - }).Render() - -} - -@section Meta{ - - } -@section ActionDescription{ -
    -

    - This sample demonstrates the Spreadsheet cell formatting feature by applying different styles to a range of cells. -

    -
    -} -@section Description{ -
    -

    - Cell formatting allows you to highlight cell data that appears in the Spreadsheet. It can be enabled - or disabled using the - allowCellFormattingopens in a new tab - property. -

    -

    - In this sample, gridlines are hidden using the showGridLines property and the styles are - applied using the - styleopens in a new tab - property and - cellFormatopens in a new tab - method. -

    -

    - More information about cell formatting can be found in this - - documentation - opens in a new tab section. -

    -
    - } - - - - @*custom code start*@ - - @*custom code end*@ - -@section Title{ - ASP.NET MVC Spreadsheet Cell Formatting Example - Syncfusion Demos - } -@section Header{ -

    Example of Cell Formatting in ASP.NET MVC Spreadsheet Control

    - } diff --git a/Views/Spreadsheet/CellTemplates.cshtml b/Views/Spreadsheet/CellTemplates.cshtml deleted file mode 100644 index d29010586..000000000 --- a/Views/Spreadsheet/CellTemplates.cshtml +++ /dev/null @@ -1,178 +0,0 @@ -@using Syncfusion.EJ2 -@using Syncfusion.EJ2.Spreadsheet - -@section ControlsSection{ -
    - @Html.EJS().Spreadsheet("spreadsheet").ShowRibbon(false).EnableContextMenu(false).ShowFormulaBar(false).AllowEditing(false).Created("createdHandler").BeforeSelect("beforeSelectHandler").BeforeCellRender("beforeCellRenderHandler").ContextMenuBeforeOpen("contextMenuBeforeOpenHandler").ScrollSettings(scrollSettings => - { - scrollSettings.EnableVirtualization(false).IsFinite(true); - }).SelectionSettings(selectionSettings => - { - selectionSettings.Mode(SelectionMode.None); - }).Sheets(sheet => - { - sheet.Name("Registration Form").RowCount(40).ColCount(30).ShowGridLines(false).Rows(row => - { - row.Height(55).Cells(cell => cell.Index(1).Value("Interview Registration Form").Style(style => - { - style.FontWeight(FontWeight.Bold).TextAlign(TextAlign.Center).VerticalAlign(VerticalAlign.Middle).FontSize("12pt"); - }).Add()).Add(); - row.Height(45).Cells(cell => cell.Index(1).Value("Name").Add()).Add(); - row.Height(45).Cells(cell => cell.Index(1).Value("Date of Birth:").Add()).Add(); - row.Height(45).Cells(cell => cell.Index(1).Value("Gender:").Add()).Add(); - row.Height(45).Cells(cell => cell.Index(1).Value("Year of Experience:").Add()).Add(); - row.Height(45).Cells(cell => cell.Index(1).Value("Areas of Interest:").Add()).Add(); - row.Height(45).Cells(cell => cell.Index(1).Value("Mobile Number:").Add()).Add(); - row.Height(45).Cells(cell => cell.Index(1).Value("Email:").Add()).Add(); - row.Height(82).Cells(cell => cell.Index(1).Value("Address:").Add()).Add(); - }).Columns(column => - { - column.Index(1).Width(190).Add(); - column.Width(350).Add(); - }).Ranges(ranges => - { - ranges.Template("").Address("C2:C3").Add(); - ranges.Template("
    ").Address("C4").Add(); - ranges.Template("").Address("C5:C8").Add(); - ranges.Template("