@symbiote-native/angular 0.5.0 → 0.6.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.
Files changed (151) hide show
  1. package/babel-register-composed.cjs +11 -3
  2. package/build/angular/anchor-host-registry.d.ts +2 -0
  3. package/build/angular/anchor-host-registry.js +84 -0
  4. package/build/angular/anchor-host-registry.js.map +1 -0
  5. package/build/angular/components/input-accessory-view/index.d.ts +2 -1
  6. package/build/angular/components/input-accessory-view/index.js +28 -39
  7. package/build/angular/components/input-accessory-view/index.js.map +1 -1
  8. package/build/angular/components/scroll-view/projection.js +70 -48
  9. package/build/angular/components/scroll-view/projection.js.map +1 -1
  10. package/build/angular/components/scroll-view/shared.js +28 -25
  11. package/build/angular/components/scroll-view/shared.js.map +1 -1
  12. package/build/angular/components/scroll-view/sticky-header.d.ts +6 -7
  13. package/build/angular/components/scroll-view/sticky-header.js +82 -65
  14. package/build/angular/components/scroll-view/sticky-header.js.map +1 -1
  15. package/build/angular/components/touchable/index.d.ts +2 -5
  16. package/build/angular/components/touchable/index.js +36 -56
  17. package/build/angular/components/touchable/index.js.map +1 -1
  18. package/build/angular/components/virtualized-list/index.d.ts +5 -20
  19. package/build/angular/components/virtualized-list/index.js +145 -275
  20. package/build/angular/components/virtualized-list/index.js.map +1 -1
  21. package/build/angular/components/virtualized-section-list/index.js +2 -4
  22. package/build/angular/components/virtualized-section-list/index.js.map +1 -1
  23. package/build/angular/index.d.ts +2 -1
  24. package/build/angular/index.js +6 -1
  25. package/build/angular/index.js.map +1 -1
  26. package/build/angular/renderer/index.d.ts +0 -1
  27. package/build/angular/renderer/index.js +5 -60
  28. package/build/angular/renderer/index.js.map +1 -1
  29. package/package.json +9 -7
  30. package/src/__tests__/responder-nested-cd.test.ts +1 -1
  31. package/src/anchor-host-registry.ts +88 -0
  32. package/src/components/input-accessory-view/index.ts +30 -39
  33. package/src/components/scroll-view/projection.ts +76 -46
  34. package/src/components/scroll-view/shared.ts +27 -19
  35. package/src/components/scroll-view/sticky-header.ts +89 -64
  36. package/src/components/touchable/index.ts +52 -66
  37. package/src/components/virtualized-list/index.ts +157 -368
  38. package/src/components/virtualized-section-list/index.ts +6 -3
  39. package/src/index.ts +6 -1
  40. package/src/renderer/index.ts +5 -63
  41. package/src/renderer/renderer.test.ts +2 -1
  42. package/build/bootstrap.d.ts +0 -7
  43. package/build/bootstrap.js +0 -14
  44. package/build/components/activity-indicator/index.android.d.ts +0 -9
  45. package/build/components/activity-indicator/index.android.js +0 -64
  46. package/build/components/activity-indicator/index.d.ts +0 -1
  47. package/build/components/activity-indicator/index.ios.d.ts +0 -5
  48. package/build/components/activity-indicator/index.ios.js +0 -64
  49. package/build/components/activity-indicator/index.js +0 -3
  50. package/build/components/activity-indicator/shared.d.ts +0 -64
  51. package/build/components/activity-indicator/shared.js +0 -424
  52. package/build/components/button.d.ts +0 -60
  53. package/build/components/button.js +0 -456
  54. package/build/components/flat-list/index.d.ts +0 -119
  55. package/build/components/flat-list/index.js +0 -691
  56. package/build/components/image/index.android.d.ts +0 -7
  57. package/build/components/image/index.android.js +0 -88
  58. package/build/components/image/index.d.ts +0 -1
  59. package/build/components/image/index.ios.d.ts +0 -7
  60. package/build/components/image/index.ios.js +0 -88
  61. package/build/components/image/index.js +0 -2
  62. package/build/components/image/shared.d.ts +0 -101
  63. package/build/components/image/shared.js +0 -405
  64. package/build/components/image-background.d.ts +0 -78
  65. package/build/components/image-background.js +0 -583
  66. package/build/components/input-accessory-view/index.d.ts +0 -56
  67. package/build/components/input-accessory-view/index.js +0 -403
  68. package/build/components/keyboard-avoiding-view/index.d.ts +0 -79
  69. package/build/components/keyboard-avoiding-view/index.js +0 -504
  70. package/build/components/modal/index.d.ts +0 -89
  71. package/build/components/modal/index.js +0 -529
  72. package/build/components/pressable/index.d.ts +0 -120
  73. package/build/components/pressable/index.js +0 -639
  74. package/build/components/refresh-control/index.d.ts +0 -83
  75. package/build/components/refresh-control/index.js +0 -509
  76. package/build/components/safe-area-view/index.d.ts +0 -54
  77. package/build/components/safe-area-view/index.js +0 -388
  78. package/build/components/scroll-view/index.android.d.ts +0 -16
  79. package/build/components/scroll-view/index.android.js +0 -228
  80. package/build/components/scroll-view/index.d.ts +0 -3
  81. package/build/components/scroll-view/index.ios.d.ts +0 -6
  82. package/build/components/scroll-view/index.ios.js +0 -113
  83. package/build/components/scroll-view/index.js +0 -5
  84. package/build/components/scroll-view/projection.d.ts +0 -32
  85. package/build/components/scroll-view/projection.js +0 -311
  86. package/build/components/scroll-view/shared.d.ts +0 -225
  87. package/build/components/scroll-view/shared.js +0 -757
  88. package/build/components/scroll-view/sticky-header.d.ts +0 -38
  89. package/build/components/scroll-view/sticky-header.js +0 -257
  90. package/build/components/section-list/index.d.ts +0 -113
  91. package/build/components/section-list/index.js +0 -768
  92. package/build/components/switch/index.android.d.ts +0 -17
  93. package/build/components/switch/index.android.js +0 -107
  94. package/build/components/switch/index.d.ts +0 -1
  95. package/build/components/switch/index.ios.d.ts +0 -16
  96. package/build/components/switch/index.ios.js +0 -106
  97. package/build/components/switch/index.js +0 -3
  98. package/build/components/switch/shared.d.ts +0 -37
  99. package/build/components/switch/shared.js +0 -176
  100. package/build/components/text-input.d.ts +0 -150
  101. package/build/components/text-input.js +0 -821
  102. package/build/components/touchable/index.d.ts +0 -241
  103. package/build/components/touchable/index.js +0 -1672
  104. package/build/components/touchable-native-feedback/index.d.ts +0 -80
  105. package/build/components/touchable-native-feedback/index.js +0 -545
  106. package/build/components/virtualized-list/directives.d.ts +0 -41
  107. package/build/components/virtualized-list/directives.js +0 -249
  108. package/build/components/virtualized-list/index.d.ts +0 -265
  109. package/build/components/virtualized-list/index.js +0 -1343
  110. package/build/components/virtualized-section-list/directives.d.ts +0 -28
  111. package/build/components/virtualized-section-list/directives.js +0 -148
  112. package/build/components/virtualized-section-list/index.d.ts +0 -175
  113. package/build/components/virtualized-section-list/index.js +0 -854
  114. package/build/components.d.ts +0 -39
  115. package/build/components.js +0 -37
  116. package/build/create-portal/index.d.ts +0 -17
  117. package/build/create-portal/index.js +0 -128
  118. package/build/create-tunnel/index.d.ts +0 -29
  119. package/build/create-tunnel/index.js +0 -181
  120. package/build/descriptor-to-angular/index.d.ts +0 -19
  121. package/build/descriptor-to-angular/index.js +0 -186
  122. package/build/host-instance/index.d.ts +0 -2
  123. package/build/host-instance/index.js +0 -36
  124. package/build/index.d.ts +0 -21
  125. package/build/index.js +0 -40
  126. package/build/modules/animated/animated-leaf-binder/index.d.ts +0 -14
  127. package/build/modules/animated/animated-leaf-binder/index.js +0 -90
  128. package/build/modules/animated/animated-leaf-binder.d.ts +0 -14
  129. package/build/modules/animated/animated-leaf-binder.js +0 -90
  130. package/build/modules/animated/create-animated-component.d.ts +0 -48
  131. package/build/modules/animated/create-animated-component.js +0 -425
  132. package/build/modules/animated/index.d.ts +0 -51
  133. package/build/modules/animated/index.js +0 -58
  134. package/build/modules/app-registry/index.d.ts +0 -7
  135. package/build/modules/app-registry/index.js +0 -22
  136. package/build/modules/status-bar/index.d.ts +0 -17
  137. package/build/modules/status-bar/index.js +0 -121
  138. package/build/primitives/index.d.ts +0 -32
  139. package/build/primitives/index.js +0 -386
  140. package/build/primitives/shared.d.ts +0 -83
  141. package/build/primitives/shared.js +0 -230
  142. package/build/render/index.d.ts +0 -11
  143. package/build/render/index.js +0 -170
  144. package/build/renderer/index.d.ts +0 -38
  145. package/build/renderer/index.js +0 -355
  146. package/build/services/color-scheme.service.d.ts +0 -13
  147. package/build/services/color-scheme.service.js +0 -72
  148. package/build/services/index.d.ts +0 -2
  149. package/build/services/index.js +0 -2
  150. package/build/services/window-dimensions.service.d.ts +0 -13
  151. package/build/services/window-dimensions.service.js +0 -83
@@ -1,311 +0,0 @@
1
- import { AnimatedProps, dlog, isAnchor, reduceProps, routeProp, whenCommitted, createElement, appendChild, insertBefore, removeChild, } from '@symbiote-native/engine';
2
- import { computeStickyInterpolation, readLayoutNumber, stickyDebounceMs, STICKY_HEADER_Z_INDEX, } from '@symbiote-native/components';
3
- import { descriptorFor } from '@symbiote-native/components';
4
- import { Platform } from '@symbiote-native/engine';
5
- const contentProjection = new WeakMap();
6
- const projectedWrappers = new WeakMap();
7
- function createViewNode() {
8
- const descriptor = descriptorFor('symbiote-view');
9
- return createElement(descriptor.component, descriptor.isText);
10
- }
11
- function directNode(record) {
12
- return record.wrapper ?? record.child;
13
- }
14
- function isProjectedRefreshControl(node) {
15
- if (node.component === 'PullToRefreshView' || node.component === 'AndroidSwipeRefreshLayout') {
16
- return true;
17
- }
18
- // Angular public <RefreshControl> is an anchor host whose real native refresh node lives inside
19
- // its component view. Projection filtering must recognize that anchor, otherwise iOS re-renders
20
- // a RefreshControl sibling and also leaves the projected one inside the scroll content.
21
- return isAnchor(node) && node.children.some(isProjectedRefreshControl);
22
- }
23
- class StickyProjectionWrapper {
24
- controller;
25
- childIndex;
26
- node;
27
- measured = false;
28
- layoutY = 0;
29
- layoutHeight = 0;
30
- animatedTranslateY;
31
- animatedProps;
32
- cancelBind;
33
- listenerId;
34
- debounceTimer;
35
- translateY = null;
36
- haveReceivedInitialZeroTranslateY = true;
37
- constructor(controller, childIndex, node) {
38
- this.controller = controller;
39
- this.childIndex = childIndex;
40
- this.node = node;
41
- this.animatedTranslateY = this.controller.config.scrollAnimatedValue.interpolate({
42
- inputRange: [-1, 0],
43
- outputRange: [0, 0],
44
- });
45
- this.rebuild();
46
- }
47
- destroy() {
48
- this.cancelBind?.();
49
- this.cancelBind = undefined;
50
- if (this.listenerId !== undefined) {
51
- this.animatedTranslateY.removeListener(this.listenerId);
52
- this.listenerId = undefined;
53
- }
54
- if (this.debounceTimer !== undefined) {
55
- clearTimeout(this.debounceTimer);
56
- this.debounceTimer = undefined;
57
- }
58
- if (this.animatedProps !== undefined) {
59
- this.animatedProps.__detach();
60
- this.animatedProps = undefined;
61
- }
62
- }
63
- rebuild() {
64
- if (this.listenerId !== undefined) {
65
- this.animatedTranslateY.removeListener(this.listenerId);
66
- this.listenerId = undefined;
67
- }
68
- const { inputRange, outputRange } = computeStickyInterpolation({
69
- measured: this.measured,
70
- inverted: this.controller.config.invertStickyHeaders,
71
- scrollViewHeight: this.controller.config.scrollViewHeight,
72
- layoutY: this.layoutY,
73
- layoutHeight: this.layoutHeight,
74
- nextHeaderLayoutY: this.controller.nextStickyHeaderY(this.childIndex),
75
- });
76
- this.animatedTranslateY = this.controller.config.scrollAnimatedValue.interpolate({
77
- inputRange,
78
- outputRange,
79
- });
80
- this.listenerId = this.animatedTranslateY.addListener(this.animatedValueListener);
81
- this.applyProps();
82
- dlog(`Angular ScrollView projection sticky index=${this.childIndex} measured=${this.measured} y=${this.layoutY}`);
83
- }
84
- onLayout = (event) => {
85
- const y = readLayoutNumber(event, 'y');
86
- const height = readLayoutNumber(event, 'height');
87
- if (y !== undefined)
88
- this.layoutY = y;
89
- if (height !== undefined)
90
- this.layoutHeight = height;
91
- this.measured = true;
92
- this.controller.recordHeaderLayoutY(this.childIndex, this.layoutY);
93
- this.rebuild();
94
- };
95
- animatedValueListener = ({ value }) => {
96
- if (typeof value !== 'number')
97
- return;
98
- if (value === 0 && !this.haveReceivedInitialZeroTranslateY) {
99
- this.haveReceivedInitialZeroTranslateY = true;
100
- return;
101
- }
102
- if (this.debounceTimer !== undefined)
103
- clearTimeout(this.debounceTimer);
104
- this.debounceTimer = setTimeout(() => {
105
- this.translateY = value;
106
- if (value !== 0)
107
- this.haveReceivedInitialZeroTranslateY = false;
108
- this.applyProps();
109
- }, stickyDebounceMs(Platform.OS));
110
- };
111
- props() {
112
- const style = {
113
- transform: [{ translateY: this.animatedTranslateY }],
114
- zIndex: STICKY_HEADER_Z_INDEX,
115
- };
116
- const passthrough = this.translateY === null
117
- ? undefined
118
- : { transform: [{ translateY: this.translateY }], zIndex: STICKY_HEADER_Z_INDEX };
119
- return {
120
- style: passthrough === undefined ? style : [style, passthrough],
121
- onLayout: this.onLayout,
122
- collapsable: false,
123
- };
124
- }
125
- applyProps() {
126
- const props = this.props();
127
- const reduced = reduceProps(props);
128
- for (const [key, value] of Object.entries(reduced))
129
- routeProp(this.node, key, value);
130
- const next = new AnimatedProps(props);
131
- next.__attach();
132
- if (this.animatedProps !== undefined)
133
- this.animatedProps.__detach();
134
- this.animatedProps = next;
135
- this.cancelBind?.();
136
- this.cancelBind = whenCommitted(this.node, () => next.setNativeView(this.node));
137
- }
138
- }
139
- export class ScrollViewProjectionController {
140
- config;
141
- contentNode;
142
- records = [];
143
- headerLayoutYs = new Map();
144
- constructor(config) {
145
- this.config = config;
146
- }
147
- update(config) {
148
- this.config = config;
149
- this.reconcileStickyRecords();
150
- }
151
- bindContentNode(node) {
152
- dlog(`Angular ScrollView projection bindContentNode node=${node.component} preExistingChildren=${node.children.length} recordsBefore=${this.records.length}`);
153
- this.contentNode = node;
154
- contentProjection.set(node, this);
155
- if (this.records.length === 0 && node.children.length > 0) {
156
- for (const child of [...node.children]) {
157
- this.records.push({ child, wrapper: undefined, sticky: undefined, stickyIndex: undefined });
158
- }
159
- }
160
- this.reconcileStickyRecords();
161
- }
162
- appendProjectedChild(parent, child, insert) {
163
- dlog(`Angular ScrollView projection appendProjectedChild parent=${parent.component} child=${child.component} recordsBefore=${this.records.length}`);
164
- const existing = this.records.find(record => record.child === child);
165
- if (existing !== undefined)
166
- this.records.splice(this.records.indexOf(existing), 1);
167
- const record = {
168
- child,
169
- wrapper: undefined,
170
- sticky: undefined,
171
- stickyIndex: undefined,
172
- };
173
- this.records.push(record);
174
- this.insertRecord(parent, record, undefined, insert);
175
- this.reconcileStickyRecords();
176
- }
177
- insertProjectedChild(parent, child, beforeChild, insert) {
178
- dlog(`Angular ScrollView projection insertProjectedChild parent=${parent.component} child=${child.component} before=${beforeChild ? `${beforeChild.component}` : 'null'} recordsBefore=${this.records.length}`);
179
- const existing = this.records.find(record => record.child === child);
180
- if (existing !== undefined)
181
- this.records.splice(this.records.indexOf(existing), 1);
182
- const beforeRecord = beforeChild === null
183
- ? undefined
184
- : this.records.find(record => record.child === beforeChild || record.wrapper === beforeChild);
185
- const record = {
186
- child,
187
- wrapper: undefined,
188
- sticky: undefined,
189
- stickyIndex: undefined,
190
- };
191
- const index = beforeRecord === undefined ? this.records.length : this.records.indexOf(beforeRecord);
192
- this.records.splice(index, 0, record);
193
- this.insertRecord(parent, record, beforeRecord, insert);
194
- this.reconcileStickyRecords();
195
- }
196
- removeProjectedChild(child, remove) {
197
- const record = this.records.find(entry => entry.child === child || entry.wrapper === child);
198
- if (record === undefined || this.contentNode === undefined)
199
- return false;
200
- record.sticky?.destroy();
201
- projectedWrappers.delete(record.child);
202
- const direct = directNode(record);
203
- if (direct.parent === this.contentNode)
204
- remove(this.contentNode, direct);
205
- this.records.splice(this.records.indexOf(record), 1);
206
- this.reconcileStickyRecords();
207
- return true;
208
- }
209
- nextStickyHeaderY(index) {
210
- const stickyIndices = this.config.stickyHeaderIndices ?? [];
211
- const next = stickyIndices.find(entry => entry > index);
212
- return next === undefined ? undefined : this.headerLayoutYs.get(next);
213
- }
214
- recordHeaderLayoutY(index, y) {
215
- if (this.headerLayoutYs.get(index) === y)
216
- return;
217
- this.headerLayoutYs.set(index, y);
218
- for (const record of this.records)
219
- record.sticky?.rebuild();
220
- }
221
- insertRecord(parent, record, beforeRecord, insert) {
222
- const before = beforeRecord === undefined ? undefined : directNode(beforeRecord);
223
- dlog(`Angular ScrollView projection insertRecord physicalParent=${parent.component} child=${record.child.component} before=${before ? before.component : 'undefined(append)'} parentIsContentNode=${parent === this.contentNode}`);
224
- if (before === undefined)
225
- insert(parent, record.child);
226
- else
227
- insert(parent, record.child, before);
228
- }
229
- reconcileStickyRecords() {
230
- if (this.contentNode === undefined)
231
- return;
232
- dlog(`Angular ScrollView projection reconcile contentNode=${this.contentNode.component} records=${this.records.length} contentNodeActualChildren=${this.contentNode.children.length}`);
233
- const stickyIndices = new Set(this.config.stickyHeaderIndices ?? []);
234
- if (this.config.customStickyHeaderComponent !== undefined && stickyIndices.size > 0) {
235
- dlog('Angular ScrollView projection uses built-in sticky wrapper; custom StickyHeaderComponent is explicit-composition only');
236
- }
237
- let paintIndex = 0;
238
- for (const record of [...this.records]) {
239
- if (this.config.excludeRefreshControl && isProjectedRefreshControl(record.child)) {
240
- this.removeProjectedChild(record.child, (parent, child) => removeChild(parent, child));
241
- continue;
242
- }
243
- const countsAsChild = !isAnchor(record.child) && !isProjectedRefreshControl(record.child);
244
- const childIndex = paintIndex;
245
- if (countsAsChild)
246
- paintIndex += 1;
247
- const shouldWrap = countsAsChild && stickyIndices.has(childIndex);
248
- if (shouldWrap && record.wrapper === undefined)
249
- this.wrapRecord(record, childIndex);
250
- else if (!shouldWrap && record.wrapper !== undefined)
251
- this.unwrapRecord(record);
252
- else if (shouldWrap && record.stickyIndex !== childIndex) {
253
- record.sticky?.destroy();
254
- record.sticky = new StickyProjectionWrapper(this, childIndex, directNode(record));
255
- record.stickyIndex = childIndex;
256
- }
257
- else if (shouldWrap)
258
- record.sticky?.rebuild();
259
- }
260
- }
261
- // Auto projection runs after Angular has already created projected child host nodes. At this
262
- // renderer boundary we can AOT-safely rearrange engine nodes, but we cannot instantiate an
263
- // arbitrary Angular component class as a wrapper without owning a ViewContainerRef/injector and
264
- // Angular projectable nodes for its <ng-content>. Therefore the automatic sticky path always uses
265
- // the built-in engine-node wrapper; custom StickyHeaderComponent wrappers remain supported by
266
- // explicit Angular composition with <ScrollViewStickyHeader>/<symbiote-sticky-header> or a user
267
- // component that composes it in the template.
268
- wrapRecord(record, childIndex) {
269
- if (this.contentNode === undefined)
270
- return;
271
- const wrapper = createViewNode();
272
- const currentParent = record.child.parent;
273
- const currentIndex = currentParent?.children.indexOf(record.child) ?? -1;
274
- if (currentParent === this.contentNode && currentIndex >= 0) {
275
- insertBefore(this.contentNode, wrapper, record.child);
276
- removeChild(this.contentNode, record.child);
277
- }
278
- else {
279
- appendChild(this.contentNode, wrapper);
280
- }
281
- appendChild(wrapper, record.child);
282
- record.wrapper = wrapper;
283
- record.sticky = new StickyProjectionWrapper(this, childIndex, wrapper);
284
- record.stickyIndex = childIndex;
285
- projectedWrappers.set(record.child, record);
286
- }
287
- unwrapRecord(record) {
288
- if (this.contentNode === undefined || record.wrapper === undefined)
289
- return;
290
- record.sticky?.destroy();
291
- record.sticky = undefined;
292
- record.stickyIndex = undefined;
293
- const wrapper = record.wrapper;
294
- insertBefore(this.contentNode, record.child, wrapper);
295
- removeChild(this.contentNode, wrapper);
296
- record.wrapper = undefined;
297
- projectedWrappers.delete(record.child);
298
- }
299
- }
300
- export function getScrollViewProjection(node) {
301
- return contentProjection.get(node);
302
- }
303
- export function removeScrollViewProjectedChild(child, remove) {
304
- const record = projectedWrappers.get(child);
305
- if (record === undefined)
306
- return false;
307
- const controller = record.wrapper?.parent
308
- ? contentProjection.get(record.wrapper.parent)
309
- : undefined;
310
- return controller?.removeProjectedChild(child, remove) ?? false;
311
- }
@@ -1,225 +0,0 @@
1
- import { EventEmitter, type AfterViewInit, type OnDestroy } from '@angular/core';
2
- import { type IAccessibilityProps, type IAccessibilityStateValue, type IAriaProps, type IContentSize } from '@symbiote-native/components';
3
- import { AnimatedValue, type IStyleProp, type ISymbioteEvent, type ISymbioteNode, type IViewStyle } from '@symbiote-native/engine';
4
- import { RefreshControl } from '../refresh-control';
5
- import { ScrollViewProjectionController } from './projection';
6
- export type { IScrollViewHandle } from '@symbiote-native/components';
7
- type IScrollHandler = (event: ISymbioteEvent) => void;
8
- type IContentSizeHandler = (width: number, height: number) => void;
9
- export declare const SCROLL_VIEW_INPUTS: string[];
10
- export interface IAngularScrollViewProps extends IAccessibilityProps, IAriaProps {
11
- style?: IStyleProp<IViewStyle>;
12
- contentContainerStyle?: IStyleProp<IViewStyle> | string;
13
- horizontal?: boolean;
14
- scrollEnabled?: boolean;
15
- showsVerticalScrollIndicator?: boolean;
16
- showsHorizontalScrollIndicator?: boolean;
17
- pagingEnabled?: boolean;
18
- bounces?: boolean;
19
- decelerationRate?: 'normal' | 'fast' | number;
20
- scrollEventThrottle?: number;
21
- contentInset?: {
22
- top?: number;
23
- left?: number;
24
- bottom?: number;
25
- right?: number;
26
- };
27
- contentOffset?: {
28
- x: number;
29
- y: number;
30
- };
31
- removeClippedSubviews?: boolean;
32
- snapToInterval?: number;
33
- snapToOffsets?: number[];
34
- snapToAlignment?: 'start' | 'center' | 'end';
35
- snapToStart?: boolean;
36
- snapToEnd?: boolean;
37
- disableIntervalMomentum?: boolean;
38
- stickyHeaderIndices?: number[];
39
- invertStickyHeaders?: boolean;
40
- StickyHeaderComponent?: unknown;
41
- keyboardDismissMode?: 'none' | 'on-drag' | 'interactive';
42
- keyboardShouldPersistTaps?: boolean | 'always' | 'never' | 'handled';
43
- maintainVisibleContentPosition?: {
44
- minIndexForVisible: number;
45
- autoscrollToTopThreshold?: number;
46
- };
47
- alwaysBounceHorizontal?: boolean;
48
- alwaysBounceVertical?: boolean;
49
- centerContent?: boolean;
50
- scrollIndicatorInsets?: {
51
- top?: number;
52
- left?: number;
53
- bottom?: number;
54
- right?: number;
55
- };
56
- indicatorStyle?: 'default' | 'black' | 'white';
57
- directionalLockEnabled?: boolean;
58
- automaticallyAdjustKeyboardInsets?: boolean;
59
- contentInsetAdjustmentBehavior?: 'automatic' | 'scrollableAxes' | 'never' | 'always';
60
- minimumZoomScale?: number;
61
- maximumZoomScale?: number;
62
- zoomScale?: number;
63
- bouncesZoom?: boolean;
64
- pinchGestureEnabled?: boolean;
65
- nestedScrollEnabled?: boolean;
66
- overScrollMode?: 'auto' | 'always' | 'never';
67
- fadingEdgeLength?: number;
68
- persistentScrollbar?: boolean;
69
- endFillColor?: string;
70
- onLayout?: IScrollHandler;
71
- onScroll?: IScrollHandler;
72
- onScrollBeginDrag?: IScrollHandler;
73
- onScrollEndDrag?: IScrollHandler;
74
- onMomentumScrollBegin?: IScrollHandler;
75
- onMomentumScrollEnd?: IScrollHandler;
76
- onScrollToTop?: IScrollHandler;
77
- onContentSizeChange?: IContentSizeHandler;
78
- onAccessibilityAction?: (event: ISymbioteEvent) => void;
79
- onAccessibilityTap?: (event: ISymbioteEvent) => void;
80
- onMagicTap?: (event: ISymbioteEvent) => void;
81
- onAccessibilityEscape?: (event: ISymbioteEvent) => void;
82
- }
83
- export type IAngularScrollViewInputs = Omit<IAngularScrollViewProps, 'onLayout' | 'onScrollToTop' | 'onContentSizeChange' | 'onAccessibilityAction' | 'onAccessibilityTap' | 'onMagicTap' | 'onAccessibilityEscape'>;
84
- export declare class ScrollViewProjectionDirective {
85
- private readonly elementRef;
86
- set symbioteScrollViewProjection(controller: ScrollViewProjectionController);
87
- }
88
- export declare abstract class ScrollViewBase implements IAngularScrollViewInputs, AfterViewInit, OnDestroy {
89
- style: IStyleProp<IViewStyle> | undefined;
90
- contentContainerStyle: IStyleProp<IViewStyle> | string | undefined;
91
- horizontal: boolean | undefined;
92
- scrollEnabled: boolean | undefined;
93
- showsVerticalScrollIndicator: boolean | undefined;
94
- showsHorizontalScrollIndicator: boolean | undefined;
95
- pagingEnabled: boolean | undefined;
96
- bounces: boolean | undefined;
97
- decelerationRate: 'normal' | 'fast' | number | undefined;
98
- scrollEventThrottle: number | undefined;
99
- contentInset: IAngularScrollViewProps['contentInset'];
100
- contentOffset: IAngularScrollViewProps['contentOffset'];
101
- removeClippedSubviews: boolean | undefined;
102
- snapToInterval: number | undefined;
103
- snapToOffsets: number[] | undefined;
104
- snapToAlignment: IAngularScrollViewProps['snapToAlignment'];
105
- snapToStart: boolean | undefined;
106
- snapToEnd: boolean | undefined;
107
- disableIntervalMomentum: boolean | undefined;
108
- stickyHeaderIndices: number[] | undefined;
109
- invertStickyHeaders: boolean | undefined;
110
- StickyHeaderComponent: unknown;
111
- keyboardDismissMode: IAngularScrollViewProps['keyboardDismissMode'];
112
- keyboardShouldPersistTaps: IAngularScrollViewProps['keyboardShouldPersistTaps'];
113
- maintainVisibleContentPosition: IAngularScrollViewProps['maintainVisibleContentPosition'];
114
- alwaysBounceHorizontal: boolean | undefined;
115
- alwaysBounceVertical: boolean | undefined;
116
- centerContent: boolean | undefined;
117
- scrollIndicatorInsets: IAngularScrollViewProps['scrollIndicatorInsets'];
118
- indicatorStyle: IAngularScrollViewProps['indicatorStyle'];
119
- directionalLockEnabled: boolean | undefined;
120
- automaticallyAdjustKeyboardInsets: boolean | undefined;
121
- contentInsetAdjustmentBehavior: IAngularScrollViewProps['contentInsetAdjustmentBehavior'];
122
- minimumZoomScale: number | undefined;
123
- maximumZoomScale: number | undefined;
124
- zoomScale: number | undefined;
125
- bouncesZoom: boolean | undefined;
126
- pinchGestureEnabled: boolean | undefined;
127
- nestedScrollEnabled: boolean | undefined;
128
- overScrollMode: IAngularScrollViewProps['overScrollMode'];
129
- fadingEdgeLength: number | undefined;
130
- persistentScrollbar: boolean | undefined;
131
- endFillColor: string | undefined;
132
- onScroll: IScrollHandler | undefined;
133
- onScrollBeginDrag: IScrollHandler | undefined;
134
- onScrollEndDrag: IScrollHandler | undefined;
135
- onMomentumScrollBegin: IScrollHandler | undefined;
136
- onMomentumScrollEnd: IScrollHandler | undefined;
137
- readonly layout: EventEmitter<ISymbioteEvent>;
138
- readonly scrollToTop: EventEmitter<ISymbioteEvent>;
139
- readonly contentSizeChange: EventEmitter<IContentSize>;
140
- readonly accessibilityAction: EventEmitter<ISymbioteEvent>;
141
- readonly accessibilityTap: EventEmitter<ISymbioteEvent>;
142
- readonly magicTap: EventEmitter<ISymbioteEvent>;
143
- readonly accessibilityEscape: EventEmitter<ISymbioteEvent>;
144
- testID: string | undefined;
145
- nativeID: string | undefined;
146
- accessible: boolean | undefined;
147
- accessibilityLabel: string | undefined;
148
- accessibilityHint: string | undefined;
149
- accessibilityRole: IAccessibilityProps['accessibilityRole'];
150
- accessibilityState: IAccessibilityStateValue | undefined;
151
- accessibilityValue: IAccessibilityProps['accessibilityValue'];
152
- accessibilityActions: IAccessibilityProps['accessibilityActions'];
153
- accessibilityLabelledBy: string | string[] | undefined;
154
- importantForAccessibility: IAccessibilityProps['importantForAccessibility'];
155
- accessibilityLiveRegion: IAccessibilityProps['accessibilityLiveRegion'];
156
- screenReaderFocusable: boolean | undefined;
157
- accessibilityViewIsModal: boolean | undefined;
158
- accessibilityElementsHidden: boolean | undefined;
159
- accessibilityIgnoresInvertColors: boolean | undefined;
160
- accessibilityLanguage: string | undefined;
161
- accessibilityRespondsToUserInteraction: boolean | undefined;
162
- accessibilityShowsLargeContentViewer: boolean | undefined;
163
- accessibilityLargeContentTitle: string | undefined;
164
- role: IAriaProps['role'];
165
- 'aria-label': string | undefined;
166
- 'aria-labelledby': string | undefined;
167
- 'aria-live': IAriaProps['aria-live'];
168
- 'aria-hidden': boolean | undefined;
169
- 'aria-busy': boolean | undefined;
170
- 'aria-checked': boolean | 'mixed' | undefined;
171
- 'aria-disabled': boolean | undefined;
172
- 'aria-expanded': boolean | undefined;
173
- 'aria-selected': boolean | undefined;
174
- 'aria-modal': boolean | undefined;
175
- 'aria-valuemax': number | undefined;
176
- 'aria-valuemin': number | undefined;
177
- 'aria-valuenow': number | undefined;
178
- 'aria-valuetext': string | undefined;
179
- private hostDirective?;
180
- protected projectedRefreshControl?: RefreshControl;
181
- protected readonly scrollAnimatedValue: AnimatedValue;
182
- private lastContentSize;
183
- private viewportHeight;
184
- protected readonly projectionController: ScrollViewProjectionController;
185
- private detachStickyScroll;
186
- private cancelStickyBind;
187
- private lastLoggedIsHorizontal;
188
- private readonly handleInvertedStickyLayout;
189
- private readonly handleContentLayout;
190
- private readonly emitterCallbackCache;
191
- private cachedStickyOnScrollSource;
192
- private cachedStickyOnScrollHandler;
193
- get isHorizontal(): boolean;
194
- private get hasStickyHeaders();
195
- private get resolvedContentContainerStyle();
196
- private get scrollViewBaseStyle();
197
- get scrollProps(): Record<string, unknown>;
198
- protected get layoutSplitStyle(): IStyleProp<IViewStyle>;
199
- get androidWrappedScrollProps(): Record<string, unknown>;
200
- get iosRefreshControlProps(): Record<string, unknown>;
201
- get androidRefreshControlProps(): Record<string, unknown>;
202
- protected handleProjectedRefresh(nativeNode: unknown): void;
203
- private refreshControlProps;
204
- get hasProjectedRefreshControl(): boolean;
205
- get contentProps(): Record<string, unknown>;
206
- private emitterCallback;
207
- private stickyOnScrollHandler;
208
- private get hostNode();
209
- private readonly handle;
210
- scrollTo(options?: {
211
- x?: number;
212
- y?: number;
213
- animated?: boolean;
214
- }): void;
215
- scrollToEnd(options?: {
216
- animated?: boolean;
217
- }): void;
218
- flashScrollIndicators(): void;
219
- getScrollNode(): ISymbioteNode | null;
220
- ngAfterViewInit(): void;
221
- private attachSticky;
222
- ngOnDestroy(): void;
223
- private updateProjectionController;
224
- private accessibilityInputs;
225
- }