@amcharts/amcharts5 5.17.3 → 5.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.internal/charts/funnel/PictorialStackedSeries.js +1 -1
- package/.internal/charts/funnel/PictorialStackedSeries.js.map +1 -1
- package/.internal/charts/hierarchy/HierarchyDefaultTheme.js +1 -1
- package/.internal/charts/hierarchy/HierarchyDefaultTheme.js.map +1 -1
- package/.internal/charts/hierarchy/Tree.d.ts +14 -0
- package/.internal/charts/hierarchy/Tree.d.ts.map +1 -1
- package/.internal/charts/hierarchy/Tree.js +70 -0
- package/.internal/charts/hierarchy/Tree.js.map +1 -1
- package/.internal/charts/hierarchy/VoronoiTreemap.d.ts +8 -2
- package/.internal/charts/hierarchy/VoronoiTreemap.d.ts.map +1 -1
- package/.internal/charts/hierarchy/VoronoiTreemap.js +8 -4
- package/.internal/charts/hierarchy/VoronoiTreemap.js.map +1 -1
- package/.internal/charts/stock/StockChartDefaultTheme.js +6 -6
- package/.internal/charts/stock/StockChartDefaultTheme.js.map +1 -1
- package/.internal/charts/stock/indicators/BollingerBands.js +1 -1
- package/.internal/charts/stock/indicators/BollingerBands.js.map +1 -1
- package/.internal/charts/stock/indicators/MovingAverage.d.ts +6 -0
- package/.internal/charts/stock/indicators/MovingAverage.d.ts.map +1 -1
- package/.internal/charts/stock/indicators/MovingAverage.js +9 -5
- package/.internal/charts/stock/indicators/MovingAverage.js.map +1 -1
- package/.internal/charts/stock/indicators/MovingAverageDeviation.d.ts +6 -0
- package/.internal/charts/stock/indicators/MovingAverageDeviation.d.ts.map +1 -1
- package/.internal/charts/stock/indicators/MovingAverageDeviation.js +8 -4
- package/.internal/charts/stock/indicators/MovingAverageDeviation.js.map +1 -1
- package/.internal/charts/stock/indicators/MovingAverageEnvelope.js +1 -1
- package/.internal/charts/stock/indicators/MovingAverageEnvelope.js.map +1 -1
- package/.internal/charts/stock/toolbar/DrawingControl.js +1 -1
- package/.internal/charts/stock/toolbar/DrawingControl.js.map +1 -1
- package/.internal/core/Registry.js +1 -1
- package/.internal/core/Registry.js.map +1 -1
- package/.internal/core/util/Entity.d.ts.map +1 -1
- package/.internal/core/util/Entity.js +7 -3
- package/.internal/core/util/Entity.js.map +1 -1
- package/.internal/plugins/exporting/Exporting.d.ts.map +1 -1
- package/.internal/plugins/exporting/Exporting.js +10 -9
- package/.internal/plugins/exporting/Exporting.js.map +1 -1
- package/.internal/plugins/json/Classes-script.js +254 -254
- package/.internal/plugins/json/Classes-script.js.map +1 -1
- package/.internal/plugins/json/Classes.js +254 -254
- package/.internal/plugins/json/Classes.js.map +1 -1
- package/CHANGELOG.md +15 -0
- package/examples/javascript/flow-arc-horizontal/package.json +1 -1
- package/examples/javascript/flow-arc-vertical/package.json +1 -1
- package/examples/javascript/flow-chord/package.json +1 -1
- package/examples/javascript/flow-chord-directed/package.json +1 -1
- package/examples/javascript/flow-chord-non-ribbon/package.json +1 -1
- package/examples/javascript/flow-sankey/package.json +1 -1
- package/examples/javascript/gantt/package.json +1 -1
- package/examples/javascript/gantt-multilevel/package.json +1 -1
- package/examples/javascript/gantt-simple/package.json +1 -1
- package/examples/javascript/gauge/package.json +1 -1
- package/examples/javascript/gauge-bands/package.json +1 -1
- package/examples/javascript/hierarchy-force-directed/package.json +1 -1
- package/examples/javascript/hierarchy-pack/package.json +1 -1
- package/examples/javascript/hierarchy-partition/package.json +1 -1
- package/examples/javascript/hierarchy-sunburst/package.json +1 -1
- package/examples/javascript/hierarchy-tree/package.json +1 -1
- package/examples/javascript/hierarchy-treemap/package.json +1 -1
- package/examples/javascript/hierarchy-voronoi-treemap/package.json +1 -1
- package/examples/javascript/jest/package.json +1 -1
- package/examples/javascript/json-pie/package.json +1 -1
- package/examples/javascript/json-xy/package.json +1 -1
- package/examples/javascript/map-animating-along-lines/package.json +1 -1
- package/examples/javascript/map-clustered-points/package.json +1 -1
- package/examples/javascript/map-day-and-night/package.json +1 -1
- package/examples/javascript/map-globe-rotate-to-country/package.json +1 -1
- package/examples/javascript/map-globe-with-projected-circles/package.json +1 -1
- package/examples/javascript/map-sankey/package.json +1 -1
- package/examples/javascript/map-sankey-waypoints/package.json +1 -1
- package/examples/javascript/map-with-bubbles/package.json +1 -1
- package/examples/javascript/map-zoom-to-country/package.json +1 -1
- package/examples/javascript/misc-40-charts/package.json +1 -1
- package/examples/javascript/misc-microchart-grid/package.json +1 -1
- package/examples/javascript/pie-chart/package.json +1 -1
- package/examples/javascript/pie-donut-chart/package.json +1 -1
- package/examples/javascript/pie-variable-radius/package.json +1 -1
- package/examples/javascript/radar-column-iwatch-style/package.json +1 -1
- package/examples/javascript/radar-heat-map/package.json +1 -1
- package/examples/javascript/radar-line/package.json +1 -1
- package/examples/javascript/radar-time-line/package.json +1 -1
- package/examples/javascript/sliced-funnel/package.json +1 -1
- package/examples/javascript/sliced-pictorial-stacked/package.json +1 -1
- package/examples/javascript/sliced-pyramid/package.json +1 -1
- package/examples/javascript/stock-chart/package.json +1 -1
- package/examples/javascript/stock-chart-comparing-stocks/package.json +1 -1
- package/examples/javascript/stock-chart-data-granularity/package.json +1 -1
- package/examples/javascript/stock-chart-data-grouping/package.json +1 -1
- package/examples/javascript/stock-chart-intraday/package.json +1 -1
- package/examples/javascript/stock-chart-live/package.json +1 -1
- package/examples/javascript/stock-chart-volume-separate-panel/package.json +1 -1
- package/examples/javascript/timeline-horizontal-serpentine-chart/package.json +1 -1
- package/examples/javascript/timeline-linear-process-diagram/package.json +1 -1
- package/examples/javascript/timeline-serpentine-chart/package.json +1 -1
- package/examples/javascript/timeline-spiral-chart/package.json +1 -1
- package/examples/javascript/venn-diagram/package.json +1 -1
- package/examples/javascript/wordcloud-with-data/package.json +1 -1
- package/examples/javascript/wordcloud-with-text/package.json +1 -1
- package/examples/javascript/xy-100-percent-stacked-column/package.json +1 -1
- package/examples/javascript/xy-animated-bullet-at-the-end-of-the-series/package.json +1 -1
- package/examples/javascript/xy-bubble/package.json +1 -1
- package/examples/javascript/xy-candlestick/package.json +1 -1
- package/examples/javascript/xy-clustered-column/package.json +1 -1
- package/examples/javascript/xy-column/package.json +1 -1
- package/examples/javascript/xy-comparing-series-google-analytics-style/package.json +1 -1
- package/examples/javascript/xy-data-grouping/package.json +1 -1
- package/examples/javascript/xy-draggable-range/package.json +1 -1
- package/examples/javascript/xy-drawing-series-with-mouse-or-touch/package.json +1 -1
- package/examples/javascript/xy-dumbbell plot/package.json +1 -1
- package/examples/javascript/xy-evenly-spaced-date-axis/package.json +1 -1
- package/examples/javascript/xy-line/package.json +1 -1
- package/examples/javascript/xy-line-highlight-on-legend-hover/package.json +1 -1
- package/examples/javascript/xy-live-data/package.json +1 -1
- package/examples/javascript/xy-multiple-synced-value-axes/package.json +1 -1
- package/examples/javascript/xy-ohlc/package.json +1 -1
- package/examples/javascript/xy-real-time-data-sorting/package.json +1 -1
- package/examples/javascript/xy-smoothed-line/package.json +1 -1
- package/examples/javascript/xy-stacked-and-clustered-column/package.json +1 -1
- package/examples/javascript/xy-stacked-column/package.json +1 -1
- package/examples/javascript/xy-stacked-step/package.json +1 -1
- package/examples/javascript/xy-stock/package.json +1 -1
- package/examples/javascript/xy-stock-comparing/package.json +1 -1
- package/examples/typescript/flow-arc-horizontal/package.json +1 -1
- package/examples/typescript/flow-arc-vertical/package.json +1 -1
- package/examples/typescript/flow-chord/package.json +1 -1
- package/examples/typescript/flow-chord-directed/package.json +1 -1
- package/examples/typescript/flow-chord-non-ribbon/package.json +1 -1
- package/examples/typescript/flow-sankey/package.json +1 -1
- package/examples/typescript/gantt/package.json +1 -1
- package/examples/typescript/gantt-multilevel/package.json +1 -1
- package/examples/typescript/gantt-simple/package.json +1 -1
- package/examples/typescript/gauge/package.json +1 -1
- package/examples/typescript/gauge-bands/package.json +1 -1
- package/examples/typescript/hierarchy-force-directed/package.json +1 -1
- package/examples/typescript/hierarchy-pack/package.json +1 -1
- package/examples/typescript/hierarchy-partition/package.json +1 -1
- package/examples/typescript/hierarchy-sunburst/package.json +1 -1
- package/examples/typescript/hierarchy-tree/package.json +1 -1
- package/examples/typescript/hierarchy-treemap/package.json +1 -1
- package/examples/typescript/hierarchy-voronoi-treemap/package.json +1 -1
- package/examples/typescript/jest/package.json +1 -1
- package/examples/typescript/json-pie/package.json +1 -1
- package/examples/typescript/json-xy/package.json +1 -1
- package/examples/typescript/map-animating-along-lines/package.json +1 -1
- package/examples/typescript/map-clustered-points/package.json +1 -1
- package/examples/typescript/map-day-and-night/package.json +1 -1
- package/examples/typescript/map-globe-rotate-to-country/package.json +1 -1
- package/examples/typescript/map-globe-with-projected-circles/package.json +1 -1
- package/examples/typescript/map-sankey/package.json +1 -1
- package/examples/typescript/map-sankey-waypoints/package.json +1 -1
- package/examples/typescript/map-with-bubbles/package.json +1 -1
- package/examples/typescript/map-zoom-to-country/package.json +1 -1
- package/examples/typescript/misc-40-charts/package.json +1 -1
- package/examples/typescript/misc-microchart-grid/package.json +1 -1
- package/examples/typescript/pie-chart/package.json +1 -1
- package/examples/typescript/pie-donut-chart/package.json +1 -1
- package/examples/typescript/pie-variable-radius/package.json +1 -1
- package/examples/typescript/radar-column-iwatch-style/package.json +1 -1
- package/examples/typescript/radar-heat-map/package.json +1 -1
- package/examples/typescript/radar-line/package.json +1 -1
- package/examples/typescript/radar-time-line/package.json +1 -1
- package/examples/typescript/sliced-funnel/package.json +1 -1
- package/examples/typescript/sliced-pictorial-stacked/package.json +1 -1
- package/examples/typescript/sliced-pyramid/package.json +1 -1
- package/examples/typescript/stock-chart/package.json +1 -1
- package/examples/typescript/stock-chart-comparing-stocks/package.json +1 -1
- package/examples/typescript/stock-chart-data-granularity/package.json +1 -1
- package/examples/typescript/stock-chart-data-grouping/package.json +1 -1
- package/examples/typescript/stock-chart-intraday/package.json +1 -1
- package/examples/typescript/stock-chart-live/package.json +1 -1
- package/examples/typescript/stock-chart-volume-separate-panel/package.json +1 -1
- package/examples/typescript/timeline-horizontal-serpentine-chart/package.json +1 -1
- package/examples/typescript/timeline-linear-process-diagram/package.json +1 -1
- package/examples/typescript/timeline-serpentine-chart/package.json +1 -1
- package/examples/typescript/timeline-spiral-chart/package.json +1 -1
- package/examples/typescript/venn-diagram/package.json +1 -1
- package/examples/typescript/wordcloud-with-data/package.json +1 -1
- package/examples/typescript/wordcloud-with-text/package.json +1 -1
- package/examples/typescript/xy-100-percent-stacked-column/package.json +1 -1
- package/examples/typescript/xy-animated-bullet-at-the-end-of-the-series/package.json +1 -1
- package/examples/typescript/xy-bubble/package.json +1 -1
- package/examples/typescript/xy-candlestick/package.json +1 -1
- package/examples/typescript/xy-clustered-column/package.json +1 -1
- package/examples/typescript/xy-column/package.json +1 -1
- package/examples/typescript/xy-comparing-series-google-analytics-style/package.json +1 -1
- package/examples/typescript/xy-data-grouping/package.json +1 -1
- package/examples/typescript/xy-draggable-range/package.json +1 -1
- package/examples/typescript/xy-drawing-series-with-mouse-or-touch/package.json +1 -1
- package/examples/typescript/xy-dumbbell plot/package.json +1 -1
- package/examples/typescript/xy-evenly-spaced-date-axis/package.json +1 -1
- package/examples/typescript/xy-line/package.json +1 -1
- package/examples/typescript/xy-line-highlight-on-legend-hover/package.json +1 -1
- package/examples/typescript/xy-live-data/package.json +1 -1
- package/examples/typescript/xy-multiple-synced-value-axes/package.json +1 -1
- package/examples/typescript/xy-ohlc/package.json +1 -1
- package/examples/typescript/xy-real-time-data-sorting/package.json +1 -1
- package/examples/typescript/xy-smoothed-line/package.json +1 -1
- package/examples/typescript/xy-stacked-and-clustered-column/package.json +1 -1
- package/examples/typescript/xy-stacked-column/package.json +1 -1
- package/examples/typescript/xy-stacked-step/package.json +1 -1
- package/examples/typescript/xy-stock/package.json +1 -1
- package/examples/typescript/xy-stock-comparing/package.json +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Exporting.js","sourceRoot":"","sources":["../../../../../src/.internal/plugins/exporting/Exporting.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExportingMenu } from \"./ExportingMenu\"\nimport type { TimeUnit } from \"../../core/util/Time\";\n\nimport { Entity, IEntitySettings, IEntityPrivate, IEntityEvents } from \"../../core/util/Entity\"\nimport { Color } from \"../../core/util/Color\";\nimport { Root } from \"../../core/Root\"\nimport { StyleRule } from \"../../core/util/Utils\"\n\nimport * as $array from \"../../core/util/Array\";\nimport * as $object from \"../../core/util/Object\";\nimport * as $type from \"../../core/util/Type\";\nimport * as $utils from \"../../core/util/Utils\";\n\nexport interface IFile {\n\tpath: string;\n\tbytes: string;\n}\n\nexport interface IFont {\n\tname: string;\n\tnormal: IFile;\n\tbold?: IFile;\n\titalics?: IFile;\n\tbolditalics?: IFile;\n}\n\n/**\n * This is used to cache the pdfmake loading.\n *\n * @ignore\n */\nlet pdfmakePromise: Promise<any>;\n\n/**\n * Loads pdfmake dynamic module\n *\n * This is an asynchronous function. Check the description of `getImage()`\n * for description and example usage.\n *\n * @ignore\n */\nasync function _pdfmake(): Promise<any> {\n\tlet a = await Promise.all([\n\t\timport(/* webpackChunkName: \"pdfmake\" */ \"pdfmake/build/pdfmake.js\"),\n\t\timport(/* webpackChunkName: \"pdfmake\" */ \"./pdfmake/vfs_fonts\")\n\t]);\n\n\tlet pdfmake = a[0].default;\n\tlet vfs_fonts = a[1].default;\n\tconst global = <any>window;\n\tglobal.pdfMake = global.pdfMake || {};\n\tglobal.pdfMake.vfs = vfs_fonts;\n\tpdfmake.vfs = vfs_fonts;\n\treturn pdfmake;\n}\n\nexport type ExportingTypes = \"image\" | \"data\" | \"print\";\nexport type ExportingFormats = \"png\" | \"jpg\" | \"canvas\" | \"pdf\" | \"xlsx\" | \"csv\" | \"json\" | \"html\" | \"pdfdata\" | \"print\";\nexport type ExportingImageFormats = \"png\" | \"jpg\";\n\nexport interface IExportingImageSource {\n\n\t/**\n\t * A root object of an extra chart to add in export.\n\t */\n\tsource: Root;\n\n\t/**\n\t * Top margin in pixels.\n\t */\n\tmarginTop?: number;\n\n\t/**\n\t * Right margin in pixels.\n\t */\n\tmarginRight?: number;\n\n\t/**\n\t * Bottom margin in pixels.\n\t */\n\tmarginBottom?: number;\n\n\t/**\n\t * Left margin in pixels.\n\t */\n\tmarginLeft?: number;\n\n\t/**\n\t * Position to place extra image in relation to the main chart.\n\t *\n\t * @default \"bottom\"\n\t */\n\tposition?: \"left\" | \"right\" | \"top\" | \"bottom\";\n\n\t/**\n\t * Crop extra image if it's larger than the main chart.\n\t */\n\tcrop?: boolean;\n\n}\n\nexport interface IExportingSettings extends IEntitySettings {\n\n\t/**\n\t * A reference to [[ExportingMenu]] object.\n\t */\n\tmenu?: ExportingMenu;\n\n\t/**\n\t * Export will try to determine background color based on the DOM styles.\n\t *\n\t * You can use this setting to explicitly specify background color for\n\t * exported images.\n\t */\n\tbackgroundColor?: Color;\n\n\t/**\n\t * Opacity of the exported image background.\n\t *\n\t * * 0 - fully transparent.\n\t * * 1 - fully opaque (default).\n\t *\n\t * NOTE: some image formats like JPEG do not support transparency.\n\t *\n\t * @since 5.2.34\n\t */\n\tbackgroundOpacity?: number;\n\n\t/**\n\t * A string to prefix exported files with.\n\t *\n\t * @default \"chart\"\n\t */\n\tfilePrefix?: string;\n\n\t/**\n\t * Chart title. Used for print, PDF and Excel exports.\n\t */\n\ttitle?: string;\n\n\t/**\n\t * Charset to use for export.\n\t *\n\t * @default \"utf-8\"\n\t */\n\tcharset?: string;\n\n\t/**\n\t * Fields to include in data export.\n\t *\n\t * Key - field in data.\n\t * Value - column name.\n\t */\n\tdataFields?: { [index: string]: string },\n\n\t/**\n\t * Specifies the order of fields to export in data.\n\t */\n\tdataFieldsOrder?: string[],\n\n\t/**\n\t * Fields in data that are numeric.\n\t */\n\tnumericFields?: string[],\n\n\t/**\n\t * Use this number format on numeric values.\n\t */\n\tnumberFormat?: string | Intl.NumberFormatOptions,\n\n\t/**\n\t * Fields in data that have date/time value.\n\t */\n\tdateFields?: string[],\n\n\t/**\n\t * Use this date format on date values.\n\t */\n\tdateFormat?: string | Intl.DateTimeFormatOptions,\n\n\t/**\n\t * Fields in data that need to be formatted as \"duration\" as per `durationFormat`.\n\t *\n\t * @since 5.0.16\n\t */\n\tdurationFields?: string[],\n\n\t/**\n\t * Format to use when formatting values in `durationFields`.\n\t *\n\t * If not set, will use `durationFormat` as set in [[DurationFormatter]] of\n\t * the root element.\n\t *\n\t * @since 5.0.16\n\t */\n\tdurationFormat?: string,\n\n\t/**\n\t * Time unit to assume duration values are in.\n\t *\n\t * If not set, will use `baseUnit` as set in [[DurationFormatter]] of\n\t * the root element.\n\t *\n\t * @since 5.0.16\n\t */\n\tdurationUnit?: TimeUnit;\n\n\t/**\n\t * Include these images or other charts in image exports.\n\t */\n\textraImages?: Array<Root | IExportingImageSource>;\n\n\t/**\n\t * Data to export.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/exporting/#Exporting_data} for more info\n\t */\n\tdataSource?: any;\n\n\t/**\n\t * PNG format options.\n\t */\n\tpngOptions?: IExportingImageOptions;\n\n\t/**\n\t * JPEG format options.\n\t */\n\tjpgOptions?: IExportingImageOptions;\n\n\t/**\n\t * Canvas format options.\n\t */\n\tcanvasOptions?: IExportingImageOptions;\n\n\t/**\n\t * PDF format options.\n\t */\n\tpdfOptions?: IExportingPDFOptions;\n\n\t/**\n\t * PDF with data table format options.\n\t */\n\tpdfdataOptions?: IExportingDataOptions;\n\n\t/**\n\t * XSLX format options.\n\t */\n\txlsxOptions?: IExportingXLSXOptions;\n\n\t/**\n\t * CSV format options.\n\t */\n\tcsvOptions?: IExportingCSVOptions;\n\n\t/**\n\t * JSON format options.\n\t */\n\tjsonOptions?: IExportingJSONOptions;\n\n\t/**\n\t * HTML format options.\n\t */\n\thtmlOptions?: IExportingHTMLOptions;\n\n\t/**\n\t * Print options.\n\t */\n\tprintOptions?: IExportingPrintOptions;\n\n}\n\nexport interface IExportingPrivate extends IEntityPrivate {\n}\n\nexport interface IExportEvent {\n\n\t/**\n\t * Format.\n\t */\n\tformat: ExportingFormats,\n\n\t/**\n\t * Format options.\n\t */\n\toptions: IExportingFormatOptions\n\n}\n\nexport interface IExportingEvents extends IEntityEvents {\n\n\t/**\n\t * Invoked when export starts.\n\t */\n\texportstarted: IExportEvent;\n\n\t/**\n\t * Invoked when export finishes.\n\t */\n\texportfinished: IExportEvent;\n\n\t/**\n\t * Invoked when download of the export starts.\n\t */\n\tdownloadstarted: IExportEvent & {\n\t\tfileName: string,\n\t};\n\n\t/**\n\t * Invoked when print starts.\n\t */\n\tprintstarted: IExportEvent;\n\n\t/**\n\t * Invoked when data finishes pre-processing for export.\n\t */\n\tdataprocessed: IExportEvent & {\n\t\tdata: any\n\t}\n\n\t/**\n\t * Invoked when XLSX export finishes preparing a workbook.\n\t *\n\t * At this point it can still be modified for export.\n\t */\n\tworkbookready: IExportEvent & {\n\t\tworkbook: any,\n\t\tworkbookOptions: any,\n\t\txlsx: any\n\t}\n\n\t/**\n\t * Invoked when PDF export finishes preparing a document.\n\t *\n\t * At this point it can still be modified for export.\n\t */\n\tpdfdocready: IExportEvent & {\n\t\tdoc: any\n\t}\n\n}\n\nexport interface IExportingFormatOptions {\n\n\t/**\n\t * If set to `true`, this format will not appear in [[ExportMenu]].\n\t */\n\tdisabled?: boolean;\n\n}\n\nexport interface IExportingImageOptions extends IExportingFormatOptions {\n\n\t/**\n\t * Quality of the exported image: 0 to 1.\n\t */\n\tquality?: number;\n\n\t/**\n\t * Export images with hardware resolution (`false`), or the way they appear\n\t * on screen (`true`).\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/exporting/exporting-images/#Pixel_ratio} for more info\n\t * @default false\n\t */\n\tmaintainPixelRatio?: boolean;\n\n\t/**\n\t * Minimal width of exported image, in pixels.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/exporting/exporting-images/#Sizing_exported_image} for more info\n\t */\n\tminWidth?: number;\n\n\t/**\n\t * Maximal width of exported image, in pixels.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/exporting/exporting-images/#Sizing_exported_image} for more info\n\t */\n\tmaxWidth?: number;\n\n\t/**\n\t * Minimal height of exported image, in pixels.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/exporting/exporting-images/#Sizing_exported_image} for more info\n\t */\n\tminHeight?: number;\n\n\t/**\n\t * Maximal height of exported image, in pixels.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/exporting/exporting-images/#Sizing_exported_image} for more info\n\t */\n\tmaxHeight?: number;\n\n}\n\nexport interface IExportingPrintOptions extends IExportingImageOptions {\n\n\t/**\n\t * A delay in milliseconds to wait before initiating print.\n\t *\n\t * This delay is necessary to ensure DOM is prepared and repainted before\n\t * print dialog kicks in.\n\t *\n\t * @default 500\n\t */\n\tdelay?: number;\n\n\t/**\n\t * Method to use for printing.\n\t *\n\t * If one fails for your particular setup, try the other.\n\t *\n\t * \"css\" - inserts dynamic CSS that hides everything, except the image being printed.\n\t * \"iframe\" - creates a dynamic `<iframe>` with the image, then prints it.\n\t *\n\t * @default \"iframe\"\n\t */\n\tprintMethod?: \"css\" | \"iframe\";\n\n\t/**\n\t * Image format to use for printing.\n\t *\n\t * @default \"png\"\n\t */\n\timageFormat?: \"png\" | \"jpg\";\n\n}\n\n/**\n * Available PDF page sizes.\n */\nexport type pageSizes = \"4A0\" | \"2A0\" | \"A0\" | \"A1\" | \"A2\" | \"A3\" | \"A4\" | \"A5\" | \"A6\" | \"A7\" | \"A8\" | \"A9\" | \"A10\" |\n\t\"B0\" | \"B1\" | \"B2\" | \"B3\" | \"B4\" | \"B5\" | \"B6\" | \"B7\" | \"B8\" | \"B9\" | \"B10\" |\n\t\"C0\" | \"C1\" | \"C2\" | \"C3\" | \"C4\" | \"C5\" | \"C6\" | \"C7\" | \"C8\" | \"C9\" | \"C10\" |\n\t\"RA0\" | \"RA1\" | \"RA2\" | \"RA3\" | \"RA4\" |\n\t\"SRA0\" | \"SRA1\" | \"SRA2\" | \"SRA3\" | \"SRA4\" |\n\t\"EXECUTIVE\" | \"FOLIO\" | \"LEGAL\" | \"LETTER\" | \"TABLOID\";\n\nexport interface IExportingPDFOptions extends IExportingImageOptions {\n\n\t/**\n\t * Include data into PDF\n\t */\n\tincludeData?: boolean;\n\n\t/**\n\t * An image format to use for embedded images in PDF.\n\t *\n\t * See `imageFormats` in [[Export_module]].\n\t */\n\timageFormat?: \"png\" | \"jpg\";\n\n\t/**\n\t * Font size to use for all texts.\n\t */\n\tfontSize?: number;\n\n\t/**\n\t * Alignment of the chart image in PDF.\n\t *\n\t * Supported options: `\"left\"` (default), `\"center\"`, `\"right\"`.\n\t *\n\t * @default left\n\t */\n\talign?: \"left\" | \"center\" | \"middle\";\n\n\t/**\n\t * Whether to add a URL of the web page the chart has been exported from.\n\t *\n\t * @default true\n\t */\n\taddURL?: boolean;\n\n\t/**\n\t * Page size of the exported PDF.\n\t */\n\tpageSize?: pageSizes;\n\n\t/**\n\t * Page orientation.\n\t */\n\tpageOrientation?: \"landscape\" | \"portrait\";\n\n\t/**\n\t * Page margins.\n\t *\n\t * Can be one of the following:\n\t *\n\t * A single number, in which case it will act as margin setting\n\t * for all four edges of the page.\n\t *\n\t * An array of two numbers `[ horizontal, vertical ]`.\n\t *\n\t * An array of four numbers `[ left, top, right, bottom ]`.\n\t */\n\tpageMargins?: number | number[];\n\n\t/**\n\t * Font which should be used for the export.\n\t *\n\t * Default font used for PDF includes only Latin-based and Cyrilic\n\t * characters. If you are exporting text in other languages, you might need\n\t * to use some other export font.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/exporting/exporting-pdf/#Fonts} for more info\n\t */\n\tfont?: IFont;\n\n\t/**\n\t * Additional optional fonts which can be used on individual elements.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/exporting/exporting-pdf/#Fonts} for more info\n\t */\n\textraFonts?: Array<IFont>;\n\n}\n\nexport interface IExportingDataOptions extends IExportingFormatOptions {\n\n\t/**\n\t * Replace empty values with this string.\n\t */\n\temptyAs?: string;\n\n\t/**\n\t * Use timestamps instead of formatted dates.\n\t *\n\t * @default false\n\t */\n\tuseTimestamps?: boolean;\n\n\t/**\n\t * Use client's locale when formatting dates.\n\t *\n\t * @default false\n\t */\n\tuseLocale?: boolean;\n\n\t/**\n\t * If set to `true` will pivot the table so that columns are horizontal.\n\t */\n\tpivot?: boolean;\n\n\t/**\n\t * Will add a line with column names in CSV/HTML/PDF tables.\n\t */\n\taddColumnNames?: boolean;\n\n}\n\nexport interface IExportingJSONOptions extends IExportingDataOptions {\n\n\t/**\n\t * If set to a number, each line will be indented by X spaces, maintaining\n\t * hierarchy.\n\t *\n\t * If set to a string, will use that string to indent.\n\t *\n\t * @default 2\n\t */\n\tindent?: string | number;\n\n\t/**\n\t * If set to `true` and `dataFields` are set to `true`, will rename keys in\n\t * data.\n\t *\n\t * @default true\n\t */\n\trenameFields?: boolean;\n\n}\n\nexport interface IExportingCSVOptions extends IExportingDataOptions {\n\n\t/**\n\t * Column separator.\n\t *\n\t * @default \",\"\n\t */\n\tseparator?: string;\n\n\t/**\n\t * Force all values to be included in quotes, including numeric.\n\t *\n\t * @default false\n\t */\n\tforceQuotes?: boolean;\n\n\t/**\n\t * Reverse order of the records in data.\n\t *\n\t * @default false\n\t */\n\treverse?: boolean;\n\n\t/**\n\t * Add BOM character to output file, so that it can be used with UTF-8\n\t * characters properly in Excel.\n\t *\n\t * @default false\n\t * @since 5.1.0\n\t */\n\taddBOM?: boolean;\n\n}\n\nexport interface IExportingHTMLOptions extends IExportingDataOptions {\n\n\t/**\n\t * A `class` attribute for `<table>` tag.\n\t */\n\ttableClass?: string;\n\n\t/**\n\t * A `class` attribute for `<tr>` tags.\n\t */\n\trowClass?: string;\n\n\t/**\n\t * A `class` attribute for `<th>` tags.\n\t */\n\theaderClass?: string;\n\n\t/**\n\t * A `class` attribute for `<td>` tags.\n\t */\n\tcellClass?: string;\n\n}\n\nexport interface IExportingXLSXOptions extends IExportingDataOptions {\n\t// @todo\n\t//sheets?: string[];\n}\n\n/**\n * A plugin that can be used to export chart snapshots and data.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/exporting/} for more info\n */\nexport class Exporting extends Entity {\n\tpublic static className: string = \"Exporting\";\n\tpublic static classNames: Array<string> = Entity.classNames.concat([Exporting.className]);\n\n\tdeclare public _settings: IExportingSettings;\n\tdeclare public _privateSettings: IExportingPrivate;\n\tdeclare public _events: IExportingEvents;\n\n\t//public extraImages: Array<Root | IExportingImageSource> = [];\n\t//public dataSources: any[] = [];\n\n\tprotected _afterNew() {\n\t\tsuper._afterNew();\n\t\tthis._setRawDefault(\"filePrefix\", \"chart\");\n\t\tthis._setRawDefault(\"charset\", \"utf-8\");\n\t\tthis._setRawDefault(\"numericFields\", []);\n\t\tthis._setRawDefault(\"dateFields\", []);\n\t\tthis._setRawDefault(\"durationFields\", []);\n\t\tthis._setRawDefault(\"extraImages\", []);\n\t\tthis._setRawDefault(\"pngOptions\", { quality: 1, maintainPixelRatio: false });\n\t\tthis._setRawDefault(\"jpgOptions\", { quality: 0.8, maintainPixelRatio: false });\n\t\tthis._setRawDefault(\"printOptions\", { quality: 1, maintainPixelRatio: false, delay: 500, printMethod: \"iframe\", imageFormat: \"png\" });\n\t\tthis._setRawDefault(\"jsonOptions\", { indent: 2, renameFields: true });\n\t\tthis._setRawDefault(\"csvOptions\", { separator: \",\", addColumnNames: true, emptyAs: \"\", addBOM: true });\n\t\tthis._setRawDefault(\"htmlOptions\", { emptyAs: \"-\", addColumnNames: true });\n\t\tthis._setRawDefault(\"xlsxOptions\", { emptyAs: \"\", addColumnNames: true });\n\t\tthis._setRawDefault(\"pdfOptions\", { fontSize: 14, imageFormat: \"png\", align: \"left\", addURL: true });\n\t\tthis._setRawDefault(\"pdfdataOptions\", { emptyAs: \"\", addColumnNames: true });\n\n\t\tthis._root.addDisposer(this);\n\t}\n\n\tpublic _beforeChanged() {\n\t\tsuper._beforeChanged();\n\n\t\tif (this.isDirty(\"menu\")) {\n\t\t\tconst menu = this.get(\"menu\");\n\t\t\tif (menu) {\n\t\t\t\tmenu.set(\"exporting\", this);\n\t\t\t\tthis._disposers.push(menu);\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected _getFormatOptions(format: ExportingFormats, options?: IExportingFormatOptions): IExportingFormatOptions {\n\t\tconst newOptions: any = $object.copy((<any>this).get(format + \"Options\", {}));\n\t\tif (options) {\n\t\t\t$object.each(options, (key, value) => {\n\t\t\t\tnewOptions[key] = value;\n\t\t\t});\n\t\t}\n\t\treturn newOptions;\n\t}\n\n\t/**\n\t * Triggers a download of the chart/data in specific format.\n\t *\n\t * @param format Format\n\t * @param customOptions Format options\n\t */\n\tpublic async download(format: ExportingFormats, customOptions?: IExportingFormatOptions) {\n\t\tconst ext = format == \"pdfdata\" ? \"pdf\" : format;\n\t\tconst fileName = this.get(\"filePrefix\", \"chart\") + \".\" + ext;\n\t\tconst options = this._getFormatOptions(format, customOptions);\n\t\tthis.events.dispatch(\"downloadstarted\", {\n\t\t\ttype: \"downloadstarted\",\n\t\t\tformat: format,\n\t\t\toptions: options,\n\t\t\tfileName: fileName,\n\t\t\ttarget: this\n\t\t});\n\t\tconst uri = await this.export(format, options);\n\t\tthis.streamFile(uri, fileName, (options && (<IExportingCSVOptions>options).addBOM));\n\t}\n\n\t/**\n\t * Triggers print of the chart.\n\t *\n\t * @param customOptions Print options\n\t */\n\tpublic async print(customOptions?: IExportingPrintOptions) {\n\t\tconst options = <IExportingPrintOptions>this._getFormatOptions(\"print\", customOptions);\n\t\tthis.events.dispatch(\"printstarted\", {\n\t\t\ttype: \"printstarted\",\n\t\t\tformat: \"print\",\n\t\t\toptions: options,\n\t\t\ttarget: this\n\t\t});\n\t\tconst uri = await this.export(options.imageFormat || \"png\", options);\n\t\tthis.initiatePrint(uri, options, this.get(\"title\"));\n\t}\n\n\t/**\n\t * Returns data uri of the chart/data in specific format.\n\t *\n\t * @param format Format\n\t * @param customOptions Format options\n\t * @return Promise\n\t */\n\tpublic async export(format: ExportingFormats, customOptions?: IExportingFormatOptions): Promise<string> {\n\t\tconst options = this._getFormatOptions(format, customOptions);\n\t\tthis.events.dispatch(\"exportstarted\", {\n\t\t\ttype: \"exportstarted\",\n\t\t\tformat: format,\n\t\t\toptions: options,\n\t\t\ttarget: this\n\t\t});\n\n\t\tlet promise: Promise<string> | string = \"\";\n\t\tswitch (format) {\n\t\t\tcase \"png\":\n\t\t\tcase \"jpg\":\n\t\t\t\tthis._root._runTickerNow();\n\t\t\t\tpromise = this.exportImage(format, options);\n\t\t\t\tbreak;\n\t\t\tcase \"json\":\n\t\t\t\tpromise = this.exportJSON(options);\n\t\t\t\tbreak;\n\t\t\tcase \"csv\":\n\t\t\t\tpromise = this.exportCSV(options);\n\t\t\t\tbreak;\n\t\t\tcase \"html\":\n\t\t\t\tpromise = this.exportHTML(options);\n\t\t\t\tbreak;\n\t\t\tcase \"xlsx\":\n\t\t\t\tpromise = this.exportXLSX(options);\n\t\t\t\tbreak;\n\t\t\tcase \"pdf\":\n\t\t\t\tthis._root._runTickerNow();\n\t\t\t\tpromise = this.exportPDF(options);\n\t\t\t\tbreak;\n\t\t\tcase \"pdfdata\":\n\t\t\t\tpromise = this.exportPDFData(options);\n\t\t\t\tbreak;\n\t\t}\n\t\tthis.events.dispatch(\"exportfinished\", {\n\t\t\ttype: \"exportfinished\",\n\t\t\tformat: format,\n\t\t\toptions: options,\n\t\t\ttarget: this\n\t\t});\n\t\treturn promise;\n\t}\n\n\t/**\n\t * ==========================================================================\n\t * Images\n\t * ==========================================================================\n\t */\n\n\t/**\n\t * Returns chart image as a data:uri.\n\t *\n\t * @param format Image format\n\t * @param customOptions Format options\n\t * @return Promise\n\t */\n\tpublic async exportImage(format: ExportingImageFormats, customOptions?: IExportingImageOptions): Promise<string> {\n\t\tconst options: any = this._getFormatOptions(format, customOptions);\n\t\tconst canvas = await this.getCanvas(options);\n\t\tconst data = canvas.toDataURL(this.getContentType(format), options.quality || 1);\n\t\tthis.disposeCanvas(canvas);\n\t\treturn data;\n\t}\n\n\t/**\n\t * Returns canvas data.\n\t *\n\t * @param customOptions Image options\n\t * @return Promise\n\t */\n\tpublic async exportCanvas(customOptions?: IExportingImageOptions): Promise<string> {\n\t\tconst options: any = this._getFormatOptions(\"canvas\", customOptions);\n\t\tconst canvas = await this.getCanvas(options);\n\t\tconst data = canvas.toDataURL(this.getContentType(\"canvas\"), options.quality || 1);\n\t\tthis.disposeCanvas(canvas);\n\t\treturn data;\n\t}\n\n\t/**\n\t * Returns a `<canvas>` element with snapshot of the chart.\n\t *\n\t * @param options Image options\n\t * @return Promise\n\t */\n\tpublic async getCanvas(options: IExportingImageOptions): Promise<HTMLCanvasElement> {\n\t\tconst mainCanvas = this._root._renderer.getCanvas(this._root._rootContainer._display, options);\n\t\tconst extraImages = this.get(\"extraImages\", []);\n\n\t\t// Add other canvases\n\t\tlet middleLeft = 0;\n\t\tlet middleTop = 0;\n\t\tlet middleWidth = mainCanvas.width;\n\t\tlet middleHeight = mainCanvas.height;\n\t\tlet extraRight = 0;\n\t\tlet extraBottom = 0;\n\n\t\tconst extras: any[] = [];\n\n\t\t$array.each(extraImages, (extraRoot) => {\n\n\t\t\t// Get that extra\n\t\t\tlet extra: IExportingImageSource;\n\n\t\t\tif (extraRoot instanceof Root) {\n\t\t\t\textra = {\n\t\t\t\t\tsource: extraRoot,\n\t\t\t\t\tposition: \"bottom\"\n\t\t\t\t};\n\n\t\t\t} else {\n\t\t\t\textra = <IExportingImageSource>extraRoot;\n\t\t\t}\n\n\t\t\t// Set defaults\n\t\t\textra.position = extra.position || \"bottom\";\n\t\t\textra.marginTop = extra.marginTop || 0;\n\t\t\textra.marginRight = extra.marginRight || 0;\n\t\t\textra.marginBottom = extra.marginBottom || 0;\n\t\t\textra.marginLeft = extra.marginLeft || 0;\n\n\t\t\tconst extraCanvas = extra.source._renderer.getCanvas(extra.source._rootContainer._display, options);\n\n\t\t\tconst extraWidth = extraCanvas.width + extra.marginLeft + extra.marginRight;\n\t\t\tconst extraHeight = extraCanvas.height + extra.marginTop + extra.marginBottom;\n\n\t\t\tif (extra.position == \"top\") {\n\t\t\t\tmiddleWidth = extra.crop ? middleHeight : Math.max(middleWidth, extraWidth);\n\t\t\t\tmiddleTop += extraHeight;\n\n\t\t\t} else if (extra.position == \"right\") {\n\t\t\t\tmiddleHeight = extra.crop ? middleHeight : Math.max(middleHeight, extraHeight);\n\t\t\t\textraRight += extraWidth;\n\n\t\t\t} else if (extra.position == \"left\") {\n\t\t\t\tmiddleHeight = extra.crop ? middleHeight : Math.max(middleHeight, extraHeight);\n\t\t\t\tmiddleLeft += extraWidth;\n\n\t\t\t} else if (extra.position === \"bottom\") {\n\t\t\t\tmiddleWidth = extra.crop ? middleHeight : Math.max(middleWidth, extraWidth);\n\t\t\t\textraBottom += extraHeight;\n\t\t\t}\n\n\t\t\textras.push({\n\t\t\t\tcanvas: extraCanvas,\n\t\t\t\tposition: extra.position,\n\t\t\t\tleft: extra.marginLeft,\n\t\t\t\ttop: extra.marginTop,\n\t\t\t\twidth: extraWidth,\n\t\t\t\theight: extraHeight\n\t\t\t});\n\n\t\t});\n\n\t\tconst newCanvas = this.getDisposableCanvas();\n\n\t\tnewCanvas.width = middleLeft + middleWidth + extraRight;\n\t\tnewCanvas.height = middleTop + middleHeight + extraBottom;\n\n\t\tconst ctx = newCanvas.getContext(\"2d\")!;\n\n\t\t// Get background\n\t\tconst background = this.get(\"backgroundColor\", this.findBackgroundColor(this._root.dom));\n\t\tconst backgroundOpacity = this.get(\"backgroundOpacity\", 1);\n\n\t\tif (background) {\n\t\t\tctx.fillStyle = background.toCSS(backgroundOpacity);\n\t\t\tctx.fillRect(0, 0, newCanvas.width, newCanvas.height);\n\t\t}\n\n\t\tlet left = middleLeft;\n\t\tlet top = middleTop;\n\t\tlet right = left + middleWidth;\n\t\tlet bottom = top + middleHeight;\n\n\t\t// Radiates outwards from center\n\t\t$array.each(extras, (extra) => {\n\t\t\tif (extra.position == \"top\") {\n\t\t\t\ttop -= extra.height;\n\t\t\t\tctx.drawImage(extra.canvas, middleLeft + extra.left, top + extra.top);\n\n\t\t\t} else if (extra.position == \"right\") {\n\t\t\t\tctx.drawImage(extra.canvas, right + extra.left, middleTop + extra.top);\n\t\t\t\tright += extra.width;\n\n\t\t\t} else if (extra.position == \"left\") {\n\t\t\t\tleft -= extra.width;\n\t\t\t\tctx.drawImage(extra.canvas, left + extra.left, middleTop + extra.top);\n\n\t\t\t} else if (extra.position === \"bottom\") {\n\t\t\t\tctx.drawImage(extra.canvas, middleLeft + extra.left, bottom + extra.top);\n\t\t\t\tbottom += extra.height;\n\t\t\t}\n\n\t\t\t//this.disposeCanvas(extra.canvas);\n\t\t});\n\n\t\tctx.drawImage(mainCanvas, middleLeft, middleTop);\n\n\t\treturn newCanvas;\n\t}\n\n\t/**\n\t * ==========================================================================\n\t * JSON\n\t * ==========================================================================\n\t */\n\n\t/**\n\t * Returns a data:uri representation of a JSON file with chart data.\n\t *\n\t * @param customOptions Format options\n\t * @return Promise\n\t */\n\tpublic async exportJSON(customOptions?: IExportingJSONOptions): Promise<string> {\n\t\treturn \"data:\" + this.getContentType(\"json\") + \";\" + this.get(\"charset\", \"utf-8\") + \",\" + encodeURIComponent(await this.getJSON(customOptions));\n\t}\n\n\t/**\n\t * Returns data in JSON format.\n\t *\n\t * @param customOptions Format options\n\t * @return Promise\n\t */\n\tpublic async getJSON(customOptions?: IExportingJSONOptions): Promise<string> {\n\t\tconst options: any = this._getFormatOptions(\"json\", customOptions);\n\t\treturn JSON.stringify(this.getData(\"json\", customOptions, options.renameFields), (_key, value) => {\n\t\t\tif ($type.isObject(value)) {\n\t\t\t\t$object.each(value, (field, item) => {\n\t\t\t\t\tvalue[field] = this.convertToSpecialFormat(field, item, options);\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn value;\n\t\t}, options.indent);\n\t}\n\n\t/**\n\t * ==========================================================================\n\t * CSV\n\t * ==========================================================================\n\t */\n\n\t/**\n\t * Returns a data:uri representation of a CSV file with chart data.\n\t *\n\t * @param customOptions Format options\n\t * @return Promise\n\t */\n\tpublic async exportCSV(customOptions?: IExportingCSVOptions): Promise<string> {\n\t\treturn \"data:\" + this.getContentType(\"csv\") + \";\" + this.get(\"charset\", \"utf-8\") + \",\" + encodeURIComponent(await this.getCSV(customOptions));\n\t}\n\n\t/**\n\t * Returns a CSV with export data.\n\t *\n\t * @param customOptions CSV options\n\t * @return Promise\n\t */\n\tpublic async getCSV(customOptions?: IExportingCSVOptions): Promise<string> {\n\t\tconst options: any = this._getFormatOptions(\"csv\", customOptions);\n\n\t\t// Init output\n\t\tlet csv = \"\";\n\n\t\t// Add rows\n\t\tlet br = \"\";\n\t\tconst data = this.getData(\"csv\", options);\n\n\t\t// Data fields\n\t\tconst dataFields = this.getDataFields(data);\n\n\t\t// Vertical or horizontal (default) layout\n\t\tif (options.pivot) {\n\n\t\t\t// Data fields order\n\t\t\tconst dataFieldsOrder: string[] = this.get(\"dataFieldsOrder\", []);\n\n\t\t\t$object.eachOrdered(dataFields, (key, val) => {\n\t\t\t\tlet dataRow = [];\n\t\t\t\tif (options.addColumnNames) {\n\t\t\t\t\tdataRow.push(val);\n\t\t\t\t}\n\t\t\t\tfor (let len = data.length, i = 0; i < len; i++) {\n\t\t\t\t\tlet dataValue = data[i][key];\n\t\t\t\t\tdataRow.push(this.convertToSpecialFormat(key, dataValue, options, true));\n\t\t\t\t}\n\t\t\t\tcsv += br + this.getCSVRow(dataRow, options, undefined, true);\n\t\t\t\tbr = \"\\n\";\n\t\t\t}, (a, b) => {\n\t\t\t\tlet ai = dataFieldsOrder.indexOf(a);\n\t\t\t\tlet bi = dataFieldsOrder.indexOf(b);\n\t\t\t\tif (ai > bi) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\telse if (ai < bi) {\n\t\t\t\t\treturn 1\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t});\n\n\t\t}\n\n\t\telse {\n\t\t\tfor (let len = data.length, i = 0; i < len; i++) {\n\t\t\t\tlet row = this.getCSVRow(data[i], options, dataFields);\n\t\t\t\tif (options.reverse) {\n\t\t\t\t\tcsv = row + br + csv;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tcsv += br + row;\n\t\t\t\t}\n\t\t\t\tbr = \"\\n\";\n\t\t\t}\n\n\t\t\t// Add column names?\n\t\t\tif (options.addColumnNames) {\n\t\t\t\tcsv = this.getCSVRow(dataFields, options, undefined, true) + br + csv;\n\t\t\t}\n\t\t}\n\n\t\treturn csv;\n\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic getCSVRow(row: any, options: IExportingCSVOptions, dataFields: any, asIs: boolean = false): string {\n\n\t\t// Init\n\t\tlet separator = options.separator || \",\";\n\t\tlet items: any[] = [];\n\n\t\t// Data fields\n\t\tif (!dataFields) {\n\t\t\tdataFields = {};\n\t\t\t$object.each(row, (key, value) => {\n\t\t\t\tdataFields[key] = value;\n\t\t\t});\n\t\t}\n\n\t\t// Data fields order\n\t\tconst dataFieldsOrder: string[] = this.get(\"dataFieldsOrder\", []);\n\n\t\t// Process each row item\n\t\t$object.eachOrdered(dataFields, (key, _name) => {\n\n\t\t\t// Get value\n\t\t\tlet value = this.convertEmptyValue(key, row[key], options);\n\n\t\t\t// Check if we need to skip\n\t\t\t// This is no longer required because we are iterating via dataFields anyway\n\t\t\t/*if (this.dataFields != null && this.dataFields[key] == null) {\n\t\t\t\treturn;\n\t\t\t}*/\n\n\t\t\t// Convert dates\n\t\t\tlet item = asIs ? value : this.convertToSpecialFormat(key, value, options);\n\n\t\t\t// Cast and escape doublequotes\n\t\t\titem = \"\" + item;\n\t\t\titem = item.replace(/\"/g, '\"\"');\n\n\t\t\t// Enclose into double quotes\n\t\t\tif (options.forceQuotes || (item.search(new RegExp(\"\\\"|\\n|\" + separator, \"g\")) >= 0)) {\n\t\t\t\titem = \"\\\"\" + item + \"\\\"\";\n\t\t\t}\n\n\t\t\t// Add to item\n\t\t\titems.push(item);\n\t\t}, (a, b) => {\n\t\t\tlet ai = dataFieldsOrder.indexOf(a);\n\t\t\tlet bi = dataFieldsOrder.indexOf(b);\n\t\t\tif (ai > bi) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\telse if (ai < bi) {\n\t\t\t\treturn -1\n\t\t\t}\n\t\t\treturn 0;\n\t\t});\n\n\t\treturn items.join(separator);\n\t}\n\n\t/**\n\t * ==========================================================================\n\t * HTML\n\t * ==========================================================================\n\t */\n\n\t/**\n\t * Returns a data:uri representation of an HTML file with chart data.\n\t *\n\t * @param customOptions Format options\n\t * @return Promise\n\t */\n\tpublic async exportHTML(customOptions?: IExportingHTMLOptions): Promise<string> {\n\t\treturn \"data:\" + this.getContentType(\"html\") + \";\" + this.get(\"charset\", \"utf-8\") + \",\" + encodeURIComponent(await this.getHTML(customOptions));\n\t}\n\n\t/**\n\t * Returns an HTML with a table with export data.\n\t *\n\t * @param customOptions HTML options\n\t * @return Promise\n\t */\n\tpublic async getHTML(customOptions?: IExportingHTMLOptions): Promise<string> {\n\t\tconst options: any = this._getFormatOptions(\"html\", customOptions);\n\n\t\t// Init output\n\t\tlet html = \"<table>\";\n\t\tif (options.tableClass) {\n\t\t\thtml = \"<table class=\\\"\" + options.tableClass + \"\\\">\";\n\t\t}\n\n\t\t// Get data\n\t\tconst data = this.getData(\"html\", options);\n\t\tconst dataFields = this.getDataFields(data);\n\n\t\t// Vertical or horizontal (default) layout\n\t\tif (options.pivot) {\n\n\t\t\t// Data fields order\n\t\t\tconst dataFieldsOrder: string[] = this.get(\"dataFieldsOrder\", []);\n\n\t\t\thtml += \"\\n<tbody>\";\n\n\t\t\t$object.eachOrdered(dataFields, (key, val) => {\n\t\t\t\tlet dataRow = [];\n\t\t\t\tif (options.addColumnNames) {\n\t\t\t\t\tdataRow.push(val);\n\t\t\t\t}\n\t\t\t\tfor (let len = data.length, i = 0; i < len; i++) {\n\t\t\t\t\tlet dataValue = data[i][key];\n\t\t\t\t\tdataRow.push(this.convertToSpecialFormat(key, dataValue, options, true));\n\t\t\t\t}\n\t\t\t\thtml += \"\\n\" + this.getHTMLRow(dataRow, options, undefined, true);\n\t\t\t}, (a, b) => {\n\t\t\t\tlet ai = dataFieldsOrder.indexOf(a);\n\t\t\t\tlet bi = dataFieldsOrder.indexOf(b);\n\t\t\t\tif (ai > bi) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\telse if (ai < bi) {\n\t\t\t\t\treturn 1\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t});\n\n\t\t\thtml += \"\\n</tbody>\";\n\n\t\t}\n\n\t\telse {\n\t\t\t// Add column names?\n\t\t\tif (options.addColumnNames) {\n\t\t\t\thtml += \"\\n<thead>\\n\" + this.getHTMLRow(dataFields, options, undefined, true, true) + \"\\n</thead>\";\n\t\t\t}\n\n\t\t\thtml += \"\\n<tbody>\";\n\n\t\t\tfor (let len = data.length, i = 0; i < len; i++) {\n\t\t\t\thtml += \"\\n\" + this.getHTMLRow(data[i], options, dataFields);\n\t\t\t}\n\n\t\t\thtml += \"\\n</tbody>\";\n\t\t}\n\n\t\thtml += \"\\n</table>\";\n\n\t\treturn html;\n\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic getHTMLRow(row: any, options: IExportingHTMLOptions, dataFields: any, asIs: boolean = false, headerRow: boolean = false): string {\n\n\t\t// Init output\n\t\tlet html = \"\\t<tr>\";\n\t\tif (options.rowClass) {\n\t\t\thtml = \"\\t<tr class=\\\"\" + options.rowClass + \"\\\">\";\n\t\t}\n\n\t\t// Data fields\n\t\tif (!dataFields) {\n\t\t\tdataFields = row;\n\t\t}\n\n\t\t// Data fields order\n\t\tconst dataFieldsOrder: string[] = this.get(\"dataFieldsOrder\", []);\n\n\t\t// th or dh?\n\t\tconst tag = headerRow ? \"th\" : \"td\";\n\n\t\t// Process each row item\n\t\tlet first = true;\n\t\t$object.eachOrdered(dataFields, (key, _name) => {\n\n\t\t\t// Get value\n\t\t\tlet value = this.convertEmptyValue(key, row[key], options);\n\n\t\t\t// Convert dates\n\t\t\tlet item = asIs ? value : this.convertToSpecialFormat(key, value, options);\n\n\t\t\t// Escape HTML entities\n\t\t\titem = \"\" + item;\n\t\t\titem = item.replace(/[\\u00A0-\\u9999<>\\&]/gim, function(i: string) {\n\t\t\t\treturn \"&#\" + i.charCodeAt(0) + \";\";\n\t\t\t});\n\n\t\t\t// Which tag to use\n\t\t\tlet useTag = tag;\n\t\t\tif (options.pivot && first) {\n\t\t\t\tuseTag = \"th\";\n\t\t\t}\n\n\t\t\t// Add cell\n\t\t\tif (options.cellClass) {\n\t\t\t\thtml += \"\\n\\t\\t<\" + useTag + \" class=\\\"\" + options.cellClass + \"\\\">\" + item + \"</\" + useTag + \">\";\n\t\t\t}\n\t\t\telse {\n\t\t\t\thtml += \"\\n\\t\\t<\" + useTag + \">\" + item + \"</\" + useTag + \">\";\n\t\t\t}\n\n\t\t\tfirst = false;\n\t\t}, (a, b) => {\n\t\t\tlet ai = dataFieldsOrder.indexOf(a);\n\t\t\tlet bi = dataFieldsOrder.indexOf(b);\n\t\t\tif (ai > bi) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\telse if (ai < bi) {\n\t\t\t\treturn -1\n\t\t\t}\n\t\t\treturn 0;\n\t\t});\n\n\t\thtml += \"\\n\\t</tr>\";\n\n\t\treturn html;\n\t}\n\n\t/**\n\t * ==========================================================================\n\t * XLSX\n\t * ==========================================================================\n\t */\n\n\t/**\n\t * Returns a data:uri representation of an XLSX file with chart data.\n\t *\n\t * @param customOptions Format options\n\t * @return Promise\n\t */\n\tpublic async exportXLSX(customOptions?: IExportingXLSXOptions): Promise<string> {\n\t\treturn \"data:\" + this.getContentType(\"xlsx\") + \";\" + this.get(\"charset\", \"utf-8\") + \",\" + encodeURIComponent(await this.getXLSX(customOptions));\n\t}\n\n\t/**\n\t * Returns a data:uri of XLSX data.\n\t *\n\t * @param customOptions Format options\n\t * @return Promise\n\t */\n\tpublic async getXLSX(customOptions?: IExportingXLSXOptions): Promise<string> {\n\n\t\tconst options: any = this._getFormatOptions(\"xlsx\", customOptions);\n\n\t\t// Load xlsx\n\t\tlet XLSX = await this.getXLSXLib();\n\n\t\t// Create workbook options\n\t\tlet wbOptions = {\n\t\t\tbookType: \"xlsx\",\n\t\t\tbookSST: false,\n\t\t\ttype: \"base64\",\n\t\t\t//dateNF: 'yyyy-mm-dd'\n\t\t};\n\n\t\t// Get sheet name\n\t\tlet sheetName = this._normalizeExcelSheetName(this.get(\"title\", this._t(\"Data\")));\n\n\t\t// Create a workbook\n\t\tlet wb = {\n\t\t\tSheetNames: <any>[sheetName],\n\t\t\tSheets: <any>{}\n\t\t};\n\n\t\t// Init worksheet data\n\t\tlet wsData: Array<any> = [];\n\n\t\t// Get data\n\t\tconst data = this.getData(\"html\", options);\n\t\tconst dataFields = this.getDataFields(data);\n\n\t\t// Vertical or horizontal (default) layout\n\t\tif (options.pivot) {\n\n\t\t\t// Data fields order\n\t\t\tconst dataFieldsOrder: string[] = this.get(\"dataFieldsOrder\", []);\n\n\t\t\t$object.eachOrdered(dataFields, (key, val) => {\n\t\t\t\tlet dataRow = [];\n\t\t\t\tif (options.addColumnNames) {\n\t\t\t\t\tdataRow.push(val);\n\t\t\t\t}\n\t\t\t\tfor (let len = data.length, i = 0; i < len; i++) {\n\t\t\t\t\tlet dataValue = data[i][key];\n\t\t\t\t\tdataRow.push(this.convertToSpecialFormat(key, dataValue, options, true));\n\t\t\t\t}\n\t\t\t\twsData.push(this.getXLSXRow(dataRow, options, undefined, true));\n\t\t\t}, (a, b) => {\n\t\t\t\tlet ai = dataFieldsOrder.indexOf(a);\n\t\t\t\tlet bi = dataFieldsOrder.indexOf(b);\n\t\t\t\tif (ai > bi) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\telse if (ai < bi) {\n\t\t\t\t\treturn -1\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t});\n\n\t\t}\n\n\t\telse {\n\t\t\t// Add column names?\n\t\t\tif (options.addColumnNames) {\n\t\t\t\twsData.push(this.getXLSXRow(dataFields, options, undefined, true));\n\t\t\t}\n\n\t\t\t// Add lines\n\t\t\tfor (let len = data.length, i = 0; i < len; i++) {\n\t\t\t\twsData.push(this.getXLSXRow(data[i], options, dataFields));\n\t\t\t}\n\t\t}\n\n\t\t// Create sheet and add data\n\t\twb.Sheets[sheetName] = XLSX.utils.aoa_to_sheet(wsData);\n\n\t\tthis.events.dispatch(\"workbookready\", {\n\t\t\ttype: \"workbookready\",\n\t\t\tformat: \"xlsx\",\n\t\t\toptions: options,\n\t\t\tworkbook: wb,\n\t\t\tworkbookOptions: wbOptions,\n\t\t\txlsx: XLSX,\n\t\t\ttarget: this\n\t\t});\n\n\t\treturn XLSX.write(wb, wbOptions);\n\t}\n\n\tprivate _normalizeExcelSheetName(name: string): string {\n\t\tname = name.replace(/([:\\\\\\/?*\\[\\]]+)/g, \" \");\n\t\treturn name.length > 30 ? name.substr(0, 30) + \"...\" : name;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic getXLSXRow(row: any, options: IExportingXLSXOptions, dataFields: any, asIs: boolean = false): any[] {\n\n\t\t// Init\n\t\tlet items: any[] = [];\n\n\t\t// Data fields\n\t\tif (!dataFields) {\n\t\t\tdataFields = row;\n\t\t}\n\n\t\t// Data fields order\n\t\tconst dataFieldsOrder: string[] = this.get(\"dataFieldsOrder\", []);\n\n\t\t// Process each row item\n\t\t$object.eachOrdered(dataFields, (key, _name) => {\n\n\t\t\t// Get value\n\t\t\tlet value = this.convertEmptyValue(key, row[key], options);\n\n\t\t\t// Convert dates\n\t\t\tlet item = asIs ? value : this.convertToSpecialFormat(key, value, options, true);\n\n\t\t\titems.push(item);\n\t\t}, (a, b) => {\n\t\t\tlet ai = dataFieldsOrder.indexOf(a);\n\t\t\tlet bi = dataFieldsOrder.indexOf(b);\n\t\t\tif (ai > bi) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\telse if (ai < bi) {\n\t\t\t\treturn -1\n\t\t\t}\n\t\t\treturn 0;\n\t\t});\n\n\t\treturn items;\n\t}\n\n\n\t/**\n\t * @ignore\n\t */\n\tprivate async _xlsx(): Promise<any> {\n\t\treturn await import(/* webpackChunkName: \"xlsx\" */ \"../../bundled/xlsx\");\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic getXLSXLib(): Promise<any> {\n\t\treturn this._xlsx();\n\t}\n\n\t/**\n\t * ==========================================================================\n\t * PDF\n\t * ==========================================================================\n\t */\n\n\t/**\n\t * Returns a data:uri representation of a PDF file with chart image.\n\t *\n\t * @param customOptions Format options\n\t * @return Promise\n\t */\n\tpublic async exportPDF(customOptions?: IExportingPDFOptions): Promise<string> {\n\t\treturn \"data:\" + this.getContentType(\"pdf\") + \";\" + this.get(\"charset\", \"utf-8\") + \",\" + encodeURIComponent(await this.getPDF(customOptions, true));\n\t}\n\n\t/**\n\t * Returns a data:uri representation of a PDF file with chart data.\n\t *\n\t * @param customOptions Format options\n\t * @return Promise\n\t */\n\tpublic async exportPDFData(customOptions?: IExportingDataOptions): Promise<string> {\n\t\treturn \"data:\" + this.getContentType(\"pdf\") + \";\" + this.get(\"charset\", \"utf-8\") + \",\" + encodeURIComponent(await this.getPDF(customOptions, false, true));\n\t}\n\n\t/**\n\t * Returns Base64-encoded binary data for a PDF file.\n\t * @param customOptions PDF options\n\t * @param includeImage Include chart snapshot\n\t * @param includeData Include data\n\t * @return Promise\n\t */\n\tpublic async getPDF(customOptions?: IExportingPDFOptions, includeImage: boolean = true, includeData: boolean = false): Promise<string> {\n\n\t\tconst options: any = this._getFormatOptions(\"pdf\", customOptions);\n\t\tconst dataOptions: any = this._getFormatOptions(\"pdfdata\", customOptions);\n\t\tconst orientation: \"landscape\" | \"portrait\" = options.pageOrientation || \"portrait\";\n\n\t\t// Get image\n\t\tlet image: string;\n\n\t\tconst imageSize = {\n\t\t\twidth: 0,\n\t\t\theight: 0\n\t\t};\n\n\t\tif (includeImage) {\n\t\t\tconst imageFormat = options.imageFormat || \"png\";\n\t\t\tconst imageOptions: any = this._getFormatOptions(imageFormat, options);\n\t\t\tconst canvas = await this.getCanvas(imageOptions);\n\t\t\timageSize.width = canvas.clientWidth;\n\t\t\timageSize.height = canvas.clientHeight;\n\t\t\timage = canvas.toDataURL(this.getContentType(imageFormat), options.quality || 1);\n\t\t\tthis.disposeCanvas(canvas);\n\t\t}\n\t\t// Load pdfmake\n\n\t\tconst pdfmake = await this.getPdfmake();\n\n\t\t// Defaults\n\t\tconst defaultMargins = [30, 30, 30, 30];\n\n\t\t// Init content for PDF\n\t\tlet doc = {\n\t\t\tpageSize: options.pageSize || \"A4\",\n\t\t\tpageOrientation: orientation,\n\t\t\tpageMargins: options.pageMargins || defaultMargins,\n\t\t\tdefaultStyle: {\n\t\t\t\tfont: options.font ? options.font.name : undefined\n\t\t\t},\n\t\t\t//header: <any>[],\n\t\t\tcontent: <any>[]\n\t\t};\n\n\t\t// Should we add title?\n\t\tconst title = this.get(\"title\");\n\n\t\tlet extraMargin = 0;\n\n\t\tif (title) {\n\t\t\tdoc.content.push({\n\t\t\t\ttext: title,\n\t\t\t\tfontSize: options.fontSize || 14,\n\t\t\t\tbold: true,\n\t\t\t\tmargin: [0, 0, 0, 15]\n\t\t\t});\n\n\t\t\t// Add some leftover margin for title\n\t\t\textraMargin += 50;\n\t\t}\n\n\t\t// Add page URL?\n\t\tif (options.addURL) {\n\t\t\tdoc.content.push({\n\t\t\t\ttext: this._t(\"Saved from\") + \": \" + document.location.href,\n\t\t\t\tfontSize: options.fontSize,\n\t\t\t\tmargin: [0, 0, 0, 15]\n\t\t\t});\n\n\t\t\t// Add some leftover margin for URL\n\t\t\textraMargin += 50;\n\t\t}\n\n\t\t// Add image\n\t\tif (includeImage && image!) {\n\t\t\tconst fitSize = this.getPageSizeFit(doc.pageSize, doc.pageMargins, extraMargin, orientation);\n\t\t\tif ((imageSize.width > fitSize[0]) || (imageSize.height > fitSize[1])) {\n\t\t\t\tdoc.content.push({\n\t\t\t\t\timage: image!,\n\t\t\t\t\talignment: options.align || \"left\",\n\t\t\t\t\tfit: fitSize\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdoc.content.push({\n\t\t\t\t\timage: image!,\n\t\t\t\t\talignment: options.align || \"left\"\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// Add data\n\t\tif ((includeData || options.includeData) && this.hasData()) {\n\t\t\tdoc.content.push({\n\t\t\t\ttable: await this.getPDFData(dataOptions),\n\t\t\t\tfontSize: options.fontSize || 14\n\t\t\t});\n\t\t}\n\n\t\tlet fonts: { [name: string]: { [types: string]: string } } | null = null;\n\t\tlet vfs: { [path: string]: string } | null = null;\n\n\t\tfunction addFont(font: IFont) {\n\t\t\tconst paths: { [path: string]: string } = {};\n\n\t\t\tpaths.normal = font.normal.path;\n\t\t\tvfs![font.normal.path] = font.normal.bytes;\n\n\t\t\tif (font.bold) {\n\t\t\t\tpaths.bold = font.bold.path;\n\t\t\t\tvfs![font.bold.path] = font.bold.bytes;\n\n\t\t\t} else {\n\t\t\t\tpaths.bold = font.normal.path;\n\t\t\t}\n\n\t\t\tif (font.italics) {\n\t\t\t\tpaths.italics = font.italics.path;\n\t\t\t\tvfs![font.italics.path] = font.italics.bytes;\n\n\t\t\t} else {\n\t\t\t\tpaths.italics = font.normal.path;\n\t\t\t}\n\n\t\t\tif (font.bolditalics) {\n\t\t\t\tpaths.bolditalics = font.bolditalics.path;\n\t\t\t\tvfs![font.bolditalics.path] = font.bolditalics.bytes;\n\n\t\t\t} else {\n\t\t\t\tpaths.bolditalics = font.normal.path;\n\t\t\t}\n\n\t\t\tfonts![font.name] = paths;\n\t\t}\n\n\t\tif (options.font) {\n\t\t\tfonts = {};\n\t\t\tvfs = {};\n\t\t\taddFont(options.font);\n\n\t\t\tif (options.extraFonts) {\n\t\t\t\t$array.each(options.extraFonts, addFont);\n\t\t\t}\n\t\t}\n\n\t\tthis.events.dispatch(\"pdfdocready\", {\n\t\t\ttype: \"pdfdocready\",\n\t\t\tformat: \"pdf\",\n\t\t\toptions: options,\n\t\t\tdoc: doc,\n\t\t\ttarget: this\n\t\t});\n\n\t\t// Create PDF\n\t\treturn new Promise<string>((success, _error) => {\n\t\t\tpdfmake.createPdf(doc, null, fonts, vfs).getBase64((uri: string) => {\n\t\t\t\tsuccess(uri);\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic async getPDFData(customOptions?: IExportingDataOptions): Promise<any> {\n\n\t\tconst options: any = this._getFormatOptions(\"pdfdata\", customOptions);\n\n\t\t// Init output\n\t\tlet content = <any>{\n\t\t\t\"body\": <any>[]\n\t\t};\n\n\t\t// Get data\n\t\tconst data = this.getData(\"html\", options);\n\t\tconst dataFields = this.getDataFields(data);\n\n\t\t// Vertical or horizontal (default) layout\n\t\tif (options.pivot) {\n\n\t\t\t// Data fields order\n\t\t\tconst dataFieldsOrder: string[] = this.get(\"dataFieldsOrder\", []);\n\n\t\t\t$object.eachOrdered(dataFields, (key, val) => {\n\t\t\t\tlet dataRow = [];\n\t\t\t\tif (options.addColumnNames) {\n\t\t\t\t\tdataRow.push(val);\n\t\t\t\t}\n\t\t\t\tfor (let len = data.length, i = 0; i < len; i++) {\n\t\t\t\t\tlet dataValue = data[i][key];\n\t\t\t\t\tdataRow.push(this.convertToSpecialFormat(key, dataValue, options, true));\n\t\t\t\t}\n\t\t\t\tcontent.body.push(this.getPDFDataRow(dataRow, options, undefined, true));\n\t\t\t}, (a, b) => {\n\t\t\t\tlet ai = dataFieldsOrder.indexOf(a);\n\t\t\t\tlet bi = dataFieldsOrder.indexOf(b);\n\t\t\t\tif (ai > bi) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\telse if (ai < bi) {\n\t\t\t\t\treturn -1\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t});\n\n\t\t}\n\n\t\telse {\n\n\t\t\t// Add column names?\n\t\t\tif (options.addColumnNames) {\n\t\t\t\tcontent.body.push(this.getPDFDataRow(dataFields, options, undefined, true));\n\t\t\t\tcontent.headerRows = 1;\n\t\t\t}\n\n\t\t\tfor (let len = data.length, i = 0; i < len; i++) {\n\t\t\t\tcontent.body.push(this.getPDFDataRow(data[i], options, dataFields));\n\t\t\t}\n\n\t\t}\n\n\t\treturn content;\n\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic getPDFDataRow(row: any, options: IExportingDataOptions, dataFields?: any, asIs: boolean = false): Array<string> {\n\n\t\t// Init\n\t\tlet items: any[] = [];\n\n\t\t// Data fields\n\t\tif (!dataFields) {\n\t\t\tdataFields = row;\n\t\t}\n\n\t\t// Data fields order\n\t\tconst dataFieldsOrder: string[] = this.get(\"dataFieldsOrder\", []);\n\n\t\t// Process each row item\n\t\t$object.eachOrdered(dataFields, (key, _name) => {\n\n\t\t\t// Get value\n\t\t\tlet value = this.convertEmptyValue(key, row[key], options);\n\n\t\t\t// Convert dates\n\t\t\tlet item = asIs ? value : this.convertToSpecialFormat(key, value, options);\n\t\t\titem = \"\" + item;\n\n\t\t\t// Add to item\n\t\t\titems.push(item);\n\t\t}, (a, b) => {\n\t\t\tlet ai = dataFieldsOrder.indexOf(a);\n\t\t\tlet bi = dataFieldsOrder.indexOf(b);\n\t\t\tif (ai > bi) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\telse if (ai < bi) {\n\t\t\t\treturn -1\n\t\t\t}\n\t\t\treturn 0;\n\t\t});\n\n\t\treturn items;\n\t}\n\n\t/**\n\t * Returns pdfmake instance.\n\t *\n\t * @ignore\n\t * @return Instance of pdfmake\n\t */\n\tpublic getPdfmake(): Promise<any> {\n\t\tif (pdfmakePromise === undefined) {\n\t\t\tpdfmakePromise = _pdfmake();\n\t\t}\n\n\t\treturn pdfmakePromise;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic getPageSizeFit(pageSize: pageSizes, margins: number | number[], extraMargin: number = 0, orientation: \"landscape\" | \"portrait\" = \"portrait\"): number[] {\n\n\t\t// Check margins\n\t\tlet newMargins = [0, 0, 0, 0];\n\t\tif ($type.isNumber(margins)) {\n\t\t\tnewMargins = [margins, margins, margins, margins];\n\t\t}\n\t\telse if (margins.length == 2) {\n\t\t\tnewMargins = [margins[0], margins[1], margins[0], margins[1]];\n\t\t}\n\t\telse if (margins.length == 4) {\n\t\t\tnewMargins = margins;\n\t\t}\n\n\t\t// Define available page sizes\n\t\tlet sizes = {\n\t\t\t\"4A0\": [4767.87, 6740.79],\n\t\t\t\"2A0\": [3370.39, 4767.87],\n\t\t\tA0: [2383.94, 3370.39],\n\t\t\tA1: [1683.78, 2383.94],\n\t\t\tA2: [1190.55, 1683.78],\n\t\t\tA3: [841.89, 1190.55],\n\t\t\tA4: [595.28, 841.89],\n\t\t\tA5: [419.53, 595.28],\n\t\t\tA6: [297.64, 419.53],\n\t\t\tA7: [209.76, 297.64],\n\t\t\tA8: [147.40, 209.76],\n\t\t\tA9: [104.88, 147.40],\n\t\t\tA10: [73.70, 104.88],\n\t\t\tB0: [2834.65, 4008.19],\n\t\t\tB1: [2004.09, 2834.65],\n\t\t\tB2: [1417.32, 2004.09],\n\t\t\tB3: [1000.63, 1417.32],\n\t\t\tB4: [708.66, 1000.63],\n\t\t\tB5: [498.90, 708.66],\n\t\t\tB6: [354.33, 498.90],\n\t\t\tB7: [249.45, 354.33],\n\t\t\tB8: [175.75, 249.45],\n\t\t\tB9: [124.72, 175.75],\n\t\t\tB10: [87.87, 124.72],\n\t\t\tC0: [2599.37, 3676.54],\n\t\t\tC1: [1836.85, 2599.37],\n\t\t\tC2: [1298.27, 1836.85],\n\t\t\tC3: [918.43, 1298.27],\n\t\t\tC4: [649.13, 918.43],\n\t\t\tC5: [459.21, 649.13],\n\t\t\tC6: [323.15, 459.21],\n\t\t\tC7: [229.61, 323.15],\n\t\t\tC8: [161.57, 229.61],\n\t\t\tC9: [113.39, 161.57],\n\t\t\tC10: [79.37, 113.39],\n\t\t\tRA0: [2437.80, 3458.27],\n\t\t\tRA1: [1729.13, 2437.80],\n\t\t\tRA2: [1218.90, 1729.13],\n\t\t\tRA3: [864.57, 1218.90],\n\t\t\tRA4: [609.45, 864.57],\n\t\t\tSRA0: [2551.18, 3628.35],\n\t\t\tSRA1: [1814.17, 2551.18],\n\t\t\tSRA2: [1275.59, 1814.17],\n\t\t\tSRA3: [907.09, 1275.59],\n\t\t\tSRA4: [637.80, 907.09],\n\t\t\tEXECUTIVE: [521.86, 756.00],\n\t\t\tFOLIO: [612.00, 936.00],\n\t\t\tLEGAL: [612.00, 1008.00],\n\t\t\tLETTER: [612.00, 792.00],\n\t\t\tTABLOID: [792.00, 1224.00]\n\t\t};\n\n\t\t// Calculate size\n\t\tlet fitSize = sizes[pageSize];\n\t\tif (orientation == \"landscape\") {\n\t\t\tfitSize.reverse();\n\t\t}\n\t\tfitSize[0] -= newMargins[0] + newMargins[2];\n\t\tfitSize[1] -= newMargins[1] + newMargins[3] + extraMargin;\n\t\treturn fitSize;\n\t}\n\n\t/**\n\t * ==========================================================================\n\t * Data\n\t * ==========================================================================\n\t */\n\n\t/**\n\t\t* Returns `true` if `dataSource` is set, and the contents are proper\n\t\t* data (array).\n\t\t*\n\t\t* @return Has data?\n\t\t*/\n\tpublic hasData(): boolean {\n\t\tconst dataSource = this.get(\"dataSource\");\n\t\treturn $type.isArray(dataSource) && dataSource.length ? true : false;\n\t}\n\n\t/**\n\t * Returns processed data according to format options.\n\t *\n\t * @param format Format\n\t * @param customOptions Format options\n\t * @param renameFields Should fields be renamed?\n\t * @return Processed data\n\t */\n\tpublic getData(format: ExportingFormats, customOptions?: IExportingDataOptions, renameFields: boolean = false): any {\n\t\tconst options: any = this._getFormatOptions(format, customOptions);\n\t\tconst dataSource = this.get(\"dataSource\", []);\n\t\tlet data: any = dataSource;\n\n\t\t// Re-generate the data based on data fields if set\n\t\tconst dataFields = this.get(\"dataFields\");\n\t\tif (dataFields && $type.isArray(dataSource)) {\n\t\t\tdata = [];\n\t\t\t$array.each(dataSource, (row) => {\n\t\t\t\tif ($type.isObject(row)) {\n\t\t\t\t\tconst newRow: any = {}\n\t\t\t\t\t$object.each(dataFields, (field, value) => {\n\t\t\t\t\t\tif (dataFields![field] != null) {\n\t\t\t\t\t\t\tnewRow[renameFields ? value : field] = this.convertToSpecialFormat(field, row[field], options);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tdata.push(newRow);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tconst event: any = {\n\t\t\ttype: \"dataprocessed\",\n\t\t\tformat: format,\n\t\t\toptions: options,\n\t\t\tdata: data,\n\t\t\ttarget: this\n\t\t};\n\n\t\tthis.events.dispatch(\"dataprocessed\", event);\n\n\t\treturn event.data;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic getDataFields(data: any): { [index: string]: string } {\n\t\tlet dataFields = this.get(\"dataFields\");\n\t\tif (!dataFields) {\n\t\t\tdataFields = {};\n\t\t\tif ($type.isArray(data) && data.length) {\n\t\t\t\t$array.each(data, (row) => {\n\t\t\t\t\t$object.each(row, (key, _value) => {\n\t\t\t\t\t\tif (dataFields![key] == null) {\n\t\t\t\t\t\t\tdataFields![key] = key;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn dataFields!;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic convertEmptyValue(_field: string, value: any, options: IExportingDataOptions): any {\n\t\treturn value != null ? value : options.emptyAs;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic convertToSpecialFormat(field: any, value: any, options: IExportingDataOptions, keepOriginal?: boolean): any {\n\n\t\t// Is this a timestamp or duration?\n\t\tif (typeof value == \"number\") {\n\t\t\tif (this.isDateField(field)) {\n\t\t\t\tvalue = new Date(value);\n\t\t\t}\n\t\t\telse if (this.isNumericField(field) && this.get(\"numberFormat\")) {\n\t\t\t\treturn this._root.numberFormatter.format(value, this.get(\"numberFormat\"));\n\t\t\t}\n\t\t\telse if (this.isDurationField(field)) {\n\t\t\t\treturn this._root.durationFormatter.format(value, this.get(\"durationFormat\"), this.get(\"durationUnit\"));\n\t\t\t}\n\t\t}\n\n\t\tif (value instanceof Date) {\n\t\t\tif (options.useTimestamps) {\n\t\t\t\tvalue = value.getTime();\n\t\t\t}\n\t\t\telse if (options.useLocale) {\n\t\t\t\tif (!keepOriginal) {\n\t\t\t\t\tvalue = value.toLocaleString();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvalue = this._root.dateFormatter.format(value, this.get(\"dateFormat\"));\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic isDateField(field: string): boolean {\n\t\treturn this.get(\"dateFields\")!.indexOf(field) !== -1;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic isNumericField(field: string): boolean {\n\t\treturn this.get(\"numericFields\")!.indexOf(field) !== -1;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic isDurationField(field: string): boolean {\n\t\treturn this.get(\"durationFields\")!.indexOf(field) !== -1;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic getContentType(type: ExportingFormats): string {\n\t\tlet contentType = \"\";\n\t\tswitch (type) {\n\t\t\tcase \"png\":\n\t\t\t\tcontentType = \"image/\" + type;\n\t\t\t\tbreak;\n\t\t\tcase \"jpg\":\n\t\t\t\tcontentType = \"image/jpeg\";\n\t\t\t\tbreak;\n\t\t\tcase \"csv\":\n\t\t\t\tcontentType = \"text/csv\";\n\t\t\t\tbreak;\n\t\t\tcase \"json\":\n\t\t\t\tcontentType = \"application/json\";\n\t\t\t\tbreak;\n\t\t\tcase \"html\":\n\t\t\t\tcontentType = \"text/html\";\n\t\t\t\tbreak;\n\t\t\tcase \"pdf\":\n\t\t\tcase \"pdfdata\":\n\t\t\t\tcontentType = \"application/pdf\";\n\t\t\t\tbreak;\n\t\t\tcase \"xlsx\":\n\t\t\t\tcontentType = \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tcontentType = \"application/octet-stream\";\n\t\t}\n\n\t\treturn contentType;\n\t}\n\n\tprotected getDisposableCanvas(): HTMLCanvasElement {\n\t\tlet canvas = document.createElement(\"canvas\");\n\t\tcanvas.style.position = \"fixed\";\n\t\tcanvas.style.top = \"-10000px\";\n\t\tthis._root.dom.appendChild(canvas);\n\t\treturn canvas;\n\t}\n\n\tprotected disposeCanvas(canvas: HTMLCanvasElement): void {\n\t\tthis._root.dom.removeChild(canvas);\n\t}\n\n\n\t/**\n\t * @ignore\n\t */\n\tpublic findBackgroundColor(element: Element): Color {\n\n\t\t// Check if element has styles set\n\t\tlet opacity = 1;\n\t\tlet currentColor = getComputedStyle(element, \"background-color\").getPropertyValue(\"background-color\");\n\n\t\t// Check opacity\n\t\tif (currentColor.match(/[^,]*,[^,]*,[^,]*,[ ]?0/) || currentColor == \"transparent\") {\n\t\t\topacity = 0;\n\t\t}\n\n\t\tif (opacity == 0) {\n\t\t\tlet parent = element.parentElement;// || <Element>element.parentNode;\n\n\t\t\t// Completely transparent. Look for a parent\n\t\t\tif (parent) {\n\t\t\t\treturn this.findBackgroundColor(parent);\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn Color.fromHex(0xffffff);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\treturn Color.fromCSS(currentColor);\n\t\t}\n\n\t}\n\n\t/**\n\t * Triggers download of the file.\n\t *\n\t * @param uri data:uri with file content\n\t * @param fileName File name\n\t * @param addBOM Should download include byte order mark?\n\t * @return Promise\n\t */\n\tpublic streamFile(uri: string, fileName: string, addBOM: boolean = false): boolean {\n\n\t\tif (this.blobDownloadSupport()) {\n\n\t\t\t/**\n\t\t\t * Supports Blob object.\n\t\t\t * Use it.\n\t\t\t */\n\t\t\tlet link = document.createElement(\"a\");\n\t\t\tlink.download = fileName;\n\t\t\tdocument.body.appendChild(link);\n\n\t\t\t// Extract content type and get pure data without headers\n\t\t\tlet parts = uri.split(\";\");\n\t\t\tlet contentType = parts!.shift()!.replace(/data:/, \"\");\n\n\t\t\turi = decodeURIComponent(parts.join(\";\").replace(/^[^,]*,/, \"\"));\n\n\t\t\tif ([\"image/svg+xml\", \"application/json\", \"text/csv\", \"text/html\"].indexOf(contentType) == -1) {\n\t\t\t\ttry {\n\t\t\t\t\tlet decoded = atob(uri);\n\t\t\t\t\turi = decoded;\n\t\t\t\t} catch (e) {\n\t\t\t\t\t// Error occurred, meaning string was not Base64-encoded. Do nothing.\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (addBOM) {\n\t\t\t\t\turi = \"\\ufeff\" + uri;\n\t\t\t\t}\n\t\t\t\tlet blob = new Blob([uri], { type: contentType });\n\t\t\t\tlet url = window.URL.createObjectURL(blob);\n\t\t\t\tlink.href = url;\n\t\t\t\tlink.download = fileName;\n\t\t\t\tlink.click();\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tdocument.body.removeChild(link);\n\t\t\t\t\twindow.URL.revokeObjectURL(url);\n\t\t\t\t}, 100);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Dissect uri into array\n\t\t\tlet chars = new Array(uri.length);\n\t\t\tfor (let i = 0; i < uri.length; ++i) {\n\t\t\t\tlet charCode = uri.charCodeAt(i);\n\t\t\t\tchars[i] = charCode;\n\t\t\t}\n\n\t\t\tif (addBOM) {\n\t\t\t\tchars = [0xEF, 0xBB, 0xBF].concat(chars);\n\t\t\t}\n\t\t\tlet blob = new Blob([new Uint8Array(chars)], { type: contentType });\n\t\t\tlet url = window.URL.createObjectURL(blob);\n\t\t\tlink.href = url;\n\t\t\tlink.download = fileName;\n\t\t\tdocument.body.appendChild(link);\n\t\t\tlink.click();\n\t\t\tdocument.body.removeChild(link);\n\t\t\tsetTimeout(() => {\n\t\t\t\twindow.URL.revokeObjectURL(url);\n\t\t\t}, 100);\n\n\t\t}\n\n\t\telse if (this.linkDownloadSupport()) {\n\n\t\t\t/**\n\t\t\t * For regular browsers, we create a link then simulate a click on it\n\t\t\t */\n\n\t\t\tlet link = document.createElement(\"a\");\n\t\t\tlink.download = fileName;\n\t\t\tlink.href = uri;\n\t\t\tdocument.body.appendChild(link);\n\t\t\tlink.click();\n\t\t\tdocument.body.removeChild(link);\n\n\t\t}\n\t\telse {\n\n\t\t\t/**\n\t\t\t * Something else - perhaps a mobile.\n\t\t\t * Let's just display it in the same page.\n\t\t\t * (hey we don't like it either)\n\t\t\t */\n\t\t\twindow.location.href = uri;\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic downloadSupport(): boolean {\n\t\treturn this.linkDownloadSupport();\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic linkDownloadSupport(): boolean {\n\t\tlet a = document.createElement(\"a\");\n\t\tlet res = typeof a.download !== \"undefined\";\n\t\treturn res;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic blobDownloadSupport(): boolean {\n\t\treturn window.Blob != null;\n\t}\n\n\n\t/**\n\t * ==========================================================================\n\t * Print\n\t * ==========================================================================\n\t */\n\n\t/**\n\t * Initiates print of the chart.\n\t *\n\t * @param data data:uri for the image\n\t * @param options Options\n\t * @param title Optional title to use (uses window's title by default)\n\t * @return Promise\n\t */\n\tpublic initiatePrint(data: string, customOptions?: IExportingPrintOptions, title?: string): void {\n\t\tconst options = <IExportingPrintOptions>this._getFormatOptions(\"print\", customOptions);\n\t\tif (options.printMethod == \"css\") {\n\t\t\tthis._printViaCSS(data, options, title);\n\t\t}\n\t\telse {\n\t\t\tthis._printViaIframe(data, options, title);\n\t\t}\n\n\t}\n\n\tprotected _printViaCSS(data: string, customOptions?: IExportingPrintOptions, title?: string): void {\n\t\tconst options = <IExportingPrintOptions>this._getFormatOptions(\"print\", customOptions);\n\t\tlet delay = options.delay || 500;\n\n\t\t//Save current scroll position\n\t\tlet scroll = document.documentElement.scrollTop || document.body.scrollTop;\n\n\t\t// Hide all document nodes by applying custom CSS\n\t\tlet rule = new StyleRule($utils.getShadowRoot(this._root.dom), \"body > *\", {\n\t\t\t\"display\": \"none\",\n\t\t\t\"position\": \"fixed\",\n\t\t\t\"visibility\": \"hidden\",\n\t\t\t\"opacity\": \"0\",\n\t\t\t\"clipPath\": \"polygon(0px 0px,0px 0px,0px 0px,0px 0px);\"\n\t\t}, this._root.nonce);\n\n\t\tlet rule2 = new StyleRule($utils.getShadowRoot(this._root.dom), \"body\", {\n\t\t\t\"padding\": \"0\",\n\t\t\t\"margin\": \"0\"\n\t\t}, this._root.nonce);\n\n\t\t// Replace title?\n\t\tlet originalTitle: string;\n\t\tif (title && document && document.title) {\n\t\t\toriginalTitle = document.title;\n\t\t\tdocument.title = title;\n\t\t}\n\n\t\t// Create and add exported image\n\t\tlet img = new Image();\n\t\timg.src = data;\n\t\timg.style.maxWidth = \"100%\";\n\t\timg.style.display = \"block\";\n\t\timg.style.position = \"relative\";\n\t\timg.style.visibility = \"visible\";\n\t\timg.style.opacity = \"1\";\n\t\timg.style.clipPath = \"none\";\n\t\tdocument.body.appendChild(img);\n\n\t\t// Print\n\t\tthis.setTimeout(() => {\n\t\t\t(<any>window).print();\n\t\t}, 50);\n\n\t\t// Delay needs to be at least a second for iOS devices\n\t\tlet isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !(<any>window).MSStream;\n\t\tif (isIOS && (delay < 1000)) {\n\t\t\tdelay = 1000;\n\t\t}\n\t\telse if (delay < 100) {\n\t\t\tdelay = 100;\n\t\t}\n\n\t\t// Delay function that resets back the document the way ot was before\n\t\tthis.setTimeout(() => {\n\n\t\t\t// Remove image\n\t\t\tdocument.body.removeChild(img);\n\n\t\t\t// Reset back all elements\n\t\t\trule.dispose();\n\t\t\trule2.dispose();\n\n\t\t\t// Restore title\n\t\t\tif (originalTitle) {\n\t\t\t\tdocument.title = document.title;\n\t\t\t}\n\n\t\t\t// Scroll back the document the way it was before\n\t\t\tdocument.documentElement.scrollTop = document.body.scrollTop = scroll;\n\n\t\t}, delay || 500);\n\n\t}\n\n\tprotected _printViaIframe(data: string, customOptions?: IExportingPrintOptions, title?: string): void {\n\t\tconst options = <IExportingPrintOptions>this._getFormatOptions(\"print\", customOptions);\n\t\tlet delay = options.delay || 500;\n\n\t\t// Create an iframe\n\t\tconst iframe = document.createElement(\"iframe\");\n\t\tiframe.style.visibility = \"hidden\";\n\t\tdocument.body.appendChild(iframe);\n\n\t\t// This is needed for FireFox\n\t\tiframe.contentWindow!.document.open();\n\t\tiframe.contentWindow!.document.close();\n\n\t\t// Create and add exported image\n\t\tlet img = new Image();\n\t\timg.src = data;\n\t\timg.style.maxWidth = \"100%\";\n\t\timg.style.height = \"auto\";\n\t\tif (title) {\n\t\t\tiframe.contentWindow!.document.title = title;\n\t\t}\n\t\tiframe.contentWindow!.document.body.appendChild(img);\n\n\t\t(<any>iframe).load = function() {\n\t\t\tiframe.contentWindow!.document.body.appendChild(img);\n\t\t};\n\n\t\t// Print\n\t\tthis.setTimeout(() => {\n\t\t\ttry {\n\t\t\t\tif (!(<any>iframe).contentWindow.document.execCommand(\"print\", false, null)) {\n\t\t\t\t\t(<any>iframe).contentWindow.print();\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t(<any>iframe).contentWindow.print();\n\t\t\t}\n\t\t}, delay || 50);\n\n\t\t// Delay needs to be at least a second for iOS devices\n\t\tlet isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !(<any>window).MSStream;\n\t\tif (isIOS && (delay < 1000)) {\n\t\t\tdelay = 1000;\n\t\t}\n\t\telse if (delay < 100) {\n\t\t\tdelay = 100;\n\t\t}\n\n\t\t// Delay function that resets back the document the way ot was before\n\t\tthis.setTimeout(() => {\n\n\t\t\t// Remove image\n\t\t\tdocument.body.removeChild(iframe);\n\n\t\t}, delay + 50 || 100);\n\n\t}\n\n\t/**\n\t * Returns a list of formats that can be exported in current browser.\n\t *\n\t * @return Formats\n\t */\n\tpublic supportedFormats(): ExportingFormats[] {\n\t\tconst res: ExportingFormats[] = [];\n\t\tconst hasData = this.hasData();\n\t\tconst downloadSupport = this.downloadSupport();\n\t\t$array.each(<ExportingFormats[]>[\"png\", \"jpg\", \"canvas\", \"pdf\", \"xlsx\", \"csv\", \"json\", \"html\", \"pdfdata\", \"print\"], (format) => {\n\t\t\tconst options = this._getFormatOptions(format);\n\t\t\tif (options.disabled !== true) {\n\t\t\t\tif ([\"xlsx\", \"csv\", \"json\", \"html\", \"pdfdata\"].indexOf(format) == -1 || (hasData && downloadSupport)) {\n\t\t\t\t\tres.push(<ExportingFormats>format);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn res;\n\t}\n\n\t/**\n\t * Returns a list of supported export types: image or print.\n\t *\n\t * @return Supported types\n\t */\n\tpublic supportedExportTypes(): ExportingTypes[] {\n\t\tconst res: ExportingTypes[] = [\"image\", \"print\"];\n\t\tif (this.downloadSupport() && this.hasData()) {\n\t\t\tres.push(\"data\");\n\t\t}\n\t\treturn res;\n\t}\n\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Exporting.js","sourceRoot":"","sources":["../../../../../src/.internal/plugins/exporting/Exporting.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExportingMenu } from \"./ExportingMenu\"\nimport type { TimeUnit } from \"../../core/util/Time\";\n\nimport { Entity, IEntitySettings, IEntityPrivate, IEntityEvents } from \"../../core/util/Entity\"\nimport { Color } from \"../../core/util/Color\";\nimport { Root } from \"../../core/Root\"\nimport { StyleRule } from \"../../core/util/Utils\"\n\nimport * as $array from \"../../core/util/Array\";\nimport * as $object from \"../../core/util/Object\";\nimport * as $type from \"../../core/util/Type\";\nimport * as $utils from \"../../core/util/Utils\";\n\nexport interface IFile {\n\tpath: string;\n\tbytes: string;\n}\n\nexport interface IFont {\n\tname: string;\n\tnormal: IFile;\n\tbold?: IFile;\n\titalics?: IFile;\n\tbolditalics?: IFile;\n}\n\n/**\n * This is used to cache the pdfmake loading.\n *\n * @ignore\n */\nlet pdfmakePromise: Promise<any>;\n\n/**\n * Loads pdfmake dynamic module\n *\n * This is an asynchronous function. Check the description of `getImage()`\n * for description and example usage.\n *\n * @ignore\n */\nasync function _pdfmake(): Promise<any> {\n\tlet a = await Promise.all([\n\t\timport(/* webpackChunkName: \"pdfmake\" */ \"pdfmake/build/pdfmake.js\"),\n\t\timport(/* webpackChunkName: \"pdfmake\" */ \"./pdfmake/vfs_fonts\")\n\t]);\n\n\tlet pdfmake = a[0].default;\n\tlet vfs_fonts = a[1].default;\n\n\t// pdfmake 0.3+ no longer reads a plain `vfs` assignment; the virtual file\n\t// system must be registered through `addVirtualFileSystem()`. The default\n\t// Roboto font definition is already set up by pdfmake itself.\n\tpdfmake.addVirtualFileSystem(vfs_fonts);\n\treturn pdfmake;\n}\n\nexport type ExportingTypes = \"image\" | \"data\" | \"print\";\nexport type ExportingFormats = \"png\" | \"jpg\" | \"canvas\" | \"pdf\" | \"xlsx\" | \"csv\" | \"json\" | \"html\" | \"pdfdata\" | \"print\";\nexport type ExportingImageFormats = \"png\" | \"jpg\";\n\nexport interface IExportingImageSource {\n\n\t/**\n\t * A root object of an extra chart to add in export.\n\t */\n\tsource: Root;\n\n\t/**\n\t * Top margin in pixels.\n\t */\n\tmarginTop?: number;\n\n\t/**\n\t * Right margin in pixels.\n\t */\n\tmarginRight?: number;\n\n\t/**\n\t * Bottom margin in pixels.\n\t */\n\tmarginBottom?: number;\n\n\t/**\n\t * Left margin in pixels.\n\t */\n\tmarginLeft?: number;\n\n\t/**\n\t * Position to place extra image in relation to the main chart.\n\t *\n\t * @default \"bottom\"\n\t */\n\tposition?: \"left\" | \"right\" | \"top\" | \"bottom\";\n\n\t/**\n\t * Crop extra image if it's larger than the main chart.\n\t */\n\tcrop?: boolean;\n\n}\n\nexport interface IExportingSettings extends IEntitySettings {\n\n\t/**\n\t * A reference to [[ExportingMenu]] object.\n\t */\n\tmenu?: ExportingMenu;\n\n\t/**\n\t * Export will try to determine background color based on the DOM styles.\n\t *\n\t * You can use this setting to explicitly specify background color for\n\t * exported images.\n\t */\n\tbackgroundColor?: Color;\n\n\t/**\n\t * Opacity of the exported image background.\n\t *\n\t * * 0 - fully transparent.\n\t * * 1 - fully opaque (default).\n\t *\n\t * NOTE: some image formats like JPEG do not support transparency.\n\t *\n\t * @since 5.2.34\n\t */\n\tbackgroundOpacity?: number;\n\n\t/**\n\t * A string to prefix exported files with.\n\t *\n\t * @default \"chart\"\n\t */\n\tfilePrefix?: string;\n\n\t/**\n\t * Chart title. Used for print, PDF and Excel exports.\n\t */\n\ttitle?: string;\n\n\t/**\n\t * Charset to use for export.\n\t *\n\t * @default \"utf-8\"\n\t */\n\tcharset?: string;\n\n\t/**\n\t * Fields to include in data export.\n\t *\n\t * Key - field in data.\n\t * Value - column name.\n\t */\n\tdataFields?: { [index: string]: string },\n\n\t/**\n\t * Specifies the order of fields to export in data.\n\t */\n\tdataFieldsOrder?: string[],\n\n\t/**\n\t * Fields in data that are numeric.\n\t */\n\tnumericFields?: string[],\n\n\t/**\n\t * Use this number format on numeric values.\n\t */\n\tnumberFormat?: string | Intl.NumberFormatOptions,\n\n\t/**\n\t * Fields in data that have date/time value.\n\t */\n\tdateFields?: string[],\n\n\t/**\n\t * Use this date format on date values.\n\t */\n\tdateFormat?: string | Intl.DateTimeFormatOptions,\n\n\t/**\n\t * Fields in data that need to be formatted as \"duration\" as per `durationFormat`.\n\t *\n\t * @since 5.0.16\n\t */\n\tdurationFields?: string[],\n\n\t/**\n\t * Format to use when formatting values in `durationFields`.\n\t *\n\t * If not set, will use `durationFormat` as set in [[DurationFormatter]] of\n\t * the root element.\n\t *\n\t * @since 5.0.16\n\t */\n\tdurationFormat?: string,\n\n\t/**\n\t * Time unit to assume duration values are in.\n\t *\n\t * If not set, will use `baseUnit` as set in [[DurationFormatter]] of\n\t * the root element.\n\t *\n\t * @since 5.0.16\n\t */\n\tdurationUnit?: TimeUnit;\n\n\t/**\n\t * Include these images or other charts in image exports.\n\t */\n\textraImages?: Array<Root | IExportingImageSource>;\n\n\t/**\n\t * Data to export.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/exporting/#Exporting_data} for more info\n\t */\n\tdataSource?: any;\n\n\t/**\n\t * PNG format options.\n\t */\n\tpngOptions?: IExportingImageOptions;\n\n\t/**\n\t * JPEG format options.\n\t */\n\tjpgOptions?: IExportingImageOptions;\n\n\t/**\n\t * Canvas format options.\n\t */\n\tcanvasOptions?: IExportingImageOptions;\n\n\t/**\n\t * PDF format options.\n\t */\n\tpdfOptions?: IExportingPDFOptions;\n\n\t/**\n\t * PDF with data table format options.\n\t */\n\tpdfdataOptions?: IExportingDataOptions;\n\n\t/**\n\t * XSLX format options.\n\t */\n\txlsxOptions?: IExportingXLSXOptions;\n\n\t/**\n\t * CSV format options.\n\t */\n\tcsvOptions?: IExportingCSVOptions;\n\n\t/**\n\t * JSON format options.\n\t */\n\tjsonOptions?: IExportingJSONOptions;\n\n\t/**\n\t * HTML format options.\n\t */\n\thtmlOptions?: IExportingHTMLOptions;\n\n\t/**\n\t * Print options.\n\t */\n\tprintOptions?: IExportingPrintOptions;\n\n}\n\nexport interface IExportingPrivate extends IEntityPrivate {\n}\n\nexport interface IExportEvent {\n\n\t/**\n\t * Format.\n\t */\n\tformat: ExportingFormats,\n\n\t/**\n\t * Format options.\n\t */\n\toptions: IExportingFormatOptions\n\n}\n\nexport interface IExportingEvents extends IEntityEvents {\n\n\t/**\n\t * Invoked when export starts.\n\t */\n\texportstarted: IExportEvent;\n\n\t/**\n\t * Invoked when export finishes.\n\t */\n\texportfinished: IExportEvent;\n\n\t/**\n\t * Invoked when download of the export starts.\n\t */\n\tdownloadstarted: IExportEvent & {\n\t\tfileName: string,\n\t};\n\n\t/**\n\t * Invoked when print starts.\n\t */\n\tprintstarted: IExportEvent;\n\n\t/**\n\t * Invoked when data finishes pre-processing for export.\n\t */\n\tdataprocessed: IExportEvent & {\n\t\tdata: any\n\t}\n\n\t/**\n\t * Invoked when XLSX export finishes preparing a workbook.\n\t *\n\t * At this point it can still be modified for export.\n\t */\n\tworkbookready: IExportEvent & {\n\t\tworkbook: any,\n\t\tworkbookOptions: any,\n\t\txlsx: any\n\t}\n\n\t/**\n\t * Invoked when PDF export finishes preparing a document.\n\t *\n\t * At this point it can still be modified for export.\n\t */\n\tpdfdocready: IExportEvent & {\n\t\tdoc: any\n\t}\n\n}\n\nexport interface IExportingFormatOptions {\n\n\t/**\n\t * If set to `true`, this format will not appear in [[ExportMenu]].\n\t */\n\tdisabled?: boolean;\n\n}\n\nexport interface IExportingImageOptions extends IExportingFormatOptions {\n\n\t/**\n\t * Quality of the exported image: 0 to 1.\n\t */\n\tquality?: number;\n\n\t/**\n\t * Export images with hardware resolution (`false`), or the way they appear\n\t * on screen (`true`).\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/exporting/exporting-images/#Pixel_ratio} for more info\n\t * @default false\n\t */\n\tmaintainPixelRatio?: boolean;\n\n\t/**\n\t * Minimal width of exported image, in pixels.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/exporting/exporting-images/#Sizing_exported_image} for more info\n\t */\n\tminWidth?: number;\n\n\t/**\n\t * Maximal width of exported image, in pixels.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/exporting/exporting-images/#Sizing_exported_image} for more info\n\t */\n\tmaxWidth?: number;\n\n\t/**\n\t * Minimal height of exported image, in pixels.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/exporting/exporting-images/#Sizing_exported_image} for more info\n\t */\n\tminHeight?: number;\n\n\t/**\n\t * Maximal height of exported image, in pixels.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/exporting/exporting-images/#Sizing_exported_image} for more info\n\t */\n\tmaxHeight?: number;\n\n}\n\nexport interface IExportingPrintOptions extends IExportingImageOptions {\n\n\t/**\n\t * A delay in milliseconds to wait before initiating print.\n\t *\n\t * This delay is necessary to ensure DOM is prepared and repainted before\n\t * print dialog kicks in.\n\t *\n\t * @default 500\n\t */\n\tdelay?: number;\n\n\t/**\n\t * Method to use for printing.\n\t *\n\t * If one fails for your particular setup, try the other.\n\t *\n\t * \"css\" - inserts dynamic CSS that hides everything, except the image being printed.\n\t * \"iframe\" - creates a dynamic `<iframe>` with the image, then prints it.\n\t *\n\t * @default \"iframe\"\n\t */\n\tprintMethod?: \"css\" | \"iframe\";\n\n\t/**\n\t * Image format to use for printing.\n\t *\n\t * @default \"png\"\n\t */\n\timageFormat?: \"png\" | \"jpg\";\n\n}\n\n/**\n * Available PDF page sizes.\n */\nexport type pageSizes = \"4A0\" | \"2A0\" | \"A0\" | \"A1\" | \"A2\" | \"A3\" | \"A4\" | \"A5\" | \"A6\" | \"A7\" | \"A8\" | \"A9\" | \"A10\" |\n\t\"B0\" | \"B1\" | \"B2\" | \"B3\" | \"B4\" | \"B5\" | \"B6\" | \"B7\" | \"B8\" | \"B9\" | \"B10\" |\n\t\"C0\" | \"C1\" | \"C2\" | \"C3\" | \"C4\" | \"C5\" | \"C6\" | \"C7\" | \"C8\" | \"C9\" | \"C10\" |\n\t\"RA0\" | \"RA1\" | \"RA2\" | \"RA3\" | \"RA4\" |\n\t\"SRA0\" | \"SRA1\" | \"SRA2\" | \"SRA3\" | \"SRA4\" |\n\t\"EXECUTIVE\" | \"FOLIO\" | \"LEGAL\" | \"LETTER\" | \"TABLOID\";\n\nexport interface IExportingPDFOptions extends IExportingImageOptions {\n\n\t/**\n\t * Include data into PDF\n\t */\n\tincludeData?: boolean;\n\n\t/**\n\t * An image format to use for embedded images in PDF.\n\t *\n\t * See `imageFormats` in [[Export_module]].\n\t */\n\timageFormat?: \"png\" | \"jpg\";\n\n\t/**\n\t * Font size to use for all texts.\n\t */\n\tfontSize?: number;\n\n\t/**\n\t * Alignment of the chart image in PDF.\n\t *\n\t * Supported options: `\"left\"` (default), `\"center\"`, `\"right\"`.\n\t *\n\t * @default left\n\t */\n\talign?: \"left\" | \"center\" | \"middle\";\n\n\t/**\n\t * Whether to add a URL of the web page the chart has been exported from.\n\t *\n\t * @default true\n\t */\n\taddURL?: boolean;\n\n\t/**\n\t * Page size of the exported PDF.\n\t */\n\tpageSize?: pageSizes;\n\n\t/**\n\t * Page orientation.\n\t */\n\tpageOrientation?: \"landscape\" | \"portrait\";\n\n\t/**\n\t * Page margins.\n\t *\n\t * Can be one of the following:\n\t *\n\t * A single number, in which case it will act as margin setting\n\t * for all four edges of the page.\n\t *\n\t * An array of two numbers `[ horizontal, vertical ]`.\n\t *\n\t * An array of four numbers `[ left, top, right, bottom ]`.\n\t */\n\tpageMargins?: number | number[];\n\n\t/**\n\t * Font which should be used for the export.\n\t *\n\t * Default font used for PDF includes only Latin-based and Cyrilic\n\t * characters. If you are exporting text in other languages, you might need\n\t * to use some other export font.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/exporting/exporting-pdf/#Fonts} for more info\n\t */\n\tfont?: IFont;\n\n\t/**\n\t * Additional optional fonts which can be used on individual elements.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/exporting/exporting-pdf/#Fonts} for more info\n\t */\n\textraFonts?: Array<IFont>;\n\n}\n\nexport interface IExportingDataOptions extends IExportingFormatOptions {\n\n\t/**\n\t * Replace empty values with this string.\n\t */\n\temptyAs?: string;\n\n\t/**\n\t * Use timestamps instead of formatted dates.\n\t *\n\t * @default false\n\t */\n\tuseTimestamps?: boolean;\n\n\t/**\n\t * Use client's locale when formatting dates.\n\t *\n\t * @default false\n\t */\n\tuseLocale?: boolean;\n\n\t/**\n\t * If set to `true` will pivot the table so that columns are horizontal.\n\t */\n\tpivot?: boolean;\n\n\t/**\n\t * Will add a line with column names in CSV/HTML/PDF tables.\n\t */\n\taddColumnNames?: boolean;\n\n}\n\nexport interface IExportingJSONOptions extends IExportingDataOptions {\n\n\t/**\n\t * If set to a number, each line will be indented by X spaces, maintaining\n\t * hierarchy.\n\t *\n\t * If set to a string, will use that string to indent.\n\t *\n\t * @default 2\n\t */\n\tindent?: string | number;\n\n\t/**\n\t * If set to `true` and `dataFields` are set to `true`, will rename keys in\n\t * data.\n\t *\n\t * @default true\n\t */\n\trenameFields?: boolean;\n\n}\n\nexport interface IExportingCSVOptions extends IExportingDataOptions {\n\n\t/**\n\t * Column separator.\n\t *\n\t * @default \",\"\n\t */\n\tseparator?: string;\n\n\t/**\n\t * Force all values to be included in quotes, including numeric.\n\t *\n\t * @default false\n\t */\n\tforceQuotes?: boolean;\n\n\t/**\n\t * Reverse order of the records in data.\n\t *\n\t * @default false\n\t */\n\treverse?: boolean;\n\n\t/**\n\t * Add BOM character to output file, so that it can be used with UTF-8\n\t * characters properly in Excel.\n\t *\n\t * @default false\n\t * @since 5.1.0\n\t */\n\taddBOM?: boolean;\n\n}\n\nexport interface IExportingHTMLOptions extends IExportingDataOptions {\n\n\t/**\n\t * A `class` attribute for `<table>` tag.\n\t */\n\ttableClass?: string;\n\n\t/**\n\t * A `class` attribute for `<tr>` tags.\n\t */\n\trowClass?: string;\n\n\t/**\n\t * A `class` attribute for `<th>` tags.\n\t */\n\theaderClass?: string;\n\n\t/**\n\t * A `class` attribute for `<td>` tags.\n\t */\n\tcellClass?: string;\n\n}\n\nexport interface IExportingXLSXOptions extends IExportingDataOptions {\n\t// @todo\n\t//sheets?: string[];\n}\n\n/**\n * A plugin that can be used to export chart snapshots and data.\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/exporting/} for more info\n */\nexport class Exporting extends Entity {\n\tpublic static className: string = \"Exporting\";\n\tpublic static classNames: Array<string> = Entity.classNames.concat([Exporting.className]);\n\n\tdeclare public _settings: IExportingSettings;\n\tdeclare public _privateSettings: IExportingPrivate;\n\tdeclare public _events: IExportingEvents;\n\n\t//public extraImages: Array<Root | IExportingImageSource> = [];\n\t//public dataSources: any[] = [];\n\n\tprotected _afterNew() {\n\t\tsuper._afterNew();\n\t\tthis._setRawDefault(\"filePrefix\", \"chart\");\n\t\tthis._setRawDefault(\"charset\", \"utf-8\");\n\t\tthis._setRawDefault(\"numericFields\", []);\n\t\tthis._setRawDefault(\"dateFields\", []);\n\t\tthis._setRawDefault(\"durationFields\", []);\n\t\tthis._setRawDefault(\"extraImages\", []);\n\t\tthis._setRawDefault(\"pngOptions\", { quality: 1, maintainPixelRatio: false });\n\t\tthis._setRawDefault(\"jpgOptions\", { quality: 0.8, maintainPixelRatio: false });\n\t\tthis._setRawDefault(\"printOptions\", { quality: 1, maintainPixelRatio: false, delay: 500, printMethod: \"iframe\", imageFormat: \"png\" });\n\t\tthis._setRawDefault(\"jsonOptions\", { indent: 2, renameFields: true });\n\t\tthis._setRawDefault(\"csvOptions\", { separator: \",\", addColumnNames: true, emptyAs: \"\", addBOM: true });\n\t\tthis._setRawDefault(\"htmlOptions\", { emptyAs: \"-\", addColumnNames: true });\n\t\tthis._setRawDefault(\"xlsxOptions\", { emptyAs: \"\", addColumnNames: true });\n\t\tthis._setRawDefault(\"pdfOptions\", { fontSize: 14, imageFormat: \"png\", align: \"left\", addURL: true });\n\t\tthis._setRawDefault(\"pdfdataOptions\", { emptyAs: \"\", addColumnNames: true });\n\n\t\tthis._root.addDisposer(this);\n\t}\n\n\tpublic _beforeChanged() {\n\t\tsuper._beforeChanged();\n\n\t\tif (this.isDirty(\"menu\")) {\n\t\t\tconst menu = this.get(\"menu\");\n\t\t\tif (menu) {\n\t\t\t\tmenu.set(\"exporting\", this);\n\t\t\t\tthis._disposers.push(menu);\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected _getFormatOptions(format: ExportingFormats, options?: IExportingFormatOptions): IExportingFormatOptions {\n\t\tconst newOptions: any = $object.copy((<any>this).get(format + \"Options\", {}));\n\t\tif (options) {\n\t\t\t$object.each(options, (key, value) => {\n\t\t\t\tnewOptions[key] = value;\n\t\t\t});\n\t\t}\n\t\treturn newOptions;\n\t}\n\n\t/**\n\t * Triggers a download of the chart/data in specific format.\n\t *\n\t * @param format Format\n\t * @param customOptions Format options\n\t */\n\tpublic async download(format: ExportingFormats, customOptions?: IExportingFormatOptions) {\n\t\tconst ext = format == \"pdfdata\" ? \"pdf\" : format;\n\t\tconst fileName = this.get(\"filePrefix\", \"chart\") + \".\" + ext;\n\t\tconst options = this._getFormatOptions(format, customOptions);\n\t\tthis.events.dispatch(\"downloadstarted\", {\n\t\t\ttype: \"downloadstarted\",\n\t\t\tformat: format,\n\t\t\toptions: options,\n\t\t\tfileName: fileName,\n\t\t\ttarget: this\n\t\t});\n\t\tconst uri = await this.export(format, options);\n\t\tthis.streamFile(uri, fileName, (options && (<IExportingCSVOptions>options).addBOM));\n\t}\n\n\t/**\n\t * Triggers print of the chart.\n\t *\n\t * @param customOptions Print options\n\t */\n\tpublic async print(customOptions?: IExportingPrintOptions) {\n\t\tconst options = <IExportingPrintOptions>this._getFormatOptions(\"print\", customOptions);\n\t\tthis.events.dispatch(\"printstarted\", {\n\t\t\ttype: \"printstarted\",\n\t\t\tformat: \"print\",\n\t\t\toptions: options,\n\t\t\ttarget: this\n\t\t});\n\t\tconst uri = await this.export(options.imageFormat || \"png\", options);\n\t\tthis.initiatePrint(uri, options, this.get(\"title\"));\n\t}\n\n\t/**\n\t * Returns data uri of the chart/data in specific format.\n\t *\n\t * @param format Format\n\t * @param customOptions Format options\n\t * @return Promise\n\t */\n\tpublic async export(format: ExportingFormats, customOptions?: IExportingFormatOptions): Promise<string> {\n\t\tconst options = this._getFormatOptions(format, customOptions);\n\t\tthis.events.dispatch(\"exportstarted\", {\n\t\t\ttype: \"exportstarted\",\n\t\t\tformat: format,\n\t\t\toptions: options,\n\t\t\ttarget: this\n\t\t});\n\n\t\tlet promise: Promise<string> | string = \"\";\n\t\tswitch (format) {\n\t\t\tcase \"png\":\n\t\t\tcase \"jpg\":\n\t\t\t\tthis._root._runTickerNow();\n\t\t\t\tpromise = this.exportImage(format, options);\n\t\t\t\tbreak;\n\t\t\tcase \"json\":\n\t\t\t\tpromise = this.exportJSON(options);\n\t\t\t\tbreak;\n\t\t\tcase \"csv\":\n\t\t\t\tpromise = this.exportCSV(options);\n\t\t\t\tbreak;\n\t\t\tcase \"html\":\n\t\t\t\tpromise = this.exportHTML(options);\n\t\t\t\tbreak;\n\t\t\tcase \"xlsx\":\n\t\t\t\tpromise = this.exportXLSX(options);\n\t\t\t\tbreak;\n\t\t\tcase \"pdf\":\n\t\t\t\tthis._root._runTickerNow();\n\t\t\t\tpromise = this.exportPDF(options);\n\t\t\t\tbreak;\n\t\t\tcase \"pdfdata\":\n\t\t\t\tpromise = this.exportPDFData(options);\n\t\t\t\tbreak;\n\t\t}\n\t\tthis.events.dispatch(\"exportfinished\", {\n\t\t\ttype: \"exportfinished\",\n\t\t\tformat: format,\n\t\t\toptions: options,\n\t\t\ttarget: this\n\t\t});\n\t\treturn promise;\n\t}\n\n\t/**\n\t * ==========================================================================\n\t * Images\n\t * ==========================================================================\n\t */\n\n\t/**\n\t * Returns chart image as a data:uri.\n\t *\n\t * @param format Image format\n\t * @param customOptions Format options\n\t * @return Promise\n\t */\n\tpublic async exportImage(format: ExportingImageFormats, customOptions?: IExportingImageOptions): Promise<string> {\n\t\tconst options: any = this._getFormatOptions(format, customOptions);\n\t\tconst canvas = await this.getCanvas(options);\n\t\tconst data = canvas.toDataURL(this.getContentType(format), options.quality || 1);\n\t\tthis.disposeCanvas(canvas);\n\t\treturn data;\n\t}\n\n\t/**\n\t * Returns canvas data.\n\t *\n\t * @param customOptions Image options\n\t * @return Promise\n\t */\n\tpublic async exportCanvas(customOptions?: IExportingImageOptions): Promise<string> {\n\t\tconst options: any = this._getFormatOptions(\"canvas\", customOptions);\n\t\tconst canvas = await this.getCanvas(options);\n\t\tconst data = canvas.toDataURL(this.getContentType(\"canvas\"), options.quality || 1);\n\t\tthis.disposeCanvas(canvas);\n\t\treturn data;\n\t}\n\n\t/**\n\t * Returns a `<canvas>` element with snapshot of the chart.\n\t *\n\t * @param options Image options\n\t * @return Promise\n\t */\n\tpublic async getCanvas(options: IExportingImageOptions): Promise<HTMLCanvasElement> {\n\t\tconst mainCanvas = this._root._renderer.getCanvas(this._root._rootContainer._display, options);\n\t\tconst extraImages = this.get(\"extraImages\", []);\n\n\t\t// Add other canvases\n\t\tlet middleLeft = 0;\n\t\tlet middleTop = 0;\n\t\tlet middleWidth = mainCanvas.width;\n\t\tlet middleHeight = mainCanvas.height;\n\t\tlet extraRight = 0;\n\t\tlet extraBottom = 0;\n\n\t\tconst extras: any[] = [];\n\n\t\t$array.each(extraImages, (extraRoot) => {\n\n\t\t\t// Get that extra\n\t\t\tlet extra: IExportingImageSource;\n\n\t\t\tif (extraRoot instanceof Root) {\n\t\t\t\textra = {\n\t\t\t\t\tsource: extraRoot,\n\t\t\t\t\tposition: \"bottom\"\n\t\t\t\t};\n\n\t\t\t} else {\n\t\t\t\textra = <IExportingImageSource>extraRoot;\n\t\t\t}\n\n\t\t\t// Set defaults\n\t\t\textra.position = extra.position || \"bottom\";\n\t\t\textra.marginTop = extra.marginTop || 0;\n\t\t\textra.marginRight = extra.marginRight || 0;\n\t\t\textra.marginBottom = extra.marginBottom || 0;\n\t\t\textra.marginLeft = extra.marginLeft || 0;\n\n\t\t\tconst extraCanvas = extra.source._renderer.getCanvas(extra.source._rootContainer._display, options);\n\n\t\t\tconst extraWidth = extraCanvas.width + extra.marginLeft + extra.marginRight;\n\t\t\tconst extraHeight = extraCanvas.height + extra.marginTop + extra.marginBottom;\n\n\t\t\tif (extra.position == \"top\") {\n\t\t\t\tmiddleWidth = extra.crop ? middleHeight : Math.max(middleWidth, extraWidth);\n\t\t\t\tmiddleTop += extraHeight;\n\n\t\t\t} else if (extra.position == \"right\") {\n\t\t\t\tmiddleHeight = extra.crop ? middleHeight : Math.max(middleHeight, extraHeight);\n\t\t\t\textraRight += extraWidth;\n\n\t\t\t} else if (extra.position == \"left\") {\n\t\t\t\tmiddleHeight = extra.crop ? middleHeight : Math.max(middleHeight, extraHeight);\n\t\t\t\tmiddleLeft += extraWidth;\n\n\t\t\t} else if (extra.position === \"bottom\") {\n\t\t\t\tmiddleWidth = extra.crop ? middleHeight : Math.max(middleWidth, extraWidth);\n\t\t\t\textraBottom += extraHeight;\n\t\t\t}\n\n\t\t\textras.push({\n\t\t\t\tcanvas: extraCanvas,\n\t\t\t\tposition: extra.position,\n\t\t\t\tleft: extra.marginLeft,\n\t\t\t\ttop: extra.marginTop,\n\t\t\t\twidth: extraWidth,\n\t\t\t\theight: extraHeight\n\t\t\t});\n\n\t\t});\n\n\t\tconst newCanvas = this.getDisposableCanvas();\n\n\t\tnewCanvas.width = middleLeft + middleWidth + extraRight;\n\t\tnewCanvas.height = middleTop + middleHeight + extraBottom;\n\n\t\tconst ctx = newCanvas.getContext(\"2d\")!;\n\n\t\t// Get background\n\t\tconst background = this.get(\"backgroundColor\", this.findBackgroundColor(this._root.dom));\n\t\tconst backgroundOpacity = this.get(\"backgroundOpacity\", 1);\n\n\t\tif (background) {\n\t\t\tctx.fillStyle = background.toCSS(backgroundOpacity);\n\t\t\tctx.fillRect(0, 0, newCanvas.width, newCanvas.height);\n\t\t}\n\n\t\tlet left = middleLeft;\n\t\tlet top = middleTop;\n\t\tlet right = left + middleWidth;\n\t\tlet bottom = top + middleHeight;\n\n\t\t// Radiates outwards from center\n\t\t$array.each(extras, (extra) => {\n\t\t\tif (extra.position == \"top\") {\n\t\t\t\ttop -= extra.height;\n\t\t\t\tctx.drawImage(extra.canvas, middleLeft + extra.left, top + extra.top);\n\n\t\t\t} else if (extra.position == \"right\") {\n\t\t\t\tctx.drawImage(extra.canvas, right + extra.left, middleTop + extra.top);\n\t\t\t\tright += extra.width;\n\n\t\t\t} else if (extra.position == \"left\") {\n\t\t\t\tleft -= extra.width;\n\t\t\t\tctx.drawImage(extra.canvas, left + extra.left, middleTop + extra.top);\n\n\t\t\t} else if (extra.position === \"bottom\") {\n\t\t\t\tctx.drawImage(extra.canvas, middleLeft + extra.left, bottom + extra.top);\n\t\t\t\tbottom += extra.height;\n\t\t\t}\n\n\t\t\t//this.disposeCanvas(extra.canvas);\n\t\t});\n\n\t\tctx.drawImage(mainCanvas, middleLeft, middleTop);\n\n\t\treturn newCanvas;\n\t}\n\n\t/**\n\t * ==========================================================================\n\t * JSON\n\t * ==========================================================================\n\t */\n\n\t/**\n\t * Returns a data:uri representation of a JSON file with chart data.\n\t *\n\t * @param customOptions Format options\n\t * @return Promise\n\t */\n\tpublic async exportJSON(customOptions?: IExportingJSONOptions): Promise<string> {\n\t\treturn \"data:\" + this.getContentType(\"json\") + \";\" + this.get(\"charset\", \"utf-8\") + \",\" + encodeURIComponent(await this.getJSON(customOptions));\n\t}\n\n\t/**\n\t * Returns data in JSON format.\n\t *\n\t * @param customOptions Format options\n\t * @return Promise\n\t */\n\tpublic async getJSON(customOptions?: IExportingJSONOptions): Promise<string> {\n\t\tconst options: any = this._getFormatOptions(\"json\", customOptions);\n\t\treturn JSON.stringify(this.getData(\"json\", customOptions, options.renameFields), (_key, value) => {\n\t\t\tif ($type.isObject(value)) {\n\t\t\t\t$object.each(value, (field, item) => {\n\t\t\t\t\tvalue[field] = this.convertToSpecialFormat(field, item, options);\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn value;\n\t\t}, options.indent);\n\t}\n\n\t/**\n\t * ==========================================================================\n\t * CSV\n\t * ==========================================================================\n\t */\n\n\t/**\n\t * Returns a data:uri representation of a CSV file with chart data.\n\t *\n\t * @param customOptions Format options\n\t * @return Promise\n\t */\n\tpublic async exportCSV(customOptions?: IExportingCSVOptions): Promise<string> {\n\t\treturn \"data:\" + this.getContentType(\"csv\") + \";\" + this.get(\"charset\", \"utf-8\") + \",\" + encodeURIComponent(await this.getCSV(customOptions));\n\t}\n\n\t/**\n\t * Returns a CSV with export data.\n\t *\n\t * @param customOptions CSV options\n\t * @return Promise\n\t */\n\tpublic async getCSV(customOptions?: IExportingCSVOptions): Promise<string> {\n\t\tconst options: any = this._getFormatOptions(\"csv\", customOptions);\n\n\t\t// Init output\n\t\tlet csv = \"\";\n\n\t\t// Add rows\n\t\tlet br = \"\";\n\t\tconst data = this.getData(\"csv\", options);\n\n\t\t// Data fields\n\t\tconst dataFields = this.getDataFields(data);\n\n\t\t// Vertical or horizontal (default) layout\n\t\tif (options.pivot) {\n\n\t\t\t// Data fields order\n\t\t\tconst dataFieldsOrder: string[] = this.get(\"dataFieldsOrder\", []);\n\n\t\t\t$object.eachOrdered(dataFields, (key, val) => {\n\t\t\t\tlet dataRow = [];\n\t\t\t\tif (options.addColumnNames) {\n\t\t\t\t\tdataRow.push(val);\n\t\t\t\t}\n\t\t\t\tfor (let len = data.length, i = 0; i < len; i++) {\n\t\t\t\t\tlet dataValue = data[i][key];\n\t\t\t\t\tdataRow.push(this.convertToSpecialFormat(key, dataValue, options, true));\n\t\t\t\t}\n\t\t\t\tcsv += br + this.getCSVRow(dataRow, options, undefined, true);\n\t\t\t\tbr = \"\\n\";\n\t\t\t}, (a, b) => {\n\t\t\t\tlet ai = dataFieldsOrder.indexOf(a);\n\t\t\t\tlet bi = dataFieldsOrder.indexOf(b);\n\t\t\t\tif (ai > bi) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\telse if (ai < bi) {\n\t\t\t\t\treturn 1\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t});\n\n\t\t}\n\n\t\telse {\n\t\t\tfor (let len = data.length, i = 0; i < len; i++) {\n\t\t\t\tlet row = this.getCSVRow(data[i], options, dataFields);\n\t\t\t\tif (options.reverse) {\n\t\t\t\t\tcsv = row + br + csv;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tcsv += br + row;\n\t\t\t\t}\n\t\t\t\tbr = \"\\n\";\n\t\t\t}\n\n\t\t\t// Add column names?\n\t\t\tif (options.addColumnNames) {\n\t\t\t\tcsv = this.getCSVRow(dataFields, options, undefined, true) + br + csv;\n\t\t\t}\n\t\t}\n\n\t\treturn csv;\n\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic getCSVRow(row: any, options: IExportingCSVOptions, dataFields: any, asIs: boolean = false): string {\n\n\t\t// Init\n\t\tlet separator = options.separator || \",\";\n\t\tlet items: any[] = [];\n\n\t\t// Data fields\n\t\tif (!dataFields) {\n\t\t\tdataFields = {};\n\t\t\t$object.each(row, (key, value) => {\n\t\t\t\tdataFields[key] = value;\n\t\t\t});\n\t\t}\n\n\t\t// Data fields order\n\t\tconst dataFieldsOrder: string[] = this.get(\"dataFieldsOrder\", []);\n\n\t\t// Process each row item\n\t\t$object.eachOrdered(dataFields, (key, _name) => {\n\n\t\t\t// Get value\n\t\t\tlet value = this.convertEmptyValue(key, row[key], options);\n\n\t\t\t// Check if we need to skip\n\t\t\t// This is no longer required because we are iterating via dataFields anyway\n\t\t\t/*if (this.dataFields != null && this.dataFields[key] == null) {\n\t\t\t\treturn;\n\t\t\t}*/\n\n\t\t\t// Convert dates\n\t\t\tlet item = asIs ? value : this.convertToSpecialFormat(key, value, options);\n\n\t\t\t// Cast and escape doublequotes\n\t\t\titem = \"\" + item;\n\t\t\titem = item.replace(/\"/g, '\"\"');\n\n\t\t\t// Enclose into double quotes\n\t\t\tif (options.forceQuotes || (item.search(new RegExp(\"\\\"|\\n|\" + separator, \"g\")) >= 0)) {\n\t\t\t\titem = \"\\\"\" + item + \"\\\"\";\n\t\t\t}\n\n\t\t\t// Add to item\n\t\t\titems.push(item);\n\t\t}, (a, b) => {\n\t\t\tlet ai = dataFieldsOrder.indexOf(a);\n\t\t\tlet bi = dataFieldsOrder.indexOf(b);\n\t\t\tif (ai > bi) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\telse if (ai < bi) {\n\t\t\t\treturn -1\n\t\t\t}\n\t\t\treturn 0;\n\t\t});\n\n\t\treturn items.join(separator);\n\t}\n\n\t/**\n\t * ==========================================================================\n\t * HTML\n\t * ==========================================================================\n\t */\n\n\t/**\n\t * Returns a data:uri representation of an HTML file with chart data.\n\t *\n\t * @param customOptions Format options\n\t * @return Promise\n\t */\n\tpublic async exportHTML(customOptions?: IExportingHTMLOptions): Promise<string> {\n\t\treturn \"data:\" + this.getContentType(\"html\") + \";\" + this.get(\"charset\", \"utf-8\") + \",\" + encodeURIComponent(await this.getHTML(customOptions));\n\t}\n\n\t/**\n\t * Returns an HTML with a table with export data.\n\t *\n\t * @param customOptions HTML options\n\t * @return Promise\n\t */\n\tpublic async getHTML(customOptions?: IExportingHTMLOptions): Promise<string> {\n\t\tconst options: any = this._getFormatOptions(\"html\", customOptions);\n\n\t\t// Init output\n\t\tlet html = \"<table>\";\n\t\tif (options.tableClass) {\n\t\t\thtml = \"<table class=\\\"\" + options.tableClass + \"\\\">\";\n\t\t}\n\n\t\t// Get data\n\t\tconst data = this.getData(\"html\", options);\n\t\tconst dataFields = this.getDataFields(data);\n\n\t\t// Vertical or horizontal (default) layout\n\t\tif (options.pivot) {\n\n\t\t\t// Data fields order\n\t\t\tconst dataFieldsOrder: string[] = this.get(\"dataFieldsOrder\", []);\n\n\t\t\thtml += \"\\n<tbody>\";\n\n\t\t\t$object.eachOrdered(dataFields, (key, val) => {\n\t\t\t\tlet dataRow = [];\n\t\t\t\tif (options.addColumnNames) {\n\t\t\t\t\tdataRow.push(val);\n\t\t\t\t}\n\t\t\t\tfor (let len = data.length, i = 0; i < len; i++) {\n\t\t\t\t\tlet dataValue = data[i][key];\n\t\t\t\t\tdataRow.push(this.convertToSpecialFormat(key, dataValue, options, true));\n\t\t\t\t}\n\t\t\t\thtml += \"\\n\" + this.getHTMLRow(dataRow, options, undefined, true);\n\t\t\t}, (a, b) => {\n\t\t\t\tlet ai = dataFieldsOrder.indexOf(a);\n\t\t\t\tlet bi = dataFieldsOrder.indexOf(b);\n\t\t\t\tif (ai > bi) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\telse if (ai < bi) {\n\t\t\t\t\treturn 1\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t});\n\n\t\t\thtml += \"\\n</tbody>\";\n\n\t\t}\n\n\t\telse {\n\t\t\t// Add column names?\n\t\t\tif (options.addColumnNames) {\n\t\t\t\thtml += \"\\n<thead>\\n\" + this.getHTMLRow(dataFields, options, undefined, true, true) + \"\\n</thead>\";\n\t\t\t}\n\n\t\t\thtml += \"\\n<tbody>\";\n\n\t\t\tfor (let len = data.length, i = 0; i < len; i++) {\n\t\t\t\thtml += \"\\n\" + this.getHTMLRow(data[i], options, dataFields);\n\t\t\t}\n\n\t\t\thtml += \"\\n</tbody>\";\n\t\t}\n\n\t\thtml += \"\\n</table>\";\n\n\t\treturn html;\n\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic getHTMLRow(row: any, options: IExportingHTMLOptions, dataFields: any, asIs: boolean = false, headerRow: boolean = false): string {\n\n\t\t// Init output\n\t\tlet html = \"\\t<tr>\";\n\t\tif (options.rowClass) {\n\t\t\thtml = \"\\t<tr class=\\\"\" + options.rowClass + \"\\\">\";\n\t\t}\n\n\t\t// Data fields\n\t\tif (!dataFields) {\n\t\t\tdataFields = row;\n\t\t}\n\n\t\t// Data fields order\n\t\tconst dataFieldsOrder: string[] = this.get(\"dataFieldsOrder\", []);\n\n\t\t// th or dh?\n\t\tconst tag = headerRow ? \"th\" : \"td\";\n\n\t\t// Process each row item\n\t\tlet first = true;\n\t\t$object.eachOrdered(dataFields, (key, _name) => {\n\n\t\t\t// Get value\n\t\t\tlet value = this.convertEmptyValue(key, row[key], options);\n\n\t\t\t// Convert dates\n\t\t\tlet item = asIs ? value : this.convertToSpecialFormat(key, value, options);\n\n\t\t\t// Escape HTML entities\n\t\t\titem = \"\" + item;\n\t\t\titem = item.replace(/[\\u00A0-\\u9999<>\\&]/gim, function(i: string) {\n\t\t\t\treturn \"&#\" + i.charCodeAt(0) + \";\";\n\t\t\t});\n\n\t\t\t// Which tag to use\n\t\t\tlet useTag = tag;\n\t\t\tif (options.pivot && first) {\n\t\t\t\tuseTag = \"th\";\n\t\t\t}\n\n\t\t\t// Add cell\n\t\t\tif (options.cellClass) {\n\t\t\t\thtml += \"\\n\\t\\t<\" + useTag + \" class=\\\"\" + options.cellClass + \"\\\">\" + item + \"</\" + useTag + \">\";\n\t\t\t}\n\t\t\telse {\n\t\t\t\thtml += \"\\n\\t\\t<\" + useTag + \">\" + item + \"</\" + useTag + \">\";\n\t\t\t}\n\n\t\t\tfirst = false;\n\t\t}, (a, b) => {\n\t\t\tlet ai = dataFieldsOrder.indexOf(a);\n\t\t\tlet bi = dataFieldsOrder.indexOf(b);\n\t\t\tif (ai > bi) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\telse if (ai < bi) {\n\t\t\t\treturn -1\n\t\t\t}\n\t\t\treturn 0;\n\t\t});\n\n\t\thtml += \"\\n\\t</tr>\";\n\n\t\treturn html;\n\t}\n\n\t/**\n\t * ==========================================================================\n\t * XLSX\n\t * ==========================================================================\n\t */\n\n\t/**\n\t * Returns a data:uri representation of an XLSX file with chart data.\n\t *\n\t * @param customOptions Format options\n\t * @return Promise\n\t */\n\tpublic async exportXLSX(customOptions?: IExportingXLSXOptions): Promise<string> {\n\t\treturn \"data:\" + this.getContentType(\"xlsx\") + \";\" + this.get(\"charset\", \"utf-8\") + \",\" + encodeURIComponent(await this.getXLSX(customOptions));\n\t}\n\n\t/**\n\t * Returns a data:uri of XLSX data.\n\t *\n\t * @param customOptions Format options\n\t * @return Promise\n\t */\n\tpublic async getXLSX(customOptions?: IExportingXLSXOptions): Promise<string> {\n\n\t\tconst options: any = this._getFormatOptions(\"xlsx\", customOptions);\n\n\t\t// Load xlsx\n\t\tlet XLSX = await this.getXLSXLib();\n\n\t\t// Create workbook options\n\t\tlet wbOptions = {\n\t\t\tbookType: \"xlsx\",\n\t\t\tbookSST: false,\n\t\t\ttype: \"base64\",\n\t\t\t//dateNF: 'yyyy-mm-dd'\n\t\t};\n\n\t\t// Get sheet name\n\t\tlet sheetName = this._normalizeExcelSheetName(this.get(\"title\", this._t(\"Data\")));\n\n\t\t// Create a workbook\n\t\tlet wb = {\n\t\t\tSheetNames: <any>[sheetName],\n\t\t\tSheets: <any>{}\n\t\t};\n\n\t\t// Init worksheet data\n\t\tlet wsData: Array<any> = [];\n\n\t\t// Get data\n\t\tconst data = this.getData(\"html\", options);\n\t\tconst dataFields = this.getDataFields(data);\n\n\t\t// Vertical or horizontal (default) layout\n\t\tif (options.pivot) {\n\n\t\t\t// Data fields order\n\t\t\tconst dataFieldsOrder: string[] = this.get(\"dataFieldsOrder\", []);\n\n\t\t\t$object.eachOrdered(dataFields, (key, val) => {\n\t\t\t\tlet dataRow = [];\n\t\t\t\tif (options.addColumnNames) {\n\t\t\t\t\tdataRow.push(val);\n\t\t\t\t}\n\t\t\t\tfor (let len = data.length, i = 0; i < len; i++) {\n\t\t\t\t\tlet dataValue = data[i][key];\n\t\t\t\t\tdataRow.push(this.convertToSpecialFormat(key, dataValue, options, true));\n\t\t\t\t}\n\t\t\t\twsData.push(this.getXLSXRow(dataRow, options, undefined, true));\n\t\t\t}, (a, b) => {\n\t\t\t\tlet ai = dataFieldsOrder.indexOf(a);\n\t\t\t\tlet bi = dataFieldsOrder.indexOf(b);\n\t\t\t\tif (ai > bi) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\telse if (ai < bi) {\n\t\t\t\t\treturn -1\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t});\n\n\t\t}\n\n\t\telse {\n\t\t\t// Add column names?\n\t\t\tif (options.addColumnNames) {\n\t\t\t\twsData.push(this.getXLSXRow(dataFields, options, undefined, true));\n\t\t\t}\n\n\t\t\t// Add lines\n\t\t\tfor (let len = data.length, i = 0; i < len; i++) {\n\t\t\t\twsData.push(this.getXLSXRow(data[i], options, dataFields));\n\t\t\t}\n\t\t}\n\n\t\t// Create sheet and add data\n\t\twb.Sheets[sheetName] = XLSX.utils.aoa_to_sheet(wsData);\n\n\t\tthis.events.dispatch(\"workbookready\", {\n\t\t\ttype: \"workbookready\",\n\t\t\tformat: \"xlsx\",\n\t\t\toptions: options,\n\t\t\tworkbook: wb,\n\t\t\tworkbookOptions: wbOptions,\n\t\t\txlsx: XLSX,\n\t\t\ttarget: this\n\t\t});\n\n\t\treturn XLSX.write(wb, wbOptions);\n\t}\n\n\tprivate _normalizeExcelSheetName(name: string): string {\n\t\tname = name.replace(/([:\\\\\\/?*\\[\\]]+)/g, \" \");\n\t\treturn name.length > 30 ? name.substr(0, 30) + \"...\" : name;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic getXLSXRow(row: any, options: IExportingXLSXOptions, dataFields: any, asIs: boolean = false): any[] {\n\n\t\t// Init\n\t\tlet items: any[] = [];\n\n\t\t// Data fields\n\t\tif (!dataFields) {\n\t\t\tdataFields = row;\n\t\t}\n\n\t\t// Data fields order\n\t\tconst dataFieldsOrder: string[] = this.get(\"dataFieldsOrder\", []);\n\n\t\t// Process each row item\n\t\t$object.eachOrdered(dataFields, (key, _name) => {\n\n\t\t\t// Get value\n\t\t\tlet value = this.convertEmptyValue(key, row[key], options);\n\n\t\t\t// Convert dates\n\t\t\tlet item = asIs ? value : this.convertToSpecialFormat(key, value, options, true);\n\n\t\t\titems.push(item);\n\t\t}, (a, b) => {\n\t\t\tlet ai = dataFieldsOrder.indexOf(a);\n\t\t\tlet bi = dataFieldsOrder.indexOf(b);\n\t\t\tif (ai > bi) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\telse if (ai < bi) {\n\t\t\t\treturn -1\n\t\t\t}\n\t\t\treturn 0;\n\t\t});\n\n\t\treturn items;\n\t}\n\n\n\t/**\n\t * @ignore\n\t */\n\tprivate async _xlsx(): Promise<any> {\n\t\treturn await import(/* webpackChunkName: \"xlsx\" */ \"../../bundled/xlsx\");\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic getXLSXLib(): Promise<any> {\n\t\treturn this._xlsx();\n\t}\n\n\t/**\n\t * ==========================================================================\n\t * PDF\n\t * ==========================================================================\n\t */\n\n\t/**\n\t * Returns a data:uri representation of a PDF file with chart image.\n\t *\n\t * @param customOptions Format options\n\t * @return Promise\n\t */\n\tpublic async exportPDF(customOptions?: IExportingPDFOptions): Promise<string> {\n\t\treturn \"data:\" + this.getContentType(\"pdf\") + \";\" + this.get(\"charset\", \"utf-8\") + \",\" + encodeURIComponent(await this.getPDF(customOptions, true));\n\t}\n\n\t/**\n\t * Returns a data:uri representation of a PDF file with chart data.\n\t *\n\t * @param customOptions Format options\n\t * @return Promise\n\t */\n\tpublic async exportPDFData(customOptions?: IExportingDataOptions): Promise<string> {\n\t\treturn \"data:\" + this.getContentType(\"pdf\") + \";\" + this.get(\"charset\", \"utf-8\") + \",\" + encodeURIComponent(await this.getPDF(customOptions, false, true));\n\t}\n\n\t/**\n\t * Returns Base64-encoded binary data for a PDF file.\n\t * @param customOptions PDF options\n\t * @param includeImage Include chart snapshot\n\t * @param includeData Include data\n\t * @return Promise\n\t */\n\tpublic async getPDF(customOptions?: IExportingPDFOptions, includeImage: boolean = true, includeData: boolean = false): Promise<string> {\n\n\t\tconst options: any = this._getFormatOptions(\"pdf\", customOptions);\n\t\tconst dataOptions: any = this._getFormatOptions(\"pdfdata\", customOptions);\n\t\tconst orientation: \"landscape\" | \"portrait\" = options.pageOrientation || \"portrait\";\n\n\t\t// Get image\n\t\tlet image: string;\n\n\t\tconst imageSize = {\n\t\t\twidth: 0,\n\t\t\theight: 0\n\t\t};\n\n\t\tif (includeImage) {\n\t\t\tconst imageFormat = options.imageFormat || \"png\";\n\t\t\tconst imageOptions: any = this._getFormatOptions(imageFormat, options);\n\t\t\tconst canvas = await this.getCanvas(imageOptions);\n\t\t\timageSize.width = canvas.clientWidth;\n\t\t\timageSize.height = canvas.clientHeight;\n\t\t\timage = canvas.toDataURL(this.getContentType(imageFormat), options.quality || 1);\n\t\t\tthis.disposeCanvas(canvas);\n\t\t}\n\t\t// Load pdfmake\n\n\t\tconst pdfmake = await this.getPdfmake();\n\n\t\t// Defaults\n\t\tconst defaultMargins = [30, 30, 30, 30];\n\n\t\t// Init content for PDF\n\t\tlet doc = {\n\t\t\tpageSize: options.pageSize || \"A4\",\n\t\t\tpageOrientation: orientation,\n\t\t\tpageMargins: options.pageMargins || defaultMargins,\n\t\t\tdefaultStyle: {\n\t\t\t\tfont: options.font ? options.font.name : undefined\n\t\t\t},\n\t\t\t//header: <any>[],\n\t\t\tcontent: <any>[]\n\t\t};\n\n\t\t// Should we add title?\n\t\tconst title = this.get(\"title\");\n\n\t\tlet extraMargin = 0;\n\n\t\tif (title) {\n\t\t\tdoc.content.push({\n\t\t\t\ttext: title,\n\t\t\t\tfontSize: options.fontSize || 14,\n\t\t\t\tbold: true,\n\t\t\t\tmargin: [0, 0, 0, 15]\n\t\t\t});\n\n\t\t\t// Add some leftover margin for title\n\t\t\textraMargin += 50;\n\t\t}\n\n\t\t// Add page URL?\n\t\tif (options.addURL) {\n\t\t\tdoc.content.push({\n\t\t\t\ttext: this._t(\"Saved from\") + \": \" + document.location.href,\n\t\t\t\tfontSize: options.fontSize,\n\t\t\t\tmargin: [0, 0, 0, 15]\n\t\t\t});\n\n\t\t\t// Add some leftover margin for URL\n\t\t\textraMargin += 50;\n\t\t}\n\n\t\t// Add image\n\t\tif (includeImage && image!) {\n\t\t\tconst fitSize = this.getPageSizeFit(doc.pageSize, doc.pageMargins, extraMargin, orientation);\n\t\t\tif ((imageSize.width > fitSize[0]) || (imageSize.height > fitSize[1])) {\n\t\t\t\tdoc.content.push({\n\t\t\t\t\timage: image!,\n\t\t\t\t\talignment: options.align || \"left\",\n\t\t\t\t\tfit: fitSize\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdoc.content.push({\n\t\t\t\t\timage: image!,\n\t\t\t\t\talignment: options.align || \"left\"\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// Add data\n\t\tif ((includeData || options.includeData) && this.hasData()) {\n\t\t\tdoc.content.push({\n\t\t\t\ttable: await this.getPDFData(dataOptions),\n\t\t\t\tfontSize: options.fontSize || 14\n\t\t\t});\n\t\t}\n\n\t\tlet fonts: { [name: string]: { [types: string]: string } } | null = null;\n\t\tlet vfs: { [path: string]: string } | null = null;\n\n\t\tfunction addFont(font: IFont) {\n\t\t\tconst paths: { [path: string]: string } = {};\n\n\t\t\tpaths.normal = font.normal.path;\n\t\t\tvfs![font.normal.path] = font.normal.bytes;\n\n\t\t\tif (font.bold) {\n\t\t\t\tpaths.bold = font.bold.path;\n\t\t\t\tvfs![font.bold.path] = font.bold.bytes;\n\n\t\t\t} else {\n\t\t\t\tpaths.bold = font.normal.path;\n\t\t\t}\n\n\t\t\tif (font.italics) {\n\t\t\t\tpaths.italics = font.italics.path;\n\t\t\t\tvfs![font.italics.path] = font.italics.bytes;\n\n\t\t\t} else {\n\t\t\t\tpaths.italics = font.normal.path;\n\t\t\t}\n\n\t\t\tif (font.bolditalics) {\n\t\t\t\tpaths.bolditalics = font.bolditalics.path;\n\t\t\t\tvfs![font.bolditalics.path] = font.bolditalics.bytes;\n\n\t\t\t} else {\n\t\t\t\tpaths.bolditalics = font.normal.path;\n\t\t\t}\n\n\t\t\tfonts![font.name] = paths;\n\t\t}\n\n\t\tif (options.font) {\n\t\t\tfonts = {};\n\t\t\tvfs = {};\n\t\t\taddFont(options.font);\n\n\t\t\tif (options.extraFonts) {\n\t\t\t\t$array.each(options.extraFonts, addFont);\n\t\t\t}\n\n\t\t\t// In pdfmake 0.3+ custom fonts and their files are registered on the\n\t\t\t// instance rather than passed to `createPdf()`. Merge them onto the\n\t\t\t// existing defaults so subsequent exports keep working.\n\t\t\tpdfmake.addFonts(fonts);\n\t\t\tpdfmake.addVirtualFileSystem(vfs);\n\t\t}\n\n\t\tthis.events.dispatch(\"pdfdocready\", {\n\t\t\ttype: \"pdfdocready\",\n\t\t\tformat: \"pdf\",\n\t\t\toptions: options,\n\t\t\tdoc: doc,\n\t\t\ttarget: this\n\t\t});\n\n\t\t// Create PDF\n\t\treturn await pdfmake.createPdf(doc, {}).getBase64();\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic async getPDFData(customOptions?: IExportingDataOptions): Promise<any> {\n\n\t\tconst options: any = this._getFormatOptions(\"pdfdata\", customOptions);\n\n\t\t// Init output\n\t\tlet content = <any>{\n\t\t\t\"body\": <any>[]\n\t\t};\n\n\t\t// Get data\n\t\tconst data = this.getData(\"html\", options);\n\t\tconst dataFields = this.getDataFields(data);\n\n\t\t// Vertical or horizontal (default) layout\n\t\tif (options.pivot) {\n\n\t\t\t// Data fields order\n\t\t\tconst dataFieldsOrder: string[] = this.get(\"dataFieldsOrder\", []);\n\n\t\t\t$object.eachOrdered(dataFields, (key, val) => {\n\t\t\t\tlet dataRow = [];\n\t\t\t\tif (options.addColumnNames) {\n\t\t\t\t\tdataRow.push(val);\n\t\t\t\t}\n\t\t\t\tfor (let len = data.length, i = 0; i < len; i++) {\n\t\t\t\t\tlet dataValue = data[i][key];\n\t\t\t\t\tdataRow.push(this.convertToSpecialFormat(key, dataValue, options, true));\n\t\t\t\t}\n\t\t\t\tcontent.body.push(this.getPDFDataRow(dataRow, options, undefined, true));\n\t\t\t}, (a, b) => {\n\t\t\t\tlet ai = dataFieldsOrder.indexOf(a);\n\t\t\t\tlet bi = dataFieldsOrder.indexOf(b);\n\t\t\t\tif (ai > bi) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\telse if (ai < bi) {\n\t\t\t\t\treturn -1\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t});\n\n\t\t}\n\n\t\telse {\n\n\t\t\t// Add column names?\n\t\t\tif (options.addColumnNames) {\n\t\t\t\tcontent.body.push(this.getPDFDataRow(dataFields, options, undefined, true));\n\t\t\t\tcontent.headerRows = 1;\n\t\t\t}\n\n\t\t\tfor (let len = data.length, i = 0; i < len; i++) {\n\t\t\t\tcontent.body.push(this.getPDFDataRow(data[i], options, dataFields));\n\t\t\t}\n\n\t\t}\n\n\t\treturn content;\n\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic getPDFDataRow(row: any, options: IExportingDataOptions, dataFields?: any, asIs: boolean = false): Array<string> {\n\n\t\t// Init\n\t\tlet items: any[] = [];\n\n\t\t// Data fields\n\t\tif (!dataFields) {\n\t\t\tdataFields = row;\n\t\t}\n\n\t\t// Data fields order\n\t\tconst dataFieldsOrder: string[] = this.get(\"dataFieldsOrder\", []);\n\n\t\t// Process each row item\n\t\t$object.eachOrdered(dataFields, (key, _name) => {\n\n\t\t\t// Get value\n\t\t\tlet value = this.convertEmptyValue(key, row[key], options);\n\n\t\t\t// Convert dates\n\t\t\tlet item = asIs ? value : this.convertToSpecialFormat(key, value, options);\n\t\t\titem = \"\" + item;\n\n\t\t\t// Add to item\n\t\t\titems.push(item);\n\t\t}, (a, b) => {\n\t\t\tlet ai = dataFieldsOrder.indexOf(a);\n\t\t\tlet bi = dataFieldsOrder.indexOf(b);\n\t\t\tif (ai > bi) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\telse if (ai < bi) {\n\t\t\t\treturn -1\n\t\t\t}\n\t\t\treturn 0;\n\t\t});\n\n\t\treturn items;\n\t}\n\n\t/**\n\t * Returns pdfmake instance.\n\t *\n\t * @ignore\n\t * @return Instance of pdfmake\n\t */\n\tpublic getPdfmake(): Promise<any> {\n\t\tif (pdfmakePromise === undefined) {\n\t\t\tpdfmakePromise = _pdfmake();\n\t\t}\n\n\t\treturn pdfmakePromise;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic getPageSizeFit(pageSize: pageSizes, margins: number | number[], extraMargin: number = 0, orientation: \"landscape\" | \"portrait\" = \"portrait\"): number[] {\n\n\t\t// Check margins\n\t\tlet newMargins = [0, 0, 0, 0];\n\t\tif ($type.isNumber(margins)) {\n\t\t\tnewMargins = [margins, margins, margins, margins];\n\t\t}\n\t\telse if (margins.length == 2) {\n\t\t\tnewMargins = [margins[0], margins[1], margins[0], margins[1]];\n\t\t}\n\t\telse if (margins.length == 4) {\n\t\t\tnewMargins = margins;\n\t\t}\n\n\t\t// Define available page sizes\n\t\tlet sizes = {\n\t\t\t\"4A0\": [4767.87, 6740.79],\n\t\t\t\"2A0\": [3370.39, 4767.87],\n\t\t\tA0: [2383.94, 3370.39],\n\t\t\tA1: [1683.78, 2383.94],\n\t\t\tA2: [1190.55, 1683.78],\n\t\t\tA3: [841.89, 1190.55],\n\t\t\tA4: [595.28, 841.89],\n\t\t\tA5: [419.53, 595.28],\n\t\t\tA6: [297.64, 419.53],\n\t\t\tA7: [209.76, 297.64],\n\t\t\tA8: [147.40, 209.76],\n\t\t\tA9: [104.88, 147.40],\n\t\t\tA10: [73.70, 104.88],\n\t\t\tB0: [2834.65, 4008.19],\n\t\t\tB1: [2004.09, 2834.65],\n\t\t\tB2: [1417.32, 2004.09],\n\t\t\tB3: [1000.63, 1417.32],\n\t\t\tB4: [708.66, 1000.63],\n\t\t\tB5: [498.90, 708.66],\n\t\t\tB6: [354.33, 498.90],\n\t\t\tB7: [249.45, 354.33],\n\t\t\tB8: [175.75, 249.45],\n\t\t\tB9: [124.72, 175.75],\n\t\t\tB10: [87.87, 124.72],\n\t\t\tC0: [2599.37, 3676.54],\n\t\t\tC1: [1836.85, 2599.37],\n\t\t\tC2: [1298.27, 1836.85],\n\t\t\tC3: [918.43, 1298.27],\n\t\t\tC4: [649.13, 918.43],\n\t\t\tC5: [459.21, 649.13],\n\t\t\tC6: [323.15, 459.21],\n\t\t\tC7: [229.61, 323.15],\n\t\t\tC8: [161.57, 229.61],\n\t\t\tC9: [113.39, 161.57],\n\t\t\tC10: [79.37, 113.39],\n\t\t\tRA0: [2437.80, 3458.27],\n\t\t\tRA1: [1729.13, 2437.80],\n\t\t\tRA2: [1218.90, 1729.13],\n\t\t\tRA3: [864.57, 1218.90],\n\t\t\tRA4: [609.45, 864.57],\n\t\t\tSRA0: [2551.18, 3628.35],\n\t\t\tSRA1: [1814.17, 2551.18],\n\t\t\tSRA2: [1275.59, 1814.17],\n\t\t\tSRA3: [907.09, 1275.59],\n\t\t\tSRA4: [637.80, 907.09],\n\t\t\tEXECUTIVE: [521.86, 756.00],\n\t\t\tFOLIO: [612.00, 936.00],\n\t\t\tLEGAL: [612.00, 1008.00],\n\t\t\tLETTER: [612.00, 792.00],\n\t\t\tTABLOID: [792.00, 1224.00]\n\t\t};\n\n\t\t// Calculate size\n\t\tlet fitSize = sizes[pageSize];\n\t\tif (orientation == \"landscape\") {\n\t\t\tfitSize.reverse();\n\t\t}\n\t\tfitSize[0] -= newMargins[0] + newMargins[2];\n\t\tfitSize[1] -= newMargins[1] + newMargins[3] + extraMargin;\n\t\treturn fitSize;\n\t}\n\n\t/**\n\t * ==========================================================================\n\t * Data\n\t * ==========================================================================\n\t */\n\n\t/**\n\t\t* Returns `true` if `dataSource` is set, and the contents are proper\n\t\t* data (array).\n\t\t*\n\t\t* @return Has data?\n\t\t*/\n\tpublic hasData(): boolean {\n\t\tconst dataSource = this.get(\"dataSource\");\n\t\treturn $type.isArray(dataSource) && dataSource.length ? true : false;\n\t}\n\n\t/**\n\t * Returns processed data according to format options.\n\t *\n\t * @param format Format\n\t * @param customOptions Format options\n\t * @param renameFields Should fields be renamed?\n\t * @return Processed data\n\t */\n\tpublic getData(format: ExportingFormats, customOptions?: IExportingDataOptions, renameFields: boolean = false): any {\n\t\tconst options: any = this._getFormatOptions(format, customOptions);\n\t\tconst dataSource = this.get(\"dataSource\", []);\n\t\tlet data: any = dataSource;\n\n\t\t// Re-generate the data based on data fields if set\n\t\tconst dataFields = this.get(\"dataFields\");\n\t\tif (dataFields && $type.isArray(dataSource)) {\n\t\t\tdata = [];\n\t\t\t$array.each(dataSource, (row) => {\n\t\t\t\tif ($type.isObject(row)) {\n\t\t\t\t\tconst newRow: any = {}\n\t\t\t\t\t$object.each(dataFields, (field, value) => {\n\t\t\t\t\t\tif (dataFields![field] != null) {\n\t\t\t\t\t\t\tnewRow[renameFields ? value : field] = this.convertToSpecialFormat(field, row[field], options);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tdata.push(newRow);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tconst event: any = {\n\t\t\ttype: \"dataprocessed\",\n\t\t\tformat: format,\n\t\t\toptions: options,\n\t\t\tdata: data,\n\t\t\ttarget: this\n\t\t};\n\n\t\tthis.events.dispatch(\"dataprocessed\", event);\n\n\t\treturn event.data;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic getDataFields(data: any): { [index: string]: string } {\n\t\tlet dataFields = this.get(\"dataFields\");\n\t\tif (!dataFields) {\n\t\t\tdataFields = {};\n\t\t\tif ($type.isArray(data) && data.length) {\n\t\t\t\t$array.each(data, (row) => {\n\t\t\t\t\t$object.each(row, (key, _value) => {\n\t\t\t\t\t\tif (dataFields![key] == null) {\n\t\t\t\t\t\t\tdataFields![key] = key;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn dataFields!;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic convertEmptyValue(_field: string, value: any, options: IExportingDataOptions): any {\n\t\treturn value != null ? value : options.emptyAs;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic convertToSpecialFormat(field: any, value: any, options: IExportingDataOptions, keepOriginal?: boolean): any {\n\n\t\t// Is this a timestamp or duration?\n\t\tif (typeof value == \"number\") {\n\t\t\tif (this.isDateField(field)) {\n\t\t\t\tvalue = new Date(value);\n\t\t\t}\n\t\t\telse if (this.isNumericField(field) && this.get(\"numberFormat\")) {\n\t\t\t\treturn this._root.numberFormatter.format(value, this.get(\"numberFormat\"));\n\t\t\t}\n\t\t\telse if (this.isDurationField(field)) {\n\t\t\t\treturn this._root.durationFormatter.format(value, this.get(\"durationFormat\"), this.get(\"durationUnit\"));\n\t\t\t}\n\t\t}\n\n\t\tif (value instanceof Date) {\n\t\t\tif (options.useTimestamps) {\n\t\t\t\tvalue = value.getTime();\n\t\t\t}\n\t\t\telse if (options.useLocale) {\n\t\t\t\tif (!keepOriginal) {\n\t\t\t\t\tvalue = value.toLocaleString();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvalue = this._root.dateFormatter.format(value, this.get(\"dateFormat\"));\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic isDateField(field: string): boolean {\n\t\treturn this.get(\"dateFields\")!.indexOf(field) !== -1;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic isNumericField(field: string): boolean {\n\t\treturn this.get(\"numericFields\")!.indexOf(field) !== -1;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic isDurationField(field: string): boolean {\n\t\treturn this.get(\"durationFields\")!.indexOf(field) !== -1;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic getContentType(type: ExportingFormats): string {\n\t\tlet contentType = \"\";\n\t\tswitch (type) {\n\t\t\tcase \"png\":\n\t\t\t\tcontentType = \"image/\" + type;\n\t\t\t\tbreak;\n\t\t\tcase \"jpg\":\n\t\t\t\tcontentType = \"image/jpeg\";\n\t\t\t\tbreak;\n\t\t\tcase \"csv\":\n\t\t\t\tcontentType = \"text/csv\";\n\t\t\t\tbreak;\n\t\t\tcase \"json\":\n\t\t\t\tcontentType = \"application/json\";\n\t\t\t\tbreak;\n\t\t\tcase \"html\":\n\t\t\t\tcontentType = \"text/html\";\n\t\t\t\tbreak;\n\t\t\tcase \"pdf\":\n\t\t\tcase \"pdfdata\":\n\t\t\t\tcontentType = \"application/pdf\";\n\t\t\t\tbreak;\n\t\t\tcase \"xlsx\":\n\t\t\t\tcontentType = \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tcontentType = \"application/octet-stream\";\n\t\t}\n\n\t\treturn contentType;\n\t}\n\n\tprotected getDisposableCanvas(): HTMLCanvasElement {\n\t\tlet canvas = document.createElement(\"canvas\");\n\t\tcanvas.style.position = \"fixed\";\n\t\tcanvas.style.top = \"-10000px\";\n\t\tthis._root.dom.appendChild(canvas);\n\t\treturn canvas;\n\t}\n\n\tprotected disposeCanvas(canvas: HTMLCanvasElement): void {\n\t\tthis._root.dom.removeChild(canvas);\n\t}\n\n\n\t/**\n\t * @ignore\n\t */\n\tpublic findBackgroundColor(element: Element): Color {\n\n\t\t// Check if element has styles set\n\t\tlet opacity = 1;\n\t\tlet currentColor = getComputedStyle(element, \"background-color\").getPropertyValue(\"background-color\");\n\n\t\t// Check opacity\n\t\tif (currentColor.match(/[^,]*,[^,]*,[^,]*,[ ]?0/) || currentColor == \"transparent\") {\n\t\t\topacity = 0;\n\t\t}\n\n\t\tif (opacity == 0) {\n\t\t\tlet parent = element.parentElement;// || <Element>element.parentNode;\n\n\t\t\t// Completely transparent. Look for a parent\n\t\t\tif (parent) {\n\t\t\t\treturn this.findBackgroundColor(parent);\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn Color.fromHex(0xffffff);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\treturn Color.fromCSS(currentColor);\n\t\t}\n\n\t}\n\n\t/**\n\t * Triggers download of the file.\n\t *\n\t * @param uri data:uri with file content\n\t * @param fileName File name\n\t * @param addBOM Should download include byte order mark?\n\t * @return Promise\n\t */\n\tpublic streamFile(uri: string, fileName: string, addBOM: boolean = false): boolean {\n\n\t\tif (this.blobDownloadSupport()) {\n\n\t\t\t/**\n\t\t\t * Supports Blob object.\n\t\t\t * Use it.\n\t\t\t */\n\t\t\tlet link = document.createElement(\"a\");\n\t\t\tlink.download = fileName;\n\t\t\tdocument.body.appendChild(link);\n\n\t\t\t// Extract content type and get pure data without headers\n\t\t\tlet parts = uri.split(\";\");\n\t\t\tlet contentType = parts!.shift()!.replace(/data:/, \"\");\n\n\t\t\turi = decodeURIComponent(parts.join(\";\").replace(/^[^,]*,/, \"\"));\n\n\t\t\tif ([\"image/svg+xml\", \"application/json\", \"text/csv\", \"text/html\"].indexOf(contentType) == -1) {\n\t\t\t\ttry {\n\t\t\t\t\tlet decoded = atob(uri);\n\t\t\t\t\turi = decoded;\n\t\t\t\t} catch (e) {\n\t\t\t\t\t// Error occurred, meaning string was not Base64-encoded. Do nothing.\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (addBOM) {\n\t\t\t\t\turi = \"\\ufeff\" + uri;\n\t\t\t\t}\n\t\t\t\tlet blob = new Blob([uri], { type: contentType });\n\t\t\t\tlet url = window.URL.createObjectURL(blob);\n\t\t\t\tlink.href = url;\n\t\t\t\tlink.download = fileName;\n\t\t\t\tlink.click();\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tdocument.body.removeChild(link);\n\t\t\t\t\twindow.URL.revokeObjectURL(url);\n\t\t\t\t}, 100);\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Dissect uri into array\n\t\t\tlet chars = new Array(uri.length);\n\t\t\tfor (let i = 0; i < uri.length; ++i) {\n\t\t\t\tlet charCode = uri.charCodeAt(i);\n\t\t\t\tchars[i] = charCode;\n\t\t\t}\n\n\t\t\tif (addBOM) {\n\t\t\t\tchars = [0xEF, 0xBB, 0xBF].concat(chars);\n\t\t\t}\n\t\t\tlet blob = new Blob([new Uint8Array(chars)], { type: contentType });\n\t\t\tlet url = window.URL.createObjectURL(blob);\n\t\t\tlink.href = url;\n\t\t\tlink.download = fileName;\n\t\t\tdocument.body.appendChild(link);\n\t\t\tlink.click();\n\t\t\tdocument.body.removeChild(link);\n\t\t\tsetTimeout(() => {\n\t\t\t\twindow.URL.revokeObjectURL(url);\n\t\t\t}, 100);\n\n\t\t}\n\n\t\telse if (this.linkDownloadSupport()) {\n\n\t\t\t/**\n\t\t\t * For regular browsers, we create a link then simulate a click on it\n\t\t\t */\n\n\t\t\tlet link = document.createElement(\"a\");\n\t\t\tlink.download = fileName;\n\t\t\tlink.href = uri;\n\t\t\tdocument.body.appendChild(link);\n\t\t\tlink.click();\n\t\t\tdocument.body.removeChild(link);\n\n\t\t}\n\t\telse {\n\n\t\t\t/**\n\t\t\t * Something else - perhaps a mobile.\n\t\t\t * Let's just display it in the same page.\n\t\t\t * (hey we don't like it either)\n\t\t\t */\n\t\t\twindow.location.href = uri;\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic downloadSupport(): boolean {\n\t\treturn this.linkDownloadSupport();\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic linkDownloadSupport(): boolean {\n\t\tlet a = document.createElement(\"a\");\n\t\tlet res = typeof a.download !== \"undefined\";\n\t\treturn res;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic blobDownloadSupport(): boolean {\n\t\treturn window.Blob != null;\n\t}\n\n\n\t/**\n\t * ==========================================================================\n\t * Print\n\t * ==========================================================================\n\t */\n\n\t/**\n\t * Initiates print of the chart.\n\t *\n\t * @param data data:uri for the image\n\t * @param options Options\n\t * @param title Optional title to use (uses window's title by default)\n\t * @return Promise\n\t */\n\tpublic initiatePrint(data: string, customOptions?: IExportingPrintOptions, title?: string): void {\n\t\tconst options = <IExportingPrintOptions>this._getFormatOptions(\"print\", customOptions);\n\t\tif (options.printMethod == \"css\") {\n\t\t\tthis._printViaCSS(data, options, title);\n\t\t}\n\t\telse {\n\t\t\tthis._printViaIframe(data, options, title);\n\t\t}\n\n\t}\n\n\tprotected _printViaCSS(data: string, customOptions?: IExportingPrintOptions, title?: string): void {\n\t\tconst options = <IExportingPrintOptions>this._getFormatOptions(\"print\", customOptions);\n\t\tlet delay = options.delay || 500;\n\n\t\t//Save current scroll position\n\t\tlet scroll = document.documentElement.scrollTop || document.body.scrollTop;\n\n\t\t// Hide all document nodes by applying custom CSS\n\t\tlet rule = new StyleRule($utils.getShadowRoot(this._root.dom), \"body > *\", {\n\t\t\t\"display\": \"none\",\n\t\t\t\"position\": \"fixed\",\n\t\t\t\"visibility\": \"hidden\",\n\t\t\t\"opacity\": \"0\",\n\t\t\t\"clipPath\": \"polygon(0px 0px,0px 0px,0px 0px,0px 0px);\"\n\t\t}, this._root.nonce);\n\n\t\tlet rule2 = new StyleRule($utils.getShadowRoot(this._root.dom), \"body\", {\n\t\t\t\"padding\": \"0\",\n\t\t\t\"margin\": \"0\"\n\t\t}, this._root.nonce);\n\n\t\t// Replace title?\n\t\tlet originalTitle: string;\n\t\tif (title && document && document.title) {\n\t\t\toriginalTitle = document.title;\n\t\t\tdocument.title = title;\n\t\t}\n\n\t\t// Create and add exported image\n\t\tlet img = new Image();\n\t\timg.src = data;\n\t\timg.style.maxWidth = \"100%\";\n\t\timg.style.display = \"block\";\n\t\timg.style.position = \"relative\";\n\t\timg.style.visibility = \"visible\";\n\t\timg.style.opacity = \"1\";\n\t\timg.style.clipPath = \"none\";\n\t\tdocument.body.appendChild(img);\n\n\t\t// Print\n\t\tthis.setTimeout(() => {\n\t\t\t(<any>window).print();\n\t\t}, 50);\n\n\t\t// Delay needs to be at least a second for iOS devices\n\t\tlet isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !(<any>window).MSStream;\n\t\tif (isIOS && (delay < 1000)) {\n\t\t\tdelay = 1000;\n\t\t}\n\t\telse if (delay < 100) {\n\t\t\tdelay = 100;\n\t\t}\n\n\t\t// Delay function that resets back the document the way ot was before\n\t\tthis.setTimeout(() => {\n\n\t\t\t// Remove image\n\t\t\tdocument.body.removeChild(img);\n\n\t\t\t// Reset back all elements\n\t\t\trule.dispose();\n\t\t\trule2.dispose();\n\n\t\t\t// Restore title\n\t\t\tif (originalTitle) {\n\t\t\t\tdocument.title = document.title;\n\t\t\t}\n\n\t\t\t// Scroll back the document the way it was before\n\t\t\tdocument.documentElement.scrollTop = document.body.scrollTop = scroll;\n\n\t\t}, delay || 500);\n\n\t}\n\n\tprotected _printViaIframe(data: string, customOptions?: IExportingPrintOptions, title?: string): void {\n\t\tconst options = <IExportingPrintOptions>this._getFormatOptions(\"print\", customOptions);\n\t\tlet delay = options.delay || 500;\n\n\t\t// Create an iframe\n\t\tconst iframe = document.createElement(\"iframe\");\n\t\tiframe.style.visibility = \"hidden\";\n\t\tdocument.body.appendChild(iframe);\n\n\t\t// This is needed for FireFox\n\t\tiframe.contentWindow!.document.open();\n\t\tiframe.contentWindow!.document.close();\n\n\t\t// Create and add exported image\n\t\tlet img = new Image();\n\t\timg.src = data;\n\t\timg.style.maxWidth = \"100%\";\n\t\timg.style.height = \"auto\";\n\t\tif (title) {\n\t\t\tiframe.contentWindow!.document.title = title;\n\t\t}\n\t\tiframe.contentWindow!.document.body.appendChild(img);\n\n\t\t(<any>iframe).load = function() {\n\t\t\tiframe.contentWindow!.document.body.appendChild(img);\n\t\t};\n\n\t\t// Print\n\t\tthis.setTimeout(() => {\n\t\t\ttry {\n\t\t\t\tif (!(<any>iframe).contentWindow.document.execCommand(\"print\", false, null)) {\n\t\t\t\t\t(<any>iframe).contentWindow.print();\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t(<any>iframe).contentWindow.print();\n\t\t\t}\n\t\t}, delay || 50);\n\n\t\t// Delay needs to be at least a second for iOS devices\n\t\tlet isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !(<any>window).MSStream;\n\t\tif (isIOS && (delay < 1000)) {\n\t\t\tdelay = 1000;\n\t\t}\n\t\telse if (delay < 100) {\n\t\t\tdelay = 100;\n\t\t}\n\n\t\t// Delay function that resets back the document the way ot was before\n\t\tthis.setTimeout(() => {\n\n\t\t\t// Remove image\n\t\t\tdocument.body.removeChild(iframe);\n\n\t\t}, delay + 50 || 100);\n\n\t}\n\n\t/**\n\t * Returns a list of formats that can be exported in current browser.\n\t *\n\t * @return Formats\n\t */\n\tpublic supportedFormats(): ExportingFormats[] {\n\t\tconst res: ExportingFormats[] = [];\n\t\tconst hasData = this.hasData();\n\t\tconst downloadSupport = this.downloadSupport();\n\t\t$array.each(<ExportingFormats[]>[\"png\", \"jpg\", \"canvas\", \"pdf\", \"xlsx\", \"csv\", \"json\", \"html\", \"pdfdata\", \"print\"], (format) => {\n\t\t\tconst options = this._getFormatOptions(format);\n\t\t\tif (options.disabled !== true) {\n\t\t\t\tif ([\"xlsx\", \"csv\", \"json\", \"html\", \"pdfdata\"].indexOf(format) == -1 || (hasData && downloadSupport)) {\n\t\t\t\t\tres.push(<ExportingFormats>format);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn res;\n\t}\n\n\t/**\n\t * Returns a list of supported export types: image or print.\n\t *\n\t * @return Supported types\n\t */\n\tpublic supportedExportTypes(): ExportingTypes[] {\n\t\tconst res: ExportingTypes[] = [\"image\", \"print\"];\n\t\tif (this.downloadSupport() && this.hasData()) {\n\t\t\tres.push(\"data\");\n\t\t}\n\t\treturn res;\n\t}\n\n}\n"]}
|