react-native-nitro-modal 0.1.5 → 0.3.0-rc

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.
Files changed (99) hide show
  1. package/README.md +65 -11
  2. package/android/src/main/java/com/margelo/nitro/nitromodal/BottomSheetPresenter.kt +335 -34
  3. package/android/src/main/java/com/margelo/nitro/nitromodal/HybridNitroModal.kt +63 -22
  4. package/android/src/main/java/com/margelo/nitro/nitromodal/ModalConfig.kt +31 -1
  5. package/android/src/main/java/com/margelo/nitro/nitromodal/ModalContentRoot.kt +48 -5
  6. package/android/src/main/java/com/margelo/nitro/nitromodal/ModalPresenter.kt +63 -4
  7. package/android/src/main/java/com/margelo/nitro/nitromodal/NitroModalHostView.kt +68 -8
  8. package/ios/HybridNitroModal.swift +111 -20
  9. package/ios/ModalConfig.swift +44 -2
  10. package/ios/NitroModalHostView.swift +73 -8
  11. package/ios/SheetView.swift +575 -0
  12. package/ios/SheetViewController.swift +19 -450
  13. package/lib/module/NitroModal.js +39 -7
  14. package/lib/module/NitroModal.js.map +1 -1
  15. package/lib/module/NitroModalView.js +4 -3
  16. package/lib/module/NitroModalView.js.map +1 -1
  17. package/lib/module/NitroModalView.native.js +3 -0
  18. package/lib/module/NitroModalView.native.js.map +1 -1
  19. package/lib/module/NitroModalView.web.js +159 -0
  20. package/lib/module/NitroModalView.web.js.map +1 -0
  21. package/lib/module/index.js.map +1 -1
  22. package/lib/module/web/AnimatedValue.js +126 -0
  23. package/lib/module/web/AnimatedValue.js.map +1 -0
  24. package/lib/module/web/ModalConfig.js +30 -0
  25. package/lib/module/web/ModalConfig.js.map +1 -0
  26. package/lib/module/web/ModalController.js +306 -0
  27. package/lib/module/web/ModalController.js.map +1 -0
  28. package/lib/module/web/ModalPresenter.js +280 -0
  29. package/lib/module/web/ModalPresenter.js.map +1 -0
  30. package/lib/module/web/PopupPresenter.js +117 -0
  31. package/lib/module/web/PopupPresenter.js.map +1 -0
  32. package/lib/module/web/SheetPresenter.js +494 -0
  33. package/lib/module/web/SheetPresenter.js.map +1 -0
  34. package/lib/module/web/dom.js +138 -0
  35. package/lib/module/web/dom.js.map +1 -0
  36. package/lib/typescript/src/NitroModal.d.ts +35 -4
  37. package/lib/typescript/src/NitroModal.d.ts.map +1 -1
  38. package/lib/typescript/src/NitroModal.nitro.d.ts +29 -2
  39. package/lib/typescript/src/NitroModal.nitro.d.ts.map +1 -1
  40. package/lib/typescript/src/NitroModalView.d.ts +2 -1
  41. package/lib/typescript/src/NitroModalView.d.ts.map +1 -1
  42. package/lib/typescript/src/NitroModalView.native.d.ts +1 -0
  43. package/lib/typescript/src/NitroModalView.native.d.ts.map +1 -1
  44. package/lib/typescript/src/NitroModalView.web.d.ts +6 -0
  45. package/lib/typescript/src/NitroModalView.web.d.ts.map +1 -0
  46. package/lib/typescript/src/index.d.ts +2 -2
  47. package/lib/typescript/src/index.d.ts.map +1 -1
  48. package/lib/typescript/src/web/AnimatedValue.d.ts +49 -0
  49. package/lib/typescript/src/web/AnimatedValue.d.ts.map +1 -0
  50. package/lib/typescript/src/web/ModalConfig.d.ts +30 -0
  51. package/lib/typescript/src/web/ModalConfig.d.ts.map +1 -0
  52. package/lib/typescript/src/web/ModalController.d.ts +70 -0
  53. package/lib/typescript/src/web/ModalController.d.ts.map +1 -0
  54. package/lib/typescript/src/web/ModalPresenter.d.ts +107 -0
  55. package/lib/typescript/src/web/ModalPresenter.d.ts.map +1 -0
  56. package/lib/typescript/src/web/PopupPresenter.d.ts +20 -0
  57. package/lib/typescript/src/web/PopupPresenter.d.ts.map +1 -0
  58. package/lib/typescript/src/web/SheetPresenter.d.ts +65 -0
  59. package/lib/typescript/src/web/SheetPresenter.d.ts.map +1 -0
  60. package/lib/typescript/src/web/dom.d.ts +42 -0
  61. package/lib/typescript/src/web/dom.d.ts.map +1 -0
  62. package/nitrogen/generated/android/c++/JHybridNitroModalSpec.cpp +60 -6
  63. package/nitrogen/generated/android/c++/JHybridNitroModalSpec.hpp +10 -2
  64. package/nitrogen/generated/android/c++/JNamedSheetDetent.hpp +64 -0
  65. package/nitrogen/generated/android/c++/JSheetDetent.cpp +26 -0
  66. package/nitrogen/generated/android/c++/JSheetDetent.hpp +42 -37
  67. package/nitrogen/generated/android/c++/views/JHybridNitroModalStateUpdater.cpp +20 -0
  68. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromodal/HybridNitroModalSpec.kt +40 -0
  69. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromodal/NamedSheetDetent.kt +25 -0
  70. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromodal/SheetDetent.kt +47 -10
  71. package/nitrogen/generated/android/nitromodal+autolinking.cmake +1 -0
  72. package/nitrogen/generated/ios/NitroModal-Swift-Cxx-Bridge.hpp +53 -8
  73. package/nitrogen/generated/ios/NitroModal-Swift-Cxx-Umbrella.hpp +4 -3
  74. package/nitrogen/generated/ios/c++/HybridNitroModalSpecSwift.hpp +32 -5
  75. package/nitrogen/generated/ios/c++/views/HybridNitroModalComponent.mm +24 -0
  76. package/nitrogen/generated/ios/swift/HybridNitroModalSpec.swift +4 -0
  77. package/nitrogen/generated/ios/swift/HybridNitroModalSpec_cxx.swift +110 -5
  78. package/nitrogen/generated/ios/swift/NamedSheetDetent.swift +48 -0
  79. package/nitrogen/generated/ios/swift/SheetDetent.swift +15 -33
  80. package/nitrogen/generated/shared/c++/HybridNitroModalSpec.cpp +8 -0
  81. package/nitrogen/generated/shared/c++/HybridNitroModalSpec.hpp +14 -5
  82. package/nitrogen/generated/shared/c++/{SheetDetent.hpp → NamedSheetDetent.hpp} +17 -17
  83. package/nitrogen/generated/shared/c++/views/HybridNitroModalComponent.cpp +9 -1
  84. package/nitrogen/generated/shared/c++/views/HybridNitroModalComponent.hpp +15 -2
  85. package/nitrogen/generated/shared/json/NitroModalConfig.json +4 -0
  86. package/package.json +3 -2
  87. package/src/NitroModal.nitro.ts +30 -2
  88. package/src/NitroModal.tsx +71 -8
  89. package/src/NitroModalView.native.tsx +4 -0
  90. package/src/NitroModalView.tsx +9 -4
  91. package/src/NitroModalView.web.tsx +180 -0
  92. package/src/index.tsx +2 -0
  93. package/src/web/AnimatedValue.ts +193 -0
  94. package/src/web/ModalConfig.ts +67 -0
  95. package/src/web/ModalController.ts +338 -0
  96. package/src/web/ModalPresenter.ts +333 -0
  97. package/src/web/PopupPresenter.ts +129 -0
  98. package/src/web/SheetPresenter.ts +647 -0
  99. package/src/web/dom.ts +171 -0
@@ -7,19 +7,56 @@
7
7
 
8
8
  package com.margelo.nitro.nitromodal
9
9
 
10
- import androidx.annotation.Keep
11
10
  import com.facebook.proguard.annotations.DoNotStrip
12
11
 
12
+
13
13
  /**
14
- * Represents the JavaScript enum/union "SheetDetent".
14
+ * Represents the TypeScript variant "NamedSheetDetent | Double".
15
15
  */
16
+ @Suppress("ClassName")
16
17
  @DoNotStrip
17
- @Keep
18
- enum class SheetDetent(@DoNotStrip @Keep val value: Int) {
19
- SMALL(0),
20
- MEDIUM(1),
21
- LARGE(2),
22
- FITCONTENT(3);
23
-
24
- companion object
18
+ sealed class SheetDetent {
19
+ @DoNotStrip
20
+ data class First(@DoNotStrip val value: NamedSheetDetent): SheetDetent()
21
+ @DoNotStrip
22
+ data class Second(@DoNotStrip val value: Double): SheetDetent()
23
+
24
+ inline fun <reified T> asType(): T? {
25
+ return when (this) {
26
+ is First -> (value) as? T
27
+ is Second -> (value) as? T
28
+ }
29
+ }
30
+ inline fun <reified T> isType(): Boolean {
31
+ return asType<T>() != null
32
+ }
33
+ inline fun <R> match(first: (NamedSheetDetent) -> R, second: (Double) -> R): R {
34
+ return when (this) {
35
+ is First -> first(value)
36
+ is Second -> second(value)
37
+ }
38
+ }
39
+
40
+ val isFirst: Boolean
41
+ get() = this is First
42
+ val isSecond: Boolean
43
+ get() = this is Second
44
+
45
+ fun asFirstOrNull(): NamedSheetDetent? {
46
+ val value = (this as? First)?.value ?: return null
47
+ return value
48
+ }
49
+ fun asSecondOrNull(): Double? {
50
+ val value = (this as? Second)?.value ?: return null
51
+ return value
52
+ }
53
+
54
+ companion object {
55
+ @JvmStatic
56
+ @DoNotStrip
57
+ fun create(value: NamedSheetDetent): SheetDetent = First(value)
58
+ @JvmStatic
59
+ @DoNotStrip
60
+ fun create(value: Double): SheetDetent = Second(value)
61
+ }
25
62
  }
@@ -37,6 +37,7 @@ target_sources(
37
37
  ../nitrogen/generated/shared/c++/views/HybridNitroModalComponent.cpp
38
38
  # Android-specific Nitrogen C++ sources
39
39
  ../nitrogen/generated/android/c++/JHybridNitroModalSpec.cpp
40
+ ../nitrogen/generated/android/c++/JSheetDetent.cpp
40
41
  ../nitrogen/generated/android/c++/views/JHybridNitroModalStateUpdater.cpp
41
42
  )
42
43
 
@@ -14,8 +14,8 @@ namespace margelo::nitro::nitromodal { enum class DismissReason; }
14
14
  namespace margelo::nitro::nitromodal { class HybridNitroModalSpec; }
15
15
  // Forward declaration of `ModalContentArea` to properly resolve imports.
16
16
  namespace margelo::nitro::nitromodal { struct ModalContentArea; }
17
- // Forward declaration of `SheetDetent` to properly resolve imports.
18
- namespace margelo::nitro::nitromodal { enum class SheetDetent; }
17
+ // Forward declaration of `NamedSheetDetent` to properly resolve imports.
18
+ namespace margelo::nitro::nitromodal { enum class NamedSheetDetent; }
19
19
 
20
20
  // Forward declarations of Swift defined types
21
21
  // Forward declaration of `HybridNitroModalSpec_cxx` to properly resolve imports.
@@ -25,12 +25,13 @@ namespace NitroModal { class HybridNitroModalSpec_cxx; }
25
25
  #include "DismissReason.hpp"
26
26
  #include "HybridNitroModalSpec.hpp"
27
27
  #include "ModalContentArea.hpp"
28
- #include "SheetDetent.hpp"
28
+ #include "NamedSheetDetent.hpp"
29
29
  #include <NitroModules/Result.hpp>
30
30
  #include <exception>
31
31
  #include <functional>
32
32
  #include <memory>
33
33
  #include <optional>
34
+ #include <variant>
34
35
  #include <vector>
35
36
 
36
37
  /**
@@ -39,13 +40,42 @@ namespace NitroModal { class HybridNitroModalSpec_cxx; }
39
40
  */
40
41
  namespace margelo::nitro::nitromodal::bridge::swift {
41
42
 
42
- // pragma MARK: std::vector<SheetDetent>
43
+ // pragma MARK: std::variant<NamedSheetDetent, double>
43
44
  /**
44
- * Specialized version of `std::vector<SheetDetent>`.
45
+ * Wrapper struct for `std::variant<NamedSheetDetent, double>`.
46
+ * std::variant cannot be used in Swift because of a Swift bug.
47
+ * Not even specializing it works. So we create a wrapper struct.
45
48
  */
46
- using std__vector_SheetDetent_ = std::vector<SheetDetent>;
47
- inline std::vector<SheetDetent> create_std__vector_SheetDetent_(size_t size) noexcept {
48
- std::vector<SheetDetent> vector;
49
+ struct std__variant_NamedSheetDetent__double_ final {
50
+ std::variant<NamedSheetDetent, double> variant;
51
+ std__variant_NamedSheetDetent__double_(std::variant<NamedSheetDetent, double> variant): variant(variant) { }
52
+ operator std::variant<NamedSheetDetent, double>() const noexcept {
53
+ return variant;
54
+ }
55
+ inline size_t index() const noexcept {
56
+ return variant.index();
57
+ }
58
+ inline NamedSheetDetent get_0() const noexcept {
59
+ return std::get<0>(variant);
60
+ }
61
+ inline double get_1() const noexcept {
62
+ return std::get<1>(variant);
63
+ }
64
+ };
65
+ inline std__variant_NamedSheetDetent__double_ create_std__variant_NamedSheetDetent__double_(NamedSheetDetent value) noexcept {
66
+ return std__variant_NamedSheetDetent__double_(value);
67
+ }
68
+ inline std__variant_NamedSheetDetent__double_ create_std__variant_NamedSheetDetent__double_(double value) noexcept {
69
+ return std__variant_NamedSheetDetent__double_(value);
70
+ }
71
+
72
+ // pragma MARK: std::vector<std::variant<NamedSheetDetent, double>>
73
+ /**
74
+ * Specialized version of `std::vector<std::variant<NamedSheetDetent, double>>`.
75
+ */
76
+ using std__vector_std__variant_NamedSheetDetent__double__ = std::vector<std::variant<NamedSheetDetent, double>>;
77
+ inline std::vector<std::variant<NamedSheetDetent, double>> create_std__vector_std__variant_NamedSheetDetent__double__(size_t size) noexcept {
78
+ std::vector<std::variant<NamedSheetDetent, double>> vector;
49
79
  vector.reserve(size);
50
80
  return vector;
51
81
  }
@@ -213,6 +243,21 @@ namespace margelo::nitro::nitromodal::bridge::swift {
213
243
  return optional.value();
214
244
  }
215
245
 
246
+ // pragma MARK: std::optional<std::function<void(double /* top */)>>
247
+ /**
248
+ * Specialized version of `std::optional<std::function<void(double / * top * /)>>`.
249
+ */
250
+ using std__optional_std__function_void_double____top______ = std::optional<std::function<void(double /* top */)>>;
251
+ inline std::optional<std::function<void(double /* top */)>> create_std__optional_std__function_void_double____top______(const std::function<void(double /* top */)>& value) noexcept {
252
+ return std::optional<std::function<void(double /* top */)>>(value);
253
+ }
254
+ inline bool has_value_std__optional_std__function_void_double____top______(const std::optional<std::function<void(double /* top */)>>& optional) noexcept {
255
+ return optional.has_value();
256
+ }
257
+ inline std::function<void(double /* top */)> get_std__optional_std__function_void_double____top______(const std::optional<std::function<void(double /* top */)>>& optional) noexcept {
258
+ return optional.value();
259
+ }
260
+
216
261
  // pragma MARK: std::shared_ptr<HybridNitroModalSpec>
217
262
  /**
218
263
  * Specialized version of `std::shared_ptr<HybridNitroModalSpec>`.
@@ -18,10 +18,10 @@ namespace margelo::nitro::nitromodal { enum class KeyboardBehavior; }
18
18
  namespace margelo::nitro::nitromodal { struct ModalContentArea; }
19
19
  // Forward declaration of `ModalMode` to properly resolve imports.
20
20
  namespace margelo::nitro::nitromodal { enum class ModalMode; }
21
+ // Forward declaration of `NamedSheetDetent` to properly resolve imports.
22
+ namespace margelo::nitro::nitromodal { enum class NamedSheetDetent; }
21
23
  // Forward declaration of `PopupAnimation` to properly resolve imports.
22
24
  namespace margelo::nitro::nitromodal { enum class PopupAnimation; }
23
- // Forward declaration of `SheetDetent` to properly resolve imports.
24
- namespace margelo::nitro::nitromodal { enum class SheetDetent; }
25
25
 
26
26
  // Include C++ defined types
27
27
  #include "DismissReason.hpp"
@@ -29,13 +29,14 @@ namespace margelo::nitro::nitromodal { enum class SheetDetent; }
29
29
  #include "KeyboardBehavior.hpp"
30
30
  #include "ModalContentArea.hpp"
31
31
  #include "ModalMode.hpp"
32
+ #include "NamedSheetDetent.hpp"
32
33
  #include "PopupAnimation.hpp"
33
- #include "SheetDetent.hpp"
34
34
  #include <NitroModules/Result.hpp>
35
35
  #include <exception>
36
36
  #include <functional>
37
37
  #include <memory>
38
38
  #include <optional>
39
+ #include <variant>
39
40
  #include <vector>
40
41
 
41
42
  // C++ helpers for Swift
@@ -14,8 +14,8 @@ namespace NitroModal { class HybridNitroModalSpec_cxx; }
14
14
 
15
15
  // Forward declaration of `ModalMode` to properly resolve imports.
16
16
  namespace margelo::nitro::nitromodal { enum class ModalMode; }
17
- // Forward declaration of `SheetDetent` to properly resolve imports.
18
- namespace margelo::nitro::nitromodal { enum class SheetDetent; }
17
+ // Forward declaration of `NamedSheetDetent` to properly resolve imports.
18
+ namespace margelo::nitro::nitromodal { enum class NamedSheetDetent; }
19
19
  // Forward declaration of `KeyboardBehavior` to properly resolve imports.
20
20
  namespace margelo::nitro::nitromodal { enum class KeyboardBehavior; }
21
21
  // Forward declaration of `PopupAnimation` to properly resolve imports.
@@ -26,7 +26,8 @@ namespace margelo::nitro::nitromodal { enum class DismissReason; }
26
26
  namespace margelo::nitro::nitromodal { struct ModalContentArea; }
27
27
 
28
28
  #include "ModalMode.hpp"
29
- #include "SheetDetent.hpp"
29
+ #include "NamedSheetDetent.hpp"
30
+ #include <variant>
30
31
  #include <vector>
31
32
  #include <optional>
32
33
  #include "KeyboardBehavior.hpp"
@@ -94,11 +95,17 @@ namespace margelo::nitro::nitromodal {
94
95
  inline void setMode(ModalMode mode) noexcept override {
95
96
  _swiftPart.setMode(static_cast<int>(mode));
96
97
  }
97
- inline std::vector<SheetDetent> getDetents() noexcept override {
98
+ inline bool getIsInline() noexcept override {
99
+ return _swiftPart.isInline();
100
+ }
101
+ inline void setIsInline(bool isInline) noexcept override {
102
+ _swiftPart.setIsInline(std::forward<decltype(isInline)>(isInline));
103
+ }
104
+ inline std::vector<std::variant<NamedSheetDetent, double>> getDetents() noexcept override {
98
105
  auto __result = _swiftPart.getDetents();
99
106
  return __result;
100
107
  }
101
- inline void setDetents(const std::vector<SheetDetent>& detents) noexcept override {
108
+ inline void setDetents(const std::vector<std::variant<NamedSheetDetent, double>>& detents) noexcept override {
102
109
  _swiftPart.setDetents(detents);
103
110
  }
104
111
  inline double getInitialDetentIndex() noexcept override {
@@ -176,6 +183,12 @@ namespace margelo::nitro::nitromodal {
176
183
  inline void setPopupAnimation(PopupAnimation popupAnimation) noexcept override {
177
184
  _swiftPart.setPopupAnimation(static_cast<int>(popupAnimation));
178
185
  }
186
+ inline bool getPullToRefreshEnabled() noexcept override {
187
+ return _swiftPart.getPullToRefreshEnabled();
188
+ }
189
+ inline void setPullToRefreshEnabled(bool pullToRefreshEnabled) noexcept override {
190
+ _swiftPart.setPullToRefreshEnabled(std::forward<decltype(pullToRefreshEnabled)>(pullToRefreshEnabled));
191
+ }
179
192
  inline std::optional<std::function<void()>> getOnPresent() noexcept override {
180
193
  auto __result = _swiftPart.getOnPresent();
181
194
  return __result;
@@ -218,6 +231,20 @@ namespace margelo::nitro::nitromodal {
218
231
  inline void setOnContentAreaChange(const std::optional<std::function<void(const ModalContentArea& /* area */)>>& onContentAreaChange) noexcept override {
219
232
  _swiftPart.setOnContentAreaChange(onContentAreaChange);
220
233
  }
234
+ inline std::optional<std::function<void()>> getOnPullToRefresh() noexcept override {
235
+ auto __result = _swiftPart.getOnPullToRefresh();
236
+ return __result;
237
+ }
238
+ inline void setOnPullToRefresh(const std::optional<std::function<void()>>& onPullToRefresh) noexcept override {
239
+ _swiftPart.setOnPullToRefresh(onPullToRefresh);
240
+ }
241
+ inline std::optional<std::function<void(double /* top */)>> getOnRestingTopChange() noexcept override {
242
+ auto __result = _swiftPart.getOnRestingTopChange();
243
+ return __result;
244
+ }
245
+ inline void setOnRestingTopChange(const std::optional<std::function<void(double /* top */)>>& onRestingTopChange) noexcept override {
246
+ _swiftPart.setOnRestingTopChange(onRestingTopChange);
247
+ }
221
248
 
222
249
  public:
223
250
  // Methods
@@ -110,6 +110,12 @@ using namespace margelo::nitro::nitromodal::views;
110
110
  : !newViewProps.mode.hasSameValue(oldViewProps->mode)) {
111
111
  swiftPart.setMode(static_cast<int>(newViewProps.mode.get()));
112
112
  }
