@momo-kits/native-kits 0.157.4 → 0.157.5-debug
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build.gradle.kts +11 -0
- package/compose/build.gradle.kts +180 -0
- package/compose/build.gradle.kts.backup +180 -0
- package/compose/compose.podspec +54 -0
- package/compose/src/androidMain/kotlin/vn/momo/kits/platform/Platform.android.kt +110 -0
- package/compose/src/commonMain/composeResources/font/momosignature.otf +0 -0
- package/compose/src/commonMain/composeResources/font/momotrustdisplay.otf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_black.otf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_black.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_bold.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_heavy.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_light.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_medium.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_regular.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_semibold.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_thin.otf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_thin.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_ultralight.otf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_ultralight.ttf +0 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/AnimationSearchInput.kt +57 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Context.kt +107 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/FloatingButton.kt +201 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Header.kt +222 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderAnimated.kt +48 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderBackground.kt +86 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderDefault.kt +76 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderExtended.kt +76 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderRight.kt +305 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderTitle.kt +33 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/LiteScreen.kt +720 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/NavigationContainer.kt +121 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Screen.kt +405 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/useHeaderSearchAnimation.kt +69 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Badge.kt +85 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeDot.kt +32 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeRibbon.kt +340 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/BaselineView.kt +198 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Button.kt +357 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/CheckBox.kt +94 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Chip.kt +136 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/CupertinoOverscroll.kt +543 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Divider.kt +23 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Icon.kt +76 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/IconButton.kt +148 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Image.kt +188 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Information.kt +116 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Input.kt +448 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputDropDown.kt +172 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputMoney.kt +255 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputOTP.kt +231 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputPhoneNumber.kt +233 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputSearch.kt +254 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputTextArea.kt +241 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/LazyColumnWithBouncing.kt +364 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationDot.kt +56 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationNumber.kt +41 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationScroll.kt +92 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationWhiteDot.kt +40 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupNotify.kt +352 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupPromotion.kt +103 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Radio.kt +70 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/ScaleSizeScope.kt +17 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Skeleton.kt +96 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Switch.kt +96 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tag.kt +92 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Text.kt +130 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Title.kt +214 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tooltip.kt +590 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/TrustBanner.kt +177 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePicker.kt +205 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerTypes.kt +29 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerUtils.kt +239 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/WheelPicker.kt +191 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Colors.kt +306 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Radius.kt +12 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Spacing.kt +13 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Theme.kt +185 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Typography.kt +285 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Card.kt +2 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Item.kt +35 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Section.kt +2 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/AutomationId.kt +59 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Clickable.kt +68 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Conditional.kt +11 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/DeprecatedModifier.kt +14 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Shadow.kt +50 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Size.kt +51 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/BottomSheet.kt +239 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ModalScreen.kt +119 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigation.kt +98 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/NavigationContainer.kt +161 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigator.kt +331 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackScreen.kt +497 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTab.kt +162 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTabBar.kt +243 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/CurvedContainer.kt +86 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/FloatingButton.kt +187 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/Header.kt +279 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderBackground.kt +80 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderRight.kt +306 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderTitle.kt +32 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderUser.kt +370 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/SnackBar.kt +132 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/platform/Platform.kt +42 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Icons.kt +1329 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Resources.kt +62 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Tracking.kt +15 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Utils.kt +88 -0
- package/compose/src/iosMain/kotlin/vn/momo/kits/platform/Platform.ios.kt +149 -0
- package/gradle/libs.versions.toml +57 -0
- package/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/gradle/wrapper/gradle-wrapper.properties +8 -0
- package/gradle.properties +26 -0
- package/gradlew +252 -0
- package/gradlew.bat +94 -0
- package/ios/Input/Input.swift +112 -50
- package/package.json +1 -1
- package/settings.gradle.kts +52 -0
package/gradlew.bat
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
@rem
|
|
2
|
+
@rem Copyright 2015 the original author or authors.
|
|
3
|
+
@rem
|
|
4
|
+
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
@rem you may not use this file except in compliance with the License.
|
|
6
|
+
@rem You may obtain a copy of the License at
|
|
7
|
+
@rem
|
|
8
|
+
@rem https://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
@rem
|
|
10
|
+
@rem Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
@rem See the License for the specific language governing permissions and
|
|
14
|
+
@rem limitations under the License.
|
|
15
|
+
@rem
|
|
16
|
+
@rem SPDX-License-Identifier: Apache-2.0
|
|
17
|
+
@rem
|
|
18
|
+
|
|
19
|
+
@if "%DEBUG%"=="" @echo off
|
|
20
|
+
@rem ##########################################################################
|
|
21
|
+
@rem
|
|
22
|
+
@rem Gradle startup script for Windows
|
|
23
|
+
@rem
|
|
24
|
+
@rem ##########################################################################
|
|
25
|
+
|
|
26
|
+
@rem Set local scope for the variables with windows NT shell
|
|
27
|
+
if "%OS%"=="Windows_NT" setlocal
|
|
28
|
+
|
|
29
|
+
set DIRNAME=%~dp0
|
|
30
|
+
if "%DIRNAME%"=="" set DIRNAME=.
|
|
31
|
+
@rem This is normally unused
|
|
32
|
+
set APP_BASE_NAME=%~n0
|
|
33
|
+
set APP_HOME=%DIRNAME%
|
|
34
|
+
|
|
35
|
+
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
|
|
36
|
+
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
|
|
37
|
+
|
|
38
|
+
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
|
39
|
+
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
|
40
|
+
|
|
41
|
+
@rem Find java.exe
|
|
42
|
+
if defined JAVA_HOME goto findJavaFromJavaHome
|
|
43
|
+
|
|
44
|
+
set JAVA_EXE=java.exe
|
|
45
|
+
%JAVA_EXE% -version >NUL 2>&1
|
|
46
|
+
if %ERRORLEVEL% equ 0 goto execute
|
|
47
|
+
|
|
48
|
+
echo. 1>&2
|
|
49
|
+
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
|
|
50
|
+
echo. 1>&2
|
|
51
|
+
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
|
52
|
+
echo location of your Java installation. 1>&2
|
|
53
|
+
|
|
54
|
+
goto fail
|
|
55
|
+
|
|
56
|
+
:findJavaFromJavaHome
|
|
57
|
+
set JAVA_HOME=%JAVA_HOME:"=%
|
|
58
|
+
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
|
59
|
+
|
|
60
|
+
if exist "%JAVA_EXE%" goto execute
|
|
61
|
+
|
|
62
|
+
echo. 1>&2
|
|
63
|
+
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
|
|
64
|
+
echo. 1>&2
|
|
65
|
+
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
|
66
|
+
echo location of your Java installation. 1>&2
|
|
67
|
+
|
|
68
|
+
goto fail
|
|
69
|
+
|
|
70
|
+
:execute
|
|
71
|
+
@rem Setup the command line
|
|
72
|
+
|
|
73
|
+
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
@rem Execute Gradle
|
|
77
|
+
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
|
|
78
|
+
|
|
79
|
+
:end
|
|
80
|
+
@rem End local scope for the variables with windows NT shell
|
|
81
|
+
if %ERRORLEVEL% equ 0 goto mainEnd
|
|
82
|
+
|
|
83
|
+
:fail
|
|
84
|
+
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
|
85
|
+
rem the _cmd.exe /c_ return code!
|
|
86
|
+
set EXIT_CODE=%ERRORLEVEL%
|
|
87
|
+
if %EXIT_CODE% equ 0 set EXIT_CODE=1
|
|
88
|
+
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
|
|
89
|
+
exit /b %EXIT_CODE%
|
|
90
|
+
|
|
91
|
+
:mainEnd
|
|
92
|
+
if "%OS%"=="Windows_NT" endlocal
|
|
93
|
+
|
|
94
|
+
:omega
|
package/ios/Input/Input.swift
CHANGED
|
@@ -32,7 +32,6 @@ public struct Input: View {
|
|
|
32
32
|
|
|
33
33
|
@State private var isFocused: Bool = false
|
|
34
34
|
@State private var isPasswordHidden: Bool = true
|
|
35
|
-
@State private var lastTextValue: String = ""
|
|
36
35
|
|
|
37
36
|
public init(
|
|
38
37
|
text: Binding<String>,
|
|
@@ -93,14 +92,6 @@ public struct Input: View {
|
|
|
93
92
|
let textBinding = Binding<String>(
|
|
94
93
|
get: { self.text },
|
|
95
94
|
set: { newValue in
|
|
96
|
-
// For SecureField, infer focus when text changes
|
|
97
|
-
if self.secureTextEntry && !self.isFocused && newValue != self.lastTextValue {
|
|
98
|
-
DispatchQueue.main.async {
|
|
99
|
-
self.isFocused = true
|
|
100
|
-
self.onFocus?()
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
self.lastTextValue = newValue
|
|
104
95
|
self.text = newValue
|
|
105
96
|
self.onChangeText?(newValue)
|
|
106
97
|
}
|
|
@@ -144,17 +135,18 @@ public struct Input: View {
|
|
|
144
135
|
}
|
|
145
136
|
|
|
146
137
|
if secureTextEntry && isPasswordHidden {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
138
|
+
SecureInputField(
|
|
139
|
+
text: $text,
|
|
140
|
+
keyboardType: keyboardType,
|
|
141
|
+
fontSize: scaleSize(14),
|
|
142
|
+
fontWeight: fontWeight == .bold ? .bold : .regular,
|
|
143
|
+
textColor: UIColor(getTextColor()),
|
|
144
|
+
isDisabled: disabled || readOnly,
|
|
145
|
+
onFocusChange: { focused in
|
|
146
|
+
handleFocusChange(focused)
|
|
147
|
+
},
|
|
148
|
+
onChangeText: onChangeText
|
|
149
|
+
)
|
|
158
150
|
} else {
|
|
159
151
|
TextField("", text: textBinding, onEditingChanged: { focused in
|
|
160
152
|
handleFocusChange(focused)
|
|
@@ -223,26 +215,10 @@ public struct Input: View {
|
|
|
223
215
|
hintText: hintText
|
|
224
216
|
)
|
|
225
217
|
}
|
|
226
|
-
.onAppear {
|
|
227
|
-
lastTextValue = text
|
|
228
|
-
}
|
|
229
218
|
.onReceive(NotificationCenter.default.publisher(for: UIResponder.keyboardWillHideNotification)) { _ in
|
|
230
|
-
|
|
231
|
-
if isFocused {
|
|
219
|
+
if isFocused && !secureTextEntry {
|
|
232
220
|
DispatchQueue.main.async {
|
|
233
|
-
|
|
234
|
-
handleSecureFieldBlur()
|
|
235
|
-
} else {
|
|
236
|
-
handleFocusChange(false)
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
.onReceive(NotificationCenter.default.publisher(for: UITextField.textDidEndEditingNotification)) { _ in
|
|
242
|
-
// Reset focus when any text field ends editing
|
|
243
|
-
if isFocused && secureTextEntry {
|
|
244
|
-
DispatchQueue.main.async {
|
|
245
|
-
self.handleSecureFieldBlur()
|
|
221
|
+
handleFocusChange(false)
|
|
246
222
|
}
|
|
247
223
|
}
|
|
248
224
|
}
|
|
@@ -259,18 +235,6 @@ public struct Input: View {
|
|
|
259
235
|
}
|
|
260
236
|
}
|
|
261
237
|
|
|
262
|
-
private func handleSecureFieldFocus() {
|
|
263
|
-
if !isFocused {
|
|
264
|
-
isFocused = true
|
|
265
|
-
onFocus?()
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
private func handleSecureFieldBlur() {
|
|
270
|
-
isFocused = false
|
|
271
|
-
onBlur?()
|
|
272
|
-
}
|
|
273
|
-
|
|
274
238
|
private func togglePasswordVisibility() {
|
|
275
239
|
isPasswordHidden.toggle()
|
|
276
240
|
onRightIconPressed?()
|
|
@@ -307,6 +271,104 @@ public struct Input: View {
|
|
|
307
271
|
}
|
|
308
272
|
|
|
309
273
|
|
|
274
|
+
// MARK: - Secure Input Field (UIViewRepresentable)
|
|
275
|
+
private struct SecureInputField: UIViewRepresentable {
|
|
276
|
+
@Binding var text: String
|
|
277
|
+
var keyboardType: UIKeyboardType
|
|
278
|
+
var fontSize: CGFloat
|
|
279
|
+
var fontWeight: UIFont.Weight
|
|
280
|
+
var textColor: UIColor
|
|
281
|
+
var isDisabled: Bool
|
|
282
|
+
var onFocusChange: (Bool) -> Void
|
|
283
|
+
var onChangeText: ((String) -> Void)?
|
|
284
|
+
|
|
285
|
+
func makeCoordinator() -> Coordinator {
|
|
286
|
+
Coordinator(self)
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
func makeUIView(context: Context) -> UITextField {
|
|
290
|
+
let textField = UITextField()
|
|
291
|
+
textField.isSecureTextEntry = true
|
|
292
|
+
textField.delegate = context.coordinator
|
|
293
|
+
textField.keyboardType = keyboardType
|
|
294
|
+
textField.font = UIFont.systemFont(ofSize: fontSize, weight: fontWeight)
|
|
295
|
+
textField.textColor = textColor
|
|
296
|
+
textField.isEnabled = !isDisabled
|
|
297
|
+
textField.setContentHuggingPriority(.defaultLow, for: .horizontal)
|
|
298
|
+
textField.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
|
|
299
|
+
textField.text = text
|
|
300
|
+
textField.tintColor = UIColor(Colors.primary)
|
|
301
|
+
textField.addTarget(
|
|
302
|
+
context.coordinator,
|
|
303
|
+
action: #selector(Coordinator.textFieldDidChange(_:)),
|
|
304
|
+
for: .editingChanged
|
|
305
|
+
)
|
|
306
|
+
return textField
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
func updateUIView(_ textField: UITextField, context: Context) {
|
|
310
|
+
if textField.text != text {
|
|
311
|
+
textField.text = text
|
|
312
|
+
}
|
|
313
|
+
textField.isEnabled = !isDisabled
|
|
314
|
+
if textField.keyboardType != keyboardType {
|
|
315
|
+
textField.keyboardType = keyboardType
|
|
316
|
+
textField.reloadInputViews()
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
class Coordinator: NSObject, UITextFieldDelegate {
|
|
321
|
+
var parent: SecureInputField
|
|
322
|
+
private var isResettingText = false
|
|
323
|
+
|
|
324
|
+
init(_ parent: SecureInputField) {
|
|
325
|
+
self.parent = parent
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
func textFieldDidBeginEditing(_ textField: UITextField) {
|
|
329
|
+
let existingText = textField.text ?? ""
|
|
330
|
+
if !existingText.isEmpty {
|
|
331
|
+
// When a secure text field regains focus, iOS marks the
|
|
332
|
+
// existing text as "committed". The next keystroke would
|
|
333
|
+
// replace ALL committed text with the new character.
|
|
334
|
+
// Prevent this by clearing and re-inserting via insertText(),
|
|
335
|
+
// which puts the text into an "active editing" state.
|
|
336
|
+
isResettingText = true
|
|
337
|
+
textField.text = ""
|
|
338
|
+
textField.insertText(existingText)
|
|
339
|
+
isResettingText = false
|
|
340
|
+
}
|
|
341
|
+
parent.onFocusChange(true)
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
func textFieldDidEndEditing(_ textField: UITextField) {
|
|
345
|
+
parent.text = textField.text ?? ""
|
|
346
|
+
parent.onFocusChange(false)
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
func textField(
|
|
350
|
+
_ textField: UITextField,
|
|
351
|
+
shouldChangeCharactersIn range: NSRange,
|
|
352
|
+
replacementString string: String
|
|
353
|
+
) -> Bool {
|
|
354
|
+
if isResettingText { return true }
|
|
355
|
+
return true
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
@objc func textFieldDidChange(_ textField: UITextField) {
|
|
359
|
+
if isResettingText { return }
|
|
360
|
+
let newText = textField.text ?? ""
|
|
361
|
+
parent.text = newText
|
|
362
|
+
parent.onChangeText?(newText)
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
|
|
366
|
+
textField.resignFirstResponder()
|
|
367
|
+
return true
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
|
|
310
372
|
// MARK: - Helper Extension
|
|
311
373
|
private extension View {
|
|
312
374
|
func applyPrimaryCursorColor() -> some View {
|
package/package.json
CHANGED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import org.gradle.kotlin.dsl.maven
|
|
2
|
+
|
|
3
|
+
rootProject.name = "momo-native-kits"
|
|
4
|
+
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
|
|
5
|
+
|
|
6
|
+
pluginManagement {
|
|
7
|
+
repositories {
|
|
8
|
+
google {
|
|
9
|
+
mavenContent {
|
|
10
|
+
includeGroupAndSubgroups("androidx")
|
|
11
|
+
includeGroupAndSubgroups("com.android")
|
|
12
|
+
includeGroupAndSubgroups("com.google")
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
mavenCentral()
|
|
16
|
+
gradlePluginPortal()
|
|
17
|
+
maven {
|
|
18
|
+
url = uri("https://gitlab.mservice.com.vn/api/v4/projects/5400/packages/maven")
|
|
19
|
+
credentials {username = "download_packages"; password = "gldt-bjDqLpU_sPcHDuXau2ws" }
|
|
20
|
+
}
|
|
21
|
+
maven {
|
|
22
|
+
url = uri("http://nexus.mservice.com.vn:8081/repository/maven-public/")
|
|
23
|
+
isAllowInsecureProtocol = true
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
dependencyResolutionManagement {
|
|
29
|
+
repositories {
|
|
30
|
+
google {
|
|
31
|
+
mavenContent {
|
|
32
|
+
includeGroupAndSubgroups("androidx")
|
|
33
|
+
includeGroupAndSubgroups("com.android")
|
|
34
|
+
includeGroupAndSubgroups("com.google")
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
mavenCentral()
|
|
38
|
+
maven {
|
|
39
|
+
url = uri("https://gitlab.mservice.com.vn/api/v4/projects/5400/packages/maven")
|
|
40
|
+
credentials {username = "download_packages"; password = "gldt-bjDqLpU_sPcHDuXau2ws" }
|
|
41
|
+
}
|
|
42
|
+
maven {
|
|
43
|
+
url = uri("http://nexus.mservice.com.vn:8081/repository/maven-public/")
|
|
44
|
+
isAllowInsecureProtocol = true
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
include(":compose")
|
|
50
|
+
|
|
51
|
+
include(":sample:androidApp")
|
|
52
|
+
include(":sample:shared")
|