Загрузка данных


]633;E;{   echo "===== DOM EVENT LISTENERS ====="\x3b   grep -RInE "addEventListener|removeEventListener" src\x3b    echo\x3b   echo "===== LIGHTWEIGHT CHARTS SUBSCRIPTIONS ====="\x3b   grep -RInE "subscribeClick|unsubscribeClick|subscribeCrosshairMove|unsubscribeCrosshairMove|subscribeVisibleTimeRangeChange|unsubscribeVisibleTimeRangeChange|subscribeVisibleLogicalRangeChange|unsubscribeVisibleLogicalRangeChange" src\x3b    echo\x3b   echo "===== POINTER / MOUSE EVENTS ====="\x3b   grep -RInE "pointerdown|pointerup|pointermove|pointercancel|mousedown|mouseup|mousemove|dblclick|contextmenu|wheel" src\x3b    echo\x3b   echo "===== EVENT BLOCKING ====="\x3b   grep -RInE "stopPropagation|preventDefault|stopImmediatePropagation" src\x3b    echo\x3b   echo "===== FOCUS ====="\x3b   grep -RInE "focus\\(|blur\\(|activeElement|tabIndex|autoFocus" src\x3b    echo\x3b   echo "===== FOCUS STYLES ====="\x3b   grep -RInE "focus-visible|focus-within|:focus|outline|box-shadow" src\x3b    echo\x3b   echo "===== CHART MOUSE EVENTS ====="\x3b   grep -RInE "ChartMouseEvents|subscribeChartEvent|unsubscribeChartEvent" src\x3b    echo\x3b   echo "===== DIRECT WINDOW / DOCUMENT EVENTS ====="\x3b   grep -RInE "window\\.addEventListener|window\\.removeEventListener|document\\.addEventListener|document\\.removeEventListener" src\x3b    echo\x3b   echo "===== DIRECT CONTAINER EVENTS ====="\x3b   grep -RInE "container\\.addEventListener|container\\.removeEventListener" src\x3b } > event-search.txt;92e918ea-05fa-47ea-8d1e-290a668143e7]633;C===== DOM EVENT LISTENERS =====
src/components/Dropdown/index.tsx:81:    window.addEventListener('resize', updatePosition);
src/components/Dropdown/index.tsx:82:    window.addEventListener('scroll', updatePosition, true);
src/components/Dropdown/index.tsx:87:      window.removeEventListener('resize', updatePosition);
src/components/Dropdown/index.tsx:88:      window.removeEventListener('scroll', updatePosition, true);
src/components/Dropdown/index.tsx:114:    document.addEventListener('pointerdown', handlePointerDown, true);
src/components/Dropdown/index.tsx:115:    document.addEventListener('keydown', handleKeyDown);
src/components/Dropdown/index.tsx:118:      document.removeEventListener('pointerdown', handlePointerDown, true);
src/components/Dropdown/index.tsx:119:      document.removeEventListener('keydown', handleKeyDown);
src/core/ChartMouseEvents.ts:78:    this.container.addEventListener('wheel', this.onWheel, { passive: true });
src/core/ChartMouseEvents.ts:79:    this.container.addEventListener('pointerdown', this.onPointerDown, { passive: true });
src/core/ChartMouseEvents.ts:80:    this.container.addEventListener('pointermove', this.onPointerMove, { passive: true });
src/core/ChartMouseEvents.ts:81:    window.addEventListener('pointerup', this.onPointerUp, { passive: true });
src/core/ChartMouseEvents.ts:82:    window.addEventListener('pointercancel', this.onPointerCancel, { passive: true });
src/core/ChartMouseEvents.ts:86:    this.container.removeEventListener('wheel', this.onWheel);
src/core/ChartMouseEvents.ts:87:    this.container.removeEventListener('pointerdown', this.onPointerDown);
src/core/ChartMouseEvents.ts:88:    this.container.removeEventListener('pointermove', this.onPointerMove);
src/core/ChartMouseEvents.ts:89:    window.removeEventListener('pointerup', this.onPointerUp);
src/core/ChartMouseEvents.ts:90:    window.removeEventListener('pointercancel', this.onPointerCancel);
src/core/Drawings/base/DrawingBase.ts:508:    window.addEventListener('pointermove', this.handlePointerMove);
src/core/Drawings/base/DrawingBase.ts:509:    window.addEventListener('pointerup', this.handlePointerUp);
src/core/Drawings/base/DrawingBase.ts:510:    window.addEventListener('pointercancel', this.handlePointerUp);
src/core/Drawings/base/DrawingBase.ts:520:    window.removeEventListener('pointermove', this.handlePointerMove);
src/core/Drawings/base/DrawingBase.ts:521:    window.removeEventListener('pointerup', this.handlePointerUp);
src/core/Drawings/base/DrawingBase.ts:522:    window.removeEventListener('pointercancel', this.handlePointerUp);
src/core/DrawingsManager.tsx:123:    window.addEventListener('pointerup', this.handlePointerUp);
src/core/DrawingsManager.tsx:124:    window.addEventListener('pointercancel', this.handlePointerUp);
src/core/DrawingsManager.tsx:125:    this.container.addEventListener('click', this.handleClick);
src/core/DrawingsManager.tsx:126:    this.container.addEventListener('pointerdown', this.handlePointerDown);
src/core/DrawingsManager.tsx:127:    this.container.addEventListener('dblclick', this.handleDoubleClick);
src/core/DrawingsManager.tsx:128:    this.container.addEventListener('contextmenu', this.handleContextMenu);
src/core/DrawingsManager.tsx:761:    window.removeEventListener('pointerup', this.handlePointerUp);
src/core/DrawingsManager.tsx:762:    window.removeEventListener('pointercancel', this.handlePointerUp);
src/core/DrawingsManager.tsx:763:    this.container.removeEventListener('click', this.handleClick);
src/core/DrawingsManager.tsx:764:    this.container.removeEventListener('pointerdown', this.handlePointerDown);
src/core/DrawingsManager.tsx:765:    this.container.removeEventListener('dblclick', this.handleDoubleClick);
src/core/DrawingsManager.tsx:766:    this.container.removeEventListener('contextmenu', this.handleContextMenu);
src/core/Fullscreen.ts:27:    document.addEventListener('fullscreenchange', handler);
src/core/Fullscreen.ts:29:    return () => document.removeEventListener('fullscreenchange', handler);
src/core/Hotkeys.ts:44:    document.addEventListener('keydown', this.handleKeyDown);
src/core/Hotkeys.ts:88:    document.removeEventListener('keydown', this.handleKeyDown);
src/core/PriceScale/PriceScaleControls.tsx:56:      this.paneElement.addEventListener('pointermove', this.handlePointerMove);
src/core/PriceScale/PriceScaleControls.tsx:57:      this.paneElement.addEventListener('pointerleave', this.handlePointerLeave);
src/core/PriceScale/PriceScaleControls.tsx:205:      this.paneElement.removeEventListener('pointermove', this.handlePointerMove);
src/core/PriceScale/PriceScaleControls.tsx:206:      this.paneElement.removeEventListener('pointerleave', this.handlePointerLeave);
src/core/TimescaleHoverController.ts:64:    this.chartContainer.addEventListener('mousemove', this.handleMouseMove);
src/core/TimescaleHoverController.ts:65:    this.chartContainer.addEventListener('mouseleave', this.handleMouseLeave);
src/core/TimescaleHoverController.ts:66:    this.controlBarContainer.addEventListener('mouseenter', this.handleControlBarEnter);
src/core/TimescaleHoverController.ts:67:    this.controlBarContainer.addEventListener('mouseleave', this.handleMouseLeave);
src/core/TimescaleHoverController.ts:71:    this.chartContainer.removeEventListener('mousemove', this.handleMouseMove);
src/core/TimescaleHoverController.ts:72:    this.chartContainer.removeEventListener('mouseleave', this.handleMouseLeave);
src/core/TimescaleHoverController.ts:73:    this.controlBarContainer.removeEventListener('mouseenter', this.handleControlBarEnter);
src/core/TimescaleHoverController.ts:74:    this.controlBarContainer.removeEventListener('mouseleave', this.handleMouseLeave);
src/utils/getPortalHost.ts:32:    document.addEventListener('fullscreenchange', syncPortalHostParent);

