@onekeyfe/react-native-native-list 6.7.0-alpha.375 → 6.7.0-alpha.382
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/android/src/main/java/com/onekey/nativelist/HybridNativeList.kt +14 -1
- package/android/src/main/java/com/onekey/nativelist/NativeListAccessoryStack.kt +240 -11
- package/android/src/main/java/com/onekey/nativelist/NativeListActivityDetailsView.kt +7 -4
- package/android/src/main/java/com/onekey/nativelist/NativeListActivityRenderer.kt +6 -3
- package/android/src/main/java/com/onekey/nativelist/NativeListButtonGroupRenderer.kt +102 -0
- package/android/src/main/java/com/onekey/nativelist/NativeListContainerSlotAdapter.kt +12 -0
- package/android/src/main/java/com/onekey/nativelist/NativeListDataRowRenderer.kt +87 -7
- package/android/src/main/java/com/onekey/nativelist/NativeListIdentityRenderer.kt +177 -1
- package/android/src/main/java/com/onekey/nativelist/NativeListLeadingVisual.kt +43 -14
- package/android/src/main/java/com/onekey/nativelist/NativeListMessageRenderer.kt +25 -0
- package/android/src/main/java/com/onekey/nativelist/NativeListModels.kt +33 -2
- package/android/src/main/java/com/onekey/nativelist/NativeListPrimitives.kt +22 -0
- package/android/src/main/java/com/onekey/nativelist/NativeListRendererRegistry.kt +2 -0
- package/android/src/main/java/com/onekey/nativelist/NativeListRendererRowView.kt +2 -0
- package/android/src/main/java/com/onekey/nativelist/NativeListResolvedText.kt +3 -2
- package/android/src/main/java/com/onekey/nativelist/NativeListSectionHeaderRenderer.kt +69 -0
- package/android/src/main/java/com/onekey/nativelist/NativeListTextView.kt +55 -1
- package/android/src/main/java/com/onekey/nativelist/NativeListView.kt +1912 -107
- package/android/src/test/java/com/margelo/nitro/nativelist/NativeListPressPolicyTest.kt +1 -0
- package/docs/ROW_TEMPLATES.md +60 -9
- package/docs/SPEC.md +450 -5
- package/docs/STYLE_SPEC.md +6 -0
- package/ios/HybridNativeList.swift +21 -2
- package/ios/NativeListAccessoryStack.swift +227 -39
- package/ios/NativeListActivityDetailsView.swift +18 -8
- package/ios/NativeListActivityRenderer.swift +8 -2
- package/ios/NativeListButtonGroupRenderer.swift +89 -0
- package/ios/NativeListDataRowRenderer.swift +155 -27
- package/ios/NativeListDesignAssets.swift +3 -0
- package/ios/NativeListIdentityRenderer.swift +166 -30
- package/ios/NativeListLeadingVisual.swift +49 -14
- package/ios/NativeListMessageRenderer.swift +34 -1
- package/ios/NativeListModels.swift +42 -2
- package/ios/NativeListRendererRegistry.swift +1 -0
- package/ios/NativeListResolvedText.swift +2 -1
- package/ios/NativeListRowHost.swift +14 -0
- package/ios/NativeListSectionHeaderRenderer.swift +88 -0
- package/ios/RNCNativeListView.swift +1013 -55
- package/ios/Resources/NativeListIcons.xcassets/onekey_crypto_coin_outline.imageset/Contents.json +15 -0
- package/ios/Resources/NativeListIcons.xcassets/onekey_crypto_coin_outline.imageset/icon.svg +4 -0
- package/ios/Resources/NativeListIcons.xcassets/onekey_gas_solid.imageset/Contents.json +15 -0
- package/ios/Resources/NativeListIcons.xcassets/onekey_gas_solid.imageset/icon.svg +3 -0
- package/ios/Resources/NativeListIcons.xcassets/onekey_refresh_ccw_outline.imageset/Contents.json +15 -0
- package/ios/Resources/NativeListIcons.xcassets/onekey_refresh_ccw_outline.imageset/icon.svg +3 -0
- package/ios/tests/NativeListActivityPresentationTests.swift +56 -0
- package/ios/tests/NativeListLifecycleTests.swift +2720 -3
- package/lib/module/NativeList.js +175 -28
- package/lib/module/NativeList.web.js +129 -30
- package/lib/module/index.js +1 -1
- package/lib/module/models.js +1 -0
- package/lib/module/selection.js +1 -1
- package/lib/module/validation.js +421 -8
- package/lib/module/web/NativeListWebEngine.js +507 -19
- package/lib/module/web/templates/ActivityRowRenderer.js +8 -7
- package/lib/module/web/templates/ButtonGroupRowRenderer.js +47 -0
- package/lib/module/web/templates/DataRowRenderer.js +40 -5
- package/lib/module/web/templates/IdentityRowRenderer.js +90 -4
- package/lib/module/web/templates/MessageRowRenderer.js +18 -2
- package/lib/module/web/templates/RowContainerStyle.js +1 -0
- package/lib/module/web/templates/RowRendererRegistry.js +3 -0
- package/lib/module/web/templates/SectionHeaderRowRenderer.js +36 -2
- package/lib/nitrogen/generated/android/c++/JHybridNativeListSpec.cpp +26 -0
- package/lib/nitrogen/generated/android/c++/JHybridNativeListSpec.hpp +4 -0
- package/lib/nitrogen/generated/android/c++/views/JHybridNativeListStateUpdater.cpp +10 -0
- package/lib/nitrogen/generated/android/kotlin/com/margelo/nitro/nativelist/HybridNativeListSpec.kt +20 -0
- package/lib/nitrogen/generated/ios/c++/HybridNativeListSpecSwift.hpp +14 -0
- package/lib/nitrogen/generated/ios/c++/views/HybridNativeListComponent.mm +12 -0
- package/lib/nitrogen/generated/ios/swift/HybridNativeListSpec.swift +2 -0
- package/lib/nitrogen/generated/ios/swift/HybridNativeListSpec_cxx.swift +43 -0
- package/lib/nitrogen/generated/shared/c++/HybridNativeListSpec.cpp +4 -0
- package/lib/nitrogen/generated/shared/c++/HybridNativeListSpec.hpp +4 -0
- package/lib/nitrogen/generated/shared/c++/views/HybridNativeListComponent.cpp +4 -0
- package/lib/nitrogen/generated/shared/c++/views/HybridNativeListComponent.hpp +6 -0
- package/lib/nitrogen/generated/shared/json/NativeListConfig.json +2 -0
- package/lib/typescript/src/NativeList.d.ts +1 -1
- package/lib/typescript/src/NativeList.nitro.d.ts +2 -0
- package/lib/typescript/src/NativeList.types.d.ts +18 -0
- package/lib/typescript/src/index.d.ts +2 -2
- package/lib/typescript/src/models.d.ts +105 -9
- package/lib/typescript/src/validation.d.ts +12 -0
- package/lib/typescript/src/web/NativeListWebEngine.d.ts +32 -0
- package/lib/typescript/src/web/templates/ButtonGroupRowRenderer.d.ts +14 -0
- package/lib/typescript/src/web/templates/IdentityRowRenderer.d.ts +1 -1
- package/lib/typescript/src/web/templates/MessageRowRenderer.d.ts +9 -3
- package/nitrogen/generated/android/c++/JHybridNativeListSpec.cpp +26 -0
- package/nitrogen/generated/android/c++/JHybridNativeListSpec.hpp +4 -0
- package/nitrogen/generated/android/c++/views/JHybridNativeListStateUpdater.cpp +10 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nativelist/HybridNativeListSpec.kt +20 -0
- package/nitrogen/generated/ios/c++/HybridNativeListSpecSwift.hpp +14 -0
- package/nitrogen/generated/ios/c++/views/HybridNativeListComponent.mm +12 -0
- package/nitrogen/generated/ios/swift/HybridNativeListSpec.swift +2 -0
- package/nitrogen/generated/ios/swift/HybridNativeListSpec_cxx.swift +43 -0
- package/nitrogen/generated/shared/c++/HybridNativeListSpec.cpp +4 -0
- package/nitrogen/generated/shared/c++/HybridNativeListSpec.hpp +4 -0
- package/nitrogen/generated/shared/c++/views/HybridNativeListComponent.cpp +4 -0
- package/nitrogen/generated/shared/c++/views/HybridNativeListComponent.hpp +6 -0
- package/nitrogen/generated/shared/json/NativeListConfig.json +2 -0
- package/package.json +3 -3
- package/react-native-native-list.podspec +1 -0
- package/src/NativeList.nitro.ts +2 -0
- package/src/NativeList.tsx +313 -44
- package/src/NativeList.types.ts +22 -0
- package/src/NativeList.web.tsx +204 -48
- package/src/index.ts +2 -0
- package/src/models.ts +117 -3
- package/src/selection.ts +1 -0
- package/src/validation.ts +852 -6
- package/src/web/NativeListWebEngine.ts +803 -20
- package/src/web/templates/ActivityRowRenderer.ts +14 -6
- package/src/web/templates/ButtonGroupRowRenderer.ts +58 -0
- package/src/web/templates/DataRowRenderer.ts +93 -20
- package/src/web/templates/IdentityRowRenderer.ts +150 -5
- package/src/web/templates/MessageRowRenderer.ts +23 -7
- package/src/web/templates/RowContainerStyle.ts +2 -0
- package/src/web/templates/RowRendererRegistry.ts +11 -1
- package/src/web/templates/SectionHeaderRowRenderer.ts +47 -4
|
@@ -96,6 +96,13 @@ namespace margelo::nitro::nativelist {
|
|
|
96
96
|
inline void setContainerSlotHeightsJson(const std::string& containerSlotHeightsJson) noexcept override {
|
|
97
97
|
_swiftPart.setContainerSlotHeightsJson(containerSlotHeightsJson);
|
|
98
98
|
}
|
|
99
|
+
inline std::string getSidecarLayoutJson() noexcept override {
|
|
100
|
+
auto __result = _swiftPart.getSidecarLayoutJson();
|
|
101
|
+
return __result;
|
|
102
|
+
}
|
|
103
|
+
inline void setSidecarLayoutJson(const std::string& sidecarLayoutJson) noexcept override {
|
|
104
|
+
_swiftPart.setSidecarLayoutJson(sidecarLayoutJson);
|
|
105
|
+
}
|
|
99
106
|
inline NativeListScrollEdgeEffect getTopScrollEdgeEffect() noexcept override {
|
|
100
107
|
auto __result = _swiftPart.getTopScrollEdgeEffect();
|
|
101
108
|
return static_cast<NativeListScrollEdgeEffect>(__result);
|
|
@@ -179,6 +186,13 @@ namespace margelo::nitro::nativelist {
|
|
|
179
186
|
inline void setOnVisibleRangeChanged(const std::optional<std::function<void(const std::string& /* payloadJson */)>>& onVisibleRangeChanged) noexcept override {
|
|
180
187
|
_swiftPart.setOnVisibleRangeChanged(onVisibleRangeChanged);
|
|
181
188
|
}
|
|
189
|
+
inline std::optional<std::function<void(const std::string& /* payloadJson */)>> getOnStructuralTransitionSettled() noexcept override {
|
|
190
|
+
auto __result = _swiftPart.getOnStructuralTransitionSettled();
|
|
191
|
+
return __result;
|
|
192
|
+
}
|
|
193
|
+
inline void setOnStructuralTransitionSettled(const std::optional<std::function<void(const std::string& /* payloadJson */)>>& onStructuralTransitionSettled) noexcept override {
|
|
194
|
+
_swiftPart.setOnStructuralTransitionSettled(onStructuralTransitionSettled);
|
|
195
|
+
}
|
|
182
196
|
|
|
183
197
|
public:
|
|
184
198
|
// Methods
|
|
@@ -130,6 +130,12 @@ using namespace margelo::nitro::nativelist::views;
|
|
|
130
130
|
: !newViewProps.containerSlotHeightsJson.hasSameValue(oldViewProps->containerSlotHeightsJson)) {
|
|
131
131
|
swiftPart.setContainerSlotHeightsJson(newViewProps.containerSlotHeightsJson.get());
|
|
132
132
|
}
|
|
133
|
+
// sidecarLayoutJson: string
|
|
134
|
+
if (oldViewProps == nullptr
|
|
135
|
+
? newViewProps.sidecarLayoutJson.isProvided()
|
|
136
|
+
: !newViewProps.sidecarLayoutJson.hasSameValue(oldViewProps->sidecarLayoutJson)) {
|
|
137
|
+
swiftPart.setSidecarLayoutJson(newViewProps.sidecarLayoutJson.get());
|
|
138
|
+
}
|
|
133
139
|
// topScrollEdgeEffect: enum
|
|
134
140
|
if (oldViewProps == nullptr
|
|
135
141
|
? newViewProps.topScrollEdgeEffect.isProvided()
|
|
@@ -202,6 +208,12 @@ using namespace margelo::nitro::nativelist::views;
|
|
|
202
208
|
: !newViewProps.onVisibleRangeChanged.hasSameValue(oldViewProps->onVisibleRangeChanged)) {
|
|
203
209
|
swiftPart.setOnVisibleRangeChanged(newViewProps.onVisibleRangeChanged.get());
|
|
204
210
|
}
|
|
211
|
+
// onStructuralTransitionSettled: optional
|
|
212
|
+
if (oldViewProps == nullptr
|
|
213
|
+
? newViewProps.onStructuralTransitionSettled.isProvided()
|
|
214
|
+
: !newViewProps.onStructuralTransitionSettled.hasSameValue(oldViewProps->onStructuralTransitionSettled)) {
|
|
215
|
+
swiftPart.setOnStructuralTransitionSettled(newViewProps.onStructuralTransitionSettled.get());
|
|
216
|
+
}
|
|
205
217
|
|
|
206
218
|
// Update hybridRef if it changed
|
|
207
219
|
if (oldViewProps == nullptr
|
|
@@ -13,6 +13,7 @@ public protocol HybridNativeListSpec_protocol: HybridObject, HybridView {
|
|
|
13
13
|
var snapshotJson: String { get set }
|
|
14
14
|
var fontFamiliesJson: String { get set }
|
|
15
15
|
var containerSlotHeightsJson: String { get set }
|
|
16
|
+
var sidecarLayoutJson: String { get set }
|
|
16
17
|
var topScrollEdgeEffect: NativeListScrollEdgeEffect { get set }
|
|
17
18
|
var topOverlayHeight: Double { get set }
|
|
18
19
|
var scrollPositionThresholdsJson: String { get set }
|
|
@@ -25,6 +26,7 @@ public protocol HybridNativeListSpec_protocol: HybridObject, HybridView {
|
|
|
25
26
|
var onReorder: ((_ payloadJson: String) -> Void)? { get set }
|
|
26
27
|
var onEndReached: ((_ payloadJson: String) -> Void)? { get set }
|
|
27
28
|
var onVisibleRangeChanged: ((_ payloadJson: String) -> Void)? { get set }
|
|
29
|
+
var onStructuralTransitionSettled: ((_ payloadJson: String) -> Void)? { get set }
|
|
28
30
|
|
|
29
31
|
// Methods
|
|
30
32
|
func applySnapshot(snapshotJson: String) throws -> Void
|
|
@@ -154,6 +154,17 @@ open class HybridNativeListSpec_cxx {
|
|
|
154
154
|
}
|
|
155
155
|
}
|
|
156
156
|
|
|
157
|
+
public final var sidecarLayoutJson: std.string {
|
|
158
|
+
@inline(__always)
|
|
159
|
+
get {
|
|
160
|
+
return std.string(self.__implementation.sidecarLayoutJson)
|
|
161
|
+
}
|
|
162
|
+
@inline(__always)
|
|
163
|
+
set {
|
|
164
|
+
self.__implementation.sidecarLayoutJson = String(newValue)
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
157
168
|
public final var topScrollEdgeEffect: Int32 {
|
|
158
169
|
@inline(__always)
|
|
159
170
|
get {
|
|
@@ -432,6 +443,38 @@ open class HybridNativeListSpec_cxx {
|
|
|
432
443
|
}()
|
|
433
444
|
}
|
|
434
445
|
}
|
|
446
|
+
|
|
447
|
+
public final var onStructuralTransitionSettled: bridge.std__optional_std__function_void_const_std__string_____payloadJson______ {
|
|
448
|
+
@inline(__always)
|
|
449
|
+
get {
|
|
450
|
+
return { () -> bridge.std__optional_std__function_void_const_std__string_____payloadJson______ in
|
|
451
|
+
if let __unwrappedValue = self.__implementation.onStructuralTransitionSettled {
|
|
452
|
+
return bridge.create_std__optional_std__function_void_const_std__string_____payloadJson______({ () -> bridge.Func_void_std__string in
|
|
453
|
+
let __closureWrapper = Func_void_std__string(__unwrappedValue)
|
|
454
|
+
return bridge.create_Func_void_std__string(__closureWrapper.toUnsafe())
|
|
455
|
+
}())
|
|
456
|
+
} else {
|
|
457
|
+
return .init()
|
|
458
|
+
}
|
|
459
|
+
}()
|
|
460
|
+
}
|
|
461
|
+
@inline(__always)
|
|
462
|
+
set {
|
|
463
|
+
self.__implementation.onStructuralTransitionSettled = { () -> ((_ payloadJson: String) -> Void)? in
|
|
464
|
+
if bridge.has_value_std__optional_std__function_void_const_std__string_____payloadJson______(newValue) {
|
|
465
|
+
let __unwrapped = bridge.get_std__optional_std__function_void_const_std__string_____payloadJson______(newValue)
|
|
466
|
+
return { () -> (String) -> Void in
|
|
467
|
+
let __wrappedFunction = bridge.wrap_Func_void_std__string(__unwrapped)
|
|
468
|
+
return { (__payloadJson: String) -> Void in
|
|
469
|
+
__wrappedFunction.call(std.string(__payloadJson))
|
|
470
|
+
}
|
|
471
|
+
}()
|
|
472
|
+
} else {
|
|
473
|
+
return nil
|
|
474
|
+
}
|
|
475
|
+
}()
|
|
476
|
+
}
|
|
477
|
+
}
|
|
435
478
|
|
|
436
479
|
// Methods
|
|
437
480
|
@inline(__always)
|
|
@@ -20,6 +20,8 @@ namespace margelo::nitro::nativelist {
|
|
|
20
20
|
prototype.registerHybridSetter("fontFamiliesJson", &HybridNativeListSpec::setFontFamiliesJson);
|
|
21
21
|
prototype.registerHybridGetter("containerSlotHeightsJson", &HybridNativeListSpec::getContainerSlotHeightsJson);
|
|
22
22
|
prototype.registerHybridSetter("containerSlotHeightsJson", &HybridNativeListSpec::setContainerSlotHeightsJson);
|
|
23
|
+
prototype.registerHybridGetter("sidecarLayoutJson", &HybridNativeListSpec::getSidecarLayoutJson);
|
|
24
|
+
prototype.registerHybridSetter("sidecarLayoutJson", &HybridNativeListSpec::setSidecarLayoutJson);
|
|
23
25
|
prototype.registerHybridGetter("topScrollEdgeEffect", &HybridNativeListSpec::getTopScrollEdgeEffect);
|
|
24
26
|
prototype.registerHybridSetter("topScrollEdgeEffect", &HybridNativeListSpec::setTopScrollEdgeEffect);
|
|
25
27
|
prototype.registerHybridGetter("topOverlayHeight", &HybridNativeListSpec::getTopOverlayHeight);
|
|
@@ -44,6 +46,8 @@ namespace margelo::nitro::nativelist {
|
|
|
44
46
|
prototype.registerHybridSetter("onEndReached", &HybridNativeListSpec::setOnEndReached);
|
|
45
47
|
prototype.registerHybridGetter("onVisibleRangeChanged", &HybridNativeListSpec::getOnVisibleRangeChanged);
|
|
46
48
|
prototype.registerHybridSetter("onVisibleRangeChanged", &HybridNativeListSpec::setOnVisibleRangeChanged);
|
|
49
|
+
prototype.registerHybridGetter("onStructuralTransitionSettled", &HybridNativeListSpec::getOnStructuralTransitionSettled);
|
|
50
|
+
prototype.registerHybridSetter("onStructuralTransitionSettled", &HybridNativeListSpec::setOnStructuralTransitionSettled);
|
|
47
51
|
prototype.registerHybridMethod("applySnapshot", &HybridNativeListSpec::applySnapshot);
|
|
48
52
|
prototype.registerHybridMethod("applyPatches", &HybridNativeListSpec::applyPatches);
|
|
49
53
|
prototype.registerHybridMethod("reconcileSelection", &HybridNativeListSpec::reconcileSelection);
|
|
@@ -63,6 +63,8 @@ namespace margelo::nitro::nativelist {
|
|
|
63
63
|
virtual void setFontFamiliesJson(const std::string& fontFamiliesJson) = 0;
|
|
64
64
|
virtual std::string getContainerSlotHeightsJson() = 0;
|
|
65
65
|
virtual void setContainerSlotHeightsJson(const std::string& containerSlotHeightsJson) = 0;
|
|
66
|
+
virtual std::string getSidecarLayoutJson() = 0;
|
|
67
|
+
virtual void setSidecarLayoutJson(const std::string& sidecarLayoutJson) = 0;
|
|
66
68
|
virtual NativeListScrollEdgeEffect getTopScrollEdgeEffect() = 0;
|
|
67
69
|
virtual void setTopScrollEdgeEffect(NativeListScrollEdgeEffect topScrollEdgeEffect) = 0;
|
|
68
70
|
virtual double getTopOverlayHeight() = 0;
|
|
@@ -87,6 +89,8 @@ namespace margelo::nitro::nativelist {
|
|
|
87
89
|
virtual void setOnEndReached(const std::optional<std::function<void(const std::string& /* payloadJson */)>>& onEndReached) = 0;
|
|
88
90
|
virtual std::optional<std::function<void(const std::string& /* payloadJson */)>> getOnVisibleRangeChanged() = 0;
|
|
89
91
|
virtual void setOnVisibleRangeChanged(const std::optional<std::function<void(const std::string& /* payloadJson */)>>& onVisibleRangeChanged) = 0;
|
|
92
|
+
virtual std::optional<std::function<void(const std::string& /* payloadJson */)>> getOnStructuralTransitionSettled() = 0;
|
|
93
|
+
virtual void setOnStructuralTransitionSettled(const std::optional<std::function<void(const std::string& /* payloadJson */)>>& onStructuralTransitionSettled) = 0;
|
|
90
94
|
|
|
91
95
|
public:
|
|
92
96
|
// Methods
|
|
@@ -23,6 +23,7 @@ namespace margelo::nitro::nativelist::views {
|
|
|
23
23
|
snapshotJson(nitro::ReactProp<std::string>::fromRawValue("NativeList", "snapshotJson", rawProps, sourceProps.snapshotJson)),
|
|
24
24
|
fontFamiliesJson(nitro::ReactProp<std::string>::fromRawValue("NativeList", "fontFamiliesJson", rawProps, sourceProps.fontFamiliesJson)),
|
|
25
25
|
containerSlotHeightsJson(nitro::ReactProp<std::string>::fromRawValue("NativeList", "containerSlotHeightsJson", rawProps, sourceProps.containerSlotHeightsJson)),
|
|
26
|
+
sidecarLayoutJson(nitro::ReactProp<std::string>::fromRawValue("NativeList", "sidecarLayoutJson", rawProps, sourceProps.sidecarLayoutJson)),
|
|
26
27
|
topScrollEdgeEffect(nitro::ReactProp<NativeListScrollEdgeEffect>::fromRawValue("NativeList", "topScrollEdgeEffect", rawProps, sourceProps.topScrollEdgeEffect)),
|
|
27
28
|
topOverlayHeight(nitro::ReactProp<double>::fromRawValue("NativeList", "topOverlayHeight", rawProps, sourceProps.topOverlayHeight)),
|
|
28
29
|
scrollPositionThresholdsJson(nitro::ReactProp<std::string>::fromRawValue("NativeList", "scrollPositionThresholdsJson", rawProps, sourceProps.scrollPositionThresholdsJson)),
|
|
@@ -35,6 +36,7 @@ namespace margelo::nitro::nativelist::views {
|
|
|
35
36
|
onReorder(nitro::ReactProp<std::optional<std::function<void(const std::string& /* payloadJson */)>>>::fromRawValue("NativeList", "onReorder", rawProps, sourceProps.onReorder)),
|
|
36
37
|
onEndReached(nitro::ReactProp<std::optional<std::function<void(const std::string& /* payloadJson */)>>>::fromRawValue("NativeList", "onEndReached", rawProps, sourceProps.onEndReached)),
|
|
37
38
|
onVisibleRangeChanged(nitro::ReactProp<std::optional<std::function<void(const std::string& /* payloadJson */)>>>::fromRawValue("NativeList", "onVisibleRangeChanged", rawProps, sourceProps.onVisibleRangeChanged)),
|
|
39
|
+
onStructuralTransitionSettled(nitro::ReactProp<std::optional<std::function<void(const std::string& /* payloadJson */)>>>::fromRawValue("NativeList", "onStructuralTransitionSettled", rawProps, sourceProps.onStructuralTransitionSettled)),
|
|
38
40
|
hybridRef(nitro::ReactProp<std::optional<std::function<void(const std::shared_ptr<HybridNativeListSpec>& /* ref */)>>>::fromRawValue("NativeList", "hybridRef", rawProps, sourceProps.hybridRef)) { }
|
|
39
41
|
|
|
40
42
|
bool HybridNativeListProps::filterObjectKeys(const std::string& propName) {
|
|
@@ -42,6 +44,7 @@ namespace margelo::nitro::nativelist::views {
|
|
|
42
44
|
case hashString("snapshotJson"): return true;
|
|
43
45
|
case hashString("fontFamiliesJson"): return true;
|
|
44
46
|
case hashString("containerSlotHeightsJson"): return true;
|
|
47
|
+
case hashString("sidecarLayoutJson"): return true;
|
|
45
48
|
case hashString("topScrollEdgeEffect"): return true;
|
|
46
49
|
case hashString("topOverlayHeight"): return true;
|
|
47
50
|
case hashString("scrollPositionThresholdsJson"): return true;
|
|
@@ -54,6 +57,7 @@ namespace margelo::nitro::nativelist::views {
|
|
|
54
57
|
case hashString("onReorder"): return true;
|
|
55
58
|
case hashString("onEndReached"): return true;
|
|
56
59
|
case hashString("onVisibleRangeChanged"): return true;
|
|
60
|
+
case hashString("onStructuralTransitionSettled"): return true;
|
|
57
61
|
case hashString("hybridRef"): return true;
|
|
58
62
|
default: return false;
|
|
59
63
|
}
|
|
@@ -49,6 +49,7 @@ namespace margelo::nitro::nativelist::views {
|
|
|
49
49
|
nitro::ReactProp<std::string> snapshotJson;
|
|
50
50
|
nitro::ReactProp<std::string> fontFamiliesJson;
|
|
51
51
|
nitro::ReactProp<std::string> containerSlotHeightsJson;
|
|
52
|
+
nitro::ReactProp<std::string> sidecarLayoutJson;
|
|
52
53
|
nitro::ReactProp<NativeListScrollEdgeEffect> topScrollEdgeEffect;
|
|
53
54
|
nitro::ReactProp<double> topOverlayHeight;
|
|
54
55
|
nitro::ReactProp<std::string> scrollPositionThresholdsJson;
|
|
@@ -61,6 +62,7 @@ namespace margelo::nitro::nativelist::views {
|
|
|
61
62
|
nitro::ReactProp<std::optional<std::function<void(const std::string& /* payloadJson */)>>> onReorder;
|
|
62
63
|
nitro::ReactProp<std::optional<std::function<void(const std::string& /* payloadJson */)>>> onEndReached;
|
|
63
64
|
nitro::ReactProp<std::optional<std::function<void(const std::string& /* payloadJson */)>>> onVisibleRangeChanged;
|
|
65
|
+
nitro::ReactProp<std::optional<std::function<void(const std::string& /* payloadJson */)>>> onStructuralTransitionSettled;
|
|
64
66
|
nitro::ReactProp<std::optional<std::function<void(const std::shared_ptr<HybridNativeListSpec>& /* ref */)>>> hybridRef;
|
|
65
67
|
|
|
66
68
|
[[nodiscard]]
|
|
@@ -68,6 +70,7 @@ namespace margelo::nitro::nativelist::views {
|
|
|
68
70
|
return snapshotJson.hasSameValue(other.snapshotJson) &&
|
|
69
71
|
fontFamiliesJson.hasSameValue(other.fontFamiliesJson) &&
|
|
70
72
|
containerSlotHeightsJson.hasSameValue(other.containerSlotHeightsJson) &&
|
|
73
|
+
sidecarLayoutJson.hasSameValue(other.sidecarLayoutJson) &&
|
|
71
74
|
topScrollEdgeEffect.hasSameValue(other.topScrollEdgeEffect) &&
|
|
72
75
|
topOverlayHeight.hasSameValue(other.topOverlayHeight) &&
|
|
73
76
|
scrollPositionThresholdsJson.hasSameValue(other.scrollPositionThresholdsJson) &&
|
|
@@ -80,6 +83,7 @@ namespace margelo::nitro::nativelist::views {
|
|
|
80
83
|
onReorder.hasSameValue(other.onReorder) &&
|
|
81
84
|
onEndReached.hasSameValue(other.onEndReached) &&
|
|
82
85
|
onVisibleRangeChanged.hasSameValue(other.onVisibleRangeChanged) &&
|
|
86
|
+
onStructuralTransitionSettled.hasSameValue(other.onStructuralTransitionSettled) &&
|
|
83
87
|
hybridRef.hasSameValue(other.hybridRef);
|
|
84
88
|
}
|
|
85
89
|
|
|
@@ -88,6 +92,7 @@ namespace margelo::nitro::nativelist::views {
|
|
|
88
92
|
return snapshotJson.isProvided() ||
|
|
89
93
|
fontFamiliesJson.isProvided() ||
|
|
90
94
|
containerSlotHeightsJson.isProvided() ||
|
|
95
|
+
sidecarLayoutJson.isProvided() ||
|
|
91
96
|
topScrollEdgeEffect.isProvided() ||
|
|
92
97
|
topOverlayHeight.isProvided() ||
|
|
93
98
|
scrollPositionThresholdsJson.isProvided() ||
|
|
@@ -100,6 +105,7 @@ namespace margelo::nitro::nativelist::views {
|
|
|
100
105
|
onReorder.isProvided() ||
|
|
101
106
|
onEndReached.isProvided() ||
|
|
102
107
|
onVisibleRangeChanged.isProvided() ||
|
|
108
|
+
onStructuralTransitionSettled.isProvided() ||
|
|
103
109
|
hybridRef.isProvided();
|
|
104
110
|
}
|
|
105
111
|
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
"snapshotJson": true,
|
|
8
8
|
"fontFamiliesJson": true,
|
|
9
9
|
"containerSlotHeightsJson": true,
|
|
10
|
+
"sidecarLayoutJson": true,
|
|
10
11
|
"topScrollEdgeEffect": true,
|
|
11
12
|
"topOverlayHeight": true,
|
|
12
13
|
"scrollPositionThresholdsJson": true,
|
|
@@ -19,6 +20,7 @@
|
|
|
19
20
|
"onReorder": true,
|
|
20
21
|
"onEndReached": true,
|
|
21
22
|
"onVisibleRangeChanged": true,
|
|
23
|
+
"onStructuralTransitionSettled": true,
|
|
22
24
|
"hybridRef": true
|
|
23
25
|
}
|
|
24
26
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { ImageSource, NativeListSnapshot } from './models';
|
|
3
3
|
import type { NativeListProps } from './NativeList.types';
|
|
4
|
-
export type { NativeListProps, NativeListRef } from './NativeList.types';
|
|
4
|
+
export type { NativeListProps, NativeListRef, StructuralTransitionSettledEvent, } from './NativeList.types';
|
|
5
5
|
export type { ActionAnchorState, NativeListKeyboardDismissMode, NativeListKeyboardShouldPersistTaps, ScrollAlignment, ScrollPositionOptions, ScrollToEndParams, ScrollToIndexFailedInfo, ScrollToIndexParams, ScrollToItemParams, ScrollToKeyParams, ScrollToLocationParams, ScrollToOffsetParams, } from './NativeList.types';
|
|
6
6
|
export declare function preloadNativeListAvatarImages(sources: readonly ImageSource[]): Promise<boolean>;
|
|
7
7
|
export declare const NativeList: React.ForwardRefExoticComponent<NativeListProps & React.RefAttributes<Readonly<{
|
|
@@ -8,6 +8,7 @@ export interface NativeListNativeProps extends HybridViewProps {
|
|
|
8
8
|
snapshotJson: string;
|
|
9
9
|
fontFamiliesJson: string;
|
|
10
10
|
containerSlotHeightsJson: string;
|
|
11
|
+
sidecarLayoutJson: string;
|
|
11
12
|
topScrollEdgeEffect: NativeListScrollEdgeEffect;
|
|
12
13
|
topOverlayHeight: number;
|
|
13
14
|
scrollPositionThresholdsJson: string;
|
|
@@ -20,6 +21,7 @@ export interface NativeListNativeProps extends HybridViewProps {
|
|
|
20
21
|
onReorder?: (payloadJson: string) => void;
|
|
21
22
|
onEndReached?: (payloadJson: string) => void;
|
|
22
23
|
onVisibleRangeChanged?: (payloadJson: string) => void;
|
|
24
|
+
onStructuralTransitionSettled?: (payloadJson: string) => void;
|
|
23
25
|
}
|
|
24
26
|
export type NativeListKeyboardDismissMode = 'none' | 'on-drag' | 'interactive';
|
|
25
27
|
export type NativeListKeyboardShouldPersistTaps = 'never' | 'always' | 'handled';
|
|
@@ -49,6 +49,16 @@ export type NativeListWebScrollHost = Readonly<{
|
|
|
49
49
|
clientHeight: number;
|
|
50
50
|
scrollTop: number;
|
|
51
51
|
}>;
|
|
52
|
+
export type NativeListSidecarLayout = Readonly<{
|
|
53
|
+
width: number;
|
|
54
|
+
gap: number;
|
|
55
|
+
maxContentWidth: number;
|
|
56
|
+
}>;
|
|
57
|
+
export type StructuralTransitionSettledEvent = Readonly<{
|
|
58
|
+
transitionId: string;
|
|
59
|
+
status: 'completed' | 'interrupted';
|
|
60
|
+
settledExpanded: boolean;
|
|
61
|
+
}>;
|
|
52
62
|
type InitialScrollProps = Readonly<{
|
|
53
63
|
initialScrollIndex?: never;
|
|
54
64
|
initialScrollKey?: never;
|
|
@@ -86,6 +96,13 @@ export type NativeListProps = Omit<ViewProps, 'children'> & Readonly<{
|
|
|
86
96
|
listHeader?: ReactNode;
|
|
87
97
|
listFooter?: ReactNode;
|
|
88
98
|
listEmpty?: ReactNode;
|
|
99
|
+
/** Native disclosure content, retained until its transition settles. */
|
|
100
|
+
listExpandedContent?: ReactNode;
|
|
101
|
+
/** Stable native disclosure toggle after expanded content. */
|
|
102
|
+
listStructureToggle?: ReactNode;
|
|
103
|
+
/** Scrolling right column for a vertical linear list. Requires sidecarLayout. */
|
|
104
|
+
listSidecar?: ReactNode;
|
|
105
|
+
sidecarLayout?: NativeListSidecarLayout;
|
|
89
106
|
/** Fixed overlay above scrolling rows on iOS 26 and newer. */
|
|
90
107
|
topOverlay?: ReactNode;
|
|
91
108
|
/** Selects UIKit's top scroll-edge effect on iOS 26 and newer. */
|
|
@@ -111,6 +128,7 @@ export type NativeListProps = Omit<ViewProps, 'children'> & Readonly<{
|
|
|
111
128
|
onReorder?: (event: ReorderEvent) => void;
|
|
112
129
|
onEndReached?: (event: EndReachedEvent) => void;
|
|
113
130
|
onVisibleRangeChanged?: (event: VisibleRangeChangedEvent) => void;
|
|
131
|
+
onStructuralTransitionSettled?: (event: StructuralTransitionSettledEvent) => void;
|
|
114
132
|
/** Native only. Emits initial state and hysteresis transitions, not scroll frames. */
|
|
115
133
|
scrollPositionThresholds?: Readonly<{
|
|
116
134
|
start: number;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { NativeList, preloadNativeListAvatarImages } from './NativeList';
|
|
2
|
-
export type { ActionAnchorState, NativeListKeyboardDismissMode, NativeListKeyboardShouldPersistTaps, NativeListProps, NativeListRef, ScrollAlignment, ScrollPositionOptions, ScrollToEndParams, ScrollToIndexFailedInfo, ScrollToIndexParams, ScrollToItemParams, ScrollToKeyParams, ScrollToLocationParams, ScrollToOffsetParams, } from './NativeList';
|
|
2
|
+
export type { ActionAnchorState, NativeListKeyboardDismissMode, NativeListKeyboardShouldPersistTaps, NativeListProps, NativeListRef, ScrollAlignment, ScrollPositionOptions, ScrollToEndParams, ScrollToIndexFailedInfo, ScrollToIndexParams, ScrollToItemParams, ScrollToKeyParams, ScrollToLocationParams, ScrollToOffsetParams, StructuralTransitionSettledEvent, } from './NativeList';
|
|
3
3
|
export type * from './models';
|
|
4
|
-
export { applyRowPatches, serializePatches, serializeSnapshot, validatePatches, validateSnapshot, } from './validation';
|
|
4
|
+
export { applyRowPatches, planNativeListPatches, serializePatches, serializeSnapshot, validatePatches, validateSnapshot, } from './validation';
|
|
5
5
|
export { checkboxStateForKeys, checkboxStateForSection, isSelectableRow, reduceSelection, selectionStateFromSnapshot, } from './selection';
|
|
6
6
|
export type { SelectionAction, SelectionResult, SelectionState, } from './selection';
|
|
7
7
|
export { configureNativeListFonts } from './fonts';
|
|
@@ -97,6 +97,7 @@ export declare const ROW_BOX_STYLE_KEYS_BY_TYPE: {
|
|
|
97
97
|
readonly metricCard: readonly ["horizontalPadding", "verticalPadding", "leadingGap", "lineGap", "image"];
|
|
98
98
|
readonly sectionHeader: readonly ["horizontalPadding", "verticalPadding", "lineGap", "trailingGap"];
|
|
99
99
|
readonly action: readonly ["horizontalPadding", "verticalPadding", "leadingGap", "trailingGap", "image"];
|
|
100
|
+
readonly buttonGroup: readonly [];
|
|
100
101
|
readonly system: readonly ["horizontalPadding", "verticalPadding", "lineGap"];
|
|
101
102
|
};
|
|
102
103
|
type TemplateBoxStyle<T extends keyof typeof ROW_BOX_STYLE_KEYS_BY_TYPE> = Pick<RowBoxStyle, (typeof ROW_BOX_STYLE_KEYS_BY_TYPE)[T][number] | 'container'>;
|
|
@@ -107,6 +108,7 @@ type TemplateBoxStyle<T extends keyof typeof ROW_BOX_STYLE_KEYS_BY_TYPE> = Pick<
|
|
|
107
108
|
* the same key name keeps one meaning across platforms. See docs/STYLE_SPEC.md §4.
|
|
108
109
|
*/
|
|
109
110
|
export type IdentityRowStyle = TemplateBoxStyle<'identity'> & Readonly<{
|
|
111
|
+
leadingContentMaxWidthRatio?: number;
|
|
110
112
|
title?: NativeListTextStyle;
|
|
111
113
|
subtitle?: NativeListTextStyle;
|
|
112
114
|
tertiary?: NativeListTextStyle;
|
|
@@ -168,6 +170,13 @@ export type SectionHeaderRowStyle = TemplateBoxStyle<'sectionHeader'> & Readonly
|
|
|
168
170
|
title?: NativeListTextStyle;
|
|
169
171
|
subtitle?: NativeListTextStyle;
|
|
170
172
|
value?: NativeListTextStyle;
|
|
173
|
+
valuePlacement?: 'afterTitle';
|
|
174
|
+
titleDecoration?: 'none' | 'dashed';
|
|
175
|
+
}>;
|
|
176
|
+
export type RowTextHelp = Readonly<{
|
|
177
|
+
actionKey: string;
|
|
178
|
+
presentation: 'tooltip' | 'popover';
|
|
179
|
+
underline?: 'dashed';
|
|
171
180
|
}>;
|
|
172
181
|
export type ActionRowStyle = TemplateBoxStyle<'action'> & Readonly<{
|
|
173
182
|
title?: NativeListTextStyle;
|
|
@@ -225,8 +234,13 @@ export type VisualOverlay = Readonly<{
|
|
|
225
234
|
offsetX?: number;
|
|
226
235
|
offsetY?: number;
|
|
227
236
|
image?: ImageSource;
|
|
237
|
+
fallbackIcon?: Readonly<{
|
|
238
|
+
name: string;
|
|
239
|
+
tintColor?: string;
|
|
240
|
+
}>;
|
|
228
241
|
name?: string;
|
|
229
242
|
text?: string;
|
|
243
|
+
fontWeight?: NativeListTextStyle['fontWeight'];
|
|
230
244
|
tintColor?: string;
|
|
231
245
|
backgroundColor?: string;
|
|
232
246
|
}>;
|
|
@@ -234,12 +248,15 @@ type VisualWithImage = Readonly<{
|
|
|
234
248
|
fallbackIcon?: Readonly<{
|
|
235
249
|
name: string;
|
|
236
250
|
tintColor?: string;
|
|
251
|
+
size?: number;
|
|
252
|
+
backgroundColor?: string;
|
|
237
253
|
}>;
|
|
238
254
|
overlays?: readonly VisualOverlay[];
|
|
239
255
|
borderStyle?: 'dashed';
|
|
240
256
|
borderColor?: string;
|
|
241
257
|
image?: ImageSource;
|
|
242
258
|
fallbackText?: string;
|
|
259
|
+
fallbackTextColor?: string;
|
|
243
260
|
backgroundColor?: string;
|
|
244
261
|
shape?: 'circle' | 'rounded' | 'square';
|
|
245
262
|
cornerIcon?: Readonly<{
|
|
@@ -291,8 +308,24 @@ export type TrailingAccessory = Readonly<{
|
|
|
291
308
|
kind: 'valuePair';
|
|
292
309
|
primary: string;
|
|
293
310
|
secondary: string;
|
|
311
|
+
primaryFontWeight?: 'medium';
|
|
312
|
+
primaryHelp?: RowTextHelp;
|
|
313
|
+
primaryTextSegments?: readonly ValueTextSegment[];
|
|
314
|
+
secondaryTextSegments?: readonly ValueTextSegment[];
|
|
294
315
|
primaryTone?: TextTone;
|
|
295
316
|
secondaryTone?: TextTone;
|
|
317
|
+
}> | Readonly<{
|
|
318
|
+
kind: 'button';
|
|
319
|
+
label: string;
|
|
320
|
+
actionKey: string;
|
|
321
|
+
disabled?: boolean;
|
|
322
|
+
testID?: string;
|
|
323
|
+
accessibilityLabel?: string;
|
|
324
|
+
textColor?: string;
|
|
325
|
+
backgroundColor?: string;
|
|
326
|
+
pressedBackgroundColor?: string;
|
|
327
|
+
hoverBackgroundColor?: string;
|
|
328
|
+
focusRingColor?: string;
|
|
296
329
|
}> | Readonly<{
|
|
297
330
|
kind: 'checkbox';
|
|
298
331
|
state: CheckboxState;
|
|
@@ -323,6 +356,7 @@ export type TrailingAccessory = Readonly<{
|
|
|
323
356
|
kind: 'icon';
|
|
324
357
|
name: string;
|
|
325
358
|
tintColor?: string;
|
|
359
|
+
buttonStyle?: 'tertiary';
|
|
326
360
|
disabled?: boolean;
|
|
327
361
|
actionKey?: string;
|
|
328
362
|
testID?: string;
|
|
@@ -362,6 +396,10 @@ export type RowBase = Readonly<{
|
|
|
362
396
|
}>;
|
|
363
397
|
export type IdentityRow = RowBase & Readonly<{
|
|
364
398
|
type: 'identity';
|
|
399
|
+
/** Opt in to content-based height; explicit row/container height still wins. */
|
|
400
|
+
contentHeight?: 'auto';
|
|
401
|
+
/** Emits a row action instead of a press after a successful long press. */
|
|
402
|
+
longPressActionKey?: string;
|
|
365
403
|
titleMatch?: readonly Readonly<{
|
|
366
404
|
start: number;
|
|
367
405
|
end: number;
|
|
@@ -375,11 +413,27 @@ export type IdentityRow = RowBase & Readonly<{
|
|
|
375
413
|
kind: 'icon';
|
|
376
414
|
}>;
|
|
377
415
|
title: string;
|
|
416
|
+
/** Plain 12/16 labels beside the title, preserving independent tones. */
|
|
417
|
+
titleSuffixes?: readonly Readonly<{
|
|
418
|
+
text: string;
|
|
419
|
+
tone: 'secondary' | 'disabled';
|
|
420
|
+
maxWidth?: number;
|
|
421
|
+
}>[];
|
|
422
|
+
titleIcon?: Readonly<{
|
|
423
|
+
name: string;
|
|
424
|
+
tintColor?: string;
|
|
425
|
+
accessibilityLabel?: string;
|
|
426
|
+
/** Web-only anchored help from this icon; does not add a click action. */
|
|
427
|
+
hoverActionKey?: string;
|
|
428
|
+
}>;
|
|
429
|
+
/** Web-only additional help icon after titleIcon. */
|
|
430
|
+
secondaryTitleIcon?: IdentityRow['titleIcon'];
|
|
378
431
|
subtitle?: string;
|
|
379
432
|
tertiary?: string;
|
|
380
433
|
tertiaryTone?: 'secondary' | 'info';
|
|
381
434
|
titleLines?: 1 | 2;
|
|
382
|
-
|
|
435
|
+
/** Zero displays the complete subtitle. */
|
|
436
|
+
subtitleLines?: 0 | 1 | 2;
|
|
383
437
|
badges?: readonly BadgeModel[];
|
|
384
438
|
trailing?: readonly TrailingAccessory[];
|
|
385
439
|
draggable?: boolean;
|
|
@@ -413,6 +467,7 @@ export type ActivityAmount = Readonly<{
|
|
|
413
467
|
export type ActivityRow = RowBase & Readonly<{
|
|
414
468
|
type: 'activity';
|
|
415
469
|
leading: LeadingVisual;
|
|
470
|
+
hideLeading?: boolean;
|
|
416
471
|
secondaryLeading?: LeadingVisual;
|
|
417
472
|
title: string;
|
|
418
473
|
description?: string;
|
|
@@ -436,11 +491,14 @@ export type ActivityRow = RowBase & Readonly<{
|
|
|
436
491
|
}>;
|
|
437
492
|
export type MessageRow = RowBase & Readonly<{
|
|
438
493
|
type: 'message';
|
|
494
|
+
/** Draws only top and bottom container borders when a border is supplied. */
|
|
495
|
+
presentation?: 'inlineWarning';
|
|
439
496
|
unread?: boolean;
|
|
440
497
|
leading?: LeadingVisual;
|
|
441
498
|
title: string;
|
|
442
499
|
body: string;
|
|
443
|
-
|
|
500
|
+
/** Zero displays the complete body. */
|
|
501
|
+
bodyLines?: 0 | 1 | 2 | 3;
|
|
444
502
|
time: string;
|
|
445
503
|
thumbnail?: ImageSource;
|
|
446
504
|
style?: MessageRowStyle;
|
|
@@ -448,8 +506,12 @@ export type MessageRow = RowBase & Readonly<{
|
|
|
448
506
|
export type DataColumn = Readonly<{
|
|
449
507
|
key: string;
|
|
450
508
|
text: string;
|
|
509
|
+
textSegments?: readonly ValueTextSegment[];
|
|
510
|
+
titleIcon?: IdentityRow['titleIcon'];
|
|
511
|
+
secondaryTitleIcon?: IdentityRow['titleIcon'];
|
|
451
512
|
secondaryLeadingText?: string;
|
|
452
513
|
secondaryText?: string;
|
|
514
|
+
secondaryTextSegments?: readonly ValueTextSegment[];
|
|
453
515
|
weight?: 1 | 2 | 3;
|
|
454
516
|
alignment?: 'start' | 'center' | 'end';
|
|
455
517
|
tone?: 'primary' | 'secondary' | 'positive' | 'negative';
|
|
@@ -459,6 +521,7 @@ export type DataRow = RowBase & Readonly<{
|
|
|
459
521
|
type: 'dataRow';
|
|
460
522
|
leading?: LeadingVisual;
|
|
461
523
|
columns: readonly DataColumn[];
|
|
524
|
+
trailing?: readonly TrailingAccessory[];
|
|
462
525
|
checkbox?: Extract<TrailingAccessory, {
|
|
463
526
|
kind: 'checkbox';
|
|
464
527
|
}>;
|
|
@@ -611,9 +674,11 @@ export type SectionHeaderRow = RowBase & Readonly<{
|
|
|
611
674
|
indexTitle?: string;
|
|
612
675
|
variant?: 'summary' | 'gallery' | 'history';
|
|
613
676
|
title: string;
|
|
677
|
+
leadingBadge?: BadgeModel;
|
|
614
678
|
titleLoading?: boolean;
|
|
615
679
|
subtitle?: string;
|
|
616
680
|
value?: string;
|
|
681
|
+
valueHelp?: RowTextHelp;
|
|
617
682
|
valueActionKey?: string;
|
|
618
683
|
titleIcon?: Extract<TrailingAccessory, {
|
|
619
684
|
kind: 'icon';
|
|
@@ -641,6 +706,19 @@ export type ActionRow = RowBase & Readonly<{
|
|
|
641
706
|
trailing?: readonly TrailingAccessory[];
|
|
642
707
|
style?: ActionRowStyle;
|
|
643
708
|
}>;
|
|
709
|
+
export type ButtonGroupRow = RowBase & Readonly<{
|
|
710
|
+
type: 'buttonGroup';
|
|
711
|
+
buttons: readonly Readonly<{
|
|
712
|
+
key: string;
|
|
713
|
+
label: string;
|
|
714
|
+
actionKey: string;
|
|
715
|
+
disabled?: boolean;
|
|
716
|
+
loading?: boolean;
|
|
717
|
+
testID?: string;
|
|
718
|
+
accessibilityLabel?: string;
|
|
719
|
+
}>[];
|
|
720
|
+
style?: TemplateBoxStyle<'buttonGroup'>;
|
|
721
|
+
}>;
|
|
644
722
|
export type SystemRow = RowBase & Readonly<{
|
|
645
723
|
style?: SystemRowStyle;
|
|
646
724
|
}> & (Readonly<{
|
|
@@ -677,7 +755,7 @@ export type SystemRow = RowBase & Readonly<{
|
|
|
677
755
|
variant: 'spacer';
|
|
678
756
|
height: number;
|
|
679
757
|
}>);
|
|
680
|
-
export type RowModel = IdentityRow | WalletGroupRow | RailRow | ActivityRow | MessageRow | DataRow | MarketRow | MediaTileRow | MetricCardRow | SectionHeaderRow | ActionRow | SystemRow;
|
|
758
|
+
export type RowModel = IdentityRow | WalletGroupRow | RailRow | ActivityRow | MessageRow | DataRow | MarketRow | MediaTileRow | MetricCardRow | SectionHeaderRow | ActionRow | ButtonGroupRow | SystemRow;
|
|
681
759
|
export type NativeListTheme = Readonly<{
|
|
682
760
|
checkboxBackground?: string;
|
|
683
761
|
checkboxBorder?: string;
|
|
@@ -687,6 +765,8 @@ export type NativeListTheme = Readonly<{
|
|
|
687
765
|
rowBackground: string;
|
|
688
766
|
rowSelectedBackground: string;
|
|
689
767
|
rowPressedBackground?: string;
|
|
768
|
+
/** Web-only enabled-row hover color; defaults to rowPressedBackground. */
|
|
769
|
+
rowHoverBackground?: string;
|
|
690
770
|
subduedBackground?: string;
|
|
691
771
|
strongBackground?: string;
|
|
692
772
|
/** Web-only background for a displayed declared image fallback. */
|
|
@@ -699,6 +779,8 @@ export type NativeListTheme = Readonly<{
|
|
|
699
779
|
separator: string;
|
|
700
780
|
accent: string;
|
|
701
781
|
positive: string;
|
|
782
|
+
/** Optional exact background for the success tone of section leading badges. */
|
|
783
|
+
successBackground?: string;
|
|
702
784
|
negative: string;
|
|
703
785
|
criticalBackground?: string;
|
|
704
786
|
inverseBackground?: string;
|
|
@@ -740,6 +822,16 @@ export type NativeListListStyle = Readonly<{
|
|
|
740
822
|
export type NativeListSnapshot = Readonly<{
|
|
741
823
|
schemaVersion: 1;
|
|
742
824
|
generation: number;
|
|
825
|
+
/** One-shot animation for a user-initiated row-key insertion or removal. */
|
|
826
|
+
structuralTransition?: Readonly<{
|
|
827
|
+
id: string;
|
|
828
|
+
durationMs?: number;
|
|
829
|
+
anchorKey?: string;
|
|
830
|
+
}>;
|
|
831
|
+
disclosure?: Readonly<{
|
|
832
|
+
expanded: boolean;
|
|
833
|
+
expandedTrailingInset?: number;
|
|
834
|
+
}>;
|
|
743
835
|
layout: Readonly<{
|
|
744
836
|
kind: NativeListLayout;
|
|
745
837
|
orientation?: NativeListOrientation;
|
|
@@ -775,7 +867,7 @@ type CommonPatchFields = 'revision' | 'disabled' | 'selected' | 'separator' | 'h
|
|
|
775
867
|
export type RowPatch = Readonly<{
|
|
776
868
|
type: 'identity';
|
|
777
869
|
key: string;
|
|
778
|
-
changes: Partial<Pick<IdentityRow, CommonPatchFields | 'title' | 'subtitle' | 'tertiary' | 'tertiaryTone' | 'badges' | 'trailing' | 'leading' | 'leadingAction' | 'titleMatch' | 'titleActionKey' | 'titleActionOnHover' | 'subtitleSegments'>>;
|
|
870
|
+
changes: Partial<Pick<IdentityRow, CommonPatchFields | 'title' | 'titleSuffixes' | 'titleIcon' | 'secondaryTitleIcon' | 'subtitle' | 'subtitleLines' | 'contentHeight' | 'longPressActionKey' | 'tertiary' | 'tertiaryTone' | 'badges' | 'trailing' | 'leading' | 'leadingAction' | 'titleMatch' | 'titleActionKey' | 'titleActionOnHover' | 'subtitleSegments'>>;
|
|
779
871
|
}> | Readonly<{
|
|
780
872
|
type: 'rail';
|
|
781
873
|
key: string;
|
|
@@ -783,15 +875,15 @@ export type RowPatch = Readonly<{
|
|
|
783
875
|
}> | Readonly<{
|
|
784
876
|
type: 'activity';
|
|
785
877
|
key: string;
|
|
786
|
-
changes: Partial<Pick<ActivityRow, CommonPatchFields | 'title' | 'description' | 'status' | 'amounts' | 'badges' | 'presentation' | 'fee' | 'descriptionActionKey' | 'primaryAmount' | 'secondaryAmount' | 'leading' | 'secondaryLeading' | 'footerActions'>>;
|
|
878
|
+
changes: Partial<Pick<ActivityRow, CommonPatchFields | 'title' | 'description' | 'status' | 'amounts' | 'badges' | 'presentation' | 'fee' | 'descriptionActionKey' | 'primaryAmount' | 'secondaryAmount' | 'leading' | 'hideLeading' | 'secondaryLeading' | 'footerActions'>>;
|
|
787
879
|
}> | Readonly<{
|
|
788
880
|
type: 'message';
|
|
789
881
|
key: string;
|
|
790
|
-
changes: Partial<Pick<MessageRow, CommonPatchFields | 'unread' | 'title' | 'body' | 'bodyLines' | 'time' | 'thumbnail'>>;
|
|
882
|
+
changes: Partial<Pick<MessageRow, CommonPatchFields | 'unread' | 'title' | 'body' | 'bodyLines' | 'presentation' | 'time' | 'thumbnail'>>;
|
|
791
883
|
}> | Readonly<{
|
|
792
884
|
type: 'dataRow';
|
|
793
885
|
key: string;
|
|
794
|
-
changes: Partial<Pick<DataRow, CommonPatchFields | 'leading' | 'columns' | 'checkbox' | 'index' | 'badge' | 'badges' | 'favorite' | 'favoriteActive'>>;
|
|
886
|
+
changes: Partial<Pick<DataRow, CommonPatchFields | 'leading' | 'columns' | 'trailing' | 'checkbox' | 'index' | 'badge' | 'badges' | 'favorite' | 'favoriteActive'>>;
|
|
795
887
|
}> | Readonly<{
|
|
796
888
|
type: 'market';
|
|
797
889
|
key: string;
|
|
@@ -807,11 +899,15 @@ export type RowPatch = Readonly<{
|
|
|
807
899
|
}> | Readonly<{
|
|
808
900
|
type: 'sectionHeader';
|
|
809
901
|
key: string;
|
|
810
|
-
changes: Partial<Pick<SectionHeaderRow, CommonPatchFields | 'variant' | 'titleLoading' | 'title' | 'subtitle' | 'value' | 'valueActionKey' | 'titleActionKey' | 'titleActionOnHover' | 'titleIcon' | 'valueIcon' | 'checkbox'>>;
|
|
902
|
+
changes: Partial<Pick<SectionHeaderRow, CommonPatchFields | 'variant' | 'titleLoading' | 'title' | 'subtitle' | 'value' | 'valueHelp' | 'leadingBadge' | 'valueActionKey' | 'titleActionKey' | 'titleActionOnHover' | 'titleIcon' | 'valueIcon' | 'checkbox'>>;
|
|
811
903
|
}> | Readonly<{
|
|
812
904
|
type: 'action';
|
|
813
905
|
key: string;
|
|
814
906
|
changes: Partial<Pick<ActionRow, CommonPatchFields | 'title' | 'tone' | 'icon' | 'checkbox' | 'trailing'>>;
|
|
907
|
+
}> | Readonly<{
|
|
908
|
+
type: 'buttonGroup';
|
|
909
|
+
key: string;
|
|
910
|
+
changes: Partial<Pick<ButtonGroupRow, CommonPatchFields | 'buttons'>>;
|
|
815
911
|
}> | Readonly<{
|
|
816
912
|
type: 'system';
|
|
817
913
|
key: string;
|
|
@@ -821,7 +917,7 @@ export type RowPatch = Readonly<{
|
|
|
821
917
|
message?: string;
|
|
822
918
|
}>;
|
|
823
919
|
}>;
|
|
824
|
-
export type NativeListActionSource = 'row' | 'marketBadge' | 'leadingAction' | 'trailingAccessory' | 'footerAction' | 'description' | 'mediaClose';
|
|
920
|
+
export type NativeListActionSource = 'row' | 'marketBadge' | 'leadingAction' | 'trailingAccessory' | 'footerAction' | 'buttonGroup' | 'description' | 'mediaClose';
|
|
825
921
|
export type NativeListWindowRect = Readonly<{
|
|
826
922
|
x: number;
|
|
827
923
|
y: number;
|