Skip to content

Discrete Fourier Transform Support#403

Open
MatthewKhouzam wants to merge 2 commits into
eclipse-cdt-cloud:masterfrom
MatthewKhouzam:dft
Open

Discrete Fourier Transform Support#403
MatthewKhouzam wants to merge 2 commits into
eclipse-cdt-cloud:masterfrom
MatthewKhouzam:dft

Conversation

@MatthewKhouzam

@MatthewKhouzam MatthewKhouzam commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

What it does

Add discrete fourier transforms to the XY plots
image

How to test

Open an XY Plot and click on the corner button

Follow-ups

Review checklist

  • As an author, I have thoroughly tested my changes and carefully followed the instructions in this template

Summary by CodeRabbit

  • New Features

    • Added a frequency/period view to XY charts, including linear/log period scaling and clearer handling when there isn’t enough data.
    • Improved chart interaction with a richer cursor layer and updated tooltip behavior.
  • Tests

    • Added coverage for frequency and period calculations.
  • Documentation

    • Refreshed README and contributor docs for clearer setup, publishing, and issue templates.
  • Chores

    • Updated project formatting across workflows, configs, and app templates.

@coderabbitai

coderabbitai Bot commented Jul 7, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Adds a frequency/period spectrum mode to the XY output component backed by new FFT/periodogram utilities and tests, plus supporting CSS. Makes small changes to Gantt rich-cursor rendering and tooltip pointer events. Pins a Yarn dependency resolution. Reformats numerous config, workflow, docs, CSS, HTML, and script files without functional changes.

Changes

Frequency Spectrum Visualization

Layer / File(s) Summary
FFT and periodogram utilities
local-libs/traceviewer-libs/react-components/src/components/utils/frequency-utils.ts, .../utils/__tests__/frequency-utils.test.ts
Adds PeriodPower, nextPow2, fft, computePeriodogram, and formatPeriod, with tests covering all four functions and edge cases.
XY component frequency mode and rendering
local-libs/traceviewer-libs/react-components/src/components/xy-output-component.tsx, .../style/output-components-style.css
Adds frequencyMode/xAxisLogScale state, toggle UI, buildFrequencyData()/renderFrequencyChart() using Chart.js, renderYAxis() override, and new toggle CSS.

Gantt Rich Cursor and Tooltip Pointer Behavior

Layer / File(s) Summary
Gantt chart rich cursor and pinned entries typing
local-libs/traceviewer-libs/react-components/src/components/abstract-gantt-output-component.tsx
Adds TimeGraphChartRichCursor to chart layers and tightens getEntriesWithPinned() typing via a type-guard filter.
Tooltip pointerEvents change
local-libs/traceviewer-libs/react-components/src/components/tooltip-component.tsx
Changes tooltip container pointerEvents from 'auto' to 'none'.

Dependency Resolution

Layer / File(s) Summary
pixi.js-legacy resolution
package.json
Adds a Yarn resolutions entry pinning pixi.js-legacy to ^7.3.2.

Repo-wide Formatting and Config Cleanup

