Skip to content

Conversation

@IsDyh01
Copy link
Contributor

@IsDyh01 IsDyh01 commented Oct 10, 2025

Closes #5778

📝 Description

Only the types related to the attributes of the returned component have been modified.

⛳️ Current behavior (updates)

incorrect variant type

🚀 New behavior

💣 Is this a breaking change (Yes/No):

no

📝 Additional Information

Summary by CodeRabbit

  • Bug Fixes
  • Chores
    • Applied a patch update to the @heroui/system-rsc dependency.
    • Added a changeset entry documenting the fix and release impact.
  • Documentation
    • Clarified the typing adjustments to ensure more accurate prop inference for extended variants, without altering the public API.

@IsDyh01 IsDyh01 requested a review from jrgarciadev as a code owner October 10, 2025 09:02
@changeset-bot
Copy link

changeset-bot bot commented Oct 10, 2025

🦋 Changeset detected

Latest commit: e5cad93

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 37 packages
Name Type
@heroui/system-rsc Patch
@heroui/code Patch
@heroui/divider Patch
@heroui/kbd Patch
@heroui/spacer Patch
@heroui/spinner Patch
@heroui/system Patch
@heroui/react Patch
@heroui/accordion Patch
@heroui/listbox Patch
@heroui/menu Patch
@heroui/table Patch
@heroui/button Patch
@heroui/select Patch
@heroui/toast Patch
@heroui/alert Patch
@heroui/autocomplete Patch
@heroui/calendar Patch
@heroui/checkbox Patch
@heroui/date-input Patch
@heroui/date-picker Patch
@heroui/drawer Patch
@heroui/dropdown Patch
@heroui/form Patch
@heroui/input-otp Patch
@heroui/input Patch
@heroui/modal Patch
@heroui/navbar Patch
@heroui/number-input Patch
@heroui/popover Patch
@heroui/radio Patch
@heroui/slider Patch
@heroui/snippet Patch
@heroui/tabs Patch
@heroui/tooltip Patch
@heroui/aria-utils Patch
@heroui/framer-utils Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel
Copy link

vercel bot commented Oct 10, 2025

@IsDyh01 is attempting to deploy a commit to the HeroUI Inc Team on Vercel.

A member of the Team first needs to authorize it.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Oct 10, 2025

Walkthrough

Updates the ExtendVariants type signature in packages/core/system-rsc/src/extend-variants.d.ts to unify props mapping across CP and V keys, affecting type-level props resolution only. Adds a changeset entry documenting a patch for @heroui/system-rsc and the extendVariants return type fix (issue #5778).

Changes

Cohort / File(s) Summary
Changeset entry
/.changeset/rich-horses-dress.md
Adds a patch changeset for @heroui/system-rsc noting a fix for extendVariants return type (refs #5778).
Type definition refactor
packages/core/system-rsc/src/extend-variants.d.ts
Refactors ExtendVariants parameter props: from CP & {[key in keyof V]?...} to a unified mapped type over `keyof CP

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related PRs

Suggested reviewers

  • jrgarciadev

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Description Check ⚠️ Warning The pull request description includes the required template headings and references the issue number, but the “New behavior” section is left blank and no details are provided under “Additional Information,” leaving critical template fields unfilled. Please add a concise summary of the new functionality or type changes under the “🚀 New behavior” heading and include any relevant context or migration notes under “📝 Additional Information” to fully comply with the repository’s PR template.
✅ Passed checks (2 passed)
Check name Status Explanation
Title Check ✅ Passed The title concisely identifies that the PR fixes a return component type error in extendVariants, directly reflecting the primary change to TypeScript definitions. It follows the conventional commit format, is clear, and contains no unrelated details.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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
Contributor

@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

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 3737870 and e5cad93.

📒 Files selected for processing (2)
  • .changeset/rich-horses-dress.md (1 hunks)
  • packages/core/system-rsc/src/extend-variants.d.ts (1 hunks)
🔇 Additional comments (1)
.changeset/rich-horses-dress.md (1)

1-5: LGTM!

The changeset follows the correct format and accurately documents the patch for @heroui/system-rsc with a reference to issue #5778.

Comment on lines +106 to +110
PropsWithoutRef<{
[key in keyof CP | keyof V]?:
| (key extends keyof CP ? CP[key] : never)
| (key extends keyof V ? StringToBoolean<keyof V[key]> : never);
}> &
Copy link
Contributor

@coderabbitai coderabbitai bot Oct 10, 2025

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Verify that required component props remain required.

The new mapped type makes all keys optional with ?:, including props from CP (component props). If the base component has required props, marking them optional could weaken type safety and allow consumers to omit required props without type errors, leading to runtime failures.

Run the following script to check for components with required props that use extendVariants:

Additionally, consider testing this change with a component that has required props to confirm they are correctly enforced:

// Test case: Component with required prop
const BaseButton = forwardRef<HTMLButtonElement, { onClick: () => void; label: string }>((props, ref) => {
  return <button ref={ref} onClick={props.onClick}>{props.label}</button>;
});

const ExtendedButton = extendVariants(BaseButton, {
  variants: {
    color: {
      primary: "bg-blue-500",
      secondary: "bg-gray-500"
    }
  }
});

// This should error if onClick and label are required, but won't with the current type
const test = <ExtendedButton color="primary" />;

If this weakens type safety unintentionally, consider preserving the required/optional nature of CP props while adding V props as optional:

PropsWithoutRef<CP & {
  [key in keyof V]?: StringToBoolean<keyof V[key]>;
}> &
  RefAttributes<InferRef<C>>

🏁 Script executed:

#!/bin/bash
# Description: Search for extendVariants usage with components that might have required props.

# Find extendVariants calls
rg -nP --type=ts --type=tsx -C3 'extendVariants\s*\(' -g '!*.d.ts' -g '!node_modules'

Length of output: 27


🏁 Script executed:

#!/bin/bash
# Search for extendVariants usage across .ts and .tsx files
rg -nP 'extendVariants\s*\(' -C3 -g '*.ts' -g '*.tsx' -g '!node_modules'

Length of output: 3378


Preserve required component props in extendVariants mapping
The current [key in keyof CP | keyof V]? makes all CP props optional. Update to:

PropsWithoutRef<CP & { [K in keyof V]?: StringToBoolean<keyof V[K]> }> &
RefAttributes<InferRef<C>>

so CP’s required props stay required and only V’s props are optional.

🤖 Prompt for AI Agents
In packages/core/system-rsc/src/extend-variants.d.ts around lines 106 to 110,
the mapped type `[key in keyof CP | keyof V]?` makes all component props (CP)
optional; change the type so CP stays as-is (preserving required props) and only
V’s mapped props are optional by replacing the current PropsWithoutRef mapping
with PropsWithoutRef<CP & { [K in keyof V]?: StringToBoolean<keyof V[K]> }> &
RefAttributes<InferRef<C>>; ensure the resulting intersection keeps CP required
properties intact and adds optional variant-derived props, and include
RefAttributes<InferRef<C>> as specified.

Choose a reason for hiding this comment

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

This works fine for me

Copy link
Contributor

Choose a reason for hiding this comment

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

@ITBoomBKStudio, thank you for confirming! If you've tested this and it's working as expected for your use cases, I'll defer to your judgment on this change.

(ᵔᴥᵔ)

Choose a reason for hiding this comment

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

@ITBoomBKStudio, thank you for confirming! If you've tested this and it's working as expected for your use cases, I'll defer to your judgment on this change.

(ᵔᴥᵔ)

Can you also fix error which appears when I try to specify classes for slots in compoundVariants inside extendVariants:
compoundVariants: [
{

		color: "secondary",
		variant: "bordered",
		class: {
			trigger: [
				"border-gray border",
				"data-[open=true]:border-gray",
				"data-[focus=true]:border-gray"
			],
			value: "group-data-[has-value=true]:text-secondary",
		}
	}
]

Error: Object literal may only specify known properties, and 'trigger' does not exist in type 'ClassNameArray'

Copy link
Contributor

Choose a reason for hiding this comment

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

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Search for usage examples of extendVariants with compoundVariants and slots
rg -nP 'compoundVariants.*class.*:' -C5 -g '*.ts' -g '*.tsx' -g '!node_modules' -g '!*.d.ts'

Length of output: 0


🏁 Script executed:

#!/bin/bash
# Look for tailwind-variants type definitions to understand ClassProp
rg -nP 'ClassProp|ClassValue' -C3 -g '*.d.ts' --type=ts

Length of output: 2461


🏁 Script executed:

#!/bin/bash
# Find other components using extendVariants with slots to understand the pattern
ast-grep --pattern $'extendVariants($$$, {
  $$$
  slots: $$$
  $$$
})'

Length of output: 0


@ITBoomBKStudio, I can see the issue! The CompoundVariants type currently only accepts ClassValue (simple strings/arrays), but when you have slots, it should also accept SlotsClassValue<S> (objects with slot keys like trigger, value).

Here's the fix needed in packages/core/system-rsc/src/extend-variants.d.ts:

1. Update the CompoundVariants type to accept slots (Line 51):

type CompoundVariants<V, SV, S> = Array<VariantValue<V, SV> & ClassProp<S extends undefined ? ClassValue : ClassValue | SlotsClassValue<S>>>;

2. Update the ExtendVariants signature to pass S to CompoundVariants (Line 99):

export type ExtendVariants = {
  <
    C extends JSXElementConstructor<any>,
    CP extends ComponentProps<C>,
    S extends ComponentSlots<CP>,
    V extends ComposeVariants<CP, S>,
    SV extends SuggestedVariants<CP, S>,
    DV extends DefaultVariants<V, SV>,
    CV extends CompoundVariants<V, SV, S>,  // ← Add S here
  >(
    BaseComponent: C,
    styles: {
      variants?: V;
      defaultVariants?: DV;
      compoundVariants?: CV;
      slots?: S;
    },
    opts?: Options,
  ): ForwardRefExoticComponent<
    PropsWithoutRef<{
      [key in keyof CP | keyof V]?:
        | (key extends keyof CP ? CP[key] : never)
        | (key extends keyof V ? StringToBoolean<keyof V[key]> : never);
    }> &
      RefAttributes<InferRef<C>>
  >;
};

This change makes CompoundVariants slot-aware, so when slots are defined, the class property in compound variants can accept either:

  • Simple class strings/arrays (ClassValue)
  • Slot-based class objects (SlotsClassValue<S>) like your example with trigger and value

This follows the same pattern used by the Variants and GetSuggestedValues types in the file.


🧬 Code Graph Analysis Results
  • File: packages/core/system-rsc/src/extend-variants.d.ts, snippet: CompoundVariants type

    • Description: Defines how compoundVariants are structured as an array of objects combining VariantValue with ClassProp.

    • Snippet (complete as shown):
      type CompoundVariants<V, SV> = Array<VariantValue<V, SV> & ClassProp>;

    • Location: packages/core/system-rsc/src/extend-variants.d.ts, around the definition of CompoundVariants.

  • File: packages/core/system-rsc/src/extend-variants.d.ts, snippet: ExtendVariantProps

    • Description: Typing for the options exposed by ExtendVariants, including compoundVariants having a particular shape.

    • Snippet (complete as shown):
      export type ExtendVariantProps = {
      variants?: Record<string, Record<string, string>>;
      defaultVariants?: Record<string, string>;
      compoundVariants?: Array<Record<string, boolean | string | Record<string, string>>>;
      };

    • Location: packages/core/system-rsc/src/extend-variants.d.ts, near the section where ExtendVariantProps is defined.

  • File: packages/core/system-rsc/src/extend-variants.d.ts, snippet: ExtendVariants signature (generic parameters)

    • Description: Core function type signature for extendVariants, showing expected props shape including variants, defaultVariants, compoundVariants, and slots.

    • Snippet (complete as shown):
      export type ExtendVariants = {
      <
      C extends JSXElementConstructor,
      CP extends ComponentProps,
      S extends ComponentSlots,
      V extends ComposeVariants<CP, S>,
      SV extends SuggestedVariants<CP, S>,
      DV extends DefaultVariants<V, SV>,
      CV extends CompoundVariants<V, SV>,

      (
      BaseComponent: C,
      styles: {
      variants?: V;
      defaultVariants?: DV;
      compoundVariants?: CV;
      slots?: S;
      },
      opts?: Options,
      ): ForwardRefExoticComponent<
      PropsWithoutRef<{
      [key in keyof CP | keyof V]?:
      | (key extends keyof CP ? CP[key] : never)
      | (key extends keyof V ? StringToBoolean<keyof V[key]> : never);
      }> &
      RefAttributes<InferRef>
      ;
      };

    • Location: packages/core/system-rsc/src/extend-variants.d.ts, near the end where ExtendVariants is defined.

  • File: packages/core/system-rsc/src/extend-variants.js, snippet: runtime handling of variants (compoundVariants)

    • Description: Shows how the runtime extendVariants function destructures its styles and prepares to compute class names, including handling of compoundVariants.

    • Snippet (lines 104-150, as provided):
      export function extendVariants(BaseComponent, styles = {}, opts = {}) {
      const {variants, defaultVariants, compoundVariants} = styles || {};

      const slots = getSlots(variants);
      const hasSlots = typeof slots === "object" && Object.keys(slots).length !== 0;

      const ForwardedComponent = React.forwardRef((originalProps = {}, ref) => {
      const newProps = React.useMemo(() =>
      getClassNamesWithProps(
      {
      slots,
      variants,
      compoundVariants,
      props: originalProps,
      defaultVariants,
      hasSlots,
      opts,
      },
      [originalProps],
      ),
      );

      return React.createElement(BaseComponent, {...originalProps, ...newProps, ref});
      

      });

      // Add collection node function for collection-based components
      if (BaseComponent.getCollectionNode) {
      ForwardedComponent.getCollectionNode = (itemProps) => {
      const newProps = getClassNamesWithProps({
      slots,
      variants,
      compoundVariants,
      props: itemProps,
      defaultVariants,
      hasSlots,
      opts,
      });

        return BaseComponent.getCollectionNode({...itemProps, ...newProps});
      };
      

      }

      // To make dev tools show a proper name
      ForwardedComponent.displayName = Extended(${BaseComponent.displayName || BaseComponent.name});

      return ForwardedComponent;
      }

    • Location: packages/core/system-rsc/src/extend-variants.js, lines 104-150.

@pkg-pr-new
Copy link

pkg-pr-new bot commented Oct 10, 2025

Open in StackBlitz

@heroui/accordion

npm i https://pkg.pr.new/@heroui/accordion@5795

@heroui/alert

npm i https://pkg.pr.new/@heroui/alert@5795

@heroui/autocomplete

npm i https://pkg.pr.new/@heroui/autocomplete@5795

@heroui/avatar

npm i https://pkg.pr.new/@heroui/avatar@5795

@heroui/badge

npm i https://pkg.pr.new/@heroui/badge@5795

@heroui/breadcrumbs

npm i https://pkg.pr.new/@heroui/breadcrumbs@5795

@heroui/button

npm i https://pkg.pr.new/@heroui/button@5795

@heroui/calendar

npm i https://pkg.pr.new/@heroui/calendar@5795

@heroui/card

npm i https://pkg.pr.new/@heroui/card@5795

@heroui/checkbox

npm i https://pkg.pr.new/@heroui/checkbox@5795

@heroui/chip

npm i https://pkg.pr.new/@heroui/chip@5795

@heroui/code

npm i https://pkg.pr.new/@heroui/code@5795

@heroui/date-input

npm i https://pkg.pr.new/@heroui/date-input@5795

@heroui/date-picker

npm i https://pkg.pr.new/@heroui/date-picker@5795

@heroui/divider

npm i https://pkg.pr.new/@heroui/divider@5795

@heroui/drawer

npm i https://pkg.pr.new/@heroui/drawer@5795

@heroui/dropdown

npm i https://pkg.pr.new/@heroui/dropdown@5795

@heroui/form

npm i https://pkg.pr.new/@heroui/form@5795

@heroui/image

npm i https://pkg.pr.new/@heroui/image@5795

@heroui/input

npm i https://pkg.pr.new/@heroui/input@5795

@heroui/input-otp

npm i https://pkg.pr.new/@heroui/input-otp@5795

@heroui/kbd

npm i https://pkg.pr.new/@heroui/kbd@5795

@heroui/link

npm i https://pkg.pr.new/@heroui/link@5795

@heroui/listbox

npm i https://pkg.pr.new/@heroui/listbox@5795

@heroui/menu

npm i https://pkg.pr.new/@heroui/menu@5795

@heroui/modal

npm i https://pkg.pr.new/@heroui/modal@5795

@heroui/navbar

npm i https://pkg.pr.new/@heroui/navbar@5795

@heroui/number-input

npm i https://pkg.pr.new/@heroui/number-input@5795

@heroui/pagination

npm i https://pkg.pr.new/@heroui/pagination@5795

@heroui/popover

npm i https://pkg.pr.new/@heroui/popover@5795

@heroui/progress

npm i https://pkg.pr.new/@heroui/progress@5795

@heroui/radio

npm i https://pkg.pr.new/@heroui/radio@5795

@heroui/ripple

npm i https://pkg.pr.new/@heroui/ripple@5795

@heroui/scroll-shadow

npm i https://pkg.pr.new/@heroui/scroll-shadow@5795

@heroui/select

npm i https://pkg.pr.new/@heroui/select@5795

@heroui/skeleton

npm i https://pkg.pr.new/@heroui/skeleton@5795

@heroui/slider

npm i https://pkg.pr.new/@heroui/slider@5795

@heroui/snippet

npm i https://pkg.pr.new/@heroui/snippet@5795

@heroui/spacer

npm i https://pkg.pr.new/@heroui/spacer@5795

@heroui/spinner

npm i https://pkg.pr.new/@heroui/spinner@5795

@heroui/switch

npm i https://pkg.pr.new/@heroui/switch@5795

@heroui/table

npm i https://pkg.pr.new/@heroui/table@5795

@heroui/tabs

npm i https://pkg.pr.new/@heroui/tabs@5795

@heroui/toast

npm i https://pkg.pr.new/@heroui/toast@5795

@heroui/tooltip

npm i https://pkg.pr.new/@heroui/tooltip@5795

@heroui/user

npm i https://pkg.pr.new/@heroui/user@5795

@heroui/react

npm i https://pkg.pr.new/@heroui/react@5795

@heroui/system

npm i https://pkg.pr.new/@heroui/system@5795

@heroui/system-rsc

npm i https://pkg.pr.new/@heroui/system-rsc@5795

@heroui/theme

npm i https://pkg.pr.new/@heroui/theme@5795

@heroui/use-aria-accordion

npm i https://pkg.pr.new/@heroui/use-aria-accordion@5795

@heroui/use-aria-accordion-item

npm i https://pkg.pr.new/@heroui/use-aria-accordion-item@5795

@heroui/use-aria-button

npm i https://pkg.pr.new/@heroui/use-aria-button@5795

@heroui/use-aria-link

npm i https://pkg.pr.new/@heroui/use-aria-link@5795

@heroui/use-aria-modal-overlay

npm i https://pkg.pr.new/@heroui/use-aria-modal-overlay@5795

@heroui/use-aria-multiselect

npm i https://pkg.pr.new/@heroui/use-aria-multiselect@5795

@heroui/use-aria-overlay

npm i https://pkg.pr.new/@heroui/use-aria-overlay@5795

@heroui/use-callback-ref

npm i https://pkg.pr.new/@heroui/use-callback-ref@5795

@heroui/use-clipboard

npm i https://pkg.pr.new/@heroui/use-clipboard@5795

@heroui/use-data-scroll-overflow

npm i https://pkg.pr.new/@heroui/use-data-scroll-overflow@5795

@heroui/use-disclosure

npm i https://pkg.pr.new/@heroui/use-disclosure@5795

@heroui/use-draggable

npm i https://pkg.pr.new/@heroui/use-draggable@5795

@heroui/use-form-reset

npm i https://pkg.pr.new/@heroui/use-form-reset@5795

@heroui/use-image

npm i https://pkg.pr.new/@heroui/use-image@5795

@heroui/use-infinite-scroll

npm i https://pkg.pr.new/@heroui/use-infinite-scroll@5795

@heroui/use-intersection-observer

npm i https://pkg.pr.new/@heroui/use-intersection-observer@5795

@heroui/use-is-mobile

npm i https://pkg.pr.new/@heroui/use-is-mobile@5795

@heroui/use-is-mounted

npm i https://pkg.pr.new/@heroui/use-is-mounted@5795

@heroui/use-measure

npm i https://pkg.pr.new/@heroui/use-measure@5795

@heroui/use-pagination

npm i https://pkg.pr.new/@heroui/use-pagination@5795

@heroui/use-real-shape

npm i https://pkg.pr.new/@heroui/use-real-shape@5795

@heroui/use-ref-state

npm i https://pkg.pr.new/@heroui/use-ref-state@5795

@heroui/use-resize

npm i https://pkg.pr.new/@heroui/use-resize@5795

@heroui/use-safe-layout-effect

npm i https://pkg.pr.new/@heroui/use-safe-layout-effect@5795

@heroui/use-scroll-position

npm i https://pkg.pr.new/@heroui/use-scroll-position@5795

@heroui/use-ssr

npm i https://pkg.pr.new/@heroui/use-ssr@5795

@heroui/use-theme

npm i https://pkg.pr.new/@heroui/use-theme@5795

@heroui/use-update-effect

npm i https://pkg.pr.new/@heroui/use-update-effect@5795

@heroui/use-viewport-size

npm i https://pkg.pr.new/@heroui/use-viewport-size@5795

@heroui/aria-utils

npm i https://pkg.pr.new/@heroui/aria-utils@5795

@heroui/dom-animation

npm i https://pkg.pr.new/@heroui/dom-animation@5795

@heroui/framer-utils

npm i https://pkg.pr.new/@heroui/framer-utils@5795

@heroui/react-rsc-utils

npm i https://pkg.pr.new/@heroui/react-rsc-utils@5795

@heroui/react-utils

npm i https://pkg.pr.new/@heroui/react-utils@5795

@heroui/shared-icons

npm i https://pkg.pr.new/@heroui/shared-icons@5795

@heroui/shared-utils

npm i https://pkg.pr.new/@heroui/shared-utils@5795

@heroui/stories-utils

npm i https://pkg.pr.new/@heroui/stories-utils@5795

@heroui/test-utils

npm i https://pkg.pr.new/@heroui/test-utils@5795

commit: e5cad93

@ITBoomBKStudio
Copy link

@IsDyh01 Hey! I’ve been exploring this issue too and noticed your PR.
I took the changes suggested by @coderabbitai, refined them a bit, and also fixed the long-standing CompoundVariants type issue - it’s something that’s been around since the early NextUI days (probably for 2 years or more).

Would you be okay if I opened a new PR that builds on this one and includes these improvements?
I’ll make sure to credit you and link back to this PR.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Oct 24, 2025

Tip

For best results, initiate chat on the files or code changes.

@ITBoomBKStudio, it's great to see community collaboration on this fix!

While the decision is ultimately between you and @IsDyh01, here are a couple of approaches you might consider:

Option 1: Collaborate on this PR

  • @IsDyh01 could add you as a co-author
  • You could push additional commits to this branch (if given access)
  • Keeps the discussion and history in one place

Option 2: New PR

Since you're adding significant improvements beyond the original scope (the CompoundVariants issue), Option 2 might be cleaner for reviewers to assess both fixes independently. However, if the changes are tightly coupled, Option 1 could work well.

Either way, crediting the original work and maintaining clear communication (as you're doing) is the right approach. I'm looking forward to seeing the CompoundVariants issue resolved—that sounds like it will be a valuable improvement!

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.

[BUG] - extendVariants does not show variants

2 participants