@maccesar/titools 5.2.5 → 5.4.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 (138) hide show
  1. package/CONTRIBUTING.md +1 -1
  2. package/README.md +58 -97
  3. package/agents/ti-pro.md +4 -2
  4. package/commands/ti-audit.md +7 -5
  5. package/docs/examples.md +24 -13
  6. package/docs/knowledge-index.md +2 -1
  7. package/lib/config.js +1 -0
  8. package/package.json +1 -1
  9. package/skills/alloy-guides/SKILL.md +18 -179
  10. package/skills/alloy-guides/references/CLI_TASKS.md +17 -216
  11. package/skills/alloy-guides/references/CONCEPTS.md +27 -162
  12. package/skills/alloy-guides/references/CONTROLLERS.md +38 -236
  13. package/skills/alloy-guides/references/MODELS.md +47 -723
  14. package/skills/alloy-guides/references/MODELS_ADVANCED.md +21 -482
  15. package/skills/alloy-guides/references/VIEWS_DYNAMIC.md +12 -222
  16. package/skills/alloy-guides/references/VIEWS_STYLES.md +39 -358
  17. package/skills/alloy-guides/references/VIEWS_XML.md +36 -552
  18. package/skills/alloy-guides/references/WIDGETS.md +49 -127
  19. package/skills/alloy-howtos/SKILL.md +14 -169
  20. package/skills/alloy-howtos/references/best_practices.md +9 -113
  21. package/skills/alloy-howtos/references/cli_reference.md +18 -223
  22. package/skills/alloy-howtos/references/config_files.md +50 -133
  23. package/skills/alloy-howtos/references/debugging_troubleshooting.md +19 -63
  24. package/skills/alloy-howtos/references/samples.md +21 -138
  25. package/skills/ti-api/SKILL.md +10 -2
  26. package/skills/ti-api/references/api-android.md +36 -2
  27. package/skills/ti-api/references/api-app-platform.md +39 -3
  28. package/skills/ti-api/references/api-core.md +50 -18
  29. package/skills/ti-api/references/api-data-network.md +49 -35
  30. package/skills/ti-api/references/api-media.md +45 -27
  31. package/skills/ti-api/references/api-services.md +39 -9
  32. package/skills/ti-api/references/api-ui-android.md +33 -13
  33. package/skills/ti-api/references/api-ui-extras.md +41 -15
  34. package/skills/ti-api/references/api-ui-ios-animator.md +42 -26
  35. package/skills/ti-api/references/api-ui-ios.md +74 -2
  36. package/skills/ti-api/references/api-ui-lists.md +32 -16
  37. package/skills/ti-api/references/api-ui-text-input.md +34 -17
  38. package/skills/ti-api/references/api-ui-views.md +27 -1
  39. package/skills/ti-api/references/api-ui-windows-navigation.md +32 -18
  40. package/skills/ti-api/references/api-xml-global.md +66 -16
  41. package/skills/ti-create-release/SKILL.md +98 -0
  42. package/skills/ti-create-release/references/module-discovery.md +69 -0
  43. package/skills/ti-expert/references/adaptive-layouts.md +1 -1
  44. package/skills/ti-guides/SKILL.md +37 -76
  45. package/skills/ti-guides/references/advanced-data-and-images.md +122 -126
  46. package/skills/ti-guides/references/android-manifest.md +24 -83
  47. package/skills/ti-guides/references/app-distribution.md +31 -377
  48. package/skills/ti-guides/references/application-frameworks.md +127 -335
  49. package/skills/ti-guides/references/cli-reference.md +184 -633
  50. package/skills/ti-guides/references/commonjs-advanced.md +81 -231
  51. package/skills/ti-guides/references/compatibility-matrix.md +36 -75
  52. package/skills/ti-guides/references/hello-world.md +95 -70
  53. package/skills/ti-guides/references/hyperloop-native-access.md +52 -448
  54. package/skills/ti-guides/references/resources.md +174 -142
  55. package/skills/ti-guides/references/sdk-release-notes.md +28 -71
  56. package/skills/ti-guides/references/tiapp-config.md +222 -598
  57. package/skills/ti-howtos/SKILL.md +23 -123
  58. package/skills/ti-howtos/references/cross-platform-development.md +119 -324
  59. package/skills/ti-howtos/references/debugging-profiling.md +77 -445
  60. package/skills/ti-howtos/references/extending-titanium.md +199 -673
  61. package/skills/ti-howtos/references/local-data-sources.md +87 -300
  62. package/skills/ti-howtos/references/location-and-maps.md +86 -213
  63. package/skills/ti-howtos/references/media-apis.md +103 -223
  64. package/skills/ti-howtos/references/notification-services.md +86 -506
  65. package/skills/ti-howtos/references/remote-data-sources.md +97 -316
  66. package/skills/ti-howtos/references/using-modules.md +77 -133
  67. package/skills/ti-synthengine/SKILL.md +62 -111
  68. package/skills/ti-synthengine/assets/example/README.md +50 -59
  69. package/skills/ti-synthengine/assets/example/app.js +67 -65
  70. package/skills/ti-synthengine/assets/example/lib/sequenceOwner.js +39 -40
  71. package/skills/ti-synthengine/assets/example/lib/soundPreset.js +34 -0
  72. package/skills/ti-synthengine/assets/index.d.ts +122 -2
  73. package/skills/ti-synthengine/references/advanced-examples.md +4 -4
  74. package/skills/ti-synthengine/references/api.md +40 -18
  75. package/skills/ti-synthengine/references/audio-engine.md +15 -57
  76. package/skills/ti-synthengine/references/examples.md +63 -6
  77. package/skills/ti-synthengine/references/guide.md +61 -57
  78. package/skills/ti-synthengine/references/instruments-and-effects.md +15 -15
  79. package/skills/ti-synthengine/references/native-variation.md +53 -14
  80. package/skills/ti-synthengine/references/recipes-interaction.md +25 -20
  81. package/skills/ti-synthengine/references/recipes.md +19 -16
  82. package/skills/ti-synthengine/references/recommendations.md +12 -12
  83. package/skills/ti-synthengine/references/sound-api.md +197 -0
  84. package/skills/ti-synthengine/references/sound-design.md +7 -7
  85. package/skills/ti-synthengine/references/source-notes.md +62 -172
  86. package/skills/ti-synthengine/references/troubleshooting.md +17 -19
  87. package/skills/ti-synthengine/references/upgrade-2.0.0.md +40 -0
  88. package/skills/ti-ui/SKILL.md +28 -143
  89. package/skills/ti-ui/references/icons-and-splash-screens.md +74 -403
  90. package/skills/ti-ui/references/layouts-and-positioning.md +175 -402
  91. package/skills/ti-ui/references/listviews-and-performance.md +100 -703
  92. package/skills/ti-ui/references/platform-conventions.md +180 -0
  93. package/skills/ti-ui/references/user-interface.md +43 -0
  94. package/skills/alloy-guides/references/VIEWS_WITHOUT_CONTROLLERS.md +0 -102
  95. package/skills/alloy-howtos/references/custom_tags.md +0 -148
  96. package/skills/ti-guides/references/coding-best-practices.md +0 -149
  97. package/skills/ti-guides/references/javascript-primer.md +0 -414
  98. package/skills/ti-guides/references/reserved-words.md +0 -36
  99. package/skills/ti-guides/references/style-and-conventions.md +0 -103
  100. package/skills/ti-howtos/references/android-platform-deep-dives.md +0 -624
  101. package/skills/ti-howtos/references/automation-fastlane-appium.md +0 -96
  102. package/skills/ti-howtos/references/buffer-codec-streams.md +0 -162
  103. package/skills/ti-howtos/references/google-maps-v2.md +0 -172
  104. package/skills/ti-howtos/references/ios-map-kit.md +0 -149
  105. package/skills/ti-howtos/references/ios-platform-deep-dives.md +0 -611
  106. package/skills/ti-howtos/references/tutorials.md +0 -565
  107. package/skills/ti-howtos/references/web-content-integration.md +0 -287
  108. package/skills/ti-howtos/references/webpack-build-pipeline.md +0 -124
  109. package/skills/ti-synthengine/references/android-sim80-correction-evidence.zip +0 -0
  110. package/skills/ti-synthengine/references/android-sim80-correction.json +0 -162
  111. package/skills/ti-synthengine/references/audio-pipeline-validation.md +0 -19
  112. package/skills/ti-synthengine/references/bypass-physical-recheck-evidence.zip +0 -0
  113. package/skills/ti-synthengine/references/frontier-android-evidence.zip +0 -0
  114. package/skills/ti-synthengine/references/frontier-ipad-evidence.zip +0 -0
  115. package/skills/ti-synthengine/references/frontier-physical-validation.json +0 -1918
  116. package/skills/ti-synthengine/references/native-tone-repetition-validation.md +0 -59
  117. package/skills/ti-synthengine/references/native-variation-proposal.md +0 -182
  118. package/skills/ti-synthengine/references/native-variation-validation.md +0 -63
  119. package/skills/ti-synthengine/references/performance-review-evidence.zip +0 -0
  120. package/skills/ti-synthengine/references/performance-review.json +0 -1146
  121. package/skills/ti-synthengine/references/physical-validation.json +0 -1457
  122. package/skills/ti-synthengine/references/source-snapshot.json +0 -542
  123. package/skills/ti-synthengine/references/stats-performance.json +0 -2992
  124. package/skills/ti-synthengine/references/stats-performance.md +0 -82
  125. package/skills/ti-synthengine/references/studio-validation.json +0 -6202
  126. package/skills/ti-synthengine/references/unified-bypass-performance.json +0 -22425
  127. package/skills/ti-synthengine/references/unified-validation.json +0 -314
  128. package/skills/ti-ui/references/accessibility-deep-dive.md +0 -288
  129. package/skills/ti-ui/references/animation-and-matrices.md +0 -569
  130. package/skills/ti-ui/references/application-structures.md +0 -626
  131. package/skills/ti-ui/references/custom-fonts-styling.md +0 -549
  132. package/skills/ti-ui/references/event-handling.md +0 -401
  133. package/skills/ti-ui/references/gestures.md +0 -448
  134. package/skills/ti-ui/references/orientation.md +0 -374
  135. package/skills/ti-ui/references/platform-ui-android.md +0 -727
  136. package/skills/ti-ui/references/platform-ui-ios.md +0 -576
  137. package/skills/ti-ui/references/scrolling-views.md +0 -288
  138. package/skills/ti-ui/references/tableviews.md +0 -542
@@ -1,288 +0,0 @@
1
- # Scrolling views
2
-
3
- ## 1. ScrollView vs ScrollableView
4
-
5
- | Feature | ScrollView | ScrollableView |
6
- | ---------------- | ------------------------------ | ----------------------------- |
7
- | Purpose | Scrollable area of content | Paging through multiple views |
8
- | Scroll direction | Vertical and/or horizontal | Horizontal only |
9
- | Content size | `contentHeight`/`contentWidth` | Full-screen views |
10
- | Interaction | Drag to scroll | Swipe to snap between pages |
11
- | Use case | Long content, forms, images | Image gallery, onboarding |
12
-
13
- ## 2. ScrollView
14
-
15
- ### Create a ScrollView
16
-
17
- ```javascript
18
- const scrollView = Ti.UI.createScrollView({
19
- width: 300,
20
- height: 200,
21
- contentWidth: Ti.UI.SIZE, // Auto-fit to content
22
- contentHeight: Ti.UI.SIZE, // Auto-fit to content
23
- backgroundColor: 'white'
24
- });
25
-
26
- // Add content
27
- const content = Ti.UI.createView({
28
- width: 500,
29
- height: 500,
30
- backgroundColor: 'blue'
31
- });
32
-
33
- scrollView.add(content);
34
- win.add(scrollView);
35
- ```
36
- ...
37
- ### ScrollView properties
38
-
39
- | Property | Description | Platform |
40
- | --------------------------------------------- | ------------------------------------------------------------------- | -------- |
41
- | `contentWidth` / `contentHeight` | Size of the scrollable content area | All |
42
- | `scrollType` | `'vertical'` or `'horizontal'` (Android only - see below) | Android |
43
- | `showHorizontalScrollIndicator` | Show/hide horizontal scroll indicator | All |
44
- | `showVerticalScrollIndicator` | Show/hide vertical scroll indicator | All |
45
- | `zoomScale` / `minZoomScale` / `maxZoomScale` | Zoom level (values 0-1) | iOS |
46
- | `horizontalBounce` / `verticalBounce` | Enable/disable bounce effect at edges | iOS |
47
- | `canCancelEvents` | Allow ScrollView to cancel touch events in children (default: true) | iOS |
48
- | `scrollable` | Enable/disable scrolling | All |
49
-
50
- ### ScrollView events
51
-
52
- ```javascript
53
- scrollView.addEventListener('scroll', (e) => {
54
- Ti.API.info('Scrolling...');
55
- Ti.API.info(`Content offset: x=${e.contentOffset.x} y=${e.contentOffset.y}`);
56
- });
57
-
58
- scrollView.addEventListener('dragEnd', (e) => {
59
- Ti.API.info('Drag ended');
60
- e.source.setContentOffset({ x: 0, y: 0 }, { animated: true });
61
- });
62
-
63
- scrollView.addEventListener('scrollEnd', (e) => {
64
- Ti.API.info('Scroll completely ended');
65
- e.source.setContentOffset({ x: 0, y: 0 }, { animated: true });
66
- });
67
- ```
68
- ...
69
- ### Android ScrollView direction
70
-
71
- Android ScrollView can be vertical or horizontal, not both. If you do not set `scrollType`, Android auto-detects: if width equals contentWidth it defaults to vertical; if height equals contentHeight it defaults to horizontal. If Titanium cannot determine the direction, it logs a warning.
72
-
73
- ```javascript
74
- // Explicit horizontal scroll
75
- const scrollView = Ti.UI.createScrollView({
76
- width: 300,
77
- height: 200,
78
- scrollType: 'horizontal', // Android: horizontal only
79
- contentWidth: 600, // Must be larger than width
80
- contentHeight: 200 // Same as height = no vertical scroll
81
- });
82
- ```
83
- ...
84
- ## 3. ScrollableView
85
-
86
- ### Create a ScrollableView
87
-
88
- ```javascript
89
- const view1 = Ti.UI.createView({ backgroundColor: '#123' });
90
- const view2 = Ti.UI.createView({ backgroundColor: '#234' });
91
- const view3 = Ti.UI.createView({ backgroundColor: '#345' });
92
-
93
- const scrollableView = Ti.UI.createScrollableView({
94
- views: [view1, view2, view3],
95
- showPagingControl: true,
96
- pagingControlHeight: 30,
97
- pagingControlColor: 'blue'
98
- });
99
-
100
- win.add(scrollableView);
101
- ```
102
- ...
103
- ### ScrollableView events
104
-
105
- ```javascript
106
- scrollableView.addEventListener('scroll', (e) => {
107
- Ti.API.info(`Current page: ${e.currentPage}`);
108
- Ti.API.info(`Views: ${e.view}`); // View object reference
109
- });
110
-
111
- // Android only, and lowercase: ScrollableView has no `dragEnd` event.
112
- scrollableView.addEventListener('dragend', (e) => {
113
- Ti.API.info(`Drag ended, settled on page: ${e.currentPage}`);
114
- });
115
-
116
- // Cross-platform equivalent — fires once the view stops moving.
117
- scrollableView.addEventListener('scrollend', (e) => {
118
- Ti.API.info(`Settled on page: ${e.currentPage}`);
119
- });
120
- ```
121
- ...
122
- ### Image gallery
123
-
124
- ```javascript
125
- const images = [];
126
- for (let i = 1; i <= 10; i++) {
127
- images.push(Ti.UI.createImageView({
128
- image: `image${i}.jpg`,
129
- width: Ti.UI.FILL,
130
- height: Ti.UI.FILL
131
- }));
132
- }
133
-
134
- const gallery = Ti.UI.createScrollableView({
135
- views: images,
136
- showPagingControl: true
137
- });
138
- ```
139
-
140
- ### Onboarding wizard
141
-
142
- ```javascript
143
- const page1 = createOnboardingPage('Welcome', 'Get started with our app');
144
- const page2 = createOnboardingPage('Features', 'Learn about key features');
145
- const page3 = createOnboardingPage('Get Started', 'Create your account');
146
-
147
- const onboarding = Ti.UI.createScrollableView({
148
- views: [page1, page2, page3],
149
- showPagingControl: true
150
- });
151
-
152
- const nextButton = Ti.UI.createButton({
153
- title: 'Next',
154
- bottom: 20
155
- });
156
- nextButton.addEventListener('click', () => {
157
- const current = onboarding.currentPage;
158
- if (current < 2) {
159
- onboarding.scrollToView(current + 1);
160
- } else {
161
- onboarding.close();
162
- showMainApp();
163
- }
164
- });
165
- ```
166
-
167
- ### Long-form content
168
-
169
- ```javascript
170
- const scrollView = Ti.UI.createScrollView({
171
- width: Ti.UI.FILL,
172
- height: Ti.UI.FILL,
173
- contentHeight: Ti.UI.SIZE,
174
- layout: 'vertical'
175
- });
176
-
177
- // Add many components
178
- for (let i = 0; i < 50; i++) {
179
- scrollView.add(Ti.UI.createLabel({
180
- text: `Item ${i}`,
181
- top: 10,
182
- height: 40
183
- }));
184
- }
185
- ```
186
-
187
- ### Scrollable form
188
-
189
- ```javascript
190
- const formScrollView = Ti.UI.createScrollView({
191
- layout: 'vertical',
192
- height: Ti.UI.FILL
193
- });
194
-
195
- const nameField = Ti.UI.createTextField({
196
- hintText: 'Name',
197
- top: 10, height: 40
198
- });
199
-
200
- const emailField = Ti.UI.createTextField({
201
- hintText: 'Email',
202
- top: 10, height: 40
203
- });
204
-
205
- const submitButton = Ti.UI.createButton({
206
- title: 'Submit',
207
- top: 10
208
- });
209
-
210
- formScrollView.add(nameField);
211
- formScrollView.add(emailField);
212
- formScrollView.add(submitButton);
213
- ```
214
- ...
215
- ### ScrollableView
216
-
217
- ```javascript
218
- // Move to page 2
219
- scrollableView.scrollToView(1);
220
-
221
- // Move to last page
222
- scrollableView.scrollToView(scrollableView.views.length - 1);
223
-
224
- // Get current page
225
- const current = scrollableView.currentPage;
226
- ```
227
-
228
- ## 8. Detecting scroll position
229
-
230
- ```javascript
231
- scrollView.addEventListener('scroll', (e) => {
232
- const { x, y } = e.contentOffset;
233
-
234
- // Detect near bottom
235
- const maxScroll = scrollView.contentHeight - scrollView.height;
236
- if (y > maxScroll - 50) {
237
- loadMoreContent();
238
- }
239
- });
240
- ```
241
-
242
- ## Best practices
243
-
244
- 1. Use ScrollableView for paginated content (galleries, wizards)
245
- 2. Use ScrollView for continuous scrolling content (long forms, articles)
246
- 3. Specify dimensions explicitly on Android when possible
247
- 4. Consider performance with large datasets
248
- 5. Test on real devices; simulator behavior may differ
249
- 6. Use paging controls for ScrollableView to improve UX
250
-
251
- ## Community-Discovered Patterns
252
-
253
- ### ScrollView inside NavigationWindow with Large Titles (iOS)
254
-
255
- When placing a ScrollView inside a Window managed by NavigationWindow, configure the Window to ensure proper content positioning — especially when using large titles or translucent bars.
256
-
257
- Three Window properties must be set together:
258
-
259
- | Property | Value | Purpose |
260
- |---|---|---|
261
- | `extendEdges` | `[Ti.UI.EXTEND_EDGE_ALL]` | Content extends behind bars (enables blur effect) |
262
- | `autoAdjustScrollViewInsets` | `true` | iOS adjusts ScrollView insets to avoid overlap |
263
- | `largeTitleEnabled` | `true` | Enables large title that collapses on scroll |
264
-
265
- Without `autoAdjustScrollViewInsets`, the ScrollView content overlaps behind the navigation bar when `extendEdges` is set. Without `extendEdges`, the large title renders with a visible delay as iOS cannot calculate the full layout upfront.
266
-
267
- This applies to both standalone NavigationWindow and TabGroup (which wraps each Tab in an implicit NavigationWindow on iOS).
268
-
269
- ```javascript
270
- const win = Ti.UI.createWindow({
271
- title: 'Feed',
272
- largeTitleEnabled: true,
273
- extendEdges: [Ti.UI.EXTEND_EDGE_ALL],
274
- autoAdjustScrollViewInsets: true
275
- });
276
-
277
- const scroll = Ti.UI.createScrollView({
278
- layout: 'vertical',
279
- contentWidth: Ti.UI.FILL,
280
- contentHeight: Ti.UI.SIZE
281
- });
282
-
283
- // Content starts below the nav bar automatically
284
- scroll.add(Ti.UI.createView({ height: 200, backgroundColor: 'red' }));
285
- win.add(scroll);
286
- ```
287
-
288
- See [platform-ui-ios.md](platform-ui-ios.md) for the full explanation with `largeTitleDisplayMode` options.