Layer / File(s) Summary
Docs and issue templates
.github/ISSUE_TEMPLATE/*, CODE_OF_CONDUCT.md, CONTRIBUTING.md, README.md, SECURITY.md, doc/*, local-libs/...
Whitespace, heading, and list formatting normalized across documentation and templates at root and local-libs paths.
CI/CD and license workflows
.github/workflows/*, local-libs/traceviewer-libs/.github/workflows/ci-cd.yml
YAML indentation/array formatting normalized; triggers, jobs, and steps unchanged.
Editor and build configs
.vscode/*, configs/*, */tsconfig.json, */.eslintrc.js, jest.config.json, playwright.config.ts
Multi-line arrays collapsed to single-line, quote style normalized, values unchanged.
CSS stylesheets
local-libs/traceviewer-libs/react-components/style/*
Selector/property formatting normalized (spacing, quoting, semicolons) with no effective style changes.
HTML, manifest, and webpack configs
public/index.html, public/manifest.json, */webpack.config.js, vscode-trace-webviews/*
Tag casing, quoting, and indentation normalized; behavior unchanged.
typescript-references.js
scripts/typescript-references.js
Rewritten with semicolons/consistent formatting, same logic.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant XYOutputComponent
  participant buildFrequencyData
  participant computePeriodogram
  participant ChartJS

  User->>XYOutputComponent: click frequency toggle
  XYOutputComponent->>XYOutputComponent: setState frequencyMode=true
  XYOutputComponent->>buildFrequencyData: request datasets for displayed series
  buildFrequencyData->>computePeriodogram: compute period/power per series
  computePeriodogram-->>buildFrequencyData: PeriodPower[]
  buildFrequencyData-->>XYOutputComponent: cached frequency datasets
  XYOutputComponent->>ChartJS: render Line chart with datasets
Loading

Related issues: None referenced in the provided changes.

Related PRs: None referenced in the provided changes.

Suggested labels: documentation, dependencies, enhancement

Suggested reviewers: None determinable from the provided changes.

🐰 a hop through configs, crisp and neat,
a spectrum chart now taps its beat,
the cursor gains a richer glow,
pointer events now let tooltips go,
pixi pinned, the build complete.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title matches the main change: adding discrete Fourier transform-based frequency/period support to XY plots.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 9

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/ci-cd.yml:
- Around line 27-30: The workflow still uses actions/setup-java@v3, which needs
to be upgraded. Update the setup-java step in the CI/CD workflow to v4 or newer
while keeping the existing distribution setting for temurin and the Java 17
version. Use the actions/setup-java reference in the workflow so the runner uses
a supported Node version.

In @.github/workflows/license-check-workflow.yml:
- Around line 39-43: The workflow step in the Java setup job still uses
actions/setup-java@v3 with the deprecated adopt distribution. Update the
setup-java action in the matrix Java step to v4 and change the distribution
value to a supported option such as temurin (or semeru if OpenJ9 is intended).
Keep the rest of the job logic unchanged and make sure the step named Use Java
${{ matrix.java }} continues to use matrix.java for the version.

In `@CONTRIBUTING.md`:
- Around line 62-65: The sign-off bullet in CONTRIBUTING.md has a broken rewrap
that leaves a stray greater-than character and splits the sentence. Fix the
markdown under the sign-off section by removing the extra character, keeping the
full bullet text on a clean wrap, and preserving the surrounding link bullets
for commit-message-message and commit-message-example.

In `@doc/DEVELOPER-GUIDE.md`:
- Around line 1314-1317: The `analysisStarted` message payload is inconsistent
with the downstream handler, which expects an object containing `analysisId`
rather than a bare value. Update the `postMessage` call in the sample so the
`analysisStarted` data matches the shape used by the receiving code
(`data.analysisId`), and keep the same object structure wherever this message is
sent.

In
`@local-libs/traceviewer-libs/react-components/src/components/tooltip-component.tsx`:
- Line 95: The tooltip style is preventing its own hover handlers from firing,
so the mouse-over state in tooltip-component is never reached. In the tooltip
component’s hover logic, either remove or clearly document the now-unused
this.isMouseOver/updateState hover guard if pass-through is intended, or change
the pointerEvents setting so onMouseEnter/onMouseLeave can still run and keep
the tooltip interaction working.

In
`@local-libs/traceviewer-libs/react-components/style/dialog-component-style.css`:
- Around line 17-28: The .dialog-header style in dialog-component-style.css has
a dead padding declaration because the earlier padding: 5px is overwritten by
the later shorthand. Remove the redundant declaration, or if the 5px vertical
spacing is intended, merge it into the remaining padding rule so .dialog-header
has a single effective padding value.

In `@local-libs/traceviewer-libs/react-components/style/react-contextify.css`:
- Around line 114-240: The animation keyframes in react-contextify.css use names
that violate the lint rule, so rename the react-contexify__scaleIn/scaleOut,
react-contexify__fadeIn/fadeOut, react-contexify__flipInX/flipOutX, and
react-contexify__slideIn/slideOut keyframes to compliant names and update every
matching animation reference in the .react-contexify__will-enter--* and
.react-contexify__will-leave--* դասes accordingly.

In `@README.md`:
- Around line 293-297: The README wording around the Trace Viewer and remote-ssh
support should use “VSCode-compatible” as a hyphenated modifier for consistency
and readability. Update the sentence in the remote support section so the phrase
currently describing “VSCode compatible applications” is hyphenated, keeping the
rest of the guidance unchanged. Locate and adjust the text in the remote support
paragraph that mentions remote-ssh, open-remote-ssh, and the OpenVSX registry.

In `@vscode-trace-extension/README.md`:
- Around line 39-41: The command example in the README has a stray trailing
quote, making the copied shell command invalid. Update the example under the
tracecompass-server launch instructions to remove the dangling quote so the
command for starting tracecompass-server is copy-pasteable as written.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: b3a60313-18c7-40a9-baed-c3d28f5d0880

📥 Commits

Reviewing files that changed from the base of the PR and between 2e36049 and 1c170f4.

⛔ Files ignored due to path filters (1)
  • yarn.lock is excluded by !**/yarn.lock, !**/*.lock
📒 Files selected for processing (61)
  • .github/ISSUE_TEMPLATE/bug_report.md
  • .github/ISSUE_TEMPLATE/feature_request.md
  • .github/ISSUE_TEMPLATE/question.md
  • .github/workflows/ci-cd.yml
  • .github/workflows/license-check-workflow.yml
  • .github/workflows/release.yml
  • .vscode/launch.json
  • .vscode/settings.json
  • CODE_OF_CONDUCT.md
  • CONTRIBUTING.md
  • README.md
  • SECURITY.md
  • configs/base.eslintrc.json
  • configs/build.eslintrc.json
  • configs/common-tsconfig.json
  • configs/errors.eslintrc.json
  • configs/warnings.eslintrc.json
  • doc/DEVELOPER-GUIDE.md
  • doc/Develop-new-view-type.md
  • doc/Publishing.md
  • local-libs/README.md
  • local-libs/traceviewer-libs/.github/ISSUE_TEMPLATE/bug_report.md
  • local-libs/traceviewer-libs/.github/ISSUE_TEMPLATE/feature_request.md
  • local-libs/traceviewer-libs/.github/ISSUE_TEMPLATE/question.md
  • local-libs/traceviewer-libs/.github/workflows/ci-cd.yml
  • local-libs/traceviewer-libs/CODE_OF_CONDUCT.md
  • local-libs/traceviewer-libs/CONTRIBUTING.md
  • local-libs/traceviewer-libs/README.md
  • local-libs/traceviewer-libs/SECURITY.md
  • local-libs/traceviewer-libs/base/.eslintrc.js
  • local-libs/traceviewer-libs/base/tsconfig.json
  • local-libs/traceviewer-libs/react-components/.eslintrc.js
  • local-libs/traceviewer-libs/react-components/jest.config.json
  • local-libs/traceviewer-libs/react-components/src/components/abstract-gantt-output-component.tsx
  • local-libs/traceviewer-libs/react-components/src/components/tooltip-component.tsx
  • local-libs/traceviewer-libs/react-components/src/components/utils/__tests__/frequency-utils.test.ts
  • local-libs/traceviewer-libs/react-components/src/components/utils/frequency-utils.ts
  • local-libs/traceviewer-libs/react-components/src/components/xy-output-component.tsx
  • local-libs/traceviewer-libs/react-components/style/dialog-component-style.css
  • local-libs/traceviewer-libs/react-components/style/output-components-style.css
  • local-libs/traceviewer-libs/react-components/style/react-contextify.css
  • local-libs/traceviewer-libs/react-components/style/status-bar.css
  • local-libs/traceviewer-libs/react-components/style/trace-context-style.css
  • local-libs/traceviewer-libs/react-components/style/trace-explorer.css
  • local-libs/traceviewer-libs/react-components/tsconfig.json
  • package.json
  • playwright.config.ts
  • public/index.html
  • public/manifest.json
  • scripts/typescript-references.js
  • vscode-trace-common/.eslintrc.js
  • vscode-trace-common/tsconfig.json
  • vscode-trace-extension/.eslintrc.js
  • vscode-trace-extension/README.md
  • vscode-trace-extension/tsconfig.json
  • vscode-trace-extension/webpack.config.js
  • vscode-trace-webviews/.eslintrc.js
  • vscode-trace-webviews/public/index.html
  • vscode-trace-webviews/public/manifest.json
  • vscode-trace-webviews/tsconfig.json
  • vscode-trace-webviews/webpack.config.js
💤 Files with no reviewable changes (2)
  • local-libs/traceviewer-libs/react-components/style/trace-context-style.css
  • local-libs/traceviewer-libs/react-components/style/status-bar.css

Comment thread .github/workflows/ci-cd.yml Outdated
Comment on lines +27 to +30
- uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Inspect the workflow section around the referenced lines.
sed -n '20,40p' .github/workflows/ci-cd.yml

Repository: eclipse-cdt-cloud/vscode-trace-extension

Length of output: 2003


🌐 Web query:

actions/setup-java v4 distribution accepted values temurin v3 deprecation GitHub Actions

💡 Result:

In GitHub Actions, actions/setup-java v4 and newer versions fully support 'temurin' as a valid distribution value [1][2]. You can specify it in your workflow configuration as follows: - uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '21' Regarding v3, while the action itself may technically function, the use of actions/setup-java@v3 is generally considered deprecated in favor of v4 or newer (with v5+ now available) [3][4]. This is primarily because older major versions of setup-java rely on deprecated dependencies, such as older versions of actions/cache (e.g., actions/cache@v2), which are no longer recommended for use [4]. It is highly recommended to migrate to the latest major version (currently v5+) to ensure compatibility, security, and access to the latest runners and features [3][4].

Citations:


🌐 Web query:

actions/setup-java v3 node16 GitHub Actions support deprecated runtime official

💡 Result:

The actions/setup-java v3 release was intentionally updated to use Node.js 16 as its runtime [1][2], representing a transition from the earlier Node.js 12 runtime [1][2]. However, Node.js 16 itself has long been deprecated within the GitHub Actions ecosystem [3][4]. GitHub initiated the transition of all actions from Node 16 to Node 20 starting in late 2023 [4]. Node 16 officially reached its end-of-life on GitHub Actions runners on November 12, 2024 [5]. Consequently, using actions/setup-java v3 (or any action reliant on Node 16) is obsolete and unsupported. To resolve deprecation warnings or potential workflow failures, you must update your workflows to use the latest major version of the action, which operates on a supported Node.js runtime [5][3]. As of July 2026, you should be using a version of actions/setup-java that supports current requirements (e.g., v4 or later, which moved to Node 20) [6]. Note that GitHub is also actively managing the deprecation of Node 20, which began in September 2025 [7].

Citations:


Upgrade actions/setup-java to v4 or newer. actions/setup-java@v3 relies on Node 16, which is no longer supported on GitHub Actions runners. distribution: 'temurin' is still valid.

🧰 Tools
🪛 actionlint (1.7.12)

[error] 27-27: the runner of "actions/setup-java@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ci-cd.yml around lines 27 - 30, The workflow still uses
actions/setup-java@v3, which needs to be upgraded. Update the setup-java step in
the CI/CD workflow to v4 or newer while keeping the existing distribution
setting for temurin and the Java 17 version. Use the actions/setup-java
reference in the workflow so the runner uses a supported Node version.

Source: Linters/SAST tools

Comment on lines +39 to +43
- name: Use Java ${{ matrix.java }}
uses: actions/setup-java@v3
with:
distribution: 'adopt'
java-version: ${{ matrix.java }}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== workflow excerpt =="
sed -n '1,120p' .github/workflows/license-check-workflow.yml

echo
echo "== setup-java occurrences =="
rg -n "setup-java|distribution:" .github/workflows -S

Repository: eclipse-cdt-cloud/vscode-trace-extension

Length of output: 2003


🌐 Web query:

actions/setup-java v4 distribution adopt accepted deprecated GitHub Actions

💡 Result:

The adopt distribution in actions/setup-java is deprecated and should no longer be used [1][2][3]. The AdoptOpenJDK project, which provided the adopt distribution, has been superseded by the Eclipse Adoptium project, and its builds are no longer updated [1][4][5]. It is highly recommended to migrate your GitHub Actions workflows from adopt to temurin (for HotSpot) or semeru (for OpenJ9) to ensure you continue to receive critical software and security updates [1][6]. To update your workflow, change the distribution input in your setup-java step: - Change distribution: 'adopt' or 'adopt-hotspot' to distribution: 'temurin' [1][4][3]. - Change distribution: 'adopt-openj9' to distribution: 'semeru' [1][6]. The adopt distribution is deprecated because it relies on the original AdoptOpenJDK project, which is no longer maintained [1][4]. Using the legacy distribution puts your builds at risk of security vulnerabilities and potential failures if the legacy infrastructure remains unstable [5].

Citations:


Migrate actions/setup-java to v4 and replace adopt. distribution: 'adopt' is deprecated in actions/setup-java; switch to temurin (or semeru for OpenJ9) instead.

Suggested fix
-              uses: actions/setup-java@v3
+              uses: actions/setup-java@v4
...
-                  distribution: 'adopt'
+                  distribution: 'temurin'
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- name: Use Java ${{ matrix.java }}
uses: actions/setup-java@v3
with:
distribution: 'adopt'
java-version: ${{ matrix.java }}
- name: Use Java ${{ matrix.java }}
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: ${{ matrix.java }}
🧰 Tools
🪛 actionlint (1.7.12)

[error] 40-40: the runner of "actions/setup-java@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/license-check-workflow.yml around lines 39 - 43, The
workflow step in the Java setup job still uses actions/setup-java@v3 with the
deprecated adopt distribution. Update the setup-java action in the matrix Java
step to v4 and change the distribution value to a supported option such as
temurin (or semeru if OpenJ9 is intended). Keep the rest of the job logic
unchanged and make sure the step named Use Java ${{ matrix.java }} continues to
use matrix.java for the version.

Source: Linters/SAST tools

Comment thread CONTRIBUTING.md Outdated
Comment on lines +62 to +65
- [_Sign-off:_][sign-off] Use your full name and a long-term email address. This certifies that you
have written the code and that, from a licensing perspective, the >
- [How to format the message][commit-message-message]
- [Example commit message][commit-message-example]

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Fix the broken sign-off rewrap.

The reflow leaves a stray > in the rendered Markdown and breaks the sign-off sentence. Please remove the extra character and keep the bullet text intact.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@CONTRIBUTING.md` around lines 62 - 65, The sign-off bullet in CONTRIBUTING.md
has a broken rewrap that leaves a stray greater-than character and splits the
sentence. Fix the markdown under the sign-off section by removing the extra
character, keeping the full bullet text on a clean wrap, and preserving the
surrounding link bullets for commit-message-message and commit-message-example.

Comment thread doc/DEVELOPER-GUIDE.md Outdated
Comment on lines +1314 to +1317
this.panel.webview.postMessage({ method: 'analysisStarted', data: analysisId });
return;
}
this.panel.webview.postMessage({ method: "errorMsg", message: 'Failed to start analysis' });
this.panel.webview.postMessage({ method: 'errorMsg', message: 'Failed to start analysis' });

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Keep the analysisStarted payload shape consistent.

This posts a bare analysisId, but the handler below treats the payload as an object (data.analysisId). As written, the sample will render undefined unless both sides agree on the same shape.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@doc/DEVELOPER-GUIDE.md` around lines 1314 - 1317, The `analysisStarted`
message payload is inconsistent with the downstream handler, which expects an
object containing `analysisId` rather than a bare value. Update the
`postMessage` call in the sample so the `analysisStarted` data matches the shape
used by the receiving code (`data.analysisId`), and keep the same object
structure wherever this message is sent.

const tooltipStyle: React.CSSProperties = {
position: 'fixed',
pointerEvents: 'auto',
pointerEvents: 'none',

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Map the component structure first
ast-grep outline local-libs/traceviewer-libs/react-components/src/components/tooltip-component.tsx --view expanded || true

# Read the relevant section with line numbers
sed -n '1,260p' local-libs/traceviewer-libs/react-components/src/components/tooltip-component.tsx | cat -n

# Find references to isMouseOver and tooltip mouse handlers in this component and repo
rg -n "isMouseOver|handleTooltipMouseEnter|handleTooltipMouseLeave|pointerEvents: 'none'" local-libs/traceviewer-libs/react-components/src/components -S

# Look for tests around tooltip behavior
fd -a "tooltip*" local-libs/traceviewer-libs/react-components || true

Repository: eclipse-cdt-cloud/vscode-trace-extension

Length of output: 2003


🌐 Web query:

CSS pointer-events none mouseenter mouseleave element does not receive pointer events descendant React synthetic onMouseEnter onMouseLeave

💡 Result:

When an element has the CSS property pointer-events: none, it is removed from the hit-testing process, meaning it can no longer be the target of pointer events [1][2]. Consequently, it will not trigger mouseenter or mouseleave events, nor will its React synthetic equivalents (onMouseEnter and onMouseLeave) fire [2][3][4]. Key Technical Details: - Pointer events pass through: When pointer-events: none is applied, mouse events (such as click, mouseover, and mousemove) essentially "pass through" the element to the content underneath it [3][5]. - Event firing: Because the element is ignored by the browser's pointer hit-testing, the browser does not track the mouse entering or leaving that element's physical space [2]. - React behavior: React's synthetic onMouseEnter and onMouseLeave events rely on the underlying native browser events [6][7]. Since the browser does not dispatch these events to the element, React does not receive or trigger the corresponding synthetic handlers [2][3][4]. - Descendant elements: If an element with pointer-events: none contains descendants, those descendants will also typically not receive pointer events unless they explicitly override the property with pointer-events: auto [1]. If you need an element to be visually present but still receive mouse events, you must avoid pointer-events: none. Common workarounds include: - Removing pointer-events: none and adjusting z-index or absolute positioning to ensure the element does not block other interactive content [3]. - Using pointer-events: auto on specific sub-elements if you only need to disable pointer events for the container but not its children [1]. - Using onPointerEnter and onPointerLeave, though these are also subject to the same pointer-events hit-testing limitations [8].

Citations:


🌐 Web query:

React onMouseEnter pointer-events none element hover handlers real browsers

💡 Result:

When you set an element to pointer-events: none in CSS, it ceases to be the target of any mouse events [1][2]. Consequently, any React event handlers attached to that element, such as onMouseEnter or onMouseMove, will not fire because the browser essentially ignores the element for pointer interaction purposes [3][4][1]. Key technical points regarding this behavior: 1. Interaction "Fall-through": Setting pointer-events: none instructs the browser to let mouse events "fall through" the element to whatever is underneath it in the DOM hierarchy [2]. 2. Event Handlers: Because the element is no longer a valid target for pointer interactions, event listeners attached to it via React (which uses event delegation) will not receive the events [1]. 3. Browser Consistency: This is standard browser behavior, not a React-specific issue [5][1]. All modern browsers consistently apply this rule; the element will not trigger mouse-related callbacks [6][2]. 4. Potential Workarounds: - If you need the element to remain visual but still capture events, you must remove the pointer-events: none property [3][4]. - If you need a "transparent" element to allow clicks to pass through to elements underneath but still want to trigger interactions, consider using a different CSS approach (such as controlling the element's visibility) or, if necessary, calculate pointer positions manually via a parent element using getBoundingClientRect to check if the mouse is within the intended bounds [7]. In summary, if you attach an onMouseEnter handler to an element with pointer-events: none, the handler will not execute because the element is explicitly excluded from the browser's pointer event processing [1].

Citations:


pointerEvents: 'none' disables the tooltip hover handlers

onMouseEnter/onMouseLeave on this tooltip won’t fire anymore, so this.isMouseOver stays false and the hover guard in updateState is effectively dead. If the pass-through behavior is intentional, remove or document the now-unreachable hover state logic; otherwise this regresses tooltip interaction.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@local-libs/traceviewer-libs/react-components/src/components/tooltip-component.tsx`
at line 95, The tooltip style is preventing its own hover handlers from firing,
so the mouse-over state in tooltip-component is never reached. In the tooltip
component’s hover logic, either remove or clearly document the now-unused
this.isMouseOver/updateState hover guard if pass-through is intended, or change
the pointerEvents setting so onMouseEnter/onMouseLeave can still run and keep
the tooltip interaction working.

Comment thread local-libs/traceviewer-libs/react-components/style/dialog-component-style.css Outdated
Comment on lines +114 to +240
@keyframes react-contexify__scaleIn {
from {
opacity: 0;
transform: scale3d(0.3, 0.3, 0.3);
opacity: 0;
transform: scale3d(0.3, 0.3, 0.3);
}
to {
opacity: 1;
opacity: 1;
}
}
@keyframes react-contexify__scaleOut {
}
@keyframes react-contexify__scaleOut {
from {
opacity: 1;
opacity: 1;
}
to {
opacity: 0;
transform: scale3d(0.3, 0.3, 0.3);
opacity: 0;
transform: scale3d(0.3, 0.3, 0.3);
}
}
.react-contexify__will-enter--scale {
}
.react-contexify__will-enter--scale {
transform-origin: top left;
animation: react-contexify__scaleIn 0.3s;
}
.react-contexify__will-leave--scale {
}

.react-contexify__will-leave--scale {
transform-origin: top left;
animation: react-contexify__scaleOut 0.3s;
}
@keyframes react-contexify__fadeIn {
}

@keyframes react-contexify__fadeIn {
from {
opacity: 0;
transform: translateY(10px);
opacity: 0;
transform: translateY(10px);
}
to {
opacity: 1;
transform: translateY(0);
opacity: 1;
transform: translateY(0);
}
}
@keyframes react-contexify__fadeOut {
}
@keyframes react-contexify__fadeOut {
from {
opacity: 1;
transform: translateY(0);
opacity: 1;
transform: translateY(0);
}
to {
opacity: 0;
transform: translateY(10px);
opacity: 0;
transform: translateY(10px);
}
}
.react-contexify__will-enter--fade {
}
.react-contexify__will-enter--fade {
animation: react-contexify__fadeIn 0.3s ease;
}
.react-contexify__will-leave--fade {
}

.react-contexify__will-leave--fade {
animation: react-contexify__fadeOut 0.3s ease;
}
@keyframes react-contexify__flipInX {
}

@keyframes react-contexify__flipInX {
from {
transform: perspective(800px) rotate3d(1, 0, 0, 45deg);
transform: perspective(800px) rotate3d(1, 0, 0, 45deg);
}
to {
transform: perspective(800px);
transform: perspective(800px);
}
}
@keyframes react-contexify__flipOutX {
}
@keyframes react-contexify__flipOutX {
from {
transform: perspective(800px);
transform: perspective(800px);
}
to {
transform: perspective(800px) rotate3d(1, 0, 0, 45deg);
opacity: 0;
transform: perspective(800px) rotate3d(1, 0, 0, 45deg);
opacity: 0;
}
}
.react-contexify__will-enter--flip {
}
.react-contexify__will-enter--flip {
-webkit-backface-visibility: visible !important;
backface-visibility: visible !important;
backface-visibility: visible !important;
transform-origin: top center;
animation: react-contexify__flipInX 0.3s;
}
.react-contexify__will-leave--flip {
}

.react-contexify__will-leave--flip {
transform-origin: top center;
animation: react-contexify__flipOutX 0.3s;
-webkit-backface-visibility: visible !important;
backface-visibility: visible !important;
}
@keyframes swing-in-top-fwd {
backface-visibility: visible !important;
}

@keyframes swing-in-top-fwd {
0% {
transform: rotateX(-100deg);
transform-origin: top;
opacity: 0;
transform: rotateX(-100deg);
transform-origin: top;
opacity: 0;
}
100% {
transform: rotateX(0deg);
transform-origin: top;
opacity: 1;
transform: rotateX(0deg);
transform-origin: top;
opacity: 1;
}
}
@keyframes react-contexify__slideIn {
}
@keyframes react-contexify__slideIn {
from {
opacity: 0;
transform: scale3d(1, 0.3, 1);
opacity: 0;
transform: scale3d(1, 0.3, 1);
}
to {
opacity: 1;
opacity: 1;
}
}
@keyframes react-contexify__slideOut {
}
@keyframes react-contexify__slideOut {
from {
opacity: 1;
opacity: 1;
}
to {
opacity: 0;
transform: scale3d(1, 0.3, 1);
opacity: 0;
transform: scale3d(1, 0.3, 1);
}
}
.react-contexify__will-enter--slide {
}
.react-contexify__will-enter--slide {
transform-origin: top center;
animation: react-contexify__slideIn 0.3s;
}
.react-contexify__will-leave--slide {
}

.react-contexify__will-leave--slide {
transform-origin: top center;
animation: react-contexify__slideOut 0.3s;
}
/*# sourceMappingURL=ReactContexify.css.map */
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Rename these keyframes to match the lint rule.

