@momo-kits/native-kits 0.300.3 → 0.300.4-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/CLAUDE.md +51 -7
- package/README.md +2 -2
- package/build.gradle.kts +13 -0
- package/compose/build.gradle.kts +197 -0
- package/compose/build.gradle.kts.backup +197 -0
- package/compose/compose.podspec +47 -0
- package/compose/src/androidMain/kotlin/vn/momo/kits/const/HostFont.android.kt +20 -0
- package/compose/src/androidMain/kotlin/vn/momo/kits/navigation/ScrollToTop.android.kt +6 -0
- package/compose/src/androidMain/kotlin/vn/momo/kits/platform/BackGesture.android.kt +12 -0
- package/compose/src/androidMain/kotlin/vn/momo/kits/platform/OsFontScale.android.kt +7 -0
- package/compose/src/androidMain/kotlin/vn/momo/kits/platform/Platform.android.kt +153 -0
- package/compose/src/androidMain/kotlin/vn/momo/kits/platform/ReservedRegions.android.kt +6 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Context.kt +110 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/DesignSystemKits.kt +62 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/LiteScreen.kt +1071 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Localize.kt +269 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/WidgetContainer.kt +65 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Avatar.kt +157 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Badge.kt +81 -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 +338 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/BaselineView.kt +175 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Button.kt +357 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Carousel.kt +115 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/CheckBox.kt +89 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Chip.kt +128 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Collapse.kt +209 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/CupertinoOverscroll.kt +542 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Divider.kt +49 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Icon.kt +86 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/IconButton.kt +125 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Image.kt +231 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Information.kt +189 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Input.kt +478 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputDropDown.kt +114 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputMoney.kt +265 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputOTP.kt +235 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputPhoneNumber.kt +223 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputSearch.kt +265 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputTextArea.kt +185 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/LazyColumnWithBouncing.kt +343 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Loader.kt +108 -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 +84 -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 +361 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupPromotion.kt +108 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/ProgressInfo.kt +308 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Radio.kt +59 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Rating.kt +87 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/ScaleSizeScope.kt +21 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Skeleton.kt +90 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Slider.kt +330 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Stepper.kt +220 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Steps.kt +473 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/SuggestAction.kt +122 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Swipe.kt +207 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Switch.kt +92 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/TabView.kt +560 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tag.kt +86 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Text.kt +125 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Title.kt +207 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tooltip.kt +501 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/TrustBanner.kt +176 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Uploader.kt +182 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePicker.kt +193 -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 +236 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/WheelPicker.kt +180 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Colors.kt +325 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/HostFont.kt +17 -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 +16 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Theme.kt +194 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Typography.kt +287 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Card.kt +54 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Item.kt +50 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/ScreenLayout.kt +306 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Section.kt +41 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/AutomationId.kt +52 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Clickable.kt +66 -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 +104 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Shadow.kt +48 -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 +338 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/HostBackGestureBridge.kt +58 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ModalScreen.kt +137 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigation.kt +116 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/NavigationContainer.kt +215 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigator.kt +404 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ScrollToTop.kt +8 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackScreen.kt +732 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackTransition.kt +148 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/SwipeBackHaptic.kt +40 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTab.kt +233 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTabBar.kt +217 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/CurvedContainer.kt +86 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/DuoBarCompression.kt +97 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/DuoTabBar.kt +377 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/FloatingButton.kt +169 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/Header.kt +455 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderBackground.kt +103 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderJourney.kt +106 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderLocation.kt +74 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderRight.kt +413 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderTitle.kt +39 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderUser.kt +363 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HelpCenterRequest.kt +37 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/SideBar.kt +192 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/SnackBar.kt +133 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/ToolkitRequests.kt +41 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/tracking/ScreenTracker.kt +135 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/platform/BackGesture.kt +12 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/platform/ComposeLottieAnimation.kt +91 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/platform/OsFontScale.kt +9 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/platform/Platform.kt +74 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/platform/ReservedRegions.kt +20 -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 +55 -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 +118 -0
- package/compose/src/commonTest/kotlin/vn/momo/kits/navigation/component/HelpCenterRequestTest.kt +44 -0
- package/compose/src/commonTest/kotlin/vn/momo/kits/navigation/component/ToolkitRequestsTest.kt +62 -0
- package/compose/src/iosMain/kotlin/vn/momo/kits/const/HostFont.ios.kt +42 -0
- package/compose/src/iosMain/kotlin/vn/momo/kits/navigation/HostBackGesture.ios.kt +45 -0
- package/compose/src/iosMain/kotlin/vn/momo/kits/navigation/ScrollToTop.ios.kt +36 -0
- package/compose/src/iosMain/kotlin/vn/momo/kits/platform/BackGesture.ios.kt +38 -0
- package/compose/src/iosMain/kotlin/vn/momo/kits/platform/OsFontScale.ios.kt +66 -0
- package/compose/src/iosMain/kotlin/vn/momo/kits/platform/Platform.ios.kt +217 -0
- package/compose/src/iosMain/kotlin/vn/momo/kits/platform/ReservedRegions.ios.kt +138 -0
- package/gradle/libs.versions.toml +68 -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/Application/ApplicationEnvironment.swift +24 -6
- package/ios/Application/DesignSystemKits.swift +100 -0
- package/ios/Application/DesignSystemKitsPayload.swift +68 -0
- package/ios/Application/MaxApi.swift +30 -3
- package/ios/Avatar/Avatar.swift +4 -3
- package/ios/Badge/Badge.swift +6 -4
- package/ios/Badge/BadgeDot.swift +1 -1
- package/ios/Badge/BadgeRibbon.swift +8 -2
- package/ios/Button/Button.swift +15 -12
- package/ios/CalculatorKeyboard/CalculatorKeyboard.swift +64 -18
- package/ios/Carousel/Carousel.swift +29 -12
- package/ios/Checkbox/Checkbox.swift +7 -3
- package/ios/Chip/Chip.swift +5 -4
- package/ios/Collapse/Collapse.swift +70 -19
- package/ios/Colors+Radius+Spacing/Colors.swift +10 -1
- package/ios/Colors+Radius+Spacing/Radius.swift +6 -0
- package/ios/DateTimePicker/DateTimePicker.swift +54 -20
- package/ios/DateTimePicker/WheelPicker.swift +103 -105
- package/ios/Divider/Divider.swift +37 -4
- package/ios/Extensions/Color++.swift +38 -9
- package/ios/Extensions/OptionalEnvironmentObject.swift +12 -0
- package/ios/Extensions/SkeletonUICompat.swift +11 -0
- package/ios/Icon/Icon.swift +21 -23
- package/ios/Icon/Icons.swift +1329 -0
- package/ios/IconButton/IconButton.swift +15 -7
- package/ios/Image/Image.swift +7 -23
- package/ios/Information/Information.swift +27 -9
- package/ios/Input/ErrorView.swift +2 -2
- package/ios/Input/Input.swift +171 -148
- package/ios/Input/InputPhoneNumber.swift +10 -9
- package/ios/Input/InputSearch.swift +107 -78
- package/ios/Input/InputTextArea.swift +133 -148
- package/ios/InputDropDown/InputDropDown.swift +10 -7
- package/ios/InputMoney/InputMoney.swift +32 -11
- package/ios/InputOTP/InputOTP.swift +22 -12
- package/ios/Layout/Card.swift +50 -0
- package/ios/Layout/GridContext.swift +187 -3
- package/ios/Layout/Item.swift +5 -4
- package/ios/Layout/ScreenLayout.swift +415 -0
- package/ios/Layout/Section.swift +4 -100
- package/ios/Loader/Loader.swift +5 -9
- package/ios/Lottie/LottieView.swift +14 -2
- package/ios/{Application/Navigation/Overplay → Navigation}/BottomSheet.swift +169 -29
- package/ios/Navigation/BottomTab/BottomTab.swift +332 -0
- package/ios/{Application/Navigation → Navigation}/BottomTab/BottomTabBar.swift +18 -7
- package/ios/Navigation/BottomTab/DuoBarCompression.swift +104 -0
- package/ios/Navigation/BottomTab/DuoTabBar.swift +329 -0
- package/ios/{Application → Navigation/Component}/FloatingButton.swift +43 -54
- package/ios/Navigation/Component/Header.swift +545 -0
- package/ios/Navigation/Component/HeaderBackground.swift +154 -0
- package/ios/Navigation/Component/HeaderJourney.swift +73 -0
- package/ios/Navigation/Component/HeaderLocation.swift +48 -0
- package/ios/Navigation/Component/HeaderRight.swift +425 -0
- package/ios/Navigation/Component/HeaderTitle.swift +36 -0
- package/ios/{Application/Navigation → Navigation/Component}/HeaderUser.swift +21 -24
- package/ios/Navigation/Component/SideBar.swift +183 -0
- package/ios/{Application/Navigation/Overplay → Navigation/Component}/SnackBar.swift +8 -8
- package/ios/Navigation/HostBackGestureBridge.swift +78 -0
- package/ios/{Application/Navigation/Overplay → Navigation}/ModalScreen.swift +9 -2
- package/ios/Navigation/Navigation.swift +204 -0
- package/ios/Navigation/NavigationContainer.swift +195 -0
- package/ios/{Application/Navigation → Navigation}/Navigator.swift +207 -107
- package/ios/Navigation/StackScreen.swift +930 -0
- package/ios/Navigation/StackTransition.swift +400 -0
- package/ios/Navigation/SwipeBackHaptic.swift +33 -0
- package/ios/{Application/Navigation → Navigation}/Tracking/ScreenTracker.swift +12 -5
- package/ios/OTPKeyboard/OTPKeyboard.swift +8 -11
- package/ios/Pagination/PaginationScroll.swift +2 -2
- package/ios/Popup/PopupDisplay.swift +72 -135
- package/ios/Popup/PopupInput.swift +10 -13
- package/ios/Popup/PopupLayout.swift +138 -0
- package/ios/Popup/PopupNotify.swift +59 -69
- package/ios/Popup/PopupPromotion.swift +31 -47
- package/ios/PopupView/FullscreenPopup.swift +13 -19
- package/ios/PopupView/PopupView.swift +1 -1
- package/ios/PopupView/Utils++.swift +0 -8
- package/ios/ProgressInfo/ProgressInfo.swift +4 -2
- package/ios/Radio/Radio.swift +2 -1
- package/ios/Rating/Rating.swift +9 -1
- package/ios/Resources/dot_loading.json +558 -0
- package/ios/Resources/lottie_circle_loader.json +1 -0
- package/ios/ScrollIndicator/ScrollIndicator.swift +11 -10
- package/ios/Skeleton/Skeleton.swift +22 -27
- package/ios/Slider/Slider.swift +16 -18
- package/ios/Stepper/Stepper.swift +7 -3
- package/ios/Steps/Steps.swift +8 -6
- package/ios/SuggestAction/SuggestAction.swift +5 -0
- package/ios/Swipeable/SwipeCell.swift +10 -6
- package/ios/Switch/Switch.swift +22 -20
- package/ios/TabView/TabView.swift +102 -21
- package/ios/Tag/Tag.swift +15 -4
- package/ios/Template/Logo/Logo.swift +2 -1
- package/ios/Template/TrustBanner/TrustBanner.swift +109 -55
- package/ios/Title/Title.swift +6 -17
- package/ios/Tooltip/Tooltip.swift +29 -14
- package/ios/Typography/FontScale.swift +17 -14
- package/ios/Typography/Text.swift +156 -20
- package/ios/Typography/Typography.swift +2 -2
- package/ios/Uploader/Uploader.swift +3 -1
- package/ios/native-kits.podspec +2 -3
- package/ios-demo/MoMoUIKitsDemo.podspec +1 -3
- package/ios-demo/README.md +120 -0
- package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/ContentView.swift +1 -1
- package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/DuoTabDemo.swift +80 -0
- package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/Home.swift +2 -0
- package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/IPhoneDuoDemo.swift +173 -0
- package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/NavigationDemo.swift +77 -1
- package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/PopupDisplayDemo.swift +1 -0
- package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/PopupNotifyDemo.swift +2 -2
- package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/PopupPromotionDemo.swift +2 -0
- package/package.json +1 -1
- package/publish.sh +19 -2
- package/scripts/gen-ios-icons.mjs +36 -0
- package/settings.gradle.kts +64 -0
- package/ios/Application/Components.swift +0 -270
- package/ios/Application/ComposeApi.swift +0 -22
- package/ios/Application/HeaderRight.swift +0 -306
- package/ios/Application/Navigation/BottomTab/BottomTab.swift +0 -104
- package/ios/Application/Navigation/HeaderBackProps.swift +0 -66
- package/ios/Application/Navigation/HeaderTitle.swift +0 -57
- package/ios/Application/Navigation/NavigationContainer.swift +0 -213
- package/ios/Application/Navigation/NavigationOptions.swift +0 -109
- package/ios/Application/Navigation/NavigatorManager.swift +0 -22
- package/ios/Application/Navigation/component/Header.swift +0 -178
- package/ios/Application/Navigation/component/HeaderBackground.swift +0 -83
- package/ios/Application/Navigation/component/HeaderColor.swift +0 -65
- package/ios/Application/Navigation/component/HeaderRightWidthKey.swift +0 -11
- package/ios/Application/Navigation/component/NavigationFooter.swift +0 -90
- package/ios/Application/Navigation/component/NavigationHeaderRight.swift +0 -196
- package/ios/Application/Screen.swift +0 -250
- package/ios/Application/StackScreen.swift +0 -492
- package/ios/Typography/FontScaleStore.swift +0 -58
- package/ios/Typography/KitDesignSystem.swift +0 -17
- /package/ios/{Application/Navigation → Navigation}/BottomTab/CurvedContainer.swift +0 -0
|
@@ -1,306 +0,0 @@
|
|
|
1
|
-
import SwiftUI
|
|
2
|
-
import Foundation
|
|
3
|
-
|
|
4
|
-
public struct HeaderRightData {
|
|
5
|
-
var useShortcut: Bool
|
|
6
|
-
var useMore: Bool
|
|
7
|
-
var tools: [ToolGroup]
|
|
8
|
-
var toolCallback: ((String) -> Void)?
|
|
9
|
-
var useSystemTools: Bool
|
|
10
|
-
|
|
11
|
-
public init(
|
|
12
|
-
useShortcut: Bool = false,
|
|
13
|
-
useMore: Bool = false,
|
|
14
|
-
tools: [ToolGroup] = [],
|
|
15
|
-
toolCallback: ((String) -> Void)? = nil,
|
|
16
|
-
useSystemTools: Bool = true
|
|
17
|
-
) {
|
|
18
|
-
self.useShortcut = useShortcut
|
|
19
|
-
self.useMore = useMore
|
|
20
|
-
self.tools = tools
|
|
21
|
-
self.toolCallback = toolCallback
|
|
22
|
-
self.useSystemTools = useSystemTools
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
public struct Tool {
|
|
27
|
-
var key: String
|
|
28
|
-
var icon: String
|
|
29
|
-
var showBadge: Bool
|
|
30
|
-
var name: [String: String]
|
|
31
|
-
var showRightIcon: Bool
|
|
32
|
-
|
|
33
|
-
public init(
|
|
34
|
-
key: String,
|
|
35
|
-
icon: String,
|
|
36
|
-
name: [String: String] = [:],
|
|
37
|
-
showBadge: Bool = false,
|
|
38
|
-
showRightIcon: Bool = true
|
|
39
|
-
) {
|
|
40
|
-
self.key = key
|
|
41
|
-
self.icon = icon
|
|
42
|
-
self.showBadge = showBadge
|
|
43
|
-
self.name = name
|
|
44
|
-
self.showRightIcon = showRightIcon
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
func toMap() -> [String: Any] {
|
|
48
|
-
return [
|
|
49
|
-
"key": key,
|
|
50
|
-
"icon": icon,
|
|
51
|
-
"showBadge": showBadge,
|
|
52
|
-
"name": name,
|
|
53
|
-
"showRightIcon": showRightIcon
|
|
54
|
-
]
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
public struct ToolGroup {
|
|
59
|
-
var title: [String: String]
|
|
60
|
-
var items: [Tool]
|
|
61
|
-
|
|
62
|
-
public init(
|
|
63
|
-
title: [String: String] = [:],
|
|
64
|
-
items: [Tool]
|
|
65
|
-
) {
|
|
66
|
-
self.title = title
|
|
67
|
-
self.items = items
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
func toMap() -> [String: Any] {
|
|
71
|
-
return [
|
|
72
|
-
"title": title,
|
|
73
|
-
"items": items.map { $0.toMap() }
|
|
74
|
-
]
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
struct NavigationButtonConfig {
|
|
79
|
-
let icon: String
|
|
80
|
-
let onPress: () -> Void
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
// MARK: - Components
|
|
84
|
-
public struct HeaderRight: View {
|
|
85
|
-
public init(headerRight: HeaderRightData? = nil, tintColor: Color? = nil) {
|
|
86
|
-
self.headerRight = headerRight
|
|
87
|
-
self.tintColor = tintColor
|
|
88
|
-
}
|
|
89
|
-
var headerRight: HeaderRightData?
|
|
90
|
-
var tintColor: Color? = nil
|
|
91
|
-
|
|
92
|
-
public var body: some View {
|
|
93
|
-
HStack(alignment: .center) {
|
|
94
|
-
ToolkitHeaderRight(headerRight: headerRight, tintColor: tintColor)
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
struct ToolkitHeaderRight: View {
|
|
100
|
-
var headerRight: HeaderRightData?
|
|
101
|
-
var tintColor: Color?
|
|
102
|
-
@State private var isFavorite: Bool = false
|
|
103
|
-
@State private var isLoading: Bool = false
|
|
104
|
-
@EnvironmentObject private var environment: ApplicationEnvironment
|
|
105
|
-
|
|
106
|
-
// MARK: - Actions
|
|
107
|
-
private func onPressShortcut() {
|
|
108
|
-
// onToolAction needs the app context (appId/code) so the host knows which app to (un)favorite;
|
|
109
|
-
// without it the favorite is a no-op. Mirrors onPressMore below and the Compose HeaderRight.
|
|
110
|
-
let context = environment.applicationContext
|
|
111
|
-
environment.composeApi?.request(
|
|
112
|
-
funcName: "onToolAction",
|
|
113
|
-
params: [
|
|
114
|
-
"item": ["key": "onFavorite"],
|
|
115
|
-
"context": [
|
|
116
|
-
"appId": context?.appId,
|
|
117
|
-
"code": context?.appCode,
|
|
118
|
-
"name": context?.appName,
|
|
119
|
-
"icon": context?.appIcon,
|
|
120
|
-
"description": context?.description,
|
|
121
|
-
"support": context?.support,
|
|
122
|
-
"toolkitConfig": context?.toolkitConfig,
|
|
123
|
-
"providerId": context?.providerId,
|
|
124
|
-
"permissions": context?.permissions
|
|
125
|
-
]
|
|
126
|
-
]
|
|
127
|
-
) { _ in
|
|
128
|
-
isFavorite.toggle()
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
private func onPressHelpCenter() {
|
|
133
|
-
let context = environment.applicationContext
|
|
134
|
-
let paramMap: [String: Any] = [
|
|
135
|
-
"appId": context?.appId,
|
|
136
|
-
"code": context?.appCode,
|
|
137
|
-
"name": context?.appName,
|
|
138
|
-
"icon": context?.appIcon,
|
|
139
|
-
"description": context?.description
|
|
140
|
-
]
|
|
141
|
-
environment.composeApi?.request(
|
|
142
|
-
funcName: "showHelpCenter",
|
|
143
|
-
params: paramMap
|
|
144
|
-
) { _ in }
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
private func onPressClose() {
|
|
148
|
-
environment.composeApi?.request(
|
|
149
|
-
funcName: "dismissAll",
|
|
150
|
-
params: ""
|
|
151
|
-
) { _ in }
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
private func onPressMore() {
|
|
155
|
-
let context = environment.applicationContext
|
|
156
|
-
let params: [String: Any] = [
|
|
157
|
-
"useSystemTools": headerRight?.useSystemTools,
|
|
158
|
-
"tools": headerRight?.tools.map { $0.toMap() } ?? [],
|
|
159
|
-
"context": [
|
|
160
|
-
"appId": context?.appId,
|
|
161
|
-
"code": context?.appCode,
|
|
162
|
-
"name": context?.appName,
|
|
163
|
-
"icon": context?.appIcon,
|
|
164
|
-
"description": context?.description,
|
|
165
|
-
"support": context?.support,
|
|
166
|
-
"toolkitConfig": context?.toolkitConfig,
|
|
167
|
-
"providerId": context?.providerId,
|
|
168
|
-
"permissions": context?.permissions
|
|
169
|
-
]
|
|
170
|
-
]
|
|
171
|
-
environment.composeApi?.request(
|
|
172
|
-
funcName: "showTools",
|
|
173
|
-
params: params
|
|
174
|
-
) { response in
|
|
175
|
-
do {
|
|
176
|
-
if let jsonData = response.data(using: .utf8),
|
|
177
|
-
let json = try JSONSerialization.jsonObject(with: jsonData) as? [String: Any],
|
|
178
|
-
let toolResponse = json["response"] as? String {
|
|
179
|
-
headerRight?.toolCallback?(toolResponse)
|
|
180
|
-
}
|
|
181
|
-
} catch {
|
|
182
|
-
print("Error parsing response:", error)
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
// Load the current favorite state on appear so the star reflects reality; without this the button
|
|
188
|
-
// always renders "not favorited" until the user taps it. Mirrors the Compose LaunchedEffect.
|
|
189
|
-
private func loadFavoriteState() {
|
|
190
|
-
let context = environment.applicationContext
|
|
191
|
-
environment.composeApi?.request(
|
|
192
|
-
funcName: "isFavoriteApp",
|
|
193
|
-
params: ["code": context?.appCode]
|
|
194
|
-
) { response in
|
|
195
|
-
guard let data = response.data(using: .utf8),
|
|
196
|
-
let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any] else {
|
|
197
|
-
return
|
|
198
|
-
}
|
|
199
|
-
isFavorite = (json["response"] as? Bool) ?? false
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
private func getNavigationButtonConfig() -> NavigationButtonConfig {
|
|
204
|
-
let totalTools = headerRight?.tools.reduce(0) { $0 + $1.items.count } ?? 0
|
|
205
|
-
var icon = isFavorite ? "pin_star_checked" : "pin_star"
|
|
206
|
-
var onClickHandler: () -> Void = onPressShortcut
|
|
207
|
-
|
|
208
|
-
if totalTools > 1 || headerRight?.useMore == true {
|
|
209
|
-
icon = "navigation_more_icon"
|
|
210
|
-
onClickHandler = onPressMore
|
|
211
|
-
} else if totalTools == 1, let singleTool = headerRight?.tools.first?.items.first {
|
|
212
|
-
icon = singleTool.icon
|
|
213
|
-
onClickHandler = {
|
|
214
|
-
headerRight?.toolCallback?(singleTool.key)
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
return NavigationButtonConfig(icon: icon, onPress: onClickHandler)
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
var body: some View {
|
|
222
|
-
let backgroundButtonColor: Color = tintColor == Colors.black01 ? Colors.black20.opacity(0.6) : Colors.black01.opacity(0.6)
|
|
223
|
-
let borderColor: Color = tintColor == Colors.black01 ? Colors.black01.opacity(0.2) : Colors.black20.opacity(0.2)
|
|
224
|
-
let navButtonConfig = getNavigationButtonConfig()
|
|
225
|
-
let showBadge = headerRight?.tools.contains { group in
|
|
226
|
-
group.items.contains { $0.showBadge }
|
|
227
|
-
} ?? false
|
|
228
|
-
|
|
229
|
-
HStack(alignment: .center, spacing: 0) {
|
|
230
|
-
if headerRight?.useShortcut == true {
|
|
231
|
-
NavigationButton(
|
|
232
|
-
disabled: isLoading,
|
|
233
|
-
icon: navButtonConfig.icon,
|
|
234
|
-
showBadge: showBadge,
|
|
235
|
-
onClick: navButtonConfig.onPress,
|
|
236
|
-
tintColor: tintColor
|
|
237
|
-
)
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
HStack(alignment: .center, spacing: 0) {
|
|
241
|
-
Icon(source: "help_center", size: 20, color: tintColor ?? Colors.black17)
|
|
242
|
-
.padding(4)
|
|
243
|
-
.onTapGesture {
|
|
244
|
-
onPressHelpCenter()
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
Rectangle()
|
|
248
|
-
.fill(tintColor ?? Colors.black20)
|
|
249
|
-
.frame(width: 0.5, height: 12)
|
|
250
|
-
|
|
251
|
-
Icon(source: "16_basic_home", size: 20, color: tintColor ?? Colors.black17)
|
|
252
|
-
.padding(4)
|
|
253
|
-
.onTapGesture {
|
|
254
|
-
onPressClose()
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
.frame(width: 65, height: 28)
|
|
258
|
-
.background(backgroundButtonColor)
|
|
259
|
-
.cornerRadius(14)
|
|
260
|
-
.overlay(
|
|
261
|
-
RoundedRectangle(cornerRadius: 14)
|
|
262
|
-
.stroke(borderColor, lineWidth: 0.2)
|
|
263
|
-
)
|
|
264
|
-
.padding(.leading, Spacing.S)
|
|
265
|
-
}
|
|
266
|
-
.onAppear {
|
|
267
|
-
loadFavoriteState()
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
struct NavigationButton: View {
|
|
273
|
-
var disabled: Bool
|
|
274
|
-
var icon: String
|
|
275
|
-
var showBadge: Bool
|
|
276
|
-
var onClick: () -> Void
|
|
277
|
-
var tintColor: Color?
|
|
278
|
-
|
|
279
|
-
var body: some View {
|
|
280
|
-
let backgroundButtonColor: Color = tintColor == Colors.black01 ? Colors.black20.opacity(0.6) : Colors.black01.opacity(0.6)
|
|
281
|
-
let borderColor: Color = tintColor == Colors.black01 ? Colors.black01.opacity(0.2) : Colors.black20.opacity(0.2)
|
|
282
|
-
|
|
283
|
-
ZStack {
|
|
284
|
-
Circle()
|
|
285
|
-
.fill(backgroundButtonColor)
|
|
286
|
-
.overlay(
|
|
287
|
-
Circle()
|
|
288
|
-
.stroke(borderColor, lineWidth: 0.2)
|
|
289
|
-
)
|
|
290
|
-
|
|
291
|
-
Icon(source: icon, size: 16, color: tintColor)
|
|
292
|
-
|
|
293
|
-
if showBadge {
|
|
294
|
-
BadgeDot(size: .small)
|
|
295
|
-
.offset(x: -2, y: -2)
|
|
296
|
-
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topTrailing)
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
.frame(width: 28, height: 28)
|
|
300
|
-
.onTapGesture {
|
|
301
|
-
if !disabled {
|
|
302
|
-
onClick()
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// BottomTab.swift
|
|
3
|
-
// MoMoUIKits
|
|
4
|
-
//
|
|
5
|
-
// SwiftUI mirror of Compose's `BottomTab` (navigation/bottomtab/BottomTab.kt).
|
|
6
|
-
// Hosts a set of tabbed screens, each wrapped in `StackScreen` chrome built
|
|
7
|
-
// from that tab's `NavigationOptions`, with a `BottomTabBar` pinned to the
|
|
8
|
-
// bottom. Switching tabs cross-fades + scales the content (parity with Compose).
|
|
9
|
-
//
|
|
10
|
-
|
|
11
|
-
import SwiftUI
|
|
12
|
-
|
|
13
|
-
@available(iOS 16.0, *)
|
|
14
|
-
public struct BottomTab: View {
|
|
15
|
-
private let items: [BottomTabItem]
|
|
16
|
-
private let floatingButton: BottomTabFloatingButton?
|
|
17
|
-
|
|
18
|
-
@EnvironmentObject private var navigator: Navigator
|
|
19
|
-
@State private var selectedIndex: Int = 0
|
|
20
|
-
|
|
21
|
-
public init(items: [BottomTabItem], floatingButton: BottomTabFloatingButton? = nil) {
|
|
22
|
-
self.items = items
|
|
23
|
-
self.floatingButton = floatingButton
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
private var bottomInset: CGFloat { safeAreaBottomInset() }
|
|
27
|
-
private var reservedBottom: CGFloat { BOTTOM_TAB_BAR_HEIGHT + bottomInset + Spacing.S }
|
|
28
|
-
|
|
29
|
-
public var body: some View {
|
|
30
|
-
ZStack(alignment: .bottom) {
|
|
31
|
-
// Tab content area, inset above the bar.
|
|
32
|
-
ZStack {
|
|
33
|
-
ForEach(items.indices, id: \.self) { index in
|
|
34
|
-
if index == selectedIndex {
|
|
35
|
-
tabScreen(for: index)
|
|
36
|
-
.transition(.scale(scale: 0.97).combined(with: .opacity))
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
.padding(.bottom, reservedBottom)
|
|
41
|
-
.animation(.easeInOut(duration: 0.2), value: selectedIndex)
|
|
42
|
-
|
|
43
|
-
// Tab bar + home-indicator filler.
|
|
44
|
-
VStack(spacing: 0) {
|
|
45
|
-
BottomTabBar(
|
|
46
|
-
items: items,
|
|
47
|
-
floatingButton: floatingButton,
|
|
48
|
-
selectedIndex: selectedIndex,
|
|
49
|
-
onTabSelected: { index in
|
|
50
|
-
if index != selectedIndex { selectedIndex = index }
|
|
51
|
-
}
|
|
52
|
-
)
|
|
53
|
-
Colors.black01
|
|
54
|
-
.frame(height: bottomInset + Spacing.S)
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
|
58
|
-
.ignoresSafeArea(edges: .bottom)
|
|
59
|
-
.preference(key: IsBottomTabRootKey.self, value: true)
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
@ViewBuilder
|
|
63
|
-
private func tabScreen(for index: Int) -> some View {
|
|
64
|
-
let item = items[index]
|
|
65
|
-
let options = item.options ?? NavigationOptions()
|
|
66
|
-
StackScreen(
|
|
67
|
-
backgroundColor: options.backgroundColor,
|
|
68
|
-
headerTransparent: options.headerTransparent,
|
|
69
|
-
fullScreenContent: options.fullScreenContent,
|
|
70
|
-
tintColor: options.tintColor ?? Colors.black17,
|
|
71
|
-
isBack: !options.hiddenBack,
|
|
72
|
-
headerType: options.headerType,
|
|
73
|
-
useAnimated: options.useAnimated,
|
|
74
|
-
title: options.title,
|
|
75
|
-
headerTitle: options.headerTitle,
|
|
76
|
-
titlePosition: options.titlePosition,
|
|
77
|
-
// Tab back: non-first tab returns to the first tab, first tab
|
|
78
|
-
// delegates to the navigator (mirrors Compose's onBackHandler).
|
|
79
|
-
goBack: options.hiddenBack ? nil : {
|
|
80
|
-
if index != 0 { selectedIndex = 0 } else { navigator.onBackSafe() }
|
|
81
|
-
},
|
|
82
|
-
scrollable: options.scrollable,
|
|
83
|
-
scrollToTopCallback: options.scrollToTopCallback,
|
|
84
|
-
useAvoidKeyboard: options.useAvoidKeyboard,
|
|
85
|
-
keyboardShouldPersistTaps: options.keyboardShouldPersistTaps,
|
|
86
|
-
footer: options.footer,
|
|
87
|
-
headerRight: options.resolvedHeaderRight,
|
|
88
|
-
animatedHeader: options.animatedHeader,
|
|
89
|
-
layoutOffset: options.layoutOffset,
|
|
90
|
-
inputSearchProps: options.inputSearchProps,
|
|
91
|
-
fabProps: options.fabProps,
|
|
92
|
-
content: { item.screen() }
|
|
93
|
-
)
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/// Bottom safe-area inset (home indicator).
|
|
98
|
-
@available(iOS 16.0, *)
|
|
99
|
-
private func safeAreaBottomInset() -> CGFloat {
|
|
100
|
-
let bottomInset = UIApplication.shared.connectedScenes
|
|
101
|
-
.compactMap { ($0 as? UIWindowScene)?.keyWindow?.safeAreaInsets.bottom }
|
|
102
|
-
.first ?? 0
|
|
103
|
-
return min(bottomInset, 21)
|
|
104
|
-
}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// HeaderBackProps.swift
|
|
3
|
-
// MoMoUIKits
|
|
4
|
-
//
|
|
5
|
-
// SwiftUI mirror of Compose's `HeaderBackProps` + `PopupNotifyProps`/`PopupAction`.
|
|
6
|
-
// When `preventBack` is set, `Navigator.onBackSafe` shows a confirm popup
|
|
7
|
-
// before actually leaving the screen — same behavior as Compose.
|
|
8
|
-
//
|
|
9
|
-
|
|
10
|
-
import SwiftUI
|
|
11
|
-
|
|
12
|
-
/// Mirrors Compose's `PopupAction` (a titled button with an optional handler).
|
|
13
|
-
public struct PopupAction {
|
|
14
|
-
public let title: String
|
|
15
|
-
public let onPress: (() -> Void)?
|
|
16
|
-
|
|
17
|
-
public init(title: String, onPress: (() -> Void)? = nil) {
|
|
18
|
-
self.title = title
|
|
19
|
-
self.onPress = onPress
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/// Mirrors Compose's `PopupNotifyProps` as consumed by `headerBackProps.preventBack`.
|
|
24
|
-
public struct PreventBackProps {
|
|
25
|
-
public var image: String
|
|
26
|
-
public var title: String
|
|
27
|
-
public var description: String
|
|
28
|
-
public var error: String
|
|
29
|
-
public var primary: PopupAction?
|
|
30
|
-
public var secondary: PopupAction?
|
|
31
|
-
public var buttonDirection: PopupButtonDirection
|
|
32
|
-
public var isShowCloseIcon: Bool
|
|
33
|
-
public var onIconClose: (() -> Void)?
|
|
34
|
-
|
|
35
|
-
public init(
|
|
36
|
-
image: String = "",
|
|
37
|
-
title: String = "",
|
|
38
|
-
description: String = "",
|
|
39
|
-
error: String = "",
|
|
40
|
-
primary: PopupAction? = nil,
|
|
41
|
-
secondary: PopupAction? = nil,
|
|
42
|
-
buttonDirection: PopupButtonDirection = .row,
|
|
43
|
-
isShowCloseIcon: Bool = true,
|
|
44
|
-
onIconClose: (() -> Void)? = nil
|
|
45
|
-
) {
|
|
46
|
-
self.image = image
|
|
47
|
-
self.title = title
|
|
48
|
-
self.description = description
|
|
49
|
-
self.error = error
|
|
50
|
-
self.primary = primary
|
|
51
|
-
self.secondary = secondary
|
|
52
|
-
self.buttonDirection = buttonDirection
|
|
53
|
-
self.isShowCloseIcon = isShowCloseIcon
|
|
54
|
-
self.onIconClose = onIconClose
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/// Mirrors Compose's `HeaderBackProps`.
|
|
59
|
-
public struct HeaderBackProps {
|
|
60
|
-
/// When non-nil, a confirm popup is shown before the back navigation runs.
|
|
61
|
-
public var preventBack: PreventBackProps?
|
|
62
|
-
|
|
63
|
-
public init(preventBack: PreventBackProps? = nil) {
|
|
64
|
-
self.preventBack = preventBack
|
|
65
|
-
}
|
|
66
|
-
}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// HeaderTitle.swift
|
|
3
|
-
// MoMoUIKits
|
|
4
|
-
//
|
|
5
|
-
// SwiftUI mirror of Compose's `sealed class HeaderTitle` (navigation/component/Header.kt).
|
|
6
|
-
// The header can show either a plain title (`.default`) or a rich "user" title
|
|
7
|
-
// with an avatar group, subtitle, inline icons and a status dot (`.user`).
|
|
8
|
-
// (Compose's `Location`/`Journey` variants are not rendered yet, so they are
|
|
9
|
-
// omitted here for parity with the implemented `HeaderUser`.)
|
|
10
|
-
//
|
|
11
|
-
|
|
12
|
-
import SwiftUI
|
|
13
|
-
|
|
14
|
-
/// Data backing a `.user` header title (mirrors `HeaderTitle.User`).
|
|
15
|
-
public struct HeaderUserData {
|
|
16
|
-
public var title: String
|
|
17
|
-
public var subTitle: String?
|
|
18
|
-
public var image: [String]?
|
|
19
|
-
public var dotColor: Color?
|
|
20
|
-
public var tintColor: Color?
|
|
21
|
-
public var onPress: (() -> Void)?
|
|
22
|
-
public var icons: [String]
|
|
23
|
-
public var isLoading: Bool
|
|
24
|
-
|
|
25
|
-
public init(
|
|
26
|
-
title: String,
|
|
27
|
-
subTitle: String? = nil,
|
|
28
|
-
image: [String]? = nil,
|
|
29
|
-
dotColor: Color? = nil,
|
|
30
|
-
tintColor: Color? = nil,
|
|
31
|
-
onPress: (() -> Void)? = nil,
|
|
32
|
-
icons: [String] = [],
|
|
33
|
-
isLoading: Bool = false
|
|
34
|
-
) {
|
|
35
|
-
self.title = title
|
|
36
|
-
self.subTitle = subTitle
|
|
37
|
-
self.image = image
|
|
38
|
-
self.dotColor = dotColor
|
|
39
|
-
self.tintColor = tintColor
|
|
40
|
-
self.onPress = onPress
|
|
41
|
-
self.icons = icons
|
|
42
|
-
self.isLoading = isLoading
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/// Mirrors Compose's `HeaderTitle` sealed class.
|
|
47
|
-
public enum HeaderTitle {
|
|
48
|
-
case `default`(String)
|
|
49
|
-
case user(HeaderUserData)
|
|
50
|
-
|
|
51
|
-
/// Plain title text, when this is a `.default` title (used by the legacy
|
|
52
|
-
/// string-based `Header`/`NavigationOptions` paths).
|
|
53
|
-
public var defaultTitle: String? {
|
|
54
|
-
if case let .default(text) = self { return text }
|
|
55
|
-
return nil
|
|
56
|
-
}
|
|
57
|
-
}
|