@nativescript-community/ui-menu 1.3.0 → 1.4.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.
- package/CHANGELOG.md +10 -0
- package/index-common.d.ts +13 -3
- package/index-common.js +21 -0
- package/index-common.js.map +1 -1
- package/index.android.d.ts +1 -0
- package/index.android.js +12 -93
- package/index.android.js.map +1 -1
- package/index.d.ts +17 -0
- package/index.ios.js +9 -5
- package/index.ios.js.map +1 -1
- package/menu-popup.android.d.ts +33 -0
- package/menu-popup.android.js +256 -0
- package/menu-popup.android.js.map +1 -0
- package/package.json +3 -3
- package/platforms/android/native-api-usage.json +20 -6
- package/platforms/android/res/drawable/ns_menu_check.xml +10 -0
- package/platforms/android/res/drawable/ns_menu_chevron.xml +10 -0
- package/tsconfig.tsbuildinfo +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.4.1](https://github.com/nativescript-community/ui-native-components/compare/v1.4.0...v1.4.1) (2026-10-30)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @nativescript-community/ui-menu
|
|
9
|
+
|
|
10
|
+
## [1.4.0](https://github.com/nativescript-community/ui-native-components/compare/v1.3.0...v1.4.0) (2026-10-29)
|
|
11
|
+
|
|
12
|
+
### Features
|
|
13
|
+
|
|
14
|
+
* **ui-menu:** add titled sections and toggle items, draw the Android menu as Material 3 Expressive ([9abfe49](https://github.com/nativescript-community/ui-native-components/commit/9abfe491312687765cf9a24736ea8d0bdbd8be57))
|
|
15
|
+
|
|
6
16
|
## [1.3.0](https://github.com/nativescript-community/ui-native-components/compare/v1.2.0...v1.3.0) (2026-10-29)
|
|
7
17
|
|
|
8
18
|
**Note:** Version bump only for package @nativescript-community/ui-menu
|
package/index-common.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { FormattedString, ImageSource, View } from '@nativescript/core';
|
|
2
2
|
/**
|
|
3
3
|
* An entry of a menu.
|
|
4
|
-
* Use `{ separator: true }` to start a new section (a
|
|
4
|
+
* Use `{ separator: true, title?: string }` to start a new section, with an optional title above it (a segment on Android, an inline group on iOS).
|
|
5
5
|
*/
|
|
6
6
|
export interface MenuItem {
|
|
7
7
|
/** returned when the item is selected */
|
|
@@ -11,14 +11,16 @@ export interface MenuItem {
|
|
|
11
11
|
subtitle?: string;
|
|
12
12
|
/** `sys://name` (SF Symbol, iOS), `res://name` or a file path, an ImageSource, or a FormattedString (spans drawn into an icon) */
|
|
13
13
|
icon?: string | ImageSource | FormattedString;
|
|
14
|
-
/** shows a check mark when true */
|
|
14
|
+
/** shows a check mark when true (Android: a tonal row, for a single choice) */
|
|
15
15
|
checked?: boolean;
|
|
16
|
+
/** a setting which is on or off: the state is `checked`, Android draws a switch instead of a tonal row */
|
|
17
|
+
toggle?: boolean;
|
|
16
18
|
/** red item */
|
|
17
19
|
destructive?: boolean;
|
|
18
20
|
disabled?: boolean;
|
|
19
21
|
/** a submenu */
|
|
20
22
|
items?: MenuItem[];
|
|
21
|
-
/** starts a new section */
|
|
23
|
+
/** starts a new section, `title` is the label of the section */
|
|
22
24
|
separator?: boolean;
|
|
23
25
|
/** called when the item is selected */
|
|
24
26
|
onSelect?: (item: MenuItem) => void;
|
|
@@ -54,3 +56,11 @@ export interface ContextMenuOptions {
|
|
|
54
56
|
* Splits the items on the separators
|
|
55
57
|
*/
|
|
56
58
|
export declare function splitSections(items: MenuItem[]): MenuItem[][];
|
|
59
|
+
export interface MenuSection {
|
|
60
|
+
title?: string;
|
|
61
|
+
items: MenuItem[];
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Splits the items on the separators, keeping the title of each section
|
|
65
|
+
*/
|
|
66
|
+
export declare function getSections(items: MenuItem[]): MenuSection[];
|
package/index-common.js
CHANGED
|
@@ -15,4 +15,25 @@ export function splitSections(items) {
|
|
|
15
15
|
}
|
|
16
16
|
return sections.filter((s) => s.length);
|
|
17
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Splits the items on the separators, keeping the title of each section
|
|
20
|
+
*/
|
|
21
|
+
export function getSections(items) {
|
|
22
|
+
const sections = [{ items: [] }];
|
|
23
|
+
for (const item of items) {
|
|
24
|
+
if (item.separator) {
|
|
25
|
+
const current = sections[sections.length - 1];
|
|
26
|
+
if (!current.items.length && !current.title) {
|
|
27
|
+
current.title = item.title;
|
|
28
|
+
}
|
|
29
|
+
else if (current.items.length) {
|
|
30
|
+
sections.push({ title: item.title, items: [] });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
sections[sections.length - 1].items.push(item);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return sections.filter((section) => section.items.length);
|
|
38
|
+
}
|
|
18
39
|
//# sourceMappingURL=index-common.js.map
|
package/index-common.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-common.js","sourceRoot":"","sources":["../../src/ui-menu/index-common.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index-common.js","sourceRoot":"","sources":["../../src/ui-menu/index-common.ts"],"names":[],"mappings":"AA2DA;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,KAAiB;IAC3C,MAAM,QAAQ,GAAiB,CAAC,EAAE,CAAC,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;gBACvC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtB,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC;AAOD;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAiB;IACzC,MAAM,QAAQ,GAAkB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IAChD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC1C,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YAC/B,CAAC;iBAAM,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;YACpD,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9D,CAAC"}
|
package/index.android.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { FormattedString, ImageSource, View } from '@nativescript/core';
|
|
2
2
|
import { ContextMenuOptions, MenuItem, ShowMenuOptions } from './index-common';
|
|
3
3
|
export * from './index-common';
|
|
4
|
+
export { MenuColors, setMenuColors } from './menu-popup.android';
|
|
4
5
|
export declare function showMenu(options: ShowMenuOptions): Promise<MenuItem | undefined>;
|
|
5
6
|
export declare function setContextMenu(view: View, options: ContextMenuOptions): () => void;
|
|
6
7
|
/** icon of a menu / bar item as a drawable: `res://`, a file, an ImageSource or a FormattedString */
|
package/index.android.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { renderFormattedTextToImageSource } from '@nativescript-community/ui-core/formatted-text';
|
|
2
2
|
import { FormattedString, GestureTypes, ImageSource, Label, Utils } from '@nativescript/core';
|
|
3
|
-
import {
|
|
3
|
+
import { showPopup } from './menu-popup.android';
|
|
4
4
|
export * from './index-common';
|
|
5
|
-
|
|
6
|
-
const DESTRUCTIVE_COLOR = android.graphics.Color.parseColor('#B3261D');
|
|
5
|
+
export { setMenuColors } from './menu-popup.android';
|
|
7
6
|
function getIcon(icon) {
|
|
8
7
|
if (!icon) {
|
|
9
8
|
return null;
|
|
@@ -31,51 +30,6 @@ function getIcon(icon) {
|
|
|
31
30
|
}
|
|
32
31
|
return source?.android ? new android.graphics.drawable.BitmapDrawable(Utils.android.getApplicationContext().getResources(), source.android) : null;
|
|
33
32
|
}
|
|
34
|
-
function buildMenu(menu, items, registry, state) {
|
|
35
|
-
splitSections(items).forEach((section, groupId) => {
|
|
36
|
-
section.forEach((item) => {
|
|
37
|
-
const id = state.nextId++;
|
|
38
|
-
let title = item.title || '';
|
|
39
|
-
if (item.destructive || item.subtitle) {
|
|
40
|
-
// the subtitle is a smaller second line
|
|
41
|
-
const text = item.subtitle ? `${title}\n${item.subtitle}` : title;
|
|
42
|
-
const spannable = new android.text.SpannableString(text);
|
|
43
|
-
if (item.destructive) {
|
|
44
|
-
spannable.setSpan(new android.text.style.ForegroundColorSpan(DESTRUCTIVE_COLOR), 0, title.length, 0);
|
|
45
|
-
}
|
|
46
|
-
if (item.subtitle) {
|
|
47
|
-
spannable.setSpan(new android.text.style.RelativeSizeSpan(0.8), title.length + 1, text.length, 0);
|
|
48
|
-
spannable.setSpan(new android.text.style.ForegroundColorSpan(android.graphics.Color.GRAY), title.length + 1, text.length, 0);
|
|
49
|
-
}
|
|
50
|
-
title = spannable;
|
|
51
|
-
}
|
|
52
|
-
let menuItem;
|
|
53
|
-
if (item.items?.length) {
|
|
54
|
-
const subMenu = menu.addSubMenu(groupId, id, id, title);
|
|
55
|
-
buildMenu(subMenu, item.items, registry, state);
|
|
56
|
-
menuItem = subMenu.getItem();
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
menuItem = menu.add(groupId, id, id, title);
|
|
60
|
-
registry.set(id, item);
|
|
61
|
-
}
|
|
62
|
-
const icon = getIcon(item.icon);
|
|
63
|
-
if (icon) {
|
|
64
|
-
menuItem.setIcon(icon);
|
|
65
|
-
}
|
|
66
|
-
if (item.checked !== undefined) {
|
|
67
|
-
menuItem.setCheckable(true);
|
|
68
|
-
menuItem.setChecked(!!item.checked);
|
|
69
|
-
}
|
|
70
|
-
menuItem.setEnabled(!item.disabled);
|
|
71
|
-
});
|
|
72
|
-
});
|
|
73
|
-
try {
|
|
74
|
-
// dividers between the sections (API 28)
|
|
75
|
-
menu.setGroupDividerEnabled(true);
|
|
76
|
-
}
|
|
77
|
-
catch (error) { }
|
|
78
|
-
}
|
|
79
33
|
export function showMenu(options) {
|
|
80
34
|
return new Promise((resolve) => {
|
|
81
35
|
const anchor = options.anchor?.nativeViewProtected;
|
|
@@ -83,53 +37,18 @@ export function showMenu(options) {
|
|
|
83
37
|
resolve(undefined);
|
|
84
38
|
return;
|
|
85
39
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
const root = anchor.getRootView();
|
|
93
|
-
const location = Array.create('int', 2);
|
|
94
|
-
anchor.getLocationInWindow(location);
|
|
95
|
-
const itemCount = options.items.filter((i) => !i.separator).length;
|
|
96
|
-
const estimatedHeight = Utils.layout.toDevicePixels(itemCount * 48 + 16);
|
|
97
|
-
helper = new android.view.View(anchor.getContext());
|
|
98
|
-
root.addView(helper, new android.widget.FrameLayout.LayoutParams(anchor.getWidth(), 1));
|
|
99
|
-
helper.setX(location[0]);
|
|
100
|
-
helper.setY(Math.max(0, location[1] - estimatedHeight));
|
|
101
|
-
popupAnchor = helper;
|
|
102
|
-
}
|
|
103
|
-
const gravity = placement?.horizontal === 'end' ? android.view.Gravity.END : android.view.Gravity.START;
|
|
104
|
-
// the popup grows from the corner of the anchor it is attached to (a style per corner)
|
|
105
|
-
const context = anchor.getContext();
|
|
106
|
-
const styleName = `NSMenuPopup_${placement?.horizontal === 'end' ? 'end' : 'start'}_${placement?.vertical === 'above' ? 'above' : 'below'}`;
|
|
107
|
-
const popup = new PopupMenu(context, popupAnchor, gravity, 0, context.getResources().getIdentifier(styleName, 'style', context.getPackageName()));
|
|
108
|
-
const registry = new Map();
|
|
109
|
-
buildMenu(popup.getMenu(), options.items, registry, { nextId: 1 });
|
|
110
|
-
try {
|
|
111
|
-
popup.setForceShowIcon(true);
|
|
112
|
-
}
|
|
113
|
-
catch (error) { }
|
|
114
|
-
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener({
|
|
115
|
-
onMenuItemClick(menuItem) {
|
|
116
|
-
const item = registry.get(menuItem.getItemId());
|
|
117
|
-
if (!item) {
|
|
118
|
-
return false;
|
|
119
|
-
}
|
|
40
|
+
showPopup({
|
|
41
|
+
anchor,
|
|
42
|
+
items: options.items,
|
|
43
|
+
placement: options.placement,
|
|
44
|
+
getIcon,
|
|
45
|
+
onSelect: (item) => {
|
|
120
46
|
resolve(item);
|
|
121
47
|
item.onSelect?.(item);
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
popup.setOnDismissListener(new PopupMenu.OnDismissListener({
|
|
127
|
-
onDismiss: () => {
|
|
128
|
-
helper?.getParent()?.removeView(helper);
|
|
129
|
-
resolve(undefined);
|
|
130
|
-
}
|
|
131
|
-
}));
|
|
132
|
-
popup.show();
|
|
48
|
+
},
|
|
49
|
+
// resolving twice is harmless: the click is reported before the dismissal
|
|
50
|
+
onDismiss: () => resolve(undefined)
|
|
51
|
+
});
|
|
133
52
|
});
|
|
134
53
|
}
|
|
135
54
|
export function setContextMenu(view, options) {
|
package/index.android.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.android.js","sourceRoot":"","sources":["../../src/ui-menu/index.android.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,gDAAgD,CAAC;AAClG,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAQ,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.android.js","sourceRoot":"","sources":["../../src/ui-menu/index.android.ts"],"names":[],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -8,6 +8,23 @@ import { FormattedString, ImageSource, View } from '@nativescript/core';
|
|
|
8
8
|
import { ContextMenuOptions, MenuItem, ShowMenuOptions } from './index-common';
|
|
9
9
|
export * from './index-common';
|
|
10
10
|
|
|
11
|
+
/** colors of the Android menu: the ones of the Material theme, unless set here (the app theme can differ from the activity theme) */
|
|
12
|
+
export interface MenuColors {
|
|
13
|
+
surface: string;
|
|
14
|
+
row: string;
|
|
15
|
+
selected: string;
|
|
16
|
+
onSelected: string;
|
|
17
|
+
onSurface: string;
|
|
18
|
+
onSurfaceVariant: string;
|
|
19
|
+
accent: string;
|
|
20
|
+
onAccent: string;
|
|
21
|
+
outline: string;
|
|
22
|
+
error: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** Android only: sets the colors of the menus */
|
|
26
|
+
export function setMenuColors(colors: Partial<MenuColors>): void;
|
|
27
|
+
|
|
11
28
|
/**
|
|
12
29
|
* Shows a menu attached to the `anchor` view.
|
|
13
30
|
* @returns the selected item, or undefined when the menu is dismissed
|
package/index.ios.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { renderFormattedTextToImageSource } from '@nativescript-community/ui-core/formatted-text';
|
|
2
2
|
import { Application, FormattedString, ImageSource, Label, Utils } from '@nativescript/core';
|
|
3
|
-
import {
|
|
3
|
+
import { getSections } from './index-common';
|
|
4
4
|
export * from './index-common';
|
|
5
5
|
function getIcon(icon) {
|
|
6
6
|
if (!icon) {
|
|
@@ -22,8 +22,8 @@ function getIcon(icon) {
|
|
|
22
22
|
* Native UIMenu: the sections are inline groups, the submenus are nested menus
|
|
23
23
|
*/
|
|
24
24
|
function buildMenu(title, items, onPick) {
|
|
25
|
-
const sections =
|
|
26
|
-
const elements = section.map((item) => {
|
|
25
|
+
const sections = getSections(items).map((section) => {
|
|
26
|
+
const elements = section.items.map((item) => {
|
|
27
27
|
const image = getIcon(item.icon);
|
|
28
28
|
let attributes = 0;
|
|
29
29
|
if (item.destructive) {
|
|
@@ -34,7 +34,11 @@ function buildMenu(title, items, onPick) {
|
|
|
34
34
|
}
|
|
35
35
|
if (item.items?.length) {
|
|
36
36
|
const submenu = buildMenu(item.title || '', item.items, onPick);
|
|
37
|
-
|
|
37
|
+
const nested = UIMenu.menuWithTitleImageIdentifierOptionsChildren(item.title || '', image, null, item.destructive ? 2 /* UIMenuOptions.Destructive */ : 0, submenu.children);
|
|
38
|
+
if (item.subtitle) {
|
|
39
|
+
nested.subtitle = item.subtitle;
|
|
40
|
+
}
|
|
41
|
+
return nested;
|
|
38
42
|
}
|
|
39
43
|
const action = UIAction.actionWithTitleImageIdentifierHandler(item.title || '', image, null, () => onPick(item));
|
|
40
44
|
action.attributes = attributes;
|
|
@@ -46,7 +50,7 @@ function buildMenu(title, items, onPick) {
|
|
|
46
50
|
}
|
|
47
51
|
return action;
|
|
48
52
|
});
|
|
49
|
-
return UIMenu.menuWithTitleImageIdentifierOptionsChildren('', null, null, 1 /* UIMenuOptions.DisplayInline */, elements);
|
|
53
|
+
return UIMenu.menuWithTitleImageIdentifierOptionsChildren(section.title || '', null, null, 1 /* UIMenuOptions.DisplayInline */, elements);
|
|
50
54
|
});
|
|
51
55
|
return UIMenu.menuWithTitleChildren(title || '', sections);
|
|
52
56
|
}
|
package/index.ios.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.ios.js","sourceRoot":"","sources":["../../src/ui-menu/index.ios.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,gDAAgD,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAQ,MAAM,oBAAoB,CAAC;AACnG,OAAO,EAAgE,
|
|
1
|
+
{"version":3,"file":"index.ios.js","sourceRoot":"","sources":["../../src/ui-menu/index.ios.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { MenuItem, MenuPlacement } from './index-common';
|
|
2
|
+
/** colors of the menu: the ones of the Material theme, unless set with `setMenuColors` */
|
|
3
|
+
export interface MenuColors {
|
|
4
|
+
/** the container of the menu */
|
|
5
|
+
surface: string;
|
|
6
|
+
/** a row */
|
|
7
|
+
row: string;
|
|
8
|
+
/** the row of a single choice which is selected */
|
|
9
|
+
selected: string;
|
|
10
|
+
onSelected: string;
|
|
11
|
+
onSurface: string;
|
|
12
|
+
onSurfaceVariant: string;
|
|
13
|
+
/** the switch of a toggle which is on */
|
|
14
|
+
accent: string;
|
|
15
|
+
onAccent: string;
|
|
16
|
+
outline: string;
|
|
17
|
+
error: string;
|
|
18
|
+
}
|
|
19
|
+
/** sets the colors of the menus (the app theme can differ from the Material theme of the activity) */
|
|
20
|
+
export declare function setMenuColors(colors: Partial<MenuColors>): void;
|
|
21
|
+
export interface PopupOptions {
|
|
22
|
+
anchor: android.view.View;
|
|
23
|
+
items: MenuItem[];
|
|
24
|
+
placement?: MenuPlacement;
|
|
25
|
+
getIcon: (icon: MenuItem['icon']) => android.graphics.drawable.Drawable;
|
|
26
|
+
onSelect: (item: MenuItem) => void;
|
|
27
|
+
onDismiss: () => void;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* A Material 3 Expressive menu: a 28dp container, each section is a segment of 48dp rows (20dp outer corners, 6dp inner ones, 2dp between rows) under a label.
|
|
31
|
+
* A single choice is a tonal row with a trailing check, a toggle has a switch, a submenu replaces the content.
|
|
32
|
+
*/
|
|
33
|
+
export declare function showPopup({ anchor, items, placement, getIcon, onSelect, onDismiss }: PopupOptions): void;
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import { Utils } from '@nativescript/core';
|
|
2
|
+
import { getSections } from './index-common';
|
|
3
|
+
let customColors;
|
|
4
|
+
/** sets the colors of the menus (the app theme can differ from the Material theme of the activity) */
|
|
5
|
+
export function setMenuColors(colors) {
|
|
6
|
+
customColors = colors;
|
|
7
|
+
}
|
|
8
|
+
const THEME_ATTRIBUTES = {
|
|
9
|
+
surface: ['colorSurfaceContainer', '#ECEFF9'],
|
|
10
|
+
row: ['colorSurfaceContainerLow', '#F5F7FF'],
|
|
11
|
+
selected: ['colorPrimaryContainer', '#D8E2FF'],
|
|
12
|
+
onSelected: ['colorOnPrimaryContainer', '#001A41'],
|
|
13
|
+
onSurface: ['colorOnSurface', '#1A1B20'],
|
|
14
|
+
onSurfaceVariant: ['colorOnSurfaceVariant', '#44474F'],
|
|
15
|
+
accent: ['colorPrimary', '#475D92'],
|
|
16
|
+
onAccent: ['colorOnPrimary', '#FFFFFF'],
|
|
17
|
+
outline: ['colorOutline', '#74777F'],
|
|
18
|
+
error: ['colorError', '#BA1A1A']
|
|
19
|
+
};
|
|
20
|
+
function resolveColors(context) {
|
|
21
|
+
const result = {};
|
|
22
|
+
Object.keys(THEME_ATTRIBUTES).forEach((key) => {
|
|
23
|
+
const [attribute, fallback] = THEME_ATTRIBUTES[key];
|
|
24
|
+
let color = customColors?.[key];
|
|
25
|
+
if (color) {
|
|
26
|
+
result[key] = android.graphics.Color.parseColor(color);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const identifier = context.getResources().getIdentifier(attribute, 'attr', context.getPackageName());
|
|
30
|
+
result[key] =
|
|
31
|
+
identifier > 0 ? com.google.android.material.color.MaterialColors.getColor(context, identifier, android.graphics.Color.parseColor(fallback)) : android.graphics.Color.parseColor(fallback);
|
|
32
|
+
});
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
const dp = (value) => Math.round(Utils.layout.toDevicePixels(value));
|
|
36
|
+
const OUTER_RADIUS = 20;
|
|
37
|
+
const INNER_RADIUS = 6;
|
|
38
|
+
const CONTAINER_RADIUS = 28;
|
|
39
|
+
const ROW_HEIGHT = 48;
|
|
40
|
+
function roundedDrawable(color, radii, strokeColor, strokeWidth) {
|
|
41
|
+
const drawable = new android.graphics.drawable.GradientDrawable();
|
|
42
|
+
drawable.setColor(color);
|
|
43
|
+
const values = Array.create('float', 8);
|
|
44
|
+
for (let index = 0; index < 4; index++) {
|
|
45
|
+
values[index * 2] = dp(radii[index]);
|
|
46
|
+
values[index * 2 + 1] = dp(radii[index]);
|
|
47
|
+
}
|
|
48
|
+
drawable.setCornerRadii(values);
|
|
49
|
+
if (strokeColor !== undefined) {
|
|
50
|
+
drawable.setStroke(dp(strokeWidth), strokeColor);
|
|
51
|
+
}
|
|
52
|
+
return drawable;
|
|
53
|
+
}
|
|
54
|
+
function resourceDrawable(context, name, color) {
|
|
55
|
+
const identifier = context.getResources().getIdentifier(name, 'drawable', context.getPackageName());
|
|
56
|
+
const drawable = androidx.appcompat.content.res.AppCompatResources.getDrawable(context, identifier).mutate();
|
|
57
|
+
drawable.setTint(color);
|
|
58
|
+
return drawable;
|
|
59
|
+
}
|
|
60
|
+
function withAlpha(color, alpha) {
|
|
61
|
+
return android.graphics.Color.argb(Math.round(255 * alpha), android.graphics.Color.red(color), android.graphics.Color.green(color), android.graphics.Color.blue(color));
|
|
62
|
+
}
|
|
63
|
+
function createIcon(context, drawable, size) {
|
|
64
|
+
const view = new android.widget.ImageView(context);
|
|
65
|
+
view.setImageDrawable(drawable);
|
|
66
|
+
view.setScaleType(android.widget.ImageView.ScaleType.FIT_CENTER);
|
|
67
|
+
view.setLayoutParams(new android.widget.LinearLayout.LayoutParams(dp(size), dp(size)));
|
|
68
|
+
return view;
|
|
69
|
+
}
|
|
70
|
+
/** a small switch: the state of a toggle item */
|
|
71
|
+
function createSwitch(context, on, colors) {
|
|
72
|
+
const track = new android.widget.FrameLayout(context);
|
|
73
|
+
track.setLayoutParams(new android.widget.LinearLayout.LayoutParams(dp(40), dp(24)));
|
|
74
|
+
track.setBackground(on ? roundedDrawable(colors.accent, [12, 12, 12, 12]) : roundedDrawable(android.graphics.Color.TRANSPARENT, [12, 12, 12, 12], colors.outline, 2));
|
|
75
|
+
const thumbSize = on ? 16 : 12;
|
|
76
|
+
const thumb = new android.view.View(context);
|
|
77
|
+
const params = new android.widget.FrameLayout.LayoutParams(dp(thumbSize), dp(thumbSize));
|
|
78
|
+
params.gravity = (on ? android.view.Gravity.END : android.view.Gravity.START) | android.view.Gravity.CENTER_VERTICAL;
|
|
79
|
+
params.setMargins(dp(on ? 0 : 6), 0, dp(on ? 4 : 0), 0);
|
|
80
|
+
thumb.setLayoutParams(params);
|
|
81
|
+
const thumbBackground = new android.graphics.drawable.GradientDrawable();
|
|
82
|
+
thumbBackground.setShape(android.graphics.drawable.GradientDrawable.OVAL);
|
|
83
|
+
thumbBackground.setColor(on ? colors.onAccent : colors.outline);
|
|
84
|
+
thumb.setBackground(thumbBackground);
|
|
85
|
+
track.addView(thumb);
|
|
86
|
+
return track;
|
|
87
|
+
}
|
|
88
|
+
function createLabel(context, text, color, first) {
|
|
89
|
+
const label = new android.widget.TextView(context);
|
|
90
|
+
label.setText(text);
|
|
91
|
+
label.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 12);
|
|
92
|
+
label.setTextColor(color);
|
|
93
|
+
label.setTypeface(android.graphics.Typeface.create('sans-serif-medium', android.graphics.Typeface.NORMAL));
|
|
94
|
+
label.setPadding(dp(12), dp(first ? 8 : 12), dp(12), dp(6));
|
|
95
|
+
return label;
|
|
96
|
+
}
|
|
97
|
+
function createRow(context, { item, position, count, colors, onTap, leadingBack }, getIcon) {
|
|
98
|
+
const selected = !!item.checked && !item.toggle;
|
|
99
|
+
const first = position === 0;
|
|
100
|
+
const last = position === count - 1;
|
|
101
|
+
const radii = [first ? OUTER_RADIUS : INNER_RADIUS, first ? OUTER_RADIUS : INNER_RADIUS, last ? OUTER_RADIUS : INNER_RADIUS, last ? OUTER_RADIUS : INNER_RADIUS];
|
|
102
|
+
const contentColor = item.destructive ? colors.error : selected ? colors.onSelected : colors.onSurface;
|
|
103
|
+
const row = new android.widget.LinearLayout(context);
|
|
104
|
+
row.setOrientation(android.widget.LinearLayout.HORIZONTAL);
|
|
105
|
+
row.setGravity(android.view.Gravity.CENTER_VERTICAL);
|
|
106
|
+
row.setMinimumHeight(dp(ROW_HEIGHT));
|
|
107
|
+
row.setPadding(dp(16), 0, dp(16), 0);
|
|
108
|
+
const background = roundedDrawable(selected ? colors.selected : colors.row, radii);
|
|
109
|
+
const mask = roundedDrawable(android.graphics.Color.WHITE, radii);
|
|
110
|
+
row.setBackground(new android.graphics.drawable.RippleDrawable(android.content.res.ColorStateList.valueOf(withAlpha(contentColor, 0.12)), background, mask));
|
|
111
|
+
const params = new android.widget.LinearLayout.LayoutParams(android.view.ViewGroup.LayoutParams.MATCH_PARENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
|
|
112
|
+
params.setMargins(0, 0, 0, last ? 0 : dp(2));
|
|
113
|
+
row.setLayoutParams(params);
|
|
114
|
+
if (leadingBack) {
|
|
115
|
+
const back = createIcon(context, resourceDrawable(context, 'ns_menu_chevron', contentColor), 20);
|
|
116
|
+
back.setRotation(180);
|
|
117
|
+
back.getLayoutParams().setMargins(0, 0, dp(12), 0);
|
|
118
|
+
row.addView(back);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
const icon = item.icon ? getIcon(item.icon) : null;
|
|
122
|
+
if (icon) {
|
|
123
|
+
if (typeof item.icon === 'string') {
|
|
124
|
+
icon.mutate().setTint(contentColor);
|
|
125
|
+
}
|
|
126
|
+
const view = createIcon(context, icon, 20);
|
|
127
|
+
view.getLayoutParams().setMargins(0, 0, dp(12), 0);
|
|
128
|
+
row.addView(view);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
const text = new android.widget.TextView(context);
|
|
132
|
+
text.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 16);
|
|
133
|
+
text.setTextColor(contentColor);
|
|
134
|
+
text.setMaxLines(item.subtitle ? 2 : 1);
|
|
135
|
+
text.setEllipsize(android.text.TextUtils.TruncateAt.END);
|
|
136
|
+
const title = item.title || '';
|
|
137
|
+
if (item.subtitle) {
|
|
138
|
+
const spannable = new android.text.SpannableString(`${title}\n${item.subtitle}`);
|
|
139
|
+
spannable.setSpan(new android.text.style.RelativeSizeSpan(0.8), title.length + 1, spannable.length(), 0);
|
|
140
|
+
spannable.setSpan(new android.text.style.ForegroundColorSpan(colors.onSurfaceVariant), title.length + 1, spannable.length(), 0);
|
|
141
|
+
text.setText(spannable);
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
text.setText(title);
|
|
145
|
+
}
|
|
146
|
+
text.setLayoutParams(new android.widget.LinearLayout.LayoutParams(0, android.view.ViewGroup.LayoutParams.WRAP_CONTENT, 1));
|
|
147
|
+
row.addView(text);
|
|
148
|
+
let trailing;
|
|
149
|
+
if (item.items?.length) {
|
|
150
|
+
trailing = createIcon(context, resourceDrawable(context, 'ns_menu_chevron', colors.onSurfaceVariant), 20);
|
|
151
|
+
}
|
|
152
|
+
else if (item.toggle) {
|
|
153
|
+
trailing = createSwitch(context, !!item.checked, colors);
|
|
154
|
+
}
|
|
155
|
+
else if (selected) {
|
|
156
|
+
trailing = createIcon(context, resourceDrawable(context, 'ns_menu_check', colors.onSelected), 20);
|
|
157
|
+
}
|
|
158
|
+
if (trailing) {
|
|
159
|
+
trailing.getLayoutParams().setMargins(dp(12), 0, 0, 0);
|
|
160
|
+
row.addView(trailing);
|
|
161
|
+
}
|
|
162
|
+
if (item.disabled) {
|
|
163
|
+
row.setAlpha(0.38);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
row.setOnClickListener(new android.view.View.OnClickListener({ onClick: onTap }));
|
|
167
|
+
}
|
|
168
|
+
return row;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* A Material 3 Expressive menu: a 28dp container, each section is a segment of 48dp rows (20dp outer corners, 6dp inner ones, 2dp between rows) under a label.
|
|
172
|
+
* A single choice is a tonal row with a trailing check, a toggle has a switch, a submenu replaces the content.
|
|
173
|
+
*/
|
|
174
|
+
export function showPopup({ anchor, items, placement, getIcon, onSelect, onDismiss }) {
|
|
175
|
+
const context = anchor.getContext();
|
|
176
|
+
const colors = resolveColors(context);
|
|
177
|
+
const screen = context.getResources().getDisplayMetrics();
|
|
178
|
+
const margin = dp(8);
|
|
179
|
+
const content = new android.widget.LinearLayout(context);
|
|
180
|
+
content.setOrientation(android.widget.LinearLayout.VERTICAL);
|
|
181
|
+
content.setPadding(dp(6), dp(6), dp(6), dp(6));
|
|
182
|
+
const scroll = new android.widget.ScrollView(context);
|
|
183
|
+
scroll.setVerticalScrollBarEnabled(false);
|
|
184
|
+
scroll.setOverScrollMode(android.view.View.OVER_SCROLL_NEVER);
|
|
185
|
+
scroll.addView(content);
|
|
186
|
+
const popup = new android.widget.PopupWindow(scroll, android.view.ViewGroup.LayoutParams.WRAP_CONTENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT, true);
|
|
187
|
+
const containerBackground = roundedDrawable(colors.surface, [CONTAINER_RADIUS, CONTAINER_RADIUS, CONTAINER_RADIUS, CONTAINER_RADIUS]);
|
|
188
|
+
popup.setBackgroundDrawable(containerBackground);
|
|
189
|
+
popup.setElevation(dp(6));
|
|
190
|
+
popup.setOutsideTouchable(true);
|
|
191
|
+
const horizontal = placement?.horizontal === 'end' ? 'end' : 'start';
|
|
192
|
+
const maxWidth = Math.min(dp(280), screen.widthPixels - 2 * margin);
|
|
193
|
+
let anchorLocation;
|
|
194
|
+
const place = () => {
|
|
195
|
+
scroll.measure(android.view.View.MeasureSpec.makeMeasureSpec(maxWidth, android.view.View.MeasureSpec.AT_MOST), android.view.View.MeasureSpec.makeMeasureSpec(screen.heightPixels - 2 * margin, android.view.View.MeasureSpec.AT_MOST));
|
|
196
|
+
const width = Math.max(scroll.getMeasuredWidth(), dp(180));
|
|
197
|
+
const fullHeight = scroll.getMeasuredHeight();
|
|
198
|
+
const spaceBelow = screen.heightPixels - (anchorLocation[1] + anchor.getHeight()) - margin;
|
|
199
|
+
const spaceAbove = anchorLocation[1] - margin;
|
|
200
|
+
const above = placement?.vertical === 'above'
|
|
201
|
+
? fullHeight <= spaceAbove || spaceAbove > spaceBelow
|
|
202
|
+
: placement?.vertical === 'below'
|
|
203
|
+
? fullHeight > spaceBelow && spaceAbove > spaceBelow
|
|
204
|
+
: fullHeight > spaceBelow && spaceAbove > spaceBelow;
|
|
205
|
+
const height = Math.min(fullHeight, above ? spaceAbove : spaceBelow);
|
|
206
|
+
const x = Math.min(Math.max(margin, horizontal === 'end' ? anchorLocation[0] + anchor.getWidth() - width : anchorLocation[0]), screen.widthPixels - width - margin);
|
|
207
|
+
const y = above ? anchorLocation[1] - height : anchorLocation[1] + anchor.getHeight();
|
|
208
|
+
return { x, y, width, height, above };
|
|
209
|
+
};
|
|
210
|
+
const render = (entries, parent) => {
|
|
211
|
+
content.removeAllViews();
|
|
212
|
+
if (parent) {
|
|
213
|
+
content.addView(createRow(context, { item: { title: parent.title }, position: 0, count: 1, colors, onTap: parent.back, leadingBack: true }, getIcon));
|
|
214
|
+
}
|
|
215
|
+
getSections(entries).forEach((section, index) => {
|
|
216
|
+
if (section.title) {
|
|
217
|
+
content.addView(createLabel(context, section.title, colors.onSurfaceVariant, index === 0 && !parent));
|
|
218
|
+
}
|
|
219
|
+
else if (index > 0 || parent) {
|
|
220
|
+
const gap = new android.view.View(context);
|
|
221
|
+
gap.setLayoutParams(new android.widget.LinearLayout.LayoutParams(1, dp(6)));
|
|
222
|
+
content.addView(gap);
|
|
223
|
+
}
|
|
224
|
+
section.items.forEach((item, position) => {
|
|
225
|
+
content.addView(createRow(context, {
|
|
226
|
+
item,
|
|
227
|
+
position,
|
|
228
|
+
count: section.items.length,
|
|
229
|
+
colors,
|
|
230
|
+
onTap: () => {
|
|
231
|
+
if (item.items?.length) {
|
|
232
|
+
render(item.items, { title: item.title, back: () => render(entries, parent) });
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
onSelect(item);
|
|
236
|
+
popup.dismiss();
|
|
237
|
+
}
|
|
238
|
+
}, getIcon));
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
};
|
|
242
|
+
render(items);
|
|
243
|
+
anchorLocation = Array.create('int', 2);
|
|
244
|
+
anchor.getLocationOnScreen(anchorLocation);
|
|
245
|
+
const { x, y, width, height, above } = place();
|
|
246
|
+
popup.setWidth(width);
|
|
247
|
+
popup.setHeight(height);
|
|
248
|
+
const resources = context.getResources();
|
|
249
|
+
const animation = resources.getIdentifier(`NSMenuAnimation_${horizontal}_${above ? 'above' : 'below'}`, 'style', context.getPackageName());
|
|
250
|
+
if (animation > 0) {
|
|
251
|
+
popup.setAnimationStyle(animation);
|
|
252
|
+
}
|
|
253
|
+
popup.setOnDismissListener(new android.widget.PopupWindow.OnDismissListener({ onDismiss }));
|
|
254
|
+
popup.showAtLocation(anchor.getRootView(), android.view.Gravity.NO_GRAVITY, x, y);
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=menu-popup.android.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu-popup.android.js","sourceRoot":"","sources":["../../src/ui-menu/menu-popup.android.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nativescript-community/ui-menu",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.1",
|
|
4
4
|
"description": "Menus: Material PopupMenu on Android, native UIMenu (pull-down and context menus) 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.
|
|
47
|
+
"@nativescript-community/ui-core": "^1.4.1"
|
|
48
48
|
},
|
|
49
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "038bbede0659fcaf43f9f6980b6fd2dc09e1a511"
|
|
50
50
|
}
|
|
@@ -1,21 +1,35 @@
|
|
|
1
1
|
{
|
|
2
2
|
"uses": [
|
|
3
|
+
"android.content.res:ColorStateList",
|
|
3
4
|
"android.content.res:Resources",
|
|
4
|
-
"androidx.appcompat.content.res:AppCompatResources",
|
|
5
5
|
"android.graphics.drawable:BitmapDrawable",
|
|
6
6
|
"android.graphics.drawable:Drawable",
|
|
7
|
+
"android.graphics.drawable:GradientDrawable",
|
|
8
|
+
"android.graphics.drawable:RippleDrawable",
|
|
7
9
|
"android.graphics:Color",
|
|
10
|
+
"android.graphics:Typeface",
|
|
8
11
|
"android.text.style:ForegroundColorSpan",
|
|
9
12
|
"android.text.style:RelativeSizeSpan",
|
|
10
13
|
"android.text:SpannableString",
|
|
14
|
+
"android.text:TextUtils",
|
|
15
|
+
"android.util:TypedValue",
|
|
11
16
|
"android.view:Gravity",
|
|
12
|
-
"android.view:Menu",
|
|
13
|
-
"android.view:MenuItem",
|
|
14
17
|
"android.view:View",
|
|
18
|
+
"android.view:View.MeasureSpec",
|
|
19
|
+
"android.view:View.OnClickListener",
|
|
15
20
|
"android.view:ViewGroup",
|
|
21
|
+
"android.view:ViewGroup.LayoutParams",
|
|
22
|
+
"android.widget:FrameLayout",
|
|
16
23
|
"android.widget:FrameLayout.LayoutParams",
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
24
|
+
"android.widget:ImageView",
|
|
25
|
+
"android.widget:ImageView.ScaleType",
|
|
26
|
+
"android.widget:LinearLayout",
|
|
27
|
+
"android.widget:LinearLayout.LayoutParams",
|
|
28
|
+
"android.widget:PopupWindow",
|
|
29
|
+
"android.widget:PopupWindow.OnDismissListener",
|
|
30
|
+
"android.widget:ScrollView",
|
|
31
|
+
"android.widget:TextView",
|
|
32
|
+
"androidx.appcompat.content.res:AppCompatResources",
|
|
33
|
+
"com.google.android.material.color:MaterialColors"
|
|
20
34
|
]
|
|
21
35
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
3
|
+
android:width="24dp"
|
|
4
|
+
android:height="24dp"
|
|
5
|
+
android:viewportWidth="24"
|
|
6
|
+
android:viewportHeight="24">
|
|
7
|
+
<path
|
|
8
|
+
android:fillColor="#FFFFFFFF"
|
|
9
|
+
android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z" />
|
|
10
|
+
</vector>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
3
|
+
android:width="24dp"
|
|
4
|
+
android:height="24dp"
|
|
5
|
+
android:viewportWidth="24"
|
|
6
|
+
android:viewportHeight="24">
|
|
7
|
+
<path
|
|
8
|
+
android:fillColor="#FFFFFFFF"
|
|
9
|
+
android:pathData="M8.59,16.59L13.17,12 8.59,7.41 10,6l6,6 -6,6z" />
|
|
10
|
+
</vector>
|
package/tsconfig.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../../src/ui-menu/index-common.ts","../../src/ui-menu/index.android.ts","../../src/ui-menu/index.d.ts","../../src/ui-menu/index.ios.ts","../../references.d.ts","../../tools/references.d.ts","../../src/references.d.ts"],"version":"5.8.3"}
|
|
1
|
+
{"root":["../../src/ui-menu/index-common.ts","../../src/ui-menu/index.android.ts","../../src/ui-menu/index.d.ts","../../src/ui-menu/index.ios.ts","../../src/ui-menu/menu-popup.android.ts","../../references.d.ts","../../tools/references.d.ts","../../src/references.d.ts"],"version":"5.8.3"}
|