Stylelint flags the react-contexify__*In/Out animation names here. Renaming the keyframes and every animation: reference will keep this stylesheet lint-clean.

♻️ Example fix
-@keyframes react-contexify__scaleIn {
+@keyframes react-contexify__scale-in {
     from {
         opacity: 0;
         transform: scale3d(0.3, 0.3, 0.3);
     }
@@
 .react-contexify__will-enter--scale {
     transform-origin: top left;
-    animation: react-contexify__scaleIn 0.3s;
+    animation: react-contexify__scale-in 0.3s;
 }

Apply the same rename pattern to the fade, flip, and slide variants.

🧰 Tools
🪛 Stylelint (17.14.0)

[error] 114-114: Expected keyframe name "react-contexify__scaleIn" to be kebab-case (keyframes-name-pattern)

(keyframes-name-pattern)


[error] 123-123: Expected keyframe name "react-contexify__scaleOut" to be kebab-case (keyframes-name-pattern)

(keyframes-name-pattern)


[error] 142-142: Expected keyframe name "react-contexify__fadeIn" to be kebab-case (keyframes-name-pattern)

(keyframes-name-pattern)


[error] 152-152: Expected keyframe name "react-contexify__fadeOut" to be kebab-case (keyframes-name-pattern)

(keyframes-name-pattern)


[error] 170-170: Expected keyframe name "react-contexify__flipInX" to be kebab-case (keyframes-name-pattern)

(keyframes-name-pattern)


[error] 178-178: Expected keyframe name "react-contexify__flipOutX" to be kebab-case (keyframes-name-pattern)

(keyframes-name-pattern)


[error] 213-213: Expected keyframe name "react-contexify__slideIn" to be kebab-case (keyframes-name-pattern)

(keyframes-name-pattern)


[error] 222-222: Expected keyframe name "react-contexify__slideOut" to be kebab-case (keyframes-name-pattern)

(keyframes-name-pattern)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@local-libs/traceviewer-libs/react-components/style/react-contextify.css`
around lines 114 - 240, The animation keyframes in react-contextify.css use
names that violate the lint rule, so rename the
react-contexify__scaleIn/scaleOut, react-contexify__fadeIn/fadeOut,
react-contexify__flipInX/flipOutX, and react-contexify__slideIn/slideOut
keyframes to compliant names and update every matching animation reference in
the .react-contexify__will-enter--* and .react-contexify__will-leave--* դասes
accordingly.

Source: Linters/SAST tools

Comment thread README.md Outdated
Comment on lines +293 to +297
The `Trace Viewer for VSCode` extension is compatible with the use of [remote-ssh](https://code.visualstudio.com/docs/remote/ssh). If you are using `remote-ssh`, you can simply install `Trace Viewer for VSCode` extension on your remote machine and begin using the extension. For VSCode compatible applications you can install the [open-remote-ssh][open-remote-ssh] extension from the [public OpenVSX registry][open-vsx] to get similar functionality.

The remote support works by forwarding the Trace Server's operating port from the client machine to the remote machine. The port is automatically forwarded on Trace Server startup.

Forwarded ports can be seen in the 'Ports' view of the remote VsCode. To open the `Ports` view use menu `View -> Open view... -> Ports`. You should see the forwarded Trace Server port in the `Ports` view, as shown below:
Forwarded ports can be seen in the 'Ports' view of the remote VsCode. To open the `Ports` view use menu `View -> Open view... -> Ports`. You should see the forwarded Trace Server port in the `Ports` view, as shown below:

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Hyphenate “VSCode-compatible” here.

The new wording reads more naturally with the hyphen, and keeps the docs consistent with standard grammar.

🧰 Tools
🪛 LanguageTool

[grammar] ~293-~293: Use a hyphen to join words.
Context: ...nd begin using the extension. For VSCode compatible applications you can install ...

(QB_NEW_EN_HYPHEN)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@README.md` around lines 293 - 297, The README wording around the Trace Viewer
and remote-ssh support should use “VSCode-compatible” as a hyphenated modifier
for consistency and readability. Update the sentence in the remote support
section so the phrase currently describing “VSCode compatible applications” is
hyphenated, keeping the rest of the guidance unchanged. Locate and adjust the
text in the remote support paragraph that mentions remote-ssh, open-remote-ssh,
and the OpenVSX registry.

Source: Linters/SAST tools

Comment on lines 39 to 41
and start it. e.g.:

> ./trace-compass-server-latest-linux.gtk.x86_64/tracecompass-server"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Drop the stray quote in the command example.

The tracecompass-server command ends with a dangling " here, which makes the copy-pasted shell command invalid.

Fix
-> ./trace-compass-server-latest-linux.gtk.x86_64/tracecompass-server"
+> ./trace-compass-server-latest-linux.gtk.x86_64/tracecompass-server
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
and start it. e.g.:
> ./trace-compass-server-latest-linux.gtk.x86_64/tracecompass-server"
and start it. e.g.:
> ./trace-compass-server-latest-linux.gtk.x86_64/tracecompass-server
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@vscode-trace-extension/README.md` around lines 39 - 41, The command example
in the README has a stray trailing quote, making the copied shell command
invalid. Update the example under the tracecompass-server launch instructions to
remove the dangling quote so the command for starting tracecompass-server is
copy-pasteable as written.

@MatthewKhouzam

MatthewKhouzam commented Jul 7, 2026

Copy link
Copy Markdown
Contributor Author

@JonatanAntoni this is a mess, but I will fix it. I think you'll like the feature though.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

revert

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

revert the change

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

revert the change

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

revert the change

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

revert the change

Comment thread public/index.html

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

revert the change

Comment thread public/manifest.json

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

revert the change

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

revert the change

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

revert the change

Comment thread playwright.config.ts

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

revert the change

@MatthewKhouzam MatthewKhouzam force-pushed the dft branch 2 times, most recently from d162a9c to a49005c Compare July 7, 2026 20:33
Adds a frequency/period spectrum view to the XY output, toggled from a
corner button. Each spectral component is drawn as a vertical bar (stem)
on a real linear/logarithmic period axis, with a lin/log scale toggle.

- frequency-utils.ts: radix-2 FFT + periodogram + period formatting
- xy-output-component.tsx: frequency mode, bar rendering, axis toggles
- output-components-style.css: toggle button styles

Signed-off-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
Signed-off-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant