diff --git a/packages/core/ui/text-base/text-base-common.ts b/packages/core/ui/text-base/text-base-common.ts index 08e2078e7..5f60c9aea 100644 --- a/packages/core/ui/text-base/text-base-common.ts +++ b/packages/core/ui/text-base/text-base-common.ts @@ -26,6 +26,26 @@ export abstract class TextBaseCommon extends View implements TextBaseDefinition public text: string; public formattedText: FormattedString; + /*** + * In the NativeScript Core; by default the nativeTextViewProtected points to the same value as nativeViewProtected. + * At this point no internal NS components need this indirection functionality. + * This indirection is used to allow support usage by third party components so they don't have to duplicate functionality. + * + * A third party component can just override the `nativeTextViewProtected` getter and return a different internal view and that view would be + * what all TextView/TextInput class features would be applied to. + * + * A example is the Android MaterialDesign TextInput class, it has a wrapper view of a TextInputLayout + * https://developer.android.com/reference/com/google/android/material/textfield/TextInputLayout + * which wraps the actual TextInput. This wrapper layout (TextInputLayout) must be assigned to the nativeViewProtected as the entire + * NS Core uses nativeViewProtected for everything related to layout, so that it can be measured, added to the parent view as a child, ect. + * + * However, its internal view would be the actual TextView/TextInput and to allow that sub-view to have the normal TextView/TextInput + * class features, which we expose and to allow them to work on it, the internal TextView/TextInput is what the needs to have the class values applied to it. + * + * So all code that works on what is expected to be a TextView/TextInput should use `nativeTextViewProtected` so that any third party + * components that need to have two separate components can work properly without them having to duplicate all the TextBase (and decendants) functionality + * by just overriding the nativeTextViewProtected getter. + **/ get nativeTextViewProtected() { return this.nativeViewProtected; }