@cloudscape-design/chart-components 1.0.52 → 1.0.54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/chart-api/chart-extra-navigation.d.ts +1 -0
- package/core/chart-api/chart-extra-navigation.js +11 -2
- package/core/chart-api/chart-extra-navigation.js.map +1 -1
- package/core/chart-api/chart-extra-tooltip.js +1 -1
- package/core/chart-api/chart-extra-tooltip.js.map +1 -1
- package/core/chart-api/index.js +11 -0
- package/core/chart-api/index.js.map +1 -1
- package/internal/components/series-marker/render-marker.d.ts +9 -1
- package/internal/components/series-marker/render-marker.js +42 -20
- package/internal/components/series-marker/render-marker.js.map +1 -1
- package/internal/environment.js +1 -1
- package/internal/environment.json +1 -1
- package/internal/generated/styles/tokens.d.ts +1 -0
- package/internal/generated/styles/tokens.js +1 -0
- package/internal/generated/theming/index.cjs +5 -0
- package/internal/generated/theming/index.cjs.d.ts +9 -0
- package/internal/generated/theming/index.d.ts +9 -0
- package/internal/generated/theming/index.js +5 -0
- package/internal/manifest.json +1 -1
- package/internal/utils/dom.js +7 -2
- package/internal/utils/dom.js.map +1 -1
- package/package.json +1 -1
|
@@ -7,6 +7,7 @@ export interface ChartExtraNavigationHandlers {
|
|
|
7
7
|
onBlur(): void;
|
|
8
8
|
onActivatePoint(point: Highcharts.Point, group: readonly Highcharts.Point[]): void;
|
|
9
9
|
onActivateGroup(group: readonly Highcharts.Point[]): void;
|
|
10
|
+
onDismissHoverTooltip(): boolean;
|
|
10
11
|
}
|
|
11
12
|
export type FocusedState = FocusedStateChart | FocusedStateGroup | FocusedStatePoint;
|
|
12
13
|
interface FocusedStateChart {
|
|
@@ -96,6 +96,7 @@ export class ChartExtraNavigation {
|
|
|
96
96
|
this.onKeyDownChart = (event) => {
|
|
97
97
|
handleKey(event, {
|
|
98
98
|
onActivate: () => this.moveToFirstGroup(),
|
|
99
|
+
onEscape: () => this.handlers.onDismissHoverTooltip(),
|
|
99
100
|
onInlineStart: () => this.moveToLastGroup(),
|
|
100
101
|
onInlineEnd: () => this.moveToFirstGroup(),
|
|
101
102
|
onBlockStart: () => this.moveToLastGroup(),
|
|
@@ -108,7 +109,11 @@ export class ChartExtraNavigation {
|
|
|
108
109
|
const i = !!this.context.chart().inverted;
|
|
109
110
|
handleKey(event, {
|
|
110
111
|
onActivate: () => this.activateGroup(group),
|
|
111
|
-
onEscape: () =>
|
|
112
|
+
onEscape: () => {
|
|
113
|
+
if (!this.handlers.onDismissHoverTooltip()) {
|
|
114
|
+
this.moveToChart();
|
|
115
|
+
}
|
|
116
|
+
},
|
|
112
117
|
onInlineStart: () => (i ? this.moveToFirstInGroup(group) : this.moveToPrevGroup(group)),
|
|
113
118
|
onInlineEnd: () => (i ? this.moveToLastInGroup(group) : this.moveToNextGroup(group)),
|
|
114
119
|
onBlockStart: () => (i ? this.moveToPrevGroup(group) : this.moveToLastInGroup(group)),
|
|
@@ -123,7 +128,11 @@ export class ChartExtraNavigation {
|
|
|
123
128
|
const i = !!this.context.chart().inverted;
|
|
124
129
|
handleKey(event, {
|
|
125
130
|
onActivate: () => this.activatePoint(point, group),
|
|
126
|
-
onEscape: () =>
|
|
131
|
+
onEscape: () => {
|
|
132
|
+
if (!this.handlers.onDismissHoverTooltip()) {
|
|
133
|
+
this.moveToParentGroup(point);
|
|
134
|
+
}
|
|
135
|
+
},
|
|
127
136
|
onInlineEnd: () => (i ? this.moveToPrevInGroup(point) : this.moveToNextInSeries(point)),
|
|
128
137
|
onInlineStart: () => (i ? this.moveToNextInGroup(point) : this.moveToPrevInSeries(point)),
|
|
129
138
|
onBlockEnd: () => (i ? this.moveToNextInSeries(point) : this.moveToNextInGroup(point)),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart-extra-navigation.js","sourceRoot":"","sources":["../../../../src/core/chart-api/chart-extra-navigation.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type Highcharts from \"highcharts\";\n\nimport {\n circleIndex,\n getIsRtl,\n handleKey as toolkitHandleKey,\n KeyCode,\n} from \"@cloudscape-design/component-toolkit/internal\";\n\nimport * as Styles from \"../../internal/chart-styles\";\nimport { SVGRendererPool } from \"../../internal/utils/renderer-utils\";\nimport { Rect } from \"../interfaces\";\nimport { getGroupRect, getPointRect, isPointVisible, isXThreshold } from \"../utils\";\nimport { ChartExtraContext } from \"./chart-extra-context\";\n\n// In charts with many data points one can navigate faster by using Page Down/Up keys that\n// navigate PAGE_SIZE_PERCENTAGE of the points forwards or backwards.\nconst PAGE_SIZE_PERCENTAGE = 0.05;\n\nexport interface ChartExtraNavigationHandlers {\n onFocusChart(): void;\n onFocusPoint(point: Highcharts.Point, group: readonly Highcharts.Point[]): void;\n onFocusGroup(group: readonly Highcharts.Point[]): void;\n onBlur(): void;\n onActivatePoint(point: Highcharts.Point, group: readonly Highcharts.Point[]): void;\n onActivateGroup(group: readonly Highcharts.Point[]): void;\n}\n\nexport type FocusedState = FocusedStateChart | FocusedStateGroup | FocusedStatePoint;\n\ninterface FocusedStateChart {\n type: \"chart\";\n}\ninterface FocusedStateGroup {\n type: \"group\";\n group: readonly Highcharts.Point[];\n}\ninterface FocusedStatePoint {\n type: \"point\";\n point: Highcharts.Point;\n group: readonly Highcharts.Point[];\n}\n\n// Navigation controller handles focus behavior and keyboard navigation for all charts.\n// When the chart is first focused, the focus lands on the chart plot. Once navigation is engaged,\n// the focus can land either on the group of points matched by X value, or on a specific point.\n// The focused X value and point are stored so that navigating back to the chart will focus the previously\n// focused point. If the stored point no longer belongs to the chart the focus falls back to the chart plot.\nexport class ChartExtraNavigation {\n private context: ChartExtraContext;\n private handlers: ChartExtraNavigationHandlers;\n private focusOutline: FocusOutline;\n // The application element is a dom element with role=\"application\", rendered right before the chart plot.\n // When the application element is in focus, the keyboard navigation is possible. Upon using navigation commands,\n // we bring the visible focus state to the chart elements, such as points and groups of points. The last visible\n // focus state is persisted.\n private applicationElement: null | HTMLElement = null;\n private focusedState: null | FocusedState = null;\n private ignoreFocus = false;\n\n constructor(context: ChartExtraContext, handlers: ChartExtraNavigationHandlers) {\n this.context = context;\n this.handlers = handlers;\n this.focusOutline = new FocusOutline(context);\n }\n\n public onChartDestroy() {\n this.focusOutline.destroy();\n }\n\n // This function is used as React ref on the application element, positioned right before the chart plot in the DOM.\n // Once the element reference is obtained, we assign the required event listeners directly to the element.\n // That is done for simplicity to avoid passing React event handlers down to the element.\n public setApplication = (element: null | HTMLElement) => {\n if (this.applicationElement) {\n this.applicationElement.removeEventListener(\"focus\", this.onFocus);\n this.applicationElement.removeEventListener(\"blur\", this.onBlur);\n this.applicationElement.removeEventListener(\"keydown\", this.onKeyDown);\n }\n\n if (this.context.settings.keyboardNavigationEnabled || !element) {\n this.applicationElement = element;\n }\n\n if (this.applicationElement) {\n this.applicationElement.addEventListener(\"focus\", this.onFocus);\n this.applicationElement.addEventListener(\"blur\", this.onBlur);\n this.applicationElement.addEventListener(\"keydown\", this.onKeyDown);\n }\n };\n\n // Casting focus to the application element brings the visible focus state to the chart or last focused\n // chart point or group of points. This is used to restore focus after the tooltip is dismissed.\n public focusApplication(point: null | Highcharts.Point, group: readonly Highcharts.Point[]) {\n if (this.context.settings.keyboardNavigationEnabled) {\n this.focusedState = point ? { type: \"point\", point, group } : { type: \"group\", group };\n this.applicationElement?.focus();\n }\n }\n\n public announceChart(ariaLabel: string) {\n this.announce({ role: \"application\", \"aria-label\": ariaLabel });\n }\n\n public announceElement(ariaLabel: string, pinned: boolean) {\n this.announce({ role: \"button\", \"aria-label\": ariaLabel, \"aria-haspopup\": true, \"aria-expanded\": pinned });\n }\n\n // Every time the chart focus is obtained or a navigation action is performed, this needs to be announced\n // to screen-readers. The announcement is made by updating the application element with the attributes of\n // the visually focused element (chart, point, or group), and re-focusing it.\n private announce(elementAttributes: React.ButtonHTMLAttributes<unknown>) {\n if (this.applicationElement) {\n // Remove prev attributes.\n for (const attributeName of this.applicationElement.getAttributeNames()) {\n if (attributeName === \"role\" || attributeName.slice(0, 4) === \"aria\") {\n this.applicationElement.removeAttribute(attributeName);\n }\n }\n // Copy new attributes.\n for (const [attributeName, attributeValue] of Object.entries(elementAttributes)) {\n this.applicationElement.setAttribute(attributeName, `${attributeValue}`);\n }\n // Temporarily disable focus/blur event handlers to not respond to the next programmatically\n // cast focus event, which has the only purpose of making the application element announced to\n // the assistive software.\n this.ignoreFocus = true;\n // Re-attach and re-focus application element to trigger a screen-reader announcement.\n const container = this.applicationElement.parentElement!;\n container.removeChild(this.applicationElement);\n container.appendChild(this.applicationElement);\n this.applicationElement.focus({ preventScroll: true });\n // Remove focus lock. The blur and focus events should have already occurred at this point.\n setTimeout(() => (this.ignoreFocus = false), 0);\n }\n }\n\n // Upon obtaining focus, we show the visible focus state and announce the previously focused element\n // (chart, point, or group). If the previously focused point or group is no longer available, the focus\n // is shown for their respective parent.\n private onFocus = () => {\n if (!this.ignoreFocus) {\n if (!this.focusedState || this.focusedState.type === \"chart\") {\n this.focusChart();\n } else if (this.focusedState.type === \"group\") {\n this.focusGroup(this.focusedState.group);\n } else {\n this.focusPoint(this.focusedState.point, this.focusedState.group);\n }\n }\n };\n\n private onBlur = () => {\n if (!this.ignoreFocus) {\n this.focusOutline.hide();\n this.handlers.onBlur();\n }\n };\n\n private onKeyDown = (event: KeyboardEvent) => {\n // The `handleKey` helper we use does not prevent the default keys behavior, so we do it here for\n // all used keyboard commands. We also stop propagation to prevent the global escape handler in\n // chart-core.tsx from interfering with navigation - when keyboard navigation is active, this\n // handler is the authoritative one for all navigation keys.\n if (\n [\n KeyCode.up,\n KeyCode.down,\n KeyCode.left,\n KeyCode.right,\n KeyCode.enter,\n KeyCode.escape,\n KeyCode.pageUp,\n KeyCode.pageDown,\n KeyCode.home,\n KeyCode.end,\n ].includes(event.keyCode)\n ) {\n event.preventDefault();\n event.stopPropagation();\n }\n // We execute different actions depending on the current focus target (chart, group, or point).\n // It is expected, that the focused element is still available in the chart.\n if (this.focusedState && this.focusedState.type === \"group\") {\n this.onKeyDownGroup(event, this.focusedState.group);\n } else if (this.focusedState && this.focusedState.type === \"point\") {\n this.onKeyDownPoint(event, this.focusedState.point, this.focusedState.group);\n } else {\n this.onKeyDownChart(event);\n }\n };\n\n private onKeyDownChart = (event: KeyboardEvent) => {\n handleKey(event, {\n onActivate: () => this.moveToFirstGroup(),\n onInlineStart: () => this.moveToLastGroup(),\n onInlineEnd: () => this.moveToFirstGroup(),\n onBlockStart: () => this.moveToLastGroup(),\n onBlockEnd: () => this.moveToFirstGroup(),\n onHome: () => this.moveToFirstGroup(),\n onEnd: () => this.moveToLastGroup(),\n });\n };\n\n private onKeyDownGroup = (event: KeyboardEvent, group: readonly Highcharts.Point[]) => {\n const i = !!this.context.chart().inverted;\n handleKey(event, {\n onActivate: () => this.activateGroup(group),\n onEscape: () => this.moveToChart(),\n onInlineStart: () => (i ? this.moveToFirstInGroup(group) : this.moveToPrevGroup(group)),\n onInlineEnd: () => (i ? this.moveToLastInGroup(group) : this.moveToNextGroup(group)),\n onBlockStart: () => (i ? this.moveToPrevGroup(group) : this.moveToLastInGroup(group)),\n onBlockEnd: () => (i ? this.moveToNextGroup(group) : this.moveToFirstInGroup(group)),\n onPageDown: () => this.moveToNextPageGroup(group),\n onPageUp: () => this.moveToPrevPageGroup(group),\n onHome: () => this.moveToFirstGroup(),\n onEnd: () => this.moveToLastGroup(),\n });\n };\n\n private onKeyDownPoint = (event: KeyboardEvent, point: Highcharts.Point, group: readonly Highcharts.Point[]) => {\n const i = !!this.context.chart().inverted;\n handleKey(event, {\n onActivate: () => this.activatePoint(point, group),\n onEscape: () => this.moveToParentGroup(point),\n onInlineEnd: () => (i ? this.moveToPrevInGroup(point) : this.moveToNextInSeries(point)),\n onInlineStart: () => (i ? this.moveToNextInGroup(point) : this.moveToPrevInSeries(point)),\n onBlockEnd: () => (i ? this.moveToNextInSeries(point) : this.moveToNextInGroup(point)),\n onBlockStart: () => (i ? this.moveToPrevInSeries(point) : this.moveToPrevInGroup(point)),\n onPageDown: () => this.moveToNextPageInSeries(point),\n onPageUp: () => this.moveToPrevPageInSeries(point),\n onHome: () => this.moveToFirstInSeries(point),\n onEnd: () => this.moveToLastInSeries(point),\n });\n };\n\n private moveToFirstGroup() {\n this.focusGroup(this.findFirstGroup());\n }\n\n private moveToLastGroup() {\n this.focusGroup(this.findLastGroup());\n }\n\n private moveToNextGroup(group: readonly Highcharts.Point[]) {\n const nextGroup = group[0] ? this.findNextGroup(group[0]) : [];\n this.focusGroup(nextGroup);\n }\n\n private moveToPrevGroup(group: readonly Highcharts.Point[]) {\n const prevGroup = group[0] ? this.findPrevGroup(group[0]) : [];\n this.focusGroup(prevGroup);\n }\n\n private moveToParentGroup(point: Highcharts.Point) {\n const group = this.findMatchingGroup(point);\n if (group.length > 0 && group[0].series.type !== \"pie\") {\n this.focusGroup(group);\n } else {\n this.focusChart();\n }\n }\n\n private moveToChart() {\n this.focusChart();\n }\n\n private moveToFirstInGroup(group: readonly Highcharts.Point[]) {\n const points = group.filter((p) => !isXThreshold(p.series));\n this.focusPoint(points[0], group);\n }\n\n private moveToLastInGroup(group: readonly Highcharts.Point[]) {\n const points = group.filter((p) => !isXThreshold(p.series));\n this.focusPoint(points[points.length - 1], group);\n }\n\n private moveToPrevInGroup(point: Highcharts.Point) {\n const points = this.findMatchingGroup(point).filter((p) => !isXThreshold(p.series));\n const pointIndex = points.indexOf(point);\n this.focusPoint(points[circleIndex(pointIndex - 1, [0, points.length - 1])], points);\n }\n\n private moveToNextInGroup(point: Highcharts.Point) {\n const points = this.findMatchingGroup(point).filter((p) => !isXThreshold(p.series));\n const pointIndex = points.indexOf(point);\n this.focusPoint(points[circleIndex(pointIndex + 1, [0, points.length - 1])], points);\n }\n\n private moveToFirstInSeries(point: Highcharts.Point) {\n const firstPoint = this.findFirstPointInSeries(point);\n if (firstPoint) {\n this.focusPoint(firstPoint, this.findMatchingGroup(firstPoint));\n } else {\n this.focusChart();\n }\n }\n\n private moveToLastInSeries(point: Highcharts.Point) {\n const lastPoint = this.findLastPointInSeries(point);\n if (lastPoint) {\n this.focusPoint(lastPoint, this.findMatchingGroup(lastPoint));\n } else {\n this.focusChart();\n }\n }\n\n private moveToNextInSeries(point: Highcharts.Point) {\n const nextPoint = this.findNextPointInSeries(point);\n if (nextPoint) {\n this.focusPoint(nextPoint, this.findMatchingGroup(nextPoint));\n } else {\n this.focusChart();\n }\n }\n\n private moveToPrevInSeries(point: Highcharts.Point) {\n const prevPoint = this.findPrevPointInSeries(point);\n if (prevPoint) {\n this.focusPoint(prevPoint, this.findMatchingGroup(prevPoint));\n } else {\n this.focusChart();\n }\n }\n\n private moveToNextPageGroup(group: readonly Highcharts.Point[]) {\n const nextPageGroup = group[0] ? this.findNextPageGroup(group[0]) : [];\n this.focusGroup(nextPageGroup);\n }\n\n private moveToPrevPageGroup(group: readonly Highcharts.Point[]) {\n const prevPageGroup = group[0] ? this.findPrevPageGroup(group[0]) : [];\n this.focusGroup(prevPageGroup);\n }\n\n private moveToNextPageInSeries(point: Highcharts.Point) {\n const nextPagePoint = this.findNextPagePointInSeries(point);\n if (nextPagePoint) {\n this.focusPoint(nextPagePoint, this.findMatchingGroup(nextPagePoint));\n } else {\n this.focusChart();\n }\n }\n\n private moveToPrevPageInSeries(point: Highcharts.Point) {\n const prevPagePoint = this.findPrevPagePointInSeries(point);\n if (prevPagePoint) {\n this.focusPoint(prevPagePoint, this.findMatchingGroup(prevPagePoint));\n } else {\n this.focusChart();\n }\n }\n\n private activateGroup(group: readonly Highcharts.Point[]) {\n this.handlers.onActivateGroup(group);\n }\n\n private activatePoint(point: Highcharts.Point, group: readonly Highcharts.Point[]) {\n this.handlers.onActivatePoint(point, group);\n }\n\n private focusChart = () => {\n this.focusedState = { type: \"chart\" };\n this.focusOutline.chart();\n this.handlers.onFocusChart();\n };\n\n private focusGroup(group: readonly Highcharts.Point[]) {\n // When the chart is re-focused, the group that was focused before might no longer be valid if its\n // points are no longer visible or were destroyed by Highcharts. In that case we focus the chart as\n // a fallback.\n const visiblePoints = group.filter(isPointVisible);\n if (visiblePoints.length === 0) {\n this.focusChart();\n }\n // In pie charts we only focus points, so moving focus to points and groups is equivalent.\n else if (visiblePoints[0].series.type === \"pie\") {\n this.focusPoint(visiblePoints[0] ?? null, group);\n }\n // When focusing a group we draw the focus outline around the corresponding group rect, including\n // all points of that group.\n else {\n this.focusedState = { type: \"group\", group: visiblePoints };\n this.focusOutline.group(getGroupRect(visiblePoints));\n this.handlers.onFocusGroup(visiblePoints);\n }\n }\n\n private focusPoint(point: null | Highcharts.Point, group: readonly Highcharts.Point[]) {\n // When the chart is re-focused, the point that was focused before might no longer be valid it became\n // hidden or was destroyed by Highcharts. In that case we focus the point's parent group as a fallback.\n if (!point || !isPointVisible(point)) {\n this.focusGroup(group);\n }\n // When focusing a point we draw the focus outline around its corresponding rect, but with different offsets,\n // depending on the point's series type.\n else {\n this.focusedState = { type: \"point\", point, group };\n this.focusOutline.point(getPointRect(point), point);\n this.handlers.onFocusPoint(point, group);\n }\n }\n\n private get allX(): number[] {\n return this.context.derived.allX;\n }\n\n private getAllXInSeries = (series: Highcharts.Series): number[] => {\n return this.context.derived.getAllXInSeries(series);\n };\n\n private getPointsByX = (x: number): Highcharts.Point[] => {\n return this.context.derived.getPointsByX(x);\n };\n\n private findMatchingGroup = (point: Highcharts.Point): Highcharts.Point[] => {\n return this.getPointsByX(point.x);\n };\n\n private findFirstGroup = (): Highcharts.Point[] => {\n return this.getPointsByX(this.allX[0]);\n };\n\n private findLastGroup = (): Highcharts.Point[] => {\n return this.getPointsByX(this.allX[this.allX.length - 1]);\n };\n\n private findNextGroup = (point: Highcharts.Point): Highcharts.Point[] => {\n const nextIndex = getNextIndex(this.allX, this.allX.indexOf(point.x), 1);\n return this.getPointsByX(this.allX[nextIndex]);\n };\n\n private findPrevGroup = (point: Highcharts.Point): Highcharts.Point[] => {\n const nextIndex = getNextIndex(this.allX, this.allX.indexOf(point.x), -1);\n return this.getPointsByX(this.allX[nextIndex]);\n };\n\n private findNextPageGroup = (point: Highcharts.Point): Highcharts.Point[] => {\n const nextIndex = getNextPageIndex(this.allX, this.allX.indexOf(point.x), 1);\n return this.getPointsByX(this.allX[nextIndex]);\n };\n\n private findPrevPageGroup = (point: Highcharts.Point): Highcharts.Point[] => {\n const nextIndex = getNextPageIndex(this.allX, this.allX.indexOf(point.x), -1);\n return this.getPointsByX(this.allX[nextIndex]);\n };\n\n private findFirstPointInSeries = (point: Highcharts.Point): null | Highcharts.Point => {\n const seriesX = this.getAllXInSeries(point.series);\n return point.series.data.find((d) => d.x === seriesX[0]) ?? null;\n };\n\n private findLastPointInSeries = (point: Highcharts.Point): null | Highcharts.Point => {\n const seriesX = this.getAllXInSeries(point.series);\n return point.series.data.find((d) => d.x === seriesX[seriesX.length - 1]) ?? null;\n };\n\n private findNextPointInSeries = (point: Highcharts.Point): null | Highcharts.Point => {\n const seriesX = this.getAllXInSeries(point.series);\n const delta = !shouldInvertPointsDirection(point) ? 1 : -1;\n const nextIndex = getNextIndex(seriesX, seriesX.indexOf(point.x), delta);\n return point.series.data.find((d) => d.x === seriesX[nextIndex]) ?? null;\n };\n\n private findPrevPointInSeries = (point: Highcharts.Point): null | Highcharts.Point => {\n const seriesX = this.getAllXInSeries(point.series);\n const delta = !shouldInvertPointsDirection(point) ? -1 : 1;\n const nextIndex = getNextIndex(seriesX, seriesX.indexOf(point.x), delta);\n return point.series.data.find((d) => d.x === seriesX[nextIndex]) ?? null;\n };\n\n private findNextPagePointInSeries = (point: Highcharts.Point): null | Highcharts.Point => {\n const seriesX = this.getAllXInSeries(point.series);\n const delta = !shouldInvertPointsDirection(point) ? 1 : -1;\n const nextIndex = getNextPageIndex(seriesX, seriesX.indexOf(point.x), delta);\n return point.series.data.find((d) => d.x === seriesX[nextIndex]) ?? null;\n };\n\n private findPrevPagePointInSeries = (point: Highcharts.Point): null | Highcharts.Point => {\n const seriesX = this.getAllXInSeries(point.series);\n const delta = !shouldInvertPointsDirection(point) ? -1 : 1;\n const nextIndex = getNextPageIndex(seriesX, seriesX.indexOf(point.x), delta);\n return point.series.data.find((d) => d.x === seriesX[nextIndex]) ?? null;\n };\n}\n\nfunction handleKey(\n event: KeyboardEvent,\n handlers: {\n onActivate?: () => void;\n onBlockEnd?: () => void;\n onBlockStart?: () => void;\n onDefault?: () => void;\n onEnd?: () => void;\n onEscape?: () => void;\n onHome?: () => void;\n onInlineEnd?: () => void;\n onInlineStart?: () => void;\n onPageDown?: () => void;\n onPageUp?: () => void;\n },\n) {\n if (!event.currentTarget) {\n return;\n }\n if (!(event.currentTarget instanceof HTMLElement) && !(event.currentTarget instanceof SVGElement)) {\n return;\n }\n toolkitHandleKey({ keyCode: event.keyCode, currentTarget: event.currentTarget }, handlers);\n}\n\n// A helper class to draw the focus outline around given chart elements.\nclass FocusOutline {\n private context: ChartExtraContext;\n private elementsPool = new SVGRendererPool();\n\n constructor(context: ChartExtraContext) {\n this.context = context;\n }\n\n public chart = () => {\n const [x, y, width, height] = [\n this.context.chart().plotLeft,\n this.context.chart().plotTop,\n this.context.chart().plotWidth,\n this.context.chart().plotHeight,\n ];\n this.rect({ x, y, width, height }, Styles.focusOutlineOffsets.chart);\n };\n\n public group = (rect: Rect) => {\n this.rect(rect, Styles.focusOutlineOffsets.group);\n };\n\n public point = (rect: Rect, point: Highcharts.Point) => {\n const offsetByType = Styles.focusOutlineOffsets.pointByType[point.series.type];\n const offset = offsetByType ?? Styles.focusOutlineOffsets.point;\n this.rect(rect, offset);\n };\n\n public hide() {\n this.elementsPool.hideAll();\n }\n\n public destroy() {\n this.elementsPool.destroyAll();\n }\n\n private rect = ({ x, y, width, height }: Rect, offset: number) => {\n this.elementsPool.hideAll();\n this.elementsPool.rect(this.context.chart().renderer, {\n x: x - offset,\n y: y - offset,\n width: width + offset * 2,\n height: height + offset * 2,\n ...Styles.navigationFocusOutline,\n });\n };\n}\n\n// We do not invert the direction of pie segments when RTL, but swap the left/right keys.\n// To offset for that, the prev/next points direction is swapped, too.\nfunction shouldInvertPointsDirection(point: Highcharts.Point) {\n const isRTL = getIsRtl(point.series.chart.container.parentElement);\n return point.series.type === \"pie\" && isRTL;\n}\n\nfunction getNextIndex(array: unknown[], pointIndex: number, delta: -1 | 1): number {\n return circleIndex(pointIndex + delta, [0, array.length - 1]);\n}\n\nfunction getNextPageIndex(array: unknown[], pointIndex: number, delta: -1 | 1): number {\n return Math.min(array.length - 1, Math.max(0, pointIndex + delta * Math.round(array.length * PAGE_SIZE_PERCENTAGE)));\n}\n"]}
|
|
1
|
+
{"version":3,"file":"chart-extra-navigation.js","sourceRoot":"","sources":["../../../../src/core/chart-api/chart-extra-navigation.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AAItC,OAAO,EACL,WAAW,EACX,QAAQ,EACR,SAAS,IAAI,gBAAgB,EAC7B,OAAO,GACR,MAAM,+CAA+C,CAAC;AAEvD,OAAO,KAAK,MAAM,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAEtE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGpF,0FAA0F;AAC1F,qEAAqE;AACrE,MAAM,oBAAoB,GAAG,IAAI,CAAC;AA6BlC,uFAAuF;AACvF,kGAAkG;AAClG,+FAA+F;AAC/F,0GAA0G;AAC1G,4GAA4G;AAC5G,MAAM,OAAO,oBAAoB;IAY/B,YAAY,OAA0B,EAAE,QAAsC;QAR9E,0GAA0G;QAC1G,iHAAiH;QACjH,gHAAgH;QAChH,4BAA4B;QACpB,uBAAkB,GAAuB,IAAI,CAAC;QAC9C,iBAAY,GAAwB,IAAI,CAAC;QACzC,gBAAW,GAAG,KAAK,CAAC;QAY5B,oHAAoH;QACpH,0GAA0G;QAC1G,yFAAyF;QAClF,mBAAc,GAAG,CAAC,OAA2B,EAAE,EAAE;YACtD,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC5B,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBACnE,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBACjE,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YACzE,CAAC;YAED,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,IAAI,CAAC,OAAO,EAAE,CAAC;gBAChE,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC;YACpC,CAAC;YAED,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC5B,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBAChE,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC9D,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YACtE,CAAC;QACH,CAAC,CAAC;QAgDF,oGAAoG;QACpG,uGAAuG;QACvG,wCAAwC;QAChC,YAAO,GAAG,GAAG,EAAE;YACrB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACtB,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC7D,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,CAAC;qBAAM,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC9C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBAC3C,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpE,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEM,WAAM,GAAG,GAAG,EAAE;YACpB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACtB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;gBACzB,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACzB,CAAC;QACH,CAAC,CAAC;QAEM,cAAS,GAAG,CAAC,KAAoB,EAAE,EAAE;YAC3C,iGAAiG;YACjG,+FAA+F;YAC/F,6FAA6F;YAC7F,4DAA4D;YAC5D,IACE;gBACE,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,IAAI;gBACZ,OAAO,CAAC,IAAI;gBACZ,OAAO,CAAC,KAAK;gBACb,OAAO,CAAC,KAAK;gBACb,OAAO,CAAC,MAAM;gBACd,OAAO,CAAC,MAAM;gBACd,OAAO,CAAC,QAAQ;gBAChB,OAAO,CAAC,IAAI;gBACZ,OAAO,CAAC,GAAG;aACZ,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EACzB,CAAC;gBACD,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,KAAK,CAAC,eAAe,EAAE,CAAC;YAC1B,CAAC;YACD,+FAA+F;YAC/F,4EAA4E;YAC5E,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC5D,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACtD,CAAC;iBAAM,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACnE,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC/E,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC,CAAC;QAEM,mBAAc,GAAG,CAAC,KAAoB,EAAE,EAAE;YAChD,SAAS,CAAC,KAAK,EAAE;gBACf,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBACzC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE;gBACrD,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE;gBAC3C,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC1C,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE;gBAC1C,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBACzC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBACrC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE;aACpC,CAAC,CAAC;QACL,CAAC,CAAC;QAEM,mBAAc,GAAG,CAAC,KAAoB,EAAE,KAAkC,EAAE,EAAE;YACpF,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC;YAC1C,SAAS,CAAC,KAAK,EAAE;gBACf,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;gBAC3C,QAAQ,EAAE,GAAG,EAAE;oBACb,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE,EAAE,CAAC;wBAC3C,IAAI,CAAC,WAAW,EAAE,CAAC;oBACrB,CAAC;gBACH,CAAC;gBACD,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;gBACvF,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;gBACpF,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBACrF,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBACpF,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;gBACjD,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;gBAC/C,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBACrC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE;aACpC,CAAC,CAAC;QACL,CAAC,CAAC;QAEM,mBAAc,GAAG,CAAC,KAAoB,EAAE,KAAuB,EAAE,KAAkC,EAAE,EAAE;YAC7G,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC;YAC1C,SAAS,CAAC,KAAK,EAAE;gBACf,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC;gBAClD,QAAQ,EAAE,GAAG,EAAE;oBACb,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE,EAAE,CAAC;wBAC3C,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;oBAChC,CAAC;gBACH,CAAC;gBACD,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBACvF,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBACzF,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBACtF,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBACxF,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;gBACpD,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;gBAClD,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;gBAC7C,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;aAC5C,CAAC,CAAC;QACL,CAAC,CAAC;QA+HM,eAAU,GAAG,GAAG,EAAE;YACxB,IAAI,CAAC,YAAY,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;YACtC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;QAC/B,CAAC,CAAC;QA0CM,oBAAe,GAAG,CAAC,MAAyB,EAAY,EAAE;YAChE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACtD,CAAC,CAAC;QAEM,iBAAY,GAAG,CAAC,CAAS,EAAsB,EAAE;YACvD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC;QAEM,sBAAiB,GAAG,CAAC,KAAuB,EAAsB,EAAE;YAC1E,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC;QAEM,mBAAc,GAAG,GAAuB,EAAE;YAChD,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC,CAAC;QAEM,kBAAa,GAAG,GAAuB,EAAE;YAC/C,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC;QAEM,kBAAa,GAAG,CAAC,KAAuB,EAAsB,EAAE;YACtE,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACzE,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC;QAEM,kBAAa,GAAG,CAAC,KAAuB,EAAsB,EAAE;YACtE,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1E,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC;QAEM,sBAAiB,GAAG,CAAC,KAAuB,EAAsB,EAAE;YAC1E,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7E,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC;QAEM,sBAAiB,GAAG,CAAC,KAAuB,EAAsB,EAAE;YAC1E,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9E,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC;QAEM,2BAAsB,GAAG,CAAC,KAAuB,EAA2B,EAAE;;YACpF,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACnD,OAAO,MAAA,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,mCAAI,IAAI,CAAC;QACnE,CAAC,CAAC;QAEM,0BAAqB,GAAG,CAAC,KAAuB,EAA2B,EAAE;;YACnF,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACnD,OAAO,MAAA,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,mCAAI,IAAI,CAAC;QACpF,CAAC,CAAC;QAEM,0BAAqB,GAAG,CAAC,KAAuB,EAA2B,EAAE;;YACnF,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,KAAK,GAAG,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACzE,OAAO,MAAA,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,mCAAI,IAAI,CAAC;QAC3E,CAAC,CAAC;QAEM,0BAAqB,GAAG,CAAC,KAAuB,EAA2B,EAAE;;YACnF,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,KAAK,GAAG,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACzE,OAAO,MAAA,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,mCAAI,IAAI,CAAC;QAC3E,CAAC,CAAC;QAEM,8BAAyB,GAAG,CAAC,KAAuB,EAA2B,EAAE;;YACvF,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,KAAK,GAAG,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC7E,OAAO,MAAA,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,mCAAI,IAAI,CAAC;QAC3E,CAAC,CAAC;QAEM,8BAAyB,GAAG,CAAC,KAAuB,EAA2B,EAAE;;YACvF,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,KAAK,GAAG,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC7E,OAAO,MAAA,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,mCAAI,IAAI,CAAC;QAC3E,CAAC,CAAC;QA/aA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAEM,cAAc;QACnB,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;IAuBD,uGAAuG;IACvG,gGAAgG;IACzF,gBAAgB,CAAC,KAA8B,EAAE,KAAkC;;QACxF,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,EAAE,CAAC;YACpD,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YACvF,MAAA,IAAI,CAAC,kBAAkB,0CAAE,KAAK,EAAE,CAAC;QACnC,CAAC;IACH,CAAC;IAEM,aAAa,CAAC,SAAiB;QACpC,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;IAClE,CAAC;IAEM,eAAe,CAAC,SAAiB,EAAE,MAAe;QACvD,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7G,CAAC;IAED,yGAAyG;IACzG,yGAAyG;IACzG,6EAA6E;IACrE,QAAQ,CAAC,iBAAsD;QACrE,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,0BAA0B;YAC1B,KAAK,MAAM,aAAa,IAAI,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,EAAE,CAAC;gBACxE,IAAI,aAAa,KAAK,MAAM,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;oBACrE,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC;YACD,uBAAuB;YACvB,KAAK,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAChF,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,aAAa,EAAE,GAAG,cAAc,EAAE,CAAC,CAAC;YAC3E,CAAC;YACD,4FAA4F;YAC5F,8FAA8F;YAC9F,0BAA0B;YAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,sFAAsF;YACtF,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAc,CAAC;YACzD,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC/C,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC/C,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YACvD,2FAA2F;YAC3F,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IA8GO,gBAAgB;QACtB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;IACzC,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IACxC,CAAC;IAEO,eAAe,CAAC,KAAkC;QACxD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAEO,eAAe,CAAC,KAAkC;QACxD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAEO,iBAAiB,CAAC,KAAuB;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACvD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAEO,WAAW;QACjB,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAEO,kBAAkB,CAAC,KAAkC;QAC3D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAEO,iBAAiB,CAAC,KAAkC;QAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAEO,iBAAiB,CAAC,KAAuB;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACpF,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACvF,CAAC;IAEO,iBAAiB,CAAC,KAAuB;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACpF,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACvF,CAAC;IAEO,mBAAmB,CAAC,KAAuB;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACtD,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;QAClE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAC,KAAuB;QAChD,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACpD,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAC,KAAuB;QAChD,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACpD,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAC,KAAuB;QAChD,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACpD,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,KAAkC;QAC5D,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC;IAEO,mBAAmB,CAAC,KAAkC;QAC5D,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC;IAEO,sBAAsB,CAAC,KAAuB;QACpD,MAAM,aAAa,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;QAC5D,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAEO,sBAAsB,CAAC,KAAuB;QACpD,MAAM,aAAa,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;QAC5D,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,KAAkC;QACtD,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAEO,aAAa,CAAC,KAAuB,EAAE,KAAkC;QAC/E,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;IAQO,UAAU,CAAC,KAAkC;;QACnD,kGAAkG;QAClG,mGAAmG;QACnG,cAAc;QACd,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACnD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;QACD,0FAA0F;aACrF,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAChD,IAAI,CAAC,UAAU,CAAC,MAAA,aAAa,CAAC,CAAC,CAAC,mCAAI,IAAI,EAAE,KAAK,CAAC,CAAC;QACnD,CAAC;QACD,iGAAiG;QACjG,4BAA4B;aACvB,CAAC;YACJ,IAAI,CAAC,YAAY,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;YAC5D,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC;YACrD,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,KAA8B,EAAE,KAAkC;QACnF,qGAAqG;QACrG,uGAAuG;QACvG,IAAI,CAAC,KAAK,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,6GAA6G;QAC7G,wCAAwC;aACnC,CAAC;YACJ,IAAI,CAAC,YAAY,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YACpD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;YACpD,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,IAAY,IAAI;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;IACnC,CAAC;CA+EF;AAED,SAAS,SAAS,CAChB,KAAoB,EACpB,QAYC;IAED,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QACzB,OAAO;IACT,CAAC;IACD,IAAI,CAAC,CAAC,KAAK,CAAC,aAAa,YAAY,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,aAAa,YAAY,UAAU,CAAC,EAAE,CAAC;QAClG,OAAO;IACT,CAAC;IACD,gBAAgB,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC7F,CAAC;AAED,wEAAwE;AACxE,MAAM,YAAY;IAIhB,YAAY,OAA0B;QAF9B,iBAAY,GAAG,IAAI,eAAe,EAAE,CAAC;QAMtC,UAAK,GAAG,GAAG,EAAE;YAClB,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG;gBAC5B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,QAAQ;gBAC7B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,OAAO;gBAC5B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,SAAS;gBAC9B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,UAAU;aAChC,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACvE,CAAC,CAAC;QAEK,UAAK,GAAG,CAAC,IAAU,EAAE,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpD,CAAC,CAAC;QAEK,UAAK,GAAG,CAAC,IAAU,EAAE,KAAuB,EAAE,EAAE;YACrD,MAAM,YAAY,GAAG,MAAM,CAAC,mBAAmB,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC/E,MAAM,MAAM,GAAG,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC;YAChE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1B,CAAC,CAAC;QAUM,SAAI,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAQ,EAAE,MAAc,EAAE,EAAE;YAC/D,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE;gBACpD,CAAC,EAAE,CAAC,GAAG,MAAM;gBACb,CAAC,EAAE,CAAC,GAAG,MAAM;gBACb,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,CAAC;gBACzB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC;gBAC3B,GAAG,MAAM,CAAC,sBAAsB;aACjC,CAAC,CAAC;QACL,CAAC,CAAC;QAxCA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAsBM,IAAI;QACT,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;IACjC,CAAC;CAYF;AAED,yFAAyF;AACzF,sEAAsE;AACtE,SAAS,2BAA2B,CAAC,KAAuB;IAC1D,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IACnE,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC;AAC9C,CAAC;AAED,SAAS,YAAY,CAAC,KAAgB,EAAE,UAAkB,EAAE,KAAa;IACvE,OAAO,WAAW,CAAC,UAAU,GAAG,KAAK,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAgB,EAAE,UAAkB,EAAE,KAAa;IAC3E,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;AACvH,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type Highcharts from \"highcharts\";\n\nimport {\n circleIndex,\n getIsRtl,\n handleKey as toolkitHandleKey,\n KeyCode,\n} from \"@cloudscape-design/component-toolkit/internal\";\n\nimport * as Styles from \"../../internal/chart-styles\";\nimport { SVGRendererPool } from \"../../internal/utils/renderer-utils\";\nimport { Rect } from \"../interfaces\";\nimport { getGroupRect, getPointRect, isPointVisible, isXThreshold } from \"../utils\";\nimport { ChartExtraContext } from \"./chart-extra-context\";\n\n// In charts with many data points one can navigate faster by using Page Down/Up keys that\n// navigate PAGE_SIZE_PERCENTAGE of the points forwards or backwards.\nconst PAGE_SIZE_PERCENTAGE = 0.05;\n\nexport interface ChartExtraNavigationHandlers {\n onFocusChart(): void;\n onFocusPoint(point: Highcharts.Point, group: readonly Highcharts.Point[]): void;\n onFocusGroup(group: readonly Highcharts.Point[]): void;\n onBlur(): void;\n onActivatePoint(point: Highcharts.Point, group: readonly Highcharts.Point[]): void;\n onActivateGroup(group: readonly Highcharts.Point[]): void;\n // Returns true if a tooltip was dismissed, false otherwise.\n // Used by ESC handlers to decide whether to also navigate.\n onDismissHoverTooltip(): boolean;\n}\n\nexport type FocusedState = FocusedStateChart | FocusedStateGroup | FocusedStatePoint;\n\ninterface FocusedStateChart {\n type: \"chart\";\n}\ninterface FocusedStateGroup {\n type: \"group\";\n group: readonly Highcharts.Point[];\n}\ninterface FocusedStatePoint {\n type: \"point\";\n point: Highcharts.Point;\n group: readonly Highcharts.Point[];\n}\n\n// Navigation controller handles focus behavior and keyboard navigation for all charts.\n// When the chart is first focused, the focus lands on the chart plot. Once navigation is engaged,\n// the focus can land either on the group of points matched by X value, or on a specific point.\n// The focused X value and point are stored so that navigating back to the chart will focus the previously\n// focused point. If the stored point no longer belongs to the chart the focus falls back to the chart plot.\nexport class ChartExtraNavigation {\n private context: ChartExtraContext;\n private handlers: ChartExtraNavigationHandlers;\n private focusOutline: FocusOutline;\n // The application element is a dom element with role=\"application\", rendered right before the chart plot.\n // When the application element is in focus, the keyboard navigation is possible. Upon using navigation commands,\n // we bring the visible focus state to the chart elements, such as points and groups of points. The last visible\n // focus state is persisted.\n private applicationElement: null | HTMLElement = null;\n private focusedState: null | FocusedState = null;\n private ignoreFocus = false;\n\n constructor(context: ChartExtraContext, handlers: ChartExtraNavigationHandlers) {\n this.context = context;\n this.handlers = handlers;\n this.focusOutline = new FocusOutline(context);\n }\n\n public onChartDestroy() {\n this.focusOutline.destroy();\n }\n\n // This function is used as React ref on the application element, positioned right before the chart plot in the DOM.\n // Once the element reference is obtained, we assign the required event listeners directly to the element.\n // That is done for simplicity to avoid passing React event handlers down to the element.\n public setApplication = (element: null | HTMLElement) => {\n if (this.applicationElement) {\n this.applicationElement.removeEventListener(\"focus\", this.onFocus);\n this.applicationElement.removeEventListener(\"blur\", this.onBlur);\n this.applicationElement.removeEventListener(\"keydown\", this.onKeyDown);\n }\n\n if (this.context.settings.keyboardNavigationEnabled || !element) {\n this.applicationElement = element;\n }\n\n if (this.applicationElement) {\n this.applicationElement.addEventListener(\"focus\", this.onFocus);\n this.applicationElement.addEventListener(\"blur\", this.onBlur);\n this.applicationElement.addEventListener(\"keydown\", this.onKeyDown);\n }\n };\n\n // Casting focus to the application element brings the visible focus state to the chart or last focused\n // chart point or group of points. This is used to restore focus after the tooltip is dismissed.\n public focusApplication(point: null | Highcharts.Point, group: readonly Highcharts.Point[]) {\n if (this.context.settings.keyboardNavigationEnabled) {\n this.focusedState = point ? { type: \"point\", point, group } : { type: \"group\", group };\n this.applicationElement?.focus();\n }\n }\n\n public announceChart(ariaLabel: string) {\n this.announce({ role: \"application\", \"aria-label\": ariaLabel });\n }\n\n public announceElement(ariaLabel: string, pinned: boolean) {\n this.announce({ role: \"button\", \"aria-label\": ariaLabel, \"aria-haspopup\": true, \"aria-expanded\": pinned });\n }\n\n // Every time the chart focus is obtained or a navigation action is performed, this needs to be announced\n // to screen-readers. The announcement is made by updating the application element with the attributes of\n // the visually focused element (chart, point, or group), and re-focusing it.\n private announce(elementAttributes: React.ButtonHTMLAttributes<unknown>) {\n if (this.applicationElement) {\n // Remove prev attributes.\n for (const attributeName of this.applicationElement.getAttributeNames()) {\n if (attributeName === \"role\" || attributeName.slice(0, 4) === \"aria\") {\n this.applicationElement.removeAttribute(attributeName);\n }\n }\n // Copy new attributes.\n for (const [attributeName, attributeValue] of Object.entries(elementAttributes)) {\n this.applicationElement.setAttribute(attributeName, `${attributeValue}`);\n }\n // Temporarily disable focus/blur event handlers to not respond to the next programmatically\n // cast focus event, which has the only purpose of making the application element announced to\n // the assistive software.\n this.ignoreFocus = true;\n // Re-attach and re-focus application element to trigger a screen-reader announcement.\n const container = this.applicationElement.parentElement!;\n container.removeChild(this.applicationElement);\n container.appendChild(this.applicationElement);\n this.applicationElement.focus({ preventScroll: true });\n // Remove focus lock. The blur and focus events should have already occurred at this point.\n setTimeout(() => (this.ignoreFocus = false), 0);\n }\n }\n\n // Upon obtaining focus, we show the visible focus state and announce the previously focused element\n // (chart, point, or group). If the previously focused point or group is no longer available, the focus\n // is shown for their respective parent.\n private onFocus = () => {\n if (!this.ignoreFocus) {\n if (!this.focusedState || this.focusedState.type === \"chart\") {\n this.focusChart();\n } else if (this.focusedState.type === \"group\") {\n this.focusGroup(this.focusedState.group);\n } else {\n this.focusPoint(this.focusedState.point, this.focusedState.group);\n }\n }\n };\n\n private onBlur = () => {\n if (!this.ignoreFocus) {\n this.focusOutline.hide();\n this.handlers.onBlur();\n }\n };\n\n private onKeyDown = (event: KeyboardEvent) => {\n // The `handleKey` helper we use does not prevent the default keys behavior, so we do it here for\n // all used keyboard commands. We also stop propagation to prevent the global escape handler in\n // chart-core.tsx from interfering with navigation - when keyboard navigation is active, this\n // handler is the authoritative one for all navigation keys.\n if (\n [\n KeyCode.up,\n KeyCode.down,\n KeyCode.left,\n KeyCode.right,\n KeyCode.enter,\n KeyCode.escape,\n KeyCode.pageUp,\n KeyCode.pageDown,\n KeyCode.home,\n KeyCode.end,\n ].includes(event.keyCode)\n ) {\n event.preventDefault();\n event.stopPropagation();\n }\n // We execute different actions depending on the current focus target (chart, group, or point).\n // It is expected, that the focused element is still available in the chart.\n if (this.focusedState && this.focusedState.type === \"group\") {\n this.onKeyDownGroup(event, this.focusedState.group);\n } else if (this.focusedState && this.focusedState.type === \"point\") {\n this.onKeyDownPoint(event, this.focusedState.point, this.focusedState.group);\n } else {\n this.onKeyDownChart(event);\n }\n };\n\n private onKeyDownChart = (event: KeyboardEvent) => {\n handleKey(event, {\n onActivate: () => this.moveToFirstGroup(),\n onEscape: () => this.handlers.onDismissHoverTooltip(),\n onInlineStart: () => this.moveToLastGroup(),\n onInlineEnd: () => this.moveToFirstGroup(),\n onBlockStart: () => this.moveToLastGroup(),\n onBlockEnd: () => this.moveToFirstGroup(),\n onHome: () => this.moveToFirstGroup(),\n onEnd: () => this.moveToLastGroup(),\n });\n };\n\n private onKeyDownGroup = (event: KeyboardEvent, group: readonly Highcharts.Point[]) => {\n const i = !!this.context.chart().inverted;\n handleKey(event, {\n onActivate: () => this.activateGroup(group),\n onEscape: () => {\n if (!this.handlers.onDismissHoverTooltip()) {\n this.moveToChart();\n }\n },\n onInlineStart: () => (i ? this.moveToFirstInGroup(group) : this.moveToPrevGroup(group)),\n onInlineEnd: () => (i ? this.moveToLastInGroup(group) : this.moveToNextGroup(group)),\n onBlockStart: () => (i ? this.moveToPrevGroup(group) : this.moveToLastInGroup(group)),\n onBlockEnd: () => (i ? this.moveToNextGroup(group) : this.moveToFirstInGroup(group)),\n onPageDown: () => this.moveToNextPageGroup(group),\n onPageUp: () => this.moveToPrevPageGroup(group),\n onHome: () => this.moveToFirstGroup(),\n onEnd: () => this.moveToLastGroup(),\n });\n };\n\n private onKeyDownPoint = (event: KeyboardEvent, point: Highcharts.Point, group: readonly Highcharts.Point[]) => {\n const i = !!this.context.chart().inverted;\n handleKey(event, {\n onActivate: () => this.activatePoint(point, group),\n onEscape: () => {\n if (!this.handlers.onDismissHoverTooltip()) {\n this.moveToParentGroup(point);\n }\n },\n onInlineEnd: () => (i ? this.moveToPrevInGroup(point) : this.moveToNextInSeries(point)),\n onInlineStart: () => (i ? this.moveToNextInGroup(point) : this.moveToPrevInSeries(point)),\n onBlockEnd: () => (i ? this.moveToNextInSeries(point) : this.moveToNextInGroup(point)),\n onBlockStart: () => (i ? this.moveToPrevInSeries(point) : this.moveToPrevInGroup(point)),\n onPageDown: () => this.moveToNextPageInSeries(point),\n onPageUp: () => this.moveToPrevPageInSeries(point),\n onHome: () => this.moveToFirstInSeries(point),\n onEnd: () => this.moveToLastInSeries(point),\n });\n };\n\n private moveToFirstGroup() {\n this.focusGroup(this.findFirstGroup());\n }\n\n private moveToLastGroup() {\n this.focusGroup(this.findLastGroup());\n }\n\n private moveToNextGroup(group: readonly Highcharts.Point[]) {\n const nextGroup = group[0] ? this.findNextGroup(group[0]) : [];\n this.focusGroup(nextGroup);\n }\n\n private moveToPrevGroup(group: readonly Highcharts.Point[]) {\n const prevGroup = group[0] ? this.findPrevGroup(group[0]) : [];\n this.focusGroup(prevGroup);\n }\n\n private moveToParentGroup(point: Highcharts.Point) {\n const group = this.findMatchingGroup(point);\n if (group.length > 0 && group[0].series.type !== \"pie\") {\n this.focusGroup(group);\n } else {\n this.focusChart();\n }\n }\n\n private moveToChart() {\n this.focusChart();\n }\n\n private moveToFirstInGroup(group: readonly Highcharts.Point[]) {\n const points = group.filter((p) => !isXThreshold(p.series));\n this.focusPoint(points[0], group);\n }\n\n private moveToLastInGroup(group: readonly Highcharts.Point[]) {\n const points = group.filter((p) => !isXThreshold(p.series));\n this.focusPoint(points[points.length - 1], group);\n }\n\n private moveToPrevInGroup(point: Highcharts.Point) {\n const points = this.findMatchingGroup(point).filter((p) => !isXThreshold(p.series));\n const pointIndex = points.indexOf(point);\n this.focusPoint(points[circleIndex(pointIndex - 1, [0, points.length - 1])], points);\n }\n\n private moveToNextInGroup(point: Highcharts.Point) {\n const points = this.findMatchingGroup(point).filter((p) => !isXThreshold(p.series));\n const pointIndex = points.indexOf(point);\n this.focusPoint(points[circleIndex(pointIndex + 1, [0, points.length - 1])], points);\n }\n\n private moveToFirstInSeries(point: Highcharts.Point) {\n const firstPoint = this.findFirstPointInSeries(point);\n if (firstPoint) {\n this.focusPoint(firstPoint, this.findMatchingGroup(firstPoint));\n } else {\n this.focusChart();\n }\n }\n\n private moveToLastInSeries(point: Highcharts.Point) {\n const lastPoint = this.findLastPointInSeries(point);\n if (lastPoint) {\n this.focusPoint(lastPoint, this.findMatchingGroup(lastPoint));\n } else {\n this.focusChart();\n }\n }\n\n private moveToNextInSeries(point: Highcharts.Point) {\n const nextPoint = this.findNextPointInSeries(point);\n if (nextPoint) {\n this.focusPoint(nextPoint, this.findMatchingGroup(nextPoint));\n } else {\n this.focusChart();\n }\n }\n\n private moveToPrevInSeries(point: Highcharts.Point) {\n const prevPoint = this.findPrevPointInSeries(point);\n if (prevPoint) {\n this.focusPoint(prevPoint, this.findMatchingGroup(prevPoint));\n } else {\n this.focusChart();\n }\n }\n\n private moveToNextPageGroup(group: readonly Highcharts.Point[]) {\n const nextPageGroup = group[0] ? this.findNextPageGroup(group[0]) : [];\n this.focusGroup(nextPageGroup);\n }\n\n private moveToPrevPageGroup(group: readonly Highcharts.Point[]) {\n const prevPageGroup = group[0] ? this.findPrevPageGroup(group[0]) : [];\n this.focusGroup(prevPageGroup);\n }\n\n private moveToNextPageInSeries(point: Highcharts.Point) {\n const nextPagePoint = this.findNextPagePointInSeries(point);\n if (nextPagePoint) {\n this.focusPoint(nextPagePoint, this.findMatchingGroup(nextPagePoint));\n } else {\n this.focusChart();\n }\n }\n\n private moveToPrevPageInSeries(point: Highcharts.Point) {\n const prevPagePoint = this.findPrevPagePointInSeries(point);\n if (prevPagePoint) {\n this.focusPoint(prevPagePoint, this.findMatchingGroup(prevPagePoint));\n } else {\n this.focusChart();\n }\n }\n\n private activateGroup(group: readonly Highcharts.Point[]) {\n this.handlers.onActivateGroup(group);\n }\n\n private activatePoint(point: Highcharts.Point, group: readonly Highcharts.Point[]) {\n this.handlers.onActivatePoint(point, group);\n }\n\n private focusChart = () => {\n this.focusedState = { type: \"chart\" };\n this.focusOutline.chart();\n this.handlers.onFocusChart();\n };\n\n private focusGroup(group: readonly Highcharts.Point[]) {\n // When the chart is re-focused, the group that was focused before might no longer be valid if its\n // points are no longer visible or were destroyed by Highcharts. In that case we focus the chart as\n // a fallback.\n const visiblePoints = group.filter(isPointVisible);\n if (visiblePoints.length === 0) {\n this.focusChart();\n }\n // In pie charts we only focus points, so moving focus to points and groups is equivalent.\n else if (visiblePoints[0].series.type === \"pie\") {\n this.focusPoint(visiblePoints[0] ?? null, group);\n }\n // When focusing a group we draw the focus outline around the corresponding group rect, including\n // all points of that group.\n else {\n this.focusedState = { type: \"group\", group: visiblePoints };\n this.focusOutline.group(getGroupRect(visiblePoints));\n this.handlers.onFocusGroup(visiblePoints);\n }\n }\n\n private focusPoint(point: null | Highcharts.Point, group: readonly Highcharts.Point[]) {\n // When the chart is re-focused, the point that was focused before might no longer be valid it became\n // hidden or was destroyed by Highcharts. In that case we focus the point's parent group as a fallback.\n if (!point || !isPointVisible(point)) {\n this.focusGroup(group);\n }\n // When focusing a point we draw the focus outline around its corresponding rect, but with different offsets,\n // depending on the point's series type.\n else {\n this.focusedState = { type: \"point\", point, group };\n this.focusOutline.point(getPointRect(point), point);\n this.handlers.onFocusPoint(point, group);\n }\n }\n\n private get allX(): number[] {\n return this.context.derived.allX;\n }\n\n private getAllXInSeries = (series: Highcharts.Series): number[] => {\n return this.context.derived.getAllXInSeries(series);\n };\n\n private getPointsByX = (x: number): Highcharts.Point[] => {\n return this.context.derived.getPointsByX(x);\n };\n\n private findMatchingGroup = (point: Highcharts.Point): Highcharts.Point[] => {\n return this.getPointsByX(point.x);\n };\n\n private findFirstGroup = (): Highcharts.Point[] => {\n return this.getPointsByX(this.allX[0]);\n };\n\n private findLastGroup = (): Highcharts.Point[] => {\n return this.getPointsByX(this.allX[this.allX.length - 1]);\n };\n\n private findNextGroup = (point: Highcharts.Point): Highcharts.Point[] => {\n const nextIndex = getNextIndex(this.allX, this.allX.indexOf(point.x), 1);\n return this.getPointsByX(this.allX[nextIndex]);\n };\n\n private findPrevGroup = (point: Highcharts.Point): Highcharts.Point[] => {\n const nextIndex = getNextIndex(this.allX, this.allX.indexOf(point.x), -1);\n return this.getPointsByX(this.allX[nextIndex]);\n };\n\n private findNextPageGroup = (point: Highcharts.Point): Highcharts.Point[] => {\n const nextIndex = getNextPageIndex(this.allX, this.allX.indexOf(point.x), 1);\n return this.getPointsByX(this.allX[nextIndex]);\n };\n\n private findPrevPageGroup = (point: Highcharts.Point): Highcharts.Point[] => {\n const nextIndex = getNextPageIndex(this.allX, this.allX.indexOf(point.x), -1);\n return this.getPointsByX(this.allX[nextIndex]);\n };\n\n private findFirstPointInSeries = (point: Highcharts.Point): null | Highcharts.Point => {\n const seriesX = this.getAllXInSeries(point.series);\n return point.series.data.find((d) => d.x === seriesX[0]) ?? null;\n };\n\n private findLastPointInSeries = (point: Highcharts.Point): null | Highcharts.Point => {\n const seriesX = this.getAllXInSeries(point.series);\n return point.series.data.find((d) => d.x === seriesX[seriesX.length - 1]) ?? null;\n };\n\n private findNextPointInSeries = (point: Highcharts.Point): null | Highcharts.Point => {\n const seriesX = this.getAllXInSeries(point.series);\n const delta = !shouldInvertPointsDirection(point) ? 1 : -1;\n const nextIndex = getNextIndex(seriesX, seriesX.indexOf(point.x), delta);\n return point.series.data.find((d) => d.x === seriesX[nextIndex]) ?? null;\n };\n\n private findPrevPointInSeries = (point: Highcharts.Point): null | Highcharts.Point => {\n const seriesX = this.getAllXInSeries(point.series);\n const delta = !shouldInvertPointsDirection(point) ? -1 : 1;\n const nextIndex = getNextIndex(seriesX, seriesX.indexOf(point.x), delta);\n return point.series.data.find((d) => d.x === seriesX[nextIndex]) ?? null;\n };\n\n private findNextPagePointInSeries = (point: Highcharts.Point): null | Highcharts.Point => {\n const seriesX = this.getAllXInSeries(point.series);\n const delta = !shouldInvertPointsDirection(point) ? 1 : -1;\n const nextIndex = getNextPageIndex(seriesX, seriesX.indexOf(point.x), delta);\n return point.series.data.find((d) => d.x === seriesX[nextIndex]) ?? null;\n };\n\n private findPrevPagePointInSeries = (point: Highcharts.Point): null | Highcharts.Point => {\n const seriesX = this.getAllXInSeries(point.series);\n const delta = !shouldInvertPointsDirection(point) ? -1 : 1;\n const nextIndex = getNextPageIndex(seriesX, seriesX.indexOf(point.x), delta);\n return point.series.data.find((d) => d.x === seriesX[nextIndex]) ?? null;\n };\n}\n\nfunction handleKey(\n event: KeyboardEvent,\n handlers: {\n onActivate?: () => void;\n onBlockEnd?: () => void;\n onBlockStart?: () => void;\n onDefault?: () => void;\n onEnd?: () => void;\n onEscape?: () => void;\n onHome?: () => void;\n onInlineEnd?: () => void;\n onInlineStart?: () => void;\n onPageDown?: () => void;\n onPageUp?: () => void;\n },\n) {\n if (!event.currentTarget) {\n return;\n }\n if (!(event.currentTarget instanceof HTMLElement) && !(event.currentTarget instanceof SVGElement)) {\n return;\n }\n toolkitHandleKey({ keyCode: event.keyCode, currentTarget: event.currentTarget }, handlers);\n}\n\n// A helper class to draw the focus outline around given chart elements.\nclass FocusOutline {\n private context: ChartExtraContext;\n private elementsPool = new SVGRendererPool();\n\n constructor(context: ChartExtraContext) {\n this.context = context;\n }\n\n public chart = () => {\n const [x, y, width, height] = [\n this.context.chart().plotLeft,\n this.context.chart().plotTop,\n this.context.chart().plotWidth,\n this.context.chart().plotHeight,\n ];\n this.rect({ x, y, width, height }, Styles.focusOutlineOffsets.chart);\n };\n\n public group = (rect: Rect) => {\n this.rect(rect, Styles.focusOutlineOffsets.group);\n };\n\n public point = (rect: Rect, point: Highcharts.Point) => {\n const offsetByType = Styles.focusOutlineOffsets.pointByType[point.series.type];\n const offset = offsetByType ?? Styles.focusOutlineOffsets.point;\n this.rect(rect, offset);\n };\n\n public hide() {\n this.elementsPool.hideAll();\n }\n\n public destroy() {\n this.elementsPool.destroyAll();\n }\n\n private rect = ({ x, y, width, height }: Rect, offset: number) => {\n this.elementsPool.hideAll();\n this.elementsPool.rect(this.context.chart().renderer, {\n x: x - offset,\n y: y - offset,\n width: width + offset * 2,\n height: height + offset * 2,\n ...Styles.navigationFocusOutline,\n });\n };\n}\n\n// We do not invert the direction of pie segments when RTL, but swap the left/right keys.\n// To offset for that, the prev/next points direction is swapped, too.\nfunction shouldInvertPointsDirection(point: Highcharts.Point) {\n const isRTL = getIsRtl(point.series.chart.container.parentElement);\n return point.series.type === \"pie\" && isRTL;\n}\n\nfunction getNextIndex(array: unknown[], pointIndex: number, delta: -1 | 1): number {\n return circleIndex(pointIndex + delta, [0, array.length - 1]);\n}\n\nfunction getNextPageIndex(array: unknown[], pointIndex: number, delta: -1 | 1): number {\n return Math.min(array.length - 1, Math.max(0, pointIndex + delta * Math.round(array.length * PAGE_SIZE_PERCENTAGE)));\n}\n"]}
|
|
@@ -178,7 +178,7 @@ class HighlightCursorCartesian {
|
|
|
178
178
|
if (p.plotX !== undefined && p.plotY !== undefined) {
|
|
179
179
|
const selected = p === point;
|
|
180
180
|
const className = clsx(testClasses["highlight-marker"], selected && testClasses["highlight-marker-selected"]);
|
|
181
|
-
renderMarker(chart, this.markerElementsPool, p, selected, className);
|
|
181
|
+
renderMarker({ chart, pool: this.markerElementsPool, point: p, selected, className });
|
|
182
182
|
}
|
|
183
183
|
}
|
|
184
184
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart-extra-tooltip.js","sourceRoot":"","sources":["../../../../src/core/chart-api/chart-extra-tooltip.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport clsx from \"clsx\";\nimport type Highcharts from \"highcharts\";\n\nimport { getIsRtl } from \"@cloudscape-design/component-toolkit/internal\";\n\nimport * as Styles from \"../../internal/chart-styles\";\nimport { renderMarker } from \"../../internal/components/series-marker/render-marker\";\nimport AsyncStore from \"../../internal/utils/async-store\";\nimport { SVGRendererPool, SVGRendererSingle } from \"../../internal/utils/renderer-utils\";\nimport { DebouncedCall, isEqualArrays } from \"../../internal/utils/utils\";\nimport { Rect } from \"../interfaces\";\nimport { getGroupRect, getPointRect, getSeriesId, isXThreshold, safeRect } from \"../utils\";\nimport { ChartExtraContext } from \"./chart-extra-context\";\n\nimport testClasses from \"../test-classes/styles.css.js\";\n\nconst TOOLTIP_LAST_DISMISS_DELAY = 250;\n\n// The reactive state is used to propagate updates to the chart tooltip React component. The tooltip\n// content is to be derived from the target point and group.\nexport interface ReactiveTooltipState {\n visible: boolean;\n pinned: boolean;\n point: null | Highcharts.Point;\n group: readonly Highcharts.Point[];\n}\n\n// Chart helper that implements tooltip placement logic and cursors.\nexport class ChartExtraTooltip extends AsyncStore<ReactiveTooltipState> {\n private context: ChartExtraContext;\n\n // The tooltip lock is used to prevent tooltip position changes shortly after it was dismissed, to\n // deny its immediate re-appearance in the spot under where the dismiss button was.\n public tooltipLock = false;\n private tooltipLockCall = new DebouncedCall();\n private setTooltipLock = () => {\n if (this.get().pinned) {\n this.tooltipLock = true;\n this.tooltipLockCall.call(() => (this.tooltipLock = false), TOOLTIP_LAST_DISMISS_DELAY);\n }\n };\n\n // The cursor is a vertical or horizontal (in inverted charts) line and hollow or filled markers,\n // shown in cartesian charts on top of the matched group or point.\n private cursor = new HighlightCursorCartesian();\n // The track elements are invisible rectangles, compted for the given target point or group.\n // The target track is used for the \"target\" tooltip placement. The group track is used for\n // the \"middle\" and \"outside\" tooltip placement.\n private targetTrack = new SVGRendererSingle();\n private groupTrack = new SVGRendererSingle();\n\n // Cached coordinates to update cursor's position on re-render.\n private lastPoint: null | Highcharts.Point = null;\n private lastGroup: null | readonly Highcharts.Point[] = null;\n\n constructor(context: ChartExtraContext) {\n super({ visible: false, pinned: false, point: null, group: [] });\n this.context = context;\n }\n\n // The targetElement.element can get invalidated by Highcharts, so we cannot use\n // trackRef.current = targetElement.element as it might get invalidated unexpectedly.\n // The getTrack function ensures the latest element reference is given on each request.\n public getTargetTrack = () => (this.targetTrack.element?.element ?? null) as null | SVGElement;\n public getGroupTrack = () => {\n return (this.groupTrack.element?.element ?? null) as null | SVGElement;\n };\n\n public onChartRender() {\n if (this.lastGroup && this.get().visible) {\n this.updateTooltipCursor({ point: this.lastPoint, group: this.lastGroup });\n }\n }\n\n public onChartDestroy() {\n this.cursor.destroy();\n this.targetTrack.destroy();\n this.groupTrack.destroy();\n }\n\n public showTooltipOnPoint(point: Highcharts.Point, matchingGroup: readonly Highcharts.Point[], ignoreLock = false) {\n if (!this.tooltipLock || ignoreLock) {\n this.updateTooltipCursor({ point, group: matchingGroup });\n this.set(() => ({ visible: true, pinned: false, point, group: matchingGroup }));\n }\n }\n\n public showTooltipOnGroup(group: readonly Highcharts.Point[], ignoreLock = false) {\n if (!this.tooltipLock || ignoreLock) {\n this.updateTooltipCursor({ point: null, group });\n this.setGroupIfDifferent(group);\n }\n }\n\n public hideTooltip() {\n this.cursor.hide();\n this.targetTrack.hide();\n this.groupTrack.hide();\n this.setTooltipLock();\n this.set((prev) => ({ ...prev, visible: false, pinned: false }));\n }\n\n public pinTooltip() {\n if (this.context.settings.tooltipEnabled) {\n this.set((prev) => ({ ...prev, visible: true, pinned: true }));\n }\n }\n\n // Avoid re-rendering the tooltip on every cursor position change when hovering over the graph.\n // Just re-render when the groups are different.\n private setGroupIfDifferent(group: readonly Highcharts.Point[]) {\n function isGroupEqual(a: Highcharts.Point, b: Highcharts.Point) {\n return a?.x === b?.x && a?.y === b?.y && getSeriesId(a?.series) === getSeriesId(b?.series);\n }\n this.set((prev) => {\n return prev.point === null && isEqualArrays(prev.group, group, isGroupEqual)\n ? prev\n : { visible: true, pinned: false, point: null, group };\n });\n }\n\n private updateTooltipCursor = (props: { point: null | Highcharts.Point; group: readonly Highcharts.Point[] }) => {\n this.lastPoint = props.point;\n this.lastGroup = props.group;\n\n const chartType =\n this.context.chart().series.find((s) => s.type === \"pie\" || s.type === \"solidgauge\")?.type ?? \"cartesian\";\n if (chartType === \"pie\") {\n return this.updateTooltipCursorPie(props.group[0]);\n } else if (chartType === \"solidgauge\") {\n return this.updateTooltipCursorGauge(props.group[0]);\n } else {\n return this.updateTooltipCursorCartesian(props);\n }\n };\n\n private updateTooltipCursorCartesian = ({\n point,\n group,\n }: {\n point: null | Highcharts.Point;\n group: readonly Highcharts.Point[];\n }) => {\n const pointRect = point ? getPointRect(point) : getGroupRect(group.slice(0, 1));\n const groupRect = getGroupRect(group);\n // The cursor is not shown when column series are present (a UX decision).\n const hasColumnSeries = this.context.chart().series.some((s) => s.type === \"column\");\n this.cursor.create(groupRect, point, group, !hasColumnSeries);\n this.targetTrack.rect(this.context.chart().renderer, { ...pointRect, ...this.commonTrackAttrs });\n this.groupTrack.rect(this.context.chart().renderer, { ...groupRect, ...this.commonTrackAttrs });\n };\n\n private updateTooltipCursorPie = (point: Highcharts.Point) => {\n // We only create target track for pie chart as pie chart does not support groups.\n // It is also expected that only \"target\" tooltip position is used for pie charts.\n const pointRect = getPieChartTargetPlacement(point);\n this.targetTrack.rect(this.context.chart().renderer, { ...pointRect, ...this.commonTrackAttrs });\n };\n\n private updateTooltipCursorGauge = (point: Highcharts.Point) => {\n // Solid gauge charts are similar to pie charts in that they have a circular shape\n // and don't support grouping. We use a similar approach to pie charts.\n const pointRect = getSolidGaugeTargetPlacement(point);\n this.targetTrack.rect(this.context.chart().renderer, { ...pointRect, ...this.commonTrackAttrs });\n };\n\n private get commonTrackAttrs() {\n return { fill: \"transparent\", zIndex: -1, style: \"pointer-events:none\", direction: this.direction };\n }\n\n // We compute the direction from the chart container and then explicitly set it to the track\n // elements, as otherwise the direction check done for track elements always results to \"ltr\".\n private get direction() {\n const isRtl = getIsRtl(this.context.chart().container.parentElement);\n return isRtl ? \"rtl\" : \"ltr\";\n }\n}\n\n// A helper class to draw the cursor elements (include cursor line and matched points markers).\nclass HighlightCursorCartesian {\n private lineElement = new SVGRendererSingle();\n private markerElementsPool = new SVGRendererPool();\n\n public create(target: Rect, point: null | Highcharts.Point, group: readonly Highcharts.Point[], showLine: boolean) {\n this.hide();\n if (!group[0]?.series) {\n return;\n }\n\n const chart = group[0]?.series.chart;\n if (!chart) {\n return;\n }\n if (showLine) {\n // The cursor line is rendered orthogonally to the x axis (when the chart is inverted, the line is rendered horizontally).\n // The line is 1px thick, and is rendered through the center of the target's rect.\n const lineAttrs = chart.inverted\n ? {\n x: chart.plotLeft,\n y: chart.plotTop + target.y - target.height - 1,\n width: chart.plotWidth,\n height: 1,\n }\n : {\n x: target.x + target.width / 2,\n y: chart.plotTop,\n width: 1,\n height: chart.plotHeight,\n };\n this.lineElement.rect(chart.renderer, { ...Styles.cursorLine, ...lineAttrs });\n }\n for (const p of group.filter(this.isPointEligibleForMarker)) {\n if (p.plotX !== undefined && p.plotY !== undefined) {\n const selected = p === point;\n const className = clsx(testClasses[\"highlight-marker\"], selected && testClasses[\"highlight-marker-selected\"]);\n renderMarker(chart, this.markerElementsPool, p, selected, className);\n }\n }\n }\n\n public hide() {\n this.lineElement.hide();\n this.markerElementsPool.hideAll();\n }\n\n public destroy() {\n this.lineElement.destroy();\n this.markerElementsPool.destroyAll();\n }\n\n private isPointEligibleForMarker = (point: Highcharts.Point) => {\n return !isXThreshold(point.series) && point.series.type !== \"column\" && point.series.type !== \"errorbar\";\n };\n}\n\nfunction getPieChartTargetPlacement(point: Highcharts.Point): Rect {\n // The pie series segments do not provide plotX, plotY to compute the tooltip placement.\n // Instead, there is a `tooltipPos` tuple, which is not covered by TS.\n // See: https://github.com/highcharts/highcharts/issues/23118.\n if (\"tooltipPos\" in point && Array.isArray(point.tooltipPos)) {\n return safeRect({ x: point.tooltipPos[0], y: point.tooltipPos[1], width: 0, height: 0 });\n }\n // We use the alternative, middle, tooltip placement as a fallback, in case the undocumented \"tooltipPos\"\n // is no longer available in the point.\n return getPieMiddlePlacement(point);\n}\n\nfunction getPieMiddlePlacement(point: Highcharts.Point): Rect {\n const chart = point.series.chart;\n const [relativeX, relativeY, relativeDiameter] = point.series.center;\n const plotLeft = chart.plotLeft;\n const plotTop = chart.plotTop;\n const centerX = plotLeft + (typeof relativeX === \"number\" ? relativeX : (relativeX / 100) * chart.plotWidth);\n const centerY = plotTop + (typeof relativeY === \"number\" ? relativeY : (relativeY / 100) * chart.plotHeight);\n const radius =\n (typeof relativeDiameter === \"number\" ? relativeDiameter : (relativeDiameter / 100) * chart.plotWidth) / 2;\n return { x: centerX, y: centerY - radius, width: 1, height: 2 * radius };\n}\n\nfunction getSolidGaugeTargetPlacement(point: Highcharts.Point): Rect {\n const chart = point.series.chart;\n return safeRect({\n x: chart.plotLeft + chart.plotWidth / 2,\n y: chart.plotTop + chart.plotHeight / 2,\n width: 0,\n height: 0,\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"chart-extra-tooltip.js","sourceRoot":"","sources":["../../../../src/core/chart-api/chart-extra-tooltip.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AAEtC,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,OAAO,EAAE,QAAQ,EAAE,MAAM,+CAA+C,CAAC;AAEzE,OAAO,KAAK,MAAM,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,uDAAuD,CAAC;AACrF,OAAO,UAAU,MAAM,kCAAkC,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE1E,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAG3F,OAAO,WAAW,MAAM,+BAA+B,CAAC;AAExD,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAWvC,oEAAoE;AACpE,MAAM,OAAO,iBAAkB,SAAQ,UAAgC;IA2BrE,YAAY,OAA0B;QACpC,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAzBnE,kGAAkG;QAClG,mFAAmF;QAC5E,gBAAW,GAAG,KAAK,CAAC;QACnB,oBAAe,GAAG,IAAI,aAAa,EAAE,CAAC;QACtC,mBAAc,GAAG,GAAG,EAAE;YAC5B,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;gBACtB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,EAAE,0BAA0B,CAAC,CAAC;YAC1F,CAAC;QACH,CAAC,CAAC;QAEF,iGAAiG;QACjG,kEAAkE;QAC1D,WAAM,GAAG,IAAI,wBAAwB,EAAE,CAAC;QAChD,4FAA4F;QAC5F,2FAA2F;QAC3F,gDAAgD;QACxC,gBAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACtC,eAAU,GAAG,IAAI,iBAAiB,EAAE,CAAC;QAE7C,+DAA+D;QACvD,cAAS,GAA4B,IAAI,CAAC;QAC1C,cAAS,GAAuC,IAAI,CAAC;QAO7D,gFAAgF;QAChF,qFAAqF;QACrF,uFAAuF;QAChF,mBAAc,GAAG,GAAG,EAAE,eAAC,OAAA,CAAC,MAAA,MAAA,IAAI,CAAC,WAAW,CAAC,OAAO,0CAAE,OAAO,mCAAI,IAAI,CAAsB,CAAA,EAAA,CAAC;QACxF,kBAAa,GAAG,GAAG,EAAE;;YAC1B,OAAO,CAAC,MAAA,MAAA,IAAI,CAAC,UAAU,CAAC,OAAO,0CAAE,OAAO,mCAAI,IAAI,CAAsB,CAAC;QACzE,CAAC,CAAC;QAuDM,wBAAmB,GAAG,CAAC,KAA6E,EAAE,EAAE;;YAC9G,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;YAE7B,MAAM,SAAS,GACb,MAAA,MAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,0CAAE,IAAI,mCAAI,WAAW,CAAC;YAC5G,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACrD,CAAC;iBAAM,IAAI,SAAS,KAAK,YAAY,EAAE,CAAC;gBACtC,OAAO,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvD,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;YAClD,CAAC;QACH,CAAC,CAAC;QAEM,iCAA4B,GAAG,CAAC,EACtC,KAAK,EACL,KAAK,GAIN,EAAE,EAAE;YACH,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAChF,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YACtC,0EAA0E;YAC1E,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;YACrF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,eAAe,CAAC,CAAC;YAC9D,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;YACjG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAClG,CAAC,CAAC;QAEM,2BAAsB,GAAG,CAAC,KAAuB,EAAE,EAAE;YAC3D,kFAAkF;YAClF,kFAAkF;YAClF,MAAM,SAAS,GAAG,0BAA0B,CAAC,KAAK,CAAC,CAAC;YACpD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACnG,CAAC,CAAC;QAEM,6BAAwB,GAAG,CAAC,KAAuB,EAAE,EAAE;YAC7D,kFAAkF;YAClF,uEAAuE;YACvE,MAAM,SAAS,GAAG,4BAA4B,CAAC,KAAK,CAAC,CAAC;YACtD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACnG,CAAC,CAAC;QA3GA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAUM,aAAa;QAClB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;YACzC,IAAI,CAAC,mBAAmB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAEM,cAAc;QACnB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACtB,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;IAC5B,CAAC;IAEM,kBAAkB,CAAC,KAAuB,EAAE,aAA0C,EAAE,UAAU,GAAG,KAAK;QAC/G,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,UAAU,EAAE,CAAC;YACpC,IAAI,CAAC,mBAAmB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;YAC1D,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IAEM,kBAAkB,CAAC,KAAkC,EAAE,UAAU,GAAG,KAAK;QAC9E,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,UAAU,EAAE,CAAC;YACpC,IAAI,CAAC,mBAAmB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACjD,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAEM,WAAW;QAChB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACnB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACnE,CAAC;IAEM,UAAU;QACf,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;YACzC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,+FAA+F;IAC/F,gDAAgD;IACxC,mBAAmB,CAAC,KAAkC;QAC5D,SAAS,YAAY,CAAC,CAAmB,EAAE,CAAmB;YAC5D,OAAO,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,CAAC,OAAK,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,CAAC,CAAA,IAAI,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,CAAC,OAAK,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,CAAC,CAAA,IAAI,WAAW,CAAC,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,MAAM,CAAC,KAAK,WAAW,CAAC,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,MAAM,CAAC,CAAC;QAC7F,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAChB,OAAO,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC;gBAC1E,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC;IA+CD,IAAY,gBAAgB;QAC1B,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IACtG,CAAC;IAED,4FAA4F;IAC5F,8FAA8F;IAC9F,IAAY,SAAS;QACnB,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACrE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/B,CAAC;CACF;AAED,+FAA+F;AAC/F,MAAM,wBAAwB;IAA9B;QACU,gBAAW,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACtC,uBAAkB,GAAG,IAAI,eAAe,EAAE,CAAC;QAiD3C,6BAAwB,GAAG,CAAC,KAAuB,EAAE,EAAE;YAC7D,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC;QAC3G,CAAC,CAAC;IACJ,CAAC;IAlDQ,MAAM,CAAC,MAAY,EAAE,KAA8B,EAAE,KAAkC,EAAE,QAAiB;;QAC/G,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,CAAA,MAAA,KAAK,CAAC,CAAC,CAAC,0CAAE,MAAM,CAAA,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,MAAA,KAAK,CAAC,CAAC,CAAC,0CAAE,MAAM,CAAC,KAAK,CAAC;QACrC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,0HAA0H;YAC1H,kFAAkF;YAClF,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ;gBAC9B,CAAC,CAAC;oBACE,CAAC,EAAE,KAAK,CAAC,QAAQ;oBACjB,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC;oBAC/C,KAAK,EAAE,KAAK,CAAC,SAAS;oBACtB,MAAM,EAAE,CAAC;iBACV;gBACH,CAAC,CAAC;oBACE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC;oBAC9B,CAAC,EAAE,KAAK,CAAC,OAAO;oBAChB,KAAK,EAAE,CAAC;oBACR,MAAM,EAAE,KAAK,CAAC,UAAU;iBACzB,CAAC;YACN,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC;YAC5D,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBACnD,MAAM,QAAQ,GAAG,CAAC,KAAK,KAAK,CAAC;gBAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,EAAE,QAAQ,IAAI,WAAW,CAAC,2BAA2B,CAAC,CAAC,CAAC;gBAC9G,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;YACxF,CAAC;QACH,CAAC;IACH,CAAC;IAEM,IAAI;QACT,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;IACpC,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAC3B,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAC;IACvC,CAAC;CAKF;AAED,SAAS,0BAA0B,CAAC,KAAuB;IACzD,wFAAwF;IACxF,sEAAsE;IACtE,8DAA8D;IAC9D,IAAI,YAAY,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7D,OAAO,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3F,CAAC;IACD,yGAAyG;IACzG,uCAAuC;IACvC,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAuB;IACpD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;IACjC,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,gBAAgB,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;IACrE,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAChC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,MAAM,OAAO,GAAG,QAAQ,GAAG,CAAC,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;IAC7G,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;IAC7G,MAAM,MAAM,GACV,CAAC,OAAO,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC7G,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC;AAC3E,CAAC;AAED,SAAS,4BAA4B,CAAC,KAAuB;IAC3D,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;IACjC,OAAO,QAAQ,CAAC;QACd,CAAC,EAAE,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,SAAS,GAAG,CAAC;QACvC,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,UAAU,GAAG,CAAC;QACvC,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;KACV,CAAC,CAAC;AACL,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport clsx from \"clsx\";\nimport type Highcharts from \"highcharts\";\n\nimport { getIsRtl } from \"@cloudscape-design/component-toolkit/internal\";\n\nimport * as Styles from \"../../internal/chart-styles\";\nimport { renderMarker } from \"../../internal/components/series-marker/render-marker\";\nimport AsyncStore from \"../../internal/utils/async-store\";\nimport { SVGRendererPool, SVGRendererSingle } from \"../../internal/utils/renderer-utils\";\nimport { DebouncedCall, isEqualArrays } from \"../../internal/utils/utils\";\nimport { Rect } from \"../interfaces\";\nimport { getGroupRect, getPointRect, getSeriesId, isXThreshold, safeRect } from \"../utils\";\nimport { ChartExtraContext } from \"./chart-extra-context\";\n\nimport testClasses from \"../test-classes/styles.css.js\";\n\nconst TOOLTIP_LAST_DISMISS_DELAY = 250;\n\n// The reactive state is used to propagate updates to the chart tooltip React component. The tooltip\n// content is to be derived from the target point and group.\nexport interface ReactiveTooltipState {\n visible: boolean;\n pinned: boolean;\n point: null | Highcharts.Point;\n group: readonly Highcharts.Point[];\n}\n\n// Chart helper that implements tooltip placement logic and cursors.\nexport class ChartExtraTooltip extends AsyncStore<ReactiveTooltipState> {\n private context: ChartExtraContext;\n\n // The tooltip lock is used to prevent tooltip position changes shortly after it was dismissed, to\n // deny its immediate re-appearance in the spot under where the dismiss button was.\n public tooltipLock = false;\n private tooltipLockCall = new DebouncedCall();\n private setTooltipLock = () => {\n if (this.get().pinned) {\n this.tooltipLock = true;\n this.tooltipLockCall.call(() => (this.tooltipLock = false), TOOLTIP_LAST_DISMISS_DELAY);\n }\n };\n\n // The cursor is a vertical or horizontal (in inverted charts) line and hollow or filled markers,\n // shown in cartesian charts on top of the matched group or point.\n private cursor = new HighlightCursorCartesian();\n // The track elements are invisible rectangles, compted for the given target point or group.\n // The target track is used for the \"target\" tooltip placement. The group track is used for\n // the \"middle\" and \"outside\" tooltip placement.\n private targetTrack = new SVGRendererSingle();\n private groupTrack = new SVGRendererSingle();\n\n // Cached coordinates to update cursor's position on re-render.\n private lastPoint: null | Highcharts.Point = null;\n private lastGroup: null | readonly Highcharts.Point[] = null;\n\n constructor(context: ChartExtraContext) {\n super({ visible: false, pinned: false, point: null, group: [] });\n this.context = context;\n }\n\n // The targetElement.element can get invalidated by Highcharts, so we cannot use\n // trackRef.current = targetElement.element as it might get invalidated unexpectedly.\n // The getTrack function ensures the latest element reference is given on each request.\n public getTargetTrack = () => (this.targetTrack.element?.element ?? null) as null | SVGElement;\n public getGroupTrack = () => {\n return (this.groupTrack.element?.element ?? null) as null | SVGElement;\n };\n\n public onChartRender() {\n if (this.lastGroup && this.get().visible) {\n this.updateTooltipCursor({ point: this.lastPoint, group: this.lastGroup });\n }\n }\n\n public onChartDestroy() {\n this.cursor.destroy();\n this.targetTrack.destroy();\n this.groupTrack.destroy();\n }\n\n public showTooltipOnPoint(point: Highcharts.Point, matchingGroup: readonly Highcharts.Point[], ignoreLock = false) {\n if (!this.tooltipLock || ignoreLock) {\n this.updateTooltipCursor({ point, group: matchingGroup });\n this.set(() => ({ visible: true, pinned: false, point, group: matchingGroup }));\n }\n }\n\n public showTooltipOnGroup(group: readonly Highcharts.Point[], ignoreLock = false) {\n if (!this.tooltipLock || ignoreLock) {\n this.updateTooltipCursor({ point: null, group });\n this.setGroupIfDifferent(group);\n }\n }\n\n public hideTooltip() {\n this.cursor.hide();\n this.targetTrack.hide();\n this.groupTrack.hide();\n this.setTooltipLock();\n this.set((prev) => ({ ...prev, visible: false, pinned: false }));\n }\n\n public pinTooltip() {\n if (this.context.settings.tooltipEnabled) {\n this.set((prev) => ({ ...prev, visible: true, pinned: true }));\n }\n }\n\n // Avoid re-rendering the tooltip on every cursor position change when hovering over the graph.\n // Just re-render when the groups are different.\n private setGroupIfDifferent(group: readonly Highcharts.Point[]) {\n function isGroupEqual(a: Highcharts.Point, b: Highcharts.Point) {\n return a?.x === b?.x && a?.y === b?.y && getSeriesId(a?.series) === getSeriesId(b?.series);\n }\n this.set((prev) => {\n return prev.point === null && isEqualArrays(prev.group, group, isGroupEqual)\n ? prev\n : { visible: true, pinned: false, point: null, group };\n });\n }\n\n private updateTooltipCursor = (props: { point: null | Highcharts.Point; group: readonly Highcharts.Point[] }) => {\n this.lastPoint = props.point;\n this.lastGroup = props.group;\n\n const chartType =\n this.context.chart().series.find((s) => s.type === \"pie\" || s.type === \"solidgauge\")?.type ?? \"cartesian\";\n if (chartType === \"pie\") {\n return this.updateTooltipCursorPie(props.group[0]);\n } else if (chartType === \"solidgauge\") {\n return this.updateTooltipCursorGauge(props.group[0]);\n } else {\n return this.updateTooltipCursorCartesian(props);\n }\n };\n\n private updateTooltipCursorCartesian = ({\n point,\n group,\n }: {\n point: null | Highcharts.Point;\n group: readonly Highcharts.Point[];\n }) => {\n const pointRect = point ? getPointRect(point) : getGroupRect(group.slice(0, 1));\n const groupRect = getGroupRect(group);\n // The cursor is not shown when column series are present (a UX decision).\n const hasColumnSeries = this.context.chart().series.some((s) => s.type === \"column\");\n this.cursor.create(groupRect, point, group, !hasColumnSeries);\n this.targetTrack.rect(this.context.chart().renderer, { ...pointRect, ...this.commonTrackAttrs });\n this.groupTrack.rect(this.context.chart().renderer, { ...groupRect, ...this.commonTrackAttrs });\n };\n\n private updateTooltipCursorPie = (point: Highcharts.Point) => {\n // We only create target track for pie chart as pie chart does not support groups.\n // It is also expected that only \"target\" tooltip position is used for pie charts.\n const pointRect = getPieChartTargetPlacement(point);\n this.targetTrack.rect(this.context.chart().renderer, { ...pointRect, ...this.commonTrackAttrs });\n };\n\n private updateTooltipCursorGauge = (point: Highcharts.Point) => {\n // Solid gauge charts are similar to pie charts in that they have a circular shape\n // and don't support grouping. We use a similar approach to pie charts.\n const pointRect = getSolidGaugeTargetPlacement(point);\n this.targetTrack.rect(this.context.chart().renderer, { ...pointRect, ...this.commonTrackAttrs });\n };\n\n private get commonTrackAttrs() {\n return { fill: \"transparent\", zIndex: -1, style: \"pointer-events:none\", direction: this.direction };\n }\n\n // We compute the direction from the chart container and then explicitly set it to the track\n // elements, as otherwise the direction check done for track elements always results to \"ltr\".\n private get direction() {\n const isRtl = getIsRtl(this.context.chart().container.parentElement);\n return isRtl ? \"rtl\" : \"ltr\";\n }\n}\n\n// A helper class to draw the cursor elements (include cursor line and matched points markers).\nclass HighlightCursorCartesian {\n private lineElement = new SVGRendererSingle();\n private markerElementsPool = new SVGRendererPool();\n\n public create(target: Rect, point: null | Highcharts.Point, group: readonly Highcharts.Point[], showLine: boolean) {\n this.hide();\n if (!group[0]?.series) {\n return;\n }\n\n const chart = group[0]?.series.chart;\n if (!chart) {\n return;\n }\n if (showLine) {\n // The cursor line is rendered orthogonally to the x axis (when the chart is inverted, the line is rendered horizontally).\n // The line is 1px thick, and is rendered through the center of the target's rect.\n const lineAttrs = chart.inverted\n ? {\n x: chart.plotLeft,\n y: chart.plotTop + target.y - target.height - 1,\n width: chart.plotWidth,\n height: 1,\n }\n : {\n x: target.x + target.width / 2,\n y: chart.plotTop,\n width: 1,\n height: chart.plotHeight,\n };\n this.lineElement.rect(chart.renderer, { ...Styles.cursorLine, ...lineAttrs });\n }\n for (const p of group.filter(this.isPointEligibleForMarker)) {\n if (p.plotX !== undefined && p.plotY !== undefined) {\n const selected = p === point;\n const className = clsx(testClasses[\"highlight-marker\"], selected && testClasses[\"highlight-marker-selected\"]);\n renderMarker({ chart, pool: this.markerElementsPool, point: p, selected, className });\n }\n }\n }\n\n public hide() {\n this.lineElement.hide();\n this.markerElementsPool.hideAll();\n }\n\n public destroy() {\n this.lineElement.destroy();\n this.markerElementsPool.destroyAll();\n }\n\n private isPointEligibleForMarker = (point: Highcharts.Point) => {\n return !isXThreshold(point.series) && point.series.type !== \"column\" && point.series.type !== \"errorbar\";\n };\n}\n\nfunction getPieChartTargetPlacement(point: Highcharts.Point): Rect {\n // The pie series segments do not provide plotX, plotY to compute the tooltip placement.\n // Instead, there is a `tooltipPos` tuple, which is not covered by TS.\n // See: https://github.com/highcharts/highcharts/issues/23118.\n if (\"tooltipPos\" in point && Array.isArray(point.tooltipPos)) {\n return safeRect({ x: point.tooltipPos[0], y: point.tooltipPos[1], width: 0, height: 0 });\n }\n // We use the alternative, middle, tooltip placement as a fallback, in case the undocumented \"tooltipPos\"\n // is no longer available in the point.\n return getPieMiddlePlacement(point);\n}\n\nfunction getPieMiddlePlacement(point: Highcharts.Point): Rect {\n const chart = point.series.chart;\n const [relativeX, relativeY, relativeDiameter] = point.series.center;\n const plotLeft = chart.plotLeft;\n const plotTop = chart.plotTop;\n const centerX = plotLeft + (typeof relativeX === \"number\" ? relativeX : (relativeX / 100) * chart.plotWidth);\n const centerY = plotTop + (typeof relativeY === \"number\" ? relativeY : (relativeY / 100) * chart.plotHeight);\n const radius =\n (typeof relativeDiameter === \"number\" ? relativeDiameter : (relativeDiameter / 100) * chart.plotWidth) / 2;\n return { x: centerX, y: centerY - radius, width: 1, height: 2 * radius };\n}\n\nfunction getSolidGaugeTargetPlacement(point: Highcharts.Point): Rect {\n const chart = point.series.chart;\n return safeRect({\n x: chart.plotLeft + chart.plotWidth / 2,\n y: chart.plotTop + chart.plotHeight / 2,\n width: 0,\n height: 0,\n });\n}\n"]}
|
package/core/chart-api/index.js
CHANGED
|
@@ -266,6 +266,17 @@ export class ChartAPI {
|
|
|
266
266
|
this.clearChartHighlight({ isApiCall: false });
|
|
267
267
|
this.chartExtraNavigation.announceChart(getChartAccessibleDescription(this.context.chart()));
|
|
268
268
|
},
|
|
269
|
+
onDismissHoverTooltip: () => {
|
|
270
|
+
// Dismiss any visible non-pinned tooltip when ESC is pressed.
|
|
271
|
+
// Returns true if a tooltip was dismissed, false otherwise.
|
|
272
|
+
// Used by ESC handlers at group/point level to decide whether to also navigate.
|
|
273
|
+
const tooltipState = this.chartExtraTooltip.get();
|
|
274
|
+
if (tooltipState.visible && !tooltipState.pinned) {
|
|
275
|
+
this.clearChartHighlight({ isApiCall: false });
|
|
276
|
+
return true;
|
|
277
|
+
}
|
|
278
|
+
return false;
|
|
279
|
+
},
|
|
269
280
|
onFocusGroup: (group) => {
|
|
270
281
|
this.highlightActions(group, { isApiCall: false, overrideTooltipLock: true });
|
|
271
282
|
this.chartExtraNavigation.announceElement(getGroupAccessibleDescription(group), false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/chart-api/index.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useEffect, useRef } from \"react\";\nimport type Highcharts from \"highcharts\";\n\nimport { fireNonCancelableEvent } from \"../../internal/events\";\nimport { ReadonlyAsyncStore } from \"../../internal/utils/async-store\";\nimport { getChartSeries } from \"../../internal/utils/chart-series\";\nimport { getSeriesData } from \"../../internal/utils/series-data\";\nimport { Writeable } from \"../../internal/utils/utils\";\nimport { CoreChartProps } from \"../interfaces\";\nimport {\n getChartAccessibleDescription,\n getGroupAccessibleDescription,\n getPointAccessibleDescription,\n isXThreshold,\n} from \"../utils\";\nimport { ChartExtraAxisTitles, ReactiveAxisTitlesState } from \"./chart-extra-axis-titles\";\nimport { ChartExtraContext, createChartContext, updateChartContext } from \"./chart-extra-context\";\nimport { ChartExtraHighlight } from \"./chart-extra-highlight\";\nimport { ChartExtraLegend, ReactiveLegendState } from \"./chart-extra-legend\";\nimport { ChartExtraNavigation, ChartExtraNavigationHandlers } from \"./chart-extra-navigation\";\nimport { ChartExtraNodata, ReactiveNodataState } from \"./chart-extra-nodata\";\nimport { ChartExtraPointer, ChartExtraPointerHandlers } from \"./chart-extra-pointer\";\nimport { ChartExtraTooltip, ReactiveTooltipState } from \"./chart-extra-tooltip\";\n\n// The API helper injects Cloudscape custom behaviors, and returns the API instance that comes with\n// reactive state and handlers to be assigned as Highcharts options, used by Cloudscape components\n// (tooltip, legend, and other), or exposed as public core chart API.\nexport function useChartAPI(\n settings: ChartExtraContext.Settings,\n handlers: ChartExtraContext.Handlers,\n state: ChartExtraContext.State,\n) {\n // The API helper instance defines many pieces of internal state with different lifecycles, most\n // of which are not be invalidated when the hook re-renders, or properties change. That is why we\n // create the instance once, when the component is mounted.\n const api = useRef(new ChartAPI(settings, handlers, state)).current;\n // The consumer-defined properties can still change during the component lifecycle. We propagate the\n // changes by updating the helper's context directly. That is fine for most of the properties, as those\n // are only used in event-based callbacks, and require nothing to recompute when there is a change.\n useEffect(() => {\n api.context.settings = settings;\n api.context.handlers = handlers;\n api.context.state = state;\n });\n\n // The only property that does require notifying the helper when it changes, is the visible items state.\n // We stringify the visible items array so that it is compared by value, and the effect is only fired when\n // there is an actual change to the visible items, including items order.\n const visibleItemsIndex = state.visibleItems ? state.visibleItems.join(\"::\") : null;\n useEffect(() => {\n // When visibleItemsIndex === null, it means the visible items state is managed internally inside the helper,\n // so no need to call the API method.\n // The api.updateItemsVisibility() can only be used once the chart is initialized, so we check for api.ready.\n // The initialization happens after the first React render, so the chart is expected to not be ready when the\n // effect is called for the first time. This is fine, as the initial visibility state is handled by the helper.\n // The code below is needed to notify the helper any time the visible items state changes.\n if (api.ready && visibleItemsIndex !== null) {\n api.updateItemsVisibility();\n }\n }, [api, visibleItemsIndex]);\n\n // Run cleanup code when the component unmounts.\n useEffect(() => () => api.onChartDestroy(), [api]);\n\n return api;\n}\n\n// The main chart helper that provides customizations to Highcharts, including tooltip, legend, keyboard navigation, and more.\n// It is split into multiple dedicated (chart-extra) helpers (highlight, tooltip, navigation, and other), most of which define\n// internal state, and have a lifecycle based on Highcharts render event.\n// The helper code has a shared context, which includes the consumer settings, visible items state, and derived state, computed\n// from Highcharts.Chart on each render, and reused for downstream computations for better efficiency.\nexport class ChartAPI {\n public context = createChartContext();\n private chartExtraHighlight = new ChartExtraHighlight(this.context);\n private chartExtraTooltip = new ChartExtraTooltip(this.context);\n private chartExtraNavigation = new ChartExtraNavigation(this.context, this.navigationHandlers);\n private chartExtraPointer = new ChartExtraPointer(this.context, this.pointerHandlers);\n private chartExtraLegend = new ChartExtraLegend(this.context);\n private chartExtraNodata = new ChartExtraNodata(this.context);\n private chartExtraAxisTitles = new ChartExtraAxisTitles(this.context);\n\n constructor(\n settings: ChartExtraContext.Settings,\n handlers: ChartExtraContext.Handlers,\n state: ChartExtraContext.State,\n ) {\n this.context.settings = settings;\n this.context.handlers = handlers;\n this.context.state = state;\n }\n\n // The ready() returns true if the chart is initialized and helper methods are safe to use (after Highcharts triggers onChartRender).\n // Using any of the helper methods before the chart is initialized will result in an exception.\n public get ready() {\n return !!this.context.chartOrNull;\n }\n\n // The Highcharts options to be merged with the rest of the configuration defined in the chart-core.\n public getOptions() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const chartAPI = this;\n const onChartLoad: Highcharts.ChartLoadCallbackFunction = function (this) {\n chartAPI.chartExtraPointer.onChartLoad(this);\n };\n const onChartRender: Highcharts.ChartRenderCallbackFunction = function (this) {\n updateChartContext(chartAPI.context, this);\n chartAPI.chartExtraHighlight.onChartRender();\n chartAPI.chartExtraLegend.onChartRender();\n chartAPI.chartExtraNodata.onChartRender();\n chartAPI.chartExtraAxisTitles.onChartRender();\n chartAPI.chartExtraTooltip.onChartRender();\n chartAPI.handleDestroyedPoints();\n chartAPI.resetColorCounter();\n chartAPI.showMarkersForIsolatedPoints();\n };\n const onChartClick: Highcharts.ChartClickCallbackFunction = function () {\n chartAPI.chartExtraPointer.onChartClick(this.hoverPoint);\n };\n const onSeriesPointMouseOver: Highcharts.PointMouseOverCallbackFunction = function () {\n chartAPI.chartExtraPointer.onSeriesPointMouseOver(this);\n };\n const onSeriesPointMouseOut: Highcharts.PointMouseOutCallbackFunction = function () {\n chartAPI.chartExtraPointer.onSeriesPointMouseOut();\n };\n const onSeriesPointClick: Highcharts.PointClickCallbackFunction = function () {\n chartAPI.chartExtraPointer.onSeriesPointClick(this);\n };\n return {\n onChartLoad,\n onChartRender,\n onChartClick,\n onSeriesPointMouseOver,\n onSeriesPointMouseOut,\n onSeriesPointClick,\n };\n }\n\n // There is no cleanup or destroy event in Highcharts options, so we define a custom one\n // to be used when the React component unmounts.\n public onChartDestroy = () => {\n this.chartExtraNavigation.onChartDestroy();\n this.chartExtraPointer.onChartDestroy();\n this.chartExtraTooltip.onChartDestroy();\n };\n\n // Reactive state stores.\n public get tooltipStore() {\n return this.chartExtraTooltip as ReadonlyAsyncStore<ReactiveTooltipState>;\n }\n public get legendStore() {\n return this.chartExtraLegend as ReadonlyAsyncStore<ReactiveLegendState>;\n }\n public get nodataStore() {\n return this.chartExtraNodata as ReadonlyAsyncStore<ReactiveNodataState>;\n }\n public get axisTitlesStore() {\n return this.chartExtraAxisTitles as ReadonlyAsyncStore<ReactiveAxisTitlesState>;\n }\n\n // References to SVG elements used for tooltip placement.\n public getTargetTrack = this.chartExtraTooltip.getTargetTrack.bind(this.chartExtraTooltip);\n public getGroupTrack = this.chartExtraTooltip.getGroupTrack.bind(this.chartExtraTooltip);\n\n // Legend marker renderer.\n public renderMarker = this.chartExtraLegend.renderMarker.bind(this.chartExtraLegend);\n\n // Callbacks assigned to the tooltip.\n public onMouseEnterTooltip = this.chartExtraPointer.onMouseEnterTooltip.bind(this.chartExtraPointer);\n public onMouseLeaveTooltip = this.chartExtraPointer.onMouseLeaveTooltip.bind(this.chartExtraPointer);\n public onDismissTooltip = (outsideClick?: boolean) => {\n const { pinned, point, group } = this.chartExtraTooltip.get();\n if (pinned) {\n this.chartExtraTooltip.hideTooltip();\n // The chart highlight is preserved while the tooltip is pinned. We need to clear it manually here, for the case\n // when the pointer lands outside the chart after the tooltip is dismissed, so that the mouse-out event won't fire.\n this.clearChartHighlight({ isApiCall: false });\n // If the tooltip was not dismissed by clicking outside, we bring focus to the point or group, that was\n // associated with the tooltip, so that we user can continue keyboard navigation from that spot.\n if (!outsideClick) {\n this.chartExtraNavigation.focusApplication(point, group);\n }\n }\n };\n\n // Hide the tooltip from an action initiated by the tooltip's content\n public hideTooltip = () => {\n this.chartExtraTooltip.hideTooltip();\n // The chart highlight is preserved while the tooltip is pinned. We need to clear it manually here, for the case\n // when the pointer lands outside the chart after the tooltip is dismissed, so that the mouse-out event won't fire.\n this.clearChartHighlight({ isApiCall: false });\n };\n\n // Reference to the role=\"application\" element used for navigation.\n public setApplication = this.chartExtraNavigation.setApplication.bind(this.chartExtraNavigation);\n\n // A callback to notify the helper when items visibility state changes.\n public updateItemsVisibility = this.chartExtraLegend.updateItemsVisibility.bind(this.chartExtraLegend);\n\n // A callback used by the legend and filter components when series/segments visibility changes.\n public onItemVisibilityChange = (items: readonly string[], detail: CoreChartProps.InteractionKind) =>\n this.chartExtraLegend.onItemVisibilityChange(items, detail);\n\n // Callbacks used by the legend component when items highlight state changes.\n public onHighlightChartItems = (itemIds: readonly string[]) => {\n if (!this.isTooltipPinned) {\n this.chartExtraHighlight.highlightChartItems(itemIds);\n this.chartExtraLegend.onHighlightItems(itemIds);\n }\n };\n public onClearChartItemsHighlight = () => {\n if (!this.isTooltipPinned) {\n this.chartExtraHighlight.clearChartItemsHighlight();\n this.chartExtraLegend.onClearHighlight();\n\n // Notify the consumer that a clear-highlight action was made.\n fireNonCancelableEvent(this.context.handlers.onClearHighlight, { isApiCall: false });\n }\n };\n\n // Callbacks used for hover and keyboard navigation, and also exposed to the public API to give the ability\n // to highlight and show tooltip for the given point or group manually.\n public highlightChartItems = (itemIds: readonly string[]) => {\n if (!this.isTooltipPinned) {\n this.chartExtraHighlight.highlightChartItems(itemIds);\n this.chartExtraLegend.onHighlightItems(itemIds);\n }\n };\n public setItemsVisible = (visibleItemsIds: readonly string[]) => {\n this.chartExtraLegend.onItemVisibilityChange(visibleItemsIds, { interactionType: \"api\" });\n };\n public highlightChartPoint = (point: Highcharts.Point, { isApiCall }: { isApiCall: boolean }) => {\n if (!this.isTooltipPinned) {\n this.highlightActions(point, { isApiCall });\n }\n };\n public highlightChartGroup = (group: readonly Highcharts.Point[], { isApiCall }: { isApiCall: boolean }) => {\n if (!this.isTooltipPinned) {\n this.highlightActions(group as Writeable<Highcharts.Point[]>, { isApiCall });\n }\n };\n public clearChartHighlight = ({ isApiCall }: { isApiCall: boolean }) => {\n if (!this.isTooltipPinned) {\n this.clearHighlightActions({ isApiCall });\n }\n };\n public get publicApi() {\n return {\n highlightItems: (itemIds: readonly string[]) => this.highlightChartItems(itemIds),\n setItemsVisible: (visibleItemIds: readonly string[]) => this.setItemsVisible(visibleItemIds),\n highlightChartPoint: (point: Highcharts.Point) => this.highlightChartPoint(point, { isApiCall: true }),\n highlightChartGroup: (group: readonly Highcharts.Point[]) => this.highlightChartGroup(group, { isApiCall: true }),\n clearChartHighlight: () => this.clearChartHighlight({ isApiCall: true }),\n };\n }\n\n // A set of callbacks required for keyboard navigation.\n private get navigationHandlers(): ChartExtraNavigationHandlers {\n return {\n onFocusChart: () => {\n this.clearChartHighlight({ isApiCall: false });\n this.chartExtraNavigation.announceChart(getChartAccessibleDescription(this.context.chart()));\n },\n onFocusGroup: (group: Highcharts.Point[]) => {\n this.highlightActions(group, { isApiCall: false, overrideTooltipLock: true });\n this.chartExtraNavigation.announceElement(getGroupAccessibleDescription(group), false);\n },\n onFocusPoint: (point: Highcharts.Point) => {\n const labels = this.context.settings.labels;\n this.highlightActions(point, { isApiCall: false, overrideTooltipLock: true });\n this.chartExtraNavigation.announceElement(getPointAccessibleDescription(point, labels), false);\n },\n onBlur: () => this.clearChartHighlight({ isApiCall: false }),\n onActivateGroup: () => {\n const current = this.chartExtraTooltip.get();\n if (current.group.length > 0) {\n this.chartExtraTooltip.pinTooltip();\n this.chartExtraNavigation.announceElement(getGroupAccessibleDescription(current.group), true);\n }\n },\n onActivatePoint: () => {\n const current = this.chartExtraTooltip.get();\n if (current.point) {\n const labels = this.context.settings.labels;\n this.chartExtraTooltip.pinTooltip();\n this.chartExtraNavigation.announceElement(getPointAccessibleDescription(current.point, labels), true);\n }\n },\n };\n }\n\n // A set of callbacks required for pointer navigation.\n private get pointerHandlers(): ChartExtraPointerHandlers {\n return {\n onPointHover: (point) => {\n this.highlightChartPoint(point, { isApiCall: false });\n },\n onGroupHover: (group) => {\n this.highlightChartGroup(group, { isApiCall: false });\n },\n onHoverLost: () => {\n this.clearChartHighlight({ isApiCall: false });\n },\n onPointClick: (point) => {\n this.pinTooltipOnPoint(point);\n },\n onGroupClick: (group) => {\n this.pinTooltipOnGroup(group);\n },\n };\n }\n\n // Area- or line series can be defined with just a single point, or include missing data (y=null) in such\n // a way, that certain points become isolated. As we prefer the markers to not be shown for area- and line\n // series by default, those points become invisible, unless hovered. To fix this, we use the function below,\n // that finds isolates points and overrides the marker.enabled configuration for those.\n // See: https://github.com/highcharts/highcharts/issues/1210.\n private showMarkersForIsolatedPoints() {\n let shouldRedraw = false;\n for (const s of this.context.chart().series) {\n const seriesData = getSeriesData(s.data);\n for (let i = 0; i < seriesData.length; i++) {\n const isEligibleSeries = !isXThreshold(s) && s.type !== \"scatter\" && !seriesData[i].options.marker?.enabled;\n if (\n isEligibleSeries &&\n (seriesData[i - 1]?.y === undefined || seriesData[i - 1]?.y === null) &&\n (seriesData[i + 1]?.y === undefined || seriesData[i + 1]?.y === null)\n ) {\n seriesData[i].update({ marker: { enabled: true } }, false);\n shouldRedraw = true;\n }\n }\n }\n if (shouldRedraw) {\n this.context.chart().redraw();\n }\n }\n\n // Highcharts sometimes destroys points upon re-rendering. As result, the already stored points can get\n // replaced by `{ destroyed: true }`. This can affect the tooltip state, making the component crash when\n // obtaining data from points, or making it hidden yet pinned, so not visible on hover until a click is made.\n // To prevent these issues, on each render we check for destroyed points in the tooltip state, and proactively\n // hide the tooltip if found. The behavior is only observed during the initial chart loading, and is not expected\n // to cause UX issues with the tooltip being closed unexpectedly.\n // See: https://github.com/highcharts/highcharts/issues/23175.\n private handleDestroyedPoints() {\n const tooltipState = this.chartExtraTooltip.get();\n if (tooltipState.group.some((p) => !p.series)) {\n this.chartExtraTooltip.hideTooltip();\n }\n }\n\n // We reset color counter so that when a series is removed and then added back - it will\n // have the same color as before, not the next one in the color sequence.\n // See: https://github.com/highcharts/highcharts/issues/23077.\n private resetColorCounter() {\n const chart = this.context.chart();\n if (\"colorCounter\" in chart && typeof chart.colorCounter === \"number\") {\n chart.colorCounter = getChartSeries(chart.series).length;\n }\n }\n\n private pinTooltipOnPoint = (point: Highcharts.Point) => {\n const currentPoint = this.chartExtraTooltip.get().point;\n const currentGroup = this.chartExtraTooltip.get().group;\n const positionsMatch = isPointsPositionsEqual(currentPoint ?? currentGroup[0], point);\n\n // If the previously hovered and now clicked positions match, and the the tooltip wasn't\n // dismissed just a moment ago, we make the tooltip pinned in this position.\n if (positionsMatch && !this.chartExtraTooltip.tooltipLock) {\n this.highlightActions(point, { isApiCall: false });\n this.chartExtraTooltip.pinTooltip();\n }\n // If the tooltip was just dismissed, it means this happened by clicking somewhere in the plot area.\n // If the clicked position differs from the one that was pinned - we show tooltip in the new position.\n else if (!positionsMatch && this.chartExtraTooltip.tooltipLock) {\n this.highlightActions(point, { isApiCall: false, overrideTooltipLock: true });\n }\n };\n\n private pinTooltipOnGroup = (group: Highcharts.Point[]) => {\n const currentPoint = this.chartExtraTooltip.get().point;\n const currentGroup = this.chartExtraTooltip.get().group;\n const positionsMatch = isPointsPositionsEqual(currentPoint ?? currentGroup[0], group[0]);\n\n // If the previously hovered and now clicked positions match, and the the tooltip wasn't\n // dismissed just a moment ago, we make the tooltip pinned in this position.\n if (positionsMatch && !this.chartExtraTooltip.tooltipLock) {\n this.highlightActions(group, { isApiCall: false });\n this.chartExtraTooltip.pinTooltip();\n }\n // If the tooltip was just dismissed, it means this happened by clicking somewhere in the plot area.\n // If the clicked position differs from the one that was pinned - we show tooltip in the new position.\n else if (!positionsMatch && this.chartExtraTooltip.tooltipLock) {\n this.highlightActions(group, { isApiCall: false, overrideTooltipLock: true });\n }\n };\n\n private highlightActions(\n target: Highcharts.Point | Highcharts.Point[],\n { isApiCall, overrideTooltipLock }: { isApiCall: boolean; overrideTooltipLock?: boolean },\n ) {\n const point = Array.isArray(target) ? null : target;\n const group = Array.isArray(target) ? target : this.context.derived.getPointsByX(target.x);\n\n if (!this.isTooltipPinned) {\n // Update Highcharts elements state.\n if (point) {\n this.chartExtraHighlight.highlightChartPoint(point);\n } else {\n this.chartExtraHighlight.highlightChartGroup(group);\n }\n\n // Update tooltip and legend state.\n if (point) {\n this.chartExtraLegend.onHighlightPoint(point);\n this.chartExtraTooltip.showTooltipOnPoint(point, group, overrideTooltipLock);\n } else {\n this.chartExtraLegend.onHighlightGroup(group);\n this.chartExtraTooltip.showTooltipOnGroup(group, overrideTooltipLock);\n }\n\n // Notify the consumer that a highlight action was made.\n fireNonCancelableEvent(this.context.handlers.onHighlight, { point, group, isApiCall });\n }\n }\n\n private clearHighlightActions = ({ isApiCall }: { isApiCall: boolean }) => {\n if (!this.isTooltipPinned) {\n // Update Highcharts elements state.\n this.chartExtraHighlight.clearChartItemsHighlight();\n\n // Update tooltip and legend state.\n this.chartExtraTooltip.hideTooltip();\n this.chartExtraLegend.onClearHighlight();\n\n // Notify the consumer that a clear-highlight action was made.\n fireNonCancelableEvent(this.context.handlers.onClearHighlight, { isApiCall });\n }\n };\n\n private get isTooltipPinned() {\n return this.chartExtraTooltip.get().pinned;\n }\n}\n\nfunction isPointsPositionsEqual(current?: Highcharts.Point, next?: Highcharts.Point) {\n return current?.x === next?.x && current?.y === next?.y;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/chart-api/index.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useEffect, useRef } from \"react\";\nimport type Highcharts from \"highcharts\";\n\nimport { fireNonCancelableEvent } from \"../../internal/events\";\nimport { ReadonlyAsyncStore } from \"../../internal/utils/async-store\";\nimport { getChartSeries } from \"../../internal/utils/chart-series\";\nimport { getSeriesData } from \"../../internal/utils/series-data\";\nimport { Writeable } from \"../../internal/utils/utils\";\nimport { CoreChartProps } from \"../interfaces\";\nimport {\n getChartAccessibleDescription,\n getGroupAccessibleDescription,\n getPointAccessibleDescription,\n isXThreshold,\n} from \"../utils\";\nimport { ChartExtraAxisTitles, ReactiveAxisTitlesState } from \"./chart-extra-axis-titles\";\nimport { ChartExtraContext, createChartContext, updateChartContext } from \"./chart-extra-context\";\nimport { ChartExtraHighlight } from \"./chart-extra-highlight\";\nimport { ChartExtraLegend, ReactiveLegendState } from \"./chart-extra-legend\";\nimport { ChartExtraNavigation, ChartExtraNavigationHandlers } from \"./chart-extra-navigation\";\nimport { ChartExtraNodata, ReactiveNodataState } from \"./chart-extra-nodata\";\nimport { ChartExtraPointer, ChartExtraPointerHandlers } from \"./chart-extra-pointer\";\nimport { ChartExtraTooltip, ReactiveTooltipState } from \"./chart-extra-tooltip\";\n\n// The API helper injects Cloudscape custom behaviors, and returns the API instance that comes with\n// reactive state and handlers to be assigned as Highcharts options, used by Cloudscape components\n// (tooltip, legend, and other), or exposed as public core chart API.\nexport function useChartAPI(\n settings: ChartExtraContext.Settings,\n handlers: ChartExtraContext.Handlers,\n state: ChartExtraContext.State,\n) {\n // The API helper instance defines many pieces of internal state with different lifecycles, most\n // of which are not be invalidated when the hook re-renders, or properties change. That is why we\n // create the instance once, when the component is mounted.\n const api = useRef(new ChartAPI(settings, handlers, state)).current;\n // The consumer-defined properties can still change during the component lifecycle. We propagate the\n // changes by updating the helper's context directly. That is fine for most of the properties, as those\n // are only used in event-based callbacks, and require nothing to recompute when there is a change.\n useEffect(() => {\n api.context.settings = settings;\n api.context.handlers = handlers;\n api.context.state = state;\n });\n\n // The only property that does require notifying the helper when it changes, is the visible items state.\n // We stringify the visible items array so that it is compared by value, and the effect is only fired when\n // there is an actual change to the visible items, including items order.\n const visibleItemsIndex = state.visibleItems ? state.visibleItems.join(\"::\") : null;\n useEffect(() => {\n // When visibleItemsIndex === null, it means the visible items state is managed internally inside the helper,\n // so no need to call the API method.\n // The api.updateItemsVisibility() can only be used once the chart is initialized, so we check for api.ready.\n // The initialization happens after the first React render, so the chart is expected to not be ready when the\n // effect is called for the first time. This is fine, as the initial visibility state is handled by the helper.\n // The code below is needed to notify the helper any time the visible items state changes.\n if (api.ready && visibleItemsIndex !== null) {\n api.updateItemsVisibility();\n }\n }, [api, visibleItemsIndex]);\n\n // Run cleanup code when the component unmounts.\n useEffect(() => () => api.onChartDestroy(), [api]);\n\n return api;\n}\n\n// The main chart helper that provides customizations to Highcharts, including tooltip, legend, keyboard navigation, and more.\n// It is split into multiple dedicated (chart-extra) helpers (highlight, tooltip, navigation, and other), most of which define\n// internal state, and have a lifecycle based on Highcharts render event.\n// The helper code has a shared context, which includes the consumer settings, visible items state, and derived state, computed\n// from Highcharts.Chart on each render, and reused for downstream computations for better efficiency.\nexport class ChartAPI {\n public context = createChartContext();\n private chartExtraHighlight = new ChartExtraHighlight(this.context);\n private chartExtraTooltip = new ChartExtraTooltip(this.context);\n private chartExtraNavigation = new ChartExtraNavigation(this.context, this.navigationHandlers);\n private chartExtraPointer = new ChartExtraPointer(this.context, this.pointerHandlers);\n private chartExtraLegend = new ChartExtraLegend(this.context);\n private chartExtraNodata = new ChartExtraNodata(this.context);\n private chartExtraAxisTitles = new ChartExtraAxisTitles(this.context);\n\n constructor(\n settings: ChartExtraContext.Settings,\n handlers: ChartExtraContext.Handlers,\n state: ChartExtraContext.State,\n ) {\n this.context.settings = settings;\n this.context.handlers = handlers;\n this.context.state = state;\n }\n\n // The ready() returns true if the chart is initialized and helper methods are safe to use (after Highcharts triggers onChartRender).\n // Using any of the helper methods before the chart is initialized will result in an exception.\n public get ready() {\n return !!this.context.chartOrNull;\n }\n\n // The Highcharts options to be merged with the rest of the configuration defined in the chart-core.\n public getOptions() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const chartAPI = this;\n const onChartLoad: Highcharts.ChartLoadCallbackFunction = function (this) {\n chartAPI.chartExtraPointer.onChartLoad(this);\n };\n const onChartRender: Highcharts.ChartRenderCallbackFunction = function (this) {\n updateChartContext(chartAPI.context, this);\n chartAPI.chartExtraHighlight.onChartRender();\n chartAPI.chartExtraLegend.onChartRender();\n chartAPI.chartExtraNodata.onChartRender();\n chartAPI.chartExtraAxisTitles.onChartRender();\n chartAPI.chartExtraTooltip.onChartRender();\n chartAPI.handleDestroyedPoints();\n chartAPI.resetColorCounter();\n chartAPI.showMarkersForIsolatedPoints();\n };\n const onChartClick: Highcharts.ChartClickCallbackFunction = function () {\n chartAPI.chartExtraPointer.onChartClick(this.hoverPoint);\n };\n const onSeriesPointMouseOver: Highcharts.PointMouseOverCallbackFunction = function () {\n chartAPI.chartExtraPointer.onSeriesPointMouseOver(this);\n };\n const onSeriesPointMouseOut: Highcharts.PointMouseOutCallbackFunction = function () {\n chartAPI.chartExtraPointer.onSeriesPointMouseOut();\n };\n const onSeriesPointClick: Highcharts.PointClickCallbackFunction = function () {\n chartAPI.chartExtraPointer.onSeriesPointClick(this);\n };\n return {\n onChartLoad,\n onChartRender,\n onChartClick,\n onSeriesPointMouseOver,\n onSeriesPointMouseOut,\n onSeriesPointClick,\n };\n }\n\n // There is no cleanup or destroy event in Highcharts options, so we define a custom one\n // to be used when the React component unmounts.\n public onChartDestroy = () => {\n this.chartExtraNavigation.onChartDestroy();\n this.chartExtraPointer.onChartDestroy();\n this.chartExtraTooltip.onChartDestroy();\n };\n\n // Reactive state stores.\n public get tooltipStore() {\n return this.chartExtraTooltip as ReadonlyAsyncStore<ReactiveTooltipState>;\n }\n public get legendStore() {\n return this.chartExtraLegend as ReadonlyAsyncStore<ReactiveLegendState>;\n }\n public get nodataStore() {\n return this.chartExtraNodata as ReadonlyAsyncStore<ReactiveNodataState>;\n }\n public get axisTitlesStore() {\n return this.chartExtraAxisTitles as ReadonlyAsyncStore<ReactiveAxisTitlesState>;\n }\n\n // References to SVG elements used for tooltip placement.\n public getTargetTrack = this.chartExtraTooltip.getTargetTrack.bind(this.chartExtraTooltip);\n public getGroupTrack = this.chartExtraTooltip.getGroupTrack.bind(this.chartExtraTooltip);\n\n // Legend marker renderer.\n public renderMarker = this.chartExtraLegend.renderMarker.bind(this.chartExtraLegend);\n\n // Callbacks assigned to the tooltip.\n public onMouseEnterTooltip = this.chartExtraPointer.onMouseEnterTooltip.bind(this.chartExtraPointer);\n public onMouseLeaveTooltip = this.chartExtraPointer.onMouseLeaveTooltip.bind(this.chartExtraPointer);\n public onDismissTooltip = (outsideClick?: boolean) => {\n const { pinned, point, group } = this.chartExtraTooltip.get();\n if (pinned) {\n this.chartExtraTooltip.hideTooltip();\n // The chart highlight is preserved while the tooltip is pinned. We need to clear it manually here, for the case\n // when the pointer lands outside the chart after the tooltip is dismissed, so that the mouse-out event won't fire.\n this.clearChartHighlight({ isApiCall: false });\n // If the tooltip was not dismissed by clicking outside, we bring focus to the point or group, that was\n // associated with the tooltip, so that we user can continue keyboard navigation from that spot.\n if (!outsideClick) {\n this.chartExtraNavigation.focusApplication(point, group);\n }\n }\n };\n\n // Hide the tooltip from an action initiated by the tooltip's content\n public hideTooltip = () => {\n this.chartExtraTooltip.hideTooltip();\n // The chart highlight is preserved while the tooltip is pinned. We need to clear it manually here, for the case\n // when the pointer lands outside the chart after the tooltip is dismissed, so that the mouse-out event won't fire.\n this.clearChartHighlight({ isApiCall: false });\n };\n\n // Reference to the role=\"application\" element used for navigation.\n public setApplication = this.chartExtraNavigation.setApplication.bind(this.chartExtraNavigation);\n\n // A callback to notify the helper when items visibility state changes.\n public updateItemsVisibility = this.chartExtraLegend.updateItemsVisibility.bind(this.chartExtraLegend);\n\n // A callback used by the legend and filter components when series/segments visibility changes.\n public onItemVisibilityChange = (items: readonly string[], detail: CoreChartProps.InteractionKind) =>\n this.chartExtraLegend.onItemVisibilityChange(items, detail);\n\n // Callbacks used by the legend component when items highlight state changes.\n public onHighlightChartItems = (itemIds: readonly string[]) => {\n if (!this.isTooltipPinned) {\n this.chartExtraHighlight.highlightChartItems(itemIds);\n this.chartExtraLegend.onHighlightItems(itemIds);\n }\n };\n public onClearChartItemsHighlight = () => {\n if (!this.isTooltipPinned) {\n this.chartExtraHighlight.clearChartItemsHighlight();\n this.chartExtraLegend.onClearHighlight();\n\n // Notify the consumer that a clear-highlight action was made.\n fireNonCancelableEvent(this.context.handlers.onClearHighlight, { isApiCall: false });\n }\n };\n\n // Callbacks used for hover and keyboard navigation, and also exposed to the public API to give the ability\n // to highlight and show tooltip for the given point or group manually.\n public highlightChartItems = (itemIds: readonly string[]) => {\n if (!this.isTooltipPinned) {\n this.chartExtraHighlight.highlightChartItems(itemIds);\n this.chartExtraLegend.onHighlightItems(itemIds);\n }\n };\n public setItemsVisible = (visibleItemsIds: readonly string[]) => {\n this.chartExtraLegend.onItemVisibilityChange(visibleItemsIds, { interactionType: \"api\" });\n };\n public highlightChartPoint = (point: Highcharts.Point, { isApiCall }: { isApiCall: boolean }) => {\n if (!this.isTooltipPinned) {\n this.highlightActions(point, { isApiCall });\n }\n };\n public highlightChartGroup = (group: readonly Highcharts.Point[], { isApiCall }: { isApiCall: boolean }) => {\n if (!this.isTooltipPinned) {\n this.highlightActions(group as Writeable<Highcharts.Point[]>, { isApiCall });\n }\n };\n public clearChartHighlight = ({ isApiCall }: { isApiCall: boolean }) => {\n if (!this.isTooltipPinned) {\n this.clearHighlightActions({ isApiCall });\n }\n };\n public get publicApi() {\n return {\n highlightItems: (itemIds: readonly string[]) => this.highlightChartItems(itemIds),\n setItemsVisible: (visibleItemIds: readonly string[]) => this.setItemsVisible(visibleItemIds),\n highlightChartPoint: (point: Highcharts.Point) => this.highlightChartPoint(point, { isApiCall: true }),\n highlightChartGroup: (group: readonly Highcharts.Point[]) => this.highlightChartGroup(group, { isApiCall: true }),\n clearChartHighlight: () => this.clearChartHighlight({ isApiCall: true }),\n };\n }\n\n // A set of callbacks required for keyboard navigation.\n private get navigationHandlers(): ChartExtraNavigationHandlers {\n return {\n onFocusChart: () => {\n this.clearChartHighlight({ isApiCall: false });\n this.chartExtraNavigation.announceChart(getChartAccessibleDescription(this.context.chart()));\n },\n onDismissHoverTooltip: () => {\n // Dismiss any visible non-pinned tooltip when ESC is pressed.\n // Returns true if a tooltip was dismissed, false otherwise.\n // Used by ESC handlers at group/point level to decide whether to also navigate.\n const tooltipState = this.chartExtraTooltip.get();\n if (tooltipState.visible && !tooltipState.pinned) {\n this.clearChartHighlight({ isApiCall: false });\n return true;\n }\n return false;\n },\n onFocusGroup: (group: Highcharts.Point[]) => {\n this.highlightActions(group, { isApiCall: false, overrideTooltipLock: true });\n this.chartExtraNavigation.announceElement(getGroupAccessibleDescription(group), false);\n },\n onFocusPoint: (point: Highcharts.Point) => {\n const labels = this.context.settings.labels;\n this.highlightActions(point, { isApiCall: false, overrideTooltipLock: true });\n this.chartExtraNavigation.announceElement(getPointAccessibleDescription(point, labels), false);\n },\n onBlur: () => this.clearChartHighlight({ isApiCall: false }),\n onActivateGroup: () => {\n const current = this.chartExtraTooltip.get();\n if (current.group.length > 0) {\n this.chartExtraTooltip.pinTooltip();\n this.chartExtraNavigation.announceElement(getGroupAccessibleDescription(current.group), true);\n }\n },\n onActivatePoint: () => {\n const current = this.chartExtraTooltip.get();\n if (current.point) {\n const labels = this.context.settings.labels;\n this.chartExtraTooltip.pinTooltip();\n this.chartExtraNavigation.announceElement(getPointAccessibleDescription(current.point, labels), true);\n }\n },\n };\n }\n\n // A set of callbacks required for pointer navigation.\n private get pointerHandlers(): ChartExtraPointerHandlers {\n return {\n onPointHover: (point) => {\n this.highlightChartPoint(point, { isApiCall: false });\n },\n onGroupHover: (group) => {\n this.highlightChartGroup(group, { isApiCall: false });\n },\n onHoverLost: () => {\n this.clearChartHighlight({ isApiCall: false });\n },\n onPointClick: (point) => {\n this.pinTooltipOnPoint(point);\n },\n onGroupClick: (group) => {\n this.pinTooltipOnGroup(group);\n },\n };\n }\n\n // Area- or line series can be defined with just a single point, or include missing data (y=null) in such\n // a way, that certain points become isolated. As we prefer the markers to not be shown for area- and line\n // series by default, those points become invisible, unless hovered. To fix this, we use the function below,\n // that finds isolates points and overrides the marker.enabled configuration for those.\n // See: https://github.com/highcharts/highcharts/issues/1210.\n private showMarkersForIsolatedPoints() {\n let shouldRedraw = false;\n for (const s of this.context.chart().series) {\n const seriesData = getSeriesData(s.data);\n for (let i = 0; i < seriesData.length; i++) {\n const isEligibleSeries = !isXThreshold(s) && s.type !== \"scatter\" && !seriesData[i].options.marker?.enabled;\n if (\n isEligibleSeries &&\n (seriesData[i - 1]?.y === undefined || seriesData[i - 1]?.y === null) &&\n (seriesData[i + 1]?.y === undefined || seriesData[i + 1]?.y === null)\n ) {\n seriesData[i].update({ marker: { enabled: true } }, false);\n shouldRedraw = true;\n }\n }\n }\n if (shouldRedraw) {\n this.context.chart().redraw();\n }\n }\n\n // Highcharts sometimes destroys points upon re-rendering. As result, the already stored points can get\n // replaced by `{ destroyed: true }`. This can affect the tooltip state, making the component crash when\n // obtaining data from points, or making it hidden yet pinned, so not visible on hover until a click is made.\n // To prevent these issues, on each render we check for destroyed points in the tooltip state, and proactively\n // hide the tooltip if found. The behavior is only observed during the initial chart loading, and is not expected\n // to cause UX issues with the tooltip being closed unexpectedly.\n // See: https://github.com/highcharts/highcharts/issues/23175.\n private handleDestroyedPoints() {\n const tooltipState = this.chartExtraTooltip.get();\n if (tooltipState.group.some((p) => !p.series)) {\n this.chartExtraTooltip.hideTooltip();\n }\n }\n\n // We reset color counter so that when a series is removed and then added back - it will\n // have the same color as before, not the next one in the color sequence.\n // See: https://github.com/highcharts/highcharts/issues/23077.\n private resetColorCounter() {\n const chart = this.context.chart();\n if (\"colorCounter\" in chart && typeof chart.colorCounter === \"number\") {\n chart.colorCounter = getChartSeries(chart.series).length;\n }\n }\n\n private pinTooltipOnPoint = (point: Highcharts.Point) => {\n const currentPoint = this.chartExtraTooltip.get().point;\n const currentGroup = this.chartExtraTooltip.get().group;\n const positionsMatch = isPointsPositionsEqual(currentPoint ?? currentGroup[0], point);\n\n // If the previously hovered and now clicked positions match, and the the tooltip wasn't\n // dismissed just a moment ago, we make the tooltip pinned in this position.\n if (positionsMatch && !this.chartExtraTooltip.tooltipLock) {\n this.highlightActions(point, { isApiCall: false });\n this.chartExtraTooltip.pinTooltip();\n }\n // If the tooltip was just dismissed, it means this happened by clicking somewhere in the plot area.\n // If the clicked position differs from the one that was pinned - we show tooltip in the new position.\n else if (!positionsMatch && this.chartExtraTooltip.tooltipLock) {\n this.highlightActions(point, { isApiCall: false, overrideTooltipLock: true });\n }\n };\n\n private pinTooltipOnGroup = (group: Highcharts.Point[]) => {\n const currentPoint = this.chartExtraTooltip.get().point;\n const currentGroup = this.chartExtraTooltip.get().group;\n const positionsMatch = isPointsPositionsEqual(currentPoint ?? currentGroup[0], group[0]);\n\n // If the previously hovered and now clicked positions match, and the the tooltip wasn't\n // dismissed just a moment ago, we make the tooltip pinned in this position.\n if (positionsMatch && !this.chartExtraTooltip.tooltipLock) {\n this.highlightActions(group, { isApiCall: false });\n this.chartExtraTooltip.pinTooltip();\n }\n // If the tooltip was just dismissed, it means this happened by clicking somewhere in the plot area.\n // If the clicked position differs from the one that was pinned - we show tooltip in the new position.\n else if (!positionsMatch && this.chartExtraTooltip.tooltipLock) {\n this.highlightActions(group, { isApiCall: false, overrideTooltipLock: true });\n }\n };\n\n private highlightActions(\n target: Highcharts.Point | Highcharts.Point[],\n { isApiCall, overrideTooltipLock }: { isApiCall: boolean; overrideTooltipLock?: boolean },\n ) {\n const point = Array.isArray(target) ? null : target;\n const group = Array.isArray(target) ? target : this.context.derived.getPointsByX(target.x);\n\n if (!this.isTooltipPinned) {\n // Update Highcharts elements state.\n if (point) {\n this.chartExtraHighlight.highlightChartPoint(point);\n } else {\n this.chartExtraHighlight.highlightChartGroup(group);\n }\n\n // Update tooltip and legend state.\n if (point) {\n this.chartExtraLegend.onHighlightPoint(point);\n this.chartExtraTooltip.showTooltipOnPoint(point, group, overrideTooltipLock);\n } else {\n this.chartExtraLegend.onHighlightGroup(group);\n this.chartExtraTooltip.showTooltipOnGroup(group, overrideTooltipLock);\n }\n\n // Notify the consumer that a highlight action was made.\n fireNonCancelableEvent(this.context.handlers.onHighlight, { point, group, isApiCall });\n }\n }\n\n private clearHighlightActions = ({ isApiCall }: { isApiCall: boolean }) => {\n if (!this.isTooltipPinned) {\n // Update Highcharts elements state.\n this.chartExtraHighlight.clearChartItemsHighlight();\n\n // Update tooltip and legend state.\n this.chartExtraTooltip.hideTooltip();\n this.chartExtraLegend.onClearHighlight();\n\n // Notify the consumer that a clear-highlight action was made.\n fireNonCancelableEvent(this.context.handlers.onClearHighlight, { isApiCall });\n }\n };\n\n private get isTooltipPinned() {\n return this.chartExtraTooltip.get().pinned;\n }\n}\n\nfunction isPointsPositionsEqual(current?: Highcharts.Point, next?: Highcharts.Point) {\n return current?.x === next?.x && current?.y === next?.y;\n}\n"]}
|
|
@@ -1,3 +1,11 @@
|
|
|
1
1
|
import type Highcharts from "highcharts";
|
|
2
2
|
import { SVGRendererPool } from "../../utils/renderer-utils";
|
|
3
|
-
|
|
3
|
+
interface RenderMarkerOptions {
|
|
4
|
+
chart: Highcharts.Chart;
|
|
5
|
+
pool: SVGRendererPool;
|
|
6
|
+
point: Highcharts.Point;
|
|
7
|
+
selected: boolean;
|
|
8
|
+
className?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function renderMarker({ chart, pool, point, selected, className }: RenderMarkerOptions): Highcharts.SVGElement | undefined;
|
|
11
|
+
export {};
|
|
@@ -1,35 +1,18 @@
|
|
|
1
1
|
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
import { colorBackgroundContainerContent, colorTextBodyDefault } from "@cloudscape-design/design-tokens";
|
|
4
|
-
export function renderMarker(chart, pool, point, selected, className) {
|
|
4
|
+
export function renderMarker({ chart, pool, point, selected, className }) {
|
|
5
5
|
var _a, _b;
|
|
6
6
|
if (point.plotX === undefined || point.plotY === undefined) {
|
|
7
7
|
return;
|
|
8
8
|
}
|
|
9
9
|
const rr = chart.renderer;
|
|
10
10
|
const inverted = !!chart.inverted;
|
|
11
|
-
const size
|
|
12
|
-
const pointStyle = {
|
|
13
|
-
zIndex: selected ? 6 : 5,
|
|
14
|
-
"stroke-width": 2,
|
|
15
|
-
stroke: selected ? colorTextBodyDefault : point.color,
|
|
16
|
-
fill: selected ? point.color : colorBackgroundContainerContent,
|
|
17
|
-
opacity: 1,
|
|
18
|
-
style: "pointer-events: none",
|
|
19
|
-
class: className,
|
|
20
|
-
};
|
|
21
|
-
const haloStyle = {
|
|
22
|
-
zIndex: 6,
|
|
23
|
-
"stroke-width": 0,
|
|
24
|
-
stroke: point.color,
|
|
25
|
-
fill: point.color,
|
|
26
|
-
opacity: 0.4,
|
|
27
|
-
style: "pointer-events: none",
|
|
28
|
-
};
|
|
11
|
+
const { size, pointStyle, haloStyle } = getPointProps(point, selected, className);
|
|
29
12
|
const x = inverted ? chart.plotLeft + chart.plotWidth - point.plotY : chart.plotLeft + ((_a = point.plotX) !== null && _a !== void 0 ? _a : 0);
|
|
30
13
|
const y = inverted ? chart.plotTop + chart.plotHeight - point.plotX : chart.plotTop + ((_b = point.plotY) !== null && _b !== void 0 ? _b : 0);
|
|
31
14
|
if (selected) {
|
|
32
|
-
pool.circle(rr, { ...haloStyle, x, y
|
|
15
|
+
pool.circle(rr, { ...haloStyle, x, y });
|
|
33
16
|
}
|
|
34
17
|
const type = getSeriesMarkerType(point.series);
|
|
35
18
|
switch (type) {
|
|
@@ -52,6 +35,45 @@ export function renderMarker(chart, pool, point, selected, className) {
|
|
|
52
35
|
return pool.circle(rr, { ...pointStyle, x, y, r: size });
|
|
53
36
|
}
|
|
54
37
|
}
|
|
38
|
+
function getPointProps(point, selected, className) {
|
|
39
|
+
switch (point.series.type) {
|
|
40
|
+
case "bubble":
|
|
41
|
+
return getBubblePointProps(point, selected, className);
|
|
42
|
+
default:
|
|
43
|
+
return getDefaultPointProps(point, selected, className);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function getBubblePointProps(point, selected, className) {
|
|
47
|
+
var _a, _b;
|
|
48
|
+
const { pointStyle, haloStyle } = getDefaultPointProps(point, selected, className);
|
|
49
|
+
const size = Math.max(4, ((_b = (_a = point.graphic) === null || _a === void 0 ? void 0 : _a.getBBox().width) !== null && _b !== void 0 ? _b : 8) / 2 - 2);
|
|
50
|
+
pointStyle.fill = point.color;
|
|
51
|
+
pointStyle.stroke = selected ? colorTextBodyDefault : colorBackgroundContainerContent;
|
|
52
|
+
haloStyle.r = size + 4;
|
|
53
|
+
return { size, pointStyle, haloStyle };
|
|
54
|
+
}
|
|
55
|
+
function getDefaultPointProps(point, selected, className) {
|
|
56
|
+
const size = selected ? 4 : 3;
|
|
57
|
+
const pointStyle = {
|
|
58
|
+
zIndex: selected ? 6 : 5,
|
|
59
|
+
opacity: 1,
|
|
60
|
+
style: "pointer-events: none",
|
|
61
|
+
class: className,
|
|
62
|
+
"stroke-width": 2,
|
|
63
|
+
stroke: selected ? colorTextBodyDefault : point.color,
|
|
64
|
+
fill: selected ? point.color : colorBackgroundContainerContent,
|
|
65
|
+
};
|
|
66
|
+
const haloStyle = {
|
|
67
|
+
zIndex: 6,
|
|
68
|
+
"stroke-width": 4,
|
|
69
|
+
stroke: point.color,
|
|
70
|
+
fill: "transparent",
|
|
71
|
+
opacity: 0.4,
|
|
72
|
+
style: "pointer-events: none",
|
|
73
|
+
r: 8,
|
|
74
|
+
};
|
|
75
|
+
return { size, pointStyle, haloStyle };
|
|
76
|
+
}
|
|
55
77
|
function getSeriesMarkerType(series) {
|
|
56
78
|
const seriesSymbol = "symbol" in series && typeof series.symbol === "string" ? series.symbol : "circle";
|
|
57
79
|
if (series.type === "scatter") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-marker.js","sourceRoot":"","sources":["../../../../../src/internal/components/series-marker/render-marker.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AAItC,OAAO,EAAE,+BAA+B,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"render-marker.js","sourceRoot":"","sources":["../../../../../src/internal/components/series-marker/render-marker.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type Highcharts from \"highcharts\";\n\nimport { colorBackgroundContainerContent, colorTextBodyDefault } from \"@cloudscape-design/design-tokens\";\n\nimport { SVGRendererPool } from \"../../utils/renderer-utils\";\nimport { ChartSeriesMarkerType } from \"./interfaces\";\n\ninterface RenderMarkerOptions {\n chart: Highcharts.Chart;\n pool: SVGRendererPool;\n point: Highcharts.Point;\n selected: boolean;\n className?: string;\n}\n\nexport function renderMarker({ chart, pool, point, selected, className }: RenderMarkerOptions) {\n if (point.plotX === undefined || point.plotY === undefined) {\n return;\n }\n\n const rr = chart.renderer;\n const inverted = !!chart.inverted;\n const { size, pointStyle, haloStyle } = getPointProps(point, selected, className);\n const x = inverted ? chart.plotLeft + chart.plotWidth - point.plotY : chart.plotLeft + (point.plotX ?? 0);\n const y = inverted ? chart.plotTop + chart.plotHeight - point.plotX : chart.plotTop + (point.plotY ?? 0);\n\n if (selected) {\n pool.circle(rr, { ...haloStyle, x, y });\n }\n\n const type = getSeriesMarkerType(point.series);\n switch (type) {\n case \"square\":\n return pool.rect(rr, { ...pointStyle, x: x - size, y: y - size, width: size * 2, height: size * 2 });\n\n case \"diamond\": {\n const path = [\"M\", x, y - size, \"L\", x + size, y, \"L\", x, y + size, \"L\", x - size, y, \"Z\"] as any;\n return pool.path(rr, { ...pointStyle, d: path });\n }\n\n case \"triangle\": {\n const path = [\"M\", x, y - size, \"L\", x + size, y + size, \"L\", x - size, y + size, \"Z\"] as any;\n return pool.path(rr, { ...pointStyle, d: path });\n }\n\n case \"triangle-down\": {\n const path = [\"M\", x, y + size, \"L\", x - size, y - size, \"L\", x + size, y - size, \"Z\"] as any;\n return pool.path(rr, { ...pointStyle, d: path });\n }\n\n case \"circle\":\n default:\n return pool.circle(rr, { ...pointStyle, x, y, r: size });\n }\n}\n\nfunction getPointProps(point: Highcharts.Point, selected: boolean, className?: string) {\n switch (point.series.type) {\n case \"bubble\":\n return getBubblePointProps(point, selected, className);\n default:\n return getDefaultPointProps(point, selected, className);\n }\n}\n\nfunction getBubblePointProps(point: Highcharts.Point, selected: boolean, className?: string) {\n const { pointStyle, haloStyle } = getDefaultPointProps(point, selected, className);\n const size = Math.max(4, (point.graphic?.getBBox().width ?? 8) / 2 - 2);\n pointStyle.fill = point.color;\n pointStyle.stroke = selected ? colorTextBodyDefault : colorBackgroundContainerContent;\n haloStyle.r = size + 4;\n return { size, pointStyle, haloStyle };\n}\n\nfunction getDefaultPointProps(point: Highcharts.Point, selected: boolean, className?: string) {\n const size = selected ? 4 : 3;\n const pointStyle: Highcharts.SVGAttributes = {\n zIndex: selected ? 6 : 5,\n opacity: 1,\n style: \"pointer-events: none\",\n class: className,\n \"stroke-width\": 2,\n stroke: selected ? colorTextBodyDefault : point.color,\n fill: selected ? point.color : colorBackgroundContainerContent,\n };\n const haloStyle: Highcharts.SVGAttributes = {\n zIndex: 6,\n \"stroke-width\": 4,\n stroke: point.color,\n fill: \"transparent\",\n opacity: 0.4,\n style: \"pointer-events: none\",\n r: 8,\n };\n return { size, pointStyle, haloStyle };\n}\n\nfunction getSeriesMarkerType(series: Highcharts.Series): ChartSeriesMarkerType {\n const seriesSymbol = \"symbol\" in series && typeof series.symbol === \"string\" ? series.symbol : \"circle\";\n if (series.type === \"scatter\") {\n switch (seriesSymbol) {\n case \"square\":\n return \"square\";\n case \"diamond\":\n return \"diamond\";\n case \"triangle\":\n return \"triangle\";\n case \"triangle-down\":\n return \"triangle-down\";\n case \"circle\":\n default:\n return \"circle\";\n }\n }\n return \"circle\";\n}\n"]}
|
package/internal/environment.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export var PACKAGE_SOURCE = "chart-components";
|
|
2
|
-
export var PACKAGE_VERSION = "1.0.0 (
|
|
2
|
+
export var PACKAGE_VERSION = "1.0.0 (37e5a954)";
|
|
3
3
|
export var THEME = "open-source-visual-refresh";
|
|
4
4
|
export var ALWAYS_VISUAL_REFRESH = true;
|
|
5
5
|
export var SYSTEM = "core";
|
|
@@ -558,6 +558,7 @@ export const fontChartDetailSize: string;
|
|
|
558
558
|
export const fontDisplayLabelWeight: string;
|
|
559
559
|
export const fontExpandableHeadingSize: string;
|
|
560
560
|
export const fontFamilyBase: string;
|
|
561
|
+
export const fontFamilyHeading: string;
|
|
561
562
|
export const fontFamilyMonospace: string;
|
|
562
563
|
export const fontHeaderH2DescriptionLineHeight: string;
|
|
563
564
|
export const fontHeaderH2DescriptionSize: string;
|
|
@@ -558,6 +558,7 @@ export var fontChartDetailSize = "var(--font-chart-detail-size-9qr25q, 12px)";
|
|
|
558
558
|
export var fontDisplayLabelWeight = "var(--font-display-label-weight-zavpeo, 700)";
|
|
559
559
|
export var fontExpandableHeadingSize = "var(--font-expandable-heading-size-0uk059, 16px)";
|
|
560
560
|
export var fontFamilyBase = "var(--font-family-base-gmnpzl, 'Open Sans', 'Helvetica Neue', Roboto, Arial, sans-serif)";
|
|
561
|
+
export var fontFamilyHeading = "var(--font-family-heading-ugphat, 'Open Sans', 'Helvetica Neue', Roboto, Arial, sans-serif)";
|
|
561
562
|
export var fontFamilyMonospace = "var(--font-family-monospace-q47m7k, Monaco, Menlo, Consolas, 'Courier Prime', Courier, 'Courier New', monospace)";
|
|
562
563
|
export var fontHeaderH2DescriptionLineHeight = "var(--font-header-h2-description-line-height-ts2s6o, 20px)";
|
|
563
564
|
export var fontHeaderH2DescriptionSize = "var(--font-header-h2-description-size-g2wws3, 14px)";
|
|
@@ -2261,6 +2261,7 @@ module.exports.preset = {
|
|
|
2261
2261
|
"fontDisplayLabelWeight": "700",
|
|
2262
2262
|
"fontExpandableHeadingSize": "{fontSizeHeadingS}",
|
|
2263
2263
|
"fontFamilyBase": "'Open Sans', 'Helvetica Neue', Roboto, Arial, sans-serif",
|
|
2264
|
+
"fontFamilyHeading": "{fontFamilyBase}",
|
|
2264
2265
|
"fontFamilyMonospace": "Monaco, Menlo, Consolas, 'Courier Prime', Courier, 'Courier New', monospace",
|
|
2265
2266
|
"fontHeaderH2DescriptionLineHeight": "{lineHeightBodyM}",
|
|
2266
2267
|
"fontHeaderH2DescriptionSize": "{fontSizeBodyM}",
|
|
@@ -11731,6 +11732,7 @@ module.exports.preset = {
|
|
|
11731
11732
|
"colorDropzoneBorderHover",
|
|
11732
11733
|
"colorTreeViewConnectorLine",
|
|
11733
11734
|
"fontFamilyBase",
|
|
11735
|
+
"fontFamilyHeading",
|
|
11734
11736
|
"fontFamilyMonospace",
|
|
11735
11737
|
"fontSizeBodyM",
|
|
11736
11738
|
"fontSizeBodyS",
|
|
@@ -12109,6 +12111,7 @@ module.exports.preset = {
|
|
|
12109
12111
|
"colorDropzoneBorderHover",
|
|
12110
12112
|
"colorTreeViewConnectorLine",
|
|
12111
12113
|
"fontFamilyBase",
|
|
12114
|
+
"fontFamilyHeading",
|
|
12112
12115
|
"fontFamilyMonospace",
|
|
12113
12116
|
"fontSizeBodyM",
|
|
12114
12117
|
"fontSizeBodyS",
|
|
@@ -12758,6 +12761,7 @@ module.exports.preset = {
|
|
|
12758
12761
|
"fontDisplayLabelWeight": "font-display-label-weight",
|
|
12759
12762
|
"fontExpandableHeadingSize": "font-expandable-heading-size",
|
|
12760
12763
|
"fontFamilyBase": "font-family-base",
|
|
12764
|
+
"fontFamilyHeading": "font-family-heading",
|
|
12761
12765
|
"fontFamilyMonospace": "font-family-monospace",
|
|
12762
12766
|
"fontHeaderH2DescriptionLineHeight": "font-header-h2-description-line-height",
|
|
12763
12767
|
"fontHeaderH2DescriptionSize": "font-header-h2-description-size",
|
|
@@ -13577,6 +13581,7 @@ module.exports.preset = {
|
|
|
13577
13581
|
"fontDisplayLabelWeight": "--font-display-label-weight-zavpeo",
|
|
13578
13582
|
"fontExpandableHeadingSize": "--font-expandable-heading-size-0uk059",
|
|
13579
13583
|
"fontFamilyBase": "--font-family-base-gmnpzl",
|
|
13584
|
+
"fontFamilyHeading": "--font-family-heading-ugphat",
|
|
13580
13585
|
"fontFamilyMonospace": "--font-family-monospace-q47m7k",
|
|
13581
13586
|
"fontHeaderH2DescriptionLineHeight": "--font-header-h2-description-line-height-ts2s6o",
|
|
13582
13587
|
"fontHeaderH2DescriptionSize": "--font-header-h2-description-size-g2wws3",
|
|
@@ -230,6 +230,7 @@ export declare interface TypedOverride {
|
|
|
230
230
|
colorDropzoneBorderHover?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
231
231
|
colorTreeViewConnectorLine?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
232
232
|
fontFamilyBase?: GlobalValue;
|
|
233
|
+
fontFamilyHeading?: GlobalValue;
|
|
233
234
|
fontFamilyMonospace?: GlobalValue;
|
|
234
235
|
fontSizeBodyM?: GlobalValue;
|
|
235
236
|
fontSizeBodyS?: GlobalValue;
|
|
@@ -512,6 +513,7 @@ export declare interface TypedOverride {
|
|
|
512
513
|
colorDropzoneBorderHover?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
513
514
|
colorTreeViewConnectorLine?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
514
515
|
fontFamilyBase?: GlobalValue;
|
|
516
|
+
fontFamilyHeading?: GlobalValue;
|
|
515
517
|
fontFamilyMonospace?: GlobalValue;
|
|
516
518
|
fontSizeBodyM?: GlobalValue;
|
|
517
519
|
fontSizeBodyS?: GlobalValue;
|
|
@@ -794,6 +796,7 @@ export declare interface TypedOverride {
|
|
|
794
796
|
colorDropzoneBorderHover?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
795
797
|
colorTreeViewConnectorLine?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
796
798
|
fontFamilyBase?: GlobalValue;
|
|
799
|
+
fontFamilyHeading?: GlobalValue;
|
|
797
800
|
fontFamilyMonospace?: GlobalValue;
|
|
798
801
|
fontSizeBodyM?: GlobalValue;
|
|
799
802
|
fontSizeBodyS?: GlobalValue;
|
|
@@ -1076,6 +1079,7 @@ export declare interface TypedOverride {
|
|
|
1076
1079
|
colorDropzoneBorderHover?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
1077
1080
|
colorTreeViewConnectorLine?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
1078
1081
|
fontFamilyBase?: GlobalValue;
|
|
1082
|
+
fontFamilyHeading?: GlobalValue;
|
|
1079
1083
|
fontFamilyMonospace?: GlobalValue;
|
|
1080
1084
|
fontSizeBodyM?: GlobalValue;
|
|
1081
1085
|
fontSizeBodyS?: GlobalValue;
|
|
@@ -1358,6 +1362,7 @@ export declare interface TypedOverride {
|
|
|
1358
1362
|
colorDropzoneBorderHover?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
1359
1363
|
colorTreeViewConnectorLine?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
1360
1364
|
fontFamilyBase?: GlobalValue;
|
|
1365
|
+
fontFamilyHeading?: GlobalValue;
|
|
1361
1366
|
fontFamilyMonospace?: GlobalValue;
|
|
1362
1367
|
fontSizeBodyM?: GlobalValue;
|
|
1363
1368
|
fontSizeBodyS?: GlobalValue;
|
|
@@ -1640,6 +1645,7 @@ export declare interface TypedOverride {
|
|
|
1640
1645
|
colorDropzoneBorderHover?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
1641
1646
|
colorTreeViewConnectorLine?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
1642
1647
|
fontFamilyBase?: GlobalValue;
|
|
1648
|
+
fontFamilyHeading?: GlobalValue;
|
|
1643
1649
|
fontFamilyMonospace?: GlobalValue;
|
|
1644
1650
|
fontSizeBodyM?: GlobalValue;
|
|
1645
1651
|
fontSizeBodyS?: GlobalValue;
|
|
@@ -1922,6 +1928,7 @@ export declare interface TypedOverride {
|
|
|
1922
1928
|
colorDropzoneBorderHover?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
1923
1929
|
colorTreeViewConnectorLine?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
1924
1930
|
fontFamilyBase?: GlobalValue;
|
|
1931
|
+
fontFamilyHeading?: GlobalValue;
|
|
1925
1932
|
fontFamilyMonospace?: GlobalValue;
|
|
1926
1933
|
fontSizeBodyM?: GlobalValue;
|
|
1927
1934
|
fontSizeBodyS?: GlobalValue;
|
|
@@ -2204,6 +2211,7 @@ export declare interface TypedOverride {
|
|
|
2204
2211
|
colorDropzoneBorderHover?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
2205
2212
|
colorTreeViewConnectorLine?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
2206
2213
|
fontFamilyBase?: GlobalValue;
|
|
2214
|
+
fontFamilyHeading?: GlobalValue;
|
|
2207
2215
|
fontFamilyMonospace?: GlobalValue;
|
|
2208
2216
|
fontSizeBodyM?: GlobalValue;
|
|
2209
2217
|
fontSizeBodyS?: GlobalValue;
|
|
@@ -2486,6 +2494,7 @@ export declare interface TypedOverride {
|
|
|
2486
2494
|
colorDropzoneBorderHover?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
2487
2495
|
colorTreeViewConnectorLine?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
2488
2496
|
fontFamilyBase?: GlobalValue;
|
|
2497
|
+
fontFamilyHeading?: GlobalValue;
|
|
2489
2498
|
fontFamilyMonospace?: GlobalValue;
|
|
2490
2499
|
fontSizeBodyM?: GlobalValue;
|
|
2491
2500
|
fontSizeBodyS?: GlobalValue;
|
|
@@ -230,6 +230,7 @@ export declare interface TypedOverride {
|
|
|
230
230
|
colorDropzoneBorderHover?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
231
231
|
colorTreeViewConnectorLine?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
232
232
|
fontFamilyBase?: GlobalValue;
|
|
233
|
+
fontFamilyHeading?: GlobalValue;
|
|
233
234
|
fontFamilyMonospace?: GlobalValue;
|
|
234
235
|
fontSizeBodyM?: GlobalValue;
|
|
235
236
|
fontSizeBodyS?: GlobalValue;
|
|
@@ -512,6 +513,7 @@ export declare interface TypedOverride {
|
|
|
512
513
|
colorDropzoneBorderHover?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
513
514
|
colorTreeViewConnectorLine?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
514
515
|
fontFamilyBase?: GlobalValue;
|
|
516
|
+
fontFamilyHeading?: GlobalValue;
|
|
515
517
|
fontFamilyMonospace?: GlobalValue;
|
|
516
518
|
fontSizeBodyM?: GlobalValue;
|
|
517
519
|
fontSizeBodyS?: GlobalValue;
|
|
@@ -794,6 +796,7 @@ export declare interface TypedOverride {
|
|
|
794
796
|
colorDropzoneBorderHover?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
795
797
|
colorTreeViewConnectorLine?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
796
798
|
fontFamilyBase?: GlobalValue;
|
|
799
|
+
fontFamilyHeading?: GlobalValue;
|
|
797
800
|
fontFamilyMonospace?: GlobalValue;
|
|
798
801
|
fontSizeBodyM?: GlobalValue;
|
|
799
802
|
fontSizeBodyS?: GlobalValue;
|
|
@@ -1076,6 +1079,7 @@ export declare interface TypedOverride {
|
|
|
1076
1079
|
colorDropzoneBorderHover?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
1077
1080
|
colorTreeViewConnectorLine?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
1078
1081
|
fontFamilyBase?: GlobalValue;
|
|
1082
|
+
fontFamilyHeading?: GlobalValue;
|
|
1079
1083
|
fontFamilyMonospace?: GlobalValue;
|
|
1080
1084
|
fontSizeBodyM?: GlobalValue;
|
|
1081
1085
|
fontSizeBodyS?: GlobalValue;
|
|
@@ -1358,6 +1362,7 @@ export declare interface TypedOverride {
|
|
|
1358
1362
|
colorDropzoneBorderHover?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
1359
1363
|
colorTreeViewConnectorLine?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
1360
1364
|
fontFamilyBase?: GlobalValue;
|
|
1365
|
+
fontFamilyHeading?: GlobalValue;
|
|
1361
1366
|
fontFamilyMonospace?: GlobalValue;
|
|
1362
1367
|
fontSizeBodyM?: GlobalValue;
|
|
1363
1368
|
fontSizeBodyS?: GlobalValue;
|
|
@@ -1640,6 +1645,7 @@ export declare interface TypedOverride {
|
|
|
1640
1645
|
colorDropzoneBorderHover?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
1641
1646
|
colorTreeViewConnectorLine?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
1642
1647
|
fontFamilyBase?: GlobalValue;
|
|
1648
|
+
fontFamilyHeading?: GlobalValue;
|
|
1643
1649
|
fontFamilyMonospace?: GlobalValue;
|
|
1644
1650
|
fontSizeBodyM?: GlobalValue;
|
|
1645
1651
|
fontSizeBodyS?: GlobalValue;
|
|
@@ -1922,6 +1928,7 @@ export declare interface TypedOverride {
|
|
|
1922
1928
|
colorDropzoneBorderHover?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
1923
1929
|
colorTreeViewConnectorLine?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
1924
1930
|
fontFamilyBase?: GlobalValue;
|
|
1931
|
+
fontFamilyHeading?: GlobalValue;
|
|
1925
1932
|
fontFamilyMonospace?: GlobalValue;
|
|
1926
1933
|
fontSizeBodyM?: GlobalValue;
|
|
1927
1934
|
fontSizeBodyS?: GlobalValue;
|
|
@@ -2204,6 +2211,7 @@ export declare interface TypedOverride {
|
|
|
2204
2211
|
colorDropzoneBorderHover?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
2205
2212
|
colorTreeViewConnectorLine?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
2206
2213
|
fontFamilyBase?: GlobalValue;
|
|
2214
|
+
fontFamilyHeading?: GlobalValue;
|
|
2207
2215
|
fontFamilyMonospace?: GlobalValue;
|
|
2208
2216
|
fontSizeBodyM?: GlobalValue;
|
|
2209
2217
|
fontSizeBodyS?: GlobalValue;
|
|
@@ -2486,6 +2494,7 @@ export declare interface TypedOverride {
|
|
|
2486
2494
|
colorDropzoneBorderHover?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
2487
2495
|
colorTreeViewConnectorLine?: GlobalValue | TypedModeValueOverride<'light' | 'dark'>;
|
|
2488
2496
|
fontFamilyBase?: GlobalValue;
|
|
2497
|
+
fontFamilyHeading?: GlobalValue;
|
|
2489
2498
|
fontFamilyMonospace?: GlobalValue;
|
|
2490
2499
|
fontSizeBodyM?: GlobalValue;
|
|
2491
2500
|
fontSizeBodyS?: GlobalValue;
|
|
@@ -2261,6 +2261,7 @@ export var preset = {
|
|
|
2261
2261
|
"fontDisplayLabelWeight": "700",
|
|
2262
2262
|
"fontExpandableHeadingSize": "{fontSizeHeadingS}",
|
|
2263
2263
|
"fontFamilyBase": "'Open Sans', 'Helvetica Neue', Roboto, Arial, sans-serif",
|
|
2264
|
+
"fontFamilyHeading": "{fontFamilyBase}",
|
|
2264
2265
|
"fontFamilyMonospace": "Monaco, Menlo, Consolas, 'Courier Prime', Courier, 'Courier New', monospace",
|
|
2265
2266
|
"fontHeaderH2DescriptionLineHeight": "{lineHeightBodyM}",
|
|
2266
2267
|
"fontHeaderH2DescriptionSize": "{fontSizeBodyM}",
|
|
@@ -11731,6 +11732,7 @@ export var preset = {
|
|
|
11731
11732
|
"colorDropzoneBorderHover",
|
|
11732
11733
|
"colorTreeViewConnectorLine",
|
|
11733
11734
|
"fontFamilyBase",
|
|
11735
|
+
"fontFamilyHeading",
|
|
11734
11736
|
"fontFamilyMonospace",
|
|
11735
11737
|
"fontSizeBodyM",
|
|
11736
11738
|
"fontSizeBodyS",
|
|
@@ -12109,6 +12111,7 @@ export var preset = {
|
|
|
12109
12111
|
"colorDropzoneBorderHover",
|
|
12110
12112
|
"colorTreeViewConnectorLine",
|
|
12111
12113
|
"fontFamilyBase",
|
|
12114
|
+
"fontFamilyHeading",
|
|
12112
12115
|
"fontFamilyMonospace",
|
|
12113
12116
|
"fontSizeBodyM",
|
|
12114
12117
|
"fontSizeBodyS",
|
|
@@ -12758,6 +12761,7 @@ export var preset = {
|
|
|
12758
12761
|
"fontDisplayLabelWeight": "font-display-label-weight",
|
|
12759
12762
|
"fontExpandableHeadingSize": "font-expandable-heading-size",
|
|
12760
12763
|
"fontFamilyBase": "font-family-base",
|
|
12764
|
+
"fontFamilyHeading": "font-family-heading",
|
|
12761
12765
|
"fontFamilyMonospace": "font-family-monospace",
|
|
12762
12766
|
"fontHeaderH2DescriptionLineHeight": "font-header-h2-description-line-height",
|
|
12763
12767
|
"fontHeaderH2DescriptionSize": "font-header-h2-description-size",
|
|
@@ -13577,6 +13581,7 @@ export var preset = {
|
|
|
13577
13581
|
"fontDisplayLabelWeight": "--font-display-label-weight-zavpeo",
|
|
13578
13582
|
"fontExpandableHeadingSize": "--font-expandable-heading-size-0uk059",
|
|
13579
13583
|
"fontFamilyBase": "--font-family-base-gmnpzl",
|
|
13584
|
+
"fontFamilyHeading": "--font-family-heading-ugphat",
|
|
13580
13585
|
"fontFamilyMonospace": "--font-family-monospace-q47m7k",
|
|
13581
13586
|
"fontHeaderH2DescriptionLineHeight": "--font-header-h2-description-line-height-ts2s6o",
|
|
13582
13587
|
"fontHeaderH2DescriptionSize": "--font-header-h2-description-size-g2wws3",
|
package/internal/manifest.json
CHANGED
package/internal/utils/dom.js
CHANGED
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
* @see https://github.com/w3c/csswg-drafts/pull/5677 (for discussion of `if-needed`)
|
|
10
10
|
*/
|
|
11
11
|
export function scrollIntoViewNearestContainer(element, options) {
|
|
12
|
-
var _a;
|
|
13
12
|
// Scroll methods (scrollTo, scrollIntoView, etc) are not supported in test environments like JSDOM.
|
|
14
13
|
if (!("scrollTo" in element)) {
|
|
15
14
|
return;
|
|
@@ -17,7 +16,13 @@ export function scrollIntoViewNearestContainer(element, options) {
|
|
|
17
16
|
// Get element boundaries to measure scroll offsets.
|
|
18
17
|
// In the future, could be replaced with a simple `element.scrollParent`.
|
|
19
18
|
// https://drafts.csswg.org/cssom-view/#dom-htmlelement-scrollparent
|
|
20
|
-
const scrollParent =
|
|
19
|
+
const scrollParent = getScrollParent(element);
|
|
20
|
+
// If there is no scrollable parent, do not scroll. Falling back to document.documentElement
|
|
21
|
+
// would scroll the entire page, which is undesirable (e.g., when a tooltip appears on hover,
|
|
22
|
+
// scrolling the page to center the highlighted item is unexpected).
|
|
23
|
+
if (!scrollParent) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
21
26
|
const { top: elementTop, bottom: elementBottom, height: elementHeight } = element.getBoundingClientRect();
|
|
22
27
|
const { top: scrollTop, bottom: scrollBottom, height: scrollHeight } = scrollParent.getBoundingClientRect();
|
|
23
28
|
if ((options === null || options === void 0 ? void 0 : options.scrollMode) === "if-needed") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom.js","sourceRoot":"","sources":["../../../../src/internal/utils/dom.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AAEtC;;;;;;;GAOG;AACH,MAAM,UAAU,8BAA8B,CAC5C,OAAoB,EACpB,OAAiE
|
|
1
|
+
{"version":3,"file":"dom.js","sourceRoot":"","sources":["../../../../src/internal/utils/dom.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AAEtC;;;;;;;GAOG;AACH,MAAM,UAAU,8BAA8B,CAC5C,OAAoB,EACpB,OAAiE;IAEjE,oGAAoG;IACpG,IAAI,CAAC,CAAC,UAAU,IAAI,OAAO,CAAC,EAAE,CAAC;QAC7B,OAAO;IACT,CAAC;IAED,oDAAoD;IACpD,yEAAyE;IACzE,oEAAoE;IACpE,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAE9C,4FAA4F;IAC5F,6FAA6F;IAC7F,oEAAoE;IACpE,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IACD,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAC1G,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,CAAC,qBAAqB,EAAE,CAAC;IAE5G,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,MAAK,WAAW,EAAE,CAAC;QACxC,gGAAgG;QAChG,uGAAuG;QACvG,MAAM,QAAQ,GAAG,UAAU,GAAG,SAAS,IAAI,aAAa,GAAG,YAAY,CAAC;QACxE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;QACT,CAAC;IACH,CAAC;IAED,MAAM,mBAAmB,GAAG,UAAU,GAAG,YAAY,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5E,MAAM,iBAAiB,GAAG,YAAY,GAAG,CAAC,GAAG,aAAa,GAAG,CAAC,CAAC;IAC/D,YAAY,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,mBAAmB,GAAG,iBAAiB,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AACtF,CAAC;AAED,SAAS,eAAe,CAAC,OAAoB;IAC3C,KACE,IAAI,IAAI,GAAuB,OAAO,CAAC,aAAa,EACpD,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,OAAO,CAAC,aAAa,CAAC,IAAI,EACpD,IAAI,GAAG,IAAI,CAAC,aAAa,EACzB,CAAC;QACD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;QACjD,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACpD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Polyfill for `element.scrollIntoView({ container: \"nearest\", scrollMode: \"...\" })`\n * For ease of implementation, behaves like `{ block: \"center\" }` is provided.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView (for `container`)\n * @see https://caniuse.com/wf-scroll-into-view-container (for `container` browser support)\n * @see https://github.com/w3c/csswg-drafts/pull/5677 (for discussion of `if-needed`)\n */\nexport function scrollIntoViewNearestContainer(\n element: HTMLElement,\n options?: ScrollOptions & { scrollMode?: \"always\" | \"if-needed\" },\n) {\n // Scroll methods (scrollTo, scrollIntoView, etc) are not supported in test environments like JSDOM.\n if (!(\"scrollTo\" in element)) {\n return;\n }\n\n // Get element boundaries to measure scroll offsets.\n // In the future, could be replaced with a simple `element.scrollParent`.\n // https://drafts.csswg.org/cssom-view/#dom-htmlelement-scrollparent\n const scrollParent = getScrollParent(element);\n\n // If there is no scrollable parent, do not scroll. Falling back to document.documentElement\n // would scroll the entire page, which is undesirable (e.g., when a tooltip appears on hover,\n // scrolling the page to center the highlighted item is unexpected).\n if (!scrollParent) {\n return;\n }\n const { top: elementTop, bottom: elementBottom, height: elementHeight } = element.getBoundingClientRect();\n const { top: scrollTop, bottom: scrollBottom, height: scrollHeight } = scrollParent.getBoundingClientRect();\n\n if (options?.scrollMode === \"if-needed\") {\n // Technically, getBoundingClientRect() returns the border-box, which includes the border width.\n // We should subtract the border width to get the padding box, but all that computation isn't worth it.\n const isNeeded = elementTop < scrollTop || elementBottom > scrollBottom;\n if (!isNeeded) {\n return;\n }\n }\n\n const topRelativeToParent = elementTop + scrollParent.scrollTop - scrollTop;\n const blockCenterOffset = scrollHeight / 2 - elementHeight / 2;\n scrollParent.scrollTo({ top: topRelativeToParent - blockCenterOffset, ...options });\n}\n\nfunction getScrollParent(element: HTMLElement): HTMLElement | null {\n for (\n let node: HTMLElement | null = element.parentElement;\n node !== null && node !== element.ownerDocument.body;\n node = node.parentElement\n ) {\n const overflow = getComputedStyle(node).overflow;\n if (overflow !== \"visible\" && overflow !== \"hidden\") {\n return node;\n }\n }\n return null;\n}\n"]}
|