Skip to content

refactor: drop unused legacy renderer container & its portal elements - #549

Merged
dkamburov merged 6 commits into
masterfrom
dpetev/cleanup-container-portal-handling
Oct 23, 2026
Merged

dkamburov merged 6 commits into
masterfrom
dpetev/cleanup-container-portal-handling

Conversation

@damyanpetev

@damyanpetev damyanpetev commented Oct 20, 2026 •

Copy link
Copy Markdown
Member

Since #478 every component renders its own web component element: directly, with its values as attributes, or adopted by the client renderer (data-ig-root) and driven through descriptions. The legacy path, a wrapper div with an igc-component-renderer-container the renderer created the element in, was left reachable only by the base classes, which name no element. This removes it on both sides.

It also matters for the full package taking this one as a dependency: the client registered igc-portal-entrance, igc-portal-exit and igc-portal-item without a guard on every load, and a second customElements.define of the same name throws. Those elements only served the removed path. igc-component-renderer-container itself was never a defined custom element, so it never collided.

What changes

ℹ️ Commit steps in groups of related changes for easier review

  • Rendering a class without an element of its own throws an InvalidOperationException that names it, instead of rendering a wrapper the client never filled. Only the base classes get there, such as IgbInputBase<T> or IgbCalendarBase; nothing working rendered one.
  • Client side, the renderer adopts the data-ig-root element itself, creates child elements with document.createElement, and finds the component and its template holder on the element. The container class and the portal elements are gone.
  • ResolveDisplay and SupportsVisualChildren are removed; they only styled the wrapper and turned on its portal.
  • Six base classes named placeholder tags no web component defines (igc-button-base, igc-checkbox-base, igc-progress-base, igc-slider-base, igc-base-alert-like, igc-base-option-like). They no longer set a render mode; every component derived from them sets its own.

Type of Change (check all that apply):

  • Bug fix
  • New functionality
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Refactoring (no functional changes)
  • Documentation
  • Demos
  • CI/CD
  • Tests
  • Changelog

Component(s) / Area(s) Affected:

How Has This Been Tested?

  • Unit tests
  • Manual testing
  • Automated e2e tests

Test Configuration:

  • .NET version:
  • Hosting model:
  • Browser(s):
  • OS:

Checklist:

  • All relevant tags have been applied to this PR
  • This PR includes unit tests covering all the new code
  • This PR includes API docs for newly added methods/properties
  • This PR includes general feature table updates in the root README.MD
  • This PR includes CHANGELOG.MD updates for newly added functionality
  • This PR contains breaking changes
  • This PR includes behavioral changes and the feature specification has been updated with them
  • Accessibility (ARIA, keyboard navigation, focus management) has been verified

Closes #

Comment thread src/src/ig/igniteui-core/ComponentRendererAdapter.ts Dismissed

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟢 Approval recommended

Static review supports removal of the unused rendering path without changing concrete component behavior, with no unresolved blocking issues.

No open issues 🎉

What changed in this PR

Completes the cleanup after #478 by removing the unused renderer container and portal infrastructure while retaining concrete components’ existing rendering paths.

Changes:

  • Removes legacy containers, portal registration, and obsolete wrapper-rendering overrides.
  • Simplifies client element adoption and rejects base classes without an element.
  • Adds render-mode assertions and updates test guidance.
