aix 0.0.15 → 0.1.0-alpha.1
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/Aix.podspec +32 -0
- package/LICENSE +2 -2
- package/README.md +165 -33
- package/android/CMakeLists.txt +32 -0
- package/android/build.gradle +148 -0
- package/android/fix-prefab.gradle +51 -0
- package/android/gradle.properties +5 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/cpp/cpp-adapter.cpp +6 -0
- package/android/src/main/java/com/aix/AixPackage.kt +29 -0
- package/android/src/main/java/com/aix/HybridAix.kt +27 -0
- package/ios/Bridge.h +8 -0
- package/ios/HybridAix.swift +1072 -0
- package/ios/HybridAixCellView.swift +174 -0
- package/ios/HybridAixComposer.swift +119 -0
- package/lib/commonjs/aix.js +25 -0
- package/lib/commonjs/aix.js.map +1 -0
- package/lib/commonjs/fade-in/createUsePool.js +50 -0
- package/lib/commonjs/fade-in/createUsePool.js.map +1 -0
- package/lib/commonjs/fade-in/createUseStaggered.js +82 -0
- package/lib/commonjs/fade-in/createUseStaggered.js.map +1 -0
- package/lib/commonjs/fade-in/index.js +78 -0
- package/lib/commonjs/fade-in/index.js.map +1 -0
- package/lib/commonjs/footer.js +28 -0
- package/lib/commonjs/footer.js.map +1 -0
- package/lib/commonjs/index.js +48 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/views/aix.nitro.js +6 -0
- package/lib/commonjs/views/aix.nitro.js.map +1 -0
- package/lib/module/aix.js +20 -0
- package/lib/module/aix.js.map +1 -0
- package/lib/module/fade-in/createUsePool.js +46 -0
- package/lib/module/fade-in/createUsePool.js.map +1 -0
- package/lib/module/fade-in/createUseStaggered.js +79 -0
- package/lib/module/fade-in/createUseStaggered.js.map +1 -0
- package/lib/module/fade-in/index.js +74 -0
- package/lib/module/fade-in/index.js.map +1 -0
- package/lib/module/footer.js +23 -0
- package/lib/module/footer.js.map +1 -0
- package/lib/module/index.js +13 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/views/aix.nitro.js +4 -0
- package/lib/module/views/aix.nitro.js.map +1 -0
- package/lib/typescript/src/aix.d.ts +14 -0
- package/lib/typescript/src/aix.d.ts.map +1 -0
- package/lib/typescript/src/fade-in/createUsePool.d.ts +5 -0
- package/lib/typescript/src/fade-in/createUsePool.d.ts.map +1 -0
- package/lib/typescript/src/fade-in/createUseStaggered.d.ts +2 -0
- package/lib/typescript/src/fade-in/createUseStaggered.d.ts.map +1 -0
- package/lib/typescript/src/fade-in/index.d.ts +5 -0
- package/lib/typescript/src/fade-in/index.d.ts.map +1 -0
- package/lib/typescript/src/footer.d.ts +5 -0
- package/lib/typescript/src/footer.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +10 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/views/aix.nitro.d.ts +101 -0
- package/lib/typescript/src/views/aix.nitro.d.ts.map +1 -0
- package/nitro.json +26 -0
- package/nitrogen/generated/.gitattributes +1 -0
- package/nitrogen/generated/android/Aix+autolinking.cmake +91 -0
- package/nitrogen/generated/android/Aix+autolinking.gradle +27 -0
- package/nitrogen/generated/android/AixOnLoad.cpp +70 -0
- package/nitrogen/generated/android/AixOnLoad.hpp +25 -0
- package/nitrogen/generated/android/c++/JAixAdditionalContentInsets.hpp +61 -0
- package/nitrogen/generated/android/c++/JAixAdditionalContentInsetsProp.hpp +63 -0
- package/nitrogen/generated/android/c++/JAixScrollIndicatorInsetValue.hpp +61 -0
- package/nitrogen/generated/android/c++/JAixScrollIndicatorInsets.hpp +63 -0
- package/nitrogen/generated/android/c++/JAixScrollOnFooterSizeUpdate.hpp +65 -0
- package/nitrogen/generated/android/c++/JHybridAixCellViewSpec.cpp +65 -0
- package/nitrogen/generated/android/c++/JHybridAixCellViewSpec.hpp +68 -0
- package/nitrogen/generated/android/c++/JHybridAixComposerSpec.cpp +48 -0
- package/nitrogen/generated/android/c++/JHybridAixComposerSpec.hpp +65 -0
- package/nitrogen/generated/android/c++/JHybridAixSpec.cpp +137 -0
- package/nitrogen/generated/android/c++/JHybridAixSpec.hpp +79 -0
- package/nitrogen/generated/android/c++/views/JHybridAixCellViewStateUpdater.cpp +60 -0
- package/nitrogen/generated/android/c++/views/JHybridAixCellViewStateUpdater.hpp +49 -0
- package/nitrogen/generated/android/c++/views/JHybridAixComposerStateUpdater.cpp +53 -0
- package/nitrogen/generated/android/c++/views/JHybridAixComposerStateUpdater.hpp +49 -0
- package/nitrogen/generated/android/c++/views/JHybridAixStateUpdater.cpp +80 -0
- package/nitrogen/generated/android/c++/views/JHybridAixStateUpdater.hpp +49 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/aix/AixAdditionalContentInsets.kt +41 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/aix/AixAdditionalContentInsetsProp.kt +41 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/aix/AixOnLoad.kt +35 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/aix/AixScrollIndicatorInsetValue.kt +41 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/aix/AixScrollIndicatorInsets.kt +41 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/aix/AixScrollOnFooterSizeUpdate.kt +44 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/aix/HybridAixCellViewSpec.kt +65 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/aix/HybridAixComposerSpec.kt +55 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/aix/HybridAixSpec.kt +101 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/aix/views/HybridAixCellViewManager.kt +50 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/aix/views/HybridAixCellViewStateUpdater.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/aix/views/HybridAixComposerManager.kt +50 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/aix/views/HybridAixComposerStateUpdater.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/aix/views/HybridAixManager.kt +50 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/aix/views/HybridAixStateUpdater.kt +23 -0
- package/nitrogen/generated/ios/Aix+autolinking.rb +60 -0
- package/nitrogen/generated/ios/Aix-Swift-Cxx-Bridge.cpp +67 -0
- package/nitrogen/generated/ios/Aix-Swift-Cxx-Bridge.hpp +222 -0
- package/nitrogen/generated/ios/Aix-Swift-Cxx-Umbrella.hpp +70 -0
- package/nitrogen/generated/ios/AixAutolinking.mm +49 -0
- package/nitrogen/generated/ios/AixAutolinking.swift +55 -0
- package/nitrogen/generated/ios/c++/HybridAixCellViewSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridAixCellViewSpecSwift.hpp +80 -0
- package/nitrogen/generated/ios/c++/HybridAixComposerSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridAixComposerSpecSwift.hpp +69 -0
- package/nitrogen/generated/ios/c++/HybridAixSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridAixSpecSwift.hpp +142 -0
- package/nitrogen/generated/ios/c++/views/HybridAixCellViewComponent.mm +101 -0
- package/nitrogen/generated/ios/c++/views/HybridAixComponent.mm +126 -0
- package/nitrogen/generated/ios/c++/views/HybridAixComposerComponent.mm +92 -0
- package/nitrogen/generated/ios/swift/AixAdditionalContentInsets.swift +47 -0
- package/nitrogen/generated/ios/swift/AixAdditionalContentInsetsProp.swift +71 -0
- package/nitrogen/generated/ios/swift/AixScrollIndicatorInsetValue.swift +47 -0
- package/nitrogen/generated/ios/swift/AixScrollIndicatorInsets.swift +71 -0
- package/nitrogen/generated/ios/swift/AixScrollOnFooterSizeUpdate.swift +89 -0
- package/nitrogen/generated/ios/swift/HybridAixCellViewSpec.swift +57 -0
- package/nitrogen/generated/ios/swift/HybridAixCellViewSpec_cxx.swift +151 -0
- package/nitrogen/generated/ios/swift/HybridAixComposerSpec.swift +56 -0
- package/nitrogen/generated/ios/swift/HybridAixComposerSpec_cxx.swift +131 -0
- package/nitrogen/generated/ios/swift/HybridAixSpec.swift +63 -0
- package/nitrogen/generated/ios/swift/HybridAixSpec_cxx.swift +292 -0
- package/nitrogen/generated/shared/c++/AixAdditionalContentInsets.hpp +79 -0
- package/nitrogen/generated/shared/c++/AixAdditionalContentInsetsProp.hpp +81 -0
- package/nitrogen/generated/shared/c++/AixScrollIndicatorInsetValue.hpp +79 -0
- package/nitrogen/generated/shared/c++/AixScrollIndicatorInsets.hpp +81 -0
- package/nitrogen/generated/shared/c++/AixScrollOnFooterSizeUpdate.hpp +83 -0
- package/nitrogen/generated/shared/c++/HybridAixCellViewSpec.cpp +24 -0
- package/nitrogen/generated/shared/c++/HybridAixCellViewSpec.hpp +65 -0
- package/nitrogen/generated/shared/c++/HybridAixComposerSpec.cpp +21 -0
- package/nitrogen/generated/shared/c++/HybridAixComposerSpec.hpp +62 -0
- package/nitrogen/generated/shared/c++/HybridAixSpec.cpp +36 -0
- package/nitrogen/generated/shared/c++/HybridAixSpec.hpp +85 -0
- package/nitrogen/generated/shared/c++/views/HybridAixCellViewComponent.cpp +99 -0
- package/nitrogen/generated/shared/c++/views/HybridAixCellViewComponent.hpp +108 -0
- package/nitrogen/generated/shared/c++/views/HybridAixComponent.cpp +159 -0
- package/nitrogen/generated/shared/c++/views/HybridAixComponent.hpp +117 -0
- package/nitrogen/generated/shared/c++/views/HybridAixComposerComponent.cpp +75 -0
- package/nitrogen/generated/shared/c++/views/HybridAixComposerComponent.hpp +106 -0
- package/nitrogen/generated/shared/json/AixCellViewConfig.json +11 -0
- package/nitrogen/generated/shared/json/AixComposerConfig.json +9 -0
- package/nitrogen/generated/shared/json/AixConfig.json +16 -0
- package/package.json +113 -14
- package/src/aix.tsx +43 -0
- package/src/fade-in/createUsePool.ts +46 -0
- package/src/fade-in/createUseStaggered.ts +82 -0
- package/src/fade-in/index.tsx +97 -0
- package/src/footer.tsx +30 -0
- package/src/index.ts +20 -16
- package/src/views/aix.nitro.ts +148 -0
- package/docs/API.md +0 -288
- package/jest.config.js +0 -17
- package/lib/__tests__/deferredIterable.test.d.ts +0 -1
- package/lib/__tests__/deferredIterable.test.js +0 -108
- package/lib/__tests__/filter.test.d.ts +0 -1
- package/lib/__tests__/filter.test.js +0 -53
- package/lib/__tests__/flatMap.test.d.ts +0 -1
- package/lib/__tests__/flatMap.test.js +0 -77
- package/lib/__tests__/lookahead.test.d.ts +0 -1
- package/lib/__tests__/lookahead.test.js +0 -57
- package/lib/__tests__/map.test.d.ts +0 -1
- package/lib/__tests__/map.test.js +0 -53
- package/lib/__tests__/merge.test.d.ts +0 -1
- package/lib/__tests__/merge.test.js +0 -55
- package/lib/__tests__/reduce.test.d.ts +0 -1
- package/lib/__tests__/reduce.test.js +0 -52
- package/lib/__tests__/spanAll.test.d.ts +0 -1
- package/lib/__tests__/spanAll.test.js +0 -120
- package/lib/concat.d.ts +0 -4
- package/lib/concat.js +0 -126
- package/lib/deferred.d.ts +0 -9
- package/lib/deferred.js +0 -18
- package/lib/deferredIterable.d.ts +0 -22
- package/lib/deferredIterable.js +0 -111
- package/lib/filter.d.ts +0 -7
- package/lib/filter.js +0 -99
- package/lib/flatMap.d.ts +0 -1
- package/lib/flatMap.js +0 -119
- package/lib/fromEvent.d.ts +0 -5
- package/lib/fromEvent.js +0 -13
- package/lib/index.d.ts +0 -16
- package/lib/index.js +0 -34
- package/lib/insert.d.ts +0 -4
- package/lib/insert.js +0 -113
- package/lib/interval.d.ts +0 -4
- package/lib/interval.js +0 -64
- package/lib/iterableToArray.d.ts +0 -1
- package/lib/iterableToArray.js +0 -87
- package/lib/iteratorToIterable.d.ts +0 -6
- package/lib/iteratorToIterable.js +0 -70
- package/lib/lookahead.d.ts +0 -10
- package/lib/lookahead.js +0 -78
- package/lib/map.d.ts +0 -4
- package/lib/map.js +0 -98
- package/lib/merge.d.ts +0 -6
- package/lib/merge.js +0 -21
- package/lib/of.d.ts +0 -3
- package/lib/of.js +0 -5
- package/lib/reduce.d.ts +0 -4
- package/lib/reduce.js +0 -92
- package/lib/restToIterable.d.ts +0 -4
- package/lib/restToIterable.js +0 -73
- package/lib/spanAll.d.ts +0 -1
- package/lib/spanAll.js +0 -29
- package/lib/tap.d.ts +0 -4
- package/lib/tap.js +0 -96
- package/lib/toCallbacks.d.ts +0 -11
- package/lib/toCallbacks.js +0 -97
- package/lib/zip.d.ts +0 -4
- package/lib/zip.js +0 -75
- package/src/__tests__/deferredIterable.test.ts +0 -22
- package/src/__tests__/filter.test.ts +0 -10
- package/src/__tests__/flatMap.test.ts +0 -12
- package/src/__tests__/lookahead.test.ts +0 -9
- package/src/__tests__/map.test.ts +0 -10
- package/src/__tests__/merge.test.ts +0 -9
- package/src/__tests__/reduce.test.ts +0 -10
- package/src/__tests__/spanAll.test.ts +0 -17
- package/src/concat.ts +0 -13
- package/src/deferred.ts +0 -16
- package/src/deferredIterable.ts +0 -111
- package/src/filter.ts +0 -16
- package/src/flatMap.ts +0 -9
- package/src/fromEvent.ts +0 -16
- package/src/insert.ts +0 -13
- package/src/interval.ts +0 -20
- package/src/iterableToArray.ts +0 -7
- package/src/iteratorToIterable.ts +0 -12
- package/src/lookahead.ts +0 -27
- package/src/map.ts +0 -11
- package/src/merge.ts +0 -18
- package/src/of.ts +0 -4
- package/src/reduce.ts +0 -12
- package/src/restToIterable.ts +0 -8
- package/src/spanAll.ts +0 -26
- package/src/tap.ts +0 -11
- package/src/toCallbacks.ts +0 -27
- package/src/zip.ts +0 -19
- package/tsconfig.json +0 -63
- package/yarn.lock +0 -3514
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
//
|
|
2
|
+
// HybridAixBlank.swift
|
|
3
|
+
// Pods
|
|
4
|
+
//
|
|
5
|
+
// Created by Fernando Rojo on 12/11/2025.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import Foundation
|
|
9
|
+
import UIKit
|
|
10
|
+
|
|
11
|
+
/// HybridAixCellView wraps each list item in the chat (the "blank" cell at the end)
|
|
12
|
+
/// It tracks its index and whether it's the last item,
|
|
13
|
+
/// and reports size changes to the AixContext
|
|
14
|
+
class HybridAixCellView: HybridAixCellViewSpec {
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
// MARK: - Inner View
|
|
18
|
+
|
|
19
|
+
/// Custom UIView that notifies owner when layout changes
|
|
20
|
+
private final class InnerView: UIView {
|
|
21
|
+
weak var owner: HybridAixCellView?
|
|
22
|
+
|
|
23
|
+
override init(frame: CGRect) {
|
|
24
|
+
super.init(frame: frame)
|
|
25
|
+
autoresizingMask = [.flexibleWidth]
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
required init?(coder: NSCoder) {
|
|
29
|
+
fatalError("init(coder:) has not been implemented")
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
override func layoutSubviews() {
|
|
33
|
+
super.layoutSubviews()
|
|
34
|
+
owner?.handleLayoutChange()
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
override func didMoveToSuperview() {
|
|
38
|
+
super.didMoveToSuperview()
|
|
39
|
+
owner?.handleDidMoveToSuperview()
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
override func didMoveToWindow() {
|
|
43
|
+
super.didMoveToWindow()
|
|
44
|
+
owner?.handleDidMoveToWindow()
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
override func willMove(toSuperview newSuperview: UIView?) {
|
|
48
|
+
super.willMove(toSuperview: newSuperview)
|
|
49
|
+
if newSuperview == nil {
|
|
50
|
+
// Being removed from superview - unregister
|
|
51
|
+
owner?.handleWillRemoveFromSuperview()
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// MARK: - Properties
|
|
57
|
+
|
|
58
|
+
/// The UIView for this cell
|
|
59
|
+
let view: UIView
|
|
60
|
+
|
|
61
|
+
/// The index of this cell in the list
|
|
62
|
+
var index: Double = 0 {
|
|
63
|
+
didSet {
|
|
64
|
+
if oldValue != index {
|
|
65
|
+
updateRegistration()
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/// Whether this is the last cell in the list
|
|
71
|
+
/// When true, this cell becomes the "blank view" used for calculating scroll offsets
|
|
72
|
+
var isLast: Bool = false {
|
|
73
|
+
didSet {
|
|
74
|
+
if oldValue != isLast {
|
|
75
|
+
updateBlankViewStatus()
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/// Cached reference to the AixContext (found on first access)
|
|
81
|
+
private weak var cachedAixContext: AixContext?
|
|
82
|
+
|
|
83
|
+
/// Last reported size (to avoid reporting unchanged sizes)
|
|
84
|
+
private var lastReportedSize: CGSize = .zero
|
|
85
|
+
|
|
86
|
+
// MARK: - Initialization
|
|
87
|
+
|
|
88
|
+
override init() {
|
|
89
|
+
let inner = InnerView()
|
|
90
|
+
self.view = inner
|
|
91
|
+
super.init()
|
|
92
|
+
inner.owner = self
|
|
93
|
+
getAixContext()?.registerCell(self)
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// MARK: - Context Access
|
|
97
|
+
|
|
98
|
+
/// Get the AixContext, caching it for performance
|
|
99
|
+
private func getAixContext() -> AixContext? {
|
|
100
|
+
if let cached = cachedAixContext {
|
|
101
|
+
return cached
|
|
102
|
+
}
|
|
103
|
+
let ctx = view.useAixContext()
|
|
104
|
+
cachedAixContext = ctx
|
|
105
|
+
return ctx
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// MARK: - Lifecycle Handlers
|
|
109
|
+
|
|
110
|
+
/// Called when the view is added to a superview
|
|
111
|
+
private func handleDidMoveToSuperview() {
|
|
112
|
+
// Don't register here - hierarchy may not be complete yet
|
|
113
|
+
// Wait for didMoveToWindow instead
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/// Called when the view is added to a window (full hierarchy is connected)
|
|
117
|
+
private func handleDidMoveToWindow() {
|
|
118
|
+
guard view.window != nil else { return }
|
|
119
|
+
|
|
120
|
+
// Clear cached context since hierarchy changed
|
|
121
|
+
cachedAixContext = nil
|
|
122
|
+
|
|
123
|
+
// Register with the new context
|
|
124
|
+
if let ctx = getAixContext() {
|
|
125
|
+
ctx.registerCell(self)
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/// Called when the view is about to be removed from superview
|
|
130
|
+
private func handleWillRemoveFromSuperview() {
|
|
131
|
+
// Unregister from context before removal
|
|
132
|
+
if let ctx = cachedAixContext {
|
|
133
|
+
ctx.unregisterCell(self)
|
|
134
|
+
}
|
|
135
|
+
cachedAixContext = nil
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/// Called when layoutSubviews fires (size may have changed)
|
|
139
|
+
private func handleLayoutChange() {
|
|
140
|
+
// Only report size changes for the last cell (blank view)
|
|
141
|
+
// and only if the size actually changed
|
|
142
|
+
let currentSize = view.bounds.size
|
|
143
|
+
if isLast && currentSize != lastReportedSize {
|
|
144
|
+
lastReportedSize = currentSize
|
|
145
|
+
if let ctx = getAixContext() {
|
|
146
|
+
ctx.reportBlankViewSizeChange(size: currentSize, index: Int(index))
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// MARK: - Registration
|
|
152
|
+
|
|
153
|
+
/// Update registration with context (called when index changes)
|
|
154
|
+
private func updateRegistration() {
|
|
155
|
+
guard let ctx = getAixContext() else { return }
|
|
156
|
+
ctx.registerCell(self)
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/// Update blank view status (called when isLast changes)
|
|
160
|
+
private func updateBlankViewStatus() {
|
|
161
|
+
guard let ctx = getAixContext() else { return }
|
|
162
|
+
|
|
163
|
+
if isLast {
|
|
164
|
+
// This cell is now the last one - become the blank view
|
|
165
|
+
ctx.blankView = self
|
|
166
|
+
let currentSize = view.bounds.size
|
|
167
|
+
lastReportedSize = currentSize
|
|
168
|
+
ctx.reportBlankViewSizeChange(size: currentSize, index: Int(index))
|
|
169
|
+
} else if ctx.blankView === self {
|
|
170
|
+
// This cell is no longer last - clear blank view reference
|
|
171
|
+
ctx.blankView = nil
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
//
|
|
2
|
+
// HybridAixComposer.swift
|
|
3
|
+
// Pods
|
|
4
|
+
//
|
|
5
|
+
// Created by Fernando Rojo on 12/11/2025.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import Foundation
|
|
9
|
+
import UIKit
|
|
10
|
+
|
|
11
|
+
/// HybridAixComposer wraps the chat composer input
|
|
12
|
+
/// It registers itself with the AixContext so the context can track composer height
|
|
13
|
+
/// for calculating content insets
|
|
14
|
+
class HybridAixComposer: HybridAixComposerSpec {
|
|
15
|
+
|
|
16
|
+
// MARK: - Inner View
|
|
17
|
+
|
|
18
|
+
/// Custom UIView that notifies owner when layout changes
|
|
19
|
+
private final class InnerView: UIView {
|
|
20
|
+
weak var owner: HybridAixComposer?
|
|
21
|
+
|
|
22
|
+
override func layoutSubviews() {
|
|
23
|
+
super.layoutSubviews()
|
|
24
|
+
owner?.handleLayoutChange()
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
override func didMoveToWindow() {
|
|
28
|
+
super.didMoveToWindow()
|
|
29
|
+
owner?.handleDidMoveToWindow()
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
override func willMove(toSuperview newSuperview: UIView?) {
|
|
33
|
+
super.willMove(toSuperview: newSuperview)
|
|
34
|
+
if newSuperview == nil {
|
|
35
|
+
// Being removed from superview - unregister
|
|
36
|
+
owner?.handleWillRemoveFromSuperview()
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// MARK: - Touch Handling
|
|
41
|
+
|
|
42
|
+
/// Let touches pass through to React Native children
|
|
43
|
+
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
|
|
44
|
+
return false
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// MARK: - Properties
|
|
49
|
+
|
|
50
|
+
/// The UIView for this composer
|
|
51
|
+
let view: UIView
|
|
52
|
+
|
|
53
|
+
/// Cached reference to the AixContext (found on first access)
|
|
54
|
+
private weak var cachedAixContext: AixContext?
|
|
55
|
+
|
|
56
|
+
/// Last reported height (to avoid reporting unchanged heights)
|
|
57
|
+
private var lastReportedHeight: CGFloat = 0
|
|
58
|
+
|
|
59
|
+
// MARK: - Initialization
|
|
60
|
+
|
|
61
|
+
override init() {
|
|
62
|
+
let inner = InnerView()
|
|
63
|
+
self.view = inner
|
|
64
|
+
super.init()
|
|
65
|
+
inner.owner = self
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// MARK: - Context Access
|
|
69
|
+
|
|
70
|
+
/// Get the AixContext, caching it for performance
|
|
71
|
+
private func getAixContext() -> AixContext? {
|
|
72
|
+
if let cached = cachedAixContext {
|
|
73
|
+
return cached
|
|
74
|
+
}
|
|
75
|
+
let ctx = view.useAixContext()
|
|
76
|
+
cachedAixContext = ctx
|
|
77
|
+
return ctx
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// MARK: - Lifecycle Handlers
|
|
81
|
+
|
|
82
|
+
/// Called when the view is added to a window (full hierarchy is connected)
|
|
83
|
+
private func handleDidMoveToWindow() {
|
|
84
|
+
guard view.window != nil else { return }
|
|
85
|
+
|
|
86
|
+
// Clear cached context since hierarchy changed
|
|
87
|
+
cachedAixContext = nil
|
|
88
|
+
|
|
89
|
+
// Register with the new context
|
|
90
|
+
if let ctx = getAixContext() {
|
|
91
|
+
ctx.registerComposerView(self)
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/// Called when the view is about to be removed from superview
|
|
96
|
+
private func handleWillRemoveFromSuperview() {
|
|
97
|
+
// Unregister from context before removal
|
|
98
|
+
if let ctx = cachedAixContext {
|
|
99
|
+
ctx.unregisterComposerView(self)
|
|
100
|
+
}
|
|
101
|
+
cachedAixContext = nil
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/// Called when layoutSubviews fires (size may have changed)
|
|
105
|
+
private func handleLayoutChange() {
|
|
106
|
+
let currentHeight = view.bounds.height
|
|
107
|
+
if currentHeight != lastReportedHeight {
|
|
108
|
+
lastReportedHeight = currentHeight
|
|
109
|
+
getAixContext()?.reportComposerHeightChange(height: currentHeight)
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// MARK: - Deinitialization
|
|
114
|
+
|
|
115
|
+
deinit {
|
|
116
|
+
// Ensure we unregister when deallocated
|
|
117
|
+
cachedAixContext?.unregisterComposerView(self)
|
|
118
|
+
}
|
|
119
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Aix = void 0;
|
|
7
|
+
var _reactNativeNitroModules = require("react-native-nitro-modules");
|
|
8
|
+
var _AixConfig = _interopRequireDefault(require("../nitrogen/generated/shared/json/AixConfig.json"));
|
|
9
|
+
var _react = require("react");
|
|
10
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
11
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
+
const AixInternal = (0, _reactNativeNitroModules.getHostComponent)('Aix', () => _AixConfig.default);
|
|
13
|
+
const Aix = exports.Aix = /*#__PURE__*/(0, _react.forwardRef)(function Aix(props, ref) {
|
|
14
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(AixInternal, {
|
|
15
|
+
...props,
|
|
16
|
+
hybridRef: ref ? (0, _reactNativeNitroModules.callback)(r => {
|
|
17
|
+
if (typeof ref === 'function') {
|
|
18
|
+
ref(r);
|
|
19
|
+
} else {
|
|
20
|
+
ref.current = r;
|
|
21
|
+
}
|
|
22
|
+
}) : undefined
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=aix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNativeNitroModules","require","_AixConfig","_interopRequireDefault","_react","_jsxRuntime","e","__esModule","default","AixInternal","getHostComponent","AixConfig","Aix","exports","forwardRef","props","ref","jsx","hybridRef","callback","r","current","undefined"],"sourceRoot":"../../src","sources":["aix.tsx"],"mappings":";;;;;;AAAA,IAAAA,wBAAA,GAAAC,OAAA;AAKA,IAAAC,UAAA,GAAAC,sBAAA,CAAAF,OAAA;AAEA,IAAAG,MAAA,GAAAH,OAAA;AAAkC,IAAAI,WAAA,GAAAJ,OAAA;AAAA,SAAAE,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAIlC,MAAMG,WAAW,GAAG,IAAAC,yCAAgB,EAClC,KAAK,EACL,MAAMC,kBACR,CAAC;AAEM,MAAMC,GAAG,GAAAC,OAAA,CAAAD,GAAA,gBAAG,IAAAE,iBAAU,EAC3B,SAASF,GAAGA,CAACG,KAAK,EAAEC,GAAG,EAAE;EACvB,oBACE,IAAAX,WAAA,CAAAY,GAAA,EAACR,WAAW;IAAA,GACNM,KAAK;IACTG,SAAS,EACPF,GAAG,GACC,IAAAG,iCAAQ,EAAEC,CAAC,IAAK;MACd,IAAI,OAAOJ,GAAG,KAAK,UAAU,EAAE;QAC7BA,GAAG,CAACI,CAAC,CAAC;MACR,CAAC,MAAM;QACLJ,GAAG,CAACK,OAAO,GAAGD,CAAC;MACjB;IACF,CAAC,CAAC,GACFE;EACL,CACF,CAAC;AAEN,CACF,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createUsePool = createUsePool;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
function createUsePool(maxPoolSize) {
|
|
9
|
+
// Use parallel arrays instead of one array for fast array operations
|
|
10
|
+
const items = [];
|
|
11
|
+
const setters = [];
|
|
12
|
+
const removeItem = (item, setInactive) => {
|
|
13
|
+
const index = items.indexOf(item);
|
|
14
|
+
if (index !== -1) {
|
|
15
|
+
if (setInactive) {
|
|
16
|
+
setters[index](false);
|
|
17
|
+
}
|
|
18
|
+
items.splice(index, 1);
|
|
19
|
+
setters.splice(index, 1);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
const usePool = () => {
|
|
23
|
+
// Use a stable object reference as the key
|
|
24
|
+
const item = (0, _react.useRef)({}).current;
|
|
25
|
+
const [isActive, setIsActive] = (0, _react.useState)(true);
|
|
26
|
+
|
|
27
|
+
// A function that is stable and only changes when the item changes
|
|
28
|
+
const evict = (0, _react.useCallback)(() => removeItem(item, true), [item]);
|
|
29
|
+
(0, _react.useEffect)(() => {
|
|
30
|
+
items.push(item);
|
|
31
|
+
setters.push(setIsActive);
|
|
32
|
+
|
|
33
|
+
// Evict oldest item if over capacity
|
|
34
|
+
if (maxPoolSize && items.length > maxPoolSize) {
|
|
35
|
+
items.shift();
|
|
36
|
+
const evictedListener = setters.shift();
|
|
37
|
+
evictedListener(false);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Remove from pool when unmounting
|
|
41
|
+
return () => removeItem(item);
|
|
42
|
+
}, [item]);
|
|
43
|
+
return {
|
|
44
|
+
isActive,
|
|
45
|
+
evict
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
return usePool;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=createUsePool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","createUsePool","maxPoolSize","items","setters","removeItem","item","setInactive","index","indexOf","splice","usePool","useRef","current","isActive","setIsActive","useState","evict","useCallback","useEffect","push","length","shift","evictedListener"],"sourceRoot":"../../../src","sources":["fade-in/createUsePool.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEO,SAASC,aAAaA,CAACC,WAAoB,EAAE;EAClD;EACA,MAAMC,KAAe,GAAG,EAAE;EAC1B,MAAMC,OAAqC,GAAG,EAAE;EAEhD,MAAMC,UAAU,GAAGA,CAACC,IAAY,EAAEC,WAAqB,KAAK;IAC1D,MAAMC,KAAK,GAAGL,KAAK,CAACM,OAAO,CAACH,IAAI,CAAC;IACjC,IAAIE,KAAK,KAAK,CAAC,CAAC,EAAE;MAChB,IAAID,WAAW,EAAE;QACfH,OAAO,CAACI,KAAK,CAAC,CAAE,KAAK,CAAC;MACxB;MACAL,KAAK,CAACO,MAAM,CAACF,KAAK,EAAE,CAAC,CAAC;MACtBJ,OAAO,CAACM,MAAM,CAACF,KAAK,EAAE,CAAC,CAAC;IAC1B;EACF,CAAC;EAED,MAAMG,OAAO,GAAGA,CAAA,KAAM;IACpB;IACA,MAAML,IAAI,GAAG,IAAAM,aAAM,EAAC,CAAC,CAAC,CAAC,CAACC,OAAO;IAC/B,MAAM,CAACC,QAAQ,EAAEC,WAAW,CAAC,GAAG,IAAAC,eAAQ,EAAC,IAAI,CAAC;;IAE9C;IACA,MAAMC,KAAK,GAAG,IAAAC,kBAAW,EAAC,MAAMb,UAAU,CAACC,IAAI,EAAE,IAAI,CAAC,EAAE,CAACA,IAAI,CAAC,CAAC;IAE/D,IAAAa,gBAAS,EAAC,MAAM;MACdhB,KAAK,CAACiB,IAAI,CAACd,IAAI,CAAC;MAChBF,OAAO,CAACgB,IAAI,CAACL,WAAW,CAAC;;MAEzB;MACA,IAAIb,WAAW,IAAIC,KAAK,CAACkB,MAAM,GAAGnB,WAAW,EAAE;QAC7CC,KAAK,CAACmB,KAAK,CAAC,CAAC;QACb,MAAMC,eAAe,GAAGnB,OAAO,CAACkB,KAAK,CAAC,CAAE;QACxCC,eAAe,CAAC,KAAK,CAAC;MACxB;;MAEA;MACA,OAAO,MAAMlB,UAAU,CAACC,IAAI,CAAC;IAC/B,CAAC,EAAE,CAACA,IAAI,CAAC,CAAC;IAEV,OAAO;MAAEQ,QAAQ;MAAEG;IAAM,CAAC;EAC5B,CAAC;EAED,OAAON,OAAO;AAChB","ignoreList":[]}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createUseStaggered = createUseStaggered;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
// Creates a staggered animation system - only one animation starts per frame/delay
|
|
9
|
+
function createUseStaggered(delay) {
|
|
10
|
+
const animationQueue = [];
|
|
11
|
+
let isProcessing = false;
|
|
12
|
+
|
|
13
|
+
// Schedule next animation with delay or requestAnimationFrame
|
|
14
|
+
const scheduleNext = () => {
|
|
15
|
+
if (delay && delay > 0) {
|
|
16
|
+
setTimeout(processNextAnimation, delay);
|
|
17
|
+
} else {
|
|
18
|
+
requestAnimationFrame(processNextAnimation);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
const processNextAnimation = () => {
|
|
22
|
+
if (animationQueue.length === 0) {
|
|
23
|
+
isProcessing = false;
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Calculate how many animations to process this cycle
|
|
28
|
+
const queueLength = animationQueue.length;
|
|
29
|
+
let animationsToProcess = 1;
|
|
30
|
+
|
|
31
|
+
// Catch-up logic: process more animations when queue is long
|
|
32
|
+
if (queueLength > 10) {
|
|
33
|
+
animationsToProcess = Math.min(5, Math.ceil(queueLength / 4));
|
|
34
|
+
} else if (queueLength > 5) {
|
|
35
|
+
animationsToProcess = 2;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Process the calculated number of animations
|
|
39
|
+
for (let i = 0; i < animationsToProcess && animationQueue.length > 0; i++) {
|
|
40
|
+
const startAnimation = animationQueue.shift();
|
|
41
|
+
startAnimation();
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Continue processing or mark as idle
|
|
45
|
+
if (animationQueue.length > 0) {
|
|
46
|
+
scheduleNext();
|
|
47
|
+
} else {
|
|
48
|
+
isProcessing = false;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
const queueAnimation = startFn => {
|
|
52
|
+
animationQueue.push(startFn);
|
|
53
|
+
if (!isProcessing) {
|
|
54
|
+
isProcessing = true;
|
|
55
|
+
scheduleNext();
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
const useStaggered = animationFn => {
|
|
59
|
+
const animationRef = (0, _react.useRef)(animationFn);
|
|
60
|
+
|
|
61
|
+
// Queue animation on mount
|
|
62
|
+
(0, _react.useEffect)(() => {
|
|
63
|
+
if (animationRef.current) {
|
|
64
|
+
queueAnimation(animationRef.current);
|
|
65
|
+
}
|
|
66
|
+
}, []);
|
|
67
|
+
(0, _react.useEffect)(() => {
|
|
68
|
+
const animation = animationRef.current;
|
|
69
|
+
return () => {
|
|
70
|
+
// Clean up pending animation on unmount
|
|
71
|
+
if (animation) {
|
|
72
|
+
const index = animationQueue.indexOf(animation);
|
|
73
|
+
if (index !== -1) {
|
|
74
|
+
animationQueue.splice(index, 1);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
}, []);
|
|
79
|
+
};
|
|
80
|
+
return useStaggered;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=createUseStaggered.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","createUseStaggered","delay","animationQueue","isProcessing","scheduleNext","setTimeout","processNextAnimation","requestAnimationFrame","length","queueLength","animationsToProcess","Math","min","ceil","i","startAnimation","shift","queueAnimation","startFn","push","useStaggered","animationFn","animationRef","useRef","useEffect","current","animation","index","indexOf","splice"],"sourceRoot":"../../../src","sources":["fade-in/createUseStaggered.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA;AACO,SAASC,kBAAkBA,CAACC,KAAa,EAAE;EAChD,MAAMC,cAA8B,GAAG,EAAE;EACzC,IAAIC,YAAY,GAAG,KAAK;;EAExB;EACA,MAAMC,YAAY,GAAGA,CAAA,KAAM;IACzB,IAAIH,KAAK,IAAIA,KAAK,GAAG,CAAC,EAAE;MACtBI,UAAU,CAACC,oBAAoB,EAAEL,KAAK,CAAC;IACzC,CAAC,MAAM;MACLM,qBAAqB,CAACD,oBAAoB,CAAC;IAC7C;EACF,CAAC;EAED,MAAMA,oBAAoB,GAAGA,CAAA,KAAM;IACjC,IAAIJ,cAAc,CAACM,MAAM,KAAK,CAAC,EAAE;MAC/BL,YAAY,GAAG,KAAK;MACpB;IACF;;IAEA;IACA,MAAMM,WAAW,GAAGP,cAAc,CAACM,MAAM;IACzC,IAAIE,mBAAmB,GAAG,CAAC;;IAE3B;IACA,IAAID,WAAW,GAAG,EAAE,EAAE;MACpBC,mBAAmB,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACE,IAAI,CAACJ,WAAW,GAAG,CAAC,CAAC,CAAC;IAC/D,CAAC,MAAM,IAAIA,WAAW,GAAG,CAAC,EAAE;MAC1BC,mBAAmB,GAAG,CAAC;IACzB;;IAEA;IACA,KAAK,IAAII,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGJ,mBAAmB,IAAIR,cAAc,CAACM,MAAM,GAAG,CAAC,EAAEM,CAAC,EAAE,EAAE;MACzE,MAAMC,cAAc,GAAGb,cAAc,CAACc,KAAK,CAAC,CAAE;MAC9CD,cAAc,CAAC,CAAC;IAClB;;IAEA;IACA,IAAIb,cAAc,CAACM,MAAM,GAAG,CAAC,EAAE;MAC7BJ,YAAY,CAAC,CAAC;IAChB,CAAC,MAAM;MACLD,YAAY,GAAG,KAAK;IACtB;EACF,CAAC;EAED,MAAMc,cAAc,GAAIC,OAAmB,IAAK;IAC9ChB,cAAc,CAACiB,IAAI,CAACD,OAAO,CAAC;IAE5B,IAAI,CAACf,YAAY,EAAE;MACjBA,YAAY,GAAG,IAAI;MACnBC,YAAY,CAAC,CAAC;IAChB;EACF,CAAC;EAED,MAAMgB,YAAY,GAAIC,WAAuB,IAAK;IAChD,MAAMC,YAAY,GAAG,IAAAC,aAAM,EAAsBF,WAAW,CAAC;;IAE7D;IACA,IAAAG,gBAAS,EAAC,MAAM;MACd,IAAIF,YAAY,CAACG,OAAO,EAAE;QACxBR,cAAc,CAACK,YAAY,CAACG,OAAO,CAAC;MACtC;IACF,CAAC,EAAE,EAAE,CAAC;IAEN,IAAAD,gBAAS,EAAC,MAAM;MACd,MAAME,SAAS,GAAGJ,YAAY,CAACG,OAAO;MACtC,OAAO,MAAM;QACX;QACA,IAAIC,SAAS,EAAE;UACb,MAAMC,KAAK,GAAGzB,cAAc,CAAC0B,OAAO,CAACF,SAAS,CAAC;UAC/C,IAAIC,KAAK,KAAK,CAAC,CAAC,EAAE;YAChBzB,cAAc,CAAC2B,MAAM,CAACF,KAAK,EAAE,CAAC,CAAC;UACjC;QACF;MACF,CAAC;IACH,CAAC,EAAE,EAAE,CAAC;EACR,CAAC;EAED,OAAOP,YAAY;AACrB","ignoreList":[]}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.TextFadeInStaggeredIfStreaming = void 0;
|
|
7
|
+
var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
|
|
8
|
+
var _createUsePool = require("./createUsePool");
|
|
9
|
+
var _createUseStaggered = require("./createUseStaggered");
|
|
10
|
+
var _react = require("react");
|
|
11
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
13
|
+
const useIsAnimatedInPool = (0, _createUsePool.createUsePool)();
|
|
14
|
+
const useStaggeredAnimation = (0, _createUseStaggered.createUseStaggered)(32);
|
|
15
|
+
function FadeIn({
|
|
16
|
+
children,
|
|
17
|
+
onFadedIn,
|
|
18
|
+
Component = _reactNativeReanimated.default.Text
|
|
19
|
+
}) {
|
|
20
|
+
const progress = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
21
|
+
const startAnimation = () => {
|
|
22
|
+
progress.set((0, _reactNativeReanimated.withTiming)(1, {
|
|
23
|
+
duration: 500
|
|
24
|
+
}));
|
|
25
|
+
setTimeout(onFadedIn, 500);
|
|
26
|
+
};
|
|
27
|
+
useStaggeredAnimation(startAnimation);
|
|
28
|
+
const animatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => ({
|
|
29
|
+
opacity: progress.get()
|
|
30
|
+
}));
|
|
31
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(Component, {
|
|
32
|
+
style: animatedStyle,
|
|
33
|
+
children: children
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
const AnimatedFadeInText = /*#__PURE__*/(0, _react.memo)(function AnimatedFadeInText(props) {
|
|
37
|
+
const chunks = props.text.split(' ');
|
|
38
|
+
return chunks.map((chunk, i) => {
|
|
39
|
+
if (i < chunks.length - 1) chunk += ' ';
|
|
40
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(TextFadeInStaggered, {
|
|
41
|
+
text: chunk
|
|
42
|
+
}, i);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
const TextFadeInStaggeredIfStreaming = exports.TextFadeInStaggeredIfStreaming = /*#__PURE__*/(0, _react.memo)(function TextFadeInStaggeredIfStreaming({
|
|
46
|
+
children: childrenProp,
|
|
47
|
+
disabled
|
|
48
|
+
}) {
|
|
49
|
+
const [enabled] = (0, _react.useState)(!disabled);
|
|
50
|
+
let children = childrenProp;
|
|
51
|
+
if (enabled && children) {
|
|
52
|
+
if (Array.isArray(children)) {
|
|
53
|
+
children = _react.Children.map(children, (child, i) => typeof child === 'string' ? /*#__PURE__*/(0, _jsxRuntime.jsx)(AnimatedFadeInText, {
|
|
54
|
+
text: child
|
|
55
|
+
}, i) : child);
|
|
56
|
+
} else if (typeof children === 'string') {
|
|
57
|
+
children = /*#__PURE__*/(0, _jsxRuntime.jsx)(AnimatedFadeInText, {
|
|
58
|
+
text: children
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return children;
|
|
63
|
+
});
|
|
64
|
+
const TextFadeInStaggered = /*#__PURE__*/(0, _react.memo)(function TextFadeInStaggered({
|
|
65
|
+
text
|
|
66
|
+
}) {
|
|
67
|
+
const {
|
|
68
|
+
isActive,
|
|
69
|
+
evict
|
|
70
|
+
} = useIsAnimatedInPool();
|
|
71
|
+
return isActive ? /*#__PURE__*/(0, _jsxRuntime.jsx)(FadeIn, {
|
|
72
|
+
onFadedIn: () => {
|
|
73
|
+
evict();
|
|
74
|
+
},
|
|
75
|
+
children: text
|
|
76
|
+
}) : text;
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNativeReanimated","_interopRequireWildcard","require","_createUsePool","_createUseStaggered","_react","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","useIsAnimatedInPool","createUsePool","useStaggeredAnimation","createUseStaggered","FadeIn","children","onFadedIn","Component","Animated","Text","progress","useSharedValue","startAnimation","withTiming","duration","setTimeout","animatedStyle","useAnimatedStyle","opacity","jsx","style","AnimatedFadeInText","memo","props","chunks","text","split","map","chunk","length","TextFadeInStaggered","TextFadeInStaggeredIfStreaming","exports","childrenProp","disabled","enabled","useState","Array","isArray","Children","child","isActive","evict"],"sourceRoot":"../../../src","sources":["fade-in/index.tsx"],"mappings":";;;;;;AAAA,IAAAA,sBAAA,GAAAC,uBAAA,CAAAC,OAAA;AAKA,IAAAC,cAAA,GAAAD,OAAA;AACA,IAAAE,mBAAA,GAAAF,OAAA;AAEA,IAAAG,MAAA,GAAAH,OAAA;AAAgD,IAAAI,WAAA,GAAAJ,OAAA;AAAA,SAAAD,wBAAAM,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAR,uBAAA,YAAAA,CAAAM,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAEhD,MAAMkB,mBAAmB,GAAG,IAAAC,4BAAa,EAAC,CAAC;AAC3C,MAAMC,qBAAqB,GAAG,IAAAC,sCAAkB,EAAC,EAAE,CAAC;AAEpD,SAASC,MAAMA,CAAC;EACdC,QAAQ;EACRC,SAAS;EACTC,SAAS,GAAGC,8BAAQ,CAACC;AAKvB,CAAC,EAAE;EACD,MAAMC,QAAQ,GAAG,IAAAC,qCAAc,EAAC,CAAC,CAAC;EAElC,MAAMC,cAAc,GAAGA,CAAA,KAAM;IAC3BF,QAAQ,CAAChB,GAAG,CAAC,IAAAmB,iCAAU,EAAC,CAAC,EAAE;MAAEC,QAAQ,EAAE;IAAI,CAAC,CAAC,CAAC;IAC9CC,UAAU,CAACT,SAAS,EAAE,GAAG,CAAC;EAC5B,CAAC;EAEDJ,qBAAqB,CAACU,cAAc,CAAC;EAErC,MAAMI,aAAa,GAAG,IAAAC,uCAAgB,EAAC,OAAO;IAC5CC,OAAO,EAAER,QAAQ,CAACjB,GAAG,CAAC;EACxB,CAAC,CAAC,CAAC;EAEH,oBAAO,IAAAb,WAAA,CAAAuC,GAAA,EAACZ,SAAS;IAACa,KAAK,EAAEJ,aAAc;IAAAX,QAAA,EAAEA;EAAQ,CAAY,CAAC;AAChE;AAEA,MAAMgB,kBAAkB,gBAAG,IAAAC,WAAI,EAAC,SAASD,kBAAkBA,CAACE,KAE3D,EAAE;EACD,MAAMC,MAAM,GAAGD,KAAK,CAACE,IAAI,CAACC,KAAK,CAAC,GAAG,CAAC;EAEpC,OAAOF,MAAM,CAACG,GAAG,CAAC,CAACC,KAAK,EAAExC,CAAC,KAAK;IAC9B,IAAIA,CAAC,GAAGoC,MAAM,CAACK,MAAM,GAAG,CAAC,EAAED,KAAK,IAAI,GAAG;IAEvC,oBAAO,IAAAhD,WAAA,CAAAuC,GAAA,EAACW,mBAAmB;MAASL,IAAI,EAAEG;IAAM,GAAfxC,CAAiB,CAAC;EACrD,CAAC,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM2C,8BAA8B,GAAAC,OAAA,CAAAD,8BAAA,gBAAG,IAAAT,WAAI,EAChD,SAASS,8BAA8BA,CAAC;EACtC1B,QAAQ,EAAE4B,YAAY;EACtBC;AAIF,CAAC,EAAE;EACD,MAAM,CAACC,OAAO,CAAC,GAAG,IAAAC,eAAQ,EAAC,CAACF,QAAQ,CAAC;EAErC,IAAI7B,QAAQ,GAAG4B,YAAY;EAC3B,IAAIE,OAAO,IAAI9B,QAAQ,EAAE;IACvB,IAAIgC,KAAK,CAACC,OAAO,CAACjC,QAAQ,CAAC,EAAE;MAC3BA,QAAQ,GAAGkC,eAAQ,CAACZ,GAAG,CAACtB,QAAQ,EAAE,CAACmC,KAAK,EAAEpD,CAAC,KACzC,OAAOoD,KAAK,KAAK,QAAQ,gBACvB,IAAA5D,WAAA,CAAAuC,GAAA,EAACE,kBAAkB;QAASI,IAAI,EAAEe;MAAM,GAAfpD,CAAiB,CAAC,GAE3CoD,KAEJ,CAAC;IACH,CAAC,MAAM,IAAI,OAAOnC,QAAQ,KAAK,QAAQ,EAAE;MACvCA,QAAQ,gBAAG,IAAAzB,WAAA,CAAAuC,GAAA,EAACE,kBAAkB;QAACI,IAAI,EAAEpB;MAAS,CAAE,CAAC;IACnD;EACF;EAEA,OAAOA,QAAQ;AACjB,CACF,CAAC;AAED,MAAMyB,mBAAmB,gBAAG,IAAAR,WAAI,EAAC,SAASQ,mBAAmBA,CAAC;EAC5DL;AAGF,CAAC,EAAE;EACD,MAAM;IAAEgB,QAAQ;IAAEC;EAAM,CAAC,GAAG1C,mBAAmB,CAAC,CAAC;EACjD,OAAOyC,QAAQ,gBACb,IAAA7D,WAAA,CAAAuC,GAAA,EAACf,MAAM;IACLE,SAAS,EAAEA,CAAA,KAAM;MACfoC,KAAK,CAAC,CAAC;IACT,CAAE;IAAArC,QAAA,EAEDoB;EAAI,CACC,CAAC,GAETA,IACD;AACH,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.AixFooter = AixFooter;
|
|
7
|
+
var _reactNativeNitroModules = require("react-native-nitro-modules");
|
|
8
|
+
var _AixComposerConfig = _interopRequireDefault(require("../nitrogen/generated/shared/json/AixComposerConfig.json"));
|
|
9
|
+
var _reactNative = require("react-native");
|
|
10
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
11
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
+
const AixFooterInternal = (0, _reactNativeNitroModules.getHostComponent)('AixComposer', () => _AixComposerConfig.default);
|
|
13
|
+
function AixFooter(props) {
|
|
14
|
+
if (__DEV__) {
|
|
15
|
+
const flat = _reactNative.StyleSheet.flatten(props.style);
|
|
16
|
+
const broken = Object.keys({
|
|
17
|
+
paddingBottom: flat.paddingBottom,
|
|
18
|
+
padding: flat.padding
|
|
19
|
+
}).filter(key => flat[key] !== undefined);
|
|
20
|
+
if (broken.length) {
|
|
21
|
+
console.error(`<AixFooter /> You used ${broken.join(', ')} in the style prop. Vertical padding is not supported on AixFooter directly. Please apply it to a child view instead.`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(AixFooterInternal, {
|
|
25
|
+
...props
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=footer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNativeNitroModules","require","_AixComposerConfig","_interopRequireDefault","_reactNative","_jsxRuntime","e","__esModule","default","AixFooterInternal","getHostComponent","AixComposerConfig","AixFooter","props","__DEV__","flat","StyleSheet","flatten","style","broken","Object","keys","paddingBottom","padding","filter","key","undefined","length","console","error","join","jsx"],"sourceRoot":"../../src","sources":["footer.tsx"],"mappings":";;;;;;AAAA,IAAAA,wBAAA,GAAAC,OAAA;AACA,IAAAC,kBAAA,GAAAC,sBAAA,CAAAF,OAAA;AAEA,IAAAG,YAAA,GAAAH,OAAA;AAAyC,IAAAI,WAAA,GAAAJ,OAAA;AAAA,SAAAE,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEzC,MAAMG,iBAAiB,GAAG,IAAAC,yCAAgB,EACxC,aAAa,EACb,MAAMC,0BACR,CAAC;AAEM,SAASC,SAASA,CACvBC,KAAqD,EACrD;EACA,IAAIC,OAAO,EAAE;IACX,MAAMC,IAAI,GAAGC,uBAAU,CAACC,OAAO,CAACJ,KAAK,CAACK,KAAK,CAAC;IAC5C,MAAMC,MAAM,GAAGC,MAAM,CAACC,IAAI,CAAC;MACzBC,aAAa,EAAEP,IAAI,CAACO,aAAa;MACjCC,OAAO,EAAER,IAAI,CAACQ;IAChB,CAAC,CAAC,CAACC,MAAM,CAAEC,GAAG,IAAKV,IAAI,CAACU,GAAG,CAAsB,KAAKC,SAAS,CAAC;IAEhE,IAAIP,MAAM,CAACQ,MAAM,EAAE;MACjBC,OAAO,CAACC,KAAK,CACX,0BAA0BV,MAAM,CAACW,IAAI,CACnC,IACF,CAAC,uHACH,CAAC;IACH;EACF;EACA,oBAAO,IAAAzB,WAAA,CAAA0B,GAAA,EAACtB,iBAAiB;IAAA,GAAKI;EAAK,CAAG,CAAC;AACzC","ignoreList":[]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _exportNames = {
|
|
7
|
+
AixCell: true,
|
|
8
|
+
useAixRef: true,
|
|
9
|
+
Aix: true,
|
|
10
|
+
AixFooter: true
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "Aix", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _aix.Aix;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
exports.AixCell = void 0;
|
|
19
|
+
Object.defineProperty(exports, "AixFooter", {
|
|
20
|
+
enumerable: true,
|
|
21
|
+
get: function () {
|
|
22
|
+
return _footer.AixFooter;
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
exports.useAixRef = useAixRef;
|
|
26
|
+
var _reactNativeNitroModules = require("react-native-nitro-modules");
|
|
27
|
+
var _AixCellViewConfig = _interopRequireDefault(require("../nitrogen/generated/shared/json/AixCellViewConfig.json"));
|
|
28
|
+
var _react = require("react");
|
|
29
|
+
var _fadeIn = require("./fade-in");
|
|
30
|
+
Object.keys(_fadeIn).forEach(function (key) {
|
|
31
|
+
if (key === "default" || key === "__esModule") return;
|
|
32
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
33
|
+
if (key in exports && exports[key] === _fadeIn[key]) return;
|
|
34
|
+
Object.defineProperty(exports, key, {
|
|
35
|
+
enumerable: true,
|
|
36
|
+
get: function () {
|
|
37
|
+
return _fadeIn[key];
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
var _aix = require("./aix");
|
|
42
|
+
var _footer = require("./footer");
|
|
43
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
44
|
+
const AixCell = exports.AixCell = (0, _reactNativeNitroModules.getHostComponent)('AixCellView', () => _AixCellViewConfig.default);
|
|
45
|
+
function useAixRef() {
|
|
46
|
+
return (0, _react.useRef)(null);
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNativeNitroModules","require","_AixCellViewConfig","_interopRequireDefault","_react","_fadeIn","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_aix","_footer","e","__esModule","default","AixCell","getHostComponent","AixCellViewConfig","useAixRef","useRef"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,wBAAA,GAAAC,OAAA;AACA,IAAAC,kBAAA,GAAAC,sBAAA,CAAAF,OAAA;AAEA,IAAAG,MAAA,GAAAH,OAAA;AAEA,IAAAI,OAAA,GAAAJ,OAAA;AAAAK,MAAA,CAAAC,IAAA,CAAAF,OAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,OAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,OAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AAEA,IAAAS,IAAA,GAAAjB,OAAA;AACA,IAAAkB,OAAA,GAAAlB,OAAA;AAAoC,SAAAE,uBAAAiB,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE7B,MAAMG,OAAO,GAAAT,OAAA,CAAAS,OAAA,GAAG,IAAAC,yCAAgB,EACrC,aAAa,EACb,MAAMC,0BACR,CAAC;AAIM,SAASC,SAASA,CAAA,EAAG;EAC1B,OAAO,IAAAC,aAAM,EAAgB,IAAI,CAAC;AACpC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["views/aix.nitro.ts"],"mappings":"","ignoreList":[]}
|