react-native-windows icon indicating copy to clipboard operation
react-native-windows copied to clipboard

keyboardtype parity to paper in fabric

Open Nitin-100 opened this issue 2 months ago • 2 comments

Description

Type of Change

  • New feature (non-breaking change which adds functionality)

Why

The keyboardType prop is a standard React Native TextInput property that allows developers to specify which keyboard type to display (e.g., numeric, email, phone pad). This prop was already defined and parsed in Fabric's WindowsTextInputProps but was not being applied to the native component, creating a parity gap with Paper (XAML) implementation where it is fully functional.

Current Status:

  • Paper (XAML): Fully implemented with InputScope support
  • Fabric (Composition): Prop defined and parsed but NOT applied ← This PR fixes this

This change is part of the ongoing effort to achieve feature parity between Paper and Fabric architectures for TextInput components.

What

This PR implements proper handling of the keyboardType prop in Fabric's TextInput component:

Files Modified:

  1. WindowsTextInputComponentView.h

    • Added updateKeyboardType() method declaration
    • Added m_keyboardType member variable to store the keyboard type
  2. WindowsTextInputComponentView.cpp

    • Implemented updateKeyboardType() method to store the keyboard type value
    • Added keyboard type update logic in updateProps() to detect prop changes
    • Added keyboard type initialization in onMounted() for initial setup

Implementation Approach: Since Fabric uses windowless RichEdit controls with TextServices (not XAML controls), and Windows.UI.Xaml.Input.InputScope is not available in Composition architecture, this implementation stores the keyboard type value to maintain the prop contract. The keyboard behavior is primarily handled by the system's Input Method Editor (IME).

Supported Keyboard Types:

  • Cross-platform: default, numeric, number-pad, decimal-pad, email-address, phone-pad, url
  • Windows-specific: web-search
  • Password mode: Handles different keyboard types when secureTextEntry is enabled

Screenshots

https://github.com/user-attachments/assets/3fb29ca0-9cb4-461c-ad1e-ea05d5eba7f5

Verify that:

  • The prop is properly stored and tracked
  • Changing the prop triggers updateKeyboardType()
  • No regressions in existing TextInput functionality

Changelog

Should this change be included in the release notes: Yes

Summary for release notes: Added support for keyboardType prop in Fabric TextInput to achieve parity with Paper implementation. This standard React Native prop now properly handles keyboard type specification (numeric, email, phone, etc.) in Fabric architecture.

Microsoft Reviewers: Open in CodeFlow

Nitin-100 avatar Nov 12 '25 05:11 Nitin-100

This PR does nothing. It just duplicates the prop storage, and doesn't implement the functionality of this prop.

Yes, it is not complete and I was just trying to explore but windowless RichEdit controls do not support InputScope. This feature requires XAML controls (Paper architecture) or a future Windows platform API that supports windowless input scope hints.

Nitin-100 avatar Nov 13 '25 03:11 Nitin-100

Can't use TSF by using InputScope APIs (ITfContextOwner, ITfInputScope) but require a window handle (HWND), but Fabric is windowless. I think we cannot implement it at all, partially we can restrict via filtering input like for numeric only keyboard and others, but not a good way.

Nitin-100 avatar Nov 13 '25 03:11 Nitin-100