File Description
tests/​IgniteUI.Blazor.Tests/​ScriptPropTests.cs Covers base script properties through derived components.
tests/​IgniteUI.Blazor.Tests/​MaskInputTests.cs Enables adopted-element assertion; updates comment.
tests/​IgniteUI.Blazor.Tests/​DateTimeInputTests.cs Enables adopted-element assertion.
tests/​IgniteUI.Blazor.Tests/​DateRangePickerTests.cs Adds adopted-element assertion.
tests/​IgniteUI.Blazor.Tests/​DatePickerTests.cs Adds adopted-element assertion.
tests/​IgniteUI.Blazor.Tests/​ComboTests.cs Adds adopted-element assertion.
tests/​IgniteUI.Blazor.Tests/​ColorPickerTests.cs Enables adopted-element assertion.
tests/​IgniteUI.Blazor.Tests/​ChatTests.cs Enables adopted-element assertion.
tests/​IgniteUI.Blazor.Tests/​CalendarTests.cs Adds adopted-element assertion.
tests/​IgniteUI.Blazor.Tests/​BaseControlTests.cs Tests rejection of elementless bases.
src/​src/​index.ts Removes portal registration and container indirection.
src/​src/​ig/​igniteui-core/​igc-portal.ts Deletes legacy portal elements.
src/​src/​ig/​igniteui-core/​igc-component-renderer-container-component.ts Deletes legacy container implementation.
src/​src/​ig/​igniteui-core/​ComponentRendererAdapter.ts Simplifies element creation and root adoption.
src/​componentsBase/​IgbComponentBase.cs Removes wrapper rendering; rejects missing tags.
src/​components/​Blazor/​TreeItem.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Tree.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Tooltip.cs Removes unused wrapper overrides.
src/​components/​Blazor/​ToggleButton.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Toast.cs Removes unused wrapper overrides.
src/​components/​Blazor/​TileManager.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Tile.cs Removes unused wrapper overrides.
src/​components/​Blazor/​ThemeProvider.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Textarea.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Tabs.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Tab.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Switch.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Stepper.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Step.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Splitter.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Snackbar.cs Removes unused wrapper overrides.
src/​components/​Blazor/​SliderLabel.cs Removes unused wrapper overrides.
src/​components/​Blazor/​SliderBase.cs Removes placeholder tag and rendering overrides.
src/​components/​Blazor/​Slider.cs Removes unused wrapper overrides.
src/​components/​Blazor/​SelectItem.cs Removes unused wrapper overrides.
src/​components/​Blazor/​SelectHeader.cs Removes unused wrapper overrides.
src/​components/​Blazor/​SelectGroup.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Select.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Ripple.cs Removes unused wrapper overrides.
src/​components/​Blazor/​RatingSymbol.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Rating.cs Removes unused wrapper overrides.
src/​components/​Blazor/​RangeSlider.cs Removes unused wrapper overrides.
src/​components/​Blazor/​RadioGroup.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Radio.cs Removes unused wrapper overrides.
src/​components/​Blazor/​QrCode.cs Removes unused wrapper overrides.
src/​components/​Blazor/​ProgressBase.cs Removes placeholder tag and rendering overrides.
src/​components/​Blazor/​NavDrawerItem.cs Removes unused wrapper overrides.
src/​components/​Blazor/​NavDrawerHeaderItem.cs Removes unused wrapper overrides.
src/​components/​Blazor/​NavDrawer.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Navbar.cs Removes unused wrapper overrides.
src/​components/​Blazor/​MaskInput.cs Removes unused portal override.
src/​components/​Blazor/​ListItem.cs Removes unused wrapper overrides.
src/​components/​Blazor/​ListHeader.cs Removes unused wrapper overrides.
src/​components/​Blazor/​List.cs Removes unused wrapper overrides.
src/​components/​Blazor/​LinearProgress.cs Removes unused wrapper overrides.
src/​components/​Blazor/​InputBase.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Input.cs Removes unused wrapper overrides.
src/​components/​Blazor/​IconButton.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Icon.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Highlight.cs Removes unused wrapper overrides.
src/​components/​Blazor/​ExpansionPanel.cs Removes unused wrapper overrides.
src/​components/​Blazor/​DropdownItem.cs Removes unused wrapper overrides.
src/​components/​Blazor/​DropdownHeader.cs Removes unused wrapper overrides.
src/​components/​Blazor/​DropdownGroup.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Dropdown.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Divider.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Dialog.cs Removes unused wrapper overrides.
src/​components/​Blazor/​DateTimeInputBase.cs Removes unused wrapper overrides.
src/​components/​Blazor/​DateTimeInput.cs Removes unused portal override.
src/​components/​Blazor/​DateRangePicker.cs Removes unused portal override.
src/​components/​Blazor/​DatePicker.cs Removes unused portal override.
src/​components/​Blazor/​ComboBoxBaseLike.cs Removes unused wrapper-display override.
src/​components/​Blazor/​Combo.cs Removes unused portal override.
src/​components/​Blazor/​ColorPicker.cs Removes unused portal override.
src/​components/​Blazor/​CircularProgress.cs Removes unused wrapper overrides.
src/​components/​Blazor/​CircularGradient.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Chip.cs Removes unused wrapper overrides.
src/​components/​Blazor/​CheckboxBase.cs Removes placeholder tag and rendering overrides.
src/​components/​Blazor/​Checkbox.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Chat.cs Removes unused portal override.
src/​components/​Blazor/​CarouselSlide.cs Removes unused wrapper overrides.
src/​components/​Blazor/​CarouselIndicator.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Carousel.cs Removes unused wrapper overrides.
src/​components/​Blazor/​CardMedia.cs Removes unused wrapper overrides.
src/​components/​Blazor/​CardHeader.cs Removes unused wrapper overrides.
src/​components/​Blazor/​CardContent.cs Removes unused wrapper overrides.
src/​components/​Blazor/​CardActions.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Card.cs Removes unused wrapper overrides.
src/​components/​Blazor/​CalendarBase.cs Removes unused wrapper-display override.
src/​components/​Blazor/​Calendar.cs Removes unused portal override.
src/​components/​Blazor/​ButtonGroup.cs Removes unused wrapper overrides.
src/​components/​Blazor/​ButtonBase.cs Removes placeholder tag and rendering overrides.
src/​components/​Blazor/​Button.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Breadcrumbs.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Breadcrumb.cs Removes unused wrapper overrides.
src/​components/​Blazor/​BaseOptionLike.cs Removes placeholder tag and rendering overrides.
src/​components/​Blazor/​BaseComboBox.cs Removes unused wrapper-display override.
src/​components/​Blazor/​BaseAlertLike.cs Removes placeholder tag and rendering overrides.
src/​components/​Blazor/​Banner.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Badge.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Avatar.cs Removes unused wrapper overrides.
src/​components/​Blazor/​Accordion.cs Removes unused wrapper overrides.
.agents/​skills/​write-library-tests/​SKILL.md Documents render-mode assertions and inherited script coverage.

Review effort: Balanced

@damyanpetev damyanpetev added the squash-merge Merge PR with "Squash and Merge" option label Oct 23, 2026
@dkamburov dkamburov added the ✅ status: verified Applies to PRs that have passed manual verification label Oct 23, 2026
@dkamburov
dkamburov merged commit 175cf28 into master Oct 23, 2026
8 checks passed
@dkamburov
dkamburov deleted the dpetev/cleanup-container-portal-handling branch October 23, 2026 14:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

refactoring squash-merge Merge PR with "Squash and Merge" option 🧪 ci: tests ✅ status: verified Applies to PRs that have passed manual verification

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants