@servicetitan/json-render-react 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"json-render-react.js","names":["isNaN","each","copy","$array.any","$array.findIndex","$type.isNumber","$type.isObject","$order.compare","$array.getSortedIndex","$order.compareArray","$type.isNumber","$utils.padString","$utils.rgbToHsl","$utils.hslToRgb","$type.isString","$type.isNumber","$utils.alternativeColor","$utils.lighten","$utils.brighten","$utils.saturate","round","sin","cos","tau","$ease.cubic","registry","$array.removeFirst","$array.findIndex","$object.keys","$ease.linear","$array.findReverse","$array.find","$array.getFirstSortedIndex","$order.compare","$order.compareArray","registry","$array.indexOf","$math.fitToRange","$math.inBounds","$utils.relativeToValue","$utils.addEventListener","$utils.isTouchEvent","$utils.getPointerId","$object.keys","$math.cos","$math.sin","$type.isNumber","$object.keysOrdered","$type.PLACEHOLDER","$utils.trim","$type.isObject","$type.toNumber","$type.toDate","$type.isDate","$type.isNaN","$type.isNumber","$utils.getFormat","Text","$utils.truncateTextWithEllipsis","$array.indexOf","Children","$type.isNumber","$type.isNumber","$type.isNumber","Children","$type.isNumber","$utils.isLocalEvent","Text","$type.isNumber","$type.isNumber","$type.isNumber","$array.copy","$object.copy","$time.round","$math.round","$type.isNumber","$utils.relativeToValue","$math.fitToRange","Button","$utils.mergeTags","Button","$utils.isLocalEvent","$object.keys","$math.round","$type.isNumber","$order.compareNumber","Grid","$array.find","$type.isNumber","$array.map","$time.sleep","min","max","$utils.capitalizeFirst","$utils.relativeToValue","$type.isNumber","$type.isNaN","$type.isNumber","$type.isNumber","$utils.mergeTags","$type.isNaN","$utils.mergeTags","$type.isNumber","$math.round","$utils.decimalPlaces","$type.isNaN","$math.fitToRange","$math.ceil","$utils.mergeTags","$type.isNumber","$math.fitToRange","Text","$math.RADIANS","$utils.relativeToValue","$math.normalizeAngle","$math.sin","$math.cos","$utils.mergeTags","Grid","$utils.mergeTags","$utils.relativeToValue","$type.isNumber","$utils.sameBounds","$utils.mergeTags","$utils.relativeToValue","$type.isNumber","$utils.sameBounds","$utils.mergeTags","epsilon","pi","tau","constant","tau","pi","constant","curveLinear","x","pointX","y","pointY","array","constant","curveLinear","pointX","pointY","array","line","line","area","$utils.mergeTags","$type.isNumber","$type.isNaN","am5xy.ColumnSeries","core.semantic","$type.isNumber","$math.getArcBounds","$math.mergeBounds","$utils.relativeToValue","arc","$type.isNumber","$math.RADIANS","$math.cos","$math.sin","$utils.mergeTags","$math.normalizeAngle","$math.sin","$math.cos"],"sources":["../src/core/actions.ts","../src/types.ts","../src/core/catalog/alert.catalog.ts","../src/core/catalog/alert.tsx","../src/utils/defined-props.ts","../src/core/catalog/badge.catalog.ts","../src/core/catalog/badge.tsx","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/util/Type.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/util/Array.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/util/Disposer.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/util/EventDispatcher.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/util/Object.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/util/Template.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/util/Order.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/Theme.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/util/Percent.js","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/util/Animation.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/util/Utils.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/util/Color.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/util/Math.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/util/Ease.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/util/States.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/Registry.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/util/Entity.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/util/ColorSet.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/render/Layout.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/render/GridLayout.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/render/Sprite.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/util/TextFormatter.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/util/PopulateString.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/render/Text.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/util/List.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/util/Children.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/render/patterns/Pattern.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/render/patterns/PicturePattern.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/render/backend/Renderer.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/render/Graphics.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/render/Rectangle.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/render/HorizontalLayout.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/render/VerticalLayout.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/render/Container.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/render/Label.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/themes/DefaultTheme.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/util/Time.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/charts/xy/XYChartDefaultTheme.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/render/Chart.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/render/SerialChart.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/render/RoundedRectangle.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/render/Button.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/charts/xy/XYChart.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/charts/xy/axes/Grid.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/util/Data.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/render/Component.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/render/Series.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/charts/xy/series/XYSeries.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/charts/xy/series/BaseColumnSeries.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/charts/xy/axes/Axis.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/charts/xy/axes/ValueAxis.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/charts/xy/axes/CategoryAxis.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/charts/xy/axes/AxisLabel.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/render/RadialText.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/render/RadialLabel.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/util/Draw.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/render/Line.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/render/Tick.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/charts/xy/axes/AxisTick.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/charts/xy/axes/AxisRenderer.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/charts/xy/axes/AxisRendererX.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/charts/xy/axes/AxisRendererY.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/charts/xy/series/ColumnSeries.js","../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/constant.js","../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/math.js","../../../node_modules/.pnpm/d3-path@3.1.0/node_modules/d3-path/src/path.js","../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/path.js","../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/arc.js","../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/array.js","../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/linear.js","../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/point.js","../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/line.js","../../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/area.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/charts/xy/series/LineSeries.js","../src/core/catalog/bar-chart.catalog.ts","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/themes/AnimatedTheme.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/themes/Animated.js","../../../node_modules/.pnpm/@servicetitan+hammer-token@2.5.2/node_modules/@servicetitan/hammer-token/build/web/core/semantic.js","../../../node_modules/.pnpm/@servicetitan+anvil2-ext-charts@0.1.7_@amcharts+amcharts5@5.18.0_@types+react-dom@18.3._87c77b866d89d63979e6694fdc71a822/node_modules/@servicetitan/anvil2-ext-charts/dist/ThemeSemantic-Ca1fMNCy.js","../src/core/catalog/chart-utils.ts","../src/core/catalog/bar-chart.tsx","../src/core/catalog/button.catalog.ts","../src/core/catalog/button.tsx","../src/core/catalog/card.catalog.ts","../src/core/catalog/card.tsx","../src/core/catalog/checkbox.catalog.ts","../src/core/catalog/chip.catalog.ts","../src/core/catalog/divider.catalog.ts","../src/core/catalog/donut-chart.catalog.ts","../src/core/catalog/flex.catalog.ts","../src/core/catalog/grid.catalog.ts","../src/core/catalog/icon.catalog.ts","../src/core/catalog/input.catalog.ts","../src/core/catalog/line-chart.catalog.ts","../src/core/catalog/link.catalog.ts","../src/core/catalog/listbox.catalog.ts","../src/core/catalog/progress-bar.catalog.ts","../src/core/catalog/radio-group.catalog.ts","../src/core/catalog/switch.catalog.ts","../src/core/catalog/text.catalog.ts","../src/core/catalog/schemas.ts","../src/core/catalog/catalog-def.ts","../src/core/catalog/checkbox.tsx","../../../node_modules/.pnpm/@servicetitan+anvil2@3.0.6_@floating-ui+dom@1.7.6_@tiptap+extension-drag-handle@3.23.5__95ae066b3993cd0abde2c983283cacb5/node_modules/@servicetitan/anvil2/dist/assets/icons/material/round/check_circle.svg","../../../node_modules/.pnpm/@servicetitan+anvil2@3.0.6_@floating-ui+dom@1.7.6_@tiptap+extension-drag-handle@3.23.5__95ae066b3993cd0abde2c983283cacb5/node_modules/@servicetitan/anvil2/dist/assets/icons/material/round/radio_button_unchecked.svg","../../../node_modules/.pnpm/@servicetitan+anvil2@3.0.6_@floating-ui+dom@1.7.6_@tiptap+extension-drag-handle@3.23.5__95ae066b3993cd0abde2c983283cacb5/node_modules/@servicetitan/anvil2/dist/assets/icons/st/in_progress.svg","../src/core/catalog/chip.tsx","../src/core/catalog/divider.tsx","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/charts/percent/PercentDefaultTheme.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/charts/percent/PercentChart.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/charts/percent/PercentSeries.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/charts/pie/PieChart.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/core/render/Slice.js","../../../node_modules/.pnpm/@amcharts+amcharts5@5.18.0/node_modules/@amcharts/amcharts5/.internal/charts/pie/PieSeries.js","../src/core/catalog/donut-chart.tsx","../src/core/catalog/flex.tsx","../src/core/catalog/grid.tsx","../src/core/catalog/icon.tsx","../src/core/catalog/input.tsx","../src/core/catalog/line-chart.tsx","../src/core/catalog/link.tsx","../src/core/catalog/listbox.tsx","../src/core/catalog/progress-bar.tsx","../src/core/catalog/radio-group.tsx","../src/core/catalog/switch.tsx","../src/core/catalog/text.tsx","../src/core/catalog/index.ts","../src/team-catalog.ts","../src/marketing/catalog/components/revenue-card.catalog.ts","../src/marketing/catalog/catalog.ts","../src/marketing/catalog/components/revenue-card.tsx","../src/marketing/catalog/index.ts","../src/registry-utils.ts","../src/registry.ts","../src/renderers/internal/enrichments/button-actions.ts","../src/renderers/internal/enrichments/useEnrichedSpec.ts","../src/renderers/spec-renderer.tsx"],"sourcesContent":["import { z } from \"zod\";\n\nexport const actionsCatalog = {\n \"atlas.submitUserAction\": {\n params: z.object({\n data: z.record(z.string(), z.unknown()).optional(),\n actionId: z.string().optional(),\n }),\n description: 'Submit form data. actionId overrides default \"form_submit\" identifier.',\n },\n \"atlas.navigate\": {\n params: z.object({ url: z.string() }),\n description:\n \"Navigate to a URL or internal route. External URLs (http/https) open in a new tab; internal route strings navigate within the app.\",\n },\n};\n\nexport const actionsHandlers = {\n \"atlas.submitUserAction\": async (_params: unknown) => {\n // no-op default — overridden in SpecRenderer via onUserActionSubmit\n },\n \"atlas.navigate\": async (_params: unknown) => {\n // no-op default — overridden in SpecRenderer via onNavigate\n },\n};\n","import type { z } from \"zod\";\n\nimport type { ComponentCatalogDef } from \"./team-catalog\";\n\nexport type RendererContext = \"chat\" | \"panel\" | \"app\";\n\nexport const ALL_RENDERERS: RendererContext[] = [\"chat\", \"panel\", \"app\"];\n\nexport interface CatalogEntry {\n name: string;\n catalog: ComponentCatalogDef;\n /** json-render component renderer — typed at defineRegistry boundary. */\n renderer: unknown;\n renderers: RendererContext[];\n}\n\nexport type InferCatalogProps<T extends { props: z.ZodType }> = z.infer<T[\"props\"]>;\n","import { z } from \"zod\";\n\nexport const alertCatalog = {\n props: z.object({\n title: z.string(),\n status: z.enum([\"info\", \"success\", \"warning\", \"danger\"]).optional(),\n dismissible: z.boolean().optional(),\n }),\n slots: [\"default\"],\n description:\n 'Alert/notification banner. dismissible: true adds a close button that emits a \"close\" event.',\n};\n","import { Alert } from \"@servicetitan/anvil2\";\nimport type { ReactNode } from \"react\";\nimport type { z } from \"zod\";\n\nimport { alertCatalog } from \"./alert.catalog\";\n\nexport { alertCatalog };\n\nexport const AlertRenderer = ({\n props,\n emit,\n children,\n}: {\n props: z.infer<typeof alertCatalog.props>;\n emit: (event: string) => void;\n children?: ReactNode;\n}) => (\n <Alert\n title={props.title}\n status={props.status ?? \"info\"}\n {...(props.dismissible ? { onClose: () => emit(\"close\") } : {})}\n >\n {children}\n </Alert>\n);\n","type DefinedProps<T extends Record<string, unknown>> = {\n [K in keyof T as T[K] extends undefined ? never : K]: Exclude<T[K], undefined>;\n};\n\n/** Omit keys whose values are `undefined` — required for exactOptionalPropertyTypes spreads. */\nexport function definedProps<T extends Record<string, unknown>>(props: T): DefinedProps<T> {\n const result = {} as DefinedProps<T>;\n for (const key of Object.keys(props) as Array<keyof T>) {\n const value = props[key];\n if (value !== undefined) {\n result[key as keyof DefinedProps<T>] = value as DefinedProps<T>[keyof DefinedProps<T>];\n }\n }\n return result;\n}\n","import { z } from \"zod\";\n\nexport const badgeCatalog = {\n props: z.object({\n content: z.string().optional(),\n offset: z\n .object({\n x: z.string().optional(),\n y: z.string().optional(),\n })\n .optional(),\n }),\n slots: [\"default\"],\n description:\n \"Unread notification count on a Button or Link. Wrap the interactive element as a child of Badge (the renderer adds position:relative). content: numerical count only (e.g. 3, 99+); omit for dot-only. offset: {x, y} CSS values to fine-tune position on non-square anchors like links.\",\n};\n","import { Badge } from \"@servicetitan/anvil2\";\nimport type { ReactNode } from \"react\";\nimport type { z } from \"zod\";\n\nimport { definedProps } from \"../../utils/defined-props\";\nimport { badgeCatalog } from \"./badge.catalog\";\n\nexport { badgeCatalog };\n\nconst badgeAnchorStyle = { position: \"relative\" as const, display: \"inline-block\" as const };\n\nexport const BadgeRenderer = ({\n props,\n children,\n}: {\n props: z.infer<typeof badgeCatalog.props>;\n children?: ReactNode;\n}) => {\n const offset = props.offset ? definedProps({ x: props.offset.x, y: props.offset.y }) : undefined;\n\n const badge = offset ? (\n <Badge offset={offset}>{props.content}</Badge>\n ) : (\n <Badge>{props.content}</Badge>\n );\n\n if (children) {\n return (\n <div style={badgeAnchorStyle}>\n {children}\n {badge}\n </div>\n );\n }\n\n return badge;\n};\n","/**\r\n * A collection of utility functions for various type checks and conversion\r\n * @hidden\r\n */\r\n/**\r\n * ============================================================================\r\n * TYPE CHECK\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Returns `true` if value is not a number (NaN).\r\n *\r\n * @param value Input value\r\n * @return Is NaN?\r\n */\r\nexport function isNaN(value) {\r\n return Number(value) !== value;\r\n}\r\n/**\r\n * Returns a type of the value.\r\n *\r\n * @param value Input value\r\n * @return Type of the value\r\n * @ignore\r\n */\r\nexport function getType(value) {\r\n return ({}).toString.call(value);\r\n}\r\n/**\r\n * Asserts that the condition is true.\r\n *\r\n * @param condition Condition to check\r\n * @param message Message to display in the error\r\n * @ignore\r\n */\r\nexport function assert(condition, message = \"Assertion failed\") {\r\n if (!condition) {\r\n throw new Error(message);\r\n }\r\n}\r\n/**\r\n * ============================================================================\r\n * QUICK CONVERSION\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Converts any value into a `number`.\r\n *\r\n * @param value Source value\r\n * @return Number representation of value\r\n */\r\nexport function toNumber(value) {\r\n if (value != null && !isNumber(value)) {\r\n let converted = Number(value);\r\n if (isNaN(converted) && isString(value) && value != \"\" && value.match(/[0-9]+/)) {\r\n const newValue = value.replace(/[^0-9.\\-]+/g, '');\r\n return value === newValue ? converted : toNumber(newValue);\r\n }\r\n return converted;\r\n }\r\n return value;\r\n}\r\n/**\r\n * Converts anything to Date object.\r\n *\r\n * @param value A value of any type\r\n * @return Date object representing a value\r\n */\r\nexport function toDate(value) {\r\n if (isDate(value)) {\r\n // TODO maybe don't create a new Date ?\r\n return new Date(value);\r\n }\r\n else if (isNumber(value)) {\r\n return new Date(value);\r\n }\r\n else {\r\n // Try converting to number (assuming timestamp)\r\n let num = Number(value);\r\n if (!isNumber(num)) {\r\n return new Date(value);\r\n }\r\n else {\r\n return new Date(num);\r\n }\r\n }\r\n}\r\n/**\r\n * Converts numeric value into string. Deals with large or small numbers that\r\n * would otherwise use exponents.\r\n *\r\n * @param value Numeric value\r\n * @return Numeric value as string\r\n */\r\nexport function numberToString(value) {\r\n // TODO handle Infinity and -Infinity\r\n if (isNaN(value)) {\r\n return \"NaN\";\r\n }\r\n if (value === Infinity) {\r\n return \"Infinity\";\r\n }\r\n if (value === -Infinity) {\r\n return \"-Infinity\";\r\n }\r\n // Negative 0\r\n if ((value === 0) && (1 / value === -Infinity)) {\r\n return \"-0\";\r\n }\r\n // Preserve negative and deal with absoute values\r\n let negative = value < 0;\r\n value = Math.abs(value);\r\n // TODO test this\r\n let parsed = /^([0-9]+)(?:\\.([0-9]+))?(?:e[\\+\\-]([0-9]+))?$/.exec(\"\" + value);\r\n let digits = parsed[1];\r\n let decimals = parsed[2] || \"\";\r\n let res;\r\n // Leave the nummber as it is if it does not use exponents\r\n if (parsed[3] === undefined) {\r\n res = (decimals === \"\" ? digits : digits + \".\" + decimals);\r\n }\r\n else {\r\n let exponent = +parsed[3];\r\n // Deal with decimals\r\n if (value < 1) {\r\n let zeros = exponent - 1;\r\n res = \"0.\" + repeat(\"0\", zeros) + digits + decimals;\r\n // Deal with integers\r\n }\r\n else {\r\n let zeros = exponent - decimals.length;\r\n if (zeros === 0) {\r\n res = digits + decimals;\r\n }\r\n else if (zeros < 0) {\r\n res = digits + decimals.slice(0, zeros) + \".\" + decimals.slice(zeros);\r\n }\r\n else {\r\n res = digits + decimals + repeat(\"0\", zeros);\r\n }\r\n }\r\n }\r\n return negative ? \"-\" + res : res;\r\n}\r\n/**\r\n * Repeats a `string` number of times as set in `amount`.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Make this faster\r\n * @param string Source string\r\n * @param amount Number of times to repeat string\r\n * @return New string\r\n */\r\nexport function repeat(string, amount) {\r\n return new Array(amount + 1).join(string);\r\n}\r\n/**\r\n * ============================================================================\r\n * TYPE CHECK\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Checks if parameter is `Date`.\r\n *\r\n * @param value Input value\r\n * @return Is Date?\r\n */\r\nexport function isDate(value) {\r\n return getType(value) === \"[object Date]\";\r\n}\r\n/**\r\n * Checks if parameter is `string`.\r\n *\r\n * @param value Input value\r\n * @return Is string?\r\n */\r\nexport function isString(value) {\r\n return typeof value === \"string\";\r\n}\r\n/**\r\n * Checks if parameter is `number`.\r\n *\r\n * @param value Input value\r\n * @return Is number?\r\n */\r\nexport function isNumber(value) {\r\n return typeof value === \"number\" && Number(value) == value;\r\n}\r\n/**\r\n * Checks if parameter is `object`.\r\n *\r\n * @param value Input value\r\n * @return Is object?\r\n */\r\nexport function isObject(value) {\r\n return typeof value === \"object\" && value !== null;\r\n}\r\n/**\r\n * Checks if parameter is `Array`.\r\n *\r\n * @param value Input value\r\n * @return Is Array?\r\n */\r\nexport function isArray(value) {\r\n return Array.isArray(value);\r\n}\r\n/**\r\n * ============================================================================\r\n * STATIC CONSTANTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * @ignore Exclude from docs\r\n */\r\nexport const PLACEHOLDER = \"__§§§__\";\r\n/**\r\n * @ignore Exclude from docs\r\n */\r\nexport const PLACEHOLDER2 = \"__§§§§__\";\r\n//# sourceMappingURL=Type.js.map","import * as $type from \"./Type\";\r\n/**\r\n * ============================================================================\r\n * UTILITY FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Searches `array` for `value`.\r\n *\r\n * Returns -1 if not found.\r\n *\r\n * @param array Source array\r\n * @param value Value to search\r\n * @returns Index\r\n */\r\nexport function indexOf(array, value) {\r\n const length = array.length;\r\n for (let i = 0; i < length; ++i) {\r\n // TODO handle NaN\r\n if (array[i] === value) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\n/**\r\n * Calls `test` for each element in `array`.\r\n *\r\n * If `test` returns `true` then it immediately returns `true`.\r\n *\r\n * If `test` returns `false` for all of the elements in `array` then it returns `false`.\r\n *\r\n * @param array Source array\r\n * @param test Function which is called on each element\r\n * @returns Whether `test` returned true or not\r\n */\r\nexport function any(array, test) {\r\n const length = array.length;\r\n for (let i = 0; i < length; ++i) {\r\n if (test(array[i])) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n/**\r\n * Calls `fn` function for every member of array and returns a new array out\r\n * of all outputs.\r\n *\r\n * @param array Source array\r\n * @param fn Callback function\r\n * @returns New array\r\n */\r\nexport function map(array, fn) {\r\n const length = array.length;\r\n const output = new Array(length);\r\n for (let i = 0; i < length; ++i) {\r\n output[i] = fn(array[i], i);\r\n }\r\n return output;\r\n}\r\n/**\r\n * Iterates through all items in array and calls `fn` function for each of\r\n * them.\r\n *\r\n * @param array Source array\r\n * @param fn Callback function\r\n */\r\nexport function each(array, fn) {\r\n const length = array.length;\r\n for (let i = 0; i < length; ++i) {\r\n fn(array[i], i);\r\n }\r\n}\r\n/**\r\n * Iterates through all items in array in reverse order and calls `fn` function for each of\r\n * them.\r\n *\r\n * @param array Source array\r\n * @param fn Callback function\r\n */\r\nexport function eachReverse(array, fn) {\r\n let i = array.length;\r\n while (i > 0) {\r\n --i;\r\n fn(array[i], i);\r\n }\r\n}\r\n/**\r\n * Iterates through all items in array and calls `fn` function for each of\r\n * them.\r\n *\r\n * If `fn` call evaluates to `false`, further iteration is cancelled.\r\n *\r\n * @param array Source array\r\n * @param fn Callback function\r\n */\r\nexport function eachContinue(array, fn) {\r\n const length = array.length;\r\n for (let i = 0; i < length; ++i) {\r\n if (!fn(array[i], i)) {\r\n break;\r\n }\r\n }\r\n}\r\n/**\r\n * Shifts an item at `index` towards beginning of the array.\r\n *\r\n * @param array Source array\r\n * @param index Target element index\r\n */\r\nexport function shiftLeft(array, index) {\r\n const length = array.length;\r\n for (let i = index; i < length; ++i) {\r\n array[i - index] = array[i];\r\n }\r\n array.length = length - index;\r\n}\r\n/**\r\n * Returns the last item of the array.\r\n *\r\n * @param array Source array\r\n * @returns Last item\r\n */\r\nexport function last(array) {\r\n const length = array.length;\r\n return length ? array[length - 1] : undefined;\r\n}\r\n/**\r\n * Returns the first item of the array.\r\n *\r\n * @param array Source array\r\n * @returns Last item\r\n */\r\nexport function first(array) {\r\n return array[0];\r\n}\r\n/**\r\n * Inserts `element` into `array` at `index`.\r\n *\r\n * Caps `index` to be between `0` and `array.length`\r\n *\r\n * @param array Source array\r\n * @param element Item to insert\r\n * @param array Index to insert item at\r\n */\r\nexport function insert(array, element, index) {\r\n //if (array) {\r\n index = Math.max(0, Math.min(index, array.length));\r\n array.splice(index, 0, element);\r\n //}\r\n}\r\n/**\r\n * Removes all copies of `element` from `array` (if they exist) and then\r\n * inserts `element` at `index`.\r\n *\r\n * @param array Source array\r\n * @param element Item\r\n * @param array Index to move item to\r\n */\r\nexport function setIndex(array, element, index) {\r\n remove(array, element);\r\n insert(array, element, index);\r\n}\r\n/**\r\n * Pushes all of the elements from `input` into `array`.\r\n *\r\n * @param array Output array\r\n * @param input Input array\r\n */\r\nexport function pushAll(array, input) {\r\n const length = input.length;\r\n for (let i = 0; i < length; ++i) {\r\n array.push(input[i]);\r\n }\r\n}\r\n/**\r\n * Removes `element` from `array`.\r\n *\r\n * If there are multiple copies of `element`, they are all removed.\r\n *\r\n * @param array Source array\r\n * @param element Item to remove\r\n */\r\nexport function remove(array, element) {\r\n let found = false;\r\n let index = 0;\r\n for (;;) {\r\n index = array.indexOf(element, index);\r\n if (index === -1) {\r\n return found;\r\n }\r\n else {\r\n found = true;\r\n array.splice(index, 1);\r\n }\r\n }\r\n}\r\nexport function removeFirst(array, element) {\r\n let index = array.indexOf(element);\r\n if (index !== -1) {\r\n array.splice(index, 1);\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n}\r\n/**\r\n * Adds an `element` to `array`.\r\n *\r\n * If array already contains and item like this, it is removed before adding\r\n * it again.\r\n *\r\n * Optionally `toIndex` can be specified to add element at specific index.\r\n *\r\n * @param array Source array\r\n * @param element Item to add\r\n * @param array Index to move item to\r\n */\r\nexport function move(array, element, toIndex) {\r\n // @todo this implementation must be the same as the List.moveValue method\r\n // @todo don't do anything if the desired index is the same as the current index\r\n let index = indexOf(array, element);\r\n // @todo remove all old values rather than only the first ?\r\n if (index !== -1) {\r\n removeIndex(array, index);\r\n }\r\n if (toIndex == null) {\r\n array.push(element);\r\n }\r\n else {\r\n insertIndex(array, toIndex, element);\r\n }\r\n}\r\n/**\r\n * Inserts `element` into `array` at `index`.\r\n *\r\n * If `index` is not provided, it will insert `element` at the end of `array`.\r\n *\r\n * @param array Source array\r\n * @param element Item to add\r\n * @param array Index to add item at\r\n */\r\nexport function add(array, element, index) {\r\n // Append to the end if index is not set\r\n if (!$type.isNumber(index)) {\r\n array.push(element);\r\n }\r\n // Add to the beginning of array if index is 0\r\n else if (index === 0) {\r\n array.unshift(element);\r\n }\r\n // Add to indicated place if index is set\r\n else {\r\n array.splice(index, 0, element);\r\n }\r\n}\r\n/**\r\n * Pushes `element` into `array` if it doesn't already exist.\r\n *\r\n * @param array Source array\r\n * @param element Item to add\r\n */\r\nexport function pushOne(array, element) {\r\n if (array.indexOf(element) === -1) {\r\n array.push(element);\r\n }\r\n}\r\n/**\r\n * Removes `element` from `array` (if it exists) and then inserts `element` at\r\n * `index`.\r\n *\r\n * If `index` is not provided, it will insert `element` at the end of `array`.\r\n *\r\n * @param array Source array\r\n * @param element Item to remove\r\n * @param array Index to move item to\r\n */\r\nexport function replace(array, element, index) {\r\n // check if exists\r\n let ind = array.indexOf(element);\r\n // remove if exists\r\n if (ind !== -1) {\r\n array.splice(ind, 1);\r\n }\r\n // add to end if index is not set\r\n if (!$type.isNumber(index)) {\r\n array.push(element);\r\n }\r\n // add to indicated place if index is set\r\n else {\r\n array.splice(index, 0, element);\r\n }\r\n}\r\n/**\r\n * Wraps `input` in an array, if it isn't already an array.\r\n *\r\n * @param input Source value\r\n * @return An array\r\n */\r\nexport function toArray(input) {\r\n if (Array.isArray(input)) {\r\n return input;\r\n }\r\n else {\r\n return [input];\r\n }\r\n}\r\n/**\r\n * Returns `true` if `element` exists in `array`.\r\n *\r\n * @param array Source array\r\n * @param element Item to search for\r\n * @returns Item in array?\r\n */\r\nexport function has(array, element) {\r\n return indexOf(array, element) !== -1;\r\n}\r\n/**\r\n * Returns a shallow copy of `array`.\r\n *\r\n * @param array Source array\r\n * @returns Copy of the array\r\n */\r\nexport function copy(array) {\r\n const length = array.length;\r\n // It's faster to create the array with a pre-defined length\r\n const output = new Array(length);\r\n for (let i = 0; i < length; ++i) {\r\n // Because the array has a pre-defined length, we have to assign rather than push\r\n // This is also faster than pushing\r\n output[i] = array[i];\r\n }\r\n return output;\r\n}\r\n/**\r\n * Returns a copy of `array` which contains all the elements between `start`\r\n * and `end`. (including `start` and excluding `end`)\r\n *\r\n * If `end` is not provided, it defaults to `array.length`.\r\n *\r\n * @param array Source array\r\n * @param start Start index\r\n * @param end End index\r\n * @returns Part of the array\r\n */\r\nexport function slice(array, start, end = array.length) {\r\n const output = new Array(end - start);\r\n for (let i = start; i < end; ++i) {\r\n output[i - start] = array[i];\r\n }\r\n return output;\r\n}\r\n/**\r\n * Inserts a value into array at specific index.\r\n *\r\n * @param array Source array\r\n * @param index Index\r\n * @param value Value to insert\r\n */\r\nexport function insertIndex(array, index, value) {\r\n array.splice(index, 0, value);\r\n}\r\n/**\r\n * Removes a value from array at specific index.\r\n *\r\n * @param array Source array\r\n * @param index Index\r\n */\r\nexport function removeIndex(array, index) {\r\n array.splice(index, 1);\r\n}\r\n/**\r\n * Searches the array using custom function and returns index of the item if\r\n * found.\r\n *\r\n * Will call `matches` function on all items of the array. If return value\r\n * evaluates to `true`, index is returned.\r\n *\r\n * Otherwise returns -1.\r\n *\r\n * @param array Source array\r\n * @param matches Search function\r\n * @returns Index of the item if found\r\n */\r\nexport function findIndex(array, matches) {\r\n const length = array.length;\r\n for (let i = 0; i < length; ++i) {\r\n if (matches(array[i], i)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\n/**\r\n * This is the same as `findIndex` except it searches from right to left.\r\n *\r\n * @param array Source array\r\n * @param matches Search function\r\n * @returns Index of the item if found\r\n */\r\nexport function findIndexReverse(array, matches) {\r\n let i = array.length;\r\n while (i > 0) {\r\n --i;\r\n if (matches(array[i], i)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\n/**\r\n * Searches the array using custom function and returns item if found.\r\n *\r\n * Will call `matches` function on all items of the array. If return value\r\n * evaluates to `true`, index is returned.\r\n *\r\n * Otherwise returns `undefined`.\r\n *\r\n * @param array Source array\r\n * @param matches Search function\r\n * @returns Item if found\r\n */\r\nexport function find(array, matches) {\r\n const index = findIndex(array, matches);\r\n if (index !== -1) {\r\n return array[index];\r\n }\r\n}\r\n/**\r\n * This is the same as `find` except it searches from right to left.\r\n *\r\n * @param array Source array\r\n * @param matches Search function\r\n * @returns Item if found\r\n */\r\nexport function findReverse(array, matches) {\r\n const index = findIndexReverse(array, matches);\r\n if (index !== -1) {\r\n return array[index];\r\n }\r\n}\r\n/**\r\n * Searches the array using custom function and returns item if found.\r\n *\r\n * Will call `matches` function on all items of the array. If value\r\n * is not `undefined`, it returns it.\r\n *\r\n * Otherwise returns `undefined`.\r\n *\r\n * @param array Source array\r\n * @param matches Search function\r\n * @returns Item if found\r\n */\r\nexport function findMap(array, matches) {\r\n const length = array.length;\r\n for (let i = 0; i < length; ++i) {\r\n const value = matches(array[i], i);\r\n if (value !== undefined) {\r\n return value;\r\n }\r\n }\r\n}\r\n/**\r\n * Iterates through all items in array and calls `fn` function for each of\r\n * them.\r\n *\r\n * @param array Source array\r\n * @param fn Callback function\r\n */\r\nexport function shuffle(array) {\r\n // https://stackoverflow.com/a/2450976/449477\r\n let currentIndex = array.length, temporaryValue, randomIndex;\r\n // While there remain elements to shuffle...\r\n while (0 !== currentIndex) {\r\n // Pick a remaining element...\r\n randomIndex = Math.floor(Math.random() * currentIndex);\r\n currentIndex -= 1;\r\n // And swap it with the current element.\r\n temporaryValue = array[currentIndex];\r\n array[currentIndex] = array[randomIndex];\r\n array[randomIndex] = temporaryValue;\r\n }\r\n}\r\n/**\r\n * Orders an array using specific `ordering` function and returns right-most index of\r\n * the `value`.\r\n *\r\n * @ignore Exclude from docs\r\n * @param array Source array\r\n * @param ordering An ordering function\r\n * @returns Result of the search\r\n */\r\nexport function getSortedIndex(array, ordering) {\r\n let start = 0;\r\n let end = array.length;\r\n let found = false;\r\n while (start < end) {\r\n // TODO is this faster/slower than using Math.floor ?\r\n const pivot = (start + end) >> 1;\r\n const order = ordering(array[pivot]);\r\n // less\r\n if (order < 0) {\r\n start = pivot + 1;\r\n // equal\r\n }\r\n else if (order === 0) {\r\n found = true;\r\n for (start = pivot + 1; start < end && ordering(array[start]) === 0; start++)\r\n ;\r\n start--;\r\n break;\r\n // more\r\n }\r\n else {\r\n end = pivot;\r\n }\r\n }\r\n return {\r\n found: found,\r\n index: start\r\n };\r\n}\r\n/**\r\n * Orders an array using specific `ordering` function and returns left-most index of\r\n * the `value`.\r\n *\r\n * @ignore Exclude from docs\r\n * @param array Source array\r\n * @param ordering An ordering function\r\n * @returns Result of the search\r\n */\r\nexport function getFirstSortedIndex(array, ordering) {\r\n let start = 0;\r\n let end = array.length;\r\n let found = false;\r\n while (start < end) {\r\n // TODO is this faster/slower than using Math.floor ?\r\n const pivot = (start + end) >> 1;\r\n const order = ordering(array[pivot]);\r\n // less\r\n if (order < 0) {\r\n start = pivot + 1;\r\n // equal\r\n }\r\n else if (order === 0) {\r\n found = true;\r\n end = pivot;\r\n // more\r\n }\r\n else {\r\n end = pivot;\r\n }\r\n }\r\n return {\r\n found: found,\r\n index: start\r\n };\r\n}\r\nexport function keepIf(array, keep) {\r\n let i = array.length;\r\n while (i > 0) {\r\n --i;\r\n if (!keep(array[i])) {\r\n array.splice(i, 1);\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=Array.js.map","/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport * as $array from \"./Array\";\r\n/**\r\n * A base class for disposable objects.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\nexport class DisposerClass {\r\n /**\r\n * Constructor.\r\n */\r\n constructor() {\r\n this._disposed = false;\r\n }\r\n /**\r\n * Checks if object is disposed.\r\n *\r\n * @return Disposed?\r\n */\r\n isDisposed() {\r\n return this._disposed;\r\n }\r\n /**\r\n * Disposes the object.\r\n */\r\n dispose() {\r\n if (!this._disposed) {\r\n this._disposed = true;\r\n this._dispose();\r\n }\r\n }\r\n}\r\n/**\r\n * A class for creating an IDisposer.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\nexport class Disposer {\r\n /**\r\n * Constructor.\r\n *\r\n * @param dispose Function that disposes object\r\n */\r\n constructor(dispose) {\r\n this._disposed = false;\r\n this._dispose = dispose;\r\n }\r\n /**\r\n * Checks if object is disposed.\r\n *\r\n * @return Disposed?\r\n */\r\n isDisposed() {\r\n return this._disposed;\r\n }\r\n /**\r\n * Disposes the object.\r\n */\r\n dispose() {\r\n if (!this._disposed) {\r\n this._disposed = true;\r\n this._dispose();\r\n }\r\n }\r\n}\r\n/**\r\n * This can be extended by other classes to add a `_disposers` property.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\nexport class ArrayDisposer extends DisposerClass {\r\n constructor() {\r\n super(...arguments);\r\n this._disposers = [];\r\n }\r\n _dispose() {\r\n $array.each(this._disposers, (x) => {\r\n x.dispose();\r\n });\r\n }\r\n}\r\n/**\r\n * A collection of related disposers that can be disposed in one go.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\nexport class MultiDisposer extends DisposerClass {\r\n constructor(disposers) {\r\n super();\r\n this._disposers = disposers;\r\n }\r\n _dispose() {\r\n $array.each(this._disposers, (x) => {\r\n x.dispose();\r\n });\r\n }\r\n get disposers() {\r\n return this._disposers;\r\n }\r\n}\r\n/**\r\n * A special kind of Disposer that has attached value set.\r\n *\r\n * If a new value is set using `set()` method, the old disposer value is\r\n * disposed.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\nexport class MutableValueDisposer extends DisposerClass {\r\n _dispose() {\r\n if (this._disposer != null) {\r\n this._disposer.dispose();\r\n this._disposer = undefined;\r\n }\r\n }\r\n /**\r\n * Returns current value.\r\n *\r\n * @return Value\r\n */\r\n get() {\r\n return this._value;\r\n }\r\n /**\r\n * Sets value and disposes previous disposer if it was set.\r\n *\r\n * @param value New value\r\n * @param disposer Disposer\r\n */\r\n set(value, disposer) {\r\n if (this._disposer != null) {\r\n this._disposer.dispose();\r\n }\r\n this._disposer = disposer;\r\n this._value = value;\r\n }\r\n /**\r\n * Resets the disposer value.\r\n */\r\n reset() {\r\n this.set(undefined, undefined);\r\n }\r\n}\r\n/**\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\nexport class CounterDisposer extends Disposer {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * [_counter description]\r\n *\r\n * @todo Description\r\n */\r\n this._counter = 0;\r\n }\r\n /**\r\n * [increment description]\r\n *\r\n * @todo Description\r\n */\r\n increment() {\r\n // TODO throw an error if it is disposed\r\n ++this._counter;\r\n // TODO make this more efficient\r\n return new Disposer(() => {\r\n --this._counter;\r\n if (this._counter === 0) {\r\n this.dispose();\r\n }\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=Disposer.js.map","/**\r\n * Event Dispatcher module is used for registering listeners and dispatching\r\n * events across amCharts system.\r\n */\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Disposer, MultiDisposer } from \"./Disposer\";\r\nimport * as $array from \"./Array\";\r\nimport * as $type from \"./Type\";\r\n/**\r\n * Universal Event Dispatcher.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/events/} for more info\r\n */\r\nexport class EventDispatcher {\r\n /**\r\n * Constructor\r\n */\r\n constructor() {\r\n this._listeners = [];\r\n this._killed = [];\r\n this._disabled = {};\r\n this._iterating = 0;\r\n this._enabled = true;\r\n this._disposed = false;\r\n }\r\n /**\r\n * Returns if this object has been already disposed.\r\n *\r\n * @return Disposed?\r\n */\r\n isDisposed() {\r\n return this._disposed;\r\n }\r\n /**\r\n * Dispose (destroy) this object.\r\n */\r\n dispose() {\r\n if (!this._disposed) {\r\n this._disposed = true;\r\n const a = this._listeners;\r\n this._iterating = 1;\r\n this._listeners = null;\r\n this._disabled = null;\r\n try {\r\n $array.each(a, (x) => {\r\n x.disposer.dispose();\r\n });\r\n }\r\n finally {\r\n this._killed = null;\r\n this._iterating = null;\r\n }\r\n }\r\n }\r\n /**\r\n * Checks if this particular event dispatcher has any listeners set.\r\n *\r\n * @return Has listeners?\r\n */\r\n hasListeners() {\r\n return this._listeners.length !== 0;\r\n }\r\n /**\r\n * Checks if this particular event dispatcher has any particular listeners set.\r\n *\r\n * @return Has particular event listeners?\r\n */\r\n hasListenersByType(type) {\r\n return $array.any(this._listeners, (x) => (x.type === null || x.type === type) && !x.killed);\r\n }\r\n /**\r\n * Enable dispatching of events if they were previously disabled by\r\n * `disable()`.\r\n */\r\n enable() {\r\n this._enabled = true;\r\n }\r\n /**\r\n * Disable dispatching of events until re-enabled by `enable()`.\r\n */\r\n disable() {\r\n this._enabled = false;\r\n }\r\n /**\r\n * Enable dispatching particular event, if it was disabled before by\r\n * `disableType()`.\r\n *\r\n * @param type Event type\r\n */\r\n enableType(type) {\r\n delete this._disabled[type];\r\n }\r\n /**\r\n * Disable dispatching of events for a certain event type.\r\n *\r\n * Optionally, can set how many dispatches to skip before automatically\r\n * re-enabling the dispatching.\r\n *\r\n * @param type Event type\r\n * @param amount Number of event dispatches to skip\r\n */\r\n disableType(type, amount = Infinity) {\r\n this._disabled[type] = amount;\r\n }\r\n /**\r\n * Removes listener from dispatcher.\r\n *\r\n * Will throw an exception if such listener does not exists.\r\n *\r\n * @param listener Listener to remove\r\n */\r\n _removeListener(listener) {\r\n if (this._iterating === 0) {\r\n const index = this._listeners.indexOf(listener);\r\n if (index === -1) {\r\n throw new Error(\"Invalid state: could not remove listener\");\r\n }\r\n this._listeners.splice(index, 1);\r\n }\r\n else {\r\n this._killed.push(listener);\r\n }\r\n }\r\n /**\r\n * Removes existing listener by certain parameters.\r\n *\r\n * @param once Listener's once setting\r\n * @param type Listener's type\r\n * @param callback Callback function\r\n * @param context Callback context\r\n */\r\n _removeExistingListener(once, type, callback, context) {\r\n if (this._disposed) {\r\n throw new Error(\"EventDispatcher is disposed\");\r\n }\r\n this._eachListener((info) => {\r\n if (info.once === once && // TODO is this correct ?\r\n info.type === type &&\r\n (callback === undefined || info.callback === callback) &&\r\n info.context === context) {\r\n info.disposer.dispose();\r\n }\r\n });\r\n }\r\n /**\r\n * Checks if dispatching for particular event type is enabled.\r\n *\r\n * @param type Event type\r\n * @return Enabled?\r\n */\r\n isEnabled(type) {\r\n if (this._disposed) {\r\n throw new Error(\"EventDispatcher is disposed\");\r\n }\r\n // TODO is this check correct ?\r\n return this._enabled && this._listeners.length > 0 && this.hasListenersByType(type) && this._disabled[type] === undefined;\r\n }\r\n /**\r\n * Removes all listeners of a particular event type\r\n *\r\n * @param type Listener's type\r\n */\r\n removeType(type) {\r\n if (this._disposed) {\r\n throw new Error(\"EventDispatcher is disposed\");\r\n }\r\n this._eachListener((info) => {\r\n if (info.type === type) {\r\n info.disposer.dispose();\r\n }\r\n });\r\n }\r\n /**\r\n * Checks if there's already a listener with specific parameters.\r\n *\r\n * @param type Listener's type\r\n * @param callback Callback function\r\n * @param context Callback context\r\n * @return Has listener?\r\n */\r\n has(type, callback, context) {\r\n const index = $array.findIndex(this._listeners, (info) => {\r\n return info.once !== true && // Ignoring \"once\" listeners\r\n info.type === type &&\r\n (callback === undefined || info.callback === callback) &&\r\n info.context === context;\r\n });\r\n return index !== -1;\r\n }\r\n /**\r\n * Checks whether event of the particular type should be dispatched.\r\n *\r\n * @param type Event type\r\n * @return Dispatch?\r\n */\r\n _shouldDispatch(type) {\r\n if (this._disposed) {\r\n throw new Error(\"EventDispatcher is disposed\");\r\n }\r\n const count = this._disabled[type];\r\n if (!$type.isNumber(count)) {\r\n return this._enabled;\r\n }\r\n else {\r\n if (count <= 1) {\r\n delete this._disabled[type];\r\n }\r\n else {\r\n --this._disabled[type];\r\n }\r\n return false;\r\n }\r\n }\r\n /**\r\n * [_eachListener description]\r\n *\r\n * All of this extra code is needed when a listener is removed while iterating\r\n *\r\n * @todo Description\r\n * @param fn [description]\r\n */\r\n _eachListener(fn) {\r\n ++this._iterating;\r\n try {\r\n $array.each(this._listeners, fn);\r\n }\r\n finally {\r\n --this._iterating;\r\n // TODO should this be inside or outside the finally ?\r\n if (this._iterating === 0 && this._killed.length !== 0) {\r\n // Remove killed listeners\r\n $array.each(this._killed, (killed) => {\r\n this._removeListener(killed);\r\n });\r\n this._killed.length = 0;\r\n }\r\n }\r\n }\r\n /**\r\n * Dispatches an event immediately without waiting for next cycle.\r\n *\r\n * @param type Event type\r\n * @param event Event object\r\n * @todo automatically add in type and target properties if they are missing\r\n */\r\n dispatch(type, event) {\r\n if (this._shouldDispatch(type)) {\r\n // TODO check if it's faster to use an object of listeners rather than a single big array\r\n // TODO if the function throws, maybe it should keep going ?\r\n this._eachListener((listener) => {\r\n if (!listener.killed && (listener.type === null || listener.type === type)) {\r\n if (listener._debounceDelay) {\r\n if (listener._debounceTimeout) {\r\n window.clearTimeout(listener._debounceTimeout);\r\n }\r\n listener._debounceTimeout = window.setTimeout(() => {\r\n listener._debounceTimeout = undefined;\r\n if (!listener.killed) {\r\n listener.dispatch(type, event);\r\n }\r\n }, listener._debounceDelay);\r\n }\r\n else {\r\n listener.dispatch(type, event);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n /**\r\n * Shelves the event to be dispatched within next update cycle.\r\n *\r\n * @param type Event type\r\n * @param event Event object\r\n * @todo automatically add in type and target properties if they are missing\r\n */\r\n /*public dispatchLater<Key extends keyof T>(type: Key, event: T[Key]): void {\r\n if (this._shouldDispatch(type)) {\r\n this._eachListener((listener) => {\r\n // TODO check if it's faster to use an object of listeners rather than a single big array\r\n if (!listener.killed && (listener.type === null || listener.type === type)) {\r\n // TODO if the function throws, maybe it should keep going ?\r\n // TODO dispatch during the update cycle, rather than using whenIdle\r\n $async.whenIdle(() => {\r\n if (!listener.killed) {\r\n listener.dispatch(type, event);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n }*/\r\n /**\r\n * Creates, catalogs and returns an [[EventListener]].\r\n *\r\n * Event listener can be disposed.\r\n *\r\n * @param once Listener's once setting\r\n * @param type Listener's type\r\n * @param callback Callback function\r\n * @param context Callback context\r\n * @param shouldClone Whether the listener should be copied when the EventDispatcher is copied\r\n * @param dispatch\r\n * @returns An event listener\r\n */\r\n _on(once, type, callback, context, shouldClone, dispatch, debounceDelay) {\r\n if (this._disposed) {\r\n throw new Error(\"EventDispatcher is disposed\");\r\n }\r\n this._removeExistingListener(once, type, callback, context);\r\n const info = {\r\n type: type,\r\n callback: callback,\r\n context: context,\r\n shouldClone: shouldClone,\r\n dispatch: dispatch,\r\n killed: false,\r\n once: once,\r\n disposer: new Disposer(() => {\r\n info.killed = true;\r\n if (info._debounceTimeout) {\r\n window.clearTimeout(info._debounceTimeout);\r\n }\r\n this._removeListener(info);\r\n }),\r\n _debounceDelay: debounceDelay\r\n };\r\n this._listeners.push(info);\r\n return info;\r\n }\r\n /**\r\n * Creates an event listener to be invoked on **any** event.\r\n *\r\n * @param callback Callback function\r\n * @param context Callback context\r\n * @param shouldClone Whether the listener should be copied when the EventDispatcher is copied\r\n * @returns A disposable event listener\r\n */\r\n onAll(callback, context, shouldClone = true) {\r\n return this._on(false, null, callback, context, shouldClone, (_type, event) => callback.call(context, event)).disposer;\r\n }\r\n /**\r\n * Creates an event listener to be invoked on a specific event type.\r\n *\r\n * ```TypeScript\r\n * button.events.once(\"click\", (ev) => {\r\n * console.log(\"Button clicked\");\r\n * }, this);\r\n * ```\r\n * ```JavaScript\r\n * button.events.once(\"click\", function(ev) {\r\n * console.log(\"Button clicked\");\r\n * }, this);\r\n * ```\r\n *\r\n * The above will invoke our custom event handler whenever series we put\r\n * event on is hidden.\r\n *\r\n * @param type Listener's type\r\n * @param callback Callback function\r\n * @param context Callback context\r\n * @param shouldClone Whether the listener should be copied when the EventDispatcher is copied\r\n * @returns A disposable event listener\r\n */\r\n on(type, callback, context, shouldClone = true) {\r\n return this._on(false, type, callback, context, shouldClone, (_type, event) => callback.call(context, event)).disposer;\r\n }\r\n /**\r\n * Creates a debounced event listener to be invoked on a specific event type.\r\n *\r\n * ```TypeScript\r\n * button.events.onDebounced(\"click\", (ev) => {\r\n * console.log(\"Button clicked\");\r\n * }, 500, this);\r\n * ```\r\n * ```JavaScript\r\n * button.events.onDebounced(\"click\", function(ev) {\r\n * console.log(\"Button clicked\");\r\n * }, 500, this);\r\n * ```\r\n *\r\n * The above will invoke our custom event handler whenever series we put\r\n * event on is hidden.\r\n *\r\n * @param type Listener's type\r\n * @param callback Callback function\r\n * @param debounceDelay Debounce delay in milliseconds\r\n * @param context Callback context\r\n * @param shouldClone Whether the listener should be copied when the EventDispatcher is copied\r\n * @returns A disposable event listener\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/events/#Debounced_events} for more info\r\n * @since 5.14.0\r\n */\r\n onDebounced(type, callback, debounceDelay, context, shouldClone = true) {\r\n return this._on(false, type, callback, context, shouldClone, (_type, event) => callback.call(context, event), debounceDelay).disposer;\r\n }\r\n /**\r\n * Creates an event listener to be invoked on a specific event type once.\r\n *\r\n * Once the event listener is invoked, it is automatically disposed.\r\n *\r\n * ```TypeScript\r\n * button.events.once(\"click\", (ev) => {\r\n * console.log(\"Button clicked\");\r\n * }, this);\r\n * ```\r\n * ```JavaScript\r\n * button.events.once(\"click\", function(ev) {\r\n * console.log(\"Button clicked\");\r\n * }, this);\r\n * ```\r\n *\r\n * The above will invoke our custom event handler the first time series we\r\n * put event on is hidden.\r\n *\r\n * @param type Listener's type\r\n * @param callback Callback function\r\n * @param context Callback context\r\n * @param shouldClone Whether the listener should be copied when the EventDispatcher is copied\r\n * @returns A disposable event listener\r\n */\r\n once(type, callback, context, shouldClone = true) {\r\n const x = this._on(true, type, callback, context, shouldClone, (_type, event) => {\r\n x.disposer.dispose();\r\n callback.call(context, event);\r\n });\r\n // TODO maybe this should return a different Disposer ?\r\n return x.disposer;\r\n }\r\n /**\r\n * Removes the event listener with specific parameters.\r\n *\r\n * @param type Listener's type\r\n * @param callback Callback function\r\n * @param context Callback context\r\n */\r\n off(type, callback, context) {\r\n this._removeExistingListener(false, type, callback, context);\r\n }\r\n /**\r\n * Copies all dispatcher parameters, including listeners, from another event\r\n * dispatcher.\r\n *\r\n * @param source Source event dispatcher\r\n * @ignore\r\n */\r\n copyFrom(source) {\r\n if (this._disposed) {\r\n throw new Error(\"EventDispatcher is disposed\");\r\n }\r\n if (source === this) {\r\n throw new Error(\"Cannot copyFrom the same TargetedEventDispatcher\");\r\n }\r\n const disposers = [];\r\n $array.each(source._listeners, (x) => {\r\n // TODO is this correct ?\r\n if (!x.killed && x.shouldClone) {\r\n if (x.type === null) {\r\n disposers.push(this.onAll(x.callback, x.context));\r\n }\r\n else if (x.once) {\r\n disposers.push(this.once(x.type, x.callback, x.context));\r\n }\r\n else {\r\n disposers.push(this.on(x.type, x.callback, x.context));\r\n }\r\n }\r\n });\r\n return new MultiDisposer(disposers);\r\n }\r\n}\r\n/**\r\n * A version of the [[EventDispatcher]] that dispatches events for a specific\r\n * target object.\r\n *\r\n * @ignore\r\n */\r\nexport class TargetedEventDispatcher extends EventDispatcher {\r\n /**\r\n * Constructor\r\n *\r\n * @param target Event dispatcher target\r\n */\r\n constructor(target) {\r\n super();\r\n this.target = target;\r\n }\r\n /**\r\n * Copies all dispatcher parameters, including listeners, from another event\r\n * dispatcher.\r\n *\r\n * @param source Source event dispatcher\r\n * @ignore\r\n */\r\n copyFrom(source) {\r\n if (this._disposed) {\r\n throw new Error(\"EventDispatcher is disposed\");\r\n }\r\n if (source === this) {\r\n throw new Error(\"Cannot copyFrom the same TargetedEventDispatcher\");\r\n }\r\n const disposers = [];\r\n $array.each(source._listeners, (x) => {\r\n // TODO very hacky\r\n if (x.context === source.target) {\r\n return;\r\n }\r\n // TODO is this correct ?\r\n if (!x.killed && x.shouldClone) {\r\n if (x.type === null) {\r\n disposers.push(this.onAll(x.callback, x.context));\r\n }\r\n else if (x.once) {\r\n disposers.push(this.once(x.type, x.callback, x.context));\r\n }\r\n else {\r\n disposers.push(this.on(x.type, x.callback, x.context));\r\n }\r\n }\r\n });\r\n return new MultiDisposer(disposers);\r\n }\r\n}\r\n//# sourceMappingURL=EventDispatcher.js.map","import * as $array from \"./Array\";\r\n/**\r\n * Returns an array of object's own enumerable property names.\r\n *\r\n * @param object Source object\r\n * @return Array of property names\r\n */\r\nexport function keys(object) {\r\n return Object.keys(object);\r\n}\r\n/**\r\n * Returns an array of object's own enumerable [key, value] pairs.\r\n *\r\n * @param object Source object\r\n * @return Array of [key, value] tuples\r\n */\r\nexport function entries(object) {\r\n return Object.entries(object);\r\n}\r\n/**\r\n * Returns an array of object's property names ordered using specific ordering\r\n * function.\r\n *\r\n * @param object Source object\r\n * @param order Ordering function\r\n * @returns Object property names\r\n */\r\nexport function keysOrdered(object, order) {\r\n return keys(object).sort(order);\r\n}\r\n/**\r\n * Returns a shallow copy of the object.\r\n *\r\n * @param object Source object\r\n * @return Shallow copy\r\n */\r\nexport function copy(object) {\r\n return Object.assign({}, object);\r\n}\r\n/**\r\n * Iterates through all properties of the object calling `fn` for each of them.\r\n *\r\n * @param object Source object\r\n * @param f Callback function\r\n */\r\nexport function each(object, f) {\r\n keys(object).forEach((key) => {\r\n f(key, object[key]);\r\n });\r\n}\r\n/**\r\n * Iterates through all properties of the object calling `fn` for each of them.\r\n *\r\n * If return value of the function evaluates to `false` further iteration is\r\n * cancelled.\r\n *\r\n * @param object Source object\r\n * @param fn Callback function\r\n */\r\nexport function eachContinue(object, fn) {\r\n for (let key in object) {\r\n if (hasKey(object, key)) {\r\n if (!fn(key, object[key])) {\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * Orders object properties using custom `ord` function and iterates through\r\n * them calling `fn` for each of them.\r\n *\r\n * @param object Source object\r\n * @param fn Callback function\r\n * @param order Ordering function\r\n */\r\nexport function eachOrdered(object, fn, ord) {\r\n $array.each(keysOrdered(object, ord), (key) => {\r\n fn(key, object[key]);\r\n });\r\n}\r\n/**\r\n * Checks if `object` has a specific `key`.\r\n *\r\n * @param object Source object\r\n * @param key Property name\r\n * @returns Has key?\r\n */\r\nexport function hasKey(object, key) {\r\n return {}.hasOwnProperty.call(object, key);\r\n}\r\n/**\r\n * Copies all properties of one object to the other, omitting undefined, but only if property in target object doesn't have a value set.\r\n *\r\n * @param fromObject Source object\r\n * @param toObject Target object\r\n * @return Updated target object\r\n */\r\nexport function softCopyProperties(source, target) {\r\n each(source, (key, value) => {\r\n // only if value is set\r\n //if ($type.hasValue(value) && !($type.hasValue((<any>target)[key]))) {\r\n if (value != null && target[key] == null) {\r\n target[key] = value;\r\n }\r\n });\r\n return target;\r\n}\r\n//# sourceMappingURL=Object.js.map","import { EventDispatcher } from \"./EventDispatcher\";\r\nimport { Disposer, MultiDisposer } from \"./Disposer\";\r\nimport * as $array from \"./Array\";\r\nimport * as $object from \"./Object\";\r\nimport * as $type from \"./Type\";\r\nfunction disposeSettings(settings) {\r\n $object.each(settings, (_key, value) => {\r\n if ($type.isObject(value) && typeof value.dispose === \"function\") {\r\n value.enableDispose = true;\r\n value.dispose();\r\n }\r\n });\r\n}\r\nexport class TemplateState {\r\n constructor(name, template, settings) {\r\n this._name = name;\r\n this._template = template;\r\n this._settings = settings;\r\n }\r\n _dispose() {\r\n disposeSettings(this._settings);\r\n }\r\n get(key, fallback) {\r\n const value = this._settings[key];\r\n if (value !== undefined) {\r\n return value;\r\n }\r\n else {\r\n return fallback;\r\n }\r\n }\r\n set(key, value) {\r\n this._settings[key] = value;\r\n // TODO maybe only do this if the value changed ?\r\n this._template._stateChanged(this._name);\r\n }\r\n remove(key) {\r\n delete this._settings[key];\r\n // TODO maybe only do this if the value changed ?\r\n this._template._stateChanged(this._name);\r\n }\r\n setAll(settings) {\r\n $object.keys(settings).forEach((key) => {\r\n this._settings[key] = settings[key];\r\n });\r\n this._template._stateChanged(this._name);\r\n }\r\n _apply(other, seen) {\r\n $object.each(this._settings, (key, value) => {\r\n if (!seen[key] && !other._userSettings[key]) {\r\n seen[key] = true;\r\n other.setRaw(key, value);\r\n }\r\n });\r\n }\r\n}\r\nexport class TemplateStates {\r\n constructor(template) {\r\n this._states = {};\r\n this._template = template;\r\n }\r\n _dispose() {\r\n $object.each(this._states, (_key, state) => {\r\n state._dispose();\r\n });\r\n }\r\n lookup(name) {\r\n return this._states[name];\r\n }\r\n create(name, settings) {\r\n const state = this._states[name];\r\n if (state) {\r\n state.setAll(settings);\r\n return state;\r\n }\r\n else {\r\n const state = new TemplateState(name, this._template, settings);\r\n this._states[name] = state;\r\n this._template._stateChanged(name);\r\n return state;\r\n }\r\n }\r\n remove(name) {\r\n delete this._states[name];\r\n this._template._stateChanged(name);\r\n }\r\n _apply(entity, state) {\r\n $object.each(this._states, (key, value) => {\r\n let seen = state.states[key];\r\n if (seen == null) {\r\n seen = state.states[key] = {};\r\n }\r\n const other = entity.states.create(key, {});\r\n value._apply(other, seen);\r\n });\r\n }\r\n}\r\nexport class TemplateAdapters {\r\n constructor() {\r\n this._callbacks = {};\r\n }\r\n add(key, callback) {\r\n let callbacks = this._callbacks[key];\r\n if (callbacks === undefined) {\r\n callbacks = this._callbacks[key] = [];\r\n }\r\n callbacks.push(callback);\r\n return new Disposer(() => {\r\n $array.removeFirst(callbacks, callback);\r\n if (callbacks.length === 0) {\r\n delete this._callbacks[key];\r\n }\r\n });\r\n }\r\n remove(key) {\r\n const callbacks = this._callbacks[key];\r\n if (callbacks !== undefined) {\r\n delete this._callbacks[key];\r\n }\r\n }\r\n _apply(entity) {\r\n const disposers = [];\r\n $object.each(this._callbacks, (key, callbacks) => {\r\n $array.each(callbacks, (callback) => {\r\n disposers.push(entity.adapters.add(key, callback));\r\n });\r\n });\r\n return new MultiDisposer(disposers);\r\n }\r\n}\r\n// TODO maybe extend from Properties ?\r\nexport class Template {\r\n constructor(settings, isReal) {\r\n this._disposed = false;\r\n this._privateSettings = {};\r\n // TODO code duplication with Properties\r\n this._settingEvents = {};\r\n this._privateSettingEvents = {};\r\n this._entities = [];\r\n this.states = new TemplateStates(this);\r\n this.adapters = new TemplateAdapters();\r\n this.events = new EventDispatcher();\r\n if (!isReal) {\r\n throw new Error(\"You cannot use `new Class()`, instead use `Class.new()`\");\r\n }\r\n this._settings = settings;\r\n }\r\n /**\r\n * Use this method to create an instance of this class.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/getting-started/#New_element_syntax} for more info\r\n * @param root Root element\r\n * @param settings Settings\r\n * @param template Template\r\n * @return Instantiated object\r\n */\r\n static new(settings) {\r\n return new Template(settings, true);\r\n }\r\n _dispose() {\r\n disposeSettings(this._settings);\r\n disposeSettings(this._privateSettings);\r\n }\r\n /**\r\n * Returns `true` if this element is disposed.\r\n *\r\n * @return Disposed\r\n */\r\n isDisposed() {\r\n return this._disposed;\r\n }\r\n /**\r\n * Disposes this object.\r\n */\r\n dispose() {\r\n if (!this._disposed) {\r\n this._disposed = true;\r\n this._dispose();\r\n }\r\n }\r\n _checkDisposed() {\r\n if (this._disposed) {\r\n throw new Error(\"Template is disposed\");\r\n }\r\n }\r\n /**\r\n * Array of all entities using this template.\r\n */\r\n get entities() {\r\n return this._entities;\r\n }\r\n get(key, fallback) {\r\n this._checkDisposed();\r\n const value = this._settings[key];\r\n if (value !== undefined) {\r\n return value;\r\n }\r\n else {\r\n return fallback;\r\n }\r\n }\r\n setRaw(key, value) {\r\n this._checkDisposed();\r\n this._settings[key] = value;\r\n }\r\n set(key, value) {\r\n this._checkDisposed();\r\n if (this._settings[key] !== value) {\r\n this.setRaw(key, value);\r\n this._entities.forEach((entity) => {\r\n entity._setTemplateProperty(this, key, value);\r\n });\r\n }\r\n }\r\n remove(key) {\r\n this._checkDisposed();\r\n if (key in this._settings) {\r\n delete this._settings[key];\r\n this._entities.forEach((entity) => {\r\n entity._removeTemplateProperty(key);\r\n });\r\n }\r\n }\r\n removeAll() {\r\n this._checkDisposed();\r\n $object.each(this._settings, (key, _value) => {\r\n this.remove(key);\r\n });\r\n }\r\n getPrivate(key, fallback) {\r\n this._checkDisposed();\r\n const value = this._privateSettings[key];\r\n if (value !== undefined) {\r\n return value;\r\n }\r\n else {\r\n return fallback;\r\n }\r\n }\r\n setPrivateRaw(key, value) {\r\n this._checkDisposed();\r\n this._privateSettings[key] = value;\r\n return value;\r\n }\r\n setPrivate(key, value) {\r\n this._checkDisposed();\r\n if (this._privateSettings[key] !== value) {\r\n this.setPrivateRaw(key, value);\r\n this._entities.forEach((entity) => {\r\n entity._setTemplatePrivateProperty(this, key, value);\r\n });\r\n }\r\n return value;\r\n }\r\n removePrivate(key) {\r\n this._checkDisposed();\r\n if (key in this._privateSettings) {\r\n delete this._privateSettings[key];\r\n this._entities.forEach((entity) => {\r\n entity._removeTemplatePrivateProperty(key);\r\n });\r\n }\r\n }\r\n setAll(value) {\r\n this._checkDisposed();\r\n $object.each(value, (key, value) => {\r\n this.set(key, value);\r\n });\r\n }\r\n // TODO code duplication with Properties\r\n on(key, callback) {\r\n this._checkDisposed();\r\n let events = this._settingEvents[key];\r\n if (events === undefined) {\r\n events = this._settingEvents[key] = [];\r\n }\r\n events.push(callback);\r\n return new Disposer(() => {\r\n $array.removeFirst(events, callback);\r\n if (events.length === 0) {\r\n delete this._settingEvents[key];\r\n }\r\n });\r\n }\r\n // TODO code duplication with Properties\r\n onPrivate(key, callback) {\r\n this._checkDisposed();\r\n let events = this._privateSettingEvents[key];\r\n if (events === undefined) {\r\n events = this._privateSettingEvents[key] = [];\r\n }\r\n events.push(callback);\r\n return new Disposer(() => {\r\n $array.removeFirst(events, callback);\r\n if (events.length === 0) {\r\n delete this._privateSettingEvents[key];\r\n }\r\n });\r\n }\r\n _apply(entity, state) {\r\n this._checkDisposed();\r\n const disposers = [];\r\n $object.each(this._settingEvents, (key, events) => {\r\n $array.each(events, (event) => {\r\n disposers.push(entity.on(key, event));\r\n });\r\n });\r\n $object.each(this._privateSettingEvents, (key, events) => {\r\n $array.each(events, (event) => {\r\n disposers.push(entity.onPrivate(key, event));\r\n });\r\n });\r\n this.states._apply(entity, state);\r\n disposers.push(this.adapters._apply(entity));\r\n disposers.push(entity.events.copyFrom(this.events));\r\n return new MultiDisposer(disposers);\r\n }\r\n _setObjectTemplate(entity) {\r\n this._checkDisposed();\r\n this._entities.push(entity);\r\n }\r\n _removeObjectTemplate(entity) {\r\n //this._checkDisposed();\r\n $array.remove(this._entities, entity);\r\n }\r\n _stateChanged(name) {\r\n this._checkDisposed();\r\n this._entities.forEach((entity) => {\r\n entity._applyStateByKey(name);\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=Template.js.map","/**\r\n * @ignore\r\n */\r\nexport function compare(left, right) {\r\n if (left === right) {\r\n return 0;\r\n }\r\n else if (left < right) {\r\n return -1;\r\n }\r\n else {\r\n return 1;\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function compareArray(left, right, f) {\r\n const leftLength = left.length;\r\n const rightLength = right.length;\r\n const length = Math.min(leftLength, rightLength);\r\n for (let i = 0; i < length; ++i) {\r\n const order = f(left[i], right[i]);\r\n if (order !== 0) {\r\n return order;\r\n }\r\n }\r\n return compare(leftLength, rightLength);\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function reverse(order) {\r\n if (order < 0) {\r\n return 1;\r\n }\r\n else if (order > 0) {\r\n return -1;\r\n }\r\n else {\r\n return 0;\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function compareNumber(a, b) {\r\n if (a === b) {\r\n return 0;\r\n }\r\n else if (a < b) {\r\n return -1;\r\n }\r\n else {\r\n return 1;\r\n }\r\n}\r\n//# sourceMappingURL=Order.js.map","import { Template } from \"./util/Template\";\r\nimport * as $order from \"./util/Order\";\r\nimport * as $array from \"./util/Array\";\r\n/**\r\n * A base class for an amCharts theme.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/themes/} for more info\r\n * @important\r\n */\r\nexport class Theme {\r\n constructor(root, isReal) {\r\n this._rules = {};\r\n this._root = root;\r\n if (!isReal) {\r\n throw new Error(\"You cannot use `new Class()`, instead use `Class.new()`\");\r\n }\r\n }\r\n /**\r\n * Use this method to create an instance of this class.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/getting-started/#New_element_syntax} for more info\r\n * @param root Root element\r\n * @param settings Settings\r\n * @param template Template\r\n * @return Instantiated object\r\n */\r\n static new(root) {\r\n const x = (new this(root, true));\r\n x.setupDefaultRules();\r\n return x;\r\n }\r\n setupDefaultRules() { }\r\n /**\r\n * Looks up the rules for a specific theme class.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/themes/} for more info\r\n * @param themeClass Theme class\r\n * @return Array<IRule<A>>\r\n */\r\n _lookupRules(themeClass) {\r\n return this._rules[themeClass];\r\n }\r\n /**\r\n * Creates a [[Template]] for specific theme class and tags.\r\n *\r\n * NOTE: the difference from `rule()` is that `ruleRaw()` does not do any\r\n * type checks.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/themes/} for more info\r\n * @param themeClass Theme class\r\n * @param themeTags Theme tags\r\n * @return Template\r\n */\r\n ruleRaw(themeClass, themeTags = []) {\r\n let rules = this._rules[themeClass];\r\n if (!rules) {\r\n rules = this._rules[themeClass] = [];\r\n }\r\n themeTags.sort($order.compare);\r\n const { index, found } = $array.getSortedIndex(rules, (x) => {\r\n const order = $order.compare(x.tags.length, themeTags.length);\r\n if (order === 0) {\r\n return $order.compareArray(x.tags, themeTags, $order.compare);\r\n }\r\n else {\r\n return order;\r\n }\r\n });\r\n if (found) {\r\n return rules[index].template;\r\n }\r\n else {\r\n const template = Template.new({});\r\n rules.splice(index, 0, {\r\n tags: themeTags,\r\n template,\r\n });\r\n return template;\r\n }\r\n }\r\n /**\r\n * Creates a [[Template]] for specific theme class and tags.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/themes/} for more info\r\n * @param themeClass Theme class\r\n * @param themeTags Theme tags\r\n * @return Template\r\n */\r\n rule(themeClass, themeTags = []) {\r\n return this.ruleRaw(themeClass, themeTags);\r\n }\r\n}\r\n//# sourceMappingURL=Theme.js.map","/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Represents a relative value (percent).\r\n *\r\n * The Percent object, can be instantiated using two ways:\r\n *\r\n * * Via `new Percent(X)`.\r\n * * Via `am5.percent(X)`.\r\n *\r\n * You can also use shortcut functions for `0%`, `50%`, and `100%`:\r\n * * `am5.p0`\r\n * * `am5.p50`\r\n * * `am5.p100`\r\n */\r\nexport class Percent {\r\n /**\r\n * Constructor.\r\n *\r\n * @param percent Percent value\r\n */\r\n constructor(percent) {\r\n this._value = percent;\r\n }\r\n /**\r\n * Relative value.\r\n *\r\n * E.g. 100% is 1, 50% is 0.5, etc.\r\n *\r\n * This is useful to apply transformations to other values. E.g.:\r\n *\r\n * ```TypeScript\r\n * let value = 256;\r\n * let percent = new am5.p50;\r\n * console.log(value * percent.value); // outputs 128\r\n * ```\r\n * ```JavaScript\r\n * var value = 256;\r\n * var percent = new am5.p50;\r\n * console.log(value * percent.value); // outputs 128\r\n * ```\r\n *\r\n * Alternatively, you can use `am5.percent()` helper function:\r\n *\r\n * ```TypeScript\r\n * let value = 256;\r\n * let percent = am5.p50;\r\n * console.log(value * percent.value); // outputs 128\r\n * ```\r\n * ```JavaScript\r\n * var value = 256;\r\n * var percent = am5.p50;\r\n * console.log(value * percent.value); // outputs 128\r\n * ```\r\n *\r\n * @readonly\r\n * @return Relative value\r\n */\r\n get value() {\r\n return this._value / 100;\r\n }\r\n /**\r\n * Value in percent.\r\n *\r\n * @readonly\r\n * @return Percent\r\n */\r\n get percent() {\r\n return this._value;\r\n }\r\n toString() {\r\n return \"\" + this._value + \"%\";\r\n }\r\n interpolate(min, max) {\r\n return min + (this.value * (max - min));\r\n }\r\n static normalize(percent, min, max) {\r\n if (percent instanceof Percent) {\r\n return percent;\r\n }\r\n else {\r\n if (min === max) {\r\n return new Percent(0);\r\n }\r\n else {\r\n return new Percent(Math.min(Math.max((percent - min) * (1 / (max - min)), 0), 1) * 100);\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * Converts numeric percent value to a proper [[Percent]] object.\r\n *\r\n * ```TypeScript\r\n * pieSeries.set(\"radius\", am5.percent(80));\r\n * ```\r\n * ```JavaScript\r\n * pieSeries.set(\"radius\", am5.percent(80));\r\n * ```\r\n *\r\n * @param value Percent\r\n * @return Percent object\r\n */\r\nexport function percent(value) {\r\n return new Percent(value);\r\n}\r\n/**\r\n * A shortcut function to `am5.percent(0)`.\r\n */\r\nexport const p0 = percent(0);\r\n/**\r\n * A shortcut function to `am5.percent(100)`.\r\n */\r\nexport const p100 = percent(100);\r\n/**\r\n * A shortcut function to `am5.percent(50)`.\r\n */\r\nexport const p50 = percent(50);\r\n/**\r\n * Checks if value is a [[Percent]] object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Input value\r\n * @return Is percent?\r\n */\r\nexport function isPercent(value) {\r\n return value instanceof Percent;\r\n}\r\n//# sourceMappingURL=Percent.js.map","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","import { __awaiter } from \"tslib\";\r\nimport { Percent } from \"./Percent\";\r\nimport { Color } from \"./Color\";\r\nimport { EventDispatcher } from \"./EventDispatcher\";\r\nimport * as $object from \"./Object\";\r\n/**\r\n * @ignore\r\n */\r\nexport function waitForAnimations(animations) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n if (animations !== undefined) {\r\n const promises = [];\r\n $object.each(animations, (_, animation) => {\r\n promises.push(animation.waitForStop());\r\n });\r\n yield Promise.all(promises);\r\n }\r\n });\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function normalize(value, min, max) {\r\n if (min === max) {\r\n return 0;\r\n }\r\n else {\r\n return Math.min(Math.max((value - min) * (1 / (max - min)), 0), 1);\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function range(diff, from, to) {\r\n return from + (diff * (to - from));\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function defaultInterpolate(diff, from, to) {\r\n if (diff >= 1) {\r\n return to;\r\n }\r\n else {\r\n return from;\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function percentInterpolate(diff, from, to) {\r\n return new Percent(range(diff, from.percent, to.percent));\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function colorInterpolate(diff, from, to) {\r\n return Color.interpolate(diff, from, to);\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function getInterpolate(from, to) {\r\n if (typeof from === \"number\" && typeof to === \"number\") {\r\n return range;\r\n }\r\n if (from instanceof Percent && to instanceof Percent) {\r\n return percentInterpolate;\r\n }\r\n if (from instanceof Color && to instanceof Color) {\r\n return colorInterpolate;\r\n }\r\n return defaultInterpolate;\r\n}\r\nexport var AnimationState;\r\n(function (AnimationState) {\r\n AnimationState[AnimationState[\"Stopped\"] = 0] = \"Stopped\";\r\n AnimationState[AnimationState[\"Playing\"] = 1] = \"Playing\";\r\n AnimationState[AnimationState[\"Paused\"] = 2] = \"Paused\";\r\n})(AnimationState || (AnimationState = {}));\r\n/**\r\n * @ignore\r\n */\r\nexport class AnimationTime {\r\n constructor(entity, duration) {\r\n this._playingDuration = null;\r\n this._startingTime = null;\r\n this._current = 0;\r\n this._from = 0;\r\n this._to = 0;\r\n this.events = new EventDispatcher();\r\n this._entity = entity;\r\n this._duration = duration;\r\n }\r\n _stopEvent() {\r\n const type = \"stopped\";\r\n if (this.events.isEnabled(type)) {\r\n this.events.dispatch(type, { type: type, target: this });\r\n }\r\n }\r\n _runAnimation(currentTime) {\r\n if (this._playingDuration !== null) {\r\n if (this._startingTime === null) {\r\n this._startingTime = currentTime;\r\n return AnimationState.Playing;\r\n }\r\n else {\r\n const diff = (currentTime - this._startingTime) / this._playingDuration;\r\n if (diff >= 1) {\r\n this._playingDuration = null;\r\n this._startingTime = null;\r\n this._from = this._to;\r\n this._current = this._to;\r\n this._entity.markDirty();\r\n this._stopEvent();\r\n const type = \"ended\";\r\n if (this.events.isEnabled(type)) {\r\n this.events.dispatch(type, { type: type, target: this });\r\n }\r\n return AnimationState.Stopped;\r\n }\r\n else {\r\n this._current = range(diff, this._from, this._to);\r\n this._entity.markDirty();\r\n const type = \"progress\";\r\n if (this.events.isEnabled(type)) {\r\n this.events.dispatch(type, { type: type, target: this, progress: diff });\r\n }\r\n return AnimationState.Playing;\r\n }\r\n }\r\n }\r\n else {\r\n return AnimationState.Stopped;\r\n }\r\n }\r\n _play() {\r\n this._from = this._current;\r\n if (this._playingDuration === null) {\r\n this._entity._root._addAnimation(this);\r\n const type = \"started\";\r\n if (this.events.isEnabled(type)) {\r\n this.events.dispatch(type, { type: type, target: this });\r\n }\r\n }\r\n else {\r\n this._startingTime = null;\r\n }\r\n this._playingDuration = Math.abs(this._to - this._from) * this._duration;\r\n }\r\n get duration() {\r\n return this._duration;\r\n }\r\n set duration(value) {\r\n if (this._duration !== value) {\r\n this._duration = value;\r\n if (value === 0) {\r\n this.jumpTo(this._to);\r\n }\r\n else if (this._current !== this._to) {\r\n this._play();\r\n }\r\n }\r\n }\r\n get current() {\r\n if (this.easing) {\r\n return this.easing(this._current);\r\n }\r\n else {\r\n return this._current;\r\n }\r\n }\r\n stop() {\r\n this.jumpTo(this._current);\r\n }\r\n jumpTo(value) {\r\n if (this._current !== value) {\r\n this._entity.markDirty();\r\n }\r\n if (this._playingDuration !== null) {\r\n this._stopEvent();\r\n }\r\n this._playingDuration = null;\r\n this._startingTime = null;\r\n this._current = value;\r\n this._from = value;\r\n this._to = value;\r\n }\r\n tweenTo(value) {\r\n if (this._current === value || this._duration === 0) {\r\n this.jumpTo(value);\r\n }\r\n else {\r\n if (this._to !== value) {\r\n this._to = value;\r\n this._play();\r\n }\r\n }\r\n }\r\n}\r\n/*export class AnimationValue extends AnimationTime {\r\n public _min: number;\r\n public _max: number;\r\n\r\n constructor(entity: Entity, duration: number, min: number, max: number) {\r\n super(entity, duration);\r\n this._min = min;\r\n this._max = max;\r\n }\r\n\r\n public get min(): number {\r\n return this._min;\r\n }\r\n\r\n public set min(value: number) {\r\n if (this._min !== value) {\r\n this._min = value;\r\n this._entity.markDirty();\r\n }\r\n }\r\n\r\n public get max(): number {\r\n return this._max;\r\n }\r\n\r\n public set max(value: number) {\r\n if (this._max !== value) {\r\n this._max = value;\r\n this._entity.markDirty();\r\n }\r\n }\r\n\r\n public currentValue(): number {\r\n return range(super.currentTime(), this._min, this._max);\r\n }\r\n\r\n public jumpToValue(value: number) {\r\n super.jumpToTime(normalize(value, this._min, this._max));\r\n }\r\n\r\n public tweenToValue(value: number) {\r\n super.tweenToTime(normalize(value, this._min, this._max));\r\n }\r\n}\r\n*/\r\n//# sourceMappingURL=Animation.js.map","import * as $type from \"./Type\";\r\nimport * as $array from \"./Array\";\r\nimport * as $object from \"./Object\";\r\nimport { Disposer, DisposerClass } from \"./Disposer\";\r\n/**\r\n * ============================================================================\r\n * DOM FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Execute a function when DOM is ready.\r\n *\r\n * @since 5.0.2\r\n * @param f Callback\r\n */\r\nexport function ready(f) {\r\n if (document.readyState !== \"loading\") {\r\n f();\r\n }\r\n else {\r\n const listener = () => {\r\n if (document.readyState !== \"loading\") {\r\n document.removeEventListener(\"readystatechange\", listener);\r\n f();\r\n }\r\n };\r\n document.addEventListener(\"readystatechange\", listener);\r\n }\r\n}\r\n/**\r\n * Removes a DOM element.\r\n * @param el Target element\r\n */\r\nexport function removeElement(el) {\r\n if (el.parentNode) {\r\n el.parentNode.removeChild(el);\r\n }\r\n}\r\n/**\r\n * Function that adds a disposable event listener directly to a DOM element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dom A DOM element to add event to\r\n * @param type Event type\r\n * @param listener Event listener\r\n * @returns Disposable event\r\n */\r\nexport function addEventListener(dom, type, listener, options) {\r\n //@todo proper type check for options: EventListenerOptions | boolean (TS for some reason gives error on passive parameter)\r\n dom.addEventListener(type, listener, options || false);\r\n return new Disposer(() => {\r\n dom.removeEventListener(type, listener, options || false);\r\n });\r\n}\r\n/**\r\n * Function that adds an event listener which is triggered when the browser's zoom changes.\r\n *\r\n * @param listener Event listener\r\n * @returns Disposable event\r\n */\r\nexport function onZoom(listener) {\r\n // TODO use matchMedia instead ?\r\n return addEventListener(window, \"resize\", (_ev) => {\r\n listener();\r\n });\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function supports(cap) {\r\n switch (cap) {\r\n case \"touchevents\":\r\n //return \"ontouchstart\" in document.documentElement;\r\n return window.hasOwnProperty(\"TouchEvent\");\r\n case \"pointerevents\":\r\n return window.hasOwnProperty(\"PointerEvent\");\r\n case \"mouseevents\":\r\n return window.hasOwnProperty(\"MouseEvent\");\r\n case \"wheelevents\":\r\n return window.hasOwnProperty(\"WheelEvent\");\r\n case \"keyboardevents\":\r\n return window.hasOwnProperty(\"KeyboardEvent\");\r\n }\r\n return false;\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function getPointerId(event) {\r\n let id = event.pointerId || 0;\r\n return id;\r\n}\r\n/**\r\n * Removes focus from any element by shifting focus to body.\r\n *\r\n * @ignore\r\n */\r\nexport function blur() {\r\n if (document.activeElement && document.activeElement != document.body) {\r\n if (document.activeElement.blur) {\r\n document.activeElement.blur();\r\n }\r\n else {\r\n let input = document.createElement(\"button\");\r\n input.style.position = \"fixed\";\r\n input.style.top = \"0px\";\r\n input.style.left = \"-10000px\";\r\n document.body.appendChild(input);\r\n input.focus();\r\n input.blur();\r\n document.body.removeChild(input);\r\n }\r\n }\r\n}\r\n/**\r\n * Focuses element.\r\n *\r\n * @ignore\r\n */\r\nexport function focus(el) {\r\n if (el) {\r\n el.focus();\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function getRendererEvent(key) {\r\n if (supports(\"pointerevents\")) {\r\n return key;\r\n }\r\n else if (supports(\"touchevents\")) {\r\n switch (key) {\r\n case \"pointerover\": return \"touchstart\";\r\n case \"pointerout\": return \"touchend\";\r\n case \"pointerleave\": return \"touchend\";\r\n case \"pointerdown\": return \"touchstart\";\r\n case \"pointermove\": return \"touchmove\";\r\n case \"pointerup\": return \"touchend\";\r\n case \"click\": return \"click\";\r\n case \"dblclick\": return \"dblclick\";\r\n }\r\n }\r\n else if (supports(\"mouseevents\")) {\r\n switch (key) {\r\n case \"pointerover\": return \"mouseover\";\r\n case \"pointerout\": return \"mouseout\";\r\n case \"pointerleave\": return \"mouseleave\";\r\n case \"pointerdown\": return \"mousedown\";\r\n case \"pointermove\": return \"mousemove\";\r\n case \"pointerup\": return \"mouseup\";\r\n case \"click\": return \"click\";\r\n case \"dblclick\": return \"dblclick\";\r\n }\r\n }\r\n return key;\r\n}\r\n/**\r\n * Determines if pointer event originated from a touch pointer or mouse.\r\n *\r\n * @param ev Original event\r\n * @return Touch pointer?\r\n */\r\nexport function isTouchEvent(ev) {\r\n if (typeof Touch !== \"undefined\" && ev instanceof Touch) {\r\n return true;\r\n }\r\n else if (typeof PointerEvent !== \"undefined\" && ev instanceof PointerEvent && ev.pointerType != null) {\r\n switch (ev.pointerType) {\r\n case \"touch\":\r\n case \"pen\":\r\n case 2:\r\n return true;\r\n case \"mouse\":\r\n case 4:\r\n return false;\r\n default:\r\n return !(ev instanceof MouseEvent);\r\n }\r\n }\r\n else if (ev.type != null) {\r\n if (ev.type.match(/^mouse/)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n/**\r\n * Sets style property on DOM element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\nexport function setStyle(dom, property, value) {\r\n dom.style[property] = value;\r\n}\r\n/**\r\n * Gets style property value on a DOM element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\nexport function getStyle(dom, property) {\r\n return dom.style[property];\r\n}\r\n/**\r\n * Gets the target of the event, works for shadow DOM too.\r\n */\r\nexport function getEventTarget(event) {\r\n if (event.composedPath) {\r\n const path = event.composedPath();\r\n if (path.length === 0) {\r\n return null;\r\n }\r\n else {\r\n return path[0];\r\n }\r\n }\r\n else {\r\n return event.target;\r\n }\r\n}\r\n/**\r\n * Checks of element `a` contains element `b`.\r\n *\r\n * @param a Aleged ascendant\r\n * @param b Aleged descendant\r\n * @return Contains?\r\n */\r\nexport function contains(a, b) {\r\n let cursor = b;\r\n while (true) {\r\n if (a === cursor) {\r\n return true;\r\n }\r\n else if (cursor.parentNode === null) {\r\n // TODO better ShadowRoot detection\r\n if (cursor.host == null) {\r\n return false;\r\n }\r\n else {\r\n cursor = cursor.host;\r\n }\r\n }\r\n else {\r\n cursor = cursor.parentNode;\r\n }\r\n }\r\n}\r\n/**\r\n * Returns `true` if pointer event originated on an element within Root.\r\n *\r\n * @since 5.2.8\r\n * @param event Event\r\n * @param target Target element\r\n */\r\nexport function isLocalEvent(event, target) {\r\n return event.target && contains(target.root.dom, event.target);\r\n}\r\n/**\r\n * Disables or enables interactivity of a DOM element.\r\n *\r\n * @param target Target element\r\n * @param interactive Interactive?\r\n */\r\nexport function setInteractive(target, interactive) {\r\n if (interactive) {\r\n target.style.pointerEvents = \"auto\";\r\n }\r\n else {\r\n target.style.pointerEvents = \"none\";\r\n }\r\n}\r\n/**\r\n * Returns a normalized key name from a keyboard event.\r\n *\r\n * @ignore\r\n */\r\nexport function getEventKey(event) {\r\n if (event.key !== undefined) {\r\n return event.key;\r\n }\r\n switch (event.keyCode) {\r\n case 9: return \"Tab\";\r\n case 13: return \"Enter\";\r\n case 16: return \"Shift\";\r\n case 17: return \"Control\";\r\n case 27: return \"Escape\";\r\n case 32: return \" \";\r\n case 37: return \"ArrowLeft\";\r\n case 38: return \"ArrowUp\";\r\n case 39: return \"ArrowRight\";\r\n case 40: return \"ArrowDown\";\r\n case 46: return \"Delete\";\r\n }\r\n return \"\" + event.keyCode;\r\n}\r\n/**\r\n * Returns the shadow root of the element or null\r\n *\r\n * @param a Node\r\n * @return Root\r\n */\r\nexport function getShadowRoot(a) {\r\n let cursor = a;\r\n while (true) {\r\n if (cursor.parentNode === null) {\r\n // TODO better ShadowRoot detection\r\n if (cursor.host != null) {\r\n return cursor;\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n else {\r\n cursor = cursor.parentNode;\r\n }\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nlet rootStylesheet;\r\n/**\r\n * @ignore Exclude from docs\r\n */\r\nfunction createStylesheet(element, text, nonce = \"\") {\r\n // TODO use createElementNS ?\r\n const e = document.createElement(\"style\");\r\n e.type = \"text/css\";\r\n if (nonce != \"\") {\r\n e.setAttribute(\"nonce\", nonce);\r\n }\r\n e.textContent = text;\r\n if (element === null) {\r\n document.head.appendChild(e);\r\n }\r\n else {\r\n element.appendChild(e);\r\n }\r\n return e;\r\n}\r\n/**\r\n * @ignore\r\n */\r\nfunction getStylesheet(element, nonce = \"\") {\r\n if (element === null) {\r\n if (rootStylesheet == null) {\r\n // TODO use createElementNS ?\r\n const e = document.createElement(\"style\");\r\n e.type = \"text/css\";\r\n if (nonce != \"\") {\r\n e.setAttribute(\"nonce\", nonce);\r\n }\r\n document.head.appendChild(e);\r\n rootStylesheet = e.sheet;\r\n }\r\n return rootStylesheet;\r\n }\r\n else {\r\n // TODO use createElementNS ?\r\n const e = document.createElement(\"style\");\r\n e.type = \"text/css\";\r\n if (nonce != \"\") {\r\n e.setAttribute(\"nonce\", nonce);\r\n }\r\n element.appendChild(e);\r\n return e.sheet;\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nfunction appendStylesheet(root, selector) {\r\n const index = root.cssRules.length;\r\n root.insertRule(selector + \"{}\", index);\r\n return root.cssRules[index];\r\n}\r\n/**\r\n * Defines a class for a CSS rule.\r\n *\r\n * Can be used to dynamically add CSS to the document.\r\n */\r\nexport class StyleRule extends DisposerClass {\r\n /**\r\n * Constructor.\r\n *\r\n * @param selector CSS selector\r\n * @param styles An object of style attribute - value pairs\r\n */\r\n constructor(element, selector, styles, nonce = \"\") {\r\n super();\r\n this._root = getStylesheet(element, nonce);\r\n try {\r\n this._rule = appendStylesheet(this._root, selector);\r\n }\r\n catch (err) {\r\n // Create an empty rule on failed selectors\r\n this._rule = appendStylesheet(this._root, \":not(*)\");\r\n }\r\n $object.each(styles, (key, value) => {\r\n this.setStyle(key, value);\r\n });\r\n }\r\n /**\r\n * A CSS selector text.\r\n *\r\n * E.g.: `.myClass p`\r\n *\r\n * @param selector CSS selector\r\n */\r\n set selector(selector) {\r\n this._rule.selectorText = selector;\r\n }\r\n /**\r\n * @return CSS selector\r\n */\r\n get selector() {\r\n return this._rule.selectorText;\r\n }\r\n // TODO test this\r\n _dispose() {\r\n // TODO a bit hacky\r\n const index = $array.indexOf(this._root.cssRules, this._rule);\r\n if (index === -1) {\r\n throw new Error(\"Could not dispose StyleRule\");\r\n }\r\n else {\r\n // TODO if it's empty remove it from the DOM ?\r\n this._root.deleteRule(index);\r\n }\r\n }\r\n /**\r\n * Sets the same style properties with browser-specific prefixes.\r\n *\r\n * @param name Attribute name\r\n * @param value Attribute value\r\n */\r\n _setVendorPrefixName(name, value) {\r\n const style = this._rule.style;\r\n style.setProperty(\"-webkit-\" + name, value, \"\");\r\n style.setProperty(\"-moz-\" + name, value, \"\");\r\n style.setProperty(\"-ms-\" + name, value, \"\");\r\n style.setProperty(\"-o-\" + name, value, \"\");\r\n style.setProperty(name, value, \"\");\r\n }\r\n /**\r\n * Sets a value for specific style attribute.\r\n *\r\n * @param name Attribute\r\n * @param value Value\r\n */\r\n setStyle(name, value) {\r\n if (name === \"transition\") {\r\n this._setVendorPrefixName(name, value);\r\n }\r\n else {\r\n this._rule.style.setProperty(name, value, \"\");\r\n }\r\n }\r\n}\r\n/**\r\n * Defines a class for an entire CSS style sheet.\r\n *\r\n * Can be used to dynamically add CSS to the document.\r\n */\r\nexport class StyleSheet extends DisposerClass {\r\n /**\r\n * Constructor.\r\n *\r\n * @param text CSS stylesheet\r\n */\r\n constructor(element, text, nonce = \"\") {\r\n super();\r\n this._element = createStylesheet(element, text, nonce);\r\n }\r\n _dispose() {\r\n if (this._element.parentNode) {\r\n this._element.parentNode.removeChild(this._element);\r\n }\r\n }\r\n}\r\n/**\r\n * Adds a class name to an HTML or SVG element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param element Element\r\n * @param className Class name to add\r\n */\r\nexport function addClass(element, className) {\r\n if (!element) {\r\n return;\r\n }\r\n if (element.classList) {\r\n const classes = className.split(\" \");\r\n $array.each(classes, (name) => {\r\n element.classList.add(name);\r\n });\r\n }\r\n else {\r\n let currentClassName = element.getAttribute(\"class\");\r\n if (currentClassName) {\r\n element.setAttribute(\"class\", currentClassName.split(\" \").filter((item) => {\r\n return item !== className;\r\n }).join(\" \") + \" \" + className);\r\n }\r\n else {\r\n element.setAttribute(\"class\", className);\r\n }\r\n }\r\n}\r\n/**\r\n * Removes a class name from an HTML or SVG element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param element Element\r\n * @param className Class name to add\r\n */\r\nexport function removeClass(element, className) {\r\n if (!element) {\r\n return;\r\n }\r\n if (element.classList) {\r\n element.classList.remove(className);\r\n }\r\n else {\r\n let currentClassName = element.getAttribute(\"class\");\r\n if (currentClassName) {\r\n element.setAttribute(\"class\", currentClassName.split(\" \").filter((item) => {\r\n return item !== className;\r\n }).join(\" \"));\r\n }\r\n }\r\n}\r\n// /**\r\n// * Applies a set of styles to an element. Stores the original styles so they\r\n// * can be restored later.\r\n// *\r\n// * @ignore\r\n// * @param io Element\r\n// */\r\n// export function prepElementForDrag(dom: HTMLElement): void {\r\n// \t// @todo: save current values\r\n// \t// Define possible props\r\n// \tlet props = [\r\n// \t\t\"touchAction\", \"webkitTouchAction\", \"MozTouchAction\", \"MSTouchAction\", \"msTouchAction\", \"oTouchAction\",\r\n// \t\t\"userSelect\", \"webkitUserSelect\", \"MozUserSelect\", \"MSUserSelect\", \"msUserSelect\", \"oUserSelect\",\r\n// \t\t\"touchSelect\", \"webkitTouchSelect\", \"MozTouchSelect\", \"MSTouchSelect\", \"msTouchSelect\", \"oTouchSelect\",\r\n// \t\t\"touchCallout\", \"webkitTouchCallout\", \"MozTouchCallout\", \"MSTouchCallout\", \"msTouchCallout\", \"oTouchCallout\",\r\n// \t\t\"contentZooming\", \"webkitContentZooming\", \"MozContentZooming\", \"MSContentZooming\", \"msContentZooming\", \"oContentZooming\",\r\n// \t\t\"userDrag\", \"webkitUserDrag\", \"MozUserDrag\", \"MSUserDrag\", \"msUserDrag\", \"oUserDrag\"\r\n// \t];\r\n// \tfor (let i = 0; i < props.length; i++) {\r\n// \t\tif (props[i] in dom.style) {\r\n// \t\t\tsetStyle(dom, props[i], \"none\");\r\n// \t\t}\r\n// \t}\r\n// \t// Remove iOS-specific selection;\r\n// \tsetStyle(dom, \"tapHighlightColor\", \"rgba(0, 0, 0, 0)\");\r\n// }\r\n// /**\r\n// * Restores replaced styles\r\n// *\r\n// * @ignore\r\n// * @param io Element\r\n// */\r\n// export function unprepElementForDrag(dom: HTMLElement): void {\r\n// \t// Define possible props\r\n// \tlet props = [\r\n// \t\t\"touchAction\", \"webkitTouchAction\", \"MozTouchAction\", \"MSTouchAction\", \"msTouchAction\", \"oTouchAction\",\r\n// \t\t\"userSelect\", \"webkitUserSelect\", \"MozUserSelect\", \"MSUserSelect\", \"msUserSelect\", \"oUserSelect\",\r\n// \t\t\"touchSelect\", \"webkitTouchSelect\", \"MozTouchSelect\", \"MSTouchSelect\", \"msTouchSelect\", \"oTouchSelect\",\r\n// \t\t\"touchCallout\", \"webkitTouchCallout\", \"MozTouchCallout\", \"MSTouchCallout\", \"msTouchCallout\", \"oTouchCallout\",\r\n// \t\t\"contentZooming\", \"webkitContentZooming\", \"MozContentZooming\", \"MSContentZooming\", \"msContentZooming\", \"oContentZooming\",\r\n// \t\t\"userDrag\", \"webkitUserDrag\", \"MozUserDrag\", \"MSUserDrag\", \"msUserDrag\", \"oUserDrag\"\r\n// \t];\r\n// \tfor (let i = 0; i < props.length; i++) {\r\n// \t\tif (props[i] in dom.style) {\r\n// \t\t\tsetStyle(dom, props[i], \"\");\r\n// \t\t}\r\n// \t}\r\n// \t// Remove iOS-specific selection;\r\n// \tsetStyle(dom, \"tapHighlightColor\", \"\");\r\n// }\r\n/**\r\n * Returns `true` if the current device is running iOS.\r\n *\r\n * @return Is iOS?\r\n */\r\nexport function iOS() {\r\n return /apple/i.test(navigator.vendor) && \"ontouchend\" in document;\r\n}\r\n/**\r\n * Returns a safe canvas resolution for the current device.\r\n * Returns `1` on iOS to avoid memory issues, `undefined` otherwise.\r\n *\r\n * @return Resolution or undefined\r\n */\r\nexport function getSafeResolution() {\r\n return iOS() ? 1 : undefined;\r\n}\r\n/**\r\n * Converts a value that can be a number or [[Percent]] to an absolute number\r\n * relative to the given full value.\r\n *\r\n * @param percent Input value (number or Percent)\r\n * @param full Full reference value\r\n * @return Absolute value\r\n */\r\nexport function relativeToValue(percent, full) {\r\n if ($type.isNumber(percent)) {\r\n return percent;\r\n }\r\n else if (percent != null && $type.isNumber(percent.value) && $type.isNumber(full)) {\r\n return full * percent.value;\r\n }\r\n else {\r\n return 0;\r\n }\r\n}\r\n/**\r\n * Returns number of decimals\r\n *\r\n * @ignore Exclude from docs\r\n * @param number Input number\r\n * @return Number of decimals\r\n */\r\nexport function decimalPlaces(number) {\r\n let match = ('' + number).match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\r\n if (!match) {\r\n return 0;\r\n }\r\n return Math.max(0, (match[1] ? match[1].length : 0) - (match[2] ? +match[2] : 0));\r\n}\r\n/**\r\n * ============================================================================\r\n * STRING FORMATTING FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Pads a string with additional characters to certain length.\r\n *\r\n * @param value A numeric value\r\n * @param len Result string length in characters\r\n * @param char A character to use for padding\r\n * @return Padded value as string\r\n */\r\nexport function padString(value, len = 0, char = \"0\") {\r\n if (typeof value !== \"string\") {\r\n value = value.toString();\r\n }\r\n return len > value.length ? Array(len - value.length + 1).join(char) + value : value;\r\n}\r\n/**\r\n * Removes whitespace from the beginning of a string.\r\n *\r\n * @param text Source string\r\n * @return Trimmed string\r\n */\r\nexport function trimLeft(text) {\r\n return text.replace(/^[\\s]*/, \"\");\r\n}\r\n/**\r\n * Removes whitespace from the end of a string.\r\n *\r\n * @param text Source string\r\n * @return Trimmed string\r\n */\r\nexport function trimRight(text) {\r\n return text.replace(/[\\s]*$/, \"\");\r\n}\r\n/**\r\n * Removes whitespace from both ends of a string.\r\n *\r\n * @param text Source string\r\n * @return Trimmed string\r\n */\r\nexport function trim(text) {\r\n return trimLeft(trimRight(text));\r\n}\r\n/**\r\n * Truncates a string to a maximum length, appending an ellipsis.\r\n *\r\n * @param text Source string\r\n * @param maxLength Maximum character length\r\n * @param breakWords Allow breaking mid-word?\r\n * @param ellipsis Ellipsis string to append\r\n * @return Truncated string\r\n */\r\nexport function truncateTextWithEllipsis(text, maxLength, breakWords = false, ellipsis = \"...\") {\r\n if (text.length > maxLength) {\r\n // Find the last non-alphanumeric character before maxLength\r\n let lastNonAlphanumericIndex = maxLength - 1;\r\n while (lastNonAlphanumericIndex >= 0 && text.charAt(lastNonAlphanumericIndex).match(/\\w/)) {\r\n lastNonAlphanumericIndex--;\r\n }\r\n if (lastNonAlphanumericIndex >= 0 && breakWords == false) {\r\n return text.substring(0, lastNonAlphanumericIndex + 1) + '...';\r\n }\r\n else {\r\n // If no non-alphanumeric character found, truncate without breaking words\r\n return text.substring(0, maxLength) + ellipsis;\r\n }\r\n }\r\n else {\r\n return text;\r\n }\r\n}\r\n/**\r\n * Tries to determine format type.\r\n *\r\n * @ignore Exclude from docs\r\n * @param format Format string\r\n * @return Format type (\"string\" | \"number\" | \"date\" | \"duration\")\r\n */\r\nexport function getFormat(format) {\r\n // Undefined?\r\n if (typeof format === \"undefined\") {\r\n return \"string\";\r\n }\r\n // Cleanup and lowercase format\r\n format = format.toLowerCase().replace(/^\\[[^\\]]*\\]/, \"\");\r\n // Remove style tags\r\n format = format.replace(/\\[[^\\]]+\\]/, \"\");\r\n // Trim\r\n format = format.trim();\r\n // Check for any explicit format hints (i.e. /Date)\r\n let hints = format.match(/\\/(date|number|duration)$/);\r\n if (hints) {\r\n return hints[1];\r\n }\r\n // Check for explicit hints\r\n if (format === \"number\") {\r\n return \"number\";\r\n }\r\n if (format === \"date\") {\r\n return \"date\";\r\n }\r\n if (format === \"duration\") {\r\n return \"duration\";\r\n }\r\n // Detect number formatting symbols\r\n if (format.match(/[#0]/)) {\r\n return \"number\";\r\n }\r\n // Detect date formatting symbols\r\n if (format.match(/[ymwdhnsqaxkzgtei]/)) {\r\n return \"date\";\r\n }\r\n // Nothing? Let's display as string\r\n return \"string\";\r\n}\r\n/**\r\n * Cleans up format:\r\n * * Strips out formatter hints\r\n *\r\n * @ignore Exclude from docs\r\n * @param format Format\r\n * @return Cleaned format\r\n */\r\nexport function cleanFormat(format) {\r\n return format.replace(/\\/(date|number|duration)$/i, \"\");\r\n}\r\n/**\r\n * Strips all tags from the string.\r\n *\r\n * @param text Source string\r\n * @return String without tags\r\n */\r\nexport function stripTags(text) {\r\n return text ? text.replace(/<[^>]*>/g, \"\") : text;\r\n}\r\n/**\r\n * Strips inline formatting tags (square brackets) from the string.\r\n *\r\n * @param text Source string\r\n * @return String without tags\r\n */\r\nexport function stripFormatTags(text) {\r\n return text ? text.replace(/\\[[^\\]]*\\]/g, \"\") : text;\r\n}\r\n/**\r\n * Removes new lines and tags from a string.\r\n *\r\n * @param text String to conver\r\n * @return Converted string\r\n */\r\nexport function plainText(text) {\r\n return text ? stripTags((\"\" + text).replace(/[\\n\\r]+/g, \". \")) : text;\r\n}\r\n/**\r\n * Escapes string so it can safely be used in a Regex.\r\n *\r\n * @param value Unsescaped string\r\n * @return Escaped string\r\n */\r\nexport function escapeForRgex(value) {\r\n return value.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\r\n}\r\n/**\r\n * Adds space before each uppercase letter.\r\n *\r\n * @param str Input string\r\n * @return Output string\r\n */\r\nexport function addSpacing(str) {\r\n let result = \"\";\r\n for (let i = 0; i < str.length; i++) {\r\n const char = str.charAt(i);\r\n if (char.toUpperCase() == char && i != 0) {\r\n result += \" \";\r\n }\r\n result += char;\r\n }\r\n return result;\r\n}\r\n/**\r\n * Splits the string into separate characters. Keeps RTL words non-split.\r\n *\r\n * @param source Input\r\n * @return Split text\r\n */\r\nexport function splitString(source) {\r\n // Regular expression to identify RTL characters\r\n const rtlChar = /[\\u0590-\\u05FF\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\uFB50-\\uFDFF\\uFE70-\\uFEFF]/;\r\n // Regular expression to capture segments ending with specific Arabic characters\r\n const splitPattern = /([^اأدذرزو]*[اأدذرزو])/gi;\r\n // Split input string into array of words or characters, including whitespace\r\n let segments = source.split(/(\\s+)/); // Split by whitespace, capturing it\r\n let result = [];\r\n segments.forEach(segment => {\r\n if (segment.match(/^\\s+$/)) {\r\n // If the segment is purely whitespace\r\n if (segment = \" \") {\r\n segment = \" \";\r\n }\r\n result.push(segment);\r\n }\r\n else if (rtlChar.test(segment)) {\r\n // If the segment contains RTL characters, handle special splits\r\n let parts = segment.split(splitPattern).filter(part => part !== '');\r\n // Concatenate parts processed by the split pattern directly to result\r\n result = result.concat(parts);\r\n }\r\n else {\r\n // Treat this segment as LTR: split into characters\r\n result = result.concat([...segment]);\r\n }\r\n });\r\n return result;\r\n}\r\n/**\r\n * ============================================================================\r\n * DATE-RELATED FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Returns a year day.\r\n *\r\n * @param date Date\r\n * @param utc Assume UTC dates?\r\n * @return Year day\r\n */\r\nexport function getYearDay(date, utc = false) {\r\n // TODO: utc needed?\r\n utc;\r\n const start = new Date(date.getFullYear(), 0, 0);\r\n const diff = (date.getTime() - start.getTime()) + ((start.getTimezoneOffset() - date.getTimezoneOffset()) * 60 * 1000);\r\n const oneDay = 1000 * 60 * 60 * 24;\r\n return Math.floor(diff / oneDay);\r\n}\r\n/**\r\n * Returns week number for a given date.\r\n *\r\n * @param date Date\r\n * @param utc Assume UTC dates?\r\n * @return Week number\r\n */\r\nexport function getWeek(date, _utc = false) {\r\n const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\r\n const day = d.getUTCDay() || 7;\r\n d.setUTCDate(d.getUTCDate() + 4 - day);\r\n const firstDay = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\r\n return Math.ceil((((d.getTime() - firstDay.getTime()) / 86400000) + 1) / 7);\r\n}\r\n/**\r\n * Returns a \"week year\" of the given date.\r\n *\r\n * @param date Date\r\n * @param utc Assume UTC dates?\r\n * @return Year of week\r\n * @since 5.3.0\r\n */\r\nexport function getWeekYear(date, _utc = false) {\r\n const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\r\n const day = d.getUTCDay() || 7;\r\n d.setUTCDate(d.getUTCDate() + 4 - day);\r\n const firstDay = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\r\n return firstDay.getFullYear();\r\n}\r\n/**\r\n * Returns a week number in the month.\r\n *\r\n * @param date Source Date\r\n * @param utc Assume UTC dates?\r\n * @return Week number in month\r\n */\r\nexport function getMonthWeek(date, utc = false) {\r\n const firstWeek = getWeek(new Date(date.getFullYear(), date.getMonth(), 1), utc);\r\n let currentWeek = getWeek(date, utc);\r\n if (currentWeek == 1) {\r\n currentWeek = 53;\r\n }\r\n return currentWeek - firstWeek + 1;\r\n}\r\n/**\r\n * Returns a year day out of the given week number.\r\n *\r\n * @param week Week\r\n * @param year Year\r\n * @param weekday Weekday\r\n * @param utc Assume UTC dates\r\n * @return Day in a year\r\n */\r\nexport function getDayFromWeek(week, year, weekday = 1, utc = false) {\r\n let date = new Date(year, 0, 4, 0, 0, 0, 0);\r\n if (utc) {\r\n date.setUTCFullYear(year);\r\n }\r\n let day = week * 7 + weekday - ((date.getDay() || 7) + 3);\r\n return day;\r\n}\r\n/**\r\n * Returns 12-hour representation out of the 24-hour hours.\r\n *\r\n * @param hours 24-hour number\r\n * @return 12-hour number\r\n */\r\nexport function get12Hours(hours, base) {\r\n if (hours > 12) {\r\n hours -= 12;\r\n }\r\n else if (hours === 0) {\r\n hours = 12;\r\n }\r\n return base != null ? hours + (base - 1) : hours;\r\n}\r\n/**\r\n * Returns a string name of the time zone.\r\n *\r\n * @param date Date object\r\n * @param long Should return long (\"Pacific Standard Time\") or short abbreviation (\"PST\")\r\n * @param savings Include information if it's in daylight savings mode\r\n * @param utc Assume UTC dates\r\n * @return Time zone name\r\n */\r\nexport function getTimeZone(date, long = false, savings = false, utc = false, timezone) {\r\n if (utc) {\r\n return long ? \"Coordinated Universal Time\" : \"UTC\";\r\n }\r\n else if (timezone) {\r\n const d1 = date.toLocaleString(\"en-US\", { timeZone: timezone });\r\n const d2 = date.toLocaleString(\"en-US\", { timeZone: timezone, timeZoneName: long ? \"long\" : \"short\" });\r\n return trim(d2.substr(d1.length));\r\n }\r\n let wotz = date.toLocaleString(\"UTC\");\r\n let wtz = date.toLocaleString(\"UTC\", { timeZoneName: long ? \"long\" : \"short\" }).substr(wotz.length);\r\n //wtz = wtz.replace(/[+-]+[0-9]+$/, \"\");\r\n if (savings === false) {\r\n wtz = wtz.replace(/ (standard|daylight|summer|winter) /i, \" \");\r\n }\r\n return trim(wtz);\r\n}\r\n/**\r\n * Returns the UTC offset in minutes for a given timezone.\r\n *\r\n * @param timezone IANA timezone identifier\r\n * @param targetDate Date to check offset for\r\n * @return Offset in minutes\r\n */\r\nexport function getTimezoneOffset(timezone, targetDate) {\r\n const date = targetDate || new Date(Date.UTC(2012, 0, 1, 0, 0, 0, 0));\r\n const utcDate = new Date(date.toLocaleString(\"en-US\", { timeZone: \"UTC\" }));\r\n const tzDate = new Date(date.toLocaleString(\"en-US\", { timeZone: timezone }));\r\n return (tzDate.getTime() - utcDate.getTime()) / 6e4 * -1;\r\n}\r\n/**\r\n * Capitalizes the first letter of a string.\r\n *\r\n * @param text Source string\r\n * @return Capitalized string\r\n */\r\nexport function capitalizeFirst(text) {\r\n return text.charAt(0).toUpperCase() + text.slice(1);\r\n}\r\n/**\r\n * The functions below are taken and adapted from Garry Tan's blog post:\r\n * http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c\r\n *\r\n * The further attributions go mjijackson.com, which now seems to be defunct.\r\n */\r\n/**\r\n * Converts an HSL color value to RGB. Conversion formula\r\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\r\n * Assumes h, s, and l are contained in the set [0, 1] and\r\n * returns r, g, and b in the set [0, 255].\r\n *\r\n * Function adapted from:\r\n * http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c\r\n *\r\n * @param h The hue\r\n * @param s The saturation\r\n * @param l The lightness\r\n * @return The RGB representation\r\n */\r\nexport function hslToRgb(color) {\r\n let r, g, b;\r\n let h = color.h;\r\n let s = color.s;\r\n let l = color.l;\r\n if (s == 0) {\r\n r = g = b = l; // achromatic\r\n }\r\n else {\r\n let hue2rgb = function hue2rgb(p, q, t) {\r\n if (t < 0) {\r\n t += 1;\r\n }\r\n if (t > 1) {\r\n t -= 1;\r\n }\r\n if (t < 1 / 6) {\r\n return p + (q - p) * 6 * t;\r\n }\r\n if (t < 1 / 2) {\r\n return q;\r\n }\r\n if (t < 2 / 3) {\r\n return p + (q - p) * (2 / 3 - t) * 6;\r\n }\r\n return p;\r\n };\r\n let q = l < 0.5 ? l * (1 + s) : l + s - l * s;\r\n let p = 2 * l - q;\r\n r = hue2rgb(p, q, h + 1 / 3);\r\n g = hue2rgb(p, q, h);\r\n b = hue2rgb(p, q, h - 1 / 3);\r\n }\r\n return {\r\n r: Math.round(r * 255),\r\n g: Math.round(g * 255),\r\n b: Math.round(b * 255)\r\n };\r\n}\r\n/**\r\n * Converts an RGB color value to HSL. Conversion formula\r\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\r\n * Assumes r, g, and b are contained in the set [0, 255] and\r\n * returns h, s, and l in the set [0, 1].\r\n *\r\n * Function adapted from:\r\n * http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c\r\n *\r\n * @param r The red color value\r\n * @param g The green color value\r\n * @param b The blue color value\r\n * @return The HSL representation\r\n */\r\nexport function rgbToHsl(color) {\r\n let r = color.r / 255;\r\n let g = color.g / 255;\r\n let b = color.b / 255;\r\n let max = Math.max(r, g, b);\r\n let min = Math.min(r, g, b);\r\n let h = 0;\r\n let s = 0;\r\n let l = (max + min) / 2;\r\n if (max === min) {\r\n h = s = 0; // achromatic\r\n }\r\n else {\r\n let d = max - min;\r\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\r\n switch (max) {\r\n case r:\r\n h = (g - b) / d + (g < b ? 6 : 0);\r\n break;\r\n case g:\r\n h = (b - r) / d + 2;\r\n break;\r\n case b:\r\n h = (r - g) / d + 4;\r\n break;\r\n }\r\n h /= 6;\r\n }\r\n return {\r\n h: h,\r\n s: s,\r\n l: l,\r\n };\r\n}\r\n/**\r\n * Converts HSV to HSL.\r\n *\r\n * https://en.wikipedia.org/wiki/HSL_and_HSV#HSV_to_HSL\r\n */\r\nexport function hsvToHsl(hsv) {\r\n const l = hsv.v * (1 - (hsv.s / 2));\r\n const s = (l === 0 || l === 1\r\n ? 0\r\n : (hsv.v - l) / Math.min(l, 1 - l));\r\n return {\r\n h: hsv.h,\r\n s,\r\n l,\r\n a: hsv.a,\r\n };\r\n}\r\n/**\r\n * Converts HSL to HSV.\r\n *\r\n * https://en.wikipedia.org/wiki/HSL_and_HSV#HSL_to_HSV\r\n */\r\nexport function hslToHsv(hsl) {\r\n const v = hsl.l + (hsl.s * Math.min(hsl.l, 1 - hsl.l));\r\n const s = (v === 0\r\n ? 0\r\n : 2 * (1 - (hsl.l / v)));\r\n return {\r\n h: hsl.h,\r\n s,\r\n v,\r\n a: hsl.a,\r\n };\r\n}\r\n/**\r\n * Returns a color that is `percent` brighter than the reference color.\r\n *\r\n * @param color Reference color\r\n * @param percent Brightness percent\r\n * @return Hex code of the new color\r\n */\r\nexport function lighten(rgb, percent) {\r\n if (rgb) {\r\n return {\r\n r: Math.max(0, Math.min(255, rgb.r + getLightnessStep(rgb.r, percent))),\r\n g: Math.max(0, Math.min(255, rgb.g + getLightnessStep(rgb.g, percent))),\r\n b: Math.max(0, Math.min(255, rgb.b + getLightnessStep(rgb.b, percent))),\r\n a: rgb.a\r\n };\r\n }\r\n else {\r\n // TODO is this correct ?\r\n return rgb;\r\n }\r\n}\r\n;\r\n/**\r\n * Gets lightness step.\r\n *\r\n * @param value Value\r\n * @param percent Percent\r\n * @return Step\r\n */\r\nexport function getLightnessStep(value, percent) {\r\n let base = percent > 0 ? 255 - value : value;\r\n return Math.round(base * percent);\r\n}\r\n/**\r\n * Returns a color that is `percent` brighter than the source `color`.\r\n *\r\n * @param color Source color\r\n * @param percent Brightness percent\r\n * @return New color\r\n */\r\nexport function brighten(rgb, percent) {\r\n if (rgb) {\r\n let base = Math.min(Math.max(rgb.r, rgb.g, rgb.b), 230);\r\n //let base = Math.max(rgb.r, rgb.g, rgb.b);\r\n let step = getLightnessStep(base, percent);\r\n return {\r\n r: Math.max(0, Math.min(255, Math.round(rgb.r + step))),\r\n g: Math.max(0, Math.min(255, Math.round(rgb.g + step))),\r\n b: Math.max(0, Math.min(255, Math.round(rgb.b + step))),\r\n a: rgb.a\r\n };\r\n }\r\n else {\r\n // TODO is this correct ?\r\n return rgb;\r\n }\r\n}\r\n;\r\n/**\r\n * Returns brightness step.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Value\r\n * @param percent Percent\r\n * @return Step\r\n */\r\nexport function getBrightnessStep(_value, percent) {\r\n let base = 255; //percent > 0 ? 255 - value : value;\r\n return Math.round(base * percent);\r\n}\r\n/**\r\n * Returns `true` if color is \"light\". Useful indetermining which contrasting\r\n * color to use for elements over this color. E.g.: you would want to use\r\n * black text over light background, and vice versa.\r\n *\r\n * @param color Source color\r\n * @return Light?\r\n */\r\nexport function isLight(color) {\r\n return ((color.r * 299) + (color.g * 587) + (color.b * 114)) / 1000 >= 128;\r\n}\r\n/**\r\n * Returns a new [[iRGB]] object based on `rgb` parameter with specific\r\n * saturation applied.\r\n *\r\n * `saturation` can be in the range of 0 (fully desaturated) to 1 (fully\r\n * saturated).\r\n *\r\n * @param color Base color\r\n * @param saturation Saturation (0-1)\r\n * @return New color\r\n */\r\nexport function saturate(rgb, saturation) {\r\n if (rgb === undefined || saturation == 1) {\r\n return rgb;\r\n }\r\n let hsl = rgbToHsl(rgb);\r\n hsl.s = saturation;\r\n return hslToRgb(hsl);\r\n}\r\n/**\r\n * Returns a color which contrasts more with the source `color`.\r\n *\r\n * @param color Base color\r\n * @param lightAlternative Light option\r\n * @param darkAlternative Dark option\r\n * @return New color\r\n */\r\nexport function alternativeColor(color, lightAlternative = { r: 255, g: 255, b: 255 }, darkAlternative = { r: 255, g: 255, b: 255 }) {\r\n let light = lightAlternative;\r\n let dark = darkAlternative;\r\n if (isLight(darkAlternative)) {\r\n light = darkAlternative;\r\n dark = lightAlternative;\r\n }\r\n return isLight(color) ? dark : light;\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function mergeTags(tags1, tags2) {\r\n if (!tags1) {\r\n tags1 = [];\r\n }\r\n return [...tags1, ...tags2].filter((value, index, self) => {\r\n return self.indexOf(value) === index;\r\n });\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function sameBounds(a, b) {\r\n if (!b) {\r\n return false;\r\n }\r\n if (a.left != b.left) {\r\n return false;\r\n }\r\n if (a.right != b.right) {\r\n return false;\r\n }\r\n if (a.top != b.top) {\r\n return false;\r\n }\r\n if (a.bottom != b.bottom) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n//# sourceMappingURL=Utils.js.map","import { range } from \"./Animation\";\r\nimport * as $utils from \"./Utils\";\r\nimport * as $type from \"./Type\";\r\n/**\r\n * @ignore\r\n */\r\nfunction string2hex(string) {\r\n //string = cssColorNames[string.toLowerCase()] || string;\r\n if (string[0] === \"#\") {\r\n string = string.substr(1);\r\n }\r\n if (string.length == 3) {\r\n string = string[0].repeat(2) + string[1].repeat(2) + string[2].repeat(2);\r\n }\r\n return parseInt(string, 16);\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function rgba2hex(color) {\r\n color = color.replace(/[ ]/g, \"\");\r\n // Init\r\n let matches = color.match(/^rgb\\(([0-9]*),([0-9]*),([0-9]*)\\)/i);\r\n // Try rgb() format\r\n if (matches) {\r\n matches.push(\"1\");\r\n }\r\n else {\r\n matches = color.match(/^rgba\\(([0-9]*),([0-9]*),([0-9]*),([.0-9]*)\\)/i);\r\n if (!matches) {\r\n return 0x000000;\r\n }\r\n }\r\n let hex = \"\";\r\n for (let i = 1; i <= 3; i++) {\r\n let val = parseInt(matches[i]).toString(16);\r\n if (val.length == 1) {\r\n val = \"0\" + val;\r\n }\r\n hex += val;\r\n }\r\n return string2hex(hex);\r\n}\r\n/**\r\n * Returns a new [[Color]] object base on input.\r\n *\r\n * Accepts parameters in CSS hex or rgb/rtba strings, or hex numbers.\r\n *\r\n * * `\"#f00\"`\r\n * * `\"#ff0000\"`\r\n * * `\"rgb(255, 0, 0)\"`\r\n * * `\"rgba(255, 0, 0, 1)\"`\r\n * * `0xff0000`\r\n *\r\n * @param input Input color\r\n * @return Color\r\n */\r\nexport function color(input) {\r\n return Color.fromAny(input);\r\n}\r\n/**\r\n * Wherever color needs to be specified in amCharts 5, `Color` object needs to\r\n * be used.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/} for more info\r\n * @important\r\n */\r\nexport class Color {\r\n constructor(hex) {\r\n this._hex = hex | 0;\r\n }\r\n /**\r\n * Color numeric value.\r\n */\r\n get hex() {\r\n return this._hex;\r\n }\r\n /**\r\n * Value of color's R channel.\r\n * @return R value\r\n */\r\n get r() {\r\n return this._hex >>> 16;\r\n }\r\n /**\r\n * Value of color's G channel.\r\n * @return G value\r\n */\r\n get g() {\r\n return (this._hex >> 8) & 0xFF;\r\n }\r\n /**\r\n * Value of color's B channel.\r\n * @return B value\r\n */\r\n get b() {\r\n return this._hex & 0xFF;\r\n }\r\n /**\r\n * Returns color CSS representation in form of `rgba(r, g, b, a)` string.\r\n *\r\n * @param alpha Opacity\r\n * @return CSS string\r\n */\r\n toCSS(alpha = 1) {\r\n return \"rgba(\" + this.r + \", \" + this.g + \", \" + this.b + \", \" + alpha + \")\";\r\n }\r\n /**\r\n * Returns color CSS representation in form of `#rgb` string.\r\n *\r\n * @return CSS string\r\n */\r\n toCSSHex() {\r\n return \"#\" + $utils.padString(this.r.toString(16), 2) + $utils.padString(this.g.toString(16), 2) + $utils.padString(this.b.toString(16), 2);\r\n }\r\n /**\r\n * Returns color's HSL info.\r\n * @param alpha Opacity\r\n * @return HSL info\r\n */\r\n toHSL(alpha = 1) {\r\n return $utils.rgbToHsl({\r\n r: this.r,\r\n g: this.g,\r\n b: this.b,\r\n a: alpha\r\n });\r\n }\r\n /**\r\n * Converts HSL values into a new [[Color]] object.\r\n *\r\n * @param h H value\r\n * @param s S value\r\n * @param l L value\r\n * @return Color object\r\n */\r\n static fromHSL(h, s, l) {\r\n const rgb = $utils.hslToRgb({\r\n h: h,\r\n s: s,\r\n l: l\r\n });\r\n return this.fromRGB(rgb.r, rgb.g, rgb.b);\r\n }\r\n toString() {\r\n return this.toCSSHex();\r\n }\r\n /**\r\n * Converts hex number into a new [[Color]] object.\r\n *\r\n * ```TypeScript\r\n * Color.fromHex(0xff0000) // red\r\n * ```\r\n * ```JavaScript\r\n * Color.fromHex(0xff0000) // red\r\n * ```\r\n *\r\n * @param hex Hex color\r\n * @return Color\r\n */\r\n static fromHex(hex) {\r\n return new Color(hex);\r\n }\r\n /**\r\n * Converts RGB values to a new [[Color]] object.\r\n *\r\n * @param r R value\r\n * @param g G value\r\n * @param b B value\r\n * @return Color\r\n */\r\n static fromRGB(r, g, b) {\r\n return new Color((b | 0) + (g << 8) + (r << 16));\r\n }\r\n /**\r\n * Converts RGB string to a new [[Color]] object.\r\n *\r\n * ```TypeScript\r\n * Color.fromString(\"#ff0000\") // red\r\n * ```\r\n * ```JavaScript\r\n * Color.fromString(\"#ff0000\") // red\r\n * ```\r\n *\r\n * @param s RGB string\r\n * @return Color\r\n */\r\n static fromString(s) {\r\n return new Color(string2hex(s));\r\n }\r\n /**\r\n * Converts CSS rgba() syntax to a new [[Color]] object.\r\n *\r\n * ```TypeScript\r\n * Color.fromCSS(\"rgba(255, 0, 0, 1)\") // red\r\n * ```\r\n * ```JavaScript\r\n * Color.fromCSS(\"rgba(255, 0, 0, 1)\") // red\r\n * ```\r\n *\r\n * @param {string} s [description]\r\n * @return {Color} [description]\r\n */\r\n static fromCSS(s) {\r\n return new Color(rgba2hex(s));\r\n }\r\n /**\r\n * Convert to color from virtually anything.\r\n *\r\n * Will throw an exception if unable to resolve the color.\r\n *\r\n * @param s Source\r\n * @return Color\r\n */\r\n static fromAny(s) {\r\n if ($type.isString(s)) {\r\n if (s[0] == \"#\") {\r\n return Color.fromString(s);\r\n }\r\n else if (s.substr(0, 3) == \"rgb\") {\r\n return Color.fromCSS(s);\r\n }\r\n }\r\n else if ($type.isNumber(s)) {\r\n return Color.fromHex(s);\r\n }\r\n else if (s instanceof Color) {\r\n return Color.fromHex(s.hex);\r\n }\r\n throw new Error(\"Unknown color syntax: \" + s);\r\n }\r\n /**\r\n * Returns a new [[Color]] object based on either `lightAlternative` or\r\n * `darkAlternative` depending on which one is more contrasting with\r\n * the `color`.\r\n *\r\n * @param color Reference color\r\n * @param lightAlternative Light color\r\n * @param darkAlternative Dark color\r\n * @return Alternative color\r\n */\r\n static alternative(color, lightAlternative, darkAlternative) {\r\n const rgb = $utils.alternativeColor({ r: color.r, g: color.g, b: color.b }, lightAlternative ? { r: lightAlternative.r, g: lightAlternative.g, b: lightAlternative.b } : undefined, darkAlternative ? { r: darkAlternative.r, g: darkAlternative.g, b: darkAlternative.b } : undefined);\r\n return this.fromRGB(rgb.r, rgb.g, rgb.b);\r\n }\r\n /**\r\n * Returns an intermediate Color between two reference colors depending on\r\n * the progress (`diff`) between the two.\r\n *\r\n * @param diff Progress\r\n * @param from Source color\r\n * @param to Target color\r\n * @param mode Interpolation mode\r\n * @return Color\r\n */\r\n static interpolate(diff, from, to, mode = \"rgb\") {\r\n if (mode == \"hsl\") {\r\n const fromHSL = from.toHSL();\r\n const toHSL = to.toHSL();\r\n return Color.fromHSL(range(diff, fromHSL.h, toHSL.h), range(diff, fromHSL.s, toHSL.s), range(diff, fromHSL.l, toHSL.l));\r\n }\r\n else {\r\n return Color.fromRGB(range(diff, from.r, to.r), range(diff, from.g, to.g), range(diff, from.b, to.b));\r\n }\r\n }\r\n /**\r\n * Returns a new [[Color]] lightened by `percent` value.\r\n *\r\n * Use negative value to darken the color.\r\n *\r\n * @param color Source color\r\n * @param percent Percent\r\n * @return New color\r\n */\r\n static lighten(color, percent) {\r\n const rgb = $utils.lighten({ r: color.r, g: color.g, b: color.b }, percent);\r\n return Color.fromRGB(rgb.r, rgb.g, rgb.b);\r\n }\r\n /**\r\n * Returns a new [[Color]] brightened by `percent` value.\r\n *\r\n * Use negative value to dim the color.\r\n *\r\n * @param color Source color\r\n * @param percent Percent\r\n * @return New color\r\n */\r\n static brighten(color, percent) {\r\n const rgb = $utils.brighten({ r: color.r, g: color.g, b: color.b }, percent);\r\n return Color.fromRGB(rgb.r, rgb.g, rgb.b);\r\n }\r\n /**\r\n * Returns a new [[Color]] saturated by `percent` value.\r\n *\r\n * Value range is between `0` (fully desaturated), to `1` (full color).\r\n *\r\n * @param color Source color\r\n * @param percent Percent\r\n * @return New color\r\n */\r\n static saturate(color, percent) {\r\n const rgb = $utils.saturate({ r: color.r, g: color.g, b: color.b }, percent);\r\n return Color.fromRGB(rgb.r, rgb.g, rgb.b);\r\n }\r\n}\r\n//# sourceMappingURL=Color.js.map","import { isNumber } from \"./Type\";\r\n/**\r\n * ============================================================================\r\n * CONSTANTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nexport const PI = Math.PI;\r\nexport const HALFPI = PI / 2;\r\nexport const RADIANS = PI / 180;\r\nexport const DEGREES = 180 / PI;\r\n/**\r\n * Rounds the numeric value to whole number or specific precision of set.\r\n *\r\n * @param value Value\r\n * @param precision Precision (number of decimal points)\r\n * @param floor In case value ends with 0.5 and precision is 0, we might need to floor the value instead of ceiling it.\r\n * @return Rounded value\r\n */\r\nexport function round(value, precision, floor) {\r\n if (!isNumber(precision) || precision <= 0) {\r\n let rounded = Math.round(value);\r\n if (floor) {\r\n if (rounded - value == 0.5) {\r\n rounded--;\r\n }\r\n }\r\n return rounded;\r\n }\r\n else {\r\n let d = Math.pow(10, precision);\r\n return Math.round(value * d) / d;\r\n }\r\n}\r\n/**\r\n * Ceils the numeric value to whole number or specific precision of set.\r\n *\r\n * @param value Value\r\n * @param precision Precision (number of decimal points)\r\n * @return Rounded value\r\n */\r\nexport function ceil(value, precision) {\r\n if (!isNumber(precision) || precision <= 0) {\r\n return Math.ceil(value);\r\n }\r\n else {\r\n let d = Math.pow(10, precision);\r\n return Math.ceil(value * d) / d;\r\n }\r\n}\r\n/**\r\n * Returns the first control point for a cubic bezier spline segment\r\n * interpolating through three consecutive points with the given tension.\r\n *\r\n * @ignore\r\n * @param p0 Previous point\r\n * @param p1 Current point\r\n * @param p2 Next point\r\n * @param tensionX Horizontal tension (0–1)\r\n * @param tensionY Vertical tension (0–1)\r\n * @return First control point\r\n */\r\nexport function getCubicControlPointA(p0, p1, p2, tensionX, tensionY) {\r\n return { x: ((-p0.x + p1.x / tensionX + p2.x) * tensionX), y: ((-p0.y + p1.y / tensionY + p2.y) * tensionY) };\r\n}\r\n/**\r\n * Returns the second control point for a cubic bezier spline segment\r\n * interpolating through three consecutive points with the given tension.\r\n *\r\n * @ignore\r\n * @param p1 Current point\r\n * @param p2 Next point\r\n * @param p3 Point after next\r\n * @param tensionX Horizontal tension (0–1)\r\n * @param tensionY Vertical tension (0–1)\r\n * @return Second control point\r\n */\r\nexport function getCubicControlPointB(p1, p2, p3, tensionX, tensionY) {\r\n return { x: ((p1.x + p2.x / tensionX - p3.x) * tensionX), y: ((p1.y + p2.y / tensionY - p3.y) * tensionY) };\r\n}\r\n/**\r\n * Clamps a value to the given [min, max] range.\r\n *\r\n * @param value Value to clamp\r\n * @param min Minimum\r\n * @param max Maximum\r\n * @return Clamped value\r\n */\r\nexport function fitToRange(value, min, max) {\r\n return Math.min(Math.max(value, min), max);\r\n}\r\n/**\r\n * Returns sine of an angle specified in degrees.\r\n *\r\n * @param value Value\r\n * @return Sine\r\n */\r\nexport function sin(angle) {\r\n return Math.sin(RADIANS * angle);\r\n}\r\n/**\r\n * Returns tan of an angle specified in degrees.\r\n *\r\n * @param value Value\r\n * @return Sine\r\n */\r\nexport function tan(angle) {\r\n return Math.tan(RADIANS * angle);\r\n}\r\n/**\r\n * Returns cosine of an angle specified in degrees.\r\n *\r\n * @param value Value\r\n * @return Cosine\r\n */\r\nexport function cos(angle) {\r\n return Math.cos(RADIANS * angle);\r\n}\r\n/**\r\n * Normalizes an angle to the 0–360 range.\r\n *\r\n * @param value Angle in degrees\r\n * @return Normalized angle (0–360)\r\n */\r\nexport function normalizeAngle(value) {\r\n value = value % 360;\r\n if (value < 0) {\r\n value += 360;\r\n }\r\n return value;\r\n}\r\n/**\r\n * Returns the bounding box of a circular arc.\r\n *\r\n * @param cx Center X\r\n * @param cy Center Y\r\n * @param startAngle Start angle in degrees\r\n * @param endAngle End angle in degrees\r\n * @param radius Arc radius\r\n * @return Bounding box\r\n */\r\nexport function getArcBounds(cx, cy, startAngle, endAngle, radius) {\r\n let minX = Number.MAX_VALUE;\r\n let minY = Number.MAX_VALUE;\r\n let maxX = -Number.MAX_VALUE;\r\n let maxY = -Number.MAX_VALUE;\r\n let bpoints = [];\r\n bpoints.push(getArcPoint(radius, startAngle));\r\n bpoints.push(getArcPoint(radius, endAngle));\r\n let fromAngle = Math.min(Math.floor(startAngle / 90) * 90, Math.floor(endAngle / 90) * 90);\r\n let toAngle = Math.max(Math.ceil(startAngle / 90) * 90, Math.ceil(endAngle / 90) * 90);\r\n for (let angle = fromAngle; angle <= toAngle; angle += 90) {\r\n if (angle >= startAngle && angle <= endAngle) {\r\n bpoints.push(getArcPoint(radius, angle));\r\n }\r\n }\r\n for (let i = 0; i < bpoints.length; i++) {\r\n let pt = bpoints[i];\r\n if (pt.x < minX) {\r\n minX = pt.x;\r\n }\r\n if (pt.y < minY) {\r\n minY = pt.y;\r\n }\r\n if (pt.x > maxX) {\r\n maxX = pt.x;\r\n }\r\n if (pt.y > maxY) {\r\n maxY = pt.y;\r\n }\r\n }\r\n return ({ left: cx + minX, top: cy + minY, right: cx + maxX, bottom: cy + maxY });\r\n}\r\n/**\r\n * Returns a point on a circle at the given angle.\r\n *\r\n * @param radius Circle radius\r\n * @param arc Angle in degrees\r\n * @return Point on the arc\r\n */\r\nexport function getArcPoint(radius, arc) {\r\n return ({ x: radius * cos(arc), y: radius * sin(arc) });\r\n}\r\n/**\r\n * Merges an array of bounds into a single bounding box that encompasses all of them.\r\n *\r\n * @param bounds Array of bounds to merge\r\n * @return Combined bounding box\r\n */\r\nexport function mergeBounds(bounds) {\r\n const len = bounds.length;\r\n if (len > 0) {\r\n let bound = bounds[0];\r\n let left = bound.left;\r\n let top = bound.top;\r\n let right = bound.right;\r\n let bottom = bound.bottom;\r\n if (len > 1) {\r\n for (let i = 1; i < len; i++) {\r\n bound = bounds[i];\r\n left = Math.min(bound.left, left);\r\n right = Math.max(bound.right, right);\r\n top = Math.min(bound.top, top);\r\n bottom = Math.max(bound.bottom, bottom);\r\n }\r\n }\r\n return { left, right, top, bottom };\r\n }\r\n return { left: 0, right: 0, top: 0, bottom: 0 };\r\n}\r\n/**\r\n * Fits an angle into the given start/end range, snapping to the\r\n * nearest boundary when the angle falls outside.\r\n *\r\n * @param value Angle in degrees\r\n * @param startAngle Range start in degrees\r\n * @param endAngle Range end in degrees\r\n * @return Angle clamped to the range\r\n */\r\nexport function fitAngleToRange(value, startAngle, endAngle) {\r\n if (startAngle > endAngle) {\r\n let temp = startAngle;\r\n startAngle = endAngle;\r\n endAngle = temp;\r\n }\r\n value = normalizeAngle(value);\r\n let count = (startAngle - normalizeAngle(startAngle)) / 360;\r\n if (value < startAngle) {\r\n value += 360 * (count + 1);\r\n }\r\n let maxEnd = startAngle + (endAngle - startAngle) / 2 + 180;\r\n let maxStart = startAngle + (endAngle - startAngle) / 2 - 180;\r\n if (value > endAngle) {\r\n if (value - 360 > startAngle) {\r\n value -= 360;\r\n }\r\n else {\r\n if (value < maxEnd) {\r\n value = endAngle;\r\n }\r\n else {\r\n value = startAngle;\r\n }\r\n }\r\n }\r\n if (value < startAngle) {\r\n if (value > maxStart) {\r\n value = startAngle;\r\n }\r\n else {\r\n value = endAngle;\r\n }\r\n }\r\n return value;\r\n}\r\n/**\r\n * Returns `true` if a point is inside the given bounds (inclusive).\r\n *\r\n * @param point Point to test\r\n * @param bounds Bounding box\r\n * @return Whether the point is inside\r\n */\r\nexport function inBounds(point, bounds) {\r\n if (point.x >= bounds.left && point.y >= bounds.top && point.x <= bounds.right && point.y <= bounds.bottom) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n/**\r\n * Returns the angle in degrees from `point1` to `point2`.\r\n * If `point2` is omitted, uses double of `point1` coordinates.\r\n *\r\n * @param point1 Origin point\r\n * @param point2 Target point (optional)\r\n * @return Angle in degrees (0–360)\r\n */\r\nexport function getAngle(point1, point2) {\r\n if (!point2) {\r\n point2 = { x: point1.x * 2, y: point1.y * 2 };\r\n }\r\n let diffX = point2.x - point1.x;\r\n let diffY = point2.y - point1.y;\r\n let angle = Math.atan2(diffY, diffX) * DEGREES;\r\n if (angle < 0) {\r\n angle += 360;\r\n }\r\n return normalizeAngle(angle);\r\n}\r\n/**\r\n * Returns a point on a quadratic bezier curve at the given position (0–1).\r\n *\r\n * @param pointA Start point\r\n * @param pointB End point\r\n * @param controlPoint Control point\r\n * @param position Relative position (0 = start, 1 = end)\r\n * @return Point on the curve\r\n */\r\nexport function getPointOnQuadraticCurve(pointA, pointB, controlPoint, position) {\r\n let x = (1 - position) * (1 - position) * pointA.x + 2 * (1 - position) * position * controlPoint.x + position * position * pointB.x;\r\n let y = (1 - position) * (1 - position) * pointA.y + 2 * (1 - position) * position * controlPoint.y + position * position * pointB.y;\r\n return { x: x, y: y };\r\n}\r\n/**\r\n * Returns a point on a cubic bezier curve at the given position (0–1).\r\n *\r\n * @param pointA Start point\r\n * @param pointB End point\r\n * @param controlPointA First control point (near start)\r\n * @param controlPointB Second control point (near end)\r\n * @param position Relative position (0 = start, 1 = end)\r\n * @return Point on the curve\r\n */\r\nexport function getPointOnCubicCurve(pointA, pointB, controlPointA, controlPointB, position) {\r\n let s = 1 - position;\r\n let x = s * s * s * pointA.x + 3 * s * s * position * controlPointA.x + 3 * s * position * position * controlPointB.x + position * position * position * pointB.x;\r\n let y = s * s * s * pointA.y + 3 * s * s * position * controlPointA.y + 3 * s * position * position * controlPointB.y + position * position * position * pointB.y;\r\n return { x: x, y: y };\r\n}\r\n/**\r\n * Returns a point at a relative position along a straight line between two points.\r\n *\r\n * @param pointA Start point\r\n * @param pointB End point\r\n * @param position Relative position (0 = start, 1 = end)\r\n * @return Point on the line\r\n */\r\nexport function getPointOnLine(pointA, pointB, position) {\r\n return { x: pointA.x + (pointB.x - pointA.x) * position, y: pointA.y + (pointB.y - pointA.y) * position };\r\n}\r\n/**\r\n * Given a normalized location (0–1) along a multi-segment path and an array\r\n * of cumulative segment lengths, returns which segment the location falls in\r\n * and the local parameter t within that segment.\r\n *\r\n * @param location Relative position along the full path (0–1)\r\n * @param cumulativeLengths Cumulative length at the end of each segment\r\n * @return Segment index and local t (0–1)\r\n */\r\nexport function resolveLocationOnPath(location, cumulativeLengths) {\r\n const n = cumulativeLengths.length;\r\n if (n > 0) {\r\n const totalLength = cumulativeLengths[n - 1];\r\n const targetLength = location * totalLength;\r\n let index = 0;\r\n for (let i = 0; i < n; i++) {\r\n if (cumulativeLengths[i] >= targetLength) {\r\n index = i;\r\n break;\r\n }\r\n }\r\n const segStart = index > 0 ? cumulativeLengths[index - 1] : 0;\r\n const segLength = cumulativeLengths[index] - segStart;\r\n const t = segLength > 0 ? (targetLength - segStart) / segLength : 0;\r\n return { index, t };\r\n }\r\n return { index: 0, t: 0 };\r\n}\r\n/**\r\n * Returns the closest value from the array of values to the reference value.\r\n *\r\n * @param values Array of values\r\n * @param value Reference value\r\n * @return Closes value from the array\r\n */\r\nexport function closest(values, referenceValue) {\r\n return values.reduce(function (prev, curr) {\r\n return (Math.abs(curr - referenceValue) < Math.abs(prev - referenceValue) ? curr : prev);\r\n });\r\n}\r\n/**\r\n * Returns true if bounds overlap\r\n * @param bounds1 IBounds\r\n * @param bounds2 IBounds\r\n * @returns boolean\r\n */\r\nexport function boundsOverlap(bounds1, bounds2) {\r\n const horizontalOverlap = bounds1.left < bounds2.right && bounds1.right > bounds2.left;\r\n const verticalOverlap = bounds1.top < bounds2.bottom && bounds1.bottom > bounds2.top;\r\n return horizontalOverlap && verticalOverlap;\r\n}\r\n/**\r\n * Generates points along a spiral path.\r\n *\r\n * @param cx Center X\r\n * @param cy Center Y\r\n * @param radius Outer radius\r\n * @param radiusY Vertical radius (for elliptical spirals)\r\n * @param innerRadius Inner radius where the spiral starts\r\n * @param step Base step size between points\r\n * @param radiusStep Radius increase per full revolution\r\n * @param startAngle Start angle in degrees\r\n * @param endAngle End angle in degrees\r\n * @return Array of points along the spiral\r\n */\r\nexport function spiralPoints(cx, cy, radius, radiusY, innerRadius, step, radiusStep, startAngle, endAngle) {\r\n let r = innerRadius + 0.01;\r\n startAngle = normalizeAngle(startAngle);\r\n endAngle = normalizeAngle(endAngle);\r\n let angle = startAngle * RADIANS;\r\n if (endAngle < startAngle) {\r\n endAngle += 360;\r\n }\r\n let points = [];\r\n while (r < radius + radiusStep) {\r\n let stepSize = step;\r\n if (stepSize / 2 > r) {\r\n stepSize = 2 * r;\r\n }\r\n let c = Math.max(0.01, Math.min(1, r / 200));\r\n stepSize = stepSize * c;\r\n let degrees = angle * DEGREES;\r\n let point = { x: cx + r * Math.cos(angle), y: cy + r * radiusY / radius * Math.sin(angle) };\r\n points.push(point);\r\n r = innerRadius + 0.01 + (degrees - startAngle) / 360 * radiusStep;\r\n angle += 2 * Math.asin(stepSize / 2 / r);\r\n if (angle * DEGREES > endAngle + 360 * Math.ceil((radius - innerRadius) / radiusStep)) {\r\n break;\r\n }\r\n }\r\n points.shift();\r\n return points;\r\n}\r\n/**\r\n * Returns `true` if two circles overlap or touch.\r\n *\r\n * @param circle1 First circle (x, y, radius)\r\n * @param circle2 Second circle (x, y, radius)\r\n * @return Whether the circles overlap\r\n */\r\nexport function circlesOverlap(circle1, circle2) {\r\n return Math.hypot(circle1.x - circle2.x, circle1.y - circle2.y) <= circle1.radius + circle2.radius;\r\n}\r\n//# sourceMappingURL=Math.js.map","/**\r\n * A collection of easing functions\r\n *\r\n * Parts of this collection are taken from D3.js library (https://d3js.org/)\r\n */\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport * as $math from \"./Math\";\r\n/**\r\n * The functions below are from D3.js library (https://d3js.org/)\r\n *\r\n * ----------------------------------------------------------------------------\r\n * Copyright 2017 Mike Bostock\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions are met:\r\n *\r\n * 1. Redistributions of source code must retain the above copyright notice,\r\n *\tthis list of conditions and the following disclaimer.\r\n *\r\n * 2. Redistributions in binary form must reproduce the above copyright notice,\r\n *\tthis list of conditions and the following disclaimer in the documentation\r\n *\tand/or other materials provided with the distribution.\r\n *\r\n * 3. Neither the name of the copyright holder nor the names of its\r\n *\tcontributors may be used to endorse or promote products derived from this\r\n *\tsoftware without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * ----------------------------------------------------------------------------\r\n * @hidden\r\n */\r\n/**\r\n */\r\nexport function linear(t) {\r\n return t;\r\n}\r\nexport function quad(t) {\r\n return t * t;\r\n}\r\nexport function cubic(t) {\r\n return t * t * t;\r\n}\r\nexport function pow(t, e) {\r\n return Math.pow(t, e);\r\n}\r\nexport function exp(t) {\r\n return Math.pow(2, 10 * t - 10);\r\n}\r\nexport function sine(t) {\r\n return 1 - Math.cos(t * $math.HALFPI);\r\n}\r\nexport function circle(t) {\r\n return 1 - Math.sqrt(1 - t * t);\r\n}\r\n/**\r\n * ============================================================================\r\n * TRANSFORMERS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n */\r\nexport function yoyo(ease) {\r\n return function (t) {\r\n if (t < 0.5) {\r\n return ease(t * 2.0);\r\n }\r\n else {\r\n return ease((1.0 - t) * 2.0);\r\n }\r\n };\r\n}\r\nexport function out(ease) {\r\n return function (t) {\r\n return 1.0 - ease(1.0 - t);\r\n };\r\n}\r\nexport function inOut(ease) {\r\n return function (t) {\r\n if (t <= 0.5) {\r\n return ease(t * 2.0) / 2.0;\r\n }\r\n else {\r\n return 1.0 - (ease((1.0 - t) * 2.0) / 2.0);\r\n }\r\n };\r\n}\r\n/**\r\n * ============================================================================\r\n * BOUNCE\r\n * ============================================================================\r\n * @hidden\r\n */\r\nlet b1 = 4 / 11, b2 = 6 / 11, b3 = 8 / 11, b4 = 3 / 4, b5 = 9 / 11, b6 = 10 / 11, b7 = 15 / 16, b8 = 21 / 22, b9 = 63 / 64, b0 = 1 / b1 / b1;\r\nexport function bounce(t) {\r\n return 1 - bounceOut(1 - t);\r\n}\r\n/**\r\n * @ignore\r\n */\r\nfunction bounceOut(t) {\r\n t = t;\r\n if (t < b1) {\r\n return b0 * t * t;\r\n }\r\n else if (t < b3) {\r\n return b0 * (t -= b2) * t + b4;\r\n }\r\n else if (t < b6) {\r\n return b0 * (t -= b5) * t + b7;\r\n }\r\n else {\r\n return b0 * (t -= b8) * t + b9;\r\n }\r\n}\r\n/**\r\n * ============================================================================\r\n * ELASTIC\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * @ignore\r\n */\r\nlet tau = 2 * Math.PI;\r\n/**\r\n * @ignore\r\n */\r\nlet amplitude = 1;\r\n/**\r\n * @ignore\r\n */\r\nlet period = 0.3 / tau;\r\n/**\r\n * @ignore\r\n */\r\nlet s = Math.asin(1 / amplitude) * period;\r\nexport function elastic(t) {\r\n let v = t;\r\n return amplitude * Math.pow(2, 10 * --v) * Math.sin((s - v) / period);\r\n}\r\n//# sourceMappingURL=Ease.js.map","import * as $object from \"./Object\";\r\nimport * as $ease from \"./Ease\";\r\n/**\r\n * An object representing a collection of setting values to apply as required.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/states/} for more info\r\n */\r\nexport class State {\r\n constructor(entity, settings) {\r\n this._userSettings = {};\r\n this._entity = entity;\r\n this._settings = settings;\r\n $object.each(settings, (key) => {\r\n this._userSettings[key] = true;\r\n });\r\n }\r\n get(key, fallback) {\r\n const value = this._settings[key];\r\n if (value !== undefined) {\r\n return value;\r\n }\r\n else {\r\n return fallback;\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n setRaw(key, value) {\r\n this._settings[key] = value;\r\n }\r\n /**\r\n * Sets a setting `value` for the specified `key` to be set when the state\r\n * is applied.\r\n *\r\n * @param key Setting key\r\n * @param value Setting value\r\n * @return Setting value\r\n */\r\n set(key, value) {\r\n this._userSettings[key] = true;\r\n this.setRaw(key, value);\r\n }\r\n /**\r\n * Removes a setting value for the specified `key`.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\r\n * @param key Setting key\r\n */\r\n remove(key) {\r\n delete this._userSettings[key];\r\n delete this._settings[key];\r\n }\r\n /**\r\n * Sets multiple settings at once.\r\n *\r\n * `settings` must be an object with key: value pairs.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\r\n * @param settings Settings\r\n */\r\n setAll(settings) {\r\n $object.entries(settings).forEach(([key, value]) => {\r\n this.set(key, value);\r\n });\r\n }\r\n _eachSetting(f) {\r\n $object.each(this._settings, f);\r\n }\r\n /**\r\n * Applies the state to the target element.\r\n *\r\n * All setting values are set immediately.\r\n */\r\n apply() {\r\n const seen = {};\r\n seen[\"stateAnimationEasing\"] = true;\r\n seen[\"stateAnimationDuration\"] = true;\r\n const defaultState = this._entity.states.lookup(\"default\");\r\n this._eachSetting((key, value) => {\r\n if (!seen[key]) {\r\n seen[key] = true;\r\n // save values to default state\r\n if (this !== defaultState) {\r\n if (!(key in defaultState._settings)) {\r\n defaultState._settings[key] = this._entity.get(key);\r\n }\r\n }\r\n this._entity.set(key, value);\r\n }\r\n });\r\n }\r\n /**\r\n * Applies the state to the target element.\r\n *\r\n * Returns an object representing all [[Animation]] objects created for\r\n * each setting key transition.\r\n *\r\n * @return Animations\r\n */\r\n applyAnimate(duration) {\r\n if (duration == null) {\r\n duration = this._settings.stateAnimationDuration;\r\n }\r\n if (duration == null) {\r\n duration = this.get(\"stateAnimationDuration\", this._entity.get(\"stateAnimationDuration\", 0));\r\n }\r\n let easing = this._settings.stateAnimationEasing;\r\n if (easing == null) {\r\n easing = this.get(\"stateAnimationEasing\", this._entity.get(\"stateAnimationEasing\", $ease.cubic));\r\n }\r\n const defaultState = this._entity.states.lookup(\"default\");\r\n const seen = {};\r\n seen[\"stateAnimationEasing\"] = true;\r\n seen[\"stateAnimationDuration\"] = true;\r\n const animations = {};\r\n this._eachSetting((key, value) => {\r\n if (!seen[key]) {\r\n seen[key] = true;\r\n // save values to default state\r\n if (this != defaultState) {\r\n if (!(key in defaultState._settings)) {\r\n defaultState._settings[key] = this._entity.get(key);\r\n }\r\n }\r\n const animation = this._entity.animate({\r\n key: key,\r\n to: value,\r\n duration: duration,\r\n easing: easing\r\n });\r\n if (animation) {\r\n animations[key] = animation;\r\n }\r\n }\r\n });\r\n return animations;\r\n }\r\n}\r\n/**\r\n * Collection of [[State]] objects for an element.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/states/} for more info\r\n */\r\nexport class States {\r\n constructor(entity) {\r\n this._states = {};\r\n this._entity = entity;\r\n }\r\n /**\r\n * Checks if a state by `name` exists. Returns it there is one.\r\n *\r\n * @param name State name\r\n * @return State\r\n */\r\n lookup(name) {\r\n return this._states[name];\r\n }\r\n /**\r\n * Sets supplied `settings` on a state by the `name`.\r\n *\r\n * If such state does not yet exists, it is created.\r\n *\r\n * @param name State name\r\n * @param settings Settings\r\n * @return New State\r\n */\r\n create(name, settings) {\r\n const state = this._states[name];\r\n if (state) {\r\n state.setAll(settings);\r\n return state;\r\n }\r\n else {\r\n const state = new State(this._entity, settings);\r\n this._states[name] = state;\r\n return state;\r\n }\r\n }\r\n /**\r\n * Removes the state called `name`.\r\n *\r\n * @param name State name\r\n */\r\n remove(name) {\r\n delete this._states[name];\r\n }\r\n /**\r\n * Applies a named state to the target element.\r\n *\r\n * @param newState State name\r\n */\r\n apply(newState) {\r\n const state = this._states[newState];\r\n if (state) {\r\n state.apply();\r\n }\r\n this._entity._applyState(newState);\r\n }\r\n /**\r\n * Applies a named state to the element.\r\n *\r\n * Returns an object representing all [[Animation]] objects created for\r\n * each setting key transition.\r\n *\r\n * @param newState State name\r\n * @return Animations\r\n */\r\n applyAnimate(newState, duration) {\r\n let animations;\r\n const state = this._states[newState];\r\n if (state) {\r\n animations = state.applyAnimate(duration);\r\n }\r\n this._entity._applyStateAnimated(newState, duration);\r\n return animations;\r\n }\r\n}\r\n//# sourceMappingURL=States.js.map","/**\r\n * @ignore\r\n */\r\nexport class Registry {\r\n constructor() {\r\n /**\r\n * Currently running version of amCharts.\r\n */\r\n this.version = \"5.18.0\";\r\n /**\r\n * List of applied licenses.\r\n * @ignore\r\n */\r\n this.licenses = [];\r\n /**\r\n * Entities that have their `id` setting set.\r\n */\r\n this.entitiesById = {};\r\n /**\r\n * All created [[Root]] elements.\r\n */\r\n this.rootElements = [];\r\n /**\r\n * Automatically dispose a [[Root]] element if it exists in the target container.\r\n *\r\n * @since 5.14.4\r\n */\r\n this.autoDispose = false;\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport const registry = new Registry();\r\n/**\r\n * Adds a license, e.g.:\r\n *\r\n * ```TypeScript\r\n * am5.addLicense(\"xxxxxxxx\");\r\n * ```\r\n * ```JavaScript\r\n * am5.addLicense(\"xxxxxxxx\");\r\n * ```\r\n *\r\n * Multiple licenses can be added to cover for multiple products.\r\n *\r\n * @param license License key\r\n */\r\nexport function addLicense(license) {\r\n registry.licenses.push(license);\r\n}\r\n/**\r\n * Disposes all [[Root]] elements.\r\n */\r\nexport function disposeAllRootElements() {\r\n let root;\r\n while ((root = registry.rootElements.pop())) {\r\n root.dispose();\r\n }\r\n}\r\n/**\r\n * Finds and returns a `Root` element assigned to a container with `id`.\r\n *\r\n * @param id Container ID\r\n * @return Root\r\n * @since 5.9.2\r\n */\r\nexport function getRootById(id) {\r\n let found;\r\n registry.rootElements.forEach((item) => {\r\n if (item.dom.id == id) {\r\n found = item;\r\n }\r\n });\r\n return found;\r\n}\r\n//# sourceMappingURL=Registry.js.map","import { Disposer } from \"./Disposer\";\r\nimport { EventDispatcher } from \"./EventDispatcher\";\r\nimport { AnimationState, getInterpolate } from \"./Animation\";\r\nimport { States } from \"./States\";\r\nimport { registry } from \"../Registry\";\r\nimport * as $object from \"./Object\";\r\nimport * as $ease from \"./Ease\";\r\nimport * as $array from \"./Array\";\r\nimport * as $order from \"./Order\";\r\n/**\r\n * Allows to dynamically modify setting value of its target element.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/adapters/} for more info\r\n */\r\nexport class Adapters {\r\n constructor(entity) {\r\n this._callbacks = {};\r\n this._disabled = {};\r\n this._entity = entity;\r\n }\r\n /**\r\n * Add a function (`callback`) that will modify value for setting `key`.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/adapters/} for more info\r\n */\r\n add(key, callback) {\r\n let callbacks = this._callbacks[key];\r\n if (callbacks === undefined) {\r\n callbacks = this._callbacks[key] = [];\r\n }\r\n callbacks.push(callback);\r\n this._entity._markDirtyKey(key);\r\n return new Disposer(() => {\r\n if ($array.removeFirst(callbacks, callback)) {\r\n this._entity._markDirtyKey(key);\r\n }\r\n });\r\n }\r\n /**\r\n * Removes all adapters for the specific key.\r\n *\r\n * @since 5.1.0\r\n */\r\n remove(key) {\r\n const callbacks = this._callbacks[key];\r\n if (callbacks !== undefined) {\r\n delete this._callbacks[key];\r\n if (callbacks.length !== 0) {\r\n this._entity._markDirtyKey(key);\r\n }\r\n }\r\n }\r\n /**\r\n * Enables (previously disabled) adapters for specific key.\r\n *\r\n * @since 5.1.0\r\n */\r\n enable(key) {\r\n if (this._disabled[key]) {\r\n delete this._disabled[key];\r\n this._entity._markDirtyKey(key);\r\n }\r\n }\r\n /**\r\n * Disables all adapters for specific key.\r\n *\r\n * @since 5.1.0\r\n */\r\n disable(key) {\r\n if (!this._disabled[key]) {\r\n this._disabled[key] = true;\r\n this._entity._markDirtyKey(key);\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n fold(key, value) {\r\n if (!this._disabled[key]) {\r\n const callbacks = this._callbacks[key];\r\n if (callbacks !== undefined) {\r\n for (let i = 0, len = callbacks.length; i < len; ++i) {\r\n value = callbacks[i](value, this._entity, key);\r\n }\r\n }\r\n }\r\n return value;\r\n }\r\n}\r\n/**\r\n * Animation object.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/animations/} for more info\r\n */\r\nexport class Animation {\r\n constructor(animation, from, to, duration, easing, loops, startingTime) {\r\n this._time = 0;\r\n this._stopped = false;\r\n this._playing = true;\r\n this.events = new EventDispatcher();\r\n this._animation = animation;\r\n this._from = from;\r\n this._to = to;\r\n this._duration = duration;\r\n this._easing = easing;\r\n this._loops = loops;\r\n this._interpolate = getInterpolate(from, to);\r\n this._oldTime = startingTime;\r\n }\r\n get to() {\r\n return this._to;\r\n }\r\n get from() {\r\n return this._from;\r\n }\r\n get playing() {\r\n return this._playing;\r\n }\r\n get stopped() {\r\n return this._stopped;\r\n }\r\n stop() {\r\n if (!this._stopped) {\r\n this._stopped = true;\r\n this._playing = false;\r\n if (this.events.isEnabled(\"stopped\")) {\r\n this.events.dispatch(\"stopped\", {\r\n type: \"stopped\",\r\n target: this,\r\n });\r\n }\r\n }\r\n }\r\n pause() {\r\n this._playing = false;\r\n this._oldTime = null;\r\n }\r\n play() {\r\n if (!this._stopped && !this._playing) {\r\n this._playing = true;\r\n this._animation._startAnimation();\r\n }\r\n }\r\n get percentage() {\r\n return this._time / this._duration;\r\n }\r\n waitForStop() {\r\n return new Promise((resolve, _reject) => {\r\n if (this._stopped) {\r\n resolve();\r\n }\r\n else {\r\n const listener = () => {\r\n stopped.dispose();\r\n resolve();\r\n };\r\n const stopped = this.events.on(\"stopped\", listener);\r\n }\r\n });\r\n }\r\n _checkEnded() {\r\n if (this._loops > 1) {\r\n --this._loops;\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n _run(currentTime) {\r\n if (this._oldTime !== null) {\r\n this._time += currentTime - this._oldTime;\r\n if (this._time > this._duration) {\r\n this._time = this._duration;\r\n }\r\n }\r\n this._oldTime = currentTime;\r\n }\r\n _reset(currentTime) {\r\n this._oldTime = currentTime;\r\n this._time = 0;\r\n }\r\n _value(diff) {\r\n if (diff <= 0) {\r\n return this._from;\r\n }\r\n const eased = this._easing(diff);\r\n if (eased >= 0.999999) {\r\n return this._to;\r\n }\r\n if (eased <= 0.000001) {\r\n return this._from;\r\n }\r\n return this._interpolate(eased, this._from, this._to);\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nlet counter = 0;\r\n/**\r\n * Base class for [[Entity]] objects that support Settings.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\r\n */\r\nexport class Settings {\r\n constructor(settings) {\r\n /**\r\n * Unique ID.\r\n */\r\n this.uid = ++counter;\r\n this._privateSettings = {};\r\n this._settingEvents = {};\r\n this._privateSettingEvents = {};\r\n this._debouncedSettingEvents = {};\r\n this._debouncedPrivateSettingEvents = {};\r\n this._prevSettings = {};\r\n this._prevPrivateSettings = {};\r\n this._animatingSettings = {};\r\n this._animatingPrivateSettings = {};\r\n this._disposed = false;\r\n // TODO move this into Entity\r\n this._userProperties = {};\r\n /**\r\n * If this is set to `false` then disposing does nothing, it's a no-op.\r\n */\r\n this.enableDispose = true;\r\n this._settings = settings;\r\n }\r\n _checkDirty() {\r\n $object.keys(this._settings).forEach((key) => {\r\n this._userProperties[key] = true;\r\n this._markDirtyKey(key);\r\n });\r\n }\r\n /**\r\n * @ignore\r\n */\r\n resetUserSettings() {\r\n this._userProperties = {};\r\n }\r\n _runAnimation(currentTime) {\r\n let state = AnimationState.Stopped;\r\n if (!this.isDisposed()) {\r\n let playing = false;\r\n let paused = false;\r\n $object.each(this._animatingSettings, (key, animation) => {\r\n if (animation.stopped) {\r\n this._stopAnimation(key);\r\n }\r\n else if (animation.playing) {\r\n animation._run(currentTime);\r\n const diff = animation.percentage;\r\n if (diff >= 1) {\r\n if (animation._checkEnded()) {\r\n this.set(key, animation._value(1));\r\n }\r\n else {\r\n playing = true;\r\n animation._reset(currentTime);\r\n this._set(key, animation._value(1));\r\n }\r\n }\r\n else {\r\n playing = true;\r\n this._set(key, animation._value(diff));\r\n }\r\n }\r\n else {\r\n paused = true;\r\n }\r\n });\r\n $object.each(this._animatingPrivateSettings, (key, animation) => {\r\n if (animation.stopped) {\r\n this._stopAnimationPrivate(key);\r\n }\r\n else if (animation.playing) {\r\n animation._run(currentTime);\r\n const diff = animation.percentage;\r\n if (diff >= 1) {\r\n if (animation._checkEnded()) {\r\n this.setPrivate(key, animation._value(1));\r\n }\r\n else {\r\n playing = true;\r\n animation._reset(currentTime);\r\n this._setPrivate(key, animation._value(1));\r\n }\r\n }\r\n else {\r\n playing = true;\r\n this._setPrivate(key, animation._value(diff));\r\n }\r\n }\r\n else {\r\n paused = true;\r\n }\r\n });\r\n if (playing) {\r\n state = AnimationState.Playing;\r\n }\r\n else if (paused) {\r\n state = AnimationState.Paused;\r\n }\r\n }\r\n return state;\r\n }\r\n _markDirtyKey(_key) {\r\n this.markDirty();\r\n }\r\n _markDirtyPrivateKey(_key) {\r\n this.markDirty();\r\n }\r\n /**\r\n * Sets a callback function to invoke when specific key of settings changes\r\n * or is set.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/events/#Settings_value_change} for more info\r\n * @param key Settings key\r\n * @param callback Callback\r\n * @return Disposer for event\r\n */\r\n on(key, callback) {\r\n let events = this._settingEvents[key];\r\n if (events === undefined) {\r\n events = this._settingEvents[key] = [];\r\n }\r\n events.push(callback);\r\n return new Disposer(() => {\r\n $array.removeFirst(events, callback);\r\n if (events.length === 0) {\r\n delete this._settingEvents[key];\r\n }\r\n });\r\n }\r\n /**\r\n * Removes a callback for when value of a setting changes.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/events/#Settings_value_change} for more info\r\n * @param key Private settings key\r\n * @param callback Callback\r\n * @since 5.9.2\r\n */\r\n off(key, callback) {\r\n let events = this._settingEvents[key];\r\n if (events !== undefined && callback !== undefined) {\r\n $array.removeFirst(events, callback);\r\n }\r\n else {\r\n delete this._settingEvents[key];\r\n }\r\n }\r\n _onDebouncedHelper(map, key, callback, delay) {\r\n let events = map[key];\r\n if (events === undefined) {\r\n events = map[key] = [];\r\n }\r\n const entry = { cb: callback, delay };\r\n events.push(entry);\r\n return new Disposer(() => {\r\n if (entry.timeout) {\r\n window.clearTimeout(entry.timeout);\r\n }\r\n $array.removeFirst(events, entry);\r\n if (events.length === 0) {\r\n delete map[key];\r\n }\r\n });\r\n }\r\n _offDebouncedHelper(map, key, callback) {\r\n const events = map[key];\r\n if (events !== undefined) {\r\n if (callback !== undefined) {\r\n const index = $array.findIndex(events, (e) => e.cb === callback);\r\n if (index !== -1) {\r\n const entry = events[index];\r\n if (entry.timeout) {\r\n window.clearTimeout(entry.timeout);\r\n }\r\n events.splice(index, 1);\r\n if (events.length === 0) {\r\n delete map[key];\r\n }\r\n }\r\n }\r\n else {\r\n $array.each(events, (entry) => {\r\n if (entry.timeout) {\r\n window.clearTimeout(entry.timeout);\r\n }\r\n });\r\n delete map[key];\r\n }\r\n }\r\n }\r\n /**\r\n * Sets a debounced callback function to invoke when specific key of settings\r\n * changes or is set. The callback fires only once even if the setting is changed\r\n * multiple times within the debounce delay.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/events/#Settings_value_change} for more info\r\n * @param key Settings key\r\n * @param callback Callback\r\n * @param debounceDelay Debounce delay in milliseconds\r\n * @return Disposer for event\r\n */\r\n onDebounced(key, callback, debounceDelay) {\r\n return this._onDebouncedHelper(this._debouncedSettingEvents, key, callback, debounceDelay);\r\n }\r\n /**\r\n * Removes a debounced callback for when value of a setting changes.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/events/#Settings_value_change} for more info\r\n * @param key Settings key\r\n * @param callback Callback\r\n */\r\n offDebounced(key, callback) {\r\n this._offDebouncedHelper(this._debouncedSettingEvents, key, callback);\r\n }\r\n /**\r\n * Sets a callback function to invoke when specific key of private settings\r\n * changes or is set.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/events/#Settings_value_change} for more info\r\n * @param key Private settings key\r\n * @param callback Callback\r\n * @return Disposer for event\r\n */\r\n onPrivate(key, callback) {\r\n let events = this._privateSettingEvents[key];\r\n if (events === undefined) {\r\n events = this._privateSettingEvents[key] = [];\r\n }\r\n events.push(callback);\r\n return new Disposer(() => {\r\n $array.removeFirst(events, callback);\r\n if (events.length === 0) {\r\n delete this._privateSettingEvents[key];\r\n }\r\n });\r\n }\r\n /**\r\n * Removes a callback for when value of a private setting changes.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/events/#Settings_value_change} for more info\r\n * @param key Private settings key\r\n * @param callback Callback\r\n * @since 5.9.2\r\n */\r\n offPrivate(key, callback) {\r\n let events = this._privateSettingEvents[key];\r\n if (events !== undefined && callback !== undefined) {\r\n $array.removeFirst(events, callback);\r\n }\r\n else {\r\n delete this._privateSettingEvents[key];\r\n }\r\n }\r\n /**\r\n * Sets a debounced callback function to invoke when specific key of private\r\n * settings changes or is set. The callback fires only once even if the setting\r\n * is changed multiple times within the debounce delay.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/events/#Settings_value_change} for more info\r\n * @param key Private settings key\r\n * @param callback Callback\r\n * @param debounceDelay Debounce delay in milliseconds\r\n * @return Disposer for event\r\n */\r\n onPrivateDebounced(key, callback, debounceDelay) {\r\n return this._onDebouncedHelper(this._debouncedPrivateSettingEvents, key, callback, debounceDelay);\r\n }\r\n /**\r\n * Removes a debounced callback for when value of a private setting changes.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/events/#Settings_value_change} for more info\r\n * @param key Private settings key\r\n * @param callback Callback\r\n */\r\n offDebouncedPrivate(key, callback) {\r\n this._offDebouncedHelper(this._debouncedPrivateSettingEvents, key, callback);\r\n }\r\n /**\r\n * @ignore\r\n */\r\n getRaw(key, fallback) {\r\n const value = this._settings[key];\r\n if (value !== undefined) {\r\n return value;\r\n }\r\n else {\r\n return fallback;\r\n }\r\n }\r\n /**\r\n * Returns `true` if the setting exists.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\r\n * @param key Settings key\r\n * @return {boolean} Key exists\r\n */\r\n has(key) {\r\n return key in this._settings;\r\n }\r\n get(key, fallback) {\r\n return this.getRaw(key, fallback);\r\n }\r\n _sendKeyEvent(key, value) {\r\n const events = this._settingEvents[key];\r\n if (events !== undefined) {\r\n $array.each(events, (callback) => {\r\n callback(value, this, key);\r\n });\r\n }\r\n const debouncedEvents = this._debouncedSettingEvents[key];\r\n if (debouncedEvents !== undefined) {\r\n $array.each(debouncedEvents, (entry) => {\r\n if (entry.timeout) {\r\n window.clearTimeout(entry.timeout);\r\n }\r\n entry.timeout = window.setTimeout(() => {\r\n entry.timeout = undefined;\r\n entry.cb(value, this, key);\r\n }, entry.delay);\r\n });\r\n }\r\n }\r\n _sendPrivateKeyEvent(key, value) {\r\n const events = this._privateSettingEvents[key];\r\n if (events !== undefined) {\r\n $array.each(events, (callback) => {\r\n callback(value, this, key);\r\n });\r\n }\r\n const debouncedEvents = this._debouncedPrivateSettingEvents[key];\r\n if (debouncedEvents !== undefined) {\r\n $array.each(debouncedEvents, (entry) => {\r\n if (entry.timeout) {\r\n window.clearTimeout(entry.timeout);\r\n }\r\n entry.timeout = window.setTimeout(() => {\r\n entry.timeout = undefined;\r\n entry.cb(value, this, key);\r\n }, entry.delay);\r\n });\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n _setRaw(key, old, value) {\r\n this._prevSettings[key] = old;\r\n this._sendKeyEvent(key, value);\r\n }\r\n /**\r\n * @ignore\r\n */\r\n setRaw(key, value) {\r\n const old = this._settings[key];\r\n this._settings[key] = value;\r\n if (old !== value) {\r\n this._setRaw(key, old, value);\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n _set(key, value) {\r\n const old = this._settings[key];\r\n this._settings[key] = value;\r\n if (old !== value) {\r\n this._setRaw(key, old, value);\r\n this._markDirtyKey(key);\r\n }\r\n }\r\n _stopAnimation(key) {\r\n const animation = this._animatingSettings[key];\r\n if (animation) {\r\n delete this._animatingSettings[key];\r\n animation.stop();\r\n }\r\n }\r\n /**\r\n * Sets a setting `value` for the specified `key`, and returns the same `value`.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\r\n * @param key Setting key\r\n * @param value Setting value\r\n * @return Setting value\r\n */\r\n set(key, value) {\r\n this._set(key, value);\r\n this._stopAnimation(key);\r\n return value;\r\n }\r\n /**\r\n * Removes a setting value for the specified `key`;\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\r\n * @param key Setting key\r\n */\r\n remove(key) {\r\n if (key in this._settings) {\r\n this._prevSettings[key] = this._settings[key];\r\n delete this._settings[key];\r\n this._sendKeyEvent(key, undefined);\r\n this._markDirtyKey(key);\r\n }\r\n this._stopAnimation(key);\r\n }\r\n /**\r\n * Removes all keys;\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\r\n */\r\n removeAll() {\r\n $array.each($object.keys(this._settings), (key) => {\r\n this.remove(key);\r\n });\r\n }\r\n /**\r\n * Returns a value of a private setting.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/#Private_settings} for more info\r\n */\r\n getPrivate(key, fallback) {\r\n const value = this._privateSettings[key];\r\n if (value !== undefined) {\r\n return value;\r\n }\r\n else {\r\n return fallback;\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n _setPrivateRaw(key, old, value) {\r\n this._prevPrivateSettings[key] = old;\r\n this._sendPrivateKeyEvent(key, value);\r\n }\r\n /**\r\n * @ignore\r\n */\r\n setPrivateRaw(key, value) {\r\n const old = this._privateSettings[key];\r\n this._privateSettings[key] = value;\r\n if (old !== value) {\r\n this._setPrivateRaw(key, old, value);\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n _setPrivate(key, value) {\r\n const old = this._privateSettings[key];\r\n this._privateSettings[key] = value;\r\n if (old !== value) {\r\n this._setPrivateRaw(key, old, value);\r\n this._markDirtyPrivateKey(key);\r\n }\r\n }\r\n _stopAnimationPrivate(key) {\r\n const animation = this._animatingPrivateSettings[key];\r\n if (animation) {\r\n animation.stop();\r\n delete this._animatingPrivateSettings[key];\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n setPrivate(key, value) {\r\n this._setPrivate(key, value);\r\n this._stopAnimationPrivate(key);\r\n return value;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n removePrivate(key) {\r\n if (key in this._privateSettings) {\r\n this._prevPrivateSettings[key] = this._privateSettings[key];\r\n delete this._privateSettings[key];\r\n this._markDirtyPrivateKey(key);\r\n }\r\n this._stopAnimationPrivate(key);\r\n }\r\n /**\r\n * Sets multiple settings at once.\r\n *\r\n * `settings` must be an object with key: value pairs.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\r\n * @param settings Settings\r\n */\r\n setAll(settings) {\r\n $object.each(settings, (key, value) => {\r\n this.set(key, value);\r\n });\r\n }\r\n /**\r\n * Animates setting values from current/start values to new ones.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/animations/#Animating_settings} for more info\r\n * @param options Animation options\r\n * @return Animation object\r\n */\r\n animate(options) {\r\n const key = options.key;\r\n const to = options.to;\r\n const duration = options.duration || 0;\r\n const loops = options.loops || 1;\r\n const from = (options.from === undefined ? this.get(key) : options.from);\r\n const easing = (options.easing === undefined ? $ease.linear : options.easing);\r\n if (duration === 0) {\r\n this.set(key, to);\r\n }\r\n else {\r\n if (from === undefined || from === to) {\r\n this.set(key, to);\r\n }\r\n else {\r\n this.set(key, from);\r\n const animation = this._animatingSettings[key] = new Animation(this, from, to, duration, easing, loops, this._animationTime());\r\n this._startAnimation();\r\n return animation;\r\n }\r\n }\r\n const animation = new Animation(this, from, to, duration, easing, loops, null);\r\n animation.stop();\r\n return animation;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n animatePrivate(options) {\r\n const key = options.key;\r\n const to = options.to;\r\n const duration = options.duration || 0;\r\n const loops = options.loops || 1;\r\n const from = (options.from === undefined ? this.getPrivate(key) : options.from);\r\n const easing = (options.easing === undefined ? $ease.linear : options.easing);\r\n if (duration === 0) {\r\n this.setPrivate(key, to);\r\n }\r\n else {\r\n if (from === undefined || from === to) {\r\n this.setPrivate(key, to);\r\n }\r\n else {\r\n this.setPrivate(key, from);\r\n const animation = this._animatingPrivateSettings[key] = new Animation(this, from, to, duration, easing, loops, this._animationTime());\r\n this._startAnimation();\r\n return animation;\r\n }\r\n }\r\n const animation = new Animation(this, from, to, duration, easing, loops, null);\r\n animation.stop();\r\n return animation;\r\n }\r\n _dispose() { }\r\n /**\r\n * Returns `true` if this element is disposed.\r\n *\r\n * @return Disposed\r\n */\r\n isDisposed() {\r\n return this._disposed;\r\n }\r\n /**\r\n * Disposes this object.\r\n */\r\n dispose() {\r\n if (this.enableDispose && !this._disposed) {\r\n this._disposed = true;\r\n this._dispose();\r\n }\r\n }\r\n}\r\n/**\r\n * Base class.\r\n *\r\n * @important\r\n */\r\nexport class Entity extends Settings {\r\n /**\r\n * IMPORTANT! Do not instantiate this class via `new Class()` syntax.\r\n *\r\n * Use static method `Class.new()` instead.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/getting-started/#New_element_syntax} for more info\r\n * @ignore\r\n */\r\n constructor(root, settings, isReal, templates = []) {\r\n super(settings);\r\n this.states = new States(this);\r\n this.adapters = new Adapters(this);\r\n this.events = this._createEvents();\r\n this._userPrivateProperties = {};\r\n this._dirty = {};\r\n this._dirtyPrivate = {};\r\n // Templates for the themes\r\n this._templates = [];\r\n // Default themes which can be overridden by the user's themes\r\n this._defaultThemes = [];\r\n // Disposers for all of the templates\r\n this._templateDisposers = [];\r\n this._disposers = [];\r\n // Whether the template setup function should be run\r\n this._runSetup = true;\r\n this._disposerProperties = {};\r\n if (!isReal) {\r\n throw new Error(\"You cannot use `new Class()`, instead use `Class.new()`\");\r\n }\r\n this._root = root;\r\n this._internalTemplates = templates;\r\n if (settings.id) {\r\n this._registerId(settings.id);\r\n }\r\n }\r\n /**\r\n * Use this method to create an instance of this class.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/getting-started/#New_element_syntax} for more info\r\n * @param root Root element\r\n * @param settings Settings\r\n * @param template Template\r\n * @return Instantiated object\r\n */\r\n static new(root, settings, template) {\r\n const x = (new this(root, settings, true));\r\n x._template = template;\r\n x._afterNew();\r\n return x;\r\n }\r\n static _new(root, settings, templates = []) {\r\n const x = (new this(root, settings, true, templates));\r\n x._afterNew();\r\n return x;\r\n }\r\n _afterNew() {\r\n this._checkDirty();\r\n let shouldApply = false;\r\n const template = this._template;\r\n if (template) {\r\n shouldApply = true;\r\n template._setObjectTemplate(this);\r\n }\r\n $array.each(this._internalTemplates, (template) => {\r\n shouldApply = true;\r\n template._setObjectTemplate(this);\r\n });\r\n if (shouldApply) {\r\n this._applyTemplates(false);\r\n }\r\n this.states.create(\"default\", {});\r\n this._setDefaults();\r\n }\r\n // This is the same as _afterNew, except it also applies the themes.\r\n // This should only be used for classes which don't have a parent (because they extend from Entity and not Sprite).\r\n _afterNewApplyThemes() {\r\n this._checkDirty();\r\n const template = this._template;\r\n if (template) {\r\n template._setObjectTemplate(this);\r\n }\r\n $array.each(this._internalTemplates, (template) => {\r\n template._setObjectTemplate(this);\r\n });\r\n this.states.create(\"default\", {});\r\n this._setDefaults();\r\n this._applyThemes();\r\n }\r\n _createEvents() {\r\n return new EventDispatcher();\r\n }\r\n /**\r\n * @ignore\r\n */\r\n get classNames() {\r\n return this.constructor.classNames;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n get className() {\r\n return this.constructor.className;\r\n }\r\n _setDefaults() {\r\n }\r\n _setDefaultFn(key, f) {\r\n const value = this.get(key);\r\n if (value) {\r\n return value;\r\n }\r\n else {\r\n const value = f();\r\n this.set(key, value);\r\n return value;\r\n }\r\n }\r\n _setDefault(key, value) {\r\n if (!this.has(key)) {\r\n super.set(key, value);\r\n }\r\n }\r\n _setRawDefault(key, value) {\r\n if (!this.has(key)) {\r\n super.setRaw(key, value);\r\n }\r\n }\r\n _clearDirty() {\r\n $object.keys(this._dirty).forEach((key) => {\r\n this._dirty[key] = false;\r\n });\r\n $object.keys(this._dirtyPrivate).forEach((key) => {\r\n this._dirtyPrivate[key] = false;\r\n });\r\n }\r\n /**\r\n * @ignore\r\n */\r\n isDirty(key) {\r\n return !!this._dirty[key];\r\n }\r\n /**\r\n * @ignore\r\n */\r\n isPrivateDirty(key) {\r\n return !!this._dirtyPrivate[key];\r\n }\r\n _markDirtyKey(key) {\r\n this._dirty[key] = true;\r\n super._markDirtyKey(key);\r\n }\r\n _markDirtyPrivateKey(key) {\r\n this._dirtyPrivate[key] = true;\r\n super._markDirtyKey(key);\r\n }\r\n /**\r\n * Checks if element is of certain class (or inherits one).\r\n *\r\n * @param type Class name to check\r\n * @return {boolean} Is of class?\r\n */\r\n isType(type) {\r\n return this.classNames.indexOf(type) !== -1;\r\n }\r\n _pushPropertyDisposer(key, disposer) {\r\n let disposers = this._disposerProperties[key];\r\n if (disposers === undefined) {\r\n disposers = this._disposerProperties[key] = [];\r\n }\r\n disposers.push(disposer);\r\n return disposer;\r\n }\r\n _disposeProperty(key) {\r\n const disposers = this._disposerProperties[key];\r\n if (disposers !== undefined) {\r\n $array.each(disposers, (disposer) => {\r\n disposer.dispose();\r\n });\r\n delete this._disposerProperties[key];\r\n }\r\n }\r\n /**\r\n * @todo needs description\r\n * @param value Template\r\n */\r\n set template(value) {\r\n const template = this._template;\r\n if (template !== value) {\r\n this._template = value;\r\n if (template) {\r\n template._removeObjectTemplate(this);\r\n }\r\n if (value) {\r\n value._setObjectTemplate(this);\r\n }\r\n this._applyTemplates();\r\n }\r\n }\r\n get template() {\r\n return this._template;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n markDirty() {\r\n this._root._addDirtyEntity(this);\r\n }\r\n _startAnimation() {\r\n this._root._addAnimation(this);\r\n }\r\n _animationTime() {\r\n return this._root.animationTime;\r\n }\r\n _applyState(_name) { }\r\n _applyStateAnimated(_name, _duration) { }\r\n get(key, fallback) {\r\n const value = this.adapters.fold(key, this._settings[key]);\r\n if (value !== undefined) {\r\n return value;\r\n }\r\n else {\r\n return fallback;\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n isUserSetting(key) {\r\n return this._userProperties[key] || false;\r\n }\r\n /**\r\n * Sets a setting `value` for the specified `key`, and returns the same `value`.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\r\n * @param key Setting key\r\n * @param value Setting value\r\n * @return Setting value\r\n */\r\n set(key, value) {\r\n this._userProperties[key] = true;\r\n return super.set(key, value);\r\n }\r\n /**\r\n * @ignore\r\n */\r\n setRaw(key, value) {\r\n this._userProperties[key] = true;\r\n super.setRaw(key, value);\r\n }\r\n /**\r\n * Sets a setting `value` for the specified `key` only if the value for this key was not set previously using set method, and returns the same `value`.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\r\n * @param key Setting key\r\n * @param value Setting value\r\n * @return Setting value\r\n */\r\n _setSoft(key, value) {\r\n if (!this._userProperties[key]) {\r\n return super.set(key, value);\r\n }\r\n return value;\r\n }\r\n /**\r\n * Removes a setting value for the specified `key`.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\r\n * @param key Setting key\r\n */\r\n remove(key) {\r\n delete this._userProperties[key];\r\n this._removeTemplateProperty(key);\r\n }\r\n /**\r\n * @ignore\r\n */\r\n setPrivate(key, value) {\r\n this._userPrivateProperties[key] = true;\r\n return super.setPrivate(key, value);\r\n }\r\n /**\r\n * @ignore\r\n */\r\n setPrivateRaw(key, value) {\r\n this._userPrivateProperties[key] = true;\r\n super.setPrivateRaw(key, value);\r\n }\r\n /**\r\n * @ignore\r\n */\r\n removePrivate(key) {\r\n delete this._userPrivateProperties[key];\r\n this._removeTemplatePrivateProperty(key);\r\n }\r\n _setTemplateProperty(template, key, value) {\r\n if (!this._userProperties[key]) {\r\n const match = this._findTemplateByKey(key);\r\n if (template === match) {\r\n super.set(key, value);\r\n }\r\n }\r\n }\r\n _setTemplatePrivateProperty(template, key, value) {\r\n if (!this._userPrivateProperties[key]) {\r\n const match = this._findTemplateByPrivateKey(key);\r\n if (template === match) {\r\n super.setPrivate(key, value);\r\n }\r\n }\r\n }\r\n _removeTemplateProperty(key) {\r\n if (!this._userProperties[key]) {\r\n const match = this._findTemplateByKey(key);\r\n if (match) {\r\n // TODO don't stop the animation if the property didn't change\r\n super.set(key, match._settings[key]);\r\n }\r\n else {\r\n super.remove(key);\r\n }\r\n }\r\n }\r\n _removeTemplatePrivateProperty(key) {\r\n if (!this._userPrivateProperties[key]) {\r\n const match = this._findTemplateByPrivateKey(key);\r\n if (match) {\r\n // TODO don't stop the animation if the property didn't change\r\n super.setPrivate(key, match._privateSettings[key]);\r\n }\r\n else {\r\n super.removePrivate(key);\r\n }\r\n }\r\n }\r\n _walkParents(f) {\r\n f(this._root._rootContainer);\r\n f(this);\r\n }\r\n // TODO faster version of this method which is specialized to just 1 key\r\n _applyStateByKey(name) {\r\n const other = this.states.create(name, {});\r\n const seen = {};\r\n this._eachTemplate((template) => {\r\n const state = template.states.lookup(name);\r\n if (state) {\r\n state._apply(other, seen);\r\n }\r\n });\r\n $object.each(other._settings, (key) => {\r\n if (!seen[key] && !other._userSettings[key]) {\r\n other.remove(key);\r\n }\r\n });\r\n }\r\n _applyTemplate(template, state) {\r\n this._templateDisposers.push(template._apply(this, state));\r\n $object.each(template._settings, (key, value) => {\r\n if (!state.settings[key] && !this._userProperties[key]) {\r\n state.settings[key] = true;\r\n super.set(key, value);\r\n }\r\n });\r\n $object.each(template._privateSettings, (key, value) => {\r\n if (!state.privateSettings[key] && !this._userPrivateProperties[key]) {\r\n state.privateSettings[key] = true;\r\n super.setPrivate(key, value);\r\n }\r\n });\r\n if (this._runSetup && template.setup) {\r\n this._runSetup = false;\r\n template.setup(this);\r\n }\r\n }\r\n /**\r\n * Calls the closure with each template and returns the first template which is true\r\n */\r\n _findStaticTemplate(f) {\r\n if (this._template) {\r\n if (f(this._template)) {\r\n return this._template;\r\n }\r\n }\r\n }\r\n _eachTemplate(f) {\r\n this._findStaticTemplate((template) => {\r\n f(template);\r\n return false;\r\n });\r\n // _internalTemplates is sorted with most specific to the right\r\n $array.eachReverse(this._internalTemplates, f);\r\n // _templates is sorted with most specific to the left\r\n $array.each(this._templates, f);\r\n }\r\n _applyTemplates(remove = true) {\r\n if (remove) {\r\n this._disposeTemplates();\r\n }\r\n const state = {\r\n settings: {},\r\n privateSettings: {},\r\n states: {},\r\n };\r\n this._eachTemplate((template) => {\r\n this._applyTemplate(template, state);\r\n });\r\n if (remove) {\r\n $object.each(this._settings, (key) => {\r\n if (!this._userProperties[key] && !state.settings[key]) {\r\n super.remove(key);\r\n }\r\n });\r\n $object.each(this._privateSettings, (key) => {\r\n if (!this._userPrivateProperties[key] && !state.privateSettings[key]) {\r\n super.removePrivate(key);\r\n }\r\n });\r\n }\r\n }\r\n _findTemplate(f) {\r\n const value = this._findStaticTemplate(f);\r\n if (value === undefined) {\r\n // _internalTemplates is sorted with most specific to the right\r\n const value = $array.findReverse(this._internalTemplates, f);\r\n if (value === undefined) {\r\n // _templates is sorted with most specific to the left\r\n return $array.find(this._templates, f);\r\n }\r\n else {\r\n return value;\r\n }\r\n }\r\n else {\r\n return value;\r\n }\r\n }\r\n _findTemplateByKey(key) {\r\n return this._findTemplate((template) => {\r\n return key in template._settings;\r\n });\r\n }\r\n _findTemplateByPrivateKey(key) {\r\n return this._findTemplate((template) => {\r\n return key in template._privateSettings;\r\n });\r\n }\r\n _disposeTemplates() {\r\n $array.each(this._templateDisposers, (disposer) => {\r\n disposer.dispose();\r\n });\r\n this._templateDisposers.length = 0;\r\n }\r\n _removeTemplates() {\r\n $array.each(this._templates, (template) => {\r\n template._removeObjectTemplate(this);\r\n });\r\n this._templates.length = 0;\r\n }\r\n _applyThemes(force = false) {\r\n if (this.get(\"ignoreThemes\")) {\r\n return false;\r\n }\r\n let isConnected = false;\r\n const defaults = [];\r\n let themes = [];\r\n const themeTags = new Set();\r\n const tags = this.get(\"themeTagsSelf\");\r\n if (tags) {\r\n $array.each(tags, (tag) => {\r\n themeTags.add(tag);\r\n });\r\n }\r\n this._walkParents((entity) => {\r\n if (entity === this._root._rootContainer) {\r\n isConnected = true;\r\n }\r\n if (entity._defaultThemes.length > 0) {\r\n defaults.push(entity._defaultThemes);\r\n }\r\n const theme = entity.get(\"themes\");\r\n if (theme) {\r\n themes.push(theme);\r\n }\r\n const tags = entity.get(\"themeTags\");\r\n if (tags) {\r\n $array.each(tags, (tag) => {\r\n themeTags.add(tag);\r\n });\r\n }\r\n });\r\n themes = defaults.concat(themes);\r\n this._removeTemplates();\r\n if (isConnected || force) {\r\n $array.eachReverse(this.classNames, (name) => {\r\n const allRules = [];\r\n $array.each(themes, (themes) => {\r\n $array.each(themes, (theme) => {\r\n const rules = theme._lookupRules(name);\r\n if (rules) {\r\n $array.eachReverse(rules, (rule) => {\r\n const matches = rule.tags.every((tag) => {\r\n return themeTags.has(tag);\r\n });\r\n if (matches) {\r\n const result = $array.getFirstSortedIndex(allRules, (x) => {\r\n const order = $order.compare(rule.tags.length, x.tags.length);\r\n if (order === 0) {\r\n return $order.compareArray(rule.tags, x.tags, $order.compare);\r\n }\r\n else {\r\n return order;\r\n }\r\n });\r\n allRules.splice(result.index, 0, rule);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n $array.each(allRules, (rule) => {\r\n this._templates.push(rule.template);\r\n rule.template._setObjectTemplate(this);\r\n });\r\n });\r\n }\r\n this._applyTemplates();\r\n if (isConnected || force) {\r\n // This causes it to only run the setup function the first time that the themes are applied\r\n this._runSetup = false;\r\n }\r\n return isConnected || force;\r\n }\r\n _changed() { }\r\n _beforeChanged() {\r\n if (this.isDirty(\"id\")) {\r\n const id = this.get(\"id\");\r\n if (id) {\r\n this._registerId(id);\r\n }\r\n const prevId = this._prevSettings.id;\r\n if (prevId) {\r\n delete this._root.entitiesById[prevId];\r\n delete registry.entitiesById[prevId];\r\n }\r\n }\r\n }\r\n _registerId(id) {\r\n if (this._root.entitiesById[id] && this._root.entitiesById[id] !== this) {\r\n throw new Error(\"An entity with id \\\"\" + id + \"\\\" already exists.\");\r\n }\r\n this._root.entitiesById[id] = this;\r\n registry.entitiesById[id] = this;\r\n }\r\n _afterChanged() { }\r\n /**\r\n * @ignore\r\n */\r\n addDisposer(disposer) {\r\n this._disposers.push(disposer);\r\n return disposer;\r\n }\r\n _dispose() {\r\n super._dispose();\r\n const template = this._template;\r\n if (template) {\r\n template._removeObjectTemplate(this);\r\n }\r\n $array.each(this._internalTemplates, (template) => {\r\n template._removeObjectTemplate(this);\r\n });\r\n this._removeTemplates();\r\n this._disposeTemplates();\r\n this.events.dispose();\r\n this._disposers.forEach((x) => {\r\n x.dispose();\r\n });\r\n $object.each(this._disposerProperties, (_, disposers) => {\r\n $array.each(disposers, (disposer) => {\r\n disposer.dispose();\r\n });\r\n });\r\n const id = this.get(\"id\");\r\n if (id) {\r\n delete this._root.entitiesById[id];\r\n delete registry.entitiesById[id];\r\n }\r\n }\r\n /**\r\n * Creates and returns a \"disposable\" timeout.\r\n *\r\n * @param fn Callback\r\n * @param delay Delay in milliseconds\r\n * @return Timeout disposer\r\n */\r\n setTimeout(fn, delay) {\r\n const id = setTimeout(() => {\r\n this.removeDispose(disposer);\r\n fn();\r\n }, delay);\r\n const disposer = new Disposer(() => {\r\n clearTimeout(id);\r\n });\r\n this._disposers.push(disposer);\r\n return disposer;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n removeDispose(target) {\r\n if (!this.isDisposed()) {\r\n let index = $array.indexOf(this._disposers, target);\r\n if (index > -1) {\r\n this._disposers.splice(index, 1);\r\n }\r\n }\r\n target.dispose();\r\n }\r\n /**\r\n * @ignore\r\n */\r\n hasTag(tag) {\r\n return $array.indexOf(this.get(\"themeTags\", []), tag) !== -1;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n addTag(tag) {\r\n if (!this.hasTag(tag)) {\r\n const tags = this.get(\"themeTags\", []);\r\n tags.push(tag);\r\n this.set(\"themeTags\", tags);\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n removeTag(tag) {\r\n if (this.hasTag(tag)) {\r\n const tags = this.get(\"themeTags\", []);\r\n $array.remove(tags, tag);\r\n this.set(\"themeTags\", tags);\r\n }\r\n }\r\n _t(text, locale, ...rest) {\r\n return this._root.language.translate(text, locale, ...rest);\r\n }\r\n /**\r\n * An instance of [[Root]] object.\r\n *\r\n * @readonly\r\n * @since 5.0.6\r\n * @return Root object\r\n */\r\n get root() {\r\n return this._root;\r\n }\r\n}\r\nEntity.className = \"Entity\";\r\nEntity.classNames = [\"Entity\"];\r\n//# sourceMappingURL=Entity.js.map","import { Entity } from \"./Entity\";\r\nimport { Color } from \"./Color\";\r\n/**\r\n * An object which holds list of colors and can generate new ones.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/#Color_sets} for more info\r\n */\r\nexport class ColorSet extends Entity {\r\n //protected _currentPass: number = 0;\r\n _afterNew() {\r\n // Applying themes because color set will not have parent\r\n super._afterNewApplyThemes();\r\n this._dirty[\"colors\"] = false;\r\n }\r\n _beforeChanged() {\r\n if (this.isDirty(\"colors\")) {\r\n this.reset();\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n generateColors() {\r\n this.setPrivate(\"currentPass\", this.getPrivate(\"currentPass\", 0) + 1);\r\n const pass = this.getPrivate(\"currentPass\");\r\n const colors = this.get(\"colors\", [this.get(\"baseColor\", Color.fromHex(0xff0000))]);\r\n if (!this.getPrivate(\"numColors\")) {\r\n this.setPrivate(\"numColors\", colors.length);\r\n }\r\n //const len = colors.length;\r\n const len = this.getPrivate(\"numColors\");\r\n //const start = len - this.getPrivate(\"numColors\")!;\r\n const start = 0;\r\n const passOptions = this.get(\"passOptions\");\r\n const reuse = this.get(\"reuse\");\r\n for (let i = start; i < len; i++) {\r\n if (reuse) {\r\n colors.push(colors[i]);\r\n }\r\n else {\r\n const hsl = colors[i].toHSL();\r\n let h = hsl.h + (passOptions.hue || 0) * pass;\r\n while (h > 1)\r\n h -= 1;\r\n let s = hsl.s + (passOptions.saturation || 0) * pass;\r\n //if (s > 1) s -= Math.floor(s);\r\n if (s > 1)\r\n s = 1;\r\n if (s < 0)\r\n s = 0;\r\n let l = hsl.l + (passOptions.lightness || 0) * pass;\r\n //if (l > 1) l -= Math.floor(l);\r\n while (l > 1)\r\n l -= 1;\r\n colors.push(Color.fromHSL(h, s, l));\r\n }\r\n }\r\n }\r\n /**\r\n * Returns a [[Color]] at specific index.\r\n *\r\n * If there's no color at this index, a new color is generated.\r\n *\r\n * @param index Index\r\n * @return Color\r\n */\r\n getIndex(index) {\r\n const colors = this.get(\"colors\", []);\r\n const saturation = this.get(\"saturation\");\r\n if (index >= colors.length) {\r\n this.generateColors();\r\n return this.getIndex(index);\r\n }\r\n return saturation != null ? Color.saturate(colors[index], saturation) : colors[index];\r\n }\r\n /**\r\n * Returns next [[Color]] in the list.\r\n *\r\n * If the list is out of colors, new ones are generated dynamically.\r\n */\r\n next() {\r\n let currentStep = this.getPrivate(\"currentStep\", this.get(\"startIndex\", 0));\r\n this.setPrivate(\"currentStep\", currentStep + this.get(\"step\", 1));\r\n return this.getIndex(currentStep);\r\n }\r\n /**\r\n * Resets counter to the start of the list, so the next call for `next()` will\r\n * return the first color.\r\n */\r\n reset() {\r\n this.setPrivate(\"currentStep\", this.get(\"startIndex\", 0));\r\n this.setPrivate(\"currentPass\", 0);\r\n }\r\n}\r\nColorSet.className = \"ColorSet\";\r\nColorSet.classNames = Entity.classNames.concat([ColorSet.className]);\r\n//# sourceMappingURL=ColorSet.js.map","import { Entity } from \"../util/Entity\";\r\nexport function eachChildren(container, f) {\r\n if (container.get(\"reverseChildren\", false)) {\r\n container.children.eachReverse(f);\r\n }\r\n else {\r\n container.children.each(f);\r\n }\r\n}\r\n/**\r\n * Base class for [[Container]] layouts.\r\n */\r\nexport class Layout extends Entity {\r\n}\r\nLayout.className = \"Layout\";\r\nLayout.classNames = Entity.classNames.concat([Layout.className]);\r\n//# sourceMappingURL=Layout.js.map","import { Layout, eachChildren } from \"./Layout\";\r\nimport * as $array from \"../util/Array\";\r\nimport * as $math from \"../util/Math\";\r\n/**\r\n * A grid children layout for [[Container]].\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/containers/#Layout} for more info\r\n */\r\nexport class GridLayout extends Layout {\r\n _afterNew() {\r\n this._setRawDefault(\"maxColumns\", Number.MAX_VALUE);\r\n super._afterNew();\r\n }\r\n /**\r\n * @ignore\r\n */\r\n updateContainer(container) {\r\n let paddingLeft = container.get(\"paddingLeft\", 0);\r\n let paddingRight = container.get(\"paddingRight\", 0);\r\n let paddingTop = container.get(\"paddingTop\", 0);\r\n let availableWidth = container.maxWidth() - paddingLeft - paddingRight;\r\n let minCellWidth = availableWidth;\r\n let maxCellWidth = 1;\r\n eachChildren(container, (child) => {\r\n if (child.get(\"visible\") && child.getPrivate(\"visible\") && !child.get(\"forceHidden\")) {\r\n if (child.get(\"position\") != \"absolute\") {\r\n let childWidth = child.width();\r\n if (childWidth < minCellWidth) {\r\n minCellWidth = childWidth;\r\n }\r\n if (childWidth > maxCellWidth) {\r\n maxCellWidth = childWidth;\r\n }\r\n }\r\n }\r\n });\r\n minCellWidth = $math.fitToRange(minCellWidth, 1, availableWidth);\r\n maxCellWidth = $math.fitToRange(maxCellWidth, 1, availableWidth);\r\n let columnCount = 1;\r\n if (this.get(\"fixedWidthGrid\")) {\r\n columnCount = availableWidth / maxCellWidth;\r\n }\r\n else {\r\n columnCount = availableWidth / minCellWidth;\r\n }\r\n columnCount = Math.max(1, Math.floor(columnCount));\r\n columnCount = Math.min(this.get(\"maxColumns\", Number.MAX_VALUE), columnCount);\r\n let columnWidths = this.getColumnWidths(container, columnCount, maxCellWidth, availableWidth);\r\n let prevY = paddingTop;\r\n let column = 0;\r\n let maxRowHeight = 0;\r\n columnCount = columnWidths.length;\r\n let prevX = paddingLeft;\r\n eachChildren(container, (child) => {\r\n if (child.get(\"position\") == \"relative\" && child.isVisible()) {\r\n const marginTop = child.get(\"marginTop\", 0);\r\n const marginBottom = child.get(\"marginBottom\", 0);\r\n let bounds = child.adjustedLocalBounds();\r\n let marginLeft = child.get(\"marginLeft\", 0);\r\n let marginRight = child.get(\"marginRight\", 0);\r\n let x = prevX + marginLeft - bounds.left;\r\n let y = prevY + marginTop - bounds.top;\r\n child.setPrivate(\"x\", x);\r\n child.setPrivate(\"y\", y);\r\n prevX += columnWidths[column] + marginRight;\r\n maxRowHeight = Math.max(maxRowHeight, child.height() + marginTop + marginBottom);\r\n column++;\r\n if (column >= columnCount) {\r\n column = 0;\r\n prevX = paddingLeft;\r\n prevY += maxRowHeight;\r\n maxRowHeight = 0;\r\n }\r\n }\r\n });\r\n }\r\n /**\r\n * @ignore\r\n */\r\n getColumnWidths(container, columnCount, maxCellWidth, availableWidth) {\r\n let totalWidth = 0;\r\n let columnWidths = [];\r\n let column = 0;\r\n eachChildren(container, (child) => {\r\n let bounds = child.adjustedLocalBounds();\r\n if (child.get(\"position\") != \"absolute\" && child.isVisible()) {\r\n if (this.get(\"fixedWidthGrid\")) {\r\n columnWidths[column] = maxCellWidth;\r\n }\r\n else {\r\n columnWidths[column] = Math.max(columnWidths[column] | 0, bounds.right - bounds.left + child.get(\"marginLeft\", 0) + child.get(\"marginRight\", 0));\r\n }\r\n if (column < container.children.length - 1) {\r\n column++;\r\n if (column == columnCount) {\r\n column = 0;\r\n }\r\n }\r\n }\r\n });\r\n $array.each(columnWidths, (w) => {\r\n totalWidth += w;\r\n });\r\n if (totalWidth > availableWidth) {\r\n if (columnCount > 2) {\r\n columnCount -= 1;\r\n return this.getColumnWidths(container, columnCount, maxCellWidth, availableWidth);\r\n }\r\n else {\r\n return [availableWidth];\r\n }\r\n }\r\n return columnWidths;\r\n }\r\n}\r\nGridLayout.className = \"GridLayout\";\r\nGridLayout.classNames = Layout.classNames.concat([GridLayout.className]);\r\n//# sourceMappingURL=GridLayout.js.map","import { __awaiter } from \"tslib\";\r\nimport { Entity } from \"../util/Entity\";\r\nimport { Template } from \"../util/Template\";\r\nimport { Percent } from \"../util/Percent\";\r\nimport { EventDispatcher } from \"../util/EventDispatcher\";\r\nimport { MultiDisposer, CounterDisposer } from \"../util/Disposer\";\r\nimport { waitForAnimations } from \"../util/Animation\";\r\nimport * as $utils from \"../util/Utils\";\r\nimport * as $array from \"../util/Array\";\r\nimport * as $type from \"../util/Type\";\r\nimport * as $object from \"../util/Object\";\r\nimport * as $math from \"../util/Math\";\r\n//import { populateString } from \"../util/PopulateString\";\r\n/**\r\n * An [[EventDispatcher]] for [[Sprite]].\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/events/} for more info\r\n */\r\nclass SpriteEventDispatcher extends EventDispatcher {\r\n constructor(sprite) {\r\n super();\r\n this._rendererDisposers = {};\r\n this._dispatchParents = true;\r\n this._sprite = sprite;\r\n }\r\n _makePointerEvent(key, event) {\r\n return {\r\n type: key,\r\n originalEvent: event.event,\r\n point: event.point,\r\n simulated: event.simulated,\r\n native: event.native,\r\n target: this._sprite\r\n };\r\n }\r\n _onRenderer(key, dispatch) {\r\n // TODO: is this OK? it'd be good not to require to set this on each individual element\r\n this._sprite.set(\"interactive\", true);\r\n this._sprite._display.interactive = true;\r\n let events = this._rendererDisposers[key];\r\n if (events === undefined) {\r\n const disposer = this._sprite._display.on(key, (e) => {\r\n dispatch.call(this, e);\r\n });\r\n events = this._rendererDisposers[key] = new CounterDisposer(() => {\r\n delete this._rendererDisposers[key];\r\n disposer.dispose();\r\n });\r\n }\r\n return events.increment();\r\n }\r\n _on(once, type, callback, context, shouldClone, dispatch, debounceDelay) {\r\n const info = super._on(once, type, callback, context, shouldClone, dispatch, debounceDelay);\r\n const rendererEvent = SpriteEventDispatcher.RENDERER_EVENTS[type];\r\n if (rendererEvent !== undefined) {\r\n info.disposer = new MultiDisposer([\r\n info.disposer,\r\n this._onRenderer(type, rendererEvent),\r\n ]);\r\n }\r\n return info;\r\n }\r\n /**\r\n * Will stop any bubbling up of the event to element's parents.\r\n *\r\n * Should be called in an event handler, e.g.:\r\n *\r\n * ```TypeScript\r\n * element.events.on(\"pointerdown\", function(ev) {\r\n * // Do something here and prevent from \"pointerdown\" bubbling up\r\n * // ...\r\n * ev.target.events.stopParentDispatch();\r\n * });\r\n * ```\r\n * ```JavaScript\r\n * element.events.on(\"pointerdown\", function(ev) {\r\n * // Do something here and prevent from \"pointerdown\" bubbling up\r\n * // ...\r\n * ev.target.events.stopParentDispatch();\r\n * });\r\n * ```\r\n */\r\n stopParentDispatch() {\r\n this._dispatchParents = false;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n dispatchParents(type, event) {\r\n const old = this._dispatchParents;\r\n this._dispatchParents = true;\r\n try {\r\n this.dispatch(type, event);\r\n if (this._dispatchParents && this._sprite.parent) {\r\n this._sprite.parent.events.dispatchParents(type, event);\r\n }\r\n }\r\n finally {\r\n this._dispatchParents = old;\r\n }\r\n }\r\n}\r\nSpriteEventDispatcher.RENDERER_EVENTS = {\r\n \"click\": function (event) {\r\n if (this.isEnabled(\"click\") && !this._sprite.isDragging() && this._sprite._hasDown() && !this._sprite._hasMoved(this._makePointerEvent(\"click\", event))) {\r\n this.dispatch(\"click\", this._makePointerEvent(\"click\", event));\r\n }\r\n },\r\n \"rightclick\": function (event) {\r\n if (this.isEnabled(\"rightclick\")) {\r\n this.dispatch(\"rightclick\", this._makePointerEvent(\"rightclick\", event));\r\n }\r\n },\r\n \"middleclick\": function (event) {\r\n if (this.isEnabled(\"middleclick\")) {\r\n this.dispatch(\"middleclick\", this._makePointerEvent(\"middleclick\", event));\r\n }\r\n },\r\n \"dblclick\": function (event) {\r\n this.dispatchParents(\"dblclick\", this._makePointerEvent(\"dblclick\", event));\r\n },\r\n \"pointerover\": function (event) {\r\n const sprite = this._sprite;\r\n let dispatch = true;\r\n if (sprite.getPrivate(\"trustBounds\")) {\r\n sprite._getBounds();\r\n const bounds = sprite.globalBounds();\r\n if (sprite.isType(\"Graphics\")) {\r\n const strokeWidth = sprite.get(\"strokeWidth\", 1) / 2;\r\n if (strokeWidth >= 1) {\r\n bounds.left -= strokeWidth;\r\n bounds.right += strokeWidth;\r\n bounds.top -= strokeWidth;\r\n bounds.bottom += strokeWidth;\r\n }\r\n }\r\n if (!$math.inBounds(event.point, bounds)) {\r\n dispatch = false;\r\n sprite._root._renderer.removeHovering(sprite._display);\r\n }\r\n }\r\n if (dispatch && this.isEnabled(\"pointerover\")) {\r\n this.dispatch(\"pointerover\", this._makePointerEvent(\"pointerover\", event));\r\n }\r\n },\r\n \"pointerout\": function (event) {\r\n if (this.isEnabled(\"pointerout\")) {\r\n this.dispatch(\"pointerout\", this._makePointerEvent(\"pointerout\", event));\r\n }\r\n },\r\n \"pointerdown\": function (event) {\r\n this.dispatchParents(\"pointerdown\", this._makePointerEvent(\"pointerdown\", event));\r\n },\r\n \"pointerup\": function (event) {\r\n if (this.isEnabled(\"pointerup\")) {\r\n this.dispatch(\"pointerup\", this._makePointerEvent(\"pointerup\", event));\r\n }\r\n },\r\n \"globalpointerup\": function (event) {\r\n if (this.isEnabled(\"globalpointerup\")) {\r\n this.dispatch(\"globalpointerup\", this._makePointerEvent(\"globalpointerup\", event));\r\n }\r\n },\r\n \"globalpointermove\": function (event) {\r\n if (this.isEnabled(\"globalpointermove\")) {\r\n this.dispatch(\"globalpointermove\", this._makePointerEvent(\"globalpointermove\", event));\r\n }\r\n },\r\n \"wheel\": function (event) {\r\n this.dispatchParents(\"wheel\", {\r\n type: \"wheel\",\r\n target: this._sprite,\r\n originalEvent: event.event,\r\n point: event.point,\r\n });\r\n },\r\n};\r\n/**\r\n * A base class for all visual elements.\r\n *\r\n * @important\r\n */\r\nexport class Sprite extends Entity {\r\n constructor() {\r\n super(...arguments);\r\n this._adjustedLocalBounds = { left: 0, right: 0, top: 0, bottom: 0 };\r\n this._localBounds = { left: 0, right: 0, top: 0, bottom: 0 };\r\n this._sizeDirty = false;\r\n // Will be true only when dragging\r\n this._isDragging = false;\r\n this._isHidden = false;\r\n this._isShowing = false;\r\n this._isHiding = false;\r\n this._isDown = false;\r\n this._downPoints = {};\r\n }\r\n _afterNew() {\r\n this.setPrivateRaw(\"visible\", true);\r\n super._afterNew();\r\n }\r\n /**\r\n * Marks some setting as dirty. Could be used to trigger adapter.\r\n * @param key\r\n */\r\n markDirtyKey(key) {\r\n this._markDirtyKey(key);\r\n }\r\n _markDirtyKey(key) {\r\n super._markDirtyKey(key);\r\n if (key == \"x\" || key == \"y\" || key == \"dx\" || key == \"dy\") {\r\n this.markDirtyBounds();\r\n this._addPercentagePositionChildren();\r\n this.markDirtyPosition();\r\n }\r\n }\r\n _markDirtyPrivateKey(key) {\r\n super._markDirtyPrivateKey(key);\r\n if (key == \"x\" || key == \"y\") {\r\n this.markDirtyPosition();\r\n }\r\n }\r\n _removeTemplateField() {\r\n if (this._templateField) {\r\n this._templateField._removeObjectTemplate(this);\r\n }\r\n }\r\n _createEvents() {\r\n return new SpriteEventDispatcher(this);\r\n }\r\n _processTemplateField() {\r\n let template;\r\n const field = this.get(\"templateField\");\r\n if (field) {\r\n const dataItem = this.dataItem;\r\n if (dataItem) {\r\n const context = dataItem.dataContext;\r\n if (context) {\r\n template = context[field];\r\n if (!(template instanceof Template) && template) {\r\n template = Template.new(template);\r\n }\r\n }\r\n }\r\n }\r\n if (this._templateField !== template) {\r\n this._removeTemplateField();\r\n this._templateField = template;\r\n if (template) {\r\n template._setObjectTemplate(this);\r\n }\r\n this._applyTemplates();\r\n }\r\n }\r\n // TODO change this to run before the element is added to the parent, so that way\r\n // it doesn't need to apply the themes twice\r\n _setDataItem(dataItem) {\r\n const oldDataItem = this._dataItem;\r\n this._dataItem = dataItem;\r\n this._processTemplateField();\r\n const eventType = \"dataitemchanged\";\r\n if (dataItem != oldDataItem) {\r\n if (this.events.isEnabled(eventType)) {\r\n this.events.dispatch(eventType, {\r\n type: eventType,\r\n target: this,\r\n oldDataItem: oldDataItem,\r\n newDataItem: dataItem\r\n });\r\n }\r\n }\r\n }\r\n /**\r\n * A [[DataItem]] used for this element.\r\n *\r\n * NOTE: data item is being assigned automatically in most cases where it\r\n * matters. Use this accessor to set data item only if you know what you're\r\n * doing.\r\n *\r\n * @param value Data item\r\n */\r\n set dataItem(value) {\r\n this._setDataItem(value);\r\n }\r\n /**\r\n * @return DataItem\r\n */\r\n get dataItem() {\r\n if (this._dataItem) {\r\n return this._dataItem;\r\n }\r\n else {\r\n let parent = this._parent;\r\n while (parent) {\r\n if (parent._dataItem) {\r\n return parent._dataItem;\r\n }\r\n else {\r\n parent = parent._parent;\r\n }\r\n }\r\n }\r\n }\r\n _addPercentageSizeChildren() {\r\n let parent = this.parent;\r\n if (parent) {\r\n if (this.get(\"width\") instanceof Percent || this.get(\"height\") instanceof Percent) {\r\n $array.pushOne(parent._percentageSizeChildren, this);\r\n }\r\n else {\r\n $array.removeFirst(parent._percentageSizeChildren, this);\r\n }\r\n }\r\n }\r\n _addPercentagePositionChildren() {\r\n let parent = this.parent;\r\n if (parent) {\r\n if (this.get(\"x\") instanceof Percent || this.get(\"y\") instanceof Percent) {\r\n $array.pushOne(parent._percentagePositionChildren, this);\r\n }\r\n else {\r\n $array.removeFirst(parent._percentagePositionChildren, this);\r\n }\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n markDirtyPosition() {\r\n this._root._addDirtyPosition(this);\r\n }\r\n updatePivotPoint() {\r\n const bounds = this._localBounds;\r\n if (bounds) {\r\n const centerX = this.get(\"centerX\");\r\n if (centerX != null) {\r\n this._display.pivot.x = bounds.left + $utils.relativeToValue(centerX, bounds.right - bounds.left);\r\n }\r\n const centerY = this.get(\"centerY\");\r\n if (centerY != null) {\r\n this._display.pivot.y = bounds.top + $utils.relativeToValue(centerY, bounds.bottom - bounds.top);\r\n }\r\n }\r\n }\r\n _beforeChanged() {\r\n super._beforeChanged();\r\n // handling states in beforeChanged, otherwise states is not applied without animated theme\r\n this._handleStates();\r\n if (this.isDirty(\"tooltip\")) {\r\n const previous = this._prevSettings.tooltip;\r\n if (previous) {\r\n previous.dispose();\r\n }\r\n }\r\n if (this.isDirty(\"layer\") || this.isDirty(\"layerMargin\")) {\r\n this._display.setLayer(this.get(\"layer\"), this.get(\"layerMargin\"));\r\n this.markDirtyLayer();\r\n }\r\n if (this.isDirty(\"tooltipPosition\")) {\r\n const tooltipMoveDp = this._tooltipMoveDp;\r\n if (tooltipMoveDp) {\r\n tooltipMoveDp.dispose();\r\n this._tooltipMoveDp = undefined;\r\n }\r\n const tooltipPointerDp = this._tooltipPointerDp;\r\n if (tooltipPointerDp) {\r\n tooltipPointerDp.dispose();\r\n this._tooltipPointerDp = undefined;\r\n }\r\n if (this.get(\"tooltipPosition\") == \"pointer\") {\r\n if (this.isHover()) {\r\n this._tooltipMoveDp = this.events.on(\"globalpointermove\", (e) => {\r\n this.showTooltip(e.point);\r\n });\r\n }\r\n this._tooltipPointerDp = new MultiDisposer([\r\n this.events.on(\"pointerover\", () => {\r\n this._tooltipMoveDp = this.events.on(\"globalpointermove\", (e) => {\r\n this.showTooltip(e.point);\r\n });\r\n }),\r\n this.events.on(\"pointerout\", () => {\r\n const tooltipMoveDp = this._tooltipMoveDp;\r\n if (tooltipMoveDp) {\r\n tooltipMoveDp.dispose();\r\n this._tooltipMoveDp = undefined;\r\n }\r\n })\r\n ]);\r\n }\r\n }\r\n }\r\n _handleStates() {\r\n //if (!this._statesHandled) {\r\n if (this.isDirty(\"active\")) {\r\n if (this.get(\"active\")) {\r\n this.states.applyAnimate(\"active\");\r\n this.set(\"ariaChecked\", true);\r\n }\r\n else {\r\n if (!this.isHidden()) {\r\n this.states.applyAnimate(\"default\");\r\n }\r\n this.set(\"ariaChecked\", false);\r\n }\r\n this.markDirtyAccessibility();\r\n }\r\n if (this.isDirty(\"disabled\")) {\r\n if (this.get(\"disabled\")) {\r\n this.states.applyAnimate(\"disabled\");\r\n this.set(\"ariaChecked\", false);\r\n }\r\n else {\r\n if (!this.isHidden()) {\r\n this.states.applyAnimate(\"default\");\r\n }\r\n this.set(\"ariaChecked\", true);\r\n }\r\n this.markDirtyAccessibility();\r\n }\r\n //\tthis._statesHandled = true;\r\n //}\r\n }\r\n _changed() {\r\n super._changed();\r\n const display = this._display;\r\n const events = this.events;\r\n if (this.isDirty(\"draggable\")) {\r\n const draggable = this.get(\"draggable\");\r\n if (draggable) {\r\n this.set(\"interactive\", true);\r\n this._dragDp = new MultiDisposer([\r\n events.on(\"pointerdown\", (ev) => {\r\n this.dragStart(ev);\r\n }),\r\n events.on(\"globalpointermove\", (ev) => {\r\n this.dragMove(ev);\r\n }),\r\n events.on(\"globalpointerup\", (ev) => {\r\n this.dragStop(ev);\r\n })\r\n ]);\r\n }\r\n else {\r\n if (this._dragDp) {\r\n this._dragDp.dispose();\r\n this._dragDp = undefined;\r\n }\r\n }\r\n display.cancelTouch = draggable ? true : false;\r\n }\r\n if (this.isDirty(\"tooltipText\") || this.isDirty(\"tooltipHTML\") || this.isDirty(\"showTooltipOn\")) {\r\n const tooltipText = this.get(\"tooltipText\");\r\n const tooltipHTML = this.get(\"tooltipHTML\");\r\n const showTooltipOn = this.get(\"showTooltipOn\", \"hover\");\r\n if (this._tooltipDp) {\r\n this._tooltipDp.dispose();\r\n this._tooltipDp = undefined;\r\n }\r\n if (tooltipText || tooltipHTML) {\r\n if (showTooltipOn == \"click\") {\r\n this._tooltipDp = new MultiDisposer([\r\n events.on(\"click\", () => {\r\n this.setTimeout(() => {\r\n const tooltip = this.getTooltip();\r\n if (tooltip && !tooltip.isHidden() && tooltip.get(\"tooltipTarget\") === this) {\r\n this.hideTooltip();\r\n }\r\n else {\r\n this.showTooltip();\r\n }\r\n }, 10);\r\n }),\r\n $utils.addEventListener(document, \"click\", (_ev) => {\r\n this.hideTooltip();\r\n })\r\n ]);\r\n this._disposers.push(this._tooltipDp);\r\n }\r\n else if (showTooltipOn == \"always\") {\r\n // nothing\r\n }\r\n else {\r\n this._tooltipDp = new MultiDisposer([\r\n events.on(\"pointerover\", () => {\r\n this.showTooltip();\r\n }),\r\n events.on(\"pointerout\", () => {\r\n this.hideTooltip();\r\n })\r\n ]);\r\n this._disposers.push(this._tooltipDp);\r\n }\r\n }\r\n }\r\n if (this.isDirty(\"toggleKey\")) {\r\n let toggleKey = this.get(\"toggleKey\");\r\n if (toggleKey && toggleKey != \"none\") {\r\n this._toggleDp = events.on(\"click\", () => {\r\n if (!this._isDragging) {\r\n this.set(toggleKey, !this.get(toggleKey));\r\n }\r\n });\r\n }\r\n else {\r\n if (this._toggleDp) {\r\n this._toggleDp.dispose();\r\n this._toggleDp = undefined;\r\n }\r\n }\r\n }\r\n if (this.isDirty(\"opacity\")) {\r\n display.alpha = Math.max(0, this.get(\"opacity\", 1));\r\n if (this.get(\"focusable\")) {\r\n this.markDirtyAccessibility();\r\n }\r\n }\r\n if (this.isDirty(\"rotation\")) {\r\n this.markDirtyBounds();\r\n display.angle = this.get(\"rotation\", 0);\r\n }\r\n if (this.isDirty(\"scale\")) {\r\n this.markDirtyBounds();\r\n display.scale = this.get(\"scale\", 0);\r\n }\r\n if (this.isDirty(\"centerX\") || this.isDirty(\"centerY\")) {\r\n this.markDirtyBounds();\r\n this.updatePivotPoint();\r\n }\r\n if (this.isDirty(\"visible\") || this.isPrivateDirty(\"visible\") || this.isDirty(\"forceHidden\")) {\r\n if (!this.get(\"visible\") || !this.getPrivate(\"visible\") || this.get(\"forceHidden\")) {\r\n display.visible = false;\r\n this.hideTooltip();\r\n }\r\n else {\r\n display.visible = true;\r\n }\r\n this.markDirtyBounds();\r\n if (this.get(\"focusable\")) {\r\n this.markDirtyAccessibility();\r\n }\r\n }\r\n if (this.isDirty(\"width\") || this.isDirty(\"height\")) {\r\n this.markDirtyBounds();\r\n this._addPercentageSizeChildren();\r\n const parent = this.parent;\r\n if (parent) {\r\n if ((this.isDirty(\"width\") && this.get(\"width\") instanceof Percent) || (this.isDirty(\"height\") && this.get(\"height\") instanceof Percent)) {\r\n parent.markDirty();\r\n parent._prevWidth = 0;\r\n }\r\n }\r\n this._sizeDirty = true;\r\n }\r\n if (this.isDirty(\"maxWidth\") || this.isDirty(\"maxHeight\") || this.isPrivateDirty(\"width\") || this.isPrivateDirty(\"height\") || this.isDirty(\"minWidth\") || this.isDirty(\"minHeight\") || this.isPrivateDirty(\"maxWidth\") || this.isPrivateDirty(\"maxHeight\") || this.isPrivateDirty(\"minWidth\") || this.isPrivateDirty(\"minHeight\") || this.isDirty(\"marginLeft\") || this.isDirty(\"marginTop\") || this.isDirty(\"marginRight\") || this.isDirty(\"marginBottom\")) {\r\n this.markDirtyBounds();\r\n this._sizeDirty = true;\r\n }\r\n if (this._sizeDirty) {\r\n this._updateSize();\r\n }\r\n if (this.isDirty(\"wheelable\")) {\r\n const wheelable = this.get(\"wheelable\");\r\n if (wheelable) {\r\n this.set(\"interactive\", true);\r\n }\r\n display.wheelable = wheelable ? true : false;\r\n }\r\n // Accessibility\r\n if (this.isDirty(\"tabindexOrder\") || this.isDirty(\"focusableGroup\")) {\r\n if (this.get(\"focusable\")) {\r\n this._root._registerTabindexOrder(this);\r\n }\r\n else {\r\n this._root._unregisterTabindexOrder(this);\r\n }\r\n }\r\n if (this.isDirty(\"filter\")) {\r\n //this.markDirtyBounds();\r\n display.filter = this.get(\"filter\");\r\n }\r\n let filter = this.get(\"filter\", \"\");\r\n if (this.isDirty(\"blur\")) {\r\n const blur = this.get(\"blur\", 0);\r\n if (blur != 0) {\r\n filter += \" blur(\" + blur + \"px)\";\r\n }\r\n }\r\n if (this.isDirty(\"saturate\")) {\r\n const saturate = this.get(\"saturate\", 1);\r\n if (saturate != 1) {\r\n filter += \" saturate(\" + saturate + \")\";\r\n }\r\n }\r\n if (this.isDirty(\"brightness\")) {\r\n const brightness = this.get(\"brightness\", 1);\r\n if (brightness != 1) {\r\n filter += \" brightness(\" + brightness + \")\";\r\n }\r\n }\r\n if (this.isDirty(\"contrast\")) {\r\n const contrast = this.get(\"contrast\", 1);\r\n if (contrast != 1) {\r\n filter += \" contrast(\" + contrast + \")\";\r\n }\r\n }\r\n if (this.isDirty(\"sepia\")) {\r\n const sepia = this.get(\"sepia\", 0);\r\n if (sepia != 0) {\r\n filter += \" sepia(\" + sepia + \")\";\r\n }\r\n }\r\n if (this.isDirty(\"hue\")) {\r\n const hue = this.get(\"hue\", 0);\r\n if (hue != 0) {\r\n filter += \" hue-rotate(\" + hue + \"deg)\";\r\n }\r\n }\r\n if (this.isDirty(\"invert\")) {\r\n const invert = this.get(\"invert\", 0);\r\n if (invert != 0) {\r\n filter += \" invert(\" + invert + \")\";\r\n }\r\n }\r\n if (filter) {\r\n display.filter = filter;\r\n }\r\n if (this.isDirty(\"cursorOverStyle\")) {\r\n display.cursorOverStyle = this.get(\"cursorOverStyle\");\r\n }\r\n if (this.isDirty(\"hoverOnFocus\")) {\r\n if (this.get(\"hoverOnFocus\")) {\r\n this._focusDp = new MultiDisposer([\r\n events.on(\"focus\", () => {\r\n // TODO: proper hover, not just tooltip\r\n this.showTooltip();\r\n }),\r\n events.on(\"blur\", () => {\r\n // TODO: proper hover, not just tooltip\r\n this.hideTooltip();\r\n })\r\n ]);\r\n }\r\n else {\r\n if (this._focusDp) {\r\n this._focusDp.dispose();\r\n this._focusDp = undefined;\r\n }\r\n }\r\n }\r\n if (this.isDirty(\"focusable\")) {\r\n if (this.get(\"focusable\")) {\r\n this._root._registerTabindexOrder(this);\r\n }\r\n else {\r\n this._root._unregisterTabindexOrder(this);\r\n }\r\n this.markDirtyAccessibility();\r\n this._disposers.push(events.on(\"blur\", () => {\r\n this.setPrivateRaw(\"touchHovering\", false);\r\n }));\r\n this._disposers.push(events.once(\"boundschanged\", () => {\r\n // We might need to do this to re-evaluate accessibility attributes\r\n // once the element gains size (bounds)\r\n this.markDirtyAccessibility();\r\n }));\r\n }\r\n if (this.isPrivateDirty(\"focusable\")) {\r\n this.markDirtyAccessibility();\r\n }\r\n if (this.isDirty(\"role\") || this.isDirty(\"ariaLive\") || this.isDirty(\"ariaChecked\") || this.isDirty(\"ariaHidden\") || this.isDirty(\"ariaOrientation\") || this.isDirty(\"ariaValueNow\") || this.isDirty(\"ariaValueMin\") || this.isDirty(\"ariaValueMax\") || this.isDirty(\"ariaValueText\") || this.isDirty(\"ariaLabel\") || this.isDirty(\"ariaControls\")) {\r\n // display.accessibility.ariaLabel = populateString(this, this.get(\"ariaLabel\", \"\"));\r\n // @todo make sure ariaLabel gets populated in Root\r\n this.markDirtyAccessibility();\r\n }\r\n if (this.isDirty(\"exportable\")) {\r\n display.exportable = this.get(\"exportable\");\r\n }\r\n if (this.isDirty(\"interactive\")) {\r\n const events = this.events;\r\n if (this.get(\"interactive\") && !events.isDisposed()) {\r\n this._hoverDp = new MultiDisposer([\r\n events.on(\"click\", (ev) => {\r\n if ($utils.isTouchEvent(ev.originalEvent)) {\r\n if (!this.getPrivate(\"touchHovering\")) {\r\n this.setTimeout(() => {\r\n this._handleOver();\r\n if (this.get(\"tooltipText\") || this.get(\"tooltipHTML\")) {\r\n this.showTooltip();\r\n }\r\n this.setPrivateRaw(\"touchHovering\", true);\r\n this.events.dispatch(\"pointerover\", {\r\n type: \"pointerover\",\r\n target: ev.target,\r\n originalEvent: ev.originalEvent,\r\n point: ev.point,\r\n simulated: ev.simulated\r\n });\r\n }, 10);\r\n }\r\n }\r\n }),\r\n events.on(\"globalpointerup\", (ev) => {\r\n if ($utils.isTouchEvent(ev.originalEvent)) {\r\n if (this.getPrivate(\"touchHovering\")) {\r\n this._handleOut();\r\n if (this.get(\"tooltipText\") || this.get(\"tooltipHTML\")) {\r\n this.hideTooltip();\r\n }\r\n this.setPrivateRaw(\"touchHovering\", false);\r\n this.events.dispatch(\"pointerout\", {\r\n type: \"pointerout\",\r\n target: ev.target,\r\n originalEvent: ev.originalEvent,\r\n point: ev.point,\r\n simulated: ev.simulated\r\n });\r\n }\r\n }\r\n if (this._isDown) {\r\n this._handleUp(ev);\r\n }\r\n //this._isDown = false;\r\n }),\r\n events.on(\"pointerover\", () => {\r\n this._handleOver();\r\n }),\r\n events.on(\"pointerout\", () => {\r\n this._handleOut();\r\n }),\r\n events.on(\"pointerdown\", (e) => {\r\n this._handleDown(e);\r\n })\r\n ]);\r\n }\r\n else {\r\n this._display.interactive = false;\r\n if (this._hoverDp) {\r\n this._hoverDp.dispose();\r\n this._hoverDp = undefined;\r\n }\r\n }\r\n }\r\n if (this.isDirty(\"forceInactive\")) {\r\n this._display.inactive = this.get(\"forceInactive\", null);\r\n }\r\n if (this.get(\"showTooltipOn\") == \"always\" && this._display.visible) {\r\n this.showTooltip();\r\n }\r\n }\r\n /**\r\n * @ignore\r\n * @todo should this be user-accessible?\r\n */\r\n dragStart(e) {\r\n this._dragEvent = e;\r\n this.events.stopParentDispatch();\r\n }\r\n /**\r\n * @ignore\r\n * @todo should this be user-accessible?\r\n */\r\n dragStop(e) {\r\n this._dragEvent = undefined;\r\n this._dragPoint = undefined;\r\n this.events.stopParentDispatch();\r\n if (this._isDragging) {\r\n this._isDragging = false;\r\n const type = \"dragstop\";\r\n if (this.events.isEnabled(type)) {\r\n this.events.dispatch(type, {\r\n type: type,\r\n target: this,\r\n originalEvent: e.originalEvent,\r\n point: e.point,\r\n simulated: e.simulated,\r\n });\r\n }\r\n }\r\n }\r\n _handleOver() {\r\n if (!this.isHidden()) {\r\n if (this.get(\"active\") && this.states.lookup(\"hoverActive\")) {\r\n this.states.applyAnimate(\"hoverActive\");\r\n }\r\n else if (this.get(\"disabled\") && this.states.lookup(\"hoverDisabled\")) {\r\n this.states.applyAnimate(\"hoverDisabled\");\r\n }\r\n else {\r\n this.states.applyAnimate(\"hover\");\r\n }\r\n if (this.get(\"draggable\") && this._isDown && this.states.lookup(\"down\")) {\r\n this.states.applyAnimate(\"down\");\r\n }\r\n }\r\n }\r\n _handleOut() {\r\n if (!this.isHidden()) {\r\n if (this.get(\"active\") && this.states.lookup(\"active\")) {\r\n this.states.applyAnimate(\"active\");\r\n }\r\n else if (this.get(\"disabled\") && this.states.lookup(\"disabled\")) {\r\n this.states.applyAnimate(\"disabled\");\r\n }\r\n else {\r\n if (this.states.lookup(\"hover\") || this.states.lookup(\"hoverActive\")) {\r\n this.states.applyAnimate(\"default\");\r\n }\r\n }\r\n if (this.get(\"draggable\") && this._isDown && this.states.lookup(\"down\")) {\r\n this.states.applyAnimate(\"down\");\r\n }\r\n }\r\n }\r\n _handleUp(e) {\r\n if (!this.isHidden()) {\r\n if (this.get(\"active\") && this.states.lookup(\"active\")) {\r\n this.states.applyAnimate(\"active\");\r\n }\r\n else if (this.get(\"disabled\") && this.states.lookup(\"disabled\")) {\r\n this.states.applyAnimate(\"disabled\");\r\n }\r\n else if (this.states.lookup(\"down\")) {\r\n if (this.isHover()) {\r\n this.states.applyAnimate(\"hover\");\r\n }\r\n else {\r\n this.states.applyAnimate(\"default\");\r\n }\r\n }\r\n // @todo remove this once migrated to _downPoints\r\n this._downPoint = undefined;\r\n const pointerId = $utils.getPointerId(e.originalEvent);\r\n delete this._downPoints[pointerId];\r\n if ($object.keys(this._downPoints).length == 0) {\r\n this._isDown = false;\r\n }\r\n }\r\n }\r\n _hasMoved(e) {\r\n // @todo remove this once migrated to _downPoints\r\n // if (this._downPoint) {\r\n // \tconst x = Math.abs(this._downPoint.x - e.point.x);\r\n // \tconst y = Math.abs(this._downPoint.y - e.point.y);\r\n // \treturn (x > 5) || (y > 5);\r\n // }\r\n const pointerId = $utils.getPointerId(e.originalEvent);\r\n const downPoint = this._downPoints[pointerId];\r\n if (downPoint) {\r\n const x = Math.abs(downPoint.x - e.point.x);\r\n const y = Math.abs(downPoint.y - e.point.y);\r\n return (x > 5) || (y > 5);\r\n }\r\n return false;\r\n }\r\n _hasDown() {\r\n return $object.keys(this._downPoints).length > 0;\r\n }\r\n _handleDown(e) {\r\n const parent = this.parent;\r\n if (parent && !this.get(\"draggable\")) {\r\n parent._handleDown(e);\r\n }\r\n if (this.get(\"interactive\") && !this.isHidden()) {\r\n if (this.states.lookup(\"down\")) {\r\n this.states.applyAnimate(\"down\");\r\n }\r\n this._downPoint = {\r\n x: e.point.x,\r\n y: e.point.y\r\n };\r\n // @todo remove this once migrated to _downPoints\r\n this._isDown = true;\r\n const pointerId = $utils.getPointerId(e.originalEvent);\r\n this._downPoints[pointerId] = {\r\n x: e.point.x,\r\n y: e.point.y\r\n };\r\n }\r\n }\r\n /**\r\n * @ignore\r\n * @todo should this be user-accessible?\r\n */\r\n dragMove(e) {\r\n let dragEvent = this._dragEvent;\r\n if (dragEvent) {\r\n if (dragEvent.simulated && !e.simulated) {\r\n return true;\r\n }\r\n let angle = 0;\r\n let parent = this.parent;\r\n let scale = 1;\r\n while (parent != null) {\r\n angle += parent.get(\"rotation\", 0);\r\n parent = parent.parent;\r\n if (parent) {\r\n scale *= parent.get(\"scale\", 1);\r\n }\r\n }\r\n let x = (e.point.x - dragEvent.point.x) / scale;\r\n let y = (e.point.y - dragEvent.point.y) / scale;\r\n const events = this.events;\r\n if (dragEvent.simulated && !this._isDragging) {\r\n this._isDragging = true;\r\n this._dragEvent = e;\r\n this._dragPoint = {\r\n x: this.x(),\r\n y: this.y()\r\n };\r\n const type = \"dragstart\";\r\n if (events.isEnabled(type)) {\r\n events.dispatch(type, {\r\n type: type,\r\n target: this,\r\n originalEvent: e.originalEvent,\r\n point: e.point,\r\n simulated: e.simulated,\r\n });\r\n }\r\n }\r\n if (this._isDragging) {\r\n let dragPoint = this._dragPoint;\r\n this.set(\"x\", dragPoint.x + x * $math.cos(angle) + y * $math.sin(angle));\r\n this.set(\"y\", dragPoint.y + y * $math.cos(angle) - x * $math.sin(angle));\r\n const type = \"dragged\";\r\n if (events.isEnabled(type)) {\r\n events.dispatch(type, {\r\n type: type,\r\n target: this,\r\n originalEvent: e.originalEvent,\r\n point: e.point,\r\n simulated: e.simulated,\r\n });\r\n }\r\n }\r\n else {\r\n if (Math.hypot(x, y) > 5) {\r\n this._isDragging = true;\r\n this._dragEvent = e;\r\n this._dragPoint = {\r\n x: this.x(),\r\n y: this.y()\r\n };\r\n const type = \"dragstart\";\r\n if (events.isEnabled(type)) {\r\n events.dispatch(type, {\r\n type: type,\r\n target: this,\r\n originalEvent: e.originalEvent,\r\n point: e.point,\r\n simulated: e.simulated\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n _updateSize() {\r\n }\r\n _getBounds() {\r\n this._localBounds = this._display.getLocalBounds();\r\n }\r\n /**\r\n * Returns depth (how deep in the hierachy of the content tree) of this\r\n * element.\r\n *\r\n * @return Depth\r\n */\r\n depth() {\r\n let self = this.parent;\r\n let depth = 0;\r\n while (true) {\r\n if (self) {\r\n ++depth;\r\n self = self.parent;\r\n }\r\n else {\r\n return depth;\r\n }\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n markDirtySize() {\r\n this._sizeDirty = true;\r\n this.markDirty();\r\n }\r\n /**\r\n * @ignore\r\n */\r\n markDirtyBounds() {\r\n const display = this._display;\r\n if (this.get(\"isMeasured\")) {\r\n this._root._addDirtyBounds(this);\r\n display.isMeasured = true;\r\n display.invalidateBounds();\r\n const parent = this.parent;\r\n if (parent && this.get(\"position\") != \"absolute\") {\r\n if (parent.get(\"width\") == null || parent.get(\"height\") == null || parent.get(\"layout\")) {\r\n parent.markDirtyBounds();\r\n }\r\n }\r\n if (this.get(\"focusable\")) {\r\n this.markDirtyAccessibility();\r\n }\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n markDirtyAccessibility() {\r\n //if (this._root.focused(this)) {\r\n this._root._invalidateAccessibility(this);\r\n //}\r\n }\r\n /**\r\n * @ignore\r\n */\r\n markDirtyLayer() {\r\n //this._display.markDirtyLayer(this.isDirty(\"opacity\") || this.isDirty(\"visible\")); https://codepen.io/team/amcharts/pen/gOWZPmP <- problems\r\n this._display.markDirtyLayer(true);\r\n }\r\n /**\r\n * @ignore\r\n */\r\n markDirty() {\r\n super.markDirty();\r\n this.markDirtyLayer();\r\n }\r\n _updateBounds() {\r\n const oldBounds = this._adjustedLocalBounds;\r\n let newBounds;\r\n // if display.visible == false, it still returns bounds\r\n if (!this.get(\"visible\") || !this.getPrivate(\"visible\") || this.get(\"forceHidden\")) {\r\n newBounds = {\r\n left: 0,\r\n right: 0,\r\n top: 0,\r\n bottom: 0\r\n };\r\n this._localBounds = newBounds;\r\n this._adjustedLocalBounds = newBounds;\r\n }\r\n else {\r\n this._getBounds();\r\n this._fixMinBounds(this._localBounds);\r\n this.updatePivotPoint();\r\n this._adjustedLocalBounds = this._display.getAdjustedBounds(this._localBounds);\r\n newBounds = this._adjustedLocalBounds;\r\n }\r\n if (!oldBounds || (oldBounds.left !== newBounds.left || oldBounds.top !== newBounds.top || oldBounds.right !== newBounds.right || oldBounds.bottom !== newBounds.bottom)) {\r\n const eventType = \"boundschanged\";\r\n if (this.events.isEnabled(eventType)) {\r\n this.events.dispatch(eventType, { type: eventType, target: this });\r\n }\r\n if (this.parent) {\r\n this.parent.markDirty();\r\n this.parent.markDirtyBounds();\r\n }\r\n // Update tooltip position together with the Sprite\r\n if (this.getPrivate(\"showingTooltip\")) {\r\n this.showTooltip();\r\n }\r\n }\r\n }\r\n _fixMinBounds(bounds) {\r\n let minWidth = this.get(\"minWidth\", this.getPrivate(\"minWidth\"));\r\n let minHeight = this.get(\"minHeight\", this.getPrivate(\"minHeight\"));\r\n if ($type.isNumber(minWidth)) {\r\n if (bounds.right - bounds.left < minWidth) {\r\n bounds.right = bounds.left + minWidth;\r\n }\r\n }\r\n if ($type.isNumber(minHeight)) {\r\n if (bounds.bottom - bounds.top < minHeight) {\r\n bounds.bottom = bounds.top + minHeight;\r\n }\r\n }\r\n let privateWidth = this.getPrivate(\"width\");\r\n let privateHeight = this.getPrivate(\"height\");\r\n if ($type.isNumber(privateWidth)) {\r\n if (privateWidth > 0) {\r\n bounds.right = bounds.left + privateWidth;\r\n }\r\n else {\r\n bounds.left = bounds.right + privateWidth;\r\n }\r\n }\r\n if ($type.isNumber(privateHeight)) {\r\n if (privateHeight > 0) {\r\n bounds.bottom = bounds.top + privateHeight;\r\n }\r\n else {\r\n bounds.top = bounds.bottom + privateHeight;\r\n }\r\n }\r\n }\r\n _removeParent(parent) {\r\n if (parent) {\r\n parent.children.removeValue(this);\r\n $array.removeFirst(parent._percentageSizeChildren, this);\r\n $array.removeFirst(parent._percentagePositionChildren, this);\r\n }\r\n }\r\n _clearDirty() {\r\n super._clearDirty();\r\n this._sizeDirty = false;\r\n //this._statesHandled = false;\r\n }\r\n /**\r\n * Simulate hover over element.\r\n */\r\n hover() {\r\n if (!this.isDisposed()) {\r\n this.showTooltip();\r\n this._handleOver();\r\n }\r\n }\r\n /**\r\n * Simulate unhover over element.\r\n */\r\n unhover() {\r\n if (!this.isDisposed()) {\r\n this.hideTooltip();\r\n this._handleOut();\r\n }\r\n }\r\n /**\r\n * Shows element's [[Tooltip]].\r\n */\r\n showTooltip(point) {\r\n if (!this.isDisposed()) {\r\n const tooltip = this.getTooltip();\r\n const tooltipText = this.get(\"tooltipText\");\r\n const tooltipHTML = this.get(\"tooltipHTML\");\r\n if ((tooltipText || tooltipHTML) && tooltip) {\r\n const tooltipPosition = this.get(\"tooltipPosition\");\r\n const tooltipTarget = this.getPrivate(\"tooltipTarget\", this);\r\n if (tooltipPosition == \"fixed\" || !point) {\r\n this._display._setMatrix();\r\n point = this.toGlobal(tooltipTarget._getTooltipPoint());\r\n }\r\n if (tooltipPosition == \"pointer\") {\r\n const lastTooltipCoords = this.getPrivate(\"lastTooltipCoords\");\r\n if (lastTooltipCoords && lastTooltipCoords.x == point.x && lastTooltipCoords.y == point.y) {\r\n return;\r\n }\r\n else {\r\n this.setPrivate(\"lastTooltipCoords\", point);\r\n }\r\n }\r\n tooltip.set(\"pointTo\", point);\r\n tooltip.set(\"tooltipTarget\", tooltipTarget);\r\n if (!tooltip.get(\"x\")) {\r\n tooltip.set(\"x\", point.x);\r\n }\r\n if (!tooltip.get(\"y\")) {\r\n tooltip.set(\"y\", point.y);\r\n }\r\n if (tooltipText) {\r\n tooltip.label.set(\"text\", tooltipText);\r\n }\r\n if (tooltipHTML) {\r\n tooltip.label.set(\"html\", tooltipHTML);\r\n }\r\n const dataItem = this.dataItem;\r\n if (dataItem) {\r\n tooltip.label._setDataItem(dataItem);\r\n }\r\n if (this.get(\"showTooltipOn\") == \"always\" && (point.x < 0 || point.x > this._root.width() || point.y < 0 || point.y > this._root.height())) {\r\n this.hideTooltip();\r\n return;\r\n }\r\n tooltip.label.text.markDirtyText();\r\n const promise = tooltip.show();\r\n this.setPrivateRaw(\"showingTooltip\", true);\r\n return promise;\r\n }\r\n }\r\n }\r\n /**\r\n * Hides element's [[Tooltip]].\r\n */\r\n hideTooltip() {\r\n const tooltip = this.getTooltip();\r\n if (tooltip) {\r\n this.removePrivate(\"lastTooltipCoords\");\r\n if (tooltip.get(\"tooltipTarget\") == this.getPrivate(\"tooltipTarget\", this) || this.get(\"tooltip\") == tooltip) {\r\n let timeout = tooltip.get(\"keepTargetHover\") && tooltip.get(\"stateAnimationDuration\", 0) == 0 ? 400 : undefined;\r\n const promise = tooltip.hide(timeout);\r\n this.setPrivateRaw(\"showingTooltip\", false);\r\n return promise;\r\n }\r\n }\r\n }\r\n _getTooltipPoint() {\r\n const bounds = this._localBounds;\r\n if (bounds) {\r\n let x = 0;\r\n let y = 0;\r\n if (!this.get(\"isMeasured\")) {\r\n x = $utils.relativeToValue(this.get(\"tooltipX\", 0), this.width());\r\n y = $utils.relativeToValue(this.get(\"tooltipY\", 0), this.height());\r\n }\r\n else {\r\n x = bounds.left + $utils.relativeToValue(this.get(\"tooltipX\", 0), bounds.right - bounds.left);\r\n y = bounds.top + $utils.relativeToValue(this.get(\"tooltipY\", 0), bounds.bottom - bounds.top);\r\n }\r\n return { x, y };\r\n }\r\n return { x: 0, y: 0 };\r\n }\r\n /**\r\n * Returns [[Tooltip]] used for this element.\r\n *\r\n * @return Tooltip\r\n */\r\n getTooltip() {\r\n let tooltip = this.get(\"tooltip\");\r\n if (!tooltip) {\r\n let parent = this.parent;\r\n if (parent) {\r\n return parent.getTooltip();\r\n }\r\n }\r\n else {\r\n return tooltip;\r\n }\r\n }\r\n _updatePosition() {\r\n const parent = this.parent;\r\n let dx = this.get(\"dx\", 0);\r\n let dy = this.get(\"dy\", 0);\r\n let x = this.get(\"x\");\r\n let _x = this.getPrivate(\"x\");\r\n let xx = 0;\r\n let yy = 0;\r\n const position = this.get(\"position\");\r\n if (x instanceof Percent) {\r\n if (parent) {\r\n x = parent.innerWidth() * x.value + parent.get(\"paddingLeft\", 0);\r\n }\r\n else {\r\n x = 0;\r\n }\r\n }\r\n if ($type.isNumber(x)) {\r\n xx = x + dx;\r\n }\r\n else {\r\n if (_x != null) {\r\n xx = _x;\r\n }\r\n else if (parent) {\r\n if (position == \"relative\") {\r\n xx = parent.get(\"paddingLeft\", 0) + dx;\r\n }\r\n }\r\n }\r\n let y = this.get(\"y\");\r\n let _y = this.getPrivate(\"y\");\r\n if (y instanceof Percent) {\r\n if (parent) {\r\n y = parent.innerHeight() * y.value + parent.get(\"paddingTop\", 0);\r\n }\r\n else {\r\n y = 0;\r\n }\r\n }\r\n if ($type.isNumber(y)) {\r\n yy = y + dy;\r\n }\r\n else {\r\n if (_y != null) {\r\n yy = _y;\r\n }\r\n else if (parent) {\r\n if (position == \"relative\") {\r\n yy = parent.get(\"paddingTop\", 0) + dy;\r\n }\r\n }\r\n }\r\n const display = this._display;\r\n if (display.x != xx || display.y != yy) {\r\n display.invalidateBounds();\r\n display.x = xx;\r\n display.y = yy;\r\n const eventType = \"positionchanged\";\r\n if (this.events.isEnabled(eventType)) {\r\n this.events.dispatch(eventType, { type: eventType, target: this });\r\n }\r\n }\r\n // Update tooltip position together with the Sprite\r\n if (this.getPrivate(\"showingTooltip\")) {\r\n this.showTooltip();\r\n }\r\n }\r\n /**\r\n * Returns element's actual X position in pixels.\r\n *\r\n * @return X (px)\r\n */\r\n x() {\r\n let x = this.get(\"x\");\r\n let _x = this.getPrivate(\"x\");\r\n const parent = this.parent;\r\n if (parent) {\r\n if (x instanceof Percent) {\r\n return $utils.relativeToValue(x, parent.innerWidth()) + parent.get(\"paddingLeft\", 0);\r\n }\r\n else {\r\n if (!$type.isNumber(x)) {\r\n if (_x != null) {\r\n return _x;\r\n }\r\n else {\r\n return parent.get(\"paddingLeft\", this._display.x);\r\n }\r\n }\r\n else {\r\n return x;\r\n }\r\n }\r\n }\r\n return this._display.x;\r\n }\r\n /**\r\n * Returns element's actual Y position in pixels.\r\n *\r\n * @return Y (px)\r\n */\r\n y() {\r\n let _y = this.getPrivate(\"y\");\r\n if (_y != null) {\r\n return _y;\r\n }\r\n let y = this.get(\"y\");\r\n const parent = this.parent;\r\n if (parent) {\r\n if (y instanceof Percent) {\r\n return $utils.relativeToValue(y, parent.innerHeight()) + parent.get(\"paddingTop\", 0);\r\n }\r\n else {\r\n if (!$type.isNumber(y)) {\r\n if (_y != null) {\r\n return _y;\r\n }\r\n else {\r\n return parent.get(\"paddingTop\", this._display.y);\r\n }\r\n }\r\n else {\r\n return y;\r\n }\r\n }\r\n }\r\n return this._display.y;\r\n }\r\n _dispose() {\r\n super._dispose();\r\n this._display.dispose();\r\n this._removeTemplateField();\r\n this._removeParent(this.parent);\r\n this._root._removeFocusElement(this);\r\n const tooltip = this.get(\"tooltip\");\r\n if (tooltip) {\r\n tooltip.dispose();\r\n }\r\n this.markDirty();\r\n }\r\n /**\r\n * @ignore\r\n */\r\n adjustedLocalBounds() {\r\n this._fixMinBounds(this._adjustedLocalBounds);\r\n return this._adjustedLocalBounds;\r\n }\r\n /**\r\n * Returns local coordinates of the element's bounds.\r\n *\r\n * @ignore\r\n * @return Global bounds\r\n */\r\n localBounds() {\r\n return this._localBounds;\r\n }\r\n /**\r\n * Returns adjusted local coordinates of the element's bounds.\r\n *\r\n * @ignore\r\n * @return Global bounds\r\n */\r\n bounds() {\r\n const bounds = this._adjustedLocalBounds;\r\n const x = this.x();\r\n const y = this.y();\r\n return { left: bounds.left + x, right: bounds.right + x, top: bounds.top + y, bottom: bounds.bottom + y };\r\n }\r\n /**\r\n * Returns global coordinates of the element's bounds.\r\n *\r\n * @ignore\r\n * @return Global bounds\r\n */\r\n globalBounds() {\r\n const bounds = this.localBounds();\r\n const p0 = this.toGlobal({ x: bounds.left, y: bounds.top });\r\n const p1 = this.toGlobal({ x: bounds.right, y: bounds.top });\r\n const p2 = this.toGlobal({ x: bounds.right, y: bounds.bottom });\r\n const p3 = this.toGlobal({ x: bounds.left, y: bounds.bottom });\r\n return {\r\n left: Math.min(p0.x, p1.x, p2.x, p3.x),\r\n top: Math.min(p0.y, p1.y, p2.y, p3.y),\r\n right: Math.max(p0.x, p1.x, p2.x, p3.x),\r\n bottom: Math.max(p0.y, p1.y, p2.y, p3.y)\r\n };\r\n }\r\n _onShow(_duration) {\r\n }\r\n _onHide(_duration) {\r\n }\r\n /**\r\n * Plays initial reveal animation regardless if element is currently hidden\r\n * or visible.\r\n *\r\n * @param duration Duration of the animation in milliseconds\r\n * @param delay Delay showing of the element by X milliseconds\r\n * @return Promise\r\n */\r\n appear(duration, delay) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n yield this.hide(0);\r\n if (delay) {\r\n return new Promise((success, _error) => {\r\n this.setTimeout(() => {\r\n success(this.show(duration));\r\n }, delay);\r\n });\r\n }\r\n else {\r\n return this.show(duration);\r\n }\r\n });\r\n }\r\n /**\r\n * Shows currently hidden element and returns a `Promise` which completes\r\n * when all showing animations are finished.\r\n *\r\n * ```TypeScript\r\n * series.show().then(function(ev) {\r\n * console.log(\"Series is now fully visible\");\r\n * })\r\n * ```\r\n * ```JavaScript\r\n * series.show().then(function(ev) {\r\n * console.log(\"Series is now fully visible\");\r\n * })\r\n * ```\r\n *\r\n * @return Promise\r\n */\r\n show(duration) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n if (!this._isShowing) {\r\n this._isHidden = false;\r\n this._isShowing = true;\r\n this._isHiding = false;\r\n if (this.states.lookup(\"default\").get(\"visible\")) {\r\n this.set(\"visible\", true);\r\n }\r\n this._onShow(duration);\r\n const animations = this.states.applyAnimate(\"default\", duration);\r\n yield waitForAnimations(animations);\r\n this._isShowing = false;\r\n }\r\n });\r\n }\r\n /**\r\n * Hides the element and returns a `Promise` which completes when all hiding\r\n * animations are finished.\r\n *\r\n * ```TypeScript\r\n * series.hide().then(function(ev) {\r\n * console.log(\"Series finished hiding\");\r\n * })\r\n * ```\r\n * ```JavaScript\r\n * series.hide().then(function(ev) {\r\n * console.log(\"Series finished hiding\");\r\n * })\r\n * ```\r\n *\r\n * @return Promise\r\n */\r\n hide(duration) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n if (!this._isHiding && !this._isHidden) {\r\n this._isHiding = true;\r\n this._isShowing = false;\r\n let state = this.states.lookup(\"hidden\");\r\n if (!state) {\r\n state = this.states.create(\"hidden\", {\r\n \"opacity\": 0,\r\n \"visible\": false\r\n });\r\n }\r\n this._isHidden = true;\r\n this._onHide(duration);\r\n const animations = this.states.applyAnimate(\"hidden\", duration);\r\n yield waitForAnimations(animations);\r\n this._isHiding = false;\r\n }\r\n });\r\n }\r\n /**\r\n * Returns `true` if this element is currently hidden.\r\n *\r\n * @return Is hidden?\r\n */\r\n isHidden() {\r\n return this._isHidden;\r\n }\r\n /**\r\n * Returns `true` if this element is currently animating to a default state.\r\n *\r\n * @return Is showing?\r\n */\r\n isShowing() {\r\n return this._isShowing;\r\n }\r\n /**\r\n * Returns `true` if this element is currently animating to a hidden state.\r\n *\r\n * @return Is hiding?\r\n */\r\n isHiding() {\r\n return this._isHiding;\r\n }\r\n /**\r\n * Returns `true` if this element is currently hovered by a pointer.\r\n *\r\n * @return Is hovered?\r\n */\r\n isHover() {\r\n return this._display.hovering();\r\n }\r\n /**\r\n * Returns `true` if this element does currently have focus.\r\n *\r\n * @return Is focused?\r\n */\r\n isFocus() {\r\n return this._root.focused(this);\r\n }\r\n /**\r\n * Returns `true` if this element is currently being dragged.\r\n *\r\n * @return Is dragged?\r\n */\r\n isDragging() {\r\n return this._isDragging;\r\n }\r\n /**\r\n * Returns `false` if if either public or private setting `visible` is set\r\n * to `false`, or `forceHidden` is set to `true`.\r\n *\r\n * @return Visible?\r\n */\r\n isVisible() {\r\n if (this.get(\"visible\") && this.getPrivate(\"visible\") && !this.get(\"forceHidden\")) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**\r\n * Same as `isVisible()`, except it checks all ascendants, too.\r\n *\r\n * @since 5.2.7\r\n * @return Visible?\r\n */\r\n isVisibleDeep() {\r\n return this._parent ? (this._parent.isVisibleDeep() && this.isVisible()) : this.isVisible();\r\n }\r\n /**\r\n * Returns an actual opacity of the element, taking into account all parents.\r\n *\r\n * @return Opacity\r\n * @since 5.2.11\r\n */\r\n compositeOpacity() {\r\n const opacity = this.get(\"opacity\", 1);\r\n return this._parent ? (this._parent.compositeOpacity() * opacity) : opacity;\r\n }\r\n /**\r\n * Returns an actual scale of the element, taking into account all parents.\r\n *\r\n * @return Opacity\r\n * @since 5.9.2\r\n */\r\n compositeScale() {\r\n const scale = this.get(\"scale\", 1);\r\n return this._parent ? (this._parent.compositeScale() * scale) : scale;\r\n }\r\n /**\r\n * Returns an actual roation of the element, taking into account all parents.\r\n *\r\n * @return Opacity\r\n * @since 5.9.2\r\n */\r\n compositeRotation() {\r\n const rotation = this.get(\"rotation\", 0);\r\n return this._parent ? (this._parent.compositeRotation() + rotation) : rotation;\r\n }\r\n /**\r\n * Returns width of this element in pixels.\r\n *\r\n * @return Width (px)\r\n */\r\n width() {\r\n let width = this.get(\"width\");\r\n let maxWidth = this.get(\"maxWidth\", this.getPrivate(\"maxWidth\"));\r\n let minWidth = this.get(\"minWidth\", this.getPrivate(\"minWidth\"));\r\n let privateWidth = this.getPrivate(\"width\");\r\n let w = 0;\r\n if ($type.isNumber(privateWidth)) {\r\n w = privateWidth;\r\n }\r\n else {\r\n if (width == null) {\r\n if (this._adjustedLocalBounds) {\r\n w = this._adjustedLocalBounds.right - this._adjustedLocalBounds.left;\r\n }\r\n }\r\n else {\r\n if (width instanceof Percent) {\r\n const parent = this.parent;\r\n if (parent) {\r\n w = parent.innerWidth() * width.value;\r\n }\r\n else {\r\n w = this._root.width() * width.value;\r\n }\r\n }\r\n else if ($type.isNumber(width)) {\r\n w = width;\r\n }\r\n }\r\n }\r\n if ($type.isNumber(minWidth)) {\r\n w = Math.max(minWidth, w);\r\n }\r\n if ($type.isNumber(maxWidth)) {\r\n w = Math.min(maxWidth, w);\r\n }\r\n return w;\r\n }\r\n /**\r\n * Returns maximum allowed width of this element in pixels.\r\n *\r\n * @return Maximum width (px)\r\n */\r\n maxWidth() {\r\n let maxWidth = this.get(\"maxWidth\", this.getPrivate(\"maxWidth\"));\r\n if ($type.isNumber(maxWidth)) {\r\n return maxWidth;\r\n }\r\n else {\r\n let width = this.get(\"width\");\r\n if ($type.isNumber(width)) {\r\n return width;\r\n }\r\n }\r\n const parent = this.parent;\r\n if (parent) {\r\n return parent.innerWidth();\r\n }\r\n return this._root.width();\r\n }\r\n /**\r\n * Returns maximum allowed height of this element in pixels.\r\n *\r\n * @return Maximum height (px)\r\n */\r\n maxHeight() {\r\n let maxHeight = this.get(\"maxHeight\", this.getPrivate(\"maxHeight\"));\r\n if ($type.isNumber(maxHeight)) {\r\n return maxHeight;\r\n }\r\n else {\r\n let height = this.get(\"height\");\r\n if ($type.isNumber(height)) {\r\n return height;\r\n }\r\n }\r\n const parent = this.parent;\r\n if (parent) {\r\n return parent.innerHeight();\r\n }\r\n return this._root.height();\r\n }\r\n /**\r\n * Returns height of this element in pixels.\r\n *\r\n * @return Height (px)\r\n */\r\n height() {\r\n let height = this.get(\"height\");\r\n let maxHeight = this.get(\"maxHeight\", this.getPrivate(\"maxHeight\"));\r\n let minHeight = this.get(\"minHeight\", this.getPrivate(\"minHeight\"));\r\n let privateHeight = this.getPrivate(\"height\");\r\n let h = 0;\r\n if ($type.isNumber(privateHeight)) {\r\n h = privateHeight;\r\n }\r\n else {\r\n if (height == null) {\r\n if (this._adjustedLocalBounds) {\r\n h = this._adjustedLocalBounds.bottom - this._adjustedLocalBounds.top;\r\n }\r\n }\r\n else {\r\n if (height instanceof Percent) {\r\n const parent = this.parent;\r\n if (parent) {\r\n h = parent.innerHeight() * height.value;\r\n }\r\n else {\r\n h = this._root.height() * height.value;\r\n }\r\n }\r\n else if ($type.isNumber(height)) {\r\n h = height;\r\n }\r\n }\r\n }\r\n if ($type.isNumber(minHeight)) {\r\n h = Math.max(minHeight, h);\r\n }\r\n if ($type.isNumber(maxHeight)) {\r\n h = Math.min(maxHeight, h);\r\n }\r\n return h;\r\n }\r\n _findStaticTemplate(f) {\r\n // templateField overrides template\r\n if (this._templateField && f(this._templateField)) {\r\n return this._templateField;\r\n }\r\n return super._findStaticTemplate(f);\r\n }\r\n _walkParents(f) {\r\n if (this._parent || this._virtualParent) {\r\n this._walkParent(f);\r\n }\r\n }\r\n _walkParent(f) {\r\n if (this._parent) {\r\n this._parent._walkParent(f);\r\n }\r\n else {\r\n if (this._virtualParent) {\r\n this._virtualParent._walkParent(f);\r\n }\r\n }\r\n f(this);\r\n }\r\n set virtualParent(parent) {\r\n if (this._virtualParent !== parent) {\r\n this._virtualParent = parent;\r\n this._applyThemes();\r\n }\r\n }\r\n /**\r\n * Parent [[Container]] of this element.\r\n *\r\n * @return Parent container\r\n */\r\n get parent() {\r\n return this._parent;\r\n }\r\n _setParent(parent, updateChildren = false) {\r\n const prevParent = this._parent;\r\n if (parent !== prevParent) {\r\n this.markDirtyBounds();\r\n parent.markDirty();\r\n this._parent = parent;\r\n if (updateChildren) {\r\n this._removeParent(prevParent);\r\n if (parent) {\r\n this._addPercentageSizeChildren();\r\n this._addPercentagePositionChildren();\r\n }\r\n }\r\n this.markDirtyPosition();\r\n this._applyThemes();\r\n }\r\n }\r\n /**\r\n * Returns an instance of [[NumberFormatter]] used in this element.\r\n *\r\n * If this element does not have it set, global one form [[Root]] is used.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/using-formatters/} for more info\r\n * @return NumberFormatter instace\r\n */\r\n getNumberFormatter() {\r\n return this.get(\"numberFormatter\", this._root.numberFormatter);\r\n }\r\n /**\r\n * Returns an instance of [[DateFormatter]] used in this element.\r\n *\r\n * If this element does not have it set, global one form [[Root]] is used.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/using-formatters/} for more info\r\n * @return DateFormatter instace\r\n */\r\n getDateFormatter() {\r\n return this.get(\"dateFormatter\", this._root.dateFormatter);\r\n }\r\n /**\r\n * Returns an instance of [[DurationFormatter]] used in this element.\r\n *\r\n * If this element does not have it set, global one form [[Root]] is used.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/using-formatters/} for more info\r\n * @return DurationFormatter instace\r\n */\r\n getDurationFormatter() {\r\n return this.get(\"durationFormatter\", this._root.durationFormatter);\r\n }\r\n /**\r\n * Converts X/Y coordinate within this element to a global coordinate.\r\n *\r\n * @param point Local coordinate\r\n * @return Global coordinate\r\n */\r\n toGlobal(point) {\r\n return this._display.toGlobal(point);\r\n }\r\n /**\r\n * Converts global X/Y coordinate to a coordinate within this element.\r\n *\r\n * @param point Global coordinate\r\n * @return Local coordinate\r\n */\r\n toLocal(point) {\r\n return this._display.toLocal(point);\r\n }\r\n _getDownPoint() {\r\n const id = this._getDownPointId();\r\n if (id) {\r\n return this._downPoints[id];\r\n }\r\n }\r\n _getDownPointId() {\r\n if (this._downPoints) {\r\n return $object.keysOrdered(this._downPoints, (a, b) => {\r\n if (a > b) {\r\n return 1;\r\n }\r\n if (a < b) {\r\n return -1;\r\n }\r\n return 0;\r\n })[0];\r\n }\r\n }\r\n /**\r\n * Moves sprite to the end of the parent's children array.\r\n *\r\n * Depending on `layout` setting of the parten container, it may effect the\r\n * positioning or overlapping order of the elements.\r\n */\r\n toFront() {\r\n const parent = this.parent;\r\n if (parent) {\r\n parent.children.moveValue(this, parent.children.length - 1);\r\n }\r\n }\r\n /**\r\n * Moves sprite to the beginning of the parent's children array.\r\n *\r\n * Depending on `layout` setting of the parten container, it may effect the\r\n * positioning or overlapping order of the elements.\r\n */\r\n toBack() {\r\n const parent = this.parent;\r\n if (parent) {\r\n parent.children.moveValue(this, 0);\r\n }\r\n }\r\n}\r\nSprite.className = \"Sprite\";\r\nSprite.classNames = Entity.classNames.concat([Sprite.className]);\r\n//# sourceMappingURL=Sprite.js.map","import { Color } from \"./Color\";\r\nimport * as $type from \"./Type\";\r\nexport class TextFormatter {\r\n /**\r\n * Replaces brackets with temporary placeholders.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Input text\r\n * @return Escaped text\r\n */\r\n static escape(text) {\r\n return text.\r\n replace(/\\[\\[/g, this.prefix + \"1\").\r\n replace(/([^\\/\\]]{1})\\]\\]/g, \"$1\" + this.prefix + \"2\").\r\n replace(/\\]\\]/g, this.prefix + \"2\").\r\n replace(/\\{\\{/g, this.prefix + \"3\").\r\n replace(/\\}\\}/g, this.prefix + \"4\").\r\n replace(/\\'\\'/g, this.prefix + \"5\");\r\n }\r\n /**\r\n * Replaces placeholders back to brackets.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Escaped text\r\n * @return Unescaped text\r\n */\r\n static unescape(text) {\r\n return text.\r\n replace(new RegExp(this.prefix + \"1\", \"g\"), \"[[\").\r\n replace(new RegExp(this.prefix + \"2\", \"g\"), \"]]\").\r\n replace(new RegExp(this.prefix + \"3\", \"g\"), \"{{\").\r\n replace(new RegExp(this.prefix + \"4\", \"g\"), \"}}\").\r\n replace(new RegExp(this.prefix + \"5\", \"g\"), \"''\");\r\n }\r\n /**\r\n * Cleans up the text text for leftover double square brackets.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Input text\r\n * @return Cleaned up text\r\n */\r\n static cleanUp(text) {\r\n return text.\r\n replace(/\\[\\[/g, \"[\").\r\n replace(/\\]\\]/g, \"]\").\r\n replace(/\\{\\{/g, \"{\").\r\n replace(/\\}\\}/g, \"}\").\r\n replace(/\\'\\'/g, \"'\");\r\n }\r\n /**\r\n * Splits string into chunks. (style blocks, quoted blocks, regular blocks)\r\n *\r\n * If the second parameter `quotedBlocks` is set to `true` this method will\r\n * also single out text blocks enclosed within single quotes that no\r\n * formatting should be applied to, and they should be displayed as is.\r\n *\r\n * Default for the above is `false`, so that you can use single quote in text\r\n * without escaping it.\r\n *\r\n * If enabled, single quotes can be escaped by doubling it - adding two\r\n * single quotes, which will be replaced by a one single quote in the final\r\n * output.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Text to chunk\r\n * @param quotedBlocks Use quoted blocks\r\n * @param noFormatting Formatting blocks will be treated as regular text\r\n * @return Array of string chunks\r\n */\r\n static chunk(text, quotedBlocks = false, noFormatting = false) {\r\n // Init result\r\n let res = [];\r\n // Replace double (escaped) square spaces and quotes with temporary codes\r\n text = this.escape(text);\r\n // Deal with style blocks\r\n let chunks = quotedBlocks ? text.split(\"'\") : [text];\r\n for (let i = 0; i < chunks.length; i++) {\r\n let chunk = chunks[i];\r\n // Empty?\r\n if (chunk === \"\") {\r\n continue;\r\n }\r\n if ((i % 2) === 0) {\r\n // Text outside quotes\r\n // Parse for style blocks which are \"text\" chunks, the rest chunks are\r\n // \"value\"\r\n chunk = chunk.replace(/\\]\\[/g, \"]\" + $type.PLACEHOLDER + \"[\");\r\n chunk = chunk.replace(/\\[\\]/g, \"[ ]\");\r\n let chunks2 = chunk.split(/[\\[\\]]+/);\r\n for (let i2 = 0; i2 < chunks2.length; i2++) {\r\n let chunk2 = this.cleanUp(this.unescape(chunks2[i2]));\r\n // Placeholder?\r\n if (chunk2 === $type.PLACEHOLDER) {\r\n continue;\r\n }\r\n // Empty?\r\n if (chunk2 === \"\") {\r\n continue;\r\n }\r\n // Block or value\r\n if ((i2 % 2) === 0) {\r\n res.push({\r\n \"type\": \"value\",\r\n \"text\": chunk2\r\n });\r\n }\r\n else {\r\n res.push({\r\n \"type\": noFormatting ? \"value\" : \"format\",\r\n \"text\": \"[\" + chunk2 + \"]\"\r\n });\r\n }\r\n }\r\n }\r\n else {\r\n // A text within doublequotes\r\n // All chunks are \"text\"\r\n let chunks2 = chunk.split(/[\\[\\]]+/);\r\n for (let i2 = 0; i2 < chunks2.length; i2++) {\r\n let chunk2 = this.cleanUp(this.unescape(chunks2[i2]));\r\n // Empty?\r\n if (chunk2 === \"\") {\r\n continue;\r\n }\r\n // Block or text\r\n if ((i2 % 2) === 0) {\r\n res.push({\r\n \"type\": \"text\",\r\n \"text\": chunk2\r\n });\r\n }\r\n else if (this.isImage(chunk2)) {\r\n res.push({\r\n \"type\": \"image\",\r\n \"text\": \"[\" + chunk2 + \"]\"\r\n });\r\n }\r\n else {\r\n res.push({\r\n \"type\": \"format\",\r\n \"text\": \"[\" + chunk2 + \"]\"\r\n });\r\n }\r\n }\r\n }\r\n }\r\n return res;\r\n }\r\n /**\r\n * Checks if supplied format contains image information and should be\r\n * formatted as such.\r\n * I.e.: `[img: myImage.png]`\r\n *\r\n * @ignore\r\n * @param text Format\r\n * @return true if it is an image\r\n */\r\n static isImage(text) {\r\n return text.match(/img[ ]?:/) ? true : false;\r\n }\r\n static getTextStyle(style) {\r\n // let textStyle: string[] = [];\r\n // let textFill: string | undefined;\r\n let format = {};\r\n if (style == \"\" || style == \"[ ]\") {\r\n return {};\r\n }\r\n // Pre-process quoted text\r\n const q = style.match(/('[^']*')|(\"[^\"]*\")/gi);\r\n if (q) {\r\n for (let i = 0; i < q.length; i++) {\r\n style = style.replace(q[i], q[i].replace(/['\"]*/g, \"\").replace(/[ ]+/g, \"+\"));\r\n }\r\n }\r\n // Get style parts\r\n let b = style.match(/([\\w\\-]*:[\\s]?[^;\\s\\]]*)|(\\#[\\w]{1,6})|([\\w\\-]+)|(\\/)/gi);\r\n // Empty?\r\n if (!b) {\r\n return {};\r\n }\r\n // Check each part\r\n for (let i = 0; i < b.length; i++) {\r\n if (b[i].match(/^(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)$/i)) {\r\n format.fontWeight = b[i];\r\n }\r\n else if (b[i].match(/^(underline|line-through)$/i)) {\r\n format.textDecoration = b[i];\r\n }\r\n else if (b[i] == \"/\") {\r\n // Just closing tag\r\n // Do nothing\r\n }\r\n else if (!b[i].match(/:/)) {\r\n // Color\r\n format.fill = Color.fromString(b[i]);\r\n }\r\n else {\r\n const p = b[i].replace(\"+\", \" \").split(/:[ ]*/);\r\n format[p[0]] = p[1];\r\n //textStyle.push(b[i].replace(/^[a-zA-Z]:[ ]*/, \"\"));\r\n //b[i] = b[i].replace(/\\+/g, \" \");\r\n }\r\n }\r\n return format;\r\n }\r\n}\r\nTextFormatter.prefix = \"__amcharts__\";\r\n//# sourceMappingURL=TextFormatter.js.map","/** @ignore */ /** */\r\nimport * as $type from \"./Type\";\r\nimport * as $utils from \"./Utils\";\r\nimport { Sprite } from \"../render/Sprite\";\r\nimport { TextFormatter } from \"./TextFormatter\";\r\n/**\r\n * Populates the curly-bracket placeholders with actual values from a [[Sprite]].\r\n *\r\n * @param target Target Sprite\r\n * @param string Target text\r\n * @returns Populated text\r\n */\r\nexport function populateString(target, string) {\r\n if (string != null) {\r\n string = \"\" + string;\r\n string = TextFormatter.escape(string);\r\n let tags = string.match(/\\{([^}]+)\\}/g);\r\n let i;\r\n if (tags) {\r\n for (i = 0; i < tags.length; i++) {\r\n let tag = tags[i].replace(/\\{([^}]+)\\}/, \"$1\");\r\n let value = getTagValue(target, tag, \"\");\r\n if (value == null) {\r\n value = \"\";\r\n }\r\n string = string.split(tags[i]).join(value);\r\n }\r\n }\r\n string = TextFormatter.unescape(string);\r\n }\r\n else {\r\n string = \"\";\r\n }\r\n // TODO: apply adapter?\r\n return string;\r\n}\r\n/**\r\n * Returns an abstract value from the target [[Sprite]]'s data item, settings,\r\n * properties or parents.\r\n *\r\n * @param target Target Sprite\r\n * @param tagName Tage to extract value for\r\n * @param format Format for the value\r\n * @returns Value\r\n */\r\nexport function getTagValue(target, tagName, format) {\r\n let value;\r\n const dataItem = target.dataItem;\r\n // Parse parts\r\n let parts = [];\r\n let reg = /(format[a-zA-Z]*)\\((.*)\\)|([^.]+)/g;\r\n let matches;\r\n while (true) {\r\n matches = reg.exec(tagName);\r\n if (matches === null) {\r\n break;\r\n }\r\n if (matches[3]) {\r\n // Simple property\r\n parts.push({\r\n prop: matches[3]\r\n });\r\n // Check if maybe we should force a formatter on this value\r\n const dateFields = target.getDateFormatter().get(\"dateFields\", []);\r\n const numericFields = target.getNumberFormatter().get(\"numericFields\", []);\r\n const durationFields = target.getDurationFormatter().get(\"durationFields\", []);\r\n if (dateFields.indexOf(matches[3]) !== -1) {\r\n parts.push({\r\n method: \"formatDate\",\r\n params: []\r\n });\r\n }\r\n else if (numericFields.indexOf(matches[3]) !== -1) {\r\n parts.push({\r\n method: \"formatNumber\",\r\n params: []\r\n });\r\n }\r\n else if (durationFields.indexOf(matches[3]) !== -1) {\r\n parts.push({\r\n method: \"formatDuration\",\r\n params: []\r\n });\r\n }\r\n }\r\n else {\r\n // Method\r\n // Parse parameters\r\n let params = [];\r\n if ($utils.trim(matches[2]) != \"\") {\r\n let reg2 = /'([^']*)'|\"([^\"]*)\"|([0-9\\-]+)/g;\r\n let matches2;\r\n while (true) {\r\n matches2 = reg2.exec(matches[2]);\r\n if (matches2 === null) {\r\n break;\r\n }\r\n params.push(matches2[1] || matches2[2] || matches2[3]);\r\n }\r\n }\r\n parts.push({\r\n method: matches[1],\r\n params: params\r\n });\r\n }\r\n }\r\n // Check if we can retrieve the value from data item\r\n if (dataItem) {\r\n // Check values\r\n value = getTagValueFromObject(target, parts, dataItem._settings);\r\n // Check properties\r\n if (value == null || $type.isObject(value)) { // isObject helps to solve problem with date axis, as for example dateX will get dateX from values object and won't get to the dateX date.\r\n value = getTagValueFromObject(target, parts, dataItem);\r\n }\r\n // Check data context\r\n let dataContext = dataItem.dataContext;\r\n if (value == null && dataContext) {\r\n value = getTagValueFromObject(target, parts, dataContext);\r\n // Maybe it's a literal dot-separated name of the key in dataContext?\r\n if (value == null) {\r\n value = getTagValueFromObject(target, [{\r\n prop: tagName\r\n }], dataContext);\r\n }\r\n // scond data context level sometimes exist (tree map)\r\n if (value == null && dataContext.dataContext) {\r\n value = getTagValueFromObject(target, parts, dataContext.dataContext);\r\n }\r\n }\r\n // Check component's data item\r\n if (value == null && dataItem.component && dataItem.component.dataItem !== dataItem) {\r\n value = getTagValue(dataItem.component, tagName, format);\r\n }\r\n }\r\n // Check sprite's properties\r\n if (value == null) {\r\n value = getTagValueFromObject(target, parts, target);\r\n }\r\n // Finally, check the parent\r\n if (value == null && target.parent) {\r\n value = getTagValue(target.parent, tagName, format);\r\n }\r\n return value;\r\n}\r\n/**\r\n * Returns a value from target [[Sprite]]'s `customData`.\r\n *\r\n * @param target Target Sprite\r\n * @param prop Key\r\n * @returns Value\r\n */\r\nexport function getCustomDataValue(target, prop) {\r\n const customData = target.getPrivate(\"customData\");\r\n if ($type.isObject(customData)) {\r\n return customData[prop];\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function getTagValueFromObject(target, parts, object, format) {\r\n let current = object;\r\n let formatApplied = false;\r\n for (let i = 0, len = parts.length; i < len; i++) {\r\n let part = parts[i];\r\n if (part.prop) {\r\n // Regular property\r\n if (current instanceof Sprite) {\r\n let tmp = current.get(part.prop);\r\n if (tmp == null)\r\n tmp = current.getPrivate(part.prop);\r\n if (tmp == null)\r\n tmp = getCustomDataValue(current, part.prop);\r\n if (tmp == null)\r\n tmp = current[part.prop];\r\n current = tmp;\r\n }\r\n else if (current.get) {\r\n let tmp = current.get(part.prop);\r\n if (tmp == null)\r\n tmp = current[part.prop];\r\n current = tmp;\r\n }\r\n else {\r\n current = current[part.prop];\r\n }\r\n if (current == null) {\r\n // Not set, return undefined\r\n return;\r\n }\r\n }\r\n else {\r\n // Method\r\n switch (part.method) {\r\n case \"formatNumber\":\r\n let numberValue = $type.toNumber(current);\r\n if (numberValue != null) {\r\n current = target.getNumberFormatter().format(numberValue, format || part.params[0] || undefined);\r\n formatApplied = true;\r\n }\r\n break;\r\n case \"formatDate\":\r\n let dateValue = $type.toDate(current);\r\n if (!$type.isDate(dateValue) || $type.isNaN(dateValue.getTime())) {\r\n // Was not able to get date out of value, quitting and letting\r\n // calling method try another value\r\n return;\r\n }\r\n if (dateValue != null) {\r\n current = target.getDateFormatter().format(dateValue, format || part.params[0] || undefined);\r\n formatApplied = true;\r\n }\r\n break;\r\n case \"formatDuration\":\r\n let durationValue = $type.toNumber(current);\r\n if (durationValue != null) {\r\n current = target.getDurationFormatter().format(durationValue, format || part.params[0] || undefined, part.params[1] || undefined);\r\n formatApplied = true;\r\n }\r\n break;\r\n case \"urlEncode\":\r\n case \"encodeURIComponent\":\r\n current = encodeURIComponent(current);\r\n break;\r\n default:\r\n if (current[part.method]) {\r\n current[part.method].apply(object, part.params);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n // Apply default format if it wasn't applied explicitly\r\n if (!formatApplied) {\r\n let formatParts = [{\r\n method: \"\",\r\n params: format\r\n }];\r\n if (format == null) {\r\n // Format is not set\r\n // Determine from the type of the value\r\n if ($type.isNumber(current)) {\r\n formatParts[0].method = \"formatNumber\";\r\n formatParts[0].params = \"\";\r\n }\r\n else if ($type.isDate(current)) {\r\n formatParts[0].method = \"formatDate\";\r\n formatParts[0].params = \"\";\r\n }\r\n }\r\n else {\r\n // Format set\r\n // Try to determine formatter based on the format\r\n let formatterType = $utils.getFormat(format);\r\n // format\r\n if (formatterType === \"number\") {\r\n formatParts[0].method = \"formatNumber\";\r\n }\r\n else if (formatterType === \"date\") {\r\n formatParts[0].method = \"formatDate\";\r\n }\r\n else if (formatterType === \"duration\") {\r\n formatParts[0].method = \"formatDuration\";\r\n }\r\n }\r\n // Apply format\r\n if (formatParts[0].method) {\r\n current = getTagValueFromObject(target, formatParts, current);\r\n }\r\n }\r\n return current;\r\n}\r\n//# sourceMappingURL=PopulateString.js.map","import { Sprite } from \"./Sprite\";\r\nimport { populateString } from \"../util/PopulateString\";\r\nimport * as $array from \"../util/Array\";\r\nimport * as $utils from \"../util/Utils\";\r\nimport { Disposer } from \"../util/Disposer\";\r\n/**\r\n * @ignore Text is an internal class. Use Label instead.\r\n */\r\nexport class Text extends Sprite {\r\n constructor() {\r\n super(...arguments);\r\n this.textStyle = this._root._renderer.makeTextStyle();\r\n this._display = this._root._renderer.makeText(\"\", this.textStyle);\r\n this._textStyles = [\r\n \"textAlign\",\r\n \"fontFamily\",\r\n \"fontSize\",\r\n \"fontStyle\",\r\n \"fontWeight\",\r\n \"fontStyle\",\r\n \"fontVariant\",\r\n \"textDecoration\",\r\n \"shadowColor\",\r\n \"shadowBlur\",\r\n \"shadowOffsetX\",\r\n \"shadowOffsetY\",\r\n \"shadowOpacity\",\r\n // \"leading\",\r\n // \"letterSpacing\",\r\n \"lineHeight\",\r\n \"baselineRatio\",\r\n //\"padding\",\r\n // \"stroke\",\r\n // \"strokeThickness\",\r\n // \"trim\",\r\n // \"wordWrap\",\r\n \"direction\",\r\n \"textBaseline\",\r\n \"oversizedBehavior\",\r\n \"breakWords\",\r\n \"ellipsis\",\r\n \"minScale\",\r\n \"maxChars\"\r\n ];\r\n }\r\n _updateBounds() {\r\n if (!this.get(\"text\")) {\r\n let newBounds = {\r\n left: 0,\r\n right: 0,\r\n top: 0,\r\n bottom: 0,\r\n };\r\n this._adjustedLocalBounds = newBounds;\r\n }\r\n else {\r\n super._updateBounds();\r\n let fillGradient = this.get(\"fillGradient\");\r\n if (fillGradient) {\r\n this._display.style.fill = fillGradient.getFill(this);\r\n }\r\n }\r\n }\r\n _changed() {\r\n super._changed();\r\n this._display.clear();\r\n let textStyle = this.textStyle;\r\n if (this.isDirty(\"opacity\")) {\r\n let opacity = this.get(\"opacity\", 1);\r\n this._display.alpha = opacity;\r\n }\r\n if (this.isDirty(\"text\") || this.isDirty(\"populateText\")) {\r\n this._display.text = this._getText();\r\n this.markDirtyBounds();\r\n if (this.get(\"role\") == \"tooltip\") {\r\n this._root.updateTooltip(this);\r\n }\r\n }\r\n if (this.isPrivateDirty(\"tooltipElement\")) {\r\n const tooltipElement = this.getPrivate(\"tooltipElement\");\r\n if (tooltipElement) {\r\n this._disposers.push(new Disposer(() => {\r\n this._root._removeTooltipElement(this);\r\n }));\r\n }\r\n }\r\n if (this.isDirty(\"width\")) {\r\n textStyle.wordWrapWidth = this.width();\r\n this.markDirtyBounds();\r\n }\r\n if (this.isDirty(\"oversizedBehavior\")) {\r\n textStyle.oversizedBehavior = this.get(\"oversizedBehavior\", \"none\");\r\n this._display.invalidateVisibility();\r\n this.markDirtyBounds();\r\n }\r\n if (this.isDirty(\"breakWords\")) {\r\n textStyle.breakWords = this.get(\"breakWords\", false);\r\n this.markDirtyBounds();\r\n }\r\n if (this.isDirty(\"ellipsis\")) {\r\n textStyle.ellipsis = this.get(\"ellipsis\");\r\n this.markDirtyBounds();\r\n }\r\n if (this.isDirty(\"ignoreFormatting\")) {\r\n textStyle.ignoreFormatting = this.get(\"ignoreFormatting\", false);\r\n this.markDirtyBounds();\r\n }\r\n if (this.isDirty(\"minScale\")) {\r\n textStyle.minScale = this.get(\"minScale\", 0);\r\n this.markDirtyBounds();\r\n }\r\n if (this.isDirty(\"fill\") || this.isDirty(\"fillGradient\")) {\r\n const fill = this.get(\"fill\");\r\n const fillGradient = this.get(\"fillGradient\");\r\n const fillOpacity = this.get(\"fillOpacity\");\r\n if (fillGradient) {\r\n if (fill) {\r\n const stops = fillGradient.get(\"stops\", []);\r\n if (stops.length) {\r\n $array.each(stops, (stop) => {\r\n if ((!stop.color || stop.colorInherited) && fill) {\r\n stop.color = fill;\r\n stop.colorInherited = true;\r\n }\r\n if (stop.opacity == null || stop.opacityInherited) {\r\n stop.opacity = fillOpacity;\r\n stop.opacityInherited = true;\r\n }\r\n });\r\n }\r\n }\r\n textStyle.fill = fillGradient.getFill(this);\r\n }\r\n else if (fill) {\r\n textStyle.fill = fill;\r\n }\r\n }\r\n if (this.isDirty(\"fillOpacity\")) {\r\n let fillOpacity = this.get(\"fillOpacity\", 1);\r\n if (fillOpacity) {\r\n textStyle.fillOpacity = fillOpacity;\r\n }\r\n }\r\n if (this.isDirty(\"maxWidth\") || this.isPrivateDirty(\"maxWidth\")) {\r\n textStyle.maxWidth = this.get(\"maxWidth\", this.getPrivate(\"maxWidth\"));\r\n this.markDirtyBounds();\r\n }\r\n if (this.isDirty(\"maxHeight\") || this.isPrivateDirty(\"maxHeight\")) {\r\n textStyle.maxHeight = this.get(\"maxHeight\", this.getPrivate(\"maxHeight\"));\r\n this.markDirtyBounds();\r\n }\r\n $array.each(this._textStyles, (styleName) => {\r\n if (this._dirty[styleName]) {\r\n textStyle[styleName] = this.get(styleName);\r\n this.markDirtyBounds();\r\n }\r\n });\r\n textStyle[\"fontSize\"] = this.get(\"fontSize\");\r\n textStyle[\"fontFamily\"] = this.get(\"fontFamily\");\r\n this._display.style = textStyle;\r\n if (this.isDirty(\"role\") && this.get(\"role\") == \"tooltip\") {\r\n this._root.updateTooltip(this);\r\n }\r\n }\r\n _getText() {\r\n let text = this.get(\"text\", \"\");\r\n if (this.get(\"maxChars\")) {\r\n text = $utils.truncateTextWithEllipsis(text, this.get(\"maxChars\", 100000000), this.get(\"breakWords\"), this.get(\"ellipsis\"));\r\n }\r\n return this.get(\"populateText\") ? populateString(this, text) : text;\r\n }\r\n _getAccessibleText() {\r\n const ariaLabel = this.get(\"ariaLabel\");\r\n if (ariaLabel !== undefined) {\r\n return this.get(\"populateText\") ? populateString(this, ariaLabel) : ariaLabel;\r\n }\r\n return this._getText();\r\n }\r\n /**\r\n * Forces the text to be re-evaluated and re-populated.\r\n */\r\n markDirtyText() {\r\n this._display.text = this._getText();\r\n if (this.get(\"role\") == \"tooltip\") {\r\n this._root.updateTooltip(this);\r\n }\r\n this.markDirtyBounds();\r\n this.markDirty();\r\n }\r\n _setDataItem(dataItem) {\r\n super._setDataItem(dataItem);\r\n if (this.get(\"populateText\")) {\r\n this.markDirtyText();\r\n }\r\n }\r\n getNumberFormatter() {\r\n if (this.parent) {\r\n return this.parent.getNumberFormatter();\r\n }\r\n else {\r\n return super.getNumberFormatter();\r\n }\r\n }\r\n getDateFormatter() {\r\n if (this.parent) {\r\n return this.parent.getDateFormatter();\r\n }\r\n else {\r\n return super.getDateFormatter();\r\n }\r\n }\r\n getDurationFormatter() {\r\n if (this.parent) {\r\n return this.parent.getDurationFormatter();\r\n }\r\n else {\r\n return super.getDurationFormatter();\r\n }\r\n }\r\n}\r\nText.className = \"Text\";\r\nText.classNames = Sprite.classNames.concat([Text.className]);\r\n//# sourceMappingURL=Text.js.map","import { EventDispatcher } from \"./EventDispatcher\";\r\nimport * as $array from \"./Array\";\r\n/**\r\n * Checks if specific index fits into length.\r\n *\r\n * @param index Index\r\n * @param len Length\r\n * @ignore\r\n */\r\nfunction checkBounds(index, len) {\r\n if (!(index >= 0 && index < len)) {\r\n throw new Error(\"Index out of bounds: \" + index);\r\n }\r\n}\r\n/**\r\n * A List class is used to hold a number of indexed items of the same type.\r\n */\r\nexport class List {\r\n /**\r\n * Constructor\r\n *\r\n * @param initial Inital list of values to add to list\r\n */\r\n constructor(initial = []) {\r\n this.events = new EventDispatcher();\r\n this._values = initial;\r\n }\r\n /**\r\n * An array of values in the list.\r\n *\r\n * Do not use this property to add values. Rather use dedicated methods, like\r\n * `push()`, `removeIndex()`, etc.\r\n *\r\n * @readonly\r\n * @return List values\r\n */\r\n get values() {\r\n return this._values;\r\n }\r\n /**\r\n * Checks if list contains specific item reference.\r\n *\r\n * @param item Item to search for\r\n * @return `true` if found, `false` if not found\r\n */\r\n contains(value) {\r\n return this._values.indexOf(value) !== -1;\r\n }\r\n /**\r\n * Removes specific item from the list.\r\n *\r\n * @param item An item to remove\r\n */\r\n removeValue(value) {\r\n let i = 0;\r\n let length = this._values.length;\r\n while (i < length) {\r\n // TODO handle NaN\r\n if (this._values[i] === value) {\r\n this.removeIndex(i);\r\n --length;\r\n }\r\n else {\r\n ++i;\r\n }\r\n }\r\n }\r\n /**\r\n * Searches the list for specific item and returns its index.\r\n *\r\n * @param item An item to search for\r\n * @return Index or -1 if not found\r\n */\r\n indexOf(value) {\r\n return $array.indexOf(this._values, value);\r\n }\r\n /**\r\n * Number of items in list.\r\n *\r\n * @readonly\r\n * @return Number of items\r\n */\r\n get length() {\r\n return this._values.length;\r\n }\r\n /**\r\n * Checks if there's a value at specific index.\r\n *\r\n * @param index Index\r\n * @return Value exists?\r\n */\r\n hasIndex(index) {\r\n return index >= 0 && index < this._values.length;\r\n }\r\n /**\r\n * Returns an item at specified index.\r\n *\r\n * @param index Index\r\n * @return List item\r\n */\r\n getIndex(index) {\r\n return this._values[index];\r\n }\r\n _onPush(newValue) {\r\n if (this.events.isEnabled(\"push\")) {\r\n this.events.dispatch(\"push\", {\r\n type: \"push\",\r\n target: this,\r\n newValue\r\n });\r\n }\r\n }\r\n _onInsertIndex(index, newValue) {\r\n if (this.events.isEnabled(\"insertIndex\")) {\r\n this.events.dispatch(\"insertIndex\", {\r\n type: \"insertIndex\",\r\n target: this,\r\n index,\r\n newValue\r\n });\r\n }\r\n }\r\n _onSetIndex(index, oldValue, newValue) {\r\n if (this.events.isEnabled(\"setIndex\")) {\r\n this.events.dispatch(\"setIndex\", {\r\n type: \"setIndex\",\r\n target: this,\r\n index,\r\n oldValue,\r\n newValue\r\n });\r\n }\r\n }\r\n _onSwap(a, b) {\r\n if (this.events.isEnabled(\"swap\")) {\r\n this.events.dispatch(\"swap\", {\r\n type: \"swap\",\r\n target: this,\r\n a,\r\n b\r\n });\r\n }\r\n }\r\n _onRemoveIndex(index, oldValue) {\r\n if (this.events.isEnabled(\"removeIndex\")) {\r\n this.events.dispatch(\"removeIndex\", {\r\n type: \"removeIndex\",\r\n target: this,\r\n index,\r\n oldValue\r\n });\r\n }\r\n }\r\n _onMoveIndex(oldIndex, newIndex, value) {\r\n if (this.events.isEnabled(\"moveIndex\")) {\r\n this.events.dispatch(\"moveIndex\", {\r\n type: \"moveIndex\",\r\n target: this,\r\n oldIndex,\r\n newIndex,\r\n value,\r\n });\r\n }\r\n }\r\n _onClear(oldValues) {\r\n if (this.events.isEnabled(\"clear\")) {\r\n this.events.dispatch(\"clear\", {\r\n type: \"clear\",\r\n target: this,\r\n oldValues\r\n });\r\n }\r\n }\r\n /**\r\n * Sets value at specific index.\r\n *\r\n * If there's already a value at the index, it is overwritten.\r\n *\r\n * @param index Index\r\n * @param value New value\r\n * @return New value\r\n */\r\n setIndex(index, value) {\r\n checkBounds(index, this._values.length);\r\n const oldValue = this._values[index];\r\n // Do nothing if the old value and the new value are the same\r\n if (oldValue !== value) {\r\n this._values[index] = value;\r\n this._onSetIndex(index, oldValue, value);\r\n }\r\n return oldValue;\r\n }\r\n /**\r\n * Adds an item to the list at a specific index, which pushes all the other\r\n * items further down the list.\r\n *\r\n * @param index Index\r\n * @param item An item to add\r\n */\r\n insertIndex(index, value) {\r\n checkBounds(index, this._values.length + 1);\r\n $array.insertIndex(this._values, index, value);\r\n this._onInsertIndex(index, value);\r\n return value;\r\n }\r\n /**\r\n * Swaps indexes of two items in the list.\r\n *\r\n * @param a Item 1\r\n * @param b Item 2\r\n */\r\n swap(a, b) {\r\n const len = this._values.length;\r\n checkBounds(a, len);\r\n checkBounds(b, len);\r\n if (a !== b) {\r\n const value_a = this._values[a];\r\n const value_b = this._values[b];\r\n this._values[a] = value_b;\r\n this._values[b] = value_a;\r\n this._onSwap(value_a, value_b);\r\n }\r\n }\r\n /**\r\n * Removes a value at specific index.\r\n *\r\n * @param index Index of value to remove\r\n * @return Removed value\r\n */\r\n removeIndex(index) {\r\n checkBounds(index, this._values.length);\r\n const oldValue = this._values[index];\r\n $array.removeIndex(this._values, index);\r\n this._onRemoveIndex(index, oldValue);\r\n return oldValue;\r\n }\r\n /**\r\n * Moves an item to a specific index within the list.\r\n *\r\n * If the index is not specified it will move the item to the end of the\r\n * list.\r\n *\r\n * @param value Item to move\r\n * @param index Index to place item at\r\n */\r\n moveValue(value, toIndex) {\r\n // TODO don't do anything if the desired index is the same as the current index\r\n let index = this.indexOf(value);\r\n // TODO remove all old values rather than only the first ?\r\n if (index !== -1) {\r\n $array.removeIndex(this._values, index);\r\n if (toIndex == null) {\r\n const toIndex = this._values.length;\r\n this._values.push(value);\r\n this._onMoveIndex(index, toIndex, value);\r\n }\r\n else {\r\n $array.insertIndex(this._values, toIndex, value);\r\n this._onMoveIndex(index, toIndex, value);\r\n }\r\n }\r\n else if (toIndex == null) {\r\n this._values.push(value);\r\n this._onPush(value);\r\n }\r\n else {\r\n $array.insertIndex(this._values, toIndex, value);\r\n this._onInsertIndex(toIndex, value);\r\n }\r\n return value;\r\n }\r\n /**\r\n * Adds an item to the end of the list.\r\n *\r\n * @param item An item to add\r\n */\r\n push(value) {\r\n this._values.push(value);\r\n this._onPush(value);\r\n return value;\r\n }\r\n /**\r\n * Adds an item as a first item in the list.\r\n *\r\n * @param item An item to add\r\n */\r\n unshift(value) {\r\n this.insertIndex(0, value);\r\n return value;\r\n }\r\n /**\r\n * Adds multiple items to the list.\r\n *\r\n * @param items An Array of items to add\r\n */\r\n pushAll(values) {\r\n $array.each(values, (value) => {\r\n this.push(value);\r\n });\r\n }\r\n /**\r\n * Copies and adds items from abother list.\r\n *\r\n * @param source A list top copy items from\r\n */\r\n copyFrom(source) {\r\n this.pushAll(source._values);\r\n }\r\n /**\r\n * Returns the last item from the list, and removes it.\r\n *\r\n * @return Item\r\n */\r\n pop() {\r\n let index = this._values.length - 1;\r\n return index < 0 ? undefined : this.removeIndex(this._values.length - 1);\r\n }\r\n /**\r\n * Returns the first item from the list, and removes it.\r\n *\r\n * @return Item\r\n */\r\n shift() {\r\n return this._values.length ? this.removeIndex(0) : undefined;\r\n }\r\n /**\r\n * Sets multiple items to the list.\r\n *\r\n * All current items are removed.\r\n *\r\n * @param newArray New items\r\n */\r\n setAll(newArray) {\r\n const old = this._values;\r\n this._values = [];\r\n this._onClear(old);\r\n $array.each(newArray, (value) => {\r\n this._values.push(value);\r\n this._onPush(value);\r\n });\r\n }\r\n /**\r\n * Removes all items from the list.\r\n */\r\n clear() {\r\n this.setAll([]);\r\n }\r\n /**\r\n * Returns an ES6 iterator for the list.\r\n */\r\n *[Symbol.iterator]() {\r\n const length = this._values.length;\r\n for (let i = 0; i < length; ++i) {\r\n yield this._values[i];\r\n }\r\n }\r\n /**\r\n * Calls `f` for each element in the list.\r\n *\r\n * `f` should have at least one parameter defined which will get a current\r\n * item, with optional second argument - index.\r\n */\r\n each(f) {\r\n $array.each(this._values, f);\r\n }\r\n /**\r\n * Calls `f` for each element in the list, from right to left.\r\n *\r\n * `f` should have at least one parameter defined which will get a current\r\n * item, with optional second argument - index.\r\n */\r\n eachReverse(f) {\r\n $array.eachReverse(this._values, f);\r\n }\r\n}\r\n/**\r\n * A version of a [[List]] where the elements are disposed automatically when\r\n * removed from the list, unless `autoDispose` is set to `false`.\r\n */\r\nexport class ListAutoDispose extends List {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * Automatically disposes elements that are removed from the list.\r\n *\r\n * @default true\r\n */\r\n this.autoDispose = true;\r\n this._disposed = false;\r\n }\r\n /**\r\n * Swaps indexes of two items in the list.\r\n *\r\n * @param a Item 1\r\n * @param b Item 2\r\n */\r\n swap(a, b) {\r\n const currentAutoDispose = this.autoDispose;\r\n this.autoDispose = false;\r\n super.swap(a, b);\r\n this.autoDispose = currentAutoDispose;\r\n }\r\n _onSetIndex(index, oldValue, newValue) {\r\n if (this.autoDispose) {\r\n oldValue.dispose();\r\n }\r\n super._onSetIndex(index, oldValue, newValue);\r\n }\r\n _onRemoveIndex(index, oldValue) {\r\n if (this.autoDispose) {\r\n oldValue.dispose();\r\n }\r\n super._onRemoveIndex(index, oldValue);\r\n }\r\n _onClear(oldValues) {\r\n if (this.autoDispose) {\r\n $array.each(oldValues, (x) => {\r\n x.dispose();\r\n });\r\n }\r\n super._onClear(oldValues);\r\n }\r\n _dispose() {\r\n if (this.autoDispose) {\r\n $array.each(this._values, (x) => {\r\n x.dispose();\r\n });\r\n }\r\n }\r\n isDisposed() {\r\n return this._disposed;\r\n }\r\n dispose() {\r\n if (!this._disposed) {\r\n this._disposed = true;\r\n this._dispose();\r\n }\r\n }\r\n}\r\n/**\r\n * A version of a [[List]] that is able to create new elements as well as\r\n * apply additional settings to newly created items.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/list-templates/} for more info\r\n */\r\nexport class ListTemplate extends ListAutoDispose {\r\n constructor(template, make) {\r\n super();\r\n this.template = template;\r\n this.make = make;\r\n }\r\n _dispose() {\r\n super._dispose();\r\n if (this.autoDispose) {\r\n this.template.dispose();\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=List.js.map","import { List } from \"./List\";\r\nimport * as $array from \"./Array\";\r\n/**\r\n * A version of [[List]] to hold children of the [[Container]].\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/containers/} for more info\r\n */\r\nexport class Children extends List {\r\n constructor(container) {\r\n super();\r\n this._disposed = false;\r\n this._container = container;\r\n this._events = this.events.onAll((change) => {\r\n if (change.type === \"clear\") {\r\n $array.each(change.oldValues, (x) => {\r\n this._onRemoved(x);\r\n });\r\n }\r\n else if (change.type === \"push\") {\r\n this._onInserted(change.newValue);\r\n }\r\n else if (change.type === \"setIndex\") {\r\n this._onRemoved(change.oldValue);\r\n this._onInserted(change.newValue, change.index);\r\n }\r\n else if (change.type === \"insertIndex\") {\r\n this._onInserted(change.newValue, change.index);\r\n }\r\n else if (change.type === \"removeIndex\") {\r\n this._onRemoved(change.oldValue);\r\n }\r\n else if (change.type === \"moveIndex\") {\r\n this._onRemoved(change.value);\r\n this._onInserted(change.value, change.newIndex);\r\n }\r\n else {\r\n throw new Error(\"Unknown IListEvent type\");\r\n }\r\n });\r\n }\r\n _onInserted(child, index) {\r\n child._setParent(this._container, true);\r\n const childrenDisplay = this._container._childrenDisplay;\r\n if (index === undefined) {\r\n childrenDisplay.addChild(child._display);\r\n }\r\n else {\r\n childrenDisplay.addChildAt(child._display, index);\r\n }\r\n }\r\n _onRemoved(child) {\r\n this._container._childrenDisplay.removeChild(child._display);\r\n this._container.markDirtyBounds();\r\n this._container.markDirty();\r\n }\r\n /**\r\n * Returns `true` if obejct is disposed.\r\n */\r\n isDisposed() {\r\n return this._disposed;\r\n }\r\n /**\r\n * Permanently dispose this object.\r\n */\r\n dispose() {\r\n if (!this._disposed) {\r\n this._disposed = true;\r\n this._events.dispose();\r\n $array.each(this.values, (child) => {\r\n child.dispose();\r\n });\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=Children.js.map","import { Entity } from \"../../util/Entity\";\r\n/**\r\n * Base class for patterns.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/patterns/} for more info\r\n */\r\nexport class Pattern extends Entity {\r\n constructor() {\r\n super(...arguments);\r\n this._display = this._root._renderer.makeGraphics();\r\n this._backgroundDisplay = this._root._renderer.makeGraphics();\r\n this._clear = false;\r\n }\r\n _afterNew() {\r\n // Applying themes because pattern will not have parent\r\n super._afterNewApplyThemes();\r\n }\r\n get pattern() {\r\n return this._pattern;\r\n }\r\n _draw() { }\r\n _beforeChanged() {\r\n super._beforeChanged();\r\n if (this.isDirty(\"repetition\") || this.isDirty(\"width\") || this.isDirty(\"height\") || this.isDirty(\"rotation\") || this.isDirty(\"strokeWidth\") || this.isDirty(\"strokeDasharray\") || this.isDirty(\"strokeDashoffset\") || this.isDirty(\"colorOpacity\") || this.isDirty(\"fillOpacity\")) {\r\n this._clear = true;\r\n }\r\n this._checkDirtyFill();\r\n }\r\n _checkDirtyFill() {\r\n if (this.isDirty(\"color\") || this.isDirty(\"fill\")) {\r\n this._clear = true;\r\n }\r\n }\r\n _changed() {\r\n super._changed();\r\n if (this._clear) {\r\n const repetition = this.get(\"repetition\", \"\");\r\n const width = this.get(\"width\", 100);\r\n const height = this.get(\"height\", 100);\r\n const fill = this.get(\"fill\");\r\n const fillOpacity = this.get(\"fillOpacity\", 1);\r\n const backgroundDisplay = this._backgroundDisplay;\r\n const display = this._display;\r\n display.clear();\r\n backgroundDisplay.clear();\r\n if (fill && (fillOpacity > 0)) {\r\n backgroundDisplay.beginFill(fill, fillOpacity);\r\n backgroundDisplay.drawRect(0, 0, width, height);\r\n backgroundDisplay.endFill();\r\n }\r\n display.angle = this.get(\"rotation\", 0);\r\n //display.pivot = { x: width / 2, y: height / 2 };\r\n this._draw();\r\n this._pattern = this._root._renderer.createPattern(display, backgroundDisplay, repetition, width, height);\r\n }\r\n this._clear = false;\r\n }\r\n}\r\nPattern.className = \"Pattern\";\r\nPattern.classNames = Entity.classNames.concat([Pattern.className]);\r\n//# sourceMappingURL=Pattern.js.map","import { Pattern } from \"./Pattern\";\r\n/**\r\n * Picture pattern.\r\n *\r\n * @since 5.2.15\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/patterns/} for more info\r\n */\r\nexport class PicturePattern extends Pattern {\r\n _beforeChanged() {\r\n super._beforeChanged();\r\n this._clear = true;\r\n if (this.isDirty(\"src\")) {\r\n this._load();\r\n }\r\n const canvas = this.get(\"canvas\");\r\n if (canvas) {\r\n this.set(\"width\", canvas.width);\r\n this.set(\"height\", canvas.height);\r\n }\r\n }\r\n _draw() {\r\n super._draw();\r\n const colorOpacity = this.get(\"colorOpacity\");\r\n if (colorOpacity !== undefined) {\r\n this._display.alpha = Math.max(0, colorOpacity);\r\n }\r\n const image = this._image;\r\n if (image) {\r\n const patternWidth = this.get(\"width\", 100);\r\n const patternHeight = this.get(\"height\", 100);\r\n // Fit\r\n const fit = this.get(\"fit\", \"image\");\r\n let width = 0;\r\n let height = 0;\r\n if (fit == \"pattern\") {\r\n width = patternWidth;\r\n height = patternHeight;\r\n this.markDirty();\r\n }\r\n else {\r\n width = image.width;\r\n height = image.height;\r\n if (fit == \"image\") {\r\n this.set(\"width\", width);\r\n this.set(\"height\", height);\r\n }\r\n }\r\n // Position\r\n const centered = this.get(\"centered\", true);\r\n let x = 0;\r\n let y = 0;\r\n if (centered) {\r\n x = patternWidth / 2 - width / 2;\r\n y = patternHeight / 2 - height / 2;\r\n }\r\n this._display.image(image, width, height, x, y);\r\n }\r\n const canvas = this.get(\"canvas\");\r\n if (canvas) {\r\n this._display.image(canvas, canvas.width, canvas.height, 0, 0);\r\n }\r\n }\r\n _load() {\r\n const src = this.get(\"src\");\r\n if (src) {\r\n const image = new Image();\r\n //image.crossOrigin = \"Anonymous\";\r\n image.src = src;\r\n image.decode().then(() => {\r\n this._image = image;\r\n this._draw();\r\n if (this.events.isEnabled(\"loaded\")) {\r\n this.events.dispatch(\"loaded\", { type: \"loaded\", target: this });\r\n }\r\n }).catch((_error) => {\r\n // TODO: maybe raise error?\r\n });\r\n }\r\n }\r\n}\r\nPicturePattern.className = \"PicturePattern\";\r\nPicturePattern.classNames = Pattern.classNames.concat([PicturePattern.className]);\r\n//# sourceMappingURL=PicturePattern.js.map","/**\r\n * From https://github.com/pixijs/pixi.js/blob/3dd0ff9a935f0bc13a09aefff9eb2872f02c51b9/packages/canvas/canvas-renderer/src/utils/mapCanvasBlendModesToPixi.ts#L13\r\n */\r\nexport var BlendMode;\r\n(function (BlendMode) {\r\n BlendMode[\"ADD\"] = \"lighter\";\r\n BlendMode[\"COLOR\"] = \"color\";\r\n BlendMode[\"COLOR_BURN\"] = \"color-burn\";\r\n BlendMode[\"COLOR_DODGE\"] = \"color-dodge\";\r\n BlendMode[\"DARKEN\"] = \"darken\";\r\n BlendMode[\"DIFFERENCE\"] = \"difference\";\r\n BlendMode[\"DST_OVER\"] = \"destination-over\";\r\n BlendMode[\"EXCLUSION\"] = \"exclusion\";\r\n BlendMode[\"HARD_LIGHT\"] = \"hard-light\";\r\n BlendMode[\"HUE\"] = \"hue\";\r\n BlendMode[\"LIGHTEN\"] = \"lighten\";\r\n BlendMode[\"LUMINOSITY\"] = \"luminosity\";\r\n BlendMode[\"MULTIPLY\"] = \"multiply\";\r\n BlendMode[\"NORMAL\"] = \"source-over\";\r\n BlendMode[\"OVERLAY\"] = \"overlay\";\r\n BlendMode[\"SATURATION\"] = \"saturation\";\r\n BlendMode[\"SCREEN\"] = \"screen\";\r\n BlendMode[\"SOFT_LIGHT\"] = \"soft-light\";\r\n BlendMode[\"SRC_ATOP\"] = \"source-atop\";\r\n BlendMode[\"XOR\"] = \"xor\";\r\n})(BlendMode || (BlendMode = {}));\r\n//# sourceMappingURL=Renderer.js.map","import { PicturePattern } from \"../render/patterns/PicturePattern\";\r\nimport { Sprite } from \"./Sprite\";\r\nimport { BlendMode } from \"./backend/Renderer\";\r\nimport * as $type from \"../util/Type\";\r\nimport * as $array from \"../util/Array\";\r\nexport const visualSettings = [\"fill\", \"fillOpacity\", \"stroke\", \"strokeWidth\", \"strokeOpacity\", \"fillPattern\", \"strokePattern\", \"fillGradient\", \"strokeGradient\", \"strokeDasharray\", \"strokeDashoffset\", \"shadowBlur\", \"shadowColor\", \"shadowOpacity\", \"shadowOffsetX\", \"shadowOffsetY\", \"blur\", \"sepia\", \"invert\", \"brightness\", \"hue\", \"contrast\", \"saturate\"];\r\n/**\r\n * Base class used for drawing shapes.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/graphics/} for more info\r\n * @important\r\n */\r\nexport class Graphics extends Sprite {\r\n constructor() {\r\n super(...arguments);\r\n this._display = this._root._renderer.makeGraphics();\r\n this._clear = false;\r\n }\r\n _beforeChanged() {\r\n super._beforeChanged();\r\n if (this.isDirty(\"draw\") || this.isDirty(\"svgPath\")) {\r\n this.markDirtyBounds();\r\n }\r\n if (this.isDirty(\"fill\") || this.isDirty(\"stroke\") || this.isDirty(\"visible\") || this.isDirty(\"forceHidden\") || this.isDirty(\"scale\") || this.isDirty(\"fillGradient\") || this.isDirty(\"strokeGradient\") || this.isDirty(\"fillPattern\") || this.isDirty(\"strokePattern\") || this.isDirty(\"fillOpacity\") || this.isDirty(\"strokeOpacity\") || this.isDirty(\"strokeWidth\") || this.isDirty(\"draw\") || this.isDirty(\"blendMode\") || this.isDirty(\"strokeDasharray\") || this.isDirty(\"strokeDashoffset\") || this.isDirty(\"svgPath\") || this.isDirty(\"lineJoin\") || this.isDirty(\"lineCap\") || this.isDirty(\"shadowColor\") || this.isDirty(\"shadowBlur\") || this.isDirty(\"shadowOffsetX\") || this.isDirty(\"shadowOffsetY\")) {\r\n this._clear = true;\r\n }\r\n this._display.crisp = this.get(\"crisp\", false);\r\n if (this.isDirty(\"fillGradient\")) {\r\n const gradient = this.get(\"fillGradient\");\r\n if (gradient) {\r\n this._display.isMeasured = true;\r\n const gradientTarget = gradient.get(\"target\");\r\n if (gradientTarget) {\r\n this._disposers.push(gradientTarget.events.on(\"boundschanged\", () => {\r\n this._markDirtyKey(\"fill\");\r\n }));\r\n this._disposers.push(gradientTarget.events.on(\"positionchanged\", () => {\r\n this._markDirtyKey(\"fill\");\r\n }));\r\n }\r\n }\r\n }\r\n if (this.isDirty(\"strokeGradient\")) {\r\n const gradient = this.get(\"strokeGradient\");\r\n if (gradient) {\r\n this._display.isMeasured = true;\r\n const gradientTarget = gradient.get(\"target\");\r\n if (gradientTarget) {\r\n this._disposers.push(gradientTarget.events.on(\"boundschanged\", () => {\r\n this._markDirtyKey(\"stroke\");\r\n }));\r\n this._disposers.push(gradientTarget.events.on(\"positionchanged\", () => {\r\n this._markDirtyKey(\"stroke\");\r\n }));\r\n }\r\n }\r\n }\r\n }\r\n _changed() {\r\n super._changed();\r\n if (this._clear) {\r\n this.markDirtyBounds();\r\n this.markDirtyLayer();\r\n this._display.clear();\r\n let strokeDasharray = this.get(\"strokeDasharray\");\r\n if ($type.isNumber(strokeDasharray)) {\r\n if (strokeDasharray < 0.5) {\r\n strokeDasharray = [0];\r\n }\r\n else {\r\n strokeDasharray = [strokeDasharray];\r\n }\r\n }\r\n this._display.setLineDash(strokeDasharray);\r\n const strokeDashoffset = this.get(\"strokeDashoffset\");\r\n if (strokeDashoffset) {\r\n this._display.setLineDashOffset(strokeDashoffset);\r\n }\r\n const blendMode = this.get(\"blendMode\", BlendMode.NORMAL);\r\n this._display.blendMode = blendMode;\r\n const draw = this.get(\"draw\");\r\n if (draw && typeof draw === \"function\") {\r\n draw(this._display, this);\r\n }\r\n const svgPath = this.get(\"svgPath\");\r\n if (svgPath != null) {\r\n this._display.svgPath(svgPath);\r\n }\r\n }\r\n }\r\n _afterChanged() {\r\n super._afterChanged();\r\n if (this._clear) {\r\n const fill = this.get(\"fill\");\r\n const fillGradient = this.get(\"fillGradient\");\r\n const fillPattern = this.get(\"fillPattern\");\r\n const fillOpacity = this.get(\"fillOpacity\");\r\n const stroke = this.get(\"stroke\");\r\n const strokeGradient = this.get(\"strokeGradient\");\r\n const strokePattern = this.get(\"strokePattern\");\r\n const shadowColor = this.get(\"shadowColor\");\r\n const shadowBlur = this.get(\"shadowBlur\");\r\n const shadowOffsetX = this.get(\"shadowOffsetX\");\r\n const shadowOffsetY = this.get(\"shadowOffsetY\");\r\n const shadowOpacity = this.get(\"shadowOpacity\");\r\n if (shadowColor && (shadowBlur || shadowOffsetX || shadowOffsetY)) {\r\n this._display.shadow(shadowColor, shadowBlur, shadowOffsetX, shadowOffsetY, shadowOpacity);\r\n }\r\n if (fill && !fillGradient) {\r\n this._display.beginFill(fill, fillOpacity);\r\n this._display.endFill();\r\n }\r\n if (fillGradient) {\r\n if (fill) {\r\n const stops = fillGradient.get(\"stops\", []);\r\n if (stops.length) {\r\n $array.each(stops, (stop) => {\r\n if ((!stop.color || stop.colorInherited) && fill) {\r\n stop.color = fill;\r\n stop.colorInherited = true;\r\n }\r\n if (stop.opacity == null || stop.opacityInherited) {\r\n stop.opacity = fillOpacity;\r\n stop.opacityInherited = true;\r\n }\r\n });\r\n }\r\n }\r\n const gradient = fillGradient.getFill(this);\r\n if (gradient) {\r\n this._display.beginFill(gradient, fillOpacity);\r\n this._display.endFill();\r\n }\r\n }\r\n if (fillPattern) {\r\n const pattern = fillPattern.pattern;\r\n if (pattern) {\r\n this._display.beginFill(pattern, fillOpacity);\r\n this._display.endFill();\r\n if (fillPattern instanceof PicturePattern) {\r\n fillPattern.events.once(\"loaded\", () => {\r\n this._clear = true;\r\n this.markDirty();\r\n });\r\n }\r\n }\r\n }\r\n if (stroke || strokeGradient || strokePattern) {\r\n const strokeOpacity = this.get(\"strokeOpacity\");\r\n let strokeWidth = this.get(\"strokeWidth\", 1);\r\n if (this.get(\"nonScalingStroke\")) {\r\n strokeWidth = strokeWidth / this.get(\"scale\", 1);\r\n }\r\n if (this.get(\"crisp\")) {\r\n strokeWidth /= this._root._renderer.resolution;\r\n }\r\n const lineJoin = this.get(\"lineJoin\");\r\n const lineCap = this.get(\"lineCap\");\r\n if (stroke && !strokeGradient) {\r\n this._display.lineStyle(strokeWidth, stroke, strokeOpacity, lineJoin, lineCap);\r\n this._display.endStroke();\r\n }\r\n if (strokeGradient) {\r\n const stops = strokeGradient.get(\"stops\", []);\r\n if (stops.length) {\r\n $array.each(stops, (stop) => {\r\n if ((!stop.color || stop.colorInherited) && stroke) {\r\n stop.color = stroke;\r\n stop.colorInherited = true;\r\n }\r\n if (stop.opacity == null || stop.opacityInherited) {\r\n stop.opacity = strokeOpacity;\r\n stop.opacityInherited = true;\r\n }\r\n });\r\n }\r\n const gradient = strokeGradient.getFill(this);\r\n if (gradient) {\r\n this._display.lineStyle(strokeWidth, gradient, strokeOpacity, lineJoin, lineCap);\r\n this._display.endStroke();\r\n }\r\n }\r\n if (strokePattern) {\r\n /*\r\n let changed = false;\r\n \r\n if (stroke && (!strokePattern.get(\"color\") || strokePattern.get(\"colorInherited\"))) {\r\n strokePattern.set(\"color\", stroke);\r\n strokePattern.set(\"colorInherited\", true);\r\n changed = true;\r\n }\r\n if (changed) {\r\n // @todo: is this OK?\r\n strokePattern._changed();\r\n }\r\n */\r\n let pattern = strokePattern.pattern;\r\n if (pattern) {\r\n this._display.lineStyle(strokeWidth, pattern, strokeOpacity, lineJoin, lineCap);\r\n this._display.endStroke();\r\n if (strokePattern instanceof PicturePattern) {\r\n strokePattern.events.once(\"loaded\", () => {\r\n this._clear = true;\r\n this.markDirty();\r\n });\r\n }\r\n }\r\n }\r\n }\r\n if (this.getPrivate(\"showingTooltip\")) {\r\n this.showTooltip();\r\n }\r\n }\r\n this._clear = false;\r\n }\r\n}\r\nGraphics.className = \"Graphics\";\r\nGraphics.classNames = Sprite.classNames.concat([Graphics.className]);\r\n//# sourceMappingURL=Graphics.js.map","import { Graphics } from \"./Graphics\";\r\n/**\r\n * Draws a rectangle.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/graphics/} for more info\r\n * @important\r\n */\r\nexport class Rectangle extends Graphics {\r\n _afterNew() {\r\n super._afterNew();\r\n this._display.isMeasured = true;\r\n this.setPrivateRaw(\"trustBounds\", true);\r\n }\r\n _beforeChanged() {\r\n super._beforeChanged();\r\n if (this.isDirty(\"width\") || this.isDirty(\"height\") || this.isPrivateDirty(\"width\") || this.isPrivateDirty(\"height\")) {\r\n this._clear = true;\r\n }\r\n }\r\n _changed() {\r\n super._changed();\r\n if (this._clear && !this.get(\"draw\")) {\r\n this._draw();\r\n }\r\n }\r\n _draw() {\r\n let w = this.width();\r\n let h = this.height();\r\n let x = 0;\r\n let y = 0;\r\n let wSign = w / Math.abs(w);\r\n let hSign = h / Math.abs(h);\r\n if (this.get(\"containStroke\", false)) {\r\n const strokeWidth = this.get(\"strokeWidth\", 0);\r\n w -= strokeWidth * wSign;\r\n h -= strokeWidth * hSign;\r\n x += strokeWidth / 2 * wSign;\r\n y += strokeWidth / 2 * hSign;\r\n }\r\n this._display.drawRect(x, y, w, h);\r\n }\r\n _updateSize() {\r\n this.markDirty();\r\n this._clear = true;\r\n }\r\n}\r\nRectangle.className = \"Rectangle\";\r\nRectangle.classNames = Graphics.classNames.concat([Rectangle.className]);\r\n//# sourceMappingURL=Rectangle.js.map","import { Layout, eachChildren } from \"./Layout\";\r\nimport * as $type from \"../util/Type\";\r\nimport { Percent } from \"../util/Percent\";\r\n/**\r\n * A horizontal children layout for [[Container]].\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/containers/#Layout} for more info\r\n */\r\nexport class HorizontalLayout extends Layout {\r\n /**\r\n * @ignore\r\n */\r\n updateContainer(container) {\r\n let paddingLeft = container.get(\"paddingLeft\", 0);\r\n let availableWidth = container.innerWidth();\r\n let totalPercent = 0;\r\n eachChildren(container, (child) => {\r\n if (child.isVisible()) {\r\n if (child.get(\"position\") == \"relative\") {\r\n let childWidth = child.get(\"width\");\r\n if (childWidth instanceof Percent) {\r\n totalPercent += childWidth.value;\r\n let w = availableWidth * childWidth.value;\r\n let minWidth = child.get(\"minWidth\", child.getPrivate(\"minWidth\", -Infinity));\r\n if (minWidth > w) {\r\n availableWidth -= minWidth;\r\n totalPercent -= childWidth.value;\r\n }\r\n let maxWidth = child.get(\"maxWidth\", child.getPrivate(\"maxWidth\", Infinity));\r\n if (w > maxWidth) {\r\n availableWidth -= maxWidth;\r\n totalPercent -= childWidth.value;\r\n }\r\n }\r\n else {\r\n if (!$type.isNumber(childWidth)) {\r\n childWidth = child.width();\r\n }\r\n availableWidth -= childWidth + child.get(\"marginLeft\", 0) + child.get(\"marginRight\", 0);\r\n }\r\n }\r\n }\r\n });\r\n if (availableWidth <= 0 || availableWidth == Infinity) {\r\n availableWidth = .1;\r\n }\r\n //if (availableWidth > 0) {\r\n eachChildren(container, (child) => {\r\n if (child.isVisible()) {\r\n if (child.get(\"position\") == \"relative\") {\r\n let childWidth = child.get(\"width\");\r\n if (childWidth instanceof Percent) {\r\n let privateWidth = availableWidth * childWidth.value / totalPercent - child.get(\"marginLeft\", 0) - child.get(\"marginRight\", 0);\r\n let minWidth = child.get(\"minWidth\", child.getPrivate(\"minWidth\", -Infinity));\r\n let maxWidth = child.get(\"maxWidth\", child.getPrivate(\"maxWidth\", Infinity));\r\n privateWidth = Math.min(Math.max(minWidth, privateWidth), maxWidth);\r\n child.setPrivate(\"width\", privateWidth);\r\n }\r\n else {\r\n if (child._prevSettings.width instanceof Percent) {\r\n child.setPrivate(\"width\", undefined);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n //}\r\n let prevX = paddingLeft;\r\n eachChildren(container, (child) => {\r\n if (child.get(\"position\") == \"relative\") {\r\n if (child.isVisible()) {\r\n let bounds = child.adjustedLocalBounds();\r\n let marginLeft = child.get(\"marginLeft\", 0);\r\n let marginRight = child.get(\"marginRight\", 0);\r\n let maxWidth = child.get(\"maxWidth\");\r\n let left = bounds.left;\r\n let right = bounds.right;\r\n if (maxWidth) {\r\n if (right - left > maxWidth) {\r\n right = left + maxWidth;\r\n }\r\n }\r\n let x = prevX + marginLeft - left;\r\n child.setPrivate(\"x\", x);\r\n prevX = x + right + marginRight;\r\n }\r\n else {\r\n child.setPrivate(\"x\", undefined);\r\n }\r\n }\r\n });\r\n }\r\n}\r\nHorizontalLayout.className = \"HorizontalLayout\";\r\nHorizontalLayout.classNames = Layout.classNames.concat([HorizontalLayout.className]);\r\n//# sourceMappingURL=HorizontalLayout.js.map","import { Layout, eachChildren } from \"./Layout\";\r\nimport * as $type from \"../util/Type\";\r\nimport { Percent } from \"../util/Percent\";\r\n/**\r\n * A vertical children layout for [[Container]].\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/containers/#Layout} for more info\r\n */\r\nexport class VerticalLayout extends Layout {\r\n /**\r\n * @ignore\r\n */\r\n updateContainer(container) {\r\n let paddingTop = container.get(\"paddingTop\", 0);\r\n let availableHeight = container.innerHeight();\r\n let totalPercent = 0;\r\n eachChildren(container, (child) => {\r\n if (child.isVisible()) {\r\n if (child.get(\"position\") == \"relative\") {\r\n let childHeight = child.get(\"height\");\r\n if (childHeight instanceof Percent) {\r\n totalPercent += childHeight.value;\r\n let h = availableHeight * childHeight.value;\r\n let minHeight = child.get(\"minHeight\", child.getPrivate(\"minHeight\", -Infinity));\r\n if (minHeight > h) {\r\n availableHeight -= minHeight;\r\n totalPercent -= childHeight.value;\r\n }\r\n let maxHeight = child.get(\"maxHeight\", child.getPrivate(\"maxHeight\", Infinity));\r\n if (h > maxHeight) {\r\n availableHeight -= maxHeight;\r\n totalPercent -= childHeight.value;\r\n }\r\n }\r\n else {\r\n if (!$type.isNumber(childHeight)) {\r\n childHeight = child.height();\r\n }\r\n availableHeight -= childHeight + child.get(\"marginTop\", 0) + child.get(\"marginBottom\", 0);\r\n }\r\n }\r\n }\r\n });\r\n if (availableHeight <= 0 || availableHeight == Infinity) {\r\n availableHeight = .1;\r\n }\r\n //if (availableHeight > 0) {\r\n eachChildren(container, (child) => {\r\n if (child.isVisible()) {\r\n if (child.get(\"position\") == \"relative\") {\r\n let childHeight = child.get(\"height\");\r\n if (childHeight instanceof Percent) {\r\n let privateHeight = availableHeight * childHeight.value / totalPercent - child.get(\"marginTop\", 0) - child.get(\"marginBottom\", 0);\r\n let minHeight = child.get(\"minHeight\", child.getPrivate(\"minHeight\", -Infinity));\r\n let maxHeight = child.get(\"maxHeight\", child.getPrivate(\"maxHeight\", Infinity));\r\n privateHeight = Math.min(Math.max(minHeight, privateHeight), maxHeight);\r\n child.setPrivate(\"height\", privateHeight);\r\n }\r\n else {\r\n if (child._prevSettings.height instanceof Percent) {\r\n child.setPrivate(\"height\", undefined);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n //}\r\n let prevY = paddingTop;\r\n eachChildren(container, (child) => {\r\n if (child.get(\"position\") == \"relative\") {\r\n if (child.isVisible()) {\r\n let bounds = child.adjustedLocalBounds();\r\n let marginTop = child.get(\"marginTop\", 0);\r\n let top = bounds.top;\r\n let bottom = bounds.bottom;\r\n let maxHeight = child.get(\"maxHeight\");\r\n if (maxHeight) {\r\n if (bottom - top > maxHeight) {\r\n bottom = top + maxHeight;\r\n }\r\n }\r\n let marginBottom = child.get(\"marginBottom\", 0);\r\n let y = prevY + marginTop - top;\r\n child.setPrivate(\"y\", y);\r\n prevY = y + bottom + marginBottom;\r\n }\r\n else {\r\n child.setPrivate(\"y\", undefined);\r\n }\r\n }\r\n });\r\n }\r\n}\r\nVerticalLayout.className = \"VerticalLayout\";\r\nVerticalLayout.classNames = Layout.classNames.concat([VerticalLayout.className]);\r\n//# sourceMappingURL=VerticalLayout.js.map","import { Children } from \"../util/Children\";\r\nimport { Percent } from \"../util/Percent\";\r\nimport { Sprite } from \"./Sprite\";\r\nimport { Rectangle } from \"./Rectangle\";\r\nimport { HorizontalLayout } from \"./HorizontalLayout\";\r\nimport { VerticalLayout } from \"./VerticalLayout\";\r\nimport { GridLayout } from \"./GridLayout\";\r\nimport { populateString } from \"../util/PopulateString\";\r\nimport * as $array from \"../util/Array\";\r\nimport * as $type from \"../util/Type\";\r\nimport * as $utils from \"../util/Utils\";\r\n/**\r\n * A basic element that can have child elements, maintain their layout, and\r\n * have a background.\r\n *\r\n * It can have any [[Sprite]] element as a child, from very basic shapes, to\r\n * full-fledged charts.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/containers/} for more info\r\n * @important\r\n */\r\nexport class Container extends Sprite {\r\n constructor() {\r\n super(...arguments);\r\n this._display = this._root._renderer.makeContainer();\r\n this._childrenDisplay = this._root._renderer.makeContainer();\r\n /**\r\n * List of Container's child elements.\r\n */\r\n this.children = new Children(this);\r\n this._percentageSizeChildren = [];\r\n this._percentagePositionChildren = [];\r\n this._prevWidth = 0;\r\n this._prevHeight = 0;\r\n this._contentWidth = 0;\r\n this._contentHeight = 0;\r\n this._childrenPrep = false;\r\n this._childrenUpdt = false;\r\n }\r\n _afterNew() {\r\n super._afterNew();\r\n this._display.addChild(this._childrenDisplay);\r\n }\r\n _afterChanged() {\r\n super._afterChanged();\r\n this._childrenPrep = false;\r\n this._childrenUpdt = false;\r\n }\r\n _dispose() {\r\n $array.eachReverse(this.allChildren(), (child) => {\r\n child.dispose();\r\n });\r\n if (this.getPrivate(\"htmlElement\")) {\r\n this._root._removeHTMLContent(this);\r\n }\r\n super._dispose();\r\n }\r\n _beforeChanged() {\r\n if (!this._childrenPrep) {\r\n this._prepareChildren();\r\n }\r\n if (!this._childrenUpdt) {\r\n this._updateChildren();\r\n }\r\n super._beforeChanged();\r\n }\r\n _changed() {\r\n super._changed();\r\n if (this.isDirty(\"interactiveChildren\")) {\r\n this._display.interactiveChildren = this.get(\"interactiveChildren\", false);\r\n }\r\n if (this.isDirty(\"layout\")) {\r\n this._prevWidth = 0;\r\n this._prevHeight = 0;\r\n this.markDirtyBounds();\r\n if (this._prevSettings.layout) {\r\n this.children.each((child) => {\r\n child.removePrivate(\"x\");\r\n child.removePrivate(\"y\");\r\n });\r\n }\r\n }\r\n if (this.isDirty(\"paddingTop\") || this.isDirty(\"paddingBottom\") || this.isDirty(\"paddingLeft\") || this.isDirty(\"paddingRight\")) {\r\n this.children.each((child) => {\r\n child.markDirtyPosition();\r\n });\r\n }\r\n if (this.isDirty(\"maskContent\")) {\r\n const childrenDisplay = this._childrenDisplay;\r\n let contentMask = this._contentMask;\r\n if (this.get(\"maskContent\")) {\r\n if (!contentMask) {\r\n contentMask = Rectangle.new(this._root, {\r\n x: -.5,\r\n y: -.5,\r\n width: this.width() + 1,\r\n height: this.height() + 1\r\n });\r\n this._contentMask = contentMask;\r\n childrenDisplay.addChildAt(contentMask._display, 0);\r\n childrenDisplay.mask = contentMask._display;\r\n }\r\n }\r\n else {\r\n if (contentMask) {\r\n childrenDisplay.removeChild(contentMask._display);\r\n childrenDisplay.mask = null;\r\n contentMask.dispose();\r\n this._contentMask = undefined;\r\n }\r\n }\r\n }\r\n }\r\n _updateSize() {\r\n super._updateSize();\r\n $array.each(this._percentageSizeChildren, (child) => {\r\n child._updateSize();\r\n });\r\n $array.each(this._percentagePositionChildren, (child) => {\r\n child.markDirtyPosition();\r\n child._updateSize();\r\n });\r\n this.updateBackground();\r\n }\r\n updateBackground() {\r\n const background = this.get(\"background\");\r\n let bounds = this._localBounds;\r\n if (bounds && !this.isHidden()) {\r\n let x = bounds.left;\r\n let y = bounds.top;\r\n let w = bounds.right - x;\r\n let h = bounds.bottom - y;\r\n let maxWidth = this.get(\"maxWidth\");\r\n let maxHeight = this.get(\"maxHeight\");\r\n if (maxHeight) {\r\n if (h > maxHeight) {\r\n h = maxHeight;\r\n }\r\n }\r\n if (maxWidth) {\r\n if (w > maxWidth) {\r\n w = maxWidth;\r\n }\r\n }\r\n let width = this.width();\r\n let height = this.height();\r\n if (background) {\r\n background.setAll({ width: w, height: h, x: x, y: y });\r\n if (this._display.interactive) {\r\n background._display.interactive = true;\r\n }\r\n }\r\n const contentMask = this._contentMask;\r\n if (contentMask) {\r\n contentMask.setAll({ width: width + 1, height: height + 1 });\r\n }\r\n const verticalScrollbar = this.get(\"verticalScrollbar\");\r\n if (verticalScrollbar) {\r\n verticalScrollbar.set(\"height\", height);\r\n verticalScrollbar.set(\"x\", width - verticalScrollbar.width() - verticalScrollbar.get(\"marginRight\", 0));\r\n verticalScrollbar.set(\"end\", verticalScrollbar.get(\"start\", 0) + height / this._contentHeight);\r\n /**\r\n * ruins scrollToChild\r\n let start = verticalScrollbar.get(\"start\", 0);\r\n let end = verticalScrollbar.get(\"end\", 1);\r\n\r\n if (start > 1 - end) {\r\n verticalScrollbar.set(\"start\", Math.max(0, end - height / this._contentHeight));\r\n }\r\n else {\r\n verticalScrollbar.set(\"end\", Math.min(1, start + height / this._contentHeight));\r\n }\r\n */\r\n const bg = verticalScrollbar.get(\"background\");\r\n if (bg) {\r\n bg.setAll({ width: verticalScrollbar.width(), height: height });\r\n }\r\n let visible = true;\r\n if (this._contentHeight <= height) {\r\n visible = false;\r\n }\r\n verticalScrollbar.setPrivate(\"visible\", visible);\r\n }\r\n }\r\n }\r\n _applyThemes(force = false) {\r\n if (super._applyThemes(force)) {\r\n this.eachChildren((child) => {\r\n child._applyThemes(force);\r\n });\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n _applyState(name) {\r\n super._applyState(name);\r\n if (this.get(\"setStateOnChildren\")) {\r\n this.eachChildren((child) => {\r\n child.states.apply(name);\r\n });\r\n }\r\n }\r\n _applyStateAnimated(name, duration) {\r\n super._applyStateAnimated(name, duration);\r\n if (this.get(\"setStateOnChildren\")) {\r\n this.eachChildren((child) => {\r\n child.states.applyAnimate(name, duration);\r\n });\r\n }\r\n }\r\n /**\r\n * Returns container's inner width (width without padding) in pixels.\r\n *\r\n * @return Inner width (px)\r\n */\r\n innerWidth() {\r\n return this.width() - this.get(\"paddingRight\", 0) - this.get(\"paddingLeft\", 0);\r\n }\r\n /**\r\n * Returns container's inner height (height without padding) in pixels.\r\n *\r\n * @return Inner height (px)\r\n */\r\n innerHeight() {\r\n return this.height() - this.get(\"paddingTop\", 0) - this.get(\"paddingBottom\", 0);\r\n }\r\n _getBounds() {\r\n if (!this.get(\"html\")) {\r\n let width = this.get(\"width\");\r\n let height = this.get(\"height\");\r\n let pWidth = this.getPrivate(\"width\");\r\n let pHeight = this.getPrivate(\"height\");\r\n let bounds = {\r\n left: 0,\r\n top: 0,\r\n right: this.width(),\r\n bottom: this.height()\r\n };\r\n let layout = this.get(\"layout\");\r\n let horizontal = false;\r\n let vertical = false;\r\n if (layout instanceof HorizontalLayout || layout instanceof GridLayout) {\r\n horizontal = true;\r\n }\r\n if (layout instanceof VerticalLayout) {\r\n vertical = true;\r\n }\r\n if ((width != null || pWidth != null) && (height != null || pHeight != null) && !this.get(\"verticalScrollbar\")) {\r\n // void\r\n }\r\n else {\r\n let m = Number.MAX_VALUE;\r\n let l = m;\r\n let r = -m;\r\n let t = m;\r\n let b = -m;\r\n const paddingLeft = this.get(\"paddingLeft\", 0);\r\n const paddingTop = this.get(\"paddingTop\", 0);\r\n const paddingRight = this.get(\"paddingRight\", 0);\r\n const paddingBottom = this.get(\"paddingBottom\", 0);\r\n this.children.each((child) => {\r\n if (child.get(\"position\") != \"absolute\" && child.get(\"isMeasured\")) {\r\n let childBounds = child.adjustedLocalBounds();\r\n let childX = child.x();\r\n let childY = child.y();\r\n let cl = childX + childBounds.left;\r\n let cr = childX + childBounds.right;\r\n let ct = childY + childBounds.top;\r\n let cb = childY + childBounds.bottom;\r\n if (horizontal) {\r\n cl -= child.get(\"marginLeft\", 0);\r\n cr += child.get(\"marginRight\", 0);\r\n }\r\n if (vertical) {\r\n ct -= child.get(\"marginTop\", 0);\r\n cb += child.get(\"marginBottom\", 0);\r\n }\r\n if (cl < l) {\r\n l = cl;\r\n }\r\n if (cr > r) {\r\n r = cr;\r\n }\r\n if (ct < t) {\r\n t = ct;\r\n }\r\n if (cb > b) {\r\n b = cb;\r\n }\r\n }\r\n });\r\n if (l == m) {\r\n l = 0;\r\n }\r\n if (r == -m) {\r\n r = 0;\r\n }\r\n if (t == m) {\r\n t = 0;\r\n }\r\n if (b == -m) {\r\n b = 0;\r\n }\r\n bounds.left = l - paddingLeft;\r\n bounds.top = t - paddingTop;\r\n bounds.right = r + paddingRight;\r\n bounds.bottom = b + paddingBottom;\r\n const minWidth = this.get(\"minWidth\");\r\n if ($type.isNumber(minWidth) && minWidth > 0) {\r\n if (bounds.right - bounds.left < minWidth) {\r\n if (bounds.right >= minWidth) {\r\n bounds.left = bounds.right - minWidth;\r\n }\r\n else {\r\n bounds.right = bounds.left + minWidth;\r\n }\r\n }\r\n }\r\n const minHeight = this.get(\"minHeight\");\r\n if ($type.isNumber(minHeight) && minHeight > 0) {\r\n if (bounds.bottom - bounds.top < minHeight) {\r\n if (bounds.bottom >= minHeight) {\r\n bounds.top = bounds.bottom - minHeight;\r\n }\r\n else {\r\n bounds.bottom = bounds.top + minHeight;\r\n }\r\n }\r\n }\r\n }\r\n this._contentWidth = bounds.right - bounds.left;\r\n this._contentHeight = bounds.bottom - bounds.top;\r\n if ($type.isNumber(width)) {\r\n bounds.left = 0;\r\n bounds.right = width;\r\n }\r\n if ($type.isNumber(pWidth)) {\r\n bounds.left = 0;\r\n bounds.right = pWidth;\r\n }\r\n if ($type.isNumber(height)) {\r\n bounds.top = 0;\r\n bounds.bottom = height;\r\n }\r\n if ($type.isNumber(pHeight)) {\r\n bounds.top = 0;\r\n bounds.bottom = pHeight;\r\n }\r\n this._localBounds = bounds;\r\n }\r\n else {\r\n let bounds = this._localBounds;\r\n if (bounds) {\r\n this._contentWidth = bounds.right - bounds.left;\r\n this._contentHeight = bounds.bottom - bounds.top;\r\n }\r\n }\r\n }\r\n _updateBounds() {\r\n const layout = this.get(\"layout\");\r\n if (layout) {\r\n layout.updateContainer(this);\r\n }\r\n super._updateBounds();\r\n this.updateBackground();\r\n }\r\n /**\r\n * @ignore\r\n */\r\n markDirty() {\r\n super.markDirty();\r\n this._root._addDirtyParent(this);\r\n }\r\n _prepareChildren() {\r\n this._childrenPrep = true;\r\n const innerWidth = this.innerWidth();\r\n const innerHeight = this.innerHeight();\r\n if (innerWidth != this._prevWidth || innerHeight != this._prevHeight) {\r\n let layout = this.get(\"layout\");\r\n let horizontal = false;\r\n let vertical = false;\r\n if (layout) {\r\n if (layout instanceof HorizontalLayout || layout instanceof GridLayout) {\r\n horizontal = true;\r\n }\r\n if (layout instanceof VerticalLayout) {\r\n vertical = true;\r\n }\r\n }\r\n $array.each(this._percentageSizeChildren, (child) => {\r\n if (!horizontal) {\r\n let width = child.get(\"width\");\r\n if (width instanceof Percent) {\r\n child.setPrivate(\"width\", width.value * innerWidth);\r\n }\r\n }\r\n if (!vertical) {\r\n let height = child.get(\"height\");\r\n if (height instanceof Percent) {\r\n child.setPrivate(\"height\", height.value * innerHeight);\r\n }\r\n }\r\n });\r\n $array.each(this._percentagePositionChildren, (child) => {\r\n child.markDirtyPosition();\r\n child.markDirtyBounds();\r\n });\r\n this._prevWidth = innerWidth;\r\n this._prevHeight = innerHeight;\r\n this._sizeDirty = true;\r\n this.updateBackground();\r\n }\r\n //this._handleStates();\r\n }\r\n _updateHTMLContent() {\r\n const html = this.get(\"html\", \"\");\r\n if (html && html !== \"\") {\r\n this._root._setHTMLContent(this, populateString(this, html));\r\n }\r\n else {\r\n this._root._removeHTMLContent(this);\r\n }\r\n this._root._positionHTMLElement(this);\r\n }\r\n /**\r\n * If scrolling is enabled on the Container (by adding `verticalScrollbar`)\r\n * the Container will scroll in such way so that target element becomes\r\n * visible if its currently outside of view.\r\n *\r\n * @param child Target child\r\n * @since 5.10.5\r\n */\r\n scrollToChild(child) {\r\n const verticalScrollbar = this.get(\"verticalScrollbar\");\r\n if (verticalScrollbar) {\r\n let y = child.y();\r\n let h = this.innerHeight();\r\n let ch = child.height();\r\n let contentH = this._contentHeight;\r\n let max = 1 - (h - ch / 2) / contentH;\r\n if (y + ch * .7 + this._childrenDisplay.y > h || y - ch * .3 + this._childrenDisplay.y < 0) {\r\n let pos = Math.max(0, Math.min(max, (y - ch / 2) / contentH));\r\n verticalScrollbar.animate({ key: \"start\", to: pos, duration: verticalScrollbar.get(\"animationDuration\", 0), easing: verticalScrollbar.get(\"animationEasing\") });\r\n }\r\n }\r\n }\r\n _updateChildren() {\r\n this._childrenUpdt = true;\r\n if (this.isDirty(\"html\")) {\r\n this._updateHTMLContent();\r\n }\r\n if (this.isDirty(\"verticalScrollbar\")) {\r\n const verticalScrollbar = this.get(\"verticalScrollbar\");\r\n if (verticalScrollbar) {\r\n verticalScrollbar._setParent(this);\r\n verticalScrollbar.startGrip.setPrivate(\"visible\", false);\r\n verticalScrollbar.endGrip.setPrivate(\"visible\", false);\r\n this.set(\"maskContent\", true);\r\n this.set(\"paddingRight\", verticalScrollbar.width() + verticalScrollbar.get(\"marginRight\", 0) + verticalScrollbar.get(\"marginLeft\", 0));\r\n let background = this.get(\"background\");\r\n if (!background) {\r\n background = this.set(\"background\", Rectangle.new(this._root, {\r\n themeTags: [\"background\"],\r\n fillOpacity: 0,\r\n fill: this._root.interfaceColors.get(\"alternativeBackground\")\r\n }));\r\n }\r\n this._vsbd0 = this.events.on(\"wheel\", (event) => {\r\n const wheelEvent = event.originalEvent;\r\n // Ignore wheel event if it is happening on a non-chart element, e.g. if\r\n // some page element is over the chart.\r\n if ($utils.isLocalEvent(wheelEvent, this)) {\r\n wheelEvent.preventDefault();\r\n }\r\n else {\r\n return;\r\n }\r\n let shiftY = wheelEvent.deltaY / 5000;\r\n const start = verticalScrollbar.get(\"start\", 0);\r\n const end = verticalScrollbar.get(\"end\", 1);\r\n if (start + shiftY <= 0) {\r\n shiftY = -start;\r\n }\r\n if (end + shiftY >= 1) {\r\n shiftY = 1 - end;\r\n }\r\n if (start + shiftY >= 0 && end + shiftY <= 1) {\r\n verticalScrollbar.set(\"start\", start + shiftY);\r\n verticalScrollbar.set(\"end\", end + shiftY);\r\n }\r\n });\r\n this._disposers.push(this._vsbd0);\r\n this._vsbd1 = verticalScrollbar.events.on(\"rangechanged\", () => {\r\n let h = this._contentHeight;\r\n const childrenDisplay = this._childrenDisplay;\r\n const contentMask = this._contentMask;\r\n childrenDisplay.y = -verticalScrollbar.get(\"start\", 0) * h;\r\n childrenDisplay.markDirtyLayer();\r\n if (contentMask) {\r\n contentMask._display.y = -childrenDisplay.y;\r\n childrenDisplay.mask = contentMask._display;\r\n }\r\n });\r\n this._disposers.push(this._vsbd1);\r\n this._display.addChild(verticalScrollbar._display);\r\n }\r\n else {\r\n const previous = this._prevSettings.verticalScrollbar;\r\n if (previous) {\r\n this._display.removeChild(previous._display);\r\n if (this._vsbd0) {\r\n this._vsbd0.dispose();\r\n }\r\n if (this._vsbd1) {\r\n this._vsbd1.dispose();\r\n }\r\n const childrenDisplay = this._childrenDisplay;\r\n childrenDisplay.y = 0;\r\n this.setPrivate(\"height\", undefined);\r\n this.set(\"maskContent\", false);\r\n this.set(\"paddingRight\", undefined);\r\n }\r\n }\r\n }\r\n if (this.isDirty(\"background\")) {\r\n // TODO maybe this should dispose ?\r\n const previous = this._prevSettings[\"background\"];\r\n if (previous) {\r\n this._display.removeChild(previous._display);\r\n }\r\n const background = this.get(\"background\");\r\n if (background instanceof Sprite) {\r\n background.set(\"isMeasured\", false);\r\n background._setParent(this);\r\n this._display.addChildAt(background._display, 0);\r\n }\r\n }\r\n if (this.isDirty(\"mask\")) {\r\n const mask = this.get(\"mask\");\r\n const previous = this._prevSettings[\"mask\"];\r\n if (previous) {\r\n this._display.removeChild(previous._display);\r\n if (previous != mask) {\r\n previous.dispose();\r\n }\r\n }\r\n if (mask) {\r\n const parent = mask.parent;\r\n if (parent) {\r\n parent.children.removeValue(mask);\r\n }\r\n mask._setParent(this);\r\n this._display.addChildAt(mask._display, 0);\r\n this._childrenDisplay.mask = mask._display;\r\n }\r\n }\r\n }\r\n _processTemplateField() {\r\n super._processTemplateField();\r\n this.children.each((child) => {\r\n child._processTemplateField();\r\n });\r\n }\r\n /**\r\n * @ignore\r\n */\r\n walkChildren(f) {\r\n this.children.each((child, index) => {\r\n if (child instanceof Container) {\r\n child.walkChildren(f);\r\n }\r\n f(child, index);\r\n });\r\n }\r\n eachChildren(f) {\r\n const background = this.get(\"background\");\r\n if (background) {\r\n f(background);\r\n }\r\n const verticalScrollbar = this.get(\"verticalScrollbar\");\r\n if (verticalScrollbar) {\r\n f(verticalScrollbar);\r\n }\r\n const mask = this.get(\"mask\");\r\n if (mask) {\r\n f(mask);\r\n }\r\n this.children.values.forEach((child) => {\r\n f(child);\r\n });\r\n }\r\n allChildren() {\r\n const output = [];\r\n this.eachChildren((x) => {\r\n output.push(x);\r\n });\r\n return output;\r\n }\r\n _setDataItem(dataItem) {\r\n const updated = (dataItem !== this._dataItem);\r\n super._setDataItem(dataItem);\r\n const html = this.get(\"html\", \"\");\r\n if (html && html !== \"\" && updated) {\r\n this._root._setHTMLContent(this, populateString(this, html));\r\n }\r\n }\r\n contentWidth() {\r\n return this._contentWidth;\r\n }\r\n contentHeight() {\r\n return this._contentHeight;\r\n }\r\n}\r\nContainer.className = \"Container\";\r\nContainer.classNames = Sprite.classNames.concat([Container.className]);\r\n//# sourceMappingURL=Container.js.map","import { Text } from \"../render/Text\";\r\nimport { p50, p100 } from \"../util/Percent\";\r\nimport { Container } from \"./Container\";\r\nimport * as $array from \"../../core/util/Array\";\r\nimport * as $type from \"../../core/util/Type\";\r\n/**\r\n * Creates a label with support for in-line styling and data bindings.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/labels/} for more info\r\n */\r\nexport class Label extends Container {\r\n constructor() {\r\n super(...arguments);\r\n this._textKeys = [\r\n \"text\",\r\n \"fill\",\r\n \"fillGradient\",\r\n \"fillOpacity\",\r\n \"textAlign\",\r\n \"fontFamily\",\r\n \"fontSize\",\r\n \"fontStyle\",\r\n \"fontWeight\",\r\n \"fontStyle\",\r\n \"fontVariant\",\r\n \"textDecoration\",\r\n \"shadowColor\",\r\n \"shadowBlur\",\r\n \"shadowOffsetX\",\r\n \"shadowOffsetY\",\r\n \"shadowOpacity\",\r\n // \"leading\",\r\n // \"letterSpacing\",\r\n \"lineHeight\",\r\n \"baselineRatio\",\r\n //\"padding\",\r\n // \"stroke\",\r\n // \"strokeThickness\",\r\n // \"trim\",\r\n // \"wordWrap\",\r\n \"direction\",\r\n \"textBaseline\",\r\n \"oversizedBehavior\",\r\n \"breakWords\",\r\n \"ellipsis\",\r\n \"minScale\",\r\n \"populateText\",\r\n \"role\",\r\n \"ignoreFormatting\",\r\n \"maxChars\",\r\n \"ariaLabel\"\r\n ];\r\n }\r\n /**\r\n * @ignore Text is not to be used directly\r\n */\r\n get text() {\r\n return this._text;\r\n }\r\n _afterNew() {\r\n super._afterNew();\r\n this._makeText();\r\n $array.each(this._textKeys, (property) => {\r\n const propValue = this.get(property);\r\n if (propValue != undefined) {\r\n this._text.set(property, propValue);\r\n }\r\n });\r\n if (this.get(\"html\", \"\") !== \"\") {\r\n this._text.set(\"text\", \"\");\r\n }\r\n this.onPrivate(\"maxWidth\", () => {\r\n this._setMaxDimentions();\r\n });\r\n this.onPrivate(\"maxHeight\", () => {\r\n this._setMaxDimentions();\r\n });\r\n }\r\n _makeText() {\r\n this._text = this.children.push(Text.new(this._root, {}));\r\n }\r\n _updateChildren() {\r\n super._updateChildren();\r\n const text = this._text;\r\n $array.each(this._textKeys, (property) => {\r\n this._text.set(property, this.get(property));\r\n });\r\n if (this.isDirty(\"maxWidth\") || this.isDirty(\"maxHeight\") || this.isDirty(\"rotation\")) {\r\n this._setMaxDimentions();\r\n }\r\n // Do not show regular text if HTML is used\r\n if (this.get(\"html\", \"\") !== \"\") {\r\n text.set(\"text\", \"\");\r\n }\r\n else {\r\n text.set(\"text\", this.get(\"text\"));\r\n this._maybeUpdateHTMLColor();\r\n }\r\n if (this.isDirty(\"fill\") || this.isDirty(\"fillGradient\")) {\r\n this._maybeUpdateHTMLColor();\r\n }\r\n if (this.isDirty(\"textAlign\") || this.isDirty(\"width\")) {\r\n const textAlign = this.get(\"textAlign\");\r\n let x;\r\n if (this.get(\"width\") != null) {\r\n if (textAlign == \"right\") {\r\n x = p100;\r\n }\r\n else if (textAlign == \"center\") {\r\n x = p50;\r\n }\r\n else {\r\n x = 0;\r\n }\r\n }\r\n else {\r\n if (textAlign == \"left\" || textAlign == \"start\") {\r\n x = this.get(\"paddingLeft\", 0);\r\n }\r\n else if (textAlign == \"right\" || textAlign == \"end\") {\r\n x = -this.get(\"paddingRight\", 0);\r\n }\r\n }\r\n text.set(\"x\", x);\r\n }\r\n const background = this.get(\"background\");\r\n if (background) {\r\n background.setPrivate(\"visible\", text._display.textVisible);\r\n }\r\n }\r\n _maybeUpdateHTMLColor() {\r\n const htmlElement = this.getPrivate(\"htmlElement\");\r\n if (htmlElement && this.get(\"fill\")) {\r\n htmlElement.style.color = this.get(\"fill\").toCSSHex();\r\n //@todo support gradient\r\n }\r\n }\r\n _setMaxDimentions() {\r\n const rotation = this.get(\"rotation\");\r\n const vertical = rotation == 90 || rotation == 270 || rotation == -90;\r\n const text = this._text;\r\n const maxWidth = this.get(\"maxWidth\", this.getPrivate(\"maxWidth\", Infinity));\r\n if ($type.isNumber(maxWidth)) {\r\n text.set(vertical ? \"maxHeight\" : \"maxWidth\", maxWidth - this.get(\"paddingTop\", 0) - this.get(\"paddingBottom\", 0));\r\n }\r\n else {\r\n text.set(vertical ? \"maxHeight\" : \"maxWidth\", undefined);\r\n }\r\n const maxHeight = this.get(\"maxHeight\", this.getPrivate(\"maxHeight\", Infinity));\r\n if ($type.isNumber(maxHeight)) {\r\n text.set(vertical ? \"maxWidth\" : \"maxHeight\", maxHeight - this.get(\"paddingLeft\", 0) - this.get(\"paddingRight\", 0));\r\n }\r\n else {\r\n text.set(vertical ? \"maxWidth\" : \"maxHeight\", undefined);\r\n }\r\n this.root.events.once(\"frameended\", () => {\r\n text.markDirtyBounds();\r\n });\r\n }\r\n _setDataItem(dataItem) {\r\n super._setDataItem(dataItem);\r\n this._markDirtyKey(\"text\");\r\n this._markDirtyKey(\"html\");\r\n const text = this._text;\r\n if (text.get(\"populateText\")) {\r\n text.markDirtyText();\r\n }\r\n const html = this.get(\"html\");\r\n if (html && html !== \"\") {\r\n this._updateHTMLContent();\r\n }\r\n }\r\n /**\r\n * Returns text with populated placeholders and formatting if `populateText` is\r\n * set to `true`.\r\n *\r\n * @return Populated text\r\n */\r\n getText() {\r\n return this._text._getText();\r\n }\r\n /**\r\n * Returns \"aria-label\" text with populated placeholders and formatting\r\n * if `populateText` is set to `true`.\r\n *\r\n * @return Populated text\r\n */\r\n getAccessibleText() {\r\n return this._text._getAccessibleText();\r\n }\r\n}\r\nLabel.className = \"Label\";\r\nLabel.classNames = Container.classNames.concat([Label.className]);\r\n//# sourceMappingURL=Label.js.map","import { Theme } from \"../core/Theme\";\r\nimport { p100, p50, percent } from \"../core/util/Percent\";\r\nimport { color, Color } from \"../core/util/Color\";\r\nimport { GridLayout } from \"../core/render/GridLayout\";\r\nimport { Label } from \"../core/render/Label\";\r\nimport * as $ease from \"../core/util/Ease\";\r\n/**\r\n * @ignore\r\n */\r\nexport function setColor(rule, key, ic, name) {\r\n // TODO this shouldn't use get, figure out a better way\r\n rule.set(key, ic.get(name));\r\n ic.on(name, (value) => {\r\n rule.set(key, value);\r\n });\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport class DefaultTheme extends Theme {\r\n setupDefaultRules() {\r\n super.setupDefaultRules();\r\n const language = this._root.language;\r\n const ic = this._root.interfaceColors;\r\n const horizontalLayout = this._root.horizontalLayout;\r\n const verticalLayout = this._root.verticalLayout;\r\n const r = this.rule.bind(this);\r\n /**\r\n * ========================================================================\r\n * core\r\n * ========================================================================\r\n */\r\n r(\"InterfaceColors\").setAll({\r\n stroke: Color.fromHex(0xe5e5e5),\r\n fill: Color.fromHex(0xf3f3f3),\r\n primaryButton: Color.fromHex(0x6794dc),\r\n primaryButtonHover: Color.fromHex(0x6771dc),\r\n primaryButtonDown: Color.fromHex(0x68dc76),\r\n primaryButtonActive: Color.fromHex(0x68dc76),\r\n primaryButtonDisabled: Color.fromHex(0xdadada),\r\n primaryButtonTextDisabled: Color.fromHex(0xffffff),\r\n primaryButtonText: Color.fromHex(0xffffff),\r\n primaryButtonStroke: Color.fromHex(0xffffff),\r\n secondaryButton: Color.fromHex(0xd9d9d9),\r\n secondaryButtonHover: Color.fromHex(0xa3a3a3),\r\n secondaryButtonDown: Color.fromHex(0x8d8d8d),\r\n secondaryButtonActive: Color.fromHex(0xe6e6e6),\r\n secondaryButtonText: Color.fromHex(0x000000),\r\n secondaryButtonStroke: Color.fromHex(0xffffff),\r\n grid: Color.fromHex(0x000000),\r\n background: Color.fromHex(0xffffff),\r\n alternativeBackground: Color.fromHex(0x000000),\r\n text: Color.fromHex(0x000000),\r\n alternativeText: Color.fromHex(0xffffff),\r\n disabled: Color.fromHex(0xadadad),\r\n positive: Color.fromHex(0x50b300),\r\n negative: Color.fromHex(0xb30000)\r\n });\r\n {\r\n const rule = r(\"ColorSet\");\r\n rule.setAll({\r\n passOptions: {\r\n hue: 0.05,\r\n saturation: 0,\r\n lightness: 0\r\n },\r\n colors: [\r\n Color.fromHex(0x67b7dc)\r\n ],\r\n step: 1,\r\n //baseColor: Color.fromRGB(103, 183, 220),\r\n //count: 20,\r\n reuse: false,\r\n startIndex: 0\r\n });\r\n rule.setPrivate(\"currentStep\", 0);\r\n rule.setPrivate(\"currentPass\", 0);\r\n }\r\n r(\"Entity\").setAll({\r\n stateAnimationDuration: 0,\r\n stateAnimationEasing: $ease.out($ease.cubic)\r\n });\r\n r(\"Component\").setAll({\r\n interpolationDuration: 0,\r\n interpolationEasing: $ease.out($ease.cubic)\r\n });\r\n r(\"Sprite\").setAll({\r\n visible: true,\r\n scale: 1,\r\n opacity: 1,\r\n rotation: 0,\r\n position: \"relative\",\r\n tooltipX: p50,\r\n tooltipY: p50,\r\n tooltipPosition: \"fixed\",\r\n isMeasured: true\r\n });\r\n r(\"Sprite\").states.create(\"default\", { \"visible\": true, opacity: 1 });\r\n r(\"Container\").setAll({\r\n interactiveChildren: true,\r\n setStateOnChildren: false\r\n });\r\n r(\"Graphics\").setAll({\r\n strokeWidth: 1\r\n });\r\n r(\"Chart\").setAll({\r\n width: p100,\r\n height: p100,\r\n interactiveChildren: false\r\n });\r\n r(\"ZoomableContainer\").setAll({\r\n width: p100,\r\n height: p100,\r\n wheelable: true,\r\n pinchZoom: true,\r\n maxZoomLevel: 32,\r\n minZoomLevel: 1,\r\n zoomStep: 2,\r\n animationEasing: $ease.out($ease.cubic),\r\n animationDuration: 600,\r\n maxPanOut: 0.4\r\n });\r\n /**\r\n * ------------------------------------------------------------------------\r\n * core: alignment\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"Sprite\", [\"horizontal\", \"center\"]).setAll({\r\n centerX: p50,\r\n x: p50\r\n });\r\n r(\"Sprite\", [\"vertical\", \"center\"]).setAll({\r\n centerY: p50,\r\n y: p50\r\n });\r\n r(\"Container\", [\"horizontal\", \"layout\"]).setAll({\r\n layout: horizontalLayout\r\n });\r\n r(\"Container\", [\"vertical\", \"layout\"]).setAll({\r\n layout: verticalLayout\r\n });\r\n /**\r\n * ------------------------------------------------------------------------\r\n * core: patterns\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"Pattern\").setAll({\r\n repetition: \"repeat\",\r\n width: 50,\r\n height: 50,\r\n rotation: 0,\r\n fillOpacity: 1\r\n });\r\n r(\"LinePattern\").setAll({\r\n gap: 6,\r\n colorOpacity: 1,\r\n width: 49,\r\n height: 49\r\n });\r\n r(\"RectanglePattern\").setAll({\r\n gap: 6,\r\n checkered: false,\r\n centered: true,\r\n maxWidth: 5,\r\n maxHeight: 5,\r\n width: 48,\r\n height: 48,\r\n strokeWidth: 0\r\n });\r\n r(\"CirclePattern\").setAll({\r\n gap: 5,\r\n checkered: false,\r\n centered: false,\r\n radius: 3,\r\n strokeWidth: 0,\r\n width: 45,\r\n height: 45\r\n });\r\n r(\"GrainPattern\").setAll({\r\n width: 200,\r\n height: 200,\r\n colors: [Color.fromHex(0x000000)],\r\n size: 1,\r\n horizontalGap: 0,\r\n verticalGap: 0,\r\n density: 1,\r\n minOpacity: 0,\r\n maxOpacity: 0.2\r\n });\r\n {\r\n const rule = r(\"PatternSet\");\r\n rule.setAll({\r\n step: 1\r\n });\r\n setColor(rule, \"color\", ic, \"stroke\");\r\n }\r\n /**\r\n * ------------------------------------------------------------------------\r\n * core: gradients\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"LinearGradient\").setAll({\r\n rotation: 90\r\n });\r\n /**\r\n * ------------------------------------------------------------------------\r\n * core: Legend\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"Legend\").setAll({\r\n fillField: \"fill\",\r\n strokeField: \"stroke\",\r\n nameField: \"name\",\r\n layout: GridLayout.new(this._root, {}),\r\n layer: 30,\r\n clickTarget: \"itemContainer\"\r\n });\r\n // Class: Container\r\n r(\"Container\", [\"legend\", \"item\", \"itemcontainer\"]).setAll({\r\n paddingLeft: 5,\r\n paddingRight: 5,\r\n paddingBottom: 5,\r\n paddingTop: 5,\r\n layout: horizontalLayout,\r\n setStateOnChildren: true,\r\n interactiveChildren: false,\r\n ariaChecked: true,\r\n focusable: true,\r\n ariaLabel: language.translate(\"Press ENTER to toggle\"),\r\n role: \"checkbox\"\r\n });\r\n {\r\n const rule = r(\"Rectangle\", [\"legend\", \"item\", \"background\"]);\r\n rule.setAll({\r\n fillOpacity: 0,\r\n });\r\n setColor(rule, \"fill\", ic, \"background\");\r\n }\r\n r(\"Container\", [\"legend\", \"marker\"]).setAll({\r\n setStateOnChildren: true,\r\n centerY: p50,\r\n paddingLeft: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingTop: 0,\r\n width: 18,\r\n height: 18\r\n });\r\n r(\"RoundedRectangle\", [\"legend\", \"marker\", \"rectangle\"]).setAll({\r\n width: p100,\r\n height: p100,\r\n cornerRadiusBL: 3,\r\n cornerRadiusTL: 3,\r\n cornerRadiusBR: 3,\r\n cornerRadiusTR: 3\r\n });\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"legend\", \"marker\", \"rectangle\"]).states.create(\"disabled\", {});\r\n setColor(rule, \"fill\", ic, \"disabled\");\r\n setColor(rule, \"stroke\", ic, \"disabled\");\r\n }\r\n r(\"Label\", [\"legend\", \"label\"]).setAll({\r\n centerY: p50,\r\n marginLeft: 5,\r\n paddingRight: 0,\r\n paddingLeft: 0,\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n populateText: true\r\n });\r\n {\r\n const rule = r(\"Label\", [\"legend\", \"label\"]).states.create(\"disabled\", {});\r\n setColor(rule, \"fill\", ic, \"disabled\");\r\n }\r\n r(\"Label\", [\"legend\", \"value\", \"label\"]).setAll({\r\n centerY: p50,\r\n marginLeft: 5,\r\n paddingRight: 0,\r\n paddingLeft: 0,\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n width: 50,\r\n centerX: p100,\r\n populateText: true\r\n });\r\n {\r\n const rule = r(\"Label\", [\"legend\", \"value\", \"label\"]).states.create(\"disabled\", {});\r\n setColor(rule, \"fill\", ic, \"disabled\");\r\n }\r\n /**\r\n * ------------------------------------------------------------------------\r\n * core: HeatLegend\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"HeatLegend\").setAll({\r\n stepCount: 1\r\n });\r\n r(\"RoundedRectangle\", [\"heatlegend\", \"marker\"]).setAll({\r\n cornerRadiusTR: 0,\r\n cornerRadiusBR: 0,\r\n cornerRadiusTL: 0,\r\n cornerRadiusBL: 0\r\n });\r\n r(\"RoundedRectangle\", [\"vertical\", \"heatlegend\", \"marker\"]).setAll({\r\n height: p100,\r\n width: 15\r\n });\r\n r(\"RoundedRectangle\", [\"horizontal\", \"heatlegend\", \"marker\"]).setAll({\r\n width: p100,\r\n height: 15\r\n });\r\n r(\"HeatLegend\", [\"vertical\"]).setAll({\r\n height: p100\r\n });\r\n r(\"HeatLegend\", [\"horizontal\"]).setAll({\r\n width: p100\r\n });\r\n r(\"Label\", [\"heatlegend\", \"start\"]).setAll({\r\n paddingLeft: 5,\r\n paddingRight: 5,\r\n paddingTop: 5,\r\n paddingBottom: 5\r\n });\r\n r(\"Label\", [\"heatlegend\", \"end\"]).setAll({\r\n paddingLeft: 5,\r\n paddingRight: 5,\r\n paddingTop: 5,\r\n paddingBottom: 5\r\n });\r\n /**\r\n * ------------------------------------------------------------------------\r\n * core: Labels\r\n * ------------------------------------------------------------------------\r\n */\r\n {\r\n const rule = r(\"Label\");\r\n rule.setAll({\r\n paddingTop: 8,\r\n paddingBottom: 8,\r\n paddingLeft: 10,\r\n paddingRight: 10,\r\n fontFamily: \"-apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, Helvetica, Arial, sans-serif, \\\"Apple Color Emoji\\\", \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\"\",\r\n fontSize: \"1em\",\r\n populateText: false\r\n });\r\n setColor(rule, \"fill\", ic, \"text\");\r\n }\r\n r(\"RadialLabel\").setAll({\r\n textType: \"regular\",\r\n centerY: p50,\r\n centerX: p50,\r\n inside: false,\r\n radius: 0,\r\n baseRadius: p100,\r\n orientation: \"auto\",\r\n textAlign: \"center\"\r\n });\r\n r(\"EditableLabel\").setAll({\r\n editOn: \"click\",\r\n //setStateOnChildren: true,\r\n themeTags: [\"editablelabel\"],\r\n multiLine: true\r\n });\r\n r(\"RoundedRectangle\", [\"editablelabel\", \"background\"]).setAll({\r\n fillOpacity: 0,\r\n fill: Color.fromHex(0x000000),\r\n cornerRadiusBL: 3,\r\n cornerRadiusBR: 3,\r\n cornerRadiusTL: 3,\r\n cornerRadiusTR: 3,\r\n strokeOpacity: 0,\r\n stroke: Color.fromHex(0x000000)\r\n });\r\n {\r\n r(\"RoundedRectangle\", [\"editablelabel\", \"background\"]).states.create(\"active\", {\r\n strokeOpacity: 0.2,\r\n });\r\n }\r\n /**\r\n * ------------------------------------------------------------------------\r\n * core: Elements and shapes\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"RoundedRectangle\").setAll({\r\n cornerRadiusTL: 8,\r\n cornerRadiusBL: 8,\r\n cornerRadiusTR: 8,\r\n cornerRadiusBR: 8\r\n });\r\n r(\"PointedRectangle\").setAll({\r\n pointerBaseWidth: 15,\r\n pointerLength: 10,\r\n cornerRadius: 8\r\n });\r\n r(\"Slice\").setAll({\r\n shiftRadius: 0,\r\n dRadius: 0,\r\n dInnerRadius: 0\r\n });\r\n {\r\n const rule = r(\"Tick\");\r\n rule.setAll({\r\n strokeOpacity: .15,\r\n isMeasured: false,\r\n length: 4.5,\r\n position: \"absolute\",\r\n crisp: true\r\n });\r\n setColor(rule, \"stroke\", ic, \"grid\");\r\n }\r\n r(\"Bullet\").setAll({\r\n locationX: 0.5,\r\n locationY: 0.5\r\n });\r\n /**\r\n * ------------------------------------------------------------------------\r\n * core: Tooltip\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"Tooltip\").setAll({\r\n position: \"absolute\",\r\n getFillFromSprite: true,\r\n getStrokeFromSprite: false,\r\n autoTextColor: true,\r\n paddingTop: 9,\r\n paddingBottom: 8,\r\n paddingLeft: 10,\r\n paddingRight: 10,\r\n marginBottom: 5,\r\n pointerOrientation: \"vertical\",\r\n centerX: p50,\r\n centerY: p50,\r\n animationEasing: $ease.out($ease.cubic),\r\n exportable: false\r\n //layer: 100\r\n });\r\n // system tooltip\r\n r(\"Tooltip\", [\"system\"]).setAll({\r\n pointerOrientation: \"horizontal\",\r\n paddingTop: 4,\r\n paddingRight: 7,\r\n paddingBottom: 4,\r\n paddingLeft: 7\r\n });\r\n {\r\n const rule = r(\"PointedRectangle\", [\"tooltip\", \"system\", \"background\"]);\r\n rule.setAll({\r\n strokeOpacity: 0.3\r\n });\r\n setColor(rule, \"fill\", ic, \"background\");\r\n setColor(rule, \"stroke\", ic, \"grid\");\r\n }\r\n r(\"Label\", [\"tooltip\", \"system\"]).setAll({\r\n fontSize: 12,\r\n fill: ic.get(\"background\")\r\n });\r\n r(\"Polygon\").setAll({\r\n animationEasing: $ease.out($ease.cubic),\r\n });\r\n r(\"Link\").setAll({\r\n cornerRadius: 8,\r\n setStateOnChildren: true\r\n });\r\n {\r\n const rule = r(\"OrthogonalLine\", [\"link\", \"line\"]);\r\n rule.setAll({\r\n isMeasured: false,\r\n crisp: true\r\n });\r\n const stateActive = rule.states.create(\"active\", {\r\n strokeWidth: 2\r\n });\r\n setColor(stateActive, \"stroke\", ic, \"negative\");\r\n }\r\n r(\"OrthogonalLine\", [\"link\", \"hit\"]).setAll({\r\n strokeWidth: 10,\r\n opacity: 0,\r\n strokeOpacity: 0\r\n });\r\n {\r\n const rule = r(\"OrthogonalLine\");\r\n rule.setAll({\r\n strokeWidth: 1,\r\n strokeOpacity: 1,\r\n cornerRadius: 10\r\n });\r\n setColor(rule, \"stroke\", ic, \"grid\");\r\n }\r\n {\r\n const rule = r(\"Triangle\", [\"link\"]);\r\n rule.setAll({\r\n width: 14,\r\n height: 10,\r\n centerY: 0\r\n });\r\n setColor(rule, \"fill\", ic, \"grid\");\r\n setColor(rule, \"stroke\", ic, \"grid\");\r\n rule.states.create(\"default\", {\r\n stateAnimationDuration: 0\r\n });\r\n const state = rule.states.create(\"active\", {\r\n stateAnimationDuration: 0,\r\n stroke: color(0xffffff),\r\n strokeWidth: 2\r\n });\r\n // draw circle and x inside\r\n state.set(\"draw\", (display) => {\r\n display.arc(0, 0, 11, 0, Math.PI * 2);\r\n display.moveTo(-4, -4);\r\n display.lineTo(4, 4);\r\n display.moveTo(4, -4);\r\n display.lineTo(-4, 4);\r\n });\r\n setColor(state, \"fill\", ic, \"negative\");\r\n }\r\n {\r\n const rule = r(\"PointedRectangle\", [\"tooltip\", \"background\"]);\r\n rule.setAll({\r\n strokeOpacity: 0.9,\r\n cornerRadius: 4,\r\n pointerLength: 4,\r\n pointerBaseWidth: 8,\r\n fillOpacity: 0.9,\r\n stroke: Color.fromHex(0xffffff)\r\n });\r\n }\r\n {\r\n const rule = r(\"Label\", [\"tooltip\"]);\r\n rule.setAll({\r\n role: \"tooltip\",\r\n populateText: true,\r\n paddingRight: 0,\r\n paddingTop: 0,\r\n paddingLeft: 0,\r\n paddingBottom: 0\r\n });\r\n setColor(rule, \"fill\", ic, \"alternativeText\");\r\n }\r\n /**\r\n * ------------------------------------------------------------------------\r\n * core: Button\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"Button\").setAll({\r\n paddingTop: 8,\r\n paddingBottom: 8,\r\n paddingLeft: 10,\r\n paddingRight: 10,\r\n interactive: true,\r\n layout: horizontalLayout,\r\n interactiveChildren: false,\r\n setStateOnChildren: true,\r\n focusable: true\r\n });\r\n r(\"Button\").states.create(\"hover\", {});\r\n r(\"Button\").states.create(\"down\", { stateAnimationDuration: 0 });\r\n r(\"Button\").states.create(\"active\", {});\r\n r(\"Button\").states.create(\"disabled\", {\r\n forceInactive: true\r\n });\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"button\", \"background\"]);\r\n setColor(rule, \"fill\", ic, \"primaryButton\");\r\n setColor(rule, \"stroke\", ic, \"primaryButtonStroke\");\r\n }\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"button\", \"background\"]).states.create(\"hover\", {});\r\n setColor(rule, \"fill\", ic, \"primaryButtonHover\");\r\n }\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"button\", \"background\"]).states.create(\"down\", { stateAnimationDuration: 0 });\r\n setColor(rule, \"fill\", ic, \"primaryButtonDown\");\r\n }\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"button\", \"background\"]).states.create(\"active\", {});\r\n setColor(rule, \"fill\", ic, \"primaryButtonActive\");\r\n }\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"button\", \"background\"]).states.create(\"disabled\", {});\r\n setColor(rule, \"fill\", ic, \"primaryButtonDisabled\");\r\n }\r\n {\r\n const rule = r(\"Graphics\", [\"button\", \"icon\"]).states.create(\"disabled\", {});\r\n setColor(rule, \"fill\", ic, \"primaryButtonTextDisabled\");\r\n }\r\n {\r\n const rule = r(\"Label\", [\"button\"]).states.create(\"disabled\", {});\r\n setColor(rule, \"fill\", ic, \"primaryButtonTextDisabled\");\r\n }\r\n {\r\n const rule = r(\"Graphics\", [\"button\", \"icon\"]);\r\n rule.setAll({\r\n forceInactive: true\r\n });\r\n setColor(rule, \"stroke\", ic, \"primaryButtonText\");\r\n }\r\n {\r\n const rule = r(\"Label\", [\"button\"]);\r\n setColor(rule, \"fill\", ic, \"primaryButtonText\");\r\n }\r\n /**\r\n * ------------------------------------------------------------------------\r\n * ConfirmButton\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"ConfirmButton\").setAll({\r\n toggleKey: \"active\",\r\n setStateOnChildren: true,\r\n label: Label.new(this._root, {\r\n text: language.translate(\"Confirm\"),\r\n forceHidden: true\r\n })\r\n });\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"button\", \"background\", \"confirm\"]).states.create(\"active\", {});\r\n setColor(rule, \"fill\", ic, \"negative\");\r\n }\r\n r(\"Label\", [\"button\", \"confirm\"]).setAll({\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n paddingRight: 3,\r\n paddingLeft: 5\r\n });\r\n r(\"Label\", [\"button\", \"confirm\"]).states.create(\"default\", {\r\n stateAnimationDuration: 0\r\n });\r\n r(\"Label\", [\"button\", \"confirm\"]).states.create(\"active\", {\r\n forceHidden: false,\r\n stateAnimationDuration: 0\r\n });\r\n {\r\n const rule = r(\"Graphics\", [\"icon\", \"confirm\", \"button\"]);\r\n rule.setAll({\r\n stateAnimationDuration: 0\r\n });\r\n rule.states.create(\"default\", {\r\n stateAnimationDuration: 0\r\n });\r\n setColor(rule, \"stroke\", ic, \"primaryButtonText\");\r\n }\r\n {\r\n const rule = r(\"Graphics\", [\"icon\", \"confirm\", \"button\"]).states.create(\"active\", {\r\n svgPath: \"M -5 1 L 0 6 L 8 -5\",\r\n strokeWidth: 2\r\n });\r\n setColor(rule, \"stroke\", ic, \"primaryButtonText\");\r\n }\r\n {\r\n const rule = r(\"Graphics\", [\"icon\", \"confirm\", \"button\", \"secondary\"]).states.create(\"active\", {});\r\n setColor(rule, \"stroke\", ic, \"primaryButtonText\");\r\n }\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"button\", \"background\", \"confirm\", \"secondary\"]).states.create(\"active\", {\r\n fillOpacity: 1\r\n });\r\n setColor(rule, \"fill\", ic, \"negative\");\r\n }\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"button\", \"background\", \"confirm\", \"secondary\"]).states.create(\"hoverActive\", {\r\n fillOpacity: 1\r\n });\r\n setColor(rule, \"fill\", ic, \"negative\");\r\n }\r\n // required\r\n r(\"Button\", [\"button\", \"confirm\"]).states.create(\"hoverActive\", {});\r\n /**\r\n * ------------------------------------------------------------------------\r\n * charts/xy: ZoomOutButton\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"Button\", [\"zoom\"]).setAll({\r\n paddingTop: 18,\r\n paddingBottom: 18,\r\n paddingLeft: 12,\r\n paddingRight: 12,\r\n centerX: 46,\r\n centerY: -10,\r\n y: 0,\r\n x: p100,\r\n role: \"button\",\r\n ariaLabel: language.translate(\"Zoom Out\"),\r\n layer: 30\r\n });\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"background\", \"button\", \"zoom\"]);\r\n rule.setAll({\r\n cornerRadiusBL: 40,\r\n cornerRadiusBR: 40,\r\n cornerRadiusTL: 40,\r\n cornerRadiusTR: 40\r\n });\r\n setColor(rule, \"fill\", ic, \"primaryButton\");\r\n }\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"background\", \"button\", \"zoom\"]).states.create(\"hover\", {});\r\n setColor(rule, \"fill\", ic, \"primaryButtonHover\");\r\n }\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"background\", \"button\", \"zoom\"]).states.create(\"down\", { stateAnimationDuration: 0 });\r\n setColor(rule, \"fill\", ic, \"primaryButtonDown\");\r\n }\r\n {\r\n const rule = r(\"Graphics\", [\"icon\", \"button\", \"zoom\"]);\r\n rule.setAll({\r\n crisp: true,\r\n strokeOpacity: 0.7,\r\n draw: (display) => {\r\n display.moveTo(0, 0);\r\n display.lineTo(12, 0);\r\n }\r\n });\r\n setColor(rule, \"stroke\", ic, \"primaryButtonText\");\r\n }\r\n /**\r\n * ------------------------------------------------------------------------\r\n * core: ResizeButton\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"Button\", [\"resize\"]).setAll({\r\n paddingTop: 9,\r\n paddingBottom: 9,\r\n paddingLeft: 13,\r\n paddingRight: 13,\r\n draggable: true,\r\n centerX: p50,\r\n centerY: p50,\r\n position: \"absolute\",\r\n role: \"slider\",\r\n ariaValueMin: \"0\",\r\n ariaValueMax: \"100\",\r\n ariaLabel: language.translate(\"Use up and down arrows to move selection\")\r\n });\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"background\", \"resize\", \"button\"]);\r\n rule.setAll({\r\n cornerRadiusBL: 40,\r\n cornerRadiusBR: 40,\r\n cornerRadiusTL: 40,\r\n cornerRadiusTR: 40\r\n });\r\n setColor(rule, \"fill\", ic, \"secondaryButton\");\r\n setColor(rule, \"stroke\", ic, \"secondaryButtonStroke\");\r\n }\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"background\", \"resize\", \"button\"]).states.create(\"hover\", {});\r\n setColor(rule, \"fill\", ic, \"secondaryButtonHover\");\r\n }\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"background\", \"resize\", \"button\"]).states.create(\"down\", { stateAnimationDuration: 0 });\r\n setColor(rule, \"fill\", ic, \"secondaryButtonDown\");\r\n }\r\n {\r\n const rule = r(\"Graphics\", [\"resize\", \"button\", \"icon\"]);\r\n rule.setAll({\r\n interactive: false,\r\n crisp: true,\r\n strokeOpacity: 0.5,\r\n draw: (display) => {\r\n display.moveTo(0, 0.5);\r\n display.lineTo(0, 12.5);\r\n display.moveTo(4, 0.5);\r\n display.lineTo(4, 12.5);\r\n }\r\n });\r\n setColor(rule, \"stroke\", ic, \"secondaryButtonText\");\r\n }\r\n r(\"Button\", [\"resize\", \"vertical\"]).setAll({\r\n rotation: 90,\r\n cursorOverStyle: \"ns-resize\"\r\n });\r\n r(\"Button\", [\"resize\", \"horizontal\"]).setAll({\r\n cursorOverStyle: \"ew-resize\"\r\n });\r\n /**\r\n * ------------------------------------------------------------------------\r\n * core: PlayButton\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"Button\", [\"play\"]).setAll({\r\n paddingTop: 13,\r\n paddingBottom: 13,\r\n paddingLeft: 14,\r\n paddingRight: 14,\r\n ariaLabel: language.translate(\"Play\"),\r\n toggleKey: \"active\"\r\n });\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"play\", \"background\"]);\r\n rule.setAll({\r\n strokeOpacity: 0.5,\r\n cornerRadiusBL: 100,\r\n cornerRadiusBR: 100,\r\n cornerRadiusTL: 100,\r\n cornerRadiusTR: 100\r\n });\r\n setColor(rule, \"fill\", ic, \"primaryButton\");\r\n }\r\n {\r\n const rule = r(\"Graphics\", [\"play\", \"icon\"]);\r\n rule.setAll({\r\n stateAnimationDuration: 0,\r\n dx: 1,\r\n draw: (display) => {\r\n display.moveTo(0, -5);\r\n display.lineTo(8, 0);\r\n display.lineTo(0, 5);\r\n display.lineTo(0, -5);\r\n }\r\n });\r\n setColor(rule, \"fill\", ic, \"primaryButtonText\");\r\n }\r\n r(\"Graphics\", [\"play\", \"icon\"]).states.create(\"default\", {\r\n stateAnimationDuration: 0\r\n });\r\n r(\"Graphics\", [\"play\", \"icon\"]).states.create(\"active\", {\r\n stateAnimationDuration: 0,\r\n draw: (display) => {\r\n display.moveTo(-4, -5);\r\n display.lineTo(-1, -5);\r\n display.lineTo(-1, 5);\r\n display.lineTo(-4, 5);\r\n display.lineTo(-4, -5);\r\n display.moveTo(4, -5);\r\n display.lineTo(1, -5);\r\n display.lineTo(1, 5);\r\n display.lineTo(4, 5);\r\n display.lineTo(4, -5);\r\n }\r\n });\r\n /**\r\n * ------------------------------------------------------------------------\r\n * core: SwitchButton\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"Button\", [\"switch\"]).setAll({\r\n paddingTop: 4,\r\n paddingBottom: 4,\r\n paddingLeft: 4,\r\n paddingRight: 4,\r\n ariaLabel: language.translate(\"Press ENTER to toggle\"),\r\n toggleKey: \"active\",\r\n width: 40,\r\n height: 24,\r\n layout: null\r\n });\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"switch\", \"background\"]);\r\n rule.setAll({\r\n strokeOpacity: 0.5,\r\n cornerRadiusBL: 100,\r\n cornerRadiusBR: 100,\r\n cornerRadiusTL: 100,\r\n cornerRadiusTR: 100\r\n });\r\n setColor(rule, \"fill\", ic, \"primaryButton\");\r\n }\r\n {\r\n const rule = r(\"Circle\", [\"switch\", \"icon\"]);\r\n rule.setAll({\r\n radius: 8,\r\n centerY: 0,\r\n centerX: 0,\r\n dx: 0\r\n });\r\n setColor(rule, \"fill\", ic, \"primaryButtonText\");\r\n }\r\n r(\"Graphics\", [\"switch\", \"icon\"]).states.create(\"active\", {\r\n dx: 16\r\n });\r\n /**\r\n * ------------------------------------------------------------------------\r\n * core: Scrollbar\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"Scrollbar\").setAll({\r\n start: 0,\r\n end: 1,\r\n layer: 30,\r\n animationEasing: $ease.out($ease.cubic)\r\n });\r\n r(\"Scrollbar\", [\"vertical\"]).setAll({\r\n marginRight: 13,\r\n marginLeft: 13,\r\n minWidth: 12,\r\n height: p100\r\n });\r\n r(\"Scrollbar\", [\"horizontal\"]).setAll({\r\n marginTop: 13,\r\n marginBottom: 13,\r\n minHeight: 12,\r\n width: p100\r\n });\r\n this.rule(\"Button\", [\"scrollbar\"]).setAll({\r\n exportable: false\r\n });\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"scrollbar\", \"main\", \"background\"]);\r\n rule.setAll({\r\n cornerRadiusTL: 8,\r\n cornerRadiusBL: 8,\r\n cornerRadiusTR: 8,\r\n cornerRadiusBR: 8,\r\n fillOpacity: 0.8,\r\n });\r\n setColor(rule, \"fill\", ic, \"fill\");\r\n }\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"scrollbar\", \"thumb\"]);\r\n rule.setAll({\r\n role: \"slider\",\r\n ariaLive: \"polite\",\r\n position: \"absolute\",\r\n draggable: true\r\n });\r\n setColor(rule, \"fill\", ic, \"secondaryButton\");\r\n }\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"scrollbar\", \"thumb\"]).states.create(\"hover\", {});\r\n setColor(rule, \"fill\", ic, \"secondaryButtonHover\");\r\n }\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"scrollbar\", \"thumb\"]).states.create(\"down\", { stateAnimationDuration: 0 });\r\n setColor(rule, \"fill\", ic, \"secondaryButtonDown\");\r\n }\r\n r(\"RoundedRectangle\", [\"scrollbar\", \"thumb\", \"vertical\"]).setAll({\r\n x: p50,\r\n width: p100,\r\n centerX: p50,\r\n ariaLabel: language.translate(\"Use up and down arrows to move selection\")\r\n });\r\n r(\"RoundedRectangle\", [\"scrollbar\", \"thumb\", \"horizontal\"]).setAll({\r\n y: p50,\r\n centerY: p50,\r\n height: p100,\r\n ariaLabel: language.translate(\"Use left and right arrows to move selection\")\r\n });\r\n // @todo: is this needed? used to be \"ContentScrollbar\"\r\n // r(\"Scrollbar\", [\"content?\"]).setAll({\r\n // \tmarginRight: 0,\r\n // \tmarginLeft: 5,\r\n // \tlayer: 5\r\n // });\r\n /**\r\n * ========================================================================\r\n * charts/xy\r\n * ========================================================================\r\n *\r\n * This needs to be in DefaultTheme because it's the only theme that is\r\n * automatically applied to Root, and tooltips different ancestors\r\n * than actual charts using them.\r\n */\r\n {\r\n const rule = r(\"PointedRectangle\", [\"axis\", \"tooltip\", \"background\"]);\r\n rule.setAll({\r\n cornerRadius: 0\r\n });\r\n setColor(rule, \"fill\", ic, \"alternativeBackground\");\r\n }\r\n r(\"Label\", [\"axis\", \"tooltip\"]).setAll({\r\n role: undefined\r\n });\r\n r(\"Label\", [\"axis\", \"tooltip\", \"y\"]).setAll({\r\n textAlign: \"right\"\r\n });\r\n r(\"Label\", [\"axis\", \"tooltip\", \"y\", \"opposite\"]).setAll({\r\n textAlign: \"left\"\r\n });\r\n r(\"Label\", [\"axis\", \"tooltip\", \"x\"]).setAll({\r\n textAlign: \"center\"\r\n });\r\n r(\"Tooltip\", [\"categoryaxis\"]).setAll({\r\n labelText: \"{category}\"\r\n });\r\n /**\r\n * ------------------------------------------------------------------------\r\n * Shapes\r\n * ------------------------------------------------------------------------\r\n */\r\n // Class: Graphics\r\n r(\"Star\").setAll({\r\n spikes: 5,\r\n innerRadius: 5,\r\n radius: 10\r\n });\r\n // STOCK\r\n r(\"Tooltip\", [\"stock\"]).setAll({\r\n paddingTop: 6,\r\n paddingBottom: 5,\r\n paddingLeft: 7,\r\n paddingRight: 7\r\n });\r\n r(\"Tooltip\", ['indicator']).setAll({\r\n forceHidden: true\r\n });\r\n r(\"PointedRectangle\", [\"tooltip\", \"stock\", \"axis\"]).setAll({\r\n pointerLength: 0,\r\n pointerBaseWidth: 0,\r\n cornerRadius: 3\r\n });\r\n r(\"Label\", [\"tooltip\", \"stock\"]).setAll({\r\n fontSize: \"0.8em\"\r\n });\r\n // resizer\r\n r(\"SpriteResizer\").setAll({\r\n rotationStep: 10,\r\n isMeasured: false\r\n });\r\n {\r\n const rule = r(\"Container\", [\"resizer\", \"grip\"]);\r\n rule.states.create(\"hover\", {});\r\n }\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"resizer\", \"grip\"]);\r\n rule.setAll({\r\n strokeOpacity: 0.7,\r\n strokeWidth: 1,\r\n fillOpacity: 1,\r\n width: 12,\r\n height: 12\r\n });\r\n setColor(rule, \"fill\", ic, \"background\");\r\n setColor(rule, \"stroke\", ic, \"alternativeBackground\");\r\n }\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"resizer\", \"grip\", \"outline\"]);\r\n rule.setAll({\r\n strokeOpacity: 0,\r\n fillOpacity: 0,\r\n width: 20,\r\n height: 20\r\n });\r\n rule.states.create(\"hover\", {\r\n fillOpacity: 0.3\r\n });\r\n setColor(rule, \"fill\", ic, \"alternativeBackground\");\r\n }\r\n r(\"RoundedRectangle\", [\"resizer\", \"grip\", \"left\"]).setAll({\r\n cornerRadiusBL: 0,\r\n cornerRadiusBR: 0,\r\n cornerRadiusTL: 0,\r\n cornerRadiusTR: 0\r\n });\r\n r(\"RoundedRectangle\", [\"resizer\", \"grip\", \"right\"]).setAll({\r\n cornerRadiusBL: 0,\r\n cornerRadiusBR: 0,\r\n cornerRadiusTL: 0,\r\n cornerRadiusTR: 0\r\n });\r\n {\r\n const rule = r(\"Rectangle\", [\"resizer\", \"rectangle\"]);\r\n rule.setAll({\r\n strokeDasharray: [2, 2],\r\n strokeOpacity: 0.5,\r\n strokeWidth: 1\r\n });\r\n setColor(rule, \"stroke\", ic, \"alternativeBackground\");\r\n }\r\n r(\"Graphics\", [\"button\", \"plus\", \"icon\"]).setAll({\r\n x: p50,\r\n y: p50,\r\n draw: (display) => {\r\n display.moveTo(-4, 0);\r\n display.lineTo(4, 0);\r\n display.moveTo(0, -4);\r\n display.lineTo(0, 4);\r\n }\r\n });\r\n r(\"Graphics\", [\"button\", \"minus\", \"icon\"]).setAll({\r\n x: p50,\r\n y: p50,\r\n draw: (display) => {\r\n display.moveTo(-4, 0);\r\n display.lineTo(4, 0);\r\n }\r\n });\r\n r(\"Graphics\", [\"button\", \"home\", \"icon\"]).setAll({\r\n x: p50,\r\n y: p50,\r\n svgPath: \"M 8 -1 L 6 -1 L 6 7 L 2 7 L 2 1 L -2 1 L -2 7 L -6 7 L -6 -1 L -8 -1 L 0 -9 L 8 -1 Z M 8 -1\"\r\n });\r\n r(\"Button\", [\"zoomtools\"]).setAll({\r\n marginTop: 1,\r\n marginBottom: 2\r\n });\r\n r(\"ZoomTools\").setAll({\r\n x: p100,\r\n centerX: p100,\r\n y: p100,\r\n centerY: p100,\r\n paddingRight: 10,\r\n paddingBottom: 10\r\n });\r\n // Progress pie\r\n r(\"ProgressPie\").setAll({\r\n radius: p100,\r\n width: 50,\r\n height: 50,\r\n centerX: percent(-50),\r\n centerY: percent(-50),\r\n innerRadius: percent(85),\r\n numberFormat: \"#.\"\r\n });\r\n {\r\n const rule = r(\"Label\", [\"progresspie\"]);\r\n rule.setAll({\r\n centerX: p50,\r\n centerY: p50,\r\n fontSize: \"0.75em\"\r\n });\r\n setColor(rule, \"fill\", ic, \"primaryButton\");\r\n }\r\n {\r\n const rule = r(\"Circle\", [\"progresspie\"]);\r\n rule.setAll({\r\n fillOpacity: 0.5\r\n });\r\n setColor(rule, \"fill\", ic, \"background\");\r\n }\r\n {\r\n const rule = r(\"Slice\", [\"progresspie\"]);\r\n rule.setAll({\r\n startAngle: -90\r\n });\r\n setColor(rule, \"fill\", ic, \"primaryButton\");\r\n }\r\n {\r\n const rule = r(\"Slice\", [\"progresspie\", \"background\"]);\r\n rule.setAll({\r\n fillOpacity: 0.2,\r\n arc: 360\r\n });\r\n setColor(rule, \"fill\", ic, \"primaryButton\");\r\n }\r\n // Numeric stepper\r\n r(\"EditableLabel\", [\"numericstepper\"]).setAll({\r\n y: p50,\r\n centerY: p50,\r\n multiLine: false,\r\n marginRight: 2\r\n });\r\n {\r\n const rule = r(\"Container\", [\"numericstepper\", \"buttons\"]);\r\n rule.setAll({\r\n layout: this._root.verticalLayout,\r\n centerY: p50,\r\n y: p50,\r\n marginRight: 10,\r\n opacity: 0\r\n });\r\n rule.states.create(\"active\", {\r\n opacity: 1\r\n });\r\n rule.states.create(\"default\", {\r\n opacity: 0\r\n });\r\n }\r\n {\r\n const rule = r(\"Triangle\", [\"numericstepper\"]);\r\n rule.setAll({\r\n width: 17,\r\n height: 11,\r\n marginTop: 3,\r\n marginBottom: 3,\r\n strokeWidth: 5,\r\n strokeOpacity: 0,\r\n cursorOverStyle: \"pointer\"\r\n });\r\n setColor(rule, \"fill\", ic, \"secondaryButton\");\r\n }\r\n {\r\n const rule = r(\"Triangle\", [\"downbutton\"]);\r\n rule.setAll({\r\n rotation: 180\r\n });\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=DefaultTheme.js.map","/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport * as $type from \"./Type\";\r\nimport * as $utils from \"./Utils\";\r\n/**\r\n * Returns a `Promise` which can be used to execute code after number of\r\n * milliseconds.\r\n *\r\n * @param ms Sleep duration in ms\r\n * @return Promise\r\n */\r\nexport function sleep(ms) {\r\n return new Promise((resolve, _reject) => {\r\n setTimeout(resolve, ms);\r\n });\r\n}\r\n/**\r\n * Maps time period names to their numeric representations in milliseconds.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\nexport let timeUnitDurations = {\r\n millisecond: 1,\r\n second: 1000,\r\n minute: 60000,\r\n hour: 3600000,\r\n day: 86400000,\r\n week: 604800000,\r\n month: 365.242 / 12 * 86400000,\r\n year: 31536000000\r\n};\r\n/**\r\n * Returns the next time unit that goes after source `unit`.\r\n *\r\n * E.g. \"hour\" is the next unit after \"minute\", etc.\r\n *\r\n * @ignore Exclude from docs\r\n * @param unit Source time unit\r\n * @return Next time unit\r\n */\r\nexport function getNextUnit(unit) {\r\n switch (unit) {\r\n case \"year\":\r\n return;\r\n case \"month\":\r\n return \"year\";\r\n case \"week\":\r\n return \"month\";\r\n case \"day\":\r\n return \"month\"; // not a mistake\r\n case \"hour\":\r\n return \"day\";\r\n case \"minute\":\r\n return \"hour\";\r\n case \"second\":\r\n return \"minute\";\r\n case \"millisecond\":\r\n return \"second\";\r\n }\r\n}\r\n/**\r\n * Returns number of milliseconds in the `count` of time `unit`.\r\n *\r\n * Available units: \"millisecond\", \"second\", \"minute\", \"hour\", \"day\", \"week\",\r\n * \"month\", and \"year\".\r\n *\r\n * @param unit Time unit\r\n * @param count Number of units\r\n * @return Milliseconds\r\n */\r\nexport function getDuration(unit, count) {\r\n if (count == null) {\r\n count = 1;\r\n }\r\n return timeUnitDurations[unit] * count;\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function getIntervalDuration(interval) {\r\n if (interval) {\r\n return timeUnitDurations[interval.timeUnit] * interval.count;\r\n }\r\n return 0;\r\n}\r\nexport function getDateIntervalDuration(interval, date, firstDateOfWeek, utc, timezone) {\r\n const unit = interval.timeUnit;\r\n const count = interval.count;\r\n if (unit == \"hour\" || unit == \"minute\" || unit == \"second\" || unit == \"millisecond\") {\r\n return timeUnitDurations[interval.timeUnit] * interval.count;\r\n }\r\n else {\r\n const firstTime = round(new Date(date.getTime()), unit, count, firstDateOfWeek, utc, undefined, timezone).getTime();\r\n let lastTime = firstTime + count * getDuration(unit) * 1.05;\r\n lastTime = round(new Date(lastTime), unit, 1, firstDateOfWeek, utc, undefined, timezone).getTime();\r\n return lastTime - firstTime;\r\n }\r\n}\r\n/**\r\n * Returns current `Date` object.\r\n *\r\n * @return Current date\r\n */\r\nexport function now() {\r\n return new Date();\r\n}\r\n/**\r\n * Returns current timestamp.\r\n *\r\n * @return Current timestamp\r\n */\r\nexport function getTime() {\r\n return now().getTime();\r\n}\r\n/**\r\n * Returns a copy of the `Date` object.\r\n *\r\n * @param date Source date\r\n * @return Copy\r\n */\r\nexport function copy(date) {\r\n return new Date(date.getTime()); // todo: check if this is ok. new Date(date) used to strip milliseconds on FF in v3\r\n}\r\n/**\r\n * Checks if the `unit` part of two `Date` objects do not match. Two dates\r\n * represent a \"range\" of time, rather the same time date.\r\n *\r\n * @param timeOne timestamp\r\n * @param timeTwo timestamp\r\n * @param unit Time unit to check\r\n * @return Range?\r\n */\r\nexport function checkChange(timeOne, timeTwo, unit, utc, timezone) {\r\n // quick\r\n if ((timeTwo - timeOne) > getDuration(unit, 1.2)) {\r\n return true;\r\n }\r\n let dateOne = new Date(timeOne);\r\n let dateTwo = new Date(timeTwo);\r\n if (timezone) {\r\n dateOne = timezone.convertLocal(dateOne);\r\n dateTwo = timezone.convertLocal(dateTwo);\r\n }\r\n let timeZoneOffset1 = 0;\r\n let timeZoneOffset2 = 0;\r\n if (!utc && unit != \"millisecond\") {\r\n timeZoneOffset1 = dateOne.getTimezoneOffset();\r\n dateOne.setUTCMinutes(dateOne.getUTCMinutes() - timeZoneOffset1);\r\n timeZoneOffset2 = dateTwo.getTimezoneOffset();\r\n dateTwo.setUTCMinutes(dateTwo.getUTCMinutes() - timeZoneOffset2);\r\n }\r\n let changed = false;\r\n switch (unit) {\r\n case \"year\":\r\n if (dateOne.getUTCFullYear() != dateTwo.getUTCFullYear()) {\r\n changed = true;\r\n }\r\n break;\r\n case \"month\":\r\n if (dateOne.getUTCFullYear() != dateTwo.getUTCFullYear()) {\r\n changed = true;\r\n }\r\n else if (dateOne.getUTCMonth() != dateTwo.getUTCMonth()) {\r\n changed = true;\r\n }\r\n break;\r\n case \"day\":\r\n if (dateOne.getUTCMonth() != dateTwo.getUTCMonth()) {\r\n changed = true;\r\n }\r\n else if (dateOne.getUTCDate() != dateTwo.getUTCDate()) {\r\n changed = true;\r\n }\r\n break;\r\n case \"hour\":\r\n if (dateOne.getUTCHours() != dateTwo.getUTCHours()) {\r\n changed = true;\r\n }\r\n break;\r\n case \"minute\":\r\n if (dateOne.getUTCMinutes() != dateTwo.getUTCMinutes()) {\r\n changed = true;\r\n }\r\n break;\r\n case \"second\":\r\n if (dateOne.getUTCSeconds() != dateTwo.getUTCSeconds()) {\r\n changed = true;\r\n }\r\n break;\r\n case \"millisecond\":\r\n if (dateOne.getTime() != dateTwo.getTime()) {\r\n changed = true;\r\n }\r\n break;\r\n }\r\n if (changed) {\r\n return changed;\r\n }\r\n let nextUnit = getNextUnit(unit);\r\n if (nextUnit) {\r\n return checkChange(timeOne, timeTwo, nextUnit, utc, timezone);\r\n }\r\n else {\r\n return false;\r\n }\r\n}\r\n/**\r\n * Adds `count` of time `unit` to the source date. Returns a modified `Date` object.\r\n *\r\n * @param date Source date\r\n * @param unit Time unit\r\n * @param count Number of units to add\r\n * @return Modified date\r\n */\r\nexport function add(date, unit, count, utc, timezone) {\r\n let timeZoneOffset = 0;\r\n if (!utc && unit != \"millisecond\") {\r\n timeZoneOffset = date.getTimezoneOffset();\r\n if (timezone) {\r\n timeZoneOffset -= timezone.offsetUTC(date);\r\n }\r\n date.setUTCMinutes(date.getUTCMinutes() - timeZoneOffset);\r\n }\r\n switch (unit) {\r\n case \"day\":\r\n let day = date.getUTCDate();\r\n date.setUTCDate(day + count);\r\n break;\r\n case \"second\":\r\n let seconds = date.getUTCSeconds();\r\n date.setUTCSeconds(seconds + count);\r\n break;\r\n case \"millisecond\":\r\n let milliseconds = date.getUTCMilliseconds();\r\n date.setUTCMilliseconds(milliseconds + count);\r\n break;\r\n case \"hour\":\r\n let hours = date.getUTCHours();\r\n date.setUTCHours(hours + count);\r\n break;\r\n case \"minute\":\r\n let minutes = date.getUTCMinutes();\r\n date.setUTCMinutes(minutes + count);\r\n break;\r\n case \"year\":\r\n let year = date.getUTCFullYear();\r\n date.setUTCFullYear(year + count);\r\n break;\r\n case \"month\":\r\n const endDays = date.getUTCDate();\r\n const startDays = new Date(date.getUTCFullYear(), date.getUTCMonth(), 0).getUTCDate();\r\n let month = date.getUTCMonth();\r\n if (endDays > startDays) {\r\n date.setUTCMonth(month + count, startDays);\r\n }\r\n else {\r\n date.setUTCMonth(month + count);\r\n }\r\n break;\r\n case \"week\":\r\n let wday = date.getUTCDate();\r\n date.setUTCDate(wday + count * 7);\r\n break;\r\n }\r\n if (!utc && unit != \"millisecond\") {\r\n date.setUTCMinutes(date.getUTCMinutes() + timeZoneOffset);\r\n if (unit == \"day\" || unit == \"week\" || unit == \"month\" || unit == \"year\") {\r\n let newTimeZoneOffset = date.getTimezoneOffset();\r\n if (timezone) {\r\n newTimeZoneOffset += timezone.offsetUTC(date);\r\n }\r\n if (newTimeZoneOffset != timeZoneOffset) {\r\n let diff = newTimeZoneOffset - timeZoneOffset;\r\n date.setUTCMinutes(date.getUTCMinutes() + diff);\r\n // solves issues if new time falls back to old time zone\r\n if (date.getTimezoneOffset() != newTimeZoneOffset) {\r\n date.setUTCMinutes(date.getUTCMinutes() - diff);\r\n }\r\n }\r\n }\r\n }\r\n return date;\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function roun(time, unit, count, root, firstTime) {\r\n let firstDate;\r\n if (firstTime != null) {\r\n firstDate = new Date(firstTime);\r\n }\r\n return round(new Date(time), unit, count, root.locale.firstDayOfWeek, root.utc, firstDate, root.timezone).getTime();\r\n}\r\n/**\r\n * \"Rounds\" the date to specific time unit.\r\n *\r\n * @param date Source date\r\n * @param unit Time unit\r\n * @param count Number of units to round to\r\n * @param firstDateOfWeek First day of week\r\n * @param utc Use UTC timezone\r\n * @param firstDate First date to round to\r\n * @param roundMinutes Minutes to round to (some timezones use non-whole hour)\r\n * @param timezone Use specific named timezone when rounding\r\n * @return New date\r\n */\r\nexport function round(date, unit, count, firstDateOfWeek, utc, firstDate, timezone) {\r\n if (!timezone || utc) {\r\n let timeZoneOffset = 0;\r\n if (!utc && unit != \"millisecond\") {\r\n timeZoneOffset = date.getTimezoneOffset();\r\n date.setUTCMinutes(date.getUTCMinutes() - timeZoneOffset);\r\n }\r\n switch (unit) {\r\n case \"day\":\r\n let day = date.getUTCDate();\r\n if (count > 1) {\r\n //\tday = Math.floor(day / count) * count;\r\n if (firstDate) {\r\n firstDate = round(firstDate, \"day\", 1);\r\n let difference = date.getTime() - firstDate.getTime();\r\n let unitCount = Math.floor(difference / getDuration(\"day\") / count);\r\n let duration = getDuration(\"day\", unitCount * count);\r\n date.setTime(firstDate.getTime() + duration - timeZoneOffset * getDuration(\"minute\"));\r\n }\r\n }\r\n else {\r\n date.setUTCDate(day);\r\n }\r\n date.setUTCHours(0, 0, 0, 0);\r\n break;\r\n case \"second\":\r\n let seconds = date.getUTCSeconds();\r\n if (count > 1) {\r\n seconds = Math.floor(seconds / count) * count;\r\n }\r\n date.setUTCSeconds(seconds, 0);\r\n break;\r\n case \"millisecond\":\r\n if (count == 1) {\r\n return date; // much better for perf!\r\n }\r\n let milliseconds = date.getUTCMilliseconds();\r\n milliseconds = Math.floor(milliseconds / count) * count;\r\n date.setUTCMilliseconds(milliseconds);\r\n break;\r\n case \"hour\":\r\n let hours = date.getUTCHours();\r\n if (count > 1) {\r\n hours = Math.floor(hours / count) * count;\r\n }\r\n date.setUTCHours(hours, 0, 0, 0);\r\n break;\r\n case \"minute\":\r\n let minutes = date.getUTCMinutes();\r\n if (count > 1) {\r\n minutes = Math.floor(minutes / count) * count;\r\n }\r\n date.setUTCMinutes(minutes, 0, 0);\r\n break;\r\n case \"month\":\r\n let month = date.getUTCMonth();\r\n if (count > 1) {\r\n // only do this if count is 2, 3, 4, and 6\r\n if (count == 2 || count == 3 || count == 4 || count == 6) {\r\n month = Math.floor(month / count) * count;\r\n }\r\n }\r\n date.setUTCMonth(month, 1);\r\n date.setUTCHours(0, 0, 0, 0);\r\n break;\r\n case \"year\":\r\n let year = date.getUTCFullYear();\r\n if (count > 1) {\r\n year = Math.floor(year / count) * count;\r\n }\r\n date.setUTCFullYear(year, 0, 1);\r\n date.setUTCHours(0, 0, 0, 0);\r\n break;\r\n case \"week\":\r\n if (count > 1) {\r\n if (firstDate) {\r\n firstDate = round(firstDate, \"week\", 1);\r\n let difference = date.getTime() - firstDate.getTime();\r\n let unitCount = Math.floor(difference / getDuration(\"week\") / count);\r\n let duration = getDuration(\"week\", unitCount * count);\r\n date.setTime(firstDate.getTime() + duration - timeZoneOffset * getDuration(\"minute\"));\r\n }\r\n }\r\n let wday = date.getUTCDate();\r\n let weekDay = date.getUTCDay();\r\n if (!$type.isNumber(firstDateOfWeek)) {\r\n firstDateOfWeek = 1;\r\n }\r\n if (weekDay >= firstDateOfWeek) {\r\n wday = wday - weekDay + firstDateOfWeek;\r\n }\r\n else {\r\n wday = wday - (7 + weekDay) + firstDateOfWeek;\r\n }\r\n date.setUTCDate(wday);\r\n date.setUTCHours(0, 0, 0, 0);\r\n break;\r\n }\r\n if (!utc && unit != \"millisecond\") {\r\n date.setUTCMinutes(date.getUTCMinutes() + timeZoneOffset);\r\n if (unit == \"day\" || unit == \"week\" || unit == \"month\" || unit == \"year\") {\r\n let newTimeZoneOffset = date.getTimezoneOffset();\r\n if (newTimeZoneOffset != timeZoneOffset) {\r\n let diff = newTimeZoneOffset - timeZoneOffset;\r\n date.setUTCMinutes(date.getUTCMinutes() + diff);\r\n }\r\n }\r\n }\r\n return date;\r\n }\r\n else {\r\n if (isNaN(date.getTime())) {\r\n return date;\r\n }\r\n let initialTime = date.getTime();\r\n let tzoffset = timezone.offsetUTC(date);\r\n let timeZoneOffset = date.getTimezoneOffset();\r\n let parsedDate = timezone.parseDate(date);\r\n let year = parsedDate.year;\r\n let month = parsedDate.month;\r\n let day = parsedDate.day;\r\n let hour = parsedDate.hour;\r\n let minute = parsedDate.minute;\r\n let second = parsedDate.second;\r\n let millisecond = parsedDate.millisecond;\r\n let weekday = parsedDate.weekday;\r\n let offsetDif = tzoffset - timeZoneOffset;\r\n switch (unit) {\r\n case \"day\":\r\n if (count > 1 && firstDate) {\r\n firstDate = round(firstDate, \"day\", 1, firstDateOfWeek, utc, undefined, timezone);\r\n let difference = date.getTime() - firstDate.getTime();\r\n let unitCount = Math.floor(difference / getDuration(\"day\") / count);\r\n let duration = getDuration(\"day\", unitCount * count);\r\n date.setTime(firstDate.getTime() + duration);\r\n parsedDate = timezone.parseDate(date);\r\n year = parsedDate.year;\r\n month = parsedDate.month;\r\n day = parsedDate.day;\r\n }\r\n hour = 0;\r\n minute = offsetDif;\r\n second = 0;\r\n millisecond = 0;\r\n break;\r\n case \"second\":\r\n minute += offsetDif;\r\n if (count > 1) {\r\n second = Math.floor(second / count) * count;\r\n }\r\n millisecond = 0;\r\n break;\r\n case \"millisecond\":\r\n minute += offsetDif;\r\n if (count > 1) {\r\n millisecond = Math.floor(millisecond / count) * count;\r\n }\r\n break;\r\n case \"hour\":\r\n if (count > 1) {\r\n hour = Math.floor(hour / count) * count;\r\n }\r\n minute = offsetDif;\r\n second = 0;\r\n millisecond = 0;\r\n break;\r\n case \"minute\":\r\n if (count > 1) {\r\n minute = Math.floor(minute / count) * count;\r\n }\r\n minute += offsetDif;\r\n second = 0;\r\n millisecond = 0;\r\n break;\r\n case \"month\":\r\n if (count > 1) {\r\n month = Math.floor(month / count) * count;\r\n }\r\n day = 1;\r\n hour = 0;\r\n minute = offsetDif;\r\n second = 0;\r\n millisecond = 0;\r\n break;\r\n case \"year\":\r\n if (count > 1) {\r\n year = Math.floor(year / count) * count;\r\n }\r\n month = 0;\r\n day = 1;\r\n hour = 0;\r\n minute = offsetDif;\r\n second = 0;\r\n millisecond = 0;\r\n break;\r\n case \"week\":\r\n if (!$type.isNumber(firstDateOfWeek)) {\r\n firstDateOfWeek = 1;\r\n }\r\n if (weekday >= firstDateOfWeek) {\r\n day = day - weekday + firstDateOfWeek;\r\n }\r\n else {\r\n day = day - (7 + weekday) + firstDateOfWeek;\r\n }\r\n hour = 0;\r\n minute = offsetDif;\r\n second = 0;\r\n millisecond = 0;\r\n break;\r\n }\r\n date = new Date(year, month, day, hour, minute, second, millisecond);\r\n // fix to solve #101989\r\n const newTime = date.getTime();\r\n let hDuration = 3600000;\r\n if (unit == \"hour\") {\r\n hDuration = 3600000 * count;\r\n }\r\n if (newTime + hDuration <= initialTime) {\r\n if (unit == \"hour\" || unit == \"minute\" || unit == \"second\" || unit == \"millisecond\") {\r\n date = new Date(newTime + hDuration);\r\n }\r\n }\r\n // end of fix\r\n let newTimeZoneOffset = date.getTimezoneOffset();\r\n let newTzoffset = timezone.offsetUTC(date);\r\n let newDiff = newTzoffset - newTimeZoneOffset;\r\n if (newDiff != offsetDif) {\r\n date.setTime(date.getTime() + (newDiff - offsetDif) * 60000);\r\n }\r\n return date;\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function chooseInterval(index, duration, gridCount, intervals) {\r\n let gridInterval = intervals[index];\r\n let intervalDuration = getIntervalDuration(gridInterval);\r\n let lastIndex = intervals.length - 1;\r\n if (index >= lastIndex) {\r\n return Object.assign({}, intervals[lastIndex]);\r\n }\r\n let count = Math.ceil(duration / intervalDuration);\r\n if (duration < intervalDuration && index > 0) {\r\n return Object.assign({}, intervals[index - 1]);\r\n }\r\n if (count <= gridCount) {\r\n return Object.assign({}, intervals[index]);\r\n }\r\n else {\r\n if (index + 1 < intervals.length) {\r\n return chooseInterval(index + 1, duration, gridCount, intervals);\r\n }\r\n else {\r\n return Object.assign({}, intervals[index]);\r\n }\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function getUnitValue(date, unit) {\r\n switch (unit) {\r\n case \"day\":\r\n return date.getDate();\r\n case \"second\":\r\n return date.getSeconds();\r\n case \"millisecond\":\r\n return date.getMilliseconds();\r\n case \"hour\":\r\n return date.getHours();\r\n case \"minute\":\r\n return date.getMinutes();\r\n case \"month\":\r\n return date.getMonth();\r\n case \"year\":\r\n return date.getFullYear();\r\n case \"week\":\r\n return $utils.getWeek(date);\r\n }\r\n}\r\n//# sourceMappingURL=Time.js.map","import { Theme } from \"../../core/Theme\";\r\nimport { percent, p50, p100 } from \"../../core/util/Percent\";\r\nimport { Color } from \"../../core/util/Color\";\r\nimport { ColorSet } from \"../../core/util/ColorSet\";\r\nimport { setColor } from \"../../themes/DefaultTheme\";\r\nimport * as $time from \"../../core/util/Time\";\r\nimport * as $type from \"../../core/util/Type\";\r\nimport * as $math from \"../../core/util/Math\";\r\nimport * as $object from \"../../core/util/Object\";\r\nimport * as $array from \"../../core/util/Array\";\r\n/**\r\n * @ignore\r\n */\r\nexport class XYChartDefaultTheme extends Theme {\r\n setupDefaultRules() {\r\n super.setupDefaultRules();\r\n const ic = this._root.interfaceColors;\r\n const language = this._root.language;\r\n const r = this.rule.bind(this);\r\n /**\r\n * ========================================================================\r\n * charts/xy\r\n * ========================================================================\r\n */\r\n r(\"XYChart\").setAll({\r\n colors: ColorSet.new(this._root, {}),\r\n paddingLeft: 20,\r\n paddingRight: 20,\r\n paddingTop: 16,\r\n paddingBottom: 16,\r\n panX: false,\r\n panY: false,\r\n wheelStep: 0.25,\r\n arrangeTooltips: true,\r\n pinchZoomX: false,\r\n pinchZoomY: false\r\n });\r\n r(\"XYSeries\").setAll({\r\n legendLabelText: \"{name}\"\r\n });\r\n r(\"Rectangle\", [\"plotbackground\", \"xy\", \"background\"]).setAll({\r\n fill: Color.fromHex(0x000000),\r\n fillOpacity: 0\r\n });\r\n /**\r\n * ------------------------------------------------------------------------\r\n * charts/xy: XYChartScrollbar\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"XYChart\", [\"scrollbar\", \"chart\"]).setAll({\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n paddingTop: 0,\r\n paddingRight: 0,\r\n colors: ColorSet.new(this._root, {\r\n saturation: 0\r\n })\r\n });\r\n {\r\n const rule = r(\"Graphics\", [\"scrollbar\", \"overlay\"]);\r\n rule.setAll({\r\n fillOpacity: 0.5\r\n });\r\n setColor(rule, \"fill\", ic, \"background\");\r\n }\r\n // Class: RoundedRectangle\r\n r(\"RoundedRectangle\", [\"xy\", \"scrollbar\", \"thumb\"]).setAll({\r\n cornerRadiusTR: 0,\r\n cornerRadiusTL: 0,\r\n cornerRadiusBR: 0,\r\n cornerRadiusBL: 0,\r\n fillOpacity: 0,\r\n focusable: true\r\n });\r\n r(\"RoundedRectangle\", [\"xy\", \"scrollbar\", \"thumb\"]).states.create(\"hover\", { fillOpacity: 0.4 });\r\n r(\"RoundedRectangle\", [\"xy\", \"scrollbar\", \"chart\", \"background\"]).setAll({\r\n cornerRadiusTL: 0,\r\n cornerRadiusBL: 0,\r\n cornerRadiusTR: 0,\r\n cornerRadiusBR: 0\r\n });\r\n r(\"RoundedRectangle\", [\"xy\", \"scrollbar\", \"chart\", \"background\", \"resize\", \"button\"]).setAll({\r\n cornerRadiusBL: 40,\r\n cornerRadiusBR: 40,\r\n cornerRadiusTL: 40,\r\n cornerRadiusTR: 40\r\n });\r\n r(\"AxisRendererX\", [\"xy\", \"chart\", \"scrollbar\"]).setAll({\r\n strokeOpacity: 0,\r\n inside: true\r\n });\r\n r(\"AxisRendererY\", [\"xy\", \"chart\", \"scrollbar\"]).setAll({\r\n strokeOpacity: 0,\r\n inside: true,\r\n minGridDistance: 5\r\n });\r\n r(\"AxisLabel\", [\"xy\", \"scrollbar\", \"x\"]).setAll({\r\n opacity: 0.5,\r\n centerY: p100,\r\n minPosition: 0.01,\r\n maxPosition: 0.99,\r\n fontSize: \"0.8em\"\r\n });\r\n r(\"AxisLabel\", [\"category\"]).setAll({\r\n text: \"{category}\",\r\n populateText: true\r\n });\r\n r(\"AxisLabel\", [\"x\"]).setAll({\r\n centerY: 0\r\n });\r\n r(\"AxisLabel\", [\"x\", \"inside\"]).setAll({\r\n centerY: p100\r\n });\r\n r(\"AxisLabel\", [\"x\", \"inside\", \"opposite\"]).setAll({\r\n centerY: 0\r\n });\r\n r(\"AxisLabel\", [\"x\", \"opposite\"]).setAll({\r\n centerY: p100\r\n });\r\n r(\"AxisLabel\", [\"y\"]).setAll({\r\n centerX: p100\r\n });\r\n r(\"AxisLabel\", [\"y\", \"inside\"]).setAll({\r\n centerX: 0\r\n });\r\n r(\"AxisLabel\", [\"y\", \"inside\", \"opposite\"]).setAll({\r\n centerX: p100\r\n });\r\n r(\"AxisLabel\", [\"y\", \"opposite\"]).setAll({\r\n centerX: 0\r\n });\r\n r(\"AxisLabel\", [\"minor\"]).setAll({\r\n fontSize: \"0.6em\"\r\n });\r\n r(\"AxisLabel\", [\"xy\", \"scrollbar\", \"y\"]).setAll({\r\n visible: false\r\n });\r\n // Class: Grid\r\n r(\"Grid\", [\"xy\", \"scrollbar\", \"y\"]).setAll({\r\n visible: false\r\n });\r\n // Class: Grid\r\n r(\"Grid\", [\"xy\", \"scrollbar\", \"x\"]).setAll({\r\n opacity: 0.5\r\n });\r\n /**\r\n * ------------------------------------------------------------------------\r\n * charts/xy: Cursor\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"XYCursor\").setAll({\r\n behavior: \"none\",\r\n layer: 30,\r\n exportable: false,\r\n snapToSeriesBy: \"xy\",\r\n moveThreshold: 1\r\n });\r\n {\r\n const rule = r(\"Grid\", [\"cursor\", \"x\"]);\r\n rule.setAll({\r\n forceInactive: true,\r\n strokeOpacity: 0.8,\r\n strokeDasharray: [2, 2],\r\n role: \"slider\",\r\n ariaLabel: language.translate(\"Use left and right arrows to move selection\")\r\n });\r\n setColor(rule, \"stroke\", ic, \"alternativeBackground\");\r\n }\r\n {\r\n const rule = r(\"Grid\", [\"cursor\", \"y\"]);\r\n rule.setAll({\r\n forceInactive: true,\r\n strokeOpacity: 0.8,\r\n strokeDasharray: [2, 2],\r\n role: \"slider\",\r\n ariaLabel: language.translate(\"Use up and down arrows to move selection\")\r\n });\r\n setColor(rule, \"stroke\", ic, \"alternativeBackground\");\r\n }\r\n {\r\n const rule = r(\"Graphics\", [\"cursor\", \"selection\"]);\r\n rule.setAll({\r\n fillOpacity: 0.15,\r\n });\r\n setColor(rule, \"fill\", ic, \"alternativeBackground\");\r\n }\r\n /**\r\n * ------------------------------------------------------------------------\r\n * charts/xy: Axes\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"Axis\").setAll({\r\n zoomOut: true,\r\n start: 0,\r\n end: 1,\r\n minZoomCount: 1,\r\n maxZoomCount: Infinity,\r\n maxZoomFactor: 1000,\r\n maxDeviation: 0.1,\r\n snapTooltip: true,\r\n tooltipLocation: 0.5,\r\n panX: true,\r\n panY: true,\r\n zoomX: true,\r\n zoomY: true,\r\n fixAxisSize: true\r\n });\r\n r(\"AxisLabel\").setAll({\r\n location: 0.5,\r\n multiLocation: 0,\r\n centerX: p50,\r\n centerY: p50,\r\n paddingTop: 3,\r\n paddingBottom: 3,\r\n paddingLeft: 5,\r\n paddingRight: 5\r\n });\r\n // The following is deprecated following text measuring updates in 5.0.5\r\n // r(\"AxisLabel\", [\"y\"]).setAll({\r\n // \ttextAlign: \"right\"\r\n // });\r\n // r(\"AxisLabel\", [\"y\", \"opposite\"]).setAll({\r\n // \ttextAlign: \"left\"\r\n // });\r\n r(\"Container\", [\"axis\", \"header\"]).setAll({\r\n layer: 30\r\n });\r\n r(\"Rectangle\", [\"axis\", \"header\", \"background\"]).setAll({\r\n crisp: true\r\n });\r\n {\r\n const rule = r(\"AxisRenderer\");\r\n rule.setAll({\r\n crisp: true,\r\n strokeOpacity: 0\r\n });\r\n setColor(rule, \"stroke\", ic, \"grid\");\r\n }\r\n r(\"AxisRendererX\").setAll({\r\n minGridDistance: 120,\r\n opposite: false,\r\n inversed: false,\r\n cellStartLocation: 0,\r\n cellEndLocation: 1,\r\n width: p100\r\n });\r\n r(\"AxisRendererY\").setAll({\r\n minGridDistance: 40,\r\n opposite: false,\r\n inversed: false,\r\n cellStartLocation: 0,\r\n cellEndLocation: 1,\r\n height: p100\r\n });\r\n {\r\n const rule = r(\"Rectangle\", [\"axis\", \"thumb\", \"zoomgrip\"]);\r\n rule.setAll({\r\n fillOpacity: 0\r\n });\r\n setColor(rule, \"fill\", ic, \"alternativeBackground\");\r\n rule.states.create(\"hover\", { fillOpacity: 0.1 });\r\n }\r\n r(\"Rectangle\", [\"axis\", \"thumb\", \"x\", \"zoomgrip\"]).setAll({\r\n cursorOverStyle: \"ew-resize\"\r\n });\r\n r(\"Rectangle\", [\"axis\", \"thumb\", \"y\", \"zoomgrip\"]).setAll({\r\n cursorOverStyle: \"ns-resize\"\r\n });\r\n {\r\n const rule = r(\"Grid\");\r\n rule.setAll({\r\n location: 0,\r\n strokeOpacity: 0.15,\r\n crisp: true\r\n });\r\n setColor(rule, \"stroke\", ic, \"grid\");\r\n }\r\n {\r\n const rule = r(\"Grid\", [\"minor\"]);\r\n rule.setAll({\r\n location: 0,\r\n strokeOpacity: 0.07,\r\n crisp: true\r\n });\r\n setColor(rule, \"stroke\", ic, \"grid\");\r\n }\r\n r(\"Grid\", [\"base\"]).setAll({\r\n strokeOpacity: 0.3\r\n });\r\n {\r\n const rule = r(\"Graphics\", [\"axis\", \"fill\"]);\r\n rule.setAll({\r\n visible: false,\r\n isMeasured: false,\r\n position: \"absolute\",\r\n fillOpacity: 0.05,\r\n });\r\n setColor(rule, \"fill\", ic, \"alternativeBackground\");\r\n }\r\n r(\"Graphics\", [\"axis\", \"fill\", \"range\"]).setAll({\r\n isMeasured: true\r\n });\r\n // hides all elements of series axis range\r\n r(\"Graphics\", [\"series\", \"fill\", \"range\"]).setAll({\r\n visible: false,\r\n isMeasured: true\r\n });\r\n r(\"Grid\", [\"series\", \"range\"]).setAll({\r\n visible: false\r\n });\r\n r(\"AxisTick\", [\"series\", \"range\"]).setAll({\r\n visible: false\r\n });\r\n r(\"AxisLabel\", [\"series\", \"range\"]).setAll({\r\n visible: false\r\n });\r\n {\r\n const rule = r(\"AxisTick\");\r\n rule.setAll({\r\n location: 0.5,\r\n multiLocation: 0,\r\n strokeOpacity: 1,\r\n isMeasured: false,\r\n position: \"absolute\",\r\n visible: false\r\n });\r\n setColor(rule, \"stroke\", ic, \"grid\");\r\n }\r\n r(\"CategoryAxis\").setAll({\r\n startLocation: 0,\r\n endLocation: 1,\r\n fillRule: (dataItem, index) => {\r\n const axisFill = dataItem.get(\"axisFill\");\r\n if (axisFill) {\r\n if (!$type.isNumber(index) || index % 2 == 0) {\r\n axisFill.setPrivate(\"visible\", true);\r\n }\r\n else {\r\n axisFill.setPrivate(\"visible\", false);\r\n }\r\n }\r\n }\r\n });\r\n const gridIntervals = [\r\n { timeUnit: \"millisecond\", count: 1 },\r\n { timeUnit: \"millisecond\", count: 5 },\r\n { timeUnit: \"millisecond\", count: 10 },\r\n { timeUnit: \"millisecond\", count: 50 },\r\n { timeUnit: \"millisecond\", count: 100 },\r\n { timeUnit: \"millisecond\", count: 500 },\r\n { timeUnit: \"second\", count: 1 },\r\n { timeUnit: \"second\", count: 5 },\r\n { timeUnit: \"second\", count: 10 },\r\n { timeUnit: \"second\", count: 30 },\r\n { timeUnit: \"minute\", count: 1 },\r\n { timeUnit: \"minute\", count: 5 },\r\n { timeUnit: \"minute\", count: 10 },\r\n { timeUnit: \"minute\", count: 15 },\r\n { timeUnit: \"minute\", count: 30 },\r\n { timeUnit: \"hour\", count: 1 },\r\n { timeUnit: \"hour\", count: 3 },\r\n { timeUnit: \"hour\", count: 6 },\r\n { timeUnit: \"hour\", count: 12 },\r\n { timeUnit: \"day\", count: 1 },\r\n { timeUnit: \"day\", count: 2 },\r\n { timeUnit: \"day\", count: 3 },\r\n { timeUnit: \"day\", count: 4 },\r\n { timeUnit: \"day\", count: 5 },\r\n { timeUnit: \"week\", count: 1 },\r\n { timeUnit: \"month\", count: 1 },\r\n { timeUnit: \"month\", count: 2 },\r\n { timeUnit: \"month\", count: 3 },\r\n { timeUnit: \"month\", count: 6 },\r\n { timeUnit: \"year\", count: 1 },\r\n { timeUnit: \"year\", count: 2 },\r\n { timeUnit: \"year\", count: 5 },\r\n { timeUnit: \"year\", count: 10 },\r\n { timeUnit: \"year\", count: 50 },\r\n { timeUnit: \"year\", count: 100 },\r\n { timeUnit: \"year\", count: 200 },\r\n { timeUnit: \"year\", count: 500 },\r\n { timeUnit: \"year\", count: 1000 },\r\n { timeUnit: \"year\", count: 2000 },\r\n { timeUnit: \"year\", count: 5000 },\r\n { timeUnit: \"year\", count: 10000 },\r\n { timeUnit: \"year\", count: 100000 }\r\n ];\r\n const dateFormats = {\r\n \"millisecond\": language.translate(\"_date_millisecond\"),\r\n \"second\": language.translate(\"_date_second\"),\r\n \"minute\": language.translate(\"_date_minute\"),\r\n \"hour\": language.translate(\"_date_hour\"),\r\n \"day\": language.translate(\"_date_day\"),\r\n \"week\": language.translate(\"_date_day\"),\r\n \"month\": language.translate(\"_date_month\"),\r\n \"year\": language.translate(\"_date_year\")\r\n };\r\n const periodChangeDateFormats = {\r\n \"millisecond\": language.translate(\"_date_millisecond\"),\r\n \"second\": language.translate(\"_date_second\"),\r\n \"minute\": language.translate(\"_date_minute\"),\r\n \"hour\": language.translate(\"_date_day\"),\r\n \"day\": language.translate(\"_date_day\"),\r\n \"week\": language.translate(\"_date_day\"),\r\n \"month\": language.translate(\"_date_month\") + \" \" + language.translate(\"_date_year\"),\r\n \"year\": language.translate(\"_date_year\")\r\n };\r\n const tooltipDateFormats = {\r\n \"millisecond\": language.translate(\"_date_millisecond_full\"),\r\n \"second\": language.translate(\"_date_second_full\"),\r\n \"minute\": language.translate(\"_date_minute_full\"),\r\n \"hour\": language.translate(\"_date_hour_full\"),\r\n \"day\": language.translate(\"_date_day_full\"),\r\n \"week\": language.translate(\"_date_week_full\"),\r\n \"month\": language.translate(\"_date_month_full\"),\r\n \"year\": language.translate(\"_date_year\")\r\n };\r\n r(\"CategoryDateAxis\").setAll({\r\n markUnitChange: true,\r\n gridIntervals: $array.copy(gridIntervals),\r\n dateFormats: $object.copy(dateFormats),\r\n periodChangeDateFormats: $object.copy(periodChangeDateFormats)\r\n });\r\n r(\"DateAxis\").setAll({\r\n maxZoomFactor: null,\r\n strictMinMax: true,\r\n startLocation: 0,\r\n endLocation: 1,\r\n markUnitChange: true,\r\n groupData: false,\r\n groupCount: 500,\r\n skipFirstMinor: true,\r\n weekLabelLocation: 0,\r\n gridIntervals: $array.copy(gridIntervals),\r\n dateFormats: $object.copy(dateFormats),\r\n periodChangeDateFormats: $object.copy(periodChangeDateFormats),\r\n tooltipDateFormats: tooltipDateFormats,\r\n groupIntervals: [\r\n { timeUnit: \"millisecond\", count: 1 },\r\n { timeUnit: \"millisecond\", count: 10 },\r\n { timeUnit: \"millisecond\", count: 100 },\r\n { timeUnit: \"second\", count: 1 },\r\n { timeUnit: \"second\", count: 10 },\r\n { timeUnit: \"minute\", count: 1 },\r\n { timeUnit: \"minute\", count: 10 },\r\n { timeUnit: \"hour\", count: 1 },\r\n { timeUnit: \"day\", count: 1 },\r\n { timeUnit: \"week\", count: 1 },\r\n { timeUnit: \"month\", count: 1 },\r\n { timeUnit: \"year\", count: 1 }\r\n ],\r\n fillRule: (dataItem) => {\r\n const axisFill = dataItem.get(\"axisFill\");\r\n if (axisFill) {\r\n const axis = dataItem.component;\r\n const value = dataItem.get(\"value\");\r\n const endValue = dataItem.get(\"endValue\");\r\n const intervalDuration = axis.intervalDuration();\r\n const baseInterval = axis.getPrivate(\"baseInterval\");\r\n const gridInterval = axis.getPrivate(\"gridInterval\", baseInterval);\r\n let min = axis.getPrivate(\"min\", 0);\r\n min = $time.round(new Date(min), gridInterval.timeUnit, gridInterval.count, this._root.locale.firstDayOfWeek, this._root.utc, undefined, this._root.timezone).getTime();\r\n if (value != null && endValue != null) {\r\n const val = Math.round(Math.round((value - min) / intervalDuration)) / 2;\r\n if (val == Math.round(val)) {\r\n axisFill.setPrivate(\"visible\", true);\r\n }\r\n else {\r\n axisFill.setPrivate(\"visible\", false);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n r(\"GaplessDateAxis\").setAll({\r\n fillRule: (dataItem) => {\r\n const axisFill = dataItem.get(\"axisFill\");\r\n if (axisFill) {\r\n const index = dataItem.get(\"index\");\r\n let visible = false;\r\n if (!$type.isNumber(index) || index % 2 == 0) {\r\n visible = true;\r\n }\r\n axisFill.setPrivate(\"visible\", visible);\r\n }\r\n }\r\n });\r\n r(\"ValueAxis\").setAll({\r\n baseValue: 0,\r\n logarithmic: false,\r\n strictMinMax: false,\r\n autoZoom: true,\r\n fillRule: (dataItem) => {\r\n const axisFill = dataItem.get(\"axisFill\");\r\n if (axisFill) {\r\n const axis = dataItem.component;\r\n const value = dataItem.get(\"value\");\r\n const step = axis.getPrivate(\"step\");\r\n if ($type.isNumber(value) && $type.isNumber(step)) {\r\n if ($math.round(value / step / 2, 5) == Math.round(value / step / 2)) {\r\n axisFill.setPrivate(\"visible\", false);\r\n }\r\n else {\r\n axisFill.setPrivate(\"visible\", true);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n r(\"DurationAxis\").setAll({\r\n baseUnit: \"second\"\r\n });\r\n /**\r\n * ------------------------------------------------------------------------\r\n * charts/xy: Series\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"XYSeries\").setAll({\r\n maskBullets: true,\r\n stackToNegative: true,\r\n locationX: 0.5,\r\n locationY: 0.5,\r\n snapTooltip: false,\r\n openValueXGrouped: \"open\",\r\n openValueYGrouped: \"open\",\r\n valueXGrouped: \"close\",\r\n valueYGrouped: \"close\",\r\n seriesTooltipTarget: \"series\"\r\n });\r\n r(\"BaseColumnSeries\").setAll({\r\n adjustBulletPosition: true\r\n });\r\n r(\"ColumnSeries\").setAll({\r\n clustered: true\r\n });\r\n r(\"RoundedRectangle\", [\"series\", \"column\"]).setAll({\r\n position: \"absolute\",\r\n isMeasured: false,\r\n width: percent(70),\r\n height: percent(70),\r\n strokeWidth: 1,\r\n strokeOpacity: 1,\r\n cornerRadiusBL: 0,\r\n cornerRadiusTL: 0,\r\n cornerRadiusBR: 0,\r\n cornerRadiusTR: 0,\r\n fillOpacity: 1,\r\n role: \"figure\"\r\n });\r\n r(\"LineSeries\").setAll({\r\n connect: true,\r\n autoGapCount: 1.1,\r\n stackToNegative: false\r\n });\r\n r(\"Graphics\", [\"series\", \"stroke\"]).setAll({\r\n position: \"absolute\",\r\n strokeWidth: 1,\r\n strokeOpacity: 1,\r\n isMeasured: false\r\n });\r\n r(\"Graphics\", [\"series\", \"fill\"]).setAll({\r\n visible: false,\r\n fillOpacity: 0,\r\n position: \"absolute\",\r\n strokeWidth: 0,\r\n strokeOpacity: 0,\r\n isMeasured: false\r\n });\r\n r(\"Graphics\", [\"line\", \"series\", \"legend\", \"marker\", \"stroke\"]).setAll({\r\n draw: (display, sprite) => {\r\n const parent = sprite.parent;\r\n if (parent) {\r\n const h = parent.height();\r\n const w = parent.width();\r\n display.moveTo(0, h / 2);\r\n display.lineTo(w, h / 2);\r\n }\r\n }\r\n });\r\n {\r\n const rule = r(\"Graphics\", [\"line\", \"series\", \"legend\", \"marker\", \"stroke\"]).states.create(\"disabled\", {});\r\n setColor(rule, \"stroke\", ic, \"disabled\");\r\n }\r\n r(\"Graphics\", [\"line\", \"series\", \"legend\", \"marker\", \"fill\"]).setAll({\r\n draw: (display, sprite) => {\r\n const parent = sprite.parent;\r\n if (parent) {\r\n const h = parent.height();\r\n const w = parent.width();\r\n display.moveTo(0, 0);\r\n display.lineTo(w, 0);\r\n display.lineTo(w, h);\r\n display.lineTo(0, h);\r\n display.lineTo(0, 0);\r\n }\r\n }\r\n });\r\n {\r\n const rule = r(\"Graphics\", [\"line\", \"series\", \"legend\", \"marker\", \"fill\"]).states.create(\"disabled\", {});\r\n setColor(rule, \"stroke\", ic, \"disabled\");\r\n }\r\n r(\"SmoothedXYLineSeries\").setAll({\r\n tension: 0.5\r\n });\r\n r(\"SmoothedXLineSeries\").setAll({\r\n tension: 0.5\r\n });\r\n r(\"SmoothedYLineSeries\").setAll({\r\n tension: 0.5\r\n });\r\n r(\"Candlestick\").setAll({\r\n position: \"absolute\",\r\n isMeasured: false,\r\n width: percent(50),\r\n height: percent(50),\r\n strokeWidth: 1,\r\n strokeOpacity: 1,\r\n cornerRadiusBL: 0,\r\n cornerRadiusTL: 0,\r\n cornerRadiusBR: 0,\r\n cornerRadiusTR: 0,\r\n fillOpacity: 1,\r\n role: \"figure\"\r\n });\r\n r(\"OHLC\").setAll({\r\n width: percent(80),\r\n height: percent(80)\r\n });\r\n r(\"CandlestickSeries\").setAll({\r\n lowValueXGrouped: \"low\",\r\n lowValueYGrouped: \"low\",\r\n highValueXGrouped: \"high\",\r\n highValueYGrouped: \"high\",\r\n openValueXGrouped: \"open\",\r\n openValueYGrouped: \"open\",\r\n valueXGrouped: \"close\",\r\n valueYGrouped: \"close\"\r\n });\r\n // These rules can be used for regular columns, too\r\n {\r\n const rule = r(\"Rectangle\", [\"column\", \"autocolor\"]).states.create(\"riseFromOpen\", {});\r\n setColor(rule, \"fill\", ic, \"positive\");\r\n setColor(rule, \"stroke\", ic, \"positive\");\r\n }\r\n {\r\n const rule = r(\"Rectangle\", [\"column\", \"autocolor\"]).states.create(\"dropFromOpen\", {});\r\n setColor(rule, \"fill\", ic, \"negative\");\r\n setColor(rule, \"stroke\", ic, \"negative\");\r\n }\r\n // Hollow\r\n r(\"Rectangle\", [\"column\", \"autocolor\", \"pro\"]).states.create(\"riseFromOpen\", { fillOpacity: 0 });\r\n r(\"Rectangle\", [\"column\", \"autocolor\", \"pro\"]).states.create(\"dropFromOpen\", { fillOpacity: 1 });\r\n {\r\n const rule = r(\"Rectangle\", [\"column\", \"autocolor\", \"pro\"]).states.create(\"riseFromPrevious\", {});\r\n setColor(rule, \"fill\", ic, \"positive\");\r\n setColor(rule, \"stroke\", ic, \"positive\");\r\n }\r\n {\r\n const rule = r(\"Rectangle\", [\"column\", \"autocolor\", \"pro\"]).states.create(\"dropFromPrevious\", {});\r\n setColor(rule, \"fill\", ic, \"negative\");\r\n setColor(rule, \"stroke\", ic, \"negative\");\r\n }\r\n // AXIS RANGE GRIP\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"rangegrip\"]);\r\n rule.setAll({\r\n strokeOpacity: 0,\r\n fillOpacity: 0,\r\n strokeWidth: 1,\r\n width: 12,\r\n height: 12\r\n });\r\n }\r\n {\r\n const rule = r(\"Graphics\", [\"rangegrip\", \"button\", \"icon\"]);\r\n rule.setAll({\r\n interactive: false,\r\n crisp: true,\r\n strokeOpacity: 0.5,\r\n draw: (display) => {\r\n display.moveTo(0, 0.5);\r\n display.lineTo(0, 12.5);\r\n display.moveTo(2, 0.5);\r\n display.lineTo(2, 12.5);\r\n display.moveTo(4, 0.5);\r\n display.lineTo(4, 12.5);\r\n }\r\n });\r\n setColor(rule, \"stroke\", ic, \"secondaryButtonText\");\r\n }\r\n r(\"Button\", [\"rangegrip\"]).setAll({\r\n draggable: true,\r\n paddingTop: 0,\r\n paddingBottom: 0\r\n });\r\n r(\"Button\", [\"rangegrip\", \"vertical\"]).setAll({\r\n rotation: 90,\r\n cursorOverStyle: \"ns-resize\",\r\n centerX: p50\r\n });\r\n r(\"Button\", [\"rangegrip\", \"horizontal\"]).setAll({\r\n cursorOverStyle: \"ew-resize\",\r\n centerX: p50\r\n });\r\n r(\"Button\", [\"rangegrip\", \"vertical\", \"left\"]).setAll({\r\n centerY: p100\r\n });\r\n r(\"Button\", [\"rangegrip\", \"vertical\", \"right\"]).setAll({\r\n centerY: 0\r\n });\r\n r(\"Button\", [\"rangegrip\", \"horizontal\", \"top\"]).setAll({\r\n centerY: 0\r\n });\r\n r(\"Button\", [\"rangegrip\", \"horizontal\", \"bottom\"]).setAll({\r\n centerY: p100\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=XYChartDefaultTheme.js.map","import { Container } from \"../../core/render/Container\";\r\nimport { p100 } from \"../../core/util/Percent\";\r\n/**\r\n * A base class for all charts.\r\n */\r\nexport class Chart extends Container {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * A [[Container]] chart places its elements in.\r\n *\r\n * @default Container.new()\r\n */\r\n this.chartContainer = this.children.push(Container.new(this._root, { width: p100, height: p100, interactiveChildren: false }));\r\n /**\r\n * A [[Container]] chart places its bullets in.\r\n *\r\n * @default Container.new()\r\n */\r\n this.bulletsContainer = Container.new(this._root, { interactiveChildren: false, isMeasured: false, position: \"absolute\", width: p100, height: p100 });\r\n }\r\n}\r\nChart.className = \"Chart\";\r\nChart.classNames = Container.classNames.concat([Chart.className]);\r\n//# sourceMappingURL=Chart.js.map","import { Chart } from \"./Chart\";\r\nimport { Container } from \"../../core/render/Container\";\r\nimport { ListAutoDispose } from \"../../core/util/List\";\r\nimport { p100 } from \"../../core/util/Percent\";\r\nimport * as $array from \"../../core/util/Array\";\r\n/**\r\n * A base class for all series-based charts.\r\n */\r\nexport class SerialChart extends Chart {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * A [[Container]] where chart will store all series.\r\n *\r\n * @default Container.new()\r\n */\r\n this.seriesContainer = Container.new(this._root, { width: p100, height: p100, isMeasured: false });\r\n /**\r\n * A list of chart's series.\r\n */\r\n this.series = new ListAutoDispose();\r\n }\r\n _afterNew() {\r\n super._afterNew();\r\n this._disposers.push(this.series);\r\n const children = this.seriesContainer.children;\r\n this._disposers.push(this.series.events.onAll((change) => {\r\n if (change.type === \"clear\") {\r\n $array.each(change.oldValues, (series) => {\r\n this._removeSeries(series);\r\n });\r\n const colors = this.get(\"colors\");\r\n if (colors) {\r\n colors.reset();\r\n }\r\n const patterns = this.get(\"patterns\");\r\n if (patterns) {\r\n patterns.reset();\r\n }\r\n }\r\n else if (change.type === \"push\") {\r\n children.moveValue(change.newValue);\r\n this._processSeries(change.newValue);\r\n }\r\n else if (change.type === \"setIndex\") {\r\n children.setIndex(change.index, change.newValue);\r\n this._processSeries(change.newValue);\r\n }\r\n else if (change.type === \"insertIndex\") {\r\n children.insertIndex(change.index, change.newValue);\r\n this._processSeries(change.newValue);\r\n }\r\n else if (change.type === \"removeIndex\") {\r\n this._removeSeries(change.oldValue);\r\n }\r\n else if (change.type === \"moveIndex\") {\r\n children.moveValue(change.value, change.newIndex);\r\n this._processSeries(change.value);\r\n }\r\n else if (change.type === \"swap\") {\r\n const a = change.a;\r\n const b = change.b;\r\n const aIndex = this.series.indexOf(a);\r\n const bIndex = this.series.indexOf(b);\r\n children.moveValue(a, bIndex);\r\n children.moveValue(b, aIndex);\r\n this.series.each((series) => {\r\n this._processSeries(series);\r\n series.markDirtyValues();\r\n });\r\n }\r\n else {\r\n throw new Error(\"Unknown IListEvent type\");\r\n }\r\n }));\r\n }\r\n _processSeries(series) {\r\n series.chart = this;\r\n series._placeBulletsContainer(this);\r\n }\r\n _removeSeries(series) {\r\n series._handleRemoved();\r\n if (!series.isDisposed()) {\r\n this.seriesContainer.children.removeValue(series);\r\n series._removeBulletsContainer();\r\n }\r\n }\r\n}\r\nSerialChart.className = \"SerialChart\";\r\nSerialChart.classNames = Chart.classNames.concat([SerialChart.className]);\r\n//# sourceMappingURL=SerialChart.js.map","import * as $type from \"../util/Type\";\r\nimport * as $math from \"../util/Math\";\r\nimport * as $utils from \"../util/Utils\";\r\nimport { Rectangle } from \"./Rectangle\";\r\n/**\r\n * Draws a rectangle with rounded corners.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/graphics/} for more info\r\n * @important\r\n */\r\nexport class RoundedRectangle extends Rectangle {\r\n _beforeChanged() {\r\n super._beforeChanged();\r\n if (this.isDirty(\"cornerRadiusTL\") || this.isDirty(\"cornerRadiusTR\") || this.isDirty(\"cornerRadiusBR\") || this.isDirty(\"cornerRadiusBL\")) {\r\n this._clear = true;\r\n }\r\n }\r\n _draw() {\r\n let width = this.width();\r\n let height = this.height();\r\n let wSign = width / Math.abs(width);\r\n let hSign = height / Math.abs(height);\r\n let x = 0;\r\n let y = 0;\r\n const strokeWidth = this.get(\"strokeWidth\", 0);\r\n if (this.get(\"containStroke\", false)) {\r\n width -= wSign * strokeWidth;\r\n height -= hSign * strokeWidth;\r\n x += wSign * strokeWidth / 2;\r\n y += hSign * strokeWidth / 2;\r\n }\r\n let w = width;\r\n let h = height;\r\n if ($type.isNumber(w) && $type.isNumber(h)) {\r\n let minSide = Math.min(w, h) / 2;\r\n let crtl = $utils.relativeToValue(this.get(\"cornerRadiusTL\", 8), minSide);\r\n let crtr = $utils.relativeToValue(this.get(\"cornerRadiusTR\", 8), minSide);\r\n let crbr = $utils.relativeToValue(this.get(\"cornerRadiusBR\", 8), minSide);\r\n let crbl = $utils.relativeToValue(this.get(\"cornerRadiusBL\", 8), minSide);\r\n let maxcr = Math.min(Math.abs(w / 2), Math.abs(h / 2));\r\n crtl = $math.fitToRange(crtl, 0, maxcr);\r\n crtr = $math.fitToRange(crtr, 0, maxcr);\r\n crbr = $math.fitToRange(crbr, 0, maxcr);\r\n crbl = $math.fitToRange(crbl, 0, maxcr);\r\n const display = this._display;\r\n display.moveTo(x + crtl * wSign, y);\r\n display.lineTo(x + w - crtr * wSign, y);\r\n if (crtr > 0) {\r\n display.arcTo(x + w, y, x + w, y + crtr * hSign, crtr);\r\n }\r\n display.lineTo(x + w, y + h - crbr * hSign);\r\n if (crbr > 0) {\r\n display.arcTo(x + w, y + h, x + w - crbr * wSign, y + h, crbr);\r\n }\r\n display.lineTo(x + crbl * wSign, y + h);\r\n if (crbl > 0) {\r\n display.arcTo(x, y + h, x, y + h - crbl * hSign, crbl);\r\n }\r\n display.lineTo(x, y + crtl * hSign);\r\n if (crtl > 0) {\r\n display.arcTo(x, y, x + crtl * wSign, y, crtl);\r\n }\r\n display.closePath();\r\n }\r\n }\r\n}\r\nRoundedRectangle.className = \"RoundedRectangle\";\r\nRoundedRectangle.classNames = Rectangle.classNames.concat([RoundedRectangle.className]);\r\n//# sourceMappingURL=RoundedRectangle.js.map","import { RoundedRectangle } from \"../render/RoundedRectangle\";\r\nimport { Container } from \"./Container\";\r\nimport * as $utils from \"../../core/util/Utils\";\r\n/**\r\n * Draws an interactive button.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/buttons/} for more info\r\n * @important\r\n */\r\nexport class Button extends Container {\r\n _afterNew() {\r\n this._settings.themeTags = $utils.mergeTags(this._settings.themeTags, [\"button\"]);\r\n super._afterNew();\r\n if (!this._settings.background) {\r\n this.set(\"background\", RoundedRectangle.new(this._root, {\r\n themeTags: $utils.mergeTags(this._settings.themeTags, [\"background\"])\r\n }));\r\n }\r\n this.setPrivate(\"trustBounds\", true);\r\n }\r\n _prepareChildren() {\r\n super._prepareChildren();\r\n if (this.isDirty(\"icon\")) {\r\n const previous = this._prevSettings.icon;\r\n const icon = this.get(\"icon\");\r\n if (icon !== previous) {\r\n this._disposeProperty(\"icon\");\r\n if (previous) {\r\n previous.dispose();\r\n }\r\n if (icon) {\r\n this.children.push(icon);\r\n }\r\n this._prevSettings.icon = icon;\r\n }\r\n }\r\n if (this.isDirty(\"label\")) {\r\n const previous = this._prevSettings.label;\r\n const label = this.get(\"label\");\r\n if (label !== previous) {\r\n this._disposeProperty(\"label\");\r\n if (previous) {\r\n previous.dispose();\r\n }\r\n if (label) {\r\n this.children.push(label);\r\n }\r\n this._prevSettings.label = label;\r\n }\r\n }\r\n }\r\n}\r\nButton.className = \"Button\";\r\nButton.classNames = Container.classNames.concat([Button.className]);\r\n//# sourceMappingURL=Button.js.map",";\r\nimport { XYChartDefaultTheme } from \"./XYChartDefaultTheme\";\r\nimport { Container } from \"../../core/render/Container\";\r\nimport { Rectangle } from \"../../core/render/Rectangle\";\r\nimport { SerialChart } from \"../../core/render/SerialChart\";\r\nimport { ListAutoDispose } from \"../../core/util/List\";\r\nimport { p100 } from \"../../core/util/Percent\";\r\nimport { Button } from \"../../core/render/Button\";\r\nimport { Graphics } from \"../../core/render/Graphics\";\r\nimport { Percent } from \"../../core/util/Percent\";\r\nimport * as $array from \"../../core/util/Array\";\r\nimport * as $type from \"../../core/util/Type\";\r\nimport * as $order from \"../../core/util/Order\";\r\nimport * as $object from \"../../core/util/Object\";\r\nimport * as $utils from \"../../core/util/Utils\";\r\nimport * as $math from \"../../core/util/Math\";\r\n/**\r\n * Creates an XY chart.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/} for more info\r\n * @important\r\n */\r\nexport class XYChart extends SerialChart {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * A list of horizontal axes.\r\n */\r\n this.xAxes = new ListAutoDispose();\r\n /**\r\n * A list of vertical axes.\r\n */\r\n this.yAxes = new ListAutoDispose();\r\n /**\r\n * A [[Container]] located on top of the chart, used to store top horizontal\r\n * axes.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/xy-chart-containers/} for more info\r\n * @default Container.new()\r\n */\r\n this.topAxesContainer = this.chartContainer.children.push(Container.new(this._root, { width: p100, layout: this._root.verticalLayout }));\r\n /**\r\n * A [[Container]] located in the middle the chart, used to store vertical axes\r\n * and plot area container.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/xy-chart-containers/} for more info\r\n * @default Container.new()\r\n */\r\n this.yAxesAndPlotContainer = this.chartContainer.children.push(Container.new(this._root, { width: p100, height: p100, layout: this._root.horizontalLayout }));\r\n /**\r\n * A [[Container]] located on bottom of the chart, used to store bottom\r\n * horizontal axes.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/xy-chart-containers/} for more info\r\n * @default Container.new()\r\n */\r\n this.bottomAxesContainer = this.chartContainer.children.push(Container.new(this._root, { width: p100, layout: this._root.verticalLayout }));\r\n /**\r\n * A [[Container]] located on left of the chart, used to store left-hand\r\n * vertical axes.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/xy-chart-containers/} for more info\r\n * @default Container.new()\r\n */\r\n this.leftAxesContainer = this.yAxesAndPlotContainer.children.push(Container.new(this._root, { height: p100, layout: this._root.horizontalLayout }));\r\n /**\r\n * A [[Container]] located in the middle of the chart, used to store plotContainer and topPlotContainer\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/xy-chart-containers/} for more info\r\n * @default Container.new()\r\n */\r\n this.plotsContainer = this.yAxesAndPlotContainer.children.push(Container.new(this._root, { width: p100, height: p100, maskContent: false }));\r\n /**\r\n * A [[Container]] located in the middle of the chart, used to store actual\r\n * plots (series).\r\n *\r\n * NOTE: `plotContainer` will automatically have its `background` preset. If\r\n * you need to modify background or outline for chart's plot area, you can\r\n * use `plotContainer.get(\"background\")` for that.*\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/xy-chart-containers/} for more info\r\n * @default Container.new()\r\n */\r\n this.plotContainer = this.plotsContainer.children.push(Container.new(this._root, { width: p100, height: p100 }));\r\n /**\r\n * A [[Container]] used for any elements that need to be displayed over\r\n * regular `plotContainer`.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/xy-chart-containers/} for more info\r\n * @default Container.new()\r\n */\r\n this.topPlotContainer = this.plotsContainer.children.push(Container.new(this._root, { width: p100, height: p100 }));\r\n /**\r\n * A [[Container]] axis grid elements are stored in.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/xy-chart-containers/} for more info\r\n * @default Container.new()\r\n */\r\n this.gridContainer = this.plotContainer.children.push(Container.new(this._root, { width: p100, height: p100, isMeasured: false }));\r\n /**\r\n * A [[Container]] axis background grid elements are stored in.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/xy-chart-containers/} for more info\r\n * @default Container.new()\r\n */\r\n this.topGridContainer = Container.new(this._root, { width: p100, height: p100, isMeasured: false });\r\n /**\r\n * A [[Container]] located on right of the chart, used to store right-hand\r\n * vertical axes.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/xy-chart-containers/} for more info\r\n * @default Container.new()\r\n */\r\n this.rightAxesContainer = this.yAxesAndPlotContainer.children.push(Container.new(this._root, { height: p100, layout: this._root.horizontalLayout }));\r\n /**\r\n * A [[Container]] axis headers are stored in.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/axes/axis-headers/} for more info\r\n * @default Container.new()\r\n */\r\n this.axisHeadersContainer = this.plotContainer.children.push(Container.new(this._root, {}));\r\n /**\r\n * A button that is shown when chart is not fully zoomed out.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/zoom-and-pan/#Zoom_out_button} for more info\r\n * @default Button.new()\r\n */\r\n this.zoomOutButton = this.topPlotContainer.children.push(Button.new(this._root, {\r\n themeTags: [\"zoom\"],\r\n icon: Graphics.new(this._root, {\r\n themeTags: [\"button\", \"icon\"]\r\n })\r\n }));\r\n this._movePoint = { x: 0, y: 0 };\r\n this._movePoints = {};\r\n }\r\n _afterNew() {\r\n this._defaultThemes.push(XYChartDefaultTheme.new(this._root));\r\n super._afterNew();\r\n this._disposers.push(this.xAxes);\r\n this._disposers.push(this.yAxes);\r\n const root = this._root;\r\n let verticalLayout = this._root.verticalLayout;\r\n const zoomOutButton = this.zoomOutButton;\r\n zoomOutButton.events.on(\"click\", () => {\r\n this.zoomOut();\r\n });\r\n zoomOutButton.hide(0);\r\n zoomOutButton.states.lookup(\"default\").set(\"opacity\", 1);\r\n this.chartContainer.set(\"layout\", verticalLayout);\r\n const plotContainer = this.plotContainer;\r\n plotContainer.children.push(this.seriesContainer);\r\n this._disposers.push(this._processAxis(this.xAxes, this.bottomAxesContainer));\r\n this._disposers.push(this._processAxis(this.yAxes, this.leftAxesContainer));\r\n plotContainer.children.push(this.topGridContainer);\r\n plotContainer.children.push(this.bulletsContainer);\r\n // Setting trasnparent background so that full body of the plot container\r\n // is interactive\r\n plotContainer.set(\"interactive\", true);\r\n plotContainer.set(\"interactiveChildren\", false);\r\n plotContainer.set(\"background\", Rectangle.new(root, {\r\n themeTags: [\"plotbackground\", \"xy\", \"background\"]\r\n }));\r\n this._disposers.push(plotContainer.events.on(\"pointerdown\", (event) => {\r\n this._handlePlotDown(event);\r\n }));\r\n this._disposers.push(plotContainer.events.on(\"globalpointerup\", (event) => {\r\n this._handlePlotUp(event);\r\n }));\r\n this._disposers.push(plotContainer.events.on(\"globalpointermove\", (event) => {\r\n this._handlePlotMove(event);\r\n }));\r\n this._maskGrid();\r\n this._setUpTouch();\r\n }\r\n _beforeChanged() {\r\n super._beforeChanged();\r\n if (this.isDirty(\"pinchZoomX\") || this.isDirty(\"pinchZoomY\") || this.get(\"panX\") || this.get(\"panY\")) {\r\n this._setUpTouch();\r\n }\r\n }\r\n _setUpTouch() {\r\n if (!this.plotContainer._display.cancelTouch) {\r\n this.plotContainer._display.cancelTouch = (this.get(\"pinchZoomX\") || this.get(\"pinchZoomY\") || this.get(\"panX\") || this.get(\"panY\")) ? true : false;\r\n }\r\n }\r\n _maskGrid() {\r\n this.gridContainer.set(\"maskContent\", true);\r\n this.topGridContainer.set(\"maskContent\", true);\r\n }\r\n _removeSeries(series) {\r\n series._unstack();\r\n if (series._posXDp) {\r\n series._posXDp.dispose();\r\n }\r\n if (series._posYDp) {\r\n series._posYDp.dispose();\r\n }\r\n series.set(\"baseAxis\", undefined);\r\n const xAxis = series.get(\"xAxis\");\r\n if (xAxis) {\r\n $array.remove(xAxis.series, series);\r\n xAxis.markDirtyExtremes();\r\n }\r\n const yAxis = series.get(\"yAxis\");\r\n if (yAxis) {\r\n $array.remove(yAxis.series, series);\r\n yAxis.markDirtyExtremes();\r\n }\r\n const cursor = this.get(\"cursor\");\r\n if (cursor) {\r\n const snapToSeries = cursor.get(\"snapToSeries\");\r\n if (snapToSeries) {\r\n $array.remove(snapToSeries, series);\r\n }\r\n }\r\n super._removeSeries(series);\r\n }\r\n _applyThemes(force = false) {\r\n const colors = this.get(\"colors\");\r\n if (colors) {\r\n colors.reset();\r\n }\r\n const changed = super._applyThemes(force);\r\n return changed;\r\n }\r\n /**\r\n * This method is invoked when mouse wheel is used over chart's plot\r\n * container, and handles zooming/pan.\r\n *\r\n * You can invoke this method manually, if you need to mimic chart's wheel\r\n * behavior over other elements of the chart.\r\n */\r\n handleWheel(event) {\r\n const wheelX = this.get(\"wheelX\");\r\n const wheelY = this.get(\"wheelY\");\r\n const plotContainer = this.plotContainer;\r\n const wheelEvent = event.originalEvent;\r\n // Ignore wheel event if it is happening on a non-chart element, e.g. if\r\n // some page element is over the chart.\r\n let prevent = false;\r\n if ($utils.isLocalEvent(wheelEvent, this)) {\r\n prevent = true;\r\n }\r\n else {\r\n return;\r\n }\r\n const plotPoint = plotContainer.toLocal(event.point);\r\n const wheelStep = this.get(\"wheelStep\", 0.2);\r\n const shiftY = wheelEvent.deltaY / 100;\r\n const shiftX = wheelEvent.deltaX / 100;\r\n const wheelZoomPositionX = this.get(\"wheelZoomPositionX\");\r\n const wheelZoomPositionY = this.get(\"wheelZoomPositionY\");\r\n if ((wheelX === \"zoomX\" || wheelX === \"zoomXY\") && shiftX != 0) {\r\n this.xAxes.each((axis) => {\r\n if (axis.get(\"zoomX\")) {\r\n let start = axis.get(\"start\");\r\n let end = axis.get(\"end\");\r\n let position = axis.fixPosition(plotPoint.x / plotContainer.width());\r\n if (wheelZoomPositionX != null) {\r\n position = wheelZoomPositionX;\r\n }\r\n let maxDeviation = axis.get(\"maxDeviation\", 0);\r\n let newStart = Math.min(1 + maxDeviation, Math.max(-maxDeviation, start - wheelStep * (end - start) * shiftX * position));\r\n let newEnd = Math.max(-maxDeviation, Math.min(1 + maxDeviation, end + wheelStep * (end - start) * shiftX * (1 - position)));\r\n if (newStart == start && newEnd == end) {\r\n prevent = false;\r\n }\r\n if (1 / (newEnd - newStart) < axis.getPrivate(\"maxZoomFactor\", Infinity) / axis.get(\"minZoomCount\", 1)) {\r\n this._handleWheelAnimation(axis.zoom(newStart, newEnd));\r\n }\r\n else {\r\n prevent = false;\r\n }\r\n }\r\n });\r\n }\r\n if ((wheelY === \"zoomX\" || wheelY === \"zoomXY\") && shiftY != 0) {\r\n this.xAxes.each((axis) => {\r\n if (axis.get(\"zoomX\")) {\r\n let start = axis.get(\"start\");\r\n let end = axis.get(\"end\");\r\n let position = axis.fixPosition(plotPoint.x / plotContainer.width());\r\n if (wheelZoomPositionX != null) {\r\n position = wheelZoomPositionX;\r\n }\r\n let maxDeviation = axis.get(\"maxDeviation\", 0);\r\n let newStart = Math.min(1 + maxDeviation, Math.max(-maxDeviation, start - wheelStep * (end - start) * shiftY * position));\r\n let newEnd = Math.max(-maxDeviation, Math.min(1 + maxDeviation, end + wheelStep * (end - start) * shiftY * (1 - position)));\r\n if (newStart == start && newEnd == end) {\r\n prevent = false;\r\n }\r\n if (1 / (newEnd - newStart) < axis.getPrivate(\"maxZoomFactor\", Infinity) / axis.get(\"minZoomCount\", 1)) {\r\n this._handleWheelAnimation(axis.zoom(newStart, newEnd));\r\n }\r\n else {\r\n prevent = false;\r\n }\r\n }\r\n });\r\n }\r\n if ((wheelX === \"zoomY\" || wheelX === \"zoomXY\") && shiftX != 0) {\r\n this.yAxes.each((axis) => {\r\n if (axis.get(\"zoomY\")) {\r\n let start = axis.get(\"start\");\r\n let end = axis.get(\"end\");\r\n let position = axis.fixPosition(plotPoint.y / plotContainer.height());\r\n if (wheelZoomPositionY != null) {\r\n position = wheelZoomPositionY;\r\n }\r\n let maxDeviation = axis.get(\"maxDeviation\", 0);\r\n let newStart = Math.min(1 + maxDeviation, Math.max(-maxDeviation, start - wheelStep * (end - start) * shiftX * position));\r\n let newEnd = Math.max(-maxDeviation, Math.min(1 + maxDeviation, end + wheelStep * (end - start) * shiftX * (1 - position)));\r\n if (newStart == start && newEnd == end) {\r\n prevent = false;\r\n }\r\n if (1 / (newEnd - newStart) < axis.getPrivate(\"maxZoomFactor\", Infinity) / axis.get(\"minZoomCount\", 1)) {\r\n this._handleWheelAnimation(axis.zoom(newStart, newEnd));\r\n }\r\n else {\r\n prevent = false;\r\n }\r\n }\r\n });\r\n }\r\n if ((wheelY === \"zoomY\" || wheelY === \"zoomXY\") && shiftY != 0) {\r\n this.yAxes.each((axis) => {\r\n if (axis.get(\"zoomY\")) {\r\n let start = axis.get(\"start\");\r\n let end = axis.get(\"end\");\r\n let position = axis.fixPosition(plotPoint.y / plotContainer.height());\r\n if (wheelZoomPositionY != null) {\r\n position = wheelZoomPositionY;\r\n }\r\n let maxDeviation = axis.get(\"maxDeviation\", 0);\r\n let newStart = Math.min(1 + maxDeviation, Math.max(-maxDeviation, start - wheelStep * (end - start) * shiftY * position));\r\n let newEnd = Math.max(-maxDeviation, Math.min(1 + maxDeviation, end + wheelStep * (end - start) * shiftY * (1 - position)));\r\n if (newStart == start && newEnd == end) {\r\n prevent = false;\r\n }\r\n if (1 / (newEnd - newStart) < axis.getPrivate(\"maxZoomFactor\", Infinity) / axis.get(\"minZoomCount\", 1)) {\r\n this._handleWheelAnimation(axis.zoom(newStart, newEnd));\r\n }\r\n else {\r\n prevent = false;\r\n }\r\n }\r\n });\r\n }\r\n if ((wheelX === \"panX\" || wheelX === \"panXY\") && shiftX != 0) {\r\n this.xAxes.each((axis) => {\r\n if (axis.get(\"panX\")) {\r\n let start = axis.get(\"start\");\r\n let end = axis.get(\"end\");\r\n let delta = this._getWheelSign(axis) * wheelStep * (end - start) * shiftX;\r\n let newStart = start + delta;\r\n let newEnd = end + delta;\r\n let se = this._fixWheel(newStart, newEnd);\r\n newStart = se[0];\r\n newEnd = se[1];\r\n if (newStart == start && newEnd == end) {\r\n prevent = false;\r\n }\r\n this._handleWheelAnimation(axis.zoom(newStart, newEnd));\r\n }\r\n });\r\n }\r\n if ((wheelY === \"panX\" || wheelY === \"panXY\") && shiftY != 0) {\r\n this.xAxes.each((axis) => {\r\n if (axis.get(\"panX\")) {\r\n let start = axis.get(\"start\");\r\n let end = axis.get(\"end\");\r\n let delta = this._getWheelSign(axis) * wheelStep * (end - start) * shiftY;\r\n let newStart = start + delta;\r\n let newEnd = end + delta;\r\n let se = this._fixWheel(newStart, newEnd);\r\n newStart = se[0];\r\n newEnd = se[1];\r\n if (newStart == start && newEnd == end) {\r\n prevent = false;\r\n }\r\n this._handleWheelAnimation(axis.zoom(newStart, newEnd));\r\n }\r\n });\r\n }\r\n if ((wheelX === \"panY\" || wheelX === \"panXY\") && shiftX != 0) {\r\n this.yAxes.each((axis) => {\r\n if (axis.get(\"panY\")) {\r\n let start = axis.get(\"start\");\r\n let end = axis.get(\"end\");\r\n let delta = this._getWheelSign(axis) * wheelStep * (end - start) * shiftX;\r\n let newStart = start + delta;\r\n let newEnd = end + delta;\r\n let se = this._fixWheel(newStart, newEnd);\r\n newStart = se[0];\r\n newEnd = se[1];\r\n if (newStart == start && newEnd == end) {\r\n prevent = false;\r\n }\r\n this._handleWheelAnimation(axis.zoom(newStart, newEnd));\r\n }\r\n });\r\n }\r\n if ((wheelY === \"panY\" || wheelY === \"panXY\") && shiftY != 0) {\r\n this.yAxes.each((axis) => {\r\n if (axis.get(\"panY\")) {\r\n let start = axis.get(\"start\");\r\n let end = axis.get(\"end\");\r\n let delta = this._getWheelSign(axis) * wheelStep * (end - start) * shiftY;\r\n let newStart = start - delta;\r\n let newEnd = end - delta;\r\n let se = this._fixWheel(newStart, newEnd);\r\n newStart = se[0];\r\n newEnd = se[1];\r\n if (newStart == start && newEnd == end) {\r\n prevent = false;\r\n }\r\n this._handleWheelAnimation(axis.zoom(newStart, newEnd));\r\n }\r\n });\r\n }\r\n if (prevent) {\r\n wheelEvent.preventDefault();\r\n }\r\n }\r\n _handleSetWheel() {\r\n const wheelX = this.get(\"wheelX\");\r\n const wheelY = this.get(\"wheelY\");\r\n const plotContainer = this.plotContainer;\r\n if (wheelX !== \"none\" || wheelY !== \"none\") {\r\n this._wheelDp = plotContainer.events.on(\"wheel\", (event) => {\r\n const wheelEvent = event.originalEvent;\r\n if ((wheelX !== \"none\" && Math.abs(wheelEvent.deltaX) != 0) || (wheelY !== \"none\" && Math.abs(wheelEvent.deltaY) != 0)) {\r\n this.handleWheel(event);\r\n }\r\n });\r\n this._disposers.push(this._wheelDp);\r\n }\r\n else {\r\n if (this._wheelDp) {\r\n this._wheelDp.dispose();\r\n }\r\n }\r\n }\r\n _getWheelSign(axis) {\r\n let sign = 1;\r\n if (axis.get(\"renderer\").get(\"inversed\")) {\r\n sign = -1;\r\n }\r\n return sign;\r\n }\r\n _fixWheel(start, end) {\r\n const diff = end - start;\r\n if (start < 0) {\r\n start = 0;\r\n end = start + diff;\r\n }\r\n if (end > 1) {\r\n end = 1;\r\n start = end - diff;\r\n }\r\n return [start, end];\r\n }\r\n _handlePlotDown(event) {\r\n const originalEvent = event.originalEvent;\r\n if (originalEvent.button == 2) {\r\n return;\r\n }\r\n const plotContainer = this.plotContainer;\r\n let local = plotContainer.toLocal(event.point);\r\n if (this.get(\"pinchZoomX\") || this.get(\"pinchZoomY\")) {\r\n const pointerId = originalEvent.pointerId;\r\n if (pointerId) {\r\n if ($object.keys(plotContainer._downPoints).length > 0) {\r\n const xAxis = this.xAxes.getIndex(0);\r\n const yAxis = this.yAxes.getIndex(0);\r\n if (xAxis) {\r\n this._downStartX = xAxis.get(\"start\", 0);\r\n this._downEndX = xAxis.get(\"end\", 1);\r\n }\r\n if (yAxis) {\r\n this._downStartY = yAxis.get(\"start\", 0);\r\n this._downEndY = yAxis.get(\"end\", 1);\r\n }\r\n }\r\n }\r\n }\r\n if (this.get(\"panX\") || this.get(\"panY\")) {\r\n if (local.x >= 0 && local.y >= 0 && local.x <= plotContainer.width() && local.y <= this.height()) {\r\n //this._downPoint = local;\r\n this._downPoint = { x: originalEvent.clientX, y: originalEvent.clientY };\r\n const panX = this.get(\"panX\");\r\n const panY = this.get(\"panY\");\r\n if (panX) {\r\n this.xAxes.each((axis) => {\r\n axis._panStart = axis.get(\"start\");\r\n axis._panEnd = axis.get(\"end\");\r\n });\r\n }\r\n if (panY) {\r\n this.yAxes.each((axis) => {\r\n axis._panStart = axis.get(\"start\");\r\n axis._panEnd = axis.get(\"end\");\r\n });\r\n }\r\n const eventType = \"panstarted\";\r\n if (this.events.isEnabled(eventType)) {\r\n this.events.dispatch(eventType, { type: eventType, target: this, originalEvent: event.originalEvent });\r\n }\r\n }\r\n }\r\n }\r\n _handleWheelAnimation(animation) {\r\n if (animation) {\r\n animation.events.on(\"stopped\", () => {\r\n this._dispatchWheelAnimation();\r\n });\r\n }\r\n else {\r\n this._dispatchWheelAnimation();\r\n }\r\n }\r\n _dispatchWheelAnimation() {\r\n const eventType = \"wheelended\";\r\n if (this.events.isEnabled(eventType)) {\r\n this.events.dispatch(eventType, { type: eventType, target: this });\r\n }\r\n }\r\n _handlePlotUp(event) {\r\n const downPoint = this._downPoint;\r\n if (downPoint) {\r\n if (this.get(\"panX\") || this.get(\"panY\")) {\r\n if (event.originalEvent.clientX == downPoint.x && event.originalEvent.clientY == downPoint.y) {\r\n const eventType = \"pancancelled\";\r\n if (this.events.isEnabled(eventType)) {\r\n this.events.dispatch(eventType, { type: eventType, target: this, originalEvent: event.originalEvent });\r\n }\r\n }\r\n const eventType = \"panended\";\r\n if (this.events.isEnabled(eventType)) {\r\n this.events.dispatch(eventType, { type: eventType, target: this, originalEvent: event.originalEvent });\r\n }\r\n }\r\n }\r\n // TODO: handle multitouch\r\n this._downPoint = undefined;\r\n this.xAxes.each((xAxis) => {\r\n xAxis._isPanning = false;\r\n });\r\n this.yAxes.each((yAxis) => {\r\n yAxis._isPanning = false;\r\n });\r\n }\r\n _handlePlotMove(event) {\r\n const plotContainer = this.plotContainer;\r\n if (this.get(\"pinchZoomX\") || this.get(\"pinchZoomY\")) {\r\n const touchEvent = event.originalEvent;\r\n const pointerId = touchEvent.pointerId;\r\n if (pointerId) {\r\n this._movePoints[pointerId] = event.point;\r\n if ($object.keys(plotContainer._downPoints).length > 1) {\r\n this._handlePinch();\r\n return;\r\n }\r\n }\r\n }\r\n let downPoint = this._downPoint;\r\n if (downPoint) {\r\n downPoint = plotContainer.toLocal(this._root.documentPointToRoot(downPoint));\r\n let local = plotContainer.toLocal(event.point);\r\n const panX = this.get(\"panX\");\r\n const panY = this.get(\"panY\");\r\n if (panX) {\r\n let scrollbarX = this.get(\"scrollbarX\");\r\n if (scrollbarX) {\r\n scrollbarX.events.disableType(\"rangechanged\");\r\n }\r\n this.xAxes.each((axis) => {\r\n if (axis.get(\"panX\")) {\r\n axis._isPanning = true;\r\n //const maxDeviation = axis.get(\"maxDeviation\", 0);\r\n let panStart = axis._panStart;\r\n let panEnd = axis._panEnd;\r\n let difference = (panEnd - panStart);\r\n let deltaX = difference * (downPoint.x - local.x) / plotContainer.width();\r\n if (axis.get(\"renderer\").get(\"inversed\")) {\r\n deltaX *= -1;\r\n }\r\n let start = panStart + deltaX;\r\n let end = panEnd + deltaX;\r\n if (end - start < 1 + axis.get(\"maxDeviation\", 1) * 2) {\r\n axis.set(\"start\", start);\r\n axis.set(\"end\", end);\r\n }\r\n }\r\n });\r\n if (scrollbarX) {\r\n scrollbarX.events.enableType(\"rangechanged\");\r\n }\r\n }\r\n if (panY) {\r\n let scrollbarY = this.get(\"scrollbarY\");\r\n if (scrollbarY) {\r\n scrollbarY.events.disableType(\"rangechanged\");\r\n }\r\n this.yAxes.each((axis) => {\r\n if (axis.get(\"panY\")) {\r\n axis._isPanning = true;\r\n //const maxDeviation = axis.get(\"maxDeviation\", 0);\r\n let panStart = axis._panStart;\r\n let panEnd = axis._panEnd;\r\n let difference = (panEnd - panStart);\r\n let deltaY = difference * (downPoint.y - local.y) / plotContainer.height();\r\n if (axis.get(\"renderer\").get(\"inversed\")) {\r\n deltaY *= -1;\r\n }\r\n let start = panStart - deltaY;\r\n let end = panEnd - deltaY;\r\n if (end - start < 1 + axis.get(\"maxDeviation\", 1) * 2) {\r\n axis.set(\"start\", start);\r\n axis.set(\"end\", end);\r\n }\r\n }\r\n });\r\n if (scrollbarY) {\r\n scrollbarY.events.enableType(\"rangechanged\");\r\n }\r\n }\r\n }\r\n }\r\n _handlePinch() {\r\n const plotContainer = this.plotContainer;\r\n let i = 0;\r\n let downPoints = [];\r\n let movePoints = [];\r\n $object.each(plotContainer._downPoints, (k, point) => {\r\n downPoints[i] = point;\r\n let movePoint = this._movePoints[k];\r\n if (movePoint) {\r\n movePoints[i] = movePoint;\r\n }\r\n i++;\r\n });\r\n if (downPoints.length > 1 && movePoints.length > 1) {\r\n const w = plotContainer.width();\r\n const h = plotContainer.height();\r\n let downPoint0 = downPoints[0];\r\n let downPoint1 = downPoints[1];\r\n let movePoint0 = movePoints[0];\r\n let movePoint1 = movePoints[1];\r\n if (downPoint0 && downPoint1 && movePoint0 && movePoint1) {\r\n movePoint0 = plotContainer.toLocal(movePoint0);\r\n movePoint1 = plotContainer.toLocal(movePoint1);\r\n downPoint0 = plotContainer.toLocal(downPoint0);\r\n downPoint1 = plotContainer.toLocal(downPoint1);\r\n if (this.get(\"pinchZoomX\")) {\r\n const downStartX = this._downStartX;\r\n const downEndX = this._downEndX;\r\n if (downStartX != null && downEndX != null) {\r\n if (downPoint0.x > downPoint1.x) {\r\n [downPoint0, downPoint1] = [downPoint1, downPoint0];\r\n [movePoint0, movePoint1] = [movePoint1, movePoint0];\r\n }\r\n let downPos0 = downStartX + (downPoint0.x / w) * (downEndX - downStartX);\r\n let downPos1 = downStartX + (downPoint1.x / w) * (downEndX - downStartX);\r\n let movePos0 = downStartX + (movePoint0.x / w) * (downEndX - downStartX);\r\n let movePos1 = downStartX + (movePoint1.x / w) * (downEndX - downStartX);\r\n let initialDistance = Math.max(0.001, downPos1 - downPos0);\r\n let currentDistance = Math.max(0.001, movePos1 - movePos0);\r\n let d = initialDistance / currentDistance;\r\n let s = downStartX * d + downPos0 - movePos0 * d;\r\n let e = downEndX * d + downPos1 - movePos1 * d;\r\n this.xAxes.each((xAxis) => {\r\n let sa = xAxis.fixPosition(s);\r\n let ea = xAxis.fixPosition(e);\r\n xAxis.zoom(sa, ea, 0);\r\n });\r\n }\r\n }\r\n if (this.get(\"pinchZoomY\")) {\r\n const downStartY = this._downStartY;\r\n const downEndY = this._downEndY;\r\n if (downStartY != null && downEndY != null) {\r\n if (downPoint0.y < downPoint1.y) {\r\n [downPoint0, downPoint1] = [downPoint1, downPoint0];\r\n [movePoint0, movePoint1] = [movePoint1, movePoint0];\r\n }\r\n let downPos0 = downStartY + (1 - downPoint0.y / h) * (downEndY - downStartY);\r\n let downPos1 = downStartY + (1 - downPoint1.y / h) * (downEndY - downStartY);\r\n let movePos0 = downStartY + (1 - movePoint0.y / h) * (downEndY - downStartY);\r\n let movePos1 = downStartY + (1 - movePoint1.y / h) * (downEndY - downStartY);\r\n let initialDistance = Math.max(0.001, downPos1 - downPos0);\r\n let currentDistance = Math.max(0.001, movePos1 - movePos0);\r\n let d = initialDistance / currentDistance;\r\n let s = downStartY * d + downPos0 - movePos0 * d;\r\n let e = downEndY * d + downPos1 - movePos1 * d;\r\n this.yAxes.each((yAxis) => {\r\n let sa = yAxis.fixPosition(s);\r\n let ea = yAxis.fixPosition(e);\r\n yAxis.zoom(sa, ea, 0);\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n _handleCursorPosition() {\r\n const cursor = this.get(\"cursor\");\r\n if (cursor) {\r\n const cursorPoint = cursor.getPrivate(\"point\");\r\n let snapToSeries = cursor.get(\"snapToSeries\");\r\n if (cursor._downPoint) {\r\n snapToSeries = undefined;\r\n }\r\n if (snapToSeries && cursorPoint) {\r\n const snapToSeriesBy = cursor.get(\"snapToSeriesBy\");\r\n const dataItems = [];\r\n $array.each(snapToSeries, (series) => {\r\n if (!series.isHidden() && !series.isHiding()) {\r\n if (snapToSeriesBy != \"x!\" && snapToSeriesBy != \"y!\") {\r\n const startIndex = series.startIndex();\r\n const endIndex = series.endIndex();\r\n for (let i = startIndex; i < endIndex; i++) {\r\n const dataItem = series.dataItems[i];\r\n if (dataItem && !dataItem.isHidden()) {\r\n dataItems.push(dataItem);\r\n }\r\n }\r\n }\r\n else {\r\n const tooltipDataItem = series.get(\"tooltipDataItem\");\r\n if (tooltipDataItem) {\r\n dataItems.push(tooltipDataItem);\r\n }\r\n }\r\n }\r\n });\r\n let minDistance = Infinity;\r\n let closestItem;\r\n $array.each(dataItems, (dataItem) => {\r\n const point = dataItem.get(\"point\");\r\n if (point) {\r\n let distance = 0;\r\n if (snapToSeriesBy == \"x\" || snapToSeriesBy == \"x!\") {\r\n distance = Math.abs(cursorPoint.x - point.x);\r\n }\r\n else if (snapToSeriesBy == \"y\" || snapToSeriesBy == \"y!\") {\r\n distance = Math.abs(cursorPoint.y - point.y);\r\n }\r\n else {\r\n distance = Math.hypot(cursorPoint.x - point.x, cursorPoint.y - point.y);\r\n }\r\n if (distance < minDistance) {\r\n minDistance = distance;\r\n closestItem = dataItem;\r\n }\r\n }\r\n });\r\n $array.each(snapToSeries, (series) => {\r\n const tooltip = series.get(\"tooltip\");\r\n if (tooltip) {\r\n tooltip._setDataItem(undefined);\r\n }\r\n });\r\n if (closestItem) {\r\n let series = closestItem.component;\r\n series.showDataItemTooltip(closestItem);\r\n series.setRaw(\"tooltipDataItem\", closestItem);\r\n const point = closestItem.get(\"point\");\r\n if (point) {\r\n // removing x and y to solve #72225\r\n cursor.handleMove(series.toGlobal({ x: point.x - series.x(), y: point.y - series.y() }), true);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n _updateCursor() {\r\n let cursor = this.get(\"cursor\");\r\n if (cursor) {\r\n cursor.updateCursor();\r\n }\r\n }\r\n _addCursor(cursor) {\r\n this.plotContainer.children.push(cursor);\r\n }\r\n _prepareChildren() {\r\n super._prepareChildren();\r\n this.series.each((series) => {\r\n this._colorize(series);\r\n });\r\n if (this.isDirty(\"wheelX\") || this.isDirty(\"wheelY\")) {\r\n this._handleSetWheel();\r\n }\r\n if (this.isDirty(\"cursor\")) {\r\n const previous = this._prevSettings.cursor;\r\n const cursor = this.get(\"cursor\");\r\n if (cursor !== previous) {\r\n this._disposeProperty(\"cursor\");\r\n if (previous) {\r\n previous.dispose();\r\n }\r\n if (cursor) {\r\n cursor._setChart(this);\r\n this._addCursor(cursor);\r\n this._pushPropertyDisposer(\"cursor\", cursor.events.on(\"selectended\", () => {\r\n this._handleCursorSelectEnd();\r\n }));\r\n }\r\n //this.setRaw(\"cursor\", cursor) // to reset previous value\r\n this._prevSettings.cursor = cursor;\r\n }\r\n }\r\n if (this.isDirty(\"scrollbarX\")) {\r\n const previous = this._prevSettings.scrollbarX;\r\n const scrollbarX = this.get(\"scrollbarX\");\r\n if (scrollbarX !== previous) {\r\n this._disposeProperty(\"scrollbarX\");\r\n if (previous) {\r\n previous.dispose();\r\n }\r\n if (scrollbarX) {\r\n if (!scrollbarX.parent) {\r\n this.topAxesContainer.children.push(scrollbarX);\r\n }\r\n this._pushPropertyDisposer(\"scrollbarX\", scrollbarX.events.on(\"rangechanged\", (e) => {\r\n this._handleScrollbar(this.xAxes, e.start, e.end, e.grip);\r\n }));\r\n this._pushPropertyDisposer(\"scrollbarX\", scrollbarX.events.on(\"released\", () => {\r\n this.xAxes.each((axis) => {\r\n if (axis.get(\"zoomable\")) {\r\n this._handleAxisSelection(axis);\r\n }\r\n });\r\n }));\r\n // Used to populate `ariaLabel` with meaningful values\r\n scrollbarX.setPrivate(\"positionTextFunction\", (position) => {\r\n const axis = this.xAxes.getIndex(0);\r\n return axis ? axis.getTooltipText(position, false) || \"\" : \"\";\r\n });\r\n }\r\n this._prevSettings.scrollbarX = scrollbarX;\r\n }\r\n }\r\n if (this.isDirty(\"scrollbarY\")) {\r\n const previous = this._prevSettings.scrollbarY;\r\n const scrollbarY = this.get(\"scrollbarY\");\r\n if (scrollbarY !== previous) {\r\n this._disposeProperty(\"scrollbarY\");\r\n if (previous) {\r\n previous.dispose();\r\n }\r\n if (scrollbarY) {\r\n if (!scrollbarY.parent) {\r\n this.rightAxesContainer.children.push(scrollbarY);\r\n }\r\n this._pushPropertyDisposer(\"scrollbarY\", scrollbarY.events.on(\"rangechanged\", (e) => {\r\n this._handleScrollbar(this.yAxes, e.start, e.end, e.grip);\r\n }));\r\n this._pushPropertyDisposer(\"scrollbarY\", scrollbarY.events.on(\"released\", () => {\r\n this.yAxes.each((axis) => {\r\n if (axis.get(\"zoomable\")) {\r\n this._handleAxisSelection(axis);\r\n }\r\n });\r\n }));\r\n // Used to populate `ariaLabel` with meaningful values\r\n scrollbarY.setPrivate(\"positionTextFunction\", (position) => {\r\n const axis = this.yAxes.getIndex(0);\r\n return axis ? axis.getTooltipText(position, false) || \"\" : \"\";\r\n });\r\n }\r\n this._prevSettings.scrollbarY = scrollbarY;\r\n }\r\n }\r\n this._handleZoomOut();\r\n }\r\n _processSeries(series) {\r\n super._processSeries(series);\r\n const xAxis = series.get(\"xAxis\");\r\n const yAxis = series.get(\"yAxis\");\r\n $array.move(xAxis.series, series);\r\n $array.move(yAxis.series, series);\r\n series._posXDp = series.addDisposer(xAxis.events.on(\"positionchanged\", () => {\r\n series._fixPosition();\r\n }));\r\n series._posXDp = series.addDisposer(yAxis.events.on(\"positionchanged\", () => {\r\n series._fixPosition();\r\n }));\r\n if (!series.get(\"baseAxis\")) {\r\n if (yAxis.isType(\"CategoryAxis\") || yAxis.isType(\"DateAxis\")) {\r\n series.set(\"baseAxis\", yAxis);\r\n }\r\n else {\r\n series.set(\"baseAxis\", xAxis);\r\n }\r\n }\r\n if (series.get(\"stacked\")) {\r\n series._markDirtyKey(\"stacked\");\r\n $array.each(series.dataItems, (dataItem) => {\r\n dataItem.set(\"stackToItemY\", undefined);\r\n dataItem.set(\"stackToItemX\", undefined);\r\n });\r\n }\r\n series._markDirtyAxes();\r\n yAxis.markDirtyExtremes();\r\n xAxis.markDirtyExtremes();\r\n xAxis._seriesAdded = true;\r\n yAxis._seriesAdded = true;\r\n this._colorize(series);\r\n }\r\n _colorize(series) {\r\n const colorSet = this.get(\"colors\");\r\n if (colorSet) {\r\n if (series.get(\"fill\") == null) {\r\n const color = colorSet.next();\r\n series._setSoft(\"stroke\", color);\r\n series._setSoft(\"fill\", color);\r\n }\r\n }\r\n const patternSet = this.get(\"patterns\");\r\n if (patternSet) {\r\n if (series.get(\"fillPattern\") == null) {\r\n const pattern = patternSet.next();\r\n series._setSoft(\"fillPattern\", pattern);\r\n }\r\n }\r\n }\r\n _handleCursorSelectEnd() {\r\n const cursor = this.get(\"cursor\");\r\n const behavior = cursor.get(\"behavior\");\r\n const downPositionX = cursor.getPrivate(\"downPositionX\", 0);\r\n const downPositionY = cursor.getPrivate(\"downPositionY\", 0);\r\n const positionX = Math.min(1, Math.max(0, cursor.getPrivate(\"positionX\", 0.5)));\r\n const positionY = Math.min(1, Math.max(0, cursor.getPrivate(\"positionY\", 0.5)));\r\n this.xAxes.each((axis) => {\r\n if (behavior === \"zoomX\" || behavior === \"zoomXY\") {\r\n let position0 = axis.toAxisPosition(downPositionX);\r\n let position1 = axis.toAxisPosition(positionX);\r\n axis.zoom(position0, position1);\r\n }\r\n axis.setPrivate(\"updateScrollbar\", true);\r\n });\r\n this.yAxes.each((axis) => {\r\n if (behavior === \"zoomY\" || behavior === \"zoomXY\") {\r\n let position0 = axis.toAxisPosition(downPositionY);\r\n let position1 = axis.toAxisPosition(positionY);\r\n axis.zoom(position0, position1);\r\n }\r\n axis.setPrivate(\"updateScrollbar\", true);\r\n });\r\n }\r\n _handleScrollbar(axes, start, end, priority) {\r\n axes.each((axis) => {\r\n let axisStart = axis.fixPosition(start);\r\n let axisEnd = axis.fixPosition(end);\r\n let zoomAnimation = axis.zoom(axisStart, axisEnd, undefined, priority);\r\n const updateScrollbar = \"updateScrollbar\";\r\n axis.setPrivateRaw(updateScrollbar, false);\r\n if (zoomAnimation) {\r\n zoomAnimation.events.on(\"stopped\", () => {\r\n axis.setPrivateRaw(updateScrollbar, true);\r\n });\r\n }\r\n else {\r\n axis.setPrivateRaw(updateScrollbar, true);\r\n }\r\n });\r\n }\r\n _processAxis(axes, container) {\r\n return axes.events.onAll((change) => {\r\n if (change.type === \"clear\") {\r\n $array.each(change.oldValues, (axis) => {\r\n this._removeAxis(axis);\r\n });\r\n }\r\n else if (change.type === \"push\") {\r\n container.children.push(change.newValue);\r\n change.newValue.processChart(this);\r\n }\r\n else if (change.type === \"setIndex\") {\r\n container.children.setIndex(change.index, change.newValue);\r\n change.newValue.processChart(this);\r\n }\r\n else if (change.type === \"insertIndex\") {\r\n container.children.insertIndex(change.index, change.newValue);\r\n change.newValue.processChart(this);\r\n }\r\n else if (change.type === \"removeIndex\") {\r\n this._removeAxis(change.oldValue);\r\n }\r\n else if (change.type === \"moveIndex\") {\r\n container.children.moveValue(change.value, change.newIndex);\r\n change.value.processChart(this);\r\n }\r\n else {\r\n throw new Error(\"Unknown IListEvent type\");\r\n }\r\n });\r\n }\r\n _removeAxis(axis) {\r\n if (!axis.isDisposed()) {\r\n const axisParent = axis.parent;\r\n if (axisParent) {\r\n axisParent.children.removeValue(axis);\r\n }\r\n const gridContainer = axis.gridContainer;\r\n const gridParent = gridContainer.parent;\r\n if (gridParent) {\r\n gridParent.children.removeValue(gridContainer);\r\n }\r\n const topGridContainer = axis.topGridContainer;\r\n const topGridParent = topGridContainer.parent;\r\n if (topGridParent) {\r\n topGridParent.children.removeValue(topGridContainer);\r\n }\r\n }\r\n }\r\n _updateChartLayout() {\r\n const left = this.leftAxesContainer.width();\r\n const right = this.rightAxesContainer.width();\r\n const bottomAxesContainer = this.bottomAxesContainer;\r\n bottomAxesContainer.set(\"paddingLeft\", left);\r\n bottomAxesContainer.set(\"paddingRight\", right);\r\n const topAxesContainer = this.topAxesContainer;\r\n topAxesContainer.set(\"paddingLeft\", left);\r\n topAxesContainer.set(\"paddingRight\", right);\r\n }\r\n /**\r\n * @ignore\r\n */\r\n processAxis(axis) {\r\n var cursor = this.get(\"cursor\");\r\n if (cursor) {\r\n this.addDisposer(axis.on(\"start\", () => {\r\n this._updateCursor();\r\n }));\r\n this.addDisposer(axis.on(\"end\", () => {\r\n this._updateCursor();\r\n }));\r\n }\r\n }\r\n _handleAxisSelection(axis, force) {\r\n let start = axis.fixPosition(axis.get(\"start\", 0));\r\n let end = axis.fixPosition(axis.get(\"end\", 1));\r\n if (start > end) {\r\n [start, end] = [end, start];\r\n }\r\n if (this.xAxes.indexOf(axis) != -1) {\r\n if (force || axis.getPrivate(\"updateScrollbar\")) {\r\n let scrollbarX = this.get(\"scrollbarX\");\r\n if (scrollbarX && (!scrollbarX.getPrivate(\"isBusy\") || force)) {\r\n scrollbarX.setRaw(\"start\", start);\r\n scrollbarX.setRaw(\"end\", end);\r\n scrollbarX.updateGrips();\r\n }\r\n }\r\n }\r\n else if (this.yAxes.indexOf(axis) != -1) {\r\n if (force || axis.getPrivate(\"updateScrollbar\")) {\r\n let scrollbarY = this.get(\"scrollbarY\");\r\n if (scrollbarY && (!scrollbarY.getPrivate(\"isBusy\") || force)) {\r\n scrollbarY.setRaw(\"start\", start);\r\n scrollbarY.setRaw(\"end\", end);\r\n scrollbarY.updateGrips();\r\n }\r\n }\r\n }\r\n this._handleZoomOut();\r\n }\r\n _handleZoomOut() {\r\n let zoomOutButton = this.zoomOutButton;\r\n if (zoomOutButton && zoomOutButton.parent) {\r\n let visible = false;\r\n this.xAxes.each((axis) => {\r\n if (axis.get(\"zoomOut\", true)) {\r\n if ($math.round(axis.get(\"start\", 0), 5) != 0 || $math.round(axis.get(\"end\", 1), 5) != 1) {\r\n visible = true;\r\n }\r\n }\r\n });\r\n this.yAxes.each((axis) => {\r\n if (axis.get(\"zoomOut\", true)) {\r\n if ($math.round(axis.get(\"start\", 0), 5) != 0 || $math.round(axis.get(\"end\", 1), 5) != 1) {\r\n visible = true;\r\n }\r\n }\r\n });\r\n if (visible) {\r\n if (zoomOutButton.isHidden()) {\r\n zoomOutButton.show();\r\n }\r\n }\r\n else {\r\n zoomOutButton.hide();\r\n }\r\n }\r\n }\r\n /**\r\n * Checks if point is within plot area.\r\n *\r\n * @param point Reference point\r\n * @return Is within plot area?\r\n */\r\n inPlot(point) {\r\n const plotContainer = this.plotContainer;\r\n const otherCharts = this.getPrivate(\"otherCharts\", this._otherCharts);\r\n const global = plotContainer.toGlobal(point);\r\n if (point.x >= -0.5 && point.y >= -0.5 && point.x <= plotContainer.width() + 0.5 && point.y <= plotContainer.height() + 0.5) {\r\n return true;\r\n }\r\n if (otherCharts) {\r\n for (let i = otherCharts.length - 1; i >= 0; i--) {\r\n const chart = otherCharts[i];\r\n if (chart != this) {\r\n const chartPlotContainer = chart.plotContainer;\r\n const documentPoint = this._root.rootPointToDocument(global);\r\n const chartRoot = chart._root.documentPointToRoot(documentPoint);\r\n const local = chartPlotContainer.toLocal(chartRoot);\r\n if (local.x >= -0.1 && local.y >= -0.1 && local.x <= chartPlotContainer.width() + 0.1 && local.y <= chartPlotContainer.height() + 0.1) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n arrangeTooltips() {\r\n const plotContainer = this.plotContainer;\r\n const w = plotContainer.width();\r\n const h = plotContainer.height();\r\n let hh = this.height();\r\n const bounds = this._root.tooltipContainer.get(\"layerMargin\");\r\n if (bounds) {\r\n if (bounds.bottom > hh) {\r\n hh = bounds.bottom;\r\n }\r\n }\r\n let plotT = plotContainer._display.toGlobal({ x: 0, y: 0 });\r\n let plotB = plotContainer._display.toGlobal({ x: w, y: h });\r\n const tooltips = [];\r\n let sum = 0;\r\n let minDistance = Infinity;\r\n let movePoint = this._movePoint;\r\n let maxTooltipDistance = this.get(\"maxTooltipDistance\");\r\n let maxTooltipDistanceBy = this.get(\"maxTooltipDistanceBy\", \"xy\");\r\n let closest;\r\n let closestPoint;\r\n if ($type.isNumber(maxTooltipDistance)) {\r\n this.series.each((series) => {\r\n if (!series.isHidden()) {\r\n const tooltip = series.get(\"tooltip\");\r\n if (tooltip) {\r\n let point = tooltip.get(\"pointTo\");\r\n if (point) {\r\n let distance = Math.hypot(movePoint.x - point.x, movePoint.y - point.y);\r\n if (maxTooltipDistanceBy == \"x\") {\r\n distance = Math.abs(movePoint.x - point.x);\r\n }\r\n else if (maxTooltipDistanceBy == \"y\") {\r\n distance = Math.abs(movePoint.y - point.y);\r\n }\r\n if (distance < minDistance) {\r\n minDistance = distance;\r\n closest = series;\r\n closestPoint = point;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n const tooltipSeries = [];\r\n this.series.each((series) => {\r\n const tooltip = series.get(\"tooltip\");\r\n if (tooltip && !tooltip.get(\"forceHidden\")) {\r\n let hidden = false;\r\n let point = tooltip.get(\"pointTo\");\r\n if (point) {\r\n if (maxTooltipDistance >= 0) {\r\n let point = tooltip.get(\"pointTo\");\r\n if (point && closestPoint) {\r\n if (series != closest) {\r\n let distance = Math.hypot(closestPoint.x - point.x, closestPoint.y - point.y);\r\n if (maxTooltipDistanceBy == \"x\") {\r\n distance = Math.abs(closestPoint.x - point.x);\r\n }\r\n else if (maxTooltipDistanceBy == \"y\") {\r\n distance = Math.abs(closestPoint.y - point.y);\r\n }\r\n if (distance > maxTooltipDistance) {\r\n hidden = true;\r\n }\r\n }\r\n }\r\n }\r\n else if (maxTooltipDistance == -1) {\r\n if (series != closest) {\r\n hidden = true;\r\n }\r\n }\r\n if (!this.inPlot(this._tooltipToLocal(point)) || !tooltip.dataItem) {\r\n hidden = true;\r\n }\r\n else {\r\n if (!hidden) {\r\n sum += point.y;\r\n }\r\n }\r\n if (hidden || series.isHidden() || series.isHiding()) {\r\n tooltip.hide(0);\r\n }\r\n else {\r\n tooltip.show();\r\n tooltips.push(tooltip);\r\n tooltipSeries.push(series);\r\n }\r\n }\r\n }\r\n });\r\n this.setPrivate(\"tooltipSeries\", tooltipSeries);\r\n if (this.get(\"arrangeTooltips\")) {\r\n let totalTooltipH = 0;\r\n let tooltipCount = 0;\r\n const tooltipContainer = this._root.tooltipContainer;\r\n const count = tooltips.length;\r\n const average = sum / count;\r\n if (average > h / 2 + plotT.y) {\r\n tooltips.sort((a, b) => $order.compareNumber(b.get(\"pointTo\").y, a.get(\"pointTo\").y));\r\n let prevY = plotB.y;\r\n $array.each(tooltips, (tooltip) => {\r\n let height = tooltip.height();\r\n tooltipCount++;\r\n totalTooltipH += height;\r\n let centerY = tooltip.get(\"centerY\");\r\n if (centerY instanceof Percent) {\r\n height *= centerY.value;\r\n }\r\n height += tooltip.get(\"marginBottom\", 0);\r\n tooltip.set(\"bounds\", { left: plotT.x, top: plotT.y, right: plotB.x, bottom: prevY });\r\n tooltip.setPrivate(\"customData\", { left: plotT.x, top: plotT.y, right: plotB.x, bottom: prevY });\r\n prevY = Math.min(prevY - height, tooltip._fy - height);\r\n if (tooltip.parent == tooltipContainer) {\r\n tooltipContainer.children.moveValue(tooltip, 0);\r\n }\r\n });\r\n if (prevY < 0) {\r\n tooltips.reverse();\r\n let prevBottom = prevY;\r\n $array.each(tooltips, (tooltip) => {\r\n tooltipCount++;\r\n let bounds = tooltip.get(\"bounds\");\r\n if (bounds) {\r\n let top = bounds.top - prevY;\r\n let bottom = bounds.bottom - prevY;\r\n if (top < prevBottom) {\r\n top = prevBottom;\r\n bottom = top + tooltip.height();\r\n }\r\n tooltip.set(\"bounds\", { left: bounds.left, top: top, right: bounds.right, bottom: bottom });\r\n prevBottom = bounds.bottom - prevY + tooltip.get(\"marginBottom\", 0);\r\n }\r\n });\r\n }\r\n }\r\n else {\r\n tooltips.reverse();\r\n tooltips.sort((a, b) => $order.compareNumber(a.get(\"pointTo\").y, b.get(\"pointTo\").y));\r\n let prevY = 0;\r\n $array.each(tooltips, (tooltip) => {\r\n tooltipCount++;\r\n let height = tooltip.height();\r\n totalTooltipH += height;\r\n let centerY = tooltip.get(\"centerY\");\r\n if (centerY instanceof Percent) {\r\n height *= centerY.value;\r\n }\r\n height += tooltip.get(\"marginBottom\", 0);\r\n tooltip.set(\"bounds\", { left: plotT.x, top: prevY, right: plotB.x, bottom: Math.max(plotT.y + hh, prevY + height) });\r\n if (tooltip.parent == tooltipContainer) {\r\n tooltipContainer.children.moveValue(tooltip, 0);\r\n }\r\n prevY = Math.max(prevY + height, tooltip._fy + height);\r\n });\r\n if (prevY > hh) {\r\n tooltips.reverse();\r\n let prevBottom = hh;\r\n $array.each(tooltips, (tooltip) => {\r\n tooltipCount++;\r\n let bounds = tooltip.get(\"bounds\");\r\n if (bounds) {\r\n let top = bounds.top - (hh - prevY);\r\n let bottom = bounds.bottom - (hh - prevY);\r\n if (bottom > prevBottom) {\r\n bottom = prevBottom;\r\n top = bottom - tooltip.height();\r\n }\r\n tooltip.set(\"bounds\", { left: bounds.left, top: top, right: bounds.right, bottom: bottom });\r\n prevBottom = bottom - tooltip.height() - tooltip.get(\"marginBottom\", 0);\r\n }\r\n });\r\n }\r\n }\r\n if (totalTooltipH == 0 && tooltipCount > 0) {\r\n this._disposers.push(this.root.events.once(\"frameended\", () => {\r\n this.arrangeTooltips();\r\n }));\r\n }\r\n }\r\n }\r\n _tooltipToLocal(point) {\r\n return this.plotContainer.toLocal(point);\r\n }\r\n /**\r\n * Fully zooms out the chart.\r\n */\r\n zoomOut() {\r\n this.xAxes.each((axis) => {\r\n if (axis.get(\"zoomOut\", true)) {\r\n axis.setPrivate(\"updateScrollbar\", true);\r\n axis.zoom(0, 1);\r\n }\r\n });\r\n this.yAxes.each((axis) => {\r\n if (axis.get(\"zoomOut\", true)) {\r\n axis.setPrivate(\"updateScrollbar\", true);\r\n axis.zoom(0, 1);\r\n }\r\n });\r\n }\r\n _dispose() {\r\n super._dispose();\r\n // Explicitly disposing cursor to avoid memory leak of cursor adding\r\n // keyboard events after parent chart has been disposed\r\n const cursor = this.get(\"cursor\");\r\n if (cursor) {\r\n cursor.dispose();\r\n }\r\n }\r\n}\r\nXYChart.className = \"XYChart\";\r\nXYChart.classNames = SerialChart.classNames.concat([XYChart.className]);\r\n//# sourceMappingURL=XYChart.js.map","import { Graphics } from \"../../../core/render/Graphics\";\r\n/**\r\n * Creates an axis grid line.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/axes/#Grid} for more info\r\n * @important\r\n */\r\nexport class Grid extends Graphics {\r\n _beforeChanged() {\r\n super._beforeChanged();\r\n if (this.isPrivateDirty(\"width\") || this.isPrivateDirty(\"height\")) {\r\n this._clear = true;\r\n }\r\n }\r\n}\r\nGrid.className = \"Grid\";\r\nGrid.classNames = Graphics.classNames.concat([Grid.className]);\r\n//# sourceMappingURL=Grid.js.map","import { List } from \"./List\";\r\n/**\r\n * A [[List]] that holds components data.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/data/} for more info\r\n */\r\nexport class ListData extends List {\r\n /**\r\n * @ignore\r\n */\r\n incrementRef() { }\r\n /**\r\n * @ignore\r\n */\r\n decrementRef() { }\r\n _onPush(newValue) {\r\n if (this.processor) {\r\n this.processor.processRow(newValue);\r\n }\r\n super._onPush(newValue);\r\n }\r\n _onInsertIndex(index, newValue) {\r\n if (this.processor) {\r\n this.processor.processRow(newValue);\r\n }\r\n super._onInsertIndex(index, newValue);\r\n }\r\n _onSetIndex(index, oldValue, newValue) {\r\n if (this.processor) {\r\n this.processor.processRow(newValue);\r\n }\r\n super._onSetIndex(index, oldValue, newValue);\r\n }\r\n}\r\n/**\r\n * @deprecated\r\n * @todo remove\r\n */\r\nexport class JsonData {\r\n constructor(value) {\r\n this._value = value;\r\n }\r\n incrementRef() { }\r\n decrementRef() { }\r\n}\r\n//# sourceMappingURL=Data.js.map","import { __awaiter } from \"tslib\";\r\nimport { Settings } from \"../util/Entity\";\r\nimport { Container } from \"./Container\";\r\nimport { ListData } from \"../util/Data\";\r\nimport * as $array from \"../util/Array\";\r\nimport * as $object from \"../util/Object\";\r\n/**\r\n * A base element that holds data bit (data item) for any [[Component]].\r\n */\r\nexport class DataItem extends Settings {\r\n constructor(component, dataContext, settings) {\r\n super(settings);\r\n this.dataContext = dataContext;\r\n this.component = component;\r\n this._settings.visible = true;\r\n this._checkDirty();\r\n }\r\n /**\r\n * @ignore\r\n */\r\n markDirty() {\r\n this.component.markDirtyValues(this);\r\n }\r\n _startAnimation() {\r\n this.component._root._addAnimation(this);\r\n }\r\n _animationTime() {\r\n return this.component._root.animationTime;\r\n }\r\n _dispose() {\r\n if (this.component) {\r\n this.component.disposeDataItem(this);\r\n }\r\n super._dispose();\r\n }\r\n /**\r\n * Shows a data item that's currently hidden.\r\n */\r\n show(duration) {\r\n this.setRaw(\"visible\", true);\r\n if (this.component) {\r\n this.component.showDataItem(this, duration);\r\n }\r\n }\r\n /**\r\n * Hides a data item that's currently visible.\r\n */\r\n hide(duration) {\r\n this.setRaw(\"visible\", false);\r\n if (this.component) {\r\n this.component.hideDataItem(this, duration);\r\n }\r\n }\r\n isHidden() {\r\n return !this.get(\"visible\");\r\n }\r\n}\r\n/**\r\n * A base class for elements that make use of data.\r\n */\r\nexport class Component extends Container {\r\n constructor() {\r\n super(...arguments);\r\n this._data = new ListData();\r\n this._dataItems = [];\r\n this._mainDataItems = this._dataItems;\r\n this.valueFields = [];\r\n this.fields = [\"id\"];\r\n this._valuesDirty = false;\r\n this._dataChanged = false;\r\n this._dataGrouped = false;\r\n /**\r\n * Indicates if the component has already been initialized.\r\n */\r\n this.inited = false;\r\n }\r\n /**\r\n * Component's data.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/data/} for more info\r\n */\r\n set data(data) {\r\n data.incrementRef();\r\n this._data.decrementRef();\r\n this._data = data;\r\n }\r\n /**\r\n * @return Data\r\n */\r\n get data() {\r\n return this._data;\r\n }\r\n _dispose() {\r\n super._dispose();\r\n this._data.decrementRef();\r\n }\r\n _onDataClear() {\r\n }\r\n _afterNew() {\r\n super._afterNew();\r\n this._data.incrementRef();\r\n this._updateFields();\r\n this._disposers.push(this.data.events.onAll((change) => {\r\n const dataItems = this._mainDataItems;\r\n this.markDirtyValues();\r\n this._markDirtyGroup();\r\n this._dataChanged = true;\r\n if (change.type === \"clear\") {\r\n $array.each(dataItems, (dataItem) => {\r\n dataItem.dispose();\r\n });\r\n dataItems.length = 0;\r\n this._onDataClear();\r\n }\r\n else if (change.type === \"push\") {\r\n const dataItem = new DataItem(this, change.newValue, this._makeDataItem(change.newValue));\r\n dataItems.push(dataItem);\r\n this.processDataItem(dataItem);\r\n }\r\n else if (change.type === \"setIndex\") {\r\n const dataItem = dataItems[change.index];\r\n const properties = this._makeDataItem(change.newValue);\r\n if (dataItem.bullets && dataItem.bullets.length == 0) {\r\n dataItem.bullets = undefined;\r\n }\r\n $object.entries(properties).forEach(([key, value]) => {\r\n if (dataItem.get(key) == value) {\r\n return;\r\n }\r\n dataItem.animate({\r\n key: key,\r\n to: value,\r\n duration: this.get(\"interpolationDuration\", 0),\r\n easing: this.get(\"interpolationEasing\"),\r\n });\r\n });\r\n dataItem.dataContext = change.newValue;\r\n }\r\n else if (change.type === \"insertIndex\") {\r\n const dataItem = new DataItem(this, change.newValue, this._makeDataItem(change.newValue));\r\n dataItems.splice(change.index, 0, dataItem);\r\n this.processDataItem(dataItem);\r\n }\r\n else if (change.type === \"removeIndex\") {\r\n const dataItem = dataItems[change.index];\r\n dataItem.dispose();\r\n dataItems.splice(change.index, 1);\r\n }\r\n else if (change.type === \"moveIndex\") {\r\n const dataItem = dataItems[change.oldIndex];\r\n dataItems.splice(change.oldIndex, 1);\r\n dataItems.splice(change.newIndex, 0, dataItem);\r\n }\r\n else {\r\n throw new Error(\"Unknown IStreamEvent type\");\r\n }\r\n this._afterDataChange();\r\n }));\r\n }\r\n _postUpdateData() {\r\n }\r\n /**\r\n * Updates existing data in the component without disposing old data items. If there are more data items than before, new ones will be created. If there are less, old ones will be removed.\r\n * @param data\r\n */\r\n updateData(data) {\r\n let ii = 0;\r\n $array.each(data, (dataObject, index) => {\r\n const dataItem = this.dataItems[index];\r\n if (!dataItem) {\r\n this.data.push(dataObject);\r\n }\r\n else {\r\n const dataContext = dataItem.dataContext;\r\n if (dataContext) {\r\n $object.entries(dataObject).forEach(([key, value]) => {\r\n dataContext[key] = value;\r\n });\r\n }\r\n const properties = this._makeDataItem(dataContext);\r\n $object.entries(properties).forEach(([key, value]) => {\r\n var _a;\r\n if (dataItem.get(key) != value) {\r\n dataItem.set(key, value);\r\n const workingKey = (_a = this._valueFieldsF[key]) === null || _a === void 0 ? void 0 : _a.workingKey;\r\n if (workingKey) {\r\n dataItem.set(workingKey, value);\r\n }\r\n }\r\n });\r\n }\r\n ii = index;\r\n });\r\n for (let i = this.dataItems.length - 1; i > ii; i--) {\r\n const dataItem = this.dataItems[i];\r\n $array.remove(this.dataItems, dataItem);\r\n dataItem.dispose();\r\n }\r\n this._postUpdateData();\r\n }\r\n _updateFields() {\r\n if (this.valueFields) {\r\n this._valueFields = [];\r\n this._valueFieldsF = {};\r\n $array.each(this.valueFields, (key) => {\r\n const field = this.get((key + \"Field\"));\r\n if (field) {\r\n this._valueFields.push(key);\r\n this._valueFieldsF[key] = { fieldKey: key + \"Field\", workingKey: key + \"Working\" };\r\n }\r\n });\r\n }\r\n if (this.fields) {\r\n this._fields = [];\r\n this._fieldsF = {};\r\n $array.each(this.fields, (key) => {\r\n const field = this.get((key + \"Field\"));\r\n if (field) {\r\n this._fields.push(key);\r\n this._fieldsF[key] = key + \"Field\";\r\n }\r\n });\r\n }\r\n }\r\n /**\r\n * A list of component's data items.\r\n *\r\n * @return Data items\r\n */\r\n get dataItems() {\r\n return this._dataItems;\r\n }\r\n processDataItem(_dataItem) { }\r\n _makeDataItem(data) {\r\n //const output: this[\"_dataItemSettings\"] = {};\r\n const output = {}; // temporary to solve error\r\n if (this._valueFields) {\r\n $array.each(this._valueFields, (key) => {\r\n const field = this.get((this._valueFieldsF[key].fieldKey));\r\n output[key] = data[field];\r\n output[this._valueFieldsF[key].workingKey] = output[key];\r\n });\r\n }\r\n if (this._fields) {\r\n $array.each(this._fields, (key) => {\r\n const field = this.get((this._fieldsF[key]));\r\n output[key] = data[field];\r\n });\r\n }\r\n return output;\r\n }\r\n /**\r\n * Creates a new data item and processes it.\r\n *\r\n * @param data Data item settings\r\n * @param dataContext Data context\r\n * @return New data item\r\n */\r\n makeDataItem(data, dataContext) {\r\n let dataItem = new DataItem(this, dataContext, data);\r\n this.processDataItem(dataItem);\r\n return dataItem;\r\n }\r\n /**\r\n * Adds new explicit data item to series.\r\n *\r\n * @param data Data item settings\r\n * @param dataContext Data context\r\n * @return New data item\r\n */\r\n pushDataItem(data, dataContext) {\r\n const dataItem = this.makeDataItem(data, dataContext);\r\n this._mainDataItems.push(dataItem);\r\n return dataItem;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n disposeDataItem(_dataItem) {\r\n }\r\n /**\r\n * Shows component's data item.\r\n *\r\n * @param dataItem Data item\r\n * @param _duration Animation duration in milliseconds\r\n * @return Promise\r\n */\r\n showDataItem(dataItem, _duration) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n dataItem.set(\"visible\", true);\r\n });\r\n }\r\n /**\r\n * Hides component's data item.\r\n *\r\n * @param dataItem Data item\r\n * @param _duration Animation duration in milliseconds\r\n * @return Promise\r\n */\r\n hideDataItem(dataItem, _duration) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n dataItem.set(\"visible\", false);\r\n });\r\n }\r\n _clearDirty() {\r\n super._clearDirty();\r\n this._valuesDirty = false;\r\n }\r\n _afterDataChange() {\r\n }\r\n _afterChanged() {\r\n super._afterChanged();\r\n if (this._dataChanged) {\r\n const type = \"datavalidated\";\r\n if (this.events.isEnabled(type)) {\r\n this.events.dispatch(type, { type: type, target: this });\r\n }\r\n this._dataChanged = false;\r\n }\r\n if (this._valuesDirty) {\r\n const type = \"valueschanged\";\r\n if (this.events.isEnabled(type)) {\r\n this.events.dispatch(type, { type: type, target: this });\r\n }\r\n }\r\n this.inited = true;\r\n }\r\n /**\r\n * Forces a repaint of the element which relies on data.\r\n *\r\n * @since 5.0.21\r\n */\r\n markDirtyValues(_dataItem) {\r\n this.markDirty();\r\n this._valuesDirty = true;\r\n }\r\n _markDirtyGroup() {\r\n this._dataGrouped = false;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n markDirtySize() {\r\n this._sizeDirty = true;\r\n this.markDirty();\r\n }\r\n /**\r\n * Looks up and returns a data item by its ID.\r\n *\r\n * @param id ID\r\n * @return Data item\r\n */\r\n getDataItemById(id) {\r\n return $array.find(this.dataItems, (dataItem) => {\r\n return dataItem.get(\"id\") == id;\r\n });\r\n }\r\n}\r\nComponent.className = \"Component\";\r\nComponent.classNames = Container.classNames.concat([Component.className]);\r\n//# sourceMappingURL=Component.js.map","import { __awaiter } from \"tslib\";\r\nimport { Component } from \"../../core/render/Component\";\r\nimport { List } from \"../../core/util/List\";\r\nimport { Color } from \"../../core/util/Color\";\r\nimport { percentInterpolate } from \"../../core/util/Animation\";\r\nimport { Percent } from \"../../core/util/Percent\";\r\nimport { p100 } from \"../../core/util/Percent\";\r\nimport { Container } from \"../../core/render/Container\";\r\nimport { Label } from \"../../core/render/Label\";\r\n//import { Animations } from \"../../core/util/Animation\";\r\nimport * as $array from \"../../core/util/Array\";\r\nimport * as $type from \"../../core/util/Type\";\r\nimport * as $time from \"../../core/util/Time\";\r\n/**\r\n * A base class for all series.\r\n */\r\nexport class Series extends Component {\r\n constructor() {\r\n super(...arguments);\r\n this._aggregatesCalculated = false;\r\n this._selectionAggregatesCalculated = false;\r\n this._dataProcessed = false;\r\n this._baseSeriesDirty = false;\r\n /**\r\n * List of bullets to use for the series.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/bullets/} for more info\r\n */\r\n this.bullets = new List();\r\n /**\r\n * A [[Container]] series' bullets are stored in.\r\n *\r\n * @default Container.new()\r\n */\r\n this.bulletsContainer = Container.new(this._root, { width: p100, height: p100, position: \"absolute\" });\r\n }\r\n _afterNew() {\r\n this.valueFields.push(\"value\", \"customValue\");\r\n super._afterNew();\r\n this.setPrivate(\"customData\", {});\r\n this._disposers.push(this.bullets.events.onAll(() => {\r\n this._handleBullets(this.dataItems);\r\n }));\r\n }\r\n _dispose() {\r\n this.bulletsContainer.dispose(); // can be in a different parent\r\n super._dispose();\r\n }\r\n startIndex() {\r\n let len = this.dataItems.length;\r\n return Math.min(this.getPrivate(\"startIndex\", 0), len);\r\n }\r\n endIndex() {\r\n let len = this.dataItems.length;\r\n return Math.max(0, Math.min(this.getPrivate(\"endIndex\", len), len));\r\n }\r\n _handleBullets(dataItems) {\r\n $array.each(dataItems, (dataItem) => {\r\n const bullets = dataItem.bullets;\r\n if (bullets) {\r\n $array.each(bullets, (bullet) => {\r\n bullet.dispose();\r\n });\r\n dataItem.bullets = undefined;\r\n }\r\n });\r\n this.markDirtyValues();\r\n }\r\n _makeBullets(dataItem) {\r\n if (this._shouldMakeBullet(dataItem)) {\r\n dataItem.bullets = [];\r\n this.bullets.each((bulletFunction) => {\r\n this._makeBullet(dataItem, bulletFunction);\r\n });\r\n }\r\n }\r\n _shouldMakeBullet(_dataItem) {\r\n return true;\r\n }\r\n _makeBullet(dataItem, bulletFunction, index) {\r\n const bullet = bulletFunction(this._root, this, dataItem);\r\n if (bullet) {\r\n bullet._index = index;\r\n this._makeBulletReal(dataItem, bullet);\r\n }\r\n return bullet;\r\n }\r\n _makeBulletReal(dataItem, bullet) {\r\n let sprite = bullet.get(\"sprite\");\r\n if (sprite) {\r\n sprite._setDataItem(dataItem);\r\n sprite.setRaw(\"position\", \"absolute\");\r\n this.bulletsContainer.children.push(sprite);\r\n }\r\n bullet.series = this;\r\n dataItem.bullets.push(bullet);\r\n }\r\n /**\r\n * Adds bullet directly to a data item.\r\n *\r\n * Please note: method accepts [[Bullet]] instance as a paramter, not a\r\n * reference to a function.\r\n *\r\n * You should add Bullet instance, not a method like you do it on series.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/bullets/#Adding_directly_to_data_item} for more info\r\n * @since 5.6.0\r\n *\r\n * @param dataItem Target data item\r\n * @param bullet Bullet instance\r\n */\r\n addBullet(dataItem, bullet) {\r\n if (!dataItem.bullets) {\r\n dataItem.bullets = [];\r\n }\r\n if (bullet) {\r\n this._makeBulletReal(dataItem, bullet);\r\n }\r\n }\r\n _clearDirty() {\r\n super._clearDirty();\r\n this._aggregatesCalculated = false;\r\n this._baseSeriesDirty = false;\r\n this._selectionAggregatesCalculated = false;\r\n }\r\n _prepareChildren() {\r\n super._prepareChildren();\r\n const dataItems = this.dataItems;\r\n const count = dataItems.length;\r\n let startIndex = this.startIndex();\r\n let endIndex = this.endIndex();\r\n if (this.isDirty(\"name\")) {\r\n this.updateLegendValue();\r\n }\r\n if (this.isDirty(\"heatRules\")) {\r\n this._valuesDirty = true;\r\n }\r\n if (this.isPrivateDirty(\"baseValueSeries\")) {\r\n const baseValueSeries = this.getPrivate(\"baseValueSeries\");\r\n if (baseValueSeries) {\r\n this._disposers.push(baseValueSeries.onPrivate(\"startIndex\", () => {\r\n this._baseSeriesDirty = true;\r\n this.markDirtyValues();\r\n }));\r\n }\r\n }\r\n const calculateAggregates = this.get(\"calculateAggregates\");\r\n if (calculateAggregates) {\r\n if (this._valuesDirty && !this._dataProcessed) {\r\n if (!this._aggregatesCalculated) {\r\n this._calculateAggregates(0, count);\r\n this._aggregatesCalculated = true;\r\n if (startIndex != 0) {\r\n this._psi = undefined;\r\n }\r\n }\r\n }\r\n if ((this._psi != startIndex || this._pei != endIndex || this.isPrivateDirty(\"adjustedStartIndex\")) && !this._selectionAggregatesCalculated) {\r\n if (startIndex === 0 && endIndex === count && this._aggregatesCalculated) {\r\n // void\r\n }\r\n else {\r\n this._calculateAggregates(startIndex, endIndex);\r\n }\r\n this._selectionAggregatesCalculated = true;\r\n }\r\n }\r\n if (this.isDirty(\"tooltip\")) {\r\n let tooltip = this.get(\"tooltip\");\r\n if (tooltip) {\r\n tooltip.hide(0);\r\n tooltip.set(\"tooltipTarget\", this);\r\n }\r\n }\r\n if (this.isDirty(\"fill\") || this.isDirty(\"stroke\")) {\r\n let markerRectangle;\r\n const legendDataItem = this.get(\"legendDataItem\");\r\n if (legendDataItem) {\r\n markerRectangle = legendDataItem.get(\"markerRectangle\");\r\n if (markerRectangle) {\r\n if (this.isVisible()) {\r\n if (this.isDirty(\"stroke\")) {\r\n let stroke = this.get(\"stroke\");\r\n markerRectangle.set(\"stroke\", stroke);\r\n }\r\n if (this.isDirty(\"fill\")) {\r\n let fill = this.get(\"fill\");\r\n markerRectangle.set(\"fill\", fill);\r\n }\r\n }\r\n }\r\n }\r\n this.updateLegendMarker(undefined);\r\n }\r\n if (this.bullets.length > 0) {\r\n let startIndex = this.startIndex();\r\n let endIndex = this.endIndex();\r\n if (endIndex < count) {\r\n endIndex++;\r\n }\r\n for (let i = startIndex; i < endIndex; i++) {\r\n let dataItem = dataItems[i];\r\n if (!dataItem.bullets) {\r\n this._makeBullets(dataItem);\r\n }\r\n }\r\n }\r\n }\r\n _handleRemoved() {\r\n }\r\n /**\r\n * @ignore\r\n */\r\n _adjustStartIndex(index) {\r\n return index;\r\n }\r\n _calculateAggregates(startIndex, endIndex) {\r\n let fields = this._valueFields;\r\n if (!fields) {\r\n throw new Error(\"No value fields are set for the series.\");\r\n }\r\n const excludeFromAggregate = this.get(\"excludeFromAggregate\");\r\n if (excludeFromAggregate) {\r\n fields = fields.filter((field) => {\r\n return excludeFromAggregate.indexOf(field) == -1;\r\n });\r\n }\r\n const sum = {};\r\n const absSum = {};\r\n const count = {};\r\n const low = {};\r\n const high = {};\r\n const open = {};\r\n const close = {};\r\n const average = {};\r\n const previous = {};\r\n for (let f = 0, flen = fields.length; f < flen; f++) {\r\n let key = fields[f];\r\n sum[key] = 0;\r\n absSum[key] = 0;\r\n count[key] = 0;\r\n }\r\n const dataItems = this.dataItems;\r\n const len = dataItems.length;\r\n for (let f = 0, flen = fields.length; f < flen; f++) {\r\n let key = fields[f];\r\n let change = key + \"Change\";\r\n let changePercent = key + \"ChangePercent\";\r\n let changePrevious = key + \"ChangePrevious\";\r\n let changePreviousPercent = key + \"ChangePreviousPercent\";\r\n let changeSelection = key + \"ChangeSelection\";\r\n let changeSelectionPercent = key + \"ChangeSelectionPercent\";\r\n let openKey = \"valueY\";\r\n if (key === \"valueX\" || key.endsWith(\"ValueX\")) {\r\n openKey = \"valueX\";\r\n }\r\n const baseValueSeries = this.getPrivate(\"baseValueSeries\");\r\n const adjustedStartIndex = this.getPrivate(\"adjustedStartIndex\", startIndex);\r\n const calculateChangesForItem = (dataItem, value, key) => {\r\n if (startIndex === 0) {\r\n const openValue = open[openKey];\r\n const changeValue = value - openValue;\r\n dataItem.setRaw((change), changeValue);\r\n dataItem.setRaw((changePercent), changeValue / openValue * 100);\r\n }\r\n const changePreviousValue = value - previous[openKey];\r\n const changeSelectionValue = value - open[openKey];\r\n dataItem.setRaw((changePrevious), changePreviousValue);\r\n dataItem.setRaw((changePreviousPercent), changePreviousValue / previous[openKey] * 100);\r\n dataItem.setRaw((changeSelection), changeSelectionValue);\r\n dataItem.setRaw((changeSelectionPercent), changeSelectionValue / open[openKey] * 100);\r\n previous[key] = value;\r\n };\r\n // find first non-null value to initialize open, low, high instead of checking in loop\r\n for (let i = adjustedStartIndex; i < endIndex; i++) {\r\n const dataItem = dataItems[i];\r\n if (dataItem) {\r\n let value = dataItem.get(key);\r\n if (value != null) {\r\n if (low[key] == null) {\r\n low[key] = value;\r\n }\r\n if (high[key] == null) {\r\n high[key] = value;\r\n }\r\n if (open[key] == null) {\r\n open[key] = value;\r\n previous[key] = value;\r\n if (baseValueSeries) {\r\n open[openKey] = baseValueSeries._getBase(openKey);\r\n }\r\n }\r\n // stop cycle\r\n break;\r\n }\r\n }\r\n }\r\n for (let i = adjustedStartIndex; i < endIndex; i++) {\r\n const dataItem = dataItems[i];\r\n if (dataItem) {\r\n let value = dataItem._settings[key];\r\n if (value != null) {\r\n count[key]++;\r\n sum[key] += value;\r\n absSum[key] += Math.abs(value);\r\n if (low[key] > value) {\r\n low[key] = value;\r\n }\r\n if (high[key] < value) {\r\n high[key] = value;\r\n }\r\n close[key] = value;\r\n calculateChangesForItem(dataItem, value, key);\r\n }\r\n }\r\n }\r\n average[key] = sum[key] / count[key];\r\n if (endIndex < len) {\r\n const dataItem = dataItems[endIndex];\r\n if (dataItem) {\r\n let value = dataItem.get(key);\r\n if (value != null) {\r\n calculateChangesForItem(dataItem, value, key);\r\n }\r\n }\r\n }\r\n if (endIndex + 1 < len) {\r\n const dataItem = dataItems[endIndex + 1];\r\n if (dataItem) {\r\n let value = dataItem.get(key);\r\n if (value != null) {\r\n calculateChangesForItem(dataItem, value, key);\r\n }\r\n }\r\n }\r\n if (startIndex > 0) {\r\n startIndex--;\r\n }\r\n delete previous[key];\r\n for (let i = startIndex; i < adjustedStartIndex; i++) {\r\n const dataItem = dataItems[i];\r\n if (dataItem) {\r\n let value = dataItem.get(key);\r\n if (previous[key] == null) {\r\n previous[key] = value;\r\n }\r\n if (value != null) {\r\n calculateChangesForItem(dataItem, value, key);\r\n }\r\n }\r\n }\r\n }\r\n for (let f = 0, flen = fields.length; f < flen; f++) {\r\n let key = fields[f];\r\n this.setPrivate((key + \"AverageSelection\"), average[key]);\r\n this.setPrivate((key + \"CountSelection\"), count[key]);\r\n this.setPrivate((key + \"SumSelection\"), sum[key]);\r\n this.setPrivate((key + \"AbsoluteSumSelection\"), absSum[key]);\r\n this.setPrivate((key + \"LowSelection\"), low[key]);\r\n this.setPrivate((key + \"HighSelection\"), high[key]);\r\n this.setPrivate((key + \"OpenSelection\"), open[key]);\r\n this.setPrivate((key + \"CloseSelection\"), close[key]);\r\n }\r\n if (startIndex === 0 && endIndex === len) {\r\n for (let f = 0, flen = fields.length; f < flen; f++) {\r\n let key = fields[f];\r\n this.setPrivate((key + \"Average\"), average[key]);\r\n this.setPrivate((key + \"Count\"), count[key]);\r\n this.setPrivate((key + \"Sum\"), sum[key]);\r\n this.setPrivate((key + \"AbsoluteSum\"), absSum[key]);\r\n this.setPrivate((key + \"Low\"), low[key]);\r\n this.setPrivate((key + \"High\"), high[key]);\r\n this.setPrivate((key + \"Open\"), open[key]);\r\n this.setPrivate((key + \"Close\"), close[key]);\r\n }\r\n }\r\n }\r\n _updateChildren() {\r\n super._updateChildren();\r\n this._psi = this.startIndex();\r\n this._pei = this.endIndex();\r\n if (this.isDirty(\"visible\")) {\r\n this.bulletsContainer.set(\"visible\", this.get(\"visible\"));\r\n }\r\n // Apply heat rules\r\n const rules = this.get(\"heatRules\");\r\n if (this._valuesDirty && rules && rules.length > 0) {\r\n $array.each(rules, (rule) => {\r\n const minValue = rule.minValue || this.getPrivate((rule.dataField + \"Low\")) || 0;\r\n const maxValue = rule.maxValue || this.getPrivate((rule.dataField + \"High\")) || 0;\r\n $array.each(rule.target._entities, (target) => {\r\n const value = target.dataItem.get(rule.dataField);\r\n if (!$type.isNumber(value)) {\r\n if (rule.neutral) {\r\n target.set(rule.key, rule.neutral);\r\n }\r\n const states = target.states;\r\n if (states) {\r\n const defaultState = states.lookup(\"default\");\r\n if (defaultState && rule.neutral) {\r\n defaultState.set(rule.key, rule.neutral);\r\n }\r\n }\r\n if (!rule.customFunction) {\r\n return;\r\n }\r\n }\r\n if (rule.customFunction) {\r\n rule.customFunction.call(this, target, minValue, maxValue, value);\r\n }\r\n else {\r\n let percent;\r\n if (rule.logarithmic) {\r\n percent = (Math.log(value) * Math.LOG10E - Math.log(minValue) * Math.LOG10E) / ((Math.log(maxValue) * Math.LOG10E - Math.log(minValue) * Math.LOG10E));\r\n }\r\n else {\r\n percent = (value - minValue) / (maxValue - minValue);\r\n }\r\n if ($type.isNumber(value) && (!$type.isNumber(percent) || Math.abs(percent) == Infinity)) {\r\n percent = 0.5;\r\n }\r\n // fixes problems if all values are the same\r\n let propertyValue;\r\n if ($type.isNumber(rule.min)) {\r\n propertyValue = rule.min + (rule.max - rule.min) * percent;\r\n }\r\n else if (rule.min instanceof Color) {\r\n propertyValue = Color.interpolate(percent, rule.min, rule.max);\r\n }\r\n else if (rule.min instanceof Percent) {\r\n propertyValue = percentInterpolate(percent, rule.min, rule.max);\r\n }\r\n target.set(rule.key, propertyValue);\r\n const states = target.states;\r\n if (states) {\r\n const defaultState = states.lookup(\"default\");\r\n if (defaultState) {\r\n defaultState.set(rule.key, propertyValue);\r\n }\r\n }\r\n }\r\n });\r\n });\r\n }\r\n if (this.get(\"visible\")) {\r\n const dataItems = this.dataItems;\r\n let count = dataItems.length;\r\n let startIndex = this.startIndex();\r\n let endIndex = this.endIndex();\r\n if (endIndex < count) {\r\n endIndex++;\r\n }\r\n if (startIndex > 0) {\r\n startIndex--;\r\n }\r\n for (let i = 0; i < startIndex; i++) {\r\n this._hideBullets(dataItems[i]);\r\n }\r\n for (let i = startIndex; i < endIndex; i++) {\r\n this._positionBullets(dataItems[i]);\r\n }\r\n for (let i = endIndex; i < count; i++) {\r\n this._hideBullets(dataItems[i]);\r\n }\r\n }\r\n }\r\n _positionBullets(dataItem) {\r\n if (dataItem.bullets) {\r\n $array.each(dataItem.bullets, (bullet) => {\r\n this._positionBullet(bullet);\r\n const sprite = bullet.get(\"sprite\");\r\n if (bullet.get(\"dynamic\")) {\r\n if (sprite) {\r\n sprite._markDirtyKey(\"fill\");\r\n sprite.markDirtySize();\r\n }\r\n if (sprite instanceof Container) {\r\n sprite.walkChildren((child) => {\r\n child._markDirtyKey(\"fill\");\r\n child.markDirtySize();\r\n if (child instanceof Label) {\r\n child.text.markDirtyText();\r\n }\r\n });\r\n }\r\n }\r\n if (sprite instanceof Label && sprite.get(\"populateText\")) {\r\n sprite.text.markDirtyText();\r\n }\r\n });\r\n }\r\n }\r\n _hideBullets(dataItem) {\r\n if (dataItem.bullets) {\r\n $array.each(dataItem.bullets, (bullet) => {\r\n let sprite = bullet.get(\"sprite\");\r\n if (sprite) {\r\n sprite.setPrivate(\"visible\", false);\r\n }\r\n });\r\n }\r\n }\r\n _positionBullet(_bullet) {\r\n }\r\n _placeBulletsContainer(chart) {\r\n chart.bulletsContainer.children.moveValue(this.bulletsContainer);\r\n }\r\n _removeBulletsContainer() {\r\n const bulletsContainer = this.bulletsContainer;\r\n if (bulletsContainer.parent) {\r\n bulletsContainer.parent.children.removeValue(bulletsContainer);\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n disposeDataItem(dataItem) {\r\n //super.disposeDataItem(dataItem); // does nothing\r\n const bullets = dataItem.bullets;\r\n if (bullets) {\r\n $array.each(bullets, (bullet) => {\r\n bullet.dispose();\r\n });\r\n dataItem.bullets = undefined;\r\n }\r\n }\r\n _getItemReaderLabel() {\r\n return \"\";\r\n }\r\n /**\r\n * Shows series's data item.\r\n *\r\n * @param dataItem Data item\r\n * @param duration Animation duration in milliseconds\r\n * @return Promise\r\n */\r\n showDataItem(dataItem, duration) {\r\n const _super = Object.create(null, {\r\n showDataItem: { get: () => super.showDataItem }\r\n });\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const promises = [_super.showDataItem.call(this, dataItem, duration)];\r\n const bullets = dataItem.bullets;\r\n if (bullets) {\r\n $array.each(bullets, (bullet) => {\r\n const sprite = bullet.get(\"sprite\");\r\n if (sprite) {\r\n promises.push(sprite.show(duration));\r\n }\r\n });\r\n }\r\n yield Promise.all(promises);\r\n });\r\n }\r\n /**\r\n * Hides series's data item.\r\n *\r\n * @param dataItem Data item\r\n * @param duration Animation duration in milliseconds\r\n * @return Promise\r\n */\r\n hideDataItem(dataItem, duration) {\r\n const _super = Object.create(null, {\r\n hideDataItem: { get: () => super.hideDataItem }\r\n });\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const promises = [_super.hideDataItem.call(this, dataItem, duration)];\r\n const bullets = dataItem.bullets;\r\n if (bullets) {\r\n $array.each(bullets, (bullet) => {\r\n const sprite = bullet.get(\"sprite\");\r\n if (sprite) {\r\n promises.push(sprite.hide(duration));\r\n }\r\n });\r\n }\r\n yield Promise.all(promises);\r\n });\r\n }\r\n _sequencedShowHide(show, duration) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n if (this.get(\"sequencedInterpolation\")) {\r\n if (!$type.isNumber(duration)) {\r\n duration = this.get(\"interpolationDuration\", 0);\r\n }\r\n if (duration > 0) {\r\n const startIndex = this.startIndex();\r\n const endIndex = this.endIndex();\r\n yield Promise.all($array.map(this.dataItems, (dataItem, i) => __awaiter(this, void 0, void 0, function* () {\r\n let realDuration = duration || 0;\r\n if (i < startIndex - 10 || i > endIndex + 10) {\r\n realDuration = 0;\r\n }\r\n //let delay = this.get(\"sequencedDelay\", 0) * i + realDuration * (i - startIndex) / (endIndex - startIndex);\r\n let delay = this.get(\"sequencedDelay\", 0) + realDuration / (endIndex - startIndex);\r\n yield $time.sleep(delay * (i - startIndex));\r\n if (show) {\r\n yield this.showDataItem(dataItem, realDuration);\r\n }\r\n else {\r\n yield this.hideDataItem(dataItem, realDuration);\r\n }\r\n })));\r\n }\r\n else {\r\n yield Promise.all($array.map(this.dataItems, (dataItem) => {\r\n if (show) {\r\n return this.showDataItem(dataItem, 0);\r\n }\r\n else {\r\n return this.hideDataItem(dataItem, 0);\r\n }\r\n }));\r\n }\r\n }\r\n });\r\n }\r\n /**\r\n * @ignore\r\n */\r\n updateLegendValue(dataItem) {\r\n if (dataItem) {\r\n const legendDataItem = dataItem.get(\"legendDataItem\");\r\n if (legendDataItem) {\r\n const valueLabel = legendDataItem.get(\"valueLabel\");\r\n if (valueLabel) {\r\n const text = valueLabel.text;\r\n let txt = \"\";\r\n valueLabel._setDataItem(dataItem);\r\n txt = this.get(\"legendValueText\", text.get(\"text\", \"\"));\r\n valueLabel.set(\"text\", txt);\r\n text.markDirtyText();\r\n }\r\n const label = legendDataItem.get(\"label\");\r\n if (label) {\r\n const text = label.text;\r\n let txt = \"\";\r\n label._setDataItem(dataItem);\r\n txt = this.get(\"legendLabelText\", text.get(\"text\", \"\"));\r\n label.set(\"text\", txt);\r\n text.markDirtyText();\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n updateLegendMarker(_dataItem) {\r\n }\r\n _onHide() {\r\n super._onHide();\r\n const tooltip = this.getTooltip();\r\n if (tooltip) {\r\n tooltip.hide();\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n hoverDataItem(_dataItem) { }\r\n /**\r\n * @ignore\r\n */\r\n unhoverDataItem(_dataItem) { }\r\n /**\r\n * @ignore\r\n */\r\n _getBase(key) {\r\n const dataItem = this.dataItems[this.startIndex()];\r\n if (dataItem) {\r\n return dataItem.get(key);\r\n }\r\n return 0;\r\n }\r\n}\r\nSeries.className = \"Series\";\r\nSeries.classNames = Component.classNames.concat([Series.className]);\r\n//# sourceMappingURL=Series.js.map","import { __awaiter } from \"tslib\";\r\nimport { DataItem } from \"../../../core/render/Component\";\r\nimport { Series } from \"../../../core/render/Series\";\r\nimport { List } from \"../../../core/util/List\";\r\nimport { Container } from \"../../../core/render/Container\";\r\nimport { Graphics } from \"../../../core/render/Graphics\";\r\nimport * as $type from \"../../../core/util/Type\";\r\nimport * as $object from \"../../../core/util/Object\";\r\nimport * as $array from \"../../../core/util/Array\";\r\nimport * as $utils from \"../../../core/util/Utils\";\r\n/**\r\n * @ignore\r\n */\r\nfunction min(left, right) {\r\n if (left == null)\r\n return right;\r\n if (right == null)\r\n return left;\r\n return (right < left) ? right : left;\r\n}\r\n/**\r\n * @ignore\r\n */\r\nfunction max(left, right) {\r\n if (left == null)\r\n return right;\r\n if (right == null)\r\n return left;\r\n return (left > right) ? left : right;\r\n}\r\n/**\r\n * A base class for all XY chart series.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/series/} for more info\r\n */\r\nexport class XYSeries extends Series {\r\n constructor() {\r\n super(...arguments);\r\n this._axesDirty = false;\r\n this._stackDirty = false;\r\n this._selectionProcessed = false;\r\n this._dataSets = {};\r\n this._x = 0;\r\n this._y = 0;\r\n this._bullets = {};\r\n /**\r\n * A [[Container]] that us used to put series' elements in.\r\n *\r\n * @default Container.new()\r\n */\r\n this.mainContainer = this.children.push(Container.new(this._root, {}));\r\n /**\r\n * A list of axis ranges that affect the series.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/axes/axis-ranges/} for more info\r\n */\r\n this.axisRanges = new List();\r\n this._skipped = false;\r\n this._couldStackTo = [];\r\n this._reallyStackedTo = {};\r\n this._stackedSeries = {};\r\n this._aLocationX0 = 0;\r\n this._aLocationX1 = 1;\r\n this._aLocationY0 = 0;\r\n this._aLocationY1 = 1;\r\n this._showBullets = true;\r\n this.valueXFields = [\r\n \"valueX\",\r\n \"openValueX\",\r\n \"lowValueX\",\r\n \"highValueX\"\r\n ];\r\n this.valueYFields = [\r\n \"valueY\",\r\n \"openValueY\",\r\n \"lowValueY\",\r\n \"highValueY\"\r\n ];\r\n this._emptyDataItem = new DataItem(this, undefined, {});\r\n }\r\n _afterNew() {\r\n this.fields.push(\"categoryX\", \"categoryY\", \"openCategoryX\", \"openCategoryY\");\r\n this.valueFields.push(\"valueX\", \"valueY\", \"openValueX\", \"openValueY\", \"lowValueX\", \"lowValueY\", \"highValueX\", \"highValueY\");\r\n this._setRawDefault(\"vcx\", 1);\r\n this._setRawDefault(\"vcy\", 1);\r\n // this can't go to themes, as data might be parsed before theme\r\n this._setRawDefault(\"valueXShow\", \"valueXWorking\");\r\n this._setRawDefault(\"valueYShow\", \"valueYWorking\");\r\n this._setRawDefault(\"openValueXShow\", \"openValueXWorking\");\r\n this._setRawDefault(\"openValueYShow\", \"openValueYWorking\");\r\n this._setRawDefault(\"lowValueXShow\", \"lowValueXWorking\");\r\n this._setRawDefault(\"lowValueYShow\", \"lowValueYWorking\");\r\n this._setRawDefault(\"highValueXShow\", \"highValueXWorking\");\r\n this._setRawDefault(\"highValueYShow\", \"highValueYWorking\");\r\n this._setRawDefault(\"lowValueXGrouped\", \"low\");\r\n this._setRawDefault(\"lowValueYGrouped\", \"low\");\r\n this._setRawDefault(\"highValueXGrouped\", \"high\");\r\n this._setRawDefault(\"highValueYGrouped\", \"high\");\r\n const xAxis = this.get(\"xAxis\");\r\n if (xAxis) {\r\n this._xRenderer = xAxis.get(\"renderer\");\r\n }\r\n const yAxis = this.get(\"yAxis\");\r\n if (yAxis) {\r\n this._yRenderer = yAxis.get(\"renderer\");\r\n }\r\n super._afterNew();\r\n this.set(\"maskContent\", true);\r\n this._disposers.push(this.axisRanges.events.onAll((change) => {\r\n if (change.type === \"clear\") {\r\n $array.each(change.oldValues, (axisRange) => {\r\n this._removeAxisRange(axisRange);\r\n });\r\n }\r\n else if (change.type === \"push\") {\r\n this._processAxisRange(change.newValue);\r\n }\r\n else if (change.type === \"setIndex\") {\r\n this._processAxisRange(change.newValue);\r\n }\r\n else if (change.type === \"insertIndex\") {\r\n this._processAxisRange(change.newValue);\r\n }\r\n else if (change.type === \"removeIndex\") {\r\n this._removeAxisRange(change.oldValue);\r\n }\r\n else if (change.type === \"moveIndex\") {\r\n this._processAxisRange(change.value);\r\n }\r\n else {\r\n throw new Error(\"Unknown IStreamEvent type\");\r\n }\r\n }));\r\n this.states.create(\"hidden\", { opacity: 1, visible: false });\r\n this.onPrivate(\"startIndex\", () => {\r\n this.root.events.once(\"frameended\", () => {\r\n this.updateLegendValue();\r\n });\r\n });\r\n this.onPrivate(\"endIndex\", () => {\r\n this.root.events.once(\"frameended\", () => {\r\n this.updateLegendValue();\r\n });\r\n });\r\n this._makeFieldNames();\r\n }\r\n _processAxisRange(axisRange) {\r\n const container = Container.new(this._root, {});\r\n axisRange.container = container;\r\n this.children.push(container);\r\n axisRange.series = this;\r\n const axisDataItem = axisRange.axisDataItem;\r\n axisDataItem.setRaw(\"isRange\", true);\r\n const axis = axisDataItem.component;\r\n if (axis) {\r\n axis._processAxisRange(axisDataItem, [\"range\", \"series\"]);\r\n const bullet = axisDataItem.get(\"bullet\");\r\n if (bullet) {\r\n const sprite = bullet.get(\"sprite\");\r\n if (sprite) {\r\n sprite.setPrivate(\"visible\", false);\r\n }\r\n }\r\n const axisFill = axisDataItem.get(\"axisFill\");\r\n if (axisFill) {\r\n container.set(\"mask\", axisFill);\r\n }\r\n axis._seriesAxisRanges.push(axisDataItem);\r\n }\r\n }\r\n _onDataClear() {\r\n super._onDataClear();\r\n $object.each(this._dataSets, (_key, dataItems) => {\r\n $array.each(dataItems, (dataItem) => {\r\n dataItem.dispose();\r\n });\r\n dataItems.length = 0;\r\n });\r\n }\r\n _removeAxisRange(axisRange) {\r\n const axisDataItem = axisRange.axisDataItem;\r\n const axis = axisDataItem.component;\r\n axisDataItem.dispose();\r\n $array.remove(axis._seriesAxisRanges, axisDataItem);\r\n const container = axisRange.container;\r\n if (container) {\r\n container.dispose();\r\n }\r\n }\r\n _updateFields() {\r\n super._updateFields();\r\n this._valueXFields = [];\r\n this._valueYFields = [];\r\n this._valueXShowFields = [];\r\n this._valueYShowFields = [];\r\n this.__valueXShowFields = [];\r\n this.__valueYShowFields = [];\r\n if (this.valueXFields) {\r\n $array.each(this.valueXFields, (key) => {\r\n const field = this.get((key + \"Field\"));\r\n if (field) {\r\n this._valueXFields.push(key);\r\n let field = this.get((key + \"Show\"));\r\n this.__valueXShowFields.push(field);\r\n if (field.indexOf(\"Working\") != -1) {\r\n this._valueXShowFields.push(field.split(\"Working\")[0]);\r\n }\r\n else {\r\n this._valueXShowFields.push(field);\r\n }\r\n }\r\n });\r\n }\r\n if (this.valueYFields) {\r\n $array.each(this.valueYFields, (key) => {\r\n const field = this.get((key + \"Field\"));\r\n if (field) {\r\n this._valueYFields.push(key);\r\n let field = this.get((key + \"Show\"));\r\n this.__valueYShowFields.push(field);\r\n if (field.indexOf(\"Working\") != -1) {\r\n this._valueYShowFields.push(field.split(\"Working\")[0]);\r\n }\r\n else {\r\n this._valueYShowFields.push(field);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n _dispose() {\r\n super._dispose();\r\n this._bullets = {};\r\n const chart = this.chart;\r\n if (chart) {\r\n chart.series.removeValue(this);\r\n }\r\n $array.removeFirst(this.get(\"xAxis\").series, this);\r\n $array.removeFirst(this.get(\"yAxis\").series, this);\r\n }\r\n // TODO use SelectKeys<this[\"_privateSettings\"], number | undefined>\r\n _min(key, value) {\r\n let newValue = min(this.getPrivate(key), value);\r\n this.setPrivate(key, newValue);\r\n }\r\n // TODO use SelectKeys<this[\"_privateSettings\"], number | undefined>\r\n _max(key, value) {\r\n let newValue = max(this.getPrivate(key), value);\r\n this.setPrivate(key, newValue);\r\n }\r\n _shouldMakeBullet(dataItem) {\r\n const xAxis = this.get(\"xAxis\");\r\n const yAxis = this.get(\"yAxis\");\r\n const baseAxis = this.get(\"baseAxis\");\r\n if (!xAxis.inited || !yAxis.inited) {\r\n return false;\r\n }\r\n const minBulletDistance = this.get(\"minBulletDistance\", 0);\r\n if (minBulletDistance > 0) {\r\n let startIndex = this.startIndex();\r\n let endIndex = this.endIndex();\r\n let count = endIndex - startIndex;\r\n if (xAxis == baseAxis) {\r\n if (this._xRenderer.axisLength() / count < minBulletDistance / 5) {\r\n return false;\r\n }\r\n }\r\n else if (yAxis == baseAxis) {\r\n if (this._yRenderer.axisLength() / count < minBulletDistance / 5) {\r\n return false;\r\n }\r\n }\r\n }\r\n if (dataItem.get(this._xField) != null && dataItem.get(this._yField) != null) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n _makeFieldNames() {\r\n const xAxis = this.get(\"xAxis\");\r\n const yAxis = this.get(\"yAxis\");\r\n const xName = xAxis.getPrivate(\"name\");\r\n const xCapName = $utils.capitalizeFirst(xName);\r\n const yName = yAxis.getPrivate(\"name\");\r\n const yCapName = $utils.capitalizeFirst(yName);\r\n const xLetter = xAxis.get(\"renderer\").getPrivate(\"letter\");\r\n const yLetter = yAxis.get(\"renderer\").getPrivate(\"letter\");\r\n const open = \"open\";\r\n const low = \"low\";\r\n const high = \"high\";\r\n const show = \"Show\";\r\n if (xAxis.className === \"ValueAxis\") {\r\n this._xField = this.get((xName + xLetter + show));\r\n this._xOpenField = this.get((open + xCapName + xLetter + show));\r\n this._xLowField = this.get((low + xCapName + xLetter + show));\r\n this._xHighField = this.get((high + xCapName + xLetter + show));\r\n }\r\n else {\r\n this._xField = (xName + xLetter);\r\n this._xOpenField = (open + xCapName + xLetter);\r\n this._xLowField = (low + xCapName + xLetter);\r\n this._xHighField = (high + xCapName + xLetter);\r\n }\r\n if (yAxis.className === \"ValueAxis\") {\r\n this._yField = this.get((yName + yLetter + show));\r\n this._yOpenField = this.get((open + yCapName + yLetter + show));\r\n this._yLowField = this.get((low + yCapName + yLetter + show));\r\n this._yHighField = this.get((high + yCapName + yLetter + show));\r\n }\r\n else {\r\n this._yField = (yName + yLetter);\r\n this._yOpenField = (open + yCapName + yLetter);\r\n this._yLowField = (low + yCapName + yLetter);\r\n this._yHighField = (high + yCapName + yLetter);\r\n }\r\n }\r\n _fixVC() {\r\n const xAxis = this.get(\"xAxis\");\r\n const yAxis = this.get(\"yAxis\");\r\n const baseAxis = this.get(\"baseAxis\");\r\n const hiddenState = this.states.lookup(\"hidden\");\r\n const sequencedInterpolation = this.get(\"sequencedInterpolation\");\r\n if (hiddenState) {\r\n let value = 0;\r\n if (sequencedInterpolation) {\r\n value = 0.999999999999; // makes animate, good for stacked\r\n }\r\n if (xAxis === baseAxis) {\r\n hiddenState.set(\"vcy\", value);\r\n }\r\n else if (yAxis === baseAxis) {\r\n hiddenState.set(\"vcx\", value);\r\n }\r\n else {\r\n hiddenState.set(\"vcy\", value);\r\n hiddenState.set(\"vcx\", value);\r\n }\r\n }\r\n }\r\n _handleMaskBullets() {\r\n if (this.isDirty(\"maskBullets\")) {\r\n this.bulletsContainer.set(\"maskContent\", this.get(\"maskBullets\"));\r\n }\r\n }\r\n _fixPosition() {\r\n const xAxis = this.get(\"xAxis\");\r\n const yAxis = this.get(\"yAxis\");\r\n this.set(\"x\", xAxis.x() - $utils.relativeToValue(xAxis.get(\"centerX\", 0), xAxis.width()) - xAxis.parent.get(\"paddingLeft\", 0));\r\n this.set(\"y\", yAxis.y() - $utils.relativeToValue(yAxis.get(\"centerY\", 0), yAxis.height()) - yAxis.parent.get(\"paddingTop\", 0));\r\n this.bulletsContainer.set(\"y\", this.y());\r\n this.bulletsContainer.set(\"x\", this.x());\r\n }\r\n _prepareChildren() {\r\n super._prepareChildren();\r\n this._xRenderer = this.get(\"xAxis\").get(\"renderer\");\r\n this._yRenderer = this.get(\"yAxis\").get(\"renderer\");\r\n this._bullets = {};\r\n if (this.isDirty(\"valueYShow\") || this.isDirty(\"valueXShow\") || this.isDirty(\"openValueYShow\") || this.isDirty(\"openValueXShow\") || this.isDirty(\"lowValueYShow\") || this.isDirty(\"lowValueXShow\") || this.isDirty(\"highValueYShow\") || this.isDirty(\"highValueXShow\")) {\r\n this._updateFields();\r\n this._makeFieldNames();\r\n this._valuesDirty = true;\r\n }\r\n if (this.isDirty(\"xAxis\") || this.isDirty(\"yAxis\")) {\r\n this._valuesDirty = true;\r\n }\r\n this.set(\"width\", this.get(\"xAxis\").width());\r\n this.set(\"height\", this.get(\"yAxis\").height());\r\n this._handleMaskBullets();\r\n const xAxis = this.get(\"xAxis\");\r\n const yAxis = this.get(\"yAxis\");\r\n const baseAxis = this.get(\"baseAxis\");\r\n const tooltipPositionX = this.get(\"tooltipPositionX\");\r\n let tooltipFieldX;\r\n switch (tooltipPositionX) {\r\n case \"open\":\r\n tooltipFieldX = this._xOpenField;\r\n break;\r\n case \"low\":\r\n tooltipFieldX = this._xLowField;\r\n break;\r\n case \"high\":\r\n tooltipFieldX = this._xHighField;\r\n break;\r\n default:\r\n tooltipFieldX = this._xField;\r\n }\r\n this._tooltipFieldX = tooltipFieldX;\r\n const tooltipPositionY = this.get(\"tooltipPositionY\");\r\n let tooltipFieldY;\r\n switch (tooltipPositionY) {\r\n case \"open\":\r\n tooltipFieldY = this._yOpenField;\r\n break;\r\n case \"low\":\r\n tooltipFieldY = this._yLowField;\r\n break;\r\n case \"high\":\r\n tooltipFieldY = this._yHighField;\r\n break;\r\n default:\r\n tooltipFieldY = this._yField;\r\n }\r\n this._tooltipFieldY = tooltipFieldY;\r\n if (this.isDirty(\"baseAxis\")) {\r\n this._fixVC();\r\n }\r\n this._fixPosition();\r\n const stacked = this.get(\"stacked\");\r\n if (this.isDirty(\"stacked\")) {\r\n if (stacked) {\r\n if (this._valuesDirty && !this._dataProcessed) {\r\n }\r\n else {\r\n this._stack();\r\n }\r\n }\r\n else {\r\n this._unstack();\r\n }\r\n }\r\n if (this._valuesDirty && !this._dataProcessed) {\r\n this._dataProcessed = true;\r\n if (stacked) {\r\n this._stack();\r\n }\r\n let minX = undefined;\r\n let maxX = undefined;\r\n let minY = undefined;\r\n let maxY = undefined;\r\n $array.each(this.dataItems, (dataItem) => {\r\n $array.each(this._valueXShowFields, (key) => {\r\n let value = dataItem.get(key);\r\n if (value != null) {\r\n if (stacked) {\r\n value += this.getStackedXValue(dataItem, key);\r\n }\r\n minX = min(minX, value);\r\n maxX = max(maxX, value);\r\n }\r\n });\r\n $array.each(this._valueYShowFields, (key) => {\r\n let value = dataItem.get(key);\r\n if (value != null) {\r\n if (stacked) {\r\n value += this.getStackedYValue(dataItem, key);\r\n }\r\n minY = min(minY, value);\r\n maxY = max(maxY, value);\r\n }\r\n });\r\n xAxis.processSeriesDataItem(dataItem, this._valueXFields);\r\n yAxis.processSeriesDataItem(dataItem, this._valueYFields);\r\n });\r\n this._min(\"minX\", minX);\r\n this._max(\"maxX\", maxX);\r\n this._min(\"minY\", minY);\r\n this._max(\"maxY\", maxY);\r\n xAxis._seriesValuesDirty = true;\r\n yAxis._seriesValuesDirty = true;\r\n if (!this.get(\"ignoreMinMax\")) {\r\n if (this.isPrivateDirty(\"minX\") || this.isPrivateDirty(\"maxX\")) {\r\n xAxis.markDirtyExtremes();\r\n }\r\n if (this.isPrivateDirty(\"minY\") || this.isPrivateDirty(\"maxY\")) {\r\n yAxis.markDirtyExtremes();\r\n }\r\n }\r\n this._markStakedDirtyStack();\r\n //this.updateLegendMarker(undefined); // causes legend marker to change color instantly when on\r\n if (!this.get(\"tooltipDataItem\")) {\r\n this.updateLegendValue(undefined);\r\n }\r\n }\r\n if (this.isDirty(\"vcx\") || this.isDirty(\"vcy\")) {\r\n this._markStakedDirtyStack();\r\n }\r\n if (!this._dataGrouped) {\r\n xAxis._groupSeriesData(this);\r\n yAxis._groupSeriesData(this);\r\n this._dataGrouped = true;\r\n }\r\n if (this._valuesDirty || this.isPrivateDirty(\"startIndex\") || this.isPrivateDirty(\"adjustedStartIndex\") || this.isPrivateDirty(\"endIndex\") || this.isDirty(\"vcx\") || this.isDirty(\"vcy\") || this._stackDirty || this._sizeDirty || this.isDirty(\"minBulletDistance\")) {\r\n let startIndex = this.startIndex();\r\n let endIndex = this.endIndex();\r\n let minBulletDistance = this.get(\"minBulletDistance\", 0);\r\n if (minBulletDistance > 0 && baseAxis) {\r\n if (baseAxis.get(\"renderer\").axisLength() / (endIndex - startIndex) > minBulletDistance) {\r\n this._showBullets = true;\r\n }\r\n else {\r\n this._showBullets = false;\r\n }\r\n }\r\n if ((this._psi != startIndex || this._pei != endIndex || this.isDirty(\"vcx\") || this.isDirty(\"vcy\") || this.isPrivateDirty(\"adjustedStartIndex\") || this._stackDirty || this._valuesDirty) && !this._selectionProcessed) {\r\n this._selectionProcessed = true;\r\n const vcx = this.get(\"vcx\", 1);\r\n const vcy = this.get(\"vcy\", 1);\r\n const stacked = this.get(\"stacked\", false);\r\n const outOfSelection = this.getPrivate(\"outOfSelection\");\r\n if (baseAxis === xAxis || !baseAxis) {\r\n yAxis._calculateTotals();\r\n this.setPrivateRaw(\"selectionMinY\", undefined);\r\n this.setPrivateRaw(\"selectionMaxY\", undefined);\r\n if (!outOfSelection) {\r\n for (let i = startIndex; i < endIndex; i++) {\r\n this.processYSelectionDataItem(this.dataItems[i], vcy, stacked);\r\n }\r\n }\r\n else {\r\n yAxis.markDirtySelectionExtremes();\r\n }\r\n }\r\n if (baseAxis === yAxis || !baseAxis) {\r\n xAxis._calculateTotals();\r\n this.setPrivateRaw(\"selectionMinX\", undefined);\r\n this.setPrivateRaw(\"selectionMaxX\", undefined);\r\n if (!outOfSelection) {\r\n for (let i = startIndex; i < endIndex; i++) {\r\n this.processXSelectionDataItem(this.dataItems[i], vcx, stacked);\r\n }\r\n }\r\n else {\r\n yAxis.markDirtySelectionExtremes();\r\n }\r\n }\r\n if (baseAxis === xAxis || !baseAxis) {\r\n if (this.get(\"valueYShow\") !== \"valueYWorking\" || this.get(\"useSelectionExtremes\")) {\r\n const selectionMinY = this.getPrivate(\"selectionMinY\");\r\n if (selectionMinY != null) {\r\n this.setPrivateRaw(\"minY\", selectionMinY);\r\n yAxis.markDirtyExtremes();\r\n }\r\n const selectionMaxY = this.getPrivate(\"selectionMaxY\");\r\n if (selectionMaxY != null) {\r\n this.setPrivateRaw(\"maxY\", selectionMaxY);\r\n yAxis.markDirtyExtremes();\r\n }\r\n }\r\n }\r\n if (baseAxis === yAxis || !baseAxis) {\r\n if (this.get(\"valueXShow\") !== \"valueXWorking\" || this.get(\"useSelectionExtremes\")) {\r\n const selectionMinX = this.getPrivate(\"selectionMinX\");\r\n if (selectionMinX != null) {\r\n this.setPrivateRaw(\"minX\", selectionMinX);\r\n yAxis.markDirtyExtremes();\r\n }\r\n const selectionMaxX = this.getPrivate(\"selectionMaxX\");\r\n if (selectionMaxX != null) {\r\n this.setPrivateRaw(\"maxX\", selectionMaxX);\r\n xAxis.markDirtyExtremes();\r\n }\r\n }\r\n }\r\n if (this.isPrivateDirty(\"selectionMinX\") || this.isPrivateDirty(\"selectionMaxX\")) {\r\n xAxis.markDirtySelectionExtremes();\r\n }\r\n if (this.isPrivateDirty(\"selectionMinY\") || this.isPrivateDirty(\"selectionMaxY\")) {\r\n yAxis.markDirtySelectionExtremes();\r\n }\r\n // this.updateLegendValue(undefined); flickers while panning\r\n }\r\n }\r\n }\r\n _postUpdateData() {\r\n const xAxis = this.get(\"xAxis\");\r\n const yAxis = this.get(\"yAxis\");\r\n xAxis._seriesValuesDirty = true;\r\n yAxis._seriesValuesDirty = true;\r\n $array.each(this.dataItems, (dataItem) => {\r\n dataItem.open = undefined;\r\n dataItem.close = undefined;\r\n xAxis.processSeriesDataItem(dataItem, this._valueXFields);\r\n yAxis.processSeriesDataItem(dataItem, this._valueYFields);\r\n });\r\n }\r\n _makeRangeMask() {\r\n if (this.axisRanges.length > 0) {\r\n let mainContainerMask = this._mainContainerMask;\r\n if (mainContainerMask == null) {\r\n mainContainerMask = this.children.push(Graphics.new(this._root, {}));\r\n this._mainContainerMask = mainContainerMask;\r\n mainContainerMask.set(\"draw\", (display, target) => {\r\n const parent = this.parent;\r\n if (parent) {\r\n const w = this._root.container.width();\r\n const h = this._root.container.height();\r\n display.moveTo(-w, -h);\r\n display.lineTo(-w, h * 2);\r\n display.lineTo(w * 2, h * 2);\r\n display.lineTo(w * 2, -h);\r\n display.lineTo(-w, -h);\r\n this.axisRanges.each((axisRange) => {\r\n const fill = axisRange.axisDataItem.get(\"axisFill\");\r\n if (parent) {\r\n if (fill) {\r\n let draw = fill.get(\"draw\");\r\n if (draw) {\r\n draw(display, target);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n this.mainContainer._display.mask = mainContainerMask._display;\r\n });\r\n }\r\n mainContainerMask.markDirty();\r\n mainContainerMask._markDirtyKey(\"fill\");\r\n }\r\n else {\r\n this.mainContainer._display.mask = null;\r\n }\r\n }\r\n _updateChildren() {\r\n super._updateChildren();\r\n // save for performance\r\n this._x = this.x();\r\n this._y = this.y();\r\n this._makeRangeMask();\r\n }\r\n _stack() {\r\n const chart = this.chart;\r\n if (chart) {\r\n const seriesIndex = chart.series.indexOf(this);\r\n this._couldStackTo = [];\r\n if (seriesIndex > 0) {\r\n let series;\r\n for (let i = seriesIndex - 1; i >= 0; i--) {\r\n series = chart.series.getIndex(i);\r\n if (series.get(\"xAxis\") === this.get(\"xAxis\") && series.get(\"yAxis\") === this.get(\"yAxis\") && series.className === this.className) {\r\n this._couldStackTo.push(series);\r\n if (!series.get(\"stacked\")) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n this._stackDataItems();\r\n }\r\n }\r\n _unstack() {\r\n $object.each(this._reallyStackedTo, (_key, value) => {\r\n delete (value._stackedSeries[this.uid]);\r\n });\r\n this._reallyStackedTo = {};\r\n $array.each(this.dataItems, (dataItem) => {\r\n dataItem.setRaw(\"stackToItemY\", undefined);\r\n dataItem.setRaw(\"stackToItemX\", undefined);\r\n });\r\n }\r\n _handleRemoved() {\r\n const xAxis = this.get(\"xAxis\");\r\n if (xAxis) {\r\n xAxis._handleSeriesRemoved();\r\n }\r\n const yAxis = this.get(\"yAxis\");\r\n if (yAxis) {\r\n yAxis._handleSeriesRemoved();\r\n }\r\n }\r\n _stackDataItems() {\r\n // this works only with the same number of data @todo: search by date/category?\r\n const baseAxis = this.get(\"baseAxis\");\r\n const xAxis = this.get(\"xAxis\");\r\n const yAxis = this.get(\"yAxis\");\r\n let field;\r\n let stackToItemKey;\r\n if (baseAxis === xAxis) {\r\n field = \"valueY\";\r\n stackToItemKey = \"stackToItemY\";\r\n }\r\n else if (baseAxis === yAxis) {\r\n field = \"valueX\";\r\n stackToItemKey = \"stackToItemX\";\r\n }\r\n let len = this._couldStackTo.length;\r\n let index = 0;\r\n const stackToNegative = this.get(\"stackToNegative\");\r\n this._reallyStackedTo = {};\r\n $array.each(this.dataItems, (dataItem) => {\r\n for (let s = 0; s < len; s++) {\r\n let stackToSeries = this._couldStackTo[s];\r\n let stackToItem = stackToSeries.dataItems[index];\r\n let value = dataItem.get(field);\r\n if (stackToItem) {\r\n let stackValue = stackToItem.get(field);\r\n if (stackToNegative) {\r\n if ($type.isNumber(value)) {\r\n if ($type.isNumber(stackValue)) {\r\n if (s == len - 1) {\r\n dataItem.setRaw(stackToItemKey, undefined);\r\n }\r\n if (value >= 0 && stackValue >= 0) {\r\n dataItem.setRaw(stackToItemKey, stackToItem);\r\n this._reallyStackedTo[stackToSeries.uid] = stackToSeries;\r\n stackToSeries._stackedSeries[this.uid] = this;\r\n break;\r\n }\r\n if (value < 0 && stackValue < 0) {\r\n dataItem.setRaw(stackToItemKey, stackToItem);\r\n this._reallyStackedTo[stackToSeries.uid] = stackToSeries;\r\n stackToSeries._stackedSeries[this.uid] = this;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n else {\r\n if ($type.isNumber(value) && $type.isNumber(stackValue)) {\r\n dataItem.setRaw(stackToItemKey, stackToItem);\r\n this._reallyStackedTo[stackToSeries.uid] = stackToSeries;\r\n stackToSeries._stackedSeries[this.uid] = this;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n index++;\r\n });\r\n }\r\n processXSelectionDataItem(dataItem, vcx, stacked) {\r\n $array.each(this.__valueXShowFields, (key) => {\r\n let value = dataItem.get(key);\r\n if (value != null) {\r\n if (stacked) {\r\n value += this.getStackedXValueWorking(dataItem, key);\r\n }\r\n this._min(\"selectionMinX\", value);\r\n this._max(\"selectionMaxX\", value * vcx);\r\n }\r\n });\r\n }\r\n processYSelectionDataItem(dataItem, vcy, stacked) {\r\n $array.each(this.__valueYShowFields, (key) => {\r\n let value = dataItem.get(key);\r\n if (value != null) {\r\n if (stacked) {\r\n value += this.getStackedYValueWorking(dataItem, key);\r\n }\r\n this._min(\"selectionMinY\", value);\r\n this._max(\"selectionMaxY\", value * vcy);\r\n }\r\n });\r\n }\r\n /**\r\n * @ignore\r\n */\r\n getStackedYValueWorking(dataItem, key) {\r\n const stackToItem = dataItem.get(\"stackToItemY\");\r\n if (stackToItem) {\r\n const stackedToSeries = stackToItem.component;\r\n return stackToItem.get(key, 0) * stackedToSeries.get(\"vcy\", 1) + this.getStackedYValueWorking(stackToItem, key);\r\n }\r\n return 0;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n getStackedXValueWorking(dataItem, key) {\r\n const stackToItem = dataItem.get(\"stackToItemX\");\r\n if (stackToItem) {\r\n const stackedToSeries = stackToItem.component;\r\n return stackToItem.get(key, 0) * stackedToSeries.get(\"vcx\", 1) + this.getStackedXValueWorking(stackToItem, key);\r\n }\r\n return 0;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n getStackedYValue(dataItem, key) {\r\n const stackToItem = dataItem.get(\"stackToItemY\");\r\n if (stackToItem) {\r\n return stackToItem.get(key, 0) + this.getStackedYValue(stackToItem, key);\r\n }\r\n return 0;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n getStackedXValue(dataItem, key) {\r\n const stackToItem = dataItem.get(\"stackToItemX\");\r\n if (stackToItem) {\r\n return stackToItem.get(key, 0) + this.getStackedXValue(stackToItem, key);\r\n }\r\n return 0;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n createLegendMarker(_dataItem) {\r\n this.updateLegendMarker();\r\n }\r\n _markDirtyAxes() {\r\n this._axesDirty = true;\r\n this.markDirty();\r\n }\r\n _markDataSetDirty() {\r\n this._afterDataChange();\r\n this._valuesDirty = true;\r\n this._dataProcessed = false;\r\n this._aggregatesCalculated = false;\r\n this.markDirty();\r\n }\r\n _clearDirty() {\r\n super._clearDirty();\r\n this._axesDirty = false;\r\n this._selectionProcessed = false;\r\n this._stackDirty = false;\r\n this._dataProcessed = false;\r\n }\r\n _positionBullet(bullet) {\r\n let sprite = bullet.get(\"sprite\");\r\n if (sprite) {\r\n let dataItem = sprite.dataItem;\r\n let locationX = bullet.get(\"locationX\", dataItem.get(\"locationX\", 0.5));\r\n let locationY = bullet.get(\"locationY\", dataItem.get(\"locationY\", 0.5));\r\n let xAxis = this.get(\"xAxis\");\r\n let yAxis = this.get(\"yAxis\");\r\n let exactLocationX = this.get(\"exactLocationX\", false);\r\n let exactLocationY = this.get(\"exactLocationY\", false);\r\n let positionX = xAxis.getDataItemPositionX(dataItem, this._xField, locationX, this.get(\"vcx\", 1), exactLocationX);\r\n let positionY = yAxis.getDataItemPositionY(dataItem, this._yField, locationY, this.get(\"vcy\", 1), exactLocationY);\r\n let point = this.getPoint(positionX, positionY);\r\n let left = dataItem.get(\"left\", point.x);\r\n let right = dataItem.get(\"right\", point.x);\r\n let top = dataItem.get(\"top\", point.y);\r\n let bottom = dataItem.get(\"bottom\", point.y);\r\n let x = 0;\r\n let y = 0;\r\n let w = right - left;\r\n let h = bottom - top;\r\n if (this._shouldShowBullet(positionX, positionY)) {\r\n sprite.setPrivate(\"visible\", !bullet.getPrivate(\"hidden\"));\r\n let field = bullet.get(\"field\");\r\n const baseAxis = this.get(\"baseAxis\");\r\n const xAxis = this.get(\"xAxis\");\r\n const yAxis = this.get(\"yAxis\");\r\n if (field != undefined) {\r\n let realField;\r\n if (baseAxis == xAxis) {\r\n if (field == \"value\") {\r\n realField = this._yField;\r\n }\r\n else if (field == \"open\") {\r\n realField = this._yOpenField;\r\n }\r\n else if (field == \"high\") {\r\n realField = this._yHighField;\r\n }\r\n else if (field == \"low\") {\r\n realField = this._yLowField;\r\n }\r\n if (realField) {\r\n positionY = yAxis.getDataItemPositionY(dataItem, realField, 0, this.get(\"vcy\", 1), exactLocationY);\r\n point = this._yRenderer.positionToPoint(positionY);\r\n y = point.y;\r\n x = left + w * locationX;\r\n }\r\n }\r\n else {\r\n if (field == \"value\") {\r\n realField = this._xField;\r\n }\r\n else if (field == \"open\") {\r\n realField = this._xOpenField;\r\n }\r\n else if (field == \"high\") {\r\n realField = this._xHighField;\r\n }\r\n else if (field == \"low\") {\r\n realField = this._xLowField;\r\n }\r\n if (realField) {\r\n positionX = xAxis.getDataItemPositionX(dataItem, realField, 0, this.get(\"vcx\", 1), exactLocationX);\r\n point = this._xRenderer.positionToPoint(positionX);\r\n x = point.x;\r\n y = bottom - h * locationY;\r\n }\r\n }\r\n }\r\n else {\r\n x = left + w * locationX;\r\n y = bottom - h * locationY;\r\n }\r\n const stacked = bullet.get(\"stacked\");\r\n if (stacked) {\r\n const chart = this.chart;\r\n if (baseAxis == xAxis) {\r\n let previousBullet = this._bullets[positionX + \"_\" + positionY];\r\n if (previousBullet) {\r\n let previousBounds = previousBullet.bounds();\r\n let bounds = sprite.localBounds();\r\n let yo = y;\r\n y = previousBounds.top;\r\n if (stacked == \"down\") {\r\n y = previousBounds.bottom - bounds.top;\r\n }\r\n else if (stacked == \"auto\") {\r\n if (chart) {\r\n if (yo < chart.plotContainer.height() / 2) {\r\n y = previousBounds.bottom - bounds.top;\r\n }\r\n else {\r\n y += bounds.bottom;\r\n }\r\n }\r\n }\r\n else {\r\n y += bounds.bottom;\r\n }\r\n }\r\n this._bullets[positionX + \"_\" + positionY] = sprite;\r\n }\r\n else {\r\n let previousBullet = this._bullets[positionX + \"_\" + positionY];\r\n if (previousBullet) {\r\n let previousBounds = previousBullet.bounds();\r\n let bounds = sprite.localBounds();\r\n let xo = x;\r\n x = previousBounds.right;\r\n if (stacked == \"down\") {\r\n x = previousBounds.left - bounds.right;\r\n }\r\n else if (stacked == \"auto\") {\r\n if (chart) {\r\n if (xo < chart.plotContainer.width() / 2) {\r\n x = previousBounds.left - bounds.right;\r\n }\r\n else {\r\n x -= bounds.left;\r\n }\r\n }\r\n }\r\n else {\r\n x -= bounds.left;\r\n }\r\n }\r\n this._bullets[positionX + \"_\" + positionY] = sprite;\r\n }\r\n }\r\n if (sprite.isType(\"Label\")) {\r\n sprite.setPrivate(\"maxWidth\", Math.abs(w));\r\n sprite.setPrivate(\"maxHeight\", Math.abs(h));\r\n }\r\n sprite.setAll({ x, y });\r\n }\r\n else {\r\n sprite.setPrivate(\"visible\", false);\r\n }\r\n }\r\n }\r\n _shouldShowBullet(_positionX, _positionY) {\r\n return this._showBullets;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n setDataSet(id) {\r\n if (this._dataSets[id]) {\r\n this._handleDataSetChange();\r\n this._dataItems = this._dataSets[id];\r\n this._markDataSetDirty();\r\n this._dataSetId = id;\r\n const type = \"datasetchanged\";\r\n if (this.events.isEnabled(type)) {\r\n this.events.dispatch(type, { type: type, target: this, id: id });\r\n }\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n resetGrouping() {\r\n $object.each(this._dataSets, (_key, dataSet) => {\r\n if (dataSet != this._mainDataItems) {\r\n $array.each(dataSet, (dataItem) => {\r\n dataItem.dispose();\r\n });\r\n }\r\n });\r\n this._dataSets = {};\r\n this._dataItems = this.mainDataItems;\r\n }\r\n _handleDataSetChange() {\r\n $array.each(this._dataItems, (dataItem) => {\r\n let bullets = dataItem.bullets;\r\n if (bullets) {\r\n $array.each(bullets, (bullet) => {\r\n if (bullet) {\r\n let sprite = bullet.get(\"sprite\");\r\n if (sprite) {\r\n sprite.setPrivate(\"visible\", false);\r\n }\r\n }\r\n });\r\n }\r\n });\r\n this._selectionProcessed = false; // for totals to be calculated\r\n }\r\n /**\r\n * Shows hidden series.\r\n *\r\n * @param duration Duration of animation in milliseconds\r\n * @return Animation promise\r\n */\r\n show(duration) {\r\n const _super = Object.create(null, {\r\n show: { get: () => super.show }\r\n });\r\n return __awaiter(this, void 0, void 0, function* () {\r\n this._fixVC();\r\n let promises = [];\r\n promises.push(_super.show.call(this, duration).then(() => {\r\n this._isShowing = false;\r\n let xAxis = this.get(\"xAxis\");\r\n let yAxis = this.get(\"yAxis\");\r\n let baseAxis = this.get(\"baseAxis\");\r\n if (yAxis !== baseAxis) {\r\n yAxis.markDirtySelectionExtremes();\r\n }\r\n if (xAxis !== baseAxis) {\r\n xAxis.markDirtySelectionExtremes();\r\n }\r\n }));\r\n promises.push(this.bulletsContainer.show(duration));\r\n promises.push(this._sequencedShowHide(true, duration));\r\n yield Promise.all(promises);\r\n });\r\n }\r\n /**\r\n * Hides series.\r\n *\r\n * @param duration Duration of animation in milliseconds\r\n * @return Animation promise\r\n */\r\n hide(duration) {\r\n const _super = Object.create(null, {\r\n hide: { get: () => super.hide }\r\n });\r\n return __awaiter(this, void 0, void 0, function* () {\r\n this._fixVC();\r\n let promises = [];\r\n promises.push(_super.hide.call(this, duration).then(() => {\r\n this._isHiding = false;\r\n }));\r\n promises.push(this.bulletsContainer.hide(duration));\r\n promises.push(this._sequencedShowHide(false, duration));\r\n yield Promise.all(promises);\r\n });\r\n }\r\n /**\r\n * Shows series's data item.\r\n *\r\n * @param dataItem Data item\r\n * @param duration Animation duration in milliseconds\r\n * @return Promise\r\n */\r\n showDataItem(dataItem, duration) {\r\n const _super = Object.create(null, {\r\n showDataItem: { get: () => super.showDataItem }\r\n });\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const promises = [_super.showDataItem.call(this, dataItem, duration)];\r\n if (!$type.isNumber(duration)) {\r\n duration = this.get(\"stateAnimationDuration\", 0);\r\n }\r\n const easing = this.get(\"stateAnimationEasing\");\r\n $array.each(this._valueFields, (key) => {\r\n promises.push(dataItem.animate({ key: key + \"Working\", to: dataItem.get(key), duration: duration, easing: easing }).waitForStop());\r\n });\r\n yield Promise.all(promises);\r\n });\r\n }\r\n /**\r\n * Hides series's data item.\r\n *\r\n * @param dataItem Data item\r\n * @param duration Animation duration in milliseconds\r\n * @return Promise\r\n */\r\n hideDataItem(dataItem, duration) {\r\n const _super = Object.create(null, {\r\n hideDataItem: { get: () => super.hideDataItem }\r\n });\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const promises = [_super.hideDataItem.call(this, dataItem, duration)];\r\n let hiddenState = this.states.lookup(\"hidden\");\r\n if (!hiddenState) {\r\n hiddenState = this.states.create(\"hidden\", {});\r\n }\r\n if (!$type.isNumber(duration)) {\r\n duration = hiddenState.get(\"stateAnimationDuration\", this.get(\"stateAnimationDuration\", 0));\r\n }\r\n const easing = hiddenState.get(\"stateAnimationEasing\", this.get(\"stateAnimationEasing\"));\r\n const xAxis = this.get(\"xAxis\");\r\n const yAxis = this.get(\"yAxis\");\r\n const baseAxis = this.get(\"baseAxis\");\r\n const stacked = this.get(\"stacked\");\r\n if (baseAxis === xAxis || !baseAxis) {\r\n $array.each(this._valueYFields, (key) => {\r\n let min = yAxis.getPrivate(\"min\");\r\n let baseValue = yAxis.baseValue();\r\n if ($type.isNumber(min) && min > baseValue) {\r\n baseValue = min;\r\n }\r\n if (stacked) {\r\n baseValue = 0;\r\n }\r\n let value = dataItem.get(key);\r\n if (value != null) {\r\n promises.push(dataItem.animate({ key: key + \"Working\", to: baseValue, duration: duration, easing: easing }).waitForStop());\r\n }\r\n });\r\n }\r\n if (baseAxis === yAxis || !baseAxis) {\r\n let min = xAxis.getPrivate(\"min\");\r\n let baseValue = xAxis.baseValue();\r\n if ($type.isNumber(min) && min > baseValue) {\r\n baseValue = min;\r\n }\r\n if (stacked) {\r\n baseValue = 0;\r\n }\r\n $array.each(this._valueXFields, (key) => {\r\n let value = dataItem.get(key);\r\n if (value != null) {\r\n promises.push(dataItem.animate({ key: key + \"Working\", to: baseValue, duration: duration, easing: easing }).waitForStop());\r\n }\r\n });\r\n }\r\n yield Promise.all(promises);\r\n });\r\n }\r\n _markDirtyStack() {\r\n this._stackDirty = true;\r\n this.markDirty();\r\n this._markStakedDirtyStack();\r\n }\r\n _markStakedDirtyStack() {\r\n const stackedSeries = this._stackedSeries;\r\n if (stackedSeries) {\r\n $object.each(stackedSeries, (_key, value) => {\r\n if (!value._stackDirty) {\r\n value._markDirtyStack();\r\n }\r\n });\r\n }\r\n }\r\n _afterChanged() {\r\n super._afterChanged();\r\n if (this._skipped) {\r\n this._markDirtyAxes();\r\n this._skipped = false;\r\n }\r\n }\r\n /**\r\n * Shows a tooltip for specific data item.\r\n *\r\n * @param dataItem Data item\r\n */\r\n showDataItemTooltip(dataItem) {\r\n if (!this.getPrivate(\"doNotUpdateLegend\")) {\r\n this.updateLegendMarker(dataItem);\r\n this.updateLegendValue(dataItem);\r\n }\r\n const tooltip = this.get(\"tooltip\");\r\n const exactLocationX = this.get(\"exactLocationX\", false);\r\n const exactLocationY = this.get(\"exactLocationY\", false);\r\n if (tooltip) {\r\n if (!this.isHidden() && this.get(\"visible\")) {\r\n tooltip._setDataItem(dataItem);\r\n if (dataItem) {\r\n let locationX = this.get(\"locationX\", 0);\r\n let locationY = this.get(\"locationY\", 1);\r\n let itemLocationX = dataItem.get(\"locationX\", locationX);\r\n let itemLocationY = dataItem.get(\"locationY\", locationY);\r\n const xAxis = this.get(\"xAxis\");\r\n const yAxis = this.get(\"yAxis\");\r\n const vcx = this.get(\"vcx\", 1);\r\n const vcy = this.get(\"vcy\", 1);\r\n const xPos = xAxis.getDataItemPositionX(dataItem, this._tooltipFieldX, this._aLocationX0 + (this._aLocationX1 - this._aLocationX0) * itemLocationX, vcx, exactLocationX);\r\n const yPos = yAxis.getDataItemPositionY(dataItem, this._tooltipFieldY, this._aLocationY0 + (this._aLocationY1 - this._aLocationY0) * itemLocationY, vcy, exactLocationY);\r\n const point = this.getPoint(xPos, yPos);\r\n let show = true;\r\n $array.each(this._valueFields, (field) => {\r\n if (dataItem.get(field) == null) {\r\n show = false;\r\n }\r\n });\r\n if (show) {\r\n const chart = this.chart;\r\n if (chart && chart.inPlot(point)) {\r\n tooltip.label.text.markDirtyText();\r\n tooltip.set(\"tooltipTarget\", this._getTooltipTarget(dataItem));\r\n tooltip.set(\"pointTo\", this._display.toGlobal({ x: point.x, y: point.y }));\r\n }\r\n else {\r\n tooltip._setDataItem(undefined);\r\n }\r\n }\r\n else {\r\n tooltip._setDataItem(undefined);\r\n }\r\n }\r\n }\r\n else {\r\n this.hideTooltip();\r\n }\r\n }\r\n }\r\n hideTooltip() {\r\n const tooltip = this.get(\"tooltip\");\r\n if (tooltip) {\r\n tooltip.set(\"tooltipTarget\", this);\r\n }\r\n return super.hideTooltip();\r\n }\r\n _getTooltipTarget(dataItem) {\r\n if (this.get(\"seriesTooltipTarget\") == \"bullet\") {\r\n const bullets = dataItem.bullets;\r\n if (bullets && bullets.length > 0) {\r\n const bullet = bullets[0];\r\n const sprite = bullet.get(\"sprite\");\r\n if (sprite) {\r\n return sprite;\r\n }\r\n }\r\n }\r\n return this;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n updateLegendValue(dataItem) {\r\n const legendDataItem = this.get(\"legendDataItem\");\r\n if (legendDataItem) {\r\n const label = legendDataItem.get(\"label\");\r\n if (label) {\r\n let txt = \"\";\r\n if (dataItem) {\r\n label._setDataItem(dataItem);\r\n txt = this.get(\"legendLabelText\", label.get(\"text\", this.get(\"name\", \"\")));\r\n }\r\n else {\r\n label._setDataItem(this._emptyDataItem);\r\n txt = this.get(\"legendRangeLabelText\", this.get(\"legendLabelText\", label.get(\"text\", this.get(\"name\", \"\"))));\r\n }\r\n label.set(\"text\", txt);\r\n }\r\n const valueLabel = legendDataItem.get(\"valueLabel\");\r\n if (valueLabel) {\r\n let txt = \"\";\r\n if (dataItem) {\r\n valueLabel._setDataItem(dataItem);\r\n txt = this.get(\"legendValueText\", valueLabel.get(\"text\", \"\"));\r\n }\r\n else {\r\n valueLabel._setDataItem(this._emptyDataItem);\r\n txt = this.get(\"legendRangeValueText\", valueLabel.get(\"text\", \"\"));\r\n }\r\n valueLabel.set(\"text\", txt);\r\n }\r\n }\r\n }\r\n _getItemReaderLabel() {\r\n let text = \"X: {\" + this._xField;\r\n if (this.get(\"xAxis\").isType(\"DateAxis\")) {\r\n text += \".formatDate()\";\r\n }\r\n text += \"}; Y: {\" + this._yField;\r\n if (this.get(\"yAxis\").isType(\"DateAxis\")) {\r\n text += \".formatDate()\";\r\n }\r\n text += \"}\";\r\n return text;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n getPoint(positionX, positionY) {\r\n let x = this._xRenderer.positionToCoordinate(positionX);\r\n let y = this._yRenderer.positionToCoordinate(positionY);\r\n // if coordinate is super big, canvas fails to draw line, capping to some big number (won't make any visual difference)\r\n let max = 999999999;\r\n if (y < -max) {\r\n y = -max;\r\n }\r\n else if (y > max) {\r\n y = max;\r\n }\r\n if (x < -max) {\r\n x = -max;\r\n }\r\n else if (x > max) {\r\n x = max;\r\n }\r\n return { x: x, y: y };\r\n }\r\n _shouldInclude(_position) {\r\n return true;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n handleCursorHide() {\r\n this.hideTooltip();\r\n this.updateLegendValue(undefined);\r\n this.updateLegendMarker(undefined);\r\n }\r\n _afterDataChange() {\r\n super._afterDataChange();\r\n this.get(\"xAxis\")._markDirtyKey(\"start\");\r\n this.get(\"yAxis\")._markDirtyKey(\"start\");\r\n this.resetExtremes();\r\n }\r\n /**\r\n * Resets cached axis scale values.\r\n */\r\n resetExtremes() {\r\n this.setPrivate(\"selectionMinX\", undefined);\r\n this.setPrivate(\"selectionMaxX\", undefined);\r\n this.setPrivate(\"selectionMinY\", undefined);\r\n this.setPrivate(\"selectionMaxY\", undefined);\r\n this.setPrivate(\"minX\", undefined);\r\n this.setPrivate(\"minY\", undefined);\r\n this.setPrivate(\"maxX\", undefined);\r\n this.setPrivate(\"maxY\", undefined);\r\n }\r\n /**\r\n * Creates and returns an axis range object.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/axes/axis-ranges/} for more info\r\n * @param axisDataItem Axis data item\r\n * @return Axis range\r\n */\r\n createAxisRange(axisDataItem) {\r\n return this.axisRanges.push({\r\n axisDataItem: axisDataItem\r\n });\r\n }\r\n /**\r\n * A list of series's main (ungrouped) data items.\r\n *\r\n * @return Data items\r\n */\r\n get mainDataItems() {\r\n return this._mainDataItems;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n _adjustStartIndex(index) {\r\n const xAxis = this.get(\"xAxis\");\r\n const baseAxis = this.get(\"baseAxis\");\r\n if (baseAxis == xAxis && xAxis.isType(\"DateAxis\")) {\r\n const baseDuration = xAxis.baseDuration();\r\n const minSelection = xAxis.getPrivate(\"selectionMin\", xAxis.getPrivate(\"min\", 0));\r\n const dl = baseDuration * this.get(\"locationX\", 0.5);\r\n let value = -Infinity;\r\n while (value < minSelection) {\r\n const dataItem = this.dataItems[index];\r\n if (dataItem) {\r\n const open = dataItem.open;\r\n if (open) {\r\n value = open[\"valueX\"];\r\n }\r\n else {\r\n value = dataItem.get(\"valueX\", 0);\r\n }\r\n value += dl;\r\n if (value < minSelection) {\r\n index++;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n }\r\n return index;\r\n }\r\n}\r\nXYSeries.className = \"XYSeries\";\r\nXYSeries.classNames = Series.classNames.concat([XYSeries.className]);\r\n//# sourceMappingURL=XYSeries.js.map","import { __awaiter } from \"tslib\";\r\nimport { XYSeries } from \"./XYSeries\";\r\nimport { Percent } from \"../../../core/util/Percent\";\r\nimport { visualSettings } from \"../../../core/render/Graphics\";\r\nimport * as $array from \"../../../core/util/Array\";\r\nimport * as $type from \"../../../core/util/Type\";\r\n/**\r\n * Base class for all \"column-based\" series\r\n */\r\nexport class BaseColumnSeries extends XYSeries {\r\n constructor() {\r\n super(...arguments);\r\n this._ph = 0;\r\n this._pw = 0;\r\n this._columnsUpdated = false;\r\n }\r\n _makeGraphics(listTemplate, dataItem) {\r\n return this.makeColumn(dataItem, listTemplate);\r\n }\r\n _makeFieldNames() {\r\n super._makeFieldNames();\r\n const xAxis = this.get(\"xAxis\");\r\n const yAxis = this.get(\"yAxis\");\r\n const categoryAxis = \"CategoryAxis\";\r\n const valueAxis = \"ValueAxis\";\r\n if (xAxis.isType(categoryAxis)) {\r\n if (!this.get(\"openCategoryXField\")) {\r\n this._xOpenField = this._xField;\r\n }\r\n }\r\n if (xAxis.isType(valueAxis)) {\r\n if (!this.get(\"openValueXField\")) {\r\n this._xOpenField = this._xField;\r\n }\r\n }\r\n if (yAxis.isType(categoryAxis)) {\r\n if (!this.get(\"openCategoryYField\")) {\r\n this._yOpenField = this._yField;\r\n }\r\n }\r\n if (yAxis.isType(valueAxis)) {\r\n if (!this.get(\"openValueYField\")) {\r\n this._yOpenField = this._yField;\r\n }\r\n }\r\n }\r\n _prepareChildren() {\r\n super._prepareChildren();\r\n const xAxis = this.get(\"xAxis\");\r\n const yAxis = this.get(\"yAxis\");\r\n const len = this.dataItems.length;\r\n const startIndex = Math.max(0, this.startIndex() - 2);\r\n const endIndex = Math.min(this.endIndex() + 2, len - 1);\r\n if (xAxis.inited && yAxis.inited) {\r\n for (let i = startIndex; i <= endIndex; i++) {\r\n let dataItem = this.dataItems[i];\r\n this._createGraphics(dataItem);\r\n }\r\n }\r\n }\r\n _updateChildren() {\r\n const chart = this.chart;\r\n if (chart) {\r\n this._ph = chart.plotContainer.height();\r\n this._pw = chart.plotContainer.width();\r\n }\r\n const xAxis = this.get(\"xAxis\");\r\n const yAxis = this.get(\"yAxis\");\r\n const baseAxis = this.get(\"baseAxis\");\r\n const columnsTemplate = this.columns.template;\r\n if (this.isDirty(\"fill\")) {\r\n if (columnsTemplate.get(\"fill\") == null) {\r\n columnsTemplate.set(\"fill\", this.get(\"fill\"));\r\n }\r\n }\r\n if (this.isDirty(\"fillPattern\")) {\r\n if (columnsTemplate.get(\"fillPattern\") == null) {\r\n columnsTemplate.set(\"fillPattern\", this.get(\"fillPattern\"));\r\n }\r\n }\r\n if (this.isDirty(\"stroke\")) {\r\n if (columnsTemplate.get(\"stroke\") == null) {\r\n columnsTemplate.set(\"stroke\", this.get(\"stroke\"));\r\n }\r\n }\r\n let index = 0;\r\n let clusterCount = 0;\r\n let i = 0;\r\n if (baseAxis) {\r\n $array.each(baseAxis.series, (series) => {\r\n if (series instanceof BaseColumnSeries) {\r\n const stacked = series.get(\"stacked\");\r\n if (stacked && i == 0) {\r\n clusterCount++;\r\n }\r\n if (!stacked && series.get(\"clustered\")) {\r\n clusterCount++;\r\n }\r\n }\r\n if (series === this) {\r\n index = clusterCount - 1;\r\n }\r\n i++;\r\n });\r\n }\r\n if (!this.get(\"clustered\")) {\r\n index = 0;\r\n clusterCount = 1;\r\n }\r\n if (clusterCount === 0) {\r\n clusterCount = 1;\r\n index = 0;\r\n }\r\n const cellStartLocation = \"cellStartLocation\";\r\n const cellEndLocation = \"cellEndLocation\";\r\n const cellLocationX0 = this._xRenderer.get(cellStartLocation, 0);\r\n const cellLocationX1 = this._xRenderer.get(cellEndLocation, 1);\r\n const cellLocationY0 = this._yRenderer.get(cellStartLocation, 0);\r\n const cellLocationY1 = this._yRenderer.get(cellEndLocation, 1);\r\n this._aLocationX0 = cellLocationX0 + (index / clusterCount) * (cellLocationX1 - cellLocationX0);\r\n this._aLocationX1 = cellLocationX0 + (index + 1) / clusterCount * (cellLocationX1 - cellLocationX0);\r\n ;\r\n this._aLocationY0 = cellLocationY0 + (index / clusterCount) * (cellLocationY1 - cellLocationY0);\r\n this._aLocationY1 = cellLocationY0 + (index + 1) / clusterCount * (cellLocationY1 - cellLocationY0);\r\n if (xAxis.inited && yAxis.inited) {\r\n if (this._axesDirty || this._valuesDirty || this._stackDirty || this.isDirty(\"vcx\") || this.isDirty(\"vcy\") || this._sizeDirty) {\r\n const len = this.dataItems.length;\r\n let startIndex = Math.max(0, this.startIndex() - 2);\r\n let endIndex = Math.min(this.endIndex() + 2, len - 1);\r\n for (let i = 0; i < startIndex; i++) {\r\n this._toggleColumn(this.dataItems[i], false);\r\n }\r\n let previous = this.dataItems[startIndex];\r\n for (let i = startIndex; i <= endIndex; i++) {\r\n let dataItem = this.dataItems[i];\r\n if (dataItem.get(\"valueX\") != null && dataItem.get(\"valueY\") != null) {\r\n previous = dataItem;\r\n if (i > 0 && startIndex > 0) {\r\n for (let j = i - 1; j >= 0; j--) {\r\n let dataItem = this.dataItems[j];\r\n if (dataItem.get(\"valueX\") != null && dataItem.get(\"valueY\") != null) {\r\n previous = dataItem;\r\n break;\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n else {\r\n this._toggleColumn(dataItem, false);\r\n }\r\n }\r\n this._beforeColumnsDraw();\r\n let axisCase = 0;\r\n if (yAxis.isType(\"CategoryAxis\") && xAxis.isType(\"CategoryAxis\")) {\r\n axisCase = 2;\r\n }\r\n else if (xAxis === baseAxis) {\r\n axisCase = 0;\r\n }\r\n else if (yAxis === baseAxis) {\r\n axisCase = 1;\r\n }\r\n for (let i = startIndex; i <= endIndex; i++) {\r\n let dataItem = this.dataItems[i];\r\n this._updateGraphics(dataItem, previous, axisCase);\r\n if (dataItem.get(\"valueX\") != null && dataItem.get(\"valueY\") != null) {\r\n previous = dataItem;\r\n }\r\n }\r\n this._afterColumnsDraw();\r\n for (let i = endIndex + 1; i < len; i++) {\r\n this._toggleColumn(this.dataItems[i], false);\r\n }\r\n this._columnsUpdated = true;\r\n }\r\n }\r\n else {\r\n this._skipped = true;\r\n }\r\n if (!this.getPrivate(\"doNotUpdateLegend\")) {\r\n this.updateLegendMarker(this.get(\"tooltipDataItem\"));\r\n }\r\n super._updateChildren();\r\n }\r\n _afterChanged() {\r\n super._afterChanged();\r\n this._columnsUpdated = false;\r\n }\r\n _beforeColumnsDraw() {\r\n }\r\n _afterColumnsDraw() {\r\n }\r\n _createGraphics(dataItem) {\r\n let graphics = dataItem.get(\"graphics\");\r\n if (!graphics) {\r\n graphics = this._makeGraphics(this.columns, dataItem);\r\n dataItem.set(\"graphics\", graphics);\r\n graphics._setDataItem(dataItem);\r\n const legendDataItem = dataItem.get(\"legendDataItem\");\r\n if (legendDataItem) {\r\n const markerRectangle = legendDataItem.get(\"markerRectangle\");\r\n if (markerRectangle) {\r\n const ds = markerRectangle.states.lookup(\"default\");\r\n $array.each(visualSettings, (setting) => {\r\n const value = graphics.get(setting, this.get(setting));\r\n markerRectangle.set(setting, value);\r\n ds.set(setting, value);\r\n });\r\n }\r\n }\r\n let graphicsArray = dataItem.get(\"rangeGraphics\");\r\n if (graphicsArray) {\r\n $array.each(graphicsArray, (graphics) => {\r\n graphics.dispose();\r\n });\r\n }\r\n graphicsArray = [];\r\n dataItem.setRaw(\"rangeGraphics\", graphicsArray);\r\n this.axisRanges.each((axisRange) => {\r\n const container = axisRange.container;\r\n const rangeGraphics = this._makeGraphics(axisRange.columns, dataItem);\r\n if (graphicsArray) {\r\n graphicsArray.push(rangeGraphics);\r\n }\r\n rangeGraphics.setPrivate(\"list\", axisRange.columns);\r\n container.children.push(rangeGraphics);\r\n });\r\n }\r\n }\r\n createAxisRange(axisDataItem) {\r\n $array.each(this.dataItems, (dataItem) => {\r\n const graphics = dataItem.get(\"graphics\");\r\n if (graphics) {\r\n graphics.dispose();\r\n dataItem.set(\"graphics\", undefined);\r\n }\r\n });\r\n return super.createAxisRange(axisDataItem);\r\n }\r\n _updateGraphics(dataItem, previousDataItem, axisCase) {\r\n let graphics = dataItem.get(\"graphics\");\r\n //if (!graphics) {\r\n //\tthis._createGraphics(dataItem);\r\n //\tgraphics = dataItem.get(\"graphics\")!;\r\n //}\r\n const xField = this._xField;\r\n const yField = this._yField;\r\n const valueX = dataItem.get(xField);\r\n const valueY = dataItem.get(yField);\r\n const exactLocationX = this.get(\"exactLocationX\", false);\r\n //const exactLocationY = this.get(\"exactLocationY\", false);\t\t\r\n if (valueX != null && valueY != null) {\r\n const xOpenField = this._xOpenField;\r\n const yOpenField = this._yOpenField;\r\n const locationX = this.get(\"locationX\", dataItem.get(\"locationX\", 0.5));\r\n const locationY = this.get(\"locationY\", dataItem.get(\"locationY\", 0.5));\r\n const openLocationX = this.get(\"openLocationX\", dataItem.get(\"openLocationX\", locationX));\r\n const openLocationY = this.get(\"openLocationY\", dataItem.get(\"openLocationY\", locationY));\r\n const width = graphics.get(\"width\");\r\n const height = graphics.get(\"height\");\r\n const stacked = this.get(\"stacked\");\r\n const xAxis = this.get(\"xAxis\");\r\n const yAxis = this.get(\"yAxis\");\r\n const xStart = xAxis.get(\"start\");\r\n const xEnd = xAxis.get(\"end\");\r\n const yStart = yAxis.get(\"start\");\r\n const yEnd = yAxis.get(\"end\");\r\n let l;\r\n let r;\r\n let t;\r\n let b;\r\n let vcy = this.get(\"vcy\", 1);\r\n let vcx = this.get(\"vcx\", 1);\r\n let fitW = false;\r\n let fitH = false;\r\n if (axisCase == 0) {\r\n let startLocation = this._aLocationX0 + openLocationX - 0.5;\r\n let endLocation = this._aLocationX1 + locationX - 0.5;\r\n if (width instanceof Percent) {\r\n let offset = (endLocation - startLocation) * (1 - width.value) / 2;\r\n startLocation += offset;\r\n endLocation -= offset;\r\n }\r\n l = xAxis.getDataItemPositionX(dataItem, xOpenField, startLocation, vcx, exactLocationX);\r\n r = xAxis.getDataItemPositionX(dataItem, xField, endLocation, vcx, exactLocationX);\r\n t = yAxis.getDataItemPositionY(dataItem, yField, locationY, vcy);\r\n if (this._yOpenField !== this._yField) {\r\n b = yAxis.getDataItemPositionY(dataItem, yOpenField, openLocationY, vcy);\r\n }\r\n else {\r\n if (stacked) {\r\n let stackToItemY = dataItem.get(\"stackToItemY\");\r\n if (stackToItemY) {\r\n b = yAxis.getDataItemPositionY(stackToItemY, yField, openLocationY, stackToItemY.component.get(\"vcy\"));\r\n }\r\n else {\r\n b = yAxis.basePosition();\r\n }\r\n }\r\n else {\r\n b = yAxis.basePosition();\r\n }\r\n }\r\n dataItem.setRaw(\"point\", { x: l + (r - l) / 2, y: t });\r\n fitH = true;\r\n }\r\n else if (axisCase == 1) {\r\n let startLocation = this._aLocationY0 + openLocationY - 0.5;\r\n let endLocation = this._aLocationY1 + locationY - 0.5;\r\n if (height instanceof Percent) {\r\n let offset = (endLocation - startLocation) * (1 - height.value) / 2;\r\n startLocation += offset;\r\n endLocation -= offset;\r\n }\r\n t = yAxis.getDataItemPositionY(dataItem, yOpenField, startLocation, vcy);\r\n b = yAxis.getDataItemPositionY(dataItem, yField, endLocation, vcy);\r\n r = xAxis.getDataItemPositionX(dataItem, xField, locationX, vcx, exactLocationX);\r\n if (this._xOpenField !== this._xField) {\r\n l = xAxis.getDataItemPositionX(dataItem, xOpenField, openLocationX, vcx, exactLocationX);\r\n }\r\n else {\r\n if (stacked) {\r\n let stackToItemX = dataItem.get(\"stackToItemX\");\r\n if (stackToItemX) {\r\n l = xAxis.getDataItemPositionX(stackToItemX, xField, openLocationX, stackToItemX.component.get(\"vcx\"), exactLocationX);\r\n }\r\n else {\r\n l = xAxis.basePosition();\r\n }\r\n }\r\n else {\r\n l = xAxis.basePosition();\r\n }\r\n }\r\n fitW = true;\r\n dataItem.setRaw(\"point\", { x: r, y: t + (b - t) / 2 });\r\n }\r\n else if (axisCase == 2) {\r\n let startLocation = this._aLocationX0 + openLocationX - 0.5;\r\n let endLocation = this._aLocationX1 + locationX - 0.5;\r\n if (width instanceof Percent) {\r\n let offset = (endLocation - startLocation) * (1 - width.value) / 2;\r\n startLocation += offset;\r\n endLocation -= offset;\r\n }\r\n l = xAxis.getDataItemPositionX(dataItem, xOpenField, startLocation, vcx);\r\n r = xAxis.getDataItemPositionX(dataItem, xField, endLocation, vcx);\r\n startLocation = this._aLocationY0 + openLocationY - 0.5;\r\n endLocation = this._aLocationY1 + locationY - 0.5;\r\n if (height instanceof Percent) {\r\n let offset = (endLocation - startLocation) * (1 - height.value) / 2;\r\n startLocation += offset;\r\n endLocation -= offset;\r\n }\r\n t = yAxis.getDataItemPositionY(dataItem, yOpenField, startLocation, vcy);\r\n b = yAxis.getDataItemPositionY(dataItem, yField, endLocation, vcy);\r\n dataItem.setRaw(\"point\", { x: l + (r - l) / 2, y: t + (b - t) / 2 });\r\n }\r\n this._applyGraphicsStates(dataItem, previousDataItem);\r\n this._updateSeriesGraphics(dataItem, graphics, l, r, t, b, fitW, fitH);\r\n if ((l < xStart && r < xStart) || (l > xEnd && r > xEnd) || (t < yStart && b <= yStart) || (t >= yEnd && b > yEnd) || $type.isNaN(l) || $type.isNaN(t)) {\r\n this._toggleColumn(dataItem, false);\r\n }\r\n else {\r\n this._toggleColumn(dataItem, true);\r\n }\r\n let rangeGraphics = dataItem.get(\"rangeGraphics\");\r\n if (rangeGraphics) {\r\n $array.each(rangeGraphics, (graphics) => {\r\n this._updateSeriesGraphics(dataItem, graphics, l, r, t, b, fitW, fitH);\r\n });\r\n }\r\n }\r\n else {\r\n this._toggleColumn(dataItem, false);\r\n }\r\n }\r\n _updateSeriesGraphics(dataItem, graphics, l, r, t, b, fitW, fitH) {\r\n const width = graphics.get(\"width\");\r\n const height = graphics.get(\"height\");\r\n const maxWidth = graphics.get(\"maxWidth\");\r\n const maxHeight = graphics.get(\"maxHeight\");\r\n const ptl = this.getPoint(l, t);\r\n const pbr = this.getPoint(r, b);\r\n const tooltipPoint = dataItem.get(\"point\");\r\n if (tooltipPoint) {\r\n const point = this.getPoint(tooltipPoint.x, tooltipPoint.y);\r\n tooltipPoint.x = point.x + this._x;\r\n tooltipPoint.y = point.y + this._y;\r\n }\r\n l = ptl.x;\r\n r = pbr.x;\r\n t = ptl.y;\r\n b = pbr.y;\r\n if ($type.isNumber(width)) {\r\n const offset = ((r - l) - width) / 2;\r\n l += offset;\r\n r -= offset;\r\n }\r\n if ($type.isNumber(maxWidth) && maxWidth < Math.abs(r - l)) {\r\n const offset = ((r - l) - maxWidth) / 2;\r\n l += offset;\r\n r -= offset;\r\n }\r\n if ($type.isNumber(height)) {\r\n const offset = ((b - t) - height) / 2;\r\n t += offset;\r\n b -= offset;\r\n }\r\n if ($type.isNumber(maxHeight) && maxHeight < Math.abs(b - t)) {\r\n const offset = ((b - t) - maxHeight) / 2;\r\n t += offset;\r\n b -= offset;\r\n }\r\n if (this.get(\"adjustBulletPosition\")) {\r\n if (fitW) {\r\n r = Math.min(Math.max(0, r), this._pw);\r\n l = Math.min(Math.max(0, l), this._pw);\r\n }\r\n if (fitH) {\r\n t = Math.min(Math.max(0, t), this._ph);\r\n b = Math.min(Math.max(0, b), this._ph);\r\n }\r\n }\r\n dataItem.setRaw(\"left\", l);\r\n dataItem.setRaw(\"right\", r);\r\n dataItem.setRaw(\"top\", t);\r\n dataItem.setRaw(\"bottom\", b);\r\n graphics.setPrivate(\"width\", r - l);\r\n graphics.setPrivate(\"height\", b - t);\r\n graphics.set(\"x\", l);\r\n graphics.set(\"y\", b - (b - t));\r\n }\r\n _handleDataSetChange() {\r\n super._handleDataSetChange();\r\n $array.each(this._dataItems, (dataItem) => {\r\n this._toggleColumn(dataItem, false);\r\n });\r\n }\r\n _applyGraphicsStates(dataItem, previousDataItem) {\r\n const graphics = dataItem.get(\"graphics\");\r\n const dropFromOpen = graphics.states.lookup(\"dropFromOpen\");\r\n const riseFromOpen = graphics.states.lookup(\"riseFromOpen\");\r\n const dropFromPrevious = graphics.states.lookup(\"dropFromPrevious\");\r\n const riseFromPrevious = graphics.states.lookup(\"riseFromPrevious\");\r\n if (dropFromOpen || dropFromPrevious || riseFromOpen || riseFromPrevious) {\r\n const xAxis = this.get(\"xAxis\");\r\n const yAxis = this.get(\"yAxis\");\r\n const baseAxis = this.get(\"baseAxis\");\r\n let open;\r\n let close;\r\n let previousClose;\r\n if (baseAxis === xAxis && yAxis.isType(\"ValueAxis\")) {\r\n open = dataItem.get(this._yOpenField);\r\n close = dataItem.get(this._yField);\r\n previousClose = previousDataItem.get(this._yField);\r\n }\r\n else if (baseAxis === yAxis && xAxis.isType(\"ValueAxis\")) {\r\n open = dataItem.get(this._xOpenField);\r\n close = dataItem.get(this._xField);\r\n previousClose = previousDataItem.get(this._xField);\r\n }\r\n if ($type.isNumber(open) && $type.isNumber(close)) {\r\n if (close < open) {\r\n if (dropFromOpen) {\r\n dropFromOpen.apply();\r\n }\r\n }\r\n else {\r\n if (riseFromOpen) {\r\n riseFromOpen.apply();\r\n }\r\n }\r\n if ($type.isNumber(previousClose)) {\r\n if (close < previousClose) {\r\n if (dropFromPrevious) {\r\n dropFromPrevious.apply();\r\n }\r\n }\r\n else {\r\n if (riseFromPrevious) {\r\n riseFromPrevious.apply();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n disposeDataItem(dataItem) {\r\n super.disposeDataItem(dataItem);\r\n const graphics = dataItem.get(\"graphics\");\r\n if (graphics) {\r\n this.columns.removeValue(graphics);\r\n graphics.dispose();\r\n }\r\n const rangeGraphics = dataItem.get(\"rangeGraphics\");\r\n if (rangeGraphics) {\r\n $array.each(rangeGraphics, (graphics) => {\r\n const list = graphics.getPrivate(\"list\");\r\n if (list) {\r\n list.removeValue(graphics);\r\n }\r\n graphics.dispose();\r\n });\r\n }\r\n }\r\n /**\r\n * Hides series's data item.\r\n *\r\n * @param dataItem Data item\r\n * @param duration Animation duration in milliseconds\r\n * @return Promise\r\n */\r\n hideDataItem(dataItem, duration) {\r\n const _super = Object.create(null, {\r\n hideDataItem: { get: () => super.hideDataItem }\r\n });\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const promises = [_super.hideDataItem.call(this, dataItem, duration)];\r\n const graphics = dataItem.get(\"graphics\");\r\n if (graphics) {\r\n promises.push(graphics.hide(duration));\r\n }\r\n const rangeGraphics = dataItem.get(\"rangeGraphics\");\r\n if (rangeGraphics) {\r\n $array.each(rangeGraphics, (graphics) => {\r\n promises.push(graphics.hide(duration));\r\n });\r\n }\r\n yield Promise.all(promises);\r\n });\r\n }\r\n _toggleColumn(dataItem, visible) {\r\n const graphics = dataItem.get(\"graphics\");\r\n if (graphics) {\r\n graphics.setPrivate(\"visible\", visible);\r\n }\r\n const rangeGraphics = dataItem.get(\"rangeGraphics\");\r\n if (rangeGraphics) {\r\n $array.each(rangeGraphics, (graphics) => {\r\n graphics.setPrivate(\"visible\", visible);\r\n });\r\n }\r\n const bullets = dataItem.bullets;\r\n if (bullets) {\r\n $array.each(bullets, (bullet) => {\r\n bullet.setPrivate(\"hidden\", !visible);\r\n });\r\n }\r\n }\r\n /**\r\n * Shows series's data item.\r\n *\r\n * @param dataItem Data item\r\n * @param duration Animation duration in milliseconds\r\n * @return Promise\r\n */\r\n showDataItem(dataItem, duration) {\r\n const _super = Object.create(null, {\r\n showDataItem: { get: () => super.showDataItem }\r\n });\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const promises = [_super.showDataItem.call(this, dataItem, duration)];\r\n const graphics = dataItem.get(\"graphics\");\r\n if (graphics) {\r\n promises.push(graphics.show(duration));\r\n }\r\n const rangeGraphics = dataItem.get(\"rangeGraphics\");\r\n if (rangeGraphics) {\r\n $array.each(rangeGraphics, (graphics) => {\r\n promises.push(graphics.show(duration));\r\n });\r\n }\r\n yield Promise.all(promises);\r\n });\r\n }\r\n /**\r\n * @ignore\r\n */\r\n updateLegendMarker(dataItem) {\r\n let legendDataItem = this.get(\"legendDataItem\");\r\n if (this.get(\"useLastColorForLegendMarker\")) {\r\n if (!dataItem) {\r\n const lastDataItem = this.dataItems[this.endIndex() - 1];\r\n if (lastDataItem) {\r\n dataItem = lastDataItem;\r\n }\r\n }\r\n }\r\n if (legendDataItem) {\r\n let graphics = this.columns.template;\r\n if (dataItem) {\r\n let column = dataItem.get(\"graphics\");\r\n if (column) {\r\n graphics = column;\r\n }\r\n }\r\n const markerRectangle = legendDataItem.get(\"markerRectangle\");\r\n if (markerRectangle) {\r\n if (!legendDataItem.get(\"itemContainer\").get(\"disabled\")) {\r\n const ds = markerRectangle.states.lookup(\"default\");\r\n $array.each(visualSettings, (setting) => {\r\n const value = graphics.get(setting, this.get(setting));\r\n markerRectangle.set(setting, value);\r\n ds.set(setting, value);\r\n });\r\n }\r\n }\r\n }\r\n }\r\n _getTooltipTarget(dataItem) {\r\n if (this.get(\"seriesTooltipTarget\") == \"bullet\") {\r\n return super._getTooltipTarget(dataItem);\r\n }\r\n let column = dataItem.get(\"graphics\");\r\n if (column) {\r\n return column;\r\n }\r\n return this;\r\n }\r\n}\r\nBaseColumnSeries.className = \"BaseColumnSeries\";\r\nBaseColumnSeries.classNames = XYSeries.classNames.concat([BaseColumnSeries.className]);\r\n//# sourceMappingURL=BaseColumnSeries.js.map","import { DataItem } from \"../../../core/render/Component\";\r\nimport { Component } from \"../../../core/render/Component\";\r\nimport { Container } from \"../../../core/render/Container\";\r\nimport { p100 } from \"../../../core/util/Percent\";\r\nimport { List } from \"../../../core/util/List\";\r\nimport { Rectangle } from \"../../../core/render/Rectangle\";\r\nimport * as $array from \"../../../core/util/Array\";\r\nimport * as $type from \"../../../core/util/Type\";\r\nimport * as $utils from \"../../../core/util/Utils\";\r\n/**\r\n * A base class for all axes.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/#Adding_axes} for more info\r\n */\r\nexport class Axis extends Component {\r\n constructor() {\r\n super(...arguments);\r\n this._series = [];\r\n this._isPanning = false;\r\n /**\r\n * Array of minor data items.\r\n */\r\n this.minorDataItems = [];\r\n /**\r\n * A [[Container]] that holds all the axis label elements.\r\n *\r\n * @default Container.new()\r\n */\r\n this.labelsContainer = this.children.push(Container.new(this._root, {}));\r\n /**\r\n * A [[Container]] that holds all the axis grid and fill elements.\r\n *\r\n * @default Container.new()\r\n */\r\n this.gridContainer = Container.new(this._root, { width: p100, height: p100 });\r\n /**\r\n * A [[Container]] that holds axis grid elements which goes above the series.\r\n *\r\n * @default Container.new()\r\n */\r\n this.topGridContainer = Container.new(this._root, { width: p100, height: p100 });\r\n /**\r\n * A [[Container]] that holds all the axis bullet elements.\r\n *\r\n * @default new Container\r\n */\r\n this.bulletsContainer = this.children.push(Container.new(this._root, { isMeasured: false, width: p100, height: p100, position: \"absolute\" }));\r\n this._rangesDirty = false;\r\n this._panStart = 0;\r\n this._panEnd = 1;\r\n this._skipSync = false;\r\n /**\r\n * A list of axis ranges.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/axes/axis-ranges/} for more info\r\n * @default new List()\r\n */\r\n this.axisRanges = new List();\r\n this._seriesAxisRanges = [];\r\n this._cursorPosition = -1;\r\n this._seriesValuesDirty = false;\r\n this._seriesAdded = false;\r\n /**\r\n * A container above the axis that can be used to add additional stuff into\r\n * it. For example a legend, label, or an icon.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/axes/axis-headers/} for more info\r\n * @default new Container\r\n */\r\n this.axisHeader = this.children.push(Container.new(this._root, {\r\n themeTags: [\"axis\", \"header\"],\r\n position: \"absolute\",\r\n background: Rectangle.new(this._root, {\r\n themeTags: [\"header\", \"background\"],\r\n fill: this._root.interfaceColors.get(\"background\")\r\n })\r\n }));\r\n this._bullets = {};\r\n }\r\n _dispose() {\r\n // these could be in other parents, so disposing just in case\r\n this.gridContainer.dispose();\r\n this.topGridContainer.dispose();\r\n this.bulletsContainer.dispose();\r\n this.labelsContainer.dispose();\r\n this.axisHeader.dispose();\r\n super._dispose();\r\n }\r\n _afterNew() {\r\n super._afterNew();\r\n this.setPrivate(\"updateScrollbar\", true);\r\n this._disposers.push(this.axisRanges.events.onAll((change) => {\r\n if (change.type === \"clear\") {\r\n $array.each(change.oldValues, (dataItem) => {\r\n dataItem.dispose();\r\n });\r\n }\r\n else if (change.type === \"push\") {\r\n this._processAxisRange(change.newValue, [\"range\"]);\r\n }\r\n else if (change.type === \"setIndex\") {\r\n this._processAxisRange(change.newValue, [\"range\"]);\r\n }\r\n else if (change.type === \"insertIndex\") {\r\n this._processAxisRange(change.newValue, [\"range\"]);\r\n }\r\n else if (change.type === \"removeIndex\") {\r\n this.disposeDataItem(change.oldValue);\r\n }\r\n else if (change.type === \"moveIndex\") {\r\n this._processAxisRange(change.value, [\"range\"]);\r\n }\r\n else {\r\n throw new Error(\"Unknown IStreamEvent type\");\r\n }\r\n }));\r\n const renderer = this.get(\"renderer\");\r\n if (renderer) {\r\n renderer.axis = this;\r\n renderer.processAxis();\r\n }\r\n this.children.push(renderer);\r\n this._createGhostLabel();\r\n }\r\n _createGhostLabel() {\r\n const renderer = this.get(\"renderer\");\r\n const ghostLabel = renderer.makeLabel(new DataItem(this, undefined, {}), []);\r\n ghostLabel.adapters.disable(\"text\");\r\n ghostLabel.setAll({ opacity: 0, tooltipText: undefined, tooltipHTML: undefined, interactive: false });\r\n ghostLabel.events.disable();\r\n this.ghostLabel = ghostLabel;\r\n }\r\n _updateFinals(_start, _end) {\r\n }\r\n /**\r\n * Zooms the axis to relative locations.\r\n *\r\n * Both `start` and `end` are relative: 0 means start of the axis, 1 - end.\r\n *\r\n * @param start Relative start\r\n * @param end Relative end\r\n * @param duration Duration of the zoom animation in milliseconds\r\n * @return Zoom animation\r\n */\r\n zoom(start, end, duration, priority) {\r\n if (this.get(\"zoomable\", true)) {\r\n this._updateFinals(start, end);\r\n if (this.get(\"start\") !== start || this.get(\"end\") != end) {\r\n let sAnimation = this._sAnimation;\r\n let eAnimation = this._eAnimation;\r\n if (start > end) {\r\n [start, end] = [end, start];\r\n }\r\n let maxDeviation = this.get(\"maxDeviation\", 0.5) * Math.min(1, (end - start));\r\n if (start < -maxDeviation) {\r\n start = -maxDeviation;\r\n }\r\n if (end > 1 + maxDeviation) {\r\n end = 1 + maxDeviation;\r\n }\r\n let maxZoomFactor = this.getPrivate(\"maxZoomFactor\", this.get(\"maxZoomFactor\", 100));\r\n let maxZoomFactorReal = maxZoomFactor;\r\n if (!$type.isNumber(duration)) {\r\n duration = this.get(\"interpolationDuration\", 0);\r\n }\r\n if (!priority) {\r\n priority = \"end\";\r\n }\r\n if (end === 1 && start !== 0) {\r\n if (start < this.get(\"start\", 0)) {\r\n priority = \"start\";\r\n }\r\n else {\r\n priority = \"end\";\r\n }\r\n }\r\n if (start === 0 && end !== 1) {\r\n if (end > this.get(\"end\", 1)) {\r\n priority = \"end\";\r\n }\r\n else {\r\n priority = \"start\";\r\n }\r\n }\r\n let minZoomCount = this.get(\"minZoomCount\", 0);\r\n const dataItems = this.dataItems;\r\n if (dataItems && dataItems.length < minZoomCount) {\r\n minZoomCount = dataItems.length;\r\n }\r\n let maxZoomCount = this.get(\"maxZoomCount\", Infinity);\r\n if ($type.isNumber(minZoomCount)) {\r\n maxZoomFactor = maxZoomFactorReal / minZoomCount;\r\n }\r\n let minZoomFactor = 1;\r\n if ($type.isNumber(maxZoomCount)) {\r\n minZoomFactor = maxZoomFactorReal / maxZoomCount;\r\n }\r\n // need one more\r\n if (start > end) {\r\n [start, end] = [end, start];\r\n }\r\n // most likely we are dragging left scrollbar grip here, so we tend to modify end\r\n if (priority === \"start\") {\r\n if (maxZoomCount > 0) {\r\n // add to the end\r\n if (1 / (end - start) < minZoomFactor) {\r\n end = start + 1 / minZoomFactor;\r\n }\r\n }\r\n // add to the end\r\n if (1 / (end - start) > maxZoomFactor) {\r\n end = start + 1 / maxZoomFactor;\r\n }\r\n //unless end is > 0\r\n if (end > 1 && end - start < 1 / maxZoomFactor) {\r\n //end = 1;\r\n start = end - 1 / maxZoomFactor;\r\n }\r\n }\r\n // most likely we are dragging right, so we modify left\r\n else {\r\n if (maxZoomCount > 0) {\r\n // add to the end\r\n if (1 / (end - start) < minZoomFactor) {\r\n start = end - 1 / minZoomFactor;\r\n }\r\n }\r\n // remove from start\r\n if (1 / (end - start) > maxZoomFactor) {\r\n start = end - 1 / maxZoomFactor;\r\n }\r\n if (start < 0 && end - start < 1 / maxZoomFactor) {\r\n //start = 0;\r\n end = start + 1 / maxZoomFactor;\r\n }\r\n }\r\n if (1 / (end - start) > maxZoomFactor) {\r\n end = start + 1 / maxZoomFactor;\r\n }\r\n if (1 / (end - start) > maxZoomFactor) {\r\n start = end - 1 / maxZoomFactor;\r\n }\r\n if (maxZoomCount != null && minZoomCount != null && (start == this.get(\"start\") && end == this.get(\"end\"))) {\r\n const chart = this.chart;\r\n if (chart) {\r\n chart._handleAxisSelection(this, true);\r\n }\r\n }\r\n if (((sAnimation && sAnimation.playing && sAnimation.to == start) || this.get(\"start\") == start) && ((eAnimation && eAnimation.playing && eAnimation.to == end) || this.get(\"end\") == end)) {\r\n return;\r\n }\r\n if (duration > 0) {\r\n let easing = this.get(\"interpolationEasing\");\r\n let sAnimation, eAnimation;\r\n if (this.get(\"start\") != start) {\r\n sAnimation = this.animate({ key: \"start\", to: start, duration: duration, easing: easing });\r\n }\r\n if (this.get(\"end\") != end) {\r\n eAnimation = this.animate({ key: \"end\", to: end, duration: duration, easing: easing });\r\n }\r\n this._sAnimation = sAnimation;\r\n this._eAnimation = eAnimation;\r\n if (sAnimation) {\r\n return sAnimation;\r\n }\r\n else if (eAnimation) {\r\n return eAnimation;\r\n }\r\n }\r\n else {\r\n this.set(\"start\", start);\r\n this.set(\"end\", end);\r\n this.root.events.once(\"frameended\", () => {\r\n this.markDirtyKey(\"start\");\r\n });\r\n }\r\n }\r\n else {\r\n if (this._sAnimation) {\r\n this._sAnimation.stop();\r\n }\r\n if (this._eAnimation) {\r\n this._eAnimation.stop();\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * A list of series using this axis.\r\n *\r\n * @return Series\r\n */\r\n get series() {\r\n return this._series;\r\n }\r\n _processAxisRange(dataItem, themeTags) {\r\n dataItem.setRaw(\"isRange\", true);\r\n this._createAssets(dataItem, themeTags);\r\n this._rangesDirty = true;\r\n this._prepareDataItem(dataItem);\r\n const above = dataItem.get(\"above\");\r\n const container = this.topGridContainer;\r\n const grid = dataItem.get(\"grid\");\r\n if (above && grid) {\r\n container.children.moveValue(grid);\r\n }\r\n const fill = dataItem.get(\"axisFill\");\r\n if (above && fill) {\r\n container.children.moveValue(fill);\r\n }\r\n }\r\n _prepareDataItem(_dataItem, _index) { }\r\n /**\r\n * @ignore\r\n */\r\n markDirtyExtremes() {\r\n }\r\n /**\r\n * @ignore\r\n */\r\n markDirtySelectionExtremes() {\r\n }\r\n _calculateTotals() {\r\n }\r\n _updateAxisRanges() {\r\n this._bullets = {};\r\n this.axisRanges.each((axisRange) => {\r\n this._prepareDataItem(axisRange);\r\n });\r\n $array.each(this._seriesAxisRanges, (axisRange) => {\r\n this._prepareDataItem(axisRange);\r\n });\r\n }\r\n _prepareChildren() {\r\n super._prepareChildren();\r\n const ghostLabel = this.ghostLabel;\r\n if (ghostLabel) {\r\n if (this.get(\"fixAxisSize\")) {\r\n ghostLabel.set(\"visible\", true);\r\n }\r\n else {\r\n ghostLabel.set(\"visible\", false);\r\n }\r\n }\r\n if (this.isDirty(\"start\") || this.isDirty(\"end\")) {\r\n const chart = this.chart;\r\n if (chart) {\r\n chart._updateCursor();\r\n }\r\n let start = this.get(\"start\", 0);\r\n let end = this.get(\"end\", 1);\r\n let maxDeviation = this.get(\"maxDeviation\", 0.5) * Math.min(1, (end - start));\r\n if (start < -maxDeviation) {\r\n let delta = start + maxDeviation;\r\n start = -maxDeviation;\r\n this.setRaw(\"start\", start);\r\n if (this.isDirty(\"end\")) {\r\n this.setRaw(\"end\", end - delta);\r\n }\r\n }\r\n if (end > 1 + maxDeviation) {\r\n let delta = end - 1 - maxDeviation;\r\n end = 1 + maxDeviation;\r\n this.setRaw(\"end\", end);\r\n if (this.isDirty(\"start\")) {\r\n this.setRaw(\"start\", start - delta);\r\n }\r\n }\r\n }\r\n const renderer = this.get(\"renderer\");\r\n renderer._start = this.get(\"start\");\r\n renderer._end = this.get(\"end\");\r\n renderer._inversed = renderer.get(\"inversed\", false);\r\n renderer._axisLength = renderer.axisLength() / (renderer._end - renderer._start);\r\n renderer._updateLC();\r\n if (this.isDirty(\"tooltip\")) {\r\n const tooltip = this.get(\"tooltip\");\r\n if (tooltip) {\r\n const rendererTags = renderer.get(\"themeTags\");\r\n tooltip.addTag(\"axis\");\r\n tooltip.addTag(this.className.toLowerCase());\r\n tooltip._applyThemes();\r\n if (rendererTags) {\r\n tooltip.set(\"themeTags\", $utils.mergeTags(tooltip.get(\"themeTags\"), rendererTags));\r\n tooltip.label._applyThemes();\r\n }\r\n }\r\n }\r\n }\r\n _updateTooltipBounds() {\r\n const tooltip = this.get(\"tooltip\");\r\n if (tooltip) {\r\n this.get(\"renderer\").updateTooltipBounds(tooltip);\r\n }\r\n }\r\n _updateBounds() {\r\n super._updateBounds();\r\n this._updateTooltipBounds();\r\n }\r\n /**\r\n * @ignore\r\n */\r\n processChart(chart) {\r\n this.chart = chart;\r\n const renderer = this.get(\"renderer\");\r\n renderer.chart = chart;\r\n chart.gridContainer.children.push(this.gridContainer);\r\n chart.topGridContainer.children.push(this.topGridContainer);\r\n chart.axisHeadersContainer.children.push(this.axisHeader);\r\n this.on(\"start\", () => {\r\n chart._handleAxisSelection(this);\r\n });\r\n this.on(\"end\", () => {\r\n chart._handleAxisSelection(this);\r\n });\r\n chart.plotContainer.onPrivate(\"width\", () => {\r\n this.markDirtySize();\r\n });\r\n chart.plotContainer.onPrivate(\"height\", () => {\r\n this.markDirtySize();\r\n });\r\n chart.processAxis(this);\r\n }\r\n /**\r\n * @ignore\r\n */\r\n hideDataItem(dataItem) {\r\n this._toggleFHDataItem(dataItem, true);\r\n return super.hideDataItem(dataItem);\r\n }\r\n /**\r\n * @ignore\r\n */\r\n showDataItem(dataItem) {\r\n this._toggleFHDataItem(dataItem, false);\r\n return super.showDataItem(dataItem);\r\n }\r\n _toggleFHDataItem(dataItem, forceHidden) {\r\n const fh = \"forceHidden\";\r\n const label = dataItem.get(\"label\");\r\n if (label) {\r\n label.set(fh, forceHidden);\r\n }\r\n const grid = dataItem.get(\"grid\");\r\n if (grid) {\r\n grid.set(fh, forceHidden);\r\n }\r\n const tick = dataItem.get(\"tick\");\r\n if (tick) {\r\n tick.set(fh, forceHidden);\r\n }\r\n const axisFill = dataItem.get(\"axisFill\");\r\n if (axisFill) {\r\n axisFill.set(fh, forceHidden);\r\n }\r\n const bullet = dataItem.get(\"bullet\");\r\n if (bullet) {\r\n const sprite = bullet.get(\"sprite\");\r\n if (sprite) {\r\n sprite.set(fh, forceHidden);\r\n }\r\n }\r\n }\r\n _toggleDataItem(dataItem, visible) {\r\n const label = dataItem.get(\"label\");\r\n const v = \"visible\";\r\n if (label) {\r\n label.setPrivate(v, visible);\r\n }\r\n const grid = dataItem.get(\"grid\");\r\n if (grid) {\r\n grid.setPrivate(v, visible);\r\n }\r\n const tick = dataItem.get(\"tick\");\r\n if (tick) {\r\n tick.setPrivate(v, visible);\r\n }\r\n const axisFill = dataItem.get(\"axisFill\");\r\n if (axisFill) {\r\n axisFill.setPrivate(v, visible);\r\n }\r\n const bullet = dataItem.get(\"bullet\");\r\n if (bullet) {\r\n const sprite = bullet.get(\"sprite\");\r\n if (sprite) {\r\n sprite.setPrivate(v, visible);\r\n }\r\n }\r\n }\r\n _createAssets(dataItem, tags, minor) {\r\n var _a, _b, _c;\r\n const renderer = this.get(\"renderer\");\r\n let m = \"minor\";\r\n const label = dataItem.get(\"label\");\r\n if (!label) {\r\n renderer.makeLabel(dataItem, tags);\r\n }\r\n else {\r\n let themeTags = label.get(\"themeTags\");\r\n let remove = false;\r\n if (minor) {\r\n if ((themeTags === null || themeTags === void 0 ? void 0 : themeTags.indexOf(m)) == -1) {\r\n remove = true;\r\n }\r\n }\r\n else {\r\n if ((themeTags === null || themeTags === void 0 ? void 0 : themeTags.indexOf(m)) != -1) {\r\n remove = true;\r\n }\r\n }\r\n if (remove) {\r\n (_a = label.parent) === null || _a === void 0 ? void 0 : _a.children.removeValue(label);\r\n renderer.makeLabel(dataItem, tags);\r\n label.dispose();\r\n renderer.labels.removeValue(label);\r\n }\r\n }\r\n const grid = dataItem.get(\"grid\");\r\n if (!grid) {\r\n renderer.makeGrid(dataItem, tags);\r\n }\r\n else {\r\n let themeTags = grid.get(\"themeTags\");\r\n let remove = false;\r\n if (minor) {\r\n if ((themeTags === null || themeTags === void 0 ? void 0 : themeTags.indexOf(m)) == -1) {\r\n remove = true;\r\n }\r\n }\r\n else {\r\n if ((themeTags === null || themeTags === void 0 ? void 0 : themeTags.indexOf(m)) != -1) {\r\n remove = true;\r\n }\r\n }\r\n if (remove) {\r\n (_b = grid.parent) === null || _b === void 0 ? void 0 : _b.children.removeValue(grid);\r\n renderer.makeGrid(dataItem, tags);\r\n grid.dispose();\r\n renderer.grid.removeValue(grid);\r\n }\r\n }\r\n const tick = dataItem.get(\"tick\");\r\n if (!tick) {\r\n renderer.makeTick(dataItem, tags);\r\n }\r\n else {\r\n let remove = false;\r\n let themeTags = tick.get(\"themeTags\");\r\n if (minor) {\r\n if ((themeTags === null || themeTags === void 0 ? void 0 : themeTags.indexOf(m)) == -1) {\r\n remove = true;\r\n }\r\n }\r\n else {\r\n if ((themeTags === null || themeTags === void 0 ? void 0 : themeTags.indexOf(m)) != -1) {\r\n remove = true;\r\n }\r\n }\r\n if (remove) {\r\n (_c = tick.parent) === null || _c === void 0 ? void 0 : _c.children.removeValue(tick);\r\n renderer.makeTick(dataItem, tags);\r\n tick.dispose();\r\n renderer.ticks.removeValue(tick);\r\n }\r\n }\r\n if (!minor && !dataItem.get(\"axisFill\")) {\r\n renderer.makeAxisFill(dataItem, tags);\r\n }\r\n else if (minor && !dataItem.get(\"axisFill\") && this.get(\"minorAxisFillsEnabled\")) {\r\n renderer.makeAxisFill(dataItem, tags);\r\n }\r\n this._processBullet(dataItem);\r\n }\r\n _processBullet(dataItem) {\r\n let bullet = dataItem.get(\"bullet\");\r\n let axisBullet = this.get(\"bullet\");\r\n if (!bullet && axisBullet && !dataItem.get(\"isRange\")) {\r\n bullet = axisBullet(this._root, this, dataItem);\r\n }\r\n if (bullet) {\r\n bullet.axis = this;\r\n const sprite = bullet.get(\"sprite\");\r\n if (sprite) {\r\n sprite._setDataItem(dataItem);\r\n dataItem.setRaw(\"bullet\", bullet);\r\n if (!sprite.parent) {\r\n this.bulletsContainer.children.push(sprite);\r\n }\r\n }\r\n }\r\n }\r\n _afterChanged() {\r\n super._afterChanged();\r\n const chart = this.chart;\r\n if (chart) {\r\n chart._updateChartLayout();\r\n chart.axisHeadersContainer.markDirtySize();\r\n }\r\n this.get(\"renderer\")._updatePositions();\r\n this._seriesAdded = false;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n disposeDataItem(dataItem) {\r\n super.disposeDataItem(dataItem);\r\n const renderer = this.get(\"renderer\");\r\n const label = dataItem.get(\"label\");\r\n if (label) {\r\n renderer.labels.removeValue(label);\r\n label.dispose();\r\n }\r\n const tick = dataItem.get(\"tick\");\r\n if (tick) {\r\n renderer.ticks.removeValue(tick);\r\n tick.dispose();\r\n }\r\n const grid = dataItem.get(\"grid\");\r\n if (grid) {\r\n renderer.grid.removeValue(grid);\r\n grid.dispose();\r\n }\r\n const axisFill = dataItem.get(\"axisFill\");\r\n if (axisFill) {\r\n renderer.axisFills.removeValue(axisFill);\r\n axisFill.dispose();\r\n }\r\n const bullet = dataItem.get(\"bullet\");\r\n if (bullet) {\r\n bullet.dispose();\r\n }\r\n }\r\n _updateGhost() {\r\n this.setPrivate(\"cellWidth\", this.getCellWidthPosition() * this.get(\"renderer\").axisLength());\r\n const ghostLabel = this.ghostLabel;\r\n if (ghostLabel) {\r\n if (!ghostLabel.isHidden()) {\r\n const bounds = ghostLabel.localBounds();\r\n const gWidth = Math.ceil(bounds.right - bounds.left);\r\n let text = ghostLabel.get(\"text\");\r\n $array.each(this.dataItems, (dataItem) => {\r\n const label = dataItem.get(\"label\");\r\n if (label && !label.isHidden()) {\r\n const bounds = label.localBounds();\r\n const w = Math.ceil(bounds.right - bounds.left);\r\n if (w > gWidth) {\r\n text = label.text._getText();\r\n }\r\n }\r\n });\r\n ghostLabel.set(\"text\", text);\r\n }\r\n let start = this.get(\"start\", 0);\r\n let end = this.get(\"end\", 1);\r\n this.get(\"renderer\").updateLabel(ghostLabel, start + (end - start) * 0.5);\r\n }\r\n }\r\n _handleCursorPosition(position, snapToSeries) {\r\n const renderer = this.get(\"renderer\");\r\n position = renderer.toAxisPosition(position);\r\n this._cursorPosition = position;\r\n this._snapToSeries = snapToSeries;\r\n this.updateTooltip();\r\n }\r\n /**\r\n * Can be called when axis zoom changes and you need to update tooltip\r\n * position.\r\n */\r\n updateTooltip() {\r\n const snapToSeries = this._snapToSeries;\r\n let position = this._cursorPosition;\r\n const tooltip = this.get(\"tooltip\");\r\n const renderer = this.get(\"renderer\");\r\n if ($type.isNumber(position)) {\r\n $array.each(this.series, (series) => {\r\n if (series.get(\"baseAxis\") === this) {\r\n const dataItem = this.getSeriesItem(series, position, this.get(\"tooltipLocation\"));\r\n if (snapToSeries && snapToSeries.indexOf(series) != -1) {\r\n series.updateLegendMarker(dataItem);\r\n series.updateLegendValue(dataItem);\r\n series._settings.tooltipDataItem = dataItem;\r\n }\r\n else {\r\n series.showDataItemTooltip(dataItem);\r\n series.setRaw(\"tooltipDataItem\", dataItem);\r\n }\r\n }\r\n });\r\n if (this.get(\"snapTooltip\")) {\r\n position = this.roundAxisPosition(position, this.get(\"tooltipLocation\", 0.5));\r\n }\r\n this.setPrivateRaw(\"tooltipPosition\", position);\r\n if (tooltip) {\r\n renderer.updateTooltipBounds(tooltip);\r\n if (!$type.isNaN(position)) {\r\n this._updateTooltipText(tooltip, position);\r\n renderer.positionTooltip(tooltip, position);\r\n if (position < this.get(\"start\", 0) || position > this.get(\"end\", 1)) {\r\n tooltip.hide(0);\r\n }\r\n else {\r\n tooltip.show(0);\r\n }\r\n }\r\n else {\r\n tooltip.hide(0);\r\n }\r\n }\r\n }\r\n }\r\n _updateTooltipText(tooltip, position) {\r\n tooltip.label.set(\"text\", this.getTooltipText(position));\r\n }\r\n /**\r\n * @ignore\r\n */\r\n roundAxisPosition(position, _location) {\r\n return position;\r\n }\r\n _handleSeriesRemoved() {\r\n }\r\n /**\r\n * @ignore\r\n */\r\n handleCursorShow() {\r\n let tooltip = this.get(\"tooltip\");\r\n if (tooltip) {\r\n tooltip.show();\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n handleCursorHide() {\r\n let tooltip = this.get(\"tooltip\");\r\n if (tooltip) {\r\n tooltip.hide();\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n processSeriesDataItem(_dataItem, _fields) {\r\n }\r\n _clearDirty() {\r\n super._clearDirty();\r\n this._sizeDirty = false;\r\n this._rangesDirty = false;\r\n }\r\n /**\r\n * Converts pixel coordinate to a relative position on axis.\r\n *\r\n * @param coordinate Coordinate\r\n * @return Relative position\r\n */\r\n coordinateToPosition(coordinate) {\r\n const renderer = this.get(\"renderer\");\r\n return renderer.toAxisPosition(coordinate / renderer.axisLength());\r\n }\r\n /**\r\n * Converts relative position of the plot area to relative position of the\r\n * axis with zoom taken into account.\r\n *\r\n * @param position Position\r\n * @return Relative position\r\n */\r\n toAxisPosition(position) {\r\n return this.get(\"renderer\").toAxisPosition(position);\r\n }\r\n /**\r\n * Converts relative position of the axis to a global position taking current\r\n * zoom into account (opposite to what `toAxisPosition` does).\r\n *\r\n * @since 5.4.2\r\n * @param position Position\r\n * @return Global position\r\n */\r\n toGlobalPosition(position) {\r\n return this.get(\"renderer\").toGlobalPosition(position);\r\n }\r\n /**\r\n * Adjusts position with inversed taken into account.\r\n *\r\n * @ignore\r\n */\r\n fixPosition(position) {\r\n return this.get(\"renderer\").fixPosition(position);\r\n }\r\n /**\r\n * @ignore\r\n */\r\n shouldGap(_dataItem, _nextItem, _autoGapCount, _fieldName) {\r\n return false;\r\n }\r\n /**\r\n * Creates and returns an axis range object.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/axes/axis-ranges/} for more info\r\n * @param axisDataItem Axis data item\r\n * @return Axis range\r\n */\r\n createAxisRange(axisDataItem) {\r\n return this.axisRanges.push(axisDataItem);\r\n }\r\n /**\r\n * @ignore\r\n */\r\n _groupSeriesData(_series) { }\r\n /**\r\n * Returns relative position between two grid lines of the axis.\r\n *\r\n * @return Position\r\n */\r\n getCellWidthPosition() {\r\n return 0.05;\r\n }\r\n}\r\nAxis.className = \"Axis\";\r\nAxis.classNames = Component.classNames.concat([Axis.className]);\r\n//# sourceMappingURL=Axis.js.map","import { DataItem } from \"../../../core/render/Component\";\r\nimport { Axis } from \"./Axis\";\r\nimport { MultiDisposer } from \"../../../core/util/Disposer\";\r\nimport * as $type from \"../../../core/util/Type\";\r\nimport * as $array from \"../../../core/util/Array\";\r\nimport * as $math from \"../../../core/util/Math\";\r\nimport * as $utils from \"../../../core/util/Utils\";\r\n/**\r\n * Creates a value axis.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/axes/value-axis/} for more info\r\n * @important\r\n */\r\nexport class ValueAxis extends Axis {\r\n constructor() {\r\n super(...arguments);\r\n this._dirtyExtremes = false;\r\n this._dirtySelectionExtremes = false;\r\n this._dseHandled = false;\r\n this._deltaMinMax = 1;\r\n this._baseValue = 0;\r\n this._minLogAdjusted = 1;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n markDirtyExtremes() {\r\n this._dirtyExtremes = true;\r\n this.markDirty();\r\n }\r\n /**\r\n * @ignore\r\n */\r\n markDirtySelectionExtremes() {\r\n this._dirtySelectionExtremes = true;\r\n this.markDirty();\r\n }\r\n _afterNew() {\r\n this._settings.themeTags = $utils.mergeTags(this._settings.themeTags, [\"axis\"]);\r\n this.setPrivateRaw(\"name\", \"value\");\r\n this.addTag(\"value\");\r\n super._afterNew();\r\n }\r\n _prepareChildren() {\r\n var _a;\r\n super._prepareChildren();\r\n if (this.isDirty(\"syncWithAxis\")) {\r\n let previousValue = this._prevSettings.syncWithAxis;\r\n if (previousValue) {\r\n if (this._syncDp) {\r\n this._syncDp.dispose();\r\n }\r\n }\r\n let syncWithAxis = this.get(\"syncWithAxis\");\r\n if (syncWithAxis) {\r\n this._syncDp = new MultiDisposer([\r\n syncWithAxis.onPrivate(\"selectionMinFinal\", () => {\r\n this._dirtySelectionExtremes = true;\r\n }),\r\n syncWithAxis.onPrivate(\"selectionMaxFinal\", () => {\r\n this._dirtySelectionExtremes = true;\r\n })\r\n ]);\r\n }\r\n }\r\n let someDirty = false;\r\n if (this.isDirty(\"min\") || this.isDirty(\"max\") || this.isDirty(\"maxPrecision\") || this.isDirty(\"numberFormat\")) {\r\n someDirty = true;\r\n (_a = this.ghostLabel) === null || _a === void 0 ? void 0 : _a.set(\"text\", \"\");\r\n }\r\n //if (this._dirtyExtremes || this.isPrivateDirty(\"width\") || this.isPrivateDirty(\"height\") || this.isDirty(\"min\") || this.isDirty(\"max\") || this.isDirty(\"extraMin\") || this.isDirty(\"extraMax\") || this.isDirty(\"logarithmic\") || this.isDirty(\"treatZeroAs\") || this.isDirty(\"baseValue\") || this.isDirty(\"strictMinMax\") || this.isDirty(\"maxPrecision\")) {\r\n if (this._sizeDirty || this._dirtyExtremes || this._valuesDirty || someDirty || this.isPrivateDirty(\"width\") || this.isPrivateDirty(\"height\") || this.isDirty(\"extraMin\") || this.isDirty(\"extraMax\") || this.isDirty(\"logarithmic\") || this.isDirty(\"treatZeroAs\") || this.isDirty(\"baseValue\") || this.isDirty(\"strictMinMax\") || this.isDirty(\"strictMinMaxSelection\")) {\r\n this._getMinMax();\r\n this._dirtyExtremes = false;\r\n }\r\n this._handleSizeDirty();\r\n if (this._dirtySelectionExtremes && !this._isPanning && this.get(\"autoZoom\", true)) {\r\n const chart = this.chart;\r\n let getMM = false;\r\n // #1563\r\n if (chart) {\r\n const letter = this.get(\"renderer\").getPrivate(\"letter\");\r\n if (letter == \"Y\") {\r\n chart.xAxes.each((axis) => {\r\n if (axis.className != \"ValueAxis\") {\r\n getMM = true;\r\n }\r\n });\r\n }\r\n else if (letter == \"X\") {\r\n chart.yAxes.each((axis) => {\r\n if (axis.className != \"ValueAxis\") {\r\n getMM = true;\r\n }\r\n });\r\n }\r\n }\r\n if (getMM) {\r\n this._getSelectionMinMax();\r\n }\r\n this._dirtySelectionExtremes = false;\r\n }\r\n this._groupData();\r\n if (this._sizeDirty || this._valuesDirty || this.isDirty(\"start\") || this.isDirty(\"end\") || this.isPrivateDirty(\"min\") || this.isPrivateDirty(\"selectionMax\") || this.isPrivateDirty(\"selectionMin\") || this.isPrivateDirty(\"max\") || this.isPrivateDirty(\"step\") || this.isPrivateDirty(\"width\") || this.isPrivateDirty(\"height\") || this.isDirty(\"logarithmic\")) {\r\n this._handleRangeChange();\r\n this._prepareAxisItems();\r\n this._updateAxisRanges();\r\n }\r\n this._baseValue = this.baseValue();\r\n }\r\n _handleSizeDirty() {\r\n if (this._sizeDirty && !this._dseHandled) {\r\n this._dirtySelectionExtremes = true;\r\n this._dseHandled = true;\r\n if (this.getPrivate(\"selectionMinFinal\") != this.getPrivate(\"selectionMin\") || this.getPrivate(\"selectionMaxFinal\") != this.getPrivate(\"selectionMax\")) {\r\n this._dirtySelectionExtremes = false;\r\n }\r\n }\r\n }\r\n _clearDirty() {\r\n super._clearDirty();\r\n this._dseHandled = false;\r\n }\r\n _groupData() {\r\n }\r\n _formatText(value) {\r\n const numberFormat = this.get(\"numberFormat\");\r\n const formatter = this.getNumberFormatter();\r\n let text = \"\";\r\n if (numberFormat) {\r\n text = formatter.format(value, numberFormat);\r\n }\r\n else {\r\n text = formatter.format(value, undefined, this.getPrivate(\"stepDecimalPlaces\"));\r\n }\r\n return text;\r\n }\r\n _prepareAxisItems() {\r\n const min = this.getPrivate(\"min\");\r\n const max = this.getPrivate(\"max\");\r\n if ($type.isNumber(min) && $type.isNumber(max)) {\r\n const logarithmic = this.get(\"logarithmic\");\r\n const step = this.getPrivate(\"step\");\r\n const selectionMin = this.getPrivate(\"selectionMin\");\r\n const selectionMax = this.getPrivate(\"selectionMax\") + step;\r\n let value = selectionMin - step;\r\n let differencePower = 1;\r\n let minLog = min;\r\n if (logarithmic) {\r\n value = this._minLogAdjusted;\r\n if (value < selectionMin) {\r\n while (value < selectionMin) {\r\n value += step;\r\n }\r\n }\r\n minLog = value;\r\n if (minLog <= 0) {\r\n let minRealLog = this._minRealLog;\r\n if (!$type.isNumber(minRealLog)) {\r\n minRealLog = 1;\r\n }\r\n minLog = Math.pow(10, Math.log(minRealLog) * Math.LOG10E);\r\n if (step < 1) {\r\n if ($type.isNumber(this._minRealLog)) {\r\n minLog = this._minRealLog;\r\n }\r\n else {\r\n minLog = Math.pow(10, -50);\r\n }\r\n }\r\n }\r\n differencePower = Math.log(selectionMax - step) * Math.LOG10E - Math.log(minLog) * Math.LOG10E;\r\n if (differencePower > 2) {\r\n value = Math.pow(10, Math.log(minLog) * Math.LOG10E - 50);\r\n }\r\n }\r\n /// minor grid\r\n const renderer = this.get(\"renderer\");\r\n const minorLabelsEnabled = renderer.get(\"minorLabelsEnabled\");\r\n const minorGridEnabled = renderer.get(\"minorGridEnabled\", minorLabelsEnabled);\r\n let stepPower = Math.pow(10, Math.floor(Math.log(Math.abs(step)) * Math.LOG10E));\r\n const stepAdjusted = Math.round(step / stepPower);\r\n let minorGridCount = 2;\r\n if ($math.round(stepAdjusted / 5, 10) % 1 == 0) {\r\n minorGridCount = 5;\r\n }\r\n if ($math.round(stepAdjusted / 10, 10) % 1 == 0) {\r\n minorGridCount = 10;\r\n }\r\n let minorStep = step / minorGridCount;\r\n // end of minor grid\r\n let i = 0;\r\n let m = 0;\r\n let previous = -Infinity;\r\n const gridCount = this.get(\"renderer\").gridCount();\r\n while (value < selectionMax) {\r\n let dataItem;\r\n if (this.dataItems.length < i + 1) {\r\n dataItem = new DataItem(this, undefined, {});\r\n this._dataItems.push(dataItem);\r\n this.processDataItem(dataItem);\r\n }\r\n else {\r\n dataItem = this.dataItems[i];\r\n }\r\n this._createAssets(dataItem, []);\r\n this._toggleDataItem(dataItem, true);\r\n dataItem.setRaw(\"value\", value);\r\n const label = dataItem.get(\"label\");\r\n if (label) {\r\n label.set(\"text\", this._formatText(value));\r\n }\r\n this._prepareDataItem(dataItem);\r\n let nextValue = value;\r\n if (!logarithmic) {\r\n nextValue += step;\r\n }\r\n else {\r\n if (differencePower > 2) {\r\n const targetGridCount = Math.max(1, gridCount);\r\n // how many log \"powers\" (decades) one major grid line should jump\r\n const x = Math.max(1, Math.ceil(differencePower / targetGridCount));\r\n // use stepped exponent so total major items stays around gridCount\r\n const exponent = Math.log(minLog) * Math.LOG10E + (i + 1) * x - 50;\r\n nextValue = Math.pow(10, exponent);\r\n }\r\n else {\r\n nextValue += step;\r\n }\r\n }\r\n // minor grid\r\n if (minorGridEnabled) {\r\n let minorValue = value + minorStep;\r\n if (logarithmic) {\r\n if (differencePower > 2) {\r\n let minorMinMaxStep = this._adjustMinMax(value, nextValue, 10);\r\n minorStep = minorMinMaxStep.step;\r\n }\r\n minorValue = value + minorStep;\r\n }\r\n while (minorValue < nextValue - step * 0.00000000001) {\r\n let minorDataItem;\r\n if (this.minorDataItems.length < m + 1) {\r\n minorDataItem = new DataItem(this, undefined, {});\r\n this.minorDataItems.push(minorDataItem);\r\n this.processDataItem(minorDataItem);\r\n }\r\n else {\r\n minorDataItem = this.minorDataItems[m];\r\n }\r\n this._createAssets(minorDataItem, [\"minor\"], true);\r\n this._toggleDataItem(minorDataItem, true);\r\n minorDataItem.setRaw(\"value\", minorValue);\r\n const minorLabel = minorDataItem.get(\"label\");\r\n if (minorLabel) {\r\n if (minorLabelsEnabled) {\r\n minorLabel.set(\"text\", this._formatText(minorValue));\r\n }\r\n else {\r\n minorLabel.setPrivate(\"visible\", false);\r\n }\r\n }\r\n this._prepareDataItem(minorDataItem);\r\n minorValue += minorStep;\r\n m++;\r\n }\r\n }\r\n value = nextValue;\r\n if (previous == value) {\r\n break;\r\n }\r\n let stepPower = Math.pow(10, Math.floor(Math.log(Math.abs(step)) * Math.LOG10E));\r\n if (stepPower < 1 && !logarithmic) {\r\n // exponent is less then 1 too. Count decimals of exponent\r\n let decCount = Math.round(Math.abs(Math.log(Math.abs(stepPower)) * Math.LOG10E)) + 2;\r\n // round value to avoid floating point issues\r\n value = $math.round(value, decCount);\r\n }\r\n i++;\r\n // #103520\r\n if (logarithmic && differencePower <= 2) {\r\n if (value - step < step) {\r\n value = step;\r\n }\r\n }\r\n previous = value;\r\n }\r\n for (let j = i; j < this.dataItems.length; j++) {\r\n this._toggleDataItem(this.dataItems[j], false);\r\n }\r\n for (let j = m; j < this.minorDataItems.length; j++) {\r\n this._toggleDataItem(this.minorDataItems[j], false);\r\n }\r\n $array.each(this.series, (series) => {\r\n if (series.inited) {\r\n series._markDirtyAxes();\r\n }\r\n });\r\n this._updateGhost();\r\n }\r\n }\r\n _prepareDataItem(dataItem, count) {\r\n let renderer = this.get(\"renderer\");\r\n let value = dataItem.get(\"value\");\r\n let endValue = dataItem.get(\"endValue\");\r\n let position = this.valueToPosition(value);\r\n let endPosition = position;\r\n let fillEndPosition = this.valueToPosition(value + this.getPrivate(\"step\"));\r\n if ($type.isNumber(endValue)) {\r\n endPosition = this.valueToPosition(endValue);\r\n fillEndPosition = endPosition;\r\n }\r\n if (dataItem.get(\"isRange\")) {\r\n if (endValue == null) {\r\n fillEndPosition = position;\r\n }\r\n }\r\n let labelEndPosition = endPosition;\r\n let labelEndValue = dataItem.get(\"labelEndValue\");\r\n if (labelEndValue != null) {\r\n labelEndPosition = this.valueToPosition(labelEndValue);\r\n }\r\n renderer.updateLabel(dataItem.get(\"label\"), position, labelEndPosition, count);\r\n const grid = dataItem.get(\"grid\");\r\n renderer.updateGrid(grid, position, endPosition);\r\n if (grid) {\r\n if (value == this.get(\"baseValue\", 0)) {\r\n grid.addTag(\"base\");\r\n grid._applyThemes();\r\n }\r\n else if (grid.hasTag(\"base\")) {\r\n grid.removeTag(\"base\");\r\n grid._applyThemes();\r\n }\r\n }\r\n renderer.updateTick(dataItem.get(\"tick\"), position, labelEndPosition, count);\r\n renderer.updateFill(dataItem.get(\"axisFill\"), position, fillEndPosition);\r\n this._processBullet(dataItem);\r\n renderer.updateBullet(dataItem.get(\"bullet\"), position, endPosition);\r\n if (!dataItem.get(\"isRange\")) {\r\n const fillRule = this.get(\"fillRule\");\r\n if (fillRule) {\r\n fillRule(dataItem);\r\n }\r\n }\r\n }\r\n _handleRangeChange() {\r\n let selectionMin = this.positionToValue(this.get(\"start\", 0));\r\n let selectionMax = this.positionToValue(this.get(\"end\", 1));\r\n const gridCount = this.get(\"renderer\").gridCount();\r\n let minMaxStep = this._adjustMinMax(selectionMin, selectionMax, gridCount, true);\r\n let stepDecimalPlaces = $utils.decimalPlaces(minMaxStep.step);\r\n this.setPrivateRaw(\"stepDecimalPlaces\", stepDecimalPlaces);\r\n selectionMin = $math.round(selectionMin, stepDecimalPlaces);\r\n selectionMax = $math.round(selectionMax, stepDecimalPlaces);\r\n minMaxStep = this._adjustMinMax(selectionMin, selectionMax, gridCount, true);\r\n let step = minMaxStep.step;\r\n selectionMin = minMaxStep.min;\r\n selectionMax = minMaxStep.max;\r\n if (this.getPrivate(\"selectionMin\") !== selectionMin || this.getPrivate(\"selectionMax\") !== selectionMax || this.getPrivate(\"step\") !== step) {\r\n // do not change to setPrivate, will cause SO\r\n this.setPrivateRaw(\"selectionMin\", selectionMin);\r\n this.setPrivateRaw(\"selectionMax\", selectionMax);\r\n this.setPrivateRaw(\"step\", step);\r\n }\r\n }\r\n /**\r\n * Converts a relative position to a corresponding numeric value from axis\r\n * scale.\r\n *\r\n * @param position Relative position\r\n * @return Value\r\n */\r\n positionToValue(position) {\r\n const min = this.getPrivate(\"min\");\r\n const max = this.getPrivate(\"max\");\r\n if (!this.get(\"logarithmic\")) {\r\n return position * (max - min) + min;\r\n }\r\n else {\r\n return Math.pow(Math.E, (position * ((Math.log(max) * Math.LOG10E - Math.log(min) * Math.LOG10E)) + Math.log(min) * Math.LOG10E) / Math.LOG10E);\r\n }\r\n }\r\n /**\r\n * Convers value to a relative position on axis.\r\n *\r\n * @param value Value\r\n * @return Relative position\r\n */\r\n valueToPosition(value) {\r\n const min = this.getPrivate(\"min\");\r\n const max = this.getPrivate(\"max\");\r\n if (!this.get(\"logarithmic\")) {\r\n return (value - min) / (max - min);\r\n }\r\n else {\r\n if (value <= 0) {\r\n let treatZeroAs = this.get(\"treatZeroAs\");\r\n if ($type.isNumber(treatZeroAs)) {\r\n value = treatZeroAs;\r\n }\r\n }\r\n return (Math.log(value) * Math.LOG10E - Math.log(min) * Math.LOG10E) / ((Math.log(max) * Math.LOG10E - Math.log(min) * Math.LOG10E));\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n valueToFinalPosition(value) {\r\n const min = this.getPrivate(\"minFinal\");\r\n const max = this.getPrivate(\"maxFinal\");\r\n if (!this.get(\"logarithmic\")) {\r\n return (value - min) / (max - min);\r\n }\r\n else {\r\n if (value <= 0) {\r\n let treatZeroAs = this.get(\"treatZeroAs\");\r\n if ($type.isNumber(treatZeroAs)) {\r\n value = treatZeroAs;\r\n }\r\n }\r\n return (Math.log(value) * Math.LOG10E - Math.log(min) * Math.LOG10E) / ((Math.log(max) * Math.LOG10E - Math.log(min) * Math.LOG10E));\r\n }\r\n }\r\n /**\r\n * Returns X coordinate in pixels corresponding to specific value.\r\n *\r\n * @param value Numeric value\r\n * @param location Location\r\n * @param baseValue Base value\r\n * @return X coordinate\r\n */\r\n getX(value, location, baseValue) {\r\n value = baseValue + (value - baseValue) * location;\r\n const position = this.valueToPosition(value);\r\n return this._settings.renderer.positionToCoordinate(position);\r\n }\r\n /**\r\n * Returns X coordinate in pixels corresponding to specific value.\r\n *\r\n * @param value Numeric value\r\n * @param location Location\r\n * @param baseValue Base value\r\n * @return X coordinate\r\n */\r\n getY(value, location, baseValue) {\r\n value = baseValue + (value - baseValue) * location;\r\n const position = this.valueToPosition(value);\r\n return this._settings.renderer.positionToCoordinate(position);\r\n }\r\n /**\r\n * @ignore\r\n */\r\n getDataItemCoordinateX(dataItem, field, _cellLocation, axisLocation) {\r\n return this._settings.renderer.positionToCoordinate(this.getDataItemPositionX(dataItem, field, _cellLocation, axisLocation));\r\n }\r\n /**\r\n * @ignore\r\n */\r\n getDataItemPositionX(dataItem, field, _cellLocation, axisLocation) {\r\n let value = dataItem.get(field);\r\n const stackToItem = dataItem.get(\"stackToItemX\");\r\n if (stackToItem) {\r\n const series = dataItem.component;\r\n value = value * axisLocation + series.getStackedXValueWorking(dataItem, field);\r\n }\r\n else {\r\n value = this._baseValue + (value - this._baseValue) * axisLocation;\r\n }\r\n return this.valueToPosition(value);\r\n }\r\n /**\r\n * @ignore\r\n */\r\n getDataItemCoordinateY(dataItem, field, _cellLocation, axisLocation) {\r\n return this._settings.renderer.positionToCoordinate(this.getDataItemPositionY(dataItem, field, _cellLocation, axisLocation));\r\n }\r\n /**\r\n * @ignore\r\n */\r\n getDataItemPositionY(dataItem, field, _cellLocation, axisLocation) {\r\n let value = dataItem.get(field);\r\n const stackToItem = dataItem.get(\"stackToItemY\");\r\n if (stackToItem) {\r\n const series = dataItem.component;\r\n value = value * axisLocation + series.getStackedYValueWorking(dataItem, field);\r\n }\r\n else {\r\n value = this._baseValue + (value - this._baseValue) * axisLocation;\r\n }\r\n return this.valueToPosition(value);\r\n }\r\n /**\r\n * Returns relative position of axis' `baseValue`.\r\n *\r\n * @return Base value position\r\n */\r\n basePosition() {\r\n return this.valueToPosition(this.baseValue());\r\n }\r\n /**\r\n * Base value of the [[ValueAxis]], which determines positive and negative\r\n * values.\r\n *\r\n * @return Base value\r\n */\r\n baseValue() {\r\n const min = Math.min(this.getPrivate(\"minFinal\", -Infinity), this.getPrivate(\"selectionMin\", -Infinity));\r\n const max = Math.max(this.getPrivate(\"maxFinal\", Infinity), this.getPrivate(\"selectionMax\", Infinity));\r\n let baseValue = this.get(\"baseValue\", 0);\r\n if (baseValue < min) {\r\n baseValue = min;\r\n }\r\n if (baseValue > max) {\r\n baseValue = max;\r\n }\r\n return baseValue;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n cellEndValue(value) {\r\n return value;\r\n }\r\n fixSmallStep(step) {\r\n // happens because of floating point error\r\n if (1 + step === 1) {\r\n step *= 2;\r\n return this.fixSmallStep(step);\r\n }\r\n return step;\r\n }\r\n _fixMin(min) {\r\n return min;\r\n }\r\n _fixMax(max) {\r\n return max;\r\n }\r\n _calculateTotals() {\r\n if (this.get(\"calculateTotals\")) {\r\n let series = this.series[0];\r\n if (series) {\r\n let startIndex = series.startIndex();\r\n if (series.dataItems.length > 0) {\r\n if (startIndex > 0) {\r\n startIndex--;\r\n }\r\n let endIndex = series.endIndex();\r\n if (endIndex < series.dataItems.length) {\r\n endIndex++;\r\n }\r\n let field;\r\n let vc;\r\n if (series.get(\"yAxis\") == this) {\r\n field = \"valueY\";\r\n vc = \"vcy\";\r\n }\r\n else if (series.get(\"xAxis\") == this) {\r\n field = \"valueX\";\r\n vc = \"vcx\";\r\n }\r\n let fieldWorking = field + \"Working\";\r\n if (field) {\r\n let seriesCount = this.series.length;\r\n let includedSeries = [];\r\n let vcValues = [];\r\n for (let s = 0; s < seriesCount; s++) {\r\n let ser = this.series[s];\r\n if (!ser.get(\"excludeFromTotal\")) {\r\n includedSeries.push(ser);\r\n vcValues.push(ser.get(vc));\r\n }\r\n }\r\n let len = includedSeries.length;\r\n let fieldTotal = (field + \"Total\");\r\n let fieldSum = (field + \"Sum\");\r\n let fieldTotalPercent = (field + \"TotalPercent\");\r\n for (let i = startIndex; i < endIndex; i++) {\r\n let sum = 0;\r\n let total = 0;\r\n for (let s = 0; s < len; s++) {\r\n let dataItem = includedSeries[s].dataItems[i];\r\n if (dataItem) {\r\n let value = dataItem.get(fieldWorking) * vcValues[s];\r\n if (!$type.isNaN(value)) {\r\n sum += value;\r\n total += Math.abs(value);\r\n }\r\n }\r\n }\r\n for (let s = 0; s < len; s++) {\r\n let dataItem = includedSeries[s].dataItems[i];\r\n if (dataItem) {\r\n let value = dataItem.get(fieldWorking) * vcValues[s];\r\n if (!$type.isNaN(value)) {\r\n dataItem.set(fieldTotal, total);\r\n dataItem.set(fieldSum, sum);\r\n dataItem.set(fieldTotalPercent, total == 0 ? 0 : value / total * 100);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n _getSelectionMinMax() {\r\n const min = this.getPrivate(\"minFinal\");\r\n const max = this.getPrivate(\"maxFinal\");\r\n const minDefined = this.get(\"min\");\r\n const maxDefined = this.get(\"max\");\r\n let extraMin = this.get(\"extraMin\", 0);\r\n let extraMax = this.get(\"extraMax\", 0);\r\n if (this.get(\"logarithmic\")) {\r\n if (this.get(\"extraMin\") == null) {\r\n extraMin = 0.1;\r\n }\r\n if (this.get(\"extraMax\") == null) {\r\n extraMax = 0.2;\r\n }\r\n }\r\n const gridCount = this.get(\"renderer\").gridCount();\r\n const selectionStrictMinMax = this.get(\"strictMinMaxSelection\");\r\n let strictMinMax = this.get(\"strictMinMax\");\r\n if ($type.isNumber(min) && $type.isNumber(max)) {\r\n let selectionMin = max;\r\n let selectionMax = min;\r\n $array.each(this.series, (series) => {\r\n if (!series.get(\"ignoreMinMax\")) {\r\n let seriesMin;\r\n let seriesMax;\r\n const outOfSelection = series.getPrivate(\"outOfSelection\");\r\n if (series.get(\"xAxis\") === this) {\r\n if (!outOfSelection) {\r\n let minX = series.getPrivate(\"minX\");\r\n let maxX = series.getPrivate(\"maxX\");\r\n // solves #90085\r\n if (series.startIndex() != 0 || series.endIndex() != series.dataItems.length) {\r\n minX = undefined;\r\n maxX = undefined;\r\n }\r\n seriesMin = series.getPrivate(\"selectionMinX\", minX);\r\n seriesMax = series.getPrivate(\"selectionMaxX\", maxX);\r\n }\r\n }\r\n else if (series.get(\"yAxis\") === this) {\r\n if (!outOfSelection) {\r\n let minY = series.getPrivate(\"minY\");\r\n let maxY = series.getPrivate(\"maxY\");\r\n // solves #90085\r\n if (series.startIndex() != 0 || series.endIndex() != series.dataItems.length) {\r\n minY = undefined;\r\n maxY = undefined;\r\n }\r\n seriesMin = series.getPrivate(\"selectionMinY\", minY);\r\n seriesMax = series.getPrivate(\"selectionMaxY\", maxY);\r\n }\r\n }\r\n if (!series.isHidden() && !series.isShowing()) {\r\n if ($type.isNumber(seriesMin)) {\r\n selectionMin = Math.min(selectionMin, seriesMin);\r\n }\r\n if ($type.isNumber(seriesMax)) {\r\n selectionMax = Math.max(selectionMax, seriesMax);\r\n }\r\n }\r\n }\r\n });\r\n this.axisRanges.each((range) => {\r\n if (range.get(\"affectsMinMax\")) {\r\n let value = range.get(\"value\");\r\n if (value != null) {\r\n selectionMin = Math.min(selectionMin, value);\r\n selectionMax = Math.max(selectionMax, value);\r\n }\r\n value = range.get(\"endValue\");\r\n if (value != null) {\r\n selectionMin = Math.min(selectionMin, value);\r\n selectionMax = Math.max(selectionMax, value);\r\n }\r\n }\r\n });\r\n if (selectionMin > selectionMax) {\r\n [selectionMin, selectionMax] = [selectionMax, selectionMin];\r\n }\r\n if ($type.isNumber(minDefined)) {\r\n if (strictMinMax) {\r\n selectionMin = minDefined;\r\n }\r\n else {\r\n selectionMin = min;\r\n }\r\n }\r\n else if (strictMinMax) {\r\n if ($type.isNumber(this._minReal)) {\r\n selectionMin = this._minReal;\r\n }\r\n }\r\n if ($type.isNumber(maxDefined)) {\r\n if (strictMinMax) {\r\n selectionMax = maxDefined;\r\n }\r\n else {\r\n selectionMax = max;\r\n }\r\n }\r\n else if (strictMinMax) {\r\n if ($type.isNumber(this._maxReal)) {\r\n selectionMax = this._maxReal;\r\n }\r\n }\r\n if (selectionMin === selectionMax) {\r\n let smin = selectionMin;\r\n selectionMin -= this._deltaMinMax;\r\n selectionMax += this._deltaMinMax;\r\n if (selectionMin < min) {\r\n let d = smin - min;\r\n if (d == 0) {\r\n d = this._deltaMinMax;\r\n }\r\n selectionMin = smin - d;\r\n selectionMax = smin + d;\r\n strictMinMax = true;\r\n }\r\n let minMaxStep2 = this._adjustMinMax(selectionMin, selectionMax, gridCount, strictMinMax);\r\n selectionMin = minMaxStep2.min;\r\n selectionMax = minMaxStep2.max;\r\n }\r\n let selectionMinReal = selectionMin;\r\n let selectionMaxReal = selectionMax;\r\n let delta = selectionMax - selectionMin;\r\n selectionMin -= delta * extraMin;\r\n selectionMax += delta * extraMax;\r\n let minMaxStep = this._adjustMinMax(selectionMin, selectionMax, gridCount);\r\n selectionMin = minMaxStep.min;\r\n selectionMax = minMaxStep.max;\r\n selectionMin = $math.fitToRange(selectionMin, min, max);\r\n selectionMax = $math.fitToRange(selectionMax, min, max);\r\n // do it for the second time !important\r\n minMaxStep = this._adjustMinMax(selectionMin, selectionMax, gridCount, true);\r\n if (!strictMinMax) {\r\n selectionMin = minMaxStep.min;\r\n selectionMax = minMaxStep.max;\r\n }\r\n const syncWithAxis = this.get(\"syncWithAxis\");\r\n if (syncWithAxis) {\r\n minMaxStep = this._syncAxes(selectionMin, selectionMax, minMaxStep.step, syncWithAxis.getPrivate(\"selectionMinFinal\", syncWithAxis.getPrivate(\"minFinal\", 0)), syncWithAxis.getPrivate(\"selectionMaxFinal\", syncWithAxis.getPrivate(\"maxFinal\", 1)), syncWithAxis.getPrivate(\"selectionStepFinal\", syncWithAxis.getPrivate(\"step\", 1)));\r\n selectionMin = minMaxStep.min;\r\n selectionMax = minMaxStep.max;\r\n }\r\n if (strictMinMax && !syncWithAxis) {\r\n if ($type.isNumber(minDefined)) {\r\n selectionMin = Math.max(selectionMin, minDefined);\r\n }\r\n if ($type.isNumber(maxDefined)) {\r\n selectionMax = Math.min(selectionMax, maxDefined);\r\n }\r\n }\r\n if (selectionStrictMinMax && !syncWithAxis) {\r\n selectionMin = selectionMinReal - (selectionMaxReal - selectionMinReal) * extraMin;\r\n selectionMax = selectionMaxReal + (selectionMaxReal - selectionMinReal) * extraMax;\r\n }\r\n if (strictMinMax && !syncWithAxis) {\r\n if ($type.isNumber(minDefined)) {\r\n selectionMin = minDefined;\r\n }\r\n else {\r\n selectionMin = selectionMinReal;\r\n }\r\n if ($type.isNumber(maxDefined)) {\r\n selectionMax = maxDefined;\r\n }\r\n else {\r\n selectionMax = selectionMaxReal;\r\n }\r\n if (selectionMax - selectionMin <= 0.00000001) {\r\n selectionMin -= this._deltaMinMax;\r\n selectionMax += this._deltaMinMax;\r\n }\r\n let delta = selectionMax - selectionMin;\r\n selectionMin -= delta * extraMin;\r\n selectionMax += delta * extraMax;\r\n }\r\n if (this.get(\"logarithmic\")) {\r\n if (selectionMin <= 0) {\r\n selectionMin = selectionMinReal * (1 - Math.min(extraMin, 0.99));\r\n }\r\n if (selectionMin < min) {\r\n selectionMin = min;\r\n }\r\n if (selectionMax > max) {\r\n selectionMax = max;\r\n }\r\n }\r\n let len = Math.min(20, Math.ceil(Math.log(this.getPrivate(\"maxZoomFactor\", 100) + 1) / Math.LN10) + 2);\r\n let start = $math.round(this.valueToFinalPosition(selectionMin), len);\r\n let end = $math.round(this.valueToFinalPosition(selectionMax), len);\r\n this.setPrivateRaw(\"selectionMinFinal\", selectionMin);\r\n this.setPrivateRaw(\"selectionMaxFinal\", selectionMax);\r\n this.setPrivateRaw(\"selectionStepFinal\", minMaxStep.step);\r\n this.zoom(start, end);\r\n }\r\n }\r\n _getMinMax() {\r\n let minDefined = this.get(\"min\");\r\n let maxDefined = this.get(\"max\");\r\n let min = Infinity;\r\n let max = -Infinity;\r\n let extraMin = this.get(\"extraMin\", 0);\r\n let extraMax = this.get(\"extraMax\", 0);\r\n if (this.get(\"logarithmic\")) {\r\n if (!this.get(\"strictMinMax\")) {\r\n if (this.get(\"extraMin\") == null) {\r\n extraMin = 0.1;\r\n }\r\n if (this.get(\"extraMax\") == null) {\r\n extraMax = 0.2;\r\n }\r\n }\r\n }\r\n let minDiff = Infinity;\r\n $array.each(this.series, (series) => {\r\n if (!series.get(\"ignoreMinMax\")) {\r\n let seriesMin;\r\n let seriesMax;\r\n if (series.get(\"xAxis\") === this) {\r\n seriesMin = series.getPrivate(\"minX\");\r\n seriesMax = series.getPrivate(\"maxX\");\r\n }\r\n else if (series.get(\"yAxis\") === this) {\r\n seriesMin = series.getPrivate(\"minY\");\r\n seriesMax = series.getPrivate(\"maxY\");\r\n }\r\n if ($type.isNumber(seriesMin) && $type.isNumber(seriesMax)) {\r\n min = Math.min(min, seriesMin);\r\n max = Math.max(max, seriesMax);\r\n let diff = seriesMax - seriesMin;\r\n if (diff <= 0) {\r\n diff = Math.abs(seriesMax / 100);\r\n }\r\n if (diff < minDiff) {\r\n minDiff = diff;\r\n }\r\n }\r\n }\r\n });\r\n this.axisRanges.each((range) => {\r\n if (range.get(\"affectsMinMax\")) {\r\n let value = range.get(\"value\");\r\n if (value != null) {\r\n min = Math.min(min, value);\r\n max = Math.max(max, value);\r\n }\r\n value = range.get(\"endValue\");\r\n if (value != null) {\r\n min = Math.min(min, value);\r\n max = Math.max(max, value);\r\n }\r\n }\r\n });\r\n if (this.get(\"logarithmic\")) {\r\n let treatZeroAs = this.get(\"treatZeroAs\");\r\n if ($type.isNumber(treatZeroAs)) {\r\n if (min <= 0) {\r\n min = treatZeroAs;\r\n }\r\n }\r\n if (min <= 0) {\r\n new Error(\"Logarithmic value axis can not have values <= 0.\");\r\n }\r\n }\r\n if (min === 0 && max === 0) {\r\n max = 0.9;\r\n min = -0.9;\r\n }\r\n if ($type.isNumber(minDefined)) {\r\n min = minDefined;\r\n }\r\n if ($type.isNumber(maxDefined)) {\r\n max = maxDefined;\r\n }\r\n // meaning no min/max found on series/ranges and no min/max was defined\r\n if (min === Infinity || max === -Infinity) {\r\n this.setPrivate(\"minFinal\", undefined);\r\n this.setPrivate(\"maxFinal\", undefined);\r\n return;\r\n }\r\n if (min > max) {\r\n [min, max] = [max, min];\r\n }\r\n const initialMin = min;\r\n const initialMax = max;\r\n // adapter\r\n let minAdapted = this.adapters.fold(\"min\", min);\r\n let maxAdapted = this.adapters.fold(\"max\", max);\r\n this._minRealLog = min;\r\n if ($type.isNumber(minAdapted)) {\r\n min = minAdapted;\r\n }\r\n if ($type.isNumber(maxAdapted)) {\r\n max = maxAdapted;\r\n }\r\n // DateAxis does some magic here\r\n min = this._fixMin(min);\r\n max = this._fixMax(max);\r\n // this happens if starLocation and endLocation are 0.5 and DateAxis has only one date\r\n if (max - min <= 1 / Math.pow(10, 15)) {\r\n if (max - min !== 0) {\r\n this._deltaMinMax = (max - min) / 2;\r\n }\r\n else {\r\n this._getDelta(max);\r\n }\r\n min -= this._deltaMinMax;\r\n max += this._deltaMinMax;\r\n }\r\n // add extras\r\n min -= (max - min) * extraMin;\r\n max += (max - min) * extraMax;\r\n if (this.get(\"logarithmic\")) {\r\n // don't let min go below 0 if real min is >= 0\r\n if (min < 0 && initialMin >= 0) {\r\n min = 0;\r\n }\r\n // don't let max go above 0 if real max is <= 0\r\n if (max > 0 && initialMax <= 0) {\r\n max = 0;\r\n }\r\n }\r\n this._minReal = min;\r\n this._maxReal = max;\r\n let strictMinMax = this.get(\"strictMinMax\");\r\n let strictMinMaxSelection = this.get(\"strictMinMaxSelection\", false);\r\n if (strictMinMaxSelection) {\r\n strictMinMax = strictMinMaxSelection;\r\n }\r\n let strict = strictMinMax;\r\n if ($type.isNumber(maxDefined)) {\r\n strict = true;\r\n }\r\n let gridCount = this.get(\"renderer\").gridCount();\r\n let minMaxStep = this._adjustMinMax(min, max, gridCount, strict);\r\n min = minMaxStep.min;\r\n max = minMaxStep.max;\r\n // do it for the second time with strict true (importat!)\r\n minMaxStep = this._adjustMinMax(min, max, gridCount, true);\r\n min = minMaxStep.min;\r\n max = minMaxStep.max;\r\n // return min max if strict\r\n if (strictMinMax) {\r\n if ($type.isNumber(minDefined)) {\r\n min = minDefined;\r\n }\r\n else {\r\n min = this._minReal;\r\n }\r\n if ($type.isNumber(maxDefined)) {\r\n max = maxDefined;\r\n }\r\n else {\r\n max = this._maxReal;\r\n }\r\n if (max - min <= 0.00000001) {\r\n min -= this._deltaMinMax;\r\n max += this._deltaMinMax;\r\n }\r\n let delta = max - min;\r\n min -= delta * extraMin;\r\n max += delta * extraMax;\r\n }\r\n minAdapted = this.adapters.fold(\"min\", min);\r\n maxAdapted = this.adapters.fold(\"max\", max);\r\n if ($type.isNumber(minAdapted)) {\r\n min = minAdapted;\r\n }\r\n if ($type.isNumber(maxAdapted)) {\r\n max = maxAdapted;\r\n }\r\n if (minDiff == Infinity) {\r\n minDiff = (max - min);\r\n }\r\n // this is to avoid floating point number error\r\n let decCount = Math.round(Math.abs(Math.log(Math.abs(max - min)) * Math.LOG10E)) + 5;\r\n min = $math.round(min, decCount);\r\n max = $math.round(max, decCount);\r\n const syncWithAxis = this.get(\"syncWithAxis\");\r\n if (syncWithAxis) {\r\n minMaxStep = this._syncAxes(min, max, minMaxStep.step, syncWithAxis.getPrivate(\"minFinal\", syncWithAxis.getPrivate(\"min\", 0)), syncWithAxis.getPrivate(\"maxFinal\", syncWithAxis.getPrivate(\"max\", 1)), syncWithAxis.getPrivate(\"step\", 1));\r\n min = minMaxStep.min;\r\n max = minMaxStep.max;\r\n }\r\n this.setPrivateRaw(\"maxZoomFactor\", Math.max(1, Math.ceil((max - min) / minDiff * this.get(\"maxZoomFactor\", 100))));\r\n this._fixZoomFactor();\r\n if (this.get(\"logarithmic\")) {\r\n this._minLogAdjusted = min;\r\n min = this._minReal;\r\n max = this._maxReal;\r\n if (min <= 0) {\r\n min = initialMin * (1 - Math.min(extraMin, 0.99));\r\n }\r\n }\r\n if ($type.isNumber(min) && $type.isNumber(max)) {\r\n if (this.getPrivate(\"minFinal\") !== min || this.getPrivate(\"maxFinal\") !== max) {\r\n this.setPrivate(\"minFinal\", min);\r\n this.setPrivate(\"maxFinal\", max);\r\n this._saveMinMax(min, max);\r\n const duration = this.get(\"interpolationDuration\", 0);\r\n const easing = this.get(\"interpolationEasing\");\r\n this.animatePrivate({ key: \"min\", to: min, duration, easing });\r\n this.animatePrivate({ key: \"max\", to: max, duration, easing });\r\n }\r\n }\r\n }\r\n _fixZoomFactor() {\r\n }\r\n _getDelta(max) {\r\n // the number by which we need to raise 10 to get difference\r\n let exponent = Math.log(Math.abs(max)) * Math.LOG10E;\r\n // here we find a number which is power of 10 and has the same count of numbers as difference has\r\n let power = Math.pow(10, Math.floor(exponent));\r\n // reduce this number by 10 times\r\n power = power / 10;\r\n this._deltaMinMax = power;\r\n }\r\n _saveMinMax(_min, _max) {\r\n }\r\n _adjustMinMax(min, max, gridCount, strictMode) {\r\n // will fail if 0\r\n if (gridCount <= 1) {\r\n gridCount = 1;\r\n }\r\n gridCount = Math.round(gridCount);\r\n let initialMin = min;\r\n let initialMax = max;\r\n let difference = max - min;\r\n // in case min and max is the same, use max\r\n if (difference === 0) {\r\n difference = Math.abs(max);\r\n }\r\n // the number by which we need to raise 10 to get difference\r\n let exponent = Math.log(Math.abs(difference)) * Math.LOG10E;\r\n // here we find a number which is power of 10 and has the same count of numbers as difference has\r\n let power = Math.pow(10, Math.floor(exponent));\r\n // reduce this number by 10 times\r\n power = power / 10;\r\n let extra = power;\r\n if (strictMode) {\r\n extra = 0;\r\n }\r\n // round down min\r\n if (strictMode) {\r\n min = Math.floor(min / power) * power;\r\n // round up max\r\n max = Math.ceil(max / power) * power;\r\n }\r\n else {\r\n min = Math.ceil(min / power) * power - extra;\r\n // round up max\r\n max = Math.floor(max / power) * power + extra;\r\n }\r\n // don't let min go below 0 if real min is >= 0\r\n if (min < 0 && initialMin >= 0) {\r\n min = 0;\r\n }\r\n // don't let max go above 0 if real max is <= 0\r\n if (max > 0 && initialMax <= 0) {\r\n max = 0;\r\n }\r\n exponent = Math.log(Math.abs(difference)) * Math.LOG10E;\r\n power = Math.pow(10, Math.floor(exponent));\r\n power = power / 100; // used to be 10 in v4, but this caused issue that there could be limited number of grids with even very small minGridDistance\r\n // approximate difference between two grid lines\r\n let step = Math.ceil((difference / gridCount) / power) * power;\r\n let stepPower = Math.pow(10, Math.floor(Math.log(Math.abs(step)) * Math.LOG10E));\r\n // the step should divide by 2, 5, and 10.\r\n let stepDivisor = Math.ceil(step / stepPower); // number 0 - 10\r\n if (stepDivisor > 5) {\r\n stepDivisor = 10;\r\n }\r\n else if (stepDivisor <= 5 && stepDivisor > 2) {\r\n stepDivisor = 5;\r\n }\r\n // now get real step\r\n step = Math.ceil(step / (stepPower * stepDivisor)) * stepPower * stepDivisor;\r\n let maxPrecision = this.get(\"maxPrecision\");\r\n if ($type.isNumber(maxPrecision)) {\r\n let ceiledStep = $math.ceil(step, maxPrecision);\r\n if (maxPrecision < Number.MAX_VALUE && step !== ceiledStep) {\r\n step = ceiledStep;\r\n if (step == 0) {\r\n step = 1;\r\n }\r\n }\r\n }\r\n let decCount = 0;\r\n // in case numbers are smaller than 1\r\n if (stepPower < 1) {\r\n // exponent is less then 1 too. Count decimals of exponent\r\n decCount = Math.round(Math.abs(Math.log(Math.abs(stepPower)) * Math.LOG10E)) + 1;\r\n // round step\r\n step = $math.round(step, decCount);\r\n }\r\n // final min and max\r\n let minCount = Math.floor(min / step);\r\n min = $math.round(step * minCount, decCount);\r\n let maxCount;\r\n if (!strictMode) {\r\n maxCount = Math.ceil(max / step);\r\n }\r\n else {\r\n maxCount = Math.floor(max / step);\r\n }\r\n if (maxCount === minCount) {\r\n maxCount++;\r\n }\r\n max = $math.round(step * maxCount, decCount);\r\n if (max < initialMax) {\r\n max = max + step;\r\n }\r\n if (min > initialMin) {\r\n min = min - step;\r\n }\r\n step = this.fixSmallStep(step);\r\n return { min: min, max: max, step: step };\r\n }\r\n /**\r\n * Returns text to be used in an axis tooltip for specific relative position.\r\n *\r\n * @param position Position\r\n * @return Tooltip text\r\n */\r\n getTooltipText(position, _adjustPosition) {\r\n const numberFormat = this.get(\"tooltipNumberFormat\", this.get(\"numberFormat\"));\r\n const formatter = this.getNumberFormatter();\r\n const extraDecimals = this.get(\"extraTooltipPrecision\", 0);\r\n const decimals = this.getPrivate(\"stepDecimalPlaces\", 0) + extraDecimals;\r\n const value = $math.round(this.positionToValue(position), decimals);\r\n if (numberFormat) {\r\n return formatter.format(value, numberFormat);\r\n }\r\n else {\r\n return formatter.format(value, undefined, decimals);\r\n }\r\n }\r\n /**\r\n * Returns a data item from series that is closest to the `position`.\r\n *\r\n * @param series Series\r\n * @param position Relative position\r\n * @return Data item\r\n */\r\n getSeriesItem(series, position) {\r\n let fieldName = (this.getPrivate(\"name\") + this.get(\"renderer\").getPrivate(\"letter\"));\r\n let value = this.positionToValue(position);\r\n let index = undefined;\r\n let oldDiff;\r\n $array.each(series.dataItems, (dataItem, i) => {\r\n const diff = Math.abs(dataItem.get(fieldName) - value);\r\n if (index === undefined || diff < oldDiff) {\r\n index = i;\r\n oldDiff = diff;\r\n }\r\n });\r\n if (index != null) {\r\n return series.dataItems[index];\r\n }\r\n }\r\n /**\r\n * Zooms the axis to specific `start` and `end` values.\r\n *\r\n * Optional `duration` specifies duration of zoom animation in milliseconds.\r\n *\r\n * @param start Start value\r\n * @param end End value\r\n * @param duration Duration in milliseconds\r\n */\r\n zoomToValues(start, end, duration) {\r\n const min = this.getPrivate(\"minFinal\", this.getPrivate(\"min\", 0));\r\n const max = this.getPrivate(\"maxFinal\", this.getPrivate(\"max\", 1));\r\n if (this.getPrivate(\"min\") != null && this.getPrivate(\"max\") != null) {\r\n this.zoom((start - min) / (max - min), (end - min) / (max - min), duration);\r\n }\r\n }\r\n /**\r\n * Syncs with a target axis.\r\n *\r\n * @param min Min\r\n * @param max Max\r\n * @param step Step\r\n */\r\n _syncAxes(min, max, step, syncMin, syncMax, syncStep) {\r\n let axis = this.get(\"syncWithAxis\");\r\n if (axis) {\r\n let targetCount = Math.round((syncMax - syncMin) / syncStep);\r\n if (targetCount > 0) {\r\n if (this.get(\"syncZeros\") && syncMin <= 0 && syncMax >= 0) {\r\n // Count intervals below/above zero on source axis\r\n let belowCount = Math.round((0 - syncMin) / syncStep);\r\n let aboveCount = targetCount - belowCount;\r\n // Find the smallest nice step that covers this axis's\r\n // data on both sides with the same below/above split\r\n let rawStep = 0;\r\n if (belowCount > 0 && min < 0) {\r\n rawStep = Math.abs(min) / belowCount;\r\n }\r\n if (aboveCount > 0 && max > 0) {\r\n rawStep = Math.max(rawStep, max / aboveCount);\r\n }\r\n // Fallback: if one side has no data but has intervals\r\n if (rawStep == 0) {\r\n rawStep = (max - min) / targetCount;\r\n }\r\n step = this._niceStep(rawStep);\r\n min = -step * belowCount;\r\n max = step * aboveCount;\r\n }\r\n else {\r\n // Regular grid count sync (no zero alignment)\r\n let rawStep = (max - min) / targetCount;\r\n step = this._niceStep(rawStep);\r\n // Snap min/max to step boundaries ensuring data coverage\r\n let newMin = Math.floor(min / step) * step;\r\n let newMax = newMin + step * targetCount;\r\n // Ensure max covers the data\r\n if (newMax < max) {\r\n newMin = Math.ceil(max / step) * step - step * targetCount;\r\n newMax = newMin + step * targetCount;\r\n }\r\n // Preserve zero boundaries\r\n if (min >= 0 && newMin < 0) {\r\n newMin = 0;\r\n newMax = step * targetCount;\r\n }\r\n if (max <= 0 && newMax > 0) {\r\n newMax = 0;\r\n newMin = -(step * targetCount);\r\n }\r\n min = newMin;\r\n max = newMax;\r\n }\r\n }\r\n }\r\n return { min: min, max: max, step: step };\r\n }\r\n /**\r\n * Rounds a raw step value up to the nearest \"nice\" number\r\n * (1, 2, 5, 10, 20, 50, etc.), respecting maxPrecision.\r\n */\r\n _niceStep(rawStep) {\r\n let stepPower = Math.pow(10, Math.floor(Math.log(Math.abs(rawStep)) * Math.LOG10E));\r\n let normalized = rawStep / stepPower;\r\n if (normalized <= 1)\r\n normalized = 1;\r\n else if (normalized <= 2)\r\n normalized = 2;\r\n else if (normalized <= 5)\r\n normalized = 5;\r\n else\r\n normalized = 10;\r\n let step = normalized * stepPower;\r\n let maxPrecision = this.get(\"maxPrecision\");\r\n if ($type.isNumber(maxPrecision)) {\r\n let ceiledStep = $math.ceil(step, maxPrecision);\r\n if (maxPrecision < Number.MAX_VALUE && step !== ceiledStep) {\r\n step = ceiledStep;\r\n if (step == 0) {\r\n step = 1;\r\n }\r\n }\r\n }\r\n return step;\r\n }\r\n /**\r\n * Returns relative position between two grid lines of the axis.\r\n *\r\n * @return Position\r\n */\r\n getCellWidthPosition() {\r\n let max = this.getPrivate(\"selectionMax\", this.getPrivate(\"max\"));\r\n let min = this.getPrivate(\"selectionMin\", this.getPrivate(\"min\"));\r\n if ($type.isNumber(max) && $type.isNumber(min)) {\r\n return this.getPrivate(\"step\", 1) / (max - min);\r\n }\r\n return 0.05;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n nextPosition(count) {\r\n if (count == null) {\r\n count = 1;\r\n }\r\n if (this.get(\"renderer\").getPrivate(\"letter\") == \"Y\") {\r\n count *= -1;\r\n }\r\n let value = this.positionToValue(this.getPrivate(\"tooltipPosition\", 0));\r\n value += this.getPrivate(\"step\", 1) * count;\r\n value = $math.fitToRange(value, this.getPrivate(\"selectionMin\", 0), this.getPrivate(\"selectionMax\", 1));\r\n return this.toGlobalPosition(this.valueToPosition(value));\r\n }\r\n}\r\nValueAxis.className = \"ValueAxis\";\r\nValueAxis.classNames = Axis.classNames.concat([ValueAxis.className]);\r\n//# sourceMappingURL=ValueAxis.js.map","import { Axis } from \"./Axis\";\r\nimport { populateString } from \"../../../core/util/PopulateString\";\r\nimport { ValueAxis } from \"./ValueAxis\";\r\nimport * as $array from \"../../../core/util/Array\";\r\nimport * as $type from \"../../../core/util/Type\";\r\nimport * as $math from \"../../../core/util/Math\";\r\nimport * as $utils from \"../../../core/util/Utils\";\r\n/**\r\n * Creates a category axis.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/axes/category-axis/} for more info\r\n * @important\r\n */\r\nexport class CategoryAxis extends Axis {\r\n constructor() {\r\n super(...arguments);\r\n this._frequency = 1;\r\n this._itemMap = {};\r\n }\r\n _afterNew() {\r\n this._settings.themeTags = $utils.mergeTags(this._settings.themeTags, [\"axis\"]);\r\n this.fields.push(\"category\", \"id\", \"cellSize\");\r\n this.setPrivateRaw(\"name\", \"category\");\r\n this.addTag(\"category\");\r\n super._afterNew();\r\n }\r\n _afterDataChange() {\r\n super._afterDataChange();\r\n const len = this.dataItems.length;\r\n if (len > 0) {\r\n this.setPrivateRaw(\"maxZoomFactor\", len);\r\n }\r\n // fix final indexes\t\t\r\n this.setPrivateRaw(\"startIndex\", Math.min(this.getPrivate(\"startIndex\", 0), len));\r\n this.setPrivateRaw(\"endIndex\", Math.min(this.getPrivate(\"endIndex\", len), 1));\r\n }\r\n _prepareChildren() {\r\n super._prepareChildren();\r\n const len = this.dataItems.length;\r\n let i = 0;\r\n if (this._valuesDirty) {\r\n this._itemMap = {};\r\n $array.each(this.dataItems, (dataItem) => {\r\n dataItem.setRaw(\"index\", i);\r\n this._itemMap[dataItem.get(\"category\")] = dataItem;\r\n i++;\r\n });\r\n this.setPrivateRaw(\"maxZoomFactor\", len);\r\n }\r\n let start = this.get(\"start\", 0);\r\n let end = this.get(\"end\", 1);\r\n let indices = this._getIndices(start, end);\r\n this.setPrivateRaw(\"startIndex\", indices.startIndex);\r\n this.setPrivateRaw(\"endIndex\", indices.endIndex);\r\n if (this._sizeDirty || this._valuesDirty || (this.isDirty(\"start\") || this.isDirty(\"end\") || this.isPrivateDirty(\"endIndex\") || this.isPrivateDirty(\"startIndex\") || this.isPrivateDirty(\"width\") || this.isPrivateDirty(\"height\"))) {\r\n if (this.dataItems.length > 0) {\r\n this._handleRangeChange();\r\n this._prepareAxisItems();\r\n this._updateAxisRanges();\r\n }\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n adjustZoom() {\r\n const len = this.dataItems.length;\r\n if (len > 1) {\r\n let maxZoomCount = this.get(\"maxZoomCount\", this.dataItems.length);\r\n let minZoomCount = this.get(\"minZoomCount\", 1);\r\n let count = 0;\r\n let startIndex = this.getPrivate(\"startIndex\", 0);\r\n let endIndex = this.getPrivate(\"endIndex\", 0);\r\n const sAnimation = this._sAnimation;\r\n const eAnimation = this._eAnimation;\r\n let start = this.get(\"start\", 0);\r\n let getIndices = false;\r\n if (sAnimation && !sAnimation.stopped) {\r\n start = Number(sAnimation.to);\r\n getIndices = true;\r\n }\r\n let end = this.get(\"end\", 1);\r\n if (eAnimation && !eAnimation.stopped) {\r\n end = Number(eAnimation.to);\r\n getIndices = true;\r\n }\r\n if (getIndices) {\r\n const indices = this._getIndices(start, end);\r\n startIndex = indices.startIndex;\r\n endIndex = indices.endIndex;\r\n }\r\n for (let i = startIndex; i < endIndex; i++) {\r\n const dataItem = this.dataItems[i];\r\n count += dataItem.get(\"finalCellSize\", 1);\r\n }\r\n ;\r\n if (count <= minZoomCount) {\r\n // need to zoom out\r\n let c = 0;\r\n for (let i = startIndex; i < len; i++) {\r\n const dataItem = this.dataItems[i];\r\n c += dataItem.get(\"finalCellSize\", 1);\r\n endIndex = i + 1;\r\n if (c >= minZoomCount) {\r\n break;\r\n }\r\n }\r\n if (c < minZoomCount) {\r\n // still not enough, try to extend at the start\r\n for (let i = startIndex - 1; i >= 0; i--) {\r\n const dataItem = this.dataItems[i];\r\n c += dataItem.get(\"finalCellSize\", 1);\r\n startIndex = i;\r\n if (c >= minZoomCount) {\r\n break;\r\n }\r\n }\r\n }\r\n this.zoomToIndexes(startIndex, endIndex);\r\n }\r\n else if (count >= maxZoomCount) {\r\n let c = count;\r\n for (let i = endIndex - 1; i >= startIndex; i--) {\r\n const dataItem = this.dataItems[i];\r\n c -= dataItem.get(\"finalCellSize\", 1);\r\n if (c <= maxZoomCount) {\r\n endIndex = i + 1;\r\n break;\r\n }\r\n }\r\n this.zoomToIndexes(startIndex, endIndex);\r\n }\r\n }\r\n }\r\n _handleRangeChange() {\r\n $array.each(this.series, (series) => {\r\n let startCategory = this.dataItems[this.startIndex()].get(\"category\");\r\n let endCategory = this.dataItems[this.endIndex() - 1].get(\"category\");\r\n let baseAxis = series.get(\"baseAxis\");\r\n let xAxis = series.get(\"xAxis\");\r\n let yAxis = series.get(\"yAxis\");\r\n if (xAxis instanceof CategoryAxis && yAxis instanceof CategoryAxis) {\r\n series._markDirtyAxes();\r\n }\r\n else if (baseAxis === this) {\r\n let key;\r\n let openKey;\r\n let otherAxis = yAxis;\r\n if (xAxis === baseAxis) {\r\n if (series.get(\"categoryXField\")) {\r\n key = \"categoryX\";\r\n }\r\n if (series.get(\"openCategoryXField\")) {\r\n openKey = \"openCategoryX\";\r\n }\r\n }\r\n else if (yAxis === baseAxis) {\r\n if (series.get(\"categoryYField\")) {\r\n key = \"categoryY\";\r\n }\r\n if (series.get(\"openCategoryYField\")) {\r\n openKey = \"openCategoryY\";\r\n }\r\n otherAxis = xAxis;\r\n }\r\n if (otherAxis instanceof ValueAxis) {\r\n if (key || openKey) {\r\n let startDataItem;\r\n let endDataItem;\r\n function findDataItem(series, categoryAxis, key, openKey, category, direction) {\r\n let dataItem;\r\n let idx = categoryAxis.categoryToIndex(category);\r\n while (!dataItem && idx >= 0 && idx < categoryAxis.dataItems.length) {\r\n let searchCategory = categoryAxis.dataItems[idx].get(\"category\");\r\n if (direction == \"previous\") {\r\n for (let i = series.dataItems.length - 1; i >= 0; i--) {\r\n let item = series.dataItems[i];\r\n if (key && item.get(key) === searchCategory) {\r\n dataItem = item;\r\n break;\r\n }\r\n if (openKey && item.get(openKey) === searchCategory) {\r\n dataItem = item;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n for (let i = 0, len = series.dataItems.length; i < len; i++) {\r\n let item = series.dataItems[i];\r\n if (key && item.get(key) === searchCategory) {\r\n dataItem = item;\r\n break;\r\n }\r\n if (openKey && item.get(openKey) === searchCategory) {\r\n dataItem = item;\r\n break;\r\n }\r\n }\r\n }\r\n if (!dataItem) {\r\n idx += direction === \"previous\" ? -1 : 1;\r\n }\r\n }\r\n return dataItem;\r\n }\r\n startDataItem = findDataItem(series, this, key, openKey, startCategory, \"next\");\r\n endDataItem = findDataItem(series, this, key, openKey, endCategory, \"previous\");\r\n let startIndex = 0;\r\n let endIndex = series.dataItems.length;\r\n if (startDataItem) {\r\n startIndex = series.dataItems.indexOf(startDataItem);\r\n }\r\n if (endDataItem) {\r\n endIndex = series.dataItems.indexOf(endDataItem) + 1;\r\n }\r\n series.setPrivate(\"startIndex\", startIndex);\r\n series.setPrivate(\"endIndex\", endIndex);\r\n let hasValue = false;\r\n for (let i = startIndex; i < endIndex; i++) {\r\n const dataItem = series.dataItems[i];\r\n $array.each(series.__valueXShowFields, (key) => {\r\n let value = dataItem.get(key);\r\n if (value != null) {\r\n hasValue = true;\r\n }\r\n });\r\n $array.each(series.__valueYShowFields, (key) => {\r\n let value = dataItem.get(key);\r\n if (value != null) {\r\n hasValue = true;\r\n }\r\n });\r\n if (hasValue) {\r\n break;\r\n }\r\n }\r\n series.setPrivate(\"outOfSelection\", !hasValue);\r\n }\r\n }\r\n series._markDirtyAxes(); // must be outside\r\n }\r\n });\r\n }\r\n _prepareAxisItems() {\r\n var _a;\r\n const renderer = this.get(\"renderer\");\r\n const len = this.dataItems.length;\r\n let startIndex = this.startIndex();\r\n if (startIndex > 0) {\r\n startIndex--;\r\n }\r\n let endIndex = this.endIndex();\r\n if (endIndex < len) {\r\n endIndex++;\r\n }\r\n const minorLabelsEnabled = renderer.get(\"minorLabelsEnabled\");\r\n const minorGridEnabled = renderer.get(\"minorGridEnabled\", minorLabelsEnabled);\r\n let maxCount = renderer.axisLength() / Math.max(renderer.get(\"minGridDistance\"), 1);\r\n let frequency = Math.max(1, Math.min(len, Math.ceil((endIndex - startIndex) / maxCount)));\r\n startIndex = Math.floor(startIndex / frequency) * frequency;\r\n this._frequency = frequency;\r\n for (let j = 0; j < len; j++) {\r\n this._toggleDataItem(this.dataItems[j], false);\r\n }\r\n let f = this.dataItems[startIndex].get(\"index\", 0);\r\n for (let i = startIndex; i < endIndex; i = i + frequency) {\r\n let dataItem = this.dataItems[i];\r\n this._createAssets(dataItem, []);\r\n this._toggleDataItem(dataItem, true);\r\n let count = frequency;\r\n if (minorGridEnabled) {\r\n count = 1;\r\n }\r\n this._prepareDataItem(dataItem, f, count);\r\n f++;\r\n }\r\n if (renderer.get(\"minorGridEnabled\")) {\r\n for (let i = startIndex; i < endIndex; i++) {\r\n let dataItem = this.dataItems[i];\r\n if (i % frequency != 0) {\r\n this._createAssets(dataItem, [\"minor\"], true);\r\n this._toggleDataItem(dataItem, true);\r\n this._prepareDataItem(dataItem, 0, 1);\r\n if (!minorLabelsEnabled) {\r\n (_a = dataItem.get(\"label\")) === null || _a === void 0 ? void 0 : _a.setPrivate(\"visible\", false);\r\n }\r\n }\r\n }\r\n }\r\n this._updateGhost();\r\n }\r\n _prepareDataItem(dataItem, fillIndex, count) {\r\n let renderer = this.get(\"renderer\");\r\n let categoryLocation = dataItem.get(\"categoryLocation\", 0);\r\n let endCategoryLocation = dataItem.get(\"endCategoryLocation\", 1);\r\n let index = dataItem.get(\"index\");\r\n if (!$type.isNumber(index)) {\r\n index = this.categoryToIndex(dataItem.get(\"category\"));\r\n }\r\n let position = this.indexToPosition(index, categoryLocation);\r\n let endCategory = dataItem.get(\"endCategory\");\r\n let endIndex;\r\n if (endCategory) {\r\n endIndex = this.categoryToIndex(endCategory);\r\n if (!$type.isNumber(endIndex)) {\r\n endIndex = index;\r\n }\r\n }\r\n else {\r\n endIndex = index;\r\n }\r\n let endPosition = this.indexToPosition(endIndex, endCategoryLocation);\r\n let fillEndIndex;\r\n let fillEndPosition;\r\n if (dataItem.get(\"isRange\")) {\r\n fillEndIndex = endIndex;\r\n if (!$type.isNumber(index)) {\r\n this._toggleDataItem(dataItem, false);\r\n return;\r\n }\r\n }\r\n else {\r\n fillEndIndex = index + this._frequency - 1;\r\n }\r\n fillEndPosition = this.indexToPosition(fillEndIndex, endCategoryLocation);\r\n renderer.updateLabel(dataItem.get(\"label\"), position, endPosition, count);\r\n renderer.updateGrid(dataItem.get(\"grid\"), position, endPosition);\r\n renderer.updateTick(dataItem.get(\"tick\"), position, endPosition, count);\r\n renderer.updateFill(dataItem.get(\"axisFill\"), position, fillEndPosition);\r\n this._processBullet(dataItem);\r\n renderer.updateBullet(dataItem.get(\"bullet\"), position, endPosition);\r\n const fillRule = this.get(\"fillRule\");\r\n if (fillRule) {\r\n fillRule(dataItem, fillIndex);\r\n }\r\n }\r\n startIndex() {\r\n let len = this.dataItems.length;\r\n return Math.min(Math.max(this.getPrivate(\"startIndex\", 0), 0), len - 1);\r\n }\r\n endIndex() {\r\n let len = this.dataItems.length;\r\n return Math.max(1, Math.min(this.getPrivate(\"endIndex\", len), len));\r\n }\r\n /**\r\n * @ignore\r\n */\r\n baseValue() {\r\n }\r\n /**\r\n * @ignore\r\n */\r\n basePosition() {\r\n return 0;\r\n }\r\n /**\r\n * Returns X coordinate in pixels corresponding to specific category index.\r\n *\r\n * @param value Index\r\n * @return X coordinate\r\n */\r\n getX(value) {\r\n let axisDataItem = this._itemMap[value];\r\n if (axisDataItem) {\r\n return this._settings.renderer.positionToCoordinate(this.indexToPosition(axisDataItem.get(\"index\", 0)));\r\n }\r\n return NaN;\r\n }\r\n /**\r\n * Returns Y coordinate in pixels corresponding to specific category index.\r\n *\r\n * @param value Index\r\n * @return Y coordinate\r\n */\r\n getY(value) {\r\n let axisDataItem = this._itemMap[value];\r\n if (axisDataItem) {\r\n return this._settings.renderer.positionToCoordinate(this.indexToPosition(axisDataItem.get(\"index\", 0)));\r\n }\r\n return NaN;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n getDataItemPositionX(dataItem, field, cellLocation, _axisLocation) {\r\n const category = dataItem.get(field);\r\n const axisDataItem = this._itemMap[category];\r\n if (axisDataItem) {\r\n return this.indexToPosition(axisDataItem.get(\"index\", 0), cellLocation);\r\n }\r\n return NaN;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n getDataItemCoordinateX(dataItem, field, cellLocation, _axisLocation) {\r\n return this._settings.renderer.positionToCoordinate(this.getDataItemPositionX(dataItem, field, cellLocation, _axisLocation));\r\n }\r\n /**\r\n * @ignore\r\n */\r\n getDataItemPositionY(dataItem, field, cellLocation, _axisLocation) {\r\n const category = dataItem.get(field);\r\n const axisDataItem = this._itemMap[category];\r\n if (axisDataItem) {\r\n return this.indexToPosition(axisDataItem.get(\"index\", 0), cellLocation);\r\n }\r\n return NaN;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n getDataItemCoordinateY(dataItem, field, cellLocation, _axisLocation) {\r\n return this._settings.renderer.positionToCoordinate(this.getDataItemPositionY(dataItem, field, cellLocation, _axisLocation));\r\n }\r\n /**\r\n * Converts category index to a relative position.\r\n *\r\n * `location` indicates relative position within category: 0 - start, 1 - end.\r\n *\r\n * If not set, will use middle (0.5) of the category.\r\n *\r\n * @param index Index\r\n * @param location Location\r\n * @return Index\r\n */\r\n indexToPosition(index, location, final) {\r\n let len = this.dataItems.length;\r\n let position = 0;\r\n if (len == 0) {\r\n return 0;\r\n }\r\n if (index >= len) {\r\n index = len - 1;\r\n location = 1;\r\n }\r\n if (!$type.isNumber(location)) {\r\n location = 0.5;\r\n }\r\n if (!$type.isNumber(index)) {\r\n return 0;\r\n }\r\n let startLocation = this.get(\"startLocation\", 0);\r\n let endLocation = this.get(\"endLocation\", 1);\r\n if (!this.get(\"cellSizeField\")) {\r\n len -= startLocation;\r\n len -= (1 - endLocation);\r\n position = (index + location - startLocation) / len;\r\n }\r\n else {\r\n let name = final ? \"finalCellSize\" : \"cellSize\";\r\n const dataItems = this.dataItems;\r\n // Calculate total modified count (sum of cell sizes)\r\n let modCount = 0;\r\n $array.each(this.dataItems, (dataItem) => {\r\n modCount += dataItem.get(name, 1);\r\n });\r\n modCount -= startLocation * dataItems[0].get(name, 1);\r\n modCount -= (1 - endLocation) * dataItems[dataItems.length - 1].get(name, 1);\r\n // Calculate the position based on cell sizes\r\n let acc = 0;\r\n for (let i = 0; i < index; i++) {\r\n acc += dataItems[i].get(name, 1);\r\n }\r\n let cellSizeAtIndex = dataItems[index].get(name, 1);\r\n position = (acc + location * cellSizeAtIndex - startLocation * dataItems[0].get(name, 1)) / modCount;\r\n }\r\n if (!final) {\r\n let dataItem = this.dataItems[index];\r\n if (dataItem) {\r\n position += dataItem.get(\"deltaPosition\", 0);\r\n }\r\n }\r\n return position;\r\n }\r\n /**\r\n * Returns a position of a category.\r\n *\r\n * @param category Category to look up\r\n * @return Position\r\n */\r\n categoryToPosition(category) {\r\n let dataItem = this._itemMap[category];\r\n if (dataItem) {\r\n return this.indexToPosition(dataItem.get(\"index\"));\r\n }\r\n return NaN;\r\n }\r\n /**\r\n * Returns an index of a category.\r\n *\r\n * @param category Category to look up\r\n * @return Index\r\n */\r\n categoryToIndex(category) {\r\n let dataItem = this._itemMap[category];\r\n if (dataItem) {\r\n return dataItem.get(\"index\");\r\n }\r\n return NaN;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n dataItemToPosition(dataItem) {\r\n return this.indexToPosition(dataItem.get(\"index\"));\r\n }\r\n /**\r\n * @ignore\r\n */\r\n roundAxisPosition(position, location) {\r\n position += (0.5 - location) / this.dataItems.length;\r\n return this.indexToPosition(this.axisPositionToIndex(position), location);\r\n }\r\n /**\r\n * Returns an index of the category that corresponds to specific pixel\r\n * position within axis.\r\n *\r\n * @param position Position (px)\r\n * @return Category index\r\n */\r\n axisPositionToIndex(position) {\r\n let len = this.dataItems.length;\r\n if (len === 0) {\r\n return 0;\r\n }\r\n // Calculate total modified length (sum of cell sizes)\r\n if (this.get(\"cellSizeField\")) {\r\n let modifiedLen = 0;\r\n let cellSizes = [];\r\n $array.each(this.dataItems, (dataItem) => {\r\n const cellSize = dataItem.get(\"cellSize\", 1);\r\n cellSizes.push(cellSize);\r\n modifiedLen += cellSize;\r\n });\r\n // Adjust for startLocation and endLocation\r\n let startLocation = this.get(\"startLocation\", 0);\r\n let endLocation = this.get(\"endLocation\", 1);\r\n modifiedLen -= startLocation;\r\n modifiedLen -= (1 - endLocation);\r\n // Find which cell the position falls into\r\n let rel = position * modifiedLen + startLocation;\r\n let acc = 0;\r\n for (let i = 0; i < len; i++) {\r\n const cellSize = cellSizes[i];\r\n if (rel < acc + cellSize) {\r\n return i;\r\n }\r\n acc += cellSize;\r\n }\r\n return len - 1;\r\n }\r\n else {\r\n return $math.fitToRange(Math.floor(position * len), 0, len - 1);\r\n }\r\n }\r\n /**\r\n * Returns text to be used in an axis tooltip for specific relative position.\r\n *\r\n * @param position Position\r\n * @return Tooltip text\r\n */\r\n getTooltipText(position, _adjustPosition) {\r\n //@todo number formatter + tag\r\n const dataItem = this.dataItems[this.axisPositionToIndex(position)];\r\n if (dataItem) {\r\n const label = dataItem.get(\"label\");\r\n if (label) {\r\n return populateString(label, this.get(\"tooltipText\", \"\"));\r\n }\r\n }\r\n }\r\n _updateTooltipText(tooltip, position) {\r\n tooltip._setDataItem(this.dataItems[this.axisPositionToIndex(position)]);\r\n tooltip.label.text.markDirtyText();\r\n }\r\n /**\r\n * Returns a data item from series that is closest to the `position`.\r\n *\r\n * @param series Series\r\n * @param position Relative position\r\n * @return Data item\r\n */\r\n getSeriesItem(series, position) {\r\n if (this.dataItems.length > 0) {\r\n let fieldName = (this.getPrivate(\"name\") + this.get(\"renderer\").getPrivate(\"letter\"));\r\n let index = this.axisPositionToIndex(position);\r\n // try simple first\r\n let seriesDataItem = series.dataItems[index];\r\n let axisDataItem = this.dataItems[index];\r\n let category = axisDataItem.get(\"category\");\r\n if (seriesDataItem && axisDataItem) {\r\n if (seriesDataItem.get(fieldName) === category) {\r\n return seriesDataItem;\r\n }\r\n }\r\n // if not found, try looking\r\n for (let i = 0, len = series.dataItems.length; i < len; i++) {\r\n let dataItem = series.dataItems[i];\r\n if (dataItem.get(fieldName) === category) {\r\n return dataItem;\r\n }\r\n }\r\n }\r\n }\r\n _getIndices(start, end) {\r\n let len = this.dataItems.length;\r\n let startIndex = 0;\r\n let endIndex = len;\r\n let name = \"cellSize\";\r\n if (this.get(\"cellSizeField\")) {\r\n let count = 0;\r\n const dataItems = this.dataItems;\r\n if (dataItems.length == 0) {\r\n return { startIndex: 0, endIndex: 0 };\r\n }\r\n $array.each(dataItems, (dataItem) => {\r\n count += dataItem.get(name, 1);\r\n });\r\n count -= this.get(\"startLocation\", 0) * dataItems[0].get(name, 1);\r\n count -= (1 - this.get(\"endLocation\", 1)) * dataItems[dataItems.length - 1].get(name, 1);\r\n let c = 0;\r\n for (let i = 0; i < len; i++) {\r\n c += this.dataItems[i].get(name, 1);\r\n if (Math.round(c) > Math.round(start * count)) {\r\n startIndex = i;\r\n break;\r\n }\r\n }\r\n for (let i = startIndex + 1; i < len; i++) {\r\n c += this.dataItems[i].get(name, 1);\r\n if (Math.round(c) >= Math.round(end * count)) {\r\n endIndex = i + 1;\r\n break;\r\n }\r\n }\r\n startIndex = Math.max(startIndex, 0);\r\n endIndex = Math.min(endIndex, len);\r\n }\r\n else {\r\n startIndex = Math.max(Math.round(this.get(\"start\", 0) * len), 0);\r\n endIndex = Math.min(Math.round(this.get(\"end\", 1) * len), len);\r\n }\r\n return { startIndex, endIndex };\r\n }\r\n /**\r\n * Zooms the axis to specific `start` and `end` indexes.\r\n *\r\n * Optional `duration` specifies duration of zoom animation in milliseconds.\r\n *\r\n * @param start Start index\r\n * @param end End index\r\n * @param duration Duration in milliseconds\r\n */\r\n zoomToIndexes(start, end, duration) {\r\n let len = this.dataItems.length;\r\n if (this.get(\"cellSizeField\")) {\r\n start = Math.min(Math.max(start, 0), len);\r\n end = Math.max(Math.min(end, len), 1);\r\n this.setPrivateRaw(\"startIndex\", start);\r\n this.setPrivateRaw(\"endIndex\", end);\r\n this.zoom(this.indexToPosition(start, 0, true), this.indexToPosition(end, 0, true), duration);\r\n }\r\n else {\r\n this.zoom(start / len, end / len, duration);\r\n }\r\n }\r\n zoomToCategories(startCategory, endCategory, duration) {\r\n this.zoomToIndexes(this.categoryToIndex(startCategory), this.categoryToIndex(endCategory) + 1, duration);\r\n }\r\n /**\r\n * Returns position span between start and end of a single cell in axis.\r\n *\r\n * @since 5.2.30\r\n * @return Position\r\n */\r\n getCellWidthPosition() {\r\n return this._frequency / this.dataItems.length / (this.get(\"end\", 1) - this.get(\"start\", 0));\r\n }\r\n /**\r\n * @ignore\r\n */\r\n nextPosition(count) {\r\n if (count == null) {\r\n count = 1;\r\n }\r\n if (this.get(\"renderer\").getPrivate(\"letter\") == \"Y\") {\r\n count *= -1;\r\n }\r\n const position = this.getPrivate(\"tooltipPosition\", 0);\r\n const index = $math.fitToRange(this.axisPositionToIndex(position) + count, 0, this.dataItems.length - 1);\r\n return this.toGlobalPosition(this.indexToPosition(index));\r\n }\r\n}\r\nCategoryAxis.className = \"CategoryAxis\";\r\nCategoryAxis.classNames = Axis.classNames.concat([CategoryAxis.className]);\r\n//# sourceMappingURL=CategoryAxis.js.map","import { Label } from \"../../../core/render/Label\";\r\n/**\r\n * Draws an axis label.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/axes/#Labels} for more info\r\n * @important\r\n */\r\nexport class AxisLabel extends Label {\r\n constructor() {\r\n super(...arguments);\r\n this._tickPoints = [];\r\n }\r\n}\r\nAxisLabel.className = \"AxisLabel\";\r\nAxisLabel.classNames = Label.classNames.concat([AxisLabel.className]);\r\n//# sourceMappingURL=AxisLabel.js.map","import { Text } from \"./Text\";\r\nimport * as $math from \"../util/Math\";\r\n/**\r\n * @ignore\r\n */\r\nexport class RadialText extends Text {\r\n constructor() {\r\n super(...arguments);\r\n this._display = this._root._renderer.makeRadialText(\"\", this.textStyle);\r\n }\r\n _afterNew() {\r\n super._afterNew();\r\n }\r\n _beforeChanged() {\r\n super._beforeChanged();\r\n this._display.clear();\r\n if (this.isDirty(\"textType\")) {\r\n this._display.textType = this.get(\"textType\");\r\n this.markDirtyBounds();\r\n }\r\n if (this.isDirty(\"radius\")) {\r\n this._display.radius = this.get(\"radius\");\r\n this.markDirtyBounds();\r\n }\r\n if (this.isDirty(\"startAngle\")) {\r\n this._display.startAngle = (this.get(\"startAngle\", 0) + 90) * $math.RADIANS;\r\n this.markDirtyBounds();\r\n }\r\n if (this.isDirty(\"inside\")) {\r\n this._display.inside = this.get(\"inside\");\r\n this.markDirtyBounds();\r\n }\r\n if (this.isDirty(\"orientation\")) {\r\n this._display.orientation = this.get(\"orientation\");\r\n this.markDirtyBounds();\r\n }\r\n if (this.isDirty(\"kerning\")) {\r\n this._display.kerning = this.get(\"kerning\");\r\n this.markDirtyBounds();\r\n }\r\n }\r\n}\r\nRadialText.className = \"RadialText\";\r\nRadialText.classNames = Text.classNames.concat([RadialText.className]);\r\n//# sourceMappingURL=RadialText.js.map","// import * as $object from \"../util/Object\";\r\nimport { p50, Percent } from \"../util/Percent\";\r\nimport { Label } from \"./Label\";\r\nimport { RadialText } from \"./RadialText\";\r\nimport * as $math from \"../util/Math\";\r\nimport * as $utils from \"../util/Utils\";\r\nexport class RadialLabel extends Label {\r\n constructor() {\r\n super(...arguments);\r\n this._flipped = false;\r\n }\r\n _afterNew() {\r\n this._textKeys.push(\"textType\", \"kerning\");\r\n super._afterNew();\r\n }\r\n _makeText() {\r\n this._text = this.children.push(RadialText.new(this._root, {}));\r\n }\r\n /**\r\n * Returns base radius in pixels.\r\n *\r\n * @return Base radius\r\n */\r\n baseRadius() {\r\n const radiusPrivate = this.getPrivate(\"radius\", 0);\r\n const innerRadiusPrivate = this.getPrivate(\"innerRadius\", 0);\r\n const baseRadius = this.get(\"baseRadius\", 0);\r\n return innerRadiusPrivate + $utils.relativeToValue(baseRadius, radiusPrivate - innerRadiusPrivate);\r\n }\r\n /**\r\n * Returns radius adjustment in pixels.\r\n *\r\n * @return Radius\r\n */\r\n radius() {\r\n const inside = this.get(\"inside\", false);\r\n return this.baseRadius() + this.get(\"radius\", 0) * (inside ? -1 : 1);\r\n }\r\n _updateChildren() {\r\n super._updateChildren();\r\n if (this.isDirty(\"baseRadius\") || this.isPrivateDirty(\"radius\") || this.isPrivateDirty(\"innerRadius\") || this.isDirty(\"labelAngle\") || this.isDirty(\"radius\") || this.isDirty(\"inside\") || this.isDirty(\"orientation\") || this.isDirty(\"textType\")) {\r\n const textType = this.get(\"textType\", \"adjusted\");\r\n const inside = this.get(\"inside\", false);\r\n const orientation = this.get(\"orientation\");\r\n let labelAngle = $math.normalizeAngle(this.get(\"labelAngle\", 0));\r\n this._text.set(\"startAngle\", this.get(\"labelAngle\", 0));\r\n this._text.set(\"inside\", inside);\r\n const sin = $math.sin(labelAngle);\r\n const cos = $math.cos(labelAngle);\r\n let baseRadius = this.baseRadius();\r\n let radius = this.radius();\r\n this._display.angle = 0;\r\n if (textType == \"circular\") {\r\n this.setAll({\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n paddingLeft: 0,\r\n paddingRight: 0\r\n });\r\n this.setRaw(\"x\", undefined);\r\n this.setRaw(\"y\", undefined);\r\n // Circular labels are handled and positioned differently\r\n this._text.set(\"orientation\", orientation);\r\n this._text.set(\"radius\", radius);\r\n }\r\n else {\r\n if (baseRadius == 0) {\r\n labelAngle = 0;\r\n radius = 0;\r\n }\r\n // Positioning of radial/regular labels are teh same\r\n let x = radius * cos;\r\n let y = radius * sin;\r\n if (textType == \"radial\") {\r\n this.setRaw(\"x\", x);\r\n this.setRaw(\"y\", y);\r\n if ((labelAngle < 90) || (labelAngle > 270) || orientation != \"auto\") {\r\n this._display.angle = labelAngle; // + 90;\r\n this._flipped = false;\r\n }\r\n else {\r\n this._display.angle = labelAngle + 180;\r\n this._flipped = true;\r\n }\r\n this._dirty.rotation = false;\r\n }\r\n else if (textType == \"adjusted\") {\r\n this.setRaw(\"centerX\", p50);\r\n this.setRaw(\"centerY\", p50);\r\n this.setRaw(\"x\", x);\r\n this.setRaw(\"y\", y);\r\n }\r\n else if (textType == \"regular\") {\r\n this.setRaw(\"x\", x);\r\n this.setRaw(\"y\", y);\r\n }\r\n }\r\n this.markDirtyPosition();\r\n this.markDirtyBounds();\r\n }\r\n }\r\n _updatePosition() {\r\n const textType = this.get(\"textType\", \"regular\");\r\n const inside = this.get(\"inside\", false);\r\n let dx = 0;\r\n let dy = 0;\r\n let labelAngle = this.get(\"labelAngle\", 0);\r\n let bounds = this.localBounds();\r\n let w = bounds.right - bounds.left;\r\n let h = bounds.bottom - bounds.top;\r\n if (textType == \"radial\") {\r\n if (this._flipped) {\r\n let centerX = this.get(\"centerX\");\r\n if (centerX instanceof Percent) {\r\n w = w * (1 - centerX.value * 2);\r\n }\r\n dx = w * $math.cos(labelAngle);\r\n dy = w * $math.sin(labelAngle);\r\n }\r\n }\r\n else if (!inside && textType == \"adjusted\") {\r\n dx = w / 2 * $math.cos(labelAngle);\r\n dy = h / 2 * $math.sin(labelAngle);\r\n }\r\n this.setRaw(\"dx\", dx);\r\n this.setRaw(\"dy\", dy);\r\n super._updatePosition();\r\n }\r\n /**\r\n * @ignore\r\n */\r\n get text() {\r\n return this._text;\r\n }\r\n}\r\nRadialLabel.className = \"RadialLabel\";\r\nRadialLabel.classNames = Label.classNames.concat([RadialLabel.className]);\r\n//# sourceMappingURL=RadialLabel.js.map","/** @ignore */ /** */\r\nimport * as $math from \"./Math\";\r\n/**\r\n * @ignore\r\n */\r\nexport function segmentedLine(display, segments) {\r\n for (let s = 0, len = segments.length; s < len; s++) {\r\n const groups = segments[s];\r\n if (groups.length > 0) {\r\n let firstGroup = groups[0];\r\n if (firstGroup.length > 0) {\r\n let firstPoint = firstGroup[0];\r\n display.moveTo(firstPoint.x, firstPoint.y);\r\n for (let g = 0, len = groups.length; g < len; g++) {\r\n line(display, groups[g]);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function line(display, points) {\r\n for (let p = 0, len = points.length; p < len; p++) {\r\n const point = points[p];\r\n display.lineTo(point.x, point.y);\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function moveTo(display, point) {\r\n display.moveTo(point.x, point.y);\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function clear(display) {\r\n display.clear();\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function smoothedSegmentedline(display, segments, tensionX, tensionY) {\r\n for (let s = 0, len = segments.length; s < len; s++) {\r\n const groups = segments[s];\r\n if (groups.length > 0) {\r\n let firstGroup = groups[0];\r\n if (firstGroup.length > 0) {\r\n let firstPoint = firstGroup[0];\r\n display.moveTo(firstPoint.x, firstPoint.y);\r\n for (let g = 0, len = groups.length; g < len; g++) {\r\n const points = groups[g];\r\n if (points.length > 0) {\r\n display.lineTo(points[0].x, points[0].y);\r\n }\r\n smoothedLine(display, points, tensionX, tensionY);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function smoothedLine(display, points, tensionX, tensionY) {\r\n for (let i = points.length - 1; i > 0; i--) {\r\n let p0 = points[i];\r\n let p1 = points[i - 1];\r\n if (Math.abs(p0.x - p1.x) < 0.1 && Math.abs(p0.y - p1.y) < 0.1) {\r\n points.splice(i - 1, 1);\r\n }\r\n }\r\n if (points.length < 3 || (tensionX >= 1 && tensionY >= 1)) {\r\n line(display, points);\r\n return;\r\n }\r\n tensionX = 1 - tensionX + 0.00001;\r\n tensionY = 1 - tensionY + 0.00001;\r\n let first = points[0];\r\n let last = points[points.length - 1];\r\n let closed = false;\r\n if ($math.round(first.x, 3) == $math.round(last.x) && $math.round(first.y) == $math.round(last.y)) {\r\n closed = true;\r\n }\r\n // Can't moveTo here, as it wont be possible to have fill then.\r\n let path = \"\";\r\n for (let i = 0, len = points.length - 1; i < len; i++) {\r\n let p0 = points[i - 1];\r\n let p1 = points[i];\r\n let p2 = points[i + 1];\r\n let p3 = points[i + 2];\r\n if (i === 0) {\r\n if (closed) {\r\n p0 = points[len - 2];\r\n }\r\n else {\r\n p0 = points[0];\r\n }\r\n }\r\n else if (i == len - 1) {\r\n if (closed) {\r\n p3 = points[1];\r\n }\r\n else {\r\n p3 = p2;\r\n }\r\n }\r\n let controlPointA = $math.getCubicControlPointA(p0, p1, p2, tensionX, tensionY);\r\n let controlPointB = $math.getCubicControlPointB(p1, p2, p3, tensionX, tensionY);\r\n display.bezierCurveTo(controlPointA.x, controlPointA.y, controlPointB.x, controlPointB.y, p2.x, p2.y);\r\n }\r\n return path;\r\n}\r\n//# sourceMappingURL=Draw.js.map","import { Graphics } from \"./Graphics\";\r\nimport * as $draw from \"../util/Draw\";\r\n/**\r\n * Draws a line.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/graphics/} for more info\r\n * @important\r\n */\r\nexport class Line extends Graphics {\r\n _beforeChanged() {\r\n super._beforeChanged();\r\n if (this.isDirty(\"points\") || this.isDirty(\"segments\") || this._sizeDirty || this.isPrivateDirty(\"width\") || this.isPrivateDirty(\"height\")) {\r\n this._clear = true;\r\n }\r\n }\r\n _changed() {\r\n super._changed();\r\n if (this._clear) {\r\n const points = this.get(\"points\");\r\n const segments = this.get(\"segments\");\r\n if (points && points.length > 0) {\r\n let point = points[0];\r\n this._display.moveTo(point.x, point.y);\r\n $draw.segmentedLine(this._display, [[points]]);\r\n }\r\n else if (segments) {\r\n $draw.segmentedLine(this._display, segments);\r\n }\r\n else if (!this.get(\"draw\")) {\r\n let w = this.width();\r\n let h = this.height();\r\n this._display.moveTo(0, 0);\r\n this._display.lineTo(w, h);\r\n }\r\n }\r\n }\r\n}\r\nLine.className = \"Line\";\r\nLine.classNames = Graphics.classNames.concat([Line.className]);\r\n//# sourceMappingURL=Line.js.map","import { Line } from \"./Line\";\r\n/**\r\n * Draws a tick element (mostly used on axes).\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/graphics/} for more info\r\n */\r\nexport class Tick extends Line {\r\n}\r\nTick.className = \"Tick\";\r\nTick.classNames = Line.classNames.concat([Tick.className]);\r\n//# sourceMappingURL=Tick.js.map","import { Tick } from \"../../../core/render/Tick\";\r\n/**\r\n * Draws an axis tick.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/axes/#Ticks} for more info\r\n * @important\r\n */\r\nexport class AxisTick extends Tick {\r\n constructor() {\r\n super(...arguments);\r\n this._tickPoints = [];\r\n }\r\n}\r\nAxisTick.className = \"AxisTick\";\r\nAxisTick.classNames = Tick.classNames.concat([AxisTick.className]);\r\n//# sourceMappingURL=AxisTick.js.map","import { Graphics } from \"../../../core/render/Graphics\";\r\nimport { Template } from \"../../../core/util/Template\";\r\nimport { ListTemplate } from \"../../../core/util/List\";\r\nimport { AxisTick } from \"./AxisTick\";\r\nimport { Grid } from \"./Grid\";\r\nimport { AxisLabel } from \"./AxisLabel\";\r\nimport * as $utils from \"../../../core/util/Utils\";\r\n/**\r\n * Base class for an axis renderer.\r\n *\r\n * Should not be used on its own.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/#Axis_renderer} for more info\r\n */\r\nexport class AxisRenderer extends Graphics {\r\n constructor() {\r\n super(...arguments);\r\n // save for quick access\r\n this._axisLength = 100;\r\n this._start = 0;\r\n this._end = 1;\r\n this._inversed = false;\r\n this._minSize = 0;\r\n this._lc = 1;\r\n this._ls = 0;\r\n /**\r\n * A list of ticks in the axis.\r\n *\r\n * `ticks.template` can be used to configure ticks.\r\n *\r\n * @default new ListTemplate<AxisTick>\r\n */\r\n this.ticks = this.addDisposer(new ListTemplate(Template.new({}), () => AxisTick._new(this._root, {\r\n themeTags: $utils.mergeTags(this.ticks.template.get(\"themeTags\", []), this.get(\"themeTags\", []))\r\n }, [this.ticks.template])));\r\n /**\r\n * A list of grid elements in the axis.\r\n *\r\n * `grid.template` can be used to configure grid.\r\n *\r\n * @default new ListTemplate<Grid>\r\n */\r\n this.grid = this.addDisposer(new ListTemplate(Template.new({}), () => Grid._new(this._root, {\r\n themeTags: $utils.mergeTags(this.grid.template.get(\"themeTags\", []), this.get(\"themeTags\", []))\r\n }, [this.grid.template])));\r\n /**\r\n * A list of fills in the axis.\r\n *\r\n * `axisFills.template` can be used to configure axis fills.\r\n *\r\n * @default new ListTemplate<Graphics>\r\n */\r\n this.axisFills = this.addDisposer(new ListTemplate(Template.new({}), () => Graphics._new(this._root, {\r\n themeTags: $utils.mergeTags(this.axisFills.template.get(\"themeTags\", [\"axis\", \"fill\"]), this.get(\"themeTags\", []))\r\n }, [this.axisFills.template])));\r\n /**\r\n * A list of labels in the axis.\r\n *\r\n * `labels.template` can be used to configure axis labels.\r\n *\r\n * @default new ListTemplate<AxisLabel>\r\n */\r\n this.labels = this.addDisposer(new ListTemplate(Template.new({}), () => AxisLabel._new(this._root, {\r\n themeTags: $utils.mergeTags(this.labels.template.get(\"themeTags\", []), this.get(\"themeTags\", []))\r\n }, [this.labels.template])));\r\n }\r\n /**\r\n * @ignore\r\n */\r\n makeTick(dataItem, themeTags) {\r\n const tick = this.ticks.make();\r\n tick._setDataItem(dataItem);\r\n dataItem.setRaw(\"tick\", tick);\r\n tick.set(\"themeTags\", $utils.mergeTags(tick.get(\"themeTags\"), themeTags));\r\n this.axis.labelsContainer.children.push(tick);\r\n this.ticks.push(tick);\r\n return tick;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n makeGrid(dataItem, themeTags) {\r\n const grid = this.grid.make();\r\n grid._setDataItem(dataItem);\r\n dataItem.setRaw(\"grid\", grid);\r\n grid.set(\"themeTags\", $utils.mergeTags(grid.get(\"themeTags\"), themeTags));\r\n this.axis.gridContainer.children.push(grid);\r\n this.grid.push(grid);\r\n return grid;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n makeAxisFill(dataItem, themeTags) {\r\n const axisFill = this.axisFills.make();\r\n axisFill._setDataItem(dataItem);\r\n axisFill.set(\"themeTags\", $utils.mergeTags(axisFill.get(\"themeTags\"), themeTags));\r\n this.axis.gridContainer.children.push(axisFill);\r\n dataItem.setRaw(\"axisFill\", axisFill);\r\n this.axisFills.push(axisFill);\r\n return axisFill;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n makeLabel(dataItem, themeTags) {\r\n const label = this.labels.make();\r\n label.set(\"themeTags\", $utils.mergeTags(label.get(\"themeTags\"), themeTags));\r\n if (dataItem.get(\"isRange\")) {\r\n this.axis.labelsContainer.children.push(label);\r\n }\r\n else {\r\n this.axis.labelsContainer.children.moveValue(label, 0);\r\n }\r\n label._setDataItem(dataItem);\r\n dataItem.setRaw(\"label\", label);\r\n this.labels.push(label);\r\n return label;\r\n }\r\n axisLength() {\r\n return 0;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n gridCount() {\r\n return this.axisLength() / this.get(\"minGridDistance\", 50);\r\n }\r\n _updatePositions() {\r\n }\r\n _afterNew() {\r\n super._afterNew();\r\n this.set(\"isMeasured\", false);\r\n const thumb = this.thumb;\r\n if (thumb) {\r\n this._disposers.push(thumb.events.on(\"pointerdown\", (event) => {\r\n this._handleThumbDown(event);\r\n }));\r\n this._disposers.push(thumb.events.on(\"globalpointerup\", (event) => {\r\n this._handleThumbUp(event);\r\n }));\r\n this._disposers.push(thumb.events.on(\"globalpointermove\", (event) => {\r\n this._handleThumbMove(event);\r\n }));\r\n }\r\n }\r\n _beforeChanged() {\r\n super._beforeChanged();\r\n if (this.isDirty(\"minGridDistance\")) {\r\n this.root.events.once(\"frameended\", () => {\r\n this.axis.markDirtySize();\r\n });\r\n }\r\n }\r\n _changed() {\r\n super._changed();\r\n if (this.isDirty(\"pan\")) {\r\n const thumb = this.thumb;\r\n if (thumb) {\r\n const labelsContainer = this.axis.labelsContainer;\r\n const pan = this.get(\"pan\");\r\n if (pan == \"zoom\") {\r\n labelsContainer.children.push(thumb);\r\n }\r\n else if (pan == \"none\") {\r\n labelsContainer.children.removeValue(thumb);\r\n }\r\n }\r\n }\r\n }\r\n _handleThumbDown(event) {\r\n this._thumbDownPoint = this.toLocal(event.point);\r\n const axis = this.axis;\r\n this._downStart = axis.get(\"start\");\r\n this._downEnd = axis.get(\"end\");\r\n }\r\n _handleThumbUp(_event) {\r\n this._thumbDownPoint = undefined;\r\n }\r\n _handleThumbMove(event) {\r\n const downPoint = this._thumbDownPoint;\r\n if (downPoint) {\r\n const point = this.toLocal(event.point);\r\n const downStart = this._downStart;\r\n const downEnd = this._downEnd;\r\n const extra = this._getPan(point, downPoint) * Math.min(1, (downEnd - downStart)) / 2 * this.get(\"panSensitivity\", 1);\r\n this.axis.zoom(downStart - extra, downEnd + extra, 0);\r\n }\r\n }\r\n _getPan(_point1, _point2) {\r\n return 0;\r\n }\r\n /**\r\n * Converts relative position (0-1) on axis to a pixel coordinate.\r\n *\r\n * @param position Position (0-1)\r\n * @return Coordinate (px)\r\n */\r\n positionToCoordinate(position) {\r\n if (this._inversed) {\r\n return (this._end - position) * this._axisLength;\r\n }\r\n else {\r\n return (position - this._start) * this._axisLength;\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n updateTooltipBounds(_tooltip) { }\r\n _updateSize() {\r\n this.markDirty();\r\n this._clear = true;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n toAxisPosition(position) {\r\n const start = this._start || 0;\r\n const end = this._end || 1;\r\n position = position * (end - start);\r\n if (!this.get(\"inversed\")) {\r\n position = start + position;\r\n }\r\n else {\r\n position = end - position;\r\n }\r\n return position;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n toGlobalPosition(position) {\r\n const start = this._start || 0;\r\n const end = this._end || 1;\r\n if (!this.get(\"inversed\")) {\r\n position = position - start;\r\n }\r\n else {\r\n position = end - position;\r\n }\r\n position = position / (end - start);\r\n return position;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n fixPosition(position) {\r\n if (this.get(\"inversed\")) {\r\n return 1 - position;\r\n }\r\n return position;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n _updateLC() {\r\n }\r\n toggleVisibility(sprite, position, minPosition, maxPosition) {\r\n let axis = this.axis;\r\n const start = axis.get(\"start\", 0);\r\n const end = axis.get(\"end\", 1);\r\n let updatedStart = start + (end - start) * (minPosition - 0.0001);\r\n let updatedEnd = start + (end - start) * (maxPosition + 0.0001);\r\n if (position < updatedStart || position > updatedEnd) {\r\n sprite.setPrivate(\"visible\", false);\r\n }\r\n else {\r\n sprite.setPrivate(\"visible\", true);\r\n }\r\n }\r\n _positionTooltip(tooltip, point) {\r\n const chart = this.chart;\r\n if (chart) {\r\n tooltip.set(\"pointTo\", this._display.toGlobal(point));\r\n if (!chart.inPlot(point)) {\r\n tooltip.hide();\r\n }\r\n }\r\n }\r\n processAxis() { }\r\n}\r\nAxisRenderer.className = \"AxisRenderer\";\r\nAxisRenderer.classNames = Graphics.classNames.concat([AxisRenderer.className]);\r\n//# sourceMappingURL=AxisRenderer.js.map","import { AxisRenderer } from \"./AxisRenderer\";\r\nimport { p100 } from \"../../../core/util/Percent\";\r\nimport { Rectangle } from \"../../../core/render/Rectangle\";\r\nimport * as $type from \"../../../core/util/Type\";\r\nimport * as $utils from \"../../../core/util/Utils\";\r\n/**\r\n * Used to render horizontal axis.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/#Axis_renderer} for more info\r\n * @important\r\n */\r\nexport class AxisRendererX extends AxisRenderer {\r\n constructor() {\r\n super(...arguments);\r\n this.thumb = Rectangle.new(this._root, { width: p100, isMeasured: false, themeTags: [\"axis\", \"x\", \"thumb\", \"zoomgrip\"] });\r\n }\r\n _afterNew() {\r\n this._settings.themeTags = $utils.mergeTags(this._settings.themeTags, [\"renderer\", \"x\"]);\r\n super._afterNew();\r\n this.setPrivateRaw(\"letter\", \"X\");\r\n const gridTemplate = this.grid.template;\r\n gridTemplate.set(\"height\", p100);\r\n gridTemplate.set(\"width\", 0);\r\n gridTemplate.set(\"draw\", (display, graphics) => {\r\n display.moveTo(0, 0);\r\n display.lineTo(0, graphics.height());\r\n });\r\n this.set(\"draw\", (display, graphics) => {\r\n display.moveTo(0, 0);\r\n display.lineTo(graphics.width(), 0);\r\n });\r\n }\r\n _changed() {\r\n var _a;\r\n super._changed();\r\n const axis = this.axis;\r\n const ghostLabel = axis.ghostLabel;\r\n if (ghostLabel) {\r\n ghostLabel.setPrivate(\"visible\", !this.get(\"inside\"));\r\n ghostLabel.set(\"x\", -1000);\r\n }\r\n const opposite = \"opposite\";\r\n const inside = \"inside\";\r\n if (this.isDirty(opposite) || this.isDirty(inside)) {\r\n const chart = this.chart;\r\n const axisChildren = axis.children;\r\n if (this.get(inside)) {\r\n axis.addTag(inside);\r\n }\r\n else {\r\n axis.removeTag(inside);\r\n }\r\n if (chart) {\r\n if (this.get(opposite)) {\r\n const children = chart.topAxesContainer.children;\r\n if (children.indexOf(axis) == -1) {\r\n children.insertIndex(0, axis);\r\n }\r\n axis.addTag(opposite);\r\n axisChildren.moveValue(this);\r\n }\r\n else {\r\n const children = chart.bottomAxesContainer.children;\r\n if (children.indexOf(axis) == -1) {\r\n children.moveValue(axis);\r\n }\r\n axis.removeTag(opposite);\r\n axisChildren.moveValue(this, 0);\r\n }\r\n (_a = axis.ghostLabel) === null || _a === void 0 ? void 0 : _a._applyThemes();\r\n this.labels.each((label) => {\r\n label._applyThemes();\r\n });\r\n this.root._markDirtyRedraw();\r\n }\r\n axis.markDirtySize();\r\n }\r\n this.thumb.setPrivate(\"height\", axis.labelsContainer.height());\r\n }\r\n _getPan(point1, point2) {\r\n return (point2.x - point1.x) / this.width();\r\n }\r\n /**\r\n * @ignore\r\n */\r\n toAxisPosition(position) {\r\n const start = this._start || 0;\r\n const end = this._end || 1;\r\n position -= this._ls;\r\n position = position * (end - start) / this._lc;\r\n if (!this.get(\"inversed\")) {\r\n position = start + position;\r\n }\r\n else {\r\n position = end - position;\r\n }\r\n return position;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n toGlobalPosition(position) {\r\n const start = this._start || 0;\r\n const end = this._end || 1;\r\n if (!this.get(\"inversed\")) {\r\n position = position - start;\r\n }\r\n else {\r\n position = end - position;\r\n }\r\n position = position / (end - start) * this._lc;\r\n position += this._ls;\r\n return position;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n _updateLC() {\r\n const axis = this.axis;\r\n const parent = axis.parent;\r\n if (parent) {\r\n const w = parent.innerWidth();\r\n this._lc = this.axisLength() / w;\r\n this._ls = (axis.x() - parent.get(\"paddingLeft\", 0)) / w;\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n _updatePositions() {\r\n const axis = this.axis;\r\n const x = axis.x() - $utils.relativeToValue(axis.get(\"centerX\", 0), axis.width()) - axis.parent.get(\"paddingLeft\", 0);\r\n axis.gridContainer.set(\"x\", x);\r\n axis.topGridContainer.set(\"x\", x);\r\n axis.bulletsContainer.set(\"y\", this.y());\r\n const chart = axis.chart;\r\n if (chart) {\r\n const plotContainer = chart.plotContainer;\r\n const axisHeader = axis.axisHeader;\r\n let width = axis.get(\"marginLeft\", 0);\r\n let x = axis.x() - width;\r\n const parent = axis.parent;\r\n if (parent) {\r\n x -= parent.get(\"paddingLeft\", 0);\r\n }\r\n if (axisHeader.children.length > 0) {\r\n width = axis.axisHeader.width();\r\n axis.set(\"marginLeft\", width + 1);\r\n }\r\n else {\r\n axisHeader.set(\"width\", width);\r\n }\r\n axisHeader.setAll({ x: x, y: -1, height: plotContainer.height() + 2 });\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n processAxis() {\r\n super.processAxis();\r\n const axis = this.axis;\r\n if (axis.get(\"width\") == null) {\r\n axis.set(\"width\", p100);\r\n }\r\n ;\r\n const verticalLayout = this._root.verticalLayout;\r\n axis.set(\"layout\", verticalLayout);\r\n axis.labelsContainer.set(\"width\", p100);\r\n axis.axisHeader.setAll({ layout: verticalLayout });\r\n }\r\n /**\r\n * @ignore\r\n */\r\n axisLength() {\r\n return this.axis.width();\r\n }\r\n /**\r\n * Converts axis relative position to actual coordinate in pixels.\r\n *\r\n * @param position Position\r\n * @return Point\r\n */\r\n positionToPoint(position) {\r\n return { x: this.positionToCoordinate(position), y: 0 };\r\n }\r\n /**\r\n * @ignore\r\n */\r\n updateTick(tick, position, endPosition, count) {\r\n if (tick) {\r\n if (!$type.isNumber(position)) {\r\n position = 0;\r\n }\r\n let location = 0.5;\r\n if ($type.isNumber(count) && count > 1) {\r\n location = tick.get(\"multiLocation\", location);\r\n }\r\n else {\r\n location = tick.get(\"location\", location);\r\n }\r\n if ($type.isNumber(endPosition) && endPosition != position) {\r\n position = position + (endPosition - position) * location;\r\n }\r\n tick.set(\"x\", this.positionToCoordinate(position));\r\n let length = tick.get(\"length\", 0);\r\n const inside = tick.get(\"inside\", this.get(\"inside\", false));\r\n if (this.get(\"opposite\")) {\r\n tick.set(\"y\", p100);\r\n if (!inside) {\r\n length *= -1;\r\n }\r\n }\r\n else {\r\n tick.set(\"y\", 0);\r\n if (inside) {\r\n length *= -1;\r\n }\r\n }\r\n tick.set(\"draw\", (display) => {\r\n display.moveTo(0, 0);\r\n display.lineTo(0, length);\r\n });\r\n this.toggleVisibility(tick, position, tick.get(\"minPosition\", 0), tick.get(\"maxPosition\", 1));\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n updateLabel(label, position, endPosition, count) {\r\n if (label) {\r\n let location = 0.5;\r\n if ($type.isNumber(count) && count > 1) {\r\n location = label.get(\"multiLocation\", location);\r\n }\r\n else {\r\n location = label.get(\"location\", location);\r\n }\r\n if (!$type.isNumber(position)) {\r\n position = 0;\r\n }\r\n const inside = label.get(\"inside\", this.get(\"inside\", false));\r\n const opposite = this.get(\"opposite\");\r\n if (opposite) {\r\n if (!inside) {\r\n label.set(\"position\", \"relative\");\r\n label.set(\"y\", p100);\r\n }\r\n else {\r\n label.set(\"position\", \"absolute\");\r\n label.set(\"y\", 0);\r\n }\r\n }\r\n else {\r\n if (!inside) {\r\n label.set(\"y\", undefined);\r\n label.set(\"position\", \"relative\");\r\n }\r\n else {\r\n label.set(\"y\", 0);\r\n label.set(\"position\", \"absolute\");\r\n }\r\n }\r\n if ($type.isNumber(endPosition) && endPosition != position) {\r\n position = position + (endPosition - position) * location;\r\n }\r\n label.set(\"x\", this.positionToCoordinate(position));\r\n this.toggleVisibility(label, position, label.get(\"minPosition\", 0), label.get(\"maxPosition\", 1));\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n updateGrid(grid, position, endPosition) {\r\n if (grid) {\r\n if (!$type.isNumber(position)) {\r\n position = 0;\r\n }\r\n let location = grid.get(\"location\", 0.5);\r\n if ($type.isNumber(endPosition) && endPosition != position) {\r\n position = position + (endPosition - position) * location;\r\n }\r\n grid.set(\"x\", this.positionToCoordinate(position));\r\n this.toggleVisibility(grid, position, 0, 1);\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n updateBullet(bullet, position, endPosition) {\r\n if (bullet) {\r\n const sprite = bullet.get(\"sprite\");\r\n if (sprite) {\r\n if (!$type.isNumber(position)) {\r\n position = 0;\r\n }\r\n let location = bullet.get(\"location\", 0.5);\r\n if ($type.isNumber(endPosition) && endPosition != position) {\r\n position = position + (endPosition - position) * location;\r\n }\r\n let bulletPosition = this.axis.roundAxisPosition(position, location);\r\n let previousBullet = this.axis._bullets[bulletPosition];\r\n let d = -1;\r\n if (this.get(\"opposite\")) {\r\n d = 1;\r\n }\r\n if (bullet.get(\"stacked\")) {\r\n if (previousBullet) {\r\n let previousSprite = previousBullet.get(\"sprite\");\r\n if (previousSprite) {\r\n sprite.set(\"y\", previousSprite.y() + previousSprite.height() * d);\r\n }\r\n }\r\n else {\r\n sprite.set(\"y\", 0);\r\n }\r\n }\r\n this.axis._bullets[bulletPosition] = bullet;\r\n sprite.set(\"x\", this.positionToCoordinate(position));\r\n this.toggleVisibility(sprite, position, 0, 1);\r\n }\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n updateFill(fill, position, endPosition) {\r\n if (fill) {\r\n if (!$type.isNumber(position)) {\r\n position = 0;\r\n }\r\n if (!$type.isNumber(endPosition)) {\r\n endPosition = 1;\r\n }\r\n let x0 = this.positionToCoordinate(position);\r\n let x1 = this.positionToCoordinate(endPosition);\r\n this.fillDrawMethod(fill, x0, x1);\r\n }\r\n }\r\n fillDrawMethod(fill, x0, x1) {\r\n fill.set(\"draw\", (display) => {\r\n //display.drawRect(x0, 0, x1 - x0, this.axis!.gridContainer.height());\r\n // using for holes, so can not be rectangle\r\n const h = this.axis.gridContainer.height();\r\n const w = this.width();\r\n if (x1 < x0) {\r\n [x1, x0] = [x0, x1];\r\n }\r\n if (x0 > w || x1 < 0) {\r\n return;\r\n }\r\n /*\r\n const limit = 10000;\r\n\r\n x0 = Math.max(-limit, x0);\r\n x1 = Math.min(limit, x1);\r\n */\r\n display.moveTo(x0, 0);\r\n display.lineTo(x1, 0);\r\n display.lineTo(x1, h);\r\n display.lineTo(x0, h);\r\n display.lineTo(x0, 0);\r\n });\r\n }\r\n /**\r\n * @ignore\r\n */\r\n positionTooltip(tooltip, position) {\r\n this._positionTooltip(tooltip, { x: this.positionToCoordinate(position), y: 0 });\r\n }\r\n /**\r\n * @ignore\r\n */\r\n updateTooltipBounds(tooltip) {\r\n const inside = this.get(\"inside\");\r\n const num = 100000;\r\n let global = this._display.toGlobal({ x: 0, y: 0 });\r\n let x = global.x;\r\n let y = 0;\r\n let w = this.axisLength();\r\n let h = num;\r\n let pointerOrientation = \"up\";\r\n if (this.get(\"opposite\")) {\r\n if (inside) {\r\n pointerOrientation = \"up\";\r\n y = global.y;\r\n h = num;\r\n }\r\n else {\r\n pointerOrientation = \"down\";\r\n y = global.y - num;\r\n h = num;\r\n }\r\n }\r\n else {\r\n if (inside) {\r\n pointerOrientation = \"down\";\r\n y = global.y - num;\r\n h = num;\r\n }\r\n else {\r\n pointerOrientation = \"up\";\r\n y = global.y;\r\n h = num;\r\n }\r\n }\r\n const bounds = { left: x, right: x + w, top: y, bottom: y + h };\r\n const oldBounds = tooltip.get(\"bounds\");\r\n if (!$utils.sameBounds(bounds, oldBounds)) {\r\n tooltip.set(\"bounds\", bounds);\r\n tooltip.set(\"pointerOrientation\", pointerOrientation);\r\n }\r\n }\r\n}\r\nAxisRendererX.className = \"AxisRendererX\";\r\nAxisRendererX.classNames = AxisRenderer.classNames.concat([AxisRendererX.className]);\r\n//# sourceMappingURL=AxisRendererX.js.map","import { AxisRenderer } from \"./AxisRenderer\";\r\nimport { p100 } from \"../../../core/util/Percent\";\r\nimport { Rectangle } from \"../../../core/render/Rectangle\";\r\nimport * as $type from \"../../../core/util/Type\";\r\nimport * as $utils from \"../../../core/util/Utils\";\r\n/**\r\n * Used to render vertical axis.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/#Axis_renderer} for more info\r\n * @important\r\n */\r\nexport class AxisRendererY extends AxisRenderer {\r\n constructor() {\r\n super(...arguments);\r\n this.thumb = Rectangle.new(this._root, { height: p100, isMeasured: false, themeTags: [\"axis\", \"y\", \"thumb\", \"zoomgrip\"] });\r\n }\r\n _afterNew() {\r\n this._settings.themeTags = $utils.mergeTags(this._settings.themeTags, [\"renderer\", \"y\"]);\r\n if (this._settings.opposite) {\r\n this._settings.themeTags.push(\"opposite\");\r\n }\r\n super._afterNew();\r\n this.setPrivateRaw(\"letter\", \"Y\");\r\n const gridTemplate = this.grid.template;\r\n gridTemplate.set(\"width\", p100);\r\n gridTemplate.set(\"height\", 0);\r\n gridTemplate.set(\"draw\", (display, graphics) => {\r\n display.moveTo(0, 0);\r\n display.lineTo(graphics.width(), 0);\r\n });\r\n this.set(\"draw\", (display, renderer) => {\r\n display.moveTo(0, 0);\r\n display.lineTo(0, renderer.height());\r\n });\r\n }\r\n _getPan(point1, point2) {\r\n return (point1.y - point2.y) / this.height();\r\n }\r\n _changed() {\r\n var _a;\r\n super._changed();\r\n const axis = this.axis;\r\n const ghostLabel = axis.ghostLabel;\r\n if (ghostLabel) {\r\n ghostLabel.setPrivate(\"visible\", !this.get(\"inside\"));\r\n ghostLabel.set(\"y\", -1000);\r\n }\r\n const thumb = this.thumb;\r\n const opposite = \"opposite\";\r\n const inside = \"inside\";\r\n const chart = this.chart;\r\n if (this.isDirty(opposite) || this.isDirty(inside)) {\r\n const axisChildren = axis.children;\r\n if (this.get(inside)) {\r\n axis.addTag(inside);\r\n }\r\n else {\r\n axis.removeTag(inside);\r\n }\r\n if (chart) {\r\n if (this.get(opposite)) {\r\n const children = chart.rightAxesContainer.children;\r\n if (children.indexOf(axis) == -1) {\r\n children.moveValue(axis, 0);\r\n }\r\n axis.addTag(opposite);\r\n axisChildren.moveValue(this, 0);\r\n }\r\n else {\r\n const children = chart.leftAxesContainer.children;\r\n if (children.indexOf(axis) == -1) {\r\n children.moveValue(axis);\r\n }\r\n axis.removeTag(opposite);\r\n axisChildren.moveValue(this);\r\n }\r\n (_a = axis.ghostLabel) === null || _a === void 0 ? void 0 : _a._applyThemes();\r\n this.labels.each((label) => {\r\n label._applyThemes();\r\n });\r\n this.root._markDirtyRedraw();\r\n }\r\n axis.markDirtySize();\r\n }\r\n const w = axis.labelsContainer.width();\r\n if (chart) {\r\n if (this.get(opposite)) {\r\n thumb.set(\"centerX\", 0);\r\n }\r\n else {\r\n thumb.set(\"centerX\", w);\r\n }\r\n }\r\n thumb.setPrivate(\"width\", w);\r\n }\r\n /**\r\n * @ignore\r\n */\r\n processAxis() {\r\n super.processAxis();\r\n const axis = this.axis;\r\n if (axis.get(\"height\") == null) {\r\n axis.set(\"height\", p100);\r\n }\r\n const horizontalLayout = this._root.horizontalLayout;\r\n axis.set(\"layout\", horizontalLayout);\r\n axis.labelsContainer.set(\"height\", p100);\r\n axis.axisHeader.set(\"layout\", horizontalLayout);\r\n }\r\n _updatePositions() {\r\n const axis = this.axis;\r\n const y = axis.y() - $utils.relativeToValue(axis.get(\"centerY\", 0), axis.height());\r\n axis.gridContainer.set(\"y\", y);\r\n axis.topGridContainer.set(\"y\", y);\r\n axis.bulletsContainer.set(\"x\", this.x());\r\n const chart = axis.chart;\r\n if (chart) {\r\n const plotContainer = chart.plotContainer;\r\n const axisHeader = axis.axisHeader;\r\n let height = axis.get(\"marginTop\", 0);\r\n if (axisHeader.children.length > 0) {\r\n height = axis.axisHeader.height();\r\n axis.set(\"marginTop\", height + 1);\r\n }\r\n else {\r\n axisHeader.set(\"height\", height);\r\n }\r\n axisHeader.setAll({ y: axis.y() - height, x: -1, width: plotContainer.width() + 2 });\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n axisLength() {\r\n return this.axis.innerHeight();\r\n }\r\n /**\r\n * Converts axis relative position to actual coordinate in pixels.\r\n *\r\n * @param position Position\r\n * @return Point\r\n */\r\n positionToPoint(position) {\r\n return { x: 0, y: this.positionToCoordinate(position) };\r\n }\r\n /**\r\n * @ignore\r\n */\r\n updateLabel(label, position, endPosition, count) {\r\n if (label) {\r\n if (!$type.isNumber(position)) {\r\n position = 0;\r\n }\r\n let location = 0.5;\r\n if ($type.isNumber(count) && count > 1) {\r\n location = label.get(\"multiLocation\", location);\r\n }\r\n else {\r\n location = label.get(\"location\", location);\r\n }\r\n const opposite = this.get(\"opposite\");\r\n const inside = label.get(\"inside\", this.get(\"inside\", false));\r\n if (opposite) {\r\n label.set(\"x\", 0);\r\n if (inside) {\r\n label.set(\"position\", \"absolute\");\r\n }\r\n else {\r\n label.set(\"position\", \"relative\");\r\n }\r\n }\r\n else {\r\n if (inside) {\r\n label.set(\"x\", 0);\r\n label.set(\"position\", \"absolute\");\r\n }\r\n else {\r\n label.set(\"x\", undefined);\r\n label.set(\"position\", \"relative\");\r\n }\r\n }\r\n if ($type.isNumber(endPosition) && endPosition != position) {\r\n position = position + (endPosition - position) * location;\r\n }\r\n label.set(\"y\", this.positionToCoordinate(position));\r\n this.toggleVisibility(label, position, label.get(\"minPosition\", 0), label.get(\"maxPosition\", 1));\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n updateGrid(grid, position, endPosition) {\r\n if (grid) {\r\n if (!$type.isNumber(position)) {\r\n position = 0;\r\n }\r\n let location = grid.get(\"location\", 0.5);\r\n if ($type.isNumber(endPosition) && endPosition != position) {\r\n position = position + (endPosition - position) * location;\r\n }\r\n grid.set(\"y\", this.positionToCoordinate(position));\r\n this.toggleVisibility(grid, position, 0, 1);\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n updateTick(tick, position, endPosition, count) {\r\n if (tick) {\r\n if (!$type.isNumber(position)) {\r\n position = 0;\r\n }\r\n let location = 0.5;\r\n if ($type.isNumber(count) && count > 1) {\r\n location = tick.get(\"multiLocation\", location);\r\n }\r\n else {\r\n location = tick.get(\"location\", location);\r\n }\r\n if ($type.isNumber(endPosition) && endPosition != position) {\r\n position = position + (endPosition - position) * location;\r\n }\r\n tick.set(\"y\", this.positionToCoordinate(position));\r\n let length = tick.get(\"length\", 0);\r\n const inside = tick.get(\"inside\", this.get(\"inside\", false));\r\n if (this.get(\"opposite\")) {\r\n tick.set(\"x\", 0);\r\n if (inside) {\r\n length *= -1;\r\n }\r\n }\r\n else {\r\n if (!inside) {\r\n length *= -1;\r\n }\r\n }\r\n tick.set(\"draw\", (display) => {\r\n display.moveTo(0, 0);\r\n display.lineTo(length, 0);\r\n });\r\n this.toggleVisibility(tick, position, tick.get(\"minPosition\", 0), tick.get(\"maxPosition\", 1));\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n updateBullet(bullet, position, endPosition) {\r\n if (bullet) {\r\n const sprite = bullet.get(\"sprite\");\r\n if (sprite) {\r\n if (!$type.isNumber(position)) {\r\n position = 0;\r\n }\r\n let location = bullet.get(\"location\", 0.5);\r\n if ($type.isNumber(endPosition) && endPosition != position) {\r\n position = position + (endPosition - position) * location;\r\n }\r\n let bulletPosition = this.axis.roundAxisPosition(position, location);\r\n let previousBullet = this.axis._bullets[bulletPosition];\r\n let d = 1;\r\n if (this.get(\"opposite\")) {\r\n d = -1;\r\n }\r\n if (bullet.get(\"stacked\")) {\r\n if (previousBullet) {\r\n let previousSprite = previousBullet.get(\"sprite\");\r\n if (previousSprite) {\r\n sprite.set(\"x\", previousSprite.x() + previousSprite.width() * d);\r\n }\r\n }\r\n else {\r\n sprite.set(\"x\", 0);\r\n }\r\n }\r\n this.axis._bullets[bulletPosition] = bullet;\r\n sprite.set(\"y\", this.positionToCoordinate(position));\r\n this.toggleVisibility(sprite, position, 0, 1);\r\n }\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n updateFill(fill, position, endPosition) {\r\n if (fill) {\r\n if (!$type.isNumber(position)) {\r\n position = 0;\r\n }\r\n if (!$type.isNumber(endPosition)) {\r\n endPosition = 1;\r\n }\r\n let y0 = this.positionToCoordinate(position);\r\n let y1 = this.positionToCoordinate(endPosition);\r\n this.fillDrawMethod(fill, y0, y1);\r\n }\r\n }\r\n fillDrawMethod(fill, y0, y1) {\r\n fill.set(\"draw\", (display) => {\r\n // using for holes, so can not be rectangle\r\n const w = this.axis.gridContainer.width();\r\n const h = this.height();\r\n if (y1 < y0) {\r\n [y1, y0] = [y0, y1];\r\n }\r\n if (y0 > h || y1 < 0) {\r\n return;\r\n }\r\n //y0 = Math.max(0, y0);\r\n //y1 = Math.min(h, y1);\r\n display.moveTo(0, y0);\r\n display.lineTo(w, y0);\r\n display.lineTo(w, y1);\r\n display.lineTo(0, y1);\r\n display.lineTo(0, y0);\r\n });\r\n }\r\n /**\r\n * Converts relative position (0-1) on axis to a pixel coordinate.\r\n *\r\n * @param position Position (0-1)\r\n * @return Coordinate (px)\r\n */\r\n positionToCoordinate(position) {\r\n if (!this._inversed) {\r\n return (this._end - position) * this._axisLength;\r\n }\r\n else {\r\n return (position - this._start) * this._axisLength;\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n positionTooltip(tooltip, position) {\r\n this._positionTooltip(tooltip, { x: 0, y: this.positionToCoordinate(position) });\r\n }\r\n /**\r\n * @ignore\r\n */\r\n updateTooltipBounds(tooltip) {\r\n const inside = this.get(\"inside\");\r\n const num = 100000;\r\n let global = this._display.toGlobal({ x: 0, y: 0 });\r\n let y = global.y;\r\n let x = 0;\r\n let h = this.axisLength();\r\n let w = num;\r\n let pointerOrientation = \"right\";\r\n if (this.get(\"opposite\")) {\r\n if (inside) {\r\n pointerOrientation = \"right\";\r\n x = global.x - num;\r\n w = num;\r\n }\r\n else {\r\n pointerOrientation = \"left\";\r\n x = global.x;\r\n w = num;\r\n }\r\n }\r\n else {\r\n if (inside) {\r\n pointerOrientation = \"left\";\r\n x = global.x;\r\n w = num;\r\n }\r\n else {\r\n pointerOrientation = \"right\";\r\n x = global.x - num;\r\n w = num;\r\n }\r\n }\r\n const bounds = { left: x, right: x + w, top: y, bottom: y + h };\r\n const oldBounds = tooltip.get(\"bounds\");\r\n if (!$utils.sameBounds(bounds, oldBounds)) {\r\n tooltip.set(\"bounds\", bounds);\r\n tooltip.set(\"pointerOrientation\", pointerOrientation);\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n _updateLC() {\r\n const axis = this.axis;\r\n const parent = axis.parent;\r\n if (parent) {\r\n const h = parent.innerHeight();\r\n this._lc = this.axisLength() / h;\r\n this._ls = axis.y() / h;\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n toAxisPosition(position) {\r\n const start = this._start || 0;\r\n const end = this._end || 1;\r\n position -= this._ls;\r\n position = position * (end - start) / this._lc;\r\n if (this.get(\"inversed\")) {\r\n position = start + position;\r\n }\r\n else {\r\n position = end - position;\r\n }\r\n return position;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n toGlobalPosition(position) {\r\n const start = this._start || 0;\r\n const end = this._end || 1;\r\n if (this.get(\"inversed\")) {\r\n position = position - start;\r\n }\r\n else {\r\n position = end - position;\r\n }\r\n position = position / (end - start) * this._lc;\r\n position += this._ls;\r\n return position;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n fixPosition(position) {\r\n if (!this.get(\"inversed\")) {\r\n return 1 - position;\r\n }\r\n return position;\r\n }\r\n}\r\nAxisRendererY.className = \"AxisRendererY\";\r\nAxisRendererY.classNames = AxisRenderer.classNames.concat([AxisRendererY.className]);\r\n//# sourceMappingURL=AxisRendererY.js.map","import { BaseColumnSeries } from \"./BaseColumnSeries\";\r\nimport { Template } from \"../../../core/util/Template\";\r\nimport { ListTemplate } from \"../../../core/util/List\";\r\nimport { RoundedRectangle } from \"../../../core/render/RoundedRectangle\";\r\nimport { Graphics } from \"../../../core/render/Graphics\";\r\nimport * as $utils from \"../../../core/util/Utils\";\r\nimport * as $array from \"../../../core/util/Array\";\r\nexport class ColumnSeries extends BaseColumnSeries {\r\n constructor() {\r\n super(...arguments);\r\n this.allColumns = this.children.push(Graphics.new(this._root, {}));\r\n this.allColumnsData = [];\r\n /**\r\n * A [[TemplateList]] of all columns in series.\r\n *\r\n * `columns.template` can be used to set default settings for all columns,\r\n * or to change on existing ones.\r\n */\r\n this.columns = this.addDisposer(new ListTemplate(Template.new({}), () => RoundedRectangle._new(this._root, {\r\n position: \"absolute\",\r\n themeTags: $utils.mergeTags(this.columns.template.get(\"themeTags\", []), [\"series\", \"column\"])\r\n }, [this.columns.template])));\r\n }\r\n /**\r\n * @ignore\r\n */\r\n makeColumn(dataItem, listTemplate) {\r\n const column = listTemplate.make();\r\n if (!this.get(\"turboMode\")) {\r\n this.mainContainer.children.push(column);\r\n }\r\n else {\r\n column.virtualParent = this.chart;\r\n }\r\n column._setDataItem(dataItem);\r\n listTemplate.push(column);\r\n return column;\r\n }\r\n _processAxisRange(axisRange) {\r\n super._processAxisRange(axisRange);\r\n axisRange.columns = new ListTemplate(Template.new({}), () => RoundedRectangle._new(this._root, {\r\n position: \"absolute\",\r\n themeTags: $utils.mergeTags(axisRange.columns.template.get(\"themeTags\", []), [\"series\", \"column\"]),\r\n }, [this.columns.template, axisRange.columns.template]));\r\n }\r\n _beforeColumnsDraw() {\r\n this.allColumnsData = [];\r\n }\r\n _afterColumnsDraw() {\r\n if (this.get(\"turboMode\")) {\r\n this.allColumns.set(\"draw\", (display) => {\r\n display.clear();\r\n $array.each(this.allColumnsData, (column) => {\r\n const w = column.width;\r\n const h = column.height;\r\n const x = column.x;\r\n const y = column.y;\r\n const stroke = column.stroke;\r\n const fill = column.fill;\r\n const strokeWidth = column.strokeWidth;\r\n const strokeOpacity = column.strokeOpacity;\r\n const fillOpacity = column.fillOpacity;\r\n display.beginFill(fill, fillOpacity);\r\n display.beginPath();\r\n display.lineStyle(strokeWidth, stroke, strokeOpacity);\r\n display.drawRect(x, y, w, h);\r\n display.endStroke();\r\n display.endFill();\r\n });\r\n });\r\n }\r\n }\r\n _updateChildren() {\r\n if (this.isDirty(\"turboMode\")) {\r\n this.markDirtyValues();\r\n if (!this.get(\"turboMode\")) {\r\n this.allColumns.set(\"draw\", undefined);\r\n }\r\n }\r\n super._updateChildren();\r\n }\r\n _updateSeriesGraphics(dataItem, graphics, l, r, t, b, fitW, fitH) {\r\n if (this.get(\"turboMode\")) {\r\n graphics.virtualParent = this.chart;\r\n if (graphics.parent) {\r\n this.mainContainer.children.removeValue(graphics);\r\n graphics._parent = undefined;\r\n }\r\n const stroke = graphics.get(\"stroke\");\r\n const fillOpacity = graphics.get(\"fillOpacity\", 1);\r\n const strokeOpacity = graphics.get(\"strokeOpacity\", 1);\r\n const strokWidth = graphics.get(\"strokeWidth\", 1);\r\n const fill = graphics.get(\"fill\");\r\n const ptl = this.getPoint(l, t);\r\n const pbr = this.getPoint(r, b);\r\n const tooltipPoint = dataItem.get(\"point\");\r\n if (tooltipPoint) {\r\n const point = this.getPoint(tooltipPoint.x, tooltipPoint.y);\r\n tooltipPoint.x = point.x + this._x;\r\n tooltipPoint.y = point.y + this._y;\r\n }\r\n l = ptl.x;\r\n r = pbr.x;\r\n t = ptl.y;\r\n b = pbr.y;\r\n dataItem.setRaw(\"left\", l);\r\n dataItem.setRaw(\"right\", r);\r\n dataItem.setRaw(\"top\", t);\r\n dataItem.setRaw(\"bottom\", b);\r\n this.allColumnsData.push({ width: r - l, height: b - t, x: l, y: t, stroke: stroke, fill: fill, strokeWidth: strokWidth, strokeOpacity: strokeOpacity, fillOpacity: fillOpacity });\r\n }\r\n else {\r\n if (!graphics.parent) {\r\n this.mainContainer.children.push(graphics);\r\n }\r\n super._updateSeriesGraphics(dataItem, graphics, l, r, t, b, fitW, fitH);\r\n }\r\n }\r\n}\r\nColumnSeries.className = \"ColumnSeries\";\r\nColumnSeries.classNames = BaseColumnSeries.classNames.concat([ColumnSeries.className]);\r\n//# sourceMappingURL=ColumnSeries.js.map","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n let d = Math.floor(digits);\n if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n if (d > 15) return append;\n const k = 10 ** d;\n return function(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n}\n\nexport class Path {\n constructor(digits) {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n this._append = digits == null ? append : appendRound(digits);\n }\n moveTo(x, y) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._append`Z`;\n }\n }\n lineTo(x, y) {\n this._append`L${this._x1 = +x},${this._y1 = +y}`;\n }\n quadraticCurveTo(x1, y1, x, y) {\n this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n }\n arcTo(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._append`M${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._append`L${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Otherwise, draw an arc!\n else {\n let x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n }\n\n this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n }\n }\n arc(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._append`M${x0},${y0}`;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._append`L${x0},${y0}`;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n }\n }\n rect(x, y, w, h) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n }\n toString() {\n return this._;\n }\n}\n\nexport function path() {\n return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n return new Path(+digits);\n}\n","import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n let digits = 3;\n\n shape.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) {\n digits = null;\n } else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n return shape;\n };\n\n return () => new Path(digits);\n}\n","import constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\nimport {withPath} from \"./path.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null,\n path = withPath(arc);\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle. If this\n // intersection fails, it’s probably because the arc is too small, so\n // disable the corner radius entirely.\n if (da < pi) {\n if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n } else {\n rc0 = rc1 = 0;\n }\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n var defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(line);\n\n x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n function line(data) {\n var i,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x0, y0, y1) {\n var x1 = null,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(area);\n\n x0 = typeof x0 === \"function\" ? x0 : (x0 === undefined) ? pointX : constant(+x0);\n y0 = typeof y0 === \"function\" ? y0 : (y0 === undefined) ? constant(0) : constant(+y0);\n y1 = typeof y1 === \"function\" ? y1 : (y1 === undefined) ? pointY : constant(+y1);\n\n function area(data) {\n var i,\n j,\n k,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","import { XYSeries } from \"./XYSeries\";\r\nimport { Graphics } from \"../../../core/render/Graphics\";\r\nimport { line, area } from \"d3-shape\";\r\nimport { Template } from \"../../../core/util/Template\";\r\nimport { ListTemplate } from \"../../../core/util/List\";\r\nimport { color } from \"../../../core/util/Color\";\r\nimport { DataItem } from \"../../../core/render/Component\";\r\nimport { Rectangle } from \"../../../core/render/Rectangle\";\r\nimport * as $type from \"../../../core/util/Type\";\r\nimport * as $array from \"../../../core/util/Array\";\r\nimport * as $utils from \"../../../core/util/Utils\";\r\n/**\r\n * Used to plot line and/or area series.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/series/line-series/} for more info\r\n * @important\r\n */\r\nexport class LineSeries extends XYSeries {\r\n constructor() {\r\n super(...arguments);\r\n this._strokeGenerator = line();\r\n this._fillGenerator = area();\r\n /**\r\n * A [[TemplateList]] of all line segments in series.\r\n *\r\n * `strokes.template` can be used to set default settings for all line\r\n * segments, or to change on existing ones.\r\n *\r\n * @default new ListTemplate<Graphics>\r\n */\r\n this.strokes = this.addDisposer(new ListTemplate(Template.new({}), () => Graphics._new(this._root, {\r\n themeTags: $utils.mergeTags(this.strokes.template.get(\"themeTags\", []), [\"line\", \"series\", \"stroke\"])\r\n }, [this.strokes.template])));\r\n /**\r\n * A [[TemplateList]] of all segment fills in series.\r\n *\r\n * `fills.template` can be used to set default settings for all segment\r\n * fills, or to change on existing ones.\r\n *\r\n * @default new ListTemplate<Graphics>\r\n */\r\n this.fills = this.addDisposer(new ListTemplate(Template.new({}), () => Graphics._new(this._root, {\r\n themeTags: $utils.mergeTags(this.strokes.template.get(\"themeTags\", []), [\"line\", \"series\", \"fill\"])\r\n }, [this.fills.template])));\r\n this._previousPoint = [0, 0, 0, 0];\r\n this._dindex = 0;\r\n this._sindex = 0;\r\n }\r\n _afterNew() {\r\n this._fillGenerator.y0(function (p) {\r\n return p[3];\r\n });\r\n this._fillGenerator.x0(function (p) {\r\n return p[2];\r\n });\r\n this._fillGenerator.y1(function (p) {\r\n return p[1];\r\n });\r\n this._fillGenerator.x1(function (p) {\r\n return p[0];\r\n });\r\n super._afterNew();\r\n }\r\n /**\r\n * @ignore\r\n */\r\n makeStroke(strokes) {\r\n const stroke = this.mainContainer.children.push(strokes.make());\r\n strokes.push(stroke);\r\n return stroke;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n makeFill(fills) {\r\n const fill = this.mainContainer.children.push(fills.make());\r\n fills.push(fill);\r\n return fill;\r\n }\r\n _updateChildren() {\r\n this._strokeTemplate = undefined;\r\n this._fillTemplate = undefined;\r\n let xAxis = this.get(\"xAxis\");\r\n let yAxis = this.get(\"yAxis\");\r\n if (this.isDirty(\"stroke\")) {\r\n const stroke = this.get(\"stroke\");\r\n this.strokes.template.set(\"stroke\", stroke);\r\n const legendStroke = this._legendStroke;\r\n if (legendStroke) {\r\n legendStroke.states.lookup(\"default\").set(\"stroke\", stroke);\r\n }\r\n }\r\n if (this.isDirty(\"fill\")) {\r\n const fill = this.get(\"fill\");\r\n this.fills.template.set(\"fill\", fill);\r\n const legendFill = this._legendFill;\r\n if (legendFill) {\r\n legendFill.states.lookup(\"default\").set(\"fill\", fill);\r\n }\r\n }\r\n if (this.isDirty(\"fillPattern\")) {\r\n const fillPattern = this.get(\"fillPattern\");\r\n this.fills.template.set(\"fillPattern\", fillPattern);\r\n const legendFill = this._legendFill;\r\n if (legendFill) {\r\n legendFill.states.lookup(\"default\").set(\"fillPattern\", fillPattern);\r\n }\r\n }\r\n if (this.isDirty(\"curveFactory\")) {\r\n const curveFactory = this.get(\"curveFactory\");\r\n if (curveFactory) {\r\n this._strokeGenerator.curve(curveFactory);\r\n this._fillGenerator.curve(curveFactory);\r\n }\r\n }\r\n if (xAxis.inited && yAxis.inited) {\r\n if (this._axesDirty || this._valuesDirty || this._stackDirty || this.isDirty(\"vcx\") || this.isDirty(\"vcy\") || this._sizeDirty || this.isDirty(\"connect\") || this.isDirty(\"curveFactory\")) {\r\n const dataItems = this.dataItems;\r\n this.fills.each((fill) => {\r\n fill.setPrivate(\"visible\", false);\r\n });\r\n this.strokes.each((stroke) => {\r\n stroke.setPrivate(\"visible\", false);\r\n });\r\n this.axisRanges.each((axisRange) => {\r\n let fills = axisRange.fills;\r\n if (fills) {\r\n fills.each((fill) => {\r\n fill.setPrivate(\"visible\", false);\r\n });\r\n }\r\n let strokes = axisRange.strokes;\r\n if (strokes) {\r\n strokes.each((stroke) => {\r\n stroke.setPrivate(\"visible\", false);\r\n });\r\n }\r\n });\r\n let startIndex = this.startIndex();\r\n let strokeTemplateField = this.strokes.template.get(\"templateField\");\r\n let fillTemplateField = this.fills.template.get(\"templateField\");\r\n let strokeTemplateFound = true;\r\n let fillTemplateFound = true;\r\n if (strokeTemplateField) {\r\n strokeTemplateFound = false;\r\n }\r\n if (fillTemplateField) {\r\n fillTemplateFound = false;\r\n }\r\n for (let i = startIndex - 1; i >= 0; i--) {\r\n let dataItem = dataItems[i];\r\n let hasValues = true;\r\n let dataContext = dataItem.dataContext;\r\n if (strokeTemplateField) {\r\n if (dataContext[strokeTemplateField]) {\r\n strokeTemplateFound = true;\r\n }\r\n }\r\n if (fillTemplateField) {\r\n if (dataContext[fillTemplateField]) {\r\n fillTemplateFound = true;\r\n }\r\n }\r\n for (let f = 0, flen = this._valueFields.length; f < flen; f++) {\r\n if (!$type.isNumber(dataItem.get(this._valueFields[f]))) {\r\n hasValues = false;\r\n break;\r\n }\r\n }\r\n if (hasValues && strokeTemplateFound && fillTemplateFound) {\r\n startIndex = i;\r\n break;\r\n }\r\n }\r\n let len = dataItems.length;\r\n let endIndex = this.endIndex();\r\n if (endIndex < len) {\r\n endIndex++;\r\n for (let i = endIndex; i < len; i++) {\r\n let dataItem = dataItems[i];\r\n let hasValues = true;\r\n for (let f = 0, flen = this._valueFields.length; f < flen; f++) {\r\n if (!$type.isNumber(dataItem.get(this._valueFields[f]))) {\r\n hasValues = false;\r\n break;\r\n }\r\n }\r\n if (hasValues) {\r\n endIndex = i + 1;\r\n break;\r\n }\r\n }\r\n }\r\n if (startIndex > 0) {\r\n startIndex--;\r\n }\r\n this._endIndex = endIndex;\r\n this._clearGraphics();\r\n this._sindex = 0;\r\n this._dindex = startIndex;\r\n if (len == 1) {\r\n this._startSegment(0);\r\n }\r\n else {\r\n // this is done to avoid recursion with a lot of segments\r\n while (this._dindex < endIndex - 1) {\r\n this._startSegment(this._dindex);\r\n this._sindex++;\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n this._skipped = true;\r\n }\r\n super._updateChildren();\r\n }\r\n _clearGraphics() {\r\n this.strokes.clear();\r\n this.fills.clear();\r\n this.axisRanges.each((axisRange) => {\r\n axisRange.fills.clear();\r\n axisRange.strokes.clear();\r\n });\r\n }\r\n _startSegment(dataItemIndex) {\r\n const dataItems = this.dataItems;\r\n let endIndex = this._endIndex;\r\n let currentEndIndex = endIndex;\r\n const autoGapCount = this.get(\"autoGapCount\");\r\n const connect = this.get(\"connect\");\r\n const fill = this.makeFill(this.fills);\r\n const fillTemplate = this._fillTemplate;\r\n const originalTemplate = this.fills.template;\r\n if (fillTemplate && fillTemplate != originalTemplate) {\r\n fill.template = fillTemplate;\r\n }\r\n fill.setPrivate(\"visible\", true);\r\n const stroke = this.makeStroke(this.strokes);\r\n const strokeTemplate = this._strokeTemplate;\r\n if (strokeTemplate && strokeTemplate != this.strokes.template) {\r\n stroke.template = strokeTemplate;\r\n }\r\n stroke.setPrivate(\"visible\", true);\r\n let xAxis = this.get(\"xAxis\");\r\n let yAxis = this.get(\"yAxis\");\r\n let baseAxis = this.get(\"baseAxis\");\r\n let vcx = this.get(\"vcx\", 1);\r\n let vcy = this.get(\"vcy\", 1);\r\n let xField = this._xField;\r\n let yField = this._yField;\r\n let xOpenField = this._xOpenField;\r\n let yOpenField = this._yOpenField;\r\n const xOpenFieldValue = this.get(\"openValueXField\");\r\n const yOpenFieldValue = this.get(\"openValueYField\");\r\n if (!xOpenFieldValue) {\r\n xOpenField = this._xField;\r\n }\r\n if (!yOpenFieldValue) {\r\n yOpenField = this._yField;\r\n }\r\n const stacked = this.get(\"stacked\");\r\n const basePosX = xAxis.basePosition();\r\n const basePosY = yAxis.basePosition();\r\n let baseField;\r\n if (baseAxis === yAxis) {\r\n baseField = this._yField;\r\n }\r\n else {\r\n baseField = this._xField;\r\n }\r\n const segments = [];\r\n let points = [];\r\n segments.push(points);\r\n const strokeTemplateField = this.strokes.template.get(\"templateField\");\r\n const fillTemplateField = this.fills.template.get(\"templateField\");\r\n let locationX = this.get(\"locationX\", 0.5);\r\n let locationY = this.get(\"locationY\", 0.5);\r\n let openLocationX = this.get(\"openLocationX\", locationX);\r\n let openLocationY = this.get(\"openLocationY\", locationY);\r\n const minDistance = this.get(\"minDistance\", 0);\r\n let i;\r\n let fillVisible = this.fills.template.get(\"visible\");\r\n if (this.axisRanges.length > 0) {\r\n fillVisible = true;\r\n }\r\n let getOpen = false;\r\n if (stacked || xOpenFieldValue || yOpenFieldValue) {\r\n getOpen = true;\r\n }\r\n const o = {\r\n points, segments, stacked, getOpen, basePosX, basePosY, fillVisible, xField, yField, xOpenField, yOpenField, vcx, vcy, baseAxis, xAxis, yAxis, locationX, locationY, openLocationX, openLocationY, minDistance\r\n };\r\n let rangeStrokeTemplate = this._strokeTemplate;\r\n let rangeFillTemplate = this._fillTemplate;\r\n for (i = dataItemIndex; i < currentEndIndex; i++) {\r\n this._dindex = i;\r\n const dataItem = dataItems[i];\r\n let valueX = dataItem.get(xField);\r\n let valueY = dataItem.get(yField);\r\n if (valueX == null || valueY == null) {\r\n if (!connect) {\r\n points = [];\r\n segments.push(points);\r\n o.points = points;\r\n }\r\n }\r\n else {\r\n this._getPoints(dataItem, o);\r\n }\r\n if (strokeTemplateField) {\r\n let strokeTemplate = dataItem.dataContext[strokeTemplateField];\r\n if (strokeTemplate) {\r\n if (!(strokeTemplate instanceof Template)) {\r\n strokeTemplate = Template.new(strokeTemplate);\r\n }\r\n this._strokeTemplate = strokeTemplate;\r\n if (i > dataItemIndex) {\r\n currentEndIndex = i;\r\n break;\r\n }\r\n else {\r\n rangeStrokeTemplate = strokeTemplate;\r\n stroke.template = strokeTemplate;\r\n }\r\n }\r\n }\r\n if (fillTemplateField) {\r\n let fillTemplate = dataItem.dataContext[fillTemplateField];\r\n if (fillTemplate) {\r\n if (!(fillTemplate instanceof Template)) {\r\n fillTemplate = Template.new(fillTemplate);\r\n }\r\n this._fillTemplate = fillTemplate;\r\n if (i > dataItemIndex) {\r\n currentEndIndex = i;\r\n break;\r\n }\r\n else {\r\n rangeFillTemplate = fillTemplate;\r\n fill.template = fillTemplate;\r\n }\r\n }\r\n }\r\n if (!connect) {\r\n let nextItem = dataItems[i + 1];\r\n if (nextItem) {\r\n if (baseAxis.shouldGap(dataItem, nextItem, autoGapCount, baseField)) {\r\n points = [];\r\n segments.push(points);\r\n o.points = points;\r\n }\r\n }\r\n }\r\n }\r\n fill.setRaw(\"userData\", [dataItemIndex, i]);\r\n stroke.setRaw(\"userData\", [dataItemIndex, i]);\r\n if (i === endIndex) {\r\n this._endLine(points, segments[0][0]);\r\n }\r\n if (stroke) {\r\n this._drawStroke(stroke, segments);\r\n }\r\n if (fill) {\r\n this._drawFill(fill, segments);\r\n }\r\n this.axisRanges.each((axisRange) => {\r\n const container = axisRange.container;\r\n const fills = axisRange.fills;\r\n const fill = this.makeFill(fills);\r\n if (container) {\r\n container.children.push(fill);\r\n }\r\n fill.setPrivate(\"visible\", true);\r\n this._drawFill(fill, segments);\r\n const strokes = axisRange.strokes;\r\n const stroke = this.makeStroke(strokes);\r\n if (container) {\r\n container.children.push(stroke);\r\n }\r\n if (rangeStrokeTemplate && rangeStrokeTemplate != this.strokes.template) {\r\n stroke.template = rangeStrokeTemplate;\r\n }\r\n if (rangeFillTemplate && rangeFillTemplate != this.fills.template) {\r\n fill.template = rangeFillTemplate;\r\n }\r\n stroke.setPrivate(\"visible\", true);\r\n this._drawStroke(stroke, segments);\r\n fill.setRaw(\"userData\", [dataItemIndex, i]);\r\n stroke.setRaw(\"userData\", [dataItemIndex, i]);\r\n });\r\n }\r\n _getPoints(dataItem, o) {\r\n let points = o.points;\r\n let itemLocationX = dataItem.get(\"locationX\", o.locationX);\r\n let itemLocationY = dataItem.get(\"locationY\", o.locationY);\r\n const exactLocationX = this.get(\"exactLocationX\", false);\r\n const exactLocationY = this.get(\"exactLocationY\", false);\r\n let xPos = o.xAxis.getDataItemPositionX(dataItem, o.xField, itemLocationX, o.vcx, exactLocationX);\r\n let yPos = o.yAxis.getDataItemPositionY(dataItem, o.yField, itemLocationY, o.vcy, exactLocationY);\r\n if (this._shouldInclude(xPos)) {\r\n const iPoint = this.getPoint(xPos, yPos);\r\n const point = [iPoint.x, iPoint.y];\r\n iPoint.x += this._x;\r\n iPoint.y += this._y;\r\n dataItem.set(\"point\", iPoint);\r\n if (o.fillVisible) {\r\n let xPos0 = xPos;\r\n let yPos0 = yPos;\r\n if (o.baseAxis === o.xAxis) {\r\n yPos0 = o.basePosY;\r\n }\r\n else if (o.baseAxis === o.yAxis) {\r\n xPos0 = o.basePosX;\r\n }\r\n if (o.getOpen) {\r\n let valueX = dataItem.get(o.xOpenField);\r\n let valueY = dataItem.get(o.yOpenField);\r\n if (valueX != null && valueY != null) {\r\n let itemLocationX = dataItem.get(\"openLocationX\", o.openLocationX);\r\n let itemLocationY = dataItem.get(\"openLocationY\", o.openLocationY);\r\n if (o.stacked) {\r\n let stackToItemX = dataItem.get(\"stackToItemX\");\r\n let stackToItemY = dataItem.get(\"stackToItemY\");\r\n if (stackToItemX) {\r\n xPos0 = o.xAxis.getDataItemPositionX(stackToItemX, o.xField, itemLocationX, stackToItemX.component.get(\"vcx\"), exactLocationX);\r\n if ($type.isNaN(xPos0)) {\r\n xPos0 = o.basePosX;\r\n }\r\n }\r\n else {\r\n if (o.yAxis === o.baseAxis) {\r\n xPos0 = o.basePosX;\r\n }\r\n else {\r\n xPos0 = o.xAxis.getDataItemPositionX(dataItem, o.xOpenField, itemLocationX, o.vcx, exactLocationX);\r\n }\r\n }\r\n if (stackToItemY) {\r\n yPos0 = o.yAxis.getDataItemPositionY(stackToItemY, o.yField, itemLocationY, stackToItemY.component.get(\"vcy\"), exactLocationY);\r\n if ($type.isNaN(yPos0)) {\r\n yPos0 = o.basePosY;\r\n }\r\n }\r\n else {\r\n if (o.xAxis === o.baseAxis) {\r\n yPos0 = o.basePosY;\r\n }\r\n else {\r\n yPos0 = o.yAxis.getDataItemPositionY(dataItem, o.yOpenField, itemLocationY, o.vcy, exactLocationY);\r\n }\r\n }\r\n }\r\n else {\r\n xPos0 = o.xAxis.getDataItemPositionX(dataItem, o.xOpenField, itemLocationX, o.vcx, exactLocationX);\r\n yPos0 = o.yAxis.getDataItemPositionY(dataItem, o.yOpenField, itemLocationY, o.vcy, exactLocationY);\r\n }\r\n }\r\n }\r\n let closeIPoint = this.getPoint(xPos0, yPos0);\r\n point[2] = closeIPoint.x;\r\n point[3] = closeIPoint.y;\r\n }\r\n if (o.minDistance > 0) {\r\n const p0 = point[0];\r\n const p1 = point[1];\r\n const p2 = point[2];\r\n const p3 = point[3];\r\n const prev = this._previousPoint;\r\n const pp0 = prev[0];\r\n const pp1 = prev[1];\r\n const pp2 = prev[2];\r\n const pp3 = prev[3];\r\n if (Math.hypot(p0 - pp0, p1 - pp1) > o.minDistance || (p2 && p3 && Math.hypot(p2 - pp2, p3 - pp3) > o.minDistance)) {\r\n points.push(point);\r\n this._previousPoint = point;\r\n }\r\n }\r\n else {\r\n points.push(point);\r\n }\r\n }\r\n }\r\n _endLine(_points, _firstPoint) {\r\n }\r\n _drawStroke(graphics, segments) {\r\n if (graphics.get(\"visible\") && !graphics.get(\"forceHidden\")) {\r\n graphics.set(\"draw\", (display) => {\r\n $array.each(segments, (segment) => {\r\n this._strokeGenerator.context(display);\r\n this._strokeGenerator(segment);\r\n });\r\n });\r\n }\r\n }\r\n _drawFill(graphics, segments) {\r\n if (graphics.get(\"visible\") && !graphics.get(\"forceHidden\")) {\r\n graphics.set(\"draw\", (display) => {\r\n $array.each(segments, (segment) => {\r\n this._fillGenerator.context(display);\r\n this._fillGenerator(segment);\r\n });\r\n });\r\n }\r\n }\r\n _processAxisRange(axisRange) {\r\n super._processAxisRange(axisRange);\r\n axisRange.fills = new ListTemplate(Template.new({}), () => Graphics._new(this._root, {\r\n themeTags: $utils.mergeTags(axisRange.fills.template.get(\"themeTags\", []), [\"line\", \"series\", \"fill\"]),\r\n }, [this.fills.template, axisRange.fills.template]));\r\n axisRange.strokes = new ListTemplate(Template.new({}), () => Graphics._new(this._root, {\r\n themeTags: $utils.mergeTags(axisRange.strokes.template.get(\"themeTags\", []), [\"line\", \"series\", \"stroke\"]),\r\n }, [this.strokes.template, axisRange.strokes.template]));\r\n }\r\n /**\r\n * @ignore\r\n */\r\n createLegendMarker(_dataItem) {\r\n const legendDataItem = this.get(\"legendDataItem\");\r\n if (legendDataItem) {\r\n const marker = legendDataItem.get(\"marker\");\r\n const markerRectangle = legendDataItem.get(\"markerRectangle\");\r\n if (markerRectangle) {\r\n markerRectangle.setPrivate(\"visible\", false);\r\n }\r\n marker.set(\"background\", Rectangle.new(marker._root, { fillOpacity: 0, fill: color(0x000000) }));\r\n const legendStroke = marker.children.push(Graphics._new(marker._root, {\r\n themeTags: [\"line\", \"series\", \"legend\", \"marker\", \"stroke\"], interactive: false\r\n }, [this.strokes.template]));\r\n this._legendStroke = legendStroke;\r\n const legendFill = marker.children.push(Graphics._new(marker._root, {\r\n themeTags: [\"line\", \"series\", \"legend\", \"marker\", \"fill\"]\r\n }, [this.fills.template]));\r\n this._legendFill = legendFill;\r\n const disabledColor = this._root.interfaceColors.get(\"disabled\");\r\n legendStroke.states.create(\"disabled\", { fill: disabledColor, stroke: disabledColor });\r\n legendFill.states.create(\"disabled\", { fill: disabledColor, stroke: disabledColor });\r\n if (this.bullets.length > 0) {\r\n const bulletFunction = this.bullets.getIndex(0);\r\n if (bulletFunction) {\r\n const bullet = bulletFunction(marker._root, this, new DataItem(this, { legend: true }, {}));\r\n if (bullet) {\r\n const sprite = bullet.get(\"sprite\");\r\n if (sprite instanceof Graphics) {\r\n sprite.states.create(\"disabled\", { fill: disabledColor, stroke: disabledColor });\r\n }\r\n if (sprite) {\r\n sprite.setAll({\r\n tooltipText: undefined,\r\n tooltipHTML: undefined,\r\n focusable: undefined,\r\n focusableGroup: undefined,\r\n ariaLabel: undefined\r\n });\r\n marker.children.push(sprite);\r\n sprite.setAll({ x: marker.width() / 2, y: marker.height() / 2 });\r\n marker.events.on(\"boundschanged\", () => {\r\n sprite.setAll({ x: marker.width() / 2, y: marker.height() / 2 });\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\nLineSeries.className = \"LineSeries\";\r\nLineSeries.classNames = XYSeries.classNames.concat([LineSeries.className]);\r\n//# sourceMappingURL=LineSeries.js.map","import { z } from \"zod\";\n\nexport const barChartCatalog = {\n props: z.object({\n data: z.array(z.object({ category: z.string(), value: z.number() })),\n orientation: z.enum([\"vertical\", \"horizontal\"]).optional(),\n theme: z.enum([\"monochrome\", \"categorical\", \"semantic\"]).optional(),\n height: z.number().optional(),\n unit: z.string().optional(),\n }),\n slots: [],\n description:\n \"Bar chart (vertical or horizontal) with Anvil2 theme. data: [{category, value}]. theme: monochrome (default, ≤4 vars), categorical (5-9 distinct), semantic (success/neutral/warning/danger order). unit: tooltip suffix.\",\n};\n","import { Theme } from \"../core/Theme\";\r\n/**\r\n * @ignore\r\n */\r\nexport class AnimatedTheme extends Theme {\r\n setupDefaultRules() {\r\n super.setupDefaultRules();\r\n this.rule(\"Component\").setAll({\r\n interpolationDuration: 600\r\n });\r\n this.rule(\"Hierarchy\").set(\"animationDuration\", 600);\r\n this.rule(\"Scrollbar\").set(\"animationDuration\", 600);\r\n this.rule(\"Tooltip\").set(\"animationDuration\", 300);\r\n this.rule(\"MapChart\").set(\"animationDuration\", 1000);\r\n this.rule(\"MapChart\").set(\"wheelDuration\", 300);\r\n this.rule(\"Entity\").setAll({\r\n stateAnimationDuration: 600\r\n });\r\n this.rule(\"Sprite\").states.create(\"default\", { stateAnimationDuration: 600 });\r\n this.rule(\"Tooltip\", [\"axis\"]).setAll({\r\n animationDuration: 200\r\n });\r\n this.rule(\"WordCloud\").set(\"animationDuration\", 500);\r\n this.rule(\"Polygon\").set(\"animationDuration\", 600);\r\n this.rule(\"ArcDiagram\").set(\"animationDuration\", 600);\r\n }\r\n}\r\n//# sourceMappingURL=AnimatedTheme.js.map","import { AnimatedTheme } from \"../.internal/themes/AnimatedTheme\";\r\nexport default AnimatedTheme;\r\n//# sourceMappingURL=Animated.js.map","export const BackgroundColor = {\n value: \"#ffffff\",\n attributes: {\n appearance: {\n dark: {\n value: \"#141414\"\n }\n }\n }\n};\nexport const BackgroundColorStrong = {\n value: \"#f7f7f7\",\n attributes: {\n appearance: {\n dark: {\n value: \"#2d2e31\"\n }\n }\n }\n};\nexport const BackgroundColorStronger = {\n value: \"#eeeeee\",\n attributes: {\n appearance: {\n dark: {\n value: \"#444445\"\n }\n }\n }\n};\nexport const BackgroundColorStrongest = {\n value: \"#bcbcbd\",\n attributes: {\n appearance: {\n dark: {\n value: \"#737475\"\n }\n }\n }\n};\nexport const BackgroundColorPrimary = {\n value: \"#0265DC\",\n attributes: {\n appearance: {\n dark: {\n value: \"#78BBFA\"\n }\n }\n }\n};\nexport const BackgroundColorPrimarySubdued = {\n value: \"#E0F2FF\",\n attributes: {\n appearance: {\n dark: {\n value: \"#78BBFA33\"\n }\n }\n }\n};\nexport const BackgroundColorSuccess = {\n value: \"#007A4D\",\n attributes: {\n appearance: {\n dark: {\n value: \"#49CC93\"\n }\n }\n }\n};\nexport const BackgroundColorSuccessSubdued = {\n value: \"#CEF8E0\",\n attributes: {\n appearance: {\n dark: {\n value: \"#49CC9333\"\n }\n }\n }\n};\nexport const BackgroundColorDanger = {\n value: \"#e13212\",\n attributes: {\n appearance: {\n dark: {\n value: \"#ff745f\"\n }\n }\n }\n};\nexport const BackgroundColorDangerSubdued = {\n value: \"#ffece9\",\n attributes: {\n appearance: {\n dark: {\n value: \"#ff745f33\"\n }\n }\n }\n};\nexport const BackgroundColorWarning = {\n value: \"#ffbe00\",\n attributes: {\n appearance: {\n dark: {\n value: \"#ffe278\"\n }\n }\n }\n};\nexport const BackgroundColorDisabled = {\n value: \"#606162\",\n attributes: {\n appearance: {\n dark: {\n value: \"#606162\"\n }\n }\n }\n};\nexport const BackgroundColorInverted = {\n value: \"#2d2e31\",\n attributes: {\n appearance: {\n dark: {\n value: \"#fafafa\"\n }\n }\n }\n};\nexport const BackgroundColorInvertedStrong = {\n value: \"#141414\",\n attributes: {\n appearance: {\n dark: {\n value: \"#ffffff\"\n }\n }\n }\n};\nexport const BorderRadiusNone = { value: \"0\" };\nexport const BorderRadiusSmall = { value: \"0.1875rem\" };\nexport const BorderRadiusMedium = { value: \"0.375rem\" };\nexport const BorderRadiusLarge = { value: \"0.75rem\" };\nexport const BorderRadiusXlarge = { value: \"1.5rem\" };\nexport const BorderRadiusCircular = { value: \"100%\" };\nexport const BorderWidthNone = { value: \"0rem\" };\nexport const BorderWidth = { value: \"0.0625rem\" };\nexport const BorderWidthStrong = { value: \"0.125rem\" };\nexport const BorderColor = {\n value: \"#949596\",\n attributes: {\n appearance: {\n dark: {\n value: \"#606162\"\n }\n }\n }\n};\nexport const BorderColorSubdued = {\n value: \"#dfe0e1\",\n attributes: {\n appearance: {\n dark: {\n value: \"#444445\"\n }\n }\n }\n};\nexport const BorderColorStrong = {\n value: \"#444445\",\n attributes: {\n appearance: {\n dark: {\n value: \"#dfe0e1\"\n }\n }\n }\n};\nexport const BorderColorPrimary = {\n value: \"#0265DC\",\n attributes: {\n appearance: {\n dark: {\n value: \"#78BBFA\"\n }\n }\n }\n};\nexport const BorderColorSuccess = {\n value: \"#007A4D\",\n attributes: {\n appearance: {\n dark: {\n value: \"#49CC93\"\n }\n }\n }\n};\nexport const BorderColorDanger = {\n value: \"#e13212\",\n attributes: {\n appearance: {\n dark: {\n value: \"#ff745f\"\n }\n }\n }\n};\nexport const ChartsMonochrome01Color = {\n value: \"#3892F3\",\n attributes: {\n appearance: {\n dark: {\n value: \"#8AC3FF\"\n }\n }\n }\n};\nexport const ChartsMonochrome01Stroke = {\n value: \"transparent\",\n attributes: {\n appearance: {\n dark: {\n value: \"transparent\"\n }\n }\n }\n};\nexport const ChartsMonochrome01Pattern = { value: \"solid\" };\nexport const ChartsMonochrome02Color = {\n value: \"#08389c\",\n attributes: {\n appearance: {\n dark: {\n value: \"#3476FF\"\n }\n }\n }\n};\nexport const ChartsMonochrome02Stroke = {\n value: \"transparent\",\n attributes: {\n appearance: {\n dark: {\n value: \"transparent\"\n }\n }\n }\n};\nexport const ChartsMonochrome02Pattern = { value: \"solid\" };\nexport const ChartsMonochrome03Color = {\n value: \"#F2F9FF\",\n attributes: {\n appearance: {\n dark: {\n value: \"#141414\"\n }\n }\n }\n};\nexport const ChartsMonochrome03Stroke = {\n value: \"#3892F3\",\n attributes: {\n appearance: {\n dark: {\n value: \"#8AC3FF\"\n }\n }\n }\n};\nexport const ChartsMonochrome03Pattern = { value: \"striped\" };\nexport const ChartsMonochrome04Color = {\n value: \"#F2F9FF\",\n attributes: {\n appearance: {\n dark: {\n value: \"#F2F9FF\"\n }\n }\n }\n};\nexport const ChartsMonochrome04Stroke = {\n value: \"#3892F3\",\n attributes: {\n appearance: {\n dark: {\n value: \"#8AC3FF\"\n }\n }\n }\n};\nexport const ChartsMonochrome04Pattern = { value: \"solid\" };\nexport const ChartsCategorical10Color = {\n value: \"#D57A5C\",\n attributes: {\n appearance: {\n dark: {\n value: \"#D99078\"\n }\n }\n }\n};\nexport const ChartsCategorical10Stroke = {\n value: \"transparent\",\n attributes: {\n appearance: {\n dark: {\n value: \"transparent\"\n }\n }\n }\n};\nexport const ChartsCategorical10Pattern = { value: \"solid\" };\nexport const ChartsCategorical01Color = {\n value: \"#3892F3\",\n attributes: {\n appearance: {\n dark: {\n value: \"#3892F3\"\n }\n }\n }\n};\nexport const ChartsCategorical01Stroke = {\n value: \"transparent\",\n attributes: {\n appearance: {\n dark: {\n value: \"transparent\"\n }\n }\n }\n};\nexport const ChartsCategorical01Pattern = { value: \"solid\" };\nexport const ChartsCategorical02Color = {\n value: \"#08389c\",\n attributes: {\n appearance: {\n dark: {\n value: \"#3476FF\"\n }\n }\n }\n};\nexport const ChartsCategorical02Stroke = {\n value: \"transparent\",\n attributes: {\n appearance: {\n dark: {\n value: \"transparent\"\n }\n }\n }\n};\nexport const ChartsCategorical02Pattern = { value: \"solid\" };\nexport const ChartsCategorical03Color = {\n value: \"#0FA2B8\",\n attributes: {\n appearance: {\n dark: {\n value: \"#C6F6FF\"\n }\n }\n }\n};\nexport const ChartsCategorical03Stroke = {\n value: \"transparent\",\n attributes: {\n appearance: {\n dark: {\n value: \"transparent\"\n }\n }\n }\n};\nexport const ChartsCategorical03Pattern = { value: \"solid\" };\nexport const ChartsCategorical04Color = {\n value: \"#907AF5\",\n attributes: {\n appearance: {\n dark: {\n value: \"#C6B8F4\"\n }\n }\n }\n};\nexport const ChartsCategorical04Stroke = {\n value: \"transparent\",\n attributes: {\n appearance: {\n dark: {\n value: \"transparent\"\n }\n }\n }\n};\nexport const ChartsCategorical04Pattern = { value: \"solid\" };\nexport const ChartsCategorical05Color = {\n value: \"#DE52CE\",\n attributes: {\n appearance: {\n dark: {\n value: \"#D949A9\"\n }\n }\n }\n};\nexport const ChartsCategorical05Stroke = {\n value: \"transparent\",\n attributes: {\n appearance: {\n dark: {\n value: \"transparent\"\n }\n }\n }\n};\nexport const ChartsCategorical05Pattern = { value: \"solid\" };\nexport const ChartsCategorical06Color = {\n value: \"#C2185B\",\n attributes: {\n appearance: {\n dark: {\n value: \"#ED1369\"\n }\n }\n }\n};\nexport const ChartsCategorical06Stroke = {\n value: \"transparent\",\n attributes: {\n appearance: {\n dark: {\n value: \"transparent\"\n }\n }\n }\n};\nexport const ChartsCategorical06Pattern = { value: \"solid\" };\nexport const ChartsCategorical07Color = {\n value: \"#759E15\",\n attributes: {\n appearance: {\n dark: {\n value: \"#8CC30B\"\n }\n }\n }\n};\nexport const ChartsCategorical07Stroke = {\n value: \"transparent\",\n attributes: {\n appearance: {\n dark: {\n value: \"transparent\"\n }\n }\n }\n};\nexport const ChartsCategorical07Pattern = { value: \"solid\" };\nexport const ChartsCategorical08Color = {\n value: \"#AC6400\",\n attributes: {\n appearance: {\n dark: {\n value: \"#B36800\"\n }\n }\n }\n};\nexport const ChartsCategorical08Stroke = {\n value: \"transparent\",\n attributes: {\n appearance: {\n dark: {\n value: \"transparent\"\n }\n }\n }\n};\nexport const ChartsCategorical08Pattern = { value: \"solid\" };\nexport const ChartsCategorical09Color = {\n value: \"#EB7200\",\n attributes: {\n appearance: {\n dark: {\n value: \"#FFA037\"\n }\n }\n }\n};\nexport const ChartsCategorical09Stroke = {\n value: \"transparent\",\n attributes: {\n appearance: {\n dark: {\n value: \"transparent\"\n }\n }\n }\n};\nexport const ChartsCategorical09Pattern = { value: \"solid\" };\nexport const ChartsStatusSuccessColor = {\n value: \"#007A4D\",\n attributes: {\n appearance: {\n dark: {\n value: \"#49CC93\"\n }\n }\n }\n};\nexport const ChartsStatusSuccessStroke = {\n value: \"transparent\",\n attributes: {\n appearance: {\n dark: {\n value: \"transparent\"\n }\n }\n }\n};\nexport const ChartsStatusSuccessPattern = { value: \"solid\" };\nexport const ChartsStatusWarningColor = {\n value: \"#ffbe00\",\n attributes: {\n appearance: {\n dark: {\n value: \"#ffe278\"\n }\n }\n }\n};\nexport const ChartsStatusWarningStroke = {\n value: \"transparent\",\n attributes: {\n appearance: {\n dark: {\n value: \"transparent\"\n }\n }\n }\n};\nexport const ChartsStatusWarningPattern = { value: \"solid\" };\nexport const ChartsStatusDangerColor = {\n value: \"#e13212\",\n attributes: {\n appearance: {\n dark: {\n value: \"#ff745f\"\n }\n }\n }\n};\nexport const ChartsStatusDangerStroke = {\n value: \"transparent\",\n attributes: {\n appearance: {\n dark: {\n value: \"transparent\"\n }\n }\n }\n};\nexport const ChartsStatusDangerPattern = { value: \"solid\" };\nexport const ChartsStatusNeutralColor = {\n value: \"#ffffff\",\n attributes: {\n appearance: {\n dark: {\n value: \"#141414\"\n }\n }\n }\n};\nexport const ChartsStatusNeutralStroke = {\n value: \"#8C9CA5\",\n attributes: {\n appearance: {\n dark: {\n value: \"#B4C1C8\"\n }\n }\n }\n};\nexport const ChartsStatusNeutralPattern = { value: \"striped\" };\nexport const FocusRingColor = {\n value: \"#0265DC\",\n attributes: {\n appearance: {\n dark: {\n value: \"#78BBFA\"\n }\n }\n }\n};\nexport const FocusRingColorDanger = {\n value: \"#e13212\",\n attributes: {\n appearance: {\n dark: {\n value: \"#ff745f\"\n }\n }\n }\n};\nexport const FocusRingWidth = { value: \"0.25rem\" };\nexport const ForegroundColor = {\n value: \"#141414\",\n attributes: {\n appearance: {\n dark: {\n value: \"#ffffff\"\n }\n }\n }\n};\nexport const ForegroundColorSubdued = {\n value: \"#737475\",\n attributes: {\n appearance: {\n dark: {\n value: \"#bcbcbd\"\n }\n }\n }\n};\nexport const ForegroundColorPrimary = {\n value: \"#0265DC\",\n attributes: {\n appearance: {\n dark: {\n value: \"#78BBFA\"\n }\n }\n }\n};\nexport const ForegroundColorDanger = {\n value: \"#e13212\",\n attributes: {\n appearance: {\n dark: {\n value: \"#ff745f\"\n }\n }\n }\n};\nexport const ForegroundColorInverted = {\n value: \"#ffffff\",\n attributes: {\n appearance: {\n dark: {\n value: \"#141414\"\n }\n }\n }\n};\nexport const ForegroundColorOnPrimary = {\n value: \"#ffffff\",\n attributes: {\n appearance: {\n dark: {\n value: \"#141414\"\n }\n }\n }\n};\nexport const ForegroundColorOnDanger = {\n value: \"#ffffff\",\n attributes: {\n appearance: {\n dark: {\n value: \"#141414\"\n }\n }\n }\n};\nexport const ForegroundColorOnDangerSubdued = {\n value: \"#bf2a00\",\n attributes: {\n appearance: {\n dark: {\n value: \"#ffffff\"\n }\n }\n }\n};\nexport const ForegroundColorOnWarning = {\n value: \"#141414\",\n attributes: {\n appearance: {\n dark: {\n value: \"#141414\"\n }\n }\n }\n};\nexport const ForegroundColorActivePrimary = {\n value: \"#004491\",\n attributes: {\n appearance: {\n dark: {\n value: \"#B5DEFF\"\n }\n }\n }\n};\nexport const ForegroundColorActiveDanger = {\n value: \"#bf2a00\",\n attributes: {\n appearance: {\n dark: {\n value: \"#ff745f\"\n }\n }\n }\n};\nexport const ForegroundColorHoverPrimary = {\n value: \"#004491\",\n attributes: {\n appearance: {\n dark: {\n value: \"#B5DEFF\"\n }\n }\n }\n};\nexport const ForegroundColorHoverDanger = {\n value: \"#bf2a00\",\n attributes: {\n appearance: {\n dark: {\n value: \"#ff745f\"\n }\n }\n }\n};\nexport const OverlayColorActive = {\n value: \"#14141429\",\n attributes: {\n appearance: {\n dark: {\n value: \"#ffffff29\"\n }\n }\n }\n};\nexport const OverlayColorActivePrimary = {\n value: \"#0265DC4D\",\n attributes: {\n appearance: {\n dark: {\n value: \"#78BBFA40\"\n }\n }\n }\n};\nexport const OverlayColorActiveDanger = {\n value: \"#e132124D\",\n attributes: {\n appearance: {\n dark: {\n value: \"#f94d3240\"\n }\n }\n }\n};\nexport const OverlayColorActiveOn = {\n value: \"#14141429\",\n attributes: {\n appearance: {\n dark: {\n value: \"#14141429\"\n }\n }\n }\n};\nexport const OverlayColorActiveOnPrimary = {\n value: \"#14141466\",\n attributes: {\n appearance: {\n dark: {\n value: \"#14141429\"\n }\n }\n }\n};\nexport const OverlayColorActiveOnDanger = {\n value: \"#14141466\",\n attributes: {\n appearance: {\n dark: {\n value: \"#14141429\"\n }\n }\n }\n};\nexport const OverlayColorHover = {\n value: \"#14141414\",\n attributes: {\n appearance: {\n dark: {\n value: \"#ffffff14\"\n }\n }\n }\n};\nexport const OverlayColorHoverPrimary = {\n value: \"#0265DC1A\",\n attributes: {\n appearance: {\n dark: {\n value: \"#78BBFA1A\"\n }\n }\n }\n};\nexport const OverlayColorHoverDanger = {\n value: \"#e132121A\",\n attributes: {\n appearance: {\n dark: {\n value: \"#f94d3226\"\n }\n }\n }\n};\nexport const OverlayColorHoverOn = {\n value: \"#14141414\",\n attributes: {\n appearance: {\n dark: {\n value: \"#ffffff14\"\n }\n }\n }\n};\nexport const OverlayColorHoverOnPrimary = {\n value: \"#14141433\",\n attributes: {\n appearance: {\n dark: {\n value: \"#ffffff29\"\n }\n }\n }\n};\nexport const OverlayColorHoverOnDanger = {\n value: \"#14141433\",\n attributes: {\n appearance: {\n dark: {\n value: \"#ffffff29\"\n }\n }\n }\n};\nexport const ShadowColor = {\n value: \"#14141414\",\n attributes: {\n appearance: {\n dark: {\n value: \"#ffffff14\"\n }\n }\n }\n};\nexport const ShadowSizeFlat = { value: \"0rem 0rem 0rem\" };\nexport const ShadowSizeFloat = { value: \"0rem 0.125rem 0.5rem\" };\nexport const ShadowSizeOverlay = { value: \"0rem 0.5rem 1.5rem\" };\nexport const StatusColorInfo = {\n value: \"#0265DC\",\n attributes: {\n appearance: {\n dark: {\n value: \"#78BBFA\"\n }\n }\n }\n};\nexport const StatusColorDanger = {\n value: \"#e13212\",\n attributes: {\n appearance: {\n dark: {\n value: \"#ff745f\"\n }\n }\n }\n};\nexport const StatusColorSuccess = {\n value: \"#007A4D\",\n attributes: {\n appearance: {\n dark: {\n value: \"#49CC93\"\n }\n }\n }\n};\nexport const StatusColorWarning = {\n value: \"#ffbe00\",\n attributes: {\n appearance: {\n dark: {\n value: \"#ffe278\"\n }\n }\n }\n};\nexport const TypographyParagraphSizeXsmall = { value: \"0.75rem\" };\nexport const TypographyParagraphSizeSmall = { value: \"0.875rem\" };\nexport const TypographyParagraphSize = { value: \"1rem\" };\nexport const TypographyParagraphSizeLarge = { value: \"1.25rem\" };\nexport const TypographyParagraphSizeXlarge = { value: \"1.5rem\" };\nexport const TypographyParagraphFontWeight = { value: \"400\" };\nexport const TypographyParagraphFontFamily = { value: \"'Nunito Sans', sans-serif\" };\nexport const TypographyHeadingSizeXsmall = { value: \"0.875rem\" };\nexport const TypographyHeadingSizeSmall = { value: \"1rem\" };\nexport const TypographyHeadingSize = { value: \"1.25rem\" };\nexport const TypographyHeadingSizeLarge = { value: \"1.5rem\" };\nexport const TypographyHeadingSizeXlarge = { value: \"2rem\" };\nexport const TypographyHeadingFontWeight = { value: \"700\" };\nexport const TypographyHeadingFontFamily = { value: \"'Sofia Pro', SofiaPro, sans-serif\" };\nexport const TypographyLabelSizeXsmall = { value: \"0.625rem\" };\nexport const TypographyLabelSizeSmall = { value: \"0.75rem\" };\nexport const TypographyLabelSize = { value: \"0.875rem\" };\nexport const TypographyLabelSizeLarge = { value: \"1rem\" };\nexport const TypographyLabelSizeXlarge = { value: \"1.25rem\" };\nexport const TypographyLabelFontWeight = { value: \"600\" };\nexport const TypographyLabelFontFamily = { value: \"'Nunito Sans', sans-serif\" };","import { core } from '@servicetitan/hammer-token';\nimport * as am5 from '@amcharts/amcharts5';\nimport * as am5xy from '@amcharts/amcharts5/xy';\n\nconst initAmCharts = (secret) => {\n am5.addLicense(`AM5CH2${parseInt(secret, secret.length ^ 30)}`);\n};\n\ninitAmCharts(\"5C176KN48\");\nconst createTheme = ({\n fills: fillValues,\n strokes: strokeValues,\n fillPatterns: fillPatternTypes,\n colorOrder\n}) => {\n class ThemeCustom extends am5.Theme {\n constructor(root, isReal) {\n super(root, isReal);\n }\n setupDefaultRules() {\n super.setupDefaultRules();\n const fills = fillValues.map((fill) => am5.color(fill));\n const strokes = strokeValues.map(\n (stroke, i2) => stroke == null || stroke === \"transparent\" ? am5.color(fillValues[i2]) : am5.color(stroke)\n );\n const fillPatterns = fillPatternTypes.map(\n (fillPatternType, i2) => fillPatternType === \"solid\" ? void 0 : am5.LinePattern.new(this._root, {\n rotation: -45,\n color: am5.color(strokeValues[i2] ?? fillValues[i2]),\n width: 99,\n height: 99\n })\n );\n this.rule(\"ColorSet\").setAll({\n colors: [...fills],\n // this mutates the array if we don't clone it o.o\n reuse: true\n });\n const tempEl = document.createElement(\"div\");\n tempEl.style.color = \"var(--foreground-color, #141414)\";\n this._root.dom.appendChild(tempEl);\n const computedColor = getComputedStyle(tempEl).color;\n tempEl.remove();\n const rgbMatch = computedColor.match(/\\d+/g);\n const foregroundColor = rgbMatch && rgbMatch.length >= 3 ? \"#\" + rgbMatch.slice(0, 3).map((n) => parseInt(n).toString(16).padStart(2, \"0\")).join(\"\") : \"#141414\";\n this.rule(\"Label\").setAll({\n fontFamily: \"Nunito Sans\",\n fill: am5.color(foregroundColor)\n });\n this.rule(\"Grid\").setAll({\n stroke: am5.color(foregroundColor),\n strokeOpacity: 0.15\n });\n this.rule(\"Legend\").setAll({\n clickTarget: \"none\"\n });\n const createTooltip = () => {\n const tooltip = am5.Tooltip.new(this._root, {\n getFillFromSprite: false,\n autoTextColor: false\n });\n tooltip.get(\"background\")?.setAll({\n fill: am5.color(\"#141414\"),\n fillOpacity: 1,\n strokeOpacity: 0\n });\n tooltip.label.setAll({\n fill: am5.color(\"#FFFFFF\"),\n fontWeight: \"600\"\n });\n return tooltip;\n };\n this.rule(\"PieChart\").setup = (target) => {\n target.set(\"tooltip\", createTooltip());\n };\n this.rule(\"PieSeries\").setup = (target) => {\n target.set(\"alignLabels\", false);\n target.ticks.template.set(\"visible\", false);\n };\n this.rule(\"RadialLabel\", [\"pie\", \"series\"]).setup = (target) => {\n target.set(\"fill\", am5.color(\"#141414\"));\n target.set(\"fontWeight\", \"600\");\n target.set(\"baseRadius\", am5.percent(65));\n target.set(\"x\", am5.p50);\n target.set(\"centerX\", am5.p50);\n target.set(\"y\", am5.p50);\n target.set(\"centerY\", am5.p50);\n target.set(\"inside\", true);\n target.set(\n \"background\",\n am5.RoundedRectangle.new(this._root, {\n fill: am5.color(\"#FFFFFF\"),\n fillOpacity: 0.8,\n cornerRadiusTL: 100,\n cornerRadiusTR: 100,\n cornerRadiusBL: 100,\n cornerRadiusBR: 100\n })\n );\n };\n let i = 0;\n this.rule(\"Slice\").setup = (target) => {\n target.set(\"shiftRadius\", 4);\n target.set(\"stroke\", strokes[i] ?? fills[i]);\n target.set(\"fillPattern\", fillPatterns[i]);\n target.set(\"cursorOverStyle\", \"pointer\");\n i += 1;\n if (i == fills.length) i = 0;\n };\n this.rule(\"Slice\").events.on(\"pointerover\", ({ target: slice }) => {\n const parent = slice?.parent;\n parent?.eachChildren((child) => {\n if (child !== slice && child instanceof am5.Slice) {\n child.set(\"opacity\", 0.2);\n }\n });\n });\n this.rule(\"Slice\").events.on(\"pointerout\", ({ target: slice }) => {\n const parent = slice?.parent;\n parent?.eachChildren((child) => {\n if (child !== slice && child instanceof am5.Slice) {\n child.set(\"opacity\", 1);\n }\n });\n });\n const getReorderedColorIndex = colorOrder ? (idx) => colorOrder[idx % colorOrder.length] : void 0;\n const getSeriesReorderIndex = getReorderedColorIndex ? (target) => {\n const chart = target.chart;\n if (!chart) return void 0;\n const allColumnSeries = chart.series.values.filter(\n (s) => s instanceof am5xy.ColumnSeries\n );\n if (allColumnSeries.length < 4) return void 0;\n const idx = allColumnSeries.indexOf(target);\n return idx >= 0 ? getReorderedColorIndex(idx) : void 0;\n } : void 0;\n if (colorOrder && getReorderedColorIndex && getSeriesReorderIndex) {\n const getSliceReorderIndex = (target) => {\n const series = target.dataItem?.component;\n if (!series || series.dataItems.length < 4) return void 0;\n const idx = target.dataItem ? series.dataItems.indexOf(target.dataItem) : -1;\n return idx >= 0 ? getReorderedColorIndex(idx) : void 0;\n };\n this.rule(\"Slice\").adapters.add(\"fill\", (fill, target) => {\n const ci = getSliceReorderIndex(target);\n return ci != null ? fills[ci] : fill;\n });\n this.rule(\"Slice\").adapters.add(\"stroke\", (stroke, target) => {\n const ci = getSliceReorderIndex(target);\n return ci != null ? strokes[ci] ?? fills[ci] : stroke;\n });\n this.rule(\"Slice\").adapters.add(\"fillPattern\", (pattern, target) => {\n const ci = getSliceReorderIndex(target);\n return ci != null ? fillPatterns[ci] : pattern;\n });\n this.rule(\"ColumnSeries\").adapters.add(\"fill\", (fill, target) => {\n const ci = getSeriesReorderIndex(target);\n return ci != null ? fills[ci] : fill;\n });\n this.rule(\"ColumnSeries\").adapters.add(\"stroke\", (stroke, target) => {\n const ci = getSeriesReorderIndex(target);\n return ci != null ? strokes[ci] ?? fills[ci] : stroke;\n });\n this.rule(\"ColumnSeries\").adapters.add(\n \"fillPattern\",\n (pattern, target) => {\n const ci = getSeriesReorderIndex(target);\n return ci != null ? fillPatterns[ci] : pattern;\n }\n );\n }\n this.rule(\"AxisRendererX\").setup = (target) => {\n target.setAll({\n stroke: am5.color(foregroundColor)\n });\n target.labels.template.setAll({\n centerY: am5.p100,\n centerX: am5.p50,\n paddingTop: 16,\n paddingBottom: 16\n });\n };\n this.rule(\"AxisRendererY\").setup = (target) => {\n target.setAll({\n stroke: am5.color(foregroundColor)\n });\n target.labels.template.setAll({\n centerY: am5.p50,\n centerX: am5.p100,\n paddingLeft: 16,\n paddingRight: 16\n });\n };\n let j = 0;\n this.rule(\"ColumnSeries\").setup = (target) => {\n target.set(\"fill\", fills[j]);\n target.set(\"stroke\", strokes[j] ?? fills[j]);\n target.set(\"fillPattern\", fillPatterns[j]);\n if (getSeriesReorderIndex) {\n target.columns.template.adapters.add(\"fill\", (fill) => {\n const ci = getSeriesReorderIndex(target);\n return ci != null ? fills[ci] : fill;\n });\n target.columns.template.adapters.add(\"stroke\", (stroke) => {\n const ci = getSeriesReorderIndex(target);\n return ci != null ? strokes[ci] ?? fills[ci] : stroke;\n });\n target.columns.template.adapters.add(\"fillPattern\", (pattern) => {\n const ci = getSeriesReorderIndex(target);\n return ci != null ? fillPatterns[ci] : pattern;\n });\n }\n const isHorizontal = target.get(\"categoryYField\") || target.get(\"valueXField\");\n if (isHorizontal) {\n target.columns.template.setAll({\n cursorOverStyle: \"pointer\",\n maxHeight: 32,\n cornerRadiusTR: 4,\n cornerRadiusBR: 4\n });\n } else {\n target.columns.template.setAll({\n cursorOverStyle: \"pointer\",\n maxWidth: 32,\n cornerRadiusTL: 4,\n cornerRadiusTR: 4\n });\n }\n if (target.get(\"stacked\")) {\n const parent = target?.parent;\n parent?.eachChildren((child) => {\n if (target !== child && child instanceof am5xy.ColumnSeries) {\n child.columns.template.setAll({\n cornerRadiusTL: 0,\n cornerRadiusTR: 0,\n cornerRadiusBR: 0\n });\n }\n });\n if (j !== 0) {\n let timeout;\n target.columns.template.onPrivate(\"height\", () => {\n if (timeout) clearTimeout(timeout);\n timeout = setTimeout(function() {\n target.columns.each((column) => {\n const height = column.getPrivate(\"height\");\n if (height && height >= 5) {\n column.set(\"maxHeight\", height - 4);\n } else {\n column.set(\"maxHeight\", void 0);\n }\n });\n }, 50);\n });\n }\n }\n target.set(\"tooltip\", createTooltip());\n target.columns.template.events.on(\n \"pointerover\",\n ({ target: column }) => {\n const series = column.dataItem?.component;\n const chart = series?.chart;\n if (!chart) return;\n chart.series.each((s) => {\n if (s instanceof am5xy.ColumnSeries) {\n s.columns.each((col) => {\n if (col !== column) {\n col.set(\"opacity\", 0.2);\n }\n });\n }\n });\n }\n );\n target.columns.template.events.on(\n \"pointerout\",\n ({ target: column }) => {\n const series = column.dataItem?.component;\n const chart = series?.chart;\n if (!chart) return;\n chart.series.each((s) => {\n if (s instanceof am5xy.ColumnSeries) {\n s.columns.each((col) => {\n if (col !== column) {\n col.set(\"opacity\", 1);\n }\n });\n }\n });\n }\n );\n j += 1;\n if (j == fills.length) j = 0;\n };\n }\n }\n return ThemeCustom;\n};\n\nconst allMonochromeChartTokens = Object.keys(core.semantic).filter(\n (key) => key.indexOf(\"ChartsMonochrome\") !== -1\n);\nconst colors$2 = allMonochromeChartTokens.filter((key) => key.indexOf(\"Color\") !== -1).map((key) => core.semantic[key].value);\nconst strokes$2 = allMonochromeChartTokens.filter((key) => key.indexOf(\"Stroke\") !== -1).map((key) => core.semantic[key].value);\nconst patterns$2 = allMonochromeChartTokens.filter((key) => key.indexOf(\"Pattern\") !== -1).map((key) => core.semantic[key].value);\nconst ThemeMonochrome = createTheme({\n fills: colors$2,\n strokes: strokes$2,\n fillPatterns: patterns$2,\n colorOrder: [3, 0, 1, 2]\n});\n\nconst allCategoricalChartTokens = Object.keys(core.semantic).filter(\n (key) => key.indexOf(\"ChartsCategorical\") !== -1\n);\nconst colors$1 = allCategoricalChartTokens.filter((key) => key.indexOf(\"Color\") !== -1).map((key) => core.semantic[key].value);\nconst strokes$1 = allCategoricalChartTokens.filter((key) => key.indexOf(\"Stroke\") !== -1).map((key) => core.semantic[key].value);\nconst patterns$1 = allCategoricalChartTokens.filter((key) => key.indexOf(\"Pattern\") !== -1).map((key) => core.semantic[key].value);\nconst ThemeCategorical = createTheme({\n fills: colors$1,\n strokes: strokes$1,\n fillPatterns: patterns$1\n});\n\nconst allSemanticChartTokens = Object.keys(core.semantic).filter(\n (key) => key.indexOf(\"ChartsStatus\") !== -1\n);\nallSemanticChartTokens.sort((a, b) => {\n if (a.indexOf(\"Success\") !== -1) {\n return -1;\n }\n if (b.indexOf(\"Success\") !== -1) {\n return 1;\n }\n if (a.indexOf(\"Neutral\") !== -1) {\n return -1;\n }\n if (b.indexOf(\"Neutral\") !== -1) {\n return 1;\n }\n if (a.indexOf(\"Warning\") !== -1) {\n return -1;\n }\n if (b.indexOf(\"Warning\") !== -1) {\n return 1;\n }\n return 0;\n});\nconst colors = allSemanticChartTokens.filter((key) => key.indexOf(\"Color\") !== -1).map((key) => core.semantic[key].value);\nconst strokes = allSemanticChartTokens.filter((key) => key.indexOf(\"Stroke\") !== -1).map((key) => core.semantic[key].value);\nconst patterns = allSemanticChartTokens.filter((key) => key.indexOf(\"Pattern\") !== -1).map((key) => core.semantic[key].value);\nconst ThemeSemantic = createTheme({\n fills: colors,\n strokes,\n fillPatterns: patterns\n});\n\nexport { ThemeMonochrome as T, ThemeCategorical as a, ThemeSemantic as b };\n//# sourceMappingURL=ThemeSemantic-Ca1fMNCy.js.map\n","import type * as am5 from \"@amcharts/amcharts5\";\nimport am5themes_Animated from \"@amcharts/amcharts5/themes/Animated\";\nimport {\n ThemeCategorical,\n ThemeMonochrome,\n ThemeSemantic,\n} from \"@servicetitan/anvil2-ext-charts/am5\";\n\nexport function applyChartTheme(root: am5.Root, theme: string = \"monochrome\") {\n const themeMap: Record<string, typeof am5.Theme> = {\n monochrome: ThemeMonochrome,\n categorical: ThemeCategorical,\n semantic: ThemeSemantic,\n };\n const T = themeMap[theme] ?? ThemeMonochrome;\n root.setThemes([am5themes_Animated.new(root), T.new(root)]);\n}\n","import * as am5 from \"@amcharts/amcharts5\";\nimport * as am5xy from \"@amcharts/amcharts5/xy\";\nimport { useEffect, useRef } from \"react\";\nimport type { z } from \"zod\";\n\nimport { barChartCatalog } from \"./bar-chart.catalog\";\n\nimport { applyChartTheme } from \"./chart-utils\";\n\nexport { barChartCatalog };\n\nexport const BarChartRenderer = ({ props }: { props: z.infer<typeof barChartCatalog.props> }) => {\n const divRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const el = divRef.current;\n if (!el) {\n return;\n }\n\n let root: am5.Root | undefined;\n\n const init = () => {\n if (root) {\n root.dispose();\n }\n root = am5.Root.new(el);\n applyChartTheme(root, props.theme);\n const chart = root.container.children.push(am5xy.XYChart.new(root, { paddingLeft: 0 }));\n\n if (props.orientation === \"horizontal\") {\n const yAxis = chart.yAxes.push(\n am5xy.CategoryAxis.new(root, {\n categoryField: \"category\",\n renderer: am5xy.AxisRendererY.new(root, { minGridDistance: 20 }),\n }),\n );\n const xAxis = chart.xAxes.push(\n am5xy.ValueAxis.new(root, {\n renderer: am5xy.AxisRendererX.new(root, {}),\n }),\n );\n const series = chart.series.push(\n am5xy.ColumnSeries.new(root, {\n xAxis,\n yAxis,\n valueXField: \"value\",\n categoryYField: \"category\",\n }),\n );\n series.columns.template.setAll({\n tooltipText: `{categoryY}: ${props.unit ?? \"\"}{valueX}`,\n });\n yAxis.data.setAll(props.data);\n series.data.setAll(props.data);\n } else {\n const xAxis = chart.xAxes.push(\n am5xy.CategoryAxis.new(root, {\n categoryField: \"category\",\n renderer: am5xy.AxisRendererX.new(root, { minGridDistance: 30 }),\n }),\n );\n const yAxis = chart.yAxes.push(\n am5xy.ValueAxis.new(root, {\n renderer: am5xy.AxisRendererY.new(root, {}),\n }),\n );\n const series = chart.series.push(\n am5xy.ColumnSeries.new(root, {\n xAxis,\n yAxis,\n valueYField: \"value\",\n categoryXField: \"category\",\n }),\n );\n series.columns.template.setAll({\n tooltipText: `{categoryX}: ${props.unit ?? \"\"}{valueY}`,\n });\n xAxis.data.setAll(props.data);\n series.data.setAll(props.data);\n }\n };\n\n // Defer init until the element has a real width\n const observer = new ResizeObserver((entries) => {\n const width = entries[0]?.contentRect.width ?? 0;\n if (width > 0 && !root) {\n init();\n }\n });\n observer.observe(el);\n\n // Also try immediately in case it's already laid out\n if (el.offsetWidth > 0) {\n init();\n }\n\n return () => {\n observer.disconnect();\n root?.dispose();\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n return <div ref={divRef} style={{ width: \"100%\", height: props.height ?? 300 }} />;\n};\n","import { z } from \"zod\";\n\nexport const buttonCatalog = {\n props: z.object({\n label: z.string(),\n appearance: z.enum([\"primary\", \"secondary\", \"ghost\"]).optional(),\n size: z.enum([\"xsmall\", \"small\", \"medium\", \"large\"]).optional(),\n loading: z.boolean().optional(),\n disabled: z.boolean().optional(),\n }),\n slots: [],\n description:\n \"Clickable button. Every button automatically submits form data when pressed — the element key is used as the actionId to identify which button was clicked. loading: true shows a spinner. disabled: true prevents interaction. size: xsmall | small | medium (default) | large.\",\n};\n","import { Button } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { definedProps } from \"../../utils/defined-props\";\nimport { buttonCatalog } from \"./button.catalog\";\n\nexport { buttonCatalog };\n\nexport const ButtonRenderer = ({\n props,\n emit,\n}: {\n props: z.infer<typeof buttonCatalog.props>;\n emit: (event: string) => void;\n}) => (\n <Button\n appearance={props.appearance ?? \"secondary\"}\n {...definedProps({\n size: props.size,\n loading: props.loading,\n disabled: props.disabled,\n })}\n onClick={() => emit(\"press\")}\n >\n {props.label}\n </Button>\n);\n","import { z } from \"zod\";\n\nexport const cardCatalog = {\n props: z.object({\n background: z.enum([\"strong\", \"stronger\"]).optional(),\n padding: z.enum([\"0\", \"xsmall\", \"small\", \"medium\", \"large\"]).optional(),\n }),\n slots: [\"default\"],\n description:\n \"White surface with padding; groups related content. background: strong | stronger for elevated surfaces. padding: 0 | xsmall | small | medium (default) | large.\",\n};\n","import { Card } from \"@servicetitan/anvil2\";\nimport type { ReactNode } from \"react\";\nimport type { z } from \"zod\";\n\nimport { definedProps } from \"../../utils/defined-props\";\nimport { cardCatalog } from \"./card.catalog\";\n\nexport { cardCatalog };\n\nexport const CardRenderer = ({\n props,\n children,\n}: {\n props: z.infer<typeof cardCatalog.props>;\n children?: ReactNode;\n}) => (\n <Card {...definedProps({ background: props.background, padding: props.padding })}>\n {children}\n </Card>\n);\n","import { z } from \"zod\";\n\nexport const checkboxCatalog = {\n props: z.object({\n label: z.string(),\n checked: z.boolean().optional(),\n disabled: z.boolean().optional(),\n }),\n slots: [],\n description: \"Checkbox input with label. Use $bindState on checked to track state.\",\n};\n","import { z } from \"zod\";\n\nexport const chipCatalog = {\n props: z.object({\n label: z.string(),\n size: z.enum([\"small\", \"medium\"]).optional(),\n color: z.string().optional(),\n icon: z.enum([\"check-circle\", \"in-progress\", \"radio-button-unchecked\"]).optional(),\n removable: z.boolean().optional(),\n }),\n slots: [],\n description:\n \"Inline label pill for metadata, tags, or categories — use for job statuses, not notification counts (use Badge for those). size: small | medium (default). color: any CSS color. icon: optional leading icon. removable: true adds a close button (not available for size=small).\",\n};\n","import { z } from \"zod\";\n\nexport const dividerCatalog = {\n props: z.object({\n vertical: z.boolean().optional(),\n spacing: z.enum([\"0\", \"half\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"8\", \"12\"]).optional(),\n alignContent: z.enum([\"start\", \"center\", \"end\"]).optional(),\n }),\n slots: [],\n description:\n \"Divider between sections. vertical: true for vertical separator. spacing: gap around the divider. alignContent: alignment of content within the divider.\",\n};\n","import { z } from \"zod\";\n\nexport const donutChartCatalog = {\n props: z.object({\n data: z.array(z.object({ category: z.string(), value: z.number() })),\n theme: z.enum([\"monochrome\", \"categorical\", \"semantic\"]).optional(),\n showLegend: z.boolean().optional(),\n height: z.number().optional(),\n unit: z.string().optional(),\n }),\n slots: [],\n description:\n \"Donut chart with optional legend and Anvil2 theme. data: [{category, value}]. theme: monochrome (≤4 vars), categorical (5-9 distinct), semantic (status values).\",\n};\n","import { z } from \"zod\";\n\nexport const flexCatalog = {\n props: z.object({\n direction: z.enum([\"row\", \"column\"]).optional(),\n gap: z.enum([\"1\", \"2\", \"3\", \"4\", \"5\", \"6\"]).optional(),\n alignItems: z.enum([\"center\", \"flex-start\", \"flex-end\", \"stretch\", \"baseline\"]).optional(),\n justifyContent: z\n .enum([\"center\", \"flex-start\", \"flex-end\", \"space-between\", \"space-around\", \"space-evenly\"])\n .optional(),\n wrap: z.enum([\"wrap\", \"nowrap\", \"wrap-reverse\"]).optional(),\n grow: z.number().optional(),\n shrink: z.number().optional(),\n inline: z.boolean().optional(),\n }),\n slots: [\"default\"],\n description:\n \"Flex layout container. gap: 1=4px 2=8px 3=12px 4=16px 5=20px 6=24px. grow: 1=fill available width. alignItems: vertical alignment. justifyContent: horizontal distribution.\",\n};\n","import { z } from \"zod\";\n\nexport const gridCatalog = {\n props: z.object({\n templateColumns: z.string().optional(),\n gap: z.enum([\"1\", \"2\", \"3\", \"4\", \"5\", \"6\"]).optional(),\n bordered: z.boolean().optional(),\n }),\n slots: [\"default\"],\n description:\n 'CSS Grid layout. templateColumns: CSS grid-template-columns value — \"repeat(3, 1fr)\" for equal columns, \"200px 1fr\" for fixed+flex two-column (e.g. key-value tables), \"1fr 1fr 80px\" for multi-column tables. Children flow into grid cells left-to-right, top-to-bottom. gap: 1=4px … 6=24px. bordered: true renders a bordered table with row separators and cell padding — use for key-value and data tables.',\n};\n","import { z } from \"zod\";\n\nexport const iconCatalog = {\n props: z.object({\n name: z.enum([\"check-circle\", \"in-progress\", \"radio-button-unchecked\"]),\n size: z.enum([\"small\", \"medium\", \"large\", \"xlarge\"]).optional(),\n color: z.string().optional(),\n }),\n slots: [],\n description:\n \"Anvil2 icon. name: check-circle=completed checkmark, in-progress=spinning partial circle, radio-button-unchecked=empty circle (pending)\",\n};\n","import { z } from \"zod\";\n\nexport const inputCatalog = {\n props: z.object({\n label: z.string(),\n placeholder: z.string().optional(),\n type: z.enum([\"text\", \"password\", \"email\", \"tel\", \"url\", \"number\"]).optional(),\n value: z.string().optional(),\n disabled: z.boolean().optional(),\n }),\n slots: [],\n description:\n \"Free-text input field for user-typed values (names, notes, numbers, etc). type: text (default), password (masked), email, tel (phone), url, number. Use $bindState on value to bind to state. Prefer this over Select when the value is not from a fixed list.\",\n};\n","import { z } from \"zod\";\n\nexport const lineChartCatalog = {\n props: z.object({\n data: z.array(z.record(z.string(), z.union([z.string(), z.number()]))),\n series: z.array(z.string()).optional(),\n theme: z.enum([\"monochrome\", \"categorical\", \"semantic\"]).optional(),\n showLegend: z.boolean().optional(),\n showDots: z.boolean().optional(),\n height: z.number().optional(),\n unit: z.string().optional(),\n }),\n slots: [],\n description:\n 'Line chart for tracking trends over time with optional multiple series. data: array of objects with a \"category\" key (x-axis label) and one numeric key per series (e.g. [{category: \"Jan\", revenue: 100, cost: 60}]). series: explicit list of series keys to plot (inferred from data keys if omitted, max 6). theme: monochrome (1-2 series), categorical (3-6 distinct). showLegend: true when multiple series (default true for 2+ series). showDots: true adds data-point markers (default true). unit: tooltip value suffix.',\n};\n","import { z } from \"zod\";\n\nexport const linkCatalog = {\n props: z.object({\n label: z.string(),\n href: z.string(),\n appearance: z.enum([\"primary\", \"secondary\"]).optional(),\n target: z.enum([\"_blank\", \"_self\"]).optional(),\n ghost: z.boolean().optional(),\n }),\n slots: [],\n description:\n \"Inline navigation link. href: destination URL. appearance: primary (default) | secondary. target: _blank opens in new tab (shows external-link icon). ghost: quieter styling (primary only).\",\n};\n","import { z } from \"zod\";\n\nexport const listboxCatalog = {\n props: z.object({\n label: z.string(),\n options: z.array(z.object({ value: z.string(), label: z.string() })),\n value: z.string().optional(),\n disabled: z.boolean().optional(),\n }),\n slots: [],\n description:\n \"Listbox for choosing from a fixed list of known options. Use only when options are predefined. For free-text user input use Input instead.\",\n};\n","import { z } from \"zod\";\n\nexport const progressBarCatalog = {\n props: z.object({\n label: z.string(),\n value: z.number().min(0).max(100).optional(),\n description: z.string().optional(),\n indeterminate: z.boolean().optional(),\n }),\n slots: [],\n description:\n \"Progress bar showing task completion. value: 0–100 (percentage). Omit value and set indeterminate=true for unknown progress.\",\n};\n","import { z } from \"zod\";\n\nexport const radioGroupCatalog = {\n props: z.object({\n label: z.string(),\n options: z.array(z.object({ value: z.string(), label: z.string() })),\n value: z.string().optional(),\n disabled: z.boolean().optional(),\n }),\n slots: [],\n description:\n \"Group of radio buttons for single selection. Use $bindState on value to capture selection.\",\n};\n","import { z } from \"zod\";\n\nexport const switchCatalog = {\n props: z.object({\n label: z.string(),\n checked: z.boolean().optional(),\n disabled: z.boolean().optional(),\n }),\n slots: [],\n description:\n \"Toggle switch for binary on/off settings. Prefer over Checkbox for enabling/disabling features. Use $bindState on checked to track state.\",\n};\n","import { z } from \"zod\";\n\nexport const textCatalog = {\n props: z.object({\n content: z.string(),\n variant: z.enum([\"headline\", \"body\", \"eyebrow\"]).optional(),\n size: z.enum([\"small\", \"medium\", \"large\", \"xlarge\"]).optional(),\n subdued: z.boolean().optional(),\n el: z.enum([\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"]).optional(),\n }),\n slots: [],\n description:\n \"Display text. variant: headline=bold title, eyebrow=small label, body=default. size: small/medium/large/xlarge (headline and body only). subdued: deemphasized body text. el: heading element for variant=headline (default h3).\",\n};\n","import { alertCatalog } from \"./alert.catalog\";\nimport { badgeCatalog } from \"./badge.catalog\";\nimport { barChartCatalog } from \"./bar-chart.catalog\";\nimport { buttonCatalog } from \"./button.catalog\";\nimport { cardCatalog } from \"./card.catalog\";\nimport { checkboxCatalog } from \"./checkbox.catalog\";\nimport { chipCatalog } from \"./chip.catalog\";\nimport { dividerCatalog } from \"./divider.catalog\";\nimport { donutChartCatalog } from \"./donut-chart.catalog\";\nimport { flexCatalog } from \"./flex.catalog\";\nimport { gridCatalog } from \"./grid.catalog\";\nimport { iconCatalog } from \"./icon.catalog\";\nimport { inputCatalog } from \"./input.catalog\";\nimport { lineChartCatalog } from \"./line-chart.catalog\";\nimport { linkCatalog } from \"./link.catalog\";\nimport { listboxCatalog } from \"./listbox.catalog\";\nimport { progressBarCatalog } from \"./progress-bar.catalog\";\nimport { radioGroupCatalog } from \"./radio-group.catalog\";\nimport { switchCatalog } from \"./switch.catalog\";\nimport { textCatalog } from \"./text.catalog\";\n\nexport const baseComponents = {\n Text: textCatalog,\n Card: cardCatalog,\n Flex: flexCatalog,\n Grid: gridCatalog,\n Alert: alertCatalog,\n Divider: dividerCatalog,\n Icon: iconCatalog,\n Badge: badgeCatalog,\n Chip: chipCatalog,\n Link: linkCatalog,\n ProgressBar: progressBarCatalog,\n BarChart: barChartCatalog,\n DonutChart: donutChartCatalog,\n LineChart: lineChartCatalog,\n Button: buttonCatalog,\n Checkbox: checkboxCatalog,\n Input: inputCatalog,\n Listbox: listboxCatalog,\n RadioGroup: radioGroupCatalog,\n Switch: switchCatalog,\n};\n","import { defineCatalog } from \"@json-render/core\";\nimport { schema } from \"@json-render/react/schema\";\n\nimport { actionsCatalog } from \"../actions\";\n\nimport { baseComponents } from \"./schemas\";\n\nexport { baseComponents };\n\nexport const catalog = defineCatalog(schema, {\n components: baseComponents,\n actions: actionsCatalog,\n});\n","import { getByPath } from \"@json-render/core\";\nimport { useStateStore } from \"@json-render/react\";\nimport { Checkbox } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { checkboxCatalog } from \"./checkbox.catalog\";\n\nexport { checkboxCatalog };\n\nexport const CheckboxRenderer = ({\n props,\n bindings,\n emit,\n}: {\n props: z.infer<typeof checkboxCatalog.props>;\n bindings?: Record<string, string>;\n emit: (event: string) => void;\n}) => {\n const bindingPath = bindings?.checked;\n const { state, set } = useStateStore();\n const stateChecked = bindingPath\n ? (getByPath(state, bindingPath) as boolean | undefined)\n : undefined;\n const checked = bindingPath ? (stateChecked ?? props.checked ?? false) : (props.checked ?? false);\n\n return (\n <Checkbox\n label={props.label}\n checked={checked}\n onClick={(_e, state) => {\n if (bindingPath) {\n set(bindingPath, !(state?.checked ?? false));\n }\n emit(\"change\");\n }}\n />\n );\n};\n","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%3e%3cpath%20d='M12%202C6.48%202%202%206.48%202%2012s4.48%2010%2010%2010%2010-4.48%2010-10S17.52%202%2012%202zM9.29%2016.29%205.7%2012.7a.996.996%200%201%201%201.41-1.41L10%2014.17l6.88-6.88a.996.996%200%201%201%201.41%201.41l-7.59%207.59a.996.996%200%200%201-1.41%200z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%3e%3cpath%20d='M12%202C6.48%202%202%206.48%202%2012s4.48%2010%2010%2010%2010-4.48%2010-10S17.52%202%2012%202zm0%2018c-4.42%200-8-3.58-8-8s3.58-8%208-8%208%203.58%208%208-3.58%208-8%208z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%3e%3cpath%20d='M11.996%2018.043q2.52%200%204.284-1.764%201.764-1.763%201.764-4.283T16.28%207.712c-.991-.991-2.167-1.57-3.528-1.722a.674.674%200%200%200-.756.664v5.342l-3.771%203.771a.67.67%200%200%200%20.075%201.008q.643.482%201.386.798c.731.31%201.495.47%202.302.47zm0%204.032a10%2010%200%200%201-3.93-.79%2010.2%2010.2%200%200%201-3.2-2.158%2010.2%2010.2%200%200%201-2.151-3.2c-.53-1.227-.79-2.537-.79-3.931s.26-2.705.79-3.931a10.3%2010.3%200%200%201%202.15-3.2%2010.2%2010.2%200%200%201%203.2-2.15c1.227-.53%202.537-.79%203.931-.79s2.705.26%203.931.79a10.3%2010.3%200%200%201%203.2%202.15c.907.907%201.621%201.974%202.159%203.2q.792%201.84.79%203.93a10%2010%200%200%201-.79%203.932%2010.2%2010.2%200%200%201-2.159%203.2c-.907.907-1.974%201.62-3.2%202.158-1.226.53-2.537.79-3.93.79m0-2.016q3.377%200%205.72-2.343t2.343-5.72-2.343-5.72-5.72-2.344-5.72%202.344-2.343%205.72%202.343%205.72%205.72%202.343'/%3e%3c/svg%3e\"","import { Chip } from \"@servicetitan/anvil2\";\nimport CheckCircle from \"@servicetitan/anvil2/assets/icons/material/round/check_circle.svg\";\nimport RadioButtonUnchecked from \"@servicetitan/anvil2/assets/icons/material/round/radio_button_unchecked.svg\";\nimport InProgress from \"@servicetitan/anvil2/assets/icons/st/in_progress.svg\";\nimport type { z } from \"zod\";\n\nimport { definedProps } from \"../../utils/defined-props\";\nimport { chipCatalog } from \"./chip.catalog\";\n\nexport { chipCatalog };\n\nconst CHIP_ICON_MAP = {\n \"check-circle\": CheckCircle,\n \"in-progress\": InProgress,\n \"radio-button-unchecked\": RadioButtonUnchecked,\n} as const;\n\nexport const ChipRenderer = ({\n props,\n emit,\n}: {\n props: z.infer<typeof chipCatalog.props>;\n emit: (event: string) => void;\n}) => {\n const icon = props.icon ? CHIP_ICON_MAP[props.icon] : undefined;\n const onClose = props.removable && props.size !== \"small\" ? () => emit(\"close\") : undefined;\n return (\n <Chip\n label={props.label}\n {...definedProps({ size: props.size, color: props.color, icon, onClose })}\n />\n );\n};\n","import { Divider } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { definedProps } from \"../../utils/defined-props\";\nimport { dividerCatalog } from \"./divider.catalog\";\n\nexport { dividerCatalog };\n\nexport const DividerRenderer = ({ props }: { props: z.infer<typeof dividerCatalog.props> }) => (\n <Divider\n {...definedProps({\n vertical: props.vertical,\n spacing: props.spacing,\n alignContent: props.alignContent,\n })}\n />\n);\n","import { Theme } from \"../../core/Theme\";\r\nimport { percent, p50, p100 } from \"../../core/util/Percent\";\r\nimport { ColorSet } from \"../../core/util/ColorSet\";\r\nimport { setColor } from \"../../themes/DefaultTheme\";\r\n/**\r\n * @ignore\r\n */\r\nexport class PercentDefaultTheme extends Theme {\r\n setupDefaultRules() {\r\n super.setupDefaultRules();\r\n const ic = this._root.interfaceColors;\r\n const r = this.rule.bind(this);\r\n /**\r\n * ========================================================================\r\n * charts/percent\r\n * ========================================================================\r\n */\r\n r(\"PercentSeries\").setAll({\r\n legendLabelText: \"{category}\",\r\n legendValueText: \"{valuePercentTotal.formatNumber('0.00p')}\",\r\n colors: ColorSet.new(this._root, {}),\r\n width: p100,\r\n height: p100\r\n });\r\n /**\r\n * ========================================================================\r\n * charts/pie\r\n * ========================================================================\r\n */\r\n r(\"PieChart\").setAll({\r\n radius: percent(80),\r\n startAngle: -90,\r\n endAngle: 270\r\n });\r\n r(\"PieSeries\").setAll({\r\n alignLabels: true,\r\n startAngle: -90,\r\n endAngle: 270\r\n });\r\n r(\"PieSeries\").states.create(\"hidden\", { endAngle: -90, opacity: 0 });\r\n r(\"Slice\", [\"pie\"]).setAll({\r\n position: \"absolute\",\r\n isMeasured: false,\r\n x: 0,\r\n y: 0,\r\n toggleKey: \"active\",\r\n tooltipText: \"{category}: {valuePercentTotal.formatNumber('0.00p')}\",\r\n strokeWidth: 1,\r\n strokeOpacity: 1,\r\n role: \"figure\",\r\n lineJoin: \"round\"\r\n });\r\n r(\"Slice\", [\"pie\"]).states.create(\"active\", { shiftRadius: 20, scale: 1 });\r\n r(\"Slice\", [\"pie\"]).states.create(\"hoverActive\", { scale: 1.04 });\r\n r(\"Slice\", [\"pie\"]).states.create(\"hover\", { scale: 1.04 });\r\n r(\"RadialLabel\", [\"pie\"]).setAll({\r\n textType: \"aligned\",\r\n radius: 10,\r\n text: \"{category}: {valuePercentTotal.formatNumber('0.00p')}\",\r\n paddingTop: 5,\r\n paddingBottom: 5,\r\n populateText: true\r\n });\r\n r(\"Tick\", [\"pie\"]).setAll({\r\n location: 1\r\n });\r\n /**\r\n * ========================================================================\r\n * charts/funnel\r\n * ========================================================================\r\n */\r\n r(\"SlicedChart\").setAll({\r\n paddingLeft: 10,\r\n paddingRight: 10,\r\n paddingTop: 10,\r\n paddingBottom: 10\r\n });\r\n /**\r\n * ------------------------------------------------------------------------\r\n * charts/funnel: Funnel\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"FunnelSeries\").setAll({\r\n startLocation: 0,\r\n endLocation: 1,\r\n orientation: \"vertical\",\r\n alignLabels: true,\r\n sequencedInterpolation: true\r\n });\r\n r(\"FunnelSlice\").setAll({\r\n interactive: true,\r\n expandDistance: 0,\r\n //tooltipText: \"{category}: {valuePercentTotal.formatNumber('0.00p')}\"\r\n });\r\n r(\"FunnelSlice\").states.create(\"hover\", { expandDistance: 0.15 });\r\n r(\"Label\", [\"funnel\"]).setAll({\r\n populateText: true,\r\n text: \"{category}: {valuePercentTotal.formatNumber('0.00p')}\",\r\n centerY: p50\r\n });\r\n r(\"Label\", [\"funnel\", \"horizontal\"]).setAll({\r\n centerX: 0,\r\n centerY: p50,\r\n rotation: -90\r\n });\r\n // Class: Label\r\n r(\"Label\", [\"funnel\", \"vertical\"]).setAll({\r\n centerY: p50,\r\n centerX: 0\r\n });\r\n r(\"Tick\", [\"funnel\"]).setAll({\r\n location: 1\r\n });\r\n r(\"FunnelSlice\", [\"funnel\", \"link\"]).setAll({\r\n fillOpacity: 0.5,\r\n strokeOpacity: 0,\r\n expandDistance: -0.1\r\n });\r\n r(\"FunnelSlice\", [\"funnel\", \"link\", \"vertical\"]).setAll({\r\n height: 10,\r\n });\r\n r(\"FunnelSlice\", [\"funnel\", \"link\", \"horizontal\"]).setAll({\r\n width: 10\r\n });\r\n /**\r\n * ------------------------------------------------------------------------\r\n * charts/funnel: Pyramid\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"PyramidSeries\").setAll({\r\n valueIs: \"area\"\r\n });\r\n r(\"FunnelSlice\", [\"pyramid\", \"link\"]).setAll({\r\n fillOpacity: 0.5\r\n });\r\n r(\"FunnelSlice\", [\"pyramid\", \"link\", \"vertical\"]).setAll({\r\n height: 0\r\n });\r\n r(\"FunnelSlice\", [\"pyramid\", \"link\", \"horizontal\"]).setAll({\r\n width: 0\r\n });\r\n r(\"FunnelSlice\", [\"pyramid\"]).setAll({\r\n interactive: true,\r\n expandDistance: 0\r\n });\r\n r(\"FunnelSlice\", [\"pyramid\"]).states.create(\"hover\", { expandDistance: 0.15 });\r\n r(\"Label\", [\"pyramid\"]).setAll({\r\n populateText: true,\r\n text: \"{category}: {valuePercentTotal.formatNumber('0.00p')}\",\r\n centerY: p50\r\n });\r\n r(\"Label\", [\"pyramid\", \"horizontal\"]).setAll({\r\n centerX: 0,\r\n centerY: p50,\r\n rotation: -90\r\n });\r\n r(\"Label\", [\"pyramid\", \"vertical\"]).setAll({\r\n centerY: p50,\r\n centerX: 0\r\n });\r\n r(\"Tick\", [\"pyramid\"]).setAll({\r\n location: 1\r\n });\r\n /**\r\n * ------------------------------------------------------------------------\r\n * charts/funnel: Pictorial\r\n * ------------------------------------------------------------------------\r\n */\r\n // Class: FunnelSlice\r\n r(\"FunnelSlice\", [\"pictorial\"]).setAll({\r\n interactive: true,\r\n tooltipText: \"{category}: {valuePercentTotal.formatNumber('0.00p')}\"\r\n });\r\n r(\"Label\", [\"pictorial\"]).setAll({\r\n populateText: true,\r\n text: \"{category}: {valuePercentTotal.formatNumber('0.00p')}\",\r\n centerY: p50\r\n });\r\n r(\"Label\", [\"pictorial\", \"horizontal\"]).setAll({\r\n centerX: 0,\r\n centerY: p50,\r\n rotation: -90\r\n });\r\n r(\"Label\", [\"pictorial\", \"vertical\"]).setAll({\r\n centerY: p50,\r\n centerX: 0\r\n });\r\n r(\"FunnelSlice\", [\"pictorial\", \"link\"]).setAll({\r\n fillOpacity: 0.5,\r\n width: 0,\r\n height: 0\r\n });\r\n r(\"Tick\", [\"pictorial\"]).setAll({\r\n location: 0.5\r\n });\r\n {\r\n const rule = r(\"Graphics\", [\"pictorial\", \"background\"]);\r\n rule.setAll({\r\n fillOpacity: 0.2\r\n });\r\n setColor(rule, \"fill\", ic, \"alternativeBackground\");\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=PercentDefaultTheme.js.map","import { SerialChart } from \"../../core/render/SerialChart\";\r\nimport { PercentDefaultTheme } from \"./PercentDefaultTheme\";\r\n/**\r\n * Base class for [[PieChart]].\r\n *\r\n * Also used for percent-based series, like [[FunnelSeries]], [[PyramidSeries]], etc.\r\n *\r\n * @important\r\n */\r\nexport class PercentChart extends SerialChart {\r\n _afterNew() {\r\n this._defaultThemes.push(PercentDefaultTheme.new(this._root));\r\n super._afterNew();\r\n this.chartContainer.children.push(this.seriesContainer);\r\n this.seriesContainer.children.push(this.bulletsContainer);\r\n }\r\n _processSeries(series) {\r\n super._processSeries(series);\r\n this.seriesContainer.children.moveValue(this.bulletsContainer, this.seriesContainer.children.length - 1);\r\n }\r\n}\r\nPercentChart.className = \"PercentChart\";\r\nPercentChart.classNames = SerialChart.classNames.concat([PercentChart.className]);\r\n//# sourceMappingURL=PercentChart.js.map","import { __awaiter } from \"tslib\";\r\nimport { Series } from \"../../core/render/Series\";\r\nimport { Container } from \"../../core/render/Container\";\r\nimport { visualSettings } from \"../../core/render/Graphics\";\r\nimport * as $array from \"../../core/util/Array\";\r\nimport * as $type from \"../../core/util/Type\";\r\n/**\r\n * A base class for any percent chart series.\r\n */\r\nexport class PercentSeries extends Series {\r\n constructor() {\r\n super(...arguments);\r\n this.slicesContainer = this.children.push(Container.new(this._root, { position: \"absolute\", isMeasured: false }));\r\n this.labelsContainer = this.children.push(Container.new(this._root, { position: \"absolute\", isMeasured: false }));\r\n this.ticksContainer = this.children.push(Container.new(this._root, { position: \"absolute\", isMeasured: false }));\r\n this._lLabels = [];\r\n this._rLabels = [];\r\n this._hLabels = [];\r\n /**\r\n * A [[ListTemplate]] of all slices in series.\r\n *\r\n * `slices.template` can also be used to configure slices.\r\n */\r\n this.slices = this.addDisposer(this._makeSlices());\r\n /**\r\n * A [[ListTemplate]] of all slice labels in series.\r\n *\r\n * `labels.template` can also be used to configure slice labels.\r\n */\r\n this.labels = this.addDisposer(this._makeLabels());\r\n /**\r\n * A [[ListTemplate]] of all slice ticks in series.\r\n *\r\n * `ticks.template` can also be used to configure slice ticks.\r\n */\r\n this.ticks = this.addDisposer(this._makeTicks());\r\n }\r\n _applyThemes(force = false) {\r\n const colors = this.get(\"colors\");\r\n if (colors) {\r\n colors.reset();\r\n }\r\n return super._applyThemes(force);\r\n }\r\n /**\r\n * @ignore\r\n */\r\n makeSlice(dataItem) {\r\n const slice = this.slicesContainer.children.push(this.slices.make());\r\n slice.on(\"fill\", () => {\r\n this.updateLegendMarker(dataItem);\r\n });\r\n slice.on(\"fillPattern\", () => {\r\n this.updateLegendMarker(dataItem);\r\n });\r\n slice.on(\"stroke\", () => {\r\n this.updateLegendMarker(dataItem);\r\n });\r\n slice._setDataItem(dataItem);\r\n dataItem.set(\"slice\", slice);\r\n this.slices.push(slice);\r\n return slice;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n makeLabel(dataItem) {\r\n const label = this.labelsContainer.children.push(this.labels.make());\r\n label._setDataItem(dataItem);\r\n dataItem.set(\"label\", label);\r\n this.labels.push(label);\r\n return label;\r\n }\r\n _shouldMakeBullet(dataItem) {\r\n if (dataItem.get(\"value\") != null) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n makeTick(dataItem) {\r\n const tick = this.ticksContainer.children.push(this.ticks.make());\r\n tick._setDataItem(dataItem);\r\n dataItem.set(\"tick\", tick);\r\n this.ticks.push(tick);\r\n return tick;\r\n }\r\n _afterNew() {\r\n this.fields.push(\"category\", \"fill\");\r\n super._afterNew();\r\n }\r\n _onDataClear() {\r\n const colors = this.get(\"colors\");\r\n if (colors) {\r\n colors.reset();\r\n }\r\n const patterns = this.get(\"patterns\");\r\n if (patterns) {\r\n patterns.reset();\r\n }\r\n }\r\n _prepareChildren() {\r\n super._prepareChildren();\r\n this._lLabels = [];\r\n this._rLabels = [];\r\n this._hLabels = [];\r\n if (this._valuesDirty) {\r\n let sum = 0;\r\n let absSum = 0;\r\n let valueHigh = 0;\r\n let valueLow = Infinity;\r\n let count = 0;\r\n $array.each(this._dataItems, (dataItem) => {\r\n let valueWorking = dataItem.get(\"valueWorking\", 0);\r\n sum += valueWorking;\r\n absSum += Math.abs(valueWorking);\r\n });\r\n $array.each(this._dataItems, (dataItem) => {\r\n let value = dataItem.get(\"valueWorking\", 0);\r\n if (value > valueHigh) {\r\n valueHigh = value;\r\n }\r\n if (value < valueLow) {\r\n valueLow = value;\r\n }\r\n count++;\r\n let percentTotal = value / absSum;\r\n if (absSum == 0) {\r\n percentTotal = 0;\r\n }\r\n dataItem.setRaw(\"valuePercentTotal\", percentTotal * 100);\r\n });\r\n this.setPrivateRaw(\"valueLow\", valueLow);\r\n this.setPrivateRaw(\"valueHigh\", valueHigh);\r\n this.setPrivateRaw(\"valueSum\", sum);\r\n this.setPrivateRaw(\"valueAverage\", sum / count);\r\n this.setPrivateRaw(\"valueAbsoluteSum\", absSum);\r\n }\r\n }\r\n /**\r\n * Shows hidden series.\r\n *\r\n * @param duration Animation duration in milliseconds\r\n * @return Animation promise\r\n */\r\n show(duration) {\r\n const _super = Object.create(null, {\r\n show: { get: () => super.show }\r\n });\r\n return __awaiter(this, void 0, void 0, function* () {\r\n let promises = [];\r\n promises.push(_super.show.call(this, duration));\r\n promises.push(this._sequencedShowHide(true, duration));\r\n yield Promise.all(promises);\r\n });\r\n }\r\n /**\r\n * Hide whole series.\r\n *\r\n * @param duration Animation duration in milliseconds\r\n * @return Animation promise\r\n */\r\n hide(duration) {\r\n const _super = Object.create(null, {\r\n hide: { get: () => super.hide }\r\n });\r\n return __awaiter(this, void 0, void 0, function* () {\r\n let promises = [];\r\n promises.push(_super.hide.call(this, duration));\r\n promises.push(this._sequencedShowHide(false, duration));\r\n yield Promise.all(promises);\r\n });\r\n }\r\n /**\r\n * @ignore\r\n */\r\n _updateChildren() {\r\n super._updateChildren();\r\n if (this._valuesDirty) {\r\n $array.each(this._dataItems, (dataItem) => {\r\n dataItem.get(\"label\").text.markDirtyText();\r\n });\r\n }\r\n if (this.isDirty(\"legendLabelText\") || this.isDirty(\"legendValueText\")) {\r\n $array.each(this._dataItems, (dataItem) => {\r\n this.updateLegendValue(dataItem);\r\n });\r\n }\r\n this._arrange();\r\n }\r\n _arrange() {\r\n this._arrangeDown(this._lLabels);\r\n this._arrangeUp(this._lLabels);\r\n this._arrangeDown(this._rLabels);\r\n this._arrangeUp(this._rLabels);\r\n this._arrangeLeft(this._hLabels);\r\n this._arrangeRight(this._hLabels);\r\n $array.each(this.dataItems, (dataItem) => {\r\n this._updateTick(dataItem);\r\n });\r\n }\r\n _afterChanged() {\r\n super._afterChanged();\r\n this._arrange();\r\n }\r\n processDataItem(dataItem) {\r\n super.processDataItem(dataItem);\r\n if (dataItem.get(\"fill\") == null) {\r\n let colors = this.get(\"colors\");\r\n if (colors) {\r\n dataItem.setRaw(\"fill\", colors.next());\r\n }\r\n }\r\n if (dataItem.get(\"fillPattern\") == null) {\r\n let patterns = this.get(\"patterns\");\r\n if (patterns) {\r\n dataItem.setRaw(\"fillPattern\", patterns.next());\r\n }\r\n }\r\n }\r\n /**\r\n * Shows series's data item.\r\n *\r\n * @param dataItem Data item\r\n * @param duration Animation duration in milliseconds\r\n * @return Promise\r\n */\r\n showDataItem(dataItem, duration) {\r\n const _super = Object.create(null, {\r\n showDataItem: { get: () => super.showDataItem }\r\n });\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const promises = [_super.showDataItem.call(this, dataItem, duration)];\r\n if (!$type.isNumber(duration)) {\r\n duration = this.get(\"stateAnimationDuration\", 0);\r\n }\r\n const easing = this.get(\"stateAnimationEasing\");\r\n let value = dataItem.get(\"value\");\r\n const animation = dataItem.animate({ key: \"valueWorking\", to: value, duration: duration, easing: easing });\r\n if (animation) {\r\n promises.push(animation.waitForStop());\r\n }\r\n const tick = dataItem.get(\"tick\");\r\n if (tick) {\r\n promises.push(tick.show(duration));\r\n }\r\n const label = dataItem.get(\"label\");\r\n if (label) {\r\n promises.push(label.show(duration));\r\n }\r\n const slice = dataItem.get(\"slice\");\r\n if (slice) {\r\n promises.push(slice.show(duration));\r\n }\r\n if (slice.get(\"active\")) {\r\n slice.states.applyAnimate(\"active\");\r\n }\r\n yield Promise.all(promises);\r\n });\r\n }\r\n /**\r\n * Hides series's data item.\r\n *\r\n * @param dataItem Data item\r\n * @param duration Animation duration in milliseconds\r\n * @return Promise\r\n */\r\n hideDataItem(dataItem, duration) {\r\n const _super = Object.create(null, {\r\n hideDataItem: { get: () => super.hideDataItem }\r\n });\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const promises = [_super.hideDataItem.call(this, dataItem, duration)];\r\n const hiddenState = this.states.create(\"hidden\", {});\r\n if (!$type.isNumber(duration)) {\r\n duration = hiddenState.get(\"stateAnimationDuration\", this.get(\"stateAnimationDuration\", 0));\r\n }\r\n const easing = hiddenState.get(\"stateAnimationEasing\", this.get(\"stateAnimationEasing\"));\r\n const animation = dataItem.animate({ key: \"valueWorking\", to: 0, duration: duration, easing: easing });\r\n if (animation) {\r\n promises.push(animation.waitForStop());\r\n }\r\n const tick = dataItem.get(\"tick\");\r\n if (tick) {\r\n promises.push(tick.hide(duration));\r\n }\r\n const label = dataItem.get(\"label\");\r\n if (label) {\r\n promises.push(label.hide(duration));\r\n }\r\n const slice = dataItem.get(\"slice\");\r\n slice.hideTooltip();\r\n if (slice) {\r\n promises.push(slice.hide(duration));\r\n }\r\n yield Promise.all(promises);\r\n });\r\n }\r\n /**\r\n * @ignore\r\n */\r\n disposeDataItem(dataItem) {\r\n super.disposeDataItem(dataItem);\r\n let label = dataItem.get(\"label\");\r\n if (label) {\r\n this.labels.removeValue(label);\r\n label.dispose();\r\n }\r\n let tick = dataItem.get(\"tick\");\r\n if (tick) {\r\n this.ticks.removeValue(tick);\r\n tick.dispose();\r\n }\r\n let slice = dataItem.get(\"slice\");\r\n if (slice) {\r\n this.slices.removeValue(slice);\r\n slice.dispose();\r\n }\r\n }\r\n /**\r\n * Triggers hover on a series data item.\r\n *\r\n * @since 5.0.7\r\n * @param dataItem Target data item\r\n */\r\n hoverDataItem(dataItem) {\r\n const slice = dataItem.get(\"slice\");\r\n if (slice && !slice.isHidden()) {\r\n slice.hover();\r\n }\r\n }\r\n /**\r\n * Triggers un-hover on a series data item.\r\n *\r\n * @since 5.0.7\r\n * @param dataItem Target data item\r\n */\r\n unhoverDataItem(dataItem) {\r\n const slice = dataItem.get(\"slice\");\r\n if (slice) {\r\n slice.unhover();\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n updateLegendMarker(dataItem) {\r\n if (dataItem) {\r\n const slice = dataItem.get(\"slice\");\r\n if (slice) {\r\n const legendDataItem = dataItem.get(\"legendDataItem\");\r\n if (legendDataItem) {\r\n const markerRectangle = legendDataItem.get(\"markerRectangle\");\r\n $array.each(visualSettings, (setting) => {\r\n if (slice.get(setting) != null) {\r\n markerRectangle.set(setting, slice.get(setting));\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n _arrangeDown(labels) {\r\n if (labels) {\r\n let next = this._getNextDown();\r\n labels.sort((a, b) => {\r\n if (a.y > b.y) {\r\n return 1;\r\n }\r\n else if (a.y < b.y) {\r\n return -1;\r\n }\r\n else {\r\n return 0;\r\n }\r\n });\r\n $array.each(labels, (l) => {\r\n const bounds = l.label.adjustedLocalBounds();\r\n let labelTop = bounds.top;\r\n if (l.y + labelTop < next) {\r\n l.y = next - labelTop;\r\n }\r\n l.label.set(\"y\", l.y);\r\n next = l.y + bounds.bottom;\r\n });\r\n }\r\n }\r\n _getNextUp() {\r\n return this.labelsContainer.maxHeight();\r\n }\r\n _getNextDown() {\r\n return 0;\r\n }\r\n _arrangeUp(labels) {\r\n if (labels) {\r\n let next = this._getNextUp();\r\n labels.sort((a, b) => {\r\n if (a.y < b.y) {\r\n return 1;\r\n }\r\n else if (a.y > b.y) {\r\n return -1;\r\n }\r\n else {\r\n return 0;\r\n }\r\n });\r\n $array.each(labels, (l) => {\r\n const bounds = l.label.adjustedLocalBounds();\r\n let labelBottom = bounds.bottom;\r\n if (l.y + labelBottom > next) {\r\n l.y = next - labelBottom;\r\n }\r\n l.label.set(\"y\", l.y);\r\n next = l.y + bounds.top;\r\n });\r\n }\r\n }\r\n _arrangeRight(labels) {\r\n if (labels) {\r\n let next = 0;\r\n labels.sort((a, b) => {\r\n if (a.y > b.y) {\r\n return 1;\r\n }\r\n else if (a.y < b.y) {\r\n return -1;\r\n }\r\n else {\r\n return 0;\r\n }\r\n });\r\n $array.each(labels, (l) => {\r\n const bounds = l.label.adjustedLocalBounds();\r\n let labelLeft = bounds.left;\r\n if (l.y + labelLeft < next) {\r\n l.y = next - labelLeft;\r\n }\r\n l.label.set(\"x\", l.y);\r\n next = l.y + bounds.right;\r\n });\r\n }\r\n }\r\n _arrangeLeft(labels) {\r\n if (labels) {\r\n let next = this.labelsContainer.maxWidth();\r\n labels.sort((a, b) => {\r\n if (a.y < b.y) {\r\n return 1;\r\n }\r\n else if (a.y > b.y) {\r\n return -1;\r\n }\r\n else {\r\n return 0;\r\n }\r\n });\r\n $array.each(labels, (l) => {\r\n const bounds = l.label.adjustedLocalBounds();\r\n let labelRight = bounds.right;\r\n if (l.y + labelRight > next) {\r\n l.y = next - labelRight;\r\n }\r\n l.label.set(\"x\", l.y);\r\n next = l.y + bounds.left;\r\n });\r\n }\r\n }\r\n _updateSize() {\r\n super._updateSize();\r\n this.markDirty();\r\n }\r\n _updateTick(_dataItem) {\r\n }\r\n _dispose() {\r\n super._dispose();\r\n const chart = this.chart;\r\n if (chart) {\r\n chart.series.removeValue(this);\r\n }\r\n }\r\n}\r\nPercentSeries.className = \"PercentSeries\";\r\nPercentSeries.classNames = Series.classNames.concat([PercentSeries.className]);\r\n//# sourceMappingURL=PercentSeries.js.map","import { Percent } from \"../../core/util/Percent\";\r\nimport { PercentChart } from \"../percent/PercentChart\";\r\nimport { p50 } from \"../../core/util/Percent\";\r\nimport * as $utils from \"../../core/util/Utils\";\r\nimport * as $math from \"../../core/util/Math\";\r\n/**\r\n * Creates a pie chart.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/} for more info\r\n * @important\r\n */\r\nexport class PieChart extends PercentChart {\r\n constructor() {\r\n super(...arguments);\r\n this._maxRadius = 1;\r\n }\r\n _afterNew() {\r\n super._afterNew();\r\n this.seriesContainer.setAll({ x: p50, y: p50 });\r\n }\r\n _prepareChildren() {\r\n super._prepareChildren();\r\n const chartContainer = this.chartContainer;\r\n const w = chartContainer.innerWidth();\r\n const h = chartContainer.innerHeight();\r\n const startAngle = this.get(\"startAngle\", 0);\r\n const endAngle = this.get(\"endAngle\", 0);\r\n const innerRadius = this.get(\"innerRadius\");\r\n let bounds = $math.getArcBounds(0, 0, startAngle, endAngle, 1);\r\n const wr = w / (bounds.right - bounds.left);\r\n const hr = h / (bounds.bottom - bounds.top);\r\n let innerBounds = { left: 0, right: 0, top: 0, bottom: 0 };\r\n if (innerRadius instanceof Percent) {\r\n let value = innerRadius.value;\r\n let mr = Math.min(wr, hr);\r\n value = Math.max(mr * value, mr - Math.min(h, w)) / mr;\r\n innerBounds = $math.getArcBounds(0, 0, startAngle, endAngle, value);\r\n this.setPrivateRaw(\"irModifyer\", value / innerRadius.value);\r\n }\r\n bounds = $math.mergeBounds([bounds, innerBounds]);\r\n const prevRadius = this._maxRadius;\r\n this._maxRadius = Math.min(wr, hr);\r\n const radius = $utils.relativeToValue(this.get(\"radius\", 0), this._maxRadius);\r\n this.seriesContainer.setAll({\r\n dy: -radius * (bounds.bottom + bounds.top) / 2, dx: -radius * (bounds.right + bounds.left) / 2\r\n });\r\n if (this.isDirty(\"startAngle\") || this.isDirty(\"endAngle\") || prevRadius != this._maxRadius) {\r\n this.series.each((series) => {\r\n series._markDirtyKey(\"startAngle\");\r\n });\r\n }\r\n if (this.isDirty(\"innerRadius\") || this.isDirty(\"radius\")) {\r\n this.series.each((series) => {\r\n series._markDirtyKey(\"innerRadius\");\r\n });\r\n }\r\n }\r\n /**\r\n * Returns outer radius in pixels.\r\n *\r\n * If optional series parameter is passed in, it will return outer radius\r\n * of that particular series.\r\n *\r\n * @param series Series\r\n * @return Radius in pixels\r\n */\r\n radius(series) {\r\n let radius = $utils.relativeToValue(this.get(\"radius\", 0), this._maxRadius);\r\n let innerRadius = $utils.relativeToValue(this.get(\"innerRadius\", 0), radius);\r\n if (series) {\r\n let index = this.series.indexOf(series);\r\n let length = this.series.length;\r\n let seriesRadius = series.get(\"radius\");\r\n if (seriesRadius != null) {\r\n return innerRadius + $utils.relativeToValue(seriesRadius, radius - innerRadius);\r\n }\r\n else {\r\n return innerRadius + (radius - innerRadius) / length * (index + 1);\r\n }\r\n }\r\n return radius;\r\n }\r\n /**\r\n * Returns inner radius in pixels.\r\n *\r\n * If optional series parameter is passed in, it will return inner radius\r\n * of that particular series.\r\n *\r\n * @param series Series\r\n * @return Radius in pixels\r\n */\r\n innerRadius(series) {\r\n const radius = this.radius();\r\n let innerRadius = $utils.relativeToValue(this.get(\"innerRadius\", 0), radius);\r\n if (innerRadius < 0) {\r\n innerRadius = radius + innerRadius;\r\n }\r\n if (series) {\r\n let index = this.series.indexOf(series);\r\n let length = this.series.length;\r\n let seriesInnerRadius = series.get(\"innerRadius\");\r\n if (seriesInnerRadius != null) {\r\n return innerRadius + $utils.relativeToValue(seriesInnerRadius, radius - innerRadius);\r\n }\r\n else {\r\n return innerRadius + (radius - innerRadius) / length * index;\r\n }\r\n }\r\n return innerRadius;\r\n }\r\n _updateSize() {\r\n super._updateSize();\r\n this.markDirtyKey(\"radius\");\r\n }\r\n}\r\nPieChart.className = \"PieChart\";\r\nPieChart.classNames = PercentChart.classNames.concat([PieChart.className]);\r\n//# sourceMappingURL=PieChart.js.map","import { Graphics } from \"./Graphics\";\r\nimport * as $type from \"../util/Type\";\r\nimport { Percent } from \"../util/Percent\";\r\nimport { arc } from \"d3-shape\";\r\nimport * as $math from \"../util/Math\";\r\n/**\r\n * Draws a slice shape.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/graphics/} for more info\r\n */\r\nexport class Slice extends Graphics {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * @ignore\r\n */\r\n this.ix = 0;\r\n /**\r\n * @ignore\r\n */\r\n this.iy = 0;\r\n this._generator = arc();\r\n }\r\n _getTooltipPoint() {\r\n let tooltipX = this.get(\"tooltipX\");\r\n let tooltipY = this.get(\"tooltipY\");\r\n let x = 0;\r\n let y = 0;\r\n if ($type.isNumber(tooltipX)) {\r\n x = tooltipX;\r\n }\r\n if ($type.isNumber(tooltipY)) {\r\n y = tooltipY;\r\n }\r\n let radius = this.get(\"radius\", 0);\r\n let innerRadius = this.get(\"innerRadius\", 0);\r\n let dRadius = this.get(\"dRadius\", 0);\r\n let dInnerRadius = this.get(\"dInnerRadius\", 0);\r\n radius += dRadius;\r\n innerRadius += dInnerRadius;\r\n if (innerRadius < 0) {\r\n innerRadius = radius + innerRadius;\r\n }\r\n if (tooltipX instanceof Percent) {\r\n x = this.ix * (innerRadius + (radius - innerRadius) * tooltipX.value);\r\n }\r\n if (tooltipY instanceof Percent) {\r\n y = this.iy * (innerRadius + (radius - innerRadius) * tooltipY.value);\r\n }\r\n if (this.get(\"arc\") >= 360 && innerRadius == 0) {\r\n x = 0;\r\n y = 0;\r\n }\r\n return { x, y };\r\n }\r\n _beforeChanged() {\r\n super._beforeChanged();\r\n if (this.isDirty(\"radius\") || this.isDirty(\"arc\") || this.isDirty(\"innerRadius\") || this.isDirty(\"startAngle\") || this.isDirty(\"dRadius\") || this.isDirty(\"dInnerRadius\") || this.isDirty(\"cornerRadius\") || this.isDirty(\"shiftRadius\")) {\r\n this._clear = true;\r\n }\r\n }\r\n _changed() {\r\n super._changed();\r\n if (this._clear) {\r\n let startAngle = this.get(\"startAngle\", 0);\r\n let arc = this.get(\"arc\", 0);\r\n const generator = this._generator;\r\n if (arc < 0) {\r\n startAngle = startAngle + arc;\r\n arc = arc * -1;\r\n }\r\n if (arc > 0.1) { // this fixes bug with full circle when arc is very small\r\n generator.cornerRadius(this.get(\"cornerRadius\", 0));\r\n }\r\n generator.context(this._display);\r\n let radius = this.get(\"radius\", 0);\r\n let innerRadius = this.get(\"innerRadius\", 0);\r\n let dRadius = this.get(\"dRadius\", 0);\r\n let dInnerRadius = this.get(\"dInnerRadius\", 0);\r\n radius += dRadius;\r\n innerRadius += dInnerRadius;\r\n if (innerRadius < 0) {\r\n innerRadius = radius + innerRadius;\r\n }\r\n generator({ innerRadius: innerRadius, outerRadius: radius, startAngle: (startAngle + 90) * $math.RADIANS, endAngle: (startAngle + arc + 90) * $math.RADIANS });\r\n let middleAngle = startAngle + arc / 2;\r\n this.ix = $math.cos(middleAngle);\r\n this.iy = $math.sin(middleAngle);\r\n const shiftRadius = this.get(\"shiftRadius\", 0);\r\n this.setRaw(\"dx\", this.ix * shiftRadius);\r\n this.setRaw(\"dy\", this.iy * shiftRadius);\r\n this.markDirtyPosition();\r\n }\r\n }\r\n}\r\nSlice.className = \"Slice\";\r\nSlice.classNames = Graphics.classNames.concat([Slice.className]);\r\n//# sourceMappingURL=Slice.js.map","import { PercentSeries } from \"../percent/PercentSeries\";\r\nimport { Template } from \"../../core/util/Template\";\r\nimport { Slice } from \"../../core/render/Slice\";\r\nimport { Tick } from \"../../core/render/Tick\";\r\nimport { RadialLabel } from \"../../core/render/RadialLabel\";\r\nimport { ListTemplate } from \"../../core/util/List\";\r\nimport { p100 } from \"../../core/util/Percent\";\r\nimport * as $array from \"../../core/util/Array\";\r\nimport * as $math from \"../../core/util/Math\";\r\nimport * as $utils from \"../../core/util/Utils\";\r\n/**\r\n * Creates a series for a [[PieChart]].\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/} for more info\r\n * @important\r\n */\r\nexport class PieSeries extends PercentSeries {\r\n _makeSlices() {\r\n return new ListTemplate(Template.new({}), () => Slice._new(this._root, {\r\n themeTags: $utils.mergeTags(this.slices.template.get(\"themeTags\", []), [\"pie\", \"series\"])\r\n }, [this.slices.template]));\r\n }\r\n _makeLabels() {\r\n return new ListTemplate(Template.new({}), () => RadialLabel._new(this._root, {\r\n themeTags: $utils.mergeTags(this.labels.template.get(\"themeTags\", []), [\"pie\", \"series\"])\r\n }, [this.labels.template]));\r\n }\r\n _makeTicks() {\r\n return new ListTemplate(Template.new({}), () => Tick._new(this._root, {\r\n themeTags: $utils.mergeTags(this.ticks.template.get(\"themeTags\", []), [\"pie\", \"series\"])\r\n }, [this.ticks.template]));\r\n }\r\n processDataItem(dataItem) {\r\n super.processDataItem(dataItem);\r\n const slice = this.makeSlice(dataItem);\r\n slice.on(\"scale\", () => {\r\n this._updateTick(dataItem);\r\n });\r\n slice.on(\"shiftRadius\", () => {\r\n this._updateTick(dataItem);\r\n });\r\n slice.events.on(\"positionchanged\", () => {\r\n this._updateTick(dataItem);\r\n });\r\n const label = this.makeLabel(dataItem);\r\n label.events.on(\"positionchanged\", () => {\r\n this._updateTick(dataItem);\r\n });\r\n this.makeTick(dataItem);\r\n slice.events.on(\"positionchanged\", () => {\r\n label.markDirty();\r\n });\r\n }\r\n _getNextUp() {\r\n const chart = this.chart;\r\n if (chart) {\r\n return chart._maxRadius;\r\n }\r\n return this.labelsContainer.maxHeight() / 2;\r\n }\r\n _getNextDown() {\r\n const chart = this.chart;\r\n if (chart) {\r\n return -chart._maxRadius;\r\n }\r\n return -this.labelsContainer.maxHeight() / 2;\r\n }\r\n _prepareChildren() {\r\n super._prepareChildren();\r\n const chart = this.chart;\r\n if (chart) {\r\n if (this.isDirty(\"alignLabels\")) {\r\n let labelsTemplate = this.labels.template;\r\n if (this.get(\"alignLabels\")) {\r\n labelsTemplate.set(\"textType\", \"aligned\");\r\n }\r\n else {\r\n let textType = labelsTemplate.get(\"textType\");\r\n if (textType == null || textType == \"aligned\") {\r\n labelsTemplate.set(\"textType\", \"adjusted\");\r\n }\r\n }\r\n }\r\n if (this._valuesDirty || this.isDirty(\"radius\") || this.isDirty(\"innerRadius\") || this.isDirty(\"startAngle\") || this.isDirty(\"endAngle\") || this.isDirty(\"alignLabels\")) {\r\n this.markDirtyBounds();\r\n const startAngle = this.get(\"startAngle\", chart.get(\"startAngle\", -90));\r\n const endAngle = this.get(\"endAngle\", chart.get(\"endAngle\", 270));\r\n const arc = endAngle - startAngle;\r\n let currentAngle = startAngle;\r\n const radius = chart.radius(this);\r\n this.setPrivateRaw(\"radius\", radius);\r\n let innerRadius = chart.innerRadius(this) * chart.getPrivate(\"irModifyer\", 1);\r\n if (innerRadius < 0) {\r\n innerRadius = radius + innerRadius;\r\n }\r\n //if (radius > 0) {\r\n $array.each(this._dataItems, (dataItem) => {\r\n this.updateLegendValue(dataItem);\r\n let currentArc = arc * dataItem.get(\"valuePercentTotal\") / 100;\r\n const slice = dataItem.get(\"slice\");\r\n if (slice) {\r\n slice.set(\"radius\", radius);\r\n slice.set(\"innerRadius\", innerRadius);\r\n slice.set(\"startAngle\", currentAngle);\r\n slice.set(\"arc\", currentArc);\r\n const color = dataItem.get(\"fill\");\r\n slice._setDefault(\"fill\", color);\r\n slice._setDefault(\"stroke\", color);\r\n const fillPattern = dataItem.get(\"fillPattern\");\r\n slice._setDefault(\"fillPattern\", fillPattern);\r\n }\r\n let middleAngle = $math.normalizeAngle(currentAngle + currentArc / 2);\r\n const label = dataItem.get(\"label\");\r\n if (label) {\r\n label.setPrivate(\"radius\", radius);\r\n label.setPrivate(\"innerRadius\", innerRadius);\r\n label.set(\"labelAngle\", middleAngle);\r\n if (label.get(\"textType\") == \"aligned\") {\r\n let labelRadius = radius + label.get(\"radius\", 0);\r\n let y = radius * $math.sin(middleAngle);\r\n if (middleAngle > 90 && middleAngle <= 270) {\r\n if (!label.isHidden() && !label.isHiding()) {\r\n this._lLabels.push({ label: label, y: y });\r\n }\r\n labelRadius *= -1;\r\n labelRadius -= this.labelsContainer.get(\"paddingLeft\", 0);\r\n label.set(\"centerX\", p100);\r\n label.setPrivateRaw(\"left\", true);\r\n }\r\n else {\r\n if (!label.isHidden() && !label.isHiding()) {\r\n this._rLabels.push({ label: label, y: y });\r\n }\r\n labelRadius += this.labelsContainer.get(\"paddingRight\", 0);\r\n label.set(\"centerX\", 0);\r\n label.setPrivateRaw(\"left\", false);\r\n }\r\n label.set(\"x\", labelRadius);\r\n label.set(\"y\", radius * $math.sin(middleAngle));\r\n }\r\n }\r\n currentAngle += currentArc;\r\n this._updateTick(dataItem);\r\n });\r\n //}\r\n }\r\n }\r\n }\r\n _updateTick(dataItem) {\r\n const tick = dataItem.get(\"tick\");\r\n const label = dataItem.get(\"label\");\r\n const slice = dataItem.get(\"slice\");\r\n const location = tick.get(\"location\", 1);\r\n if (tick && label && slice) {\r\n const radius = (slice.get(\"shiftRadius\", 0) + slice.get(\"radius\", 0)) * slice.get(\"scale\", 1) * location;\r\n const labelAngle = label.get(\"labelAngle\", 0);\r\n const cos = $math.cos(labelAngle);\r\n const sin = $math.sin(labelAngle);\r\n const labelsContainer = this.labelsContainer;\r\n const pl = labelsContainer.get(\"paddingLeft\", 0);\r\n const pr = labelsContainer.get(\"paddingRight\", 0);\r\n let x = 0;\r\n let y = 0;\r\n x = label.x();\r\n y = label.y();\r\n let points = [];\r\n if (x != 0 || y != 0) {\r\n if (label.get(\"textType\") == \"circular\") {\r\n const labelRadius = label.radius() - label.get(\"paddingBottom\", 0);\r\n const labelAngle = label.get(\"labelAngle\", 0);\r\n x = labelRadius * $math.cos(labelAngle);\r\n y = labelRadius * $math.sin(labelAngle);\r\n }\r\n let dx = -pr;\r\n if (label.getPrivate(\"left\")) {\r\n dx = pl;\r\n }\r\n points = [{ x: slice.x() + radius * cos, y: slice.y() + radius * sin }, { x: x + dx, y: y }, { x: x, y: y }];\r\n }\r\n tick.set(\"points\", points);\r\n }\r\n }\r\n _positionBullet(bullet) {\r\n const sprite = bullet.get(\"sprite\");\r\n if (sprite) {\r\n const dataItem = sprite.dataItem;\r\n const slice = dataItem.get(\"slice\");\r\n if (slice) {\r\n const innerRadius = slice.get(\"innerRadius\", 0);\r\n const radius = slice.get(\"radius\", 0);\r\n const startAngle = slice.get(\"startAngle\", 0);\r\n const arc = slice.get(\"arc\", 0);\r\n const locationX = bullet.get(\"locationX\", 0.5);\r\n const locationY = bullet.get(\"locationY\", 0.5);\r\n const angle = startAngle + arc * locationX;\r\n const r = innerRadius + (radius - innerRadius) * locationY;\r\n sprite.setAll({ x: $math.cos(angle) * r, y: $math.sin(angle) * r });\r\n }\r\n }\r\n }\r\n}\r\nPieSeries.className = \"PieSeries\";\r\nPieSeries.classNames = PercentSeries.classNames.concat([PieSeries.className]);\r\n//# sourceMappingURL=PieSeries.js.map","import * as am5 from \"@amcharts/amcharts5\";\nimport * as am5percent from \"@amcharts/amcharts5/percent\";\nimport { useEffect, useRef } from \"react\";\nimport type { z } from \"zod\";\nimport { applyChartTheme } from \"./chart-utils\";\nimport { donutChartCatalog } from \"./donut-chart.catalog\";\n\nexport { donutChartCatalog };\n\nexport const DonutChartRenderer = ({\n props,\n}: {\n props: z.infer<typeof donutChartCatalog.props>;\n}) => {\n const divRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const el = divRef.current;\n if (!el) {\n return;\n }\n\n let root: am5.Root | undefined;\n\n const init = () => {\n if (root) {\n root.dispose();\n }\n root = am5.Root.new(el);\n applyChartTheme(root, props.theme);\n const chart = root.container.children.push(\n am5percent.PieChart.new(root, {\n layout: root.horizontalLayout,\n innerRadius: am5.percent(50),\n }),\n );\n const series = chart.series.push(\n am5percent.PieSeries.new(root, {\n valueField: \"value\",\n categoryField: \"category\",\n legendValueText: \"\",\n }),\n );\n series.labels.template.set(\"text\", \"{valuePercentTotal.formatNumber('#.')}%\");\n series.data.setAll(props.data);\n\n if (props.showLegend ?? true) {\n const legend = chart.children.push(\n am5.Legend.new(root, {\n centerY: am5.percent(50),\n y: am5.percent(50),\n layout: root.verticalLayout,\n }),\n );\n legend.data.setAll(series.dataItems);\n }\n };\n\n // Defer init until the element has a real width\n const observer = new ResizeObserver((entries) => {\n const width = entries[0]?.contentRect.width ?? 0;\n if (width > 0 && !root) {\n init();\n }\n });\n observer.observe(el);\n\n // Also try immediately in case it's already laid out\n if (el.offsetWidth > 0) {\n init();\n }\n\n return () => {\n observer.disconnect();\n root?.dispose();\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n return <div ref={divRef} style={{ width: \"100%\", height: props.height ?? 300 }} />;\n};\n","import { Flex } from \"@servicetitan/anvil2\";\nimport type { ReactNode } from \"react\";\nimport type { z } from \"zod\";\n\nimport { definedProps } from \"../../utils/defined-props\";\nimport { flexCatalog } from \"./flex.catalog\";\n\nexport { flexCatalog };\n\nexport const FlexRenderer = ({\n props,\n children,\n}: {\n props: z.infer<typeof flexCatalog.props>;\n children?: ReactNode;\n}) => (\n <Flex\n {...definedProps({\n direction: props.direction,\n gap: props.gap,\n alignItems: props.alignItems,\n justifyContent: props.justifyContent,\n wrap: props.wrap,\n grow: props.grow,\n shrink: props.shrink,\n inline: props.inline,\n })}\n >\n {children}\n </Flex>\n);\n","import { Grid } from \"@servicetitan/anvil2\";\nimport { Children, type ReactNode } from \"react\";\nimport type { z } from \"zod\";\n\nimport { gridCatalog } from \"./grid.catalog\";\n\nexport { gridCatalog };\n\nconst BORDER = \"var(--border-color-default, #e0e0e0)\";\n\nexport const GridRenderer = ({\n props,\n children,\n}: {\n props: z.infer<typeof gridCatalog.props>;\n children?: ReactNode;\n}) => {\n if (props.bordered) {\n return (\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: props.templateColumns,\n border: `1px solid ${BORDER}`,\n borderRadius: \"4px\",\n overflow: \"hidden\",\n }}\n >\n {Children.map(children, (child) => (\n <div style={{ borderBottom: `1px solid ${BORDER}`, padding: \"8px 12px\" }}>{child}</div>\n ))}\n </div>\n );\n }\n\n return (\n <Grid templateColumns={props.templateColumns} gap={props.gap ?? \"2\"}>\n {children}\n </Grid>\n );\n};\n","import { Icon } from \"@servicetitan/anvil2\";\nimport CheckCircle from \"@servicetitan/anvil2/assets/icons/material/round/check_circle.svg\";\nimport RadioButtonUnchecked from \"@servicetitan/anvil2/assets/icons/material/round/radio_button_unchecked.svg\";\nimport InProgress from \"@servicetitan/anvil2/assets/icons/st/in_progress.svg\";\nimport type { ComponentProps } from \"react\";\nimport type { z } from \"zod\";\n\nimport { definedProps } from \"../../utils/defined-props\";\nimport { iconCatalog } from \"./icon.catalog\";\n\nexport { iconCatalog };\n\ntype IconName = z.infer<typeof iconCatalog.props>[\"name\"];\ntype IconSvg = NonNullable<ComponentProps<typeof Icon>[\"svg\"]>;\n\nconst SVG_MAP = {\n \"check-circle\": CheckCircle,\n \"in-progress\": InProgress,\n \"radio-button-unchecked\": RadioButtonUnchecked,\n} satisfies Record<IconName, IconSvg>;\n\nexport const IconRenderer = ({ props }: { props: z.infer<typeof iconCatalog.props> }) => {\n const svg = SVG_MAP[props.name];\n if (!svg) {\n return null;\n }\n return <Icon svg={svg} {...definedProps({ size: props.size, color: props.color })} />;\n};\n","import { getByPath } from \"@json-render/core\";\nimport { useStateStore } from \"@json-render/react\";\nimport { TextField } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { definedProps } from \"../../utils/defined-props\";\nimport { inputCatalog } from \"./input.catalog\";\n\nexport { inputCatalog };\n\nexport const InputRenderer = ({\n props,\n bindings,\n emit,\n}: {\n props: z.infer<typeof inputCatalog.props>;\n bindings?: Record<string, string>;\n emit: (event: string) => void;\n}) => {\n const bindingPath = bindings?.value;\n const { state, set } = useStateStore();\n const stateValue = bindingPath\n ? (getByPath(state, bindingPath) as string | undefined)\n : undefined;\n const value = bindingPath ? (stateValue ?? props.value ?? \"\") : (props.value ?? \"\");\n\n return (\n <TextField\n label={props.label}\n type={props.type ?? \"text\"}\n value={value}\n {...definedProps({ placeholder: props.placeholder, disabled: props.disabled })}\n onChange={(e) => {\n if (bindingPath) {\n set(bindingPath, e.target.value);\n }\n emit(\"change\");\n }}\n />\n );\n};\n","import * as am5 from \"@amcharts/amcharts5\";\nimport * as am5xy from \"@amcharts/amcharts5/xy\";\nimport { useEffect, useRef } from \"react\";\nimport type { z } from \"zod\";\nimport { applyChartTheme } from \"./chart-utils\";\nimport { lineChartCatalog } from \"./line-chart.catalog\";\n\nexport { lineChartCatalog };\n\nexport const LineChartRenderer = ({ props }: { props: z.infer<typeof lineChartCatalog.props> }) => {\n const divRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const el = divRef.current;\n if (!el) {\n return;\n }\n\n let root: am5.Root | undefined;\n\n const init = () => {\n if (root) {\n root.dispose();\n }\n root = am5.Root.new(el);\n applyChartTheme(root, props.theme);\n\n const chart = root.container.children.push(am5xy.XYChart.new(root, { paddingLeft: 0 }));\n\n const xAxis = chart.xAxes.push(\n am5xy.CategoryAxis.new(root, {\n categoryField: \"category\",\n renderer: am5xy.AxisRendererX.new(root, { minGridDistance: 30 }),\n }),\n );\n\n const yAxis = chart.yAxes.push(\n am5xy.ValueAxis.new(root, {\n renderer: am5xy.AxisRendererY.new(root, {}),\n }),\n );\n\n const firstRow = props.data[0];\n const seriesKeys =\n props.series ?? (firstRow ? Object.keys(firstRow).filter((k) => k !== \"category\") : []);\n\n for (const key of seriesKeys) {\n const series = chart.series.push(\n am5xy.LineSeries.new(root, {\n name: key,\n xAxis,\n yAxis,\n valueYField: key,\n categoryXField: \"category\",\n tooltip: am5.Tooltip.new(root, {\n labelText: `${key}: ${props.unit ?? \"\"}{valueY}`,\n }),\n }),\n );\n\n series.strokes.template.setAll({ strokeWidth: 2 });\n\n if (props.showDots ?? true) {\n series.bullets.push(() => {\n if (!root) {\n throw new Error(\"Chart root is not initialized\");\n }\n const fill = series.get(\"fill\");\n return am5.Bullet.new(root, {\n sprite: am5.Circle.new(root, {\n radius: 4,\n ...(fill ? { fill } : {}),\n strokeWidth: 0,\n }),\n });\n });\n }\n\n series.data.setAll(props.data);\n }\n\n xAxis.data.setAll(props.data);\n\n const showLegend = props.showLegend ?? seriesKeys.length > 1;\n if (showLegend) {\n chart.children\n .push(\n am5.Legend.new(root, {\n centerX: am5.percent(50),\n x: am5.percent(50),\n marginTop: 8,\n }),\n )\n .data.setAll(chart.series.values);\n }\n };\n\n const observer = new ResizeObserver((entries) => {\n const width = entries[0]?.contentRect.width ?? 0;\n if (width > 0 && !root) {\n init();\n }\n });\n observer.observe(el);\n\n if (el.offsetWidth > 0) {\n init();\n }\n\n return () => {\n observer.disconnect();\n root?.dispose();\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n return <div ref={divRef} style={{ width: \"100%\", height: props.height ?? 300 }} />;\n};\n","import { Link } from \"@servicetitan/anvil2\";\nimport type { MouseEvent } from \"react\";\nimport type { z } from \"zod\";\n\nimport { linkCatalog } from \"./link.catalog\";\n\nexport { linkCatalog };\n\nexport const LinkRenderer = ({\n props,\n emit,\n}: {\n props: z.infer<typeof linkCatalog.props>;\n emit: (event: string) => void;\n}) => {\n const { label, href, appearance, target, ghost } = props;\n const onClick = (e: MouseEvent<HTMLAnchorElement>) => {\n e.preventDefault();\n emit(\"press\");\n };\n\n if (appearance === \"secondary\") {\n return (\n <Link\n appearance=\"secondary\"\n ghost={false}\n href={href}\n {...(target ? { target } : {})}\n onClick={onClick}\n >\n {label}\n </Link>\n );\n }\n\n if (ghost !== undefined) {\n return (\n <Link\n appearance=\"primary\"\n ghost={ghost}\n href={href}\n {...(target ? { target } : {})}\n onClick={onClick}\n >\n {label}\n </Link>\n );\n }\n\n return (\n <Link appearance=\"primary\" href={href} {...(target ? { target } : {})} onClick={onClick}>\n {label}\n </Link>\n );\n};\n","import { getByPath } from \"@json-render/core\";\nimport { useStateStore } from \"@json-render/react\";\nimport { FieldLabel, Listbox } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { listboxCatalog } from \"./listbox.catalog\";\n\nexport { listboxCatalog };\n\nexport const ListboxRenderer = ({\n props,\n bindings,\n emit,\n}: {\n props: z.infer<typeof listboxCatalog.props>;\n bindings?: Record<string, string>;\n emit: (event: string) => void;\n}) => {\n const bindingPath = bindings?.value;\n const { state, set } = useStateStore();\n const stateSelected = bindingPath\n ? (getByPath(state, bindingPath) as string | undefined)\n : undefined;\n const selected = bindingPath ? (stateSelected ?? props.value ?? \"\") : (props.value ?? \"\");\n\n const items = props.options.map((o) => ({ id: o.value, label: o.label }));\n const selectedItem = items.find((i) => i.id === selected);\n\n return (\n <div style={props.disabled ? { pointerEvents: \"none\", opacity: 0.5 } : undefined}>\n <FieldLabel>{props.label}</FieldLabel>\n <Listbox\n items={items}\n {...(selectedItem ? { selected: selectedItem } : {})}\n onSelectionChange={(item: { id: string } | undefined) => {\n const val = item?.id ?? \"\";\n if (bindingPath) {\n set(bindingPath, val);\n }\n emit(\"change\");\n }}\n >\n {({ items: renderedItems }: { items: typeof items }) =>\n renderedItems.map((item) => (\n <Listbox.Option key={item.id} item={item}>\n {item.label}\n </Listbox.Option>\n ))\n }\n </Listbox>\n </div>\n );\n};\n","import { ProgressBar } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { definedProps } from \"../../utils/defined-props\";\nimport { progressBarCatalog } from \"./progress-bar.catalog\";\n\nexport { progressBarCatalog };\n\nexport const ProgressBarRenderer = ({\n props,\n}: {\n props: z.infer<typeof progressBarCatalog.props>;\n}) => {\n const descriptionProps = definedProps({ description: props.description });\n\n if (props.indeterminate) {\n return <ProgressBar label={props.label} indeterminate {...descriptionProps} />;\n }\n\n if (props.value !== undefined) {\n return <ProgressBar label={props.label} value={props.value} {...descriptionProps} />;\n }\n\n return <ProgressBar label={props.label} indeterminate {...descriptionProps} />;\n};\n","import { getByPath } from \"@json-render/core\";\nimport { useStateStore } from \"@json-render/react\";\nimport { Radio } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { radioGroupCatalog } from \"./radio-group.catalog\";\n\nexport { radioGroupCatalog };\n\nexport const RadioGroupRenderer = ({\n props,\n bindings,\n emit,\n}: {\n props: z.infer<typeof radioGroupCatalog.props>;\n bindings?: Record<string, string>;\n emit: (event: string) => void;\n}) => {\n const bindingPath = bindings?.value;\n const { state, set } = useStateStore();\n const stateSelected = bindingPath\n ? (getByPath(state, bindingPath) as string | undefined)\n : undefined;\n const selected = bindingPath ? (stateSelected ?? props.value ?? \"\") : (props.value ?? \"\");\n\n return (\n <Radio.Group legend={props.label}>\n {props.options.map((o) => (\n <Radio\n key={o.value}\n label={o.label}\n value={o.value}\n checked={selected === o.value}\n onChange={() => {\n if (bindingPath) {\n set(bindingPath, o.value);\n }\n emit(\"change\");\n }}\n />\n ))}\n </Radio.Group>\n );\n};\n","import { getByPath } from \"@json-render/core\";\nimport { useStateStore } from \"@json-render/react\";\nimport { Switch } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { switchCatalog } from \"./switch.catalog\";\n\nexport { switchCatalog };\n\nexport const SwitchRenderer = ({\n props,\n bindings,\n emit,\n}: {\n props: z.infer<typeof switchCatalog.props>;\n bindings?: Record<string, string>;\n emit: (event: string) => void;\n}) => {\n const bindingPath = bindings?.checked;\n const { state, set } = useStateStore();\n const stateChecked = bindingPath\n ? (getByPath(state, bindingPath) as boolean | undefined)\n : undefined;\n const checked = bindingPath ? (stateChecked ?? props.checked ?? false) : (props.checked ?? false);\n\n return (\n <Switch\n label={props.label}\n value={props.label}\n checked={checked}\n onChange={(_e, state) => {\n if (bindingPath) {\n set(bindingPath, state?.checked ?? false);\n }\n emit(\"change\");\n }}\n />\n );\n};\n","import { Text } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { textCatalog } from \"./text.catalog\";\n\nexport { textCatalog };\n\nexport const TextRenderer = ({ props }: { props: z.infer<typeof textCatalog.props> }) => {\n if (props.variant === \"headline\") {\n const el = props.el ?? \"h3\";\n if (props.size !== undefined) {\n return (\n <Text variant=\"headline\" el={el} size={props.size}>\n {props.content}\n </Text>\n );\n }\n return (\n <Text variant=\"headline\" el={el}>\n {props.content}\n </Text>\n );\n }\n if (props.variant === \"eyebrow\") {\n return <Text variant=\"eyebrow\">{props.content}</Text>;\n }\n if (props.size !== undefined && props.subdued !== undefined) {\n return (\n <Text variant=\"body\" size={props.size} subdued={props.subdued}>\n {props.content}\n </Text>\n );\n }\n if (props.size !== undefined) {\n return (\n <Text variant=\"body\" size={props.size}>\n {props.content}\n </Text>\n );\n }\n if (props.subdued !== undefined) {\n return (\n <Text variant=\"body\" subdued={props.subdued}>\n {props.content}\n </Text>\n );\n }\n return <Text variant=\"body\">{props.content}</Text>;\n};\n","import type { CatalogEntry } from \"../../types\";\nimport { ALL_RENDERERS } from \"../../types\";\n\nimport { AlertRenderer, alertCatalog } from \"./alert\";\nimport { BadgeRenderer, badgeCatalog } from \"./badge\";\nimport { BarChartRenderer, barChartCatalog } from \"./bar-chart\";\nimport { ButtonRenderer, buttonCatalog } from \"./button\";\nimport { CardRenderer, cardCatalog } from \"./card\";\nimport { baseComponents, catalog } from \"./catalog-def\";\nimport { CheckboxRenderer, checkboxCatalog } from \"./checkbox\";\nimport { ChipRenderer, chipCatalog } from \"./chip\";\nimport { DividerRenderer, dividerCatalog } from \"./divider\";\nimport { DonutChartRenderer, donutChartCatalog } from \"./donut-chart\";\nimport { FlexRenderer, flexCatalog } from \"./flex\";\nimport { GridRenderer, gridCatalog } from \"./grid\";\nimport { IconRenderer, iconCatalog } from \"./icon\";\nimport { InputRenderer, inputCatalog } from \"./input\";\nimport { LineChartRenderer, lineChartCatalog } from \"./line-chart\";\nimport { LinkRenderer, linkCatalog } from \"./link\";\nimport { ListboxRenderer, listboxCatalog } from \"./listbox\";\nimport { ProgressBarRenderer, progressBarCatalog } from \"./progress-bar\";\nimport { RadioGroupRenderer, radioGroupCatalog } from \"./radio-group\";\nimport { SwitchRenderer, switchCatalog } from \"./switch\";\nimport { TextRenderer, textCatalog } from \"./text\";\n\nexport { baseComponents, catalog };\n\nexport const coreCatalogEntries: CatalogEntry[] = [\n { name: \"Text\", catalog: textCatalog, renderer: TextRenderer, renderers: ALL_RENDERERS },\n { name: \"Card\", catalog: cardCatalog, renderer: CardRenderer, renderers: ALL_RENDERERS },\n { name: \"Flex\", catalog: flexCatalog, renderer: FlexRenderer, renderers: ALL_RENDERERS },\n { name: \"Grid\", catalog: gridCatalog, renderer: GridRenderer, renderers: ALL_RENDERERS },\n { name: \"Alert\", catalog: alertCatalog, renderer: AlertRenderer, renderers: ALL_RENDERERS },\n { name: \"Divider\", catalog: dividerCatalog, renderer: DividerRenderer, renderers: ALL_RENDERERS },\n { name: \"Icon\", catalog: iconCatalog, renderer: IconRenderer, renderers: ALL_RENDERERS },\n { name: \"Badge\", catalog: badgeCatalog, renderer: BadgeRenderer, renderers: ALL_RENDERERS },\n { name: \"Chip\", catalog: chipCatalog, renderer: ChipRenderer, renderers: ALL_RENDERERS },\n { name: \"Link\", catalog: linkCatalog, renderer: LinkRenderer, renderers: ALL_RENDERERS },\n {\n name: \"ProgressBar\",\n catalog: progressBarCatalog,\n renderer: ProgressBarRenderer,\n renderers: ALL_RENDERERS,\n },\n {\n name: \"BarChart\",\n catalog: barChartCatalog,\n renderer: BarChartRenderer,\n renderers: ALL_RENDERERS,\n },\n {\n name: \"DonutChart\",\n catalog: donutChartCatalog,\n renderer: DonutChartRenderer,\n renderers: ALL_RENDERERS,\n },\n {\n name: \"LineChart\",\n catalog: lineChartCatalog,\n renderer: LineChartRenderer,\n renderers: ALL_RENDERERS,\n },\n { name: \"Button\", catalog: buttonCatalog, renderer: ButtonRenderer, renderers: ALL_RENDERERS },\n {\n name: \"Checkbox\",\n catalog: checkboxCatalog,\n renderer: CheckboxRenderer,\n renderers: ALL_RENDERERS,\n },\n { name: \"Input\", catalog: inputCatalog, renderer: InputRenderer, renderers: ALL_RENDERERS },\n { name: \"Listbox\", catalog: listboxCatalog, renderer: ListboxRenderer, renderers: ALL_RENDERERS },\n {\n name: \"RadioGroup\",\n catalog: radioGroupCatalog,\n renderer: RadioGroupRenderer,\n renderers: ALL_RENDERERS,\n },\n { name: \"Switch\", catalog: switchCatalog, renderer: SwitchRenderer, renderers: ALL_RENDERERS },\n];\n\nexport const baseRenderers = Object.fromEntries(\n coreCatalogEntries.map(({ name, renderer }) => [name, renderer]),\n);\n","import { type Catalog, defineCatalog } from \"@json-render/core\";\nimport { schema } from \"@json-render/react/schema\";\nimport type { z } from \"zod\";\n\nimport { actionsCatalog } from \"./core/actions\";\nimport { baseComponents } from \"./core/catalog/schemas\";\n\nexport interface ComponentCatalogDef {\n props: z.ZodType;\n slots: string[];\n description: string;\n}\n\nexport interface ActionCatalogDef {\n params: z.ZodType;\n description: string;\n}\n\nexport interface TeamCatalogDef {\n prefix: string;\n components?: Record<string, ComponentCatalogDef>;\n actions?: Record<string, ActionCatalogDef>;\n /** Appended to base rules in generated prompt */\n rules?: string;\n}\n\nexport interface MergedCatalog {\n prefix: string;\n catalog: Catalog;\n prompt(baseRules: string): string;\n jsonSchema(): object;\n}\n\nexport function createTeamCatalog(def: TeamCatalogDef): TeamCatalogDef {\n return def;\n}\n\nexport function mergeCatalogs(teamDef: TeamCatalogDef): MergedCatalog {\n const mergedComponents = {\n ...baseComponents,\n ...(teamDef.components ?? {}),\n } as Record<string, ComponentCatalogDef>;\n\n const prefixedTeamActions = Object.fromEntries(\n Object.entries(teamDef.actions ?? {}).map(([key, val]) => [`${teamDef.prefix}.${key}`, val]),\n );\n\n const mergedActions = {\n ...actionsCatalog,\n ...prefixedTeamActions,\n } as Record<string, ActionCatalogDef>;\n\n const mergedCatalog = defineCatalog(schema, {\n components: mergedComponents,\n actions: mergedActions,\n });\n\n return {\n prefix: teamDef.prefix,\n catalog: mergedCatalog,\n prompt(baseRules: string): string {\n const parts = [mergedCatalog.prompt(), \"\\n\", baseRules];\n if (teamDef.rules) {\n parts.push(\"\\n\", teamDef.rules);\n }\n return parts.join(\"\");\n },\n jsonSchema(): object {\n return mergedCatalog.jsonSchema();\n },\n };\n}\n","import { z } from \"zod\";\n\nexport const revenueCardCatalog = {\n props: z.object({\n title: z.string(),\n value: z.string(),\n trend: z.enum([\"up\", \"down\", \"flat\"]).optional(),\n delta: z.string().optional(),\n }),\n slots: [] as string[],\n description:\n 'KPI metric card. trend: up=green↑ down=red↓ flat=grey→. delta e.g. \"+12% vs last month\". Leaf node — no children.',\n};\n","import { createTeamCatalog } from \"../../team-catalog\";\n\nimport { revenueCardCatalog } from \"./components/revenue-card.catalog\";\n\nexport const marketingCatalog = createTeamCatalog({\n prefix: \"mrk\",\n components: {\n RevenueCard: revenueCardCatalog,\n },\n rules: \"\", // add marketing-specific prompt rules here\n});\n","import { Card, Flex, Text } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { revenueCardCatalog } from \"./revenue-card.catalog\";\n\nexport { revenueCardCatalog };\n\nexport const RevenueCardRenderer = ({\n props,\n}: {\n props: z.infer<typeof revenueCardCatalog.props>;\n}) => {\n const trendColor =\n props.trend === \"up\"\n ? \"var(--color-success-60)\"\n : props.trend === \"down\"\n ? \"var(--color-danger-60)\"\n : \"var(--color-neutral-90)\";\n const trendIcon = props.trend === \"up\" ? \"↑\" : props.trend === \"down\" ? \"↓\" : \"→\";\n\n return (\n <Card>\n <Flex direction=\"column\" gap=\"2\">\n <Text variant=\"eyebrow\">{props.title}</Text>\n <Text variant=\"headline\" el=\"h3\">\n {props.value}\n </Text>\n {props.delta && (\n <Flex direction=\"row\" gap=\"1\" alignItems=\"center\">\n <span style={{ color: trendColor, fontWeight: 600, fontSize: \"13px\" }}>\n {trendIcon}\n </span>\n <Text variant=\"eyebrow\" style={{ color: trendColor }}>\n {props.delta}\n </Text>\n </Flex>\n )}\n </Flex>\n </Card>\n );\n};\n","import type { CatalogEntry } from \"../../types\";\nimport { ALL_RENDERERS } from \"../../types\";\n\nimport { marketingCatalog } from \"./catalog\";\nimport { RevenueCardRenderer } from \"./components/revenue-card\";\nimport { revenueCardCatalog } from \"./components/revenue-card.catalog\";\n\nexport { marketingRenderers } from \"./components\";\nexport { marketingCatalog };\n\nexport const marketingCatalogEntries: CatalogEntry[] = [\n {\n name: \"RevenueCard\",\n catalog: revenueCardCatalog,\n renderer: RevenueCardRenderer,\n renderers: ALL_RENDERERS,\n },\n];\n\nexport { teams } from \"./teams\";\n","import type { AllComponentRenderers } from \"./renderers/types\";\nimport type { ComponentCatalogDef } from \"./team-catalog\";\nimport type { CatalogEntry, RendererContext } from \"./types\";\n\nexport function filterCatalogEntries(\n entries: CatalogEntry[],\n renderer: RendererContext,\n): CatalogEntry[] {\n return entries.filter(({ renderers }) => renderers.includes(renderer));\n}\n\nexport function toComponentCatalogMap(\n entries: CatalogEntry[],\n): Record<string, ComponentCatalogDef> {\n return Object.fromEntries(entries.map(({ name, catalog }) => [name, catalog]));\n}\n\nexport function toComponentRendererMap(entries: CatalogEntry[]): AllComponentRenderers {\n return Object.fromEntries(\n entries.map(({ name, renderer }) => [name, renderer]),\n ) as AllComponentRenderers;\n}\n","import { defineCatalog } from \"@json-render/core\";\nimport { type Components, defineRegistry } from \"@json-render/react\";\nimport { schema } from \"@json-render/react/schema\";\n\nimport { actionsCatalog, actionsHandlers } from \"./core/actions\";\nimport { coreCatalogEntries } from \"./core/catalog\";\nimport { catalog as coreCatalog } from \"./core/catalog/catalog-def\";\nimport { marketingCatalogEntries } from \"./marketing/catalog\";\nimport {\n filterCatalogEntries,\n toComponentCatalogMap,\n toComponentRendererMap,\n} from \"./registry-utils\";\nimport type { RendererContext } from \"./types\";\n\nconst allCatalogEntries = [...coreCatalogEntries, ...marketingCatalogEntries];\n\nexport function getRegistry(renderer: RendererContext = \"chat\") {\n const filtered = filterCatalogEntries(allCatalogEntries, renderer);\n const components = toComponentCatalogMap(filtered);\n const renderers = toComponentRendererMap(filtered);\n\n const catalog = defineCatalog(schema, {\n components,\n actions: actionsCatalog,\n });\n\n return defineRegistry(catalog, {\n components: renderers as Components<typeof catalog>,\n actions: actionsHandlers,\n });\n}\n\n/** Default chat registry — preserves parity with the original flat registry export. */\nconst defaultRegistry = getRegistry(\"chat\");\n\nexport const registry = defaultRegistry.registry;\nexport const handlers = defaultRegistry.handlers;\nexport const executeAction = defaultRegistry.executeAction;\n\n/** Core catalog used for schema generation and prompt artifacts. */\nexport { coreCatalog as catalog };\n","import type { Spec } from \"@json-render/core\";\n\n/**\n * Enrich the spec so every Button element automatically gets\n * on.press → submitUserAction wired up, using the button's element key\n * as actionId. Buttons that already have on.press are left untouched.\n */\nexport function enrichButtonActions(spec: Spec): Spec {\n const elements = { ...spec.elements };\n for (const [key, element] of Object.entries(elements)) {\n if (element.type !== \"Button\") {\n continue;\n }\n if (element.on?.press) {\n continue;\n }\n const actionId = key;\n elements[key] = {\n ...element,\n on: {\n ...element.on,\n press: { action: \"atlas.submitUserAction\", params: { actionId } },\n },\n };\n }\n return { ...spec, elements };\n}\n","import type { Spec } from \"@json-render/core\";\nimport { useMemo } from \"react\";\n\nexport type SpecEnrichment = (spec: Spec) => Spec;\n\nexport function useEnrichedSpec(spec: Spec, enrichments: SpecEnrichment[]): Spec {\n return useMemo(\n () => enrichments.reduce((enriched, enrich) => enrich(enriched), spec),\n [spec, enrichments],\n );\n}\n","import type { Spec } from \"@json-render/core\";\nimport {\n type ComponentRegistry,\n createStateStore,\n type DefineRegistryResult,\n JSONUIProvider,\n Renderer,\n} from \"@json-render/react\";\nimport { useMemo, useRef } from \"react\";\nimport { enrichButtonActions } from \"./internal/enrichments/button-actions\";\nimport { useEnrichedSpec } from \"./internal/enrichments/useEnrichedSpec\";\n\nconst SPEC_ENRICHMENTS = [enrichButtonActions];\n\ntype SetState = (path: string, value: unknown) => void;\n\nexport interface SpecRendererProps {\n spec: Spec;\n registry: ComponentRegistry;\n handlers: DefineRegistryResult[\"handlers\"];\n onUserActionSubmit?: (\n params: { actionId: string; data: Record<string, unknown> },\n setState: SetState,\n ) => void | Promise<void>;\n onNavigate?: (url: string) => void;\n}\n\nexport const SpecRenderer = ({\n spec,\n registry,\n handlers,\n onUserActionSubmit,\n onNavigate,\n}: SpecRendererProps) => {\n const enrichedSpec = useEnrichedSpec(spec, SPEC_ENRICHMENTS);\n\n const specRef = useRef<Spec | null>(null);\n const storeRef = useRef<ReturnType<typeof createStateStore> | null>(null);\n if (specRef.current !== spec) {\n specRef.current = spec;\n const specState = (enrichedSpec as unknown as { state?: Record<string, unknown> }).state ?? {};\n storeRef.current = createStateStore(specState);\n }\n if (storeRef.current === null) {\n throw new Error(\"State store is not initialized\");\n }\n const store = storeRef.current;\n\n const resolvedHandlers = useMemo(() => {\n const base = handlers(\n () => undefined,\n () => store.getSnapshot(),\n );\n return {\n ...base,\n \"atlas.submitUserAction\": (params: unknown) => {\n const p = params as { actionId?: string } | undefined;\n return onUserActionSubmit?.(\n { actionId: p?.actionId ?? \"form_submit\", data: store.getSnapshot() },\n store.set,\n );\n },\n \"atlas.navigate\": (params: unknown) => {\n const p = params as { url?: string } | undefined;\n if (!p?.url) {\n return;\n }\n if (onNavigate) {\n onNavigate(p.url);\n } else {\n window.open(p.url, \"_blank\", \"noopener,noreferrer\");\n }\n },\n };\n }, [handlers, onUserActionSubmit, onNavigate, store]);\n\n const functions = useMemo(\n () => ({\n computeTotal: (args: Record<string, unknown>) => {\n const qty = Number.parseFloat(String((args.quantity as number | string) ?? 0)) || 0;\n const price =\n Number.parseFloat(\n String((args.unitPrice as number | string) ?? \"0\").replace(/[^0-9.]/g, \"\"),\n ) || 0;\n return `$${(qty * price).toFixed(2)}`;\n },\n }),\n [],\n );\n\n return (\n <JSONUIProvider\n registry={registry}\n store={store}\n handlers={resolvedHandlers}\n functions={functions}\n >\n <Renderer spec={enrichedSpec} registry={registry} />\n </JSONUIProvider>\n );\n};\n"],"x_google_ignoreList":[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,83,84,85,86,111,112,113,116,117,118,119,120,121],"mappings":"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AA2B;CACtC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,eACR,EACF,EACF;CACF,EACY,KAA4B,EAAE,OAAO,SAAS,EAC9C,KAA0B;CACrC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAA2B;CACtC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,eACR,EACF,EACF;CACF,EACY,KAA4B,EAAE,OAAO,SAAS,EAC9C,KAA0B;CACrC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAA2B;CACtC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAA4B,EAAE,OAAO,WAAW,EAChD,KAA0B;CACrC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAA2B;CACtC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAA4B,EAAE,OAAO,SAAS,EAC9C,KAA2B;CACtC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAA4B;CACvC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,eACR,EACF,EACF;CACF,EACY,KAA6B,EAAE,OAAO,SAAS,EAC/C,KAA2B;CACtC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAA4B;CACvC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,eACR,EACF,EACF;CACF,EACY,KAA6B,EAAE,OAAO,SAAS,EAC/C,KAA2B;CACtC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAA4B;CACvC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,eACR,EACF,EACF;CACF,EACY,KAA6B,EAAE,OAAO,SAAS,EAC/C,KAA2B;CACtC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAA4B;CACvC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,eACR,EACF,EACF;CACF,EACY,KAA6B,EAAE,OAAO,SAAS,EAC/C,KAA2B;CACtC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAA4B;CACvC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,eACR,EACF,EACF;CACF,EACY,KAA6B,EAAE,OAAO,SAAS,EAC/C,KAA2B;CACtC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAA4B;CACvC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,eACR,EACF,EACF;CACF,EACY,KAA6B,EAAE,OAAO,SAAS,EAC/C,KAA2B;CACtC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAA4B;CACvC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,eACR,EACF,EACF;CACF,EACY,KAA6B,EAAE,OAAO,SAAS,EAC/C,KAA2B;CACtC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAA4B;CACvC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,eACR,EACF,EACF;CACF,EACY,KAA6B,EAAE,OAAO,SAAS,EAC/C,KAA2B;CACtC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAA4B;CACvC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,eACR,EACF,EACF;CACF,EACY,KAA6B,EAAE,OAAO,SAAS,EAC/C,KAA2B;CACtC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAA4B;CACvC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,eACR,EACF,EACF;CACF,EACY,KAA6B,EAAE,OAAO,SAAS,EAC/C,KAA2B;CACtC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAA4B;CACvC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,eACR,EACF,EACF;CACF,EACY,KAA6B,EAAE,OAAO,SAAS,EAC/C,KAA2B;CACtC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAA4B;CACvC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,eACR,EACF,EACF;CACF,EACY,KAA6B,EAAE,OAAO,SAAS,EAC/C,KAA0B;CACrC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAA2B;CACtC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,eACR,EACF,EACF;CACF,EACY,KAA4B,EAAE,OAAO,SAAS,EAC9C,KAA2B;CACtC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAA4B;CACvC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAA6B,EAAE,OAAO,WAAW,EACjD,KAAiB;CAC5B,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAAuB;CAClC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAAiB,EAAE,OAAO,WAAW,EACrC,KAAkB;CAC7B,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAAyB;CACpC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAAyB;CACpC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAAwB;CACnC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAA0B;CACrC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAA2B;CACtC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAA0B;CACrC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAAiC;CAC5C,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAA2B;CACtC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAA+B;CAC1C,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAA8B;CACzC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAA8B;CACzC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAA6B;CACxC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAAqB;CAChC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,aACR,EACF,EACF;CACF,EACY,KAA4B;CACvC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,aACR,EACF,EACF;CACF,EACY,KAA2B;CACtC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,aACR,EACF,EACF;CACF,EACY,KAAuB;CAClC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,aACR,EACF,EACF;CACF,EACY,KAA8B;CACzC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,aACR,EACF,EACF;CACF,EACY,KAA6B;CACxC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,aACR,EACF,EACF;CACF,EACY,KAAoB;CAC/B,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,aACR,EACF,EACF;CACF,EACY,KAA2B;CACtC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,aACR,EACF,EACF;CACF,EACY,KAA0B;CACrC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,aACR,EACF,EACF;CACF,EACY,KAAsB;CACjC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,aACR,EACF,EACF;CACF,EACY,KAA6B;CACxC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,aACR,EACF,EACF;CACF,EACY,KAA4B;CACvC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,aACR,EACF,EACF;CACF,EACY,KAAc;CACzB,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,aACR,EACF,EACF;CACF,EACY,KAAiB,EAAE,OAAO,kBAAkB,EAC5C,KAAkB,EAAE,OAAO,wBAAwB,EACnD,KAAoB,EAAE,OAAO,sBAAsB,EACnD,KAAkB;CAC7B,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAAoB;CAC/B,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;CACF,EACY,KAAqB;CAChC,OAAO;CACP,YAAY,EACV,YAAY,EACV,MAAM,EACJ,OAAO,WACR,EACF,EACF;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"}
1
+ {"version":3,"file":"json-render-react.js","names":[],"sources":["../src/core/actions.ts","../src/types.ts","../src/core/catalog/alert.catalog.ts","../src/core/catalog/alert.tsx","../src/utils/defined-props.ts","../src/core/catalog/badge.catalog.ts","../src/core/catalog/badge.css.ts","../src/core/catalog/badge.tsx","../src/core/catalog/bar-chart.catalog.ts","../src/core/catalog/chart.css.ts","../src/core/catalog/chart-utils.ts","../src/core/catalog/bar-chart.tsx","../src/core/catalog/button.catalog.ts","../src/core/catalog/button.tsx","../src/core/catalog/card.catalog.ts","../src/core/catalog/card.tsx","../src/core/catalog/checkbox.catalog.ts","../src/core/catalog/chip.catalog.ts","../src/core/catalog/divider.catalog.ts","../src/core/catalog/donut-chart.catalog.ts","../src/core/catalog/flex.catalog.ts","../src/core/catalog/grid.catalog.ts","../src/core/catalog/icon.catalog.ts","../src/core/catalog/input.catalog.ts","../src/core/catalog/line-chart.catalog.ts","../src/core/catalog/link.catalog.ts","../src/core/catalog/listbox.catalog.ts","../src/core/catalog/progress-bar.catalog.ts","../src/core/catalog/radio-group.catalog.ts","../src/core/catalog/switch.catalog.ts","../src/core/catalog/text.catalog.ts","../src/core/catalog/textarea.catalog.ts","../src/core/catalog/schemas.ts","../src/core/catalog/catalog-def.ts","../src/core/catalog/checkbox.tsx","../src/core/catalog/chip.tsx","../src/core/catalog/divider.tsx","../src/core/catalog/donut-chart.tsx","../src/core/catalog/flex.tsx","../../../tooling/tools/src/cx.ts","../src/core/catalog/grid.css.ts","../src/core/catalog/grid.tsx","../src/core/catalog/icon.tsx","../src/core/catalog/input.tsx","../src/core/catalog/line-chart.tsx","../src/core/catalog/link.tsx","../../../node_modules/.pnpm/@vanilla-extract+recipes@0.5.7_@vanilla-extract+css@1.20.1/node_modules/@vanilla-extract/recipes/dist/createRuntimeFn-62c9670f.esm.js","../src/core/catalog/listbox.css.ts","../src/core/catalog/listbox.tsx","../src/core/catalog/progress-bar.tsx","../src/core/catalog/radio-group.tsx","../src/core/catalog/switch.tsx","../src/core/catalog/text.tsx","../src/core/catalog/textarea.tsx","../src/core/catalog/index.ts","../src/team-catalog.ts","../src/marketing/catalog/components/revenue-card.catalog.ts","../src/marketing/catalog/components/revenue-card.css.ts","../src/marketing/catalog/components/revenue-card.tsx","../src/marketing/catalog/index.ts","../src/registry-utils.ts","../src/registry.ts","../src/renderers/internal/enrichments/button-actions.ts","../src/renderers/internal/enrichments/useEnrichedSpec.ts","../src/renderers/spec-renderer.tsx"],"sourcesContent":["import { z } from \"zod\";\n\nexport const actionsCatalog = {\n \"atlas.submitUserAction\": {\n params: z.object({\n data: z.record(z.string(), z.unknown()).optional(),\n actionId: z.string().optional(),\n }),\n description: 'Submit form data. actionId overrides default \"form_submit\" identifier.',\n },\n \"atlas.navigate\": {\n params: z.object({ url: z.string() }),\n description:\n \"Navigate to a URL or internal route. External URLs (http/https) open in a new tab; internal route strings navigate within the app.\",\n },\n \"atlas.toolCall\": {\n params: z.object({\n tool: z.string(),\n args: z.record(z.string(), z.unknown()).optional(),\n }),\n description:\n \"Invoke a tool on the active artifact panel app (an MCP-backed MFE). args is the tool argument payload; if omitted the current form state is sent.\",\n },\n};\n\nexport const actionsHandlers = {\n \"atlas.submitUserAction\": async (_params: unknown) => {\n // no-op default — host overrides via SpecRenderer `actions` factory\n },\n \"atlas.navigate\": async (_params: unknown) => {\n // no-op default — host overrides via SpecRenderer `actions` factory\n },\n \"atlas.toolCall\": async (_params: unknown) => {\n // no-op default — host overrides via SpecRenderer `actions` factory\n },\n};\n","import type { z } from \"zod\";\n\nimport type { ComponentCatalogDef } from \"./team-catalog\";\n\nexport type RendererContext = \"chat\" | \"panel\" | \"app\";\n\nexport const ALL_RENDERERS: RendererContext[] = [\"chat\", \"panel\", \"app\"];\n\nexport interface CatalogEntry {\n name: string;\n catalog: ComponentCatalogDef;\n /** json-render component renderer — typed at defineRegistry boundary. */\n renderer: unknown;\n renderers: RendererContext[];\n}\n\nexport type InferCatalogProps<T extends { props: z.ZodType }> = z.infer<T[\"props\"]>;\n","import { z } from \"zod\";\n\nexport const alertCatalog = {\n props: z.object({\n title: z.string(),\n status: z.enum([\"info\", \"success\", \"warning\", \"danger\"]).optional(),\n dismissible: z.boolean().optional(),\n }),\n slots: [\"default\"],\n description:\n 'Alert/notification banner. dismissible: true adds a close button that emits a \"close\" event.',\n};\n","import { Alert } from \"@servicetitan/anvil2\";\nimport type { ReactNode } from \"react\";\nimport type { z } from \"zod\";\n\nimport { alertCatalog } from \"./alert.catalog\";\n\nexport { alertCatalog };\n\nexport const AlertRenderer = ({\n props,\n emit,\n children,\n}: {\n props: z.infer<typeof alertCatalog.props>;\n emit: (event: string) => void;\n children?: ReactNode;\n}) => (\n <Alert\n title={props.title}\n status={props.status ?? \"info\"}\n {...(props.dismissible ? { onClose: () => emit(\"close\") } : {})}\n >\n {children}\n </Alert>\n);\n","type DefinedProps<T extends Record<string, unknown>> = {\n [K in keyof T as T[K] extends undefined ? never : K]: Exclude<T[K], undefined>;\n};\n\n/** Omit keys whose values are `undefined` — required for exactOptionalPropertyTypes spreads. */\nexport function definedProps<T extends Record<string, unknown>>(props: T): DefinedProps<T> {\n const result = {} as DefinedProps<T>;\n for (const key of Object.keys(props) as Array<keyof T>) {\n const value = props[key];\n if (value !== undefined) {\n result[key as keyof DefinedProps<T>] = value as DefinedProps<T>[keyof DefinedProps<T>];\n }\n }\n return result;\n}\n","import { z } from \"zod\";\n\nexport const badgeCatalog = {\n props: z.object({\n content: z.string().optional(),\n offset: z\n .object({\n x: z.string().optional(),\n y: z.string().optional(),\n })\n .optional(),\n }),\n slots: [\"default\"],\n description:\n \"Unread notification count on a Button or Link. Wrap the interactive element as a child of Badge (the renderer adds position:relative). content: numerical count only (e.g. 3, 99+); omit for dot-only. offset: {x, y} CSS values to fine-tune position on non-square anchors like links.\",\n};\n","import { style } from \"@vanilla-extract/css\";\n\nexport const badgeAnchor = style({\n position: \"relative\",\n display: \"inline-block\",\n});\n","import { Badge } from \"@servicetitan/anvil2\";\nimport type { ReactNode } from \"react\";\nimport type { z } from \"zod\";\n\nimport { definedProps } from \"../../utils/defined-props\";\nimport { badgeCatalog } from \"./badge.catalog\";\nimport { badgeAnchor } from \"./badge.css\";\n\nexport { badgeCatalog };\n\nexport const BadgeRenderer = ({\n props,\n children,\n}: {\n props: z.infer<typeof badgeCatalog.props>;\n children?: ReactNode;\n}) => {\n const offset = props.offset ? definedProps({ x: props.offset.x, y: props.offset.y }) : undefined;\n\n const badge = offset ? (\n <Badge offset={offset}>{props.content}</Badge>\n ) : (\n <Badge>{props.content}</Badge>\n );\n\n if (children) {\n return (\n <div className={badgeAnchor}>\n {children}\n {badge}\n </div>\n );\n }\n\n return badge;\n};\n","import { z } from \"zod\";\n\nexport const barChartCatalog = {\n props: z.object({\n data: z.array(z.object({ category: z.string(), value: z.number() })),\n orientation: z.enum([\"vertical\", \"horizontal\"]).optional(),\n theme: z.enum([\"monochrome\", \"categorical\", \"semantic\"]).optional(),\n height: z.number().optional(),\n unit: z.string().optional(),\n }),\n slots: [],\n description:\n \"Bar chart (vertical or horizontal) with Anvil2 theme. data: [{category, value}]. theme: monochrome (default, ≤4 vars), categorical (5-9 distinct), semantic (success/neutral/warning/danger order). unit: tooltip suffix.\",\n};\n","import { style } from \"@vanilla-extract/css\";\n\nexport const chartContainer = style({\n width: \"100%\",\n});\n","import type * as am5 from \"@amcharts/amcharts5\";\nimport am5themes_Animated from \"@amcharts/amcharts5/themes/Animated\";\nimport {\n ThemeCategorical,\n ThemeMonochrome,\n ThemeSemantic,\n} from \"@servicetitan/anvil2-ext-charts/am5\";\n\nexport function applyChartTheme(root: am5.Root, theme: string = \"monochrome\") {\n const themeMap: Record<string, typeof am5.Theme> = {\n monochrome: ThemeMonochrome,\n categorical: ThemeCategorical,\n semantic: ThemeSemantic,\n };\n const T = themeMap[theme] ?? ThemeMonochrome;\n root.setThemes([am5themes_Animated.new(root), T.new(root)]);\n}\n","import * as am5 from \"@amcharts/amcharts5\";\nimport * as am5xy from \"@amcharts/amcharts5/xy\";\nimport { useEffect, useRef } from \"react\";\nimport type { z } from \"zod\";\n\nimport { barChartCatalog } from \"./bar-chart.catalog\";\nimport { chartContainer } from \"./chart.css\";\nimport { applyChartTheme } from \"./chart-utils\";\n\nexport { barChartCatalog };\n\nexport const BarChartRenderer = ({ props }: { props: z.infer<typeof barChartCatalog.props> }) => {\n const divRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const el = divRef.current;\n if (!el) {\n return;\n }\n\n let root: am5.Root | undefined;\n\n const init = () => {\n if (root) {\n root.dispose();\n }\n root = am5.Root.new(el);\n applyChartTheme(root, props.theme);\n const chart = root.container.children.push(am5xy.XYChart.new(root, { paddingLeft: 0 }));\n\n if (props.orientation === \"horizontal\") {\n const yAxis = chart.yAxes.push(\n am5xy.CategoryAxis.new(root, {\n categoryField: \"category\",\n renderer: am5xy.AxisRendererY.new(root, { minGridDistance: 20 }),\n }),\n );\n const xAxis = chart.xAxes.push(\n am5xy.ValueAxis.new(root, {\n renderer: am5xy.AxisRendererX.new(root, {}),\n }),\n );\n const series = chart.series.push(\n am5xy.ColumnSeries.new(root, {\n xAxis,\n yAxis,\n valueXField: \"value\",\n categoryYField: \"category\",\n }),\n );\n series.columns.template.setAll({\n tooltipText: `{categoryY}: ${props.unit ?? \"\"}{valueX}`,\n });\n yAxis.data.setAll(props.data);\n series.data.setAll(props.data);\n } else {\n const xAxis = chart.xAxes.push(\n am5xy.CategoryAxis.new(root, {\n categoryField: \"category\",\n renderer: am5xy.AxisRendererX.new(root, { minGridDistance: 30 }),\n }),\n );\n const yAxis = chart.yAxes.push(\n am5xy.ValueAxis.new(root, {\n renderer: am5xy.AxisRendererY.new(root, {}),\n }),\n );\n const series = chart.series.push(\n am5xy.ColumnSeries.new(root, {\n xAxis,\n yAxis,\n valueYField: \"value\",\n categoryXField: \"category\",\n }),\n );\n series.columns.template.setAll({\n tooltipText: `{categoryX}: ${props.unit ?? \"\"}{valueY}`,\n });\n xAxis.data.setAll(props.data);\n series.data.setAll(props.data);\n }\n };\n\n // Defer init until the element has a real width\n const observer = new ResizeObserver((entries) => {\n const width = entries[0]?.contentRect.width ?? 0;\n if (width > 0 && !root) {\n init();\n }\n });\n observer.observe(el);\n\n // Also try immediately in case it's already laid out\n if (el.offsetWidth > 0) {\n init();\n }\n\n return () => {\n observer.disconnect();\n root?.dispose();\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n return <div ref={divRef} className={chartContainer} style={{ height: props.height ?? 300 }} />;\n};\n","import { z } from \"zod\";\n\nexport const buttonCatalog = {\n props: z.object({\n label: z.string(),\n appearance: z.enum([\"primary\", \"secondary\", \"ghost\"]).optional(),\n size: z.enum([\"xsmall\", \"small\", \"medium\", \"large\"]).optional(),\n loading: z.boolean().optional(),\n disabled: z.boolean().optional(),\n }),\n slots: [],\n description:\n \"Clickable button. Every button automatically submits form data when pressed — the element key is used as the actionId to identify which button was clicked. loading: true shows a spinner. disabled: true prevents interaction. size: xsmall | small | medium (default) | large.\",\n};\n","import { Button } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { definedProps } from \"../../utils/defined-props\";\nimport { buttonCatalog } from \"./button.catalog\";\n\nexport { buttonCatalog };\n\nexport const ButtonRenderer = ({\n props,\n emit,\n}: {\n props: z.infer<typeof buttonCatalog.props>;\n emit: (event: string) => void;\n}) => (\n <Button\n appearance={props.appearance ?? \"secondary\"}\n {...definedProps({\n size: props.size,\n loading: props.loading,\n disabled: props.disabled,\n })}\n onClick={() => emit(\"press\")}\n >\n {props.label}\n </Button>\n);\n","import { z } from \"zod\";\n\nexport const cardCatalog = {\n props: z.object({\n background: z.enum([\"strong\", \"stronger\"]).optional(),\n padding: z.enum([\"0\", \"xsmall\", \"small\", \"medium\", \"large\"]).optional(),\n }),\n slots: [\"default\"],\n description:\n \"White surface with padding; groups related content. background: strong | stronger for elevated surfaces. padding: 0 | xsmall | small | medium (default) | large.\",\n};\n","import { Card } from \"@servicetitan/anvil2\";\nimport type { ReactNode } from \"react\";\nimport type { z } from \"zod\";\n\nimport { definedProps } from \"../../utils/defined-props\";\nimport { cardCatalog } from \"./card.catalog\";\n\nexport { cardCatalog };\n\nexport const CardRenderer = ({\n props,\n children,\n}: {\n props: z.infer<typeof cardCatalog.props>;\n children?: ReactNode;\n}) => (\n <Card {...definedProps({ background: props.background, padding: props.padding })}>\n {children}\n </Card>\n);\n","import { z } from \"zod\";\n\nexport const checkboxCatalog = {\n props: z.object({\n label: z.string(),\n checked: z.boolean().optional(),\n disabled: z.boolean().optional(),\n }),\n slots: [],\n description: \"Checkbox input with label. Use $bindState on checked to track state.\",\n};\n","import { z } from \"zod\";\n\nexport const chipCatalog = {\n props: z.object({\n label: z.string(),\n size: z.enum([\"small\", \"medium\"]).optional(),\n color: z.string().optional(),\n icon: z.enum([\"check-circle\", \"in-progress\", \"radio-button-unchecked\"]).optional(),\n removable: z.boolean().optional(),\n }),\n slots: [],\n description:\n \"Inline label pill for metadata, tags, or categories — use for job statuses, not notification counts (use Badge for those). size: small | medium (default). color: any CSS color. icon: optional leading icon. removable: true adds a close button (not available for size=small).\",\n};\n","import { z } from \"zod\";\n\nexport const dividerCatalog = {\n props: z.object({\n vertical: z.boolean().optional(),\n spacing: z.enum([\"0\", \"half\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"8\", \"12\"]).optional(),\n alignContent: z.enum([\"start\", \"center\", \"end\"]).optional(),\n }),\n slots: [],\n description:\n \"Divider between sections. vertical: true for vertical separator. spacing: gap around the divider. alignContent: alignment of content within the divider.\",\n};\n","import { z } from \"zod\";\n\nexport const donutChartCatalog = {\n props: z.object({\n data: z.array(z.object({ category: z.string(), value: z.number() })),\n theme: z.enum([\"monochrome\", \"categorical\", \"semantic\"]).optional(),\n showLegend: z.boolean().optional(),\n height: z.number().optional(),\n unit: z.string().optional(),\n }),\n slots: [],\n description:\n \"Donut chart with optional legend and Anvil2 theme. data: [{category, value}]. theme: monochrome (≤4 vars), categorical (5-9 distinct), semantic (status values).\",\n};\n","import { z } from \"zod\";\n\nexport const flexCatalog = {\n props: z.object({\n direction: z.enum([\"row\", \"column\"]).optional(),\n gap: z.enum([\"1\", \"2\", \"3\", \"4\", \"5\", \"6\"]).optional(),\n alignItems: z.enum([\"center\", \"flex-start\", \"flex-end\", \"stretch\", \"baseline\"]).optional(),\n justifyContent: z\n .enum([\"center\", \"flex-start\", \"flex-end\", \"space-between\", \"space-around\", \"space-evenly\"])\n .optional(),\n wrap: z.enum([\"wrap\", \"nowrap\", \"wrap-reverse\"]).optional(),\n grow: z.number().optional(),\n shrink: z.number().optional(),\n inline: z.boolean().optional(),\n }),\n slots: [\"default\"],\n description:\n \"Flex layout container. gap: 1=4px 2=8px 3=12px 4=16px 5=20px 6=24px. grow: 1=fill available width. alignItems: vertical alignment. justifyContent: horizontal distribution.\",\n};\n","import { z } from \"zod\";\n\nexport const gridCatalog = {\n props: z.object({\n templateColumns: z.string().optional(),\n gap: z.enum([\"1\", \"2\", \"3\", \"4\", \"5\", \"6\"]).optional(),\n bordered: z.boolean().optional(),\n }),\n slots: [\"default\"],\n description:\n 'CSS Grid layout. templateColumns: CSS grid-template-columns value — \"repeat(3, 1fr)\" for equal columns, \"200px 1fr\" for fixed+flex two-column (e.g. key-value tables), \"1fr 1fr 80px\" for multi-column tables. Children flow into grid cells left-to-right, top-to-bottom. gap: 1=4px … 6=24px. bordered: true renders a bordered table with row separators and cell padding — use for key-value and data tables.',\n};\n","import { z } from \"zod\";\n\nexport const iconCatalog = {\n props: z.object({\n name: z.enum([\"check-circle\", \"in-progress\", \"radio-button-unchecked\"]),\n size: z.enum([\"small\", \"medium\", \"large\", \"xlarge\"]).optional(),\n color: z.string().optional(),\n }),\n slots: [],\n description:\n \"Anvil2 icon. name: check-circle=completed checkmark, in-progress=spinning partial circle, radio-button-unchecked=empty circle (pending)\",\n};\n","import { z } from \"zod\";\n\nexport const inputCatalog = {\n props: z.object({\n label: z.string(),\n placeholder: z.string().optional(),\n type: z.enum([\"text\", \"password\", \"email\", \"tel\", \"url\", \"number\"]).optional(),\n value: z.string().optional(),\n disabled: z.boolean().optional(),\n }),\n slots: [],\n description:\n \"Free-text input field for user-typed values (names, notes, numbers, etc). type: text (default), password (masked), email, tel (phone), url, number. Use $bindState on value to bind to state. Prefer this over Select when the value is not from a fixed list.\",\n};\n","import { z } from \"zod\";\n\nexport const lineChartCatalog = {\n props: z.object({\n data: z.array(z.record(z.string(), z.union([z.string(), z.number()]))),\n series: z.array(z.string()).optional(),\n theme: z.enum([\"monochrome\", \"categorical\", \"semantic\"]).optional(),\n showLegend: z.boolean().optional(),\n showDots: z.boolean().optional(),\n height: z.number().optional(),\n unit: z.string().optional(),\n }),\n slots: [],\n description:\n 'Line chart for tracking trends over time with optional multiple series. data: array of objects with a \"category\" key (x-axis label) and one numeric key per series (e.g. [{category: \"Jan\", revenue: 100, cost: 60}]). series: explicit list of series keys to plot (inferred from data keys if omitted, max 6). theme: monochrome (1-2 series), categorical (3-6 distinct). showLegend: true when multiple series (default true for 2+ series). showDots: true adds data-point markers (default true). unit: tooltip value suffix.',\n};\n","import { z } from \"zod\";\n\nexport const linkCatalog = {\n props: z.object({\n label: z.string(),\n href: z.string(),\n appearance: z.enum([\"primary\", \"secondary\"]).optional(),\n target: z.enum([\"_blank\", \"_self\"]).optional(),\n ghost: z.boolean().optional(),\n }),\n slots: [],\n description:\n \"Inline navigation link. href: destination URL. appearance: primary (default) | secondary. target: _blank opens in new tab (shows external-link icon). ghost: quieter styling (primary only).\",\n};\n","import { z } from \"zod\";\n\nexport const listboxCatalog = {\n props: z.object({\n label: z.string(),\n options: z.array(z.object({ value: z.string(), label: z.string() })),\n value: z.string().optional(),\n disabled: z.boolean().optional(),\n }),\n slots: [],\n description:\n \"Listbox for choosing from a fixed list of known options. Use only when options are predefined. For free-text user input use Input instead.\",\n};\n","import { z } from \"zod\";\n\nexport const progressBarCatalog = {\n props: z.object({\n label: z.string(),\n value: z.number().min(0).max(100).optional(),\n description: z.string().optional(),\n indeterminate: z.boolean().optional(),\n }),\n slots: [],\n description:\n \"Progress bar showing task completion. value: 0–100 (percentage). Omit value and set indeterminate=true for unknown progress.\",\n};\n","import { z } from \"zod\";\n\nexport const radioGroupCatalog = {\n props: z.object({\n label: z.string(),\n options: z.array(z.object({ value: z.string(), label: z.string() })),\n value: z.string().optional(),\n disabled: z.boolean().optional(),\n }),\n slots: [],\n description:\n \"Group of radio buttons for single selection. Use $bindState on value to capture selection.\",\n};\n","import { z } from \"zod\";\n\nexport const switchCatalog = {\n props: z.object({\n label: z.string(),\n checked: z.boolean().optional(),\n disabled: z.boolean().optional(),\n }),\n slots: [],\n description:\n \"Toggle switch for binary on/off settings. Prefer over Checkbox for enabling/disabling features. Use $bindState on checked to track state.\",\n};\n","import { z } from \"zod\";\n\nexport const textCatalog = {\n props: z.object({\n content: z.string(),\n variant: z.enum([\"headline\", \"body\", \"eyebrow\"]).optional(),\n size: z.enum([\"small\", \"medium\", \"large\", \"xlarge\"]).optional(),\n subdued: z.boolean().optional(),\n el: z.enum([\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"]).optional(),\n }),\n slots: [],\n description:\n \"Display text. variant: headline=bold title, eyebrow=small label, body=default. size: small/medium/large/xlarge (headline and body only). subdued: deemphasized body text. el: heading element for variant=headline (default h3).\",\n};\n","import { z } from \"zod\";\n\nexport const textareaCatalog = {\n props: z.object({\n label: z.string(),\n placeholder: z.string().optional(),\n description: z.string().optional(),\n moreInfo: z.string().optional(),\n value: z.string().optional(),\n rows: z.number().optional(),\n disabled: z.boolean().optional(),\n }),\n slots: [],\n description:\n \"Multi-line free-text input for long values (notes, descriptions, email body). Use $bindState on value to bind to state. rows: visible row count (default 3).\",\n};\n","import { alertCatalog } from \"./alert.catalog\";\nimport { badgeCatalog } from \"./badge.catalog\";\nimport { barChartCatalog } from \"./bar-chart.catalog\";\nimport { buttonCatalog } from \"./button.catalog\";\nimport { cardCatalog } from \"./card.catalog\";\nimport { checkboxCatalog } from \"./checkbox.catalog\";\nimport { chipCatalog } from \"./chip.catalog\";\nimport { dividerCatalog } from \"./divider.catalog\";\nimport { donutChartCatalog } from \"./donut-chart.catalog\";\nimport { flexCatalog } from \"./flex.catalog\";\nimport { gridCatalog } from \"./grid.catalog\";\nimport { iconCatalog } from \"./icon.catalog\";\nimport { inputCatalog } from \"./input.catalog\";\nimport { lineChartCatalog } from \"./line-chart.catalog\";\nimport { linkCatalog } from \"./link.catalog\";\nimport { listboxCatalog } from \"./listbox.catalog\";\nimport { progressBarCatalog } from \"./progress-bar.catalog\";\nimport { radioGroupCatalog } from \"./radio-group.catalog\";\nimport { switchCatalog } from \"./switch.catalog\";\nimport { textCatalog } from \"./text.catalog\";\nimport { textareaCatalog } from \"./textarea.catalog\";\n\nexport const baseComponents = {\n Text: textCatalog,\n Card: cardCatalog,\n Flex: flexCatalog,\n Grid: gridCatalog,\n Alert: alertCatalog,\n Divider: dividerCatalog,\n Icon: iconCatalog,\n Badge: badgeCatalog,\n Chip: chipCatalog,\n Link: linkCatalog,\n ProgressBar: progressBarCatalog,\n BarChart: barChartCatalog,\n DonutChart: donutChartCatalog,\n LineChart: lineChartCatalog,\n Button: buttonCatalog,\n Checkbox: checkboxCatalog,\n Input: inputCatalog,\n Textarea: textareaCatalog,\n Listbox: listboxCatalog,\n RadioGroup: radioGroupCatalog,\n Switch: switchCatalog,\n};\n","import { defineCatalog } from \"@json-render/core\";\nimport { schema } from \"@json-render/react/schema\";\n\nimport { actionsCatalog } from \"../actions\";\n\nimport { baseComponents } from \"./schemas\";\n\nexport { baseComponents };\n\nexport const catalog = defineCatalog(schema, {\n components: baseComponents,\n actions: actionsCatalog,\n});\n","import { getByPath } from \"@json-render/core\";\nimport { useStateStore } from \"@json-render/react\";\nimport { Checkbox } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { checkboxCatalog } from \"./checkbox.catalog\";\n\nexport { checkboxCatalog };\n\nexport const CheckboxRenderer = ({\n props,\n bindings,\n emit,\n}: {\n props: z.infer<typeof checkboxCatalog.props>;\n bindings?: Record<string, string>;\n emit: (event: string) => void;\n}) => {\n const bindingPath = bindings?.checked;\n const { state, set } = useStateStore();\n const stateChecked = bindingPath\n ? (getByPath(state, bindingPath) as boolean | undefined)\n : undefined;\n const checked = bindingPath ? (stateChecked ?? props.checked ?? false) : (props.checked ?? false);\n\n return (\n <Checkbox\n label={props.label}\n checked={checked}\n onClick={(_e, state) => {\n if (bindingPath) {\n set(bindingPath, !(state?.checked ?? false));\n }\n emit(\"change\");\n }}\n />\n );\n};\n","import { Chip } from \"@servicetitan/anvil2\";\nimport CheckCircle from \"@servicetitan/anvil2/assets/icons/material/round/check_circle.svg\";\nimport RadioButtonUnchecked from \"@servicetitan/anvil2/assets/icons/material/round/radio_button_unchecked.svg\";\nimport InProgress from \"@servicetitan/anvil2/assets/icons/st/in_progress.svg\";\nimport type { z } from \"zod\";\n\nimport { definedProps } from \"../../utils/defined-props\";\nimport { chipCatalog } from \"./chip.catalog\";\n\nexport { chipCatalog };\n\nconst CHIP_ICON_MAP = {\n \"check-circle\": CheckCircle,\n \"in-progress\": InProgress,\n \"radio-button-unchecked\": RadioButtonUnchecked,\n} as const;\n\nexport const ChipRenderer = ({\n props,\n emit,\n}: {\n props: z.infer<typeof chipCatalog.props>;\n emit: (event: string) => void;\n}) => {\n const icon = props.icon ? CHIP_ICON_MAP[props.icon] : undefined;\n const onClose = props.removable && props.size !== \"small\" ? () => emit(\"close\") : undefined;\n return (\n <Chip\n label={props.label}\n {...definedProps({ size: props.size, color: props.color, icon, onClose })}\n />\n );\n};\n","import { Divider } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { definedProps } from \"../../utils/defined-props\";\nimport { dividerCatalog } from \"./divider.catalog\";\n\nexport { dividerCatalog };\n\nexport const DividerRenderer = ({ props }: { props: z.infer<typeof dividerCatalog.props> }) => (\n <Divider\n {...definedProps({\n vertical: props.vertical,\n spacing: props.spacing,\n alignContent: props.alignContent,\n })}\n />\n);\n","import * as am5 from \"@amcharts/amcharts5\";\nimport * as am5percent from \"@amcharts/amcharts5/percent\";\nimport { useEffect, useRef } from \"react\";\nimport type { z } from \"zod\";\nimport { chartContainer } from \"./chart.css\";\nimport { applyChartTheme } from \"./chart-utils\";\nimport { donutChartCatalog } from \"./donut-chart.catalog\";\n\nexport { donutChartCatalog };\n\nexport const DonutChartRenderer = ({\n props,\n}: {\n props: z.infer<typeof donutChartCatalog.props>;\n}) => {\n const divRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const el = divRef.current;\n if (!el) {\n return;\n }\n\n let root: am5.Root | undefined;\n\n const init = () => {\n if (root) {\n root.dispose();\n }\n root = am5.Root.new(el);\n applyChartTheme(root, props.theme);\n const chart = root.container.children.push(\n am5percent.PieChart.new(root, {\n layout: root.horizontalLayout,\n innerRadius: am5.percent(50),\n }),\n );\n const series = chart.series.push(\n am5percent.PieSeries.new(root, {\n valueField: \"value\",\n categoryField: \"category\",\n legendValueText: \"\",\n }),\n );\n series.labels.template.set(\"text\", \"{valuePercentTotal.formatNumber('#.')}%\");\n series.data.setAll(props.data);\n\n if (props.showLegend ?? true) {\n const legend = chart.children.push(\n am5.Legend.new(root, {\n centerY: am5.percent(50),\n y: am5.percent(50),\n layout: root.verticalLayout,\n }),\n );\n legend.data.setAll(series.dataItems);\n }\n };\n\n // Defer init until the element has a real width\n const observer = new ResizeObserver((entries) => {\n const width = entries[0]?.contentRect.width ?? 0;\n if (width > 0 && !root) {\n init();\n }\n });\n observer.observe(el);\n\n // Also try immediately in case it's already laid out\n if (el.offsetWidth > 0) {\n init();\n }\n\n return () => {\n observer.disconnect();\n root?.dispose();\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n return <div ref={divRef} className={chartContainer} style={{ height: props.height ?? 300 }} />;\n};\n","import { Flex } from \"@servicetitan/anvil2\";\nimport type { ReactNode } from \"react\";\nimport type { z } from \"zod\";\n\nimport { definedProps } from \"../../utils/defined-props\";\nimport { flexCatalog } from \"./flex.catalog\";\n\nexport { flexCatalog };\n\nexport const FlexRenderer = ({\n props,\n children,\n}: {\n props: z.infer<typeof flexCatalog.props>;\n children?: ReactNode;\n}) => (\n <Flex\n {...definedProps({\n direction: props.direction,\n gap: props.gap,\n alignItems: props.alignItems,\n justifyContent: props.justifyContent,\n wrap: props.wrap,\n grow: props.grow,\n shrink: props.shrink,\n inline: props.inline,\n })}\n >\n {children}\n </Flex>\n);\n","/**\n * Join class names, dropping any falsy entry. The de-facto `clsx`-shaped\n * helper but kept dependency-free — vendored via `@carto-internal/tools` and\n * compiled into consuming packages at build time.\n */\nexport const cx = (...classes: Array<string | false | null | undefined>): string =>\n classes.filter(Boolean).join(\" \");\n","import { primitive, semantic } from \"@servicetitan/carto-tokens/vanilla-extract\";\nimport { style } from \"@vanilla-extract/css\";\n\nexport const borderedGrid = style({\n display: \"grid\",\n borderWidth: primitive.size[\"25\"],\n borderStyle: \"solid\",\n borderColor: semantic.border.color.standard,\n borderRadius: semantic.radius.trim,\n overflow: \"hidden\",\n});\n\nexport const borderedGridCell = style({\n paddingBlock: primitive.size[\"200\"],\n paddingInline: primitive.size[\"300\"],\n});\n\n/** Row separator — omit on the last row so it does not stack on the container bottom edge. */\nexport const borderedGridRowDivider = style({\n borderBottomWidth: primitive.size[\"25\"],\n borderBottomStyle: \"solid\",\n borderBottomColor: semantic.border.color.standard,\n});\n","import { cx } from \"@carto-internal/tools/cx\";\nimport { Grid } from \"@servicetitan/anvil2\";\nimport { Children, type ReactNode } from \"react\";\nimport type { z } from \"zod\";\nimport { gridCatalog } from \"./grid.catalog\";\nimport { borderedGrid, borderedGridCell, borderedGridRowDivider } from \"./grid.css\";\n\nexport { gridCatalog };\n\n/** Best-effort column count for catalog templateColumns strings (e.g. `1fr 1fr`, `repeat(3, 1fr)`). */\nfunction estimateColumnCount(templateColumns: string): number {\n const repeatMatch = templateColumns.match(/repeat\\(\\s*(\\d+)/);\n if (repeatMatch?.[1]) {\n return Number(repeatMatch[1]);\n }\n return templateColumns.trim().split(/\\s+/).length;\n}\n\nexport const GridRenderer = ({\n props,\n children,\n}: {\n props: z.infer<typeof gridCatalog.props>;\n children?: ReactNode;\n}) => {\n if (props.bordered) {\n const templateColumns = props.templateColumns ?? \"1fr\";\n const childCount = Children.count(children);\n const columnCount = Math.max(1, estimateColumnCount(templateColumns));\n const lastRowStartIndex = Math.max(0, childCount - (childCount % columnCount || columnCount));\n\n return (\n <div className={borderedGrid} style={{ gridTemplateColumns: templateColumns }}>\n {Children.map(children, (child, index) => (\n <div\n className={cx(borderedGridCell, index < lastRowStartIndex && borderedGridRowDivider)}\n >\n {child}\n </div>\n ))}\n </div>\n );\n }\n\n return (\n <Grid templateColumns={props.templateColumns} gap={props.gap ?? \"2\"}>\n {children}\n </Grid>\n );\n};\n","import { Icon } from \"@servicetitan/anvil2\";\nimport CheckCircle from \"@servicetitan/anvil2/assets/icons/material/round/check_circle.svg\";\nimport RadioButtonUnchecked from \"@servicetitan/anvil2/assets/icons/material/round/radio_button_unchecked.svg\";\nimport InProgress from \"@servicetitan/anvil2/assets/icons/st/in_progress.svg\";\nimport type { ComponentProps } from \"react\";\nimport type { z } from \"zod\";\n\nimport { definedProps } from \"../../utils/defined-props\";\nimport { iconCatalog } from \"./icon.catalog\";\n\nexport { iconCatalog };\n\ntype IconName = z.infer<typeof iconCatalog.props>[\"name\"];\ntype IconSvg = NonNullable<ComponentProps<typeof Icon>[\"svg\"]>;\n\nconst SVG_MAP = {\n \"check-circle\": CheckCircle,\n \"in-progress\": InProgress,\n \"radio-button-unchecked\": RadioButtonUnchecked,\n} satisfies Record<IconName, IconSvg>;\n\nexport const IconRenderer = ({ props }: { props: z.infer<typeof iconCatalog.props> }) => {\n const svg = SVG_MAP[props.name];\n if (!svg) {\n return null;\n }\n return <Icon svg={svg} {...definedProps({ size: props.size, color: props.color })} />;\n};\n","import { getByPath } from \"@json-render/core\";\nimport { useStateStore } from \"@json-render/react\";\nimport { TextField } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { definedProps } from \"../../utils/defined-props\";\nimport { inputCatalog } from \"./input.catalog\";\n\nexport { inputCatalog };\n\nexport const InputRenderer = ({\n props,\n bindings,\n emit,\n}: {\n props: z.infer<typeof inputCatalog.props>;\n bindings?: Record<string, string>;\n emit: (event: string) => void;\n}) => {\n const bindingPath = bindings?.value;\n const { state, set } = useStateStore();\n const stateValue = bindingPath\n ? (getByPath(state, bindingPath) as string | undefined)\n : undefined;\n const value = bindingPath ? (stateValue ?? props.value ?? \"\") : (props.value ?? \"\");\n\n return (\n <TextField\n label={props.label}\n type={props.type ?? \"text\"}\n value={value}\n {...definedProps({ placeholder: props.placeholder, disabled: props.disabled })}\n onChange={(e) => {\n if (bindingPath) {\n set(bindingPath, e.target.value);\n }\n emit(\"change\");\n }}\n />\n );\n};\n","import * as am5 from \"@amcharts/amcharts5\";\nimport * as am5xy from \"@amcharts/amcharts5/xy\";\nimport { useEffect, useRef } from \"react\";\nimport type { z } from \"zod\";\nimport { chartContainer } from \"./chart.css\";\nimport { applyChartTheme } from \"./chart-utils\";\nimport { lineChartCatalog } from \"./line-chart.catalog\";\n\nexport { lineChartCatalog };\n\nexport const LineChartRenderer = ({ props }: { props: z.infer<typeof lineChartCatalog.props> }) => {\n const divRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const el = divRef.current;\n if (!el) {\n return;\n }\n\n let root: am5.Root | undefined;\n\n const init = () => {\n if (root) {\n root.dispose();\n }\n root = am5.Root.new(el);\n applyChartTheme(root, props.theme);\n\n const chart = root.container.children.push(am5xy.XYChart.new(root, { paddingLeft: 0 }));\n\n const xAxis = chart.xAxes.push(\n am5xy.CategoryAxis.new(root, {\n categoryField: \"category\",\n renderer: am5xy.AxisRendererX.new(root, { minGridDistance: 30 }),\n }),\n );\n\n const yAxis = chart.yAxes.push(\n am5xy.ValueAxis.new(root, {\n renderer: am5xy.AxisRendererY.new(root, {}),\n }),\n );\n\n const firstRow = props.data[0];\n const seriesKeys =\n props.series ?? (firstRow ? Object.keys(firstRow).filter((k) => k !== \"category\") : []);\n\n for (const key of seriesKeys) {\n const series = chart.series.push(\n am5xy.LineSeries.new(root, {\n name: key,\n xAxis,\n yAxis,\n valueYField: key,\n categoryXField: \"category\",\n tooltip: am5.Tooltip.new(root, {\n labelText: `${key}: ${props.unit ?? \"\"}{valueY}`,\n }),\n }),\n );\n\n series.strokes.template.setAll({ strokeWidth: 2 });\n\n if (props.showDots ?? true) {\n series.bullets.push(() => {\n if (!root) {\n throw new Error(\"Chart root is not initialized\");\n }\n const fill = series.get(\"fill\");\n return am5.Bullet.new(root, {\n sprite: am5.Circle.new(root, {\n radius: 4,\n ...(fill ? { fill } : {}),\n strokeWidth: 0,\n }),\n });\n });\n }\n\n series.data.setAll(props.data);\n }\n\n xAxis.data.setAll(props.data);\n\n const showLegend = props.showLegend ?? seriesKeys.length > 1;\n if (showLegend) {\n chart.children\n .push(\n am5.Legend.new(root, {\n centerX: am5.percent(50),\n x: am5.percent(50),\n marginTop: 8,\n }),\n )\n .data.setAll(chart.series.values);\n }\n };\n\n const observer = new ResizeObserver((entries) => {\n const width = entries[0]?.contentRect.width ?? 0;\n if (width > 0 && !root) {\n init();\n }\n });\n observer.observe(el);\n\n if (el.offsetWidth > 0) {\n init();\n }\n\n return () => {\n observer.disconnect();\n root?.dispose();\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n return <div ref={divRef} className={chartContainer} style={{ height: props.height ?? 300 }} />;\n};\n","import { Link } from \"@servicetitan/anvil2\";\nimport type { MouseEvent } from \"react\";\nimport type { z } from \"zod\";\n\nimport { linkCatalog } from \"./link.catalog\";\n\nexport { linkCatalog };\n\nexport const LinkRenderer = ({\n props,\n emit,\n}: {\n props: z.infer<typeof linkCatalog.props>;\n emit: (event: string) => void;\n}) => {\n const { label, href, appearance, target, ghost } = props;\n const onClick = (e: MouseEvent<HTMLAnchorElement>) => {\n e.preventDefault();\n emit(\"press\");\n };\n\n if (appearance === \"secondary\") {\n return (\n <Link\n appearance=\"secondary\"\n ghost={false}\n href={href}\n {...(target ? { target } : {})}\n onClick={onClick}\n >\n {label}\n </Link>\n );\n }\n\n if (ghost !== undefined) {\n return (\n <Link\n appearance=\"primary\"\n ghost={ghost}\n href={href}\n {...(target ? { target } : {})}\n onClick={onClick}\n >\n {label}\n </Link>\n );\n }\n\n return (\n <Link appearance=\"primary\" href={href} {...(target ? { target } : {})} onClick={onClick}>\n {label}\n </Link>\n );\n};\n","function toPrimitive(t, r) {\n if (\"object\" != typeof t || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != typeof i) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\n\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == typeof i ? i : String(i);\n}\n\nfunction _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\n\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\n\nfunction mapValues(input, fn) {\n var result = {};\n for (var _key in input) {\n result[_key] = fn(input[_key], _key);\n }\n return result;\n}\n\nvar shouldApplyCompound = (compoundCheck, selections, defaultVariants) => {\n for (var key of Object.keys(compoundCheck)) {\n var _selections$key;\n if (compoundCheck[key] !== ((_selections$key = selections[key]) !== null && _selections$key !== void 0 ? _selections$key : defaultVariants[key])) {\n return false;\n }\n }\n return true;\n};\nvar createRuntimeFn = config => {\n var runtimeFn = options => {\n var className = config.defaultClassName;\n var selections = _objectSpread2(_objectSpread2({}, config.defaultVariants), options);\n for (var variantName in selections) {\n var _selections$variantNa;\n var variantSelection = (_selections$variantNa = selections[variantName]) !== null && _selections$variantNa !== void 0 ? _selections$variantNa : config.defaultVariants[variantName];\n if (variantSelection != null) {\n var selection = variantSelection;\n if (typeof selection === 'boolean') {\n // @ts-expect-error\n selection = selection === true ? 'true' : 'false';\n }\n var selectionClassName =\n // @ts-expect-error\n config.variantClassNames[variantName][selection];\n if (selectionClassName) {\n className += ' ' + selectionClassName;\n }\n }\n }\n for (var [compoundCheck, compoundClassName] of config.compoundVariants) {\n if (shouldApplyCompound(compoundCheck, selections, config.defaultVariants)) {\n className += ' ' + compoundClassName;\n }\n }\n return className;\n };\n runtimeFn.variants = () => Object.keys(config.variantClassNames);\n runtimeFn.classNames = {\n get base() {\n return config.defaultClassName.split(' ')[0];\n },\n get variants() {\n return mapValues(config.variantClassNames, classNames => mapValues(classNames, className => className.split(' ')[0]));\n }\n };\n return runtimeFn;\n};\n\nexport { createRuntimeFn as c, mapValues as m };\n","import { semantic } from \"@servicetitan/carto-tokens/vanilla-extract\";\nimport { recipe } from \"@vanilla-extract/recipes\";\n\nexport const listboxWrapper = recipe({\n base: {},\n variants: {\n disabled: {\n true: {\n pointerEvents: \"none\",\n opacity: semantic.opacity.disabled,\n },\n false: {},\n },\n },\n});\n","import { getByPath } from \"@json-render/core\";\nimport { useStateStore } from \"@json-render/react\";\nimport { FieldLabel, Listbox } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { listboxCatalog } from \"./listbox.catalog\";\nimport { listboxWrapper } from \"./listbox.css\";\n\nexport { listboxCatalog };\n\nexport const ListboxRenderer = ({\n props,\n bindings,\n emit,\n}: {\n props: z.infer<typeof listboxCatalog.props>;\n bindings?: Record<string, string>;\n emit: (event: string) => void;\n}) => {\n const bindingPath = bindings?.value;\n const { state, set } = useStateStore();\n const stateSelected = bindingPath\n ? (getByPath(state, bindingPath) as string | undefined)\n : undefined;\n const selected = bindingPath ? (stateSelected ?? props.value ?? \"\") : (props.value ?? \"\");\n\n const items = props.options.map((o) => ({ id: o.value, label: o.label }));\n const selectedItem = items.find((i) => i.id === selected);\n\n return (\n <div className={listboxWrapper({ disabled: props.disabled ?? false })}>\n <FieldLabel>{props.label}</FieldLabel>\n <Listbox\n items={items}\n {...(selectedItem ? { selected: selectedItem } : {})}\n onSelectionChange={(item: { id: string } | undefined) => {\n const val = item?.id ?? \"\";\n if (bindingPath) {\n set(bindingPath, val);\n }\n emit(\"change\");\n }}\n >\n {({ items: renderedItems }: { items: typeof items }) =>\n renderedItems.map((item) => (\n <Listbox.Option key={item.id} item={item}>\n {item.label}\n </Listbox.Option>\n ))\n }\n </Listbox>\n </div>\n );\n};\n","import { ProgressBar } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { definedProps } from \"../../utils/defined-props\";\nimport { progressBarCatalog } from \"./progress-bar.catalog\";\n\nexport { progressBarCatalog };\n\nexport const ProgressBarRenderer = ({\n props,\n}: {\n props: z.infer<typeof progressBarCatalog.props>;\n}) => {\n const descriptionProps = definedProps({ description: props.description });\n\n if (props.indeterminate) {\n return <ProgressBar label={props.label} indeterminate {...descriptionProps} />;\n }\n\n if (props.value !== undefined) {\n return <ProgressBar label={props.label} value={props.value} {...descriptionProps} />;\n }\n\n return <ProgressBar label={props.label} indeterminate {...descriptionProps} />;\n};\n","import { getByPath } from \"@json-render/core\";\nimport { useStateStore } from \"@json-render/react\";\nimport { Radio } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { radioGroupCatalog } from \"./radio-group.catalog\";\n\nexport { radioGroupCatalog };\n\nexport const RadioGroupRenderer = ({\n props,\n bindings,\n emit,\n}: {\n props: z.infer<typeof radioGroupCatalog.props>;\n bindings?: Record<string, string>;\n emit: (event: string) => void;\n}) => {\n const bindingPath = bindings?.value;\n const { state, set } = useStateStore();\n const stateSelected = bindingPath\n ? (getByPath(state, bindingPath) as string | undefined)\n : undefined;\n const selected = bindingPath ? (stateSelected ?? props.value ?? \"\") : (props.value ?? \"\");\n\n return (\n <Radio.Group legend={props.label}>\n {props.options.map((o) => (\n <Radio\n key={o.value}\n label={o.label}\n value={o.value}\n checked={selected === o.value}\n onChange={() => {\n if (bindingPath) {\n set(bindingPath, o.value);\n }\n emit(\"change\");\n }}\n />\n ))}\n </Radio.Group>\n );\n};\n","import { getByPath } from \"@json-render/core\";\nimport { useStateStore } from \"@json-render/react\";\nimport { Switch } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { switchCatalog } from \"./switch.catalog\";\n\nexport { switchCatalog };\n\nexport const SwitchRenderer = ({\n props,\n bindings,\n emit,\n}: {\n props: z.infer<typeof switchCatalog.props>;\n bindings?: Record<string, string>;\n emit: (event: string) => void;\n}) => {\n const bindingPath = bindings?.checked;\n const { state, set } = useStateStore();\n const stateChecked = bindingPath\n ? (getByPath(state, bindingPath) as boolean | undefined)\n : undefined;\n const checked = bindingPath ? (stateChecked ?? props.checked ?? false) : (props.checked ?? false);\n\n return (\n <Switch\n label={props.label}\n value={props.label}\n checked={checked}\n onChange={(_e, state) => {\n if (bindingPath) {\n set(bindingPath, state?.checked ?? false);\n }\n emit(\"change\");\n }}\n />\n );\n};\n","import { Text } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { textCatalog } from \"./text.catalog\";\n\nexport { textCatalog };\n\nexport const TextRenderer = ({ props }: { props: z.infer<typeof textCatalog.props> }) => {\n if (props.variant === \"headline\") {\n const el = props.el ?? \"h3\";\n if (props.size !== undefined) {\n return (\n <Text variant=\"headline\" el={el} size={props.size}>\n {props.content}\n </Text>\n );\n }\n return (\n <Text variant=\"headline\" el={el}>\n {props.content}\n </Text>\n );\n }\n if (props.variant === \"eyebrow\") {\n return <Text variant=\"eyebrow\">{props.content}</Text>;\n }\n if (props.size !== undefined && props.subdued !== undefined) {\n return (\n <Text variant=\"body\" size={props.size} subdued={props.subdued}>\n {props.content}\n </Text>\n );\n }\n if (props.size !== undefined) {\n return (\n <Text variant=\"body\" size={props.size}>\n {props.content}\n </Text>\n );\n }\n if (props.subdued !== undefined) {\n return (\n <Text variant=\"body\" subdued={props.subdued}>\n {props.content}\n </Text>\n );\n }\n return <Text variant=\"body\">{props.content}</Text>;\n};\n","import { getByPath } from \"@json-render/core\";\nimport { useStateStore } from \"@json-render/react\";\nimport { Textarea } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { definedProps } from \"../../utils/defined-props\";\nimport { textareaCatalog } from \"./textarea.catalog\";\n\nexport { textareaCatalog };\n\nexport const TextareaRenderer = ({\n props,\n bindings,\n emit,\n}: {\n props: z.infer<typeof textareaCatalog.props>;\n bindings?: Record<string, string>;\n emit: (event: string) => void;\n}) => {\n const bindingPath = bindings?.value;\n const { state, set } = useStateStore();\n const stateValue = bindingPath\n ? (getByPath(state, bindingPath) as string | undefined)\n : undefined;\n const value = bindingPath ? (stateValue ?? props.value ?? \"\") : (props.value ?? \"\");\n\n return (\n <Textarea\n label={props.label}\n value={value}\n {...definedProps({\n placeholder: props.placeholder,\n description: props.description,\n moreInfo: props.moreInfo,\n rows: props.rows,\n disabled: props.disabled,\n })}\n onChange={(e) => {\n if (bindingPath) {\n set(bindingPath, e.target.value);\n }\n emit(\"change\");\n }}\n />\n );\n};\n","import type { CatalogEntry } from \"../../types\";\nimport { ALL_RENDERERS } from \"../../types\";\n\nimport { AlertRenderer, alertCatalog } from \"./alert\";\nimport { BadgeRenderer, badgeCatalog } from \"./badge\";\nimport { BarChartRenderer, barChartCatalog } from \"./bar-chart\";\nimport { ButtonRenderer, buttonCatalog } from \"./button\";\nimport { CardRenderer, cardCatalog } from \"./card\";\nimport { baseComponents, catalog } from \"./catalog-def\";\nimport { CheckboxRenderer, checkboxCatalog } from \"./checkbox\";\nimport { ChipRenderer, chipCatalog } from \"./chip\";\nimport { DividerRenderer, dividerCatalog } from \"./divider\";\nimport { DonutChartRenderer, donutChartCatalog } from \"./donut-chart\";\nimport { FlexRenderer, flexCatalog } from \"./flex\";\nimport { GridRenderer, gridCatalog } from \"./grid\";\nimport { IconRenderer, iconCatalog } from \"./icon\";\nimport { InputRenderer, inputCatalog } from \"./input\";\nimport { LineChartRenderer, lineChartCatalog } from \"./line-chart\";\nimport { LinkRenderer, linkCatalog } from \"./link\";\nimport { ListboxRenderer, listboxCatalog } from \"./listbox\";\nimport { ProgressBarRenderer, progressBarCatalog } from \"./progress-bar\";\nimport { RadioGroupRenderer, radioGroupCatalog } from \"./radio-group\";\nimport { SwitchRenderer, switchCatalog } from \"./switch\";\nimport { TextRenderer, textCatalog } from \"./text\";\nimport { TextareaRenderer, textareaCatalog } from \"./textarea\";\n\nexport { baseComponents, catalog };\n\nexport const coreCatalogEntries: CatalogEntry[] = [\n { name: \"Text\", catalog: textCatalog, renderer: TextRenderer, renderers: ALL_RENDERERS },\n { name: \"Card\", catalog: cardCatalog, renderer: CardRenderer, renderers: ALL_RENDERERS },\n { name: \"Flex\", catalog: flexCatalog, renderer: FlexRenderer, renderers: ALL_RENDERERS },\n { name: \"Grid\", catalog: gridCatalog, renderer: GridRenderer, renderers: ALL_RENDERERS },\n { name: \"Alert\", catalog: alertCatalog, renderer: AlertRenderer, renderers: ALL_RENDERERS },\n { name: \"Divider\", catalog: dividerCatalog, renderer: DividerRenderer, renderers: ALL_RENDERERS },\n { name: \"Icon\", catalog: iconCatalog, renderer: IconRenderer, renderers: ALL_RENDERERS },\n { name: \"Badge\", catalog: badgeCatalog, renderer: BadgeRenderer, renderers: ALL_RENDERERS },\n { name: \"Chip\", catalog: chipCatalog, renderer: ChipRenderer, renderers: ALL_RENDERERS },\n { name: \"Link\", catalog: linkCatalog, renderer: LinkRenderer, renderers: ALL_RENDERERS },\n {\n name: \"ProgressBar\",\n catalog: progressBarCatalog,\n renderer: ProgressBarRenderer,\n renderers: ALL_RENDERERS,\n },\n {\n name: \"BarChart\",\n catalog: barChartCatalog,\n renderer: BarChartRenderer,\n renderers: ALL_RENDERERS,\n },\n {\n name: \"DonutChart\",\n catalog: donutChartCatalog,\n renderer: DonutChartRenderer,\n renderers: ALL_RENDERERS,\n },\n {\n name: \"LineChart\",\n catalog: lineChartCatalog,\n renderer: LineChartRenderer,\n renderers: ALL_RENDERERS,\n },\n { name: \"Button\", catalog: buttonCatalog, renderer: ButtonRenderer, renderers: ALL_RENDERERS },\n {\n name: \"Checkbox\",\n catalog: checkboxCatalog,\n renderer: CheckboxRenderer,\n renderers: ALL_RENDERERS,\n },\n { name: \"Input\", catalog: inputCatalog, renderer: InputRenderer, renderers: ALL_RENDERERS },\n {\n name: \"Textarea\",\n catalog: textareaCatalog,\n renderer: TextareaRenderer,\n renderers: ALL_RENDERERS,\n },\n { name: \"Listbox\", catalog: listboxCatalog, renderer: ListboxRenderer, renderers: ALL_RENDERERS },\n {\n name: \"RadioGroup\",\n catalog: radioGroupCatalog,\n renderer: RadioGroupRenderer,\n renderers: ALL_RENDERERS,\n },\n { name: \"Switch\", catalog: switchCatalog, renderer: SwitchRenderer, renderers: ALL_RENDERERS },\n];\n\nexport const baseRenderers = Object.fromEntries(\n coreCatalogEntries.map(({ name, renderer }) => [name, renderer]),\n);\n","import { type Catalog, defineCatalog } from \"@json-render/core\";\nimport { schema } from \"@json-render/react/schema\";\nimport type { z } from \"zod\";\n\nimport { actionsCatalog } from \"./core/actions\";\nimport { baseComponents } from \"./core/catalog/schemas\";\n\nexport interface ComponentCatalogDef {\n props: z.ZodType;\n slots: string[];\n description: string;\n}\n\nexport interface ActionCatalogDef {\n params: z.ZodType;\n description: string;\n}\n\nexport interface TeamCatalogDef {\n prefix: string;\n components?: Record<string, ComponentCatalogDef>;\n actions?: Record<string, ActionCatalogDef>;\n /** Appended to base rules in generated prompt */\n rules?: string;\n}\n\nexport interface MergedCatalog {\n prefix: string;\n catalog: Catalog;\n prompt(baseRules: string): string;\n jsonSchema(): object;\n}\n\nexport function createTeamCatalog(def: TeamCatalogDef): TeamCatalogDef {\n return def;\n}\n\nexport function mergeCatalogs(teamDef: TeamCatalogDef): MergedCatalog {\n const mergedComponents = {\n ...baseComponents,\n ...(teamDef.components ?? {}),\n } as Record<string, ComponentCatalogDef>;\n\n const prefixedTeamActions = Object.fromEntries(\n Object.entries(teamDef.actions ?? {}).map(([key, val]) => [`${teamDef.prefix}.${key}`, val]),\n );\n\n const mergedActions = {\n ...actionsCatalog,\n ...prefixedTeamActions,\n } as Record<string, ActionCatalogDef>;\n\n const mergedCatalog = defineCatalog(schema, {\n components: mergedComponents,\n actions: mergedActions,\n });\n\n return {\n prefix: teamDef.prefix,\n catalog: mergedCatalog,\n prompt(baseRules: string): string {\n const parts = [mergedCatalog.prompt(), \"\\n\", baseRules];\n if (teamDef.rules) {\n parts.push(\"\\n\", teamDef.rules);\n }\n return parts.join(\"\");\n },\n jsonSchema(): object {\n return mergedCatalog.jsonSchema();\n },\n };\n}\n","import { z } from \"zod\";\n\nexport const revenueCardCatalog = {\n props: z.object({\n title: z.string(),\n value: z.string(),\n trend: z.enum([\"up\", \"down\", \"flat\"]).optional(),\n delta: z.string().optional(),\n }),\n slots: [] as string[],\n description:\n 'KPI metric card. trend: up=green↑ down=red↓ flat=grey→. delta e.g. \"+12% vs last month\". Leaf node — no children.',\n};\n","import { primitive, semantic } from \"@servicetitan/carto-tokens/vanilla-extract\";\nimport { type RecipeVariants, recipe } from \"@vanilla-extract/recipes\";\n\nexport const trendText = recipe({\n base: {\n fontWeight: primitive.font.weight[\"600\"],\n // TODO(carto-tokens): adopt a component/semantic typography token for 13px eyebrow-adjacent sizing.\n fontSize: \"13px\",\n },\n variants: {\n trend: {\n up: { color: primitive.color.green[\"600\"] },\n down: { color: primitive.color.red[\"600\"] },\n flat: { color: semantic.foreground.color.subtle },\n },\n },\n});\n\nexport type TrendTextVariants = RecipeVariants<typeof trendText>;\n","import { Card, Flex, Text } from \"@servicetitan/anvil2\";\nimport type { z } from \"zod\";\n\nimport { revenueCardCatalog } from \"./revenue-card.catalog\";\nimport { trendText } from \"./revenue-card.css\";\n\nexport { revenueCardCatalog };\n\nexport const RevenueCardRenderer = ({\n props,\n}: {\n props: z.infer<typeof revenueCardCatalog.props>;\n}) => {\n const trend = props.trend ?? \"flat\";\n const trendIcon = props.trend === \"up\" ? \"↑\" : props.trend === \"down\" ? \"↓\" : \"→\";\n const trendClassName = trendText({ trend });\n\n return (\n <Card>\n <Flex direction=\"column\" gap=\"2\">\n <Text variant=\"eyebrow\">{props.title}</Text>\n <Text variant=\"headline\" el=\"h3\">\n {props.value}\n </Text>\n {props.delta && (\n <Flex direction=\"row\" gap=\"1\" alignItems=\"center\">\n <span className={trendClassName}>{trendIcon}</span>\n <Text variant=\"eyebrow\" className={trendClassName}>\n {props.delta}\n </Text>\n </Flex>\n )}\n </Flex>\n </Card>\n );\n};\n","import type { CatalogEntry } from \"../../types\";\nimport { ALL_RENDERERS } from \"../../types\";\n\nimport { marketingCatalog } from \"./catalog\";\nimport { RevenueCardRenderer } from \"./components/revenue-card\";\nimport { revenueCardCatalog } from \"./components/revenue-card.catalog\";\n\nexport { marketingRenderers } from \"./components\";\nexport { marketingCatalog };\n\nexport const marketingCatalogEntries: CatalogEntry[] = [\n {\n name: \"RevenueCard\",\n catalog: revenueCardCatalog,\n renderer: RevenueCardRenderer,\n renderers: ALL_RENDERERS,\n },\n];\n\nexport { teams } from \"./teams\";\n","import type { AllComponentRenderers } from \"./renderers/types\";\nimport type { ComponentCatalogDef } from \"./team-catalog\";\nimport type { CatalogEntry, RendererContext } from \"./types\";\n\nexport function filterCatalogEntries(\n entries: CatalogEntry[],\n renderer: RendererContext,\n): CatalogEntry[] {\n return entries.filter(({ renderers }) => renderers.includes(renderer));\n}\n\nexport function toComponentCatalogMap(\n entries: CatalogEntry[],\n): Record<string, ComponentCatalogDef> {\n return Object.fromEntries(entries.map(({ name, catalog }) => [name, catalog]));\n}\n\nexport function toComponentRendererMap(entries: CatalogEntry[]): AllComponentRenderers {\n return Object.fromEntries(\n entries.map(({ name, renderer }) => [name, renderer]),\n ) as AllComponentRenderers;\n}\n","import { defineCatalog } from \"@json-render/core\";\nimport { type Components, defineRegistry } from \"@json-render/react\";\nimport { schema } from \"@json-render/react/schema\";\n\nimport { actionsCatalog, actionsHandlers } from \"./core/actions\";\nimport { coreCatalogEntries } from \"./core/catalog\";\nimport { catalog as coreCatalog } from \"./core/catalog/catalog-def\";\nimport { marketingCatalogEntries } from \"./marketing/catalog\";\nimport {\n filterCatalogEntries,\n toComponentCatalogMap,\n toComponentRendererMap,\n} from \"./registry-utils\";\nimport type { RendererContext } from \"./types\";\n\nconst allCatalogEntries = [...coreCatalogEntries, ...marketingCatalogEntries];\n\nexport function getRegistry(renderer: RendererContext = \"chat\") {\n const filtered = filterCatalogEntries(allCatalogEntries, renderer);\n const components = toComponentCatalogMap(filtered);\n const renderers = toComponentRendererMap(filtered);\n\n const catalog = defineCatalog(schema, {\n components,\n actions: actionsCatalog,\n });\n\n return defineRegistry(catalog, {\n components: renderers as Components<typeof catalog>,\n actions: actionsHandlers,\n });\n}\n\n/** Default chat registry — preserves parity with the original flat registry export. */\nconst defaultRegistry = getRegistry(\"chat\");\n\nexport const registry = defaultRegistry.registry;\nexport const handlers = defaultRegistry.handlers;\nexport const executeAction = defaultRegistry.executeAction;\n\n/** Core catalog used for schema generation and prompt artifacts. */\nexport { coreCatalog as catalog };\n","import type { Spec } from \"@json-render/core\";\n\n/**\n * Enrich the spec so every Button element automatically gets\n * on.press → submitUserAction wired up, using the button's element key\n * as actionId. Buttons that already have on.press are left untouched.\n */\nexport function enrichButtonActions(spec: Spec): Spec {\n const elements = { ...spec.elements };\n for (const [key, element] of Object.entries(elements)) {\n if (element.type !== \"Button\") {\n continue;\n }\n if (element.on?.press) {\n continue;\n }\n const actionId = key;\n elements[key] = {\n ...element,\n on: {\n ...element.on,\n press: { action: \"atlas.submitUserAction\", params: { actionId } },\n },\n };\n }\n return { ...spec, elements };\n}\n","import type { Spec } from \"@json-render/core\";\nimport { useMemo } from \"react\";\n\nexport type SpecEnrichment = (spec: Spec) => Spec;\n\nexport function useEnrichedSpec(spec: Spec, enrichments: SpecEnrichment[]): Spec {\n return useMemo(\n () => enrichments.reduce((enriched, enrich) => enrich(enriched), spec),\n [spec, enrichments],\n );\n}\n","import type { Spec } from \"@json-render/core\";\nimport {\n type ComponentRegistry,\n createStateStore,\n type DefineRegistryResult,\n JSONUIProvider,\n Renderer,\n} from \"@json-render/react\";\nimport { useMemo, useRef } from \"react\";\nimport { enrichButtonActions } from \"./internal/enrichments/button-actions\";\nimport { useEnrichedSpec } from \"./internal/enrichments/useEnrichedSpec\";\n\nconst SPEC_ENRICHMENTS = [enrichButtonActions];\n\ntype SetState = (path: string, value: unknown) => void;\n\nexport interface SpecActionHelpers {\n setState: SetState;\n getSnapshot: () => Record<string, unknown>;\n}\n\nexport type SpecActionHandler = (params: unknown) => void | Promise<void>;\n\nexport type SpecActionsFactory = (helpers: SpecActionHelpers) => Record<string, SpecActionHandler>;\n\nexport interface SpecRendererProps {\n spec: Spec;\n registry: ComponentRegistry;\n handlers: DefineRegistryResult[\"handlers\"];\n /**\n * Build the runtime action handlers for this spec. Called with helpers that\n * expose the spec's local state store (`setState` for writing back,\n * `getSnapshot` for reading the current form data). Handlers returned here\n * are merged on top of the catalog defaults from `handlers`, so hosts can\n * implement any action declared in the catalog (e.g. `atlas.submitUserAction`,\n * `atlas.navigate`, `atlas.toolCall`) without changes to this package.\n */\n actions?: SpecActionsFactory;\n}\n\nexport const SpecRenderer = ({ spec, registry, handlers, actions }: SpecRendererProps) => {\n const enrichedSpec = useEnrichedSpec(spec, SPEC_ENRICHMENTS);\n\n const specRef = useRef<Spec | null>(null);\n const storeRef = useRef<ReturnType<typeof createStateStore> | null>(null);\n if (specRef.current !== spec) {\n specRef.current = spec;\n const specState = (enrichedSpec as unknown as { state?: Record<string, unknown> }).state ?? {};\n storeRef.current = createStateStore(specState);\n }\n if (storeRef.current === null) {\n throw new Error(\"State store is not initialized\");\n }\n const store = storeRef.current;\n\n const resolvedHandlers = useMemo(() => {\n const base = handlers(\n () => undefined,\n () => store.getSnapshot(),\n );\n const hostActions = actions\n ? actions({ setState: store.set, getSnapshot: () => store.getSnapshot() })\n : {};\n return { ...base, ...hostActions };\n }, [handlers, actions, store]);\n\n const functions = useMemo(\n () => ({\n computeTotal: (args: Record<string, unknown>) => {\n const qty = Number.parseFloat(String((args.quantity as number | string) ?? 0)) || 0;\n const price =\n Number.parseFloat(\n String((args.unitPrice as number | string) ?? \"0\").replace(/[^0-9.]/g, \"\"),\n ) || 0;\n return `$${(qty * price).toFixed(2)}`;\n },\n }),\n [],\n );\n\n return (\n <JSONUIProvider\n registry={registry}\n store={store}\n handlers={resolvedHandlers}\n functions={functions}\n >\n <Renderer spec={enrichedSpec} registry={registry} />\n </JSONUIProvider>\n );\n};\n"],"x_google_ignoreList":[46],"mappings":"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"}