@nativescript-community/ui-material-core 6.0.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 (67) hide show
  1. package/CHANGELOG.md +1559 -0
  2. package/LICENSE +201 -0
  3. package/README.md +5 -0
  4. package/android/utils.d.ts +44 -0
  5. package/android/utils.js +257 -0
  6. package/android/utils.js.map +1 -0
  7. package/cssproperties.d.ts +7 -0
  8. package/cssproperties.js +49 -0
  9. package/cssproperties.js.map +1 -0
  10. package/index.android.d.ts +42 -0
  11. package/index.android.js +318 -0
  12. package/index.android.js.map +1 -0
  13. package/index.common.d.ts +9 -0
  14. package/index.common.js +79 -0
  15. package/index.common.js.map +1 -0
  16. package/index.d.ts +67 -0
  17. package/index.ios.d.ts +46 -0
  18. package/index.ios.js +336 -0
  19. package/index.ios.js.map +1 -0
  20. package/package.json +55 -0
  21. package/platforms/android/AndroidManifest.xml +2 -0
  22. package/platforms/android/include.gradle +10 -0
  23. package/platforms/android/java/com/nativescript/material/core/BottomNavigationBar.java +309 -0
  24. package/platforms/android/java/com/nativescript/material/core/TabItemSpec.java +15 -0
  25. package/platforms/android/java/com/nativescript/material/core/TabLayout.java +441 -0
  26. package/platforms/android/java/com/nativescript/material/core/TabStrip.java +264 -0
  27. package/platforms/android/java/com/nativescript/material/core/TabViewPager.java +62 -0
  28. package/platforms/android/java/com/nativescript/material/core/TabsBar.java +442 -0
  29. package/platforms/android/java/com/nativescript/material/core/Utils.java +105 -0
  30. package/platforms/android/res/layout/material_page.xml +33 -0
  31. package/platforms/android/ui_material_core.aar +0 -0
  32. package/platforms/ios/Podfile +2 -0
  33. package/pnpm-lock.yaml +83 -0
  34. package/postinstall.d.ts +0 -0
  35. package/postinstall.js +2 -0
  36. package/postinstall.js.map +1 -0
  37. package/preuninstall.d.ts +0 -0
  38. package/preuninstall.js +2 -0
  39. package/preuninstall.js.map +1 -0
  40. package/scripts/before-prepare.js +28 -0
  41. package/scripts/before-prepare.js.map +1 -0
  42. package/tab-navigation-base/react/index.d.ts +60 -0
  43. package/tab-navigation-base/react/index.js +117 -0
  44. package/tab-navigation-base/react/index.js.map +1 -0
  45. package/tab-navigation-base/tab-content-item/index.android.d.ts +14 -0
  46. package/tab-navigation-base/tab-content-item/index.android.js +46 -0
  47. package/tab-navigation-base/tab-content-item/index.android.js.map +1 -0
  48. package/tab-navigation-base/tab-content-item/index.d.ts +11 -0
  49. package/tab-navigation-base/tab-content-item/index.ios.d.ts +7 -0
  50. package/tab-navigation-base/tab-content-item/index.ios.js +13 -0
  51. package/tab-navigation-base/tab-content-item/index.ios.js.map +1 -0
  52. package/tab-navigation-base/tab-content-item/tab-content-item-common.d.ts +7 -0
  53. package/tab-navigation-base/tab-content-item/tab-content-item-common.js +22 -0
  54. package/tab-navigation-base/tab-content-item/tab-content-item-common.js.map +1 -0
  55. package/tab-navigation-base/tab-navigation-base/index.d.ts +67 -0
  56. package/tab-navigation-base/tab-navigation-base/index.js +234 -0
  57. package/tab-navigation-base/tab-navigation-base/index.js.map +1 -0
  58. package/tab-navigation-base/tab-strip/index.d.ts +24 -0
  59. package/tab-navigation-base/tab-strip/index.js +151 -0
  60. package/tab-navigation-base/tab-strip/index.js.map +1 -0
  61. package/tab-navigation-base/tab-strip-item/index.d.ts +34 -0
  62. package/tab-navigation-base/tab-strip-item/index.js +215 -0
  63. package/tab-navigation-base/tab-strip-item/index.js.map +1 -0
  64. package/textbase/cssproperties.d.ts +16 -0
  65. package/textbase/cssproperties.js +103 -0
  66. package/textbase/cssproperties.js.map +1 -0
  67. package/tsconfig.hooks.json +17 -0
@@ -0,0 +1,309 @@
1
+ /*
2
+ * Copyright 2014 Google Inc. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ package com.nativescript.material.core;
18
+
19
+ import android.content.Context;
20
+ import android.graphics.Typeface;
21
+ import android.graphics.Color;
22
+ import android.graphics.drawable.Drawable;
23
+ import android.text.TextUtils;
24
+ import android.util.AttributeSet;
25
+ import android.util.SparseArray;
26
+ import android.util.TypedValue;
27
+ import android.view.Gravity;
28
+ import android.view.View;
29
+ import android.view.ViewGroup;
30
+ import android.widget.ImageView;
31
+ import android.widget.ImageView.ScaleType;
32
+ import android.widget.LinearLayout;
33
+ import android.widget.TextView;
34
+
35
+ public class BottomNavigationBar extends LinearLayout {
36
+ /**
37
+ * Allows complete control over the colors drawn in the tab layout. Set with
38
+ * {@link #setCustomTabColorizer(TabColorizer)}.
39
+ */
40
+ public interface TabColorizer {
41
+
42
+ /**
43
+ * @return return the color of the indicator used when {@code position}
44
+ * is selected.
45
+ */
46
+ int getIndicatorColor(int position);
47
+
48
+ }
49
+
50
+ private static final int BOTTOM_NAV_HEIGHT = 56;
51
+ private static final int ITEM_TEXT_SIZE_SP = 12;
52
+ private static final int ITEM_TEXT_MAX_WIDTH = 144;
53
+
54
+ private TabItemSpec[] mTabItems;
55
+ private SparseArray<String> mContentDescriptions = new SparseArray<String>();
56
+
57
+ private final TabStrip mTabStrip;
58
+ private int mMaxImageHeight;
59
+
60
+ public BottomNavigationBar(Context context) {
61
+ this(context, null);
62
+ }
63
+
64
+ public BottomNavigationBar(Context context, AttributeSet attrs) {
65
+ this(context, attrs, 0);
66
+ }
67
+
68
+ public BottomNavigationBar(Context context, AttributeSet attrs, int defStyle) {
69
+ super(context, attrs, defStyle);
70
+
71
+ mTabStrip = new TabStrip(context);
72
+ mTabStrip.setSelectedIndicatorColors(0x00FFFFFF);
73
+ int bottomNavHeight = (int) (BOTTOM_NAV_HEIGHT * getResources().getDisplayMetrics().density);
74
+ addView(mTabStrip, LayoutParams.MATCH_PARENT, bottomNavHeight);
75
+ }
76
+
77
+ /**
78
+ * Set the custom {@link TabColorizer} to be used.
79
+ *
80
+ * If you only require simple customisation then you can use
81
+ */
82
+ public void setCustomTabColorizer(TabColorizer tabColorizer) {
83
+ // mTabStrip.setCustomTabColorizer(tabColorizer);
84
+ }
85
+
86
+ public void setTabTextColor(int color){
87
+ mTabStrip.setTabTextColor(color);
88
+ }
89
+
90
+ public int getTabTextColor(){
91
+ return mTabStrip.getTabTextColor();
92
+ }
93
+
94
+ public void setSelectedTabTextColor(int color){
95
+ mTabStrip.setSelectedTabTextColor(color);
96
+ }
97
+
98
+ public int getSelectedTabTextColor(){
99
+ return mTabStrip.getSelectedTabTextColor();
100
+ }
101
+
102
+ public void setTabTextFontSize(float fontSize){
103
+ mTabStrip.setTabTextFontSize(fontSize);
104
+ }
105
+
106
+ public float getTabTextFontSize(){
107
+ return mTabStrip.getTabTextFontSize();
108
+ }
109
+
110
+ public void setItems(TabItemSpec[] items) {
111
+ mTabStrip.removeAllViews();
112
+ mTabItems = items;
113
+ setImageHeights();
114
+ populateTabStrip();
115
+ }
116
+
117
+ /**
118
+ * Updates the UI of an item at specified index
119
+ */
120
+ public void updateItemAt(int position, TabItemSpec tabItem) {
121
+ LinearLayout ll = (LinearLayout)mTabStrip.getChildAt(position);
122
+ ImageView imgView = (ImageView)ll.getChildAt(0);
123
+ TextView textView = (TextView)ll.getChildAt(1);
124
+ this.setupItem(ll, textView, imgView, tabItem);
125
+ }
126
+
127
+ /**
128
+ * Gets the TextView for tab item at index
129
+ */
130
+ public TextView getTextViewForItemAt(int index){
131
+ LinearLayout ll = this.getViewForItemAt(index);
132
+ return (ll != null) ? (TextView)ll.getChildAt(1) : null;
133
+ }
134
+
135
+ /**
136
+ * Gets the LinearLayout container for tab item at index
137
+ */
138
+ public LinearLayout getViewForItemAt(int index){
139
+ LinearLayout result = null;
140
+
141
+ if(this.mTabStrip.getChildCount() > index){
142
+ result = (LinearLayout)this.mTabStrip.getChildAt(index);
143
+ }
144
+
145
+ return result;
146
+ }
147
+
148
+ /**
149
+ * Gets the number of realized tabs.
150
+ */
151
+ public int getItemCount(){
152
+ return this.mTabStrip.getChildCount();
153
+ }
154
+
155
+ /**
156
+ * Create a default view to be used for tabs.
157
+ */
158
+ protected View createDefaultTabView(Context context, TabItemSpec tabItem) {
159
+ float density = getResources().getDisplayMetrics().density;
160
+
161
+ LinearLayout tabItemLayout = new LinearLayout(context);
162
+ tabItemLayout.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT));
163
+ tabItemLayout.setGravity(Gravity.CENTER);
164
+ tabItemLayout.setOrientation(LinearLayout.VERTICAL);
165
+ TypedValue backgroundOutValue = new TypedValue();
166
+ getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground, backgroundOutValue, true);
167
+ tabItemLayout.setBackgroundResource(backgroundOutValue.resourceId);
168
+
169
+ ImageView iconImageView = new ImageView(context);
170
+ iconImageView.setScaleType(ScaleType.FIT_CENTER);
171
+ int iconImageHeight = this.mMaxImageHeight > 0 ? this.mMaxImageHeight : ViewGroup.LayoutParams.WRAP_CONTENT;
172
+ int iconImageWidth = ViewGroup.LayoutParams.WRAP_CONTENT;
173
+ LinearLayout.LayoutParams iconImageLayoutParams = new LinearLayout.LayoutParams(iconImageWidth, iconImageHeight);
174
+ iconImageLayoutParams.gravity = Gravity.CENTER;
175
+ iconImageView.setLayoutParams(iconImageLayoutParams);
176
+
177
+ TextView titleTextView = new TextView(context);
178
+ titleTextView.setGravity(Gravity.CENTER);
179
+ titleTextView.setMaxWidth((int) (ITEM_TEXT_MAX_WIDTH * density));
180
+ titleTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, ITEM_TEXT_SIZE_SP);
181
+ titleTextView.setEllipsize(TextUtils.TruncateAt.END);
182
+ titleTextView.setMaxLines(1);
183
+ titleTextView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
184
+
185
+ this.setupItem(tabItemLayout, titleTextView, iconImageView, tabItem);
186
+
187
+ tabItemLayout.addView(iconImageView);
188
+ tabItemLayout.addView(titleTextView);
189
+ return tabItemLayout;
190
+ }
191
+
192
+ private void setupItem(LinearLayout ll, TextView textView,ImageView imgView, TabItemSpec tabItem){
193
+ float density = getResources().getDisplayMetrics().density;
194
+ if (tabItem.iconId != 0) {
195
+ imgView.setImageResource(tabItem.iconId);
196
+ imgView.setVisibility(VISIBLE);
197
+ } else if (tabItem.iconDrawable != null) {
198
+ imgView.setImageDrawable(tabItem.iconDrawable);
199
+ imgView.setVisibility(VISIBLE);
200
+ } else {
201
+ imgView.setVisibility(GONE);
202
+ }
203
+
204
+ if (tabItem.title != null && !tabItem.title.isEmpty()) {
205
+ textView.setText(tabItem.title);
206
+ textView.setVisibility(VISIBLE);
207
+
208
+ if (tabItem.typeFace != null) {
209
+ textView.setTypeface(tabItem.typeFace);
210
+ }
211
+
212
+ if (tabItem.fontSize != 0) {
213
+ textView.setTextSize(tabItem.fontSize);
214
+ }
215
+
216
+ if (tabItem.color != 0) {
217
+ textView.setTextColor(tabItem.color);
218
+ mTabStrip.setShouldUpdateTabsTextColor(false);
219
+ }
220
+ } else {
221
+ textView.setVisibility(GONE);
222
+ }
223
+
224
+ if (tabItem.backgroundColor != 0) {
225
+ ll.setBackgroundColor(tabItem.backgroundColor);
226
+ }
227
+
228
+ ll.setMinimumHeight((int) (BOTTOM_NAV_HEIGHT * density));
229
+
230
+ LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) ll.getLayoutParams();
231
+ lp.width = 0;
232
+ lp.weight = 1;
233
+ }
234
+
235
+ public boolean onTap(int position) {
236
+ // to be overridden in JS
237
+ return true;
238
+ }
239
+
240
+ public void onSelectedPositionChange(int position, int prevPosition) {
241
+ // to be overridden in JS
242
+ }
243
+
244
+ private void setImageHeights(){
245
+ if (this.mTabItems != null) {
246
+ for (TabItemSpec tabItem : this.mTabItems) {
247
+ if(tabItem.imageHeight == 0 && tabItem.iconId != 0) {
248
+ Drawable drawable = getResources().getDrawable(tabItem.iconId);
249
+ tabItem.imageHeight = drawable.getIntrinsicHeight();
250
+ }
251
+ if(tabItem.imageHeight > this.mMaxImageHeight) {
252
+ this.mMaxImageHeight = tabItem.imageHeight;
253
+ }
254
+ }
255
+ }
256
+ }
257
+
258
+ private void populateTabStrip() {
259
+ final OnClickListener tabClickListener = new TabClickListener();
260
+
261
+ if (this.mTabItems != null) {
262
+ int count = this.mTabItems.length < 5 ? this.mTabItems.length : 5;
263
+ for (int i = 0; i < count; i++) {
264
+ TabItemSpec tabItem;
265
+ tabItem = this.mTabItems[i];
266
+ View tabView = createDefaultTabView(getContext(), tabItem);
267
+ tabView.setOnClickListener(tabClickListener);
268
+
269
+ String desc = mContentDescriptions.get(i, null);
270
+ if (desc != null) {
271
+ tabView.setContentDescription(desc);
272
+ }
273
+
274
+ mTabStrip.addView(tabView);
275
+ }
276
+ int tabTextColor = mTabStrip.getTabTextColor();
277
+ mTabStrip.setTabTextColor(Color.argb(100, Color.red(tabTextColor), Color.green(tabTextColor), Color.blue(tabTextColor)));
278
+ mTabStrip.setSelectedTabTextColor(Color.argb(255, Color.red(tabTextColor), Color.green(tabTextColor), Color.blue(tabTextColor)));
279
+ }
280
+ }
281
+
282
+ public void setSelectedPosition(int position) {
283
+ int prevPosition = mTabStrip.getSelectedPosition();
284
+ if (prevPosition == position) {
285
+ return;
286
+ }
287
+
288
+ mTabStrip.setSelectedPosition(position);
289
+ onSelectedPositionChange(position, prevPosition);
290
+ }
291
+
292
+ public void setContentDescription(int i, String desc) {
293
+ mContentDescriptions.put(i, desc);
294
+ }
295
+
296
+ private class TabClickListener implements OnClickListener {
297
+ @Override
298
+ public void onClick(View v) {
299
+ for (int i = 0; i < mTabStrip.getChildCount(); i++) {
300
+ if (v == mTabStrip.getChildAt(i)) {
301
+ if (onTap(i)) {
302
+ setSelectedPosition(i);
303
+ }
304
+ return;
305
+ }
306
+ }
307
+ }
308
+ }
309
+ }
@@ -0,0 +1,15 @@
1
+ package com.nativescript.material.core;
2
+
3
+ import android.graphics.drawable.Drawable;
4
+ import android.graphics.Typeface;
5
+
6
+ public class TabItemSpec {
7
+ public String title;
8
+ public int fontSize;
9
+ public Typeface typeFace;
10
+ public int iconId;
11
+ public Drawable iconDrawable;
12
+ public int imageHeight;
13
+ public int backgroundColor;
14
+ public int color;
15
+ }