From de597095605af8293ad170488116995d220783f2 Mon Sep 17 00:00:00 2001 From: Corbin Crutchley Date: Mon, 8 May 2023 11:17:05 -0700 Subject: [PATCH 1/8] fix: remove incorrect forwardRef from Preact --- .../__snapshots__/preact.test.ts.snap | 168 +++++++++--------- packages/core/src/generators/react/blocks.ts | 3 + .../core/src/generators/react/generator.ts | 4 +- 3 files changed, 85 insertions(+), 90 deletions(-) diff --git a/packages/core/src/__tests__/__snapshots__/preact.test.ts.snap b/packages/core/src/__tests__/__snapshots__/preact.test.ts.snap index 1785ca756b..be5515c56c 100644 --- a/packages/core/src/__tests__/__snapshots__/preact.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/preact.test.ts.snap @@ -1610,29 +1610,27 @@ exports[`Preact > jsx > Javascript Test > basicForwardRef 1`] = ` import { h, Fragment } from \\"preact\\"; import { useState, forwardRef } from \\"preact/hooks\\"; -const MyBasicForwardRefComponent = forwardRef( - function MyBasicForwardRefComponent(props, inputRef) { - const [name, setName] = useState(() => \\"PatrickJS\\"); +function MyBasicForwardRefComponent(props) { + const [name, setName] = useState(() => \\"PatrickJS\\"); - return ( - -
- setName(event.target.value)} - /> -
- -
- ); - } -); + return ( + +
+ setName(event.target.value)} + /> +
+ +
+ ); +} export default MyBasicForwardRefComponent; " @@ -1643,29 +1641,27 @@ exports[`Preact > jsx > Javascript Test > basicForwardRefMetadata 1`] = ` import { h, Fragment } from \\"preact\\"; import { useState, forwardRef } from \\"preact/hooks\\"; -const MyBasicForwardRefComponent = forwardRef( - function MyBasicForwardRefComponent(props, inputRef) { - const [name, setName] = useState(() => \\"PatrickJS\\"); +function MyBasicForwardRefComponent(props) { + const [name, setName] = useState(() => \\"PatrickJS\\"); - return ( - -
- setName(event.target.value)} - /> -
- -
- ); - } -); + return ( + +
+ setName(event.target.value)} + /> +
+ +
+ ); +} export default MyBasicForwardRefComponent; " @@ -4996,29 +4992,27 @@ export interface Props { inputRef: HTMLInputElement; } -const MyBasicForwardRefComponent = forwardRef( - function MyBasicForwardRefComponent(props: Props, inputRef) { - const [name, setName] = useState(() => \\"PatrickJS\\"); +function MyBasicForwardRefComponent(props: Props) { + const [name, setName] = useState(() => \\"PatrickJS\\"); - return ( - -
- setName(event.target.value)} - /> -
- -
- ); - } -); + return ( + +
+ setName(event.target.value)} + /> +
+ +
+ ); +} export default MyBasicForwardRefComponent; " @@ -5034,29 +5028,27 @@ export interface Props { inputRef: HTMLInputElement; } -const MyBasicForwardRefComponent = forwardRef( - function MyBasicForwardRefComponent(props: Props, inputRef) { - const [name, setName] = useState(() => \\"PatrickJS\\"); +function MyBasicForwardRefComponent(props: Props) { + const [name, setName] = useState(() => \\"PatrickJS\\"); - return ( - -
- setName(event.target.value)} - /> -
- -
- ); - } -); + return ( + +
+ setName(event.target.value)} + /> +
+ +
+ ); +} export default MyBasicForwardRefComponent; " diff --git a/packages/core/src/generators/react/blocks.ts b/packages/core/src/generators/react/blocks.ts index 29cb421f5c..a9592c67cf 100644 --- a/packages/core/src/generators/react/blocks.ts +++ b/packages/core/src/generators/react/blocks.ts @@ -139,6 +139,9 @@ const BINDING_MAPPERS: { | ((key: string, value: string, options?: ToReactOptions) => [string, string]); } = { ref(ref, value, options) { + if (options?.preact) { + return [ref, value]; + } const regexp = /(.+)?props\.(.+)( |\)|;|\()?$/m; if (regexp.test(value)) { const match = regexp.exec(value); diff --git a/packages/core/src/generators/react/generator.ts b/packages/core/src/generators/react/generator.ts index 5feee28f7c..3833f92470 100644 --- a/packages/core/src/generators/react/generator.ts +++ b/packages/core/src/generators/react/generator.ts @@ -264,7 +264,7 @@ const _componentToReact = ( let hasState = checkHasState(json); const [forwardRef, hasPropRef] = getPropsRef(json); - const isForwardRef = Boolean(json.meta.useMetadata?.forwardRef || hasPropRef); + const isForwardRef = !options.preact && Boolean(json.meta.useMetadata?.forwardRef || hasPropRef); if (isForwardRef) { const meta = json.meta.useMetadata?.forwardRef as string; options.forwardRef = meta || forwardRef; @@ -313,7 +313,7 @@ const _componentToReact = ( if (allRefs.length) { reactLibImports.add('useRef'); } - if (hasPropRef) { + if (!options.preact && hasPropRef) { reactLibImports.add('forwardRef'); } if ( From d67de8d4811baf7189e507b375d0340beb6debe9 Mon Sep 17 00:00:00 2001 From: Corbin Crutchley Date: Tue, 9 May 2023 00:35:00 -0700 Subject: [PATCH 2/8] chore: fix preact snapshot --- .../core/src/__tests__/__snapshots__/preact.test.ts.snap | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/core/src/__tests__/__snapshots__/preact.test.ts.snap b/packages/core/src/__tests__/__snapshots__/preact.test.ts.snap index be5515c56c..8534356a13 100644 --- a/packages/core/src/__tests__/__snapshots__/preact.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/preact.test.ts.snap @@ -1608,7 +1608,7 @@ export default MyComponent; exports[`Preact > jsx > Javascript Test > basicForwardRef 1`] = ` "/** @jsx h */ import { h, Fragment } from \\"preact\\"; -import { useState, forwardRef } from \\"preact/hooks\\"; +import { useState } from \\"preact/hooks\\"; function MyBasicForwardRefComponent(props) { const [name, setName] = useState(() => \\"PatrickJS\\"); @@ -1639,7 +1639,7 @@ export default MyBasicForwardRefComponent; exports[`Preact > jsx > Javascript Test > basicForwardRefMetadata 1`] = ` "/** @jsx h */ import { h, Fragment } from \\"preact\\"; -import { useState, forwardRef } from \\"preact/hooks\\"; +import { useState } from \\"preact/hooks\\"; function MyBasicForwardRefComponent(props) { const [name, setName] = useState(() => \\"PatrickJS\\"); @@ -4985,7 +4985,7 @@ export default MyComponent; exports[`Preact > jsx > Typescript Test > basicForwardRef 1`] = ` "/** @jsx h */ import { h, Fragment } from \\"preact\\"; -import { useState, forwardRef } from \\"preact/hooks\\"; +import { useState } from \\"preact/hooks\\"; export interface Props { showInput: boolean; @@ -5021,7 +5021,7 @@ export default MyBasicForwardRefComponent; exports[`Preact > jsx > Typescript Test > basicForwardRefMetadata 1`] = ` "/** @jsx h */ import { h, Fragment } from \\"preact\\"; -import { useState, forwardRef } from \\"preact/hooks\\"; +import { useState } from \\"preact/hooks\\"; export interface Props { showInput: boolean; From 1fdb410d0ac49c0e1fcd756ce202239b94a82825 Mon Sep 17 00:00:00 2001 From: Corbin Crutchley Date: Tue, 9 May 2023 06:17:35 -0700 Subject: [PATCH 3/8] chore: make React only forwardRef during `ref` --- .../__snapshots__/alpine.test.ts.snap | 52 ++- .../__snapshots__/angular.import.test.ts.snap | 83 ++++- .../__snapshots__/angular.mapper.test.ts.snap | 85 ++++- .../__snapshots__/angular.test.ts.snap | 152 ++++++++- .../__tests__/__snapshots__/html.test.ts.snap | 128 ++++++- .../__snapshots__/liquid.test.ts.snap | 24 ++ .../__tests__/__snapshots__/lit.test.ts.snap | 91 ++++- .../__snapshots__/marko.test.ts.snap | 64 +++- .../__snapshots__/parse-jsx.test.ts.snap | 195 ++++++++++- .../__snapshots__/preact.test.ts.snap | 73 +++- .../__tests__/__snapshots__/qwik.test.ts.snap | 82 ++++- .../__snapshots__/react-native.test.ts.snap | 83 ++++- .../__snapshots__/react.test.ts.snap | 77 ++++- .../__tests__/__snapshots__/rsc.test.ts.snap | 63 +++- .../__snapshots__/stencil.test.ts.snap | 72 +++- .../__snapshots__/svelte.test.ts.snap | 53 ++- .../__tests__/__snapshots__/taro.test.ts.snap | 80 ++++- .../vue-composition.test.ts.snap | 65 +++- .../__tests__/__snapshots__/vue.test.ts.snap | 81 ++++- .../__snapshots__/webcomponent.test.ts.snap | 313 +++++++++++++++++- .../__tests__/data/basic-forwardRef.raw.tsx | 4 +- .../__tests__/data/dont-forwardRef.raw.tsx | 25 ++ packages/core/src/__tests__/test-generator.ts | 2 + packages/core/src/generators/react/blocks.ts | 2 +- .../core/src/generators/react/generator.ts | 10 +- packages/core/src/generators/react/refs.ts | 27 ++ packages/core/src/helpers/get-props.ts | 3 +- 27 files changed, 1907 insertions(+), 82 deletions(-) create mode 100644 packages/core/src/__tests__/data/dont-forwardRef.raw.tsx create mode 100644 packages/core/src/generators/react/refs.ts diff --git a/packages/core/src/__tests__/__snapshots__/alpine.test.ts.snap b/packages/core/src/__tests__/__snapshots__/alpine.test.ts.snap index 0188f539ee..b454e5ae4a 100644 --- a/packages/core/src/__tests__/__snapshots__/alpine.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/alpine.test.ts.snap @@ -1414,7 +1414,7 @@ exports[`Alpine.js > jsx > Javascript Test > basicForwardRef 1`] = `
@@ -1681,6 +1681,30 @@ exports[`Alpine.js > jsx > Javascript Test > defaultValsWithTypes 1`] = ` " `; +exports[`Alpine.js > jsx > Javascript Test > dontForwardRef 1`] = ` +" +
+ +
+ +" +`; + exports[`Alpine.js > jsx > Javascript Test > expressionState 1`] = ` "
+" +`; + exports[`Alpine.js > jsx > Typescript Test > expressionState 1`] = ` "
+" +`; + exports[`Html > jsx > Javascript Test > expressionState 1`] = ` "
@@ -9083,7 +9145,7 @@ exports[`Html > jsx > Typescript Test > basicForwardRef 1`] = ` class=\\"input\\" data-el=\\"input-1\\" data-dom-state=\\"input-2\\" - data-ref=\\"undefined-props.inputRef\\" + data-ref=\\"undefined-props.ref\\" />
+ +" +`; + exports[`Html > jsx > Typescript Test > expressionState 1`] = ` "
diff --git a/packages/core/src/__tests__/__snapshots__/liquid.test.ts.snap b/packages/core/src/__tests__/__snapshots__/liquid.test.ts.snap index 6a445aeb2e..9e18344a02 100644 --- a/packages/core/src/__tests__/__snapshots__/liquid.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/liquid.test.ts.snap @@ -568,6 +568,18 @@ exports[`Liquid > jsx > Javascript Test > defaultValsWithTypes 1`] = ` " `; +exports[`Liquid > jsx > Javascript Test > dontForwardRef 1`] = ` +"
+ +
+ +" +`; + exports[`Liquid > jsx > Javascript Test > expressionState 1`] = ` "
{{refToUse}}
" @@ -1414,6 +1426,18 @@ exports[`Liquid > jsx > Typescript Test > defaultValsWithTypes 1`] = ` " `; +exports[`Liquid > jsx > Typescript Test > dontForwardRef 1`] = ` +"
+ +
+ +" +`; + exports[`Liquid > jsx > Typescript Test > expressionState 1`] = ` "
{{refToUse}}
" diff --git a/packages/core/src/__tests__/__snapshots__/lit.test.ts.snap b/packages/core/src/__tests__/__snapshots__/lit.test.ts.snap index abc95ac6f7..f4165e0e22 100644 --- a/packages/core/src/__tests__/__snapshots__/lit.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/lit.test.ts.snap @@ -2068,10 +2068,10 @@ export default class MyBasicForwardRefComponent extends LitElement { return this; } - @query('[ref=\\"props.inputRef\\"]') - propsInputRef!: HTMLElement; + @query('[ref=\\"props.ref\\"]') + propsRef!: HTMLElement; - @property() inputRef: any; + @property() ref: any; @state() name = \\"PatrickJS\\"; @@ -2082,7 +2082,7 @@ export default class MyBasicForwardRefComponent extends LitElement { }
- + (this.name = event.target.value)} />
@@ -2529,6 +2529,40 @@ export default class ComponentWithTypes extends LitElement { " `; +exports[`Lit > jsx > Javascript Test > dontForwardRef 1`] = ` +"import { LitElement, html, css } from \\"lit\\"; +import { customElement, property, state, query } from \\"lit/decorators.js\\"; + +@customElement(\\"dont-forward-ref-component\\") +export default class DontForwardRefComponent extends LitElement { + createRenderRoot() { + return this; + } + + @query('[ref=\\"props.inputRef\\"]') + propsInputRef!: HTMLElement; + + @property() inputRef: any; + + @state() name = \\"PatrickJS\\"; + + render() { + return html\` + +
+ + (this.name = event.target.value)} /> +
+ + \`; + } +} +" +`; + exports[`Lit > jsx > Javascript Test > expressionState 1`] = ` "import { LitElement, html, css } from \\"lit\\"; import { customElement, property, state, query } from \\"lit/decorators.js\\"; @@ -6244,7 +6278,7 @@ import { customElement, property, state, query } from \\"lit/decorators.js\\"; export interface Props { showInput: boolean; - inputRef: HTMLInputElement; + ref: HTMLInputElement; } @customElement(\\"my-basic-forward-ref-component\\") @@ -6253,10 +6287,10 @@ export default class MyBasicForwardRefComponent extends LitElement { return this; } - @query('[ref=\\"props.inputRef\\"]') - propsInputRef!: HTMLElement; + @query('[ref=\\"props.ref\\"]') + propsRef!: HTMLElement; - @property() inputRef: any; + @property() ref: any; @state() name = \\"PatrickJS\\"; @@ -6267,7 +6301,7 @@ export default class MyBasicForwardRefComponent extends LitElement { }
- + (this.name = event.target.value)} />
@@ -6756,6 +6790,45 @@ export default class ComponentWithTypes extends LitElement { " `; +exports[`Lit > jsx > Typescript Test > dontForwardRef 1`] = ` +"import { LitElement, html, css } from \\"lit\\"; +import { customElement, property, state, query } from \\"lit/decorators.js\\"; + +export interface Props { + showInput: boolean; + inputRef: HTMLInputElement; +} + +@customElement(\\"dont-forward-ref-component\\") +export default class DontForwardRefComponent extends LitElement { + createRenderRoot() { + return this; + } + + @query('[ref=\\"props.inputRef\\"]') + propsInputRef!: HTMLElement; + + @property() inputRef: any; + + @state() name = \\"PatrickJS\\"; + + render() { + return html\` + +
+ + (this.name = event.target.value)} /> +
+ + \`; + } +} +" +`; + exports[`Lit > jsx > Typescript Test > expressionState 1`] = ` "import { LitElement, html, css } from \\"lit\\"; import { customElement, property, state, query } from \\"lit/decorators.js\\"; diff --git a/packages/core/src/__tests__/__snapshots__/marko.test.ts.snap b/packages/core/src/__tests__/__snapshots__/marko.test.ts.snap index 372e8c4402..ae6ef1bd4c 100644 --- a/packages/core/src/__tests__/__snapshots__/marko.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/marko.test.ts.snap @@ -1353,8 +1353,8 @@ exports[`Marko > jsx > Javascript Test > basicForwardRef 1`] = ` this.state = { name: \\"PatrickJS\\" }; } - get propsInputRef() { - return this.getEl(\\"propsInputRef\\"); + get propsRef() { + return this.getEl(\\"propsRef\\"); } } @@ -1366,7 +1366,7 @@ style {
state.name = event.target.value) /> @@ -1587,6 +1587,32 @@ class {}
Hello \${input.name || DEFAULT_VALUES.name}
" `; +exports[`Marko > jsx > Javascript Test > dontForwardRef 1`] = ` +"class { + onCreate(input) { + this.state = { name: \\"PatrickJS\\" }; + } + + get propsInputRef() { + return this.getEl(\\"propsInputRef\\"); + } +} + +style { + .input-5ca2af3c { + color: red; + } +} +
+ state.name = event.target.value) + /> +
" +`; + exports[`Marko > jsx > Javascript Test > expressionState 1`] = ` "class { onCreate(input) { @@ -3609,8 +3635,8 @@ exports[`Marko > jsx > Typescript Test > basicForwardRef 1`] = ` this.state = { name: \\"PatrickJS\\" }; } - get propsInputRef() { - return this.getEl(\\"propsInputRef\\"); + get propsRef() { + return this.getEl(\\"propsRef\\"); } } @@ -3622,7 +3648,7 @@ style {
state.name = event.target.value) /> @@ -3845,6 +3871,32 @@ class {}
Hello \${input.name || DEFAULT_VALUES.name}
" `; +exports[`Marko > jsx > Typescript Test > dontForwardRef 1`] = ` +"class { + onCreate(input) { + this.state = { name: \\"PatrickJS\\" }; + } + + get propsInputRef() { + return this.getEl(\\"propsInputRef\\"); + } +} + +style { + .input-30866138 { + color: red; + } +} +
+ state.name = event.target.value) + /> +
" +`; + exports[`Marko > jsx > Typescript Test > expressionState 1`] = ` "class { onCreate(input) { diff --git a/packages/core/src/__tests__/__snapshots__/parse-jsx.test.ts.snap b/packages/core/src/__tests__/__snapshots__/parse-jsx.test.ts.snap index a49032230b..b50e0316a9 100644 --- a/packages/core/src/__tests__/__snapshots__/parse-jsx.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/parse-jsx.test.ts.snap @@ -6378,7 +6378,7 @@ exports[`Parse JSX > Javascript > basicForwardRef 1`] = ` "type": "single", }, "ref": { - "code": "props.inputRef", + "code": "props.ref", "type": "single", }, "value": { @@ -7967,6 +7967,97 @@ exports[`Parse JSX > Javascript > defaultValsWithTypes 1`] = ` } `; +exports[`Parse JSX > Javascript > dontForwardRef 1`] = ` +{ + "@type": "@builder.io/mitosis/component", + "children": [ + { + "@type": "@builder.io/mitosis/node", + "bindings": {}, + "children": [ + { + "@type": "@builder.io/mitosis/node", + "bindings": {}, + "children": [], + "meta": {}, + "name": "div", + "properties": { + "_text": " + ", + }, + "scope": {}, + }, + { + "@type": "@builder.io/mitosis/node", + "bindings": { + "css": { + "code": "{ + color: 'red' +}", + "type": "single", + }, + "onChange": { + "arguments": [ + "event", + ], + "code": "state.name = event.target.value", + "type": "single", + }, + "ref": { + "code": "props.inputRef", + "type": "single", + }, + "value": { + "code": "state.name", + "type": "single", + }, + }, + "children": [], + "meta": {}, + "name": "input", + "properties": {}, + "scope": {}, + }, + { + "@type": "@builder.io/mitosis/node", + "bindings": {}, + "children": [], + "meta": {}, + "name": "div", + "properties": { + "_text": " + ", + }, + "scope": {}, + }, + ], + "meta": {}, + "name": "div", + "properties": {}, + "scope": {}, + }, + ], + "context": { + "get": {}, + "set": {}, + }, + "exports": {}, + "hooks": {}, + "imports": [], + "inputs": [], + "meta": {}, + "name": "DontForwardRefComponent", + "refs": {}, + "state": { + "name": { + "code": "'PatrickJS'", + "type": "property", + }, + }, + "subComponents": [], +} +`; + exports[`Parse JSX > Javascript > expressionState 1`] = ` { "@type": "@builder.io/mitosis/component", @@ -18244,7 +18335,7 @@ exports[`Parse JSX > Typescript > basicForwardRef 1`] = ` "type": "single", }, "ref": { - "code": "props.inputRef", + "code": "props.ref", "type": "single", }, "value": { @@ -18299,7 +18390,7 @@ exports[`Parse JSX > Typescript > basicForwardRef 1`] = ` "types": [ "export interface Props { showInput: boolean; - inputRef: HTMLInputElement; + ref: HTMLInputElement; }", ], } @@ -19902,6 +19993,104 @@ exports[`Parse JSX > Typescript > defaultValsWithTypes 1`] = ` } `; +exports[`Parse JSX > Typescript > dontForwardRef 1`] = ` +{ + "@type": "@builder.io/mitosis/component", + "children": [ + { + "@type": "@builder.io/mitosis/node", + "bindings": {}, + "children": [ + { + "@type": "@builder.io/mitosis/node", + "bindings": {}, + "children": [], + "meta": {}, + "name": "div", + "properties": { + "_text": " + ", + }, + "scope": {}, + }, + { + "@type": "@builder.io/mitosis/node", + "bindings": { + "css": { + "code": "{ + color: 'red' +}", + "type": "single", + }, + "onChange": { + "arguments": [ + "event", + ], + "code": "state.name = event.target.value", + "type": "single", + }, + "ref": { + "code": "props.inputRef", + "type": "single", + }, + "value": { + "code": "state.name", + "type": "single", + }, + }, + "children": [], + "meta": {}, + "name": "input", + "properties": {}, + "scope": {}, + }, + { + "@type": "@builder.io/mitosis/node", + "bindings": {}, + "children": [], + "meta": {}, + "name": "div", + "properties": { + "_text": " + ", + }, + "scope": {}, + }, + ], + "meta": {}, + "name": "div", + "properties": {}, + "scope": {}, + }, + ], + "context": { + "get": {}, + "set": {}, + }, + "exports": {}, + "hooks": {}, + "imports": [], + "inputs": [], + "meta": {}, + "name": "DontForwardRefComponent", + "propsTypeRef": "Props", + "refs": {}, + "state": { + "name": { + "code": "'PatrickJS'", + "type": "property", + }, + }, + "subComponents": [], + "types": [ + "export interface Props { + showInput: boolean; + inputRef: HTMLInputElement; +}", + ], +} +`; + exports[`Parse JSX > Typescript > expressionState 1`] = ` { "@type": "@builder.io/mitosis/component", diff --git a/packages/core/src/__tests__/__snapshots__/preact.test.ts.snap b/packages/core/src/__tests__/__snapshots__/preact.test.ts.snap index 8534356a13..f5bccd9036 100644 --- a/packages/core/src/__tests__/__snapshots__/preact.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/preact.test.ts.snap @@ -1618,7 +1618,7 @@ function MyBasicForwardRefComponent(props) {
setName(event.target.value)} /> @@ -2035,6 +2035,37 @@ export default ComponentWithTypes; " `; +exports[`Preact > jsx > Javascript Test > dontForwardRef 1`] = ` +"/** @jsx h */ +import { h, Fragment } from \\"preact\\"; +import { useState } from \\"preact/hooks\\"; + +function DontForwardRefComponent(props) { + const [name, setName] = useState(() => \\"PatrickJS\\"); + + return ( + +
+ setName(event.target.value)} + /> +
+ +
+ ); +} + +export default DontForwardRefComponent; +" +`; + exports[`Preact > jsx > Javascript Test > expressionState 1`] = ` "/** @jsx h */ import { h, Fragment } from \\"preact\\"; @@ -4989,7 +5020,7 @@ import { useState } from \\"preact/hooks\\"; export interface Props { showInput: boolean; - inputRef: HTMLInputElement; + ref: HTMLInputElement; } function MyBasicForwardRefComponent(props: Props) { @@ -5000,7 +5031,7 @@ function MyBasicForwardRefComponent(props: Props) {
setName(event.target.value)} /> @@ -5460,6 +5491,42 @@ export default ComponentWithTypes; " `; +exports[`Preact > jsx > Typescript Test > dontForwardRef 1`] = ` +"/** @jsx h */ +import { h, Fragment } from \\"preact\\"; +import { useState } from \\"preact/hooks\\"; + +export interface Props { + showInput: boolean; + inputRef: HTMLInputElement; +} + +function DontForwardRefComponent(props: Props) { + const [name, setName] = useState(() => \\"PatrickJS\\"); + + return ( + +
+ setName(event.target.value)} + /> +
+ +
+ ); +} + +export default DontForwardRefComponent; +" +`; + exports[`Preact > jsx > Typescript Test > expressionState 1`] = ` "/** @jsx h */ import { h, Fragment } from \\"preact\\"; diff --git a/packages/core/src/__tests__/__snapshots__/qwik.test.ts.snap b/packages/core/src/__tests__/__snapshots__/qwik.test.ts.snap index 523f7b0f6f..a968d70833 100644 --- a/packages/core/src/__tests__/__snapshots__/qwik.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/qwik.test.ts.snap @@ -3430,7 +3430,7 @@ export const MyBasicForwardRefComponent = component$((props) => {
(state.name = event.target.value)} /> @@ -3715,6 +3715,42 @@ export default ComponentWithTypes; " `; +exports[`qwik > jsx > Javascript Test > dontForwardRef 1`] = ` +"import { + Fragment, + component$, + h, + useStore, + useStylesScoped$, +} from \\"@builder.io/qwik\\"; + +export const DontForwardRefComponent = component$((props) => { + useStylesScoped$(STYLES); + + const state = useStore({ name: \\"PatrickJS\\" }); + + return ( +
+ (state.name = event.target.value)} + /> +
+ ); +}); + +export default DontForwardRefComponent; + +export const STYLES = \` +.input-DontForwardRefComponent { + color: red; +} +\`; +" +`; + exports[`qwik > jsx > Javascript Test > expressionState 1`] = ` "import { Fragment, component$, h, useStore } from \\"@builder.io/qwik\\"; @@ -6619,7 +6655,7 @@ exports[`qwik > jsx > Typescript Test > basicForwardRef 1`] = ` export interface Props { showInput: boolean; - inputRef: HTMLInputElement; + ref: HTMLInputElement; } export const MyBasicForwardRefComponent = component$((props: Props) => { useStylesScoped$(STYLES); @@ -6630,7 +6666,7 @@ export const MyBasicForwardRefComponent = component$((props: Props) => {
(state.name = event.target.value)} /> @@ -6944,6 +6980,46 @@ export default ComponentWithTypes; " `; +exports[`qwik > jsx > Typescript Test > dontForwardRef 1`] = ` +"import { + Fragment, + component$, + h, + useStore, + useStylesScoped$, +} from \\"@builder.io/qwik\\"; + +export interface Props { + showInput: boolean; + inputRef: HTMLInputElement; +} +export const DontForwardRefComponent = component$((props: Props) => { + useStylesScoped$(STYLES); + + const state = useStore({ name: \\"PatrickJS\\" }); + + return ( +
+ (state.name = event.target.value)} + /> +
+ ); +}); + +export default DontForwardRefComponent; + +export const STYLES = \` +.input-DontForwardRefComponent { + color: red; +} +\`; +" +`; + exports[`qwik > jsx > Typescript Test > expressionState 1`] = ` "import { Fragment, component$, h, useStore } from \\"@builder.io/qwik\\"; diff --git a/packages/core/src/__tests__/__snapshots__/react-native.test.ts.snap b/packages/core/src/__tests__/__snapshots__/react-native.test.ts.snap index 5993c31383..5466a7e73d 100644 --- a/packages/core/src/__tests__/__snapshots__/react-native.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/react-native.test.ts.snap @@ -1809,13 +1809,13 @@ import { import { useState, forwardRef } from \\"react\\"; const MyBasicForwardRefComponent = forwardRef( - function MyBasicForwardRefComponent(props, inputRef) { + function MyBasicForwardRefComponent(props, ref) { const [name, setName] = useState(() => \\"PatrickJS\\"); return ( setName(event.target.value)} style={styles.view1} @@ -2307,6 +2307,39 @@ export default ComponentWithTypes; " `; +exports[`React Native > jsx > Javascript Test > dontForwardRef 1`] = ` +"import * as React from \\"react\\"; +import { + FlatList, + ScrollView, + View, + StyleSheet, + Image, + Text, +} from \\"react-native\\"; +import { useState } from \\"react\\"; + +function DontForwardRefComponent(props) { + const [name, setName] = useState(() => \\"PatrickJS\\"); + + return ( + + setName(event.target.value)} + style={styles.view1} + /> + + ); +} + +const styles = StyleSheet.create({ view1: { color: \\"red\\" } }); + +export default DontForwardRefComponent; +" +`; + exports[`React Native > jsx > Javascript Test > expressionState 1`] = ` "import * as React from \\"react\\"; import { @@ -5706,17 +5739,17 @@ import { useState, forwardRef } from \\"react\\"; export interface Props { showInput: boolean; - inputRef: HTMLInputElement; + ref: HTMLInputElement; } -const MyBasicForwardRefComponent = forwardRef( - function MyBasicForwardRefComponent(props: Props, inputRef) { +const MyBasicForwardRefComponent = forwardRef( + function MyBasicForwardRefComponent(props: Props, ref) { const [name, setName] = useState(() => \\"PatrickJS\\"); return ( setName(event.target.value)} style={styles.view1} @@ -6251,6 +6284,44 @@ export default ComponentWithTypes; " `; +exports[`React Native > jsx > Typescript Test > dontForwardRef 1`] = ` +"import * as React from \\"react\\"; +import { + FlatList, + ScrollView, + View, + StyleSheet, + Image, + Text, +} from \\"react-native\\"; +import { useState } from \\"react\\"; + +export interface Props { + showInput: boolean; + inputRef: HTMLInputElement; +} + +function DontForwardRefComponent(props: Props) { + const [name, setName] = useState(() => \\"PatrickJS\\"); + + return ( + + setName(event.target.value)} + style={styles.view1} + /> + + ); +} + +const styles = StyleSheet.create({ view1: { color: \\"red\\" } }); + +export default DontForwardRefComponent; +" +`; + exports[`React Native > jsx > Typescript Test > expressionState 1`] = ` "import * as React from \\"react\\"; import { diff --git a/packages/core/src/__tests__/__snapshots__/react.test.ts.snap b/packages/core/src/__tests__/__snapshots__/react.test.ts.snap index f053910c85..3388c49922 100644 --- a/packages/core/src/__tests__/__snapshots__/react.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/react.test.ts.snap @@ -1571,7 +1571,7 @@ exports[`React > jsx > Javascript Test > basicForwardRef 1`] = ` import { useState, forwardRef } from \\"react\\"; const MyBasicForwardRefComponent = forwardRef( - function MyBasicForwardRefComponent(props, inputRef) { + function MyBasicForwardRefComponent(props, ref) { const [name, setName] = useState(() => \\"PatrickJS\\"); return ( @@ -1579,7 +1579,7 @@ const MyBasicForwardRefComponent = forwardRef(
setName(event.target.value)} /> @@ -1986,6 +1986,36 @@ export default ComponentWithTypes; " `; +exports[`React > jsx > Javascript Test > dontForwardRef 1`] = ` +"import * as React from \\"react\\"; +import { useState } from \\"react\\"; + +function DontForwardRefComponent(props) { + const [name, setName] = useState(() => \\"PatrickJS\\"); + + return ( + <> +
+ setName(event.target.value)} + /> +
+ + + ); +} + +export default DontForwardRefComponent; +" +`; + exports[`React > jsx > Javascript Test > expressionState 1`] = ` "import * as React from \\"react\\"; import { useState } from \\"react\\"; @@ -4855,11 +4885,11 @@ import { useState, forwardRef } from \\"react\\"; export interface Props { showInput: boolean; - inputRef: HTMLInputElement; + ref: HTMLInputElement; } -const MyBasicForwardRefComponent = forwardRef( - function MyBasicForwardRefComponent(props: Props, inputRef) { +const MyBasicForwardRefComponent = forwardRef( + function MyBasicForwardRefComponent(props: Props, ref) { const [name, setName] = useState(() => \\"PatrickJS\\"); return ( @@ -4867,7 +4897,7 @@ const MyBasicForwardRefComponent = forwardRef(
setName(event.target.value)} /> @@ -5317,6 +5347,41 @@ export default ComponentWithTypes; " `; +exports[`React > jsx > Typescript Test > dontForwardRef 1`] = ` +"import * as React from \\"react\\"; +import { useState } from \\"react\\"; + +export interface Props { + showInput: boolean; + inputRef: HTMLInputElement; +} + +function DontForwardRefComponent(props: Props) { + const [name, setName] = useState(() => \\"PatrickJS\\"); + + return ( + <> +
+ setName(event.target.value)} + /> +
+ + + ); +} + +export default DontForwardRefComponent; +" +`; + exports[`React > jsx > Typescript Test > expressionState 1`] = ` "import * as React from \\"react\\"; import { useState } from \\"react\\"; diff --git a/packages/core/src/__tests__/__snapshots__/rsc.test.ts.snap b/packages/core/src/__tests__/__snapshots__/rsc.test.ts.snap index e3b406a22f..6fdc9dde3a 100644 --- a/packages/core/src/__tests__/__snapshots__/rsc.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/rsc.test.ts.snap @@ -1477,6 +1477,7 @@ export default MyBasicForwardRefComponent; exports[`RSC > jsx > Javascript Test > basicForwardRefMetadata 1`] = ` "import * as React from \\"react\\"; +import { forwardRef } from \\"react\\"; const MyBasicForwardRefComponent = forwardRef( function MyBasicForwardRefComponent(props, inputRef) { @@ -1826,6 +1827,30 @@ export default ComponentWithTypes; " `; +exports[`RSC > jsx > Javascript Test > dontForwardRef 1`] = ` +"import * as React from \\"react\\"; + +function DontForwardRefComponent(props) { + const _context = { ...props[\\"_context\\"] }; + + const state = { name: \\"PatrickJS\\" }; + + return ( + <> +
+ +
+ + + ); +} + +export default DontForwardRefComponent; +" +`; + exports[`RSC > jsx > Javascript Test > expressionState 1`] = ` "import * as React from \\"react\\"; @@ -4571,7 +4596,7 @@ exports[`RSC > jsx > Typescript Test > basicForwardRef 1`] = ` export interface Props { showInput: boolean; - inputRef: HTMLInputElement; + ref: HTMLInputElement; } function MyBasicForwardRefComponent(props: Props) { @@ -4582,9 +4607,9 @@ function MyBasicForwardRefComponent(props: Props) { return ( <>
- +
- @@ -4597,13 +4622,14 @@ export default MyBasicForwardRefComponent; exports[`RSC > jsx > Typescript Test > basicForwardRefMetadata 1`] = ` "import * as React from \\"react\\"; +import { forwardRef } from \\"react\\"; export interface Props { showInput: boolean; inputRef: HTMLInputElement; } -const MyBasicForwardRefComponent = forwardRef( +const MyBasicForwardRefComponent = forwardRef( function MyBasicForwardRefComponent(props: Props, inputRef) { const _context = { ...props[\\"_context\\"] }; @@ -4989,6 +5015,35 @@ export default ComponentWithTypes; " `; +exports[`RSC > jsx > Typescript Test > dontForwardRef 1`] = ` +"import * as React from \\"react\\"; + +export interface Props { + showInput: boolean; + inputRef: HTMLInputElement; +} + +function DontForwardRefComponent(props: Props) { + const _context = { ...props[\\"_context\\"] }; + + const state = { name: \\"PatrickJS\\" }; + + return ( + <> +
+ +
+ + + ); +} + +export default DontForwardRefComponent; +" +`; + exports[`RSC > jsx > Typescript Test > expressionState 1`] = ` "import * as React from \\"react\\"; diff --git a/packages/core/src/__tests__/__snapshots__/stencil.test.ts.snap b/packages/core/src/__tests__/__snapshots__/stencil.test.ts.snap index fecb62ae64..e9b53aa5d3 100644 --- a/packages/core/src/__tests__/__snapshots__/stencil.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/stencil.test.ts.snap @@ -1728,7 +1728,7 @@ exports[`Stencil > jsx > Javascript Test > basicForwardRef 1`] = ` \`, }) export default class MyBasicForwardRefComponent { - @Prop() inputRef: any; + @Prop() ref: any; @State() name = \\"PatrickJS\\"; @@ -1737,7 +1737,7 @@ export default class MyBasicForwardRefComponent {
(this.props.inputRef = el)} + ref={(el) => (this.props.ref = el)} value={this.name} onInput={(event) => (this.name = event.target.value)} /> @@ -2123,6 +2123,38 @@ export default class ComponentWithTypes { " `; +exports[`Stencil > jsx > Javascript Test > dontForwardRef 1`] = ` +"import { Component, Prop, h, State, Fragment } from \\"@stencil/core\\"; + +@Component({ + tag: \\"dont-forward-ref-component\\", + styles: \` + .input { + color: red; + } +\`, +}) +export default class DontForwardRefComponent { + @Prop() inputRef: any; + + @State() name = \\"PatrickJS\\"; + + render() { + return ( +
+ (this.props.inputRef = el)} + value={this.name} + onInput={(event) => (this.name = event.target.value)} + /> +
+ ); + } +} +" +`; + exports[`Stencil > jsx > Javascript Test > expressionState 1`] = ` "import { Component, Prop, h, State, Fragment } from \\"@stencil/core\\"; @@ -4600,7 +4632,7 @@ exports[`Stencil > jsx > Typescript Test > basicForwardRef 1`] = ` \`, }) export default class MyBasicForwardRefComponent { - @Prop() inputRef: any; + @Prop() ref: any; @State() name = \\"PatrickJS\\"; @@ -4609,7 +4641,7 @@ export default class MyBasicForwardRefComponent {
(this.props.inputRef = el)} + ref={(el) => (this.props.ref = el)} value={this.name} onInput={(event) => (this.name = event.target.value)} /> @@ -4997,6 +5029,38 @@ export default class ComponentWithTypes { " `; +exports[`Stencil > jsx > Typescript Test > dontForwardRef 1`] = ` +"import { Component, Prop, h, State, Fragment } from \\"@stencil/core\\"; + +@Component({ + tag: \\"dont-forward-ref-component\\", + styles: \` + .input { + color: red; + } +\`, +}) +export default class DontForwardRefComponent { + @Prop() inputRef: any; + + @State() name = \\"PatrickJS\\"; + + render() { + return ( +
+ (this.props.inputRef = el)} + value={this.name} + onInput={(event) => (this.name = event.target.value)} + /> +
+ ); + } +} +" +`; + exports[`Stencil > jsx > Typescript Test > expressionState 1`] = ` "import { Component, Prop, h, State, Fragment } from \\"@stencil/core\\"; diff --git a/packages/core/src/__tests__/__snapshots__/svelte.test.ts.snap b/packages/core/src/__tests__/__snapshots__/svelte.test.ts.snap index 70b151aa5d..1ad534576f 100644 --- a/packages/core/src/__tests__/__snapshots__/svelte.test.ts.snap +++ b/packages/core/src/__tests__/__snapshots__/svelte.test.ts.snap @@ -1460,13 +1460,13 @@ exports[`Svelte > jsx > Javascript Test > arrowFunctionInUseStore 1`] = ` exports[`Svelte > jsx > Javascript Test > basicForwardRef 1`] = ` "
- +
" +`; + exports[`Svelte > jsx > Javascript Test > expressionState 1`] = ` "
- +
" +`; + exports[`Svelte > jsx > Typescript Test > expressionState 1`] = ` " @@ -1921,6 +1921,32 @@ const props = defineProps([\\"name\\"]); " `; +exports[`Vue > jsx > Javascript Test > dontForwardRef 1`] = ` +" + + + +" +`; + exports[`Vue > jsx > Javascript Test > expressionState 1`] = ` "