Skip to content

Angular 19 - #34

Merged
WantClue merged 10 commits into
mainfrom
angular-19
Jun 25, 2026
Merged

Angular 19#34
WantClue merged 10 commits into
mainfrom
angular-19

Conversation

@WantClue

@WantClue WantClue commented Jun 23, 2026

Copy link
Copy Markdown
Owner

Moves over to angular 19

Summary by CodeRabbit

  • New Features

    • Updated the UI theme and component styling for a more consistent look across forms, tabs, dropdowns, and buttons.
    • Improved layout and controls in the Settings page, including clearer upload actions.
  • Bug Fixes

    • Refined network and pool form fields so inputs, selects, and labels align and scale better.
    • Adjusted dropdown/select behavior and appearance for more consistent interaction states.
  • Chores

    • Upgraded the app’s Angular, PrimeNG, TypeScript, and Node support versions.

@WantClue WantClue added the enhancement New feature or request label Jun 23, 2026
@coderabbitai

coderabbitai Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Important

Review skipped

Review was skipped due to path filters

⛔ Files ignored due to path filters (1)
  • main/http_server/forge-os/package-lock.json is excluded by !**/package-lock.json

CodeRabbit blocks several paths by default. You can override this behavior by explicitly including those paths in the path filters. For example, including **/dist/** will override the default block on the dist directory, by removing the pattern from both the lists.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 0b58200c-05c8-4972-bd2a-f002a5b22e79

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Upgrades the app to Angular 19 and PrimeNG 19, updates CLI targets and package versions, wires PrimeNG theming in AppModule, marks module-based components and pipes as non-standalone, and refreshes CSS and templates for PrimeNG 19 controls.

Changes

Angular 19 & PrimeNG 19 Upgrade

Layer / File(s) Summary
Dependency & tooling upgrade
main/http_server/forge-os/package.json, main/http_server/forge-os/angular.json
Updates the Node/Angular/PrimeNG/TypeScript versions and switches Angular CLI serve and extract-i18n targets to buildTarget.
PrimeNG 19 module and theme provider wiring
main/http_server/forge-os/src/app/app.module.ts, main/http_server/forge-os/src/app/prime-ng.module.ts
Adds the providePrimeNG Aura theme configuration and replaces InputTextareaModule with TextareaModule.
Explicit standalone: false on all NgModule components and pipes
main/http_server/forge-os/src/app/app.component.ts, main/http_server/forge-os/src/app/components/*/*.ts, main/http_server/forge-os/src/app/layout/*.ts, main/http_server/forge-os/src/app/pipes/*.ts, main/http_server/forge-os/src/app/services/dialog.service.ts
Adds standalone: false to module-based component and pipe decorators, with the dialog list template formatting change kept in the same file.
CSS cascade layers, global styles, and PrimeNG 19 SCSS migration
main/http_server/forge-os/src/styles.scss, main/http_server/forge-os/src/app/layout/styles/theme/theme-base/_components.scss, main/http_server/forge-os/src/app/layout/styles/theme/theme-base/components/button/_button.scss, main/http_server/forge-os/src/app/layout/styles/theme/theme-base/components/input/_dropdown.scss
Adds the forge-os CSS layer, removes the global PrimeNG stylesheet import, renames the theme-base layer, resets button icon margins, and rewrites dropdown/select theme rules.
Component-specific layout and style updates for PrimeNG 19
main/http_server/forge-os/src/app/components/network-edit/*, main/http_server/forge-os/src/app/components/pool/*, main/http_server/forge-os/src/app/components/settings/settings.component.html, main/http_server/forge-os/src/app/components/settings/settings.component.scss
Updates network-edit field and button sizing, pool tab and fluid-field styling, and settings update/upload layout and file-upload button styling.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Poem

🐇 I hopped through Angular fields so bright,
PrimeNG tabs now glow at night.
Selects and buttons found their place,
With standalone: false in every brace.
Carrot-approved, the build leaps clean!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is concise and accurately reflects the main change: upgrading the project to Angular 19.
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.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


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
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🤖 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 `@main/http_server/forge-os/src/app/components/pool/pool.component.scss`:
- Around line 167-171: The focus styles on the tab selector in
pool.component.scss remove all visible keyboard indication for .p-tab. Update
the &:focus and &:focus-visible rules so the tab still has a clear focus
indicator, keeping a visible outline or box-shadow rather than suppressing both,
and ensure the change is applied in the same tab styling block.

In
`@main/http_server/forge-os/src/app/components/settings/settings.component.html`:
- Around line 60-61: The PrimeNG file upload in settings.component.html is using
an incomplete chooseIcon value, so update the p-fileUpload chooseIcon binding
from the icon class fragment to the full PrimeIcons class string. Locate the
websiteUpload p-fileUpload markup and make sure both browse/upload icon usages
follow the same pi pi-plus format so the icon renders correctly.

In
`@main/http_server/forge-os/src/app/layout/styles/theme/theme-base/_components.scss`:
- Line 5: The layer placement for theme base component styles is causing the
cascade to favor base rules over extension overrides. Review the `@layer
forge-os` wrapping in `theme-base/_components.scss` together with the layer
order in `styles.scss` and the extension layer usage in
`themes/vela/_extensions.scss`, then adjust the layer declarations/order so
extension styles can take precedence over the base theme as intended.

In
`@main/http_server/forge-os/src/app/layout/styles/theme/theme-base/components/input/_dropdown.scss`:
- Line 78: The argumentless mixin call in the dropdown input styles is using
parentheses and triggers the stylelint rule. Update the focused-input mixin
invocation in the relevant SCSS partial to use the no-argument mixin syntax, and
check for any similar argumentless mixin calls in nearby component styles to
keep them consistent.
🪄 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: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 6a0a3529-a2b8-4b06-ae8d-388f383feab0

📥 Commits

Reviewing files that changed from the base of the PR and between 9df94fb and 7e5c770.

⛔ Files ignored due to path filters (2)
  • main/http_server/forge-os/package-lock.json is excluded by !**/package-lock.json
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (35)
  • main/http_server/forge-os/angular.json
  • main/http_server/forge-os/package.json
  • main/http_server/forge-os/src/app/app.component.ts
  • main/http_server/forge-os/src/app/app.module.ts
  • main/http_server/forge-os/src/app/components/edit/edit.component.ts
  • main/http_server/forge-os/src/app/components/home/home.component.ts
  • main/http_server/forge-os/src/app/components/loading/loading.component.ts
  • main/http_server/forge-os/src/app/components/logs/logs.component.ts
  • main/http_server/forge-os/src/app/components/modal/modal.component.ts
  • main/http_server/forge-os/src/app/components/network-edit/network.edit.component.scss
  • main/http_server/forge-os/src/app/components/network-edit/network.edit.component.ts
  • main/http_server/forge-os/src/app/components/network/network.component.ts
  • main/http_server/forge-os/src/app/components/pool/pool.component.scss
  • main/http_server/forge-os/src/app/components/pool/pool.component.ts
  • main/http_server/forge-os/src/app/components/settings/settings.component.html
  • main/http_server/forge-os/src/app/components/settings/settings.component.scss
  • main/http_server/forge-os/src/app/components/settings/settings.component.ts
  • main/http_server/forge-os/src/app/components/swarm/swarm.component.ts
  • main/http_server/forge-os/src/app/layout/app.footer.component.ts
  • main/http_server/forge-os/src/app/layout/app.layout.component.ts
  • main/http_server/forge-os/src/app/layout/app.menu.component.ts
  • main/http_server/forge-os/src/app/layout/app.menuitem.component.ts
  • main/http_server/forge-os/src/app/layout/app.sidebar.component.ts
  • main/http_server/forge-os/src/app/layout/app.topbar.component.ts
  • main/http_server/forge-os/src/app/layout/styles/theme/theme-base/_components.scss
  • main/http_server/forge-os/src/app/layout/styles/theme/theme-base/components/button/_button.scss
  • main/http_server/forge-os/src/app/layout/styles/theme/theme-base/components/input/_dropdown.scss
  • main/http_server/forge-os/src/app/pipes/ansi.pipe.ts
  • main/http_server/forge-os/src/app/pipes/date-ago.pipe.ts
  • main/http_server/forge-os/src/app/pipes/diff-suffix.pipe.ts
  • main/http_server/forge-os/src/app/pipes/hash-suffix.pipe.ts
  • main/http_server/forge-os/src/app/pipes/truncate-middle.pipe.ts
  • main/http_server/forge-os/src/app/prime-ng.module.ts
  • main/http_server/forge-os/src/app/services/dialog.service.ts
  • main/http_server/forge-os/src/styles.scss

Comment on lines +167 to +171
&:focus,
&:focus-visible {
box-shadow: none;
outline: none;
}

Copy link
Copy Markdown
Contributor

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

Restore a visible keyboard focus state on tabs.

Line 167-Line 171 remove both outline and box-shadow, leaving no visible focus indicator for keyboard navigation on .p-tab.

Suggested fix
   &:focus,
   &:focus-visible {
-    box-shadow: none;
-    outline: none;
+    outline: 2px solid `#6366f1`;
+    outline-offset: 2px;
   }
📝 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
&:focus,
&:focus-visible {
box-shadow: none;
outline: none;
}
&:focus,
&:focus-visible {
outline: 2px solid `#6366f1`;
outline-offset: 2px;
}
🤖 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 `@main/http_server/forge-os/src/app/components/pool/pool.component.scss` around
lines 167 - 171, The focus styles on the tab selector in pool.component.scss
remove all visible keyboard indication for .p-tab. Update the &:focus and
&:focus-visible rules so the tab still has a clear focus indicator, keeping a
visible outline or box-shadow rather than suppressing both, and ensure the
change is applied in the same tab styling block.

Comment on lines 60 to +61
<p-fileUpload #websiteUpload [customUpload]="true" mode="basic" accept=".bin" (uploadHandler)="otaWWWUpdate($event)"
[auto]="true" chooseLabel="Browse" [disabled]="isUpdating"></p-fileUpload>
[auto]="true" chooseLabel="Browse" chooseIcon="pi-plus" [disabled]="isUpdating"></p-fileUpload>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor

🧩 Analysis chain

🌐 Web query:

PrimeNG 19 FileUpload chooseIconinput: should the value bepi-plusor full classes likepi pi-plus? Please cite the official docs/examples.

💡 Result:

For the PrimeNG 19 FileUpload component, the chooseIcon property requires the full class string, such as pi pi-plus [1]. According to the official PrimeNG documentation, the chooseIcon attribute expects a string that defines the icon class [1]. As demonstrated in the component's official usage examples, you must provide both the base pi class and the specific icon class (e.g., chooseIcon="pi pi-upload") [1]. This aligns with the standard usage of the PrimeIcons library, which defines icons using the pi pi-{icon} syntax [2]. Providing only the specific icon class (e.g., pi-plus) will typically result in the icon failing to render correctly because the base pi class is required to apply the necessary icon styling [2]. For greater customization beyond standard PrimeIcons, you can use the chooseicon template, which allows you to insert custom elements like images, SVG, or other icon libraries [3][4]. Top results: [1][2]

Citations:


Correct PrimeNG chooseIcon class format.

The chooseIcon property expects a full PrimeIcons class string (base class + icon class). The current value pi-plus is missing the required base pi class, which will prevent the icon from rendering. Update both instances to use pi pi-plus.

Lines to update
          <p-fileUpload `#websiteUpload` [customUpload]="true" mode="basic" accept=".bin" (uploadHandler)="otaWWWUpdate($event)"
              [auto]="true" chooseLabel="Browse" chooseIcon="pi pi-plus" [disabled]="isUpdating"></p-fileUpload>
