@amcharts/amcharts5 5.17.1 → 5.17.3
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/flow/ArcDiagram.d.ts +2 -2
- package/.internal/charts/flow/ArcDiagram.js.map +1 -1
- package/.internal/charts/flow/ChordNonRibbon.d.ts +1 -1
- package/.internal/charts/flow/ChordNonRibbon.js +1 -1
- package/.internal/charts/flow/ChordNonRibbon.js.map +1 -1
- package/.internal/charts/flow/SankeyLink.d.ts +1 -1
- package/.internal/charts/flow/SankeyLink.js.map +1 -1
- package/.internal/charts/funnel/FunnelSlice.d.ts +1 -1
- package/.internal/charts/funnel/FunnelSlice.js.map +1 -1
- package/.internal/charts/funnel/SlicedChart.d.ts +1 -1
- package/.internal/charts/funnel/SlicedChart.js +1 -1
- package/.internal/charts/funnel/SlicedChart.js.map +1 -1
- package/.internal/charts/gantt/Gantt.d.ts.map +1 -1
- package/.internal/charts/gantt/Gantt.js +0 -1
- package/.internal/charts/gantt/Gantt.js.map +1 -1
- package/.internal/charts/gantt/GanttSeries.d.ts.map +1 -1
- package/.internal/charts/gantt/GanttSeries.js +2 -0
- package/.internal/charts/gantt/GanttSeries.js.map +1 -1
- package/.internal/charts/hierarchy/ForceDirected.d.ts +2 -2
- package/.internal/charts/hierarchy/ForceDirected.js.map +1 -1
- package/.internal/charts/hierarchy/Hierarchy.d.ts +1 -1
- package/.internal/charts/hierarchy/Hierarchy.js.map +1 -1
- package/.internal/charts/hierarchy/Partition.d.ts +1 -1
- package/.internal/charts/hierarchy/Partition.js.map +1 -1
- package/.internal/charts/hierarchy/Treemap.d.ts +1 -2
- package/.internal/charts/hierarchy/Treemap.d.ts.map +1 -1
- package/.internal/charts/hierarchy/Treemap.js.map +1 -1
- package/.internal/charts/hierarchy/VoronoiTreemap.d.ts +3 -3
- package/.internal/charts/hierarchy/VoronoiTreemap.js.map +1 -1
- package/.internal/charts/map/ClusteredPointSeries.d.ts +2 -2
- package/.internal/charts/map/ClusteredPointSeries.js.map +1 -1
- package/.internal/charts/map/MapChart.d.ts +2 -2
- package/.internal/charts/map/MapChart.js.map +1 -1
- package/.internal/charts/map/MapPointSeries.d.ts +3 -1
- package/.internal/charts/map/MapPointSeries.d.ts.map +1 -1
- package/.internal/charts/map/MapPointSeries.js.map +1 -1
- package/.internal/charts/percent/PercentSeries.d.ts +2 -2
- package/.internal/charts/percent/PercentSeries.js.map +1 -1
- package/.internal/charts/radar/RadarChart.d.ts +2 -2
- package/.internal/charts/radar/RadarChart.js.map +1 -1
- package/.internal/charts/radar/RadarLineSeries.d.ts +1 -1
- package/.internal/charts/radar/RadarLineSeries.js.map +1 -1
- package/.internal/charts/stock/StockChart.d.ts +3 -3
- package/.internal/charts/stock/StockChart.js +3 -3
- package/.internal/charts/stock/StockChart.js.map +1 -1
- package/.internal/charts/stock/StockPanel.d.ts +1 -1
- package/.internal/charts/stock/StockPanel.js.map +1 -1
- package/.internal/charts/stock/drawing/DrawingSeries.d.ts +1 -1
- package/.internal/charts/stock/drawing/DrawingSeries.js.map +1 -1
- package/.internal/charts/stock/drawing/LabelSeries.d.ts +4 -1
- package/.internal/charts/stock/drawing/LabelSeries.d.ts.map +1 -1
- package/.internal/charts/stock/drawing/LabelSeries.js +1 -1
- package/.internal/charts/stock/drawing/LabelSeries.js.map +1 -1
- package/.internal/charts/stock/indicators/ChaikinMoneyFlow.d.ts +1 -1
- package/.internal/charts/stock/indicators/ChaikinMoneyFlow.js.map +1 -1
- package/.internal/charts/stock/indicators/Indicator.d.ts +2 -2
- package/.internal/charts/stock/indicators/Indicator.js.map +1 -1
- package/.internal/charts/stock/toolbar/DateRangeSelector.d.ts +1 -1
- package/.internal/charts/stock/toolbar/DateRangeSelector.js.map +1 -1
- package/.internal/charts/stock/toolbar/DrawingControl.d.ts +3 -0
- package/.internal/charts/stock/toolbar/DrawingControl.d.ts.map +1 -1
- package/.internal/charts/stock/toolbar/DrawingControl.js.map +1 -1
- package/.internal/charts/stock/toolbar/DropdownList.d.ts +1 -1
- package/.internal/charts/stock/toolbar/DropdownList.js.map +1 -1
- package/.internal/charts/stock/toolbar/DropdownListControl.d.ts +1 -1
- package/.internal/charts/stock/toolbar/DropdownListControl.js.map +1 -1
- package/.internal/charts/stock/toolbar/PeriodSelector.d.ts +1 -1
- package/.internal/charts/stock/toolbar/PeriodSelector.js.map +1 -1
- package/.internal/charts/stock/toolbar/StockControl.d.ts +2 -2
- package/.internal/charts/stock/toolbar/StockControl.js.map +1 -1
- package/.internal/charts/timeline/SerpentineChart.d.ts +3 -3
- package/.internal/charts/timeline/SerpentineChart.js.map +1 -1
- package/.internal/charts/timeline/SpiralChart.d.ts +3 -3
- package/.internal/charts/timeline/SpiralChart.js.map +1 -1
- package/.internal/charts/venn/Venn.d.ts +1 -1
- package/.internal/charts/venn/Venn.js.map +1 -1
- package/.internal/charts/wordcloud/WordCloud.d.ts +1 -1
- package/.internal/charts/wordcloud/WordCloud.js +1 -1
- package/.internal/charts/wordcloud/WordCloud.js.map +1 -1
- package/.internal/charts/xy/XYChart.d.ts +1 -1
- package/.internal/charts/xy/XYChart.js.map +1 -1
- package/.internal/charts/xy/axes/Axis.d.ts +8 -8
- package/.internal/charts/xy/axes/Axis.js.map +1 -1
- package/.internal/charts/xy/axes/AxisLabel.d.ts +1 -1
- package/.internal/charts/xy/axes/AxisLabel.js.map +1 -1
- package/.internal/charts/xy/axes/DateAxis.d.ts +1 -1
- package/.internal/charts/xy/axes/DateAxis.js.map +1 -1
- package/.internal/charts/xy/series/BaseColumnSeries.d.ts +1 -1
- package/.internal/charts/xy/series/BaseColumnSeries.js.map +1 -1
- package/.internal/charts/xy/series/ColumnSeries.d.ts +1 -1
- package/.internal/charts/xy/series/ColumnSeries.js.map +1 -1
- package/.internal/charts/xy/series/XYSeries.d.ts +3 -3
- package/.internal/charts/xy/series/XYSeries.d.ts.map +1 -1
- package/.internal/charts/xy/series/XYSeries.js.map +1 -1
- package/.internal/core/Registry.js +1 -1
- package/.internal/core/Registry.js.map +1 -1
- package/.internal/core/Root.d.ts.map +1 -1
- package/.internal/core/Root.js +15 -3
- package/.internal/core/Root.js.map +1 -1
- package/.internal/core/render/Bullet.d.ts +2 -3
- package/.internal/core/render/Bullet.d.ts.map +1 -1
- package/.internal/core/render/Bullet.js.map +1 -1
- package/.internal/core/render/Container.d.ts +5 -1
- package/.internal/core/render/Container.d.ts.map +1 -1
- package/.internal/core/render/Container.js.map +1 -1
- package/.internal/core/render/Graphics.d.ts +3 -1
- package/.internal/core/render/Graphics.d.ts.map +1 -1
- package/.internal/core/render/Graphics.js.map +1 -1
- package/.internal/core/render/HeatLegend.d.ts +1 -1
- package/.internal/core/render/HeatLegend.js.map +1 -1
- package/.internal/core/render/Label.d.ts +8 -3
- package/.internal/core/render/Label.d.ts.map +1 -1
- package/.internal/core/render/Label.js.map +1 -1
- package/.internal/core/render/Legend.d.ts +3 -0
- package/.internal/core/render/Legend.d.ts.map +1 -1
- package/.internal/core/render/Legend.js.map +1 -1
- package/.internal/core/render/PointedRectangle.d.ts +2 -2
- package/.internal/core/render/PointedRectangle.js.map +1 -1
- package/.internal/core/render/Polygon.d.ts +1 -1
- package/.internal/core/render/Polygon.js.map +1 -1
- package/.internal/core/render/RadialLabel.d.ts +3 -3
- package/.internal/core/render/RadialLabel.js.map +1 -1
- package/.internal/core/render/RoundedRectangle.d.ts +1 -1
- package/.internal/core/render/RoundedRectangle.js.map +1 -1
- package/.internal/core/render/Sprite.d.ts +28 -8
- package/.internal/core/render/Sprite.d.ts.map +1 -1
- package/.internal/core/render/Sprite.js.map +1 -1
- package/.internal/core/render/Tooltip.d.ts +5 -4
- package/.internal/core/render/Tooltip.d.ts.map +1 -1
- package/.internal/core/render/Tooltip.js.map +1 -1
- package/.internal/core/render/ZoomableContainer.d.ts +1 -1
- package/.internal/core/render/ZoomableContainer.js.map +1 -1
- package/.internal/core/render/backend/CanvasRenderer.d.ts +1 -1
- package/.internal/core/render/backend/CanvasRenderer.d.ts.map +1 -1
- package/.internal/core/render/backend/CanvasRenderer.js +27 -2
- package/.internal/core/render/backend/CanvasRenderer.js.map +1 -1
- package/.internal/core/render/patterns/CirclePattern.d.ts +2 -2
- package/.internal/core/render/patterns/CirclePattern.js.map +1 -1
- package/.internal/core/render/patterns/GrainPattern.d.ts +1 -1
- package/.internal/core/render/patterns/GrainPattern.js.map +1 -1
- package/.internal/core/render/patterns/LinePattern.d.ts +2 -2
- package/.internal/core/render/patterns/LinePattern.js.map +1 -1
- package/.internal/core/render/patterns/Pattern.d.ts +6 -2
- package/.internal/core/render/patterns/Pattern.d.ts.map +1 -1
- package/.internal/core/render/patterns/Pattern.js.map +1 -1
- package/.internal/core/render/patterns/PicturePattern.d.ts +1 -1
- package/.internal/core/render/patterns/PicturePattern.js.map +1 -1
- package/.internal/core/util/ColorSet.d.ts +4 -3
- package/.internal/core/util/ColorSet.d.ts.map +1 -1
- package/.internal/core/util/ColorSet.js.map +1 -1
- package/.internal/core/util/DateFormatter.d.ts +1 -0
- package/.internal/core/util/DateFormatter.d.ts.map +1 -1
- package/.internal/core/util/DateFormatter.js.map +1 -1
- package/.internal/core/util/Entity.d.ts +62 -2
- package/.internal/core/util/Entity.d.ts.map +1 -1
- package/.internal/core/util/Entity.js +117 -0
- package/.internal/core/util/Entity.js.map +1 -1
- package/.internal/core/util/NumberFormatter.d.ts +2 -3
- package/.internal/core/util/NumberFormatter.d.ts.map +1 -1
- package/.internal/core/util/NumberFormatter.js.map +1 -1
- package/.internal/core/util/Utils.d.ts +7 -0
- package/.internal/core/util/Utils.d.ts.map +1 -1
- package/.internal/core/util/Utils.js +9 -0
- package/.internal/core/util/Utils.js.map +1 -1
- package/.internal/plugins/exporting/Annotator.d.ts +1 -1
- package/.internal/plugins/exporting/Annotator.js.map +1 -1
- package/.internal/plugins/exporting/Exporting.d.ts +2 -2
- package/.internal/plugins/exporting/Exporting.js.map +1 -1
- package/.internal/plugins/exporting/ExportingMenu.d.ts +1 -1
- package/.internal/plugins/exporting/ExportingMenu.js.map +1 -1
- package/.internal/plugins/sliceGrouper/SliceGrouper.d.ts +1 -1
- package/.internal/plugins/sliceGrouper/SliceGrouper.js.map +1 -1
- package/CHANGELOG.md +21 -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 +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumberFormatter.js","sourceRoot":"","sources":["../../../../../src/.internal/core/util/NumberFormatter.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Language } from \"./Language\";\n\nimport { Entity, IEntitySettings, IEntityPrivate } from \"./Entity\"\nimport { TextFormatter } from \"./TextFormatter\";\n\nimport * as $object from \"./Object\";\nimport * as $utils from \"./Utils\";\nimport * as $type from \"./Type\";\n\n/**\n * @ignore\n */\nexport interface INumberSuffix {\n\tnumber: number;\n\tsuffix: string;\n}\n\nexport interface INumberFormatterSettings extends IEntitySettings {\n\n\t/**\n\t * Number format to be used when formatting numbers.\n\t *\n\t * @default \"#,###.#####\"\n\t */\n\tnumberFormat?: string | Intl.NumberFormatOptions;\n\n\t/**\n\t * A threshold value for negative numbers.\n\t *\n\t * @default 0\n\t */\n\tnegativeBase?: number;\n\n\t/**\n\t * Prefixes and thresholds to group big numbers into, e.g. 1M.\n\t *\n\t * Used in conjunction with `a` modifier of the number format.\n\t */\n\tbigNumberPrefixes?: INumberSuffix[];\n\n\t/**\n\t * Prefixes and thresholds to group small numbers into, e.g. 1m.\n\t *\n\t * Used in conjunction with `a` modifier of the number format.\n\t */\n\tsmallNumberPrefixes?: INumberSuffix[];\n\n\t/**\n\t * All numbers below this value are considered small.\n\t *\n\t * @default 1\n\t */\n\tsmallNumberThreshold?: number;\n\n\t/**\n\t * Prefixes to and thresholds to use when grouping data size numbers, e.g. 1MB.\n\t *\n\t * Used in conjunction with `b` modifier of the number format.\n\t */\n\tbytePrefixes?: INumberSuffix[];\n\n\t/**\n\t * Indicates which fields in data should be considered numeric.\n\t *\n\t * It is used when formatting data placeholder values.\n\t */\n\tnumericFields?: string[];\n\n\t/**\n\t * Locales if you are using date formats in `Intl.NumberFormatOptions` syntax.\n\t *\n\t * @see (@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat) about using Intl for number formatting\n\t * @param value Locales\n\t */\n\tintlLocales?: string;\n\n\t/**\n\t * If set to `true` will force the number string to be LTR, even if RTL is\n\t * enabled.\n\t * \n\t * @default false\n\t * @since 5.3.13\n\t */\n\tforceLTR?: boolean;\n\n}\n\nexport interface INumberFormatterPrivate extends IEntityPrivate {\n}\n\n/**\n * Number formatter\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/formatters/formatting-numbers/} for more info\n * @important\n */\nexport class NumberFormatter extends Entity {\n\tdeclare public _settings: INumberFormatterSettings;\n\tdeclare public _privateSettings: INumberFormatterPrivate;\n\n\tprotected _setDefaults() {\n\t\t// Defaults\n\t\tthis._setDefault(\"negativeBase\", 0);\n\t\tthis._setDefault(\"numberFormat\", \"#,###.#####\");\n\t\tthis._setDefault(\"smallNumberThreshold\", 1.00);\n\n\t\tconst bns = \"_big_number_suffix_\";\n\t\tconst sns = \"_small_number_suffix_\";\n\t\tconst bs = \"_byte_suffix_\";\n\n\t\tthis._setDefault(\"bigNumberPrefixes\", [\n\t\t\t{ \"number\": 1e+3, \"suffix\": this._t(bns + \"3\") },\n\t\t\t{ \"number\": 1e+6, \"suffix\": this._t(bns + \"6\") },\n\t\t\t{ \"number\": 1e+9, \"suffix\": this._t(bns + \"9\") },\n\t\t\t{ \"number\": 1e+12, \"suffix\": this._t(bns + \"12\") },\n\t\t\t{ \"number\": 1e+15, \"suffix\": this._t(bns + \"15\") },\n\t\t\t{ \"number\": 1e+18, \"suffix\": this._t(bns + \"18\") },\n\t\t\t{ \"number\": 1e+21, \"suffix\": this._t(bns + \"21\") },\n\t\t\t{ \"number\": 1e+24, \"suffix\": this._t(bns + \"24\") }\n\t\t]);\n\n\t\tthis._setDefault(\"smallNumberPrefixes\", [\n\t\t\t{ \"number\": 1e-24, \"suffix\": this._t(sns + \"24\") },\n\t\t\t{ \"number\": 1e-21, \"suffix\": this._t(sns + \"21\") },\n\t\t\t{ \"number\": 1e-18, \"suffix\": this._t(sns + \"18\") },\n\t\t\t{ \"number\": 1e-15, \"suffix\": this._t(sns + \"15\") },\n\t\t\t{ \"number\": 1e-12, \"suffix\": this._t(sns + \"12\") },\n\t\t\t{ \"number\": 1e-9, \"suffix\": this._t(sns + \"9\") },\n\t\t\t{ \"number\": 1e-6, \"suffix\": this._t(sns + \"6\") },\n\t\t\t{ \"number\": 1e-3, \"suffix\": this._t(sns + \"3\") }\n\t\t]);\n\n\t\tthis._setDefault(\"bytePrefixes\", [\n\t\t\t{ \"number\": 1, suffix: this._t(bs + \"B\") },\n\t\t\t{ \"number\": 1024, suffix: this._t(bs + \"KB\") },\n\t\t\t{ \"number\": 1048576, suffix: this._t(bs + \"MB\") },\n\t\t\t{ \"number\": 1073741824, suffix: this._t(bs + \"GB\") },\n\t\t\t{ \"number\": 1099511627776, suffix: this._t(bs + \"TB\") },\n\t\t\t{ \"number\": 1125899906842624, suffix: this._t(bs + \"PB\") }\n\t\t]);\n\n\t\tsuper._setDefaults();\n\t}\n\n\tpublic _beforeChanged() {\n\t\tsuper._beforeChanged();\n\t}\n\n\t/**\n\t * Formats the number according to specific format.\n\t *\n\t * @param value Value to format\n\t * @param format Format to apply\n\t * @return Formatted number\n\t */\n\tpublic format(value: number | string, format?: string | Intl.NumberFormatOptions, precision?: number): string {\n\n\t\t// no format passed in or \"Number\"\n\t\tif (format == null || ($type.isString(format) && format.toLowerCase() === \"number\")) {\n\t\t\tformat = this.get(\"numberFormat\", \"\");\n\t\t}\n\n\t\t// Init return value\n\t\tlet formatted;\n\n\t\t// Cast to number just in case\n\t\t// TODO: maybe use better casting\n\t\tlet source: number = Number(value);\n\n\t\t// Is it a built-in format or Intl.NumberFormatOptions\n\t\tif ($type.isObject(format)) {\n\t\t\ttry {\n\t\t\t\tif (this.get(\"intlLocales\")) {\n\t\t\t\t\treturn new Intl.NumberFormat(this.get(\"intlLocales\"), <Intl.NumberFormatOptions>format).format(source);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn new Intl.NumberFormat(undefined, <Intl.NumberFormatOptions>format).format(source);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (e) {\n\t\t\t\treturn \"Invalid\";\n\t\t\t}\n\n\t\t}\n\t\telse {\n\n\t\t\t// Clean format\n\t\t\tformat = $utils.cleanFormat(format!);\n\n\t\t\t// Get format info (it will also deal with parser caching)\n\t\t\tlet info = this.parseFormat(format, this._root.language);\n\n\n\t\t\t// format and replace the number\n\t\t\tlet details;\n\t\t\tif (source > this.get(\"negativeBase\")) {\n\t\t\t\tdetails = info.positive;\n\t\t\t}\n\t\t\telse if (source < this.get(\"negativeBase\")) {\n\t\t\t\tdetails = info.negative;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdetails = info.zero;\n\t\t\t}\n\n\t\t\t// Adjust precision\n\t\t\tif (precision != null && !details.mod) {\n\t\t\t\tdetails = $object.copy(details);\n\t\t\t\tdetails.decimals.active = source == 0 ? 0 : precision;\n\t\t\t}\n\n\t\t\t// Format\n\t\t\tformatted = details.template.split($type.PLACEHOLDER).join(this.applyFormat(source, details));\n\n\t\t}\n\n\t\tif (this.get(\"forceLTR\") === true) {\n\t\t\tformatted = \"\" + formatted;\n\t\t}\n\n\t\treturn formatted;\n\t}\n\n\t/**\n\t * Parses supplied format into structured object which can be used to format\n\t * the number.\n\t *\n\t * @param format Format string, i.e. \"#,###.00\"\n\t * @param language Language\n\t * @ignore\n\t */\n\tprotected parseFormat(format: string, language: Language): any {\n\n\t\t// Check cache\n\t\t// TODO\n\t\t// let cached = this.getCache(format);\n\t\t// if (cached != null) {\n\t\t// \treturn cached;\n\t\t// }\n\n\t\tconst thousandSeparator = language.translateEmpty(\"_thousandSeparator\");\n\t\tconst decimalSeparator = language.translateEmpty(\"_decimalSeparator\")\n\n\t\t// init format parse info holder\n\t\tlet info: any = {\n\t\t\t\"positive\": {\n\t\t\t\t\"thousands\": {\n\t\t\t\t\t\"active\": -1,\n\t\t\t\t\t\"passive\": -1,\n\t\t\t\t\t\"interval\": -1,\n\t\t\t\t\t\"separator\": thousandSeparator\n\t\t\t\t},\n\t\t\t\t\"decimals\": {\n\t\t\t\t\t\"active\": -1,\n\t\t\t\t\t\"passive\": -1,\n\t\t\t\t\t\"separator\": decimalSeparator\n\t\t\t\t},\n\t\t\t\t\"template\": \"\",\n\t\t\t\t\"source\": \"\",\n\t\t\t\t\"parsed\": false\n\t\t\t},\n\t\t\t\"negative\": {\n\t\t\t\t\"thousands\": {\n\t\t\t\t\t\"active\": -1,\n\t\t\t\t\t\"passive\": -1,\n\t\t\t\t\t\"interval\": -1,\n\t\t\t\t\t\"separator\": thousandSeparator\n\t\t\t\t},\n\t\t\t\t\"decimals\": {\n\t\t\t\t\t\"active\": -1,\n\t\t\t\t\t\"passive\": -1,\n\t\t\t\t\t\"separator\": decimalSeparator\n\t\t\t\t},\n\t\t\t\t\"template\": \"\",\n\t\t\t\t\"source\": \"\",\n\t\t\t\t\"parsed\": false\n\t\t\t},\n\t\t\t\"zero\": {\n\t\t\t\t\"thousands\": {\n\t\t\t\t\t\"active\": -1,\n\t\t\t\t\t\"passive\": -1,\n\t\t\t\t\t\"interval\": -1,\n\t\t\t\t\t\"separator\": thousandSeparator\n\t\t\t\t},\n\t\t\t\t\"decimals\": {\n\t\t\t\t\t\"active\": -1,\n\t\t\t\t\t\"passive\": -1,\n\t\t\t\t\t\"separator\": decimalSeparator\n\t\t\t\t},\n\t\t\t\t\"template\": \"\",\n\t\t\t\t\"source\": \"\",\n\t\t\t\t\"parsed\": false\n\t\t\t}\n\t\t};\n\n\t\t// Escape double vertical bars (that mean display one vertical bar)\n\t\tformat = format.replace(\"||\", $type.PLACEHOLDER2);\n\n\t\t// Split it up and deal with different formats\n\t\tlet parts = format.split(\"|\");\n\t\tinfo.positive.source = parts[0];\n\n\t\tif (typeof parts[2] === \"undefined\") {\n\t\t\tinfo.zero = info.positive;\n\t\t}\n\t\telse {\n\t\t\tinfo.zero.source = parts[2];\n\t\t}\n\n\t\tif (typeof parts[1] === \"undefined\") {\n\t\t\tinfo.negative = info.positive;\n\t\t}\n\t\telse {\n\t\t\tinfo.negative.source = parts[1];\n\t\t}\n\n\t\t// Parse each\n\t\t$object.each(info, (_part, item) => {\n\t\t\t// Already parsed\n\t\t\tif (item.parsed) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Check cached\n\t\t\t// TODO\n\t\t\t// if (typeof this.getCache(item.source) !== \"undefined\") {\n\t\t\t// \tinfo[part] = this.getCache(item.source);\n\t\t\t// \treturn;\n\t\t\t// }\n\n\t\t\t// Begin parsing\n\t\t\tlet partFormat = item.source;\n\n\t\t\t// Just \"Number\"?\n\t\t\tif (partFormat.toLowerCase() === \"number\") {\n\t\t\t\tpartFormat = this.get(\"numberFormat\", \"#,###.#####\");\n\t\t\t}\n\n\t\t\t// Let TextFormatter split into chunks\n\t\t\tlet chunks = TextFormatter.chunk(partFormat, true);\n\t\t\tfor (let i: number = 0; i < chunks.length; i++) {\n\t\t\t\tlet chunk = chunks[i];\n\n\t\t\t\t// replace back double vertical bar\n\t\t\t\tchunk.text = chunk.text.replace($type.PLACEHOLDER2, \"|\");\n\n\t\t\t\tif (chunk.type === \"value\") {\n\t\t\t\t\t// Parse format\n\n\t\t\t\t\t// Look for codes\n\t\t\t\t\tlet matches: string[] | null = chunk.text.match(/[#0.,]+[ ]?[abespABESP%!]?[abespABESP‰!]?/);\n\n\t\t\t\t\tif (matches) {\n\t\t\t\t\t\tif (matches === null || matches[0] === \"\") {\n\t\t\t\t\t\t\t// no codes here - assume string\n\t\t\t\t\t\t\t// nothing to do here\n\t\t\t\t\t\t\titem.template += chunk.text;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\n\t\t\t\t\t\t\t// look for the format modifiers at the end\n\t\t\t\t\t\t\tlet mods: string[] | null = matches[0].match(/[abespABESP%‰!]{2}|[abespABESP%‰]{1}$/);\n\n\t\t\t\t\t\t\tif (mods) {\n\t\t\t\t\t\t\t\titem.mod = mods[0].toLowerCase();\n\t\t\t\t\t\t\t\titem.modSpacing = matches[0].match(/[ ]{1}[abespABESP%‰!]{1}$/) ? true : false;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// break the format up\n\t\t\t\t\t\t\tlet a = matches[0].split(\".\");\n\n\t\t\t\t\t\t\t// Deal with thousands\n\t\t\t\t\t\t\tif (a[0] === \"\") {\n\t\t\t\t\t\t\t\t// No directives for thousands\n\t\t\t\t\t\t\t\t// Leave default settings (no formatting)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t// Counts\n\t\t\t\t\t\t\t\titem.thousands.active = (a[0].match(/0/g) || []).length;\n\t\t\t\t\t\t\t\titem.thousands.passive = (a[0].match(/\\#/g) || []).length + item.thousands.active;\n\n\t\t\t\t\t\t\t\t// Separator interval\n\t\t\t\t\t\t\t\tlet b = a[0].split(\",\");\n\t\t\t\t\t\t\t\tif (b.length === 1) {\n\t\t\t\t\t\t\t\t\t// No thousands separators\n\t\t\t\t\t\t\t\t\t// Do nothing\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t// Use length fo the last chunk as thousands length\n\t\t\t\t\t\t\t\t\titem.thousands.interval = (b.pop() || \"\").length;\n\n\t\t\t\t\t\t\t\t\tif (item.thousands.interval === 0) {\n\t\t\t\t\t\t\t\t\t\titem.thousands.interval = -1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Deal with decimals\n\t\t\t\t\t\t\tif (typeof (a[1]) === \"undefined\") {\n\t\t\t\t\t\t\t\t// No directives for decimals\n\t\t\t\t\t\t\t\t// Leave at defaults (no formatting)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t// Counts\n\t\t\t\t\t\t\t\titem.decimals.active = (a[1].match(/0/g) || []).length;\n\t\t\t\t\t\t\t\titem.decimals.passive = (a[1].match(/\\#/g) || []).length + item.decimals.active;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Add special code to template\n\t\t\t\t\t\t\titem.template += chunk.text.split(matches[0]).join($type.PLACEHOLDER);\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Quoted string - take it as it is\n\t\t\t\t\titem.template += chunk.text;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Apply style formatting\n\t\t\t//item.template = getTextFormatter().format(item.template, this.outputFormat);\n\n\t\t\t// Save cache\n\t\t\t// TODO\n\t\t\t//this.setCache(item.source, item);\n\n\t\t\t// Mark this as parsed\n\t\t\titem.parsed = true;\n\n\t\t});\n\n\t\t// Save cache (the whole thing)\n\t\t// TODO\n\t\t//this.setCache(format, info);\n\n\t\treturn info;\n\t}\n\n\t/**\n\t * Applies parsed format to a numeric value.\n\t *\n\t * @param value Value\n\t * @param details Parsed format as returned by parseFormat()\n\t * @return Formatted number\n\t * @ignore\n\t */\n\tprotected applyFormat(value: number, details: any): string {\n\n\t\t// Use absolute values\n\t\tlet negative: boolean = value < 0;\n\t\tvalue = Math.abs(value);\n\n\t\t// Recalculate according to modifier\n\t\tlet prefix: string = \"\", suffix: string = \"\";\n\t\tlet mods: string[] = details.mod ? details.mod.split(\"\") : [];\n\t\tif (mods.indexOf(\"b\") !== -1) {\n\t\t\tlet a = this.applyPrefix(value, this.get(\"bytePrefixes\")!, mods.indexOf(\"!\") !== -1);\n\t\t\tvalue = a[0];\n\t\t\tprefix = a[1];\n\t\t\tsuffix = a[2];\n\t\t\tif (details.modSpacing) {\n\t\t\t\tsuffix = \" \" + suffix;\n\t\t\t}\n\t\t}\n\t\telse if (mods.indexOf(\"a\") !== -1) {\n\t\t\tlet a = this.applyPrefix(value, value < this.get(\"smallNumberThreshold\")! ? this.get(\"smallNumberPrefixes\")! : this.get(\"bigNumberPrefixes\")!, mods.indexOf(\"!\") !== -1);\n\t\t\tvalue = a[0];\n\t\t\tprefix = a[1];\n\t\t\tsuffix = a[2];\n\t\t\tif (details.modSpacing) {\n\t\t\t\tsuffix = \" \" + suffix;\n\t\t\t}\n\t\t}\n\t\telse if (mods.indexOf(\"p\") !== -1) {\n\t\t\tlet ol = Math.min(value.toString().length + 2, 21);\n\t\t\t//value *= 100;\n\t\t\tvalue = parseFloat(value.toPrecision(ol));\n\t\t\tprefix = this._root.language.translate(\"_percentPrefix\");\n\t\t\tsuffix = this._root.language.translate(\"_percentSuffix\");\n\t\t\tif (prefix == \"\" && suffix == \"\") {\n\t\t\t\tsuffix = \"%\";\n\t\t\t}\n\t\t}\n\t\telse if (mods.indexOf(\"%\") !== -1) {\n\t\t\tlet ol = Math.min(value.toString().length + 2, 21);\n\t\t\tvalue *= 100;\n\t\t\tvalue = parseFloat(value.toPrecision(ol));\n\t\t\tsuffix = \"%\";\n\t\t}\n\t\telse if (mods.indexOf(\"‰\") !== -1) {\n\t\t\tlet ol = Math.min(value.toString().length + 3, 21);\n\t\t\tvalue *= 1000;\n\t\t\tvalue = parseFloat(value.toPrecision(ol));\n\t\t\tsuffix = \"‰\";\n\t\t}\n\n\t\t// Round to passive\n\t\tif (mods.indexOf(\"e\") !== -1) {\n\t\t\t// convert the value to exponential\n\t\t\tlet exp: string[];\n\t\t\tif (details.decimals.passive >= 0) {\n\t\t\t\texp = value.toExponential(details.decimals.passive).split(\"e\");\n\t\t\t}\n\t\t\telse {\n\t\t\t\texp = value.toExponential().split(\"e\");\n\t\t\t}\n\t\t\tvalue = Number(exp[0]);\n\t\t\tsuffix = \"e\" + exp[1];\n\t\t\tif (details.modSpacing) {\n\t\t\t\tsuffix = \" \" + suffix;\n\t\t\t}\n\t\t}\n\t\telse if (details.decimals.passive === 0) {\n\t\t\tvalue = Math.round(value);\n\t\t}\n\t\telse if (details.decimals.passive > 0) {\n\t\t\tconst decimals = $utils.decimalPlaces(value);\n\t\t\tif (decimals > 0) {\n\t\t\t\tconst d = Math.pow(10, details.decimals.passive);\n\t\t\t\tvalue = Math.round(parseFloat((value * d).toFixed(decimals))) / d;\n\t\t\t}\n\t\t}\n\n\t\t// Init return value\n\t\tlet res: string = \"\";\n\n\t\t// Calc integer and decimal parts\n\t\tlet a = $type.numberToString(value).split(\".\");\n\n\t\t// Format integers\n\t\tlet ints = a[0];\n\n\t\t// Pad integers to active length\n\t\tif (ints.length < details.thousands.active) {\n\t\t\tints = Array(details.thousands.active - ints.length + 1).join(\"0\") + ints;\n\t\t}\n\n\t\t// Insert thousands separators\n\t\tif (details.thousands.interval > 0) {\n\t\t\tlet ip: string[] = [];\n\t\t\tlet intsr: string = ints.split(\"\").reverse().join(\"\");\n\t\t\tfor (let i = 0, len = ints.length; i <= len; i += details.thousands.interval) {\n\t\t\t\tlet c: string = intsr.substr(i, details.thousands.interval).split(\"\").reverse().join(\"\");\n\t\t\t\tif (c !== \"\") {\n\t\t\t\t\tip.unshift(c);\n\t\t\t\t}\n\t\t\t}\n\t\t\tints = ip.join(details.thousands.separator);\n\t\t}\n\n\t\t// Add integers\n\t\tres += ints;\n\n\t\t// Add decimals\n\t\tif (a.length === 1) {\n\t\t\ta.push(\"\");\n\t\t}\n\t\tlet decs: string = a[1];\n\n\t\t// Fill zeros?\n\t\tif (decs.length < details.decimals.active) {\n\t\t\tdecs += Array(details.decimals.active - decs.length + 1).join(\"0\");\n\t\t}\n\n\t\tif (decs !== \"\") {\n\t\t\tres += details.decimals.separator + decs;\n\t\t}\n\n\t\t// Can't have empty return value\n\t\tif (res === \"\") {\n\t\t\tres = \"0\";\n\t\t}\n\n\t\t// Add minus sign back\n\t\tif (value !== 0 && negative && (mods.indexOf(\"s\") === -1)) {\n\t\t\tres = \"-\" + res;\n\t\t}\n\n\t\t// Add suffixes/prefixes\n\t\tif (prefix) {\n\t\t\tres = prefix + res;\n\t\t}\n\t\tif (suffix) {\n\t\t\tres += suffix;\n\t\t}\n\n\t\treturn res;\n\t}\n\n\n\tprotected applyPrefix(value: number, prefixes: any[], force: boolean = false): any[] {\n\t\tlet newvalue = value;\n\t\tlet prefix = \"\";\n\t\tlet suffix = \"\";\n\t\tlet applied = false;\n\t\tlet k = 1;\n\n\t\tfor (let i = 0, len = prefixes.length; i < len; i++) {\n\t\t\tif (prefixes[i].number <= value) {\n\t\t\t\tif (prefixes[i].number === 0) {\n\t\t\t\t\tnewvalue = 0;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnewvalue = value / prefixes[i].number;\n\t\t\t\t\tk = prefixes[i].number;\n\t\t\t\t}\n\t\t\t\tprefix = prefixes[i].prefix;\n\t\t\t\tsuffix = prefixes[i].suffix;\n\t\t\t\tapplied = true;\n\t\t\t}\n\t\t}\n\n\n\t\tif (!applied && force && prefixes.length && value != 0) {\n\t\t\t// Prefix was not applied. Use the first prefix.\n\t\t\tnewvalue = value / prefixes[0].number;\n\t\t\tprefix = prefixes[0].prefix;\n\t\t\tsuffix = prefixes[0].suffix;\n\t\t\tapplied = true;\n\t\t}\n\n\t\tif (applied) {\n\t\t\tnewvalue = parseFloat(\n\t\t\t\tnewvalue.toPrecision(\n\t\t\t\t\tMath.min(k.toString().length + Math.floor(newvalue).toString().replace(/[^0-9]*/g, \"\").length, 21)\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\treturn [newvalue, prefix, suffix];\n\t}\n\n\t/**\n\t * Replaces brackets with temporary placeholders.\n\t *\n\t * @ignore Exclude from docs\n\t * @param text Input text\n\t * @return Escaped text\n\t */\n\tpublic escape(text: string): string {\n\t\treturn text.replace(\"||\", $type.PLACEHOLDER2);\n\t}\n\n\t/**\n\t * Replaces placeholders back to brackets.\n\t *\n\t * @ignore Exclude from docs\n\t * @param text Escaped text\n\t * @return Unescaped text\n\t */\n\tpublic unescape(text: string): string {\n\t\treturn text.replace($type.PLACEHOLDER2, \"|\");\n\t}\n\n}\n"]}
|
|
1
|
+
{"version":3,"file":"NumberFormatter.js","sourceRoot":"","sources":["../../../../../src/.internal/core/util/NumberFormatter.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Language } from \"./Language\";\n\nimport { Entity, IEntitySettings, IEntityPrivate } from \"./Entity\"\nimport { TextFormatter } from \"./TextFormatter\";\n\nimport * as $object from \"./Object\";\nimport * as $utils from \"./Utils\";\nimport * as $type from \"./Type\";\n\n/**\n * @ignore\n */\nexport interface INumberSuffix {\n\tnumber: number;\n\tsuffix: string;\n}\n\nexport interface INumberFormatterSettings extends IEntitySettings {\n\n\t/**\n\t * Number format to be used when formatting numbers.\n\t *\n\t * @default \"#,###.#####\"\n\t */\n\tnumberFormat?: string | Intl.NumberFormatOptions;\n\n\t/**\n\t * A threshold value for negative numbers.\n\t *\n\t * @default 0\n\t */\n\tnegativeBase?: number;\n\n\t/**\n\t * Prefixes and thresholds to group big numbers into, e.g. 1M.\n\t *\n\t * Used in conjunction with `a` modifier of the number format.\n\t */\n\tbigNumberPrefixes?: INumberSuffix[];\n\n\t/**\n\t * Prefixes and thresholds to group small numbers into, e.g. 1m.\n\t *\n\t * Used in conjunction with `a` modifier of the number format.\n\t */\n\tsmallNumberPrefixes?: INumberSuffix[];\n\n\t/**\n\t * All numbers below this value are considered small.\n\t *\n\t * @default 1\n\t */\n\tsmallNumberThreshold?: number;\n\n\t/**\n\t * Prefixes to and thresholds to use when grouping data size numbers, e.g. 1MB.\n\t *\n\t * Used in conjunction with `b` modifier of the number format.\n\t */\n\tbytePrefixes?: INumberSuffix[];\n\n\t/**\n\t * Indicates which fields in data should be considered numeric.\n\t *\n\t * It is used when formatting data placeholder values.\n\t */\n\tnumericFields?: string[];\n\n\t/**\n\t * Locales to use when formatting using `Intl.NumberFormat`.\n\t *\n\t * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat} for more info\n\t */\n\tintlLocales?: string;\n\n\t/**\n\t * If set to `true` will force the number string to be LTR, even if RTL is\n\t * enabled.\n\t * \n\t * @default false\n\t * @since 5.3.13\n\t */\n\tforceLTR?: boolean;\n\n}\n\nexport interface INumberFormatterPrivate extends IEntityPrivate {\n}\n\n/**\n * Number formatter\n *\n * @see {@link https://www.amcharts.com/docs/v5/concepts/formatters/formatting-numbers/} for more info\n * @important\n */\nexport class NumberFormatter extends Entity {\n\tdeclare public _settings: INumberFormatterSettings;\n\tdeclare public _privateSettings: INumberFormatterPrivate;\n\n\tprotected _setDefaults() {\n\t\t// Defaults\n\t\tthis._setDefault(\"negativeBase\", 0);\n\t\tthis._setDefault(\"numberFormat\", \"#,###.#####\");\n\t\tthis._setDefault(\"smallNumberThreshold\", 1.00);\n\n\t\tconst bns = \"_big_number_suffix_\";\n\t\tconst sns = \"_small_number_suffix_\";\n\t\tconst bs = \"_byte_suffix_\";\n\n\t\tthis._setDefault(\"bigNumberPrefixes\", [\n\t\t\t{ \"number\": 1e+3, \"suffix\": this._t(bns + \"3\") },\n\t\t\t{ \"number\": 1e+6, \"suffix\": this._t(bns + \"6\") },\n\t\t\t{ \"number\": 1e+9, \"suffix\": this._t(bns + \"9\") },\n\t\t\t{ \"number\": 1e+12, \"suffix\": this._t(bns + \"12\") },\n\t\t\t{ \"number\": 1e+15, \"suffix\": this._t(bns + \"15\") },\n\t\t\t{ \"number\": 1e+18, \"suffix\": this._t(bns + \"18\") },\n\t\t\t{ \"number\": 1e+21, \"suffix\": this._t(bns + \"21\") },\n\t\t\t{ \"number\": 1e+24, \"suffix\": this._t(bns + \"24\") }\n\t\t]);\n\n\t\tthis._setDefault(\"smallNumberPrefixes\", [\n\t\t\t{ \"number\": 1e-24, \"suffix\": this._t(sns + \"24\") },\n\t\t\t{ \"number\": 1e-21, \"suffix\": this._t(sns + \"21\") },\n\t\t\t{ \"number\": 1e-18, \"suffix\": this._t(sns + \"18\") },\n\t\t\t{ \"number\": 1e-15, \"suffix\": this._t(sns + \"15\") },\n\t\t\t{ \"number\": 1e-12, \"suffix\": this._t(sns + \"12\") },\n\t\t\t{ \"number\": 1e-9, \"suffix\": this._t(sns + \"9\") },\n\t\t\t{ \"number\": 1e-6, \"suffix\": this._t(sns + \"6\") },\n\t\t\t{ \"number\": 1e-3, \"suffix\": this._t(sns + \"3\") }\n\t\t]);\n\n\t\tthis._setDefault(\"bytePrefixes\", [\n\t\t\t{ \"number\": 1, suffix: this._t(bs + \"B\") },\n\t\t\t{ \"number\": 1024, suffix: this._t(bs + \"KB\") },\n\t\t\t{ \"number\": 1048576, suffix: this._t(bs + \"MB\") },\n\t\t\t{ \"number\": 1073741824, suffix: this._t(bs + \"GB\") },\n\t\t\t{ \"number\": 1099511627776, suffix: this._t(bs + \"TB\") },\n\t\t\t{ \"number\": 1125899906842624, suffix: this._t(bs + \"PB\") }\n\t\t]);\n\n\t\tsuper._setDefaults();\n\t}\n\n\tpublic _beforeChanged() {\n\t\tsuper._beforeChanged();\n\t}\n\n\t/**\n\t * Formats the number according to specific format.\n\t *\n\t * @param value Value to format\n\t * @param format Format to apply\n\t * @return Formatted number\n\t */\n\tpublic format(value: number | string, format?: string | Intl.NumberFormatOptions, precision?: number): string {\n\n\t\t// no format passed in or \"Number\"\n\t\tif (format == null || ($type.isString(format) && format.toLowerCase() === \"number\")) {\n\t\t\tformat = this.get(\"numberFormat\", \"\");\n\t\t}\n\n\t\t// Init return value\n\t\tlet formatted;\n\n\t\t// Cast to number just in case\n\t\t// TODO: maybe use better casting\n\t\tlet source: number = Number(value);\n\n\t\t// Is it a built-in format or Intl.NumberFormatOptions\n\t\tif ($type.isObject(format)) {\n\t\t\ttry {\n\t\t\t\tif (this.get(\"intlLocales\")) {\n\t\t\t\t\treturn new Intl.NumberFormat(this.get(\"intlLocales\"), <Intl.NumberFormatOptions>format).format(source);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn new Intl.NumberFormat(undefined, <Intl.NumberFormatOptions>format).format(source);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (e) {\n\t\t\t\treturn \"Invalid\";\n\t\t\t}\n\n\t\t}\n\t\telse {\n\n\t\t\t// Clean format\n\t\t\tformat = $utils.cleanFormat(format!);\n\n\t\t\t// Get format info (it will also deal with parser caching)\n\t\t\tlet info = this.parseFormat(format, this._root.language);\n\n\n\t\t\t// format and replace the number\n\t\t\tlet details;\n\t\t\tif (source > this.get(\"negativeBase\")) {\n\t\t\t\tdetails = info.positive;\n\t\t\t}\n\t\t\telse if (source < this.get(\"negativeBase\")) {\n\t\t\t\tdetails = info.negative;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdetails = info.zero;\n\t\t\t}\n\n\t\t\t// Adjust precision\n\t\t\tif (precision != null && !details.mod) {\n\t\t\t\tdetails = $object.copy(details);\n\t\t\t\tdetails.decimals.active = source == 0 ? 0 : precision;\n\t\t\t}\n\n\t\t\t// Format\n\t\t\tformatted = details.template.split($type.PLACEHOLDER).join(this.applyFormat(source, details));\n\n\t\t}\n\n\t\tif (this.get(\"forceLTR\") === true) {\n\t\t\tformatted = \"\" + formatted;\n\t\t}\n\n\t\treturn formatted;\n\t}\n\n\t/**\n\t * Parses supplied format into structured object which can be used to format\n\t * the number.\n\t *\n\t * @param format Format string, i.e. \"#,###.00\"\n\t * @param language Language\n\t * @ignore\n\t */\n\tprotected parseFormat(format: string, language: Language): any {\n\n\t\t// Check cache\n\t\t// TODO\n\t\t// let cached = this.getCache(format);\n\t\t// if (cached != null) {\n\t\t// \treturn cached;\n\t\t// }\n\n\t\tconst thousandSeparator = language.translateEmpty(\"_thousandSeparator\");\n\t\tconst decimalSeparator = language.translateEmpty(\"_decimalSeparator\")\n\n\t\t// init format parse info holder\n\t\tlet info: any = {\n\t\t\t\"positive\": {\n\t\t\t\t\"thousands\": {\n\t\t\t\t\t\"active\": -1,\n\t\t\t\t\t\"passive\": -1,\n\t\t\t\t\t\"interval\": -1,\n\t\t\t\t\t\"separator\": thousandSeparator\n\t\t\t\t},\n\t\t\t\t\"decimals\": {\n\t\t\t\t\t\"active\": -1,\n\t\t\t\t\t\"passive\": -1,\n\t\t\t\t\t\"separator\": decimalSeparator\n\t\t\t\t},\n\t\t\t\t\"template\": \"\",\n\t\t\t\t\"source\": \"\",\n\t\t\t\t\"parsed\": false\n\t\t\t},\n\t\t\t\"negative\": {\n\t\t\t\t\"thousands\": {\n\t\t\t\t\t\"active\": -1,\n\t\t\t\t\t\"passive\": -1,\n\t\t\t\t\t\"interval\": -1,\n\t\t\t\t\t\"separator\": thousandSeparator\n\t\t\t\t},\n\t\t\t\t\"decimals\": {\n\t\t\t\t\t\"active\": -1,\n\t\t\t\t\t\"passive\": -1,\n\t\t\t\t\t\"separator\": decimalSeparator\n\t\t\t\t},\n\t\t\t\t\"template\": \"\",\n\t\t\t\t\"source\": \"\",\n\t\t\t\t\"parsed\": false\n\t\t\t},\n\t\t\t\"zero\": {\n\t\t\t\t\"thousands\": {\n\t\t\t\t\t\"active\": -1,\n\t\t\t\t\t\"passive\": -1,\n\t\t\t\t\t\"interval\": -1,\n\t\t\t\t\t\"separator\": thousandSeparator\n\t\t\t\t},\n\t\t\t\t\"decimals\": {\n\t\t\t\t\t\"active\": -1,\n\t\t\t\t\t\"passive\": -1,\n\t\t\t\t\t\"separator\": decimalSeparator\n\t\t\t\t},\n\t\t\t\t\"template\": \"\",\n\t\t\t\t\"source\": \"\",\n\t\t\t\t\"parsed\": false\n\t\t\t}\n\t\t};\n\n\t\t// Escape double vertical bars (that mean display one vertical bar)\n\t\tformat = format.replace(\"||\", $type.PLACEHOLDER2);\n\n\t\t// Split it up and deal with different formats\n\t\tlet parts = format.split(\"|\");\n\t\tinfo.positive.source = parts[0];\n\n\t\tif (typeof parts[2] === \"undefined\") {\n\t\t\tinfo.zero = info.positive;\n\t\t}\n\t\telse {\n\t\t\tinfo.zero.source = parts[2];\n\t\t}\n\n\t\tif (typeof parts[1] === \"undefined\") {\n\t\t\tinfo.negative = info.positive;\n\t\t}\n\t\telse {\n\t\t\tinfo.negative.source = parts[1];\n\t\t}\n\n\t\t// Parse each\n\t\t$object.each(info, (_part, item) => {\n\t\t\t// Already parsed\n\t\t\tif (item.parsed) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Check cached\n\t\t\t// TODO\n\t\t\t// if (typeof this.getCache(item.source) !== \"undefined\") {\n\t\t\t// \tinfo[part] = this.getCache(item.source);\n\t\t\t// \treturn;\n\t\t\t// }\n\n\t\t\t// Begin parsing\n\t\t\tlet partFormat = item.source;\n\n\t\t\t// Just \"Number\"?\n\t\t\tif (partFormat.toLowerCase() === \"number\") {\n\t\t\t\tpartFormat = this.get(\"numberFormat\", \"#,###.#####\");\n\t\t\t}\n\n\t\t\t// Let TextFormatter split into chunks\n\t\t\tlet chunks = TextFormatter.chunk(partFormat, true);\n\t\t\tfor (let i: number = 0; i < chunks.length; i++) {\n\t\t\t\tlet chunk = chunks[i];\n\n\t\t\t\t// replace back double vertical bar\n\t\t\t\tchunk.text = chunk.text.replace($type.PLACEHOLDER2, \"|\");\n\n\t\t\t\tif (chunk.type === \"value\") {\n\t\t\t\t\t// Parse format\n\n\t\t\t\t\t// Look for codes\n\t\t\t\t\tlet matches: string[] | null = chunk.text.match(/[#0.,]+[ ]?[abespABESP%!]?[abespABESP‰!]?/);\n\n\t\t\t\t\tif (matches) {\n\t\t\t\t\t\tif (matches === null || matches[0] === \"\") {\n\t\t\t\t\t\t\t// no codes here - assume string\n\t\t\t\t\t\t\t// nothing to do here\n\t\t\t\t\t\t\titem.template += chunk.text;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\n\t\t\t\t\t\t\t// look for the format modifiers at the end\n\t\t\t\t\t\t\tlet mods: string[] | null = matches[0].match(/[abespABESP%‰!]{2}|[abespABESP%‰]{1}$/);\n\n\t\t\t\t\t\t\tif (mods) {\n\t\t\t\t\t\t\t\titem.mod = mods[0].toLowerCase();\n\t\t\t\t\t\t\t\titem.modSpacing = matches[0].match(/[ ]{1}[abespABESP%‰!]{1}$/) ? true : false;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// break the format up\n\t\t\t\t\t\t\tlet a = matches[0].split(\".\");\n\n\t\t\t\t\t\t\t// Deal with thousands\n\t\t\t\t\t\t\tif (a[0] === \"\") {\n\t\t\t\t\t\t\t\t// No directives for thousands\n\t\t\t\t\t\t\t\t// Leave default settings (no formatting)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t// Counts\n\t\t\t\t\t\t\t\titem.thousands.active = (a[0].match(/0/g) || []).length;\n\t\t\t\t\t\t\t\titem.thousands.passive = (a[0].match(/\\#/g) || []).length + item.thousands.active;\n\n\t\t\t\t\t\t\t\t// Separator interval\n\t\t\t\t\t\t\t\tlet b = a[0].split(\",\");\n\t\t\t\t\t\t\t\tif (b.length === 1) {\n\t\t\t\t\t\t\t\t\t// No thousands separators\n\t\t\t\t\t\t\t\t\t// Do nothing\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t// Use length fo the last chunk as thousands length\n\t\t\t\t\t\t\t\t\titem.thousands.interval = (b.pop() || \"\").length;\n\n\t\t\t\t\t\t\t\t\tif (item.thousands.interval === 0) {\n\t\t\t\t\t\t\t\t\t\titem.thousands.interval = -1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Deal with decimals\n\t\t\t\t\t\t\tif (typeof (a[1]) === \"undefined\") {\n\t\t\t\t\t\t\t\t// No directives for decimals\n\t\t\t\t\t\t\t\t// Leave at defaults (no formatting)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t// Counts\n\t\t\t\t\t\t\t\titem.decimals.active = (a[1].match(/0/g) || []).length;\n\t\t\t\t\t\t\t\titem.decimals.passive = (a[1].match(/\\#/g) || []).length + item.decimals.active;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Add special code to template\n\t\t\t\t\t\t\titem.template += chunk.text.split(matches[0]).join($type.PLACEHOLDER);\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Quoted string - take it as it is\n\t\t\t\t\titem.template += chunk.text;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Apply style formatting\n\t\t\t//item.template = getTextFormatter().format(item.template, this.outputFormat);\n\n\t\t\t// Save cache\n\t\t\t// TODO\n\t\t\t//this.setCache(item.source, item);\n\n\t\t\t// Mark this as parsed\n\t\t\titem.parsed = true;\n\n\t\t});\n\n\t\t// Save cache (the whole thing)\n\t\t// TODO\n\t\t//this.setCache(format, info);\n\n\t\treturn info;\n\t}\n\n\t/**\n\t * Applies parsed format to a numeric value.\n\t *\n\t * @param value Value\n\t * @param details Parsed format as returned by parseFormat()\n\t * @return Formatted number\n\t * @ignore\n\t */\n\tprotected applyFormat(value: number, details: any): string {\n\n\t\t// Use absolute values\n\t\tlet negative: boolean = value < 0;\n\t\tvalue = Math.abs(value);\n\n\t\t// Recalculate according to modifier\n\t\tlet prefix: string = \"\", suffix: string = \"\";\n\t\tlet mods: string[] = details.mod ? details.mod.split(\"\") : [];\n\t\tif (mods.indexOf(\"b\") !== -1) {\n\t\t\tlet a = this.applyPrefix(value, this.get(\"bytePrefixes\")!, mods.indexOf(\"!\") !== -1);\n\t\t\tvalue = a[0];\n\t\t\tprefix = a[1];\n\t\t\tsuffix = a[2];\n\t\t\tif (details.modSpacing) {\n\t\t\t\tsuffix = \" \" + suffix;\n\t\t\t}\n\t\t}\n\t\telse if (mods.indexOf(\"a\") !== -1) {\n\t\t\tlet a = this.applyPrefix(value, value < this.get(\"smallNumberThreshold\")! ? this.get(\"smallNumberPrefixes\")! : this.get(\"bigNumberPrefixes\")!, mods.indexOf(\"!\") !== -1);\n\t\t\tvalue = a[0];\n\t\t\tprefix = a[1];\n\t\t\tsuffix = a[2];\n\t\t\tif (details.modSpacing) {\n\t\t\t\tsuffix = \" \" + suffix;\n\t\t\t}\n\t\t}\n\t\telse if (mods.indexOf(\"p\") !== -1) {\n\t\t\tlet ol = Math.min(value.toString().length + 2, 21);\n\t\t\t//value *= 100;\n\t\t\tvalue = parseFloat(value.toPrecision(ol));\n\t\t\tprefix = this._root.language.translate(\"_percentPrefix\");\n\t\t\tsuffix = this._root.language.translate(\"_percentSuffix\");\n\t\t\tif (prefix == \"\" && suffix == \"\") {\n\t\t\t\tsuffix = \"%\";\n\t\t\t}\n\t\t}\n\t\telse if (mods.indexOf(\"%\") !== -1) {\n\t\t\tlet ol = Math.min(value.toString().length + 2, 21);\n\t\t\tvalue *= 100;\n\t\t\tvalue = parseFloat(value.toPrecision(ol));\n\t\t\tsuffix = \"%\";\n\t\t}\n\t\telse if (mods.indexOf(\"‰\") !== -1) {\n\t\t\tlet ol = Math.min(value.toString().length + 3, 21);\n\t\t\tvalue *= 1000;\n\t\t\tvalue = parseFloat(value.toPrecision(ol));\n\t\t\tsuffix = \"‰\";\n\t\t}\n\n\t\t// Round to passive\n\t\tif (mods.indexOf(\"e\") !== -1) {\n\t\t\t// convert the value to exponential\n\t\t\tlet exp: string[];\n\t\t\tif (details.decimals.passive >= 0) {\n\t\t\t\texp = value.toExponential(details.decimals.passive).split(\"e\");\n\t\t\t}\n\t\t\telse {\n\t\t\t\texp = value.toExponential().split(\"e\");\n\t\t\t}\n\t\t\tvalue = Number(exp[0]);\n\t\t\tsuffix = \"e\" + exp[1];\n\t\t\tif (details.modSpacing) {\n\t\t\t\tsuffix = \" \" + suffix;\n\t\t\t}\n\t\t}\n\t\telse if (details.decimals.passive === 0) {\n\t\t\tvalue = Math.round(value);\n\t\t}\n\t\telse if (details.decimals.passive > 0) {\n\t\t\tconst decimals = $utils.decimalPlaces(value);\n\t\t\tif (decimals > 0) {\n\t\t\t\tconst d = Math.pow(10, details.decimals.passive);\n\t\t\t\tvalue = Math.round(parseFloat((value * d).toFixed(decimals))) / d;\n\t\t\t}\n\t\t}\n\n\t\t// Init return value\n\t\tlet res: string = \"\";\n\n\t\t// Calc integer and decimal parts\n\t\tlet a = $type.numberToString(value).split(\".\");\n\n\t\t// Format integers\n\t\tlet ints = a[0];\n\n\t\t// Pad integers to active length\n\t\tif (ints.length < details.thousands.active) {\n\t\t\tints = Array(details.thousands.active - ints.length + 1).join(\"0\") + ints;\n\t\t}\n\n\t\t// Insert thousands separators\n\t\tif (details.thousands.interval > 0) {\n\t\t\tlet ip: string[] = [];\n\t\t\tlet intsr: string = ints.split(\"\").reverse().join(\"\");\n\t\t\tfor (let i = 0, len = ints.length; i <= len; i += details.thousands.interval) {\n\t\t\t\tlet c: string = intsr.substr(i, details.thousands.interval).split(\"\").reverse().join(\"\");\n\t\t\t\tif (c !== \"\") {\n\t\t\t\t\tip.unshift(c);\n\t\t\t\t}\n\t\t\t}\n\t\t\tints = ip.join(details.thousands.separator);\n\t\t}\n\n\t\t// Add integers\n\t\tres += ints;\n\n\t\t// Add decimals\n\t\tif (a.length === 1) {\n\t\t\ta.push(\"\");\n\t\t}\n\t\tlet decs: string = a[1];\n\n\t\t// Fill zeros?\n\t\tif (decs.length < details.decimals.active) {\n\t\t\tdecs += Array(details.decimals.active - decs.length + 1).join(\"0\");\n\t\t}\n\n\t\tif (decs !== \"\") {\n\t\t\tres += details.decimals.separator + decs;\n\t\t}\n\n\t\t// Can't have empty return value\n\t\tif (res === \"\") {\n\t\t\tres = \"0\";\n\t\t}\n\n\t\t// Add minus sign back\n\t\tif (value !== 0 && negative && (mods.indexOf(\"s\") === -1)) {\n\t\t\tres = \"-\" + res;\n\t\t}\n\n\t\t// Add suffixes/prefixes\n\t\tif (prefix) {\n\t\t\tres = prefix + res;\n\t\t}\n\t\tif (suffix) {\n\t\t\tres += suffix;\n\t\t}\n\n\t\treturn res;\n\t}\n\n\n\tprotected applyPrefix(value: number, prefixes: any[], force: boolean = false): any[] {\n\t\tlet newvalue = value;\n\t\tlet prefix = \"\";\n\t\tlet suffix = \"\";\n\t\tlet applied = false;\n\t\tlet k = 1;\n\n\t\tfor (let i = 0, len = prefixes.length; i < len; i++) {\n\t\t\tif (prefixes[i].number <= value) {\n\t\t\t\tif (prefixes[i].number === 0) {\n\t\t\t\t\tnewvalue = 0;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnewvalue = value / prefixes[i].number;\n\t\t\t\t\tk = prefixes[i].number;\n\t\t\t\t}\n\t\t\t\tprefix = prefixes[i].prefix;\n\t\t\t\tsuffix = prefixes[i].suffix;\n\t\t\t\tapplied = true;\n\t\t\t}\n\t\t}\n\n\n\t\tif (!applied && force && prefixes.length && value != 0) {\n\t\t\t// Prefix was not applied. Use the first prefix.\n\t\t\tnewvalue = value / prefixes[0].number;\n\t\t\tprefix = prefixes[0].prefix;\n\t\t\tsuffix = prefixes[0].suffix;\n\t\t\tapplied = true;\n\t\t}\n\n\t\tif (applied) {\n\t\t\tnewvalue = parseFloat(\n\t\t\t\tnewvalue.toPrecision(\n\t\t\t\t\tMath.min(k.toString().length + Math.floor(newvalue).toString().replace(/[^0-9]*/g, \"\").length, 21)\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\treturn [newvalue, prefix, suffix];\n\t}\n\n\t/**\n\t * Replaces brackets with temporary placeholders.\n\t *\n\t * @ignore Exclude from docs\n\t * @param text Input text\n\t * @return Escaped text\n\t */\n\tpublic escape(text: string): string {\n\t\treturn text.replace(\"||\", $type.PLACEHOLDER2);\n\t}\n\n\t/**\n\t * Replaces placeholders back to brackets.\n\t *\n\t * @ignore Exclude from docs\n\t * @param text Escaped text\n\t * @return Unescaped text\n\t */\n\tpublic unescape(text: string): string {\n\t\treturn text.replace($type.PLACEHOLDER2, \"|\");\n\t}\n\n}\n"]}
|
|
@@ -301,6 +301,13 @@ export declare function cleanFormat(format: string): string;
|
|
|
301
301
|
* @return String without tags
|
|
302
302
|
*/
|
|
303
303
|
export declare function stripTags(text: string): string;
|
|
304
|
+
/**
|
|
305
|
+
* Strips inline formatting tags (square brackets) from the string.
|
|
306
|
+
*
|
|
307
|
+
* @param text Source string
|
|
308
|
+
* @return String without tags
|
|
309
|
+
*/
|
|
310
|
+
export declare function stripFormatTags(text: string): string;
|
|
304
311
|
/**
|
|
305
312
|
* Removes new lines and tags from a string.
|
|
306
313
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Utils.d.ts","sourceRoot":"","sources":["../../../../../src/.internal/core/util/Utils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Utils.d.ts","sourceRoot":"","sources":["../../../../../src/.internal/core/util/Utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -771,6 +771,15 @@ export function cleanFormat(format) {
|
|
|
771
771
|
export function stripTags(text) {
|
|
772
772
|
return text ? text.replace(/<[^>]*>/g, "") : text;
|
|
773
773
|
}
|
|
774
|
+
/**
|
|
775
|
+
* Strips inline formatting tags (square brackets) from the string.
|
|
776
|
+
*
|
|
777
|
+
* @param text Source string
|
|
778
|
+
* @return String without tags
|
|
779
|
+
*/
|
|
780
|
+
export function stripFormatTags(text) {
|
|
781
|
+
return text ? text.replace(/\[[^\]]*\]/g, "") : text;
|
|
782
|
+
}
|
|
774
783
|
/**
|
|
775
784
|
* Removes new lines and tags from a string.
|
|
776
785
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../../../src/.internal/core/util/Utils.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Percent } from \"./Percent\";\nimport type { IPointerEvent } from \"../render/backend/Renderer\";\nimport type { Sprite } from \"../render/Sprite\";\n\nimport * as $type from \"./Type\";\nimport * as $array from \"./Array\";\nimport * as $object from \"./Object\";\nimport type { IBounds } from \"./IBounds\";\n\nimport { Disposer, DisposerClass, IDisposer } from \"./Disposer\";\n\n/**\n * ============================================================================\n * DOM FUNCTIONS\n * ============================================================================\n * @hidden\n */\n\n/**\n * Execute a function when DOM is ready.\n *\n * @since 5.0.2\n * @param f Callback\n */\nexport function ready(f: () => void): void {\n\tif (document.readyState !== \"loading\") {\n\t\tf();\n\n\t} else {\n\t\tconst listener = () => {\n\t\t\tif (document.readyState !== \"loading\") {\n\t\t\t\tdocument.removeEventListener(\"readystatechange\", listener);\n\t\t\t\tf();\n\t\t\t}\n\t\t};\n\n\t\tdocument.addEventListener(\"readystatechange\", listener);\n\t}\n}\n\n/**\n * Removes a DOM element.\n * @param el Target element\n */\nexport function removeElement(el: HTMLElement): void {\n\tif (el.parentNode) {\n\t\tel.parentNode.removeChild(el);\n\t}\n}\n\n/**\n * Function that adds a disposable event listener directly to a DOM element.\n *\n * @ignore Exclude from docs\n * @param dom A DOM element to add event to\n * @param type Event type\n * @param listener Event listener\n * @returns Disposable event\n */\nexport function addEventListener<E extends Event>(dom: EventTarget, type: string, listener: (event: E) => void, options?: any): IDisposer {\n\t//@todo proper type check for options: EventListenerOptions | boolean (TS for some reason gives error on passive parameter)\n\tdom.addEventListener(type, <EventListener>listener, options || false);\n\n\treturn new Disposer(() => {\n\t\tdom.removeEventListener(type, <EventListener>listener, options || false);\n\t});\n}\n\n/**\n * Function that adds an event listener which is triggered when the browser's zoom changes.\n *\n * @param listener Event listener\n * @returns Disposable event\n */\nexport function onZoom(listener: () => void): IDisposer {\n\t// TODO use matchMedia instead ?\n\treturn addEventListener(window, \"resize\", (_ev) => {\n\t\tlistener();\n\t});\n}\n\n/**\n * @ignore\n */\nexport function supports(cap: \"touchevents\" | \"pointerevents\" | \"mouseevents\" | \"wheelevents\" | \"keyboardevents\"): boolean {\n\tswitch (cap) {\n\t\tcase \"touchevents\":\n\t\t\t//return \"ontouchstart\" in document.documentElement;\n\t\t\treturn window.hasOwnProperty(\"TouchEvent\");\n\n\t\tcase \"pointerevents\":\n\t\t\treturn window.hasOwnProperty(\"PointerEvent\");\n\n\t\tcase \"mouseevents\":\n\t\t\treturn window.hasOwnProperty(\"MouseEvent\");\n\n\t\tcase \"wheelevents\":\n\t\t\treturn window.hasOwnProperty(\"WheelEvent\");\n\n\t\tcase \"keyboardevents\":\n\t\t\treturn window.hasOwnProperty(\"KeyboardEvent\");\n\t}\n\treturn false;\n}\n\n/**\n * @ignore\n */\nexport function getPointerId(event: IPointerEvent) {\n\tlet id = (<any>event).pointerId || 0;\n\treturn id;\n}\n\n/**\n * Removes focus from any element by shifting focus to body.\n *\n * @ignore\n */\nexport function blur(): void {\n\tif (document.activeElement && document.activeElement != document.body) {\n\t\tif ((<any>document.activeElement).blur) {\n\t\t\t(<any>document.activeElement).blur();\n\t\t}\n\t\telse {\n\t\t\tlet input = document.createElement(\"button\");\n\t\t\tinput.style.position = \"fixed\";\n\t\t\tinput.style.top = \"0px\";\n\t\t\tinput.style.left = \"-10000px\";\n\t\t\tdocument.body.appendChild(input);\n\t\t\tinput.focus();\n\t\t\tinput.blur();\n\t\t\tdocument.body.removeChild(input);\n\t\t}\n\t}\n}\n\n/**\n * Focuses element.\n *\n * @ignore\n */\nexport function focus(el: HTMLElement): void {\n\tif (el) {\n\t\tel.focus();\n\t}\n}\n\n/**\n * @ignore\n */\nexport function getRendererEvent(key: string): string {\n\tif (supports(\"pointerevents\")) {\n\t\treturn key;\n\t}\n\telse if (supports(\"touchevents\")) {\n\t\tswitch (key) {\n\t\t\tcase \"pointerover\": return \"touchstart\";\n\t\t\tcase \"pointerout\": return \"touchend\";\n\t\t\tcase \"pointerleave\": return \"touchend\";\n\t\t\tcase \"pointerdown\": return \"touchstart\";\n\t\t\tcase \"pointermove\": return \"touchmove\";\n\t\t\tcase \"pointerup\": return \"touchend\";\n\t\t\tcase \"click\": return \"click\";\n\t\t\tcase \"dblclick\": return \"dblclick\";\n\n\t\t}\n\t}\n\telse if (supports(\"mouseevents\")) {\n\t\tswitch (key) {\n\t\t\tcase \"pointerover\": return \"mouseover\";\n\t\t\tcase \"pointerout\": return \"mouseout\";\n\t\t\tcase \"pointerleave\": return \"mouseleave\";\n\t\t\tcase \"pointerdown\": return \"mousedown\";\n\t\t\tcase \"pointermove\": return \"mousemove\";\n\t\t\tcase \"pointerup\": return \"mouseup\";\n\t\t\tcase \"click\": return \"click\";\n\t\t\tcase \"dblclick\": return \"dblclick\";\n\n\t\t}\n\t}\n\treturn key;\n}\n\n/**\n * Determines if pointer event originated from a touch pointer or mouse.\n *\n * @param ev Original event\n * @return Touch pointer?\n */\nexport function isTouchEvent(ev: MouseEvent | Touch): boolean {\n\tif (typeof Touch !== \"undefined\" && ev instanceof Touch) {\n\t\treturn true;\n\t}\n\telse if (typeof PointerEvent !== \"undefined\" && ev instanceof PointerEvent && (<any>ev).pointerType != null) {\n\t\tswitch ((<any>ev).pointerType) {\n\t\t\tcase \"touch\":\n\t\t\tcase \"pen\":\n\t\t\tcase 2:\n\t\t\t\treturn true;\n\t\t\tcase \"mouse\":\n\t\t\tcase 4:\n\t\t\t\treturn false;\n\t\t\tdefault:\n\t\t\t\treturn !(ev instanceof MouseEvent);\n\t\t}\n\t}\n\telse if ((<any>ev).type != null) {\n\t\tif ((<any>ev).type.match(/^mouse/)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\n/**\n * Sets style property on DOM element.\n *\n * @ignore Exclude from docs\n */\nexport function setStyle(dom: HTMLElement, property: string, value: string | undefined): void {\n\t(<any>dom.style)[property] = value;\n}\n\n/**\n * Gets style property value on a DOM element.\n *\n * @ignore Exclude from docs\n */\nexport function getStyle(dom: HTMLElement, property: string): string | undefined {\n\treturn (<any>dom.style)[property];\n}\n\n/**\n * Gets the target of the event, works for shadow DOM too.\n */\nexport function getEventTarget(event: Event | Touch): Node | null {\n\tif ((event as any).composedPath) {\n\t\tconst path = (event as Event).composedPath();\n\n\t\tif (path.length === 0) {\n\t\t\treturn null;\n\n\t\t} else {\n\t\t\treturn path[0] as Node;\n\t\t}\n\n\t} else {\n\t\treturn event.target as Node | null;\n\t}\n}\n\n/**\n * Checks of element `a` contains element `b`.\n *\n * @param a Aleged ascendant\n * @param b Aleged descendant\n * @return Contains?\n */\nexport function contains(a: Element, b: Element): boolean {\n\tlet cursor: Node = b;\n\n\twhile (true) {\n\t\tif (a === cursor) {\n\t\t\treturn true;\n\n\t\t} else if (cursor.parentNode === null) {\n\t\t\t// TODO better ShadowRoot detection\n\t\t\tif ((<ShadowRoot>cursor).host == null) {\n\t\t\t\treturn false;\n\n\t\t\t} else {\n\t\t\t\tcursor = (<ShadowRoot>cursor).host;\n\t\t\t}\n\n\t\t} else {\n\t\t\tcursor = cursor.parentNode;\n\t\t}\n\t}\n}\n\n/**\n * Returns `true` if pointer event originated on an element within Root.\n *\n * @since 5.2.8\n * @param event Event\n * @param target Target element\n */\nexport function isLocalEvent(event: IPointerEvent, target: Sprite) {\n\treturn event.target && contains(target.root.dom, <Element>event.target);\n}\n\n/**\n * Disables or enables interactivity of a DOM element.\n *\n * @param target Target element\n * @param interactive Interactive?\n */\nexport function setInteractive(target: HTMLElement, interactive: boolean): void {\n\tif (interactive) {\n\t\ttarget.style.pointerEvents = \"auto\";\n\t}\n\telse {\n\t\ttarget.style.pointerEvents = \"none\";\n\t}\n}\n\n/**\n * Returns a normalized key name from a keyboard event.\n *\n * @ignore\n */\nexport function getEventKey(event: KeyboardEvent): string {\n\tif (event.key !== undefined) {\n\t\treturn event.key;\n\t}\n\tswitch (event.keyCode) {\n\t\tcase 9: return \"Tab\";\n\t\tcase 13: return \"Enter\";\n\t\tcase 16: return \"Shift\";\n\t\tcase 17: return \"Control\";\n\t\tcase 27: return \"Escape\";\n\t\tcase 32: return \" \";\n\t\tcase 37: return \"ArrowLeft\";\n\t\tcase 38: return \"ArrowUp\";\n\t\tcase 39: return \"ArrowRight\";\n\t\tcase 40: return \"ArrowDown\";\n\t\tcase 46: return \"Delete\";\n\t}\n\treturn \"\" + event.keyCode;\n}\n\n/**\n * Returns the shadow root of the element or null\n *\n * @param a Node\n * @return Root\n */\nexport function getShadowRoot(a: Node): ShadowRoot | null {\n\tlet cursor: Node = a;\n\n\twhile (true) {\n\t\tif (cursor.parentNode === null) {\n\t\t\t// TODO better ShadowRoot detection\n\t\t\tif ((<ShadowRoot>cursor).host != null) {\n\t\t\t\treturn <ShadowRoot>cursor;\n\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t} else {\n\t\t\tcursor = cursor.parentNode;\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\nlet rootStylesheet: $type.Optional<CSSStyleSheet>;\n\n/**\n * @ignore Exclude from docs\n */\nfunction createStylesheet(element: ShadowRoot | null, text: string, nonce: string = \"\"): HTMLStyleElement {\n\t// TODO use createElementNS ?\n\tconst e = document.createElement(\"style\");\n\te.type = \"text/css\";\n\tif (nonce != \"\") {\n\t\te.setAttribute(\"nonce\", nonce)\n\t}\n\te.textContent = text;\n\n\tif (element === null) {\n\t\tdocument.head.appendChild(e);\n\t} else {\n\t\telement.appendChild(e);\n\t}\n\n\treturn e;\n}\n\n/**\n * @ignore\n */\nfunction getStylesheet(element: ShadowRoot | null, nonce: string = \"\"): CSSStyleSheet {\n\tif (element === null) {\n\t\tif (rootStylesheet == null) {\n\t\t\t// TODO use createElementNS ?\n\t\t\tconst e = document.createElement(\"style\");\n\t\t\te.type = \"text/css\";\n\t\t\tif (nonce != \"\") {\n\t\t\t\te.setAttribute(\"nonce\", nonce)\n\t\t\t}\n\t\t\tdocument.head.appendChild(e);\n\t\t\trootStylesheet = e.sheet as CSSStyleSheet;\n\t\t}\n\n\t\treturn rootStylesheet;\n\n\t} else {\n\t\t// TODO use createElementNS ?\n\t\tconst e = document.createElement(\"style\");\n\t\te.type = \"text/css\";\n\t\tif (nonce != \"\") {\n\t\t\te.setAttribute(\"nonce\", nonce)\n\t\t}\n\t\telement.appendChild(e);\n\t\treturn e.sheet as CSSStyleSheet;\n\t}\n}\n\n/**\n * @ignore\n */\nfunction appendStylesheet(root: CSSStyleSheet, selector: string): CSSStyleRule {\n\tconst index = root.cssRules.length;\n\troot.insertRule(selector + \"{}\", index);\n\n\treturn root.cssRules[index] as CSSStyleRule;\n}\n\n/**\n * Defines a class for a CSS rule.\n *\n * Can be used to dynamically add CSS to the document.\n */\nexport class StyleRule extends DisposerClass {\n\tprivate _root: CSSStyleSheet;\n\n\t/**\n\t * CSS rule.\n\t */\n\tprivate _rule: CSSStyleRule;\n\n\t/**\n\t * A CSS selector text.\n\t *\n\t * E.g.: `.myClass p`\n\t *\n\t * @param selector CSS selector\n\t */\n\tpublic set selector(selector: string) {\n\t\tthis._rule.selectorText = selector;\n\t}\n\n\t/**\n\t * @return CSS selector\n\t */\n\tpublic get selector(): string {\n\t\treturn this._rule.selectorText;\n\t}\n\n\t/**\n\t * Constructor.\n\t *\n\t * @param selector CSS selector\n\t * @param styles An object of style attribute - value pairs\n\t */\n\tconstructor(element: ShadowRoot | null, selector: string, styles: { [name: string]: string }, nonce: string = \"\") {\n\t\tsuper();\n\n\t\tthis._root = getStylesheet(element, nonce);\n\n\t\ttry {\n\t\t\tthis._rule = appendStylesheet(this._root, selector);\n\t\t}\n\t\tcatch (err) {\n\t\t\t// Create an empty rule on failed selectors\n\t\t\tthis._rule = appendStylesheet(this._root, \":not(*)\");\n\t\t}\n\n\t\t$object.each(styles, (key, value) => {\n\t\t\tthis.setStyle(<string>key, value);\n\t\t});\n\t}\n\n\t// TODO test this\n\tprotected _dispose(): void {\n\t\t// TODO a bit hacky\n\t\tconst index = $array.indexOf(this._root.cssRules, this._rule);\n\n\t\tif (index === -1) {\n\t\t\tthrow new Error(\"Could not dispose StyleRule\");\n\n\t\t} else {\n\t\t\t// TODO if it's empty remove it from the DOM ?\n\t\t\tthis._root.deleteRule(index);\n\t\t}\n\t}\n\n\t/**\n\t * Sets the same style properties with browser-specific prefixes.\n\t *\n\t * @param name Attribute name\n\t * @param value Attribute value\n\t */\n\tprivate _setVendorPrefixName(name: string, value: string): void {\n\t\tconst style = this._rule.style;\n\t\tstyle.setProperty(\"-webkit-\" + name, value, \"\");\n\t\tstyle.setProperty(\"-moz-\" + name, value, \"\");\n\t\tstyle.setProperty(\"-ms-\" + name, value, \"\");\n\t\tstyle.setProperty(\"-o-\" + name, value, \"\");\n\t\tstyle.setProperty(name, value, \"\");\n\t}\n\n\t/**\n\t * Sets a value for specific style attribute.\n\t *\n\t * @param name Attribute\n\t * @param value Value\n\t */\n\tpublic setStyle(name: string, value: string): void {\n\t\tif (name === \"transition\") {\n\t\t\tthis._setVendorPrefixName(name, value);\n\n\t\t} else {\n\t\t\tthis._rule.style.setProperty(name, value, \"\");\n\t\t}\n\t}\n}\n\n/**\n * Defines a class for an entire CSS style sheet.\n *\n * Can be used to dynamically add CSS to the document.\n */\nexport class StyleSheet extends DisposerClass {\n\tprivate _element: HTMLStyleElement;\n\n\t/**\n\t * Constructor.\n\t *\n\t * @param text CSS stylesheet\n\t */\n\tconstructor(element: ShadowRoot | null, text: string, nonce: string = \"\") {\n\t\tsuper();\n\t\tthis._element = createStylesheet(element, text, nonce);\n\t}\n\n\tprotected _dispose(): void {\n\t\tif (this._element.parentNode) {\n\t\t\tthis._element.parentNode.removeChild(this._element);\n\t\t}\n\t}\n}\n\n\n/**\n * Adds a class name to an HTML or SVG element.\n *\n * @ignore Exclude from docs\n * @param element Element\n * @param className Class name to add\n */\nexport function addClass(element: HTMLElement | SVGElement, className: string): void {\n\tif (!element) {\n\t\treturn;\n\t}\n\tif (element.classList) {\n\t\tconst classes = className.split(\" \");\n\t\t$array.each(classes, (name) => {\n\t\t\telement.classList.add(name);\n\t\t});\n\t}\n\telse {\n\t\tlet currentClassName = element.getAttribute(\"class\");\n\t\tif (currentClassName) {\n\t\t\telement.setAttribute(\"class\", currentClassName.split(\" \").filter((item) => {\n\t\t\t\treturn item !== className;\n\t\t\t}).join(\" \") + \" \" + className);\n\t\t}\n\t\telse {\n\t\t\telement.setAttribute(\"class\", className);\n\t\t}\n\t}\n}\n\n/**\n * Removes a class name from an HTML or SVG element.\n *\n * @ignore Exclude from docs\n * @param element Element\n * @param className Class name to add\n */\nexport function removeClass(element: HTMLElement, className: string): void {\n\tif (!element) {\n\t\treturn;\n\t}\n\tif (element.classList) {\n\t\telement.classList.remove(className);\n\t}\n\telse {\n\t\tlet currentClassName = element.getAttribute(\"class\");\n\t\tif (currentClassName) {\n\t\t\telement.setAttribute(\"class\", currentClassName.split(\" \").filter((item) => {\n\t\t\t\treturn item !== className;\n\t\t\t}).join(\" \"));\n\t\t}\n\t}\n}\n\n// /**\n// * Applies a set of styles to an element. Stores the original styles so they\n// * can be restored later.\n// *\n// * @ignore\n// * @param io Element\n// */\n// export function prepElementForDrag(dom: HTMLElement): void {\n\n// \t// @todo: save current values\n\n// \t// Define possible props\n// \tlet props = [\n// \t\t\"touchAction\", \"webkitTouchAction\", \"MozTouchAction\", \"MSTouchAction\", \"msTouchAction\", \"oTouchAction\",\n// \t\t\"userSelect\", \"webkitUserSelect\", \"MozUserSelect\", \"MSUserSelect\", \"msUserSelect\", \"oUserSelect\",\n// \t\t\"touchSelect\", \"webkitTouchSelect\", \"MozTouchSelect\", \"MSTouchSelect\", \"msTouchSelect\", \"oTouchSelect\",\n// \t\t\"touchCallout\", \"webkitTouchCallout\", \"MozTouchCallout\", \"MSTouchCallout\", \"msTouchCallout\", \"oTouchCallout\",\n// \t\t\"contentZooming\", \"webkitContentZooming\", \"MozContentZooming\", \"MSContentZooming\", \"msContentZooming\", \"oContentZooming\",\n// \t\t\"userDrag\", \"webkitUserDrag\", \"MozUserDrag\", \"MSUserDrag\", \"msUserDrag\", \"oUserDrag\"\n// \t];\n// \tfor (let i = 0; i < props.length; i++) {\n// \t\tif (props[i] in dom.style) {\n// \t\t\tsetStyle(dom, props[i], \"none\");\n// \t\t}\n// \t}\n\n// \t// Remove iOS-specific selection;\n// \tsetStyle(dom, \"tapHighlightColor\", \"rgba(0, 0, 0, 0)\");\n\n// }\n\n// /**\n// * Restores replaced styles\n// *\n// * @ignore\n// * @param io Element\n// */\n// export function unprepElementForDrag(dom: HTMLElement): void {\n\n// \t// Define possible props\n// \tlet props = [\n// \t\t\"touchAction\", \"webkitTouchAction\", \"MozTouchAction\", \"MSTouchAction\", \"msTouchAction\", \"oTouchAction\",\n// \t\t\"userSelect\", \"webkitUserSelect\", \"MozUserSelect\", \"MSUserSelect\", \"msUserSelect\", \"oUserSelect\",\n// \t\t\"touchSelect\", \"webkitTouchSelect\", \"MozTouchSelect\", \"MSTouchSelect\", \"msTouchSelect\", \"oTouchSelect\",\n// \t\t\"touchCallout\", \"webkitTouchCallout\", \"MozTouchCallout\", \"MSTouchCallout\", \"msTouchCallout\", \"oTouchCallout\",\n// \t\t\"contentZooming\", \"webkitContentZooming\", \"MozContentZooming\", \"MSContentZooming\", \"msContentZooming\", \"oContentZooming\",\n// \t\t\"userDrag\", \"webkitUserDrag\", \"MozUserDrag\", \"MSUserDrag\", \"msUserDrag\", \"oUserDrag\"\n// \t];\n// \tfor (let i = 0; i < props.length; i++) {\n// \t\tif (props[i] in dom.style) {\n// \t\t\tsetStyle(dom, props[i], \"\");\n// \t\t}\n// \t}\n\n// \t// Remove iOS-specific selection;\n// \tsetStyle(dom, \"tapHighlightColor\", \"\");\n\n// }\n\n/**\n * Returns `true` if the current device is running iOS.\n *\n * @return Is iOS?\n */\nexport function iOS(): boolean {\n\treturn /apple/i.test(navigator.vendor) && \"ontouchend\" in document;\n}\n\n/**\n * Returns a safe canvas resolution for the current device.\n * Returns `1` on iOS to avoid memory issues, `undefined` otherwise.\n *\n * @return Resolution or undefined\n */\nexport function getSafeResolution(): number | undefined {\n\treturn iOS() ? 1 : undefined;\n}\n\n/**\n * Converts a value that can be a number or [[Percent]] to an absolute number\n * relative to the given full value.\n *\n * @param percent Input value (number or Percent)\n * @param full Full reference value\n * @return Absolute value\n */\nexport function relativeToValue(percent: number | Percent | undefined | null, full: number): number {\n\tif ($type.isNumber(percent)) {\n\t\treturn percent;\n\t} else if (percent != null && $type.isNumber(percent.value) && $type.isNumber(full)) {\n\t\treturn full * percent.value;\n\n\t} else {\n\t\treturn 0;\n\t}\n}\n\n\n\n/**\n * Returns number of decimals\n *\n * @ignore Exclude from docs\n * @param number Input number\n * @return Number of decimals\n */\nexport function decimalPlaces(number: number): number {\n\tlet match = ('' + number).match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\n\tif (!match) { return 0; }\n\treturn Math.max(0, (match[1] ? match[1].length : 0) - (match[2] ? +match[2] : 0));\n}\n\n\n/**\n * ============================================================================\n * STRING FORMATTING FUNCTIONS\n * ============================================================================\n * @hidden\n */\n\n/**\n * Pads a string with additional characters to certain length.\n *\n * @param value A numeric value\n * @param len Result string length in characters\n * @param char A character to use for padding\n * @return Padded value as string\n */\nexport function padString(value: any, len: number = 0, char: string = \"0\"): string {\n\tif (typeof value !== \"string\") {\n\t\tvalue = value.toString();\n\t}\n\n\treturn len > value.length ? Array(len - value.length + 1).join(char) + value : value;\n}\n\n/**\n * Removes whitespace from the beginning of a string.\n *\n * @param text Source string\n * @return Trimmed string\n */\nexport function trimLeft(text: string): string {\n\treturn text.replace(/^[\\s]*/, \"\");\n}\n\n/**\n * Removes whitespace from the end of a string.\n *\n * @param text Source string\n * @return Trimmed string\n */\nexport function trimRight(text: string): string {\n\treturn text.replace(/[\\s]*$/, \"\");\n}\n\n/**\n * Removes whitespace from both ends of a string.\n *\n * @param text Source string\n * @return Trimmed string\n */\nexport function trim(text: string): string {\n\treturn trimLeft(trimRight(text));\n}\n\n/**\n * Truncates a string to a maximum length, appending an ellipsis.\n *\n * @param text Source string\n * @param maxLength Maximum character length\n * @param breakWords Allow breaking mid-word?\n * @param ellipsis Ellipsis string to append\n * @return Truncated string\n */\nexport function truncateTextWithEllipsis(text: string, maxLength: number, breakWords: boolean = false, ellipsis: string = \"...\") {\n\tif (text.length > maxLength) {\n\t\t// Find the last non-alphanumeric character before maxLength\n\t\tlet lastNonAlphanumericIndex = maxLength - 1;\n\t\twhile (lastNonAlphanumericIndex >= 0 && text.charAt(lastNonAlphanumericIndex).match(/\\w/)) {\n\t\t\tlastNonAlphanumericIndex--;\n\t\t}\n\n\t\tif (lastNonAlphanumericIndex >= 0 && breakWords == false) {\n\t\t\treturn text.substring(0, lastNonAlphanumericIndex + 1) + '...';\n\t\t} else {\n\t\t\t// If no non-alphanumeric character found, truncate without breaking words\n\t\t\treturn text.substring(0, maxLength) + ellipsis;\n\t\t}\n\t} else {\n\t\treturn text;\n\t}\n}\n\n/**\n * Tries to determine format type.\n *\n * @ignore Exclude from docs\n * @param format Format string\n * @return Format type (\"string\" | \"number\" | \"date\" | \"duration\")\n */\nexport function getFormat(format: string): string {\n\n\t// Undefined?\n\tif (typeof format === \"undefined\") {\n\t\treturn \"string\";\n\t}\n\n\t// Cleanup and lowercase format\n\tformat = format.toLowerCase().replace(/^\\[[^\\]]*\\]/, \"\");\n\n\t// Remove style tags\n\tformat = format.replace(/\\[[^\\]]+\\]/, \"\");\n\n\t// Trim\n\tformat = format.trim();\n\n\t// Check for any explicit format hints (i.e. /Date)\n\tlet hints: RegExpMatchArray | null = format.match(/\\/(date|number|duration)$/);\n\n\tif (hints) {\n\t\treturn hints[1];\n\t}\n\n\t// Check for explicit hints\n\tif (format === \"number\") {\n\t\treturn \"number\";\n\t}\n\n\tif (format === \"date\") {\n\t\treturn \"date\";\n\t}\n\n\tif (format === \"duration\") {\n\t\treturn \"duration\";\n\t}\n\n\t// Detect number formatting symbols\n\tif (format.match(/[#0]/)) {\n\t\treturn \"number\";\n\t}\n\n\t// Detect date formatting symbols\n\tif (format.match(/[ymwdhnsqaxkzgtei]/)) {\n\t\treturn \"date\";\n\t}\n\n\t// Nothing? Let's display as string\n\treturn \"string\";\n}\n\n/**\n * Cleans up format:\n * * Strips out formatter hints\n *\n * @ignore Exclude from docs\n * @param format Format\n * @return Cleaned format\n */\nexport function cleanFormat(format: string): string {\n\treturn format.replace(/\\/(date|number|duration)$/i, \"\");\n}\n\n/**\n * Strips all tags from the string.\n *\n * @param text Source string\n * @return String without tags\n */\nexport function stripTags(text: string): string {\n\treturn text ? text.replace(/<[^>]*>/g, \"\") : text;\n}\n\n/**\n * Removes new lines and tags from a string.\n *\n * @param text String to conver\n * @return Converted string\n */\nexport function plainText(text: string): string {\n\treturn text ? stripTags((\"\" + text).replace(/[\\n\\r]+/g, \". \")) : text;\n}\n\n/**\n * Escapes string so it can safely be used in a Regex.\n *\n * @param value Unsescaped string\n * @return Escaped string\n */\nexport function escapeForRgex(value: string): string {\n\treturn value.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n}\n\n/**\n * Adds space before each uppercase letter.\n *\n * @param str Input string\n * @return Output string\n */\nexport function addSpacing(str: string): string {\n\tlet result = \"\";\n\tfor (let i = 0; i < str.length; i++) {\n\t\tconst char = str.charAt(i);\n\t\tif (char.toUpperCase() == char && i != 0) {\n\t\t\tresult += \" \";\n\t\t}\n\t\tresult += char;\n\t}\n\treturn result;\n}\n\n/**\n * Splits the string into separate characters. Keeps RTL words non-split.\n *\n * @param source Input\n * @return Split text\n */\nexport function splitString(source: string): string[] {\n\t// Regular expression to identify RTL characters\n\tconst rtlChar = /[\\u0590-\\u05FF\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\uFB50-\\uFDFF\\uFE70-\\uFEFF]/;\n\n\t// Regular expression to capture segments ending with specific Arabic characters\n\tconst splitPattern = /([^اأدذرزو]*[اأدذرزو])/gi;\n\n\t// Split input string into array of words or characters, including whitespace\n\tlet segments = source.split(/(\\s+)/); // Split by whitespace, capturing it\n\n\tlet result: string[] = [];\n\tsegments.forEach(segment => {\n\t\tif (segment.match(/^\\s+$/)) {\n\t\t\t// If the segment is purely whitespace\n\t\t\tif (segment = \" \") {\n\t\t\t\tsegment = \" \";\n\t\t\t}\n\t\t\tresult.push(segment);\n\t\t} else if (rtlChar.test(segment)) {\n\t\t\t// If the segment contains RTL characters, handle special splits\n\t\t\tlet parts = segment.split(splitPattern).filter(part => part !== '');\n\t\t\t// Concatenate parts processed by the split pattern directly to result\n\t\t\tresult = result.concat(parts);\n\t\t} else {\n\t\t\t// Treat this segment as LTR: split into characters\n\t\t\tresult = result.concat([...segment]);\n\t\t}\n\t});\n\n\treturn result;\n}\n\n/**\n * ============================================================================\n * DATE-RELATED FUNCTIONS\n * ============================================================================\n * @hidden\n */\n\n/**\n * Returns a year day.\n *\n * @param date Date\n * @param utc Assume UTC dates?\n * @return Year day\n */\nexport function getYearDay(date: Date, utc: boolean = false): number {\n\t// TODO: utc needed?\n\tutc;\n\tconst start = new Date(date.getFullYear(), 0, 0);\n\tconst diff = (date.getTime() - start.getTime()) + ((start.getTimezoneOffset() - date.getTimezoneOffset()) * 60 * 1000);\n\tconst oneDay = 1000 * 60 * 60 * 24;\n\treturn Math.floor(diff / oneDay);\n}\n\n/**\n * Returns week number for a given date.\n *\n * @param date Date\n * @param utc Assume UTC dates?\n * @return Week number\n */\nexport function getWeek(date: Date, _utc: boolean = false): number {\n\tconst d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\n\tconst day = d.getUTCDay() || 7;\n\td.setUTCDate(d.getUTCDate() + 4 - day);\n\tconst firstDay = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\n\treturn Math.ceil((((d.getTime() - firstDay.getTime()) / 86400000) + 1) / 7);\n}\n\n/**\n * Returns a \"week year\" of the given date.\n *\n * @param date Date\n * @param utc Assume UTC dates?\n * @return Year of week\n * @since 5.3.0\n */\nexport function getWeekYear(date: Date, _utc: boolean = false): number {\n\tconst d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\n\tconst day = d.getUTCDay() || 7;\n\td.setUTCDate(d.getUTCDate() + 4 - day);\n\tconst firstDay = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\n\treturn firstDay.getFullYear();\n}\n\n/**\n * Returns a week number in the month.\n *\n * @param date Source Date\n * @param utc Assume UTC dates?\n * @return Week number in month\n */\nexport function getMonthWeek(date: Date, utc: boolean = false): number {\n\tconst firstWeek = getWeek(new Date(date.getFullYear(), date.getMonth(), 1), utc);\n\tlet currentWeek = getWeek(date, utc);\n\tif (currentWeek == 1) {\n\t\tcurrentWeek = 53;\n\t}\n\treturn currentWeek - firstWeek + 1;\n}\n\n/**\n * Returns a year day out of the given week number.\n *\n * @param week Week\n * @param year Year\n * @param weekday Weekday\n * @param utc Assume UTC dates\n * @return Day in a year\n */\nexport function getDayFromWeek(week: number, year: number, weekday: number = 1, utc: boolean = false): number {\n\tlet date = new Date(year, 0, 4, 0, 0, 0, 0);\n\tif (utc) {\n\t\tdate.setUTCFullYear(year);\n\t}\n\tlet day = week * 7 + weekday - ((date.getDay() || 7) + 3);\n\treturn day;\n}\n\n/**\n * Returns 12-hour representation out of the 24-hour hours.\n *\n * @param hours 24-hour number\n * @return 12-hour number\n */\nexport function get12Hours(hours: number, base?: number): number {\n\tif (hours > 12) {\n\t\thours -= 12;\n\t}\n\telse if (hours === 0) {\n\t\thours = 12;\n\t}\n\treturn base != null ? hours + (base - 1) : hours;\n}\n\n/**\n * Returns a string name of the time zone.\n *\n * @param date Date object\n * @param long Should return long (\"Pacific Standard Time\") or short abbreviation (\"PST\")\n * @param savings Include information if it's in daylight savings mode\n * @param utc Assume UTC dates\n * @return Time zone name\n */\nexport function getTimeZone(date: Date, long: boolean = false, savings: boolean = false, utc: boolean = false, timezone?: string): string {\n\tif (utc) {\n\t\treturn long ? \"Coordinated Universal Time\" : \"UTC\";\n\t}\n\telse if (timezone) {\n\t\tconst d1 = date.toLocaleString(\"en-US\", { timeZone: timezone });\n\t\tconst d2 = date.toLocaleString(\"en-US\", { timeZone: timezone, timeZoneName: long ? \"long\" : \"short\" });\n\t\treturn trim(d2.substr(d1.length));\n\t}\n\tlet wotz = date.toLocaleString(\"UTC\");\n\tlet wtz = date.toLocaleString(\"UTC\", { timeZoneName: long ? \"long\" : \"short\" }).substr(wotz.length);\n\t//wtz = wtz.replace(/[+-]+[0-9]+$/, \"\");\n\tif (savings === false) {\n\t\twtz = wtz.replace(/ (standard|daylight|summer|winter) /i, \" \");\n\t}\n\treturn trim(wtz);\n}\n\n/**\n * Returns the UTC offset in minutes for a given timezone.\n *\n * @param timezone IANA timezone identifier\n * @param targetDate Date to check offset for\n * @return Offset in minutes\n */\nexport function getTimezoneOffset(timezone: string, targetDate?: Date): number {\n\tconst date = targetDate || new Date(Date.UTC(2012, 0, 1, 0, 0, 0, 0));\n\tconst utcDate = new Date(date.toLocaleString(\"en-US\", { timeZone: \"UTC\" }));\n\tconst tzDate = new Date(date.toLocaleString(\"en-US\", { timeZone: timezone }));\n\treturn (tzDate.getTime() - utcDate.getTime()) / 6e4 * -1;\n}\n\n\n/**\n * Capitalizes the first letter of a string.\n *\n * @param text Source string\n * @return Capitalized string\n */\nexport function capitalizeFirst(text: string): string {\n\treturn text.charAt(0).toUpperCase() + text.slice(1);\n}\n\n\n/**\n * ============================================================================\n * COLOR UTILS\n * ============================================================================\n */\n\n\n/**\n * Represents an interface for an object that represents an RGB color.\n */\nexport interface iRGB {\n\tr: number;\n\tg: number;\n\tb: number;\n\ta?: number;\n}\n\n/**\n * Represents an interface for an object that represents an HSL color.\n */\nexport interface iHSL {\n\th: number;\n\ts: number;\n\tl: number;\n\ta?: number;\n}\n\n/**\n * Represents an interface for an object that represents an HSV color.\n */\nexport interface iHSV {\n\th: number;\n\ts: number;\n\tv: number;\n\ta?: number;\n}\n\n/**\n * The functions below are taken and adapted from Garry Tan's blog post:\n * http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c\n *\n * The further attributions go mjijackson.com, which now seems to be defunct.\n */\n\n\n/**\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h, s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * Function adapted from:\n * http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c\n *\n * @param h The hue\n * @param s The saturation\n * @param l The lightness\n * @return The RGB representation\n */\nexport function hslToRgb(color: iHSL): iRGB {\n\tlet r, g, b;\n\tlet h = color.h;\n\tlet s = color.s;\n\tlet l = color.l;\n\n\tif (s == 0) {\n\t\tr = g = b = l; // achromatic\n\t} else {\n\t\tlet hue2rgb = function hue2rgb(p: number, q: number, t: number) {\n\t\t\tif (t < 0) { t += 1; }\n\t\t\tif (t > 1) { t -= 1; }\n\t\t\tif (t < 1 / 6) { return p + (q - p) * 6 * t; }\n\t\t\tif (t < 1 / 2) { return q; }\n\t\t\tif (t < 2 / 3) { return p + (q - p) * (2 / 3 - t) * 6; }\n\t\t\treturn p;\n\t\t}\n\n\t\tlet q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n\t\tlet p = 2 * l - q;\n\t\tr = hue2rgb(p, q, h + 1 / 3);\n\t\tg = hue2rgb(p, q, h);\n\t\tb = hue2rgb(p, q, h - 1 / 3);\n\t}\n\n\treturn {\n\t\tr: Math.round(r * 255),\n\t\tg: Math.round(g * 255),\n\t\tb: Math.round(b * 255)\n\t};\n}\n\n/**\n * Converts an RGB color value to HSL. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and l in the set [0, 1].\n *\n * Function adapted from:\n * http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c\n *\n * @param r The red color value\n * @param g The green color value\n * @param b The blue color value\n * @return The HSL representation\n */\nexport function rgbToHsl(color: iRGB): iHSL {\n\tlet r = color.r / 255;\n\tlet g = color.g / 255;\n\tlet b = color.b / 255;\n\tlet max = Math.max(r, g, b);\n\tlet min = Math.min(r, g, b);\n\tlet h = 0;\n\tlet s = 0;\n\tlet l = (max + min) / 2;\n\n\tif (max === min) {\n\t\th = s = 0; // achromatic\n\n\t} else {\n\t\tlet d = max - min;\n\n\t\ts = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n\t\tswitch (max) {\n\t\t\tcase r: h = (g - b) / d + (g < b ? 6 : 0); break;\n\t\t\tcase g: h = (b - r) / d + 2; break;\n\t\t\tcase b: h = (r - g) / d + 4; break;\n\t\t}\n\n\t\th /= 6;\n\t}\n\n\treturn {\n\t\th: h,\n\t\ts: s,\n\t\tl: l,\n\t};\n}\n\n\n/**\n * Converts HSV to HSL.\n *\n * https://en.wikipedia.org/wiki/HSL_and_HSV#HSV_to_HSL\n */\nexport function hsvToHsl(hsv: iHSV): iHSL {\n\tconst l = hsv.v * (1 - (hsv.s / 2));\n\n\tconst s =\n\t\t(l === 0 || l === 1\n\t\t\t? 0\n\t\t\t: (hsv.v - l) / Math.min(l, 1 - l));\n\n\treturn {\n\t\th: hsv.h,\n\t\ts,\n\t\tl,\n\t\ta: hsv.a,\n\t};\n}\n\n\n/**\n * Converts HSL to HSV.\n *\n * https://en.wikipedia.org/wiki/HSL_and_HSV#HSL_to_HSV\n */\nexport function hslToHsv(hsl: iHSL): iHSV {\n\tconst v = hsl.l + (hsl.s * Math.min(hsl.l, 1 - hsl.l));\n\n\tconst s =\n\t\t(v === 0\n\t\t\t? 0\n\t\t\t: 2 * (1 - (hsl.l / v)));\n\n\treturn {\n\t\th: hsl.h,\n\t\ts,\n\t\tv,\n\t\ta: hsl.a,\n\t};\n}\n\n\n/**\n * Returns a color that is `percent` brighter than the reference color.\n *\n * @param color Reference color\n * @param percent Brightness percent\n * @return Hex code of the new color\n */\nexport function lighten(rgb: $type.Optional<iRGB>, percent: number): $type.Optional<iRGB> {\n\tif (rgb) {\n\t\treturn {\n\t\t\tr: Math.max(0, Math.min(255, rgb.r + getLightnessStep(rgb.r, percent))),\n\t\t\tg: Math.max(0, Math.min(255, rgb.g + getLightnessStep(rgb.g, percent))),\n\t\t\tb: Math.max(0, Math.min(255, rgb.b + getLightnessStep(rgb.b, percent))),\n\t\t\ta: rgb.a\n\t\t};\n\n\t} else {\n\t\t// TODO is this correct ?\n\t\treturn rgb;\n\t}\n};\n\n/**\n * Gets lightness step.\n *\n * @param value Value\n * @param percent Percent\n * @return Step\n */\nexport function getLightnessStep(value: number, percent: number): number {\n\tlet base = percent > 0 ? 255 - value : value;\n\treturn Math.round(base * percent);\n}\n\n/**\n * Returns a color that is `percent` brighter than the source `color`.\n *\n * @param color Source color\n * @param percent Brightness percent\n * @return New color\n */\nexport function brighten(rgb: $type.Optional<iRGB>, percent: number): $type.Optional<iRGB> {\n\tif (rgb) {\n\t\tlet base = Math.min(Math.max(rgb.r, rgb.g, rgb.b), 230);\n\t\t//let base = Math.max(rgb.r, rgb.g, rgb.b);\n\t\tlet step = getLightnessStep(base, percent);\n\t\treturn {\n\t\t\tr: Math.max(0, Math.min(255, Math.round(rgb.r + step))),\n\t\t\tg: Math.max(0, Math.min(255, Math.round(rgb.g + step))),\n\t\t\tb: Math.max(0, Math.min(255, Math.round(rgb.b + step))),\n\t\t\ta: rgb.a\n\t\t};\n\n\t} else {\n\t\t// TODO is this correct ?\n\t\treturn rgb;\n\t}\n};\n\n/**\n * Returns brightness step.\n *\n * @ignore Exclude from docs\n * @param value Value\n * @param percent Percent\n * @return Step\n */\nexport function getBrightnessStep(_value: number, percent: number): number {\n\tlet base = 255; //percent > 0 ? 255 - value : value;\n\treturn Math.round(base * percent);\n}\n\n/**\n * Returns `true` if color is \"light\". Useful indetermining which contrasting\n * color to use for elements over this color. E.g.: you would want to use\n * black text over light background, and vice versa.\n *\n * @param color Source color\n * @return Light?\n */\nexport function isLight(color: iRGB): boolean {\n\treturn ((color.r * 299) + (color.g * 587) + (color.b * 114)) / 1000 >= 128;\n}\n\n/**\n * Returns a new [[iRGB]] object based on `rgb` parameter with specific\n * saturation applied.\n *\n * `saturation` can be in the range of 0 (fully desaturated) to 1 (fully\n * saturated).\n *\n * @param color Base color\n * @param saturation Saturation (0-1)\n * @return New color\n */\nexport function saturate(rgb: $type.Optional<iRGB>, saturation: number): $type.Optional<iRGB> {\n\tif (rgb === undefined || saturation == 1) {\n\t\treturn rgb;\n\t}\n\n\tlet hsl = rgbToHsl(rgb);\n\thsl.s = saturation;\n\treturn hslToRgb(hsl);\n}\n\n/**\n * Returns a color which contrasts more with the source `color`.\n *\n * @param color Base color\n * @param lightAlternative Light option\n * @param darkAlternative Dark option\n * @return New color\n */\nexport function alternativeColor(color: iRGB, lightAlternative: iRGB = { r: 255, g: 255, b: 255 }, darkAlternative: iRGB = { r: 255, g: 255, b: 255 }): iRGB {\n\tlet light = lightAlternative;\n\tlet dark = darkAlternative;\n\tif (isLight(darkAlternative)) {\n\t\tlight = darkAlternative;\n\t\tdark = lightAlternative;\n\t}\n\treturn isLight(color) ? dark : light;\n}\n\n/**\n * @ignore\n */\nexport function mergeTags(tags1: string[] | undefined, tags2: string[]): string[] {\n\tif (!tags1) {\n\t\ttags1 = [];\n\t}\n\treturn [...tags1, ...tags2].filter((value, index, self) => {\n\t\treturn self.indexOf(value) === index;\n\t});\n}\n\n/**\n * @ignore\n */\nexport function sameBounds(a: IBounds, b?: IBounds): boolean {\n\tif (!b) {\n\t\treturn false;\n\t}\n\tif (a.left != b.left) {\n\t\treturn false\n\t}\n\tif (a.right != b.right) {\n\t\treturn false\n\t}\n\tif (a.top != b.top) {\n\t\treturn false\n\t}\n\tif (a.bottom != b.bottom) {\n\t\treturn false\n\t}\n\treturn true;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../../../src/.internal/core/util/Utils.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,OAAO,MAAM,UAAU,CAAC;AAGpC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAa,MAAM,YAAY,CAAC;AAEhE;;;;;GAKG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,KAAK,CAAC,CAAa;IAClC,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE;QACtC,CAAC,EAAE,CAAC;KAEJ;SAAM;QACN,MAAM,QAAQ,GAAG,GAAG,EAAE;YACrB,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE;gBACtC,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;gBAC3D,CAAC,EAAE,CAAC;aACJ;QACF,CAAC,CAAC;QAEF,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;KACxD;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,EAAe;IAC5C,IAAI,EAAE,CAAC,UAAU,EAAE;QAClB,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;KAC9B;AACF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAkB,GAAgB,EAAE,IAAY,EAAE,QAA4B,EAAE,OAAa;IAC5H,2HAA2H;IAC3H,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAiB,QAAQ,EAAE,OAAO,IAAI,KAAK,CAAC,CAAC;IAEtE,OAAO,IAAI,QAAQ,CAAC,GAAG,EAAE;QACxB,GAAG,CAAC,mBAAmB,CAAC,IAAI,EAAiB,QAAQ,EAAE,OAAO,IAAI,KAAK,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,MAAM,CAAC,QAAoB;IAC1C,gCAAgC;IAChC,OAAO,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;QACjD,QAAQ,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAuF;IAC/G,QAAQ,GAAG,EAAE;QACZ,KAAK,aAAa;YACjB,oDAAoD;YACpD,OAAO,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAE5C,KAAK,eAAe;YACnB,OAAO,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QAE9C,KAAK,aAAa;YACjB,OAAO,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAE5C,KAAK,aAAa;YACjB,OAAO,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAE5C,KAAK,gBAAgB;YACpB,OAAO,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;KAC/C;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAoB;IAChD,IAAI,EAAE,GAAS,KAAM,CAAC,SAAS,IAAI,CAAC,CAAC;IACrC,OAAO,EAAE,CAAC;AACX,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,IAAI;IACnB,IAAI,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,IAAI,EAAE;QACtE,IAAU,QAAQ,CAAC,aAAc,CAAC,IAAI,EAAE;YACjC,QAAQ,CAAC,aAAc,CAAC,IAAI,EAAE,CAAC;SACrC;aACI;YACJ,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC7C,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;YAC/B,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;YACxB,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACjC,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,KAAK,CAAC,IAAI,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SACjC;KACD;AACF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,KAAK,CAAC,EAAe;IACpC,IAAI,EAAE,EAAE;QACP,EAAE,CAAC,KAAK,EAAE,CAAC;KACX;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC3C,IAAI,QAAQ,CAAC,eAAe,CAAC,EAAE;QAC9B,OAAO,GAAG,CAAC;KACX;SACI,IAAI,QAAQ,CAAC,aAAa,CAAC,EAAE;QACjC,QAAQ,GAAG,EAAE;YACZ,KAAK,aAAa,CAAC,CAAC,OAAO,YAAY,CAAC;YACxC,KAAK,YAAY,CAAC,CAAC,OAAO,UAAU,CAAC;YACrC,KAAK,cAAc,CAAC,CAAC,OAAO,UAAU,CAAC;YACvC,KAAK,aAAa,CAAC,CAAC,OAAO,YAAY,CAAC;YACxC,KAAK,aAAa,CAAC,CAAC,OAAO,WAAW,CAAC;YACvC,KAAK,WAAW,CAAC,CAAC,OAAO,UAAU,CAAC;YACpC,KAAK,OAAO,CAAC,CAAC,OAAO,OAAO,CAAC;YAC7B,KAAK,UAAU,CAAC,CAAC,OAAO,UAAU,CAAC;SAEnC;KACD;SACI,IAAI,QAAQ,CAAC,aAAa,CAAC,EAAE;QACjC,QAAQ,GAAG,EAAE;YACZ,KAAK,aAAa,CAAC,CAAC,OAAO,WAAW,CAAC;YACvC,KAAK,YAAY,CAAC,CAAC,OAAO,UAAU,CAAC;YACrC,KAAK,cAAc,CAAC,CAAC,OAAO,YAAY,CAAC;YACzC,KAAK,aAAa,CAAC,CAAC,OAAO,WAAW,CAAC;YACvC,KAAK,aAAa,CAAC,CAAC,OAAO,WAAW,CAAC;YACvC,KAAK,WAAW,CAAC,CAAC,OAAO,SAAS,CAAC;YACnC,KAAK,OAAO,CAAC,CAAC,OAAO,OAAO,CAAC;YAC7B,KAAK,UAAU,CAAC,CAAC,OAAO,UAAU,CAAC;SAEnC;KACD;IACD,OAAO,GAAG,CAAC;AACZ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,EAAsB;IAClD,IAAI,OAAO,KAAK,KAAK,WAAW,IAAI,EAAE,YAAY,KAAK,EAAE;QACxD,OAAO,IAAI,CAAC;KACZ;SACI,IAAI,OAAO,YAAY,KAAK,WAAW,IAAI,EAAE,YAAY,YAAY,IAAU,EAAG,CAAC,WAAW,IAAI,IAAI,EAAE;QAC5G,QAAc,EAAG,CAAC,WAAW,EAAE;YAC9B,KAAK,OAAO,CAAC;YACb,KAAK,KAAK,CAAC;YACX,KAAK,CAAC;gBACL,OAAO,IAAI,CAAC;YACb,KAAK,OAAO,CAAC;YACb,KAAK,CAAC;gBACL,OAAO,KAAK,CAAC;YACd;gBACC,OAAO,CAAC,CAAC,EAAE,YAAY,UAAU,CAAC,CAAC;SACpC;KACD;SACI,IAAU,EAAG,CAAC,IAAI,IAAI,IAAI,EAAE;QAChC,IAAU,EAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;YACnC,OAAO,KAAK,CAAC;SACb;KACD;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAgB,EAAE,QAAgB,EAAE,KAAyB;IAC/E,GAAG,CAAC,KAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;AACpC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAgB,EAAE,QAAgB;IAC1D,OAAa,GAAG,CAAC,KAAM,CAAC,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAoB;IAClD,IAAK,KAAa,CAAC,YAAY,EAAE;QAChC,MAAM,IAAI,GAAI,KAAe,CAAC,YAAY,EAAE,CAAC;QAE7C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB,OAAO,IAAI,CAAC;SAEZ;aAAM;YACN,OAAO,IAAI,CAAC,CAAC,CAAS,CAAC;SACvB;KAED;SAAM;QACN,OAAO,KAAK,CAAC,MAAqB,CAAC;KACnC;AACF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,CAAU,EAAE,CAAU;IAC9C,IAAI,MAAM,GAAS,CAAC,CAAC;IAErB,OAAO,IAAI,EAAE;QACZ,IAAI,CAAC,KAAK,MAAM,EAAE;YACjB,OAAO,IAAI,CAAC;SAEZ;aAAM,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,EAAE;YACtC,mCAAmC;YACnC,IAAiB,MAAO,CAAC,IAAI,IAAI,IAAI,EAAE;gBACtC,OAAO,KAAK,CAAC;aAEb;iBAAM;gBACN,MAAM,GAAgB,MAAO,CAAC,IAAI,CAAC;aACnC;SAED;aAAM;YACN,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;SAC3B;KACD;AACF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,KAAoB,EAAE,MAAc;IAChE,OAAO,KAAK,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAW,KAAK,CAAC,MAAM,CAAC,CAAC;AACzE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,MAAmB,EAAE,WAAoB;IACvE,IAAI,WAAW,EAAE;QAChB,MAAM,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;KACpC;SACI;QACJ,MAAM,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;KACpC;AACF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,KAAoB;IAC/C,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;QAC5B,OAAO,KAAK,CAAC,GAAG,CAAC;KACjB;IACD,QAAQ,KAAK,CAAC,OAAO,EAAE;QACtB,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC;QACrB,KAAK,EAAE,CAAC,CAAC,OAAO,OAAO,CAAC;QACxB,KAAK,EAAE,CAAC,CAAC,OAAO,OAAO,CAAC;QACxB,KAAK,EAAE,CAAC,CAAC,OAAO,SAAS,CAAC;QAC1B,KAAK,EAAE,CAAC,CAAC,OAAO,QAAQ,CAAC;QACzB,KAAK,EAAE,CAAC,CAAC,OAAO,GAAG,CAAC;QACpB,KAAK,EAAE,CAAC,CAAC,OAAO,WAAW,CAAC;QAC5B,KAAK,EAAE,CAAC,CAAC,OAAO,SAAS,CAAC;QAC1B,KAAK,EAAE,CAAC,CAAC,OAAO,YAAY,CAAC;QAC7B,KAAK,EAAE,CAAC,CAAC,OAAO,WAAW,CAAC;QAC5B,KAAK,EAAE,CAAC,CAAC,OAAO,QAAQ,CAAC;KACzB;IACD,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;AAC3B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,CAAO;IACpC,IAAI,MAAM,GAAS,CAAC,CAAC;IAErB,OAAO,IAAI,EAAE;QACZ,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,EAAE;YAC/B,mCAAmC;YACnC,IAAiB,MAAO,CAAC,IAAI,IAAI,IAAI,EAAE;gBACtC,OAAmB,MAAM,CAAC;aAE1B;iBAAM;gBACN,OAAO,IAAI,CAAC;aACZ;SAED;aAAM;YACN,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;SAC3B;KACD;AACF,CAAC;AAED;;GAEG;AACH,IAAI,cAA6C,CAAC;AAElD;;GAEG;AACH,SAAS,gBAAgB,CAAC,OAA0B,EAAE,IAAY,EAAE,QAAgB,EAAE;IACrF,6BAA6B;IAC7B,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC;IACpB,IAAI,KAAK,IAAI,EAAE,EAAE;QAChB,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;KAC9B;IACD,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC;IAErB,IAAI,OAAO,KAAK,IAAI,EAAE;QACrB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;KAC7B;SAAM;QACN,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;KACvB;IAED,OAAO,CAAC,CAAC;AACV,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,OAA0B,EAAE,QAAgB,EAAE;IACpE,IAAI,OAAO,KAAK,IAAI,EAAE;QACrB,IAAI,cAAc,IAAI,IAAI,EAAE;YAC3B,6BAA6B;YAC7B,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC1C,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC;YACpB,IAAI,KAAK,IAAI,EAAE,EAAE;gBAChB,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;aAC9B;YACD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC7B,cAAc,GAAG,CAAC,CAAC,KAAsB,CAAC;SAC1C;QAED,OAAO,cAAc,CAAC;KAEtB;SAAM;QACN,6BAA6B;QAC7B,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC;QACpB,IAAI,KAAK,IAAI,EAAE,EAAE;YAChB,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;SAC9B;QACD,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACvB,OAAO,CAAC,CAAC,KAAsB,CAAC;KAChC;AACF,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,IAAmB,EAAE,QAAgB;IAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IACnC,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC;IAExC,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAiB,CAAC;AAC7C,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,SAAU,SAAQ,aAAa;IA0B3C;;;;;OAKG;IACH,YAAY,OAA0B,EAAE,QAAgB,EAAE,MAAkC,EAAE,QAAgB,EAAE;QAC/G,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAE3C,IAAI;YACH,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;SACpD;QACD,OAAO,GAAG,EAAE;YACX,2CAA2C;YAC3C,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;SACrD;QAED,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACnC,IAAI,CAAC,QAAQ,CAAS,GAAG,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACJ,CAAC;IAxCD;;;;;;OAMG;IACH,IAAW,QAAQ,CAAC,QAAgB;QACnC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,IAAW,QAAQ;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;IAChC,CAAC;IA0BD,iBAAiB;IACP,QAAQ;QACjB,mBAAmB;QACnB,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAE9D,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YACjB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;SAE/C;aAAM;YACN,8CAA8C;YAC9C,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;SAC7B;IACF,CAAC;IAED;;;;;OAKG;IACK,oBAAoB,CAAC,IAAY,EAAE,KAAa;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC/B,KAAK,CAAC,WAAW,CAAC,UAAU,GAAG,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAChD,KAAK,CAAC,WAAW,CAAC,OAAO,GAAG,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC7C,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5C,KAAK,CAAC,WAAW,CAAC,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC3C,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IACpC,CAAC;IAED;;;;;OAKG;IACI,QAAQ,CAAC,IAAY,EAAE,KAAa;QAC1C,IAAI,IAAI,KAAK,YAAY,EAAE;YAC1B,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAEvC;aAAM;YACN,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;SAC9C;IACF,CAAC;CACD;AAED;;;;GAIG;AACH,MAAM,OAAO,UAAW,SAAQ,aAAa;IAG5C;;;;OAIG;IACH,YAAY,OAA0B,EAAE,IAAY,EAAE,QAAgB,EAAE;QACvE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;IAES,QAAQ;QACjB,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC7B,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACpD;IACF,CAAC;CACD;AAGD;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAiC,EAAE,SAAiB;IAC5E,IAAI,CAAC,OAAO,EAAE;QACb,OAAO;KACP;IACD,IAAI,OAAO,CAAC,SAAS,EAAE;QACtB,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YAC7B,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;KACH;SACI;QACJ,IAAI,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,gBAAgB,EAAE;YACrB,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;gBACzE,OAAO,IAAI,KAAK,SAAS,CAAC;YAC3B,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC,CAAC;SAChC;aACI;YACJ,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;SACzC;KACD;AACF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,OAAoB,EAAE,SAAiB;IAClE,IAAI,CAAC,OAAO,EAAE;QACb,OAAO;KACP;IACD,IAAI,OAAO,CAAC,SAAS,EAAE;QACtB,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;KACpC;SACI;QACJ,IAAI,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,gBAAgB,EAAE;YACrB,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;gBACzE,OAAO,IAAI,KAAK,SAAS,CAAC;YAC3B,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;SACd;KACD;AACF,CAAC;AAED,MAAM;AACN,+EAA+E;AAC/E,4BAA4B;AAC5B,KAAK;AACL,aAAa;AACb,4BAA4B;AAC5B,OAAO;AACP,+DAA+D;AAE/D,iCAAiC;AAEjC,4BAA4B;AAC5B,iBAAiB;AACjB,4GAA4G;AAC5G,sGAAsG;AACtG,4GAA4G;AAC5G,kHAAkH;AAClH,8HAA8H;AAC9H,yFAAyF;AACzF,MAAM;AACN,4CAA4C;AAC5C,iCAAiC;AACjC,sCAAsC;AACtC,MAAM;AACN,KAAK;AAEL,qCAAqC;AACrC,2DAA2D;AAE3D,IAAI;AAEJ,MAAM;AACN,8BAA8B;AAC9B,KAAK;AACL,aAAa;AACb,yBAAyB;AACzB,MAAM;AACN,iEAAiE;AAEjE,4BAA4B;AAC5B,iBAAiB;AACjB,4GAA4G;AAC5G,sGAAsG;AACtG,4GAA4G;AAC5G,kHAAkH;AAClH,8HAA8H;AAC9H,yFAAyF;AACzF,MAAM;AACN,4CAA4C;AAC5C,iCAAiC;AACjC,kCAAkC;AAClC,MAAM;AACN,KAAK;AAEL,qCAAqC;AACrC,2CAA2C;AAE3C,IAAI;AAEJ;;;;GAIG;AACH,MAAM,UAAU,GAAG;IAClB,OAAO,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,YAAY,IAAI,QAAQ,CAAC;AACpE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB;IAChC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,OAA4C,EAAE,IAAY;IACzF,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;QAC5B,OAAO,OAAO,CAAC;KACf;SAAM,IAAI,OAAO,IAAI,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;QACpF,OAAO,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;KAE5B;SAAM;QACN,OAAO,CAAC,CAAC;KACT;AACF,CAAC;AAID;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC3C,IAAI,KAAK,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACpE,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,CAAC,CAAC;KAAE;IACzB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnF,CAAC;AAGD;;;;;GAKG;AAEH;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,KAAU,EAAE,MAAc,CAAC,EAAE,OAAe,GAAG;IACxE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC9B,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;KACzB;IAED,OAAO,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AACtF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY;IACpC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,IAAI,CAAC,IAAY;IAChC,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAClC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAY,EAAE,SAAiB,EAAE,aAAsB,KAAK,EAAE,WAAmB,KAAK;IAC9H,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS,EAAE;QAC5B,4DAA4D;QAC5D,IAAI,wBAAwB,GAAG,SAAS,GAAG,CAAC,CAAC;QAC7C,OAAO,wBAAwB,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YAC1F,wBAAwB,EAAE,CAAC;SAC3B;QAED,IAAI,wBAAwB,IAAI,CAAC,IAAI,UAAU,IAAI,KAAK,EAAE;YACzD,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,wBAAwB,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;SAC/D;aAAM;YACN,0EAA0E;YAC1E,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC;SAC/C;KACD;SAAM;QACN,OAAO,IAAI,CAAC;KACZ;AACF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,MAAc;IAEvC,aAAa;IACb,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QAClC,OAAO,QAAQ,CAAC;KAChB;IAED,+BAA+B;IAC/B,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAEzD,oBAAoB;IACpB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAE1C,OAAO;IACP,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAEvB,mDAAmD;IACnD,IAAI,KAAK,GAA4B,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAE/E,IAAI,KAAK,EAAE;QACV,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;KAChB;IAED,2BAA2B;IAC3B,IAAI,MAAM,KAAK,QAAQ,EAAE;QACxB,OAAO,QAAQ,CAAC;KAChB;IAED,IAAI,MAAM,KAAK,MAAM,EAAE;QACtB,OAAO,MAAM,CAAC;KACd;IAED,IAAI,MAAM,KAAK,UAAU,EAAE;QAC1B,OAAO,UAAU,CAAC;KAClB;IAED,mCAAmC;IACnC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;QACzB,OAAO,QAAQ,CAAC;KAChB;IAED,iCAAiC;IACjC,IAAI,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE;QACvC,OAAO,MAAM,CAAC;KACd;IAED,mCAAmC;IACnC,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc;IACzC,OAAO,MAAM,CAAC,OAAO,CAAC,4BAA4B,EAAE,EAAE,CAAC,CAAC;AACzD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC3C,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACtD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACvE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IAC1C,OAAO,KAAK,CAAC,OAAO,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC;AAC1D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW;IACrC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE;YACzC,MAAM,IAAI,GAAG,CAAC;SACd;QACD,MAAM,IAAI,IAAI,CAAC;KACf;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc;IACzC,gDAAgD;IAChD,MAAM,OAAO,GAAG,kFAAkF,CAAC;IAEnG,gFAAgF;IAChF,MAAM,YAAY,GAAG,0BAA0B,CAAC;IAEhD,6EAA6E;IAC7E,IAAI,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,oCAAoC;IAE1E,IAAI,MAAM,GAAa,EAAE,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QAC1B,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;YAC3B,sCAAsC;YACtC,IAAI,OAAO,GAAG,GAAG,EAAE;gBAClB,OAAO,GAAG,IAAI,CAAC;aACf;YACD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACrB;aAAM,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YACjC,gEAAgE;YAChE,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;YACpE,sEAAsE;YACtE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SAC9B;aAAM;YACN,mDAAmD;YACnD,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;SACrC;IACF,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;;;;GAKG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,IAAU,EAAE,MAAe,KAAK;IAC1D,oBAAoB;IACpB,GAAG,CAAC;IACJ,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACvH,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACnC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;AAClC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,OAAO,CAAC,IAAU,EAAE,OAAgB,KAAK;IACxD,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAClF,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9D,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,IAAU,EAAE,OAAgB,KAAK;IAC5D,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAClF,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9D,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC;AAC/B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,IAAU,EAAE,MAAe,KAAK;IAC5D,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACjF,IAAI,WAAW,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACrC,IAAI,WAAW,IAAI,CAAC,EAAE;QACrB,WAAW,GAAG,EAAE,CAAC;KACjB;IACD,OAAO,WAAW,GAAG,SAAS,GAAG,CAAC,CAAC;AACpC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,IAAY,EAAE,UAAkB,CAAC,EAAE,MAAe,KAAK;IACnG,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5C,IAAI,GAAG,EAAE;QACR,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;KAC1B;IACD,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,OAAO,GAAG,CAAC;AACZ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,IAAa;IACtD,IAAI,KAAK,GAAG,EAAE,EAAE;QACf,KAAK,IAAI,EAAE,CAAC;KACZ;SACI,IAAI,KAAK,KAAK,CAAC,EAAE;QACrB,KAAK,GAAG,EAAE,CAAC;KACX;IACD,OAAO,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAClD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,IAAU,EAAE,OAAgB,KAAK,EAAE,UAAmB,KAAK,EAAE,MAAe,KAAK,EAAE,QAAiB;IAC/H,IAAI,GAAG,EAAE;QACR,OAAO,IAAI,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,KAAK,CAAC;KACnD;SACI,IAAI,QAAQ,EAAE;QAClB,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChE,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACvG,OAAO,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;KAClC;IACD,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpG,wCAAwC;IACxC,IAAI,OAAO,KAAK,KAAK,EAAE;QACtB,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC;KAC/D;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AAClB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,UAAiB;IACpE,MAAM,IAAI,GAAG,UAAU,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC9E,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;AAC1D,CAAC;AAGD;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAwCD;;;;;GAKG;AAGH;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAW;IACnC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACZ,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAChB,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAChB,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAEhB,IAAI,CAAC,IAAI,CAAC,EAAE;QACX,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa;KAC5B;SAAM;QACN,IAAI,OAAO,GAAG,SAAS,OAAO,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;YAC7D,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,CAAC,IAAI,CAAC,CAAC;aAAE;YACtB,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,CAAC,IAAI,CAAC,CAAC;aAAE;YACtB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBAAE,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aAAE;YAC9C,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBAAE,OAAO,CAAC,CAAC;aAAE;YAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBAAE,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;aAAE;YACxD,OAAO,CAAC,CAAC;QACV,CAAC,CAAA;QAED,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7B,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACrB,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAC7B;IAED,OAAO;QACN,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;QACtB,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;QACtB,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;KACtB,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAW;IACnC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;IACtB,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;IACtB,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;IACtB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAExB,IAAI,GAAG,KAAK,GAAG,EAAE;QAChB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa;KAExB;SAAM;QACN,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;QAElB,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QAEpD,QAAQ,GAAG,EAAE;YACZ,KAAK,CAAC;gBAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAC,MAAM;YACjD,KAAK,CAAC;gBAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAAC,MAAM;YACnC,KAAK,CAAC;gBAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAAC,MAAM;SACnC;QAED,CAAC,IAAI,CAAC,CAAC;KACP;IAED,OAAO;QACN,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;KACJ,CAAC;AACH,CAAC;AAGD;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAS;IACjC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAEpC,MAAM,CAAC,GACN,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAEtC,OAAO;QACN,CAAC,EAAE,GAAG,CAAC,CAAC;QACR,CAAC;QACD,CAAC;QACD,CAAC,EAAE,GAAG,CAAC,CAAC;KACR,CAAC;AACH,CAAC;AAGD;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAS;IACjC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvD,MAAM,CAAC,GACN,CAAC,CAAC,KAAK,CAAC;QACP,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3B,OAAO;QACN,CAAC,EAAE,GAAG,CAAC,CAAC;QACR,CAAC;QACD,CAAC;QACD,CAAC,EAAE,GAAG,CAAC,CAAC;KACR,CAAC;AACH,CAAC;AAGD;;;;;;GAMG;AACH,MAAM,UAAU,OAAO,CAAC,GAAyB,EAAE,OAAe;IACjE,IAAI,GAAG,EAAE;QACR,OAAO;YACN,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YACvE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YACvE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YACvE,CAAC,EAAE,GAAG,CAAC,CAAC;SACR,CAAC;KAEF;SAAM;QACN,yBAAyB;QACzB,OAAO,GAAG,CAAC;KACX;AACF,CAAC;AAAA,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,OAAe;IAC9D,IAAI,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAyB,EAAE,OAAe;IAClE,IAAI,GAAG,EAAE;QACR,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACxD,2CAA2C;QAC3C,IAAI,IAAI,GAAG,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3C,OAAO;YACN,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YACvD,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YACvD,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YACvD,CAAC,EAAE,GAAG,CAAC,CAAC;SACR,CAAC;KAEF;SAAM;QACN,yBAAyB;QACzB,OAAO,GAAG,CAAC;KACX;AACF,CAAC;AAAA,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,OAAe;IAChE,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,oCAAoC;IACpD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,OAAO,CAAC,KAAW;IAClC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,IAAI,GAAG,CAAC;AAC5E,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAyB,EAAE,UAAkB;IACrE,IAAI,GAAG,KAAK,SAAS,IAAI,UAAU,IAAI,CAAC,EAAE;QACzC,OAAO,GAAG,CAAC;KACX;IAED,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IACxB,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC;IACnB,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;AACtB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAW,EAAE,mBAAyB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,kBAAwB,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;IACpJ,IAAI,KAAK,GAAG,gBAAgB,CAAC;IAC7B,IAAI,IAAI,GAAG,eAAe,CAAC;IAC3B,IAAI,OAAO,CAAC,eAAe,CAAC,EAAE;QAC7B,KAAK,GAAG,eAAe,CAAC;QACxB,IAAI,GAAG,gBAAgB,CAAC;KACxB;IACD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAA2B,EAAE,KAAe;IACrE,IAAI,CAAC,KAAK,EAAE;QACX,KAAK,GAAG,EAAE,CAAC;KACX;IACD,OAAO,CAAC,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACzD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC;IACtC,CAAC,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,CAAU,EAAE,CAAW;IACjD,IAAI,CAAC,CAAC,EAAE;QACP,OAAO,KAAK,CAAC;KACb;IACD,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE;QACrB,OAAO,KAAK,CAAA;KACZ;IACD,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,EAAE;QACvB,OAAO,KAAK,CAAA;KACZ;IACD,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE;QACnB,OAAO,KAAK,CAAA;KACZ;IACD,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,EAAE;QACzB,OAAO,KAAK,CAAA;KACZ;IACD,OAAO,IAAI,CAAC;AACb,CAAC","sourcesContent":["import type { Percent } from \"./Percent\";\nimport type { IPointerEvent } from \"../render/backend/Renderer\";\nimport type { Sprite } from \"../render/Sprite\";\n\nimport * as $type from \"./Type\";\nimport * as $array from \"./Array\";\nimport * as $object from \"./Object\";\nimport type { IBounds } from \"./IBounds\";\n\nimport { Disposer, DisposerClass, IDisposer } from \"./Disposer\";\n\n/**\n * ============================================================================\n * DOM FUNCTIONS\n * ============================================================================\n * @hidden\n */\n\n/**\n * Execute a function when DOM is ready.\n *\n * @since 5.0.2\n * @param f Callback\n */\nexport function ready(f: () => void): void {\n\tif (document.readyState !== \"loading\") {\n\t\tf();\n\n\t} else {\n\t\tconst listener = () => {\n\t\t\tif (document.readyState !== \"loading\") {\n\t\t\t\tdocument.removeEventListener(\"readystatechange\", listener);\n\t\t\t\tf();\n\t\t\t}\n\t\t};\n\n\t\tdocument.addEventListener(\"readystatechange\", listener);\n\t}\n}\n\n/**\n * Removes a DOM element.\n * @param el Target element\n */\nexport function removeElement(el: HTMLElement): void {\n\tif (el.parentNode) {\n\t\tel.parentNode.removeChild(el);\n\t}\n}\n\n/**\n * Function that adds a disposable event listener directly to a DOM element.\n *\n * @ignore Exclude from docs\n * @param dom A DOM element to add event to\n * @param type Event type\n * @param listener Event listener\n * @returns Disposable event\n */\nexport function addEventListener<E extends Event>(dom: EventTarget, type: string, listener: (event: E) => void, options?: any): IDisposer {\n\t//@todo proper type check for options: EventListenerOptions | boolean (TS for some reason gives error on passive parameter)\n\tdom.addEventListener(type, <EventListener>listener, options || false);\n\n\treturn new Disposer(() => {\n\t\tdom.removeEventListener(type, <EventListener>listener, options || false);\n\t});\n}\n\n/**\n * Function that adds an event listener which is triggered when the browser's zoom changes.\n *\n * @param listener Event listener\n * @returns Disposable event\n */\nexport function onZoom(listener: () => void): IDisposer {\n\t// TODO use matchMedia instead ?\n\treturn addEventListener(window, \"resize\", (_ev) => {\n\t\tlistener();\n\t});\n}\n\n/**\n * @ignore\n */\nexport function supports(cap: \"touchevents\" | \"pointerevents\" | \"mouseevents\" | \"wheelevents\" | \"keyboardevents\"): boolean {\n\tswitch (cap) {\n\t\tcase \"touchevents\":\n\t\t\t//return \"ontouchstart\" in document.documentElement;\n\t\t\treturn window.hasOwnProperty(\"TouchEvent\");\n\n\t\tcase \"pointerevents\":\n\t\t\treturn window.hasOwnProperty(\"PointerEvent\");\n\n\t\tcase \"mouseevents\":\n\t\t\treturn window.hasOwnProperty(\"MouseEvent\");\n\n\t\tcase \"wheelevents\":\n\t\t\treturn window.hasOwnProperty(\"WheelEvent\");\n\n\t\tcase \"keyboardevents\":\n\t\t\treturn window.hasOwnProperty(\"KeyboardEvent\");\n\t}\n\treturn false;\n}\n\n/**\n * @ignore\n */\nexport function getPointerId(event: IPointerEvent) {\n\tlet id = (<any>event).pointerId || 0;\n\treturn id;\n}\n\n/**\n * Removes focus from any element by shifting focus to body.\n *\n * @ignore\n */\nexport function blur(): void {\n\tif (document.activeElement && document.activeElement != document.body) {\n\t\tif ((<any>document.activeElement).blur) {\n\t\t\t(<any>document.activeElement).blur();\n\t\t}\n\t\telse {\n\t\t\tlet input = document.createElement(\"button\");\n\t\t\tinput.style.position = \"fixed\";\n\t\t\tinput.style.top = \"0px\";\n\t\t\tinput.style.left = \"-10000px\";\n\t\t\tdocument.body.appendChild(input);\n\t\t\tinput.focus();\n\t\t\tinput.blur();\n\t\t\tdocument.body.removeChild(input);\n\t\t}\n\t}\n}\n\n/**\n * Focuses element.\n *\n * @ignore\n */\nexport function focus(el: HTMLElement): void {\n\tif (el) {\n\t\tel.focus();\n\t}\n}\n\n/**\n * @ignore\n */\nexport function getRendererEvent(key: string): string {\n\tif (supports(\"pointerevents\")) {\n\t\treturn key;\n\t}\n\telse if (supports(\"touchevents\")) {\n\t\tswitch (key) {\n\t\t\tcase \"pointerover\": return \"touchstart\";\n\t\t\tcase \"pointerout\": return \"touchend\";\n\t\t\tcase \"pointerleave\": return \"touchend\";\n\t\t\tcase \"pointerdown\": return \"touchstart\";\n\t\t\tcase \"pointermove\": return \"touchmove\";\n\t\t\tcase \"pointerup\": return \"touchend\";\n\t\t\tcase \"click\": return \"click\";\n\t\t\tcase \"dblclick\": return \"dblclick\";\n\n\t\t}\n\t}\n\telse if (supports(\"mouseevents\")) {\n\t\tswitch (key) {\n\t\t\tcase \"pointerover\": return \"mouseover\";\n\t\t\tcase \"pointerout\": return \"mouseout\";\n\t\t\tcase \"pointerleave\": return \"mouseleave\";\n\t\t\tcase \"pointerdown\": return \"mousedown\";\n\t\t\tcase \"pointermove\": return \"mousemove\";\n\t\t\tcase \"pointerup\": return \"mouseup\";\n\t\t\tcase \"click\": return \"click\";\n\t\t\tcase \"dblclick\": return \"dblclick\";\n\n\t\t}\n\t}\n\treturn key;\n}\n\n/**\n * Determines if pointer event originated from a touch pointer or mouse.\n *\n * @param ev Original event\n * @return Touch pointer?\n */\nexport function isTouchEvent(ev: MouseEvent | Touch): boolean {\n\tif (typeof Touch !== \"undefined\" && ev instanceof Touch) {\n\t\treturn true;\n\t}\n\telse if (typeof PointerEvent !== \"undefined\" && ev instanceof PointerEvent && (<any>ev).pointerType != null) {\n\t\tswitch ((<any>ev).pointerType) {\n\t\t\tcase \"touch\":\n\t\t\tcase \"pen\":\n\t\t\tcase 2:\n\t\t\t\treturn true;\n\t\t\tcase \"mouse\":\n\t\t\tcase 4:\n\t\t\t\treturn false;\n\t\t\tdefault:\n\t\t\t\treturn !(ev instanceof MouseEvent);\n\t\t}\n\t}\n\telse if ((<any>ev).type != null) {\n\t\tif ((<any>ev).type.match(/^mouse/)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\n/**\n * Sets style property on DOM element.\n *\n * @ignore Exclude from docs\n */\nexport function setStyle(dom: HTMLElement, property: string, value: string | undefined): void {\n\t(<any>dom.style)[property] = value;\n}\n\n/**\n * Gets style property value on a DOM element.\n *\n * @ignore Exclude from docs\n */\nexport function getStyle(dom: HTMLElement, property: string): string | undefined {\n\treturn (<any>dom.style)[property];\n}\n\n/**\n * Gets the target of the event, works for shadow DOM too.\n */\nexport function getEventTarget(event: Event | Touch): Node | null {\n\tif ((event as any).composedPath) {\n\t\tconst path = (event as Event).composedPath();\n\n\t\tif (path.length === 0) {\n\t\t\treturn null;\n\n\t\t} else {\n\t\t\treturn path[0] as Node;\n\t\t}\n\n\t} else {\n\t\treturn event.target as Node | null;\n\t}\n}\n\n/**\n * Checks of element `a` contains element `b`.\n *\n * @param a Aleged ascendant\n * @param b Aleged descendant\n * @return Contains?\n */\nexport function contains(a: Element, b: Element): boolean {\n\tlet cursor: Node = b;\n\n\twhile (true) {\n\t\tif (a === cursor) {\n\t\t\treturn true;\n\n\t\t} else if (cursor.parentNode === null) {\n\t\t\t// TODO better ShadowRoot detection\n\t\t\tif ((<ShadowRoot>cursor).host == null) {\n\t\t\t\treturn false;\n\n\t\t\t} else {\n\t\t\t\tcursor = (<ShadowRoot>cursor).host;\n\t\t\t}\n\n\t\t} else {\n\t\t\tcursor = cursor.parentNode;\n\t\t}\n\t}\n}\n\n/**\n * Returns `true` if pointer event originated on an element within Root.\n *\n * @since 5.2.8\n * @param event Event\n * @param target Target element\n */\nexport function isLocalEvent(event: IPointerEvent, target: Sprite) {\n\treturn event.target && contains(target.root.dom, <Element>event.target);\n}\n\n/**\n * Disables or enables interactivity of a DOM element.\n *\n * @param target Target element\n * @param interactive Interactive?\n */\nexport function setInteractive(target: HTMLElement, interactive: boolean): void {\n\tif (interactive) {\n\t\ttarget.style.pointerEvents = \"auto\";\n\t}\n\telse {\n\t\ttarget.style.pointerEvents = \"none\";\n\t}\n}\n\n/**\n * Returns a normalized key name from a keyboard event.\n *\n * @ignore\n */\nexport function getEventKey(event: KeyboardEvent): string {\n\tif (event.key !== undefined) {\n\t\treturn event.key;\n\t}\n\tswitch (event.keyCode) {\n\t\tcase 9: return \"Tab\";\n\t\tcase 13: return \"Enter\";\n\t\tcase 16: return \"Shift\";\n\t\tcase 17: return \"Control\";\n\t\tcase 27: return \"Escape\";\n\t\tcase 32: return \" \";\n\t\tcase 37: return \"ArrowLeft\";\n\t\tcase 38: return \"ArrowUp\";\n\t\tcase 39: return \"ArrowRight\";\n\t\tcase 40: return \"ArrowDown\";\n\t\tcase 46: return \"Delete\";\n\t}\n\treturn \"\" + event.keyCode;\n}\n\n/**\n * Returns the shadow root of the element or null\n *\n * @param a Node\n * @return Root\n */\nexport function getShadowRoot(a: Node): ShadowRoot | null {\n\tlet cursor: Node = a;\n\n\twhile (true) {\n\t\tif (cursor.parentNode === null) {\n\t\t\t// TODO better ShadowRoot detection\n\t\t\tif ((<ShadowRoot>cursor).host != null) {\n\t\t\t\treturn <ShadowRoot>cursor;\n\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t} else {\n\t\t\tcursor = cursor.parentNode;\n\t\t}\n\t}\n}\n\n/**\n * @ignore\n */\nlet rootStylesheet: $type.Optional<CSSStyleSheet>;\n\n/**\n * @ignore Exclude from docs\n */\nfunction createStylesheet(element: ShadowRoot | null, text: string, nonce: string = \"\"): HTMLStyleElement {\n\t// TODO use createElementNS ?\n\tconst e = document.createElement(\"style\");\n\te.type = \"text/css\";\n\tif (nonce != \"\") {\n\t\te.setAttribute(\"nonce\", nonce)\n\t}\n\te.textContent = text;\n\n\tif (element === null) {\n\t\tdocument.head.appendChild(e);\n\t} else {\n\t\telement.appendChild(e);\n\t}\n\n\treturn e;\n}\n\n/**\n * @ignore\n */\nfunction getStylesheet(element: ShadowRoot | null, nonce: string = \"\"): CSSStyleSheet {\n\tif (element === null) {\n\t\tif (rootStylesheet == null) {\n\t\t\t// TODO use createElementNS ?\n\t\t\tconst e = document.createElement(\"style\");\n\t\t\te.type = \"text/css\";\n\t\t\tif (nonce != \"\") {\n\t\t\t\te.setAttribute(\"nonce\", nonce)\n\t\t\t}\n\t\t\tdocument.head.appendChild(e);\n\t\t\trootStylesheet = e.sheet as CSSStyleSheet;\n\t\t}\n\n\t\treturn rootStylesheet;\n\n\t} else {\n\t\t// TODO use createElementNS ?\n\t\tconst e = document.createElement(\"style\");\n\t\te.type = \"text/css\";\n\t\tif (nonce != \"\") {\n\t\t\te.setAttribute(\"nonce\", nonce)\n\t\t}\n\t\telement.appendChild(e);\n\t\treturn e.sheet as CSSStyleSheet;\n\t}\n}\n\n/**\n * @ignore\n */\nfunction appendStylesheet(root: CSSStyleSheet, selector: string): CSSStyleRule {\n\tconst index = root.cssRules.length;\n\troot.insertRule(selector + \"{}\", index);\n\n\treturn root.cssRules[index] as CSSStyleRule;\n}\n\n/**\n * Defines a class for a CSS rule.\n *\n * Can be used to dynamically add CSS to the document.\n */\nexport class StyleRule extends DisposerClass {\n\tprivate _root: CSSStyleSheet;\n\n\t/**\n\t * CSS rule.\n\t */\n\tprivate _rule: CSSStyleRule;\n\n\t/**\n\t * A CSS selector text.\n\t *\n\t * E.g.: `.myClass p`\n\t *\n\t * @param selector CSS selector\n\t */\n\tpublic set selector(selector: string) {\n\t\tthis._rule.selectorText = selector;\n\t}\n\n\t/**\n\t * @return CSS selector\n\t */\n\tpublic get selector(): string {\n\t\treturn this._rule.selectorText;\n\t}\n\n\t/**\n\t * Constructor.\n\t *\n\t * @param selector CSS selector\n\t * @param styles An object of style attribute - value pairs\n\t */\n\tconstructor(element: ShadowRoot | null, selector: string, styles: { [name: string]: string }, nonce: string = \"\") {\n\t\tsuper();\n\n\t\tthis._root = getStylesheet(element, nonce);\n\n\t\ttry {\n\t\t\tthis._rule = appendStylesheet(this._root, selector);\n\t\t}\n\t\tcatch (err) {\n\t\t\t// Create an empty rule on failed selectors\n\t\t\tthis._rule = appendStylesheet(this._root, \":not(*)\");\n\t\t}\n\n\t\t$object.each(styles, (key, value) => {\n\t\t\tthis.setStyle(<string>key, value);\n\t\t});\n\t}\n\n\t// TODO test this\n\tprotected _dispose(): void {\n\t\t// TODO a bit hacky\n\t\tconst index = $array.indexOf(this._root.cssRules, this._rule);\n\n\t\tif (index === -1) {\n\t\t\tthrow new Error(\"Could not dispose StyleRule\");\n\n\t\t} else {\n\t\t\t// TODO if it's empty remove it from the DOM ?\n\t\t\tthis._root.deleteRule(index);\n\t\t}\n\t}\n\n\t/**\n\t * Sets the same style properties with browser-specific prefixes.\n\t *\n\t * @param name Attribute name\n\t * @param value Attribute value\n\t */\n\tprivate _setVendorPrefixName(name: string, value: string): void {\n\t\tconst style = this._rule.style;\n\t\tstyle.setProperty(\"-webkit-\" + name, value, \"\");\n\t\tstyle.setProperty(\"-moz-\" + name, value, \"\");\n\t\tstyle.setProperty(\"-ms-\" + name, value, \"\");\n\t\tstyle.setProperty(\"-o-\" + name, value, \"\");\n\t\tstyle.setProperty(name, value, \"\");\n\t}\n\n\t/**\n\t * Sets a value for specific style attribute.\n\t *\n\t * @param name Attribute\n\t * @param value Value\n\t */\n\tpublic setStyle(name: string, value: string): void {\n\t\tif (name === \"transition\") {\n\t\t\tthis._setVendorPrefixName(name, value);\n\n\t\t} else {\n\t\t\tthis._rule.style.setProperty(name, value, \"\");\n\t\t}\n\t}\n}\n\n/**\n * Defines a class for an entire CSS style sheet.\n *\n * Can be used to dynamically add CSS to the document.\n */\nexport class StyleSheet extends DisposerClass {\n\tprivate _element: HTMLStyleElement;\n\n\t/**\n\t * Constructor.\n\t *\n\t * @param text CSS stylesheet\n\t */\n\tconstructor(element: ShadowRoot | null, text: string, nonce: string = \"\") {\n\t\tsuper();\n\t\tthis._element = createStylesheet(element, text, nonce);\n\t}\n\n\tprotected _dispose(): void {\n\t\tif (this._element.parentNode) {\n\t\t\tthis._element.parentNode.removeChild(this._element);\n\t\t}\n\t}\n}\n\n\n/**\n * Adds a class name to an HTML or SVG element.\n *\n * @ignore Exclude from docs\n * @param element Element\n * @param className Class name to add\n */\nexport function addClass(element: HTMLElement | SVGElement, className: string): void {\n\tif (!element) {\n\t\treturn;\n\t}\n\tif (element.classList) {\n\t\tconst classes = className.split(\" \");\n\t\t$array.each(classes, (name) => {\n\t\t\telement.classList.add(name);\n\t\t});\n\t}\n\telse {\n\t\tlet currentClassName = element.getAttribute(\"class\");\n\t\tif (currentClassName) {\n\t\t\telement.setAttribute(\"class\", currentClassName.split(\" \").filter((item) => {\n\t\t\t\treturn item !== className;\n\t\t\t}).join(\" \") + \" \" + className);\n\t\t}\n\t\telse {\n\t\t\telement.setAttribute(\"class\", className);\n\t\t}\n\t}\n}\n\n/**\n * Removes a class name from an HTML or SVG element.\n *\n * @ignore Exclude from docs\n * @param element Element\n * @param className Class name to add\n */\nexport function removeClass(element: HTMLElement, className: string): void {\n\tif (!element) {\n\t\treturn;\n\t}\n\tif (element.classList) {\n\t\telement.classList.remove(className);\n\t}\n\telse {\n\t\tlet currentClassName = element.getAttribute(\"class\");\n\t\tif (currentClassName) {\n\t\t\telement.setAttribute(\"class\", currentClassName.split(\" \").filter((item) => {\n\t\t\t\treturn item !== className;\n\t\t\t}).join(\" \"));\n\t\t}\n\t}\n}\n\n// /**\n// * Applies a set of styles to an element. Stores the original styles so they\n// * can be restored later.\n// *\n// * @ignore\n// * @param io Element\n// */\n// export function prepElementForDrag(dom: HTMLElement): void {\n\n// \t// @todo: save current values\n\n// \t// Define possible props\n// \tlet props = [\n// \t\t\"touchAction\", \"webkitTouchAction\", \"MozTouchAction\", \"MSTouchAction\", \"msTouchAction\", \"oTouchAction\",\n// \t\t\"userSelect\", \"webkitUserSelect\", \"MozUserSelect\", \"MSUserSelect\", \"msUserSelect\", \"oUserSelect\",\n// \t\t\"touchSelect\", \"webkitTouchSelect\", \"MozTouchSelect\", \"MSTouchSelect\", \"msTouchSelect\", \"oTouchSelect\",\n// \t\t\"touchCallout\", \"webkitTouchCallout\", \"MozTouchCallout\", \"MSTouchCallout\", \"msTouchCallout\", \"oTouchCallout\",\n// \t\t\"contentZooming\", \"webkitContentZooming\", \"MozContentZooming\", \"MSContentZooming\", \"msContentZooming\", \"oContentZooming\",\n// \t\t\"userDrag\", \"webkitUserDrag\", \"MozUserDrag\", \"MSUserDrag\", \"msUserDrag\", \"oUserDrag\"\n// \t];\n// \tfor (let i = 0; i < props.length; i++) {\n// \t\tif (props[i] in dom.style) {\n// \t\t\tsetStyle(dom, props[i], \"none\");\n// \t\t}\n// \t}\n\n// \t// Remove iOS-specific selection;\n// \tsetStyle(dom, \"tapHighlightColor\", \"rgba(0, 0, 0, 0)\");\n\n// }\n\n// /**\n// * Restores replaced styles\n// *\n// * @ignore\n// * @param io Element\n// */\n// export function unprepElementForDrag(dom: HTMLElement): void {\n\n// \t// Define possible props\n// \tlet props = [\n// \t\t\"touchAction\", \"webkitTouchAction\", \"MozTouchAction\", \"MSTouchAction\", \"msTouchAction\", \"oTouchAction\",\n// \t\t\"userSelect\", \"webkitUserSelect\", \"MozUserSelect\", \"MSUserSelect\", \"msUserSelect\", \"oUserSelect\",\n// \t\t\"touchSelect\", \"webkitTouchSelect\", \"MozTouchSelect\", \"MSTouchSelect\", \"msTouchSelect\", \"oTouchSelect\",\n// \t\t\"touchCallout\", \"webkitTouchCallout\", \"MozTouchCallout\", \"MSTouchCallout\", \"msTouchCallout\", \"oTouchCallout\",\n// \t\t\"contentZooming\", \"webkitContentZooming\", \"MozContentZooming\", \"MSContentZooming\", \"msContentZooming\", \"oContentZooming\",\n// \t\t\"userDrag\", \"webkitUserDrag\", \"MozUserDrag\", \"MSUserDrag\", \"msUserDrag\", \"oUserDrag\"\n// \t];\n// \tfor (let i = 0; i < props.length; i++) {\n// \t\tif (props[i] in dom.style) {\n// \t\t\tsetStyle(dom, props[i], \"\");\n// \t\t}\n// \t}\n\n// \t// Remove iOS-specific selection;\n// \tsetStyle(dom, \"tapHighlightColor\", \"\");\n\n// }\n\n/**\n * Returns `true` if the current device is running iOS.\n *\n * @return Is iOS?\n */\nexport function iOS(): boolean {\n\treturn /apple/i.test(navigator.vendor) && \"ontouchend\" in document;\n}\n\n/**\n * Returns a safe canvas resolution for the current device.\n * Returns `1` on iOS to avoid memory issues, `undefined` otherwise.\n *\n * @return Resolution or undefined\n */\nexport function getSafeResolution(): number | undefined {\n\treturn iOS() ? 1 : undefined;\n}\n\n/**\n * Converts a value that can be a number or [[Percent]] to an absolute number\n * relative to the given full value.\n *\n * @param percent Input value (number or Percent)\n * @param full Full reference value\n * @return Absolute value\n */\nexport function relativeToValue(percent: number | Percent | undefined | null, full: number): number {\n\tif ($type.isNumber(percent)) {\n\t\treturn percent;\n\t} else if (percent != null && $type.isNumber(percent.value) && $type.isNumber(full)) {\n\t\treturn full * percent.value;\n\n\t} else {\n\t\treturn 0;\n\t}\n}\n\n\n\n/**\n * Returns number of decimals\n *\n * @ignore Exclude from docs\n * @param number Input number\n * @return Number of decimals\n */\nexport function decimalPlaces(number: number): number {\n\tlet match = ('' + number).match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\n\tif (!match) { return 0; }\n\treturn Math.max(0, (match[1] ? match[1].length : 0) - (match[2] ? +match[2] : 0));\n}\n\n\n/**\n * ============================================================================\n * STRING FORMATTING FUNCTIONS\n * ============================================================================\n * @hidden\n */\n\n/**\n * Pads a string with additional characters to certain length.\n *\n * @param value A numeric value\n * @param len Result string length in characters\n * @param char A character to use for padding\n * @return Padded value as string\n */\nexport function padString(value: any, len: number = 0, char: string = \"0\"): string {\n\tif (typeof value !== \"string\") {\n\t\tvalue = value.toString();\n\t}\n\n\treturn len > value.length ? Array(len - value.length + 1).join(char) + value : value;\n}\n\n/**\n * Removes whitespace from the beginning of a string.\n *\n * @param text Source string\n * @return Trimmed string\n */\nexport function trimLeft(text: string): string {\n\treturn text.replace(/^[\\s]*/, \"\");\n}\n\n/**\n * Removes whitespace from the end of a string.\n *\n * @param text Source string\n * @return Trimmed string\n */\nexport function trimRight(text: string): string {\n\treturn text.replace(/[\\s]*$/, \"\");\n}\n\n/**\n * Removes whitespace from both ends of a string.\n *\n * @param text Source string\n * @return Trimmed string\n */\nexport function trim(text: string): string {\n\treturn trimLeft(trimRight(text));\n}\n\n/**\n * Truncates a string to a maximum length, appending an ellipsis.\n *\n * @param text Source string\n * @param maxLength Maximum character length\n * @param breakWords Allow breaking mid-word?\n * @param ellipsis Ellipsis string to append\n * @return Truncated string\n */\nexport function truncateTextWithEllipsis(text: string, maxLength: number, breakWords: boolean = false, ellipsis: string = \"...\") {\n\tif (text.length > maxLength) {\n\t\t// Find the last non-alphanumeric character before maxLength\n\t\tlet lastNonAlphanumericIndex = maxLength - 1;\n\t\twhile (lastNonAlphanumericIndex >= 0 && text.charAt(lastNonAlphanumericIndex).match(/\\w/)) {\n\t\t\tlastNonAlphanumericIndex--;\n\t\t}\n\n\t\tif (lastNonAlphanumericIndex >= 0 && breakWords == false) {\n\t\t\treturn text.substring(0, lastNonAlphanumericIndex + 1) + '...';\n\t\t} else {\n\t\t\t// If no non-alphanumeric character found, truncate without breaking words\n\t\t\treturn text.substring(0, maxLength) + ellipsis;\n\t\t}\n\t} else {\n\t\treturn text;\n\t}\n}\n\n/**\n * Tries to determine format type.\n *\n * @ignore Exclude from docs\n * @param format Format string\n * @return Format type (\"string\" | \"number\" | \"date\" | \"duration\")\n */\nexport function getFormat(format: string): string {\n\n\t// Undefined?\n\tif (typeof format === \"undefined\") {\n\t\treturn \"string\";\n\t}\n\n\t// Cleanup and lowercase format\n\tformat = format.toLowerCase().replace(/^\\[[^\\]]*\\]/, \"\");\n\n\t// Remove style tags\n\tformat = format.replace(/\\[[^\\]]+\\]/, \"\");\n\n\t// Trim\n\tformat = format.trim();\n\n\t// Check for any explicit format hints (i.e. /Date)\n\tlet hints: RegExpMatchArray | null = format.match(/\\/(date|number|duration)$/);\n\n\tif (hints) {\n\t\treturn hints[1];\n\t}\n\n\t// Check for explicit hints\n\tif (format === \"number\") {\n\t\treturn \"number\";\n\t}\n\n\tif (format === \"date\") {\n\t\treturn \"date\";\n\t}\n\n\tif (format === \"duration\") {\n\t\treturn \"duration\";\n\t}\n\n\t// Detect number formatting symbols\n\tif (format.match(/[#0]/)) {\n\t\treturn \"number\";\n\t}\n\n\t// Detect date formatting symbols\n\tif (format.match(/[ymwdhnsqaxkzgtei]/)) {\n\t\treturn \"date\";\n\t}\n\n\t// Nothing? Let's display as string\n\treturn \"string\";\n}\n\n/**\n * Cleans up format:\n * * Strips out formatter hints\n *\n * @ignore Exclude from docs\n * @param format Format\n * @return Cleaned format\n */\nexport function cleanFormat(format: string): string {\n\treturn format.replace(/\\/(date|number|duration)$/i, \"\");\n}\n\n/**\n * Strips all tags from the string.\n *\n * @param text Source string\n * @return String without tags\n */\nexport function stripTags(text: string): string {\n\treturn text ? text.replace(/<[^>]*>/g, \"\") : text;\n}\n\n/**\n * Strips inline formatting tags (square brackets) from the string.\n *\n * @param text Source string\n * @return String without tags\n */\nexport function stripFormatTags(text: string): string {\n\treturn text ? text.replace(/\\[[^\\]]*\\]/g, \"\") : text;\n}\n\n/**\n * Removes new lines and tags from a string.\n *\n * @param text String to conver\n * @return Converted string\n */\nexport function plainText(text: string): string {\n\treturn text ? stripTags((\"\" + text).replace(/[\\n\\r]+/g, \". \")) : text;\n}\n\n/**\n * Escapes string so it can safely be used in a Regex.\n *\n * @param value Unsescaped string\n * @return Escaped string\n */\nexport function escapeForRgex(value: string): string {\n\treturn value.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n}\n\n/**\n * Adds space before each uppercase letter.\n *\n * @param str Input string\n * @return Output string\n */\nexport function addSpacing(str: string): string {\n\tlet result = \"\";\n\tfor (let i = 0; i < str.length; i++) {\n\t\tconst char = str.charAt(i);\n\t\tif (char.toUpperCase() == char && i != 0) {\n\t\t\tresult += \" \";\n\t\t}\n\t\tresult += char;\n\t}\n\treturn result;\n}\n\n/**\n * Splits the string into separate characters. Keeps RTL words non-split.\n *\n * @param source Input\n * @return Split text\n */\nexport function splitString(source: string): string[] {\n\t// Regular expression to identify RTL characters\n\tconst rtlChar = /[\\u0590-\\u05FF\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\uFB50-\\uFDFF\\uFE70-\\uFEFF]/;\n\n\t// Regular expression to capture segments ending with specific Arabic characters\n\tconst splitPattern = /([^اأدذرزو]*[اأدذرزو])/gi;\n\n\t// Split input string into array of words or characters, including whitespace\n\tlet segments = source.split(/(\\s+)/); // Split by whitespace, capturing it\n\n\tlet result: string[] = [];\n\tsegments.forEach(segment => {\n\t\tif (segment.match(/^\\s+$/)) {\n\t\t\t// If the segment is purely whitespace\n\t\t\tif (segment = \" \") {\n\t\t\t\tsegment = \" \";\n\t\t\t}\n\t\t\tresult.push(segment);\n\t\t} else if (rtlChar.test(segment)) {\n\t\t\t// If the segment contains RTL characters, handle special splits\n\t\t\tlet parts = segment.split(splitPattern).filter(part => part !== '');\n\t\t\t// Concatenate parts processed by the split pattern directly to result\n\t\t\tresult = result.concat(parts);\n\t\t} else {\n\t\t\t// Treat this segment as LTR: split into characters\n\t\t\tresult = result.concat([...segment]);\n\t\t}\n\t});\n\n\treturn result;\n}\n\n/**\n * ============================================================================\n * DATE-RELATED FUNCTIONS\n * ============================================================================\n * @hidden\n */\n\n/**\n * Returns a year day.\n *\n * @param date Date\n * @param utc Assume UTC dates?\n * @return Year day\n */\nexport function getYearDay(date: Date, utc: boolean = false): number {\n\t// TODO: utc needed?\n\tutc;\n\tconst start = new Date(date.getFullYear(), 0, 0);\n\tconst diff = (date.getTime() - start.getTime()) + ((start.getTimezoneOffset() - date.getTimezoneOffset()) * 60 * 1000);\n\tconst oneDay = 1000 * 60 * 60 * 24;\n\treturn Math.floor(diff / oneDay);\n}\n\n/**\n * Returns week number for a given date.\n *\n * @param date Date\n * @param utc Assume UTC dates?\n * @return Week number\n */\nexport function getWeek(date: Date, _utc: boolean = false): number {\n\tconst d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\n\tconst day = d.getUTCDay() || 7;\n\td.setUTCDate(d.getUTCDate() + 4 - day);\n\tconst firstDay = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\n\treturn Math.ceil((((d.getTime() - firstDay.getTime()) / 86400000) + 1) / 7);\n}\n\n/**\n * Returns a \"week year\" of the given date.\n *\n * @param date Date\n * @param utc Assume UTC dates?\n * @return Year of week\n * @since 5.3.0\n */\nexport function getWeekYear(date: Date, _utc: boolean = false): number {\n\tconst d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\n\tconst day = d.getUTCDay() || 7;\n\td.setUTCDate(d.getUTCDate() + 4 - day);\n\tconst firstDay = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\n\treturn firstDay.getFullYear();\n}\n\n/**\n * Returns a week number in the month.\n *\n * @param date Source Date\n * @param utc Assume UTC dates?\n * @return Week number in month\n */\nexport function getMonthWeek(date: Date, utc: boolean = false): number {\n\tconst firstWeek = getWeek(new Date(date.getFullYear(), date.getMonth(), 1), utc);\n\tlet currentWeek = getWeek(date, utc);\n\tif (currentWeek == 1) {\n\t\tcurrentWeek = 53;\n\t}\n\treturn currentWeek - firstWeek + 1;\n}\n\n/**\n * Returns a year day out of the given week number.\n *\n * @param week Week\n * @param year Year\n * @param weekday Weekday\n * @param utc Assume UTC dates\n * @return Day in a year\n */\nexport function getDayFromWeek(week: number, year: number, weekday: number = 1, utc: boolean = false): number {\n\tlet date = new Date(year, 0, 4, 0, 0, 0, 0);\n\tif (utc) {\n\t\tdate.setUTCFullYear(year);\n\t}\n\tlet day = week * 7 + weekday - ((date.getDay() || 7) + 3);\n\treturn day;\n}\n\n/**\n * Returns 12-hour representation out of the 24-hour hours.\n *\n * @param hours 24-hour number\n * @return 12-hour number\n */\nexport function get12Hours(hours: number, base?: number): number {\n\tif (hours > 12) {\n\t\thours -= 12;\n\t}\n\telse if (hours === 0) {\n\t\thours = 12;\n\t}\n\treturn base != null ? hours + (base - 1) : hours;\n}\n\n/**\n * Returns a string name of the time zone.\n *\n * @param date Date object\n * @param long Should return long (\"Pacific Standard Time\") or short abbreviation (\"PST\")\n * @param savings Include information if it's in daylight savings mode\n * @param utc Assume UTC dates\n * @return Time zone name\n */\nexport function getTimeZone(date: Date, long: boolean = false, savings: boolean = false, utc: boolean = false, timezone?: string): string {\n\tif (utc) {\n\t\treturn long ? \"Coordinated Universal Time\" : \"UTC\";\n\t}\n\telse if (timezone) {\n\t\tconst d1 = date.toLocaleString(\"en-US\", { timeZone: timezone });\n\t\tconst d2 = date.toLocaleString(\"en-US\", { timeZone: timezone, timeZoneName: long ? \"long\" : \"short\" });\n\t\treturn trim(d2.substr(d1.length));\n\t}\n\tlet wotz = date.toLocaleString(\"UTC\");\n\tlet wtz = date.toLocaleString(\"UTC\", { timeZoneName: long ? \"long\" : \"short\" }).substr(wotz.length);\n\t//wtz = wtz.replace(/[+-]+[0-9]+$/, \"\");\n\tif (savings === false) {\n\t\twtz = wtz.replace(/ (standard|daylight|summer|winter) /i, \" \");\n\t}\n\treturn trim(wtz);\n}\n\n/**\n * Returns the UTC offset in minutes for a given timezone.\n *\n * @param timezone IANA timezone identifier\n * @param targetDate Date to check offset for\n * @return Offset in minutes\n */\nexport function getTimezoneOffset(timezone: string, targetDate?: Date): number {\n\tconst date = targetDate || new Date(Date.UTC(2012, 0, 1, 0, 0, 0, 0));\n\tconst utcDate = new Date(date.toLocaleString(\"en-US\", { timeZone: \"UTC\" }));\n\tconst tzDate = new Date(date.toLocaleString(\"en-US\", { timeZone: timezone }));\n\treturn (tzDate.getTime() - utcDate.getTime()) / 6e4 * -1;\n}\n\n\n/**\n * Capitalizes the first letter of a string.\n *\n * @param text Source string\n * @return Capitalized string\n */\nexport function capitalizeFirst(text: string): string {\n\treturn text.charAt(0).toUpperCase() + text.slice(1);\n}\n\n\n/**\n * ============================================================================\n * COLOR UTILS\n * ============================================================================\n */\n\n\n/**\n * Represents an interface for an object that represents an RGB color.\n */\nexport interface iRGB {\n\tr: number;\n\tg: number;\n\tb: number;\n\ta?: number;\n}\n\n/**\n * Represents an interface for an object that represents an HSL color.\n */\nexport interface iHSL {\n\th: number;\n\ts: number;\n\tl: number;\n\ta?: number;\n}\n\n/**\n * Represents an interface for an object that represents an HSV color.\n */\nexport interface iHSV {\n\th: number;\n\ts: number;\n\tv: number;\n\ta?: number;\n}\n\n/**\n * The functions below are taken and adapted from Garry Tan's blog post:\n * http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c\n *\n * The further attributions go mjijackson.com, which now seems to be defunct.\n */\n\n\n/**\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h, s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * Function adapted from:\n * http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c\n *\n * @param h The hue\n * @param s The saturation\n * @param l The lightness\n * @return The RGB representation\n */\nexport function hslToRgb(color: iHSL): iRGB {\n\tlet r, g, b;\n\tlet h = color.h;\n\tlet s = color.s;\n\tlet l = color.l;\n\n\tif (s == 0) {\n\t\tr = g = b = l; // achromatic\n\t} else {\n\t\tlet hue2rgb = function hue2rgb(p: number, q: number, t: number) {\n\t\t\tif (t < 0) { t += 1; }\n\t\t\tif (t > 1) { t -= 1; }\n\t\t\tif (t < 1 / 6) { return p + (q - p) * 6 * t; }\n\t\t\tif (t < 1 / 2) { return q; }\n\t\t\tif (t < 2 / 3) { return p + (q - p) * (2 / 3 - t) * 6; }\n\t\t\treturn p;\n\t\t}\n\n\t\tlet q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n\t\tlet p = 2 * l - q;\n\t\tr = hue2rgb(p, q, h + 1 / 3);\n\t\tg = hue2rgb(p, q, h);\n\t\tb = hue2rgb(p, q, h - 1 / 3);\n\t}\n\n\treturn {\n\t\tr: Math.round(r * 255),\n\t\tg: Math.round(g * 255),\n\t\tb: Math.round(b * 255)\n\t};\n}\n\n/**\n * Converts an RGB color value to HSL. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and l in the set [0, 1].\n *\n * Function adapted from:\n * http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c\n *\n * @param r The red color value\n * @param g The green color value\n * @param b The blue color value\n * @return The HSL representation\n */\nexport function rgbToHsl(color: iRGB): iHSL {\n\tlet r = color.r / 255;\n\tlet g = color.g / 255;\n\tlet b = color.b / 255;\n\tlet max = Math.max(r, g, b);\n\tlet min = Math.min(r, g, b);\n\tlet h = 0;\n\tlet s = 0;\n\tlet l = (max + min) / 2;\n\n\tif (max === min) {\n\t\th = s = 0; // achromatic\n\n\t} else {\n\t\tlet d = max - min;\n\n\t\ts = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n\t\tswitch (max) {\n\t\t\tcase r: h = (g - b) / d + (g < b ? 6 : 0); break;\n\t\t\tcase g: h = (b - r) / d + 2; break;\n\t\t\tcase b: h = (r - g) / d + 4; break;\n\t\t}\n\n\t\th /= 6;\n\t}\n\n\treturn {\n\t\th: h,\n\t\ts: s,\n\t\tl: l,\n\t};\n}\n\n\n/**\n * Converts HSV to HSL.\n *\n * https://en.wikipedia.org/wiki/HSL_and_HSV#HSV_to_HSL\n */\nexport function hsvToHsl(hsv: iHSV): iHSL {\n\tconst l = hsv.v * (1 - (hsv.s / 2));\n\n\tconst s =\n\t\t(l === 0 || l === 1\n\t\t\t? 0\n\t\t\t: (hsv.v - l) / Math.min(l, 1 - l));\n\n\treturn {\n\t\th: hsv.h,\n\t\ts,\n\t\tl,\n\t\ta: hsv.a,\n\t};\n}\n\n\n/**\n * Converts HSL to HSV.\n *\n * https://en.wikipedia.org/wiki/HSL_and_HSV#HSL_to_HSV\n */\nexport function hslToHsv(hsl: iHSL): iHSV {\n\tconst v = hsl.l + (hsl.s * Math.min(hsl.l, 1 - hsl.l));\n\n\tconst s =\n\t\t(v === 0\n\t\t\t? 0\n\t\t\t: 2 * (1 - (hsl.l / v)));\n\n\treturn {\n\t\th: hsl.h,\n\t\ts,\n\t\tv,\n\t\ta: hsl.a,\n\t};\n}\n\n\n/**\n * Returns a color that is `percent` brighter than the reference color.\n *\n * @param color Reference color\n * @param percent Brightness percent\n * @return Hex code of the new color\n */\nexport function lighten(rgb: $type.Optional<iRGB>, percent: number): $type.Optional<iRGB> {\n\tif (rgb) {\n\t\treturn {\n\t\t\tr: Math.max(0, Math.min(255, rgb.r + getLightnessStep(rgb.r, percent))),\n\t\t\tg: Math.max(0, Math.min(255, rgb.g + getLightnessStep(rgb.g, percent))),\n\t\t\tb: Math.max(0, Math.min(255, rgb.b + getLightnessStep(rgb.b, percent))),\n\t\t\ta: rgb.a\n\t\t};\n\n\t} else {\n\t\t// TODO is this correct ?\n\t\treturn rgb;\n\t}\n};\n\n/**\n * Gets lightness step.\n *\n * @param value Value\n * @param percent Percent\n * @return Step\n */\nexport function getLightnessStep(value: number, percent: number): number {\n\tlet base = percent > 0 ? 255 - value : value;\n\treturn Math.round(base * percent);\n}\n\n/**\n * Returns a color that is `percent` brighter than the source `color`.\n *\n * @param color Source color\n * @param percent Brightness percent\n * @return New color\n */\nexport function brighten(rgb: $type.Optional<iRGB>, percent: number): $type.Optional<iRGB> {\n\tif (rgb) {\n\t\tlet base = Math.min(Math.max(rgb.r, rgb.g, rgb.b), 230);\n\t\t//let base = Math.max(rgb.r, rgb.g, rgb.b);\n\t\tlet step = getLightnessStep(base, percent);\n\t\treturn {\n\t\t\tr: Math.max(0, Math.min(255, Math.round(rgb.r + step))),\n\t\t\tg: Math.max(0, Math.min(255, Math.round(rgb.g + step))),\n\t\t\tb: Math.max(0, Math.min(255, Math.round(rgb.b + step))),\n\t\t\ta: rgb.a\n\t\t};\n\n\t} else {\n\t\t// TODO is this correct ?\n\t\treturn rgb;\n\t}\n};\n\n/**\n * Returns brightness step.\n *\n * @ignore Exclude from docs\n * @param value Value\n * @param percent Percent\n * @return Step\n */\nexport function getBrightnessStep(_value: number, percent: number): number {\n\tlet base = 255; //percent > 0 ? 255 - value : value;\n\treturn Math.round(base * percent);\n}\n\n/**\n * Returns `true` if color is \"light\". Useful indetermining which contrasting\n * color to use for elements over this color. E.g.: you would want to use\n * black text over light background, and vice versa.\n *\n * @param color Source color\n * @return Light?\n */\nexport function isLight(color: iRGB): boolean {\n\treturn ((color.r * 299) + (color.g * 587) + (color.b * 114)) / 1000 >= 128;\n}\n\n/**\n * Returns a new [[iRGB]] object based on `rgb` parameter with specific\n * saturation applied.\n *\n * `saturation` can be in the range of 0 (fully desaturated) to 1 (fully\n * saturated).\n *\n * @param color Base color\n * @param saturation Saturation (0-1)\n * @return New color\n */\nexport function saturate(rgb: $type.Optional<iRGB>, saturation: number): $type.Optional<iRGB> {\n\tif (rgb === undefined || saturation == 1) {\n\t\treturn rgb;\n\t}\n\n\tlet hsl = rgbToHsl(rgb);\n\thsl.s = saturation;\n\treturn hslToRgb(hsl);\n}\n\n/**\n * Returns a color which contrasts more with the source `color`.\n *\n * @param color Base color\n * @param lightAlternative Light option\n * @param darkAlternative Dark option\n * @return New color\n */\nexport function alternativeColor(color: iRGB, lightAlternative: iRGB = { r: 255, g: 255, b: 255 }, darkAlternative: iRGB = { r: 255, g: 255, b: 255 }): iRGB {\n\tlet light = lightAlternative;\n\tlet dark = darkAlternative;\n\tif (isLight(darkAlternative)) {\n\t\tlight = darkAlternative;\n\t\tdark = lightAlternative;\n\t}\n\treturn isLight(color) ? dark : light;\n}\n\n/**\n * @ignore\n */\nexport function mergeTags(tags1: string[] | undefined, tags2: string[]): string[] {\n\tif (!tags1) {\n\t\ttags1 = [];\n\t}\n\treturn [...tags1, ...tags2].filter((value, index, self) => {\n\t\treturn self.indexOf(value) === index;\n\t});\n}\n\n/**\n * @ignore\n */\nexport function sameBounds(a: IBounds, b?: IBounds): boolean {\n\tif (!b) {\n\t\treturn false;\n\t}\n\tif (a.left != b.left) {\n\t\treturn false\n\t}\n\tif (a.right != b.right) {\n\t\treturn false\n\t}\n\tif (a.top != b.top) {\n\t\treturn false\n\t}\n\tif (a.bottom != b.bottom) {\n\t\treturn false\n\t}\n\treturn true;\n}\n"]}
|
|
@@ -38,7 +38,7 @@ export interface IAnnotatorSettings extends IEntitySettings {
|
|
|
38
38
|
[index: string]: any;
|
|
39
39
|
};
|
|
40
40
|
/**
|
|
41
|
-
* MarkerArea style settings for user interface elements.E.g.:
|
|
41
|
+
* MarkerArea style settings for user interface elements. E.g.:
|
|
42
42
|
*
|
|
43
43
|
* ```TypeScript
|
|
44
44
|
* let annotator = am5plugins_exporting.Annotator.new(root, {
|