===== LIGHTWEIGHT CHARTS SUBSCRIPTIONS =====
src/core/ChartMouseEvents.ts:60:    this.lwcChart.subscribeCrosshairMove((param) => {
src/core/ChartMouseEvents.ts:63:    this.lwcChart.timeScale().subscribeVisibleTimeRangeChange((range) => {
src/core/ChartMouseEvents.ts:66:    this.lwcChart.timeScale().subscribeVisibleLogicalRangeChange((logicalRange) => {
src/core/Drawings/ruler/ruler.ts:313:    this.chart.subscribeClick(this.clickHandler);
src/core/Drawings/ruler/ruler.ts:314:    this.chart.subscribeCrosshairMove(this.moveHandler);
src/core/Drawings/ruler/ruler.ts:325:    this.chart.unsubscribeClick(this.clickHandler);
src/core/Drawings/ruler/ruler.ts:326:    this.chart.unsubscribeCrosshairMove(this.moveHandler);
src/core/Drawings/sliderPosition/sliderPosition.ts:496:    this.chart.subscribeClick(this.clickHandler);
src/core/Drawings/sliderPosition/sliderPosition.ts:504:    this.chart.unsubscribeClick(this.clickHandler);
src/core/Drawings/volumeProfile/volumeProfile.ts:176:      this.chart.timeScale().subscribeVisibleLogicalRangeChange(this.handleVisibleLogicalRangeChange);
src/core/Drawings/volumeProfile/volumeProfile.ts:189:      this.chart.timeScale().unsubscribeVisibleLogicalRangeChange(this.handleVisibleLogicalRangeChange);
src/core/Drawings/__tests__/drawings/volumeProfile.test.ts:388:    expect(timeScale.subscribeVisibleLogicalRangeChange).toHaveBeenCalledTimes(1);
src/core/Drawings/__tests__/drawings/volumeProfile.test.ts:392:    expect(timeScale.unsubscribeVisibleLogicalRangeChange).toHaveBeenCalledTimes(1);
src/core/Drawings/__tests__/drawingTestUtils.ts:78:    subscribeVisibleLogicalRangeChange: jest.fn(),
src/core/Drawings/__tests__/drawingTestUtils.ts:79:    unsubscribeVisibleLogicalRangeChange: jest.fn(),
src/core/Drawings/__tests__/drawingTestUtils.ts:91:    subscribeClick: jest.fn(),
src/core/Drawings/__tests__/drawingTestUtils.ts:92:    unsubscribeClick: jest.fn(),
src/core/Drawings/__tests__/drawingTestUtils.ts:93:    subscribeCrosshairMove: jest.fn(),
src/core/Drawings/__tests__/drawingTestUtils.ts:94:    unsubscribeCrosshairMove: jest.fn(),
src/core/PaneManager.ts:247:    this.lwcChart.subscribeClick(handler);
src/core/PaneManager.ts:248:    this.subscriptions.add(() => this.lwcChart.unsubscribeClick(handler));
src/core/__tests__/PaneManager.test.ts:75:        subscribeClick: jest.fn(),
src/core/__tests__/PaneManager.test.ts:76:        unsubscribeClick: jest.fn(),

===== POINTER / MOUSE EVENTS =====
src/components/Dropdown/index.tsx:114:    document.addEventListener('pointerdown', handlePointerDown, true);
src/components/Dropdown/index.tsx:118:      document.removeEventListener('pointerdown', handlePointerDown, true);
src/core/Chart.ts:170:    this.mouseEvents.subscribe('wheel', this.onWheel);
src/core/ChartMouseEvents.ts:13:  wheel: WheelEvent;
src/core/ChartMouseEvents.ts:71:  private onWheel = (e: WheelEvent) => this.emitChartEvent('wheel', e);
src/core/ChartMouseEvents.ts:78:    this.container.addEventListener('wheel', this.onWheel, { passive: true });
src/core/ChartMouseEvents.ts:79:    this.container.addEventListener('pointerdown', this.onPointerDown, { passive: true });
src/core/ChartMouseEvents.ts:80:    this.container.addEventListener('pointermove', this.onPointerMove, { passive: true });
src/core/ChartMouseEvents.ts:81:    window.addEventListener('pointerup', this.onPointerUp, { passive: true });
src/core/ChartMouseEvents.ts:82:    window.addEventListener('pointercancel', this.onPointerCancel, { passive: true });
src/core/ChartMouseEvents.ts:86:    this.container.removeEventListener('wheel', this.onWheel);
src/core/ChartMouseEvents.ts:87:    this.container.removeEventListener('pointerdown', this.onPointerDown);
src/core/ChartMouseEvents.ts:88:    this.container.removeEventListener('pointermove', this.onPointerMove);
src/core/ChartMouseEvents.ts:89:    window.removeEventListener('pointerup', this.onPointerUp);
src/core/ChartMouseEvents.ts:90:    window.removeEventListener('pointercancel', this.onPointerCancel);
src/core/Drawings/base/DrawingBase.ts:508:    window.addEventListener('pointermove', this.handlePointerMove);
src/core/Drawings/base/DrawingBase.ts:509:    window.addEventListener('pointerup', this.handlePointerUp);
src/core/Drawings/base/DrawingBase.ts:510:    window.addEventListener('pointercancel', this.handlePointerUp);
src/core/Drawings/base/DrawingBase.ts:520:    window.removeEventListener('pointermove', this.handlePointerMove);
src/core/Drawings/base/DrawingBase.ts:521:    window.removeEventListener('pointerup', this.handlePointerUp);
src/core/Drawings/base/DrawingBase.ts:522:    window.removeEventListener('pointercancel', this.handlePointerUp);
src/core/DrawingsManager.tsx:123:    window.addEventListener('pointerup', this.handlePointerUp);
src/core/DrawingsManager.tsx:124:    window.addEventListener('pointercancel', this.handlePointerUp);
src/core/DrawingsManager.tsx:126:    this.container.addEventListener('pointerdown', this.handlePointerDown);
src/core/DrawingsManager.tsx:127:    this.container.addEventListener('dblclick', this.handleDoubleClick);
src/core/DrawingsManager.tsx:128:    this.container.addEventListener('contextmenu', this.handleContextMenu);
src/core/DrawingsManager.tsx:761:    window.removeEventListener('pointerup', this.handlePointerUp);
src/core/DrawingsManager.tsx:762:    window.removeEventListener('pointercancel', this.handlePointerUp);
src/core/DrawingsManager.tsx:764:    this.container.removeEventListener('pointerdown', this.handlePointerDown);
src/core/DrawingsManager.tsx:765:    this.container.removeEventListener('dblclick', this.handleDoubleClick);
src/core/DrawingsManager.tsx:766:    this.container.removeEventListener('contextmenu', this.handleContextMenu);
src/core/PriceScale/PriceScaleControls.tsx:56:      this.paneElement.addEventListener('pointermove', this.handlePointerMove);
src/core/PriceScale/PriceScaleControls.tsx:205:      this.paneElement.removeEventListener('pointermove', this.handlePointerMove);
src/core/TimescaleHoverController.ts:64:    this.chartContainer.addEventListener('mousemove', this.handleMouseMove);
src/core/TimescaleHoverController.ts:71:    this.chartContainer.removeEventListener('mousemove', this.handleMouseMove);
src/core/__tests__/TimescaleHoverController.test.ts:38:      new MouseEvent('mousemove', {
src/core/__tests__/TimescaleHoverController.test.ts:57:      new MouseEvent('mousemove', {

===== EVENT BLOCKING =====
src/components/FloatingToolbar/index.tsx:128:    event.preventDefault();
src/components/FloatingToolbar/index.tsx:151:    event.preventDefault();
src/components/FloatingToolbar/index.tsx:176:  const stopPropagation = (event: SyntheticEvent): void => {
src/components/FloatingToolbar/index.tsx:177:    event.stopPropagation();
src/components/FloatingToolbar/index.tsx:207:      onPointerDown={stopPropagation}
src/components/FloatingToolbar/index.tsx:208:      onClick={stopPropagation}
src/components/FloatingToolbar/index.tsx:209:      onDoubleClick={stopPropagation}
src/components/FloatingToolbar/index.tsx:210:      onContextMenu={stopPropagation}
src/components/PriceScaleControls/index.tsx:25:  const stopPropagation = (event: SyntheticEvent) => {
src/components/PriceScaleControls/index.tsx:26:    event.stopPropagation();
src/components/PriceScaleControls/index.tsx:32:      onPointerDown={stopPropagation}
src/components/PriceScaleControls/index.tsx:33:      onMouseDown={stopPropagation}
src/components/PriceScaleControls/index.tsx:34:      onClick={stopPropagation}
src/core/Drawings/base/AreaDrawingBase.ts:101:    event.preventDefault();
src/core/Drawings/base/DrawingBase.ts:588:    event.preventDefault();
src/core/Drawings/base/DrawingBase.ts:589:    event.stopPropagation();
src/core/Drawings/regressionTrend/regressionTrend.ts:392:    event.preventDefault();
src/core/Drawings/sliderPosition/sliderPosition.ts:555:    event.preventDefault();
src/core/Drawings/text/text.ts:297:    event.preventDefault();
src/core/Drawings/traectory/traectory.ts:308:      event.preventDefault();
src/core/Drawings/traectory/traectory.ts:316:      event.preventDefault();
src/core/Drawings/volumeProfile/volumeProfile.ts:565:    event.preventDefault();
src/core/Drawings/volumeProfile/volumeProfile.ts:582:    event.preventDefault();
src/core/Drawings/__tests__/drawings/base/areaDrawingBase.test.ts:225:      expect(event.preventDefault).toHaveBeenCalledTimes(1);
src/core/Drawings/__tests__/drawings/base/areaDrawingBase.test.ts:227:      expect(event.stopPropagation).toHaveBeenCalledTimes(1);
src/core/Drawings/__tests__/drawings/base/areaDrawingBase.test.ts:293:      expect(event.preventDefault).toHaveBeenCalledTimes(1);
src/core/Drawings/__tests__/drawings/base/areaDrawingBase.test.ts:295:      expect(event.stopPropagation).toHaveBeenCalledTimes(1);
src/core/Drawings/__tests__/drawings/base/areaDrawingBase.test.ts:315:      expect(event.preventDefault).toHaveBeenCalledTimes(1);
src/core/Drawings/__tests__/drawings/base/drawingBase.test.ts:510:      expect(event.preventDefault).toHaveBeenCalledTimes(1);
src/core/Drawings/__tests__/drawings/base/drawingBase.test.ts:512:      expect(event.stopPropagation).toHaveBeenCalledTimes(1);
src/core/Drawings/__tests__/drawings/base/drawingBase.test.ts:524:      expect(event.preventDefault).toHaveBeenCalledTimes(1);
src/core/Drawings/__tests__/drawings/base/drawingBase.test.ts:526:      expect(event.stopPropagation).toHaveBeenCalledTimes(1);
src/core/Drawings/__tests__/drawings/base/drawingBase.test.ts:549:      expect(event.preventDefault).toHaveBeenCalledTimes(1);
src/core/Drawings/__tests__/drawings/base/drawingBase.test.ts:551:      expect(event.stopPropagation).toHaveBeenCalledTimes(1);
src/core/Drawings/__tests__/drawingTestUtils.ts:136:    preventDefault: jest.fn(),
src/core/Drawings/__tests__/drawingTestUtils.ts:137:    stopPropagation: jest.fn(),
src/core/Drawings/__tests__/drawingTestUtils.ts:147:    preventDefault: jest.fn(),
src/core/Drawings/__tests__/drawingTestUtils.ts:148:    stopPropagation: jest.fn(),
src/core/Hotkeys.ts:104:    event.preventDefault();

===== FOCUS =====

===== FOCUS STYLES =====
src/components/FormFields/index.module.scss:29:    &:focus-within {
src/components/FormFields/index.module.scss:36:      &:focus-within {
src/components/SettingsModal/index.module.scss:33:  &:focus-within {
src/components/SettingsModal/index.module.scss:40:    &:focus-within {
src/components/SplitDropdown/index.module.scss:11:  &:focus-within .menu_button,
src/core/PriceAxisLabels/PriceAxisLabels.ts:557:      style: this.isHistoryMode ? 'outlined' : 'filled',
src/core/PriceAxisLabels/PriceAxisLabelsPrimitive.ts:47:  if (label.style === 'outlined') {
src/core/PriceAxisLabels/PriceAxisLabelsPrimitive.ts:139:      context.fillStyle = label.style === 'outlined' ? colors.chartBackground : label.color;
src/core/PriceAxisLabels/PriceAxisLabelsPrimitive.ts:142:      if (label.style !== 'outlined') {
src/core/PriceAxisLabels/types.ts:3:export type PriceAxisLabelStyle = 'filled' | 'outlined';
src/styles/global.scss:77:.moex-chart-root button:focus-visible {
src/styles/global.scss:78:  outline: var(--borderWidth-md) solid currentColor;
src/styles/global.scss:79:  outline-offset: var(--space-0125);
src/styles/_preflight.scss:74:  outline-offset: -2px;

===== CHART MOUSE EVENTS =====
src/core/Chart.ts:20:import { ChartMouseEvents } from '@core/ChartMouseEvents';
src/core/Chart.ts:116:  private mouseEvents: ChartMouseEvents;
src/core/Chart.ts:165:    this.mouseEvents = new ChartMouseEvents({
src/core/Chart.ts:187:      subscribeChartEvent: this.subscribeChartEvent,
src/core/Chart.ts:307:  public subscribeChartEvent: ChartMouseEvents['subscribe'] = (event, callback) =>
src/core/Chart.ts:310:  public unsubscribeChartEvent: ChartMouseEvents['unsubscribe'] = (event, callback) => {
src/core/ChartMouseEvents.ts:3:export interface ChartMouseEventsParams {
src/core/ChartMouseEvents.ts:20:export class ChartMouseEvents {
src/core/ChartMouseEvents.ts:25:  constructor({ lwcChart, container }: ChartMouseEventsParams) {
src/core/Legend.ts:5:import { ChartMouseEvents } from '@core/ChartMouseEvents';
src/core/Legend.ts:17:  subscribeChartEvent: ChartMouseEvents['subscribe'];
src/core/Legend.ts:102:    subscribeChartEvent,
src/core/Legend.ts:141:    this.subscriptions.add(subscribeChartEvent('crosshairMove', this.handleCrosshairMove));
src/core/Pane.tsx:6:import { ChartMouseEvents } from '@core/ChartMouseEvents';
src/core/Pane.tsx:45:  subscribeChartEvent: ChartMouseEvents['subscribe'];
src/core/Pane.tsx:92:  private readonly subscribeChartEvent: ChartMouseEvents['subscribe'];
src/core/Pane.tsx:107:    subscribeChartEvent,
src/core/Pane.tsx:129:    this.subscribeChartEvent = subscribeChartEvent;
src/core/Pane.tsx:433:      subscribeChartEvent: this.subscribeChartEvent,
src/core/__tests__/Legend.test.ts:74:    const subscribeChartEvent = jest.fn((event, handler) => {
src/core/__tests__/Legend.test.ts:80:    }) as unknown as LegendParams['subscribeChartEvent'];
src/core/__tests__/Legend.test.ts:86:      subscribeChartEvent,
src/core/__tests__/Pane.test.ts:148:      subscribeChartEvent: jest.fn() as never,
src/core/__tests__/PaneManager.test.ts:85:      subscribeChartEvent: jest.fn(),

===== DIRECT WINDOW / DOCUMENT EVENTS =====
src/components/Dropdown/index.tsx:81:    window.addEventListener('resize', updatePosition);
src/components/Dropdown/index.tsx:82:    window.addEventListener('scroll', updatePosition, true);
src/components/Dropdown/index.tsx:87:      window.removeEventListener('resize', updatePosition);
src/components/Dropdown/index.tsx:88:      window.removeEventListener('scroll', updatePosition, true);
src/components/Dropdown/index.tsx:114:    document.addEventListener('pointerdown', handlePointerDown, true);
src/components/Dropdown/index.tsx:115:    document.addEventListener('keydown', handleKeyDown);
src/components/Dropdown/index.tsx:118:      document.removeEventListener('pointerdown', handlePointerDown, true);
src/components/Dropdown/index.tsx:119:      document.removeEventListener('keydown', handleKeyDown);
src/core/ChartMouseEvents.ts:81:    window.addEventListener('pointerup', this.onPointerUp, { passive: true });
src/core/ChartMouseEvents.ts:82:    window.addEventListener('pointercancel', this.onPointerCancel, { passive: true });
src/core/ChartMouseEvents.ts:89:    window.removeEventListener('pointerup', this.onPointerUp);
src/core/ChartMouseEvents.ts:90:    window.removeEventListener('pointercancel', this.onPointerCancel);
src/core/Drawings/base/DrawingBase.ts:508:    window.addEventListener('pointermove', this.handlePointerMove);
src/core/Drawings/base/DrawingBase.ts:509:    window.addEventListener('pointerup', this.handlePointerUp);
src/core/Drawings/base/DrawingBase.ts:510:    window.addEventListener('pointercancel', this.handlePointerUp);
src/core/Drawings/base/DrawingBase.ts:520:    window.removeEventListener('pointermove', this.handlePointerMove);
src/core/Drawings/base/DrawingBase.ts:521:    window.removeEventListener('pointerup', this.handlePointerUp);
src/core/Drawings/base/DrawingBase.ts:522:    window.removeEventListener('pointercancel', this.handlePointerUp);
src/core/DrawingsManager.tsx:123:    window.addEventListener('pointerup', this.handlePointerUp);
src/core/DrawingsManager.tsx:124:    window.addEventListener('pointercancel', this.handlePointerUp);
src/core/DrawingsManager.tsx:761:    window.removeEventListener('pointerup', this.handlePointerUp);
src/core/DrawingsManager.tsx:762:    window.removeEventListener('pointercancel', this.handlePointerUp);
src/core/Fullscreen.ts:27:    document.addEventListener('fullscreenchange', handler);
src/core/Fullscreen.ts:29:    return () => document.removeEventListener('fullscreenchange', handler);
src/core/Hotkeys.ts:44:    document.addEventListener('keydown', this.handleKeyDown);
src/core/Hotkeys.ts:88:    document.removeEventListener('keydown', this.handleKeyDown);
src/utils/getPortalHost.ts:32:    document.addEventListener('fullscreenchange', syncPortalHostParent);

===== DIRECT CONTAINER EVENTS =====
src/core/ChartMouseEvents.ts:78:    this.container.addEventListener('wheel', this.onWheel, { passive: true });
src/core/ChartMouseEvents.ts:79:    this.container.addEventListener('pointerdown', this.onPointerDown, { passive: true });
src/core/ChartMouseEvents.ts:80:    this.container.addEventListener('pointermove', this.onPointerMove, { passive: true });
src/core/ChartMouseEvents.ts:86:    this.container.removeEventListener('wheel', this.onWheel);
src/core/ChartMouseEvents.ts:87:    this.container.removeEventListener('pointerdown', this.onPointerDown);
src/core/ChartMouseEvents.ts:88:    this.container.removeEventListener('pointermove', this.onPointerMove);
src/core/DrawingsManager.tsx:125:    this.container.addEventListener('click', this.handleClick);
src/core/DrawingsManager.tsx:126:    this.container.addEventListener('pointerdown', this.handlePointerDown);
src/core/DrawingsManager.tsx:127:    this.container.addEventListener('dblclick', this.handleDoubleClick);
src/core/DrawingsManager.tsx:128:    this.container.addEventListener('contextmenu', this.handleContextMenu);
src/core/DrawingsManager.tsx:763:    this.container.removeEventListener('click', this.handleClick);
src/core/DrawingsManager.tsx:764:    this.container.removeEventListener('pointerdown', this.handlePointerDown);
src/core/DrawingsManager.tsx:765:    this.container.removeEventListener('dblclick', this.handleDoubleClick);
src/core/DrawingsManager.tsx:766:    this.container.removeEventListener('contextmenu', this.handleContextMenu);