Skip to content

topic-deprecation-removals#119

Merged
coryrylan merged 4 commits into
mainfrom
topic-deprecation-removals
Jun 6, 2026
Merged

topic-deprecation-removals#119
coryrylan merged 4 commits into
mainfrom
topic-deprecation-removals

Conversation

@coryrylan
Copy link
Copy Markdown
Collaborator

@coryrylan coryrylan commented Jun 4, 2026

Summary by CodeRabbit

  • Bug Fixes

    • Removed deprecated accordion, card, and progress-ring slot patterns; use default slots instead.
    • Removed badge trend status support; use task or support statuses.
    • Removed combobox notags property; use tag-layout="hidden".
    • Removed deprecated panel components; migrate to nve-page-panel.
    • Removed typography eyebrow variant; use label sm.
    • Removed layout grow variant; use full.
    • Simplified button interaction API.
    • Toast status="muted"prominence="muted".
  • Documentation

    • Updated migration and component guides for removed features.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Jun 4, 2026

Ready to act? Review this PR in Change Stack to turn feedback into patch suggestions you can inspect and refine.

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

PR removes deprecated exported type aliases, component slot contracts, reactive properties, and deprecated CSS selectors. Lint rules expand to detect value-specific deprecations and CSS custom properties in both CSS and HTML. Tests, examples, documentation, and build configuration are aligned to the narrowed component contracts.

Changes

Deprecation Removal and Enforcement Expansion

Layer / File(s) Summary
Deprecated type aliases and status contract narrowing
projects/core/build/icons.js, projects/core/src/icon/icons.ts, projects/core/src/internal/types/index.ts, projects/core/src/button/button.ts, projects/core/src/badge/badge.ts, projects/core/src/badge/badge.test.ts, projects/core/src/toast/toast.ts, projects/core/src/toast/toast.test.ts
Exported IconNames, FlatInteraction, Inverse, TrendStatus type aliases removed. Button.interaction union narrowed to Interaction, Badge.status narrowed to exclude TrendStatus, Toast.status narrowed to SupportStatus only. Associated test coverage for removed types updated.
Accordion deprecated slot removal and suffix migration
projects/core/src/accordion/accordion.ts, projects/core/src/accordion/accordion.css, projects/core/src/accordion/accordion-header.css, projects/core/src/accordion/accordion.snippets.html, projects/core/src/accordion/accordion.examples.ts, projects/core/src/accordion/accordion.test.ts, projects/core/src/accordion/accordion.test.visual.ts
AccordionHeader removes deprecated title/subtitle/actions named slots and renders default slot instead. CSS class and slot-detection logic renamed from has-action to has-suffix. Snippets updated to remove slot="title" and change slot="actions" to slot="suffix". Tests updated to verify suffix-based alignment and assert deprecated slots are absent.
Card and ProgressRing deprecated slot removal
projects/core/src/card/card.ts, projects/core/src/card/card-header.css, projects/core/src/card/card.snippets.html, projects/core/src/card/card.test.ts, projects/core/src/progress-ring/progress-ring.ts, projects/core/src/progress-ring/progress-ring.test.ts
CardHeader removes deprecated title/subtitle/header-action named slots, adds nve-tabs slotted styling. ProgressRing removes deprecated status-icon named slot. Templates updated to use wrapper markup with non-slotted structure. Tests verify slot absence and default slot assignment.
PagePanel action-slot migration and closable/expandable removal
projects/core/src/page/page-panel/page-panel.ts, projects/core/src/page/page-panel/page-panel.test.ts, projects/core/src/page/page-panel/page-panel.test.visual.ts, projects/core/src/page/page-panel/page-panel.global.css, projects/core/src/page/page.test.visual.ts
PagePanel removes deprecated closable/expandable properties and default close/collapse icon-button fallback, moves TypeExpandableController to constructor, simplifies render to only display explicit actions slot content. Tests decouple from internal IconButton, focus on command-driven interactions. Visual fixtures embed explicit nve-icon-button elements in actions slots.
Panel deprecation guidance and lint tolerance updates
projects/core/src/panel/panel.ts, projects/core/src/panel/panel.examples.ts, projects/core/src/panel/panel.test.ts, projects/core/src/panel/panel.test.axe.ts, projects/core/src/panel/panel.test.lighthouse.ts, projects/core/src/panel/panel.test.ssr.ts, projects/core/src/panel/panel-header.test.ts, projects/core/src/panel/panel-footer.test.ts, projects/site/src/_11ty/layouts/common.js
Panel component deprecation messages updated to recommend nve-page-panel* alternatives. ESLint disable directives added to panel tests allowing deprecated-tag assertions. Navigation removes panel docs entry.
Combobox notags removal and Toast muted handling
projects/core/src/combobox/combobox.ts, projects/core/src/combobox/combobox.test.ts, projects/core/src/toast/toast.ts
Combobox removes deprecated notags property, tag-hiding now relies solely on tagLayout === 'hidden'. Toast removes conditional icon-hiding on status === 'muted', icon always renders when status is set. Tests updated to reflect new behavior.
Popover trigger attribute and delay migration
projects/core/src/copy-button/copy-button.ts, projects/core/src/copy-button/copy-button.test.ts, projects/core/src/toggletip/toggletip.examples.ts, projects/core/src/toggletip/toggletip.test.axe.ts, projects/core/src/menu/menu.examples.ts, projects/core/src/alert/alert.css
Removes deprecated trigger attribute from CopyButton toast/tooltip. Menu and Toggletip examples migrate from open-delay to interest-delay-start CSS property, from trigger/anchor to popovertarget. Alert CSS updates button selector from interaction='flat' to container='flat'.
CSS variable wiring and deprecated selector removal
projects/core/src/breadcrumb/breadcrumb.css, projects/core/src/breadcrumb/breadcrumb.ts, projects/core/src/button/button.css, projects/core/src/icon-button/icon-button.css, projects/core/src/tabs/tabs.css, projects/core/src/tabs/tabs.global.css, projects/core/src/tabs/tabs-item.css, projects/core/src/tabs/tabs.ts, projects/core/src/tabs/tabs.test.visual.ts, projects/styles/src/layout.css, projects/styles/src/typography.css
Breadcrumb updates internal variable mappings to derive directly from host-level properties. Tabs adds CSS Anchor for selected indicator positioning, removes border-based variable indirection. Button and icon-button remove deprecated interaction variant selectors. Layout and typography selectors remove grow/eyebrow from shared styling blocks.
Lint rule support for value-specific attribute deprecations
projects/lint/src/eslint/rules/no-deprecated-attributes.ts, projects/lint/src/eslint/rules/no-deprecated-attributes.test.ts
Extends DeprecatedAttributeConfig.values to support per-value replacement maps, adds value-specific replacements for nve-button, nve-icon-button, and nve-toast attributes. Rule now reports with either fixed or value-derived replacement, updating message templates and error reporting logic.
Expanded CSS deprecation detection to HTML and CSS
projects/lint/src/eslint/rules/no-deprecated-css-variable.ts, projects/lint/src/eslint/rules/no-deprecated-css-variable.test.ts, projects/lint/src/eslint/configs/html.ts, projects/lint/README.md, projects/lint/src/eslint/internals/attributes.ts
no-deprecated-css-variable rule expands from --mlv-* theme variables to configured breadcrumb and tabs custom properties with HTML visitor support for style attributes and tags. Adds autofix for CSS declarations and error-only reporting for HTML. Deprecation repair mappings updated for eyebrowlabel sm and growfull.
Lint rules for slots, tags, global attributes, and enum validation
projects/lint/src/eslint/rules/no-deprecated-slots.test.ts, projects/lint/src/eslint/rules/no-deprecated-tags.ts, projects/lint/src/eslint/rules/no-deprecated-tags.test.ts, projects/lint/src/eslint/rules/no-deprecated-global-attribute-value.ts, projects/lint/src/eslint/rules/no-deprecated-global-attribute-value.test.ts, projects/lint/src/eslint/rules/no-deprecated-popover-attributes.ts, projects/lint/src/eslint/rules/no-deprecated-popover-attributes.test.ts, projects/lint/src/eslint/rules/no-unexpected-attribute-value.ts, projects/lint/src/eslint/rules/no-unexpected-attribute-value.test.ts, projects/lint/src/eslint/rules/no-unexpected-global-attribute-value.test.ts
no-deprecated-slots test fixtures updated to card-header/progress-ring examples. no-deprecated-tags extended to include panel→page-panel mappings. DEPRECATED_ATTRIBUTE_VALUES emptied to defer global-attribute deprecations. Popover attribute replacements refactored to per-attribute maps. Enum-value validation defers to deprecation rule.
Migration docs, integration examples, and tooling updates
projects/site/src/docs/about/migration.md, projects/site/src/docs/elements/progress-ring.md, projects/site/src/docs/integrations/lit.md, projects/site/src/docs/lint/index.md, projects/core/src/dialog/dialog.examples.ts, projects/core/src/grid/grid.examples.ts, projects/internals/tools/src/project/health.ts
Migration guide adds "Stability and Versioning" section and marks Combobox notags, Layout full, and Typography eyebrow as removed. Integration docs and examples updated to label sm typography. Progress-ring docs switch to default slot. ESLint disables added to deprecated component examples. Minor tooling cleanup (semicolons, filter simplification).

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • NVIDIA/elements#102: Modifies Accordion "Actions" caret direction coverage in projects/core/src/accordion/accordion.test.ts, directly overlapping with main PR's Accordion suffix migration and test updates.
  • NVIDIA/elements#29: Introduces no-deprecated-global-attribute-value rule and DEPRECATED_ATTRIBUTE_VALUES constant that main PR modifies by emptying to defer global-attribute deprecations.

Suggested labels

type(chore)

Suggested reviewers

  • johnyanarella
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch topic-deprecation-removals

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

working on updating

Copy link
Copy Markdown

@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

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@projects/core/src/accordion/accordion.ts`:
- Around line 161-163: The current getter get `#hasSuffixContent` checks the whole
element for [slot="suffix"], causing nested descendants to incorrectly set
has-suffix; instead, first locate the header container (element with
slot="header") and only search within that node for [slot="suffix"]. Update get
`#hasSuffixContent` to: find const header = this.querySelector('[slot="header"]')
(or return false if missing) and then check
Array.from(header.querySelectorAll('[slot="suffix"]')).length > 0 so only suffix
children in the header affect the result.

In `@projects/lint/src/eslint/rules/no-deprecated-css-variable.ts`:
- Around line 151-155: The rule currently passes the entire <style> block text
as the selector context (StyleTag handler uses context.sourceCode.getText(node)
and calls findDeprecatedCssVariables(text, text) and
getDeprecatedCssVariable(name, text), which causes selector-scoped variables to
be matched against unrelated selectors in the same stylesheet; fix by parsing
the stylesheet so you call findDeprecatedCssVariables and
getDeprecatedCssVariable with the specific selector text (or the single rule's
selector string) instead of the full stylesheet: in the StyleTag(HtmlTagNode)
handler iterate CSS rules/selectors, extract each rule's selector string and the
corresponding rule body, then call findDeprecatedCssVariables(selectorText,
ruleBodyOrSelectorText) and getDeprecatedCssVariable(name, selectorText) so
scoped names only match within their selector context.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: af357018-7983-4d95-a553-8f0de3af2542

📥 Commits

Reviewing files that changed from the base of the PR and between 94a0a99 and c078deb.

⛔ Files ignored due to path filters (2)
  • projects/core/.visual/accordion.dark.png is excluded by !**/*.png
  • projects/core/.visual/accordion.png is excluded by !**/*.png
📒 Files selected for processing (76)
  • projects/core/build/icons.js
  • projects/core/src/accordion/accordion-header.css
  • projects/core/src/accordion/accordion.css
  • projects/core/src/accordion/accordion.examples.ts
  • projects/core/src/accordion/accordion.snippets.html
  • projects/core/src/accordion/accordion.test.ts
  • projects/core/src/accordion/accordion.test.visual.ts
  • projects/core/src/accordion/accordion.ts
  • projects/core/src/alert/alert.css
  • projects/core/src/badge/badge.css
  • projects/core/src/badge/badge.test.ts
  • projects/core/src/badge/badge.ts
  • projects/core/src/breadcrumb/breadcrumb.css
  • projects/core/src/breadcrumb/breadcrumb.ts
  • projects/core/src/button/button.css
  • projects/core/src/button/button.ts
  • projects/core/src/card/card-header.css
  • projects/core/src/card/card.snippets.html
  • projects/core/src/card/card.test.ts
  • projects/core/src/card/card.ts
  • projects/core/src/combobox/combobox.test.ts
  • projects/core/src/combobox/combobox.ts
  • projects/core/src/copy-button/copy-button.test.ts
  • projects/core/src/copy-button/copy-button.ts
  • projects/core/src/icon-button/icon-button.css
  • projects/core/src/icon/icons.ts
  • projects/core/src/internal/types/index.ts
  • projects/core/src/menu/menu.examples.ts
  • projects/core/src/page/page-panel/page-panel.global.css
  • projects/core/src/page/page-panel/page-panel.test.ts
  • projects/core/src/page/page-panel/page-panel.test.visual.ts
  • projects/core/src/page/page-panel/page-panel.ts
  • projects/core/src/page/page.test.visual.ts
  • projects/core/src/panel/panel-footer.test.ts
  • projects/core/src/panel/panel-header.test.ts
  • projects/core/src/panel/panel.examples.ts
  • projects/core/src/panel/panel.test.axe.ts
  • projects/core/src/panel/panel.test.lighthouse.ts
  • projects/core/src/panel/panel.test.ssr.ts
  • projects/core/src/panel/panel.test.ts
  • projects/core/src/panel/panel.ts
  • projects/core/src/progress-ring/progress-ring.test.ts
  • projects/core/src/progress-ring/progress-ring.ts
  • projects/core/src/tabs/tabs-item.css
  • projects/core/src/tabs/tabs.css
  • projects/core/src/tabs/tabs.global.css
  • projects/core/src/tabs/tabs.test.visual.ts
  • projects/core/src/tabs/tabs.ts
  • projects/core/src/toast/toast.test.ts
  • projects/core/src/toast/toast.ts
  • projects/core/src/toggletip/toggletip.examples.ts
  • projects/core/src/toggletip/toggletip.test.axe.ts
  • projects/lint/README.md
  • projects/lint/src/eslint/configs/html.ts
  • projects/lint/src/eslint/internals/attributes.ts
  • projects/lint/src/eslint/rules/no-deprecated-attributes.test.ts
  • projects/lint/src/eslint/rules/no-deprecated-attributes.ts
  • projects/lint/src/eslint/rules/no-deprecated-css-variable.test.ts
  • projects/lint/src/eslint/rules/no-deprecated-css-variable.ts
  • projects/lint/src/eslint/rules/no-deprecated-global-attribute-value.test.ts
  • projects/lint/src/eslint/rules/no-deprecated-global-attribute-value.ts
  • projects/lint/src/eslint/rules/no-deprecated-popover-attributes.test.ts
  • projects/lint/src/eslint/rules/no-deprecated-popover-attributes.ts
  • projects/lint/src/eslint/rules/no-deprecated-slots.test.ts
  • projects/lint/src/eslint/rules/no-deprecated-tags.test.ts
  • projects/lint/src/eslint/rules/no-deprecated-tags.ts
  • projects/lint/src/eslint/rules/no-unexpected-attribute-value.test.ts
  • projects/lint/src/eslint/rules/no-unexpected-attribute-value.ts
  • projects/lint/src/eslint/rules/no-unexpected-global-attribute-value.test.ts
  • projects/site/src/_11ty/layouts/common.js
  • projects/site/src/docs/about/migration.md
  • projects/site/src/docs/elements/progress-ring.md
  • projects/site/src/docs/integrations/lit.md
  • projects/site/src/docs/lint/index.md
  • projects/styles/src/layout.css
  • projects/styles/src/typography.css
💤 Files with no reviewable changes (18)
  • projects/core/src/tabs/tabs.global.css
  • projects/core/src/icon/icons.ts
  • projects/core/src/card/card-header.css
  • projects/site/src/_11ty/layouts/common.js
  • projects/styles/src/typography.css
  • projects/core/src/tabs/tabs-item.css
  • projects/core/src/tabs/tabs.ts
  • projects/core/src/page/page-panel/page-panel.global.css
  • projects/core/src/breadcrumb/breadcrumb.ts
  • projects/core/src/card/card.ts
  • projects/core/src/icon-button/icon-button.css
  • projects/core/build/icons.js
  • projects/core/src/accordion/accordion-header.css
  • projects/core/src/internal/types/index.ts
  • projects/core/src/combobox/combobox.test.ts
  • projects/core/src/button/button.css
  • projects/core/src/tabs/tabs.css
  • projects/core/src/badge/badge.css

Comment thread projects/core/src/accordion/accordion.ts Outdated
Comment thread projects/lint/src/eslint/rules/no-deprecated-css-variable.ts
@coryrylan coryrylan force-pushed the topic-deprecation-removals branch from c078deb to 112d1b3 Compare June 5, 2026 20:05
@coryrylan coryrylan force-pushed the topic-deprecation-removals branch from 112d1b3 to 1687fc7 Compare June 5, 2026 20:10
Copy link
Copy Markdown

@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

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@projects/core/src/copy-button/copy-button.test.ts`:
- Around line 91-99: The test calls element.shadowRoot.querySelector for Tooltip
and Toast and then immediately calls .hasAttribute which can throw if the query
returned null; update the test to first assert that the queried elements exist
(e.g., expect(tooltip).not.toBeNull() / expect(toast).not.toBeNull()) before
calling hasAttribute on Tooltip and Toast, keeping the existing mock of
navigator.clipboard.writeText, element.click(), and await
elementIsStable(element) flow intact so the attribute assertions run only when
the elements are present.

In `@projects/core/src/toast/toast.ts`:
- Line 130: The icon lookup can be undefined when this.status is unset; update
the prefix slot rendering to provide an explicit fallback icon name by using the
statusIcons map with a default key (e.g., statusIcons.default) or a literal
fallback (e.g., 'information') so `.name` never receives undefined; change the
expression used for the nve-icon `.name` binding (currently
`.name=${statusIcons[this.status] as IconName}`) to use a nullish/OR fallback
(e.g., statusIcons[this.status] ?? statusIcons.default or 'information') and
keep the existing `.ariaLabel` behavior using i18n for accessibility.

In `@projects/lint/src/eslint/rules/no-deprecated-css-variable.test.ts`:
- Around line 152-203: The HTML tests only cover inline style="" cases and miss
a regression for <style> blocks where selector-scoped variables should trigger
errors only under specific selectors; add a new invalid case in the existing
html suite (using the same RuleTester instance and the existing tester.run(...)
call for rule) that includes a <style> tag with selector(s) like "nve-tabs" and
"nve-tabs-item" and CSS using "--border-background" and
"--indicator-background", asserting that deprecated "--border-background" is
reported only for selectors matching nve-tabs* (messageId 'deprecated-css-var'
with data.value '--border-background' and alternative '--indicator-background')
while valid selectors do not produce errors.

In `@projects/site/src/docs/about/migration.md`:
- Around line 49-51: Hyphenate "open source" when it is used as a compound
modifier in the two sentences containing the phrases "NVIDIA published the
initial public open source packages as `0.x`..." and "Treat these `0.x` versions
as transitional open source preview releases..." and the sentence "Elements
moved from public `0.x` prerelease versions to `2.0.0` for the stable open
source release."; update those to "open-source packages", "open-source preview
releases", and "open-source release" respectively so the prose complies with the
Vale/Google docstyle rules.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: a611f8e5-8f19-4b0f-88ed-bf35cc718162

📥 Commits

Reviewing files that changed from the base of the PR and between c078deb and 1687fc7.

⛔ Files ignored due to path filters (2)
  • projects/core/.visual/accordion.dark.png is excluded by !**/*.png
  • projects/core/.visual/accordion.png is excluded by !**/*.png
📒 Files selected for processing (79)
  • projects/core/build/icons.js
  • projects/core/src/accordion/accordion-header.css
  • projects/core/src/accordion/accordion.css
  • projects/core/src/accordion/accordion.examples.ts
  • projects/core/src/accordion/accordion.snippets.html
  • projects/core/src/accordion/accordion.test.ts
  • projects/core/src/accordion/accordion.test.visual.ts
  • projects/core/src/accordion/accordion.ts
  • projects/core/src/alert/alert.css
  • projects/core/src/badge/badge.css
  • projects/core/src/badge/badge.test.ts
  • projects/core/src/badge/badge.ts
  • projects/core/src/breadcrumb/breadcrumb.css
  • projects/core/src/breadcrumb/breadcrumb.ts
  • projects/core/src/button/button.css
  • projects/core/src/button/button.ts
  • projects/core/src/card/card-header.css
  • projects/core/src/card/card.snippets.html
  • projects/core/src/card/card.test.ts
  • projects/core/src/card/card.ts
  • projects/core/src/combobox/combobox.test.ts
  • projects/core/src/combobox/combobox.ts
  • projects/core/src/copy-button/copy-button.test.ts
  • projects/core/src/copy-button/copy-button.ts
  • projects/core/src/dialog/dialog.examples.ts
  • projects/core/src/grid/grid.examples.ts
  • projects/core/src/icon-button/icon-button.css
  • projects/core/src/icon/icons.ts
  • projects/core/src/internal/types/index.ts
  • projects/core/src/menu/menu.examples.ts
  • projects/core/src/page/page-panel/page-panel.global.css
  • projects/core/src/page/page-panel/page-panel.test.ts
  • projects/core/src/page/page-panel/page-panel.test.visual.ts
  • projects/core/src/page/page-panel/page-panel.ts
  • projects/core/src/page/page.test.visual.ts
  • projects/core/src/panel/panel-footer.test.ts
  • projects/core/src/panel/panel-header.test.ts
  • projects/core/src/panel/panel.examples.ts
  • projects/core/src/panel/panel.test.axe.ts
  • projects/core/src/panel/panel.test.lighthouse.ts
  • projects/core/src/panel/panel.test.ssr.ts
  • projects/core/src/panel/panel.test.ts
  • projects/core/src/panel/panel.ts
  • projects/core/src/progress-ring/progress-ring.test.ts
  • projects/core/src/progress-ring/progress-ring.ts
  • projects/core/src/tabs/tabs-item.css
  • projects/core/src/tabs/tabs.css
  • projects/core/src/tabs/tabs.global.css
  • projects/core/src/tabs/tabs.test.visual.ts
  • projects/core/src/tabs/tabs.ts
  • projects/core/src/toast/toast.test.ts
  • projects/core/src/toast/toast.ts
  • projects/core/src/toggletip/toggletip.examples.ts
  • projects/core/src/toggletip/toggletip.test.axe.ts
  • projects/internals/tools/src/project/health.ts
  • projects/lint/README.md
  • projects/lint/src/eslint/configs/html.ts
  • projects/lint/src/eslint/internals/attributes.ts
  • projects/lint/src/eslint/rules/no-deprecated-attributes.test.ts
  • projects/lint/src/eslint/rules/no-deprecated-attributes.ts
  • projects/lint/src/eslint/rules/no-deprecated-css-variable.test.ts
  • projects/lint/src/eslint/rules/no-deprecated-css-variable.ts
  • projects/lint/src/eslint/rules/no-deprecated-global-attribute-value.test.ts
  • projects/lint/src/eslint/rules/no-deprecated-global-attribute-value.ts
  • projects/lint/src/eslint/rules/no-deprecated-popover-attributes.test.ts
  • projects/lint/src/eslint/rules/no-deprecated-popover-attributes.ts
  • projects/lint/src/eslint/rules/no-deprecated-slots.test.ts
  • projects/lint/src/eslint/rules/no-deprecated-tags.test.ts
  • projects/lint/src/eslint/rules/no-deprecated-tags.ts
  • projects/lint/src/eslint/rules/no-unexpected-attribute-value.test.ts
  • projects/lint/src/eslint/rules/no-unexpected-attribute-value.ts
  • projects/lint/src/eslint/rules/no-unexpected-global-attribute-value.test.ts
  • projects/site/src/_11ty/layouts/common.js
  • projects/site/src/docs/about/migration.md
  • projects/site/src/docs/elements/progress-ring.md
  • projects/site/src/docs/integrations/lit.md
  • projects/site/src/docs/lint/index.md
  • projects/styles/src/layout.css
  • projects/styles/src/typography.css
💤 Files with no reviewable changes (18)
  • projects/core/src/tabs/tabs.ts
  • projects/core/src/breadcrumb/breadcrumb.ts
  • projects/core/src/icon-button/icon-button.css
  • projects/core/src/accordion/accordion.css
  • projects/core/src/tabs/tabs.css
  • projects/core/src/tabs/tabs-item.css
  • projects/site/src/_11ty/layouts/common.js
  • projects/core/src/card/card-header.css
  • projects/core/src/badge/badge.css
  • projects/core/build/icons.js
  • projects/styles/src/typography.css
  • projects/core/src/icon/icons.ts
  • projects/core/src/card/card.ts
  • projects/core/src/page/page-panel/page-panel.global.css
  • projects/core/src/tabs/tabs.global.css
  • projects/core/src/internal/types/index.ts
  • projects/core/src/button/button.css
  • projects/core/src/combobox/combobox.test.ts

Comment on lines +91 to +99
const tooltip = element.shadowRoot.querySelector<Tooltip>(Tooltip.metadata.tag);
expect(tooltip.hasAttribute('trigger')).toBe(false);

const mockClipboard = vi.spyOn(navigator.clipboard, 'writeText').mockResolvedValue();
element.click();
await elementIsStable(element);

const toast = element.shadowRoot.querySelector<Toast>(Toast.metadata.tag);
expect(toast.hasAttribute('trigger')).toBe(false);
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Guard queried elements before attribute assertions.

querySelector(...) is nullable; direct .hasAttribute(...) can throw and hide the real test failure cause. Add existence assertions first.

Proposed test hardening
     const tooltip = element.shadowRoot.querySelector<Tooltip>(Tooltip.metadata.tag);
-    expect(tooltip.hasAttribute('trigger')).toBe(false);
+    expect(tooltip).toBeTruthy();
+    expect(tooltip!.hasAttribute('trigger')).toBe(false);
@@
     const toast = element.shadowRoot.querySelector<Toast>(Toast.metadata.tag);
-    expect(toast.hasAttribute('trigger')).toBe(false);
+    expect(toast).toBeTruthy();
+    expect(toast!.hasAttribute('trigger')).toBe(false);
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const tooltip = element.shadowRoot.querySelector<Tooltip>(Tooltip.metadata.tag);
expect(tooltip.hasAttribute('trigger')).toBe(false);
const mockClipboard = vi.spyOn(navigator.clipboard, 'writeText').mockResolvedValue();
element.click();
await elementIsStable(element);
const toast = element.shadowRoot.querySelector<Toast>(Toast.metadata.tag);
expect(toast.hasAttribute('trigger')).toBe(false);
const tooltip = element.shadowRoot.querySelector<Tooltip>(Tooltip.metadata.tag);
expect(tooltip).toBeTruthy();
expect(tooltip!.hasAttribute('trigger')).toBe(false);
const mockClipboard = vi.spyOn(navigator.clipboard, 'writeText').mockResolvedValue();
element.click();
await elementIsStable(element);
const toast = element.shadowRoot.querySelector<Toast>(Toast.metadata.tag);
expect(toast).toBeTruthy();
expect(toast!.hasAttribute('trigger')).toBe(false);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@projects/core/src/copy-button/copy-button.test.ts` around lines 91 - 99, The
test calls element.shadowRoot.querySelector for Tooltip and Toast and then
immediately calls .hasAttribute which can throw if the query returned null;
update the test to first assert that the queried elements exist (e.g.,
expect(tooltip).not.toBeNull() / expect(toast).not.toBeNull()) before calling
hasAttribute on Tooltip and Toast, keeping the existing mock of
navigator.clipboard.writeText, element.click(), and await
elementIsStable(element) flow intact so the attribute assertions run only when
the elements are present.

return html`
<div internal-host>
<slot name="prefix">${this.status !== 'muted' ? html`<nve-icon part="prefix-icon" .name=${statusIcons[this.status] as IconName} .ariaLabel=${(this.i18n as Record<string, string>)[this.status] ?? this.i18n.information}></nve-icon>` : nothing}</slot>
<slot name="prefix"><nve-icon part="prefix-icon" .name=${statusIcons[this.status] as IconName} .ariaLabel=${(this.i18n as Record<string, string>)[this.status] ?? this.i18n.information}></nve-icon></slot>
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Add an explicit icon fallback when status is unset.

On Line 130, .name=${statusIcons[this.status] as IconName} can resolve to undefined when no status is provided, which can drop the expected default icon.

Proposed fix
-        <slot name="prefix"><nve-icon part="prefix-icon" .name=${statusIcons[this.status] as IconName} .ariaLabel=${(this.i18n as Record<string, string>)[this.status] ?? this.i18n.information}></nve-icon></slot>
+        <slot name="prefix"><nve-icon part="prefix-icon" .name=${(statusIcons[this.status] ?? statusIcons.information) as IconName} .ariaLabel=${(this.i18n as Record<string, string>)[this.status] ?? this.i18n.information}></nve-icon></slot>
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<slot name="prefix"><nve-icon part="prefix-icon" .name=${statusIcons[this.status] as IconName} .ariaLabel=${(this.i18n as Record<string, string>)[this.status] ?? this.i18n.information}></nve-icon></slot>
<slot name="prefix"><nve-icon part="prefix-icon" .name=${(statusIcons[this.status] ?? statusIcons.information) as IconName} .ariaLabel=${(this.i18n as Record<string, string>)[this.status] ?? this.i18n.information}></nve-icon></slot>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@projects/core/src/toast/toast.ts` at line 130, The icon lookup can be
undefined when this.status is unset; update the prefix slot rendering to provide
an explicit fallback icon name by using the statusIcons map with a default key
(e.g., statusIcons.default) or a literal fallback (e.g., 'information') so
`.name` never receives undefined; change the expression used for the nve-icon
`.name` binding (currently `.name=${statusIcons[this.status] as IconName}`) to
use a nullish/OR fallback (e.g., statusIcons[this.status] ?? statusIcons.default
or 'information') and keep the existing `.ariaLabel` behavior using i18n for
accessibility.

Comment thread projects/lint/src/eslint/rules/no-deprecated-css-variable.test.ts
Comment on lines +49 to +51
NVIDIA published the initial public open source packages as `0.x` while the project completed its public release migration. Treat these `0.x` versions as transitional open source preview releases, not proof that Elements itself is experimental or newly developed.

Elements moved from public `0.x` prerelease versions to `2.0.0` for the stable open source release. This means there is no public `1.0.0` release under the `@nvidia-elements/*` scope. The missing public `1.0.0` is intentional: `1.x` represents the prior internal production generation, and `2.0.0` represents the next stable generation under the public `@nvidia-elements/*` scope.
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Hyphenate compound modifier “open-source” for prose-lint compliance.

Use hyphenation when “open source” modifies a noun in these new sentences.

Proposed fix
-NVIDIA published the initial public open source packages as `0.x` while the project completed its public release migration. Treat these `0.x` versions as transitional open source preview releases, not proof that Elements itself is experimental or newly developed.
+NVIDIA published the initial public open-source packages as `0.x` while the project completed its public release migration. Treat these `0.x` versions as transitional open-source preview releases, not proof that Elements itself is experimental or newly developed.
 
-Elements moved from public `0.x` prerelease versions to `2.0.0` for the stable open source release. This means there is no public `1.0.0` release under the `@nvidia-elements/*` scope. The missing public `1.0.0` is intentional: `1.x` represents the prior internal production generation, and `2.0.0` represents the next stable generation under the public `@nvidia-elements/*` scope.
+Elements moved from public `0.x` prerelease versions to `2.0.0` for the stable open-source release. This means there is no public `1.0.0` release under the `@nvidia-elements/*` scope. The missing public `1.0.0` is intentional: `1.x` represents the prior internal production generation, and `2.0.0` represents the next stable generation under the public `@nvidia-elements/*` scope.

As per coding guidelines, **/*.md: Follow the Google developer documentation style guide and write-good rules using Vale prose linter.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
NVIDIA published the initial public open source packages as `0.x` while the project completed its public release migration. Treat these `0.x` versions as transitional open source preview releases, not proof that Elements itself is experimental or newly developed.
Elements moved from public `0.x` prerelease versions to `2.0.0` for the stable open source release. This means there is no public `1.0.0` release under the `@nvidia-elements/*` scope. The missing public `1.0.0` is intentional: `1.x` represents the prior internal production generation, and `2.0.0` represents the next stable generation under the public `@nvidia-elements/*` scope.
NVIDIA published the initial public open-source packages as `0.x` while the project completed its public release migration. Treat these `0.x` versions as transitional open-source preview releases, not proof that Elements itself is experimental or newly developed.
Elements moved from public `0.x` prerelease versions to `2.0.0` for the stable open-source release. This means there is no public `1.0.0` release under the `@nvidia-elements/*` scope. The missing public `1.0.0` is intentional: `1.x` represents the prior internal production generation, and `2.0.0` represents the next stable generation under the public `@nvidia-elements/*` scope.
🧰 Tools
🪛 LanguageTool

[grammar] ~49-~49: Use a hyphen to join words.
Context: ...NVIDIA published the initial public open source packages as 0.x while the proje...

(QB_NEW_EN_HYPHEN)


[grammar] ~49-~49: Use a hyphen to join words.
Context: ...hese 0.x versions as transitional open source preview releases, not proof that ...

(QB_NEW_EN_HYPHEN)


[grammar] ~51-~51: Use a hyphen to join words.
Context: ... versions to 2.0.0 for the stable open source release. This means there is no p...

(QB_NEW_EN_HYPHEN)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@projects/site/src/docs/about/migration.md` around lines 49 - 51, Hyphenate
"open source" when it is used as a compound modifier in the two sentences
containing the phrases "NVIDIA published the initial public open source packages
as `0.x`..." and "Treat these `0.x` versions as transitional open source preview
releases..." and the sentence "Elements moved from public `0.x` prerelease
versions to `2.0.0` for the stable open source release."; update those to
"open-source packages", "open-source preview releases", and "open-source
release" respectively so the prose complies with the Vale/Google docstyle rules.

@coryrylan coryrylan force-pushed the topic-deprecation-removals branch from 1687fc7 to e32d338 Compare June 5, 2026 20:35
@github-actions github-actions Bot added scope(cli) dependencies Pull requests that update a dependency file labels Jun 5, 2026
Copy link
Copy Markdown

@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.

♻️ Duplicate comments (1)
projects/site/src/docs/about/migration.md (1)

49-51: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Hyphenate compound modifier "open-source" for prose-lint compliance.

Use hyphenation when "open source" modifies a noun in these new sentences.

Proposed fix
-NVIDIA published the initial public open source packages as `0.x` while the project completed its public release migration. Treat these `0.x` versions as transitional open source preview releases, not proof that Elements itself is experimental or newly developed.
+NVIDIA published the initial public open-source packages as `0.x` while the project completed its public release migration. Treat these `0.x` versions as transitional open-source preview releases, not proof that Elements itself is experimental or newly developed.

-Elements moved from public `0.x` prerelease versions to `2.0.0` for the stable open source release. This means there is no public `1.0.0` release under the `@nvidia-elements/*` scope. The missing public `1.0.0` is intentional: `1.x` represents the prior internal production generation, and `2.0.0` represents the next stable generation under the public `@nvidia-elements/*` scope.
+Elements moved from public `0.x` prerelease versions to `2.0.0` for the stable open-source release. This means there is no public `1.0.0` release under the `@nvidia-elements/*` scope. The missing public `1.0.0` is intentional: `1.x` represents the prior internal production generation, and `2.0.0` represents the next stable generation under the public `@nvidia-elements/*` scope.

As per coding guidelines, **/*.md: Follow the Google developer documentation style guide and write-good rules using Vale prose linter.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@projects/site/src/docs/about/migration.md` around lines 49 - 51, The prose
uses "open source" as a compound modifier in the sentences containing "open
source preview releases" and "stable open source release"; update those
occurrences to use the hyphenated form "open-source" (e.g., "open-source preview
releases" and "stable open-source release") so the compound modifier follows the
Vale/Google doc style rules; edit the migration.md sentences that contain "open
source" to apply the hyphenation consistently.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Duplicate comments:
In `@projects/site/src/docs/about/migration.md`:
- Around line 49-51: The prose uses "open source" as a compound modifier in the
sentences containing "open source preview releases" and "stable open source
release"; update those occurrences to use the hyphenated form "open-source"
(e.g., "open-source preview releases" and "stable open-source release") so the
compound modifier follows the Vale/Google doc style rules; edit the migration.md
sentences that contain "open source" to apply the hyphenation consistently.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 595bac8c-64f0-484a-b6d0-2fa2437d87e9

📥 Commits

Reviewing files that changed from the base of the PR and between 1687fc7 and e32d338.

📒 Files selected for processing (7)
  • projects/cli/package.json
  • projects/internals/tools/src/project/health.ts
  • projects/site/src/_11ty/layouts/common.js
  • projects/site/src/docs/about/migration.md
  • projects/site/src/docs/elements/progress-ring.md
  • projects/site/src/docs/integrations/lit.md
  • projects/site/src/docs/lint/index.md
💤 Files with no reviewable changes (1)
  • projects/site/src/_11ty/layouts/common.js

@coryrylan coryrylan force-pushed the topic-deprecation-removals branch from e32d338 to 2b97cd5 Compare June 5, 2026 20:59
Copy link
Copy Markdown

@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.

♻️ Duplicate comments (1)
projects/site/src/docs/about/migration.md (1)

49-51: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Hyphenate compound modifier "open source" for prose-lint compliance.

Use "open-source" when modifying a noun: "open-source packages", "open-source preview releases", and "open-source release".

As per coding guidelines, **/*.md: Follow the Google developer documentation style guide and write-good rules using Vale prose linter.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@projects/site/src/docs/about/migration.md` around lines 49 - 51, Update the
three occurrences of the unhyphenated compound modifier in the paragraph: change
"open source packages" to "open-source packages", "open source preview releases"
to "open-source preview releases", and "open source release" to "open-source
release" so the prose matches the Google docs/Vale rule for compound modifiers;
then run the project's prose linter (Vale) to confirm compliance.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Duplicate comments:
In `@projects/site/src/docs/about/migration.md`:
- Around line 49-51: Update the three occurrences of the unhyphenated compound
modifier in the paragraph: change "open source packages" to "open-source
packages", "open source preview releases" to "open-source preview releases", and
"open source release" to "open-source release" so the prose matches the Google
docs/Vale rule for compound modifiers; then run the project's prose linter
(Vale) to confirm compliance.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: bfbf12ea-ed68-48ad-9551-8746e4bce28e

📥 Commits

Reviewing files that changed from the base of the PR and between e32d338 and 2b97cd5.

📒 Files selected for processing (7)
  • projects/cli/package.json
  • projects/internals/tools/src/project/health.ts
  • projects/site/src/_11ty/layouts/common.js
  • projects/site/src/docs/about/migration.md
  • projects/site/src/docs/elements/progress-ring.md
  • projects/site/src/docs/integrations/lit.md
  • projects/site/src/docs/lint/index.md
💤 Files with no reviewable changes (1)
  • projects/site/src/_11ty/layouts/common.js

@coryrylan coryrylan force-pushed the topic-deprecation-removals branch 3 times, most recently from 75af33a to 8fe3803 Compare June 6, 2026 04:06
@coryrylan coryrylan force-pushed the topic-deprecation-removals branch from 8fe3803 to 0471cb4 Compare June 6, 2026 04:15
Signed-off-by: Cory Rylan <crylan@nvidia.com>
@coryrylan coryrylan force-pushed the topic-deprecation-removals branch from 0471cb4 to feeb578 Compare June 6, 2026 04:20
coryrylan added 2 commits June 6, 2026 00:42
Signed-off-by: Cory Rylan <crylan@nvidia.com>
Signed-off-by: Cory Rylan <crylan@nvidia.com>
Signed-off-by: Cory Rylan <crylan@nvidia.com>
@coryrylan coryrylan force-pushed the topic-deprecation-removals branch from feeb578 to 3f57ae1 Compare June 6, 2026 05:42
@coryrylan coryrylan merged commit 1e49a3b into main Jun 6, 2026
13 checks passed
@coryrylan coryrylan deleted the topic-deprecation-removals branch June 6, 2026 06:00
@coryrylan
Copy link
Copy Markdown
Collaborator Author

🎉 This issue has been resolved in version 0.0.10 🎉

Changelog

@coryrylan
Copy link
Copy Markdown
Collaborator Author

🎉 This issue has been resolved in version 0.2.4 🎉

Changelog

@coryrylan
Copy link
Copy Markdown
Collaborator Author

🎉 This issue has been resolved in version 0.4.0 🎉

Changelog

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants