aix 0.1.0 → 0.3.0

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 (76) hide show
  1. package/README.md +32 -1
  2. package/ios/HybridAix.swift +96 -14
  3. package/ios/HybridAixComposer.swift +63 -24
  4. package/lib/commonjs/aix.js +16 -1
  5. package/lib/commonjs/aix.js.map +1 -1
  6. package/lib/commonjs/hooks/useContentInsetHandler.js +30 -0
  7. package/lib/commonjs/hooks/useContentInsetHandler.js.map +1 -0
  8. package/lib/commonjs/index.js +9 -1
  9. package/lib/commonjs/index.js.map +1 -1
  10. package/lib/module/aix.js +16 -1
  11. package/lib/module/aix.js.map +1 -1
  12. package/lib/module/hooks/useContentInsetHandler.js +26 -0
  13. package/lib/module/hooks/useContentInsetHandler.js.map +1 -0
  14. package/lib/module/index.js +1 -0
  15. package/lib/module/index.js.map +1 -1
  16. package/lib/typescript/src/aix.d.ts +239 -11
  17. package/lib/typescript/src/aix.d.ts.map +1 -1
  18. package/lib/typescript/src/hooks/useContentInsetHandler.d.ts +21 -0
  19. package/lib/typescript/src/hooks/useContentInsetHandler.d.ts.map +1 -0
  20. package/lib/typescript/src/index.d.ts +2 -0
  21. package/lib/typescript/src/index.d.ts.map +1 -1
  22. package/lib/typescript/src/views/aix.nitro.d.ts +44 -0
  23. package/lib/typescript/src/views/aix.nitro.d.ts.map +1 -1
  24. package/nitrogen/generated/android/AixOnLoad.cpp +4 -0
  25. package/nitrogen/generated/android/c++/JAixContentInsets.hpp +69 -0
  26. package/nitrogen/generated/android/c++/JAixStickToKeyboard.hpp +63 -0
  27. package/nitrogen/generated/android/c++/JAixStickToKeyboardOffset.hpp +61 -0
  28. package/nitrogen/generated/android/c++/JFunc_void_AixContentInsets.hpp +78 -0
  29. package/nitrogen/generated/android/c++/JFunc_void_bool.hpp +75 -0
  30. package/nitrogen/generated/android/c++/JHybridAixComposerSpec.cpp +18 -3
  31. package/nitrogen/generated/android/c++/JHybridAixComposerSpec.hpp +2 -1
  32. package/nitrogen/generated/android/c++/JHybridAixSpec.cpp +51 -0
  33. package/nitrogen/generated/android/c++/JHybridAixSpec.hpp +6 -0
  34. package/nitrogen/generated/android/c++/views/JHybridAixComposerStateUpdater.cpp +4 -1
  35. package/nitrogen/generated/android/c++/views/JHybridAixStateUpdater.cpp +12 -0
  36. package/nitrogen/generated/android/kotlin/com/margelo/nitro/aix/AixContentInsets.kt +47 -0
  37. package/nitrogen/generated/android/kotlin/com/margelo/nitro/aix/AixStickToKeyboard.kt +41 -0
  38. package/nitrogen/generated/android/kotlin/com/margelo/nitro/aix/AixStickToKeyboardOffset.kt +41 -0
  39. package/nitrogen/generated/android/kotlin/com/margelo/nitro/aix/Func_void_AixContentInsets.kt +80 -0
  40. package/nitrogen/generated/android/kotlin/com/margelo/nitro/aix/Func_void_bool.kt +80 -0
  41. package/nitrogen/generated/android/kotlin/com/margelo/nitro/aix/HybridAixComposerSpec.kt +5 -1
  42. package/nitrogen/generated/android/kotlin/com/margelo/nitro/aix/HybridAixSpec.kt +34 -0
  43. package/nitrogen/generated/ios/Aix-Swift-Cxx-Bridge.cpp +16 -0
  44. package/nitrogen/generated/ios/Aix-Swift-Cxx-Bridge.hpp +114 -0
  45. package/nitrogen/generated/ios/Aix-Swift-Cxx-Umbrella.hpp +10 -0
  46. package/nitrogen/generated/ios/c++/HybridAixComposerSpecSwift.hpp +14 -3
  47. package/nitrogen/generated/ios/c++/HybridAixSpecSwift.hpp +25 -0
  48. package/nitrogen/generated/ios/c++/views/HybridAixComponent.mm +15 -0
  49. package/nitrogen/generated/ios/c++/views/HybridAixComposerComponent.mm +5 -1
  50. package/nitrogen/generated/ios/swift/AixContentInsets.swift +117 -0
  51. package/nitrogen/generated/ios/swift/AixStickToKeyboard.swift +59 -0
  52. package/nitrogen/generated/ios/swift/AixStickToKeyboardOffset.swift +47 -0
  53. package/nitrogen/generated/ios/swift/Func_void_AixContentInsets.swift +47 -0
  54. package/nitrogen/generated/ios/swift/Func_void_bool.swift +47 -0
  55. package/nitrogen/generated/ios/swift/HybridAixComposerSpec.swift +1 -1
  56. package/nitrogen/generated/ios/swift/HybridAixComposerSpec_cxx.swift +16 -1
  57. package/nitrogen/generated/ios/swift/HybridAixSpec.swift +3 -0
  58. package/nitrogen/generated/ios/swift/HybridAixSpec_cxx.swift +88 -0
  59. package/nitrogen/generated/shared/c++/AixContentInsets.hpp +87 -0
  60. package/nitrogen/generated/shared/c++/AixStickToKeyboard.hpp +81 -0
  61. package/nitrogen/generated/shared/c++/AixStickToKeyboardOffset.hpp +79 -0
  62. package/nitrogen/generated/shared/c++/HybridAixComposerSpec.cpp +2 -1
  63. package/nitrogen/generated/shared/c++/HybridAixComposerSpec.hpp +6 -3
  64. package/nitrogen/generated/shared/c++/HybridAixSpec.cpp +6 -0
  65. package/nitrogen/generated/shared/c++/HybridAixSpec.hpp +10 -0
  66. package/nitrogen/generated/shared/c++/views/HybridAixComponent.cpp +36 -0
  67. package/nitrogen/generated/shared/c++/views/HybridAixComponent.hpp +5 -1
  68. package/nitrogen/generated/shared/c++/views/HybridAixComposerComponent.cpp +12 -0
  69. package/nitrogen/generated/shared/c++/views/HybridAixComposerComponent.hpp +3 -1
  70. package/nitrogen/generated/shared/json/AixComposerConfig.json +1 -0
  71. package/nitrogen/generated/shared/json/AixConfig.json +3 -0
  72. package/package.json +9 -7
  73. package/src/aix.tsx +33 -11
  74. package/src/hooks/useContentInsetHandler.ts +28 -0
  75. package/src/index.ts +2 -0
  76. package/src/views/aix.nitro.ts +28 -1
@@ -1,14 +1,242 @@
1
1
  import { type HybridRef } from 'react-native-nitro-modules';
2
- import type { AixProps, AixMethods } from './views/aix.nitro';
2
+ import type { AixProps, AixMethods, AixContentInsets } from './views/aix.nitro';
3
3
  export type AixRef = HybridRef<AixProps, AixMethods>;
4
- export declare const Aix: import("react").ForwardRefExoticComponent<{
5
- hybridRef?: import("react-native-nitro-modules").NitroViewWrappedCallback<((ref: import("react-native-nitro-modules").HybridView<AixProps, AixMethods>) => void) | undefined> | undefined;
6
- shouldStartAtEnd: boolean;
7
- scrollOnFooterSizeUpdate?: import("./views/aix.nitro").AixScrollOnFooterSizeUpdate | undefined;
8
- scrollEndReachedThreshold?: number | undefined;
9
- additionalContentInsets?: import("./views/aix.nitro").AixAdditionalContentInsetsProp | undefined;
10
- additionalScrollIndicatorInsets?: import("./views/aix.nitro").AixScrollIndicatorInsets | undefined;
11
- mainScrollViewID?: string | undefined;
12
- penultimateCellIndex?: number | undefined;
13
- } & import("react-native").ViewProps & import("react").RefAttributes<AixRef>>;
4
+ export declare const Aix: import("react").ForwardRefExoticComponent<Omit<{
5
+ shouldStartAtEnd: boolean | import("react-native-reanimated").SharedValue<boolean>;
6
+ scrollOnFooterSizeUpdate?: import("./views/aix.nitro").AixScrollOnFooterSizeUpdate | import("react-native-reanimated").SharedValue<import("./views/aix.nitro").AixScrollOnFooterSizeUpdate | undefined> | undefined;
7
+ scrollEndReachedThreshold?: number | import("react-native-reanimated").SharedValue<number | undefined> | undefined;
8
+ additionalContentInsets?: import("./views/aix.nitro").AixAdditionalContentInsetsProp | import("react-native-reanimated").SharedValue<import("./views/aix.nitro").AixAdditionalContentInsetsProp | undefined> | undefined;
9
+ additionalScrollIndicatorInsets?: import("./views/aix.nitro").AixScrollIndicatorInsets | import("react-native-reanimated").SharedValue<import("./views/aix.nitro").AixScrollIndicatorInsets | undefined> | undefined;
10
+ mainScrollViewID?: string | import("react-native-reanimated").SharedValue<string | undefined> | undefined;
11
+ penultimateCellIndex?: number | import("react-native-reanimated").SharedValue<number | undefined> | undefined;
12
+ shouldApplyContentInsets?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
13
+ onWillApplyContentInsets?: import("react-native-nitro-modules").NitroViewWrappedCallback<((insets: AixContentInsets) => void) | undefined> | import("react-native-reanimated").SharedValue<import("react-native-nitro-modules").NitroViewWrappedCallback<((insets: AixContentInsets) => void) | undefined> | undefined> | undefined;
14
+ onScrolledNearEndChange?: import("react-native-nitro-modules").NitroViewWrappedCallback<((isNearEnd: boolean) => void) | undefined> | import("react-native-reanimated").SharedValue<import("react-native-nitro-modules").NitroViewWrappedCallback<((isNearEnd: boolean) => void) | undefined> | undefined> | undefined;
15
+ hybridRef?: import("react-native-nitro-modules").NitroViewWrappedCallback<((ref: import("react-native-nitro-modules").HybridView<AixProps, AixMethods>) => void) | undefined> | import("react-native-reanimated").SharedValue<import("react-native-nitro-modules").NitroViewWrappedCallback<((ref: import("react-native-nitro-modules").HybridView<AixProps, AixMethods>) => void) | undefined> | undefined> | undefined;
16
+ children?: import("react").ReactNode | import("react-native-reanimated").SharedValue<import("react").ReactNode>;
17
+ hitSlop?: number | import("react-native").Insets | import("react-native-reanimated").SharedValue<number | import("react-native").Insets | null | undefined> | null | undefined;
18
+ id?: string | import("react-native-reanimated").SharedValue<string | undefined> | undefined;
19
+ needsOffscreenAlphaCompositing?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
20
+ onLayout?: ((event: import("react-native").LayoutChangeEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").LayoutChangeEvent) => void) | undefined> | undefined;
21
+ pointerEvents?: "box-none" | "none" | "box-only" | "auto" | import("react-native-reanimated").SharedValue<"box-none" | "none" | "box-only" | "auto" | undefined> | undefined;
22
+ removeClippedSubviews?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
23
+ testID?: string | import("react-native-reanimated").SharedValue<string | undefined> | undefined;
24
+ nativeID?: string | import("react-native-reanimated").SharedValue<string | undefined> | undefined;
25
+ collapsable?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
26
+ collapsableChildren?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
27
+ onBlur?: ((e: import("react-native").BlurEvent) => void) | import("react-native-reanimated").SharedValue<((e: import("react-native").BlurEvent) => void) | null | undefined> | null | undefined;
28
+ onFocus?: ((e: import("react-native").FocusEvent) => void) | import("react-native-reanimated").SharedValue<((e: import("react-native").FocusEvent) => void) | null | undefined> | null | undefined;
29
+ renderToHardwareTextureAndroid?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
30
+ focusable?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
31
+ tabIndex?: 0 | -1 | import("react-native-reanimated").SharedValue<0 | -1 | undefined> | undefined;
32
+ shouldRasterizeIOS?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
33
+ isTVSelectable?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
34
+ hasTVPreferredFocus?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
35
+ tvParallaxShiftDistanceX?: number | import("react-native-reanimated").SharedValue<number | undefined> | undefined;
36
+ tvParallaxShiftDistanceY?: number | import("react-native-reanimated").SharedValue<number | undefined> | undefined;
37
+ tvParallaxTiltAngle?: number | import("react-native-reanimated").SharedValue<number | undefined> | undefined;
38
+ tvParallaxMagnification?: number | import("react-native-reanimated").SharedValue<number | undefined> | undefined;
39
+ onStartShouldSetResponder?: ((event: import("react-native").GestureResponderEvent) => boolean) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => boolean) | undefined> | undefined;
40
+ onMoveShouldSetResponder?: ((event: import("react-native").GestureResponderEvent) => boolean) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => boolean) | undefined> | undefined;
41
+ onResponderEnd?: ((event: import("react-native").GestureResponderEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => void) | undefined> | undefined;
42
+ onResponderGrant?: ((event: import("react-native").GestureResponderEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => void) | undefined> | undefined;
43
+ onResponderReject?: ((event: import("react-native").GestureResponderEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => void) | undefined> | undefined;
44
+ onResponderMove?: ((event: import("react-native").GestureResponderEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => void) | undefined> | undefined;
45
+ onResponderRelease?: ((event: import("react-native").GestureResponderEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => void) | undefined> | undefined;
46
+ onResponderStart?: ((event: import("react-native").GestureResponderEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => void) | undefined> | undefined;
47
+ onResponderTerminationRequest?: ((event: import("react-native").GestureResponderEvent) => boolean) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => boolean) | undefined> | undefined;
48
+ onResponderTerminate?: ((event: import("react-native").GestureResponderEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => void) | undefined> | undefined;
49
+ onStartShouldSetResponderCapture?: ((event: import("react-native").GestureResponderEvent) => boolean) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => boolean) | undefined> | undefined;
50
+ onMoveShouldSetResponderCapture?: ((event: import("react-native").GestureResponderEvent) => boolean) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => boolean) | undefined> | undefined;
51
+ onTouchStart?: ((event: import("react-native").GestureResponderEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => void) | undefined> | undefined;
52
+ onTouchMove?: ((event: import("react-native").GestureResponderEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => void) | undefined> | undefined;
53
+ onTouchEnd?: ((event: import("react-native").GestureResponderEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => void) | undefined> | undefined;
54
+ onTouchCancel?: ((event: import("react-native").GestureResponderEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => void) | undefined> | undefined;
55
+ onTouchEndCapture?: ((event: import("react-native").GestureResponderEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => void) | undefined> | undefined;
56
+ onPointerEnter?: ((event: import("react-native").PointerEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").PointerEvent) => void) | undefined> | undefined;
57
+ onPointerEnterCapture?: ((event: import("react-native").PointerEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").PointerEvent) => void) | undefined> | undefined;
58
+ onPointerLeave?: ((event: import("react-native").PointerEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").PointerEvent) => void) | undefined> | undefined;
59
+ onPointerLeaveCapture?: ((event: import("react-native").PointerEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").PointerEvent) => void) | undefined> | undefined;
60
+ onPointerMove?: ((event: import("react-native").PointerEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").PointerEvent) => void) | undefined> | undefined;
61
+ onPointerMoveCapture?: ((event: import("react-native").PointerEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").PointerEvent) => void) | undefined> | undefined;
62
+ onPointerCancel?: ((event: import("react-native").PointerEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").PointerEvent) => void) | undefined> | undefined;
63
+ onPointerCancelCapture?: ((event: import("react-native").PointerEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").PointerEvent) => void) | undefined> | undefined;
64
+ onPointerDown?: ((event: import("react-native").PointerEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").PointerEvent) => void) | undefined> | undefined;
65
+ onPointerDownCapture?: ((event: import("react-native").PointerEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").PointerEvent) => void) | undefined> | undefined;
66
+ onPointerUp?: ((event: import("react-native").PointerEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").PointerEvent) => void) | undefined> | undefined;
67
+ onPointerUpCapture?: ((event: import("react-native").PointerEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").PointerEvent) => void) | undefined> | undefined;
68
+ accessible?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
69
+ accessibilityActions?: readonly Readonly<{
70
+ name: import("react-native").AccessibilityActionName | string;
71
+ label?: string | undefined;
72
+ }>[] | import("react-native-reanimated").SharedValue<readonly Readonly<{
73
+ name: import("react-native").AccessibilityActionName | string;
74
+ label?: string | undefined;
75
+ }>[] | undefined> | undefined;
76
+ accessibilityLabel?: string | import("react-native-reanimated").SharedValue<string | undefined> | undefined;
77
+ 'aria-label'?: string | import("react-native-reanimated").SharedValue<string | undefined> | undefined;
78
+ accessibilityRole?: import("react-native").AccessibilityRole | import("react-native-reanimated").SharedValue<import("react-native").AccessibilityRole | undefined> | undefined;
79
+ accessibilityState?: import("react-native").AccessibilityState | import("react-native-reanimated").SharedValue<import("react-native").AccessibilityState | undefined> | undefined;
80
+ 'aria-busy'?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
81
+ 'aria-checked'?: boolean | "mixed" | import("react-native-reanimated").SharedValue<boolean | "mixed" | undefined> | undefined;
82
+ 'aria-disabled'?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
83
+ 'aria-expanded'?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
84
+ 'aria-selected'?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
85
+ accessibilityHint?: string | import("react-native-reanimated").SharedValue<string | undefined> | undefined;
86
+ accessibilityValue?: import("react-native").AccessibilityValue | import("react-native-reanimated").SharedValue<import("react-native").AccessibilityValue | undefined> | undefined;
87
+ 'aria-valuemax'?: number | import("react-native-reanimated").SharedValue<number | undefined> | undefined;
88
+ 'aria-valuemin'?: number | import("react-native-reanimated").SharedValue<number | undefined> | undefined;
89
+ 'aria-valuenow'?: number | import("react-native-reanimated").SharedValue<number | undefined> | undefined;
90
+ 'aria-valuetext'?: string | import("react-native-reanimated").SharedValue<string | undefined> | undefined;
91
+ onAccessibilityAction?: ((event: import("react-native").AccessibilityActionEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").AccessibilityActionEvent) => void) | undefined> | undefined;
92
+ importantForAccessibility?: "auto" | "yes" | "no" | "no-hide-descendants" | import("react-native-reanimated").SharedValue<"auto" | "yes" | "no" | "no-hide-descendants" | undefined> | undefined;
93
+ 'aria-hidden'?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
94
+ 'aria-modal'?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
95
+ role?: import("react-native").Role | import("react-native-reanimated").SharedValue<import("react-native").Role | undefined> | undefined;
96
+ accessibilityLabelledBy?: string | string[] | import("react-native-reanimated").SharedValue<string | string[] | undefined> | undefined;
97
+ 'aria-labelledby'?: string | import("react-native-reanimated").SharedValue<string | undefined> | undefined;
98
+ accessibilityLiveRegion?: "none" | "polite" | "assertive" | import("react-native-reanimated").SharedValue<"none" | "polite" | "assertive" | undefined> | undefined;
99
+ 'aria-live'?: "polite" | "assertive" | "off" | import("react-native-reanimated").SharedValue<"polite" | "assertive" | "off" | undefined> | undefined;
100
+ screenReaderFocusable?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
101
+ accessibilityElementsHidden?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
102
+ accessibilityViewIsModal?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
103
+ onAccessibilityEscape?: (() => void) | import("react-native-reanimated").SharedValue<(() => void) | undefined> | undefined;
104
+ onAccessibilityTap?: (() => void) | import("react-native-reanimated").SharedValue<(() => void) | undefined> | undefined;
105
+ onMagicTap?: (() => void) | import("react-native-reanimated").SharedValue<(() => void) | undefined> | undefined;
106
+ accessibilityIgnoresInvertColors?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
107
+ accessibilityLanguage?: string | import("react-native-reanimated").SharedValue<string | undefined> | undefined;
108
+ accessibilityShowsLargeContentViewer?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
109
+ accessibilityLargeContentTitle?: string | import("react-native-reanimated").SharedValue<string | undefined> | undefined;
110
+ accessibilityRespondsToUserInteraction?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
111
+ } & {
112
+ style?: import("react-native").StyleProp<import("react-native-reanimated").AnimatedStyle<import("react-native").StyleProp<import("react-native").ViewStyle>>>;
113
+ } & {
114
+ layout?: import("react-native-reanimated").BaseAnimationBuilder | import("react-native-reanimated").LayoutAnimationFunction | typeof import("react-native-reanimated").BaseAnimationBuilder;
115
+ entering?: import("react-native-reanimated").EntryOrExitLayoutType;
116
+ exiting?: import("react-native-reanimated").EntryOrExitLayoutType;
117
+ } & {
118
+ sharedTransitionTag?: string;
119
+ sharedTransitionStyle?: import("react-native-reanimated").SharedTransition;
120
+ } & {
121
+ animatedProps?: Partial<{
122
+ shouldStartAtEnd: boolean | import("react-native-reanimated").SharedValue<boolean>;
123
+ scrollOnFooterSizeUpdate?: import("./views/aix.nitro").AixScrollOnFooterSizeUpdate | import("react-native-reanimated").SharedValue<import("./views/aix.nitro").AixScrollOnFooterSizeUpdate | undefined> | undefined;
124
+ scrollEndReachedThreshold?: number | import("react-native-reanimated").SharedValue<number | undefined> | undefined;
125
+ additionalContentInsets?: import("./views/aix.nitro").AixAdditionalContentInsetsProp | import("react-native-reanimated").SharedValue<import("./views/aix.nitro").AixAdditionalContentInsetsProp | undefined> | undefined;
126
+ additionalScrollIndicatorInsets?: import("./views/aix.nitro").AixScrollIndicatorInsets | import("react-native-reanimated").SharedValue<import("./views/aix.nitro").AixScrollIndicatorInsets | undefined> | undefined;
127
+ mainScrollViewID?: string | import("react-native-reanimated").SharedValue<string | undefined> | undefined;
128
+ penultimateCellIndex?: number | import("react-native-reanimated").SharedValue<number | undefined> | undefined;
129
+ shouldApplyContentInsets?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
130
+ onWillApplyContentInsets?: import("react-native-nitro-modules").NitroViewWrappedCallback<((insets: AixContentInsets) => void) | undefined> | import("react-native-reanimated").SharedValue<import("react-native-nitro-modules").NitroViewWrappedCallback<((insets: AixContentInsets) => void) | undefined> | undefined> | undefined;
131
+ onScrolledNearEndChange?: import("react-native-nitro-modules").NitroViewWrappedCallback<((isNearEnd: boolean) => void) | undefined> | import("react-native-reanimated").SharedValue<import("react-native-nitro-modules").NitroViewWrappedCallback<((isNearEnd: boolean) => void) | undefined> | undefined> | undefined;
132
+ hybridRef?: import("react-native-nitro-modules").NitroViewWrappedCallback<((ref: import("react-native-nitro-modules").HybridView<AixProps, AixMethods>) => void) | undefined> | import("react-native-reanimated").SharedValue<import("react-native-nitro-modules").NitroViewWrappedCallback<((ref: import("react-native-nitro-modules").HybridView<AixProps, AixMethods>) => void) | undefined> | undefined> | undefined;
133
+ children?: import("react").ReactNode | import("react-native-reanimated").SharedValue<import("react").ReactNode>;
134
+ hitSlop?: number | import("react-native").Insets | import("react-native-reanimated").SharedValue<number | import("react-native").Insets | null | undefined> | null | undefined;
135
+ id?: string | import("react-native-reanimated").SharedValue<string | undefined> | undefined;
136
+ needsOffscreenAlphaCompositing?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
137
+ onLayout?: ((event: import("react-native").LayoutChangeEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").LayoutChangeEvent) => void) | undefined> | undefined;
138
+ pointerEvents?: "box-none" | "none" | "box-only" | "auto" | import("react-native-reanimated").SharedValue<"box-none" | "none" | "box-only" | "auto" | undefined> | undefined;
139
+ removeClippedSubviews?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
140
+ testID?: string | import("react-native-reanimated").SharedValue<string | undefined> | undefined;
141
+ nativeID?: string | import("react-native-reanimated").SharedValue<string | undefined> | undefined;
142
+ collapsable?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
143
+ collapsableChildren?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
144
+ onBlur?: ((e: import("react-native").BlurEvent) => void) | import("react-native-reanimated").SharedValue<((e: import("react-native").BlurEvent) => void) | null | undefined> | null | undefined;
145
+ onFocus?: ((e: import("react-native").FocusEvent) => void) | import("react-native-reanimated").SharedValue<((e: import("react-native").FocusEvent) => void) | null | undefined> | null | undefined;
146
+ renderToHardwareTextureAndroid?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
147
+ focusable?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
148
+ tabIndex?: 0 | -1 | import("react-native-reanimated").SharedValue<0 | -1 | undefined> | undefined;
149
+ shouldRasterizeIOS?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
150
+ isTVSelectable?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
151
+ hasTVPreferredFocus?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
152
+ tvParallaxShiftDistanceX?: number | import("react-native-reanimated").SharedValue<number | undefined> | undefined;
153
+ tvParallaxShiftDistanceY?: number | import("react-native-reanimated").SharedValue<number | undefined> | undefined;
154
+ tvParallaxTiltAngle?: number | import("react-native-reanimated").SharedValue<number | undefined> | undefined;
155
+ tvParallaxMagnification?: number | import("react-native-reanimated").SharedValue<number | undefined> | undefined;
156
+ onStartShouldSetResponder?: ((event: import("react-native").GestureResponderEvent) => boolean) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => boolean) | undefined> | undefined;
157
+ onMoveShouldSetResponder?: ((event: import("react-native").GestureResponderEvent) => boolean) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => boolean) | undefined> | undefined;
158
+ onResponderEnd?: ((event: import("react-native").GestureResponderEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => void) | undefined> | undefined;
159
+ onResponderGrant?: ((event: import("react-native").GestureResponderEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => void) | undefined> | undefined;
160
+ onResponderReject?: ((event: import("react-native").GestureResponderEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => void) | undefined> | undefined;
161
+ onResponderMove?: ((event: import("react-native").GestureResponderEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => void) | undefined> | undefined;
162
+ onResponderRelease?: ((event: import("react-native").GestureResponderEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => void) | undefined> | undefined;
163
+ onResponderStart?: ((event: import("react-native").GestureResponderEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => void) | undefined> | undefined;
164
+ onResponderTerminationRequest?: ((event: import("react-native").GestureResponderEvent) => boolean) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => boolean) | undefined> | undefined;
165
+ onResponderTerminate?: ((event: import("react-native").GestureResponderEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => void) | undefined> | undefined;
166
+ onStartShouldSetResponderCapture?: ((event: import("react-native").GestureResponderEvent) => boolean) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => boolean) | undefined> | undefined;
167
+ onMoveShouldSetResponderCapture?: ((event: import("react-native").GestureResponderEvent) => boolean) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => boolean) | undefined> | undefined;
168
+ onTouchStart?: ((event: import("react-native").GestureResponderEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => void) | undefined> | undefined;
169
+ onTouchMove?: ((event: import("react-native").GestureResponderEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => void) | undefined> | undefined;
170
+ onTouchEnd?: ((event: import("react-native").GestureResponderEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => void) | undefined> | undefined;
171
+ onTouchCancel?: ((event: import("react-native").GestureResponderEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => void) | undefined> | undefined;
172
+ onTouchEndCapture?: ((event: import("react-native").GestureResponderEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").GestureResponderEvent) => void) | undefined> | undefined;
173
+ onPointerEnter?: ((event: import("react-native").PointerEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").PointerEvent) => void) | undefined> | undefined;
174
+ onPointerEnterCapture?: ((event: import("react-native").PointerEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").PointerEvent) => void) | undefined> | undefined;
175
+ onPointerLeave?: ((event: import("react-native").PointerEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").PointerEvent) => void) | undefined> | undefined;
176
+ onPointerLeaveCapture?: ((event: import("react-native").PointerEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").PointerEvent) => void) | undefined> | undefined;
177
+ onPointerMove?: ((event: import("react-native").PointerEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").PointerEvent) => void) | undefined> | undefined;
178
+ onPointerMoveCapture?: ((event: import("react-native").PointerEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").PointerEvent) => void) | undefined> | undefined;
179
+ onPointerCancel?: ((event: import("react-native").PointerEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").PointerEvent) => void) | undefined> | undefined;
180
+ onPointerCancelCapture?: ((event: import("react-native").PointerEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").PointerEvent) => void) | undefined> | undefined;
181
+ onPointerDown?: ((event: import("react-native").PointerEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").PointerEvent) => void) | undefined> | undefined;
182
+ onPointerDownCapture?: ((event: import("react-native").PointerEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").PointerEvent) => void) | undefined> | undefined;
183
+ onPointerUp?: ((event: import("react-native").PointerEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").PointerEvent) => void) | undefined> | undefined;
184
+ onPointerUpCapture?: ((event: import("react-native").PointerEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").PointerEvent) => void) | undefined> | undefined;
185
+ accessible?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
186
+ accessibilityActions?: readonly Readonly<{
187
+ name: import("react-native").AccessibilityActionName | string;
188
+ label?: string | undefined;
189
+ }>[] | import("react-native-reanimated").SharedValue<readonly Readonly<{
190
+ name: import("react-native").AccessibilityActionName | string;
191
+ label?: string | undefined;
192
+ }>[] | undefined> | undefined;
193
+ accessibilityLabel?: string | import("react-native-reanimated").SharedValue<string | undefined> | undefined;
194
+ 'aria-label'?: string | import("react-native-reanimated").SharedValue<string | undefined> | undefined;
195
+ accessibilityRole?: import("react-native").AccessibilityRole | import("react-native-reanimated").SharedValue<import("react-native").AccessibilityRole | undefined> | undefined;
196
+ accessibilityState?: import("react-native").AccessibilityState | import("react-native-reanimated").SharedValue<import("react-native").AccessibilityState | undefined> | undefined;
197
+ 'aria-busy'?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
198
+ 'aria-checked'?: boolean | "mixed" | import("react-native-reanimated").SharedValue<boolean | "mixed" | undefined> | undefined;
199
+ 'aria-disabled'?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
200
+ 'aria-expanded'?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
201
+ 'aria-selected'?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
202
+ accessibilityHint?: string | import("react-native-reanimated").SharedValue<string | undefined> | undefined;
203
+ accessibilityValue?: import("react-native").AccessibilityValue | import("react-native-reanimated").SharedValue<import("react-native").AccessibilityValue | undefined> | undefined;
204
+ 'aria-valuemax'?: number | import("react-native-reanimated").SharedValue<number | undefined> | undefined;
205
+ 'aria-valuemin'?: number | import("react-native-reanimated").SharedValue<number | undefined> | undefined;
206
+ 'aria-valuenow'?: number | import("react-native-reanimated").SharedValue<number | undefined> | undefined;
207
+ 'aria-valuetext'?: string | import("react-native-reanimated").SharedValue<string | undefined> | undefined;
208
+ onAccessibilityAction?: ((event: import("react-native").AccessibilityActionEvent) => void) | import("react-native-reanimated").SharedValue<((event: import("react-native").AccessibilityActionEvent) => void) | undefined> | undefined;
209
+ importantForAccessibility?: "auto" | "yes" | "no" | "no-hide-descendants" | import("react-native-reanimated").SharedValue<"auto" | "yes" | "no" | "no-hide-descendants" | undefined> | undefined;
210
+ 'aria-hidden'?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
211
+ 'aria-modal'?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
212
+ role?: import("react-native").Role | import("react-native-reanimated").SharedValue<import("react-native").Role | undefined> | undefined;
213
+ accessibilityLabelledBy?: string | string[] | import("react-native-reanimated").SharedValue<string | string[] | undefined> | undefined;
214
+ 'aria-labelledby'?: string | import("react-native-reanimated").SharedValue<string | undefined> | undefined;
215
+ accessibilityLiveRegion?: "none" | "polite" | "assertive" | import("react-native-reanimated").SharedValue<"none" | "polite" | "assertive" | undefined> | undefined;
216
+ 'aria-live'?: "polite" | "assertive" | "off" | import("react-native-reanimated").SharedValue<"polite" | "assertive" | "off" | undefined> | undefined;
217
+ screenReaderFocusable?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
218
+ accessibilityElementsHidden?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
219
+ accessibilityViewIsModal?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
220
+ onAccessibilityEscape?: (() => void) | import("react-native-reanimated").SharedValue<(() => void) | undefined> | undefined;
221
+ onAccessibilityTap?: (() => void) | import("react-native-reanimated").SharedValue<(() => void) | undefined> | undefined;
222
+ onMagicTap?: (() => void) | import("react-native-reanimated").SharedValue<(() => void) | undefined> | undefined;
223
+ accessibilityIgnoresInvertColors?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
224
+ accessibilityLanguage?: string | import("react-native-reanimated").SharedValue<string | undefined> | undefined;
225
+ accessibilityShowsLargeContentViewer?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
226
+ accessibilityLargeContentTitle?: string | import("react-native-reanimated").SharedValue<string | undefined> | undefined;
227
+ accessibilityRespondsToUserInteraction?: boolean | import("react-native-reanimated").SharedValue<boolean | undefined> | undefined;
228
+ } & {
229
+ style?: import("react-native").StyleProp<import("react-native-reanimated").AnimatedStyle<import("react-native").StyleProp<import("react-native").ViewStyle>>>;
230
+ } & {
231
+ layout?: import("react-native-reanimated").BaseAnimationBuilder | import("react-native-reanimated").LayoutAnimationFunction | typeof import("react-native-reanimated").BaseAnimationBuilder;
232
+ entering?: import("react-native-reanimated").EntryOrExitLayoutType;
233
+ exiting?: import("react-native-reanimated").EntryOrExitLayoutType;
234
+ } & {
235
+ sharedTransitionTag?: string;
236
+ sharedTransitionStyle?: import("react-native-reanimated").SharedTransition;
237
+ }> | undefined;
238
+ }, "onWillApplyContentInsets" | "onScrolledNearEndChange" | "hybridRef"> & {
239
+ onWillApplyContentInsets?: (insets: AixContentInsets) => void;
240
+ onScrolledNearEndChange?: (isNearEnd: boolean) => void;
241
+ } & import("react").RefAttributes<AixRef>>;
14
242
  //# sourceMappingURL=aix.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"aix.d.ts","sourceRoot":"","sources":["../../../src/aix.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,SAAS,EACf,MAAM,4BAA4B,CAAA;AAEnC,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAG7D,MAAM,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;AAOpD,eAAO,MAAM,GAAG;;;;;;;;;6EAmBf,CAAA"}
1
+ {"version":3,"file":"aix.d.ts","sourceRoot":"","sources":["../../../src/aix.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,SAAS,EACf,MAAM,4BAA4B,CAAA;AAEnC,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAI/E,MAAM,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;AAgBpD,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BAJa,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI;8BACnC,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI;0CAyCvD,CAAA"}
@@ -0,0 +1,21 @@
1
+ import type { AixContentInsets } from '../views/aix.nitro';
2
+ /**
3
+ * Hook that creates a stable callback handler for content inset updates.
4
+ * Use this with `onWillApplyContentInsets` prop to receive inset updates.
5
+ *
6
+ * @example
7
+ * ```tsx
8
+ * const bottomInset = useSharedValue<number | null>(null)
9
+ *
10
+ * const contentInsetHandler = useContentInsetHandler((insets) => {
11
+ * bottomInset.value = insets.bottom ?? null
12
+ * })
13
+ *
14
+ * <Aix
15
+ * shouldApplyContentInsets={false}
16
+ * onWillApplyContentInsets={contentInsetHandler}
17
+ * />
18
+ * ```
19
+ */
20
+ export declare function useContentInsetHandler(handler: (insets: AixContentInsets) => void, dependencies?: unknown[]): (insets: AixContentInsets) => void;
21
+ //# sourceMappingURL=useContentInsetHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useContentInsetHandler.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useContentInsetHandler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAE1D;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,EAC3C,YAAY,GAAE,OAAO,EAAO,YADV,gBAAgB,KAAK,IAAI,CAK5C"}
@@ -4,6 +4,8 @@ import type { AixRef } from './aix';
4
4
  export * from './fade-in';
5
5
  export { Aix, type AixRef } from './aix';
6
6
  export { AixFooter } from './footer';
7
+ export { useContentInsetHandler } from './hooks/useContentInsetHandler';
8
+ export type { AixContentInsets } from './views/aix.nitro';
7
9
  export declare const AixCell: import("react-native-nitro-modules").ReactNativeView<AixCellViewProps, {}>;
8
10
  export type AixCellViewRef = HybridRef<AixCellViewProps, {}>;
9
11
  export declare function useAixRef(): import("react").RefObject<AixRef | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAE7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AACnC,cAAc,WAAW,CAAA;AAEzB,OAAO,EAAE,GAAG,EAAE,KAAK,MAAM,EAAE,MAAM,OAAO,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEpC,eAAO,MAAM,OAAO,4EAGnB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,SAAS,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAA;AAE5D,wBAAgB,SAAS,6CAExB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAE7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AACnC,cAAc,WAAW,CAAA;AAEzB,OAAO,EAAE,GAAG,EAAE,KAAK,MAAM,EAAE,MAAM,OAAO,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAA;AACvE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEzD,eAAO,MAAM,OAAO,4EAGnB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,SAAS,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAA;AAE5D,wBAAgB,SAAS,6CAExB"}
@@ -16,12 +16,40 @@ export interface AixScrollIndicatorInsets {
16
16
  bottom?: AixScrollIndicatorInsetValue;
17
17
  }
18
18
  export interface AixScrollOnFooterSizeUpdate {
19
+ /**
20
+ * Whether to scroll on footer size update.
21
+ *
22
+ * Default: true
23
+ */
19
24
  enabled: boolean;
25
+ /**
26
+ * The number of pixels from the bottom of the scroll view to the end of the content that is considered "scrolled near the end".
27
+ *
28
+ * Default: 100
29
+ */
20
30
  scrolledToEndThreshold?: number;
31
+ /**
32
+ * Whether to animate the scroll.
33
+ *
34
+ * Default: false
35
+ */
21
36
  animated?: boolean;
22
37
  }
38
+ export interface AixContentInsets {
39
+ top?: number;
40
+ left?: number;
41
+ bottom?: number;
42
+ right?: number;
43
+ }
23
44
  export interface AixProps extends HybridViewProps {
24
45
  shouldStartAtEnd: boolean;
46
+ /**
47
+ * Control the behavior of scrolling the content when footer size changes.
48
+ *
49
+ * By default, changing the height of the footer will shift content up in the scroll view.
50
+ *
51
+ * Default: { enabled: true, scrolledToEndThreshold: 100, animated: false }
52
+ */
25
53
  scrollOnFooterSizeUpdate?: AixScrollOnFooterSizeUpdate;
26
54
  /**
27
55
  * The number of pixels from the bottom of the scroll view to the end of the content that is considered "near the end".
@@ -75,6 +103,13 @@ export interface AixProps extends HybridViewProps {
75
103
  *
76
104
  */
77
105
  penultimateCellIndex?: number;
106
+ shouldApplyContentInsets?: boolean;
107
+ onWillApplyContentInsets?: (insets: AixContentInsets) => void;
108
+ /**
109
+ * Called when the scroll position changes between "near end" and "not near end" states.
110
+ * Uses `scrollEndReachedThreshold` to determine the threshold.
111
+ */
112
+ onScrolledNearEndChange?: (isNearEnd: boolean) => void;
78
113
  }
79
114
  export interface AixMethods extends HybridViewMethods {
80
115
  scrollToEnd(animated?: boolean): void;
@@ -92,7 +127,16 @@ export type AixCellView = HybridView<AixCellViewProps, {}, {
92
127
  ios: 'swift';
93
128
  android: 'kotlin';
94
129
  }>;
130
+ export interface AixStickToKeyboardOffset {
131
+ whenKeyboardOpen: number;
132
+ whenKeyboardClosed: number;
133
+ }
134
+ export interface AixStickToKeyboard {
135
+ enabled: boolean;
136
+ offset?: AixStickToKeyboardOffset;
137
+ }
95
138
  export interface AixComposerProps extends HybridViewProps {
139
+ stickToKeyboard?: AixStickToKeyboard;
96
140
  }
97
141
  export type AixComposer = HybridView<AixComposerProps, {}, {
98
142
  ios: 'swift';
@@ -1 +1 @@
1
- {"version":3,"file":"aix.nitro.d.ts","sourceRoot":"","sources":["../../../../src/views/aix.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EACf,iBAAiB,EAClB,MAAM,4BAA4B,CAAA;AAEnC,MAAM,WAAW,0BAA0B;IACzC,gBAAgB,EAAE,MAAM,CAAA;IACxB,kBAAkB,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,8BAA8B;IAC7C,GAAG,CAAC,EAAE,0BAA0B,CAAA;IAChC,MAAM,CAAC,EAAE,0BAA0B,CAAA;CACpC;AAED,MAAM,WAAW,4BAA4B;IAC3C,gBAAgB,EAAE,MAAM,CAAA;IACxB,kBAAkB,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,wBAAwB;IACvC,GAAG,CAAC,EAAE,4BAA4B,CAAA;IAClC,MAAM,CAAC,EAAE,4BAA4B,CAAA;CACtC;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,OAAO,CAAA;IAChB,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,QAAS,SAAQ,eAAe;IAC/C,gBAAgB,EAAE,OAAO,CAAA;IACzB,wBAAwB,CAAC,EAAE,2BAA2B,CAAA;IACtD;;;;;;;;;OASG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAA;IAClC;;;;;;;;;;;;OAYG;IAEH,uBAAuB,CAAC,EAAE,8BAA8B,CAAA;IAExD;;;OAGG;IACH,+BAA+B,CAAC,EAAE,wBAAwB,CAAA;IAE1D;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAEzB;;;;;;;;;;;;;OAaG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,MAAM,WAAW,UAAW,SAAQ,iBAAiB;IACnD,WAAW,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IACrC,+BAA+B,CAC7B,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,OAAO,EAClB,oBAAoB,CAAC,EAAE,OAAO,GAC7B,IAAI,CAAA;CACR;AAED,MAAM,MAAM,GAAG,GAAG,UAAU,CAC1B,QAAQ,EACR,UAAU,EACV;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,CACpC,CAAA;AAED,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACvD,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAClC,gBAAgB,EAChB,EAAE,EACF;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,CACpC,CAAA;AAED,MAAM,WAAW,gBAAiB,SAAQ,eAAe;CAAG;AAE5D,MAAM,MAAM,WAAW,GAAG,UAAU,CAClC,gBAAgB,EAChB,EAAE,EACF;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,CACpC,CAAA"}
1
+ {"version":3,"file":"aix.nitro.d.ts","sourceRoot":"","sources":["../../../../src/views/aix.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EACf,iBAAiB,EAClB,MAAM,4BAA4B,CAAA;AAEnC,MAAM,WAAW,0BAA0B;IACzC,gBAAgB,EAAE,MAAM,CAAA;IACxB,kBAAkB,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,8BAA8B;IAC7C,GAAG,CAAC,EAAE,0BAA0B,CAAA;IAChC,MAAM,CAAC,EAAE,0BAA0B,CAAA;CACpC;AAED,MAAM,WAAW,4BAA4B;IAC3C,gBAAgB,EAAE,MAAM,CAAA;IACxB,kBAAkB,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,wBAAwB;IACvC,GAAG,CAAC,EAAE,4BAA4B,CAAA;IAClC,MAAM,CAAC,EAAE,4BAA4B,CAAA;CACtC;AAED,MAAM,WAAW,2BAA2B;IAC1C;;;;OAIG;IACH,OAAO,EAAE,OAAO,CAAA;IAChB;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,QAAS,SAAQ,eAAe;IAC/C,gBAAgB,EAAE,OAAO,CAAA;IACzB;;;;;;OAMG;IACH,wBAAwB,CAAC,EAAE,2BAA2B,CAAA;IACtD;;;;;;;;;OASG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAA;IAClC;;;;;;;;;;;;OAYG;IAEH,uBAAuB,CAAC,EAAE,8BAA8B,CAAA;IAExD;;;OAGG;IACH,+BAA+B,CAAC,EAAE,wBAAwB,CAAA;IAE1D;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAEzB;;;;;;;;;;;;;OAaG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAE7B,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC,wBAAwB,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAA;IAC7D;;;OAGG;IACH,uBAAuB,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAA;CACvD;AAED,MAAM,WAAW,UAAW,SAAQ,iBAAiB;IACnD,WAAW,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IACrC,+BAA+B,CAC7B,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,OAAO,EAClB,oBAAoB,CAAC,EAAE,OAAO,GAC7B,IAAI,CAAA;CACR;AAED,MAAM,MAAM,GAAG,GAAG,UAAU,CAC1B,QAAQ,EACR,UAAU,EACV;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,CACpC,CAAA;AAED,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACvD,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAClC,gBAAgB,EAChB,EAAE,EACF;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,CACpC,CAAA;AAED,MAAM,WAAW,wBAAwB;IACvC,gBAAgB,EAAE,MAAM,CAAA;IACxB,kBAAkB,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,wBAAwB,CAAA;CAClC;AAED,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACvD,eAAe,CAAC,EAAE,kBAAkB,CAAA;CACrC;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAClC,gBAAgB,EAChB,EAAE,EACF;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,CACpC,CAAA"}
@@ -16,6 +16,8 @@
16
16
  #include <NitroModules/HybridObjectRegistry.hpp>
17
17
 
18
18
  #include "JHybridAixSpec.hpp"
19
+ #include "JFunc_void_AixContentInsets.hpp"
20
+ #include "JFunc_void_bool.hpp"
19
21
  #include "views/JHybridAixStateUpdater.hpp"
20
22
  #include "JHybridAixCellViewSpec.hpp"
21
23
  #include "views/JHybridAixCellViewStateUpdater.hpp"
@@ -33,6 +35,8 @@ int initialize(JavaVM* vm) {
33
35
  return facebook::jni::initialize(vm, [] {
34
36
  // Register native JNI methods
35
37
  margelo::nitro::aix::JHybridAixSpec::registerNatives();
38
+ margelo::nitro::aix::JFunc_void_AixContentInsets_cxx::registerNatives();
39
+ margelo::nitro::aix::JFunc_void_bool_cxx::registerNatives();
36
40
  margelo::nitro::aix::views::JHybridAixStateUpdater::registerNatives();
37
41
  margelo::nitro::aix::JHybridAixCellViewSpec::registerNatives();
38
42
  margelo::nitro::aix::views::JHybridAixCellViewStateUpdater::registerNatives();
@@ -0,0 +1,69 @@
1
+ ///
2
+ /// JAixContentInsets.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <fbjni/fbjni.h>
11
+ #include "AixContentInsets.hpp"
12
+
13
+ #include <optional>
14
+
15
+ namespace margelo::nitro::aix {
16
+
17
+ using namespace facebook;
18
+
19
+ /**
20
+ * The C++ JNI bridge between the C++ struct "AixContentInsets" and the the Kotlin data class "AixContentInsets".
21
+ */
22
+ struct JAixContentInsets final: public jni::JavaClass<JAixContentInsets> {
23
+ public:
24
+ static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/aix/AixContentInsets;";
25
+
26
+ public:
27
+ /**
28
+ * Convert this Java/Kotlin-based struct to the C++ struct AixContentInsets by copying all values to C++.
29
+ */
30
+ [[maybe_unused]]
31
+ [[nodiscard]]
32
+ AixContentInsets toCpp() const {
33
+ static const auto clazz = javaClassStatic();
34
+ static const auto fieldTop = clazz->getField<jni::JDouble>("top");
35
+ jni::local_ref<jni::JDouble> top = this->getFieldValue(fieldTop);
36
+ static const auto fieldLeft = clazz->getField<jni::JDouble>("left");
37
+ jni::local_ref<jni::JDouble> left = this->getFieldValue(fieldLeft);
38
+ static const auto fieldBottom = clazz->getField<jni::JDouble>("bottom");
39
+ jni::local_ref<jni::JDouble> bottom = this->getFieldValue(fieldBottom);
40
+ static const auto fieldRight = clazz->getField<jni::JDouble>("right");
41
+ jni::local_ref<jni::JDouble> right = this->getFieldValue(fieldRight);
42
+ return AixContentInsets(
43
+ top != nullptr ? std::make_optional(top->value()) : std::nullopt,
44
+ left != nullptr ? std::make_optional(left->value()) : std::nullopt,
45
+ bottom != nullptr ? std::make_optional(bottom->value()) : std::nullopt,
46
+ right != nullptr ? std::make_optional(right->value()) : std::nullopt
47
+ );
48
+ }
49
+
50
+ public:
51
+ /**
52
+ * Create a Java/Kotlin-based struct by copying all values from the given C++ struct to Java.
53
+ */
54
+ [[maybe_unused]]
55
+ static jni::local_ref<JAixContentInsets::javaobject> fromCpp(const AixContentInsets& value) {
56
+ using JSignature = JAixContentInsets(jni::alias_ref<jni::JDouble>, jni::alias_ref<jni::JDouble>, jni::alias_ref<jni::JDouble>, jni::alias_ref<jni::JDouble>);
57
+ static const auto clazz = javaClassStatic();
58
+ static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
59
+ return create(
60
+ clazz,
61
+ value.top.has_value() ? jni::JDouble::valueOf(value.top.value()) : nullptr,
62
+ value.left.has_value() ? jni::JDouble::valueOf(value.left.value()) : nullptr,
63
+ value.bottom.has_value() ? jni::JDouble::valueOf(value.bottom.value()) : nullptr,
64
+ value.right.has_value() ? jni::JDouble::valueOf(value.right.value()) : nullptr
65
+ );
66
+ }
67
+ };
68
+
69
+ } // namespace margelo::nitro::aix
@@ -0,0 +1,63 @@
1
+ ///
2
+ /// JAixStickToKeyboard.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <fbjni/fbjni.h>
11
+ #include "AixStickToKeyboard.hpp"
12
+
13
+ #include "AixStickToKeyboardOffset.hpp"
14
+ #include "JAixStickToKeyboardOffset.hpp"
15
+ #include <optional>
16
+
17
+ namespace margelo::nitro::aix {
18
+
19
+ using namespace facebook;
20
+
21
+ /**
22
+ * The C++ JNI bridge between the C++ struct "AixStickToKeyboard" and the the Kotlin data class "AixStickToKeyboard".
23
+ */
24
+ struct JAixStickToKeyboard final: public jni::JavaClass<JAixStickToKeyboard> {
25
+ public:
26
+ static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/aix/AixStickToKeyboard;";
27
+
28
+ public:
29
+ /**
30
+ * Convert this Java/Kotlin-based struct to the C++ struct AixStickToKeyboard by copying all values to C++.
31
+ */
32
+ [[maybe_unused]]
33
+ [[nodiscard]]
34
+ AixStickToKeyboard toCpp() const {
35
+ static const auto clazz = javaClassStatic();
36
+ static const auto fieldEnabled = clazz->getField<jboolean>("enabled");
37
+ jboolean enabled = this->getFieldValue(fieldEnabled);
38
+ static const auto fieldOffset = clazz->getField<JAixStickToKeyboardOffset>("offset");
39
+ jni::local_ref<JAixStickToKeyboardOffset> offset = this->getFieldValue(fieldOffset);
40
+ return AixStickToKeyboard(
41
+ static_cast<bool>(enabled),
42
+ offset != nullptr ? std::make_optional(offset->toCpp()) : std::nullopt
43
+ );
44
+ }
45
+
46
+ public:
47
+ /**
48
+ * Create a Java/Kotlin-based struct by copying all values from the given C++ struct to Java.
49
+ */
50
+ [[maybe_unused]]
51
+ static jni::local_ref<JAixStickToKeyboard::javaobject> fromCpp(const AixStickToKeyboard& value) {
52
+ using JSignature = JAixStickToKeyboard(jboolean, jni::alias_ref<JAixStickToKeyboardOffset>);
53
+ static const auto clazz = javaClassStatic();
54
+ static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
55
+ return create(
56
+ clazz,
57
+ value.enabled,
58
+ value.offset.has_value() ? JAixStickToKeyboardOffset::fromCpp(value.offset.value()) : nullptr
59
+ );
60
+ }
61
+ };
62
+
63
+ } // namespace margelo::nitro::aix