@fluentui-react-native/menu 0.9.2 → 0.11.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.json +114 -1
- package/CHANGELOG.md +40 -2
- package/lib/Menu/useMenu.d.ts.map +1 -1
- package/lib/Menu/useMenu.js +5 -1
- package/lib/Menu/useMenu.js.map +1 -1
- package/lib/MenuItem/MenuItem.d.ts.map +1 -1
- package/lib/MenuItem/MenuItem.js +4 -2
- package/lib/MenuItem/MenuItem.js.map +1 -1
- package/lib/MenuItem/MenuItem.styling.d.ts.map +1 -1
- package/lib/MenuItem/MenuItem.styling.js +6 -0
- package/lib/MenuItem/MenuItem.styling.js.map +1 -1
- package/lib/MenuItem/MenuItem.types.d.ts +2 -0
- package/lib/MenuItem/MenuItem.types.d.ts.map +1 -1
- package/lib/MenuItem/MenuItemTokens.d.ts.map +1 -1
- package/lib/MenuItem/MenuItemTokens.js +2 -0
- package/lib/MenuItem/MenuItemTokens.js.map +1 -1
- package/lib/MenuItem/MenuItemTokens.win32.d.ts.map +1 -1
- package/lib/MenuItem/MenuItemTokens.win32.js +2 -0
- package/lib/MenuItem/MenuItemTokens.win32.js.map +1 -1
- package/lib/MenuItem/useMenuItem.d.ts.map +1 -1
- package/lib/MenuItem/useMenuItem.js +3 -1
- package/lib/MenuItem/useMenuItem.js.map +1 -1
- package/lib/MenuItemCheckbox/MenuItemCheckbox.d.ts +4 -2
- package/lib/MenuItemCheckbox/MenuItemCheckbox.d.ts.map +1 -1
- package/lib/MenuItemCheckbox/MenuItemCheckbox.js +11 -8
- package/lib/MenuItemCheckbox/MenuItemCheckbox.js.map +1 -1
- package/lib/MenuItemCheckbox/useMenuItemCheckbox.d.ts +10 -0
- package/lib/MenuItemCheckbox/useMenuItemCheckbox.d.ts.map +1 -1
- package/lib/MenuItemCheckbox/useMenuItemCheckbox.js +28 -14
- package/lib/MenuItemCheckbox/useMenuItemCheckbox.js.map +1 -1
- package/lib/MenuItemRadio/MenuItemRadio.d.ts +4 -0
- package/lib/MenuItemRadio/MenuItemRadio.d.ts.map +1 -0
- package/lib/MenuItemRadio/MenuItemRadio.js +12 -0
- package/lib/MenuItemRadio/MenuItemRadio.js.map +1 -0
- package/lib/MenuItemRadio/useMenuItemRadio.d.ts +3 -0
- package/lib/MenuItemRadio/useMenuItemRadio.d.ts.map +1 -0
- package/lib/MenuItemRadio/useMenuItemRadio.js +15 -0
- package/lib/MenuItemRadio/useMenuItemRadio.js.map +1 -0
- package/lib/MenuList/MenuList.d.ts +0 -1
- package/lib/MenuList/MenuList.d.ts.map +1 -1
- package/lib/MenuList/MenuList.js +23 -5
- package/lib/MenuList/MenuList.js.map +1 -1
- package/lib/MenuList/MenuList.styling.d.ts.map +1 -1
- package/lib/MenuList/MenuList.styling.js +2 -1
- package/lib/MenuList/MenuList.styling.js.map +1 -1
- package/lib/MenuList/MenuList.types.d.ts +5 -1
- package/lib/MenuList/MenuList.types.d.ts.map +1 -1
- package/lib/MenuList/MenuListTokens.d.ts.map +1 -1
- package/lib/MenuList/MenuListTokens.js +1 -0
- package/lib/MenuList/MenuListTokens.js.map +1 -1
- package/lib/MenuList/useMenuList.d.ts.map +1 -1
- package/lib/MenuList/useMenuList.js +13 -3
- package/lib/MenuList/useMenuList.js.map +1 -1
- package/lib/MenuList/{useMenuContextValue.d.ts → useMenuListContextValue.d.ts} +1 -1
- package/lib/MenuList/useMenuListContextValue.d.ts.map +1 -0
- package/lib/MenuList/{useMenuContextValue.js → useMenuListContextValue.js} +1 -1
- package/lib/MenuList/useMenuListContextValue.js.map +1 -0
- package/lib/MenuPopover/MenuPopover.d.ts.map +1 -1
- package/lib/MenuPopover/MenuPopover.js +1 -1
- package/lib/MenuPopover/MenuPopover.js.map +1 -1
- package/lib/MenuPopover/MenuPopover.types.d.ts +4 -1
- package/lib/MenuPopover/MenuPopover.types.d.ts.map +1 -1
- package/lib/MenuPopover/useMenuPopover.d.ts.map +1 -1
- package/lib/MenuPopover/useMenuPopover.js +16 -1
- package/lib/MenuPopover/useMenuPopover.js.map +1 -1
- package/lib/MenuTrigger/MenuTrigger.d.ts.map +1 -1
- package/lib/MenuTrigger/MenuTrigger.js +4 -3
- package/lib/MenuTrigger/MenuTrigger.js.map +1 -1
- package/lib/MenuTrigger/MenuTrigger.types.d.ts +11 -2
- package/lib/MenuTrigger/MenuTrigger.types.d.ts.map +1 -1
- package/lib/MenuTrigger/MenuTrigger.types.js.map +1 -1
- package/lib/MenuTrigger/useMenuTrigger.d.ts +2 -8
- package/lib/MenuTrigger/useMenuTrigger.d.ts.map +1 -1
- package/lib/MenuTrigger/useMenuTrigger.js +14 -1
- package/lib/MenuTrigger/useMenuTrigger.js.map +1 -1
- package/lib/context/menuTriggerContext.d.ts +9 -0
- package/lib/context/menuTriggerContext.d.ts.map +1 -0
- package/lib/context/menuTriggerContext.js +9 -0
- package/lib/context/menuTriggerContext.js.map +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib-commonjs/Menu/useMenu.d.ts.map +1 -1
- package/lib-commonjs/Menu/useMenu.js +5 -1
- package/lib-commonjs/Menu/useMenu.js.map +1 -1
- package/lib-commonjs/MenuItem/MenuItem.d.ts.map +1 -1
- package/lib-commonjs/MenuItem/MenuItem.js +3 -1
- package/lib-commonjs/MenuItem/MenuItem.js.map +1 -1
- package/lib-commonjs/MenuItem/MenuItem.styling.d.ts.map +1 -1
- package/lib-commonjs/MenuItem/MenuItem.styling.js +6 -0
- package/lib-commonjs/MenuItem/MenuItem.styling.js.map +1 -1
- package/lib-commonjs/MenuItem/MenuItem.types.d.ts +2 -0
- package/lib-commonjs/MenuItem/MenuItem.types.d.ts.map +1 -1
- package/lib-commonjs/MenuItem/MenuItemTokens.d.ts.map +1 -1
- package/lib-commonjs/MenuItem/MenuItemTokens.js +2 -0
- package/lib-commonjs/MenuItem/MenuItemTokens.js.map +1 -1
- package/lib-commonjs/MenuItem/MenuItemTokens.win32.d.ts.map +1 -1
- package/lib-commonjs/MenuItem/MenuItemTokens.win32.js +2 -0
- package/lib-commonjs/MenuItem/MenuItemTokens.win32.js.map +1 -1
- package/lib-commonjs/MenuItem/useMenuItem.d.ts.map +1 -1
- package/lib-commonjs/MenuItem/useMenuItem.js +3 -1
- package/lib-commonjs/MenuItem/useMenuItem.js.map +1 -1
- package/lib-commonjs/MenuItemCheckbox/MenuItemCheckbox.d.ts +4 -2
- package/lib-commonjs/MenuItemCheckbox/MenuItemCheckbox.d.ts.map +1 -1
- package/lib-commonjs/MenuItemCheckbox/MenuItemCheckbox.js +12 -8
- package/lib-commonjs/MenuItemCheckbox/MenuItemCheckbox.js.map +1 -1
- package/lib-commonjs/MenuItemCheckbox/useMenuItemCheckbox.d.ts +10 -0
- package/lib-commonjs/MenuItemCheckbox/useMenuItemCheckbox.d.ts.map +1 -1
- package/lib-commonjs/MenuItemCheckbox/useMenuItemCheckbox.js +31 -16
- package/lib-commonjs/MenuItemCheckbox/useMenuItemCheckbox.js.map +1 -1
- package/lib-commonjs/MenuItemRadio/MenuItemRadio.d.ts +4 -0
- package/lib-commonjs/MenuItemRadio/MenuItemRadio.d.ts.map +1 -0
- package/lib-commonjs/MenuItemRadio/MenuItemRadio.js +15 -0
- package/lib-commonjs/MenuItemRadio/MenuItemRadio.js.map +1 -0
- package/lib-commonjs/MenuItemRadio/useMenuItemRadio.d.ts +3 -0
- package/lib-commonjs/MenuItemRadio/useMenuItemRadio.d.ts.map +1 -0
- package/lib-commonjs/MenuItemRadio/useMenuItemRadio.js +20 -0
- package/lib-commonjs/MenuItemRadio/useMenuItemRadio.js.map +1 -0
- package/lib-commonjs/MenuList/MenuList.d.ts +0 -1
- package/lib-commonjs/MenuList/MenuList.d.ts.map +1 -1
- package/lib-commonjs/MenuList/MenuList.js +22 -4
- package/lib-commonjs/MenuList/MenuList.js.map +1 -1
- package/lib-commonjs/MenuList/MenuList.styling.d.ts.map +1 -1
- package/lib-commonjs/MenuList/MenuList.styling.js +2 -1
- package/lib-commonjs/MenuList/MenuList.styling.js.map +1 -1
- package/lib-commonjs/MenuList/MenuList.types.d.ts +5 -1
- package/lib-commonjs/MenuList/MenuList.types.d.ts.map +1 -1
- package/lib-commonjs/MenuList/MenuListTokens.d.ts.map +1 -1
- package/lib-commonjs/MenuList/MenuListTokens.js +1 -0
- package/lib-commonjs/MenuList/MenuListTokens.js.map +1 -1
- package/lib-commonjs/MenuList/useMenuList.d.ts.map +1 -1
- package/lib-commonjs/MenuList/useMenuList.js +13 -3
- package/lib-commonjs/MenuList/useMenuList.js.map +1 -1
- package/lib-commonjs/MenuList/{useMenuContextValue.d.ts → useMenuListContextValue.d.ts} +1 -1
- package/lib-commonjs/MenuList/useMenuListContextValue.d.ts.map +1 -0
- package/lib-commonjs/MenuList/{useMenuContextValue.js → useMenuListContextValue.js} +1 -1
- package/lib-commonjs/MenuList/useMenuListContextValue.js.map +1 -0
- package/lib-commonjs/MenuPopover/MenuPopover.d.ts.map +1 -1
- package/lib-commonjs/MenuPopover/MenuPopover.js +1 -1
- package/lib-commonjs/MenuPopover/MenuPopover.js.map +1 -1
- package/lib-commonjs/MenuPopover/MenuPopover.types.d.ts +4 -1
- package/lib-commonjs/MenuPopover/MenuPopover.types.d.ts.map +1 -1
- package/lib-commonjs/MenuPopover/useMenuPopover.d.ts.map +1 -1
- package/lib-commonjs/MenuPopover/useMenuPopover.js +16 -1
- package/lib-commonjs/MenuPopover/useMenuPopover.js.map +1 -1
- package/lib-commonjs/MenuTrigger/MenuTrigger.d.ts.map +1 -1
- package/lib-commonjs/MenuTrigger/MenuTrigger.js +4 -3
- package/lib-commonjs/MenuTrigger/MenuTrigger.js.map +1 -1
- package/lib-commonjs/MenuTrigger/MenuTrigger.types.d.ts +11 -2
- package/lib-commonjs/MenuTrigger/MenuTrigger.types.d.ts.map +1 -1
- package/lib-commonjs/MenuTrigger/MenuTrigger.types.js.map +1 -1
- package/lib-commonjs/MenuTrigger/useMenuTrigger.d.ts +2 -8
- package/lib-commonjs/MenuTrigger/useMenuTrigger.d.ts.map +1 -1
- package/lib-commonjs/MenuTrigger/useMenuTrigger.js +14 -1
- package/lib-commonjs/MenuTrigger/useMenuTrigger.js.map +1 -1
- package/lib-commonjs/context/menuTriggerContext.d.ts +9 -0
- package/lib-commonjs/context/menuTriggerContext.d.ts.map +1 -0
- package/lib-commonjs/context/menuTriggerContext.js +14 -0
- package/lib-commonjs/context/menuTriggerContext.js.map +1 -0
- package/lib-commonjs/index.d.ts +1 -0
- package/lib-commonjs/index.d.ts.map +1 -1
- package/lib-commonjs/index.js +3 -1
- package/lib-commonjs/index.js.map +1 -1
- package/package.json +7 -7
- package/src/Menu/useMenu.ts +6 -0
- package/src/MenuItem/MenuItem.styling.ts +7 -0
- package/src/MenuItem/MenuItem.tsx +10 -5
- package/src/MenuItem/MenuItem.types.ts +2 -0
- package/src/MenuItem/MenuItemTokens.ts +2 -0
- package/src/MenuItem/MenuItemTokens.win32.ts +2 -0
- package/src/MenuItem/useMenuItem.ts +3 -1
- package/src/MenuItemCheckbox/MenuItemCheckbox.tsx +29 -16
- package/src/MenuItemCheckbox/useMenuItemCheckbox.ts +39 -20
- package/src/MenuItemRadio/MenuItemRadio.tsx +16 -0
- package/src/MenuItemRadio/useMenuItemRadio.ts +21 -0
- package/src/MenuList/MenuList.styling.ts +2 -1
- package/src/MenuList/MenuList.tsx +23 -5
- package/src/MenuList/MenuList.types.ts +5 -2
- package/src/MenuList/MenuListTokens.ts +1 -0
- package/src/MenuList/useMenuList.ts +22 -3
- package/src/MenuList/{useMenuContextValue.ts → useMenuListContextValue.ts} +0 -0
- package/src/MenuPopover/MenuPopover.tsx +3 -0
- package/src/MenuPopover/MenuPopover.types.ts +4 -1
- package/src/MenuPopover/useMenuPopover.ts +21 -2
- package/src/MenuTrigger/MenuTrigger.tsx +4 -3
- package/src/MenuTrigger/MenuTrigger.types.ts +14 -3
- package/src/MenuTrigger/useMenuTrigger.ts +18 -3
- package/src/context/menuTriggerContext.ts +10 -0
- package/src/index.ts +1 -0
- package/lib/MenuList/useMenuContextValue.d.ts.map +0 -1
- package/lib/MenuList/useMenuContextValue.js.map +0 -1
- package/lib-commonjs/MenuList/useMenuContextValue.d.ts.map +0 -1
- package/lib-commonjs/MenuList/useMenuContextValue.js.map +0 -1
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.useMenuPopover = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var react_1 = (0, tslib_1.__importDefault)(require("react"));
|
|
6
|
+
var react_native_1 = require("react-native");
|
|
6
7
|
var menuContext_1 = require("../context/menuContext");
|
|
7
8
|
var useMenuPopover = function (_props) {
|
|
8
9
|
var context = (0, menuContext_1.useMenuContext)();
|
|
@@ -12,7 +13,21 @@ var useMenuPopover = function (_props) {
|
|
|
12
13
|
var dismissBehaviors = context.isControlled
|
|
13
14
|
? ['preventDismissOnKeyDown', 'preventDismissOnClickOutside']
|
|
14
15
|
: undefined;
|
|
15
|
-
|
|
16
|
+
var directionalHint = getDirectionalHint(context.isSubmenu, react_native_1.I18nManager.isRTL);
|
|
17
|
+
// Initial focus behavior differs per platform, Windows platforms move focus
|
|
18
|
+
// automatically onto first element of Callout
|
|
19
|
+
var setInitialFocus = react_native_1.Platform.OS === 'win32' || react_native_1.Platform.OS === 'windows';
|
|
20
|
+
var doNotTakePointerCapture = context.openOnHover;
|
|
21
|
+
return { triggerRef: triggerRef, onDismiss: onDismiss, directionalHint: directionalHint, dismissBehaviors: dismissBehaviors, doNotTakePointerCapture: doNotTakePointerCapture, setInitialFocus: setInitialFocus };
|
|
16
22
|
};
|
|
17
23
|
exports.useMenuPopover = useMenuPopover;
|
|
24
|
+
var getDirectionalHint = function (isSubmenu, isRtl) {
|
|
25
|
+
if (!isSubmenu) {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
if (isRtl) {
|
|
29
|
+
return 'leftTopEdge';
|
|
30
|
+
}
|
|
31
|
+
return 'rightTopEdge';
|
|
32
|
+
};
|
|
18
33
|
//# sourceMappingURL=useMenuPopover.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMenuPopover.js","sourceRoot":"","sources":["../../src/MenuPopover/useMenuPopover.ts"],"names":[],"mappings":";;;;AAAA,6DAA0B;
|
|
1
|
+
{"version":3,"file":"useMenuPopover.js","sourceRoot":"","sources":["../../src/MenuPopover/useMenuPopover.ts"],"names":[],"mappings":";;;;AAAA,6DAA0B;AAC1B,6CAAqD;AAErD,sDAAwD;AAGjD,IAAM,cAAc,GAAG,UAAC,MAAwB;IACrD,IAAM,OAAO,GAAG,IAAA,4BAAc,GAAE,CAAC;IACjC,IAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAEhC,IAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACtC,IAAM,SAAS,GAAG,eAAK,CAAC,WAAW,CAAC,cAAM,OAAA,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,EAAtC,CAAsC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7F,IAAM,gBAAgB,GAAG,OAAO,CAAC,YAAY;QAC3C,CAAC,CAAE,CAAC,yBAAyB,EAAE,8BAA8B,CAAwB;QACrF,CAAC,CAAC,SAAS,CAAC;IACd,IAAM,eAAe,GAAG,kBAAkB,CAAC,OAAO,CAAC,SAAS,EAAE,0BAAW,CAAC,KAAK,CAAC,CAAC;IAEjF,4EAA4E;IAC5E,8CAA8C;IAC9C,IAAM,eAAe,GAAG,uBAAQ,CAAC,EAAE,KAAM,OAAe,IAAI,uBAAQ,CAAC,EAAE,KAAK,SAAS,CAAC;IACtF,IAAM,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC;IAEpD,OAAO,EAAE,UAAU,YAAA,EAAE,SAAS,WAAA,EAAE,eAAe,iBAAA,EAAE,gBAAgB,kBAAA,EAAE,uBAAuB,yBAAA,EAAE,eAAe,iBAAA,EAAE,CAAC;AAChH,CAAC,CAAC;AAjBW,QAAA,cAAc,kBAiBzB;AAEF,IAAM,kBAAkB,GAAG,UAAC,SAAkB,EAAE,KAAc;IAC5D,IAAI,CAAC,SAAS,EAAE;QACd,OAAO,SAAS,CAAC;KAClB;IAED,IAAI,KAAK,EAAE;QACT,OAAO,aAAa,CAAC;KACtB;IAED,OAAO,cAAc,CAAC;AACxB,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuTrigger.d.ts","sourceRoot":"","sources":["../../src/MenuTrigger/MenuTrigger.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAmB,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"MenuTrigger.d.ts","sourceRoot":"","sources":["../../src/MenuTrigger/MenuTrigger.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAmB,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAIxE,eAAO,MAAM,WAAW,iFAiBtB,CAAC;AAGH,eAAe,WAAW,CAAC"}
|
|
@@ -6,8 +6,9 @@ var react_1 = (0, tslib_1.__importDefault)(require("react"));
|
|
|
6
6
|
var framework_1 = require("@fluentui-react-native/framework");
|
|
7
7
|
var MenuTrigger_types_1 = require("./MenuTrigger.types");
|
|
8
8
|
var useMenuTrigger_1 = require("./useMenuTrigger");
|
|
9
|
+
var menuTriggerContext_1 = require("../context/menuTriggerContext");
|
|
9
10
|
exports.MenuTrigger = (0, framework_1.stagedComponent)(function (props) {
|
|
10
|
-
var
|
|
11
|
+
var menuTrigger = (0, useMenuTrigger_1.useMenuTrigger)(props);
|
|
11
12
|
return function (_rest, children) {
|
|
12
13
|
var childrenArray = react_1.default.Children.toArray(children);
|
|
13
14
|
if (__DEV__) {
|
|
@@ -16,8 +17,8 @@ exports.MenuTrigger = (0, framework_1.stagedComponent)(function (props) {
|
|
|
16
17
|
}
|
|
17
18
|
}
|
|
18
19
|
var child = childrenArray[0];
|
|
19
|
-
var revised = react_1.default.cloneElement(child,
|
|
20
|
-
return react_1.default.createElement(
|
|
20
|
+
var revised = react_1.default.cloneElement(child, menuTrigger.props);
|
|
21
|
+
return react_1.default.createElement(menuTriggerContext_1.MenuTriggerProvider, { value: menuTrigger.hasSubmenu }, revised);
|
|
21
22
|
};
|
|
22
23
|
});
|
|
23
24
|
exports.MenuTrigger.displayName = MenuTrigger_types_1.menuTriggerName;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuTrigger.js","sourceRoot":"","sources":["../../src/MenuTrigger/MenuTrigger.tsx"],"names":[],"mappings":";;;;AAAA,6DAA0B;AAC1B,8DAAmE;AACnE,yDAAwE;AACxE,mDAAkD;
|
|
1
|
+
{"version":3,"file":"MenuTrigger.js","sourceRoot":"","sources":["../../src/MenuTrigger/MenuTrigger.tsx"],"names":[],"mappings":";;;;AAAA,6DAA0B;AAC1B,8DAAmE;AACnE,yDAAwE;AACxE,mDAAkD;AAClD,oEAAoE;AAEvD,QAAA,WAAW,GAAG,IAAA,2BAAe,EAAC,UAAC,KAAuB;IACjE,IAAM,WAAW,GAAG,IAAA,+BAAc,EAAC,KAAK,CAAC,CAAC;IAE1C,OAAO,UAAC,KAAuB,EAAE,QAAyB;QACxD,IAAM,aAAa,GAAG,eAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAyB,CAAC;QAE/E,IAAI,OAAO,EAAE;YACX,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC9B,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;aACzD;SACF;QAED,IAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAM,OAAO,GAAG,eAAK,CAAC,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;QAE7D,OAAO,8BAAC,wCAAmB,IAAC,KAAK,EAAE,WAAW,CAAC,UAAU,IAAG,OAAO,CAAuB,CAAC;IAC7F,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AACH,mBAAW,CAAC,WAAW,GAAG,mCAAe,CAAC;AAE1C,kBAAe,mBAAW,CAAC"}
|
|
@@ -1,7 +1,16 @@
|
|
|
1
|
-
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { InteractionEvent, IWithPressableOptions } from '@fluentui-react-native/interactive-hooks';
|
|
3
|
+
import { ViewProps } from 'react-native';
|
|
2
4
|
export declare const menuTriggerName = "MenuTrigger";
|
|
3
|
-
export interface MenuTriggerProps extends Omit<
|
|
5
|
+
export interface MenuTriggerProps extends Omit<IWithPressableOptions<ViewProps>, 'onPress'> {
|
|
6
|
+
/**
|
|
7
|
+
* A RefObject to refer to the trigger component.
|
|
8
|
+
*/
|
|
9
|
+
componentRef?: React.RefObject<React.Component>;
|
|
10
|
+
onClick?: (e: InteractionEvent) => void;
|
|
4
11
|
}
|
|
5
12
|
export interface MenuTriggerState {
|
|
13
|
+
props: MenuTriggerProps;
|
|
14
|
+
hasSubmenu: boolean;
|
|
6
15
|
}
|
|
7
16
|
//# sourceMappingURL=MenuTrigger.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuTrigger.types.d.ts","sourceRoot":"","sources":["../../src/MenuTrigger/MenuTrigger.types.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"MenuTrigger.types.d.ts","sourceRoot":"","sources":["../../src/MenuTrigger/MenuTrigger.types.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AACnG,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAE7C,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IACzF;;OAEG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAEhD,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACzC;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,gBAAgB,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;CACrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuTrigger.types.js","sourceRoot":"","sources":["../../src/MenuTrigger/MenuTrigger.types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"MenuTrigger.types.js","sourceRoot":"","sources":["../../src/MenuTrigger/MenuTrigger.types.ts"],"names":[],"mappings":";;;AAGa,QAAA,eAAe,GAAG,aAAa,CAAC"}
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import { MenuTriggerProps } from './MenuTrigger.types';
|
|
4
|
-
export declare const useMenuTrigger: (_props: MenuTriggerProps) => {
|
|
5
|
-
onClick: (e: InteractionEvent) => void;
|
|
6
|
-
onHoverIn: (e: InteractionEvent) => void;
|
|
7
|
-
componentRef: import("react").RefObject<import("react").Component<{}, {}, any>>;
|
|
8
|
-
};
|
|
1
|
+
import { MenuTriggerProps, MenuTriggerState } from './MenuTrigger.types';
|
|
2
|
+
export declare const useMenuTrigger: (_props: MenuTriggerProps) => MenuTriggerState;
|
|
9
3
|
//# sourceMappingURL=useMenuTrigger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMenuTrigger.d.ts","sourceRoot":"","sources":["../../src/MenuTrigger/useMenuTrigger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useMenuTrigger.d.ts","sourceRoot":"","sources":["../../src/MenuTrigger/useMenuTrigger.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGzE,eAAO,MAAM,cAAc,WAAY,gBAAgB,KAAG,gBAiCzD,CAAC"}
|
|
@@ -2,21 +2,34 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.useMenuTrigger = void 0;
|
|
4
4
|
var menuContext_1 = require("../context/menuContext");
|
|
5
|
+
var react_native_1 = require("react-native");
|
|
5
6
|
var useMenuTrigger = function (_props) {
|
|
6
7
|
var context = (0, menuContext_1.useMenuContext)();
|
|
7
8
|
var setOpen = context.setOpen;
|
|
8
9
|
var open = context.open;
|
|
9
10
|
var openOnHover = context.openOnHover;
|
|
10
11
|
var triggerRef = context.triggerRef;
|
|
12
|
+
var delayHover = react_native_1.Platform.select({
|
|
13
|
+
macos: 100,
|
|
14
|
+
default: 500, // win32
|
|
15
|
+
});
|
|
11
16
|
var onHoverIn = function (e) {
|
|
12
17
|
if (openOnHover) {
|
|
13
18
|
setOpen(e, true /* isOpen */);
|
|
14
19
|
}
|
|
15
20
|
};
|
|
21
|
+
var onHoverOut = function (e) {
|
|
22
|
+
if (openOnHover) {
|
|
23
|
+
setOpen(e, false /* isOpen */);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
16
26
|
var onClick = function (e) {
|
|
17
27
|
setOpen(e, !open);
|
|
18
28
|
};
|
|
19
|
-
return {
|
|
29
|
+
return {
|
|
30
|
+
props: { onClick: onClick, onHoverIn: onHoverIn, onHoverOut: onHoverOut, componentRef: triggerRef, delayHoverIn: delayHover, delayHoverOut: delayHover },
|
|
31
|
+
hasSubmenu: context.isSubmenu,
|
|
32
|
+
};
|
|
20
33
|
};
|
|
21
34
|
exports.useMenuTrigger = useMenuTrigger;
|
|
22
35
|
//# sourceMappingURL=useMenuTrigger.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMenuTrigger.js","sourceRoot":"","sources":["../../src/MenuTrigger/useMenuTrigger.ts"],"names":[],"mappings":";;;AAAA,sDAAwD;
|
|
1
|
+
{"version":3,"file":"useMenuTrigger.js","sourceRoot":"","sources":["../../src/MenuTrigger/useMenuTrigger.ts"],"names":[],"mappings":";;;AAAA,sDAAwD;AAGxD,6CAAwC;AAEjC,IAAM,cAAc,GAAG,UAAC,MAAwB;IACrD,IAAM,OAAO,GAAG,IAAA,4BAAc,GAAE,CAAC;IAEjC,IAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,IAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,IAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACxC,IAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAEtC,IAAM,UAAU,GAAG,uBAAQ,CAAC,MAAM,CAAC;QACjC,KAAK,EAAE,GAAG;QACV,OAAO,EAAE,GAAG,EAAE,QAAQ;KACvB,CAAC,CAAC;IAEH,IAAM,SAAS,GAAG,UAAC,CAAmB;QACpC,IAAI,WAAW,EAAE;YACf,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;SAC/B;IACH,CAAC,CAAC;IAEF,IAAM,UAAU,GAAG,UAAC,CAAmB;QACrC,IAAI,WAAW,EAAE;YACf,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;SAChC;IACH,CAAC,CAAC;IAEF,IAAM,OAAO,GAAG,UAAC,CAAmB;QAClC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,OAAO;QACL,KAAK,EAAE,EAAE,OAAO,SAAA,EAAE,SAAS,WAAA,EAAE,UAAU,YAAA,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE;QACxH,UAAU,EAAE,OAAO,CAAC,SAAS;KAC9B,CAAC;AACJ,CAAC,CAAC;AAjCW,QAAA,cAAc,kBAiCzB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* This context keeps track of whether a trigger component is for a submenu.
|
|
4
|
+
* This allows the trigger to show a submenu indicator.
|
|
5
|
+
*/
|
|
6
|
+
export declare const MenuTriggerContext: React.Context<boolean>;
|
|
7
|
+
export declare const MenuTriggerProvider: React.Provider<boolean>;
|
|
8
|
+
export declare const useMenuTriggerContext: () => boolean;
|
|
9
|
+
//# sourceMappingURL=menuTriggerContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menuTriggerContext.d.ts","sourceRoot":"","sources":["../../src/context/menuTriggerContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;GAGG;AACH,eAAO,MAAM,kBAAkB,wBAAsC,CAAC;AAEtE,eAAO,MAAM,mBAAmB,yBAA8B,CAAC;AAC/D,eAAO,MAAM,qBAAqB,eAA6C,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useMenuTriggerContext = exports.MenuTriggerProvider = exports.MenuTriggerContext = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var react_1 = (0, tslib_1.__importDefault)(require("react"));
|
|
6
|
+
/**
|
|
7
|
+
* This context keeps track of whether a trigger component is for a submenu.
|
|
8
|
+
* This allows the trigger to show a submenu indicator.
|
|
9
|
+
*/
|
|
10
|
+
exports.MenuTriggerContext = react_1.default.createContext(false);
|
|
11
|
+
exports.MenuTriggerProvider = exports.MenuTriggerContext.Provider;
|
|
12
|
+
var useMenuTriggerContext = function () { return react_1.default.useContext(exports.MenuTriggerContext); };
|
|
13
|
+
exports.useMenuTriggerContext = useMenuTriggerContext;
|
|
14
|
+
//# sourceMappingURL=menuTriggerContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menuTriggerContext.js","sourceRoot":"","sources":["../../src/context/menuTriggerContext.ts"],"names":[],"mappings":";;;;AAAA,6DAA0B;AAE1B;;;GAGG;AACU,QAAA,kBAAkB,GAAG,eAAK,CAAC,aAAa,CAAU,KAAK,CAAC,CAAC;AAEzD,QAAA,mBAAmB,GAAG,0BAAkB,CAAC,QAAQ,CAAC;AACxD,IAAM,qBAAqB,GAAG,cAAM,OAAA,eAAK,CAAC,UAAU,CAAC,0BAAkB,CAAC,EAApC,CAAoC,CAAC;AAAnE,QAAA,qBAAqB,yBAA8C"}
|
package/lib-commonjs/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export { MenuTrigger } from './MenuTrigger/MenuTrigger';
|
|
|
3
3
|
export { MenuPopover } from './MenuPopover/MenuPopover';
|
|
4
4
|
export { MenuItem } from './MenuItem/MenuItem';
|
|
5
5
|
export { MenuItemCheckbox } from './MenuItemCheckbox/MenuItemCheckbox';
|
|
6
|
+
export { MenuItemRadio } from './MenuItemRadio/MenuItemRadio';
|
|
6
7
|
export { MenuList } from './MenuList/MenuList';
|
|
7
8
|
export { MenuDivider } from './MenuDivider/MenuDivider';
|
|
8
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC"}
|
package/lib-commonjs/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MenuDivider = exports.MenuList = exports.MenuItemCheckbox = exports.MenuItem = exports.MenuPopover = exports.MenuTrigger = exports.Menu = void 0;
|
|
3
|
+
exports.MenuDivider = exports.MenuList = exports.MenuItemRadio = exports.MenuItemCheckbox = exports.MenuItem = exports.MenuPopover = exports.MenuTrigger = exports.Menu = void 0;
|
|
4
4
|
var Menu_1 = require("./Menu/Menu");
|
|
5
5
|
Object.defineProperty(exports, "Menu", { enumerable: true, get: function () { return Menu_1.Menu; } });
|
|
6
6
|
var MenuTrigger_1 = require("./MenuTrigger/MenuTrigger");
|
|
@@ -11,6 +11,8 @@ var MenuItem_1 = require("./MenuItem/MenuItem");
|
|
|
11
11
|
Object.defineProperty(exports, "MenuItem", { enumerable: true, get: function () { return MenuItem_1.MenuItem; } });
|
|
12
12
|
var MenuItemCheckbox_1 = require("./MenuItemCheckbox/MenuItemCheckbox");
|
|
13
13
|
Object.defineProperty(exports, "MenuItemCheckbox", { enumerable: true, get: function () { return MenuItemCheckbox_1.MenuItemCheckbox; } });
|
|
14
|
+
var MenuItemRadio_1 = require("./MenuItemRadio/MenuItemRadio");
|
|
15
|
+
Object.defineProperty(exports, "MenuItemRadio", { enumerable: true, get: function () { return MenuItemRadio_1.MenuItemRadio; } });
|
|
14
16
|
var MenuList_1 = require("./MenuList/MenuList");
|
|
15
17
|
Object.defineProperty(exports, "MenuList", { enumerable: true, get: function () { return MenuList_1.MenuList; } });
|
|
16
18
|
var MenuDivider_1 = require("./MenuDivider/MenuDivider");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,oCAAmC;AAA1B,4FAAA,IAAI,OAAA;AACb,yDAAwD;AAA/C,0GAAA,WAAW,OAAA;AACpB,yDAAwD;AAA/C,0GAAA,WAAW,OAAA;AACpB,gDAA+C;AAAtC,oGAAA,QAAQ,OAAA;AACjB,wEAAuE;AAA9D,oHAAA,gBAAgB,OAAA;AACzB,gDAA+C;AAAtC,oGAAA,QAAQ,OAAA;AACjB,yDAAwD;AAA/C,0GAAA,WAAW,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,oCAAmC;AAA1B,4FAAA,IAAI,OAAA;AACb,yDAAwD;AAA/C,0GAAA,WAAW,OAAA;AACpB,yDAAwD;AAA/C,0GAAA,WAAW,OAAA;AACpB,gDAA+C;AAAtC,oGAAA,QAAQ,OAAA;AACjB,wEAAuE;AAA9D,oHAAA,gBAAgB,OAAA;AACzB,+DAA8D;AAArD,8GAAA,aAAa,OAAA;AACtB,gDAA+C;AAAtC,oGAAA,QAAQ,OAAA;AACjB,yDAAwD;AAA/C,0GAAA,WAAW,OAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluentui-react-native/menu",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"description": "A cross-platform Menu component using the Fluent Design System",
|
|
5
5
|
"main": "lib-commonjs/index.js",
|
|
6
6
|
"module": "lib/index.js",
|
|
@@ -23,12 +23,12 @@
|
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"@fluentui-react-native/adapters": ">=0.8.5 <1.0.0",
|
|
26
|
-
"@fluentui-react-native/callout": ">=0.20.
|
|
27
|
-
"@fluentui-react-native/experimental-text": ">=0.
|
|
28
|
-
"@fluentui-react-native/framework": "0.7.
|
|
29
|
-
"@fluentui-react-native/interactive-hooks": ">=0.
|
|
30
|
-
"@fluentui-react-native/theme-tokens": ">=0.
|
|
31
|
-
"@fluentui-react-native/tokens": ">=0.
|
|
26
|
+
"@fluentui-react-native/callout": ">=0.20.4 <1.0.0",
|
|
27
|
+
"@fluentui-react-native/experimental-text": ">=0.9.0 <1.0.0",
|
|
28
|
+
"@fluentui-react-native/framework": "0.7.30",
|
|
29
|
+
"@fluentui-react-native/interactive-hooks": ">=0.16.0 <1.0.0",
|
|
30
|
+
"@fluentui-react-native/theme-tokens": ">=0.18.0 <1.0.0",
|
|
31
|
+
"@fluentui-react-native/tokens": ">=0.14.0 <1.0.0",
|
|
32
32
|
"@fluentui-react-native/use-styling": ">=0.8.3 <1.0.0",
|
|
33
33
|
"react-native-svg": "^12.3.0",
|
|
34
34
|
"tslib": "^2.3.1"
|
package/src/Menu/useMenu.ts
CHANGED
|
@@ -10,7 +10,13 @@ export const useMenu = (props: MenuProps): MenuState => {
|
|
|
10
10
|
const isControlled = typeof props.open !== 'undefined';
|
|
11
11
|
const [open, setOpen] = useMenuOpenState(isControlled, props);
|
|
12
12
|
|
|
13
|
+
// Default behaviot for submenu is to open on hover
|
|
14
|
+
// the ...props line below will override this behavior for a submenu
|
|
15
|
+
// or apply openOnHover if passed into a root Menu.
|
|
16
|
+
const openOnHover = isSubmenu;
|
|
17
|
+
|
|
13
18
|
return {
|
|
19
|
+
openOnHover,
|
|
14
20
|
...props,
|
|
15
21
|
open,
|
|
16
22
|
setOpen,
|
|
@@ -47,6 +47,13 @@ export const stylingSettings: UseStylingOptions<MenuItemProps, MenuItemSlotProps
|
|
|
47
47
|
(tokens: MenuItemTokens) => {
|
|
48
48
|
return {
|
|
49
49
|
color: tokens.color,
|
|
50
|
+
height: 16,
|
|
51
|
+
width: 16,
|
|
52
|
+
viewBox:
|
|
53
|
+
'0 0 ' +
|
|
54
|
+
(tokens.submenuIndicatorSize - tokens.submenuIndicatorPadding * 2) +
|
|
55
|
+
' ' +
|
|
56
|
+
(tokens.submenuIndicatorSize - tokens.submenuIndicatorPadding * 2),
|
|
50
57
|
};
|
|
51
58
|
},
|
|
52
59
|
['color'],
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** @jsx withSlots */
|
|
2
|
-
import { View } from 'react-native';
|
|
2
|
+
import { I18nManager, View } from 'react-native';
|
|
3
3
|
import { SvgXml } from 'react-native-svg';
|
|
4
4
|
import { compose, mergeProps, UseSlots, withSlots } from '@fluentui-react-native/framework';
|
|
5
5
|
import { Text } from '@fluentui-react-native/experimental-text';
|
|
@@ -22,10 +22,15 @@ export const MenuItem = compose<MenuItemType>({
|
|
|
22
22
|
|
|
23
23
|
return (final: MenuItemProps) => {
|
|
24
24
|
const mergedProps = mergeProps(menuItem.props, final);
|
|
25
|
-
const chevronXml =
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
const chevronXml = I18nManager.isRTL
|
|
26
|
+
? `
|
|
27
|
+
<svg>
|
|
28
|
+
<path fill='currentColor' d='M7.35355 2.14645C7.54882 2.34171 7.54882 2.65829 7.35355 2.85355L4.20711 6L7.35355 9.14645C7.54882 9.34171 7.54882 9.65829 7.35355 9.85355C7.15829 10.0488 6.84171 10.0488 6.64645 9.85355L3.14645 6.35355C2.95118 6.15829 2.95118 5.84171 3.14645 5.64645L6.64645 2.14645C6.84171 1.95118 7.15829 1.95118 7.35355 2.14645Z' />
|
|
29
|
+
</svg>`
|
|
30
|
+
: `
|
|
31
|
+
<svg>
|
|
32
|
+
<path fill='currentColor' d='M4.64645 2.14645C4.45118 2.34171 4.45118 2.65829 4.64645 2.85355L7.79289 6L4.64645 9.14645C4.45118 9.34171 4.45118 9.65829 4.64645 9.85355C4.84171 10.0488 5.15829 10.0488 5.35355 9.85355L8.85355 6.35355C9.04882 6.15829 9.04882 5.84171 8.85355 5.64645L5.35355 2.14645C5.15829 1.95118 4.84171 1.95118 4.64645 2.14645Z' />
|
|
33
|
+
</svg>`;
|
|
29
34
|
|
|
30
35
|
return (
|
|
31
36
|
<Slots.root {...mergedProps}>
|
|
@@ -10,6 +10,8 @@ export const menuItemName = 'MenuItem';
|
|
|
10
10
|
|
|
11
11
|
export interface MenuItemTokens extends LayoutTokens, FontTokens, IBorderTokens, IColorTokens {
|
|
12
12
|
checkmarkSize?: number;
|
|
13
|
+
submenuIndicatorPadding?: number;
|
|
14
|
+
submenuIndicatorSize?: number;
|
|
13
15
|
gap?: number;
|
|
14
16
|
|
|
15
17
|
disabled?: MenuItemTokens;
|
|
@@ -7,6 +7,8 @@ export const defaultMenuItemTokens: TokenSettings<MenuItemTokens, Theme> = (t: T
|
|
|
7
7
|
backgroundColor: t.colors.neutralBackground1,
|
|
8
8
|
borderRadius: globalTokens.corner.radius.medium,
|
|
9
9
|
checkmarkSize: 16,
|
|
10
|
+
submenuIndicatorPadding: globalTokens.spacing.none,
|
|
11
|
+
submenuIndicatorSize: 16,
|
|
10
12
|
color: t.colors.neutralForeground2,
|
|
11
13
|
fontFamily: t.typography.families.primary,
|
|
12
14
|
fontSize: globalTokens.font.size[300],
|
|
@@ -7,6 +7,8 @@ export const defaultMenuItemTokens: TokenSettings<MenuItemTokens, Theme> = (t: T
|
|
|
7
7
|
backgroundColor: t.colors.neutralBackground1,
|
|
8
8
|
borderRadius: globalTokens.corner.radius.none,
|
|
9
9
|
checkmarkSize: 16,
|
|
10
|
+
submenuIndicatorPadding: globalTokens.spacing.xxs,
|
|
11
|
+
submenuIndicatorSize: 16,
|
|
10
12
|
color: t.colors.neutralForeground1,
|
|
11
13
|
fontFamily: t.typography.families.primary,
|
|
12
14
|
fontSize: globalTokens.font.size[200],
|
|
@@ -5,6 +5,7 @@ import { memoize } from '@fluentui-react-native/framework';
|
|
|
5
5
|
import { useAsPressable, useKeyProps } from '@fluentui-react-native/interactive-hooks';
|
|
6
6
|
import { useMenuContext } from '../context/menuContext';
|
|
7
7
|
import { useMenuListContext } from '../context/menuListContext';
|
|
8
|
+
import { useMenuTriggerContext } from '../context/menuTriggerContext';
|
|
8
9
|
|
|
9
10
|
export const useMenuItem = (props: MenuItemProps): MenuItemState => {
|
|
10
11
|
// attach the pressable state handlers
|
|
@@ -12,7 +13,8 @@ export const useMenuItem = (props: MenuItemProps): MenuItemState => {
|
|
|
12
13
|
const { onClick, accessibilityState, componentRef = defaultComponentRef, disabled, ...rest } = props;
|
|
13
14
|
const pressable = useAsPressable({ ...rest, disabled, onPress: onClick });
|
|
14
15
|
const onKeyProps = useKeyProps(onClick, ' ', 'Enter');
|
|
15
|
-
const
|
|
16
|
+
const isTrigger = useMenuTriggerContext();
|
|
17
|
+
const hasSubmenu = useMenuContext().isSubmenu && isTrigger;
|
|
16
18
|
const hasCheckmarks = useMenuListContext().hasCheckmarks;
|
|
17
19
|
|
|
18
20
|
return {
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
/** @jsx withSlots */
|
|
2
2
|
import { View } from 'react-native';
|
|
3
3
|
import { SvgXml } from 'react-native-svg';
|
|
4
|
-
import { compose, mergeProps, UseSlots, withSlots } from '@fluentui-react-native/framework';
|
|
4
|
+
import { compose, mergeProps, Slots, UseSlots, withSlots } from '@fluentui-react-native/framework';
|
|
5
5
|
import { Text } from '@fluentui-react-native/experimental-text';
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
menuItemCheckboxName,
|
|
8
|
+
MenuItemCheckboxProps,
|
|
9
|
+
MenuItemCheckboxSlotProps,
|
|
10
|
+
MenuItemCheckboxState,
|
|
11
|
+
MenuItemCheckboxType,
|
|
12
|
+
} from './MenuItemCheckbox.types';
|
|
7
13
|
import { useMenuItemCheckbox } from './useMenuItemCheckbox';
|
|
8
14
|
import { stylingSettings } from './MenuItemCheckbox.styling';
|
|
9
15
|
|
|
@@ -19,19 +25,26 @@ export const MenuItemCheckbox = compose<MenuItemCheckboxType>({
|
|
|
19
25
|
const menuItem = useMenuItemCheckbox(userProps);
|
|
20
26
|
const Slots = useSlots(userProps, (layer): boolean => menuItem.state[layer]);
|
|
21
27
|
|
|
22
|
-
return (
|
|
23
|
-
const mergedProps = mergeProps(menuItem.props, final);
|
|
24
|
-
const chevronXml = `
|
|
25
|
-
<svg>
|
|
26
|
-
<path fill='currentColor' d='M9.85355 3.14645C10.0488 3.34171 10.0488 3.65829 9.85355 3.85355L5.35355 8.35355C5.15829 8.54882 4.84171 8.54882 4.64645 8.35355L2.64645 6.35355C2.45118 6.15829 2.45118 5.84171 2.64645 5.64645C2.84171 5.45118 3.15829 5.45118 3.35355 5.64645L5 7.29289L9.14645 3.14645C9.34171 2.95118 9.65829 2.95118 9.85355 3.14645Z' />
|
|
27
|
-
</svg>`;
|
|
28
|
-
|
|
29
|
-
return (
|
|
30
|
-
<Slots.root {...mergedProps}>
|
|
31
|
-
<Slots.checkmark xml={chevronXml} />
|
|
32
|
-
{mergedProps.content && <Slots.content>{mergedProps.content}</Slots.content>}
|
|
33
|
-
</Slots.root>
|
|
34
|
-
);
|
|
35
|
-
};
|
|
28
|
+
return menuItemFinalRender(menuItem, Slots);
|
|
36
29
|
},
|
|
37
30
|
});
|
|
31
|
+
|
|
32
|
+
export const menuItemFinalRender = (
|
|
33
|
+
menuItem: MenuItemCheckboxState,
|
|
34
|
+
Slots: Slots<MenuItemCheckboxSlotProps>,
|
|
35
|
+
): React.FunctionComponent<MenuItemCheckboxProps> => {
|
|
36
|
+
return (final: MenuItemCheckboxProps) => {
|
|
37
|
+
const mergedProps = mergeProps(menuItem.props, final);
|
|
38
|
+
const checkmarkXml = `
|
|
39
|
+
<svg>
|
|
40
|
+
<path fill='currentColor' d='M9.85355 3.14645C10.0488 3.34171 10.0488 3.65829 9.85355 3.85355L5.35355 8.35355C5.15829 8.54882 4.84171 8.54882 4.64645 8.35355L2.64645 6.35355C2.45118 6.15829 2.45118 5.84171 2.64645 5.64645C2.84171 5.45118 3.15829 5.45118 3.35355 5.64645L5 7.29289L9.14645 3.14645C9.34171 2.95118 9.65829 2.95118 9.85355 3.14645Z' />
|
|
41
|
+
</svg>`;
|
|
42
|
+
|
|
43
|
+
return (
|
|
44
|
+
<Slots.root {...mergedProps}>
|
|
45
|
+
<Slots.checkmark xml={checkmarkXml} />
|
|
46
|
+
{mergedProps.content && <Slots.content>{mergedProps.content}</Slots.content>}
|
|
47
|
+
</Slots.root>
|
|
48
|
+
);
|
|
49
|
+
};
|
|
50
|
+
};
|
|
@@ -14,7 +14,41 @@ import { useMenuListContext } from '../context/menuListContext';
|
|
|
14
14
|
const defaultAccessibilityActions = [{ name: 'Toggle' }];
|
|
15
15
|
|
|
16
16
|
export const useMenuItemCheckbox = (props: MenuItemCheckboxProps): MenuItemCheckboxState => {
|
|
17
|
-
|
|
17
|
+
const { name } = props;
|
|
18
|
+
const context = useMenuListContext();
|
|
19
|
+
const checked = context.checked?.[name];
|
|
20
|
+
const onCheckedChange = context.onCheckedChange;
|
|
21
|
+
|
|
22
|
+
const toggleChecked = React.useCallback(
|
|
23
|
+
(e: InteractionEvent) => {
|
|
24
|
+
onCheckedChange(e, name, !checked);
|
|
25
|
+
},
|
|
26
|
+
[checked, name, onCheckedChange],
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
return useMenuCheckboxInteraction(props, toggleChecked);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const getAccessibilityState = memoize(getAccessibilityStateWorker);
|
|
33
|
+
function getAccessibilityStateWorker(disabled: boolean, checked: boolean, accessibilityState?: AccessibilityState) {
|
|
34
|
+
if (accessibilityState) {
|
|
35
|
+
return { disabled, checked, ...accessibilityState };
|
|
36
|
+
}
|
|
37
|
+
return { disabled, checked };
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Create interactivity and accessibility props to be passed into the inner render.
|
|
42
|
+
* This logic is shared between Checkbox and Radio versions of MenuItem.
|
|
43
|
+
*
|
|
44
|
+
* @param props Props passed into the outer compoennt
|
|
45
|
+
* @param toggleCallback Function to be called when item is toggled
|
|
46
|
+
* @returns Props and additional state needed to render the component
|
|
47
|
+
*/
|
|
48
|
+
export const useMenuCheckboxInteraction = (
|
|
49
|
+
props: MenuItemCheckboxProps,
|
|
50
|
+
toggleCallback: (e: InteractionEvent) => void,
|
|
51
|
+
): MenuItemCheckboxState => {
|
|
18
52
|
const defaultComponentRef = React.useRef(null);
|
|
19
53
|
const {
|
|
20
54
|
accessibilityActions,
|
|
@@ -27,32 +61,25 @@ export const useMenuItemCheckbox = (props: MenuItemCheckboxProps): MenuItemCheck
|
|
|
27
61
|
} = props;
|
|
28
62
|
const context = useMenuListContext();
|
|
29
63
|
const checked = context.checked?.[name];
|
|
30
|
-
const onCheckedChange = context.onCheckedChange;
|
|
31
64
|
|
|
32
|
-
const toggleChecked = React.useCallback(
|
|
33
|
-
(e: InteractionEvent) => {
|
|
34
|
-
onCheckedChange(e, name, !checked);
|
|
35
|
-
},
|
|
36
|
-
[checked, name, onCheckedChange],
|
|
37
|
-
);
|
|
38
65
|
// Ensure focus is placed on checkbox after click
|
|
39
|
-
const toggleCheckedWithFocus = useOnPressWithFocus(componentRef,
|
|
66
|
+
const toggleCheckedWithFocus = useOnPressWithFocus(componentRef, toggleCallback);
|
|
40
67
|
|
|
41
68
|
const pressable = useAsPressable({ onPress: toggleCheckedWithFocus, ...rest });
|
|
42
69
|
const buttonRef = useViewCommandFocus(componentRef);
|
|
43
70
|
|
|
44
|
-
const onKeyProps = useKeyProps(
|
|
71
|
+
const onKeyProps = useKeyProps(toggleCallback, ' ');
|
|
45
72
|
const accessibilityActionsProp = accessibilityActions
|
|
46
73
|
? [...defaultAccessibilityActions, ...accessibilityActions]
|
|
47
74
|
: defaultAccessibilityActions;
|
|
48
75
|
const onAccessibilityActionProp = React.useCallback(
|
|
49
76
|
(event: AccessibilityActionEvent) => {
|
|
50
77
|
if (event.nativeEvent.actionName === 'Toggle') {
|
|
51
|
-
|
|
78
|
+
toggleCallback(event);
|
|
52
79
|
}
|
|
53
80
|
onAccessibilityAction && onAccessibilityAction(event);
|
|
54
81
|
},
|
|
55
|
-
[
|
|
82
|
+
[toggleCallback, onAccessibilityAction],
|
|
56
83
|
);
|
|
57
84
|
|
|
58
85
|
const state = {
|
|
@@ -78,11 +105,3 @@ export const useMenuItemCheckbox = (props: MenuItemCheckboxProps): MenuItemCheck
|
|
|
78
105
|
state: state,
|
|
79
106
|
};
|
|
80
107
|
};
|
|
81
|
-
|
|
82
|
-
const getAccessibilityState = memoize(getAccessibilityStateWorker);
|
|
83
|
-
function getAccessibilityStateWorker(disabled: boolean, checked: boolean, accessibilityState?: AccessibilityState) {
|
|
84
|
-
if (accessibilityState) {
|
|
85
|
-
return { disabled, checked, ...accessibilityState };
|
|
86
|
-
}
|
|
87
|
-
return { disabled, checked };
|
|
88
|
-
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { UseSlots } from '@fluentui-react-native/framework';
|
|
2
|
+
import { useMenuItemRadio } from './useMenuItemRadio';
|
|
3
|
+
import { MenuItemCheckbox, menuItemFinalRender } from '../MenuItemCheckbox/MenuItemCheckbox';
|
|
4
|
+
import { MenuItemCheckboxProps, MenuItemCheckboxType } from '../MenuItemCheckbox/MenuItemCheckbox.types';
|
|
5
|
+
|
|
6
|
+
export const menuItemRadioName = 'MenuItemRadio';
|
|
7
|
+
|
|
8
|
+
export const MenuItemRadio = MenuItemCheckbox.compose({
|
|
9
|
+
displayName: menuItemRadioName,
|
|
10
|
+
useRender: (userProps: MenuItemCheckboxProps, useSlots: UseSlots<MenuItemCheckboxType>) => {
|
|
11
|
+
const menuItem = useMenuItemRadio(userProps);
|
|
12
|
+
const Slots = useSlots(userProps, (layer): boolean => menuItem.state[layer]);
|
|
13
|
+
|
|
14
|
+
return menuItemFinalRender(menuItem, Slots);
|
|
15
|
+
},
|
|
16
|
+
});
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { InteractionEvent } from '@fluentui-react-native/interactive-hooks';
|
|
3
|
+
import { useMenuListContext } from '../context/menuListContext';
|
|
4
|
+
import { MenuItemCheckboxProps, MenuItemCheckboxState } from '../MenuItemCheckbox/MenuItemCheckbox.types';
|
|
5
|
+
import { useMenuCheckboxInteraction } from '../MenuItemCheckbox/useMenuItemCheckbox';
|
|
6
|
+
|
|
7
|
+
export const useMenuItemRadio = (props: MenuItemCheckboxProps): MenuItemCheckboxState => {
|
|
8
|
+
const { name } = props;
|
|
9
|
+
const context = useMenuListContext();
|
|
10
|
+
const checked = context.checked?.[name];
|
|
11
|
+
const selectRadio = context.selectRadio;
|
|
12
|
+
|
|
13
|
+
const toggleChecked = React.useCallback(
|
|
14
|
+
(e: InteractionEvent) => {
|
|
15
|
+
selectRadio(e, name, !checked);
|
|
16
|
+
},
|
|
17
|
+
[checked, name, selectRadio],
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
return useMenuCheckboxInteraction(props, toggleChecked);
|
|
21
|
+
};
|
|
@@ -13,8 +13,9 @@ export const stylingSettings: UseStylingOptions<MenuListProps, MenuListSlotProps
|
|
|
13
13
|
display: 'flex',
|
|
14
14
|
...layoutStyles.from(tokens, theme),
|
|
15
15
|
},
|
|
16
|
+
gap: tokens.gap,
|
|
16
17
|
}),
|
|
17
|
-
['backgroundColor', ...layoutStyles.keys],
|
|
18
|
+
['backgroundColor', 'gap', ...layoutStyles.keys],
|
|
18
19
|
),
|
|
19
20
|
},
|
|
20
21
|
};
|
|
@@ -1,18 +1,38 @@
|
|
|
1
1
|
/** @jsx withSlots */
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { View } from 'react-native';
|
|
4
|
-
import { compose, UseSlots, withSlots } from '@fluentui-react-native/framework';
|
|
4
|
+
import { compose, mergeProps, stagedComponent, UseSlots, withSlots } from '@fluentui-react-native/framework';
|
|
5
5
|
import { menuListName, MenuListProps, MenuListType } from './MenuList.types';
|
|
6
6
|
import { stylingSettings } from './MenuList.styling';
|
|
7
7
|
import { MenuListProvider } from '../context/menuListContext';
|
|
8
8
|
import { useMenuList } from './useMenuList';
|
|
9
|
-
import { useMenuListContextValue } from './
|
|
9
|
+
import { useMenuListContextValue } from './useMenuListContextValue';
|
|
10
|
+
import { IViewProps } from '@fluentui-react-native/adapters';
|
|
11
|
+
|
|
12
|
+
const MenuStack = stagedComponent((props: React.PropsWithRef<IViewProps> & { gap?: number }) => {
|
|
13
|
+
const { gap, ...rest } = props;
|
|
14
|
+
return (final: React.PropsWithRef<IViewProps> & { gap?: number }, children: React.ReactNode) => {
|
|
15
|
+
if (gap && gap > 0 && children) {
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
17
|
+
// @ts-ignore - GH:1684, fix typing error
|
|
18
|
+
children = React.Children.map(children, (child: React.ReactChild, index: number) => {
|
|
19
|
+
if (React.isValidElement(child) && index > 0) {
|
|
20
|
+
return React.cloneElement(child, mergeProps(child.props, { style: { marginTop: gap } }));
|
|
21
|
+
}
|
|
22
|
+
return child;
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return <View {...mergeProps(rest, final)}>{children}</View>;
|
|
27
|
+
};
|
|
28
|
+
});
|
|
29
|
+
MenuStack.displayName = 'MenuStack';
|
|
10
30
|
|
|
11
31
|
export const MenuList = compose<MenuListType>({
|
|
12
32
|
displayName: menuListName,
|
|
13
33
|
...stylingSettings,
|
|
14
34
|
slots: {
|
|
15
|
-
root:
|
|
35
|
+
root: MenuStack,
|
|
16
36
|
},
|
|
17
37
|
useRender: (userProps: MenuListProps, useSlots: UseSlots<MenuListType>) => {
|
|
18
38
|
const menuList = useMenuList(userProps);
|
|
@@ -28,5 +48,3 @@ export const MenuList = compose<MenuListType>({
|
|
|
28
48
|
};
|
|
29
49
|
},
|
|
30
50
|
});
|
|
31
|
-
|
|
32
|
-
export default MenuList;
|