Skip to content

frontend: kraken: prevent container-not-up icon from overlapping update button#3883

Open
nicoschmdt wants to merge 1 commit intobluerobotics:masterfrom
nicoschmdt:fix-ext-overlap
Open

frontend: kraken: prevent container-not-up icon from overlapping update button#3883
nicoschmdt wants to merge 1 commit intobluerobotics:masterfrom
nicoschmdt:fix-ext-overlap

Conversation

@nicoschmdt
Copy link
Copy Markdown
Contributor

@nicoschmdt nicoschmdt commented Apr 17, 2026

looks like this now:
image

Summary by Sourcery

Indicate the container-not-running state on the installed extension card using a badge over the extension logo instead of an overlapping standalone icon.

Enhancements:

  • Replace the absolute-positioned container-not-up icon with a warning badge over the extension logo to avoid overlapping other controls.
  • Introduce a computed flag for the container-not-up state to centralize the visibility condition.
  • Adjust badge styling to keep the warning icon compact and visually consistent with the card layout.

@sourcery-ai
Copy link
Copy Markdown

sourcery-ai Bot commented Apr 17, 2026

Reviewer's Guide

Refactors the "container not running" status indicator on the InstalledExtensionCard to be a Vuetify badge overlaid on the extension logo instead of an absolutely positioned icon, encapsulating the visibility logic in a computed property and updating styles accordingly.

Class diagram for InstalledExtensionCard container_not_up refactor

classDiagram
  class InstalledExtensionCard {
    <<VueComponent>>
    +extension
    +extensionData
    +container
    +loading
    +buttonBgColor() string
    +container_not_up() boolean
    +update_available() false|string
  }

  class ContainerNotUpBadge {
    <<UIElement>>
    +v-badge
    +v-avatar
    +v-img
    +v-tooltip
    +overlap
    +offset_x
    +offset_y
    +color
    +icon
    +class container-not-up-badge
  }

  InstalledExtensionCard --> ContainerNotUpBadge : uses
Loading

File-Level Changes

Change Details Files
Replace the absolute-positioned container-not-up icon with a Vuetify badge wrapping the extension logo to avoid overlap with other UI elements.
  • Remove the standalone v-icon that was absolutely positioned in the card header to indicate the container is not running.
  • Wrap the extension logo avatar in a v-badge that shows the dead-robot icon when the container-not-up condition is true.
  • Attach a tooltip to the badge, reusing the existing explanatory message about the container not running.
  • Ensure the extension logo still renders inside a v-avatar nested within the badge.
core/frontend/src/components/kraken/cards/InstalledExtensionCard.vue
Centralize container-not-up condition in a computed property for reuse in the template.
  • Introduce a container_not_up computed property that checks extension.enabled, !container, and !loading.
  • Update the template to use the new computed property as the v-badge :value and tooltip condition.
core/frontend/src/components/kraken/cards/InstalledExtensionCard.vue
Adjust styles to target the new badge-based indicator instead of the removed absolute-positioned icon.
  • Remove the .container-not-up-alert class that positioned the icon absolutely in the card.
  • Add .container-not-up-badge style overrides to control badge size, padding, opacity, and inner icon font size using ::v-deep selectors.
core/frontend/src/components/kraken/cards/InstalledExtensionCard.vue

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Copy link
Copy Markdown

@sourcery-ai sourcery-ai Bot left a comment

Choose a reason for hiding this comment

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

Hey - I've found 1 issue, and left some high level feedback:

  • Consider renaming the container_not_up computed property to containerNotUp (or similar) to match typical JavaScript/Vue camelCase naming conventions for reactive properties.
  • Instead of passing an empty string to v-tooltip when container_not_up is false, gate the tooltip with v-if/v-show or move the condition into the directive so the tooltip isn’t instantiated with empty content.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- Consider renaming the `container_not_up` computed property to `containerNotUp` (or similar) to match typical JavaScript/Vue camelCase naming conventions for reactive properties.
- Instead of passing an empty string to `v-tooltip` when `container_not_up` is false, gate the tooltip with `v-if`/`v-show` or move the condition into the directive so the tooltip isn’t instantiated with empty content.

## Individual Comments

### Comment 1
<location path="core/frontend/src/components/kraken/cards/InstalledExtensionCard.vue" line_range="15" />
<code_context>
-          size="60"
-          class="mr-3"
-          rounded="0"
+          v-tooltip="container_not_up ? 'This extension is enabled but the container is not running.' : ''"
+          :value="container_not_up"
+          overlap
</code_context>
<issue_to_address>
**suggestion:** Avoid passing an empty string to v-tooltip when the container is up.

Rather than returning an empty string in the ternary, conditionally apply the tooltip only when `container_not_up` is true, e.g. `v-tooltip="container_not_up && 'This extension is enabled but the container is not running.'"` or by wrapping the tooltip in `v-if="container_not_up"`. This prevents creating a tooltip with an empty label, which can lead to odd UX or accessibility behavior.
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

size="60"
class="mr-3"
rounded="0"
v-tooltip="container_not_up ? 'This extension is enabled but the container is not running.' : ''"
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

suggestion: Avoid passing an empty string to v-tooltip when the container is up.

Rather than returning an empty string in the ternary, conditionally apply the tooltip only when container_not_up is true, e.g. v-tooltip="container_not_up && 'This extension is enabled but the container is not running.'" or by wrapping the tooltip in v-if="container_not_up". This prevents creating a tooltip with an empty label, which can lead to odd UX or accessibility behavior.

Copy link
Copy Markdown
Collaborator

@ES-Alexander ES-Alexander left a comment

Choose a reason for hiding this comment

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

From the picture, I think it would be better if the badge overlapped the logo more (e.g. the halfway points on the bottom and left of the badge should both be just within the logo rectangle) - it currently looks quite awkward (to me at least).

An example from Apple:

Image

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.

2 participants