Closed floroz closed 8 months ago
cc @chakAs3
repository is private but the issue has been verified across two different environments/machines
@floroz let me check it out we did not have any major update for Vue between these version but i will investigate this
@floroz let me check it out we did not have any major update for Vue between these version but i will investigate this
@chakAs3 I forked you custom-render project and create a reproduction for the error: https://github.com/floroz/storybook-vue-custom-render/tree/bug/jsx-error-storybook
If you pnpm install
and go to src/stories/JSXComponent.stories.tsx
you should see the TS error
@chakAs3 I spent some time looking into the issue and found that:
7.2.0-rc.0
.JSXComponent.stories.tsx
, but also JSXComp.tsx
.I suspect the regression was introduced by https://github.com/storybookjs/storybook/pull/23574
I tried to fork the Storybook repo and reverted type-fest
to ^3.11
but, while creating a Vue TSX component under code/renderers/vue3/template/components
I have a lot of interference from other type defs across the project treating .tsx
files as React files.
Happy to continue troubleshooting this myself but I might need some assistance from your side (although I suspect you could verify this quite quickly).
hi @floroz i doubt that there is a regression, i think you were using my fork which support fully JSX, i may have to update it as the maybe a version conflict
hi @floroz i doubt that there is a regression, i think you were using my fork which support fully JSX, i may have to update it as the maybe a version conflict
@chakAs3 I used your fork just as a boilerplate starting point, but I replaced the dependencies to point at the published version of storybook, not your renderer.
If you check out that branch that I linked in the fork you should see the reproduction of the same error we have in our company project.
You can create a project from scratch and install 7.2.0
and create a Vue JSX Component, you should still see the error.
Note to core team: Aside from figuring out what's causing this issue, we should also add tests for Vue JSX to prevent this from breaking again.
Hi @vanessayuenn, the main reason is the renderer implementation that should be done properly, i have a repo with all type of custom render functions including JSX you can check my repo on Stackblitz i have add tests as well https://stackblitz.com/~/github.com/storybook-vue/storybook-vue-custom-render
@floroz can please check as well if it is working i updated the fork
@chakAs3 which is the updated fork you are referring to?
@chakAs3 hi, I have also encountered this issue. Is there any latest progress? thanks
@DediWang1990 is your issue types only or rendering ?
@chakAs3 only types. When using version 7.1.0 before, the type of args could be correctly obtained. However, after upgrading to the latest version, the type of args has been broken. By the way, I also use JSX.
I also use JSX
JSX a good option to have consistent rendering API, easy to migrate your code between React/ Vue / Preact / Lit.
i will investigate about this Type issue, i think maily is the new vue-tsc
I'm also having this issue. I can resolve some of the errors by doing something like this (but is not really a viable solution):
import { JSXComponent } from 'vue';
import BButton from '@/components/BButton';
const JsxButton: JSXComponent = BButton;
const render = () => <JsxButton />;
@treardon17 no worries i will get this fixed once i got sometime, after the release of Nuxt-Storybook module
Hey @chakAs3, I appreciate you have a lot on your plate, but was wondering if you had the chance to look at this issue?
It's currently blocking projects using JSX to upgrade from 7.2.0
upwards
hi @floroz please create the repo for me with your issue, easier for me as reference to fix.
hi @floroz please create the repo for me with your issue, easier for me as reference to fix.
@chakAs3 https://github.com/floroz/storybook-jsx-bug-720
You can see the error in src/stories/Button.stories.tsx
src/stories/Button.stories.tsx:17:26 - error TS2786: 'Button' cannot be used as a JSX component.
Its type 'DefineComponent<{ label: { type: PropType<string>; required: true; }; primary: { type: PropType<boolean>; default: boolean; }; size: { type: PropType<"small" | "medium" | "large">; }; backgroundColor: { ...; }; }, ... 11 more ..., {}>' is not a valid JSX element type.
Type 'DefineComponent<{ label: { type: PropType<string>; required: true; }; primary: { type: PropType<boolean>; default: boolean; }; size: { type: PropType<"small" | "medium" | "large">; }; backgroundColor: { ...; }; }, ... 11 more ..., {}>' is not assignable to type 'new (props: any, deprecatedLegacyContext?: any) => Component<any, any, any>'.
Type '{ $: ComponentInternalInstance; $data: {}; $props: { primary?: boolean | undefined; readonly label: string; style?: unknown; onClick?: ((id: number) => any) | undefined; ... 12 more ...; onVnodeUnmounted?: VNodeMountHook | ... 1 more ... | undefined; }; ... 10 more ...; $watch<T extends string | ((...args: any) => a...' is missing the following properties from type 'Component<any, any, any>': context, setState, forceUpdate, render, and 3 more.
17 return () => <div><Button {...args} /></div>
For everyone bumping into this, we ended up migrating away from JSX since we also found some conflicts between global JSX types propagated by @types/react
and the global one from vue
.
Relates to:
I have the same issue, but when I removed some dependencies from package.json, the error of "ReactNode does not exist" no longer appears. However, a new problem has arisen: the controllers of StoryBook do not show up, even though autodocs is indeed effective. This is so strange.
For everyone bumping into this, we ended up migrating away from JSX since we also found some conflicts between global JSX types propagated by
@types/react
and the global one fromvue
.
yes the conflicts come from storybook requires react even in Vue project, we are working on dropping this in v8, so you can go back to JSX If it necessary
Is this React dependency also going to be dropped for @storybook/addon-docs? I see it is still required in the latest version - 8.0.0-rc.5. This is the only thing blocking a standard Vue/Storybook 8 project now where JSX is used within Vue components. When I removed addon-docs
TypeScript is happy!
Is this React dependency also going to be dropped for @storybook/addon-docs? I see it is still required in the latest version - 8.0.0-rc.5. This is the only thing blocking a standard Vue/Storybook 8 project now where JSX is used within Vue components. When I removed
addon-docs
TypeScript is happy!这个 React 依赖项也会被 @storybook/addon-docs 删除吗?我看到最新版本 - 8.0.0-rc.5 仍然需要它。这是现在唯一阻止标准 Vue/Storybook 8 项目在 Vue 组件中使用 JSX 的东西。当我删除 addon-docs 时,TypeScript 很高兴!
Hey!Maybe you can try this one
https://github.com/vuejs/language-tools/discussions/592#discussioncomment-2163181
Describe the bug
After upgrading from our last version
7.1.0
to7.2.0
or7.3.0-alpha
, all our Vue JSX Stories are now broken.7.1.0
is stable and types are working correctly7.2.0
upwards all the types in JSX stories are broken and failingvue-tsc
check.The Stories are still working correctly but all files now contain JSX errors.
This is the blueprint for all our Stories setup using Vue 3 (
script setup
) and JSX.Our tsconfigs:
To Reproduce
<script setup lang="ts" />
syntax which containsdefineProps
anddefineSlots
vue-tsc
against those storiesSystem
Additional context
No response