Skip to content

Conversation

@dauriamarco
Copy link
Member

@dauriamarco dauriamarco commented Dec 17, 2025

Introduce the square button variant.


feat(buttons): add square btn-icon

Introduces a new square .btn-icon variant and refactors icon-button styling to unify .btn-circle, .btn-icon, and .btn-close handling.

Key changes

  • Adds .btn-icon and moves icon-sizing/padding into shared variables/mixin ($btn-icon-size-, $btn-icon-font-size-, @mixin button-icon-size) in _buttons.scss; adds .btn-icon rule in _button-group.scss.
  • Consolidates sizing, padding, reset rules and semantic tokens so circle, square icon, and close buttons share behavior; updates size variants (lg/sm/xs) to $btn-icon-size-*.
  • Removes many usages of btn-sm from icon buttons across the codebase, making the full-size icon variant the new default in numerous templates/components.
  • Updates examples, snapshots, and docs (reorganized button demo sections, new headings, and updated button examples).

Other notes

  • Affects core styling, examples, snapshots, docs, and 40+ component templates across element-ng and dashboards projects.
  • Reviewer suggestion: move square (.btn-icon) examples above circle ones so square becomes the default icon-button order/priority.
  • Label: breaking-changes (sizing/semantic defaults changed).

@dauriamarco dauriamarco self-assigned this Dec 17, 2025
@dauriamarco dauriamarco requested a review from a team as a code owner December 17, 2025 13:46
@coderabbitai
Copy link

coderabbitai bot commented Dec 17, 2025

📝 Walkthrough

Walkthrough

This PR introduces a new .btn-icon selector and adds .btn-group .btn-icon rules in the theme SCSS. It replaces circle-specific sizing with a unified icon sizing system ($btn-icon-size-*, $btn-icon-font-size-* and @mixin button-icon-size) and consolidates .btn-circle, .btn-icon, and .btn-close under shared sizing and appearance rules. The examples/buttons demo was reorganized into sections, and numerous templates had the btn-sm modifier removed or adjusted—purely presentational changes.

Sequence Diagram(s)

Possibly related PRs

Suggested labels

ux

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main change: introducing a new square btn-icon button variant that complements the existing icon button styling.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

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

✨ Finishing touches
  • 📝 Generate docstrings

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 and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

📜 Review details

Configuration used: Path: .coderabbit.yml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 70433ae and 13b30d4.

⛔ Files ignored due to path filters (2)
  • playwright/snapshots/static.spec.ts-snapshots/buttons--buttons-element-examples-chromium-dark-linux.png is excluded by !**/*.png
  • playwright/snapshots/static.spec.ts-snapshots/buttons--buttons-element-examples-chromium-light-linux.png is excluded by !**/*.png
