@nativescript-community/ui-appbar 1.0.3 → 1.1.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.
- package/CHANGELOG.md +10 -0
- package/README.md +20 -4
- package/index-common.d.ts +54 -3
- package/index-common.js +83 -2
- package/index-common.js.map +1 -1
- package/index.android.d.ts +61 -2
- package/index.android.js +528 -29
- package/index.android.js.map +1 -1
- package/index.d.ts +24 -4
- package/index.ios.d.ts +4 -3
- package/index.ios.js +57 -8
- package/index.ios.js.map +1 -1
- package/package.json +4 -4
- package/platforms/android/native-api-usage.json +34 -0
- package/svelte/index.d.ts +1 -1
- package/svelte/index.js +6 -2
- package/svelte/index.js.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,16 @@
|
|
|
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.1.0](https://github.com/nativescript-community/ui-material-components/compare/v1.0.4...v1.1.0) (2026-10-24)
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* **ui-appbar:** add inline search, floating bottom toolbar and platform fixes ([a27a005](https://github.com/nativescript-community/ui-material-components/commit/a27a005c875f2c590207b7c6f983abae348059ad))
|
|
11
|
+
|
|
12
|
+
## [1.0.4](https://github.com/nativescript-community/ui-material-components/compare/v1.0.3...v1.0.4) (2026-10-22)
|
|
13
|
+
|
|
14
|
+
**Note:** Version bump only for package @nativescript-community/ui-appbar
|
|
15
|
+
|
|
6
16
|
## [1.0.3](https://github.com/nativescript-community/ui-material-components/compare/v1.0.2...v1.0.3) (2026-10-22)
|
|
7
17
|
|
|
8
18
|
**Note:** Version bump only for package @nativescript-community/ui-appbar
|
package/README.md
CHANGED
|
@@ -47,6 +47,7 @@
|
|
|
47
47
|
* [Items](#items)
|
|
48
48
|
* [Hide on scroll](#hide-on-scroll)
|
|
49
49
|
* [Bottom items](#bottom-items)
|
|
50
|
+
* [Custom views (Android)](#custom-views-android)
|
|
50
51
|
* [Overlay](#overlay)
|
|
51
52
|
* [Demos and Development](#demos-and-development)
|
|
52
53
|
* [Repo Setup](#repo-setup)
|
|
@@ -102,9 +103,9 @@ Register the svelte elements once (`registerElement` of svelte-native): `import
|
|
|
102
103
|
| `subtitle`, `formattedTitle` | subtitle, title with spans |
|
|
103
104
|
| `translucent` | the content scrolls under the bar, which is see through: iOS a blur tinted with the color of the bar, Android the color of the bar at 85%. Set `scrollTarget`; the scrolling view must be the content of the page (iOS) |
|
|
104
105
|
| `searchable`, `searchHint` | search: iOS `UISearchController` under the title, Android a collapsible `SearchView` action. Events `searchChange`, `searchSubmit`, `searchCancel` (`text`) |
|
|
105
|
-
| `searchMode` | Android: `collapsible` (default, a search icon in the bar)
|
|
106
|
+
| `searchMode` | Android: `collapsible` (default, a search icon in the bar) `bar` (Material 3 `SearchBar` under the title which opens a full screen `SearchView`; its suggestions / results go in `<appPageSearchContent>`, a child of the page) or `inline` (Material 3 `SearchBar` that morphs into an editable field in place: filter your content from `searchChange`, no full screen view; without a `title` the bar hosts the navigation icon and the actions, `closeSearch()` closes it) |
|
|
106
107
|
| `searchPlacement` | iOS 26: where the search bar goes: `stacked` (under the title, default), `integrated` (a glass button / field in the bar), `integratedButton`, `integratedCentered`, `automatic` |
|
|
107
|
-
| `scrollTarget` | the scrolling view the bar follows (iOS: `setContentScrollView`) |
|
|
108
|
+
| `scrollTarget`, `scrollTargetId` | the scrolling view the bar follows (iOS: `setContentScrollView`), as a view or by its `id` in the page. By default (Android) the first scrolling view of the content is searched: giving it spares that search |
|
|
108
109
|
|
|
109
110
|
Status and limits: see [APPBAR_PLAN.md](../../APPBAR_PLAN.md). On iOS a large title on a pushed page uses the UIKit `Always` mode, which never shows the inline title: a title view is shown while the bar is collapsed (the height of the bar tells). On the root page of the Frame UIKit does it.
|
|
110
111
|
On Android the bar draws under the status bar (edge to edge) and the page handles the inset.
|
|
@@ -155,14 +156,29 @@ On iOS 26 the system puts it in a Liquid Glass capsule, use a plain / text varia
|
|
|
155
156
|
|
|
156
157
|
## Bottom items
|
|
157
158
|
|
|
158
|
-
`bottomItems` (`{ text, icon, spacer, onTap }`, event `bottomItemTap`): iOS the bottom toolbar of the navigation controller (Liquid Glass buttons on iOS 26, `spacer` is a flexible space), Android a Material `BottomAppBar` (with `scrollBehavior="hide"` it hides on scroll; the actions are at the start, `spacer` is ignored).
|
|
159
|
-
The last items of the `scrollTarget` stay above the Android bar.
|
|
159
|
+
`bottomBarStyle` (Android: `floating`, the default, a Material 3 Expressive floating toolbar over the content, or `bottomAppBar`; iOS ignores it) and `bottomItems` (`{ text, icon, spacer, menu, onTap }`, event `bottomItemTap`; `menu` makes the button open a menu: iOS native, Android popup above the bar): iOS the bottom toolbar of the navigation controller (Liquid Glass buttons on iOS 26, `spacer` is a flexible space), Android a Material `BottomAppBar` (with `scrollBehavior="hide"` it hides on scroll; the actions are at the start, `spacer` is ignored).
|
|
160
|
+
The last items of the `scrollTarget` stay above the Android bar. The icons of the Android bars take the color of the bar (`color` css, else the theme `colorOnSurface`) and follow a dark / light switch.
|
|
160
161
|
|
|
161
162
|
```svelte
|
|
162
163
|
<appBar bottomItems={[{ icon: 'sys://house', text: 'Home', onTap }, { spacer: true }, { icon: 'sys://plus', text: 'Add', onTap }]} />
|
|
163
164
|
```
|
|
164
165
|
|
|
165
166
|
|
|
167
|
+
[](#custom-views-android)
|
|
168
|
+
|
|
169
|
+
## Custom views (Android)
|
|
170
|
+
|
|
171
|
+
`<appBarSearchField>` (`searchField`) replaces the built-in text field of the `inline` search by any NativeScript `TextField` (core, or `@nativescript-community/ui-textfield`). The bar puts it between the back and the clear buttons and keeps `searchChange`, `searchSubmit`, the clear button and the keyboard working with it.
|
|
172
|
+
`<appBarBottomView>` (`bottomView`) puts any view in the `floating` bottom toolbar instead of the `bottomItems` buttons (`bottomItems` stay the default; the `bottomAppBar` style ignores `bottomView`). Both are ignored on iOS.
|
|
173
|
+
|
|
174
|
+
```svelte
|
|
175
|
+
<appBar searchable searchMode="inline" on:searchChange={(e) => (query = e.text)}>
|
|
176
|
+
<appBarSearchField><textfield hint="Search" /></appBarSearchField>
|
|
177
|
+
<appBarBottomView><stacklayout orientation="horizontal"><button text="Share" /></stacklayout></appBarBottomView>
|
|
178
|
+
</appBar>
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
|
|
166
182
|
[](#overlay)
|
|
167
183
|
|
|
168
184
|
## Overlay
|
package/index-common.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ActionBar, ActionItem, EventData, FormattedString, GridLayout, ImageSource, Property, View } from '@nativescript/core';
|
|
1
|
+
import { ActionBar, ActionItem, ContentView, EventData, FormattedString, GridLayout, ImageSource, Property, View, ViewBase } from '@nativescript/core';
|
|
2
2
|
import { MenuItem } from '@nativescript-community/ui-menu';
|
|
3
3
|
/** small: standard bar, medium / large: a title that collapses on scroll (M3 collapsing app bar on Android, large title on iOS) */
|
|
4
4
|
export type AppBarSize = 'small' | 'medium' | 'large';
|
|
@@ -10,12 +10,16 @@ export type AppBarSize = 'small' | 'medium' | 'large';
|
|
|
10
10
|
export type AppBarScrollBehavior = 'none' | 'lift' | 'hide';
|
|
11
11
|
export declare const sizeProperty: Property<AppBarBase, AppBarSize>;
|
|
12
12
|
export declare const scrollBehaviorProperty: Property<AppBarBase, AppBarScrollBehavior>;
|
|
13
|
+
/** iOS: `leading` aligns the inline title of a small bar to the left (navigation item style `browser`), `center` is the system default. Android: the title of a small bar is always at the start */
|
|
14
|
+
export type AppBarTitleAlignment = 'center' | 'leading';
|
|
15
|
+
export declare const titleAlignmentProperty: Property<AppBarBase, AppBarTitleAlignment>;
|
|
13
16
|
export declare const subtitleProperty: Property<AppBarBase, string>;
|
|
14
17
|
export declare const formattedTitleProperty: Property<AppBarBase, FormattedString>;
|
|
15
18
|
export declare const translucentProperty: Property<AppBarBase, boolean>;
|
|
16
19
|
export declare const searchableProperty: Property<AppBarBase, boolean>;
|
|
17
20
|
export declare const searchHintProperty: Property<AppBarBase, string>;
|
|
18
21
|
export declare const scrollTargetProperty: Property<AppBarBase, View>;
|
|
22
|
+
export declare const scrollTargetIdProperty: Property<AppBarBase, string>;
|
|
19
23
|
export declare const badgeProperty: Property<AppBarItem, string | number | boolean>;
|
|
20
24
|
export declare const menuProperty: Property<AppBarItem, MenuItem[]>;
|
|
21
25
|
export declare const prominentProperty: Property<AppBarItem, boolean>;
|
|
@@ -44,23 +48,47 @@ export interface AppBarBottomItem {
|
|
|
44
48
|
text?: string;
|
|
45
49
|
/** iOS: a flexible space between the buttons. Android: ignored (the actions are at the end of the bar) */
|
|
46
50
|
spacer?: boolean;
|
|
51
|
+
/** iOS 26: the search field of the bar, in the bottom toolbar (needs `searchable` and `searchPlacement="integrated"`). Android: ignored */
|
|
52
|
+
search?: boolean;
|
|
47
53
|
/** a badge on the action: a number, a text, or `true` for a dot */
|
|
48
54
|
badge?: string | number | boolean;
|
|
55
|
+
/** items of a menu shown when the button is tapped (no `onTap`): iOS native menu, Android popup menu above the bar */
|
|
56
|
+
menu?: MenuItem[];
|
|
49
57
|
/** called when the action is tapped */
|
|
50
58
|
onTap?: (item: AppBarBottomItem) => void;
|
|
51
59
|
[key: string]: any;
|
|
52
60
|
}
|
|
53
|
-
/**
|
|
54
|
-
|
|
61
|
+
/**
|
|
62
|
+
* collapsible: a search icon in the bar that expands (Android SearchView action).
|
|
63
|
+
* bar: Android Material 3 `SearchBar` under the title that opens a full screen `SearchView`.
|
|
64
|
+
* inline: Android Material 3 `SearchBar` that turns into an editable field in place: the search filters the current content, no full screen view.
|
|
65
|
+
* iOS: always the `UISearchController`
|
|
66
|
+
*/
|
|
67
|
+
export type AppBarSearchMode = 'collapsible' | 'bar' | 'inline';
|
|
55
68
|
export declare const searchModeProperty: Property<AppBarBase, AppBarSearchMode>;
|
|
56
69
|
/** iOS 26 placement of the search bar of the navigation bar: stacked (under the title, default), integrated (a field / button in the bar), integratedButton (always a button), integratedCentered (centered on iPad), automatic */
|
|
57
70
|
export type AppBarSearchPlacement = 'automatic' | 'stacked' | 'integrated' | 'integratedButton' | 'integratedCentered';
|
|
58
71
|
export declare const searchPlacementProperty: Property<AppBarBase, AppBarSearchPlacement>;
|
|
72
|
+
/** Android look of `bottomItems`: a Material 3 `floating` toolbar (default, a pill over the content) or a full width `bottomAppBar`. iOS: ignored (UIToolbar) */
|
|
73
|
+
export type AppBarBottomBarStyle = 'floating' | 'bottomAppBar';
|
|
74
|
+
export declare const bottomBarStyleProperty: Property<AppBarBase, AppBarBottomBarStyle>;
|
|
59
75
|
export declare const bottomItemsProperty: Property<AppBarBase, AppBarBottomItem[]>;
|
|
76
|
+
/**
|
|
77
|
+
* Android `searchMode="inline"`: holds the text field of the search in place of the built-in one, a core `TextField` or a `@nativescript-community/ui-textfield`: `<appBarSearchField><uitextfield /></appBarSearchField>`. Ignored on iOS.
|
|
78
|
+
*/
|
|
79
|
+
export declare class AppBarSearchField extends ContentView {
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Android `bottomBarStyle="floating"`: holds the content of the floating toolbar in place of the `bottomItems` buttons: `<appBarBottomView><stacklayout orientation="horizontal">...</stacklayout></appBarBottomView>`. Ignored on iOS.
|
|
83
|
+
*/
|
|
84
|
+
export declare class AppBarBottomView extends ContentView {
|
|
85
|
+
}
|
|
60
86
|
export declare class AppBarBase extends ActionBar {
|
|
61
87
|
static bottomItemTapEvent: string;
|
|
62
88
|
/** actions of a bar at the bottom of the page: iOS the bottom toolbar, Android a `BottomAppBar` */
|
|
63
89
|
bottomItems: AppBarBottomItem[];
|
|
90
|
+
/** Android: the look of the `bottomItems`, a `floating` toolbar (default) or a `bottomAppBar` (badges are only shown by the bottomAppBar) */
|
|
91
|
+
bottomBarStyle: AppBarBottomBarStyle;
|
|
64
92
|
/** raised when the text of the search changes */
|
|
65
93
|
static searchChangeEvent: string;
|
|
66
94
|
/** raised when the search is submitted (keyboard search key) */
|
|
@@ -74,8 +102,25 @@ export declare class AppBarBase extends ActionBar {
|
|
|
74
102
|
searchPlacement: AppBarSearchPlacement;
|
|
75
103
|
/** the current text of the search (read only) */
|
|
76
104
|
searchText: string;
|
|
105
|
+
private _searchField;
|
|
106
|
+
private _bottomView;
|
|
107
|
+
/** Android `inline` search: the view holding the text field of the search (an `AppBarSearchField`, or directly a `TextField`), instead of the built-in `EditText` */
|
|
108
|
+
get searchField(): View;
|
|
109
|
+
set searchField(value: View);
|
|
110
|
+
/** Android `floating` bottom toolbar: the view shown in the toolbar instead of the `bottomItems` buttons */
|
|
111
|
+
get bottomView(): View;
|
|
112
|
+
set bottomView(value: View);
|
|
113
|
+
private swapHostedView;
|
|
114
|
+
eachChildView(callback: (child: View) => boolean): void;
|
|
115
|
+
eachChild(callback: (child: ViewBase) => boolean): void;
|
|
116
|
+
_addChildFromBuilder(name: string, value: any): void;
|
|
117
|
+
/** closes an expanded `inline` search. Returns true when there was one to close (use it in a back button handler) */
|
|
118
|
+
closeSearch(): boolean;
|
|
119
|
+
/** focuses the search field (keyboard shortcut, menu command). Returns true when the bar is searchable */
|
|
120
|
+
focusSearch(): boolean;
|
|
77
121
|
size: AppBarSize;
|
|
78
122
|
scrollBehavior: AppBarScrollBehavior;
|
|
123
|
+
titleAlignment: AppBarTitleAlignment;
|
|
79
124
|
subtitle: string;
|
|
80
125
|
/** the title with spans (needs `@nativescript-community/text` for the full support) */
|
|
81
126
|
formattedTitle: FormattedString;
|
|
@@ -83,7 +128,13 @@ export declare class AppBarBase extends ActionBar {
|
|
|
83
128
|
translucent: boolean;
|
|
84
129
|
/** the scrolling view (collectionview, scrollview...) that drives the bar. By default the first one found */
|
|
85
130
|
scrollTarget: View;
|
|
131
|
+
/** same as `scrollTarget`, by `id` in the page: spares the search of the scrolling view */
|
|
132
|
+
scrollTargetId: string;
|
|
133
|
+
/** the scrolling view the bar follows: `scrollTarget`, else the view of the page with the id `scrollTargetId` */
|
|
134
|
+
getScrollTarget(): View;
|
|
86
135
|
onAppBarPropertyChanged(): void;
|
|
136
|
+
/** @internal the view the menu of an action opens under */
|
|
137
|
+
getMenuAnchor(): View;
|
|
87
138
|
}
|
|
88
139
|
/**
|
|
89
140
|
* Layout for the views anchored to the page itself (a floating action button, a bottom bar...), not to the scrolling content: use it as the `overlay` of an AppPage.
|
package/index-common.js
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
import { ActionBar, ActionItem, GridLayout, ItemSpec, Property, View, isAndroid } from '@nativescript/core';
|
|
1
|
+
import { ActionBar, ActionItem, ContentView, GridLayout, ItemSpec, Property, View, isAndroid } from '@nativescript/core';
|
|
2
2
|
import { showMenu } from '@nativescript-community/ui-menu';
|
|
3
3
|
function changed(target) {
|
|
4
4
|
target.onAppBarPropertyChanged();
|
|
5
5
|
}
|
|
6
6
|
export const sizeProperty = new Property({ name: 'size', defaultValue: 'small', valueChanged: changed });
|
|
7
7
|
export const scrollBehaviorProperty = new Property({ name: 'scrollBehavior', defaultValue: 'none', valueChanged: changed });
|
|
8
|
+
export const titleAlignmentProperty = new Property({ name: 'titleAlignment', defaultValue: 'center', valueChanged: changed });
|
|
8
9
|
export const subtitleProperty = new Property({ name: 'subtitle', valueChanged: changed });
|
|
9
10
|
export const formattedTitleProperty = new Property({ name: 'formattedTitle', valueChanged: changed });
|
|
10
11
|
export const translucentProperty = new Property({ name: 'translucent', defaultValue: false, valueConverter: (v) => v === true || v === 'true' || v === '', valueChanged: changed });
|
|
11
12
|
export const searchableProperty = new Property({ name: 'searchable', defaultValue: false, valueConverter: (v) => v === true || v === 'true' || v === '', valueChanged: changed });
|
|
12
13
|
export const searchHintProperty = new Property({ name: 'searchHint', valueChanged: changed });
|
|
13
14
|
export const scrollTargetProperty = new Property({ name: 'scrollTarget', valueChanged: changed });
|
|
15
|
+
export const scrollTargetIdProperty = new Property({ name: 'scrollTargetId', valueChanged: changed });
|
|
14
16
|
function itemChanged(target) {
|
|
15
17
|
target.actionBar?.update?.();
|
|
16
18
|
}
|
|
@@ -39,7 +41,7 @@ export class AppBarItem extends ActionItem {
|
|
|
39
41
|
this.actionView.notify({ eventName: 'tap', object: this.actionView });
|
|
40
42
|
}
|
|
41
43
|
if (isAndroid && this.menu?.length && this.actionBar) {
|
|
42
|
-
showMenu({ anchor: this.actionBar, items: this.menu, placement: { horizontal: 'end', vertical: 'below' } });
|
|
44
|
+
showMenu({ anchor: this.actionBar.getMenuAnchor(), items: this.menu, placement: { horizontal: 'end', vertical: 'below' } });
|
|
43
45
|
return;
|
|
44
46
|
}
|
|
45
47
|
super._raiseTap();
|
|
@@ -50,16 +52,92 @@ badgeProperty.register(AppBarItem);
|
|
|
50
52
|
prominentProperty.register(AppBarItem);
|
|
51
53
|
export const searchModeProperty = new Property({ name: 'searchMode', defaultValue: 'collapsible', valueChanged: changed });
|
|
52
54
|
export const searchPlacementProperty = new Property({ name: 'searchPlacement', defaultValue: 'stacked', valueChanged: changed });
|
|
55
|
+
export const bottomBarStyleProperty = new Property({ name: 'bottomBarStyle', valueChanged: changed });
|
|
53
56
|
export const bottomItemsProperty = new Property({ name: 'bottomItems', valueChanged: changed });
|
|
57
|
+
/**
|
|
58
|
+
* Android `searchMode="inline"`: holds the text field of the search in place of the built-in one, a core `TextField` or a `@nativescript-community/ui-textfield`: `<appBarSearchField><uitextfield /></appBarSearchField>`. Ignored on iOS.
|
|
59
|
+
*/
|
|
60
|
+
export class AppBarSearchField extends ContentView {
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Android `bottomBarStyle="floating"`: holds the content of the floating toolbar in place of the `bottomItems` buttons: `<appBarBottomView><stacklayout orientation="horizontal">...</stacklayout></appBarBottomView>`. Ignored on iOS.
|
|
64
|
+
*/
|
|
65
|
+
export class AppBarBottomView extends ContentView {
|
|
66
|
+
}
|
|
54
67
|
export class AppBarBase extends ActionBar {
|
|
55
68
|
constructor() {
|
|
56
69
|
super(...arguments);
|
|
57
70
|
/** the current text of the search (read only) */
|
|
58
71
|
this.searchText = '';
|
|
59
72
|
}
|
|
73
|
+
/** Android `inline` search: the view holding the text field of the search (an `AppBarSearchField`, or directly a `TextField`), instead of the built-in `EditText` */
|
|
74
|
+
get searchField() {
|
|
75
|
+
return this._searchField;
|
|
76
|
+
}
|
|
77
|
+
set searchField(value) {
|
|
78
|
+
this._searchField = this.swapHostedView(this._searchField, value);
|
|
79
|
+
this.onAppBarPropertyChanged();
|
|
80
|
+
}
|
|
81
|
+
/** Android `floating` bottom toolbar: the view shown in the toolbar instead of the `bottomItems` buttons */
|
|
82
|
+
get bottomView() {
|
|
83
|
+
return this._bottomView;
|
|
84
|
+
}
|
|
85
|
+
set bottomView(value) {
|
|
86
|
+
this._bottomView = this.swapHostedView(this._bottomView, value);
|
|
87
|
+
this.onAppBarPropertyChanged();
|
|
88
|
+
}
|
|
89
|
+
// the native views of the hosted views are placed by the page, not by the bar
|
|
90
|
+
swapHostedView(current, value) {
|
|
91
|
+
if (current !== value && isAndroid) {
|
|
92
|
+
if (current) {
|
|
93
|
+
this._removeView(current);
|
|
94
|
+
}
|
|
95
|
+
if (value) {
|
|
96
|
+
this._addView(value);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return value;
|
|
100
|
+
}
|
|
101
|
+
eachChildView(callback) {
|
|
102
|
+
super.eachChildView(callback);
|
|
103
|
+
[this._searchField, this._bottomView].forEach((view) => view && callback(view));
|
|
104
|
+
}
|
|
105
|
+
// the core ActionBar only lists the title view, the items and the navigation button: the hosted views are also set up and loaded with the bar
|
|
106
|
+
eachChild(callback) {
|
|
107
|
+
super.eachChild(callback);
|
|
108
|
+
[this._searchField, this._bottomView].forEach((view) => view && callback(view));
|
|
109
|
+
}
|
|
110
|
+
_addChildFromBuilder(name, value) {
|
|
111
|
+
if (value instanceof AppBarSearchField) {
|
|
112
|
+
this.searchField = value;
|
|
113
|
+
}
|
|
114
|
+
else if (value instanceof AppBarBottomView) {
|
|
115
|
+
this.bottomView = value;
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
// @ts-ignore
|
|
119
|
+
super._addChildFromBuilder?.(name, value);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/** closes an expanded `inline` search. Returns true when there was one to close (use it in a back button handler) */
|
|
123
|
+
closeSearch() {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
/** focuses the search field (keyboard shortcut, menu command). Returns true when the bar is searchable */
|
|
127
|
+
focusSearch() {
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
/** the scrolling view the bar follows: `scrollTarget`, else the view of the page with the id `scrollTargetId` */
|
|
131
|
+
getScrollTarget() {
|
|
132
|
+
return this.scrollTarget ?? (this.scrollTargetId ? this.page?.getViewById(this.scrollTargetId) : null) ?? null;
|
|
133
|
+
}
|
|
60
134
|
onAppBarPropertyChanged() {
|
|
61
135
|
this.update();
|
|
62
136
|
}
|
|
137
|
+
/** @internal the view the menu of an action opens under */
|
|
138
|
+
getMenuAnchor() {
|
|
139
|
+
return this;
|
|
140
|
+
}
|
|
63
141
|
}
|
|
64
142
|
AppBarBase.bottomItemTapEvent = 'bottomItemTap';
|
|
65
143
|
/** raised when the text of the search changes */
|
|
@@ -71,12 +149,15 @@ AppBarBase.searchCancelEvent = 'searchCancel';
|
|
|
71
149
|
sizeProperty.register(AppBarBase);
|
|
72
150
|
scrollBehaviorProperty.register(AppBarBase);
|
|
73
151
|
subtitleProperty.register(AppBarBase);
|
|
152
|
+
titleAlignmentProperty.register(AppBarBase);
|
|
74
153
|
formattedTitleProperty.register(AppBarBase);
|
|
75
154
|
translucentProperty.register(AppBarBase);
|
|
76
155
|
scrollTargetProperty.register(AppBarBase);
|
|
156
|
+
scrollTargetIdProperty.register(AppBarBase);
|
|
77
157
|
searchableProperty.register(AppBarBase);
|
|
78
158
|
searchHintProperty.register(AppBarBase);
|
|
79
159
|
bottomItemsProperty.register(AppBarBase);
|
|
160
|
+
bottomBarStyleProperty.register(AppBarBase);
|
|
80
161
|
searchModeProperty.register(AppBarBase);
|
|
81
162
|
searchPlacementProperty.register(AppBarBase);
|
|
82
163
|
/**
|
package/index-common.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-common.js","sourceRoot":"","sources":["../../src/ui-appbar/index-common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAA8B,UAAU,EAAe,QAAQ,EAAE,QAAQ,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"index-common.js","sourceRoot":"","sources":["../../src/ui-appbar/index-common.ts"],"names":[],"mappings":"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"}
|
package/index.android.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Page, View } from '@nativescript/core';
|
|
2
|
-
import { AppBarBase, AppBarBottomItem, AppBarItem, AppBarScrollBehavior, AppBarSearchMode, AppBarSearchPlacement, AppBarSize, AppPageOverlay, AppPageSearchContent } from './index-common';
|
|
3
|
-
export { AppBarBottomItem, AppBarItem, AppBarScrollBehavior, AppBarSearchMode, AppBarSearchPlacement, AppBarSize, AppPageOverlay, AppPageSearchContent };
|
|
2
|
+
import { AppBarBase, AppBarBottomItem, AppBarBottomView, AppBarItem, AppBarScrollBehavior, AppBarSearchField, AppBarSearchMode, AppBarSearchPlacement, AppBarSize, AppPageOverlay, AppPageSearchContent } from './index-common';
|
|
3
|
+
export { AppBarBottomItem, AppBarBottomView, AppBarItem, AppBarScrollBehavior, AppBarSearchField, AppBarSearchMode, AppBarSearchPlacement, AppBarSize, AppPageOverlay, AppPageSearchContent };
|
|
4
4
|
/**
|
|
5
5
|
* Android: a Material Toolbar. In an `AppPage` it lives in an `AppBarLayout`: `size` medium / large use a M3 `CollapsingToolbarLayout`,
|
|
6
6
|
* `scrollBehavior` the scroll flags / lift on scroll of the AppBarLayout.
|
|
@@ -15,9 +15,18 @@ export declare class AppBar extends AppBarBase {
|
|
|
15
15
|
/** tints the navigation icon, the actions and the overflow icon with the color of the content of the bar */
|
|
16
16
|
applyTints(): void;
|
|
17
17
|
_updateNavigationButton(): void;
|
|
18
|
+
_addViewToNativeVisualTree(child: View, atIndex?: number): boolean;
|
|
19
|
+
_removeViewFromNativeVisualTree(child: View): void;
|
|
18
20
|
onAppBarPropertyChanged(): void;
|
|
21
|
+
_onTitlePropertyChanged(): void;
|
|
19
22
|
update(): void;
|
|
23
|
+
/** the toolbar is hidden while the SearchBar hosts the actions: the menu opens under the SearchBar */
|
|
24
|
+
getMenuAnchor(): View;
|
|
25
|
+
closeSearch(): boolean;
|
|
26
|
+
focusSearch(): boolean;
|
|
20
27
|
_addActionItems(): void;
|
|
28
|
+
/** core only loads string icons: an ImageSource or a FormattedString (font icon) is converted here */
|
|
29
|
+
private applyItemIcons;
|
|
21
30
|
private _badges;
|
|
22
31
|
/** the badges of the actions (a number, a text or a dot): attached once the action views exist */
|
|
23
32
|
private syncBadges;
|
|
@@ -64,6 +73,9 @@ export declare class AppPage extends Page {
|
|
|
64
73
|
createNativeView(): org.nativescript.widgets.GridLayout;
|
|
65
74
|
private _softInputMode;
|
|
66
75
|
onUnloaded(): void;
|
|
76
|
+
private _appearanceListener;
|
|
77
|
+
/** the icons of the status bar follow the luminance of the bar drawn under it: the style of the page is not applied again by a live dark / light switch */
|
|
78
|
+
private syncStatusBarIcons;
|
|
67
79
|
onLoaded(): void;
|
|
68
80
|
disposeNativeView(): void;
|
|
69
81
|
private getStatusBarHeight;
|
|
@@ -77,17 +89,64 @@ export declare class AppPage extends Page {
|
|
|
77
89
|
* (the nested scrolling of the AppBarLayout would let the bar consume the scroll first). The bar follows the scroll deltas of the list and settles when the scroll stops.
|
|
78
90
|
*/
|
|
79
91
|
private syncHide;
|
|
92
|
+
private _liftTarget;
|
|
93
|
+
private _liftContentListener;
|
|
94
|
+
/** the first vertically scrolling view under `view`: the lift state must follow one view, else several nested scroll events disagree and the bar blinks */
|
|
95
|
+
private findScrollingView;
|
|
96
|
+
/** `lift` follows `scrollTarget` / `scrollTargetId`, by default the first scrolling view of the content (searched again when the content is laid out) */
|
|
97
|
+
private syncLiftTarget;
|
|
80
98
|
private _liftListener;
|
|
81
99
|
private setStatusScrimColor;
|
|
82
100
|
private _statusScrim;
|
|
83
101
|
private _searchBarSetup;
|
|
102
|
+
/** the SearchBar when it hosts the navigation icon and the actions of the bar (the toolbar is hidden) */
|
|
103
|
+
get hostingSearchBar(): com.google.android.material.search.SearchBar;
|
|
84
104
|
/** `searchMode="bar"`: a Material 3 SearchBar under the toolbar that opens the full screen SearchView */
|
|
85
105
|
private syncSearchBar;
|
|
106
|
+
private _syncOnLoaded;
|
|
107
|
+
private syncWhenLoaded;
|
|
108
|
+
private _inlineField;
|
|
109
|
+
private _inlineEdit;
|
|
110
|
+
private _inlineBack;
|
|
111
|
+
private _inlineClear;
|
|
112
|
+
private _inlineOwner;
|
|
113
|
+
private _inlineOpen;
|
|
114
|
+
private _inlineTextField;
|
|
115
|
+
private _inlineTextFieldDetach;
|
|
116
|
+
private getAppCompatDrawable;
|
|
117
|
+
private createInlineButton;
|
|
118
|
+
private notifySearchChange;
|
|
119
|
+
private notifySearchSubmit;
|
|
120
|
+
private getInlineText;
|
|
121
|
+
private clearInlineText;
|
|
122
|
+
private dismissInlineKeyboard;
|
|
123
|
+
/** the field of the search: the `searchField` of the bar when it holds a TextField, else the built-in EditText */
|
|
124
|
+
private bindInlineTextField;
|
|
125
|
+
/** `searchMode="inline"`: the SearchBar turns into an editable field in place, the app filters its own content from `searchChange` */
|
|
126
|
+
private syncInlineSearch;
|
|
127
|
+
/** the colors of the theme are read again at each sync (dark / light switch): the field follows the bar */
|
|
128
|
+
private syncInlineColors;
|
|
129
|
+
private getSearchBarColor;
|
|
130
|
+
/** cross fades the search bar and the editable field (same size and position) */
|
|
131
|
+
private morphSearch;
|
|
132
|
+
openInlineSearch(): boolean;
|
|
133
|
+
/** returns true when an inline search was open */
|
|
134
|
+
closeInlineSearch(): boolean;
|
|
135
|
+
/** the SearchBar reads the colors of the theme when it is created: they are applied again at each sync */
|
|
136
|
+
private syncSearchBarColors;
|
|
137
|
+
private _defaultSearchBarIcon;
|
|
138
|
+
/** without a title the SearchBar is the whole bar (M3 "search app bar"): it takes the navigation icon and the actions of the toolbar */
|
|
139
|
+
private syncSearchBarHost;
|
|
86
140
|
private _bottomBadges;
|
|
87
141
|
private _bottomBar;
|
|
88
142
|
private _bottomInsetListener;
|
|
143
|
+
private _bottomInsetView;
|
|
89
144
|
/** `bottomItems`: a Material BottomAppBar, over the content, below the overlay */
|
|
90
145
|
private syncBottomBar;
|
|
146
|
+
private _floatingBar;
|
|
147
|
+
private _floatingHolder;
|
|
148
|
+
/** `bottomBarStyle="floating"`: a Material 3 Expressive FloatingToolbarLayout (a pill over the content, centered above the gesture bar) holding icon buttons, or the `bottomView` of the bar */
|
|
149
|
+
private syncFloatingBar;
|
|
91
150
|
/** the last items of the scrolling view must not stay under the bottom bar */
|
|
92
151
|
private syncBottomInset;
|
|
93
152
|
private _insetListener;
|