🤖 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
`@main/http_server/forge-os/src/app/components/settings/settings.component.html`
around lines 60 - 61, The PrimeNG file upload in settings.component.html is
using an incomplete chooseIcon value, so update the p-fileUpload chooseIcon
binding from the icon class fragment to the full PrimeIcons class string. Locate
the websiteUpload p-fileUpload markup and make sure both browse/upload icon
usages follow the same pi pi-plus format so the icon renders correctly.



@layer primeng {
@layer forge-os {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Show global layer order and changed layer target
rg -n '`@layer`' main/http_server/forge-os/src/styles.scss \
  main/http_server/forge-os/src/app/layout/styles/theme/theme-base/_components.scss

# Enumerate theme files that still emit `@layer` primeng / forge-os
fd -a --extension scss . main/http_server/forge-os/src/app/layout/styles/theme \
  | xargs rg -n '`@layer`\s+(primeng|forge-os)'

Repository: WantClue/forge-os

Length of output: 569


Verify CSS cascade priority for extension overrides.

The current layer order in styles.scss is @layer primeng, forge-os. Since theme-base/_components.scss is now wrapped in @layer forge-os while extensions (e.g., themes/vela/_extensions.scss) remain in @layer primeng, base component styles will override extension customizations.

This inverts the standard theming model where extensions should take precedence. Please confirm this is intentional or adjust the layer declarations to ensure extensions can override the base.

🤖 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
`@main/http_server/forge-os/src/app/layout/styles/theme/theme-base/_components.scss`
at line 5, The layer placement for theme base component styles is causing the
cascade to favor base rules over extension overrides. Review the `@layer
forge-os` wrapping in `theme-base/_components.scss` together with the layer
order in `styles.scss` and the extension layer usage in
`themes/vela/_extensions.scss`, then adjust the layer declarations/order so
extension styles can take precedence over the base theme as intended.

}

&:not(.p-disabled).p-focus {
@include focused-input();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

cat -n main/http_server/forge-os/src/app/layout/styles/theme/theme-base/components/input/_dropdown.scss | sed -n '70,85p'

Repository: WantClue/forge-os

Length of output: 600


🏁 Script executed:

cat -n main/http_server/forge-os/src/app/layout/styles/theme/theme-base/components/input/_dropdown.scss | sed -n '105,120p'

Repository: WantClue/forge-os

Length of output: 601


🏁 Script executed:

cat -n main/http_server/forge-os/src/app/layout/styles/theme/theme-base/components/input/_dropdown.scss | sed -n '310,325p'

Repository: WantClue/forge-os

Length of output: 372


🏁 Script executed:

find main/http_server/forge-os -name ".stylelintrc*" -o -name "stylelint.config.*" -o -name "package.json" 2>/dev/null | xargs -I{} sh -c 'echo "=== {} ==="; cat "{}"'

Repository: WantClue/forge-os

Length of output: 1949


Fix stylelint failures for argumentless mixin calls.

These lines use parentheses on argumentless mixins and trigger the current stylelint rule, which will fail CI.

Suggested patch
-        `@include` focused-input();
+        `@include` focused-input;
@@
-        `@include` invalid-input();
+        `@include` invalid-input;
@@
-    `@include` invalid-input();
+    `@include` invalid-input;
📝 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
@include focused-input();
`@include` focused-input;
🧰 Tools
🪛 Stylelint (17.13.0)

[error] 78-78: Unexpected parentheses in argumentless mixin "focused-input" call (scss/at-mixin-argumentless-call-parentheses)

(scss/at-mixin-argumentless-call-parentheses)

🤖 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
`@main/http_server/forge-os/src/app/layout/styles/theme/theme-base/components/input/_dropdown.scss`
at line 78, The argumentless mixin call in the dropdown input styles is using
parentheses and triggers the stylelint rule. Update the focused-input mixin
invocation in the relevant SCSS partial to use the no-argument mixin syntax, and
check for any similar argumentless mixin calls in nearby component styles to
keep them consistent.

Source: Linters/SAST tools

@WantClue
WantClue merged commit 82f15cb into main Jun 25, 2026
3 checks passed
@WantClue
WantClue deleted the angular-19 branch June 25, 2026 06:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant