Skip to content

feat(HappyHare): Regular click pop-up action menu and reworked MMU unit layout and footer with heater/dryer info#1790

Merged
pedrolamas merged 20 commits intofluidd-core:developfrom
moggieuk:footer_menu
Feb 13, 2026
Merged

feat(HappyHare): Regular click pop-up action menu and reworked MMU unit layout and footer with heater/dryer info#1790
pedrolamas merged 20 commits intofluidd-core:developfrom
moggieuk:footer_menu

Conversation

@moggieuk
Copy link
Contributor

@moggieuk moggieuk commented Feb 12, 2026

Description

This (large) PR represents some cleanup and restructuring to achieve two goals:

  1. Removes the right-click context menu and replaces it with a regular click pop-up action menu. This simplifies operation especially on mobile devices and was advocated by the community. The sensitivity of menu items is set based on current MMU state/capabilities and now necessarily extends to the bypass gate. This PR groups all changes the the context menu including the ability to invoke none gcode command operations like opening the filament editor dialog with the selected gate as default.

  2. Separates and refactors the footer of the mmu unit component. This ensures layout is also constrained to component size and adds a new footer to contains the previous logo and name but also information about MMU heater and environment sensors including a new feature of filament dryer for newer MMU's. A couple of fixes to the spool representation have also been fixed with the bypass gate where it is now shown empty/full based on whether extruder is loaded.

I realize this is a large PR but this work was impossible to cleanly pull into separate PRs without creating a problematic merge.

Related Tickets & Documents

This PR replaces closed PR #2430

Mobile & Desktop Screenshots/Recordings

Regular-click context menu allow now allows for quick navigation to edit the filament on the selected spool:
Screenshot 2026-02-12 at 3 45 16 AM

New unit layout with "heater/climate" bar:
Screenshot 2026-02-12 at 6 58 40 PM

Compat display with "bypass" outside of the unit now possible (based on HH config):
Screenshot 2026-02-12 at 7 03 17 PM

Showing MMU enclosure being actively heated:
Screenshot 2026-02-12 at 7 02 45 PM

Signed-off-by: Paul Morgan moggieuk@hotmail.com

@pedrolamas pedrolamas added the FR - Enhancement New feature or request label Feb 12, 2026
@pedrolamas pedrolamas added this to the 1.36.3 milestone Feb 12, 2026
@pedrolamas pedrolamas requested a review from Copilot February 12, 2026 18:24
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Refactors the HappyHare MMU widget UI to replace the right-click context menu with a regular click action menu (mobile-friendly), and reworks MMU unit layout to include a new footer showing heater/dryer and environment sensor (“climate”) info.

Changes:

  • Replaced right-click context menu flow with click-triggered pop-up actions, including non-GCode actions (e.g., open filament editor for selected gate).
  • Added MMU unit footer component and new “climate” UI (heater, humidity/temp, drying state + tooltip per-gate report).
  • Extended MMU typings/config to support new MMU capabilities (crossload, heaters/sensors arrays, drying state) and new UI setting (showClimate).

Reviewed changes

Copilot reviewed 15 out of 16 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
src/typings/klipper.d.ts Adds MMU machine/state fields (drying state, crossload, heater/sensor refs) to typings.
src/types/mmu.ts Extends MmuUnitDetails to reflect new MMU machine capabilities/fields.
src/store/config/types.ts Adds uiSettings.mmu.showClimate config flag.
src/store/config/state.ts Sets default showClimate: true.
src/mixins/mmu.ts Adds drying state accessors/constants and shared spool sizing helper.
src/locales/en.yaml Adds new MMU button/label/setting strings for change-tool and climate/drying UI.
src/globals.ts Adds icons + a new wait token for MMU “Change Tool”.
src/components/widgets/mmu/MmuUnitFooter.vue New footer component for unit name/logo + climate/heater/drying display with per-gate tooltip report.
src/components/widgets/mmu/MmuUnit.vue Reworks gate rendering and menu behavior; integrates new footer; emits events for selection/editing.
src/components/widgets/mmu/MmuSpool.vue Adjusts bypass spool “empty/full” rendering based on extruder loaded state.
src/components/widgets/mmu/MmuSettings.vue Adds widget-level toggle for showing climate info.
src/components/widgets/mmu/MmuMachine.vue Wires gate selection/edit events upward; supports standalone bypass rendering and bypass hiding.
src/components/widgets/mmu/MmuGateStatus.vue Tweaks gate badge geometry and switches to computed font color logic.
src/components/widgets/mmu/MmuEditGateMapDialog.vue Supports preselecting an initial gate; emits close event.
src/components/widgets/mmu/MmuCard.vue Handles emitted gate selection + edit actions; passes initial gate into edit dialog.
src/components/settings/MmuSettings.vue Adds global settings toggles for unit name + climate display.

pedrolamas and others added 5 commits February 13, 2026 00:13
Signed-off-by: Pedro Lamas <pedrolamas@gmail.com>

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Pedro Lamas <pedrolamas@gmail.com>
Signed-off-by: Pedro Lamas <pedrolamas@gmail.com>

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Pedro Lamas <pedrolamas@gmail.com>
Signed-off-by: Pedro Lamas <pedrolamas@gmail.com>
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 15 out of 16 changed files in this pull request and generated 1 comment.

this.sendGcode('MMU_SELECT GATE=' + gate)
}
get footerStyle () {
const numSpools = this.mmuMachineUnit.numGates + (this.showBypass ? 1 : 0)
Copy link

Copilot AI Feb 13, 2026

Choose a reason for hiding this comment

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

When unitIndex is -1 (standalone bypass), footerStyle calculates maxWidth based on mmuMachineUnit.numGates (which defaults to 1) plus showBypass (which is true), resulting in numSpools=2. However, displayGates will only contain [TOOL_GATE_BYPASS], which is 1 gate. This causes the footer width calculation to be incorrect. Consider using displayGates.length instead of calculating numSpools manually.

Suggested change
const numSpools = this.mmuMachineUnit.numGates + (this.showBypass ? 1 : 0)
const numSpools = this.displayGates.length

Copilot uses AI. Check for mistakes.
Copy link
Member

Choose a reason for hiding this comment

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

I will assume this is correct as is.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Actually it wouldn't have an effect because the unitIndex is -1 for the "standalone" bypass gate representation (shown in pic). That doesn't have content in the footer so max-width doesn't matter. The max-width was to correct user defined text
Screenshot 2026-02-13 at 10 01 07 PM

Bottom line is that the code probably could be cleaner for this case but works fine as-is.

@pedrolamas pedrolamas merged commit 347c159 into fluidd-core:develop Feb 13, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

FR - Enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants