Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TypeScript Variants Type Information Lost When Extending #185

Open
ryanelian opened this issue Apr 22, 2024 · 3 comments
Open

TypeScript Variants Type Information Lost When Extending #185

ryanelian opened this issue Apr 22, 2024 · 3 comments
Labels
bug Something isn't working

Comments

@ryanelian
Copy link

ryanelian commented Apr 22, 2024

Describe the bug

variants declared in a variant is not carried over to subsequent variants when extended.

Before I get chastised for doing this, I want to let everyone know that the reason I'm doing this is because Tailwind VS Code Intellisense breaks down and stop working when your variant gets too big, and I don't know how to fix it.

To Reproduce

Steps to reproduce the behavior:

import { VariantProps, tv } from 'tailwind-variants';

export const buttonBaseVariants = tv({
  base: '',
  variants: {
    mode: {
      contained: '',
      text: '',
    },
  },
});

export const buttonIntentVariants = tv({
  extend: buttonBaseVariants,
  variants: {
    intent: {
      primary: '',
      secondary: '',
      danger: '',
    },
  },
});

export const buttonVariants = tv({
  extend: buttonIntentVariants,
  variants: {
    size: {
      small: '',
      medium: '',
      large: '',
    },
  },
});

Expected behavior
I expect the final function to contain the variants extended from the original and subsequent variants. Note below that mode is missing from the type information:

Screenshots

image

Additional context

Using Visual Studio Code with TypeScript 5.4.5 in the project package.json

Version: 1.88.1 (Universal)
Commit: e170252f762678dec6ca2cc69aba1570769a5d39
Date: 2024-04-10T17:42:52.765Z
Electron: 28.2.8
ElectronBuildId: 27744544
Chromium: 120.0.6099.291
Node.js: 18.18.2
V8: 12.0.267.19-electron.0
OS: Darwin arm64 23.4.0
@ryanelian ryanelian added the bug Something isn't working label Apr 22, 2024
@mskelton
Copy link
Collaborator

@ryanelian This is a known issue that I'm still trying to decide how to solve. There is a way I know fixes it, but sadly that's a breaking change to how extending works, so I'm not yet sure if that's the route I want to go, but we'll see.

@Razinsky
Copy link

Razinsky commented May 9, 2024

We have the same issue. Multiple levels of inheritance seem like a pretty important use case; our case is also for buttons.

@w0ofy
Copy link

w0ofy commented May 13, 2024

I too have this same issue. Would be great to get >1 level of inheritance for extended components.

will be watching this thread

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

4 participants