diff --git a/.changeset/whole-teeth-bake.md b/.changeset/whole-teeth-bake.md new file mode 100644 index 0000000000..a1c6bd5c5d --- /dev/null +++ b/.changeset/whole-teeth-bake.md @@ -0,0 +1,11 @@ +--- +"@lynx-js/web-elements": patch +--- + +fix: the `input` event of x-input with number type should have raw value + +For `type:=number` x-input with typed value "2." + +Before this commit: the value is "2" + +After this commit the value is "2." diff --git a/packages/web-platform/web-elements/src/XInput/InputBaseAttributes.ts b/packages/web-platform/web-elements/src/XInput/InputBaseAttributes.ts index 59d6e1e507..a1cde056c3 100644 --- a/packages/web-platform/web-elements/src/XInput/InputBaseAttributes.ts +++ b/packages/web-platform/web-elements/src/XInput/InputBaseAttributes.ts @@ -73,12 +73,13 @@ export class InputBaseAttributes | 'email' | 'url' = 'text'; let inputType: 'text' | 'number' | 'password' = 'text'; + /** + * For number / digit type, if the user is typing "2.", the raw value is expected to remain "2." rather than being altered. + */ if (attributeValue === 'digit') { inputMode = 'numeric'; - inputType = 'number'; } else if (attributeValue === 'number') { inputMode = 'decimal'; - inputType = 'number'; } else if (attributeValue === 'email') { inputMode = 'email'; } else if (attributeValue === 'tel') { diff --git a/packages/web-platform/web-elements/src/XInput/XInputEvents.ts b/packages/web-platform/web-elements/src/XInput/XInputEvents.ts index 8e63a4afc0..c2cef70b8c 100644 --- a/packages/web-platform/web-elements/src/XInput/XInputEvents.ts +++ b/packages/web-platform/web-elements/src/XInput/XInputEvents.ts @@ -44,10 +44,9 @@ export class XInputEvents { passive: true }, ); } else { - input.addEventListener( + input.removeEventListener( 'input', this.#teleportInput as (ev: Event) => void, - { passive: true }, ); input.removeEventListener( 'compositionend', diff --git a/packages/web-platform/web-tests/tests/react.spec.ts-snapshots/x-input/type/index-firefox-linux.png b/packages/web-platform/web-tests/tests/react.spec.ts-snapshots/x-input/type/index-firefox-linux.png index e43cf7778e..f894d55018 100644 Binary files a/packages/web-platform/web-tests/tests/react.spec.ts-snapshots/x-input/type/index-firefox-linux.png and b/packages/web-platform/web-tests/tests/react.spec.ts-snapshots/x-input/type/index-firefox-linux.png differ diff --git a/packages/web-platform/web-tests/tests/react.spec.ts-snapshots/x-input/type/index-webkit-linux.png b/packages/web-platform/web-tests/tests/react.spec.ts-snapshots/x-input/type/index-webkit-linux.png index cec0ea5d48..4d6b80a46c 100644 Binary files a/packages/web-platform/web-tests/tests/react.spec.ts-snapshots/x-input/type/index-webkit-linux.png and b/packages/web-platform/web-tests/tests/react.spec.ts-snapshots/x-input/type/index-webkit-linux.png differ diff --git a/packages/web-platform/web-tests/tests/web-elements.spec.ts b/packages/web-platform/web-tests/tests/web-elements.spec.ts index 82ae0bf90c..2985aa0dcd 100644 --- a/packages/web-platform/web-tests/tests/web-elements.spec.ts +++ b/packages/web-platform/web-tests/tests/web-elements.spec.ts @@ -2408,6 +2408,27 @@ test.describe('web-elements test suite', () => { }, ); + test( + 'event-input-number-dot', + async ({ page }, { titlePath }) => { + const title = getTitle(titlePath); + await gotoWebComponentPage(page, title); + const confirmValue = await page + .locator('#target') + .evaluateHandle((target) => { + let detail = { value: undefined }; + target.addEventListener('input', (e) => { + detail.value = (e as any).detail.value; + }); + return detail; + }); + await page.mouse.click(100, 25); + await page.keyboard.type('2.'); + await wait(200); + expect((await confirmValue.jsonValue()).value).toBe('2.'); + }, + ); + test( 'method-addText', async ({ page }, { titlePath, title: simpleTitle }) => { diff --git a/packages/web-platform/web-tests/tests/web-elements/x-input/event-input-number-dot.html b/packages/web-platform/web-tests/tests/web-elements/x-input/event-input-number-dot.html new file mode 100644 index 0000000000..bd17a601a4 --- /dev/null +++ b/packages/web-platform/web-tests/tests/web-elements/x-input/event-input-number-dot.html @@ -0,0 +1,43 @@ + + + + + + web playground + + + + + + + + + + + + + + + + + + + +