📒 Files selected for processing (5)
  • projects/element-theme/src/styles/bootstrap/_button-group.scss (2 hunks)
  • projects/element-theme/src/styles/bootstrap/_buttons.scss (2 hunks)
  • src/app/examples/buttons/button-groups.html (1 hunks)
  • src/app/examples/buttons/buttons.html (1 hunks)
  • src/app/examples/buttons/split-button.html (6 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (11)
src/app/examples/buttons/split-button.html (2)

10-10: LGTM: Consistent size modifier applied to dropdown toggles.

The btn-sm class has been consistently applied to all split-button dropdown toggles with btn-icon. This aligns with the broader styling updates introducing standardized sizing for icon buttons.

Also applies to: 28-28, 45-45, 60-60


74-74: LGTM: Icon-only buttons now use standardized classes.

The standalone icon buttons now properly use btn-icon btn-sm, ensuring visual consistency with their adjacent dropdown-toggle siblings.

Also applies to: 91-91

src/app/examples/buttons/button-groups.html (1)

45-78: LGTM: Size modifiers applied consistently to icon button groups.

All icon buttons across Primary, Secondary, and Tertiary groups now include the btn-sm modifier. This ensures uniform sizing and aligns with the centralized .btn-icon styling rules introduced in the SCSS updates.

projects/element-theme/src/styles/bootstrap/_button-group.scss (1)

89-96: LGTM with note: !important usage is now consistent.

The !important declarations for .btn-icon and .icon-only padding are now consistent with the new .btn-icon block at lines 55-60. This ensures uniform enforcement of padding across all contexts.

Note: The same considerations about !important necessity apply here as mentioned in the previous comment.

projects/element-theme/src/styles/bootstrap/_buttons.scss (5)

69-71: LGTM: Icon buttons excluded from minimum width constraint.

Adding .btn-icon to the exclusion list ensures icon-only buttons size naturally to their content, consistent with .btn-circle behavior.


151-160: LGTM: Icon and circle buttons consolidated.

The expanded :is() selector properly groups .btn-icon with .btn-circle and .btn-close, ensuring consistent padding and icon margins for all icon-only button variants.


162-168: LGTM: Clear distinction between circular and square icon buttons.

This is the core feature of the PR. The separate border-radius declarations properly differentiate:

  • .btn-circle: Fully circular buttons (50%)
  • .btn-icon: Square buttons with rounded corners (semantic token)

This provides the UI flexibility to choose between circular and square icon button variants.


170-189: LGTM: Unified sizing for icon button variants.

Both .btn-circle and .btn-icon share the same size calculations, which ensures visual consistency while allowing different border-radius styling. Good code reuse.


191-198: LGTM: Ghost variant extended to icon buttons.

Adding .btn-icon.btn-ghost ensures the ghost button styling is available for square icon buttons, maintaining parity with circular variants.

src/app/examples/buttons/buttons.html (2)

152-165: LGTM: Close button variants added with proper accessibility.

The new close button examples include proper aria-label attributes and consistent disabled state bindings.


239-290: LGTM: Comprehensive small icon button examples.

The small icon button examples mirror the large variants with consistent structure and accessibility attributes. The same aria-label considerations mentioned in the previous comment apply here (e.g., line 263, 270 use aria-label="badge").

@github-actions
Copy link

@panch1739 panch1739 mentioned this pull request Dec 17, 2025
1 task
@dauriamarco dauriamarco added this to the 49.0.0 milestone Dec 22, 2025
@kfenner
Copy link
Member

kfenner commented Dec 23, 2025

@dauriamarco I think we should move the square buttons above the circle ones as they should be the new default icon buttons:

image

@dauriamarco dauriamarco force-pushed the feat/btn-icon branch 2 times, most recently from 885cf6a to 592ca02 Compare December 30, 2025 09:33
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

♻️ Duplicate comments (1)
src/app/examples/buttons/buttons.html (1)

37-107: Good ordering! Square icon buttons placed before circle buttons.

The new large icon button variants (btn-icon btn-lg) are correctly positioned before the circle button variants, which aligns with kfenner's comment that square buttons should be the new default icon buttons and should appear first in the examples.

Note: Generic aria-labels like "badge" have already been flagged in a previous review comment.

📜 Review details

Configuration used: Path: .coderabbit.yml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 885cf6a and 592ca02.

⛔ Files ignored due to path filters (2)
  • playwright/snapshots/static.spec.ts-snapshots/buttons--buttons-element-examples-chromium-dark-linux.png is excluded by !**/*.png
  • playwright/snapshots/static.spec.ts-snapshots/buttons--buttons-element-examples-chromium-light-linux.png is excluded by !**/*.png
📒 Files selected for processing (5)
  • projects/element-theme/src/styles/bootstrap/_button-group.scss
  • projects/element-theme/src/styles/bootstrap/_buttons.scss
  • src/app/examples/buttons/button-groups.html
  • src/app/examples/buttons/buttons.html
  • src/app/examples/buttons/split-button.html
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-12-11T14:44:11.278Z
Learnt from: spike-rabbit
Repo: siemens/element PR: 1185
File: projects/element-ng/navbar/si-navbar-item/si-navbar-item.component.html:11-11
Timestamp: 2025-12-11T14:44:11.278Z
Learning: The si-icon component in siemens/element-ng/icon automatically applies aria-hidden="true" to its content. Do not suggest adding aria-hidden="true" to si-icon elements, as accessibility is already handled internally by the component.

Applied to files:

  • src/app/examples/buttons/buttons.html
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (7)
src/app/examples/buttons/split-button.html (1)

10-10: LGTM! Consistent btn-sm application across split buttons.

The addition of btn-sm to all icon button variants in split button configurations is consistent and aligns well with the new .btn-icon styling introduced in the SCSS changes.

Also applies to: 28-28, 45-45, 60-60, 74-74, 79-79, 91-91, 96-96

src/app/examples/buttons/button-groups.html (1)

45-78: LGTM! Consistent icon button sizing in button groups.

The btn-sm modifier has been consistently applied to all icon button variants across Primary, Secondary, and Tertiary button groups, ensuring uniform sizing and alignment with the new .btn-icon styling rules.

projects/element-theme/src/styles/bootstrap/_button-group.scss (1)

55-58: LGTM! The !important concern has been addressed.

The new .btn-icon rule within .btn-group correctly sets icon button sizing with calculated padding that accounts for border width. The previous review concern about !important usage has been resolved—the current implementation relies on selector specificity instead.

src/app/examples/buttons/buttons.html (2)

109-160: LGTM! Comprehensive small icon button variants.

The small icon button variants (btn-icon btn-sm) provide a complete set of examples across all button types and include close button variants, demonstrating the full range of the new square icon button API.


277-289: LGTM! Close button variants complete the circle button examples.

The addition of close button variants (btn-circle btn-close) within the small circle button group provides comprehensive examples of all available button combinations.

projects/element-theme/src/styles/bootstrap/_buttons.scss (2)

162-168: Clear separation of border-radius logic.

The explicit border-radius rules for .btn-circle (50%) and .btn-icon (semantic token) provide clear, maintainable styling that distinguishes circular from square icon buttons.


170-198: LGTM! Unified sizing and visual states for icon buttons.

The shared sizing implementation for both .btn-circle and .btn-icon ensures consistency across button variants, and the inclusion of .btn-icon.btn-ghost in the visual state mapping completes the integration of the new square icon button variant.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

♻️ Duplicate comments (1)
src/app/examples/buttons/buttons.html (1)

37-107: Icon button placement aligns with design direction, but improve aria-labels.

The large icon button examples are well-positioned before the circle variants, aligning with kfenner's suggestion that square buttons should be the new default. However, multiple buttons use generic aria-label="badge" (lines 62, 69, 76, 83, 90, 97), which doesn't demonstrate accessibility best practices for example/demo code.

Consider more descriptive labels to better demonstrate proper accessibility patterns:

-  aria-label="badge"
+  aria-label="View badge"

Or vary the labels based on context (e.g., "Secondary badge", "Warning badge", "Danger badge") to demonstrate that each button should have a unique, descriptive label.

📜 Review details

Configuration used: Path: .coderabbit.yml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 592ca02 and b49aa52.

⛔ Files ignored due to path filters (2)
  • playwright/snapshots/static.spec.ts-snapshots/buttons--buttons-element-examples-chromium-dark-linux.png is excluded by !**/*.png
  • playwright/snapshots/static.spec.ts-snapshots/buttons--buttons-element-examples-chromium-light-linux.png is excluded by !**/*.png
📒 Files selected for processing (5)
  • projects/element-theme/src/styles/bootstrap/_button-group.scss
  • projects/element-theme/src/styles/bootstrap/_buttons.scss
  • src/app/examples/buttons/button-groups.html
  • src/app/examples/buttons/buttons.html
  • src/app/examples/buttons/split-button.html
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-12-11T14:44:11.278Z
Learnt from: spike-rabbit
Repo: siemens/element PR: 1185
File: projects/element-ng/navbar/si-navbar-item/si-navbar-item.component.html:11-11
Timestamp: 2025-12-11T14:44:11.278Z
Learning: The si-icon component in siemens/element-ng/icon automatically applies aria-hidden="true" to its content. Do not suggest adding aria-hidden="true" to si-icon elements, as accessibility is already handled internally by the component.

Applied to files:

  • src/app/examples/buttons/buttons.html
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (9)
projects/element-theme/src/styles/bootstrap/_buttons.scss (5)

69-71: LGTM: Icon buttons correctly excluded from min-inline-size constraint.

The addition of .btn-icon to the exclusion list is appropriate, ensuring icon buttons use their fixed dimensions rather than the minimum width constraint applied to standard buttons.


151-160: Excellent consolidation of shared button variant styles.

The consolidated selector correctly groups .btn-circle, .btn-icon, and .btn-close with shared padding and icon margin rules, while properly excluding button-group contexts. This aligns with the previously approved refactoring approach.


162-168: Clean separation of border-radius rules for circle vs. icon buttons.

The explicit border-radius rules effectively distinguish circular (50%) from square/rounded icon buttons (semantic token). The use of semantic tokens for .btn-icon ensures consistent theming.


170-189: Well-structured consolidation of circle and icon button sizing.

Sharing the sizing rules for .btn-circle and .btn-icon is appropriate since both variants use identical dimensions. The unified sizing across .btn-lg, .btn-sm, and .btn-xs maintains consistency while adhering to DRY principles.


191-198: Ghost styling correctly extended to icon buttons.

Adding .btn-icon.btn-ghost to the existing ghost button styles ensures visual consistency across circle, icon, and close button variants.

src/app/examples/buttons/button-groups.html (1)

43-79: Consistent application of btn-sm to icon button groups.

All icon buttons within button groups now include the btn-sm modifier, ensuring consistent sizing across Primary, Secondary, and Tertiary variants. This aligns well with the new .btn-icon styling infrastructure.

src/app/examples/buttons/split-button.html (1)

10-10: Consistent btn-sm application across split button icon variants.

The addition of btn-sm to all icon buttons and dropdown toggles in split button configurations ensures uniform sizing and visual consistency throughout the component.

Also applies to: 28-28, 45-45, 60-60, 74-74, 79-79, 91-91, 96-96

projects/element-theme/src/styles/bootstrap/_button-group.scss (1)

55-58: Clean button-group integration for icon buttons.

The .btn-icon rule properly scopes icon button styling within button groups, allowing natural sizing with inline-size: unset and consistent padding calculation. The removal of !important declarations (per previous feedback) improves maintainability.

src/app/examples/buttons/buttons.html (1)

277-290: Circle close button examples complete the variant showcase.

The addition of close button examples (with and without btn-tertiary) within the circle button group provides comprehensive coverage of button variants. The aria-label="close" is appropriately descriptive for these controls.

@dauriamarco dauriamarco force-pushed the feat/btn-icon branch 3 times, most recently from 71734a5 to ef66a90 Compare December 31, 2025 01:17
Copy link
Member

@kfenner kfenner left a comment

Choose a reason for hiding this comment

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

@dauriamarco Looks great, thank you 🙏

I'd like to adjust the commit message slightly:

feat(buttons): add square icon buttons

Introduces square icon buttons (`.btn-icon`) in addition to the existing circle
buttons (`.btn-circle`). They follow the same sizing options (lg, sm, xs) and
integrate seamlessly with button groups.

NOTE: The new square icon buttons (`.btn-icon`) are introduced as the
new default style for icon buttons. The existing circle buttons (`.btn-circle`)
are now reserved for cases where a circular shape is explicitly required.

Copy link
Contributor

@dr-itz dr-itz left a comment

Choose a reason for hiding this comment

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

LGTM, just two tiny nits

kfenner
kfenner previously requested changes Jan 6, 2026
Copy link
Member

@kfenner kfenner left a comment

Choose a reason for hiding this comment

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

We cannot merge this until we have an alignment of sizing for buttons and icon buttons.

@panch1739 I understood that you would like to postpone this but we cannot ship this as-is for v49. I think you should have a discussion with iX about this. Would be good to understand the differences in button sizing between Element and iX.

Also, @hbxes pointed out, that our (non-icon) button in small size is 28px which is not defined in the design system. So maybe we should also do something about that.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 5

🤖 Fix all issues with AI agents
In @projects/element-ng/datepicker/si-calendar-button.component.ts:
- Line 51: In the template for SiCalendarButtonComponent remove the conflicting
"btn-xs" token from the class list so the element only uses the intended
"btn-lg" sizing; locate the class attribute string containing "btn btn-circle
btn-lg btn-tertiary btn-xs position-absolute end-0 top-0 me-2 mt-2" and delete
"btn-xs" so it reads without that token.

In @projects/element-ng/datepicker/si-date-range.component.html:
- Line 33: Button contains conflicting size classes ("btn-lg" and "btn-xs");
remove the inappropriate size modifier so only the intended size remains. In the
template element that currently has class="btn btn-circle btn-lg btn-tertiary
btn-xs" (the calendar button in si-date-range component), delete "btn-xs" and
leave "btn-lg" (or replace with the project's agreed size class) so there are no
mutually-exclusive size classes applied.

In @projects/element-ng/filter-bar/si-filter-pill.component.html:
- Line 23: The button element in si-filter-pill.component.html has conflicting
size classes "btn-lg" and "btn-xs"; remove the incorrect modifier so only one
size remains—prefer keeping "btn-lg" (remove "btn-xs") to match other
remove/close buttons, updating the class attribute on the element with
class="btn-remove element-cancel btn btn-circle btn-lg btn-ghost focus-inside
ms-0".

In @projects/element-ng/status-bar/si-status-bar.component.html:
- Line 110: Update the mute button's class attribute to use the new icon-button
pattern: replace "btn-circle" with "btn-icon" on the element that currently has
class="bar-item mute-button btn btn-circle btn-tertiary ms-5"; if you need to
keep the circular shape retain both by using class="bar-item mute-button btn
btn-icon btn-circle btn-tertiary ms-5", otherwise use the new square default
class="bar-item mute-button btn btn-icon btn-tertiary ms-5".

In @projects/element-ng/tour/si-tour.component.html:
- Line 32: The close button class string "btn btn-circle btn-ghost mt-4 me-5"
was changed to remove btn-sm which enlarges the button and may break the tour
header flex layout; verify header alignment and spacing and either reintroduce
btn-sm (restore "btn-sm" in the same element) or adjust surrounding
spacing/margins so the title/progress area and the button remain visually
balanced, and optionally migrate the button from the circular variant to the new
square variant by replacing "btn-circle" with "btn-icon" to match the new design
language (apply these changes on the same button element in
si-tour.component.html and confirm visually across breakpoints).
📜 Review details

Configuration used: Path: .coderabbit.yml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 980e89a and 294f5c1.

⛔ Files ignored due to path filters (10)
  • playwright/snapshots/si-side-panel.spec.ts-snapshots/si-side-panel--si-side-panel--over-mode-element-examples-chromium-dark-linux.png is excluded by !**/*.png
  • playwright/snapshots/si-side-panel.spec.ts-snapshots/si-side-panel--si-side-panel--over-mode-element-examples-chromium-light-linux.png is excluded by !**/*.png
  • playwright/snapshots/si-side-panel.spec.ts-snapshots/si-side-panel--si-side-panel--over-mode-no-backdrop-element-examples-chromium-dark-linux.png is excluded by !**/*.png
  • playwright/snapshots/si-side-panel.spec.ts-snapshots/si-side-panel--si-side-panel--over-mode-no-backdrop-element-examples-chromium-light-linux.png is excluded by !**/*.png
  • playwright/snapshots/si-side-panel.spec.ts-snapshots/si-side-panel--si-side-panel--scroll-mode-element-examples-chromium-dark-linux.png is excluded by !**/*.png
  • playwright/snapshots/si-side-panel.spec.ts-snapshots/si-side-panel--si-side-panel--scroll-mode-element-examples-chromium-light-linux.png is excluded by !**/*.png
  • playwright/snapshots/si-side-panel.spec.ts-snapshots/si-side-panel--si-side-panel-collapsible--open-element-examples-chromium-dark-linux.png is excluded by !**/*.png
  • playwright/snapshots/si-side-panel.spec.ts-snapshots/si-side-panel--si-side-panel-collapsible--open-element-examples-chromium-light-linux.png is excluded by !**/*.png
  • playwright/snapshots/static.spec.ts-snapshots/buttons--buttons-element-examples-chromium-dark-linux.png is excluded by !**/*.png
  • playwright/snapshots/static.spec.ts-snapshots/buttons--buttons-element-examples-chromium-light-linux.png is excluded by !**/*.png
📒 Files selected for processing (53)
  • docs/components/layout-navigation/modals.md
  • playwright/snapshots/static.spec.ts-snapshots/buttons--buttons.yaml
  • projects/dashboards-demo/src/app/components/widget-catalog/custom-widget-catalog.component.html
  • projects/dashboards-ng/src/components/dashboard-toolbar/si-dashboard-toolbar.component.html
  • projects/element-ng/action-modal/si-alert-dialog/si-alert-dialog.component.html
  • projects/element-ng/action-modal/si-confirmation-dialog/si-confirmation-dialog.component.html
  • projects/element-ng/action-modal/si-delete-confirmation-dialog/si-delete-confirmation-dialog.component.html
  • projects/element-ng/action-modal/si-edit-discard-dialog/si-edit-discard-dialog.component.html
  • projects/element-ng/application-header/launchpad/si-launchpad-factory.component.html
  • projects/element-ng/chat-messages/si-ai-message.component.html
  • projects/element-ng/chat-messages/si-attachment-list.component.html
  • projects/element-ng/chat-messages/si-chat-input.component.html
  • projects/element-ng/chat-messages/si-user-message.component.html
  • projects/element-ng/column-selection-dialog/column-selection-editor/si-column-selection-editor.component.html
  • projects/element-ng/column-selection-dialog/si-column-selection-dialog.component.html
  • projects/element-ng/dashboard/widgets/si-list-widget/si-list-widget-item.component.html
  • projects/element-ng/dashboard/widgets/si-timeline-widget/si-timeline-widget-item.component.html
  • projects/element-ng/datepicker/components/si-calendar-direction-button.component.ts
  • projects/element-ng/datepicker/si-calendar-button.component.ts
  • projects/element-ng/datepicker/si-date-range.component.html
  • projects/element-ng/file-uploader/si-file-uploader.component.html
  • projects/element-ng/filter-bar/si-filter-pill.component.html
  • projects/element-ng/main-detail-container/si-main-detail-container.component.html
  • projects/element-ng/navbar-vertical/si-navbar-vertical.component.html
  • projects/element-ng/notification-item/si-notification-item.component.html
  • projects/element-ng/photo-upload/si-photo-upload.component.html
  • projects/element-ng/side-panel/si-side-panel-content.component.html
  • projects/element-ng/slider/si-slider.component.html
  • projects/element-ng/status-bar/si-status-bar.component.html
  • projects/element-ng/threshold/si-threshold.component.html
  • projects/element-ng/toast-notification/si-toast-notification/si-toast-notification.component.html
  • projects/element-ng/tour/si-tour.component.html
  • projects/element-ng/tree-view/si-tree-view.component.html
  • projects/element-ng/wizard/si-wizard.component.html
  • projects/element-theme/src/styles/bootstrap/_button-group.scss
  • projects/element-theme/src/styles/bootstrap/_buttons.scss
  • src/app/examples/buttons/buttoncategories.html
  • src/app/examples/buttons/buttons.html
  • src/app/examples/datatable/bootstrap.html
  • src/app/examples/datatable/datatable-grouped-rows.html
  • src/app/examples/si-chat-messages/si-attachment-list.html
  • src/app/examples/si-chat-messages/si-chat-container.html
  • src/app/examples/si-chat-messages/si-chat-input.html
  • src/app/examples/si-chat-messages/si-chat-message.html
  • src/app/examples/si-dashboard/si-list-widget-css.html
  • src/app/examples/si-datepicker/si-modal-service.html
  • src/app/examples/si-list-details/si-list-details-router.html
  • src/app/examples/si-list-details/si-list-details.html
  • src/app/examples/si-map/si-map-custom-cluster-popover.ts
  • src/app/examples/si-modals/app-table.component.html
  • src/app/examples/si-modals/si-modal-service.html
  • src/app/examples/si-notification-item/si-notification-item.html
  • src/app/examples/si-wizard/si-wizard-forms.html
🧰 Additional context used
🧠 Learnings (16)
📚 Learning: 2025-12-22T13:04:35.578Z
Learnt from: mistrykaran91
Repo: siemens/element PR: 1234
File: src/app/examples/ag-grid/ag-grid-empty-state.ts:20-24
Timestamp: 2025-12-22T13:04:35.578Z
Learning: The SiEmptyStateComponent in siemens/element-ng accepts icon names in kebab-case format (e.g., 'element-technical-operator') that may not be directly exported as constants in the element-icons.ts file. Do not flag these as errors if they render correctly at runtime.

Applied to files:

  • projects/element-ng/dashboard/widgets/si-list-widget/si-list-widget-item.component.html
  • projects/element-ng/chat-messages/si-ai-message.component.html
  • projects/element-ng/chat-messages/si-chat-input.component.html
  • projects/element-ng/navbar-vertical/si-navbar-vertical.component.html
  • projects/element-ng/filter-bar/si-filter-pill.component.html
  • projects/element-ng/threshold/si-threshold.component.html
  • projects/element-ng/column-selection-dialog/column-selection-editor/si-column-selection-editor.component.html
  • projects/element-ng/notification-item/si-notification-item.component.html
  • projects/element-ng/datepicker/components/si-calendar-direction-button.component.ts
  • projects/element-ng/tour/si-tour.component.html
  • projects/element-ng/file-uploader/si-file-uploader.component.html
  • projects/element-ng/dashboard/widgets/si-timeline-widget/si-timeline-widget-item.component.html
  • projects/element-ng/main-detail-container/si-main-detail-container.component.html
  • projects/element-ng/tree-view/si-tree-view.component.html
  • projects/dashboards-ng/src/components/dashboard-toolbar/si-dashboard-toolbar.component.html
  • projects/element-ng/chat-messages/si-user-message.component.html
📚 Learning: 2025-12-09T14:31:33.543Z
Learnt from: Killusions
Repo: siemens/element PR: 998
File: projects/element-ng/chat-messages/si-ai-chat-container.component.html:14-50
Timestamp: 2025-12-09T14:31:33.543Z
Learning: In projects/element-ng/chat-messages/si-ai-chat-container.component.html, message IDs can change, so tracking by message.id is not appropriate. The component uses `track message` (object identity) which is the correct approach for this use case.

Applied to files:

  • src/app/examples/si-chat-messages/si-chat-message.html
  • projects/element-ng/chat-messages/si-ai-message.component.html
  • projects/element-ng/chat-messages/si-chat-input.component.html
  • src/app/examples/si-chat-messages/si-chat-container.html
  • projects/element-ng/chat-messages/si-attachment-list.component.html
  • projects/element-ng/chat-messages/si-user-message.component.html
📚 Learning: 2025-12-09T14:32:34.036Z
Learnt from: Killusions
Repo: siemens/element PR: 998
File: projects/element-ng/chat-messages/si-ai-chat-container.component.html:21-47
Timestamp: 2025-12-09T14:32:34.036Z
Learning: In projects/element-ng/chat-messages, nested if blocks are preferred over switch statements for branching on message types in Angular templates.

Applied to files:

  • src/app/examples/si-chat-messages/si-chat-message.html
  • projects/dashboards-ng/src/components/dashboard-toolbar/si-dashboard-toolbar.component.html
📚 Learning: 2025-12-09T14:32:26.166Z
Learnt from: Killusions
Repo: siemens/element PR: 998
File: projects/element-ng/chat-messages/si-ai-chat-container.component.html:21-47
Timestamp: 2025-12-09T14:32:26.166Z
Learning: In Angular templates, prefer using nested *ngIf blocks over *ngSwitch for branching on message types within the chat-messages components. Use *ngIf with else branches to handle distinct cases and avoid complex switch logic in HTML templates. This guideline applies to all HTML templates under projects/element-ng/chat-messages.

Applied to files:

  • projects/element-ng/chat-messages/si-ai-message.component.html
  • projects/element-ng/chat-messages/si-chat-input.component.html
  • projects/element-ng/chat-messages/si-attachment-list.component.html
  • projects/element-ng/chat-messages/si-user-message.component.html
📚 Learning: 2025-11-18T12:37:30.510Z
Learnt from: Killusions
Repo: siemens/element PR: 1040
File: projects/element-ng/chat-messages/si-chat-input.component.ts:338-349
Timestamp: 2025-11-18T12:37:30.510Z
Learning: In projects/element-ng/chat-messages/si-chat-input.component.ts, the interrupt behavior is intentionally different for button clicks vs Enter key: the button can emit interrupt even without content, but pressing Enter requires content or attachments (canSend() must be true) to emit interrupt.

Applied to files:

  • projects/element-ng/chat-messages/si-ai-message.component.html
  • projects/element-ng/chat-messages/si-chat-input.component.html
  • projects/element-ng/chat-messages/si-attachment-list.component.html
  • projects/element-ng/chat-messages/si-user-message.component.html
📚 Learning: 2025-12-17T04:34:55.597Z
Learnt from: chintankavathia
Repo: siemens/element PR: 1173
File: src/app/examples/si-charts/interactive/interactive.ts:5-5
Timestamp: 2025-12-17T04:34:55.597Z
Learning: Guideline: In Angular projects using OnPush change detection (zoneless mode), you only need to call ChangeDetectorRef.markForCheck() for asynchronous operations (e.g., setTimeout, setInterval, Promises, Observables) where a change is not automatically detected. Event handlers triggered by Angular template bindings (click, input, etc.) will trigger change detection automatically and do not require explicit markForCheck() calls. Apply this broadly to TS files within Angular components/services that use OnPush; use markForCheck() selectively for async work where change detection wouldn’t run otherwise.

Applied to files:

  • projects/element-ng/datepicker/si-calendar-button.component.ts
  • src/app/examples/si-map/si-map-custom-cluster-popover.ts
  • projects/element-ng/datepicker/components/si-calendar-direction-button.component.ts
📚 Learning: 2025-12-30T13:52:33.581Z
Learnt from: dauriamarco
Repo: siemens/element PR: 1221
File: projects/element-ng/side-panel/si-side-panel.component.ts:136-142
Timestamp: 2025-12-30T13:52:33.581Z
Learning: Maintain the existing negative naming convention (e.g., disableBackdrop) across the siemens/element repository for consistency. Do not refactor to positive names (e.g., showBackdrop, hasBackdrop) unless the project explicitly changes the convention. In reviews, flag changes that alter established naming patterns in related files under projects/element-ng.

Applied to files:

  • projects/element-ng/datepicker/si-calendar-button.component.ts
  • projects/element-ng/datepicker/components/si-calendar-direction-button.component.ts
📚 Learning: 2025-12-17T14:01:05.705Z
Learnt from: dauriamarco
Repo: siemens/element PR: 908
File: projects/element-ng/side-panel/si-side-panel.component.ts:70-74
Timestamp: 2025-12-17T14:01:05.705Z
Learning: In the Element side-panel component (projects/element-ng/side-panel/si-side-panel.component.ts), the `xxxlMinimum` breakpoint (1920px) is intentionally hardcoded as a private static constant rather than being part of the configurable `Breakpoints` interface. This design preserves full Bootstrap compatibility (which only defines breakpoints up to xxl/1400px) while allowing Element to handle ultra-wide screens explicitly without affecting the standard breakpoint configuration.

Applied to files:

  • projects/element-ng/side-panel/si-side-panel-content.component.html
  • projects/element-ng/navbar-vertical/si-navbar-vertical.component.html
  • projects/element-ng/threshold/si-threshold.component.html
📚 Learning: 2025-12-11T14:44:11.278Z
Learnt from: spike-rabbit
Repo: siemens/element PR: 1185
File: projects/element-ng/navbar/si-navbar-item/si-navbar-item.component.html:11-11
Timestamp: 2025-12-11T14:44:11.278Z
Learning: The si-icon component in siemens/element-ng/icon automatically applies aria-hidden="true" to its content. Do not suggest adding aria-hidden="true" to si-icon elements, as accessibility is already handled internally by the component.

Applied to files:

  • projects/element-ng/navbar-vertical/si-navbar-vertical.component.html
  • projects/element-ng/threshold/si-threshold.component.html
  • projects/element-ng/chat-messages/si-attachment-list.component.html
  • projects/element-ng/datepicker/components/si-calendar-direction-button.component.ts
  • projects/element-ng/tour/si-tour.component.html
  • projects/element-ng/dashboard/widgets/si-timeline-widget/si-timeline-widget-item.component.html
  • src/app/examples/buttons/buttons.html
📚 Learning: 2025-12-09T14:33:54.441Z
Learnt from: Killusions
Repo: siemens/element PR: 998
File: src/app/examples/si-chat-messages/si-ai-message.ts:24-43
Timestamp: 2025-12-09T14:33:54.441Z
Learning: In src/app/examples/ (example/demo code) directories, allow and expect code duplication. Treat duplication as acceptable for demonstration code that aims to illustrate usage rather than enforce DRY. Do not enforce refactoring to remove duplication in example files; focus on readability and clarity of examples. This applies to all TypeScript files under src/app/examples (including nested subdirectories like si-chat-messages).

Applied to files:

  • src/app/examples/si-map/si-map-custom-cluster-popover.ts
📚 Learning: 2025-12-22T13:29:36.922Z
Learnt from: mistrykaran91
Repo: siemens/element PR: 1234
File: projects/element-ng/ag-grid/parts/color-scheme.part.ts:35-35
Timestamp: 2025-12-22T13:29:36.922Z
Learning: In the Element design system (projects/element-ng/theme and projects/element-theme), only `--element-body-font-family` is exposed as a CSS custom property for typography. Font sizes are NOT exposed as CSS custom properties; they are defined using internal SCSS variables (e.g., `typography.$si-font-size-body`) that compile to fixed values. Using hardcoded pixel values for fontSize in AG Grid theme configuration (e.g., `fontSize: '14px'`) is the correct approach.

Applied to files:

  • projects/element-theme/src/styles/bootstrap/_buttons.scss
📚 Learning: 2025-12-03T13:02:34.875Z
Learnt from: spike-rabbit
Repo: siemens/element PR: 1058
File: docs/fundamentals/layouts/breakpoints.md:25-31
Timestamp: 2025-12-03T13:02:34.875Z
Learning: In Element documentation for CSS breakpoints and class infixes (e.g., in docs/fundamentals/layouts/breakpoints.md), _None_ is formatted with italics to indicate the absence of a class infix (representing base mobile-first styles), while actual CSS class infixes like `sm`, `md`, `lg`, `xl`, `xxl` use inline code formatting with backticks. This semantic formatting distinction is intentional.

Applied to files:

  • src/app/examples/buttons/buttons.html
📚 Learning: 2026-01-02T16:41:57.274Z
Learnt from: kfenner
Repo: siemens/element PR: 1005
File: docs/fundamentals/styles/sizing.md:18-26
Timestamp: 2026-01-02T16:41:57.274Z
Learning: In Element documentation (siemens/element), sizing utility examples in docs may intentionally differ from implementation examples to demonstrate multiple valid approaches - for example, documentation might use traditional CSS properties like `height` and `width` while the implementation example uses logical properties like `block-size` and `inline-size`. These are considered different examples rather than inconsistencies.

Applied to files:

  • src/app/examples/buttons/buttons.html
📚 Learning: 2026-01-02T16:41:48.359Z
Learnt from: kfenner
Repo: siemens/element PR: 1005
File: docs/fundamentals/styles/sizing.md:18-26
Timestamp: 2026-01-02T16:41:48.359Z
Learning: In Element docs, sizing examples may differ between documentation and implementation to illustrate multiple valid approaches. Do not flag such differences as inconsistencies; treat them as separate illustrative examples (e.g., using height/width in docs vs block-size/inline-size in implementation). Apply this understanding across Markdown documentation files to avoid false-positive review flags.

Applied to files:

  • docs/components/layout-navigation/modals.md
📚 Learning: 2025-12-01T09:34:50.469Z
Learnt from: Killusions
Repo: siemens/element PR: 1047
File: docs/fundamentals/ux-text-style-guide/basics.md:30-30
Timestamp: 2025-12-01T09:34:50.469Z
Learning: In docs/fundamentals/ux-text-style-guide/basics.md, the h4 heading level (####) for "Do's" and "Don'ts" within the dos-and-donts structure is intentional, even though it triggers the MD001 linting rule about heading hierarchy.

Applied to files:

  • playwright/snapshots/static.spec.ts-snapshots/buttons--buttons.yaml
📚 Learning: 2025-12-16T16:19:17.950Z
Learnt from: spike-rabbit
Repo: siemens/element PR: 1207
File: playwright/snapshots/si-filtered-search.spec.ts-snapshots/si-filtered-search--si-filtered-search-playground--data-entered.yaml:38-38
Timestamp: 2025-12-16T16:19:17.950Z
Learning: Do not review files in the playwright/snapshots directory, as they contain auto-generated test artifacts. Exclude any YAML snapshot files under playwright/snapshots from code reviews in the siemens/element repository. If a YAML file is not an auto-generated snapshot, verify its origin before skipping.

Applied to files:

  • playwright/snapshots/static.spec.ts-snapshots/buttons--buttons.yaml
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (60)
projects/element-ng/slider/si-slider.component.html (1)

4-4: Consistent with button-sizing standardization.

The removal of btn-sm from both increment and decrement buttons aligns with the PR's broader effort to standardize icon/circle button sizing. The buttons remain appropriately classified as btn-circle btn-secondary.

Please verify that the larger button size (default instead of small) displays appropriately within the slider layout and doesn't cause any spacing or alignment issues. Additionally, confirm the visual appearance on touch/mobile viewports, where larger targets may be beneficial for usability.

Also applies to: 62-62

projects/element-ng/toast-notification/si-toast-notification/si-toast-notification.component.html (2)

34-34: Verify button variant choice aligns with PR objectives.

The PR introduces square buttons as the new default for icon buttons, and the PR comment from kfenner suggests square buttons should replace circular ones as the default. However, this close button retains btn-circle. Please confirm whether this is intentional (e.g., toast notifications specifically retain circular buttons) or if it should be updated to use the square variant for consistency with the new design direction.


34-34: Verify visual impact of removing btn-sm with existing negative margins.

Removing btn-sm increases the button size from small to default, but the negative margins (mt-n2 me-n2) remain unchanged. These margins were likely calibrated for the smaller button size. Please verify that the larger button doesn't cause layout issues or visual misalignment in the toast notification, and adjust margins if needed.

src/app/examples/si-notification-item/si-notification-item.html (1)

71-71: LGTM! Verify visual appearance in notification items.

The removal of btn-sm from these circular buttons aligns with the PR's standardization effort. The changes are consistent across all circular buttons in this template, and accessibility attributes are properly maintained.

Since notification items can be space-constrained, verify that the larger default-sized buttons don't negatively impact layout, spacing, or visual density in the notification UI.

Also applies to: 78-78, 113-113

projects/element-ng/datepicker/components/si-calendar-direction-button.component.ts (1)

24-24: LGTM! Verify the button shape choice and visual appearance.

The removal of btn-sm correctly aligns with the PR's broader button sizing standardization. However, based on the PR comments suggesting that square buttons should be the new default for icon buttons, please confirm:

  1. Is the use of btn-circle intentional for calendar direction buttons, or should these be updated to the square btn-icon variant introduced in this PR?
  2. Does the larger default size work well visually within the calendar component layout?
  3. Are snapshot tests updated to reflect this size change (if applicable)?
projects/element-ng/dashboard/widgets/si-timeline-widget/si-timeline-widget-item.component.html (1)

31-31: This file was newly added as part of commit 294f5c1 ("refactor(buttons): align button sizing across text and icon variants"), which unifies button sizing across the codebase. The current code is correct: btn-circle is the intended class for icon-only buttons on lines 31, 54, 69, and 81, and there is no btn-sm to remove since this is a new component. The BREAKING CHANGE in that commit addresses button sizing (e.g., btn-sm now represents 28px height instead of 32px), not a replacement of btn-circle with a new square button variant. The original review assumptions about btn-sm removal and square button replacement do not apply to this component.

Likely an incorrect or invalid review comment.

projects/element-ng/tree-view/si-tree-view.component.html (2)

11-18: LGTM - consistent with expand all button.

The btn-sm removal is consistent with the expand all button above and aligns with the broader refactoring effort.


3-10: No changes needed—.btn-circle is correct and consistent.

The btn-sm removal is appropriate and aligns with the refactoring objectives. These expand/collapse buttons correctly use .btn-circle for circular styling, not .btn-icon (which is for square buttons). This is consistent with all other expand/collapse buttons throughout the codebase (status-bar, side-panel, navbar-vertical, etc.).

projects/element-ng/action-modal/si-edit-discard-dialog/si-edit-discard-dialog.component.html (1)

9-9: LGTM! Consistent button sizing standardization.

The removal of btn-sm from the modal close button aligns with the PR's objective to standardize icon button sizing. This presentational change makes the cancel button use the default size, consistent with the new square btn-icon variant being introduced as the default.

src/app/examples/si-modals/si-modal-service.html (1)

32-32: LGTM! Consistent sizing across all modal close buttons.

All three modal close buttons have been updated consistently by removing btn-sm, standardizing them to the default size. This aligns with the PR's systematic approach to button sizing normalization across modal templates.

Also applies to: 52-52, 78-78

src/app/examples/si-chat-messages/si-attachment-list.html (1)

20-20: LGTM! Consistent with modal sizing standardization.

The removal of btn-sm from the attachment modal's close button maintains consistency with the broader button sizing standardization across the codebase.

projects/element-ng/action-modal/si-delete-confirmation-dialog/si-delete-confirmation-dialog.component.html (1)

9-9: LGTM! Component sizing aligned with new standards.

The removal of btn-sm from the delete confirmation dialog's close button aligns this component with the standardized button sizing approach being implemented across the library.

src/app/examples/datatable/datatable-grouped-rows.html (1)

21-21: LGTM! Sizing standardization extends to datatable controls.

The removal of btn-sm from the group expand/collapse button demonstrates the consistent application of the new button sizing standard beyond just modal close buttons, maintaining visual coherence across different UI contexts.

projects/element-ng/action-modal/si-alert-dialog/si-alert-dialog.component.html (1)

9-9: LGTM - Consistent sizing standardization.

The removal of btn-sm aligns with the PR's goal to standardize button sizing across components. The change is purely presentational and preserves all functionality.

projects/element-ng/wizard/si-wizard.component.html (1)

124-124: LGTM - Consistent sizing standardization.

The removal of btn-sm from the horizontal cancel button is consistent with the standardization effort across the codebase.

projects/element-ng/photo-upload/si-photo-upload.component.html (1)

64-64: LGTM - Consistent sizing standardization.

The removal of btn-sm from the modal header cancel button is consistent with the standardization effort.

projects/element-ng/column-selection-dialog/si-column-selection-dialog.component.html (1)

5-5: LGTM - Consistent sizing standardization.

The removal of btn-sm from the cancel button completes the consistent sizing standardization across modal dialogs.

src/app/examples/si-datepicker/si-modal-service.html (1)

9-9: LGTM!

Removing btn-sm from the modal close button aligns with the PR's goal of standardizing button sizes across the component library.

src/app/examples/si-list-details/si-list-details.html (1)

23-23: LGTM!

Removing btn-sm from both the options and filters icon buttons standardizes their sizing with the rest of the component library.

Also applies to: 41-41

src/app/examples/si-wizard/si-wizard-forms.html (1)

8-8: LGTM!

Removing btn-sm from the modal close button is consistent with the standardization effort across modal components.

projects/element-ng/chat-messages/si-user-message.component.html (1)

19-19: LGTM!

Removing btn-sm from both action buttons standardizes their sizing. The changes maintain consistent styling for icon buttons within chat messages.

Also applies to: 31-31

projects/element-ng/chat-messages/si-attachment-list.component.html (1)

47-47: LGTM! Button size standardization improves accessibility.

Removing btn-sm increases the remove button to default size, providing a larger touch target which improves usability and accessibility. This change aligns with the PR-wide effort to standardize icon button sizing.

projects/element-ng/action-modal/si-confirmation-dialog/si-confirmation-dialog.component.html (1)

9-9: LGTM! Consistent modal close button sizing.

Removing btn-sm standardizes the close button size across all modal dialogs, improving consistency and click target size.

projects/element-ng/dashboard/widgets/si-list-widget/si-list-widget-item.component.html (1)

26-26: LGTM! Action button sizing improved.

Removing btn-sm provides better touch target for the list widget action button while maintaining all functionality and custom padding.

projects/dashboards-demo/src/app/components/widget-catalog/custom-widget-catalog.component.html (1)

5-5: LGTM! Demo app aligned with library button sizing.

Removing btn-sm ensures the demo application's modal close button matches the standardized sizing across the core library components.

src/app/examples/si-chat-messages/si-chat-container.html (2)

31-31: LGTM! Chat action button sizing standardized.

Removing btn-sm from the chat message action button improves touch target size and aligns with the button sizing standardization.


80-80: LGTM! Modal close button sizing consistent.

Removing btn-sm ensures the preview modal's close button matches the standardized sizing across all modal dialogs.

src/app/examples/si-map/si-map-custom-cluster-popover.ts (1)

26-26: LGTM! Button sizing standardization applied correctly.

The removal of btn-sm aligns with the PR's goal of standardizing button sizes across the component library. The button retains appropriate styling with btn-circle and btn-ghost.

projects/element-ng/threshold/si-threshold.component.html (1)

8-8: LGTM! Consistent button sizing updates.

The removal of btn-sm from both the delete button (line 8) and add button (line 53) standardizes the threshold component's button sizing, aligning with the PR's broader refactoring goals.

Also applies to: 53-53

docs/components/layout-navigation/modals.md (1)

82-82: LGTM! Documentation updated to reflect standardized button sizing.

The removal of btn-sm from the modal cancel button example ensures the documentation aligns with the updated button sizing standards being implemented across the component library.

src/app/examples/si-chat-messages/si-chat-message.html (1)

11-11: LGTM! Consistent button sizing updates across chat message actions.

The removal of btn-sm from all three chat message action buttons standardizes their sizing and aligns with the PR's broader button refactoring objectives.

Also applies to: 22-22, 43-43

projects/element-ng/main-detail-container/si-main-detail-container.component.html (1)

94-94: LGTM! Button sizing standardization applied correctly.

The removal of btn-sm from the back button aligns with the PR's objective to standardize icon and circular button sizing across the component library.

src/app/examples/si-list-details/si-list-details-router.html (1)

23-23: LGTM! Consistent button sizing standardization.

Both circular buttons (options and filter) correctly remove btn-sm to align with the new default sizing for icon buttons throughout the library.

Also applies to: 41-41

projects/element-ng/file-uploader/si-file-uploader.component.html (1)

64-64: LGTM! File uploader button sizing standardized.

All three circular action buttons (retry, remove, cancel) correctly remove btn-sm while preserving their functionality, accessibility attributes, and event handlers.

Also applies to: 76-76, 87-87

projects/element-ng/chat-messages/si-ai-message.component.html (1)

16-16: LGTM! AI message action buttons standardized.

Both action buttons correctly remove btn-sm to adopt the standardized default sizing for circular icon buttons, while maintaining all functionality and accessibility.

Also applies to: 28-28

projects/element-ng/chat-messages/si-chat-input.component.html (1)

53-53: LGTM! Chat input buttons fully standardized.

All four circular buttons (attachment, actions, secondary actions, and main action button) correctly remove btn-sm to align with the standardized icon button sizing, while preserving all functionality, event handlers, and accessibility attributes.

Also applies to: 67-67, 79-79, 100-100

projects/element-ng/notification-item/si-notification-item.component.html (4)

112-112: LGTM: Button sizing standardization.

The removal of btn-sm aligns with the PR's goal to standardize icon button sizing to default size.


122-122: LGTM: Consistent sizing update.

The sizing change is consistent with the overall standardization effort in this PR.


140-140: LGTM: Button sizing aligned.

Consistent removal of btn-sm for size standardization.


152-152: LGTM: Menu button sizing standardized.

The sizing update completes the consistent standardization across all notification item action buttons.

src/app/examples/buttons/buttons.html (3)

47-127: LGTM: Icon buttons positioned correctly per PR requirements.

The square icon buttons section is correctly positioned above the circle buttons section, aligning with the feedback that square buttons should be the new default icon buttons.


223-273: Verify that icon button sizing addresses the confusion mentioned in issue #1222.

The Icon button sizing section demonstrates all size variants (lg, default, sm, xs) for both square and circle icon buttons. However, past comments indicate sizing confusion that needs resolution for v49. Ensure this implementation aligns with the resolution plan for issue #1222.


47-127: Improved aria-labels address previous feedback.

The aria-labels have been enhanced from generic "badge" to include button variant context (e.g., "secondary badge", "tertiary warning badge"). This is an improvement over the previous iteration noted in past reviews.

Also applies to: 129-214

projects/element-ng/navbar-vertical/si-navbar-vertical.component.html (1)

20-20: LGTM: Sizing standardization for navbar toggle.

The removal of btn-sm standardizes the collapse toggle button to default size, consistent with the PR's sizing changes across the codebase.

projects/element-ng/application-header/launchpad/si-launchpad-factory.component.html (1)

91-91: LGTM: Button sizing standardized (note: summary inconsistency).

The button sizing update is consistent with the broader PR changes. However, the AI summary incorrectly states "removed btn-ghost" when the code clearly shows btn-ghost is still present. Based on the pattern across other files, btn-sm was likely removed.

src/app/examples/si-modals/app-table.component.html (1)

6-6: LGTM: Modal close button sizing standardized.

The removal of btn-sm aligns with the consistent sizing updates for close buttons across modal components in this PR.

src/app/examples/si-chat-messages/si-chat-input.html (1)

27-27: LGTM - Button sizing standardization

The removal of btn-sm aligns with the PR's button sizing standardization effort, changing the emoji picker button from small to default size while preserving all functionality and attributes.

src/app/examples/si-dashboard/si-list-widget-css.html (1)

20-20: LGTM - Consistent sizing across list actions

The removal of btn-sm from all six list item action buttons consistently standardizes their size to default, maintaining uniform appearance across the widget.

Also applies to: 31-31, 42-42, 53-53, 64-64, 75-75

src/app/examples/buttons/buttoncategories.html (3)

12-19: LGTM - Circular navigation buttons now prominent with btn-lg

Adding btn-lg to the left/right navigation buttons increases their size appropriately, making them more prominent in the button category examples.


24-36: LGTM - Standardized sizing for icon buttons

Removing btn-sm from the plus, delete, and options buttons standardizes them to default size, which aligns with the broader sizing refactor.


1-39: Missing square btn-icon demonstration per PR objectives

According to the PR title ("feat(buttons): add square btn-icon") and kfenner's comment, square buttons using the new btn-icon class should be demonstrated in this buttons example page, positioned above the circle buttons as the new default icon buttons. However, no btn-icon buttons are visible in this template.

Should this file include examples of the new square btn-icon variant? Based on the PR objectives, it appears square icon buttons should be added here to showcase the new feature.

projects/element-ng/column-selection-dialog/column-selection-editor/si-column-selection-editor.component.html (1)

29-35: LGTM - Standardized sizing for editor controls

Removing btn-sm from both the visibility toggle and drag-handle buttons standardizes their size to default while preserving all functionality, state management, and accessibility attributes.

Also applies to: 39-47

projects/element-ng/side-panel/si-side-panel-content.component.html (1)

17-35: LGTM - Comprehensive sizing standardization across side panel controls

Removing btn-sm from all five side panel header buttons (navigate links, fullscreen, close, and collapse toggle) consistently standardizes their size to default. All functionality, conditional rendering, accessibility attributes, and event bindings remain intact.

Also applies to: 38-50, 56-66, 70-76, 80-89

src/app/examples/datatable/bootstrap.html (1)

41-41: LGTM! Consistent button size standardization.

The removal of btn-sm from these circular icon buttons standardizes them to the default size, aligning with the broader refactoring effort across the project to consolidate icon button sizing.

Also applies to: 75-75, 104-104, 133-133

projects/dashboards-ng/src/components/dashboard-toolbar/si-dashboard-toolbar.component.html (1)

10-12: LGTM! Icon button sizing standardized.

The removal of btn-sm from the circular edit button aligns with the project-wide button sizing standardization. The single-line ternary format also improves readability.

projects/element-theme/src/styles/bootstrap/_button-group.scss (1)

55-58: LGTM! Proper button group integration for icon buttons.

The new .btn-icon rule correctly integrates icon buttons into the button group sizing system by resetting the width constraint and applying consistent padding. The calculation accounts for border width using spacer tokens, matching the established pattern in this file (e.g., line 89).

projects/element-theme/src/styles/bootstrap/_buttons.scss (4)

11-18: Well-structured icon button size variables.

The new $btn-icon-* variables provide clear, consistent sizing tokens for icon buttons across all size variants (default, lg, sm, xs). The naming convention aligns with existing button sizing patterns.


154-171: Excellent consolidation enabling composability.

The refactored structure successfully achieves multiple goals:

  1. Consolidated shared styles (lines 155-163): The :is() selector unifies display, padding, and icon margin handling for all icon-related button variants while correctly excluding button-group contexts.

  2. Composable architecture (lines 165-171): Separating border-radius rules allows developers to combine classes (btn btn-icon btn-circle) to create circular icon buttons, with .btn-icon as the base and .btn-circle as a modifier.

This design addresses the feedback from past reviews about making square the default with circle as a variation.


173-195: LGTM! Unified sizing across icon button variants.

The shared sizing block correctly applies consistent dimensions and font sizes to both .btn-circle and .btn-icon across all size variants (default, lg, sm, xs), eliminating duplication while maintaining flexibility.


197-204: Good addition of ghost styling for icon buttons.

Adding .btn-icon.btn-ghost (line 198) ensures the ghost variant works correctly with the new square icon buttons, maintaining styling consistency with the existing circular ghost buttons.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🤖 Fix all issues with AI agents
In @src/app/examples/si-dashboard/si-list-widget-css.html:
- Line 20: The refactor removed btn-sm from some button instances but left other
identical patterns (small variants) in btn-icon and btn-circle buttons; search
for remaining "btn-sm" usages in the UI examples—specifically in
src/app/examples/buttons/buttons.html around the btn-icon and btn-circle
examples (lines noted in review) and either remove the btn-sm class to match the
refactor or explicitly document/annotate those occurrences as intentional
small-variant examples; update the markup for the matching examples (btn-icon,
btn-circle) to remove btn-sm or add a comment clarifying they are deliberate
examples so the change is consistent across the codebase.

In @src/app/examples/si-modals/si-modal-service.html:
- Line 32: One close button elsewhere still has a size modifier; locate the
close button element using the classes "btn-circle" and "element-cancel" (the
one that also includes "btn-xs") and remove the "btn-xs" class so it matches the
other modal header close buttons (i.e., only "btn-circle btn-ghost
element-cancel" remain); ensure no other size modifiers are present on similar
"btn-circle element-cancel" buttons to keep sizes consistent.

In @src/app/examples/si-wizard/si-wizard-forms.html:
- Line 8: Replace the circular icon button class with the new square variant:
locate the close button element that currently has classes "btn btn-circle
btn-ghost element-cancel" (use the element with class element-cancel to find it)
and change the styling class from btn-circle to btn-icon so it becomes "btn
btn-icon btn-ghost element-cancel", leaving other classes intact.
📜 Review details

Configuration used: Path: .coderabbit.yml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 294f5c1 and 46d7a09.

⛔ Files ignored due to path filters (2)
  • playwright/snapshots/static.spec.ts-snapshots/buttons--buttons-element-examples-chromium-dark-linux.png is excluded by !**/*.png
  • playwright/snapshots/static.spec.ts-snapshots/buttons--buttons-element-examples-chromium-light-linux.png is excluded by !**/*.png
📒 Files selected for processing (48)
  • docs/components/layout-navigation/modals.md
  • projects/dashboards-demo/src/app/components/widget-catalog/custom-widget-catalog.component.html
  • projects/dashboards-ng/src/components/dashboard-toolbar/si-dashboard-toolbar.component.html
  • projects/element-ng/action-modal/si-alert-dialog/si-alert-dialog.component.html
  • projects/element-ng/action-modal/si-confirmation-dialog/si-confirmation-dialog.component.html
  • projects/element-ng/action-modal/si-delete-confirmation-dialog/si-delete-confirmation-dialog.component.html
  • projects/element-ng/action-modal/si-edit-discard-dialog/si-edit-discard-dialog.component.html
  • projects/element-ng/application-header/launchpad/si-launchpad-factory.component.html
  • projects/element-ng/chat-messages/si-ai-message.component.html
  • projects/element-ng/chat-messages/si-attachment-list.component.html
  • projects/element-ng/chat-messages/si-chat-input.component.html
  • projects/element-ng/chat-messages/si-user-message.component.html
  • projects/element-ng/column-selection-dialog/column-selection-editor/si-column-selection-editor.component.html
  • projects/element-ng/column-selection-dialog/si-column-selection-dialog.component.html
  • projects/element-ng/dashboard/widgets/si-list-widget/si-list-widget-item.component.html
  • projects/element-ng/dashboard/widgets/si-timeline-widget/si-timeline-widget-item.component.html
  • projects/element-ng/datepicker/components/si-calendar-direction-button.component.ts
  • projects/element-ng/file-uploader/si-file-uploader.component.html
  • projects/element-ng/main-detail-container/si-main-detail-container.component.html
  • projects/element-ng/navbar-vertical/si-navbar-vertical.component.html
  • projects/element-ng/notification-item/si-notification-item.component.html
  • projects/element-ng/photo-upload/si-photo-upload.component.html
  • projects/element-ng/side-panel/si-side-panel-content.component.html
  • projects/element-ng/slider/si-slider.component.html
  • projects/element-ng/status-bar/si-status-bar.component.html
  • projects/element-ng/threshold/si-threshold.component.html
  • projects/element-ng/toast-notification/si-toast-notification/si-toast-notification.component.html
  • projects/element-ng/tour/si-tour.component.html
  • projects/element-ng/tree-view/si-tree-view.component.html
  • projects/element-ng/wizard/si-wizard.component.html
  • projects/element-theme/src/styles/bootstrap/_buttons.scss
  • src/app/examples/buttons/buttoncategories.html
  • src/app/examples/buttons/buttons.html
  • src/app/examples/datatable/bootstrap.html
  • src/app/examples/datatable/datatable-grouped-rows.html
  • src/app/examples/si-chat-messages/si-attachment-list.html
  • src/app/examples/si-chat-messages/si-chat-container.html
  • src/app/examples/si-chat-messages/si-chat-input.html
  • src/app/examples/si-chat-messages/si-chat-message.html
  • src/app/examples/si-dashboard/si-list-widget-css.html
  • src/app/examples/si-datepicker/si-modal-service.html
  • src/app/examples/si-list-details/si-list-details-router.html
  • src/app/examples/si-list-details/si-list-details.html
  • src/app/examples/si-map/si-map-custom-cluster-popover.ts
  • src/app/examples/si-modals/app-table.component.html
  • src/app/examples/si-modals/si-modal-service.html
  • src/app/examples/si-notification-item/si-notification-item.html
  • src/app/examples/si-wizard/si-wizard-forms.html
🧰 Additional context used
🧠 Learnings (14)
📚 Learning: 2025-12-09T14:31:33.543Z
Learnt from: Killusions
Repo: siemens/element PR: 998
File: projects/element-ng/chat-messages/si-ai-chat-container.component.html:14-50
Timestamp: 2025-12-09T14:31:33.543Z
Learning: In projects/element-ng/chat-messages/si-ai-chat-container.component.html, message IDs can change, so tracking by message.id is not appropriate. The component uses `track message` (object identity) which is the correct approach for this use case.

Applied to files:

  • src/app/examples/si-chat-messages/si-chat-container.html
  • projects/element-ng/chat-messages/si-user-message.component.html
  • src/app/examples/si-chat-messages/si-chat-message.html
  • projects/element-ng/chat-messages/si-attachment-list.component.html
  • projects/element-ng/chat-messages/si-ai-message.component.html
  • projects/element-ng/chat-messages/si-chat-input.component.html
📚 Learning: 2025-12-17T14:01:05.705Z
Learnt from: dauriamarco
Repo: siemens/element PR: 908
File: projects/element-ng/side-panel/si-side-panel.component.ts:70-74
Timestamp: 2025-12-17T14:01:05.705Z
Learning: In the Element side-panel component (projects/element-ng/side-panel/si-side-panel.component.ts), the `xxxlMinimum` breakpoint (1920px) is intentionally hardcoded as a private static constant rather than being part of the configurable `Breakpoints` interface. This design preserves full Bootstrap compatibility (which only defines breakpoints up to xxl/1400px) while allowing Element to handle ultra-wide screens explicitly without affecting the standard breakpoint configuration.

Applied to files:

  • projects/element-ng/side-panel/si-side-panel-content.component.html
  • projects/element-ng/threshold/si-threshold.component.html
  • projects/element-ng/navbar-vertical/si-navbar-vertical.component.html
📚 Learning: 2025-12-22T13:04:35.578Z
Learnt from: mistrykaran91
Repo: siemens/element PR: 1234
File: src/app/examples/ag-grid/ag-grid-empty-state.ts:20-24
Timestamp: 2025-12-22T13:04:35.578Z
Learning: The SiEmptyStateComponent in siemens/element-ng accepts icon names in kebab-case format (e.g., 'element-technical-operator') that may not be directly exported as constants in the element-icons.ts file. Do not flag these as errors if they render correctly at runtime.

Applied to files:

  • projects/element-ng/tour/si-tour.component.html
  • projects/element-ng/column-selection-dialog/column-selection-editor/si-column-selection-editor.component.html
  • projects/element-ng/status-bar/si-status-bar.component.html
  • projects/element-ng/threshold/si-threshold.component.html
  • projects/element-ng/chat-messages/si-user-message.component.html
  • projects/element-ng/dashboard/widgets/si-list-widget/si-list-widget-item.component.html
  • projects/element-ng/file-uploader/si-file-uploader.component.html
  • projects/element-ng/navbar-vertical/si-navbar-vertical.component.html
  • projects/element-ng/tree-view/si-tree-view.component.html
  • projects/element-ng/dashboard/widgets/si-timeline-widget/si-timeline-widget-item.component.html
  • projects/element-ng/chat-messages/si-chat-input.component.html
📚 Learning: 2025-12-11T14:44:11.278Z
Learnt from: spike-rabbit
Repo: siemens/element PR: 1185
File: projects/element-ng/navbar/si-navbar-item/si-navbar-item.component.html:11-11
Timestamp: 2025-12-11T14:44:11.278Z
Learning: The si-icon component in siemens/element-ng/icon automatically applies aria-hidden="true" to its content. Do not suggest adding aria-hidden="true" to si-icon elements, as accessibility is already handled internally by the component.

Applied to files:

  • projects/element-ng/tour/si-tour.component.html
  • src/app/examples/buttons/buttons.html
  • projects/element-ng/status-bar/si-status-bar.component.html
  • projects/element-ng/datepicker/components/si-calendar-direction-button.component.ts
  • projects/element-ng/navbar-vertical/si-navbar-vertical.component.html
  • projects/element-ng/dashboard/widgets/si-timeline-widget/si-timeline-widget-item.component.html
📚 Learning: 2026-01-02T16:41:48.359Z
Learnt from: kfenner
Repo: siemens/element PR: 1005
File: docs/fundamentals/styles/sizing.md:18-26
Timestamp: 2026-01-02T16:41:48.359Z
Learning: In Element docs, sizing examples may differ between documentation and implementation to illustrate multiple valid approaches. Do not flag such differences as inconsistencies; treat them as separate illustrative examples (e.g., using height/width in docs vs block-size/inline-size in implementation). Apply this understanding across Markdown documentation files to avoid false-positive review flags.

Applied to files:

  • docs/components/layout-navigation/modals.md
📚 Learning: 2025-12-03T13:02:34.875Z
Learnt from: spike-rabbit
Repo: siemens/element PR: 1058
File: docs/fundamentals/layouts/breakpoints.md:25-31
Timestamp: 2025-12-03T13:02:34.875Z
Learning: In Element documentation for CSS breakpoints and class infixes (e.g., in docs/fundamentals/layouts/breakpoints.md), _None_ is formatted with italics to indicate the absence of a class infix (representing base mobile-first styles), while actual CSS class infixes like `sm`, `md`, `lg`, `xl`, `xxl` use inline code formatting with backticks. This semantic formatting distinction is intentional.

Applied to files:

  • src/app/examples/buttons/buttons.html
📚 Learning: 2026-01-02T16:41:57.274Z
Learnt from: kfenner
Repo: siemens/element PR: 1005
File: docs/fundamentals/styles/sizing.md:18-26
Timestamp: 2026-01-02T16:41:57.274Z
Learning: In Element documentation (siemens/element), sizing utility examples in docs may intentionally differ from implementation examples to demonstrate multiple valid approaches - for example, documentation might use traditional CSS properties like `height` and `width` while the implementation example uses logical properties like `block-size` and `inline-size`. These are considered different examples rather than inconsistencies.

Applied to files:

  • src/app/examples/buttons/buttons.html
📚 Learning: 2025-12-22T13:16:19.243Z
Learnt from: mistrykaran91
Repo: siemens/element PR: 1234
File: projects/element-ng/icon/element-icons.ts:166-167
Timestamp: 2025-12-22T13:16:19.243Z
Learning: In projects/element-ng/icon/element-icons.ts, the elementCheckedImageShape icon intentionally uses base64 encoding instead of utf8 encoding (which is used for other icons). This approach is considered safer and correct for this specific icon and should not be flagged as an inconsistency.

Applied to files:

  • projects/element-ng/status-bar/si-status-bar.component.html
📚 Learning: 2025-12-09T14:32:26.166Z
Learnt from: Killusions
Repo: siemens/element PR: 998
File: projects/element-ng/chat-messages/si-ai-chat-container.component.html:21-47
Timestamp: 2025-12-09T14:32:26.166Z
Learning: In Angular templates, prefer using nested *ngIf blocks over *ngSwitch for branching on message types within the chat-messages components. Use *ngIf with else branches to handle distinct cases and avoid complex switch logic in HTML templates. This guideline applies to all HTML templates under projects/element-ng/chat-messages.

Applied to files:

  • projects/element-ng/chat-messages/si-user-message.component.html
  • projects/element-ng/chat-messages/si-attachment-list.component.html
  • projects/element-ng/chat-messages/si-ai-message.component.html
  • projects/element-ng/chat-messages/si-chat-input.component.html
📚 Learning: 2025-11-18T12:37:30.510Z
Learnt from: Killusions
Repo: siemens/element PR: 1040
File: projects/element-ng/chat-messages/si-chat-input.component.ts:338-349
Timestamp: 2025-11-18T12:37:30.510Z
Learning: In projects/element-ng/chat-messages/si-chat-input.component.ts, the interrupt behavior is intentionally different for button clicks vs Enter key: the button can emit interrupt even without content, but pressing Enter requires content or attachments (canSend() must be true) to emit interrupt.

Applied to files:

  • projects/element-ng/chat-messages/si-user-message.component.html
  • projects/element-ng/chat-messages/si-attachment-list.component.html
  • projects/element-ng/chat-messages/si-ai-message.component.html
  • projects/element-ng/chat-messages/si-chat-input.component.html
📚 Learning: 2025-12-09T14:33:54.441Z
Learnt from: Killusions
Repo: siemens/element PR: 998
File: src/app/examples/si-chat-messages/si-ai-message.ts:24-43
Timestamp: 2025-12-09T14:33:54.441Z
Learning: In src/app/examples/ (example/demo code) directories, allow and expect code duplication. Treat duplication as acceptable for demonstration code that aims to illustrate usage rather than enforce DRY. Do not enforce refactoring to remove duplication in example files; focus on readability and clarity of examples. This applies to all TypeScript files under src/app/examples (including nested subdirectories like si-chat-messages).

Applied to files:

  • src/app/examples/si-map/si-map-custom-cluster-popover.ts
📚 Learning: 2025-12-17T04:34:55.597Z
Learnt from: chintankavathia
Repo: siemens/element PR: 1173
File: src/app/examples/si-charts/interactive/interactive.ts:5-5
Timestamp: 2025-12-17T04:34:55.597Z
Learning: Guideline: In Angular projects using OnPush change detection (zoneless mode), you only need to call ChangeDetectorRef.markForCheck() for asynchronous operations (e.g., setTimeout, setInterval, Promises, Observables) where a change is not automatically detected. Event handlers triggered by Angular template bindings (click, input, etc.) will trigger change detection automatically and do not require explicit markForCheck() calls. Apply this broadly to TS files within Angular components/services that use OnPush; use markForCheck() selectively for async work where change detection wouldn’t run otherwise.

Applied to files:

  • src/app/examples/si-map/si-map-custom-cluster-popover.ts
  • projects/element-ng/datepicker/components/si-calendar-direction-button.component.ts
📚 Learning: 2025-12-22T13:29:36.922Z
Learnt from: mistrykaran91
Repo: siemens/element PR: 1234
File: projects/element-ng/ag-grid/parts/color-scheme.part.ts:35-35
Timestamp: 2025-12-22T13:29:36.922Z
Learning: In the Element design system (projects/element-ng/theme and projects/element-theme), only `--element-body-font-family` is exposed as a CSS custom property for typography. Font sizes are NOT exposed as CSS custom properties; they are defined using internal SCSS variables (e.g., `typography.$si-font-size-body`) that compile to fixed values. Using hardcoded pixel values for fontSize in AG Grid theme configuration (e.g., `fontSize: '14px'`) is the correct approach.

Applied to files:

  • projects/element-theme/src/styles/bootstrap/_buttons.scss
📚 Learning: 2025-12-30T13:52:33.581Z
Learnt from: dauriamarco
Repo: siemens/element PR: 1221
File: projects/element-ng/side-panel/si-side-panel.component.ts:136-142
Timestamp: 2025-12-30T13:52:33.581Z
Learning: Maintain the existing negative naming convention (e.g., disableBackdrop) across the siemens/element repository for consistency. Do not refactor to positive names (e.g., showBackdrop, hasBackdrop) unless the project explicitly changes the convention. In reviews, flag changes that alter established naming patterns in related files under projects/element-ng.

Applied to files:

  • projects/element-ng/datepicker/components/si-calendar-direction-button.component.ts
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (64)
projects/element-ng/wizard/si-wizard.component.html (1)

124-124: LGTM! Consistent sizing with other wizard buttons.

Removing btn-sm aligns this cancel button with the other circle buttons in the horizontal wizard (lines 194, 211), which already use the default size. This change is consistent with the PR's objective to establish a unified default size for icon and circle buttons.

src/app/examples/si-map/si-map-custom-cluster-popover.ts (1)

24-31: LGTM! Button sizing change aligns with PR objectives.

The removal of btn-sm is consistent with the PR's goal to establish a new default size for icon buttons across the codebase. The button functionality, accessibility (aria-label), and event handling remain unchanged—this is purely a visual styling update.

projects/element-ng/action-modal/si-confirmation-dialog/si-confirmation-dialog.component.html (1)

7-14: LGTM! Button size refactoring aligns with PR objectives.

The removal of btn-sm from the cancel button is consistent with the PR's goal to establish a new default size for icon buttons. The button maintains proper accessibility with the aria-label attribute and correct event handling.

projects/element-ng/tour/si-tour.component.html (1)

32-32: LGTM - sizing concern addressed.

Thank you for clarifying that the button sizing system has been realigned across the board. The removal of btn-sm maintains the intended size while simplifying the button styling system, which aligns with the PR's objectives.

projects/element-ng/column-selection-dialog/column-selection-editor/si-column-selection-editor.component.html (1)

29-29: LGTM! Consistent with button sizing standardization.

The removal of btn-sm from both the visibility toggle and drag-handle buttons aligns with the PR's broader effort to establish a new default size for icon and circle buttons across approximately 40 templates.

Also applies to: 39-39

projects/dashboards-demo/src/app/components/widget-catalog/custom-widget-catalog.component.html (1)

3-9: LGTM! Sizing change aligns with PR objectives.

The removal of btn-sm from the close button is consistent with the PR's systematic consolidation of icon button sizing. The button structure is correct with proper accessibility attributes (aria-label="Close").

Since this establishes a new default size for icon buttons, verify that the larger button size looks appropriate in the modal header UI.

projects/dashboards-ng/src/components/dashboard-toolbar/si-dashboard-toolbar.component.html (1)

10-12: LGTM! Formatting and size standardization look good.

The single-line ternary improves readability, and the removal of btn-sm aligns with the PR's goal to establish a new default size for icon buttons.

src/app/examples/si-notification-item/si-notification-item.html (3)

68-74: LGTM! Larger button improves touch targets.

The removal of btn-sm establishes the new default size for circle buttons and improves accessibility by providing a larger touch target for the approval action.


75-81: LGTM! Consistent sizing with approval button.

The removal of btn-sm ensures both approve and reject buttons have consistent sizing, maintaining visual harmony in the action pair.


110-116: LGTM! Consistent with sizing updates.

The removal of btn-sm aligns this button with the new default sizing established throughout the notification item examples.

projects/element-ng/action-modal/si-delete-confirmation-dialog/si-delete-confirmation-dialog.component.html (1)

7-14: Should this use the new square btn-icon variant instead of btn-circle?

Based on the PR objectives to introduce square btn-icon as the new default for icon buttons, consider whether this modal cancel button should migrate from btn-circle to btn-icon. Modal close buttons are a standard icon button use case and appear to fit the scope of the standardization effort.

src/app/examples/si-modals/app-table.component.html (1)

6-6: LGTM! Size modifier removal is consistent with other modal close buttons.

The change aligns with the broader pattern of removing btn-sm from modal close buttons throughout the codebase.

src/app/examples/si-datepicker/si-modal-service.html (1)

9-9: LGTM! Consistent with the established pattern.

The btn-sm removal from this modal close button follows the same pattern as the other modal examples, ensuring visual consistency across the component library.

src/app/examples/si-list-details/si-list-details-router.html (1)

23-23: The removal of btn-sm is correct, but the suggestion to adopt btn-icon appears to be beyond this PR's scope.

This PR focuses on button sizing alignment (removing btn-sm and establishing new default sizes), which is properly applied here. However, the concern about converting btn-circle to btn-icon (square variant) conflates this with a separate styling concern. While buttons.html demonstrates btn-icon for icon-only buttons, other example files throughout the codebase still use btn-circle for similar purposes, indicating both patterns coexist. Unless this file is specifically targeted for shape variant updates in this PR, the btn-circle buttons remain valid.

projects/element-ng/application-header/launchpad/si-launchpad-factory.component.html (1)

91-91: LGTM: Button sizing standardization applied correctly.

The removal of btn-sm aligns with the PR's goal of establishing a new default size for icon buttons.

projects/element-ng/status-bar/si-status-bar.component.html (1)

110-110: LGTM: Size standardization applied as planned.

The removal of btn-sm is consistent with the PR's incremental approach. As discussed in previous reviews, the migration to the new btn-icon pattern will be handled in a separate PR.

projects/element-ng/chat-messages/si-attachment-list.component.html (1)

47-47: LGTM: Consistent button sizing update.

The removal of btn-sm correctly implements the size standardization for icon buttons across the attachment component.

src/app/examples/buttons/buttoncategories.html (2)

12-19: LGTM: Navigation buttons sized for emphasis.

Adding btn-lg to the left/right navigation buttons creates appropriate visual hierarchy, distinguishing primary navigation actions from utility buttons.


24-36: LGTM: Utility buttons standardized to default size.

The removal of btn-sm from the plus, delete, and options buttons establishes the new default sizing for utility icon buttons, creating a clear distinction from the larger navigation buttons.

projects/element-ng/column-selection-dialog/si-column-selection-dialog.component.html (1)

5-5: LGTM: Modal close button sizing standardized.

The removal of btn-sm correctly applies the new default sizing to the modal's close button, consistent with the button sizing standardization across the codebase.

src/app/examples/si-list-details/si-list-details.html (1)

23-23: LGTM! Button sizing standardization applied correctly.

The removal of btn-sm from both the options and filters buttons aligns with the PR's objective to establish a new default size for icon-only buttons.

Also applies to: 41-41

projects/element-ng/action-modal/si-edit-discard-dialog/si-edit-discard-dialog.component.html (1)

9-9: LGTM! Modal header button sizing updated.

The removal of btn-sm from the cancel button is consistent with the sizing refactor across the codebase.

projects/element-ng/chat-messages/si-user-message.component.html (1)

19-19: LGTM! Chat message action buttons updated consistently.

The removal of btn-sm from both the per-action buttons and the secondary actions menu button aligns with the PR's sizing standardization.

Also applies to: 31-31

projects/element-ng/datepicker/components/si-calendar-direction-button.component.ts (1)

24-24: LGTM! Calendar direction buttons correctly use circular shape.

The btn-circle btn-tertiary implementation is correct per the design system guidelines, which explicitly state "Use circular shapes for icon-only buttons" (buttons.md, line 63). The removal of btn-sm aligns with the sizing refactor.

projects/element-ng/slider/si-slider.component.html (1)

4-4: Confirm whether slider buttons should use btn-icon or remain btn-circle.

The buttons currently use btn-circle, but the codebase shows btn-icon is the standard pattern for icon-only buttons (used throughout buttons.html, button-groups.html, split-button.html, etc.). Since these slider buttons contain only icons with no text, verify whether they should be updated to btn-icon to align with the standard, or if circular buttons are the intended design for slider controls.

projects/element-ng/main-detail-container/si-main-detail-container.component.html (1)

94-94: LGTM! Sizing update aligns with PR objectives.

The removal of btn-sm establishes the new default size for circle buttons, consistent with the systematic sizing standardization across the codebase.

projects/element-ng/dashboard/widgets/si-list-widget/si-list-widget-item.component.html (1)

26-26: LGTM! Consistent sizing update.

The removal of btn-sm from the action button aligns with the broader refactoring to standardize button sizes across components.

docs/components/layout-navigation/modals.md (1)

82-82: LGTM! Documentation synchronized with implementation.

The code example correctly reflects the new default button sizing, ensuring documentation stays consistent with the updated design system.

projects/element-ng/tree-view/si-tree-view.component.html (1)

4-4: LGTM! Expand/collapse buttons updated consistently.

Both expand-all and collapse-all buttons have been updated to use the new default size, maintaining visual consistency in the tree view controls.

Also applies to: 12-12

src/app/examples/si-dashboard/si-list-widget-css.html (1)

20-20: LGTM! All list action buttons updated consistently.

All six export buttons have been uniformly updated to use the new default size, ensuring visual consistency across the list widget example.

Also applies to: 31-31, 42-42, 53-53, 64-64, 75-75

projects/element-ng/file-uploader/si-file-uploader.component.html (1)

64-64: LGTM! Consistent removal of btn-sm aligns with new default icon button sizing.

The removal of the btn-sm modifier from the retry, remove, and cancel buttons is consistent with the PR's objective to establish a new default size for icon buttons. The buttons retain all their functionality and semantic classes.

Also applies to: 76-76, 87-87

projects/element-ng/chat-messages/si-ai-message.component.html (1)

16-16: LGTM! Button sizing update is consistent with the design system changes.

The removal of btn-sm from both action buttons aligns with the standardized icon button sizing introduced in this PR. All functionality, accessibility attributes, and event handling remain intact.

Also applies to: 28-28

projects/element-theme/src/styles/bootstrap/_buttons.scss (6)

11-18: LGTM! Well-structured icon button size variables.

The new size and font-size variables for icon buttons are clearly named, consistently structured, and appropriately flagged with !default for customization. The size progression (24px → 28px → 32px → 40px) provides a coherent sizing scale.


154-163: LGTM! Excellent consolidation of shared icon button properties.

The unified selector :is(.btn-circle, .btn-icon, .btn-close):not(.btn-group .btn) effectively applies common styling (zero padding, inline-flex display, icon margin reset) across all icon button variants while correctly excluding button-group contexts where different rules apply. This reduces duplication and maintains clear separation of concerns.


165-171: LGTM! Correct semantic layering of icon button variants.

The separate selectors establish .btn-icon as the base variant (square border-radius) and .btn-circle as the specialized variant (50% border-radius). The source order ensures that combining both classes (class="btn btn-icon btn-circle") correctly results in a circular button, with .btn-circle overriding the square radius. This implements the intended semantic hierarchy.


173-195: LGTM! Unified sizing ensures consistency across icon button variants.

The combined sizing rules for .btn-circle and .btn-icon ensure both variants maintain consistent dimensions across all size modifiers (default, lg, sm, xs). Using the button-circle-size mixin with the new $btn-icon-size-* variables provides a clean, maintainable approach that prevents sizing drift between square and circular icon buttons.


197-204: LGTM! Ghost styling correctly extended to new icon button variant.

Adding .btn-icon.btn-ghost to the selector ensures the new square icon buttons support the ghost variant styling, maintaining feature parity with .btn-circle.btn-ghost. This is essential for consistent theming across icon button shapes.


216-230: LGTM! Close button sizing updated for consistency with new icon button system.

The .btn-close now uses the unified icon button sizing via the button-circle-size mixin, ensuring visual consistency with .btn-circle and .btn-icon while preserving legacy compatibility styling (::before content and child element hiding). This maintains backward compatibility while aligning with the new design system.

projects/element-ng/action-modal/si-alert-dialog/si-alert-dialog.component.html (1)

9-9: LGTM! Modal close button sizing updated consistently.

Removing btn-sm from the modal header close button aligns with the standardized icon button sizing. All functionality and accessibility attributes are preserved.

projects/element-ng/navbar-vertical/si-navbar-vertical.component.html (1)

20-20: LGTM! Navigation collapse button sizing updated consistently.

Removing btn-sm from the navbar collapse toggle button aligns with the new default icon button sizing established in this PR. The button's functionality, accessibility, and state management remain unchanged.

projects/element-ng/threshold/si-threshold.component.html (2)

6-13: LGTM: Button sizing standardization applied correctly.

The removal of btn-sm aligns with the PR's goal to establish a new default size for icon-only and circle buttons.


51-59: LGTM: Consistent with sizing standardization.

The removal of btn-sm is consistent with the delete button above and the overall PR objective.

projects/element-ng/side-panel/si-side-panel-content.component.html (5)

16-35: LGTM: Navigation button sizing updated.

The removal of btn-sm from the router-link anchor is consistent with the button sizing standardization.


37-50: LGTM: Consistent with router-link button above.


54-66: LGTM: Fullscreen button sizing standardized.


68-76: LGTM: Close button sizing updated.


78-89: LGTM: Collapse toggle sizing standardized.

projects/element-ng/chat-messages/si-chat-input.component.html (4)

51-59: LGTM: Attachment button sizing standardized.


65-73: LGTM: Action buttons sizing updated.


77-85: LGTM: Secondary actions button sizing standardized.


98-106: LGTM: Main action button sizing updated.

src/app/examples/si-chat-messages/si-attachment-list.html (1)

18-24: LGTM: Modal close button sizing standardized.

src/app/examples/datatable/datatable-grouped-rows.html (1)

19-27: LGTM: Group toggle button sizing standardized.

The removal of btn-sm is consistent with the project-wide button sizing refactoring.

src/app/examples/si-chat-messages/si-chat-container.html (2)

31-31: LGTM!

The standardized button sizing for chat message actions is consistent with the PR-wide refactoring.


80-80: LGTM!

Modal close button sizing standardization is consistent with similar changes across other modal templates in the PR.

projects/element-ng/photo-upload/si-photo-upload.component.html (1)

64-64: LGTM!

The modal close button sizing standardization is consistent with the PR-wide effort to establish default sizing for icon buttons.

src/app/examples/si-chat-messages/si-chat-input.html (1)

27-27: LGTM!

The emoji picker button sizing standardization aligns with the broader effort to establish consistent default sizing for icon buttons across the chat UI.

src/app/examples/si-chat-messages/si-chat-message.html (1)

11-11: LGTM!

The consistent removal of btn-sm from all chat message action buttons standardizes their sizing across different message alignments and action positions. This aligns with the PR-wide button sizing refactoring.

Also applies to: 22-22, 43-43

projects/element-ng/toast-notification/si-toast-notification/si-toast-notification.component.html (1)

34-34: Button size standardization is consistent across toast files.

The removal of btn-sm is complete with no remaining instances in toast-related files. The close button classes (btn btn-circle btn-ghost) are consistent, and the negative margins (mt-n2 me-n2) remain in place to manage spacing for the default-sized button.

Visual verification in the toast context would be beneficial to confirm the larger button does not cause layout overflow with these negative margins.

src/app/examples/datatable/bootstrap.html (1)

41-41: LGTM! Verify table layout with larger button size.

The removal of btn-sm from these circle dropdown buttons aligns with the PR's goal of establishing a new default size for icon buttons. Ensure that the larger button size doesn't negatively impact the table's visual hierarchy or spacing.

Also applies to: 75-75, 104-104, 133-133

projects/element-ng/notification-item/si-notification-item.component.html (1)

112-112: LGTM! Consistent size standardization across notification action buttons.

The removal of btn-sm from all notification item action buttons (action buttons, router links, links, and menu triggers) is consistent with the PR's goal of standardizing icon button sizing.

Also applies to: 122-122, 140-140, 152-152

src/app/examples/buttons/buttons.html (2)

47-214: Icon button section ordering aligns with PR feedback.

The restructure correctly positions square icon buttons (lines 47-127) before circle buttons (lines 129-214), which aligns with kfenner's recommendation in the PR objectives that square buttons should be the new default icon buttons.

Based on PR objectives feedback from kfenner.


223-273: Icon button sizing examples answer the xs variant question.

The Icon button sizing section demonstrates all size variants (lg, default, sm, xs) for both square and circle icon buttons, including the xs variant that kfenner asked about in previous comments (lines 263, 269).

Given kfenner's earlier concern that icon button sizing is "utterly confusing" and needs resolution for v49, and dauriamarco's reference to issue #1222 for future alignment, this section provides comprehensive examples but may benefit from the planned sizing consolidation.

projects/element-ng/dashboard/widgets/si-timeline-widget/si-timeline-widget-item.component.html (1)

27-84: Verify whether buttons should follow the documented btn-icon pattern.

The timeline widget action buttons use btn-circle for icon-only buttons, which is consistent across the element-ng codebase. However, the official button documentation (button-group.md) specifies btn-icon as the standard class for icon-only buttons. Clarify whether btn-circle is an intentional alternative for this component context or whether these buttons should be updated to use btn-icon to align with the documented button pattern.

Likely an incorrect or invalid review comment.

@dauriamarco dauriamarco added the breaking-changes Marks issues and PRs that are breaking the API label Jan 7, 2026
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 5

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
projects/element-ng/dashboard/widgets/si-list-widget/si-list-widget-item.component.html (1)

24-33: Consider migrating to the square .btn-icon variant and verify manual padding.

Per the PR objectives, square buttons (.btn-icon) should be the new default for icon buttons, with .btn-circle reserved for cases where a circular shape is specifically needed. Additionally, the manual p-2 padding class may be redundant or conflict with the new unified sizing system introduced in this PR.

Consider:

  1. Replacing btn-circle with btn-icon to align with the new default, unless a circular button is specifically required here
  2. Verifying whether the p-2 padding is still needed, as the unified .btn-icon sizing rules may already handle padding appropriately
🔄 Suggested migration to square button
       <button
         type="button"
-        class="btn btn-circle btn-tertiary ms-4 p-2"
+        class="btn btn-icon btn-tertiary ms-4"
         [attr.aria-label]="valueObject.action.title | translate"
         [siLink]="valueObject.action"
       >
🤖 Fix all issues with AI agents
In @projects/element-ng/wizard/si-wizard.component.html:
- Line 124: Replace the deprecated circular icon button class with the new
square default: change the element that currently uses "btn-circle" (the icon
button in si-wizard.component.html) to use "btn-icon" instead, keeping the
existing "btn btn-secondary mt-2 mb-4" classes intact so sizing and spacing
remain consistent.

In @src/app/examples/buttons/buttoncategories.html:
- Around line 24-36: Add a square icon button example next to the existing
circle examples by including a button element using the new .btn-icon variant
(e.g., class="btn btn-icon btn-secondary element-plus" with appropriate
aria-label) so the demo shows both .btn-circle and .btn-icon; ensure the new
button follows the same structure and margin classes (like me-6) and uses the
existing element-* utility classes so styling and semantics match the other
examples.

In @src/app/examples/si-modals/app-table.component.html:
- Line 6: Replace the obsolete rounded class on the modal close button: in the
element with class="btn btn-circle btn-ghost element-cancel" remove btn-circle
and add btn-icon so it becomes btn btn-icon btn-ghost element-cancel; keep the
existing btn, btn-ghost and element-cancel classes intact to preserve styling
and behavior.

In @src/app/examples/si-modals/si-modal-service.html:
- Line 32: Replace the close-button class list that currently reads "btn
btn-circle btn-ghost element-cancel" (present in the three modal header close
buttons) with the new standardized square icon class "btn btn-icon btn-ghost
element-cancel"; update all three occurrences so the close buttons use .btn-icon
instead of .btn-circle/.btn-sm to match the PR's sizing consolidation.
📜 Review details

Configuration used: Path: .coderabbit.yml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 46d7a09 and 9aab76d.

⛔ Files ignored due to path filters (10)
  • playwright/snapshots/si-side-panel.spec.ts-snapshots/si-side-panel--si-side-panel--over-mode-element-examples-chromium-dark-linux.png is excluded by !**/*.png
  • playwright/snapshots/si-side-panel.spec.ts-snapshots/si-side-panel--si-side-panel--over-mode-element-examples-chromium-light-linux.png is excluded by !**/*.png
  • playwright/snapshots/si-side-panel.spec.ts-snapshots/si-side-panel--si-side-panel--over-mode-no-backdrop-element-examples-chromium-dark-linux.png is excluded by !**/*.png
  • playwright/snapshots/si-side-panel.spec.ts-snapshots/si-side-panel--si-side-panel--over-mode-no-backdrop-element-examples-chromium-light-linux.png is excluded by !**/*.png
  • playwright/snapshots/si-side-panel.spec.ts-snapshots/si-side-panel--si-side-panel--scroll-mode-element-examples-chromium-dark-linux.png is excluded by !**/*.png
  • playwright/snapshots/si-side-panel.spec.ts-snapshots/si-side-panel--si-side-panel--scroll-mode-element-examples-chromium-light-linux.png is excluded by !**/*.png
  • playwright/snapshots/si-side-panel.spec.ts-snapshots/si-side-panel--si-side-panel-collapsible--open-element-examples-chromium-dark-linux.png is excluded by !**/*.png
  • playwright/snapshots/si-side-panel.spec.ts-snapshots/si-side-panel--si-side-panel-collapsible--open-element-examples-chromium-light-linux.png is excluded by !**/*.png
  • playwright/snapshots/static.spec.ts-snapshots/buttons--buttons-element-examples-chromium-dark-linux.png is excluded by !**/*.png
  • playwright/snapshots/static.spec.ts-snapshots/buttons--buttons-element-examples-chromium-light-linux.png is excluded by !**/*.png
📒 Files selected for processing (50)
  • docs/components/layout-navigation/modals.md
  • playwright/snapshots/static.spec.ts-snapshots/buttons--buttons.yaml
  • projects/dashboards-demo/src/app/components/widget-catalog/custom-widget-catalog.component.html
  • projects/dashboards-ng/src/components/dashboard-toolbar/si-dashboard-toolbar.component.html
  • projects/element-ng/action-modal/si-alert-dialog/si-alert-dialog.component.html
  • projects/element-ng/action-modal/si-confirmation-dialog/si-confirmation-dialog.component.html
  • projects/element-ng/action-modal/si-delete-confirmation-dialog/si-delete-confirmation-dialog.component.html
  • projects/element-ng/action-modal/si-edit-discard-dialog/si-edit-discard-dialog.component.html
  • projects/element-ng/application-header/launchpad/si-launchpad-factory.component.html
  • projects/element-ng/chat-messages/si-ai-message.component.html
  • projects/element-ng/chat-messages/si-attachment-list.component.html
  • projects/element-ng/chat-messages/si-chat-input.component.html
  • projects/element-ng/chat-messages/si-user-message.component.html
  • projects/element-ng/column-selection-dialog/column-selection-editor/si-column-selection-editor.component.html
  • projects/element-ng/column-selection-dialog/si-column-selection-dialog.component.html
  • projects/element-ng/dashboard/widgets/si-list-widget/si-list-widget-item.component.html
  • projects/element-ng/dashboard/widgets/si-timeline-widget/si-timeline-widget-item.component.html
  • projects/element-ng/datepicker/components/si-calendar-direction-button.component.ts
  • projects/element-ng/file-uploader/si-file-uploader.component.html
  • projects/element-ng/main-detail-container/si-main-detail-container.component.html
  • projects/element-ng/navbar-vertical/si-navbar-vertical.component.html
  • projects/element-ng/notification-item/si-notification-item.component.html
  • projects/element-ng/photo-upload/si-photo-upload.component.html
  • projects/element-ng/side-panel/si-side-panel-content.component.html
  • projects/element-ng/slider/si-slider.component.html
  • projects/element-ng/status-bar/si-status-bar.component.html
  • projects/element-ng/threshold/si-threshold.component.html
  • projects/element-ng/toast-notification/si-toast-notification/si-toast-notification.component.html
  • projects/element-ng/tour/si-tour.component.html
  • projects/element-ng/tree-view/si-tree-view.component.html
  • projects/element-ng/wizard/si-wizard.component.html
  • projects/element-theme/src/styles/bootstrap/_button-group.scss
  • projects/element-theme/src/styles/bootstrap/_buttons.scss
  • src/app/examples/buttons/buttoncategories.html
  • src/app/examples/buttons/buttons.html
  • src/app/examples/datatable/bootstrap.html
  • src/app/examples/datatable/datatable-grouped-rows.html
  • src/app/examples/si-chat-messages/si-attachment-list.html
  • src/app/examples/si-chat-messages/si-chat-container.html
  • src/app/examples/si-chat-messages/si-chat-input.html
  • src/app/examples/si-chat-messages/si-chat-message.html
  • src/app/examples/si-dashboard/si-list-widget-css.html
  • src/app/examples/si-datepicker/si-modal-service.html
  • src/app/examples/si-list-details/si-list-details-router.html
  • src/app/examples/si-list-details/si-list-details.html
  • src/app/examples/si-map/si-map-custom-cluster-popover.ts
  • src/app/examples/si-modals/app-table.component.html
  • src/app/examples/si-modals/si-modal-service.html
  • src/app/examples/si-notification-item/si-notification-item.html
  • src/app/examples/si-wizard/si-wizard-forms.html
🧰 Additional context used
🧠 Learnings (18)
📚 Learning: 2025-12-11T14:44:11.278Z
Learnt from: spike-rabbit
Repo: siemens/element PR: 1185
File: projects/element-ng/navbar/si-navbar-item/si-navbar-item.component.html:11-11
Timestamp: 2025-12-11T14:44:11.278Z
Learning: The si-icon component in siemens/element-ng/icon automatically applies aria-hidden="true" to its content. Do not suggest adding aria-hidden="true" to si-icon elements, as accessibility is already handled internally by the component.

Applied to files:

  • projects/element-ng/toast-notification/si-toast-notification/si-toast-notification.component.html
  • projects/element-ng/status-bar/si-status-bar.component.html
  • projects/element-ng/navbar-vertical/si-navbar-vertical.component.html
  • projects/element-ng/notification-item/si-notification-item.component.html
  • projects/element-ng/datepicker/components/si-calendar-direction-button.component.ts
  • src/app/examples/buttons/buttons.html
  • projects/element-ng/column-selection-dialog/column-selection-editor/si-column-selection-editor.component.html
  • projects/element-ng/dashboard/widgets/si-timeline-widget/si-timeline-widget-item.component.html
  • projects/element-ng/threshold/si-threshold.component.html
  • projects/element-ng/tour/si-tour.component.html
📚 Learning: 2025-12-22T13:04:35.578Z
Learnt from: mistrykaran91
Repo: siemens/element PR: 1234
File: src/app/examples/ag-grid/ag-grid-empty-state.ts:20-24
Timestamp: 2025-12-22T13:04:35.578Z
Learning: The SiEmptyStateComponent in siemens/element-ng accepts icon names in kebab-case format (e.g., 'element-technical-operator') that may not be directly exported as constants in the element-icons.ts file. Do not flag these as errors if they render correctly at runtime.

Applied to files:

  • projects/element-ng/file-uploader/si-file-uploader.component.html
  • projects/dashboards-ng/src/components/dashboard-toolbar/si-dashboard-toolbar.component.html
  • projects/element-ng/dashboard/widgets/si-list-widget/si-list-widget-item.component.html
  • projects/element-ng/status-bar/si-status-bar.component.html
  • projects/element-ng/wizard/si-wizard.component.html
  • projects/element-ng/navbar-vertical/si-navbar-vertical.component.html
  • projects/element-ng/notification-item/si-notification-item.component.html
  • projects/element-ng/datepicker/components/si-calendar-direction-button.component.ts
  • projects/element-ng/chat-messages/si-user-message.component.html
  • projects/element-ng/column-selection-dialog/column-selection-editor/si-column-selection-editor.component.html
  • projects/element-ng/chat-messages/si-ai-message.component.html
  • projects/element-ng/tree-view/si-tree-view.component.html
  • projects/element-ng/dashboard/widgets/si-timeline-widget/si-timeline-widget-item.component.html
  • projects/element-ng/threshold/si-threshold.component.html
  • projects/element-ng/tour/si-tour.component.html
📚 Learning: 2025-12-09T14:31:33.543Z
Learnt from: Killusions
Repo: siemens/element PR: 998
File: projects/element-ng/chat-messages/si-ai-chat-container.component.html:14-50
Timestamp: 2025-12-09T14:31:33.543Z
Learning: In projects/element-ng/chat-messages/si-ai-chat-container.component.html, message IDs can change, so tracking by message.id is not appropriate. The component uses `track message` (object identity) which is the correct approach for this use case.

Applied to files:

  • src/app/examples/si-chat-messages/si-chat-message.html
  • projects/element-ng/chat-messages/si-user-message.component.html
  • src/app/examples/si-chat-messages/si-chat-container.html
  • projects/element-ng/chat-messages/si-attachment-list.component.html
  • projects/element-ng/chat-messages/si-ai-message.component.html
  • projects/element-ng/chat-messages/si-chat-input.component.html
📚 Learning: 2025-12-22T13:16:19.243Z
Learnt from: mistrykaran91
Repo: siemens/element PR: 1234
File: projects/element-ng/icon/element-icons.ts:166-167
Timestamp: 2025-12-22T13:16:19.243Z
Learning: In projects/element-ng/icon/element-icons.ts, the elementCheckedImageShape icon intentionally uses base64 encoding instead of utf8 encoding (which is used for other icons). This approach is considered safer and correct for this specific icon and should not be flagged as an inconsistency.

Applied to files:

  • projects/element-ng/status-bar/si-status-bar.component.html
📚 Learning: 2025-12-17T14:01:05.705Z
Learnt from: dauriamarco
Repo: siemens/element PR: 908
File: projects/element-ng/side-panel/si-side-panel.component.ts:70-74
Timestamp: 2025-12-17T14:01:05.705Z
Learning: In the Element side-panel component (projects/element-ng/side-panel/si-side-panel.component.ts), the `xxxlMinimum` breakpoint (1920px) is intentionally hardcoded as a private static constant rather than being part of the configurable `Breakpoints` interface. This design preserves full Bootstrap compatibility (which only defines breakpoints up to xxl/1400px) while allowing Element to handle ultra-wide screens explicitly without affecting the standard breakpoint configuration.

Applied to files:

  • projects/element-ng/navbar-vertical/si-navbar-vertical.component.html
  • projects/element-ng/side-panel/si-side-panel-content.component.html
📚 Learning: 2025-12-17T04:34:55.597Z
Learnt from: chintankavathia
Repo: siemens/element PR: 1173
File: src/app/examples/si-charts/interactive/interactive.ts:5-5
Timestamp: 2025-12-17T04:34:55.597Z
Learning: Guideline: In Angular projects using OnPush change detection (zoneless mode), you only need to call ChangeDetectorRef.markForCheck() for asynchronous operations (e.g., setTimeout, setInterval, Promises, Observables) where a change is not automatically detected. Event handlers triggered by Angular template bindings (click, input, etc.) will trigger change detection automatically and do not require explicit markForCheck() calls. Apply this broadly to TS files within Angular components/services that use OnPush; use markForCheck() selectively for async work where change detection wouldn’t run otherwise.

Applied to files:

  • projects/element-ng/datepicker/components/si-calendar-direction-button.component.ts
  • src/app/examples/si-map/si-map-custom-cluster-popover.ts
📚 Learning: 2025-12-30T13:52:33.581Z
Learnt from: dauriamarco
Repo: siemens/element PR: 1221
File: projects/element-ng/side-panel/si-side-panel.component.ts:136-142
Timestamp: 2025-12-30T13:52:33.581Z
Learning: Maintain the existing negative naming convention (e.g., disableBackdrop) across the siemens/element repository for consistency. Do not refactor to positive names (e.g., showBackdrop, hasBackdrop) unless the project explicitly changes the convention. In reviews, flag changes that alter established naming patterns in related files under projects/element-ng.

Applied to files:

  • projects/element-ng/datepicker/components/si-calendar-direction-button.component.ts
📚 Learning: 2025-12-09T14:32:26.166Z
Learnt from: Killusions
Repo: siemens/element PR: 998
File: projects/element-ng/chat-messages/si-ai-chat-container.component.html:21-47
Timestamp: 2025-12-09T14:32:26.166Z
Learning: In Angular templates, prefer using nested *ngIf blocks over *ngSwitch for branching on message types within the chat-messages components. Use *ngIf with else branches to handle distinct cases and avoid complex switch logic in HTML templates. This guideline applies to all HTML templates under projects/element-ng/chat-messages.

Applied to files:

  • projects/element-ng/chat-messages/si-user-message.component.html
  • projects/element-ng/chat-messages/si-attachment-list.component.html
  • projects/element-ng/chat-messages/si-ai-message.component.html
  • projects/element-ng/chat-messages/si-chat-input.component.html
📚 Learning: 2025-11-18T12:37:30.510Z
Learnt from: Killusions
Repo: siemens/element PR: 1040
File: projects/element-ng/chat-messages/si-chat-input.component.ts:338-349
Timestamp: 2025-11-18T12:37:30.510Z
Learning: In projects/element-ng/chat-messages/si-chat-input.component.ts, the interrupt behavior is intentionally different for button clicks vs Enter key: the button can emit interrupt even without content, but pressing Enter requires content or attachments (canSend() must be true) to emit interrupt.

Applied to files:

  • projects/element-ng/chat-messages/si-user-message.component.html
  • projects/element-ng/chat-messages/si-attachment-list.component.html
  • projects/element-ng/chat-messages/si-ai-message.component.html
  • projects/element-ng/chat-messages/si-chat-input.component.html
📚 Learning: 2025-12-09T14:33:54.441Z
Learnt from: Killusions
Repo: siemens/element PR: 998
File: src/app/examples/si-chat-messages/si-ai-message.ts:24-43
Timestamp: 2025-12-09T14:33:54.441Z
Learning: In src/app/examples/ (example/demo code) directories, allow and expect code duplication. Treat duplication as acceptable for demonstration code that aims to illustrate usage rather than enforce DRY. Do not enforce refactoring to remove duplication in example files; focus on readability and clarity of examples. This applies to all TypeScript files under src/app/examples (including nested subdirectories like si-chat-messages).

Applied to files:

  • src/app/examples/si-map/si-map-custom-cluster-popover.ts
📚 Learning: 2026-01-07T08:57:45.608Z
Learnt from: dauriamarco
Repo: siemens/element PR: 1226
File: src/app/examples/si-navbar-vertical/si-navbar-vertical.ts:112-115
Timestamp: 2026-01-07T08:57:45.608Z
Learning: Do not strictly enforce badge color consistency in example files under src/app/examples. Treat badge color checks as non-blocking for TypeScript files in this directory; reviewers may still note inconsistencies, but they should not require changes for these example files. Apply this guidance broadly to all files within src/app/examples.

Applied to files:

  • src/app/examples/si-map/si-map-custom-cluster-popover.ts
📚 Learning: 2026-01-07T08:57:45.608Z
Learnt from: dauriamarco
Repo: siemens/element PR: 1226
File: src/app/examples/si-navbar-vertical/si-navbar-vertical.ts:112-115
Timestamp: 2026-01-07T08:57:45.608Z
Learning: Badge color consistency in example files (src/app/examples/) is not a priority and should not be strictly enforced during reviews.

Applied to files:

  • src/app/examples/buttons/buttons.html
📚 Learning: 2025-12-03T13:02:34.875Z
Learnt from: spike-rabbit
Repo: siemens/element PR: 1058
File: docs/fundamentals/layouts/breakpoints.md:25-31
Timestamp: 2025-12-03T13:02:34.875Z
Learning: In Element documentation for CSS breakpoints and class infixes (e.g., in docs/fundamentals/layouts/breakpoints.md), _None_ is formatted with italics to indicate the absence of a class infix (representing base mobile-first styles), while actual CSS class infixes like `sm`, `md`, `lg`, `xl`, `xxl` use inline code formatting with backticks. This semantic formatting distinction is intentional.

Applied to files:

  • src/app/examples/buttons/buttons.html
📚 Learning: 2026-01-02T16:41:57.274Z
Learnt from: kfenner
Repo: siemens/element PR: 1005
File: docs/fundamentals/styles/sizing.md:18-26
Timestamp: 2026-01-02T16:41:57.274Z
Learning: In Element documentation (siemens/element), sizing utility examples in docs may intentionally differ from implementation examples to demonstrate multiple valid approaches - for example, documentation might use traditional CSS properties like `height` and `width` while the implementation example uses logical properties like `block-size` and `inline-size`. These are considered different examples rather than inconsistencies.

Applied to files:

  • src/app/examples/buttons/buttons.html
📚 Learning: 2025-12-01T09:34:50.469Z
Learnt from: Killusions
Repo: siemens/element PR: 1047
File: docs/fundamentals/ux-text-style-guide/basics.md:30-30
Timestamp: 2025-12-01T09:34:50.469Z
Learning: In docs/fundamentals/ux-text-style-guide/basics.md, the h4 heading level (####) for "Do's" and "Don'ts" within the dos-and-donts structure is intentional, even though it triggers the MD001 linting rule about heading hierarchy.

Applied to files:

  • playwright/snapshots/static.spec.ts-snapshots/buttons--buttons.yaml
📚 Learning: 2025-12-16T16:19:17.950Z
Learnt from: spike-rabbit
Repo: siemens/element PR: 1207
File: playwright/snapshots/si-filtered-search.spec.ts-snapshots/si-filtered-search--si-filtered-search-playground--data-entered.yaml:38-38
Timestamp: 2025-12-16T16:19:17.950Z
Learning: Do not review files in the playwright/snapshots directory, as they contain auto-generated test artifacts. Exclude any YAML snapshot files under playwright/snapshots from code reviews in the siemens/element repository. If a YAML file is not an auto-generated snapshot, verify its origin before skipping.

Applied to files:

  • playwright/snapshots/static.spec.ts-snapshots/buttons--buttons.yaml
📚 Learning: 2026-01-02T16:41:48.359Z
Learnt from: kfenner
Repo: siemens/element PR: 1005
File: docs/fundamentals/styles/sizing.md:18-26
Timestamp: 2026-01-02T16:41:48.359Z
Learning: In Element docs, sizing examples may differ between documentation and implementation to illustrate multiple valid approaches. Do not flag such differences as inconsistencies; treat them as separate illustrative examples (e.g., using height/width in docs vs block-size/inline-size in implementation). Apply this understanding across Markdown documentation files to avoid false-positive review flags.

Applied to files:

  • docs/components/layout-navigation/modals.md
📚 Learning: 2025-12-22T13:29:36.922Z
Learnt from: mistrykaran91
Repo: siemens/element PR: 1234
File: projects/element-ng/ag-grid/parts/color-scheme.part.ts:35-35
Timestamp: 2025-12-22T13:29:36.922Z
Learning: In the Element design system (projects/element-ng/theme and projects/element-theme), only `--element-body-font-family` is exposed as a CSS custom property for typography. Font sizes are NOT exposed as CSS custom properties; they are defined using internal SCSS variables (e.g., `typography.$si-font-size-body`) that compile to fixed values. Using hardcoded pixel values for fontSize in AG Grid theme configuration (e.g., `fontSize: '14px'`) is the correct approach.

Applied to files:

  • projects/element-theme/src/styles/bootstrap/_buttons.scss
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (50)
projects/element-ng/threshold/si-threshold.component.html (1)

8-8: LGTM — straightforward sizing standardization.

Both buttons have the btn-sm modifier removed as part of the PR's consolidation of icon/button sizing. The buttons remain styled as btn-circle and retain their accessibility attributes (aria-labels, disabled state binding). The removal of btn-sm aligns with the new consolidated sizing rules introduced in the PR's SCSS changes (e.g., _button-group.scss and _buttons.scss).

Also applies to: 53-53

src/app/examples/si-map/si-map-custom-cluster-popover.ts (1)

26-26: LGTM! Aligns with button styling consolidation.

The removal of btn-sm is consistent with the PR-wide effort to standardize icon button sizing and introduce the new square button variant as the default.

src/app/examples/si-dashboard/si-list-widget-css.html (1)

20-20: LGTM! Consistent removal of btn-sm aligns with the icon button sizing refactor.

The removal of btn-sm from all six action buttons is uniform and aligns with the PR's objective to consolidate icon/button styling. These buttons will now adopt the standardized icon button sizing introduced by the new .btn-icon rules and $btn-icon-size-* variables mentioned in the AI summary.

Also applies to: 31-31, 42-42, 53-53, 64-64, 75-75

projects/element-ng/column-selection-dialog/column-selection-editor/si-column-selection-editor.component.html (1)

29-29: Consider adopting the new square button variant (btn-icon).

Both buttons have had btn-sm removed as part of the unified icon button sizing strategy. However, they still use btn-circle. Given kfenner's comment that "square buttons should be the new default icon buttons," should these be updated to use the new btn-icon class instead of btn-circle for consistency with the new default?

If the design intent is to keep certain buttons as circles, this change is fine. However, please verify whether these icon-only buttons should adopt the square variant to align with the new defaults.

Also applies to: 39-39

projects/dashboards-ng/src/components/dashboard-toolbar/si-dashboard-toolbar.component.html (1)

11-11: LGTM! Verify the visual appearance of the icon button.

The removal of btn-sm aligns with the broader icon-button sizing standardization across this PR. The edit button will now render at the default icon button size when displayed as an icon-only button (showEditButtonLabelDesktop is false).

Please verify that the larger button size integrates well with the toolbar layout and matches the intended design for the new default icon buttons.

projects/element-ng/tree-view/si-tree-view.component.html (1)

3-18: LGTM!

The removal of btn-sm from both expand and collapse buttons aligns with the PR's broader consolidation of icon/button sizing. Both buttons maintain proper accessibility attributes (title, aria-label) and event handling, with no functional regressions.

Please verify that the buttons' visual sizing in the tree-view header remains appropriate after removing the btn-sm modifier. The SCSS consolidation introduced in this PR should provide the correct sizing via the updated .btn-circle rules, but confirm that the expand/collapse buttons display at the expected size in the UI.

projects/element-ng/dashboard/widgets/si-timeline-widget/si-timeline-widget-item.component.html (1)

81-81: Removal of btn-sm aligns with PR's button sizing consolidation.

The removal of the [class.btn-sm]="action.iconOnly" binding from the menu button is consistent with this PR's objective to standardize icon button sizing across components. The button will now use the default .btn-circle size.

Please verify that the menu button's visual appearance and size remain appropriate in the timeline widget UI without the small size modifier.

projects/element-ng/file-uploader/si-file-uploader.component.html (3)

62-71: Consider using the new square btn-icon variant.

Based on the PR objectives and kfenner's comment that square buttons should be the new default icon buttons, consider whether this retry button should use the new square btn-icon class instead of btn-circle.

Additionally, verify that the visual size after removing btn-sm is appropriate for the file uploader UI.


73-83: Consider using the new square btn-icon variant.

Based on the PR objectives and kfenner's comment that square buttons should be the new default icon buttons, consider whether this remove button should use the new square btn-icon class instead of btn-circle.

Additionally, verify that the visual size after removing btn-sm is appropriate for the file uploader UI.


84-94: Consider using the new square btn-icon variant.

Based on the PR objectives and kfenner's comment that square buttons should be the new default icon buttons, consider whether this cancel button should use the new square btn-icon class instead of btn-circle.

Additionally, verify that the visual size after removing btn-sm is appropriate for the file uploader UI.

projects/element-ng/toast-notification/si-toast-notification/si-toast-notification.component.html (1)

31-40: The button styling is correct. Close buttons throughout the component library consistently use btn-circle, and the removal of btn-sm aligns with the PR's standardization effort. There is no evidence from the codebase that close buttons should be converted to the btn-icon square variant—similar close buttons in si-tab.component.html, si-input-pill.component.html, and other components remain as circular buttons.

Likely an incorrect or invalid review comment.

projects/element-ng/side-panel/si-side-panel-content.component.html (1)

17-17: No changes needed. These buttons are intentionally circular (btn-circle) as part of the side panel's UI design. The PR's focus on button sizing alignment (removing btn-sm) is separate from shape variants. The btn-icon class and btn-circle class serve different purposes and are not mutually exclusive—examples in the codebase show both used together when circular icon buttons are needed.

Likely an incorrect or invalid review comment.

projects/element-ng/action-modal/si-delete-confirmation-dialog/si-delete-confirmation-dialog.component.html (1)

7-14: No action required; the button styling is correct as-is.

The removal of btn-sm aligns with the button sizing refactoring and is appropriate. Modal close buttons should use btn-circle (as shown in the official modal documentation), not btn-icon. The btn-icon class is documented for icon-only button groups and has a different visual style (square with semantic border-radius) compared to btn-circle (fully circular). The current implementation is consistent with the documented best practice for modal close buttons.

Likely an incorrect or invalid review comment.

projects/element-ng/application-header/launchpad/si-launchpad-factory.component.html (1)

91-91: LGTM! Consistent removal of btn-sm for icon button standardization.

The removal of btn-sm from this close button aligns with the PR's goal to consolidate and standardize icon button sizing across the component library.

projects/element-ng/datepicker/components/si-calendar-direction-button.component.ts (1)

24-24: LGTM! Icon button sizing standardization applied correctly.

The removal of btn-sm from the calendar navigation button is consistent with the broader UI cleanup in this PR.

projects/element-ng/chat-messages/si-attachment-list.component.html (1)

47-47: LGTM! Consistent styling update for attachment remove button.

The removal of btn-sm aligns with the PR's icon button standardization effort.

projects/element-ng/status-bar/si-status-bar.component.html (1)

110-110: LGTM! Icon button sizing standardization applied.

The removal of btn-sm from the mute button is consistent with this PR's goal. The planned migration from btn-circle to btn-icon will be addressed in the follow-up PR as previously discussed.

projects/element-ng/navbar-vertical/si-navbar-vertical.component.html (1)

20-20: LGTM! Consistent button sizing update.

The removal of btn-sm from the navbar collapse toggle button aligns with the icon button standardization effort in this PR.

src/app/examples/buttons/buttoncategories.html (1)

12-19: LGTM! Sizing adjustments align with new button system.

The addition of btn-lg to the navigation buttons correctly demonstrates the updated sizing options for circular icon buttons.

src/app/examples/si-datepicker/si-modal-service.html (1)

9-9: Consistent button sizing standardization.

The removal of btn-sm aligns with the PR's goal to standardize icon button sizing. Ensure the close button's visual appearance matches the intended design after the CSS changes.

src/app/examples/si-notification-item/si-notification-item.html (1)

71-71: LGTM: Notification action buttons updated consistently.

The removal of btn-sm from notification action buttons (approve, reject, and view details) is consistent with the PR's button sizing standardization. The changes maintain all functional attributes and event handlers.

Also applies to: 78-78, 113-113

projects/element-ng/column-selection-dialog/si-column-selection-dialog.component.html (1)

5-5: Consistent modal header button standardization.

The removal of btn-sm from the cancel button aligns with the broader refactoring effort. The functional behavior and accessibility attributes remain unchanged.

projects/element-ng/photo-upload/si-photo-upload.component.html (1)

64-64: Modal cancel button sizing updated consistently.

The removal of btn-sm from the photo upload modal's cancel button follows the established pattern across the codebase. All functional and accessibility attributes are preserved.

projects/element-ng/action-modal/si-edit-discard-dialog/si-edit-discard-dialog.component.html (1)

9-9: Edit discard dialog cancel button updated consistently.

The btn-sm removal from the cancel button is consistent with the PR's standardization effort. The button's functional attributes, including the loading state handling and event binding, remain intact.

projects/element-ng/chat-messages/si-user-message.component.html (1)

19-19: LGTM: Consistent sizing for chat message action buttons.

The removal of btn-sm from both action buttons standardizes the sizing with the new unified icon/button approach. The chat message action context has adequate space for the default button size.

Also applies to: 31-31

projects/element-ng/main-detail-container/si-main-detail-container.component.html (1)

94-94: LGTM: Improved touch target for mobile navigation.

The removal of btn-sm from the back button aligns with the sizing standardization and provides an accessibility benefit—larger touch targets are especially valuable for this navigation button that appears on smaller screens.

src/app/examples/si-chat-messages/si-attachment-list.html (1)

20-20: LGTM: Standardized modal close button sizing.

The removal of btn-sm from the modal close button is consistent with the sizing standardization and aligns with modal patterns across the codebase.

projects/element-ng/action-modal/si-confirmation-dialog/si-confirmation-dialog.component.html (1)

9-9: LGTM: Consistent modal close button pattern.

The removal of btn-sm from the confirmation dialog close button maintains consistency with other modal close buttons in the codebase and aligns with the standardized sizing approach.

src/app/examples/si-list-details/si-list-details.html (1)

23-23: Visual regression tests confirm the sizing change is safe.

The Playwright E2E tests for this component include comprehensive visual regression snapshots (si.runVisualAndA11yTests()) covering the default layout, small viewport (600px), and resized scenarios. The larger default button size works well in the header contexts on both lines 23 and 41, and the test coverage confirms no overflow or spacing issues occur, including on smaller viewports.

docs/components/layout-navigation/modals.md (1)

82-82: Documentation updated to reflect new button sizing standards.

The removal of btn-sm from the modal cancel button example aligns with the PR's standardization of icon button sizing. The new unified .btn-icon and .btn-circle sizing system handles the appropriate sizing automatically.

projects/element-ng/chat-messages/si-chat-input.component.html (1)

53-53: LGTM! Button sizing standardization applied consistently.

All four icon buttons have been updated to use the new standardized sizing by removing the btn-sm modifier. The unified .btn-circle sizing system will handle the appropriate dimensions automatically.

Also applies to: 67-67, 79-79, 100-100

src/app/examples/si-list-details/si-list-details-router.html (1)

23-23: Example updated to demonstrate new button sizing standards.

Both icon buttons correctly demonstrate the new unified sizing approach by removing btn-sm. The .btn-circle class now provides consistent sizing automatically.

Also applies to: 41-41

src/app/examples/datatable/bootstrap.html (1)

41-41: Datatable example updated with consistent button sizing.

All four expand/dropdown buttons now use the standardized sizing. The removal of btn-sm ensures consistency with the new .btn-circle sizing rules across the table interface.

Also applies to: 75-75, 104-104, 133-133

projects/element-ng/chat-messages/si-ai-message.component.html (1)

16-16: Chat message actions updated with standardized button sizing.

Both action buttons now use the unified sizing system. The removal of btn-sm is consistent with the changes in si-chat-input.component.html and ensures visual consistency across all chat components.

Also applies to: 28-28

projects/element-ng/notification-item/si-notification-item.component.html (1)

112-112: LGTM! Consistent removal of btn-sm aligns with the new sizing strategy.

The removal of btn-sm from all icon button variants is consistent with the broader consolidation of button sizing across the codebase. All functional attributes, event handlers, and accessibility labels remain intact.

Also applies to: 122-122, 140-140, 152-152

projects/element-theme/src/styles/bootstrap/_buttons.scss (5)

11-18: LGTM! Well-structured size variable definitions.

The new $btn-icon-* size variables establish a clear progression (24px → 28px → 32px → 40px) and provide appropriate font sizing for icon buttons. The naming convention is consistent and aligns with the existing button size modifiers.


154-163: LGTM! Effective consolidation of icon button styles.

The unified selector :is(.btn-circle, .btn-icon, .btn-close):not(.btn-group .btn) successfully consolidates shared styling while correctly excluding button-group contexts where specialized sizing applies. The exclusion is necessary because _button-group.scss defines custom .btn-icon padding rules for group layouts.


165-171: LGTM! Border-radius cascade correctly implements the design intent.

The CSS order positions .btn-icon (square with $element-button-radius) before .btn-circle (50% radius), allowing the combination class="btn btn-icon btn-circle" to produce a circular button. This matches the semantic model discussed in past reviews where .btn-icon is the base and .btn-circle is a specialization.


173-195: LGTM! Sizing consolidation eliminates duplication.

The shared sizing block for .btn-circle and .btn-icon effectively centralizes dimension logic using the new $btn-icon-size-* variables. This ensures both variants maintain consistent sizing across all modifiers (default, lg, sm, xs).


197-204: LGTM! Complete integration of .btn-icon into existing button variants.

The addition of .btn-icon.btn-ghost at line 198 and the update of .btn-close sizing to use $btn-icon-size-default at line 218 ensure the new icon button system is fully integrated with existing button types. This maintains visual consistency across all icon-based button variants.

Also applies to: 218-218

projects/element-theme/src/styles/bootstrap/_button-group.scss (1)

55-58: LGTM! Appropriate button-group override for .btn-icon.

This rule correctly provides the necessary override for .btn-icon elements within .btn-group, which are excluded from the main icon button styles via :not(.btn-group .btn) in _buttons.scss. The padding calculation follows the established button-group pattern and accounts for border widths appropriately.

src/app/examples/datatable/datatable-grouped-rows.html (1)

21-21: LGTM! Consistent with the sizing consolidation strategy.

The removal of btn-sm from the group expansion toggle button aligns with the PR's objective to standardize icon button sizing. The button retains all functional attributes and accessibility properties.

projects/element-ng/slider/si-slider.component.html (1)

4-4: LGTM! Slider button sizing aligned with new standards.

The removal of btn-sm from both the decrement and increment buttons is consistent with the PR's sizing consolidation. All event handlers, disabled states, and ARIA attributes are correctly preserved.

Also applies to: 62-62

projects/element-ng/action-modal/si-alert-dialog/si-alert-dialog.component.html (1)

9-9: LGTM - Aligned with the new button sizing system.

The removal of btn-sm is consistent with the PR's unified button sizing approach, maintaining visual consistency across the component library.

projects/dashboards-demo/src/app/components/widget-catalog/custom-widget-catalog.component.html (1)

5-5: LGTM - Consistent with button sizing standardization.

The change aligns with the PR's unified button sizing system.

projects/element-ng/tour/si-tour.component.html (1)

32-32: LGTM - Button sizing correctly aligned.

The change maintains consistent sizing as confirmed in previous review discussions.

src/app/examples/si-chat-messages/si-chat-input.html (1)

27-27: LGTM - Sizing standardization applied correctly.

The removal of btn-sm aligns with the unified button sizing approach across the example components.

src/app/examples/si-chat-messages/si-chat-message.html (1)

11-11: LGTM - Consistent button sizing applied across chat message actions.

All three instances correctly remove btn-sm in alignment with the PR's unified button sizing system.

Also applies to: 22-22, 43-43

src/app/examples/si-chat-messages/si-chat-container.html (1)

31-31: LGTM! Removal of btn-sm aligns with sizing consolidation.

The removal of the btn-sm modifier from these buttons aligns with the PR's consolidation of button sizing across the codebase. The new unified sizing approach for icon/circle buttons provides consistency.

Also applies to: 80-80

src/app/examples/buttons/buttons.html (1)

1-46: LGTM! Excellent restructuring and section organization.

The reorganization into clearly labeled sections with descriptive headings significantly improves the discoverability of button variants. The ordering—with icon buttons (square) appearing before circle buttons—correctly implements the recommendation that square icon buttons should be the default.

Also applies to: 129-222, 275-308

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 4

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (13)
src/app/examples/si-wizard/si-wizard-forms.html (1)

6-12: Verify modal-header layout after removing btn-sm; consider switching to .btn-icon if square is now the default.

Dropping btn-sm looks consistent with the PR-wide move to unified icon sizing, but please confirm the modal header doesn’t grow/shift and the close affordance still renders correctly (this button has no inner content and likely relies on .element-cancel styling). If this close button is meant to reflect the new default icon-button style, consider updating from btn-circle to the new .btn-icon variant instead.

projects/element-ng/notification-item/si-notification-item.component.html (4)

109-118: Confirm these icon actions should remain .btn-circle (vs new default .btn-icon) and verify sizing after dropping btn-sm.
Given the PR direction (“square btn-icon”), consider switching this to .btn-icon unless the circular affordance is intentional for notification quick actions. Also verify the clickable area remains consistent (esp. if $btn-icon-size-* now drives sizing).


120-136: p-2 may conflict with the new unified icon sizing—verify this doesn’t oversize the control.
If icon sizing is now standardized via .btn-circle / .btn-icon rules, consider removing manual padding and/or moving to .btn-icon for the new square default.


138-147: Same concern as routerLink: validate padding + icon sizing consistency.
If the new sizing system is intended to eliminate template-level padding tweaks, drop p-2 and rely on the icon-button class.


149-158: A11y/i18n: avoid concatenating English suffixes to heading() in aria-label.
If heading() is a translation key (it’s piped through translate elsewhere), the current label can become non-human-readable and is not localized. Prefer a translated full string (or a translation key with interpolation).

Proposed minimal template fix (if acceptable)
-    [attr.aria-label]="heading() + ' dropdown'"
+    [attr.aria-label]="(heading() | translate) + ' dropdown'"
projects/element-ng/filtered-search/si-filtered-search.component.html (1)

66-72: Add btn-icon base class to icon-only buttons.

These buttons lack the btn-icon base class used consistently across all icon-only buttons in the design system. Update lines 66 and 79 to use the pattern btn btn-icon btn-sm (for square shape) or btn btn-icon btn-circle btn-sm (if circular shape is required). The examples throughout the codebase show that btn-icon is the required foundation, with btn-circle as an optional modifier.

Current patterns:

  • Line 66: class="btn btn-circle btn-sm btn-ghost mx-2"
  • Line 79: class="search-button btn btn-circle btn-sm btn-secondary focus-inside"

Should be:

  • class="btn btn-icon btn-sm btn-ghost mx-2" (and similar for line 79)

Or if circular shape is intentional:

  • class="btn btn-icon btn-circle btn-sm btn-ghost mx-2"
projects/element-theme/src/styles/bootstrap/_button-group.scss (1)

14-18: Likely layout bug: .btn-icon will still stretch inside .btn-group due to flex: 1 1 auto.

Right now .btn-icon matches .btn:not(.btn-circle) (Line 14), so it will expand like a regular button even though the new block (Line 55-58) looks aimed at icon-only sizing. Consider excluding .btn-icon from the flexing selector and explicitly opting it out of flex.

Proposed fix
 .btn-group {
@@
-  .btn:not(.btn-circle) {
+  .btn:not(.btn-circle, .btn-icon) {
     position: relative;
     flex: 1 1 auto;
     border-radius: 0;
   }
@@
-  > .btn:first-of-type:not(.btn-circle),
-  > label:first-of-type .btn:not(.btn-circle) {
+  > .btn:first-of-type:not(.btn-circle, .btn-icon),
+  > label:first-of-type .btn:not(.btn-circle, .btn-icon) {
     border-start-start-radius: semantic-tokens.$element-button-radius;
     border-end-start-radius: semantic-tokens.$element-button-radius;
   }
@@
-  > .btn:last-of-type:not(.btn-circle),
-  > label:last-of-type .btn:not(.btn-circle) {
+  > .btn:last-of-type:not(.btn-circle, .btn-icon),
+  > label:last-of-type .btn:not(.btn-circle, .btn-icon) {
     border-start-end-radius: semantic-tokens.$element-button-radius;
     border-end-end-radius: semantic-tokens.$element-button-radius;
   }
@@
   .btn-icon {
+    flex: 0 0 auto;
     inline-size: unset;
     padding-inline: calc(#{map.get(spacers.$spacers, 2)} - var(--btn-border-width, 0px));
   }
 }

Also applies to: 24-34, 55-58

projects/element-ng/dashboard/widgets/si-timeline-widget/si-timeline-widget-item.component.html (1)

79-85: Icon will render via the element-options-vertical web font class, but consider adding a visual test to verify alignment remains stable after the size change (24px → 32px).

The button's icon is properly styled through CSS; however, the component lacks visual regression test coverage for this action button. While the icon will display, a snapshot test would ensure the increased button size (from btn-sm to default) doesn't affect row height or spacing in the timeline widget layout.

projects/element-ng/tabs/si-tab.component.html (1)

9-14: Implement proper button semantics for close button.

The close button applies button CSS classes directly to the si-icon component rather than using a <button> element, creating accessibility issues:

  • Keyboard accessibility missing: The click handler lacks keyboard support. While the parent tab handles Enter key, the close button has no keyboard event binding (compare to tab's (keydown.enter) pattern)
  • No button semantics: CSS classes alone don't provide button role or semantics; si-icon is a presentational component that consumers must properly contextualize
  • Screen reader issues: No button role means assistive technologies won't announce this as an interactive control

Wrap si-icon in a <button> element with appropriate attributes, or add keyboard event handling and role="button" if a button element is not feasible.

projects/element-ng/navbar-vertical/si-navbar-vertical.component.html (1)

18-31: Confirm intended shape: keep .btn-circle vs migrate to new .btn-icon.

Line 20 removes btn-sm (likely correct under the new unified icon sizing), but this is still a “pure icon” control. Given the PR goal (“square btn-icon”) and reviewer feedback that square should become the default icon-button, consider whether this should switch from btn-circlebtn-icon (or explicitly document why it remains circular).

src/app/examples/si-chat-messages/si-chat-input.html (1)

25-32: Add aria-label for the icon-only emoji action (example).

Line 27 removes btn-sm (fine), but this icon-only <button> relies on title. Please add an explicit aria-label (or bind one) so the example is accessible.

Proposed change
   <button
     type="button"
     class="btn btn-ghost btn-circle"
+    aria-label="Insert emoji"
     title="Insert emoji"
     (click)="logEvent('Emoji picker clicked')"
   >
docs/components/layout-navigation/modals.md (1)

80-109: Docs snippet: openModal() references undefined template.

Line 82 change is fine, but in the same snippet openModal() uses this.modalService.show(template, ...) even though template isn’t defined (you declared private modal = viewChild.required<TemplateRef<void>>('sampleModal');). Consider updating the example to pass the actual template ref.

Proposed change
   openModal(): void {
-    this.modalRef = this.modalService.show(template, {
+    this.modalRef = this.modalService.show(this.modal(), {
       /* Options go here. */
     });
   }
projects/element-theme/src/styles/bootstrap/_buttons.scss (1)

171-189: Remove unnecessary & { } wrapper.

The & { } on lines 173-175 is redundant since there's no parent selector context needed here. The include can be placed directly in the rule block.

♻️ Suggested simplification
 .btn-circle,
 .btn-icon {
-  & {
-    @include button-icon-size($btn-icon-size-default, $btn-icon-font-size-default);
-  }
+  @include button-icon-size($btn-icon-size-default, $btn-icon-font-size-default);

   &.btn-lg {
🤖 Fix all issues with AI agents
In @projects/element-ng/filter-bar/si-filter-pill.component.html:
- Line 23: The button in si-filter-pill.component (the element with
class="btn-remove element-cancel btn btn-circle btn-ghost focus-inside ms-0
btn-sm") should either keep the explicit small sizing or be updated to the new
32px default: remove the btn-sm token to match the other updated icon buttons
(see datatable-grouped-rows.html and si-toast-notification.component.html)
unless a 24px size is required by design; also consider switching the shape
class from btn-circle to btn-icon if this pill should use the square icon
variant introduced in the refactor—update the class attribute accordingly and
confirm visual/design intent.

In @src/app/examples/si-dashboard/si-list-widget-css.html:
- Around line 18-23: Buttons had `btn-sm` removed; verify icon rendering and
accessibility by ensuring the pseudo-element/icon CSS still targets the button
selector (e.g., .btn-circle) and that focus/outline and hit-area spacing in
.list-group-item remain correct; if the dashboard should use the new square icon
style, replace .btn-circle with .btn-icon on these elements (check instances
matching the button snippet and the other listed ranges) and confirm via
visual/a11y checks that icon visibility, keyboard focus ring, and spacing/hit
area are preserved.

In @src/app/examples/si-icon/si-icon.html:
- Line 17: The example button in si-icon.html uses the size modifier class
"btn-sm" on the element with classes "btn btn-primary btn-circle btn-sm"; remove
the "btn-sm" token so the element uses "btn btn-primary btn-circle" to match the
standard icon-button sizing pattern used by production components and examples.

In @src/app/examples/si-wizard/si-wizard-playground.html:
- Around line 51-56: Replace the external navigation buttons' class "btn-circle"
with the new standard "btn-icon" on the icon buttons that call wizard().back()
and wizard().next() (keep "btn-circle" only if you intend to demonstrate
circular buttons); after changing the class, visually verify LTR/RTL behavior
for the "flip-rtl" class and confirm disabled styling still looks correct with
the new sizing mixins.
📜 Review details

Configuration used: Path: .coderabbit.yml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9aab76d and 7a73280.

⛔ Files ignored due to path filters (14)
  • playwright/snapshots/si-side-panel.spec.ts-snapshots/si-side-panel--si-side-panel--over-mode-element-examples-chromium-dark-linux.png is excluded by !**/*.png
  • playwright/snapshots/si-side-panel.spec.ts-snapshots/si-side-panel--si-side-panel--over-mode-element-examples-chromium-light-linux.png is excluded by !**/*.png
  • playwright/snapshots/si-side-panel.spec.ts-snapshots/si-side-panel--si-side-panel--over-mode-no-backdrop-element-examples-chromium-dark-linux.png is excluded by !**/*.png
  • playwright/snapshots/si-side-panel.spec.ts-snapshots/si-side-panel--si-side-panel--over-mode-no-backdrop-element-examples-chromium-light-linux.png is excluded by !**/*.png
  • playwright/snapshots/si-side-panel.spec.ts-snapshots/si-side-panel--si-side-panel--scroll-mode-element-examples-chromium-dark-linux.png is excluded by !**/*.png
  • playwright/snapshots/si-side-panel.spec.ts-snapshots/si-side-panel--si-side-panel--scroll-mode-element-examples-chromium-light-linux.png is excluded by !**/*.png
  • playwright/snapshots/si-side-panel.spec.ts-snapshots/si-side-panel--si-side-panel-collapsible--open-element-examples-chromium-dark-linux.png is excluded by !**/*.png
  • playwright/snapshots/si-side-panel.spec.ts-snapshots/si-side-panel--si-side-panel-collapsible--open-element-examples-chromium-light-linux.png is excluded by !**/*.png
  • playwright/snapshots/static.spec.ts-snapshots/buttons--button-groups-element-examples-chromium-dark-linux.png is excluded by !**/*.png
  • playwright/snapshots/static.spec.ts-snapshots/buttons--button-groups-element-examples-chromium-light-linux.png is excluded by !**/*.png
  • playwright/snapshots/static.spec.ts-snapshots/buttons--buttons-element-examples-chromium-dark-linux.png is excluded by !**/*.png
  • playwright/snapshots/static.spec.ts-snapshots/buttons--buttons-element-examples-chromium-light-linux.png is excluded by !**/*.png
  • playwright/snapshots/static.spec.ts-snapshots/buttons--selection-buttons-element-examples-chromium-dark-linux.png is excluded by !**/*.png
  • playwright/snapshots/static.spec.ts-snapshots/buttons--selection-buttons-element-examples-chromium-light-linux.png is excluded by !**/*.png
📒 Files selected for processing (66)
  • docs/components/buttons-menus/button-group.md
  • docs/components/layout-navigation/modals.md
  • playwright/snapshots/static.spec.ts-snapshots/buttons--buttons.yaml
  • projects/dashboards-demo/src/app/components/widget-catalog/custom-widget-catalog.component.html
  • projects/dashboards-ng/src/components/dashboard-toolbar/si-dashboard-toolbar.component.html
  • projects/element-ng/action-modal/si-alert-dialog/si-alert-dialog.component.html
  • projects/element-ng/action-modal/si-confirmation-dialog/si-confirmation-dialog.component.html
  • projects/element-ng/action-modal/si-delete-confirmation-dialog/si-delete-confirmation-dialog.component.html
  • projects/element-ng/action-modal/si-edit-discard-dialog/si-edit-discard-dialog.component.html
  • projects/element-ng/application-header/launchpad/si-launchpad-factory.component.html
  • projects/element-ng/chat-messages/si-ai-message.component.html
  • projects/element-ng/chat-messages/si-attachment-list.component.html
  • projects/element-ng/chat-messages/si-chat-input.component.html
  • projects/element-ng/chat-messages/si-user-message.component.html
  • projects/element-ng/column-selection-dialog/column-selection-editor/si-column-selection-editor.component.html
  • projects/element-ng/column-selection-dialog/si-column-selection-dialog.component.html
  • projects/element-ng/dashboard/widgets/si-list-widget/si-list-widget-item.component.html
  • projects/element-ng/dashboard/widgets/si-timeline-widget/si-timeline-widget-item.component.html
  • projects/element-ng/datepicker/components/si-calendar-direction-button.component.ts
  • projects/element-ng/datepicker/si-calendar-button.component.ts
  • projects/element-ng/datepicker/si-date-range.component.html
  • projects/element-ng/electron-titlebar/si-electron-titlebar.component.html
  • projects/element-ng/file-uploader/si-file-uploader.component.html
  • projects/element-ng/filter-bar/si-filter-pill.component.html
  • projects/element-ng/filtered-search/si-filtered-search-value.component.html
  • projects/element-ng/filtered-search/si-filtered-search.component.html
  • projects/element-ng/main-detail-container/si-main-detail-container.component.html
  • projects/element-ng/navbar-vertical/si-navbar-vertical.component.html
  • projects/element-ng/notification-item/si-notification-item.component.html
  • projects/element-ng/number-input/si-number-input.component.html
  • projects/element-ng/password-toggle/si-password-toggle.component.html
  • projects/element-ng/photo-upload/si-photo-upload.component.html
  • projects/element-ng/pills-input/si-input-pill.component.html
  • projects/element-ng/search-bar/si-search-bar.component.html
  • projects/element-ng/side-panel/si-side-panel-content.component.html
  • projects/element-ng/side-panel/si-side-panel-content.component.scss
  • projects/element-ng/slider/si-slider.component.html
  • projects/element-ng/status-bar/si-status-bar.component.html
  • projects/element-ng/tabs-legacy/si-tabset/si-tabset-legacy.component.html
  • projects/element-ng/tabs/si-tab.component.html
  • projects/element-ng/threshold/si-threshold.component.html
  • projects/element-ng/toast-notification/si-toast-notification/si-toast-notification.component.html
  • projects/element-ng/tour/si-tour.component.html
  • projects/element-ng/tree-view/si-tree-view.component.html
  • projects/element-ng/wizard/si-wizard.component.html
  • projects/element-theme/src/styles/bootstrap/_button-group.scss
  • projects/element-theme/src/styles/bootstrap/_buttons.scss
  • src/app/examples/buttons/buttoncategories.html
  • src/app/examples/buttons/buttons.html
  • src/app/examples/datatable/bootstrap.html
  • src/app/examples/datatable/datatable-grouped-rows.html
  • src/app/examples/si-chat-messages/si-attachment-list.html
  • src/app/examples/si-chat-messages/si-chat-container.html
  • src/app/examples/si-chat-messages/si-chat-input.html
  • src/app/examples/si-chat-messages/si-chat-message.html
  • src/app/examples/si-dashboard/si-list-widget-css.html
  • src/app/examples/si-datepicker/si-modal-service.html
  • src/app/examples/si-icon/si-icon.html
  • src/app/examples/si-list-details/si-list-details-router.html
  • src/app/examples/si-list-details/si-list-details.html
  • src/app/examples/si-map/si-map-custom-cluster-popover.ts
  • src/app/examples/si-modals/app-table.component.html
  • src/app/examples/si-modals/si-modal-service.html
  • src/app/examples/si-notification-item/si-notification-item.html
  • src/app/examples/si-wizard/si-wizard-forms.html
  • src/app/examples/si-wizard/si-wizard-playground.html
🧰 Additional context used
🧠 Learnings (21)
📚 Learning: 2025-12-22T13:16:19.243Z
Learnt from: mistrykaran91
Repo: siemens/element PR: 1234
File: projects/element-ng/icon/element-icons.ts:166-167
Timestamp: 2025-12-22T13:16:19.243Z
Learning: In projects/element-ng/icon/element-icons.ts, the elementCheckedImageShape icon intentionally uses base64 encoding instead of utf8 encoding (which is used for other icons). This approach is considered safer and correct for this specific icon and should not be flagged as an inconsistency.

Applied to files:

  • projects/element-ng/status-bar/si-status-bar.component.html
📚 Learning: 2025-12-22T13:04:35.578Z
Learnt from: mistrykaran91
Repo: siemens/element PR: 1234
File: src/app/examples/ag-grid/ag-grid-empty-state.ts:20-24
Timestamp: 2025-12-22T13:04:35.578Z
Learning: The SiEmptyStateComponent in siemens/element-ng accepts icon names in kebab-case format (e.g., 'element-technical-operator') that may not be directly exported as constants in the element-icons.ts file. Do not flag these as errors if they render correctly at runtime.

Applied to files:

  • projects/element-ng/status-bar/si-status-bar.component.html
  • projects/dashboards-ng/src/components/dashboard-toolbar/si-dashboard-toolbar.component.html
  • projects/element-ng/chat-messages/si-ai-message.component.html
  • projects/element-ng/notification-item/si-notification-item.component.html
  • projects/element-ng/side-panel/si-side-panel-content.component.scss
  • projects/element-ng/dashboard/widgets/si-timeline-widget/si-timeline-widget-item.component.html
  • projects/element-ng/chat-messages/si-user-message.component.html
  • projects/element-ng/tree-view/si-tree-view.component.html
  • projects/element-ng/column-selection-dialog/column-selection-editor/si-column-selection-editor.component.html
  • projects/element-ng/file-uploader/si-file-uploader.component.html
  • projects/element-ng/search-bar/si-search-bar.component.html
  • projects/element-ng/datepicker/components/si-calendar-direction-button.component.ts
  • projects/element-ng/dashboard/widgets/si-list-widget/si-list-widget-item.component.html
  • projects/element-ng/threshold/si-threshold.component.html
  • projects/element-ng/tabs/si-tab.component.html
  • projects/element-ng/navbar-vertical/si-navbar-vertical.component.html
  • projects/element-ng/electron-titlebar/si-electron-titlebar.component.html
  • projects/element-ng/datepicker/si-calendar-button.component.ts
  • projects/element-ng/application-header/launchpad/si-launchpad-factory.component.html
  • projects/element-ng/tour/si-tour.component.html
  • projects/element-ng/number-input/si-number-input.component.html
  • projects/element-ng/pills-input/si-input-pill.component.html
  • projects/element-ng/tabs-legacy/si-tabset/si-tabset-legacy.component.html
📚 Learning: 2025-12-11T14:44:11.278Z
Learnt from: spike-rabbit
Repo: siemens/element PR: 1185
File: projects/element-ng/navbar/si-navbar-item/si-navbar-item.component.html:11-11
Timestamp: 2025-12-11T14:44:11.278Z
Learning: The si-icon component in siemens/element-ng/icon automatically applies aria-hidden="true" to its content. Do not suggest adding aria-hidden="true" to si-icon elements, as accessibility is already handled internally by the component.

Applied to files:

  • projects/element-ng/status-bar/si-status-bar.component.html
  • projects/element-ng/notification-item/si-notification-item.component.html
  • projects/element-ng/dashboard/widgets/si-timeline-widget/si-timeline-widget-item.component.html
  • projects/element-ng/tree-view/si-tree-view.component.html
  • projects/element-ng/datepicker/components/si-calendar-direction-button.component.ts
  • projects/element-ng/threshold/si-threshold.component.html
  • projects/element-ng/tabs/si-tab.component.html
  • projects/element-ng/navbar-vertical/si-navbar-vertical.component.html
  • projects/element-ng/action-modal/si-alert-dialog/si-alert-dialog.component.html
  • projects/element-ng/tour/si-tour.component.html
  • projects/element-ng/toast-notification/si-toast-notification/si-toast-notification.component.html
  • projects/element-ng/pills-input/si-input-pill.component.html
  • projects/element-ng/password-toggle/si-password-toggle.component.html
  • src/app/examples/buttons/buttons.html
📚 Learning: 2025-12-09T14:31:33.543Z
Learnt from: Killusions
Repo: siemens/element PR: 998
File: projects/element-ng/chat-messages/si-ai-chat-container.component.html:14-50
Timestamp: 2025-12-09T14:31:33.543Z
Learning: In projects/element-ng/chat-messages/si-ai-chat-container.component.html, message IDs can change, so tracking by message.id is not appropriate. The component uses `track message` (object identity) which is the correct approach for this use case.

Applied to files:

  • src/app/examples/si-chat-messages/si-chat-input.html
  • projects/element-ng/chat-messages/si-ai-message.component.html
  • projects/element-ng/chat-messages/si-attachment-list.component.html
  • projects/element-ng/chat-messages/si-user-message.component.html
  • src/app/examples/si-chat-messages/si-chat-message.html
  • src/app/examples/si-chat-messages/si-chat-container.html
  • projects/element-ng/chat-messages/si-chat-input.component.html
📚 Learning: 2025-12-17T14:01:05.705Z
Learnt from: dauriamarco
Repo: siemens/element PR: 908
File: projects/element-ng/side-panel/si-side-panel.component.ts:70-74
Timestamp: 2025-12-17T14:01:05.705Z
Learning: In the Element side-panel component (projects/element-ng/side-panel/si-side-panel.component.ts), the `xxxlMinimum` breakpoint (1920px) is intentionally hardcoded as a private static constant rather than being part of the configurable `Breakpoints` interface. This design preserves full Bootstrap compatibility (which only defines breakpoints up to xxl/1400px) while allowing Element to handle ultra-wide screens explicitly without affecting the standard breakpoint configuration.

Applied to files:

  • projects/element-ng/side-panel/si-side-panel-content.component.html
  • projects/element-ng/side-panel/si-side-panel-content.component.scss
  • projects/element-ng/navbar-vertical/si-navbar-vertical.component.html
  • projects/element-ng/electron-titlebar/si-electron-titlebar.component.html
  • projects/element-ng/datepicker/si-calendar-button.component.ts
📚 Learning: 2025-12-09T14:32:26.166Z
Learnt from: Killusions
Repo: siemens/element PR: 998
File: projects/element-ng/chat-messages/si-ai-chat-container.component.html:21-47
Timestamp: 2025-12-09T14:32:26.166Z
Learning: In Angular templates, prefer using nested *ngIf blocks over *ngSwitch for branching on message types within the chat-messages components. Use *ngIf with else branches to handle distinct cases and avoid complex switch logic in HTML templates. This guideline applies to all HTML templates under projects/element-ng/chat-messages.

Applied to files:

  • projects/element-ng/chat-messages/si-ai-message.component.html
  • projects/element-ng/chat-messages/si-attachment-list.component.html
  • projects/element-ng/chat-messages/si-user-message.component.html
  • projects/element-ng/chat-messages/si-chat-input.component.html
📚 Learning: 2025-11-18T12:37:30.510Z
Learnt from: Killusions
Repo: siemens/element PR: 1040
File: projects/element-ng/chat-messages/si-chat-input.component.ts:338-349
Timestamp: 2025-11-18T12:37:30.510Z
Learning: In projects/element-ng/chat-messages/si-chat-input.component.ts, the interrupt behavior is intentionally different for button clicks vs Enter key: the button can emit interrupt even without content, but pressing Enter requires content or attachments (canSend() must be true) to emit interrupt.

Applied to files:

  • projects/element-ng/chat-messages/si-ai-message.component.html
  • projects/element-ng/chat-messages/si-attachment-list.component.html
  • projects/element-ng/chat-messages/si-user-message.component.html
  • projects/element-ng/chat-messages/si-chat-input.component.html
📚 Learning: 2026-01-07T20:42:06.440Z
Learnt from: dr-itz
Repo: siemens/element PR: 1262
File: projects/element-ng/date-range-filter/si-date-range-filter.component.ts:396-400
Timestamp: 2026-01-07T20:42:06.440Z
Learning: In projects/element-ng/date-range-filter/si-date-range-filter.component.ts, the `calculatedRange` values returned by the service's `resolveDateRangeFilter()` method are already normalized, guaranteeing that `end >= start`. Therefore, when calculating offsets from these normalized ranges (e.g., in `point2Changed`), Math.abs() is not needed because the result is already positive.

Applied to files:

  • projects/element-ng/datepicker/si-date-range.component.html
  • projects/element-ng/datepicker/components/si-calendar-direction-button.component.ts
📚 Learning: 2026-01-02T16:41:48.359Z
Learnt from: kfenner
Repo: siemens/element PR: 1005
File: docs/fundamentals/styles/sizing.md:18-26
Timestamp: 2026-01-02T16:41:48.359Z
Learning: In Element docs, sizing examples may differ between documentation and implementation to illustrate multiple valid approaches. Do not flag such differences as inconsistencies; treat them as separate illustrative examples (e.g., using height/width in docs vs block-size/inline-size in implementation). Apply this understanding across Markdown documentation files to avoid false-positive review flags.

Applied to files:

  • docs/components/layout-navigation/modals.md
  • docs/components/buttons-menus/button-group.md
📚 Learning: 2026-01-07T12:19:38.754Z
Learnt from: chintankavathia
Repo: siemens/element PR: 1240
File: projects/dashboards-ng/package.json:21-22
Timestamp: 2026-01-07T12:19:38.754Z
Learning: In the siemens/element repository, Angular peer dependencies are intentionally pinned to exact major versions (e.g., "angular/core": "21") rather than ranges in package.json files for published packages like siemens/dashboards-ng, siemens/element-ng, and siemens/element-translate-ng. This is a deliberate strategy to ensure strict version alignment.

Applied to files:

  • projects/element-ng/slider/si-slider.component.html
📚 Learning: 2025-12-01T09:34:50.469Z
Learnt from: Killusions
Repo: siemens/element PR: 1047
File: docs/fundamentals/ux-text-style-guide/basics.md:30-30
Timestamp: 2025-12-01T09:34:50.469Z
Learning: In docs/fundamentals/ux-text-style-guide/basics.md, the h4 heading level (####) for "Do's" and "Don'ts" within the dos-and-donts structure is intentional, even though it triggers the MD001 linting rule about heading hierarchy.

Applied to files:

  • playwright/snapshots/static.spec.ts-snapshots/buttons--buttons.yaml
📚 Learning: 2025-12-16T16:19:17.950Z
Learnt from: spike-rabbit
Repo: siemens/element PR: 1207
File: playwright/snapshots/si-filtered-search.spec.ts-snapshots/si-filtered-search--si-filtered-search-playground--data-entered.yaml:38-38
Timestamp: 2025-12-16T16:19:17.950Z
Learning: Do not review files in the playwright/snapshots directory, as they contain auto-generated test artifacts. Exclude any YAML snapshot files under playwright/snapshots from code reviews in the siemens/element repository. If a YAML file is not an auto-generated snapshot, verify its origin before skipping.

Applied to files:

  • playwright/snapshots/static.spec.ts-snapshots/buttons--buttons.yaml
📚 Learning: 2025-12-17T04:34:55.597Z
Learnt from: chintankavathia
Repo: siemens/element PR: 1173
File: src/app/examples/si-charts/interactive/interactive.ts:5-5
Timestamp: 2025-12-17T04:34:55.597Z
Learning: Guideline: In Angular projects using OnPush change detection (zoneless mode), you only need to call ChangeDetectorRef.markForCheck() for asynchronous operations (e.g., setTimeout, setInterval, Promises, Observables) where a change is not automatically detected. Event handlers triggered by Angular template bindings (click, input, etc.) will trigger change detection automatically and do not require explicit markForCheck() calls. Apply this broadly to TS files within Angular components/services that use OnPush; use markForCheck() selectively for async work where change detection wouldn’t run otherwise.

Applied to files:

  • projects/element-ng/datepicker/components/si-calendar-direction-button.component.ts
  • src/app/examples/si-map/si-map-custom-cluster-popover.ts
  • projects/element-ng/datepicker/si-calendar-button.component.ts
📚 Learning: 2025-12-30T13:52:33.581Z
Learnt from: dauriamarco
Repo: siemens/element PR: 1221
File: projects/element-ng/side-panel/si-side-panel.component.ts:136-142
Timestamp: 2025-12-30T13:52:33.581Z
Learning: Maintain the existing negative naming convention (e.g., disableBackdrop) across the siemens/element repository for consistency. Do not refactor to positive names (e.g., showBackdrop, hasBackdrop) unless the project explicitly changes the convention. In reviews, flag changes that alter established naming patterns in related files under projects/element-ng.

Applied to files:

  • projects/element-ng/datepicker/components/si-calendar-direction-button.component.ts
  • projects/element-ng/datepicker/si-calendar-button.component.ts
📚 Learning: 2025-12-09T14:33:54.441Z
Learnt from: Killusions
Repo: siemens/element PR: 998
File: src/app/examples/si-chat-messages/si-ai-message.ts:24-43
Timestamp: 2025-12-09T14:33:54.441Z
Learning: In src/app/examples/ (example/demo code) directories, allow and expect code duplication. Treat duplication as acceptable for demonstration code that aims to illustrate usage rather than enforce DRY. Do not enforce refactoring to remove duplication in example files; focus on readability and clarity of examples. This applies to all TypeScript files under src/app/examples (including nested subdirectories like si-chat-messages).

Applied to files:

  • src/app/examples/si-map/si-map-custom-cluster-popover.ts
📚 Learning: 2026-01-07T08:57:45.608Z
Learnt from: dauriamarco
Repo: siemens/element PR: 1226
File: src/app/examples/si-navbar-vertical/si-navbar-vertical.ts:112-115
Timestamp: 2026-01-07T08:57:45.608Z
Learning: Do not strictly enforce badge color consistency in example files under src/app/examples. Treat badge color checks as non-blocking for TypeScript files in this directory; reviewers may still note inconsistencies, but they should not require changes for these example files. Apply this guidance broadly to all files within src/app/examples.

Applied to files:

  • src/app/examples/si-map/si-map-custom-cluster-popover.ts
📚 Learning: 2026-01-09T08:44:09.549Z
Learnt from: spliffone
Repo: siemens/element PR: 896
File: src/app/examples/text/text-word-break.ts:8-8
Timestamp: 2026-01-09T08:44:09.549Z
Learning: In the siemens/element repository, all example components under src/app/examples use the same selector 'app-sample' to denote live-previewer playgrounds. Treat this as a project-wide convention and do not flag such occurrences as duplicate selector issues. If reviewing files outside this directory, apply the same pattern only when the path matches src/app/examples.

Applied to files:

  • src/app/examples/si-map/si-map-custom-cluster-popover.ts
📚 Learning: 2025-12-11T14:44:03.830Z
Learnt from: spike-rabbit
Repo: siemens/element PR: 1185
File: projects/element-ng/navbar/si-navbar-item/si-navbar-item.component.html:11-11
Timestamp: 2025-12-11T14:44:03.830Z
Learning: When reviewing HTML that uses the si-icon component from siemens/element-ng/icon, do not add or suggest aria-hidden="true" on si-icon elements. The component automatically applies aria-hidden to its content for accessibility. If aria attributes are being added for si-icon, remove them and rely on the component's built-in handling.

Applied to files:

  • src/app/examples/si-icon/si-icon.html
📚 Learning: 2026-01-07T08:57:45.608Z
Learnt from: dauriamarco
Repo: siemens/element PR: 1226
File: src/app/examples/si-navbar-vertical/si-navbar-vertical.ts:112-115
Timestamp: 2026-01-07T08:57:45.608Z
Learning: Badge color consistency in example files (src/app/examples/) is not a priority and should not be strictly enforced during reviews.

Applied to files:

  • src/app/examples/buttons/buttons.html
📚 Learning: 2025-12-03T13:02:34.875Z
Learnt from: spike-rabbit
Repo: siemens/element PR: 1058
File: docs/fundamentals/layouts/breakpoints.md:25-31
Timestamp: 2025-12-03T13:02:34.875Z
Learning: In Element documentation for CSS breakpoints and class infixes (e.g., in docs/fundamentals/layouts/breakpoints.md), _None_ is formatted with italics to indicate the absence of a class infix (representing base mobile-first styles), while actual CSS class infixes like `sm`, `md`, `lg`, `xl`, `xxl` use inline code formatting with backticks. This semantic formatting distinction is intentional.

Applied to files:

  • src/app/examples/buttons/buttons.html
📚 Learning: 2026-01-02T16:41:57.274Z
Learnt from: kfenner
Repo: siemens/element PR: 1005
File: docs/fundamentals/styles/sizing.md:18-26
Timestamp: 2026-01-02T16:41:57.274Z
Learning: In Element documentation (siemens/element), sizing utility examples in docs may intentionally differ from implementation examples to demonstrate multiple valid approaches - for example, documentation might use traditional CSS properties like `height` and `width` while the implementation example uses logical properties like `block-size` and `inline-size`. These are considered different examples rather than inconsistencies.

Applied to files:

  • src/app/examples/buttons/buttons.html
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (56)
projects/element-ng/column-selection-dialog/si-column-selection-dialog.component.html (1)

5-5: Clarify whether this button should be updated to the new .btn-icon variant.

The cancel button removes btn-sm but retains .btn-circle. Given the PR objective that "square buttons should be the new default icon buttons," this icon button may need to be updated from .btn-circle to .btn-icon (or replaced entirely) to align with the new button strategy.

Verify that this change is intentional and that circle buttons are not being phased out as the default icon button style in this context.

projects/element-ng/chat-messages/si-attachment-list.component.html (1)

47-47: Verify alignment with the new square button default.

The btn-sm modifier was removed, but the button still uses btn-circle. According to the PR objectives and reviewer comments, square buttons (btn-icon) should be the new default for icon buttons. Should this delete button also be migrated from btn-circle to btn-icon to align with the new design direction?

projects/element-ng/wizard/si-wizard.component.html (1)

124-124: Good consistency improvement with other circle buttons in the file.

The removal of btn-sm aligns this cancel button with the other circle buttons at lines 194 and 211, which also don't use the size modifier. This standardization is consistent with the PR's unified icon sizing approach.

Since this visual change increases the button size, please confirm that the layout has been tested in the horizontal wizard configuration to ensure proper spacing and alignment.

projects/element-ng/number-input/si-number-input.component.html (1)

26-45: Verify btn-sm doesn’t regress alignment/hit-area for the number-input steppers.

This swaps the stepper buttons to btn-sm (Line 30, Line 44). Given the new icon sizing system, please sanity-check in the rendered component (enabled/disabled/readonly) that the button height + my-n3 negative margins still aligns cleanly with the input and that the clickable/touch area is still acceptable. If the design intent is “square icon buttons by default,” consider whether these should be .btn-icon instead of .btn-circle.

projects/dashboards-demo/src/app/components/widget-catalog/custom-widget-catalog.component.html (1)

3-9: Consider migrating to the new default btn-icon class.

According to the PR objectives, square buttons are now the default icon buttons. This close button still uses btn-circle, which appears to be the old default. Should this button be updated to use the new btn-icon class instead to align with the new default styling?

Additionally, verify that removing btn-sm maintains the intended visual appearance and doesn't cause layout issues in the modal header.

Based on PR objectives, square buttons should be the new default icon buttons.

projects/element-ng/main-detail-container/si-main-detail-container.component.html (1)

94-94: Verify button variant choice and size change impact.

The btn-sm modifier was removed, which will increase the button size. Additionally, this button continues to use btn-circle (circular variant), while the PR objectives and kfenner's comment indicate that square buttons (.btn-icon) should be the new default for icon buttons.

Please verify:

  1. Should this back button use the new .btn-icon (square) class instead of .btn-circle to align with the new defaults?
  2. Has the visual/layout impact of the size increase been validated in the detail header?
projects/element-ng/chat-messages/si-user-message.component.html (1)

17-26: Verify button sizing consistency across chat-message components after btn-sm removal.

The btn-sm modifier has been removed from both action buttons in this component (lines 19 and 31), which aligns with the PR's transition to a unified icon button sizing system. Confirm that the new default sizing works correctly for these icon buttons in all chat-message components.

Likely an incorrect or invalid review comment.

projects/element-ng/column-selection-dialog/column-selection-editor/si-column-selection-editor.component.html (1)

29-29: Update line number references to lines 28 and 38.

The review comment references incorrect line numbers. The class attributes being modified are on lines 28 and 38, not lines 29 and 39 (which contain dynamic class bindings). Additionally, no test or snapshot files exist for this component, so the request to verify test updates is not applicable. The actual changes—removing btn-sm to align with the new icon sizing system—are correct and preserve all button functionality.

Likely an incorrect or invalid review comment.

projects/element-ng/application-header/launchpad/si-launchpad-factory.component.html (2)

91-91: AI summary is incomplete regarding the actual changes.

The AI summary states that only btn-sm was removed, but the actual changes include:

  1. Removed btn-sm modifier (mentioned in summary ✓)
  2. Removed element-cancel class (NOT mentioned in summary ✗)
  3. Added positioning classes: position-absolute top-0 end-0 mt-6 me-4 (NOT mentioned in summary ✗)

The positioning approach appears to have changed significantly.


89-96: Verify that the explicit positioning classes provide equivalent styling to the removed element-cancel class.

The search found extensive usage of element-cancel as a CSS class in other components throughout the codebase (si-modals, dialogs, filter-bar, etc.), and in test files that query for .element-cancel selectors. However, no CSS rule definition for .element-cancel was found. This means the class is either a framework utility not visible in the searched files, or defined in compiled/built output.

Without access to the actual styling rules for element-cancel, it cannot be confirmed that the replacement with explicit positioning utilities (position-absolute top-0 end-0 mt-6 me-4) provides the same visual and functional behavior. Verify:

  1. The button displays correctly positioned in the top-right corner with the new utility classes
  2. The button size and appearance match the original styling (review mentions btn-sm removal—confirm this doesn't negatively impact the component)
  3. Test coverage for this component's button positioning/appearance is updated if applicable
projects/element-ng/side-panel/si-side-panel-content.component.scss (1)

116-117: The hardcoded 24px value is correct, but the optional refactor is not feasible.

The value correctly matches $btn-icon-size-sm: 24px defined in projects/element-theme/src/styles/bootstrap/_buttons.scss. However, this variable is not exported through the all-variables namespace (only bootstrap/functions, bootstrap/variables, and bootstrap/mixins are forwarded), so the suggested refactor to use all-variables.$btn-icon-size-sm would not work. The comment "Keep in sync with $btn-icon-size-sm" is appropriate given the import constraints.

projects/element-ng/chat-messages/si-chat-input.component.html (1)

51-106: No changes needed — these circular buttons are correctly styled with btn-circle.

The btn-circle and btn-icon variants are intentionally different shapes (circular vs. square) and should not be interchanged. Chat interface buttons should remain circular (btn-circle), while btn-icon is intended for square icon buttons elsewhere in the design system. The styling is correct as-is.

Likely an incorrect or invalid review comment.

src/app/examples/datatable/datatable-grouped-rows.html (1)

21-21: LGTM!

Removing btn-sm aligns with the PR's goal of standardizing icon-button sizing through the new unified sizing system.

projects/element-ng/toast-notification/si-toast-notification/si-toast-notification.component.html (1)

34-34: LGTM!

Removing btn-sm aligns with the PR's standardization of icon-button sizing. The button will now use the default size from the unified icon-button sizing system.

docs/components/buttons-menus/button-group.md (1)

91-91: The documentation is accurate. The btn-icon-size-sm variable in the theme implementation is defined as 24px (projects/element-theme/src/styles/bootstrap/_buttons.scss, line 16), which matches the documented value on line 91.

projects/element-ng/action-modal/si-alert-dialog/si-alert-dialog.component.html (1)

7-14: Verify sizing change and continued use of btn-circle.

Two observations:

  1. The btn-sm modifier was removed, making this button use the default size. Verify this aligns with the intended visual design and maintains consistency with other modal close buttons across the application.

  2. The button continues to use btn-circle. With square buttons (.btn-icon) being introduced as the new default in this PR, consider whether modal close buttons should be migrated to .btn-icon for consistency with the new design system.

projects/element-ng/status-bar/si-status-bar.component.html (1)

107-116: Verify sizing change and continued use of btn-circle.

Two observations:

  1. The btn-sm modifier was removed, making this button use the default size. Verify this maintains visual consistency with the status bar layout and other icon buttons in the component.

  2. The button continues to use btn-circle. Given that this PR introduces square buttons (.btn-icon) as the new default for icon-only buttons, consider whether this mute toggle button should be migrated to .btn-icon for consistency with the new design system.

projects/element-ng/slider/si-slider.component.html (1)

4-4: LGTM! Verify visual consistency with the new icon sizing system.

The removal of btn-sm from both decrement and increment buttons aligns with the broader refactor to a unified icon-based sizing approach. The buttons retain their btn-circle and btn-secondary classes, and no functional attributes have changed.

Please verify that the new icon sizing system provides consistent visual sizing for these slider control buttons across all breakpoints and themes.

Also applies to: 62-62

src/app/examples/si-datepicker/si-modal-service.html (1)

9-9: LGTM! Consistent with the icon sizing refactor.

The removal of btn-sm from the modal close button aligns with the project-wide migration to unified icon-based sizing. The button maintains all functional attributes and accessibility properties.

projects/element-ng/action-modal/si-delete-confirmation-dialog/si-delete-confirmation-dialog.component.html (1)

9-9: LGTM! Sizing refactor applied consistently.

The removal of btn-sm from the delete confirmation dialog's cancel button is consistent with the unified icon sizing approach across all modal close buttons in this PR.

projects/element-ng/datepicker/components/si-calendar-direction-button.component.ts (1)

24-24: LGTM! Template sizing updated consistently.

The removal of btn-sm from the calendar direction button template aligns with the project-wide icon sizing refactor. Component logic and public API remain unchanged.

projects/element-ng/dashboard/widgets/si-list-widget/si-list-widget-item.component.html (1)

26-26: LGTM! Action button sizing updated consistently.

The removal of btn-sm from the list widget item's action button follows the unified icon sizing refactor pattern. The custom padding (p-2) is preserved, and all functional attributes remain intact.

projects/element-ng/threshold/si-threshold.component.html (2)

6-13: Verify visual appearance after removing btn-sm.

The removal of btn-sm aligns with the new unified icon sizing system introduced in this PR. However, ensure the button size remains appropriate in the threshold component's layout.


51-59: LGTM - consistent sizing change.

The removal of btn-sm is consistent with the delete button above and the broader PR changes to adopt unified icon button sizing.

src/app/examples/si-map/si-map-custom-cluster-popover.ts (1)

24-31: LGTM - example code updated for new sizing.

The removal of btn-sm demonstrates the new default icon button sizing in example code.

src/app/examples/si-modals/app-table.component.html (1)

4-10: LGTM - modal close button sizing updated.

The removal of btn-sm is consistent with the unified icon button sizing system. The element-cancel class provides the close icon styling.

projects/element-ng/action-modal/si-edit-discard-dialog/si-edit-discard-dialog.component.html (1)

7-14: LGTM - breaking change acknowledged.

The removal of btn-sm from the modal close button is consistent with the PR's unified icon sizing system. This is a visual breaking change (as indicated by the PR label), so ensure it's documented in release notes.

projects/element-ng/datepicker/si-calendar-button.component.ts (1)

46-57: > Likely an incorrect or invalid review comment.

projects/element-ng/action-modal/si-confirmation-dialog/si-confirmation-dialog.component.html (1)

9-9: LGTM: Consistent with unified icon sizing approach.

The removal of btn-sm aligns with the PR's goal of introducing icon-based sizing. The button will now use the new unified sizing system for icon buttons.

src/app/examples/si-notification-item/si-notification-item.html (1)

71-71: LGTM: Consistent button sizing updates.

The removal of btn-sm from all three quick-action buttons maintains consistency across the Custom Action Integration section and aligns with the new icon-based sizing system.

Also applies to: 78-78, 113-113

projects/element-ng/side-panel/si-side-panel-content.component.html (1)

17-17: LGTM: Side panel button sizing standardized.

All five side panel header buttons now use the unified icon sizing system. The removal of btn-sm is consistent across navigation, fullscreen, close, and collapse-toggle buttons.

Also applies to: 38-38, 56-56, 70-70, 80-80

src/app/examples/si-modals/si-modal-service.html (1)

32-32: LGTM: Modal close button sizing standardized.

All three modal templates now have consistent close button styling without btn-sm, using the unified icon sizing approach.

Also applies to: 52-52, 78-78

projects/element-ng/photo-upload/si-photo-upload.component.html (1)

64-64: LGTM: Photo upload modal button updated consistently.

The removal of btn-sm from the modal close button aligns with the unified icon sizing approach applied across all modal components in this PR.

src/app/examples/si-chat-messages/si-attachment-list.html (1)

18-24: LGTM: removing btn-sm aligns with the new icon sizing direction.

Just make sure the close affordance still renders (since the button has no inner <si-icon>) and the modal header spacing looks correct in snapshots/visual tests.

src/app/examples/si-chat-messages/si-chat-message.html (1)

8-19: LGTM: consistent removal of btn-sm on chat action buttons.

Please verify the actions layout doesn’t overflow on narrow widths (especially the actionsPosition="side" example) and snapshots are updated accordingly.

Also applies to: 20-29, 40-50

projects/element-ng/electron-titlebar/si-electron-titlebar.component.html (1)

8-17: btn-sm is confirmed as the correct sizing mechanism for these buttons.

btn-xs has been removed from the codebase per the buttons refactor (commit 7a73280), and btn-sm now standardizes to 24px across all button types. The titlebar component was updated in that refactor and correctly uses btn-sm.

However, the inconsistency remains valid: electron-title-bar-btn is applied only to the menu button (line 31) but not to the back/forward buttons (lines 10, 20). Since the component styles don't define any rules for this class, clarify whether it should be applied consistently to all three buttons for uniform spacing, or whether the menu button requires this distinction for a specific reason.

projects/element-ng/tour/si-tour.component.html (1)

32-32: LGTM! Sizing change aligns with icon button unification.

The removal of btn-sm is consistent with the PR's unified icon button sizing approach.

projects/element-ng/tree-view/si-tree-view.component.html (1)

4-4: LGTM! Sizing changes align with icon button unification.

The removal of btn-sm from both expand/collapse buttons is consistent with the PR's unified icon button sizing approach.

Also applies to: 12-12

src/app/examples/datatable/bootstrap.html (1)

41-41: LGTM! Consistent sizing changes across all dropdown buttons.

The removal of btn-sm is consistently applied to all four dropdown buttons, aligning with the PR's unified icon button sizing approach.

Also applies to: 75-75, 104-104, 133-133

projects/dashboards-ng/src/components/dashboard-toolbar/si-dashboard-toolbar.component.html (1)

11-11: LGTM! Sizing change aligns with icon button unification.

The removal of btn-sm from the icon-only edit button (false branch) is consistent with the PR's unified icon button sizing approach. The label-visible variant remains unchanged.

src/app/examples/si-chat-messages/si-chat-container.html (1)

31-31: LGTM! Sizing changes align with icon button unification.

The removal of btn-sm from the per-action button and modal close button is consistent with the PR's unified icon button sizing approach.

Also applies to: 80-80

projects/element-ng/chat-messages/si-ai-message.component.html (1)

16-16: LGTM! Button sizing updated consistently.

Removal of btn-sm aligns with the PR's unified icon-based sizing system. The buttons will now use the default icon button size.

Also applies to: 28-28

projects/element-ng/filtered-search/si-filtered-search-value.component.html (1)

122-132: LGTM! Button sizing updated consistently.

The change from btn-xs to btn-sm aligns with the PR's unified icon-based sizing system. The clear button maintains proper accessibility with aria-label and disabled state handling.

projects/element-ng/search-bar/si-search-bar.component.html (1)

22-32: LGTM! Button sizing updated consistently.

The change from btn-xs to btn-sm aligns with the PR's unified icon-based sizing system. The cancel button maintains proper accessibility with aria-label and handles disabled/readonly states correctly.

projects/element-ng/password-toggle/si-password-toggle.component.html (1)

3-10: Size change looks fine; just sanity-check field alignment.

Line 5 moves btn-xsbtn-sm. This is consistent with the sizing standardization, but please verify it doesn’t misalign/overflow in the smallest input variants (especially in dense forms).

projects/element-ng/tabs-legacy/si-tabset/si-tabset-legacy.component.html (1)

62-68: Event propagation is properly stopped; no functional issue with this change.

The closeTab($event, tab) method already calls event.stopPropagation() as the first operation, preventing the click from triggering the parent tab's selectTab() handler. Additionally, the btn-xs → btn-sm class change is not a size increase—both maintain 24px for icon buttons per the button refactor (commit 7a73280). No truncation risk or functional concern.

src/app/examples/buttons/buttoncategories.html (1)

10-36: LGTM!

The button class updates align well with the new unified icon sizing system. The navigation buttons appropriately use btn-lg for prominence, while the action buttons now use the default size. All buttons retain proper aria-label attributes for accessibility.

src/app/examples/si-list-details/si-list-details.html (1)

21-44: LGTM!

Removing btn-sm from these circle buttons aligns with the unified icon sizing system. The buttons will now use the default size ($btn-icon-size-default), and accessibility attributes are properly maintained.

src/app/examples/si-list-details/si-list-details-router.html (1)

21-44: LGTM!

Changes are consistent with the sibling file si-list-details.html. The btn-sm removal aligns with the unified icon sizing system introduced in this PR.

projects/element-ng/file-uploader/si-file-uploader.component.html (1)

56-90: LGTM!

The btn-sm removal from these action buttons aligns with the unified icon sizing system. All buttons maintain proper accessibility attributes via title and aria-label bindings. Note that this is a component file, so the size change will affect all instances of the file uploader across the application.

src/app/examples/buttons/buttons.html (3)

47-127: Well-organized section for the new square icon buttons.

The new "Icon buttons" section properly demonstrates the .btn-icon class with all color variants. All buttons correctly include aria-label attributes. The section placement above circle buttons aligns with the reviewer's feedback that square buttons should be the new default.


231-260: Clarify intent of combining .btn-icon and .btn-circle classes.

These buttons use both .btn-icon and .btn-circle together. Based on the SCSS, .btn-circle will override the border-radius to 50% since it's defined after .btn-icon. If this is intentional to demonstrate that .btn-icon sizing applies to circle variants, consider adding a comment or adjusting the aria-label to clarify (e.g., "large circle button" instead of duplicating "default circle button").


283-295: LGTM!

The disabled state toggle is well-implemented using a form switch with proper label association via for/id attributes.

projects/element-theme/src/styles/bootstrap/_buttons.scss (3)

11-16: Verify intentional same font-size for default and small variants.

$btn-icon-font-size-sm (24px) equals $btn-icon-font-size-default (24px), while the button sizes differ (24px vs 32px). This keeps the icon visually consistent while the button shrinks—confirm this is the intended behavior.


152-161: LGTM on the unified selector approach.

The :is(.btn-circle, .btn-icon, .btn-close):not(.btn-group .btn) selector cleanly consolidates shared rules while properly excluding button-group contexts where different sizing applies. The .icon margin reset is appropriately scoped here.


191-198: Verify .btn-close:not(.btn-tertiary) selector intent.

This selector applies ghost styling to .btn-close unless it has .btn-tertiary. Confirm this is intentional—it means .btn-close.btn-tertiary will not receive the ghost background/color variables defined here and will instead inherit from the .btn-tertiary rules above.

@dauriamarco dauriamarco requested a review from kfenner January 9, 2026 13:17
@dauriamarco dauriamarco requested a review from a team as a code owner January 19, 2026 11:43
@dauriamarco dauriamarco removed the breaking-changes Marks issues and PRs that are breaking the API label Jan 19, 2026
Copy link
Member

@panch1739 panch1739 left a comment

Choose a reason for hiding this comment

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

@dauriamarco Perfect! I just have one observation.

The size of the icons buttons is 40px (large). I think it would be nicer if we show all the circle/square buttons in the default 32px, and just show the 40px and 24px variants in the sizing section.

Copy link
Member

@spike-rabbit spike-rabbit left a comment

Choose a reason for hiding this comment

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

Looks good, would just be good if you could get rid of the :nots

@dauriamarco
Copy link
Member Author

@dauriamarco Perfect! I just have one observation.

The size of the icons buttons is 40px (large). I think it would be nicer if we show all the circle/square buttons in the default 32px, and just show the 40px and 24px variants in the sizing section.

Sounds good 👍 If that works for you, I’ll make this change in one of the other two PRs (#1263 or #1329) where the sizing will be correct.

Copy link
Member

@spike-rabbit spike-rabbit left a comment

Choose a reason for hiding this comment

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

The code is perfect now. I am just not 100% about the NOTE.

@panch1739 this is the current note which will show also in the changelog.

NOTE: The new square icon buttons (`.btn-icon`) are introduced as the
new default style for icon buttons. The existing circle buttons (`.btn-circle`)
are now reserved for cases where a circular shape is explicitly required.

I think we should also introduce some guidance for projects here. Should they change now stuff?

@panch1739
Copy link
Member

panch1739 commented Jan 20, 2026

The code is perfect now. I am just not 100% about the NOTE.

@panch1739 this is the current note which will show also in the changelog.

NOTE: The new square icon buttons (`.btn-icon`) are introduced as the
new default style for icon buttons. The existing circle buttons (`.btn-circle`)
are now reserved for cases where a circular shape is explicitly required.

I think we should also introduce some guidance for projects here. Should they change now stuff?

@spike-rabbit Sounds perfect, I also have a docs PR #1218 updating that info and switching relevant images. I think that we would need to prepare some documentation or tutorial, because im sure there will be questions regardless the note in the code...

The note is fine as is written, but if you want more detail, maybe we can say something like:

"Square buttons are now the default. Circular buttons remain available but should only be used for floating or standalone actions, or when the surrounding container explicitly requires a circular shape.
Use square buttons by default going forward. We recommend teams review their screens and switch to square buttons where it makes sense. This is a visual change with no functional impact.
"

What do you think?

Introduces square icon buttons (`.btn-icon`) in addition to the existing circle
buttons (`.btn-circle`). They follow the same sizing options (lg, sm, xs) and
integrate seamlessly with button groups.

NOTE: The new square icon buttons (`.btn-icon`) are introduced as the
new default style for icon buttons. The existing circle buttons (`.btn-circle`)
are now reserved for cases where a circular shape is explicitly required.
Copy link
Member

@spike-rabbit spike-rabbit left a comment

Choose a reason for hiding this comment

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

💯

@github-actions
Copy link

Code Coverage

@spike-rabbit spike-rabbit merged commit acb4069 into main Jan 20, 2026
10 checks passed
@spike-rabbit spike-rabbit deleted the feat/btn-icon branch January 20, 2026 08:03
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.

6 participants