@nativescript-community/ui-activityindicator 1.0.2 → 1.0.3

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/CHANGELOG.md CHANGED
@@ -3,6 +3,10 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [1.0.3](https://github.com/nativescript-community/ui-native-components/compare/v1.0.2...v1.0.3) (2026-10-22)
7
+
8
+ **Note:** Version bump only for package @nativescript-community/ui-activityindicator
9
+
6
10
  ## [1.0.2](https://github.com/nativescript-community/ui-native-components/compare/v1.0.1...v1.0.2) (2026-10-20)
7
11
 
8
12
  **Note:** Version bump only for package @nativescript-community/ui-activityindicator
@@ -7,6 +7,11 @@ export declare class ActivityIndicator extends ActivityIndicatorBase {
7
7
  [maxValueProperty.setNative]: (value: number) => void;
8
8
  [indeterminateProperty.setNative]: (value: boolean) => void;
9
9
  nativeViewProtected: com.google.android.material.progressindicator.CircularProgressIndicator;
10
+ private defaults?;
10
11
  createNativeView(): com.google.android.material.progressindicator.CircularProgressIndicator;
11
- onLayout(left: number, top: number, right: number, bottom: number): void;
12
+ initNativeView(): void;
13
+ disposeNativeView(): void;
14
+ private getRequestedSize;
15
+ private fitIndicatorSize;
16
+ private applyIndicatorSize;
12
17
  }
package/index.android.js CHANGED
@@ -2,18 +2,59 @@ import { inflateLayout } from '@nativescript-community/ui-core/android/utils';
2
2
  import { Utils } from '@nativescript/core';
3
3
  import { ActivityIndicatorBase, indeterminateProperty, maxValueProperty, valueProperty, wavyProperty } from './index-common';
4
4
  export class ActivityIndicator extends ActivityIndicatorBase {
5
- // The indicator draws at its own size (40dp, 48dp when wavy), whatever the size of the view: it follows the size of the view
6
- // (width/height of the view, the smallest side) in onLayout.
5
+ // The indicator draws at its own size (40dp, 48dp when wavy), whatever the size of the view. NativeScript lays out
6
+ // natively on Android, onMeasure/onLayout are never called in JS, and the Material indicator measures itself at its
7
+ // own size whatever the spec: the size asked for (the smallest side of width/height) is applied to it before the
8
+ // first measure, and again if the layout changes.
7
9
  createNativeView() {
8
10
  return inflateLayout(this._context, 'ns_ui_circular_progress');
9
11
  }
10
- onLayout(left, top, right, bottom) {
11
- super.onLayout(left, top, right, bottom);
12
+ initNativeView() {
13
+ // before super: that is where the native layout listener is installed, only if somebody listens by then
14
+ this.on('layoutChanged', this.fitIndicatorSize, this);
15
+ super.initNativeView();
16
+ // the first measure must already see the size: the indicator measures itself at its own size, whatever the spec
17
+ const requested = this.getRequestedSize();
18
+ if (requested !== Infinity) {
19
+ this.applyIndicatorSize(requested);
20
+ }
21
+ }
22
+ disposeNativeView() {
23
+ this.off('layoutChanged', this.fitIndicatorSize, this);
24
+ super.disposeNativeView();
25
+ }
26
+ // the smallest side of the width/height asked for, in pixels, Infinity without any
27
+ getRequestedSize() {
28
+ const toPixels = (length) => {
29
+ if (typeof length === 'number') {
30
+ return Math.round(Utils.layout.toDevicePixels(length));
31
+ }
32
+ if (length && typeof length === 'object') {
33
+ return length.unit === 'dip' ? Math.round(Utils.layout.toDevicePixels(length.value)) : length.unit === 'px' ? length.value : Infinity;
34
+ }
35
+ return Infinity;
36
+ };
37
+ return Math.min(toPixels(this.width), toPixels(this.height));
38
+ }
39
+ fitIndicatorSize() {
40
+ const params = this.nativeViewProtected?.getLayoutParams();
41
+ const requested = params ? Math.min(params.width > 0 ? params.width : Infinity, params.height > 0 ? params.height : Infinity) : Infinity;
42
+ if (requested !== Infinity) {
43
+ this.applyIndicatorSize(requested);
44
+ }
45
+ }
46
+ applyIndicatorSize(requested) {
12
47
  const indicator = this.nativeViewProtected;
13
- const size = Math.min(right - left, bottom - top);
14
- if (indicator && size > 0 && (this.width !== undefined || this.height !== undefined)) {
15
- const inset = indicator.getIndicatorInset();
16
- indicator.setIndicatorSize(Math.max(0, size - 2 * inset));
48
+ // a smaller indicator gets a thinner track and a smaller inset, or it ends up a blob
49
+ this.defaults ?? (this.defaults = { inset: indicator.getIndicatorInset(), thickness: indicator.getTrackThickness(), outer: indicator.getIndicatorSize() + 2 * indicator.getIndicatorInset() });
50
+ const scale = Math.min(1, requested / this.defaults.outer);
51
+ const inset = Math.round(this.defaults.inset * scale);
52
+ const thickness = Math.max(1, Math.round(this.defaults.thickness * scale));
53
+ const indicatorSize = Math.max(0, requested - 2 * inset);
54
+ if (inset !== indicator.getIndicatorInset() || thickness !== indicator.getTrackThickness() || indicatorSize !== indicator.getIndicatorSize()) {
55
+ indicator.setIndicatorInset(inset);
56
+ indicator.setTrackThickness(thickness);
57
+ indicator.setIndicatorSize(indicatorSize);
17
58
  }
18
59
  }
19
60
  [wavyProperty.setNative](value) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.android.js","sourceRoot":"","sources":["../../src/ui-activityindicator/index.android.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAC9E,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE7H,MAAM,OAAO,iBAAkB,SAAQ,qBAAqB;IAGxD,6HAA6H;IAC7H,6DAA6D;IAC7D,gBAAgB;QACZ,OAAO,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,yBAAyB,CAA4E,CAAC;IAC9I,CAAC;IAED,QAAQ,CAAC,IAAY,EAAE,GAAW,EAAE,KAAa,EAAE,MAAc;QAC7D,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC;QAClD,IAAI,SAAS,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,EAAE,CAAC;YACnF,MAAM,KAAK,GAAG,SAAS,CAAC,iBAAiB,EAAE,CAAC;YAC5C,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QAC9D,CAAC;IACL,CAAC;IAED,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAc;QACnC,6DAA6D;QAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,mBAA0B,CAAC;QAClD,MAAM,EAAE,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;QACzE,oFAAoF;QACpF,SAAS,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAI,KAAK,EAAE,CAAC;YACR,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;IACL,CAAC;IAED,CAAC,aAAa,CAAC,UAAU,CAAC;QACtB,OAAO,CAAC,CAAC;IACb,CAAC;IACD,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,KAAa;QACnC,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,CAAC,gBAAgB,CAAC,UAAU,CAAC;QACzB,OAAO,GAAG,CAAC;IACf,CAAC;IACD,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,KAAa;QACtC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,KAAc;QAC5C,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;CACJ"}
1
+ {"version":3,"file":"index.android.js","sourceRoot":"","sources":["../../src/ui-activityindicator/index.android.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nativescript-community/ui-activityindicator",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "ActivityIndicator augmented with indeterminate/value/maxValue. Material on Android, native UIActivityIndicatorView on iOS.",
5
5
  "main": "./index",
6
6
  "sideEffects": false,
@@ -44,7 +44,7 @@
44
44
  },
45
45
  "readmeFilename": "README.md",
46
46
  "dependencies": {
47
- "@nativescript-community/ui-core": "^1.0.2"
47
+ "@nativescript-community/ui-core": "^1.0.3"
48
48
  },
49
- "gitHead": "b4ee0e6f8648feb7e7c50b4b017dedde0a802928"
49
+ "gitHead": "0931c3c4d0e3855bd8af09b3cd2b604bb730e99e"
50
50
  }