113
+ // isInline: boolean
114
+ if (oldViewProps == nullptr
115
+ ? newViewProps.isInline.isProvided()
116
+ : !newViewProps.isInline.hasSameValue(oldViewProps->isInline)) {
117
+ swiftPart.setIsInline(newViewProps.isInline.get());
118
+ }
113
119
  // detents: array
114
120
  if (oldViewProps == nullptr
115
121
  ? newViewProps.detents.isProvided()
@@ -188,6 +194,12 @@ using namespace margelo::nitro::nitromodal::views;
188
194
  : !newViewProps.popupAnimation.hasSameValue(oldViewProps->popupAnimation)) {
189
195
  swiftPart.setPopupAnimation(static_cast<int>(newViewProps.popupAnimation.get()));
190
196
  }
197
+ // pullToRefreshEnabled: boolean
198
+ if (oldViewProps == nullptr
199
+ ? newViewProps.pullToRefreshEnabled.isProvided()
200
+ : !newViewProps.pullToRefreshEnabled.hasSameValue(oldViewProps->pullToRefreshEnabled)) {
201
+ swiftPart.setPullToRefreshEnabled(newViewProps.pullToRefreshEnabled.get());
202
+ }
191
203
  // onPresent: optional
192
204
  if (oldViewProps == nullptr
193
205
  ? newViewProps.onPresent.isProvided()
@@ -224,6 +236,18 @@ using namespace margelo::nitro::nitromodal::views;
224
236
  : !newViewProps.onContentAreaChange.hasSameValue(oldViewProps->onContentAreaChange)) {
225
237
  swiftPart.setOnContentAreaChange(newViewProps.onContentAreaChange.get());
226
238
  }
239
+ // onPullToRefresh: optional
240
+ if (oldViewProps == nullptr
241
+ ? newViewProps.onPullToRefresh.isProvided()
242
+ : !newViewProps.onPullToRefresh.hasSameValue(oldViewProps->onPullToRefresh)) {
243
+ swiftPart.setOnPullToRefresh(newViewProps.onPullToRefresh.get());
244
+ }
245
+ // onRestingTopChange: optional
246
+ if (oldViewProps == nullptr
247
+ ? newViewProps.onRestingTopChange.isProvided()
248
+ : !newViewProps.onRestingTopChange.hasSameValue(oldViewProps->onRestingTopChange)) {
249
+ swiftPart.setOnRestingTopChange(newViewProps.onRestingTopChange.get());
250
+ }
227
251
 
228
252
  // Update hybridRef if it changed
229
253
  if (oldViewProps == nullptr
@@ -12,6 +12,7 @@ public protocol HybridNitroModalSpec_protocol: HybridObject, HybridView {
12
12
  // Properties
13
13
  var isOpen: Bool { get set }
14
14
  var mode: ModalMode { get set }
15
+ var isInline: Bool { get set }
15
16
  var detents: [SheetDetent] { get set }
16
17
  var initialDetentIndex: Double { get set }
17
18
  var backdropColor: Double { get set }
@@ -25,12 +26,15 @@ public protocol HybridNitroModalSpec_protocol: HybridObject, HybridView {
25
26
  var contentBackgroundColor: Double? { get set }
26
27
  var keyboardBehavior: KeyboardBehavior { get set }
27
28
  var popupAnimation: PopupAnimation { get set }
29
+ var pullToRefreshEnabled: Bool { get set }
28
30
  var onPresent: (() -> Void)? { get set }
29
31
  var onDismiss: ((_ reason: DismissReason) -> Void)? { get set }
30
32
  var onDetentChange: ((_ index: Double) -> Void)? { get set }
31
33
  var onBackdropPress: (() -> Void)? { get set }
32
34
  var onBackButtonPress: (() -> Void)? { get set }
33
35
  var onContentAreaChange: ((_ area: ModalContentArea) -> Void)? { get set }
36
+ var onPullToRefresh: (() -> Void)? { get set }
37
+ var onRestingTopChange: ((_ top: Double) -> Void)? { get set }
34
38
 
35
39
  // Methods
36
40
  func present() throws -> Void
@@ -143,20 +143,50 @@ open class HybridNitroModalSpec_cxx {
143
143
  }
144
144
  }
145
145
 
146
- public final var detents: bridge.std__vector_SheetDetent_ {
146
+ public final var isInline: Bool {
147
147
  @inline(__always)
148
148
  get {
149
- return { () -> bridge.std__vector_SheetDetent_ in
150
- var __vector = bridge.create_std__vector_SheetDetent_(self.__implementation.detents.count)
149
+ return self.__implementation.isInline
150
+ }
151
+ @inline(__always)
152
+ set {
153
+ self.__implementation.isInline = newValue
154
+ }
155
+ }
156
+
157
+ public final var detents: bridge.std__vector_std__variant_NamedSheetDetent__double__ {
158
+ @inline(__always)
159
+ get {
160
+ return { () -> bridge.std__vector_std__variant_NamedSheetDetent__double__ in
161
+ var __vector = bridge.create_std__vector_std__variant_NamedSheetDetent__double__(self.__implementation.detents.count)
151
162
  for __item in self.__implementation.detents {
152
- __vector.push_back(__item)
163
+ __vector.push_back({ () -> bridge.std__variant_NamedSheetDetent__double_ in
164
+ switch __item {
165
+ case .first(let __value):
166
+ return bridge.create_std__variant_NamedSheetDetent__double_(__value)
167
+ case .second(let __value):
168
+ return bridge.create_std__variant_NamedSheetDetent__double_(__value)
169
+ }
170
+ }().variant)
153
171
  }
154
172
  return __vector
155
173
  }()
156
174
  }
157
175
  @inline(__always)
158
176
  set {
159
- self.__implementation.detents = newValue.map({ __item in __item })
177
+ self.__implementation.detents = newValue.map({ __item in { () -> SheetDetent in
178
+ let __variant = bridge.std__variant_NamedSheetDetent__double_(__item)
179
+ switch __variant.index() {
180
+ case 0:
181
+ let __actual = __variant.get_0()
182
+ return .first(__actual)
183
+ case 1:
184
+ let __actual = __variant.get_1()
185
+ return .second(__actual)
186
+ default:
187
+ fatalError("Variant can never have index \(__variant.index())!")
188
+ }
189
+ }() })
160
190
  }
161
191
  }
162
192
 
@@ -305,6 +335,17 @@ open class HybridNitroModalSpec_cxx {
305
335
  }
306
336
  }
307
337
 
338
+ public final var pullToRefreshEnabled: Bool {
339
+ @inline(__always)
340
+ get {
341
+ return self.__implementation.pullToRefreshEnabled
342
+ }
343
+ @inline(__always)
344
+ set {
345
+ self.__implementation.pullToRefreshEnabled = newValue
346
+ }
347
+ }
348
+
308
349
  public final var onPresent: bridge.std__optional_std__function_void____ {
309
350
  @inline(__always)
310
351
  get {
@@ -496,6 +537,70 @@ open class HybridNitroModalSpec_cxx {
496
537
  }()
497
538
  }
498
539
  }
540
+
541
+ public final var onPullToRefresh: bridge.std__optional_std__function_void____ {
542
+ @inline(__always)
543
+ get {
544
+ return { () -> bridge.std__optional_std__function_void____ in
545
+ if let __unwrappedValue = self.__implementation.onPullToRefresh {
546
+ return bridge.create_std__optional_std__function_void____({ () -> bridge.Func_void in
547
+ let __closureWrapper = Func_void(__unwrappedValue)
548
+ return bridge.create_Func_void(__closureWrapper.toUnsafe())
549
+ }())
550
+ } else {
551
+ return .init()
552
+ }
553
+ }()
554
+ }
555
+ @inline(__always)
556
+ set {
557
+ self.__implementation.onPullToRefresh = { () -> (() -> Void)? in
558
+ if bridge.has_value_std__optional_std__function_void____(newValue) {
559
+ let __unwrapped = bridge.get_std__optional_std__function_void____(newValue)
560
+ return { () -> () -> Void in
561
+ let __wrappedFunction = bridge.wrap_Func_void(__unwrapped)
562
+ return { () -> Void in
563
+ __wrappedFunction.call()
564
+ }
565
+ }()
566
+ } else {
567
+ return nil
568
+ }
569
+ }()
570
+ }
571
+ }
572
+
573
+ public final var onRestingTopChange: bridge.std__optional_std__function_void_double____top______ {
574
+ @inline(__always)
575
+ get {
576
+ return { () -> bridge.std__optional_std__function_void_double____top______ in
577
+ if let __unwrappedValue = self.__implementation.onRestingTopChange {
578
+ return bridge.create_std__optional_std__function_void_double____top______({ () -> bridge.Func_void_double in
579
+ let __closureWrapper = Func_void_double(__unwrappedValue)
580
+ return bridge.create_Func_void_double(__closureWrapper.toUnsafe())
581
+ }())
582
+ } else {
583
+ return .init()
584
+ }
585
+ }()
586
+ }
587
+ @inline(__always)
588
+ set {
589
+ self.__implementation.onRestingTopChange = { () -> ((_ top: Double) -> Void)? in
590
+ if bridge.has_value_std__optional_std__function_void_double____top______(newValue) {
591
+ let __unwrapped = bridge.get_std__optional_std__function_void_double____top______(newValue)
592
+ return { () -> (Double) -> Void in
593
+ let __wrappedFunction = bridge.wrap_Func_void_double(__unwrapped)
594
+ return { (__top: Double) -> Void in
595
+ __wrappedFunction.call(__top)
596
+ }
597
+ }()
598
+ } else {
599
+ return nil
600
+ }
601
+ }()
602
+ }
603
+ }
499
604
 
500
605
  // Methods
501
606
  @inline(__always)
@@ -0,0 +1,48 @@
1
+ ///
2
+ /// NamedSheetDetent.swift
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ /**
9
+ * Represents the JS union `NamedSheetDetent`, backed by a C++ enum.
10
+ */
11
+ public typealias NamedSheetDetent = margelo.nitro.nitromodal.NamedSheetDetent
12
+
13
+ public extension NamedSheetDetent {
14
+ /**
15
+ * Get a NamedSheetDetent for the given String value, or
16
+ * return `nil` if the given value was invalid/unknown.
17
+ */
18
+ init?(fromString string: String) {
19
+ switch string {
20
+ case "small":
21
+ self = .small
22
+ case "medium":
23
+ self = .medium
24
+ case "large":
25
+ self = .large
26
+ case "fitContent":
27
+ self = .fitcontent
28
+ default:
29
+ return nil
30
+ }
31
+ }
32
+
33
+ /**
34
+ * Get the String value this NamedSheetDetent represents.
35
+ */
36
+ var stringValue: String {
37
+ switch self {
38
+ case .small:
39
+ return "small"
40
+ case .medium:
41
+ return "medium"
42
+ case .large:
43
+ return "large"
44
+ case .fitcontent:
45
+ return "fitContent"
46
+ }
47
+ }
48
+ }
@@ -5,44 +5,26 @@
5
5
  /// Copyright © Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
+
9
+
8
10
  /**
9
- * Represents the JS union `SheetDetent`, backed by a C++ enum.
11
+ * An Swift enum with associated values representing a Variant/Union type.
12
+ * JS type: `enum | number`
10
13
  */
11
- public typealias SheetDetent = margelo.nitro.nitromodal.SheetDetent
14
+ @frozen
15
+ public indirect enum SheetDetent {
16
+ case first(NamedSheetDetent)
17
+ case second(Double)
18
+ }
12
19
 
13
20
  public extension SheetDetent {
14
- /**
15
- * Get a SheetDetent for the given String value, or
16
- * return `nil` if the given value was invalid/unknown.
17
- */
18
- init?(fromString string: String) {
19
- switch string {
20
- case "small":
21
- self = .small
22
- case "medium":
23
- self = .medium
24
- case "large":
25
- self = .large
26
- case "fitContent":
27
- self = .fitcontent
28
- default:
29
- return nil
30
- }
31
- }
32
-
33
- /**
34
- * Get the String value this SheetDetent represents.
35
- */
36
- var stringValue: String {
21
+ func asType<T>(_ type: T.Type = T.self) -> T? {
37
22
  switch self {
38
- case .small:
39
- return "small"
40
- case .medium:
41
- return "medium"
42
- case .large:
43
- return "large"
44
- case .fitcontent:
45
- return "fitContent"
23
+ case .first(let value): return value as? T
24
+ case .second(let value): return value as? T
46
25
  }
47
26
  }
27
+ func isType<T>(_ type: T.Type = T.self) -> Bool {
28
+ return self.asType(type) != nil
29
+ }
48
30
  }
@@ -18,6 +18,8 @@ namespace margelo::nitro::nitromodal {
18
18
  prototype.registerHybridSetter("isOpen", &HybridNitroModalSpec::setIsOpen);
19
19
  prototype.registerHybridGetter("mode", &HybridNitroModalSpec::getMode);
20
20
  prototype.registerHybridSetter("mode", &HybridNitroModalSpec::setMode);
21
+ prototype.registerHybridGetter("isInline", &HybridNitroModalSpec::getIsInline);
22
+ prototype.registerHybridSetter("isInline", &HybridNitroModalSpec::setIsInline);
21
23
  prototype.registerHybridGetter("detents", &HybridNitroModalSpec::getDetents);
22
24
  prototype.registerHybridSetter("detents", &HybridNitroModalSpec::setDetents);
23
25
  prototype.registerHybridGetter("initialDetentIndex", &HybridNitroModalSpec::getInitialDetentIndex);
@@ -44,6 +46,8 @@ namespace margelo::nitro::nitromodal {
44
46
  prototype.registerHybridSetter("keyboardBehavior", &HybridNitroModalSpec::setKeyboardBehavior);
45
47
  prototype.registerHybridGetter("popupAnimation", &HybridNitroModalSpec::getPopupAnimation);
46
48
  prototype.registerHybridSetter("popupAnimation", &HybridNitroModalSpec::setPopupAnimation);
49
+ prototype.registerHybridGetter("pullToRefreshEnabled", &HybridNitroModalSpec::getPullToRefreshEnabled);
50
+ prototype.registerHybridSetter("pullToRefreshEnabled", &HybridNitroModalSpec::setPullToRefreshEnabled);
47
51
  prototype.registerHybridGetter("onPresent", &HybridNitroModalSpec::getOnPresent);
48
52
  prototype.registerHybridSetter("onPresent", &HybridNitroModalSpec::setOnPresent);
49
53
  prototype.registerHybridGetter("onDismiss", &HybridNitroModalSpec::getOnDismiss);
@@ -56,6 +60,10 @@ namespace margelo::nitro::nitromodal {
56
60
  prototype.registerHybridSetter("onBackButtonPress", &HybridNitroModalSpec::setOnBackButtonPress);
57
61
  prototype.registerHybridGetter("onContentAreaChange", &HybridNitroModalSpec::getOnContentAreaChange);
58
62
  prototype.registerHybridSetter("onContentAreaChange", &HybridNitroModalSpec::setOnContentAreaChange);
63
+ prototype.registerHybridGetter("onPullToRefresh", &HybridNitroModalSpec::getOnPullToRefresh);
64
+ prototype.registerHybridSetter("onPullToRefresh", &HybridNitroModalSpec::setOnPullToRefresh);
65
+ prototype.registerHybridGetter("onRestingTopChange", &HybridNitroModalSpec::getOnRestingTopChange);
66
+ prototype.registerHybridSetter("onRestingTopChange", &HybridNitroModalSpec::setOnRestingTopChange);
59
67
  prototype.registerHybridMethod("present", &HybridNitroModalSpec::present);
60
68
  prototype.registerHybridMethod("dismiss", &HybridNitroModalSpec::dismiss);
61
69
  prototype.registerHybridMethod("snapToDetent", &HybridNitroModalSpec::snapToDetent);