@fluentui-react-native/menu 0.11.0 → 0.13.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 +52 -1
- package/CHANGELOG.md +27 -2
- package/lib/MenuItem/MenuItem.js +1 -1
- package/lib/MenuItem/MenuItem.js.map +1 -1
- package/lib/MenuItem/useMenuItem.d.ts.map +1 -1
- package/lib/MenuItem/useMenuItem.js +34 -6
- package/lib/MenuItem/useMenuItem.js.map +1 -1
- package/lib/MenuItemCheckbox/MenuItemCheckbox.js +1 -1
- package/lib/MenuItemCheckbox/MenuItemCheckbox.js.map +1 -1
- package/lib/MenuItemCheckbox/useMenuItemCheckbox.d.ts.map +1 -1
- package/lib/MenuItemCheckbox/useMenuItemCheckbox.js +12 -8
- package/lib/MenuItemCheckbox/useMenuItemCheckbox.js.map +1 -1
- package/lib/MenuItemRadio/useMenuItemRadio.d.ts.map +1 -1
- package/lib/MenuItemRadio/useMenuItemRadio.js +5 -3
- package/lib/MenuItemRadio/useMenuItemRadio.js.map +1 -1
- package/lib/MenuPopover/MenuPopover.d.ts +1 -2
- 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 -4
- package/lib/MenuPopover/MenuPopover.types.d.ts.map +1 -1
- package/lib/MenuPopover/useMenuPopover.d.ts.map +1 -1
- package/lib/MenuPopover/useMenuPopover.js +2 -1
- package/lib/MenuPopover/useMenuPopover.js.map +1 -1
- package/lib/MenuTrigger/MenuTrigger.d.ts.map +1 -1
- package/lib/MenuTrigger/MenuTrigger.js +24 -2
- package/lib/MenuTrigger/MenuTrigger.js.map +1 -1
- package/lib/MenuTrigger/MenuTrigger.types.d.ts +3 -0
- package/lib/MenuTrigger/MenuTrigger.types.d.ts.map +1 -1
- package/lib/MenuTrigger/useMenuTrigger.d.ts.map +1 -1
- package/lib/MenuTrigger/useMenuTrigger.js +26 -1
- package/lib/MenuTrigger/useMenuTrigger.js.map +1 -1
- package/lib-commonjs/MenuItem/MenuItem.js +1 -1
- package/lib-commonjs/MenuItem/MenuItem.js.map +1 -1
- package/lib-commonjs/MenuItem/useMenuItem.d.ts.map +1 -1
- package/lib-commonjs/MenuItem/useMenuItem.js +32 -4
- package/lib-commonjs/MenuItem/useMenuItem.js.map +1 -1
- package/lib-commonjs/MenuItemCheckbox/MenuItemCheckbox.js +1 -1
- package/lib-commonjs/MenuItemCheckbox/MenuItemCheckbox.js.map +1 -1
- package/lib-commonjs/MenuItemCheckbox/useMenuItemCheckbox.d.ts.map +1 -1
- package/lib-commonjs/MenuItemCheckbox/useMenuItemCheckbox.js +12 -8
- package/lib-commonjs/MenuItemCheckbox/useMenuItemCheckbox.js.map +1 -1
- package/lib-commonjs/MenuItemRadio/useMenuItemRadio.d.ts.map +1 -1
- package/lib-commonjs/MenuItemRadio/useMenuItemRadio.js +5 -3
- package/lib-commonjs/MenuItemRadio/useMenuItemRadio.js.map +1 -1
- package/lib-commonjs/MenuPopover/MenuPopover.d.ts +1 -2
- 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 -4
- 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 +2 -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 +22 -1
- package/lib-commonjs/MenuTrigger/MenuTrigger.js.map +1 -1
- package/lib-commonjs/MenuTrigger/MenuTrigger.types.d.ts +3 -0
- package/lib-commonjs/MenuTrigger/MenuTrigger.types.d.ts.map +1 -1
- package/lib-commonjs/MenuTrigger/useMenuTrigger.d.ts.map +1 -1
- package/lib-commonjs/MenuTrigger/useMenuTrigger.js +27 -1
- package/lib-commonjs/MenuTrigger/useMenuTrigger.js.map +1 -1
- package/package.json +3 -3
- package/src/MenuItem/MenuItem.tsx +1 -1
- package/src/MenuItem/useMenuItem.ts +49 -9
- package/src/MenuItemCheckbox/MenuItemCheckbox.tsx +1 -1
- package/src/MenuItemCheckbox/useMenuItemCheckbox.ts +13 -9
- package/src/MenuItemRadio/useMenuItemRadio.ts +5 -3
- package/src/MenuPopover/MenuPopover.tsx +1 -0
- package/src/MenuPopover/MenuPopover.types.ts +4 -3
- package/src/MenuPopover/useMenuPopover.ts +2 -1
- package/src/MenuTrigger/MenuTrigger.tsx +29 -3
- package/src/MenuTrigger/MenuTrigger.types.ts +3 -0
- package/src/MenuTrigger/useMenuTrigger.ts +33 -2
|
@@ -3,22 +3,50 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.useMenuItem = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var React = (0, tslib_1.__importStar)(require("react"));
|
|
6
|
+
var react_native_1 = require("react-native");
|
|
6
7
|
var framework_1 = require("@fluentui-react-native/framework");
|
|
7
8
|
var interactive_hooks_1 = require("@fluentui-react-native/interactive-hooks");
|
|
8
9
|
var menuContext_1 = require("../context/menuContext");
|
|
9
10
|
var menuListContext_1 = require("../context/menuListContext");
|
|
10
11
|
var menuTriggerContext_1 = require("../context/menuTriggerContext");
|
|
12
|
+
var triggerKeys = [' ', 'Enter'];
|
|
13
|
+
var submenuTriggerKeys = (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], triggerKeys, true), ['ArrowLeft', 'ArrowRight'], false);
|
|
11
14
|
var useMenuItem = function (props) {
|
|
12
15
|
// attach the pressable state handlers
|
|
13
16
|
var defaultComponentRef = React.useRef(null);
|
|
14
17
|
var onClick = props.onClick, accessibilityState = props.accessibilityState, _a = props.componentRef, componentRef = _a === void 0 ? defaultComponentRef : _a, disabled = props.disabled, rest = (0, tslib_1.__rest)(props, ["onClick", "accessibilityState", "componentRef", "disabled"]);
|
|
15
|
-
var pressable = (0, interactive_hooks_1.useAsPressable)((0, tslib_1.__assign)((0, tslib_1.__assign)({}, rest), { disabled: disabled, onPress: onClick }));
|
|
16
|
-
var onKeyProps = (0, interactive_hooks_1.useKeyProps)(onClick, ' ', 'Enter');
|
|
17
18
|
var isTrigger = (0, menuTriggerContext_1.useMenuTriggerContext)();
|
|
18
|
-
var
|
|
19
|
+
var isSubmenu = (0, menuContext_1.useMenuContext)().isSubmenu;
|
|
20
|
+
var hasSubmenu = isSubmenu && isTrigger;
|
|
21
|
+
var isInSubmenu = isSubmenu && !isTrigger;
|
|
22
|
+
var setOpen = (0, menuContext_1.useMenuContext)().setOpen;
|
|
23
|
+
var onInvoke = React.useCallback(function (e) {
|
|
24
|
+
if (disabled) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
var isRtl = react_native_1.I18nManager.isRTL;
|
|
28
|
+
if ((0, interactive_hooks_1.isKeyPressEvent)(e) &&
|
|
29
|
+
hasSubmenu &&
|
|
30
|
+
((isRtl && e.nativeEvent.key === 'ArrowRight') || (!isRtl && e.nativeEvent.key === 'ArrowLeft'))) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if ((0, interactive_hooks_1.isKeyPressEvent)(e) &&
|
|
34
|
+
isInSubmenu &&
|
|
35
|
+
((isRtl && e.nativeEvent.key === 'ArrowLeft') || (!isRtl && e.nativeEvent.key === 'ArrowRight'))) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
onClick === null || onClick === void 0 ? void 0 : onClick(e);
|
|
39
|
+
if (!hasSubmenu) {
|
|
40
|
+
setOpen(e, false /*isOpen*/);
|
|
41
|
+
}
|
|
42
|
+
}, [disabled, hasSubmenu, isInSubmenu, onClick, setOpen]);
|
|
43
|
+
var pressable = (0, interactive_hooks_1.useAsPressable)((0, tslib_1.__assign)((0, tslib_1.__assign)({}, rest), { disabled: disabled, onPress: onInvoke }));
|
|
44
|
+
var keys = isSubmenu ? submenuTriggerKeys : triggerKeys;
|
|
45
|
+
// Explicitly override onKeyDown to override the native behavior of moving focus with arrow keys.
|
|
46
|
+
var onKeyDownProps = interactive_hooks_1.useKeyDownProps.apply(void 0, (0, tslib_1.__spreadArray)([onInvoke], keys, false));
|
|
19
47
|
var hasCheckmarks = (0, menuListContext_1.useMenuListContext)().hasCheckmarks;
|
|
20
48
|
return {
|
|
21
|
-
props: (0, tslib_1.__assign)((0, tslib_1.__assign)((0, tslib_1.__assign)({}, pressable.props), { accessible: true, accessibilityRole: 'menuitem', onAccessibilityTap: props.onAccessibilityTap ||
|
|
49
|
+
props: (0, tslib_1.__assign)((0, tslib_1.__assign)((0, tslib_1.__assign)({}, pressable.props), { accessible: true, accessibilityRole: 'menuitem', onAccessibilityTap: props.onAccessibilityTap || onInvoke, accessibilityLabel: props.accessibilityLabel || props.content, accessibilityState: getAccessibilityState(disabled, accessibilityState), enableFocusRing: true, focusable: true, ref: componentRef }), onKeyDownProps),
|
|
22
50
|
state: pressable.state,
|
|
23
51
|
hasSubmenu: hasSubmenu,
|
|
24
52
|
hasCheckmarks: hasCheckmarks,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMenuItem.js","sourceRoot":"","sources":["../../src/MenuItem/useMenuItem.ts"],"names":[],"mappings":";;;;AAAA,wDAA+B;
|
|
1
|
+
{"version":3,"file":"useMenuItem.js","sourceRoot":"","sources":["../../src/MenuItem/useMenuItem.ts"],"names":[],"mappings":";;;;AAAA,wDAA+B;AAC/B,6CAA+D;AAE/D,8DAA2D;AAC3D,8EAA8H;AAC9H,sDAAwD;AACxD,8DAAgE;AAChE,oEAAsE;AAEtE,IAAM,WAAW,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AACnC,IAAM,kBAAkB,6DAAO,WAAW,UAAE,WAAW,EAAE,YAAY,SAAC,CAAC;AAEhE,IAAM,WAAW,GAAG,UAAC,KAAoB;IAC9C,sCAAsC;IACtC,IAAM,mBAAmB,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvC,IAAA,OAAO,GAAgF,KAAK,QAArF,EAAE,kBAAkB,GAA4D,KAAK,mBAAjE,EAAE,KAA0D,KAAK,aAA7B,EAAlC,YAAY,mBAAG,mBAAmB,KAAA,EAAE,QAAQ,GAAc,KAAK,SAAnB,EAAK,IAAI,uBAAK,KAAK,EAA9F,6DAAsF,CAAF,CAAW;IACrG,IAAM,SAAS,GAAG,IAAA,0CAAqB,GAAE,CAAC;IAC1C,IAAM,SAAS,GAAG,IAAA,4BAAc,GAAE,CAAC,SAAS,CAAC;IAC7C,IAAM,UAAU,GAAG,SAAS,IAAI,SAAS,CAAC;IAC1C,IAAM,WAAW,GAAG,SAAS,IAAI,CAAC,SAAS,CAAC;IAE5C,IAAM,OAAO,GAAG,IAAA,4BAAc,GAAE,CAAC,OAAO,CAAC;IACzC,IAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAChC,UAAC,CAAmB;QAClB,IAAI,QAAQ,EAAE;YACZ,OAAO;SACR;QAED,IAAM,KAAK,GAAG,0BAAW,CAAC,KAAK,CAAC;QAChC,IACE,IAAA,mCAAe,EAAC,CAAC,CAAC;YAClB,UAAU;YACV,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,WAAW,CAAC,GAAG,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,WAAW,CAAC,GAAG,KAAK,WAAW,CAAC,CAAC,EAChG;YACA,OAAO;SACR;QACD,IACE,IAAA,mCAAe,EAAC,CAAC,CAAC;YAClB,WAAW;YACX,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,WAAW,CAAC,GAAG,KAAK,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,WAAW,CAAC,GAAG,KAAK,YAAY,CAAC,CAAC,EAChG;YACA,OAAO;SACR;QAED,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,CAAC,CAAC,CAAC;QACb,IAAI,CAAC,UAAU,EAAE;YACf,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;SAC9B;IACH,CAAC,EACD,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CACtD,CAAC;IAEF,IAAM,SAAS,GAAG,IAAA,kCAAc,kDAAM,IAAI,KAAE,QAAQ,UAAA,EAAE,OAAO,EAAE,QAAQ,IAAG,CAAC;IAC3E,IAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,WAAW,CAAC;IAE1D,iGAAiG;IACjG,IAAM,cAAc,GAAG,mCAAe,2CAAC,QAAQ,GAAK,IAAI,SAAC,CAAC;IAC1D,IAAM,aAAa,GAAG,IAAA,oCAAkB,GAAE,CAAC,aAAa,CAAC;IAEzD,OAAO;QACL,KAAK,wEACA,SAAS,CAAC,KAAK,KAClB,UAAU,EAAE,IAAI,EAChB,iBAAiB,EAAE,UAAU,EAC7B,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,IAAI,QAAQ,EACxD,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,OAAO,EAC7D,kBAAkB,EAAE,qBAAqB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,EACvE,eAAe,EAAE,IAAI,EACrB,SAAS,EAAE,IAAI,EACf,GAAG,EAAE,YAAY,KACd,cAAc,CAClB;QACD,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,UAAU,YAAA;QACV,aAAa,eAAA;KACd,CAAC;AACJ,CAAC,CAAC;AAhEW,QAAA,WAAW,eAgEtB;AAEF,IAAM,qBAAqB,GAAG,IAAA,mBAAO,EAAC,2BAA2B,CAAC,CAAC;AACnE,SAAS,2BAA2B,CAAC,QAAiB,EAAE,kBAAuC;IAC7F,IAAI,kBAAkB,EAAE;QACtB,+BAAS,QAAQ,UAAA,IAAK,kBAAkB,EAAG;KAC5C;IACD,OAAO,EAAE,QAAQ,UAAA,EAAE,CAAC;AACtB,CAAC"}
|
|
@@ -16,7 +16,7 @@ exports.MenuItemCheckbox = (0, framework_1.compose)((0, tslib_1.__assign)((0, ts
|
|
|
16
16
|
content: experimental_text_1.Text,
|
|
17
17
|
}, useRender: function (userProps, useSlots) {
|
|
18
18
|
var menuItem = (0, useMenuItemCheckbox_1.useMenuItemCheckbox)(userProps);
|
|
19
|
-
var Slots = useSlots(userProps, function (layer) { return menuItem.state[layer]; });
|
|
19
|
+
var Slots = useSlots(userProps, function (layer) { return menuItem.state[layer] || userProps[layer]; });
|
|
20
20
|
return (0, exports.menuItemFinalRender)(menuItem, Slots);
|
|
21
21
|
} }));
|
|
22
22
|
var menuItemFinalRender = function (menuItem, Slots) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuItemCheckbox.js","sourceRoot":"","sources":["../../src/MenuItemCheckbox/MenuItemCheckbox.tsx"],"names":[],"mappings":";;;;AAAA,qBAAqB;AACrB,6CAAoC;AACpC,qDAA0C;AAC1C,8DAAmG;AACnG,8EAAgE;AAChE,mEAMkC;AAClC,6DAA4D;AAC5D,uEAA6D;AAEhD,QAAA,gBAAgB,GAAG,IAAA,mBAAO,gDACrC,WAAW,EAAE,6CAAoB,IAC9B,0CAAe,KAClB,KAAK,EAAE;QACL,IAAI,EAAE,mBAAI;QACV,SAAS,EAAE,yBAAM;QACjB,OAAO,EAAE,wBAAI;KACd,EACD,SAAS,EAAE,UAAC,SAAgC,EAAE,QAAwC;QACpF,IAAM,QAAQ,GAAG,IAAA,yCAAmB,EAAC,SAAS,CAAC,CAAC;QAChD,IAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,EAAE,UAAC,KAAK,IAAc,OAAA,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"MenuItemCheckbox.js","sourceRoot":"","sources":["../../src/MenuItemCheckbox/MenuItemCheckbox.tsx"],"names":[],"mappings":";;;;AAAA,qBAAqB;AACrB,6CAAoC;AACpC,qDAA0C;AAC1C,8DAAmG;AACnG,8EAAgE;AAChE,mEAMkC;AAClC,6DAA4D;AAC5D,uEAA6D;AAEhD,QAAA,gBAAgB,GAAG,IAAA,mBAAO,gDACrC,WAAW,EAAE,6CAAoB,IAC9B,0CAAe,KAClB,KAAK,EAAE;QACL,IAAI,EAAE,mBAAI;QACV,SAAS,EAAE,yBAAM;QACjB,OAAO,EAAE,wBAAI;KACd,EACD,SAAS,EAAE,UAAC,SAAgC,EAAE,QAAwC;QACpF,IAAM,QAAQ,GAAG,IAAA,yCAAmB,EAAC,SAAS,CAAC,CAAC;QAChD,IAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,EAAE,UAAC,KAAK,IAAc,OAAA,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,EAAzC,CAAyC,CAAC,CAAC;QAEjG,OAAO,IAAA,2BAAmB,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC,IACD,CAAC;AAEI,IAAM,mBAAmB,GAAG,UACjC,QAA+B,EAC/B,KAAuC;IAEvC,OAAO,UAAC,KAA4B;QAClC,IAAM,WAAW,GAAG,IAAA,sBAAU,EAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACtD,IAAM,YAAY,GAAG,6XAGd,CAAC;QAER,OAAO,CACL,2BAAC,KAAK,CAAC,IAAI,4BAAK,WAAW;YACzB,2BAAC,KAAK,CAAC,SAAS,IAAC,GAAG,EAAE,YAAY,GAAI;YACrC,WAAW,CAAC,OAAO,IAAI,2BAAC,KAAK,CAAC,OAAO,QAAE,WAAW,CAAC,OAAO,CAAiB,CACjE,CACd,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC,CAAC;AAlBW,QAAA,mBAAmB,uBAkB9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMenuItemCheckbox.d.ts","sourceRoot":"","sources":["../../src/MenuItemCheckbox/useMenuItemCheckbox.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAExF,OAAO,EACL,gBAAgB,EAKjB,MAAM,0CAA0C,CAAC;AAKlD,eAAO,MAAM,mBAAmB,UAAW,qBAAqB,KAAG,
|
|
1
|
+
{"version":3,"file":"useMenuItemCheckbox.d.ts","sourceRoot":"","sources":["../../src/MenuItemCheckbox/useMenuItemCheckbox.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAExF,OAAO,EACL,gBAAgB,EAKjB,MAAM,0CAA0C,CAAC;AAKlD,eAAO,MAAM,mBAAmB,UAAW,qBAAqB,KAAG,qBAgBlE,CAAC;AAUF;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,UAC9B,qBAAqB,sBACR,gBAAgB,KAAK,IAAI,KAC5C,qBA0DF,CAAC"}
|
|
@@ -9,13 +9,15 @@ var menuListContext_1 = require("../context/menuListContext");
|
|
|
9
9
|
var defaultAccessibilityActions = [{ name: 'Toggle' }];
|
|
10
10
|
var useMenuItemCheckbox = function (props) {
|
|
11
11
|
var _a;
|
|
12
|
-
var name = props.name;
|
|
12
|
+
var disabled = props.disabled, name = props.name;
|
|
13
13
|
var context = (0, menuListContext_1.useMenuListContext)();
|
|
14
14
|
var checked = (_a = context.checked) === null || _a === void 0 ? void 0 : _a[name];
|
|
15
15
|
var onCheckedChange = context.onCheckedChange;
|
|
16
16
|
var toggleChecked = React.useCallback(function (e) {
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
if (!disabled) {
|
|
18
|
+
onCheckedChange(e, name, !checked);
|
|
19
|
+
}
|
|
20
|
+
}, [checked, disabled, name, onCheckedChange]);
|
|
19
21
|
return (0, exports.useMenuCheckboxInteraction)(props, toggleChecked);
|
|
20
22
|
};
|
|
21
23
|
exports.useMenuItemCheckbox = useMenuItemCheckbox;
|
|
@@ -48,14 +50,16 @@ var useMenuCheckboxInteraction = function (props, toggleCallback) {
|
|
|
48
50
|
var accessibilityActionsProp = accessibilityActions
|
|
49
51
|
? (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], defaultAccessibilityActions, true), accessibilityActions, true) : defaultAccessibilityActions;
|
|
50
52
|
var onAccessibilityActionProp = React.useCallback(function (event) {
|
|
51
|
-
if (
|
|
52
|
-
|
|
53
|
+
if (!disabled) {
|
|
54
|
+
if (event.nativeEvent.actionName === 'Toggle') {
|
|
55
|
+
toggleCallback(event);
|
|
56
|
+
}
|
|
57
|
+
onAccessibilityAction && onAccessibilityAction(event);
|
|
53
58
|
}
|
|
54
|
-
|
|
55
|
-
}, [toggleCallback, onAccessibilityAction]);
|
|
59
|
+
}, [disabled, toggleCallback, onAccessibilityAction]);
|
|
56
60
|
var state = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, pressable.state), { disabled: !!props.disabled, checked: checked });
|
|
57
61
|
return {
|
|
58
|
-
props: (0, tslib_1.__assign)((0, tslib_1.__assign)((0, tslib_1.__assign)({}, pressable.props), { accessible: true, accessibilityActions: accessibilityActionsProp, accessibilityLabel: props.accessibilityLabel, accessibilityRole: 'menuitem', accessibilityState: getAccessibilityState(disabled, state.checked, accessibilityState), enableFocusRing: true, focusable:
|
|
62
|
+
props: (0, tslib_1.__assign)((0, tslib_1.__assign)((0, tslib_1.__assign)({}, pressable.props), { accessible: true, accessibilityActions: accessibilityActionsProp, accessibilityLabel: props.accessibilityLabel || props.content, accessibilityRole: 'menuitem', accessibilityState: getAccessibilityState(disabled, state.checked, accessibilityState), enableFocusRing: true, focusable: true, onAccessibilityAction: onAccessibilityActionProp, ref: buttonRef }), onKeyProps),
|
|
59
63
|
state: state,
|
|
60
64
|
};
|
|
61
65
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMenuItemCheckbox.js","sourceRoot":"","sources":["../../src/MenuItemCheckbox/useMenuItemCheckbox.ts"],"names":[],"mappings":";;;;AAAA,wDAA+B;AAG/B,8DAA2D;AAC3D,8EAMkD;AAClD,8DAAgE;AAEhE,IAAM,2BAA2B,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;AAElD,IAAM,mBAAmB,GAAG,UAAC,KAA4B;;IACtD,IAAA,IAAI,GAAK,KAAK,KAAV,CAAW;
|
|
1
|
+
{"version":3,"file":"useMenuItemCheckbox.js","sourceRoot":"","sources":["../../src/MenuItemCheckbox/useMenuItemCheckbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMenuItemRadio.d.ts","sourceRoot":"","sources":["../../src/MenuItemRadio/useMenuItemRadio.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAG1G,eAAO,MAAM,gBAAgB,UAAW,qBAAqB,KAAG,
|
|
1
|
+
{"version":3,"file":"useMenuItemRadio.d.ts","sourceRoot":"","sources":["../../src/MenuItemRadio/useMenuItemRadio.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAG1G,eAAO,MAAM,gBAAgB,UAAW,qBAAqB,KAAG,qBAgB/D,CAAC"}
|
|
@@ -7,13 +7,15 @@ var menuListContext_1 = require("../context/menuListContext");
|
|
|
7
7
|
var useMenuItemCheckbox_1 = require("../MenuItemCheckbox/useMenuItemCheckbox");
|
|
8
8
|
var useMenuItemRadio = function (props) {
|
|
9
9
|
var _a;
|
|
10
|
-
var name = props.name;
|
|
10
|
+
var disabled = props.disabled, name = props.name;
|
|
11
11
|
var context = (0, menuListContext_1.useMenuListContext)();
|
|
12
12
|
var checked = (_a = context.checked) === null || _a === void 0 ? void 0 : _a[name];
|
|
13
13
|
var selectRadio = context.selectRadio;
|
|
14
14
|
var toggleChecked = React.useCallback(function (e) {
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
if (!disabled) {
|
|
16
|
+
selectRadio(e, name, !checked);
|
|
17
|
+
}
|
|
18
|
+
}, [checked, disabled, name, selectRadio]);
|
|
17
19
|
return (0, useMenuItemCheckbox_1.useMenuCheckboxInteraction)(props, toggleChecked);
|
|
18
20
|
};
|
|
19
21
|
exports.useMenuItemRadio = useMenuItemRadio;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMenuItemRadio.js","sourceRoot":"","sources":["../../src/MenuItemRadio/useMenuItemRadio.ts"],"names":[],"mappings":";;;;AAAA,wDAA+B;AAE/B,8DAAgE;AAEhE,+EAAqF;AAE9E,IAAM,gBAAgB,GAAG,UAAC,KAA4B;;IACnD,IAAA,IAAI,GAAK,KAAK,KAAV,CAAW;
|
|
1
|
+
{"version":3,"file":"useMenuItemRadio.js","sourceRoot":"","sources":["../../src/MenuItemRadio/useMenuItemRadio.ts"],"names":[],"mappings":";;;;AAAA,wDAA+B;AAE/B,8DAAgE;AAEhE,+EAAqF;AAE9E,IAAM,gBAAgB,GAAG,UAAC,KAA4B;;IACnD,IAAA,QAAQ,GAAW,KAAK,SAAhB,EAAE,IAAI,GAAK,KAAK,KAAV,CAAW;IACjC,IAAM,OAAO,GAAG,IAAA,oCAAkB,GAAE,CAAC;IACrC,IAAM,OAAO,GAAG,MAAA,OAAO,CAAC,OAAO,0CAAG,IAAI,CAAC,CAAC;IACxC,IAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAExC,IAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CACrC,UAAC,CAAmB;QAClB,IAAI,CAAC,QAAQ,EAAE;YACb,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC;SAChC;IACH,CAAC,EACD,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC,CACvC,CAAC;IAEF,OAAO,IAAA,gDAA0B,EAAC,KAAK,EAAE,aAAa,CAAC,CAAC;AAC1D,CAAC,CAAC;AAhBW,QAAA,gBAAgB,oBAgB3B"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
export declare const MenuPopover: import("@fluentui-react-native/framework").ComposableFunction<MenuPopoverProps>;
|
|
1
|
+
export declare const MenuPopover: import("@fluentui-react-native/framework").ComposableFunction<import("@fluentui-react-native/callout").ICalloutProps>;
|
|
3
2
|
export default MenuPopover;
|
|
4
3
|
//# sourceMappingURL=MenuPopover.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuPopover.d.ts","sourceRoot":"","sources":["../../src/MenuPopover/MenuPopover.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MenuPopover.d.ts","sourceRoot":"","sources":["../../src/MenuPopover/MenuPopover.tsx"],"names":[],"mappings":"AAMA,eAAO,MAAM,WAAW,uHAqBtB,CAAC;AAGH,eAAe,WAAW,CAAC"}
|
|
@@ -11,7 +11,7 @@ exports.MenuPopover = (0, framework_1.stagedComponent)(function (props) {
|
|
|
11
11
|
var state = (0, useMenuPopover_1.useMenuPopover)(props);
|
|
12
12
|
var theme = (0, framework_1.useFluentTheme)();
|
|
13
13
|
return function (_rest, children) {
|
|
14
|
-
return (react_1.default.createElement(callout_1.Callout, { borderWidth: 1, borderColor: theme.colors.neutralStrokeAccessible, target: state.triggerRef, onDismiss: state.onDismiss, dismissBehaviors: state.dismissBehaviors, setInitialFocus: state.setInitialFocus, directionalHint: state.directionalHint, doNotTakePointerCapture: state.doNotTakePointerCapture }, children));
|
|
14
|
+
return (react_1.default.createElement(callout_1.Callout, { accessibilityRole: state.accessibilityRole, borderWidth: 1, borderColor: theme.colors.neutralStrokeAccessible, target: state.triggerRef, onDismiss: state.onDismiss, dismissBehaviors: state.dismissBehaviors, setInitialFocus: state.setInitialFocus, directionalHint: state.directionalHint, doNotTakePointerCapture: state.doNotTakePointerCapture }, children));
|
|
15
15
|
};
|
|
16
16
|
});
|
|
17
17
|
exports.MenuPopover.displayName = MenuPopover_types_1.menuPopoverName;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuPopover.js","sourceRoot":"","sources":["../../src/MenuPopover/MenuPopover.tsx"],"names":[],"mappings":";;;;AAAA,6DAA0B;AAC1B,8DAAmF;AACnF,0DAAyD;AACzD,yDAAwE;AACxE,mDAAkD;AAErC,QAAA,WAAW,GAAG,IAAA,2BAAe,EAAC,UAAC,KAAuB;IACjE,IAAM,KAAK,GAAG,IAAA,+BAAc,EAAC,KAAK,CAAC,CAAC;IACpC,IAAM,KAAK,GAAG,IAAA,0BAAc,GAAE,CAAC;IAE/B,OAAO,UAAC,KAAuB,EAAE,QAAyB;QACxD,OAAO,CACL,8BAAC,iBAAO,IACN,WAAW,EAAE,CAAC,EACd,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,uBAAuB,EACjD,MAAM,EAAE,KAAK,CAAC,UAAU,EACxB,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EACxC,eAAe,EAAE,KAAK,CAAC,eAAe,EACtC,eAAe,EAAE,KAAK,CAAC,eAAe,EACtC,uBAAuB,EAAE,KAAK,CAAC,uBAAuB,IAErD,QAAQ,CACD,CACX,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AACH,mBAAW,CAAC,WAAW,GAAG,mCAAe,CAAC;AAE1C,kBAAe,mBAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"MenuPopover.js","sourceRoot":"","sources":["../../src/MenuPopover/MenuPopover.tsx"],"names":[],"mappings":";;;;AAAA,6DAA0B;AAC1B,8DAAmF;AACnF,0DAAyD;AACzD,yDAAwE;AACxE,mDAAkD;AAErC,QAAA,WAAW,GAAG,IAAA,2BAAe,EAAC,UAAC,KAAuB;IACjE,IAAM,KAAK,GAAG,IAAA,+BAAc,EAAC,KAAK,CAAC,CAAC;IACpC,IAAM,KAAK,GAAG,IAAA,0BAAc,GAAE,CAAC;IAE/B,OAAO,UAAC,KAAuB,EAAE,QAAyB;QACxD,OAAO,CACL,8BAAC,iBAAO,IACN,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAC1C,WAAW,EAAE,CAAC,EACd,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,uBAAuB,EACjD,MAAM,EAAE,KAAK,CAAC,UAAU,EACxB,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EACxC,eAAe,EAAE,KAAK,CAAC,eAAe,EACtC,eAAe,EAAE,KAAK,CAAC,eAAe,EACtC,uBAAuB,EAAE,KAAK,CAAC,uBAAuB,IAErD,QAAQ,CACD,CACX,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AACH,mBAAW,CAAC,WAAW,GAAG,mCAAe,CAAC;AAE1C,kBAAe,mBAAW,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
2
|
+
import { DirectionalHint, DismissBehaviors, ICalloutProps } from '@fluentui-react-native/callout';
|
|
3
|
+
import { AccessibilityRole } from 'react-native';
|
|
4
4
|
export declare const menuPopoverName = "MenuPopover";
|
|
5
|
-
export
|
|
6
|
-
}
|
|
5
|
+
export declare type MenuPopoverProps = ICalloutProps;
|
|
7
6
|
export interface MenuPopoverState {
|
|
7
|
+
accessibilityRole: AccessibilityRole;
|
|
8
8
|
directionalHint?: DirectionalHint;
|
|
9
9
|
dismissBehaviors: DismissBehaviors[];
|
|
10
10
|
doNotTakePointerCapture: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuPopover.types.d.ts","sourceRoot":"","sources":["../../src/MenuPopover/MenuPopover.types.ts"],"names":[],"mappings":";AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"MenuPopover.types.d.ts","sourceRoot":"","sources":["../../src/MenuPopover/MenuPopover.types.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAE7C,oBAAY,gBAAgB,GAAG,aAAa,CAAC;AAE7C,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;IACrC,uBAAuB,EAAE,OAAO,CAAC;IACjC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;CAC9C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMenuPopover.d.ts","sourceRoot":"","sources":["../../src/MenuPopover/useMenuPopover.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,eAAO,MAAM,cAAc,WAAY,gBAAgB,KAAG,
|
|
1
|
+
{"version":3,"file":"useMenuPopover.d.ts","sourceRoot":"","sources":["../../src/MenuPopover/useMenuPopover.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,eAAO,MAAM,cAAc,WAAY,gBAAgB,KAAG,gBAkBzD,CAAC"}
|
|
@@ -18,7 +18,8 @@ var useMenuPopover = function (_props) {
|
|
|
18
18
|
// automatically onto first element of Callout
|
|
19
19
|
var setInitialFocus = react_native_1.Platform.OS === 'win32' || react_native_1.Platform.OS === 'windows';
|
|
20
20
|
var doNotTakePointerCapture = context.openOnHover;
|
|
21
|
-
|
|
21
|
+
var accessibilityRole = 'menu';
|
|
22
|
+
return { accessibilityRole: accessibilityRole, triggerRef: triggerRef, onDismiss: onDismiss, directionalHint: directionalHint, dismissBehaviors: dismissBehaviors, doNotTakePointerCapture: doNotTakePointerCapture, setInitialFocus: setInitialFocus };
|
|
22
23
|
};
|
|
23
24
|
exports.useMenuPopover = useMenuPopover;
|
|
24
25
|
var getDirectionalHint = function (isSubmenu, isRtl) {
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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;IACpD,IAAM,iBAAiB,GAAG,MAAM,CAAC;IAEjC,OAAO,EAAE,iBAAiB,mBAAA,EAAE,UAAU,YAAA,EAAE,SAAS,WAAA,EAAE,eAAe,iBAAA,EAAE,gBAAgB,kBAAA,EAAE,uBAAuB,yBAAA,EAAE,eAAe,iBAAA,EAAE,CAAC;AACnI,CAAC,CAAC;AAlBW,QAAA,cAAc,kBAkBzB;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,
|
|
1
|
+
{"version":3,"file":"MenuTrigger.d.ts","sourceRoot":"","sources":["../../src/MenuTrigger/MenuTrigger.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAmB,gBAAgB,EAAoB,MAAM,qBAAqB,CAAC;AAK1F,eAAO,MAAM,WAAW,iFAqBtB,CAAC;AAwBH,eAAe,WAAW,CAAC"}
|
|
@@ -16,11 +16,32 @@ exports.MenuTrigger = (0, framework_1.stagedComponent)(function (props) {
|
|
|
16
16
|
console.log('Only expecting one child for MenuTrigger');
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
|
+
// In order to properly support accessibility without erasing props set on the
|
|
20
|
+
// child component which may affect accessibility, we need to modify the
|
|
21
|
+
// state in the inner render so we can access the child component and its props.
|
|
19
22
|
var child = childrenArray[0];
|
|
20
|
-
var
|
|
23
|
+
var revisedState = getRevisedState(menuTrigger, child.props);
|
|
24
|
+
var revised = react_1.default.cloneElement(child, revisedState);
|
|
21
25
|
return react_1.default.createElement(menuTriggerContext_1.MenuTriggerProvider, { value: menuTrigger.hasSubmenu }, revised);
|
|
22
26
|
};
|
|
23
27
|
});
|
|
24
28
|
exports.MenuTrigger.displayName = MenuTrigger_types_1.menuTriggerName;
|
|
29
|
+
var getRevisedState = (0, framework_1.memoize)(getRevisedStateWorker);
|
|
30
|
+
function getRevisedStateWorker(state, props) {
|
|
31
|
+
var revisedState = (0, tslib_1.__assign)({}, state);
|
|
32
|
+
if (props.accessibilityState) {
|
|
33
|
+
revisedState.props.accessibilityState = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, state.props.accessibilityState), props.accessibilityState);
|
|
34
|
+
}
|
|
35
|
+
if (props.accessibilityActions) {
|
|
36
|
+
revisedState.props.accessibilityActions = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, state.props.accessibilityActions), props.accessibilityActions);
|
|
37
|
+
}
|
|
38
|
+
if (props.onAccessibilityAction) {
|
|
39
|
+
revisedState.props.onAccessibilityAction = function (e) {
|
|
40
|
+
state.props.onAccessibilityAction(e);
|
|
41
|
+
props.onAccessibilityAction(e);
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
return revisedState;
|
|
45
|
+
}
|
|
25
46
|
exports.default = exports.MenuTrigger;
|
|
26
47
|
//# sourceMappingURL=MenuTrigger.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuTrigger.js","sourceRoot":"","sources":["../../src/MenuTrigger/MenuTrigger.tsx"],"names":[],"mappings":";;;;AAAA,6DAA0B;AAC1B,
|
|
1
|
+
{"version":3,"file":"MenuTrigger.js","sourceRoot":"","sources":["../../src/MenuTrigger/MenuTrigger.tsx"],"names":[],"mappings":";;;;AAAA,6DAA0B;AAC1B,8DAA4E;AAC5E,yDAA0F;AAC1F,mDAAkD;AAElD,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,8EAA8E;QAC9E,wEAAwE;QACxE,gFAAgF;QAChF,IAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAM,YAAY,GAAG,eAAe,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/D,IAAM,OAAO,GAAG,eAAK,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAExD,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,IAAM,eAAe,GAAG,IAAA,mBAAO,EAAC,qBAAqB,CAAC,CAAC;AACvD,SAAS,qBAAqB,CAAC,KAAuB,EAAE,KAAU;IAChE,IAAM,YAAY,6BAAQ,KAAK,CAAE,CAAC;IAClC,IAAI,KAAK,CAAC,kBAAkB,EAAE;QAC5B,YAAY,CAAC,KAAK,CAAC,kBAAkB,mDAAQ,KAAK,CAAC,KAAK,CAAC,kBAAkB,GAAK,KAAK,CAAC,kBAAkB,CAAE,CAAC;KAC5G;IAED,IAAI,KAAK,CAAC,oBAAoB,EAAE;QAC9B,YAAY,CAAC,KAAK,CAAC,oBAAoB,mDAAQ,KAAK,CAAC,KAAK,CAAC,oBAAoB,GAAK,KAAK,CAAC,oBAAoB,CAAE,CAAC;KAClH;IAED,IAAI,KAAK,CAAC,qBAAqB,EAAE;QAC/B,YAAY,CAAC,KAAK,CAAC,qBAAqB,GAAG,UAAC,CAA2B;YACrE,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YACrC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC;KACH;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,kBAAe,mBAAW,CAAC"}
|
|
@@ -7,6 +7,9 @@ export interface MenuTriggerProps extends Omit<IWithPressableOptions<ViewProps>,
|
|
|
7
7
|
* A RefObject to refer to the trigger component.
|
|
8
8
|
*/
|
|
9
9
|
componentRef?: React.RefObject<React.Component>;
|
|
10
|
+
/**
|
|
11
|
+
* A callback to call on button click event
|
|
12
|
+
*/
|
|
10
13
|
onClick?: (e: InteractionEvent) => void;
|
|
11
14
|
}
|
|
12
15
|
export interface MenuTriggerState {
|
|
@@ -1 +1 @@
|
|
|
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
|
+
{"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;;OAEG;IACH,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":"useMenuTrigger.d.ts","sourceRoot":"","sources":["../../src/MenuTrigger/useMenuTrigger.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
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;AAOzE,eAAO,MAAM,cAAc,WAAY,gBAAgB,KAAG,gBA4DzD,CAAC"}
|
|
@@ -1,14 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.useMenuTrigger = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
4
5
|
var menuContext_1 = require("../context/menuContext");
|
|
5
6
|
var react_native_1 = require("react-native");
|
|
7
|
+
var react_1 = (0, tslib_1.__importDefault)(require("react"));
|
|
8
|
+
var accessibilityActions = react_native_1.Platform.OS === 'win32' ? [{ name: 'Expand' }, { name: 'Collapse' }] : [];
|
|
6
9
|
var useMenuTrigger = function (_props) {
|
|
7
10
|
var context = (0, menuContext_1.useMenuContext)();
|
|
8
11
|
var setOpen = context.setOpen;
|
|
9
12
|
var open = context.open;
|
|
10
13
|
var openOnHover = context.openOnHover;
|
|
11
14
|
var triggerRef = context.triggerRef;
|
|
15
|
+
var accessibilityState = context.open ? { expanded: true } : { expanded: false };
|
|
16
|
+
var onAccessibilityAction = react_1.default.useCallback(function (e) {
|
|
17
|
+
if (react_native_1.Platform.OS === 'win32') {
|
|
18
|
+
switch (e.nativeEvent.actionName) {
|
|
19
|
+
case 'Expand':
|
|
20
|
+
setOpen(e, true /* isOpen */);
|
|
21
|
+
break;
|
|
22
|
+
case 'Collapse':
|
|
23
|
+
setOpen(e, false /* isOpen */);
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}, [setOpen]);
|
|
12
28
|
var delayHover = react_native_1.Platform.select({
|
|
13
29
|
macos: 100,
|
|
14
30
|
default: 500, // win32
|
|
@@ -27,7 +43,17 @@ var useMenuTrigger = function (_props) {
|
|
|
27
43
|
setOpen(e, !open);
|
|
28
44
|
};
|
|
29
45
|
return {
|
|
30
|
-
props: {
|
|
46
|
+
props: {
|
|
47
|
+
onClick: onClick,
|
|
48
|
+
onHoverIn: onHoverIn,
|
|
49
|
+
onHoverOut: react_native_1.Platform.OS === 'win32' && onHoverOut,
|
|
50
|
+
componentRef: triggerRef,
|
|
51
|
+
delayHoverIn: delayHover,
|
|
52
|
+
delayHoverOut: react_native_1.Platform.OS === 'win32' && delayHover,
|
|
53
|
+
accessibilityState: accessibilityState,
|
|
54
|
+
accessibilityActions: accessibilityActions,
|
|
55
|
+
onAccessibilityAction: onAccessibilityAction,
|
|
56
|
+
},
|
|
31
57
|
hasSubmenu: context.isSubmenu,
|
|
32
58
|
};
|
|
33
59
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMenuTrigger.js","sourceRoot":"","sources":["../../src/MenuTrigger/useMenuTrigger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useMenuTrigger.js","sourceRoot":"","sources":["../../src/MenuTrigger/useMenuTrigger.ts"],"names":[],"mappings":";;;;AAAA,sDAAwD;AAGxD,6CAA2F;AAC3F,6DAA0B;AAE1B,IAAM,oBAAoB,GACxB,uBAAQ,CAAC,EAAE,KAAM,OAAe,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAmC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAqC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAEpI,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;IACtC,IAAM,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACnF,IAAM,qBAAqB,GAAG,eAAK,CAAC,WAAW,CAC7C,UAAC,CAA2B;QAC1B,IAAI,uBAAQ,CAAC,EAAE,KAAM,OAAe,EAAE;YACpC,QAAQ,CAAC,CAAC,WAAW,CAAC,UAAU,EAAE;gBAChC,KAAK,QAAQ;oBACX,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;oBAC9B,MAAM;gBAER,KAAK,UAAU;oBACb,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;oBAC/B,MAAM;aACT;SACF;IACH,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,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;YACL,OAAO,SAAA;YACP,SAAS,WAAA;YACT,UAAU,EAAE,uBAAQ,CAAC,EAAE,KAAM,OAAe,IAAI,UAAU;YAC1D,YAAY,EAAE,UAAU;YACxB,YAAY,EAAE,UAAU;YACxB,aAAa,EAAE,uBAAQ,CAAC,EAAE,KAAM,OAAe,IAAI,UAAU;YAC7D,kBAAkB,oBAAA;YAClB,oBAAoB,sBAAA;YACpB,qBAAqB,uBAAA;SACtB;QACD,UAAU,EAAE,OAAO,CAAC,SAAS;KAC9B,CAAC;AACJ,CAAC,CAAC;AA5DW,QAAA,cAAc,kBA4DzB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluentui-react-native/menu",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.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,10 +23,10 @@
|
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"@fluentui-react-native/adapters": ">=0.8.5 <1.0.0",
|
|
26
|
-
"@fluentui-react-native/callout": ">=0.20.
|
|
26
|
+
"@fluentui-react-native/callout": ">=0.20.5 <1.0.0",
|
|
27
27
|
"@fluentui-react-native/experimental-text": ">=0.9.0 <1.0.0",
|
|
28
28
|
"@fluentui-react-native/framework": "0.7.30",
|
|
29
|
-
"@fluentui-react-native/interactive-hooks": ">=0.16.
|
|
29
|
+
"@fluentui-react-native/interactive-hooks": ">=0.16.1 <1.0.0",
|
|
30
30
|
"@fluentui-react-native/theme-tokens": ">=0.18.0 <1.0.0",
|
|
31
31
|
"@fluentui-react-native/tokens": ">=0.14.0 <1.0.0",
|
|
32
32
|
"@fluentui-react-native/use-styling": ">=0.8.3 <1.0.0",
|
|
@@ -18,7 +18,7 @@ export const MenuItem = compose<MenuItemType>({
|
|
|
18
18
|
},
|
|
19
19
|
useRender: (userProps: MenuItemProps, useSlots: UseSlots<MenuItemType>) => {
|
|
20
20
|
const menuItem = useMenuItem(userProps);
|
|
21
|
-
const Slots = useSlots(userProps, (layer): boolean => menuItem.state[layer]);
|
|
21
|
+
const Slots = useSlots(userProps, (layer): boolean => menuItem.state[layer] || userProps[layer]);
|
|
22
22
|
|
|
23
23
|
return (final: MenuItemProps) => {
|
|
24
24
|
const mergedProps = mergeProps(menuItem.props, final);
|
|
@@ -1,20 +1,60 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { AccessibilityState } from 'react-native';
|
|
2
|
+
import { AccessibilityState, I18nManager } from 'react-native';
|
|
3
3
|
import { MenuItemProps, MenuItemState } from './MenuItem.types';
|
|
4
4
|
import { memoize } from '@fluentui-react-native/framework';
|
|
5
|
-
import { useAsPressable,
|
|
5
|
+
import { InteractionEvent, isKeyPressEvent, useAsPressable, useKeyDownProps } from '@fluentui-react-native/interactive-hooks';
|
|
6
6
|
import { useMenuContext } from '../context/menuContext';
|
|
7
7
|
import { useMenuListContext } from '../context/menuListContext';
|
|
8
8
|
import { useMenuTriggerContext } from '../context/menuTriggerContext';
|
|
9
9
|
|
|
10
|
+
const triggerKeys = [' ', 'Enter'];
|
|
11
|
+
const submenuTriggerKeys = [...triggerKeys, 'ArrowLeft', 'ArrowRight'];
|
|
12
|
+
|
|
10
13
|
export const useMenuItem = (props: MenuItemProps): MenuItemState => {
|
|
11
14
|
// attach the pressable state handlers
|
|
12
15
|
const defaultComponentRef = React.useRef(null);
|
|
13
16
|
const { onClick, accessibilityState, componentRef = defaultComponentRef, disabled, ...rest } = props;
|
|
14
|
-
const pressable = useAsPressable({ ...rest, disabled, onPress: onClick });
|
|
15
|
-
const onKeyProps = useKeyProps(onClick, ' ', 'Enter');
|
|
16
17
|
const isTrigger = useMenuTriggerContext();
|
|
17
|
-
const
|
|
18
|
+
const isSubmenu = useMenuContext().isSubmenu;
|
|
19
|
+
const hasSubmenu = isSubmenu && isTrigger;
|
|
20
|
+
const isInSubmenu = isSubmenu && !isTrigger;
|
|
21
|
+
|
|
22
|
+
const setOpen = useMenuContext().setOpen;
|
|
23
|
+
const onInvoke = React.useCallback(
|
|
24
|
+
(e: InteractionEvent) => {
|
|
25
|
+
if (disabled) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const isRtl = I18nManager.isRTL;
|
|
30
|
+
if (
|
|
31
|
+
isKeyPressEvent(e) &&
|
|
32
|
+
hasSubmenu &&
|
|
33
|
+
((isRtl && e.nativeEvent.key === 'ArrowRight') || (!isRtl && e.nativeEvent.key === 'ArrowLeft'))
|
|
34
|
+
) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (
|
|
38
|
+
isKeyPressEvent(e) &&
|
|
39
|
+
isInSubmenu &&
|
|
40
|
+
((isRtl && e.nativeEvent.key === 'ArrowLeft') || (!isRtl && e.nativeEvent.key === 'ArrowRight'))
|
|
41
|
+
) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
onClick?.(e);
|
|
46
|
+
if (!hasSubmenu) {
|
|
47
|
+
setOpen(e, false /*isOpen*/);
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
[disabled, hasSubmenu, isInSubmenu, onClick, setOpen],
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
const pressable = useAsPressable({ ...rest, disabled, onPress: onInvoke });
|
|
54
|
+
const keys = isSubmenu ? submenuTriggerKeys : triggerKeys;
|
|
55
|
+
|
|
56
|
+
// Explicitly override onKeyDown to override the native behavior of moving focus with arrow keys.
|
|
57
|
+
const onKeyDownProps = useKeyDownProps(onInvoke, ...keys);
|
|
18
58
|
const hasCheckmarks = useMenuListContext().hasCheckmarks;
|
|
19
59
|
|
|
20
60
|
return {
|
|
@@ -22,13 +62,13 @@ export const useMenuItem = (props: MenuItemProps): MenuItemState => {
|
|
|
22
62
|
...pressable.props,
|
|
23
63
|
accessible: true,
|
|
24
64
|
accessibilityRole: 'menuitem',
|
|
25
|
-
onAccessibilityTap: props.onAccessibilityTap ||
|
|
26
|
-
accessibilityLabel: props.accessibilityLabel,
|
|
65
|
+
onAccessibilityTap: props.onAccessibilityTap || onInvoke,
|
|
66
|
+
accessibilityLabel: props.accessibilityLabel || props.content,
|
|
27
67
|
accessibilityState: getAccessibilityState(disabled, accessibilityState),
|
|
28
68
|
enableFocusRing: true,
|
|
29
|
-
focusable:
|
|
69
|
+
focusable: true,
|
|
30
70
|
ref: componentRef,
|
|
31
|
-
...
|
|
71
|
+
...onKeyDownProps,
|
|
32
72
|
},
|
|
33
73
|
state: pressable.state,
|
|
34
74
|
hasSubmenu,
|
|
@@ -23,7 +23,7 @@ export const MenuItemCheckbox = compose<MenuItemCheckboxType>({
|
|
|
23
23
|
},
|
|
24
24
|
useRender: (userProps: MenuItemCheckboxProps, useSlots: UseSlots<MenuItemCheckboxType>) => {
|
|
25
25
|
const menuItem = useMenuItemCheckbox(userProps);
|
|
26
|
-
const Slots = useSlots(userProps, (layer): boolean => menuItem.state[layer]);
|
|
26
|
+
const Slots = useSlots(userProps, (layer): boolean => menuItem.state[layer] || userProps[layer]);
|
|
27
27
|
|
|
28
28
|
return menuItemFinalRender(menuItem, Slots);
|
|
29
29
|
},
|
|
@@ -14,16 +14,18 @@ import { useMenuListContext } from '../context/menuListContext';
|
|
|
14
14
|
const defaultAccessibilityActions = [{ name: 'Toggle' }];
|
|
15
15
|
|
|
16
16
|
export const useMenuItemCheckbox = (props: MenuItemCheckboxProps): MenuItemCheckboxState => {
|
|
17
|
-
const { name } = props;
|
|
17
|
+
const { disabled, name } = props;
|
|
18
18
|
const context = useMenuListContext();
|
|
19
19
|
const checked = context.checked?.[name];
|
|
20
20
|
const onCheckedChange = context.onCheckedChange;
|
|
21
21
|
|
|
22
22
|
const toggleChecked = React.useCallback(
|
|
23
23
|
(e: InteractionEvent) => {
|
|
24
|
-
|
|
24
|
+
if (!disabled) {
|
|
25
|
+
onCheckedChange(e, name, !checked);
|
|
26
|
+
}
|
|
25
27
|
},
|
|
26
|
-
[checked, name, onCheckedChange],
|
|
28
|
+
[checked, disabled, name, onCheckedChange],
|
|
27
29
|
);
|
|
28
30
|
|
|
29
31
|
return useMenuCheckboxInteraction(props, toggleChecked);
|
|
@@ -74,12 +76,14 @@ export const useMenuCheckboxInteraction = (
|
|
|
74
76
|
: defaultAccessibilityActions;
|
|
75
77
|
const onAccessibilityActionProp = React.useCallback(
|
|
76
78
|
(event: AccessibilityActionEvent) => {
|
|
77
|
-
if (
|
|
78
|
-
|
|
79
|
+
if (!disabled) {
|
|
80
|
+
if (event.nativeEvent.actionName === 'Toggle') {
|
|
81
|
+
toggleCallback(event);
|
|
82
|
+
}
|
|
83
|
+
onAccessibilityAction && onAccessibilityAction(event);
|
|
79
84
|
}
|
|
80
|
-
onAccessibilityAction && onAccessibilityAction(event);
|
|
81
85
|
},
|
|
82
|
-
[toggleCallback, onAccessibilityAction],
|
|
86
|
+
[disabled, toggleCallback, onAccessibilityAction],
|
|
83
87
|
);
|
|
84
88
|
|
|
85
89
|
const state = {
|
|
@@ -93,11 +97,11 @@ export const useMenuCheckboxInteraction = (
|
|
|
93
97
|
...pressable.props,
|
|
94
98
|
accessible: true,
|
|
95
99
|
accessibilityActions: accessibilityActionsProp,
|
|
96
|
-
accessibilityLabel: props.accessibilityLabel,
|
|
100
|
+
accessibilityLabel: props.accessibilityLabel || props.content,
|
|
97
101
|
accessibilityRole: 'menuitem',
|
|
98
102
|
accessibilityState: getAccessibilityState(disabled, state.checked, accessibilityState),
|
|
99
103
|
enableFocusRing: true,
|
|
100
|
-
focusable:
|
|
104
|
+
focusable: true,
|
|
101
105
|
onAccessibilityAction: onAccessibilityActionProp,
|
|
102
106
|
ref: buttonRef,
|
|
103
107
|
...onKeyProps,
|
|
@@ -5,16 +5,18 @@ import { MenuItemCheckboxProps, MenuItemCheckboxState } from '../MenuItemCheckbo
|
|
|
5
5
|
import { useMenuCheckboxInteraction } from '../MenuItemCheckbox/useMenuItemCheckbox';
|
|
6
6
|
|
|
7
7
|
export const useMenuItemRadio = (props: MenuItemCheckboxProps): MenuItemCheckboxState => {
|
|
8
|
-
const { name } = props;
|
|
8
|
+
const { disabled, name } = props;
|
|
9
9
|
const context = useMenuListContext();
|
|
10
10
|
const checked = context.checked?.[name];
|
|
11
11
|
const selectRadio = context.selectRadio;
|
|
12
12
|
|
|
13
13
|
const toggleChecked = React.useCallback(
|
|
14
14
|
(e: InteractionEvent) => {
|
|
15
|
-
|
|
15
|
+
if (!disabled) {
|
|
16
|
+
selectRadio(e, name, !checked);
|
|
17
|
+
}
|
|
16
18
|
},
|
|
17
|
-
[checked, name, selectRadio],
|
|
19
|
+
[checked, disabled, name, selectRadio],
|
|
18
20
|
);
|
|
19
21
|
|
|
20
22
|
return useMenuCheckboxInteraction(props, toggleChecked);
|
|
@@ -11,6 +11,7 @@ export const MenuPopover = stagedComponent((props: MenuPopoverProps) => {
|
|
|
11
11
|
return (_rest: MenuPopoverProps, children: React.ReactNode) => {
|
|
12
12
|
return (
|
|
13
13
|
<Callout
|
|
14
|
+
accessibilityRole={state.accessibilityRole}
|
|
14
15
|
borderWidth={1}
|
|
15
16
|
borderColor={theme.colors.neutralStrokeAccessible}
|
|
16
17
|
target={state.triggerRef}
|