@fluentui-react-native/menu 0.9.1 → 0.10.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 +132 -7
- package/CHANGELOG.md +42 -2
- 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 +2 -0
- package/lib/MenuPopover/MenuPopover.types.d.ts.map +1 -1
- package/lib/MenuPopover/useMenuPopover.d.ts.map +1 -1
- package/lib/MenuPopover/useMenuPopover.js +6 -1
- package/lib/MenuPopover/useMenuPopover.js.map +1 -1
- package/lib/MenuTrigger/useMenuTrigger.d.ts +3 -0
- package/lib/MenuTrigger/useMenuTrigger.d.ts.map +1 -1
- package/lib/MenuTrigger/useMenuTrigger.js +11 -1
- package/lib/MenuTrigger/useMenuTrigger.js.map +1 -1
- 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/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 +2 -0
- 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 +6 -1
- package/lib-commonjs/MenuPopover/useMenuPopover.js.map +1 -1
- package/lib-commonjs/MenuTrigger/useMenuTrigger.d.ts +3 -0
- package/lib-commonjs/MenuTrigger/useMenuTrigger.d.ts.map +1 -1
- package/lib-commonjs/MenuTrigger/useMenuTrigger.js +11 -1
- package/lib-commonjs/MenuTrigger/useMenuTrigger.js.map +1 -1
- 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/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 +2 -0
- package/src/MenuPopover/MenuPopover.types.ts +2 -0
- package/src/MenuPopover/useMenuPopover.ts +7 -1
- package/src/MenuTrigger/useMenuTrigger.ts +13 -1
- 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
|
@@ -7,6 +7,7 @@ var defaultMenuListTokens = function (t) { return ({
|
|
|
7
7
|
minWidth: 128,
|
|
8
8
|
maxWidth: 300,
|
|
9
9
|
backgroundColor: t.colors.neutralBackground1,
|
|
10
|
+
gap: theme_tokens_1.globalTokens.spacing.xxs,
|
|
10
11
|
}); };
|
|
11
12
|
exports.defaultMenuListTokens = defaultMenuListTokens;
|
|
12
13
|
//# sourceMappingURL=MenuListTokens.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuListTokens.js","sourceRoot":"","sources":["../../src/MenuList/MenuListTokens.ts"],"names":[],"mappings":";;;AACA,oEAAmE;AAI5D,IAAM,qBAAqB,GAAyC,UAAC,CAAQ,IAAqB,OAAA,CAAC;IACxG,OAAO,EAAE,2BAAY,CAAC,OAAO,CAAC,EAAE;IAChC,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,kBAAkB;
|
|
1
|
+
{"version":3,"file":"MenuListTokens.js","sourceRoot":"","sources":["../../src/MenuList/MenuListTokens.ts"],"names":[],"mappings":";;;AACA,oEAAmE;AAI5D,IAAM,qBAAqB,GAAyC,UAAC,CAAQ,IAAqB,OAAA,CAAC;IACxG,OAAO,EAAE,2BAAY,CAAC,OAAO,CAAC,EAAE;IAChC,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,kBAAkB;IAC5C,GAAG,EAAE,2BAAY,CAAC,OAAO,CAAC,GAAG;CAC9B,CAAC,EANuG,CAMvG,CAAC;AANU,QAAA,qBAAqB,yBAM/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMenuList.d.ts","sourceRoot":"","sources":["../../src/MenuList/useMenuList.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEhE,eAAO,MAAM,WAAW,WAAY,aAAa,KAAG,
|
|
1
|
+
{"version":3,"file":"useMenuList.d.ts","sourceRoot":"","sources":["../../src/MenuList/useMenuList.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEhE,eAAO,MAAM,WAAW,WAAY,aAAa,KAAG,aAenD,CAAC"}
|
|
@@ -9,8 +9,8 @@ var useMenuList = function (_props) {
|
|
|
9
9
|
// MenuList v2 needs to be able to be standalone, but this is not in scope for v1
|
|
10
10
|
// Assuming that checked information will come from parent Menu
|
|
11
11
|
var isCheckedControlled = typeof context.checked !== 'undefined';
|
|
12
|
-
var _a = useMenuCheckedState(isCheckedControlled, context), checked = _a[0], onCheckedChange = _a[1];
|
|
13
|
-
return (0, tslib_1.__assign)((0, tslib_1.__assign)({}, context), { isCheckedControlled: isCheckedControlled, checked: checked, onCheckedChange: onCheckedChange });
|
|
12
|
+
var _a = useMenuCheckedState(isCheckedControlled, context), checked = _a[0], onCheckedChange = _a[1], selectRadio = _a[2];
|
|
13
|
+
return (0, tslib_1.__assign)((0, tslib_1.__assign)({}, context), { isCheckedControlled: isCheckedControlled, checked: checked, onCheckedChange: onCheckedChange, selectRadio: selectRadio });
|
|
14
14
|
};
|
|
15
15
|
exports.useMenuList = useMenuList;
|
|
16
16
|
var useMenuCheckedState = function (isControlled, props) {
|
|
@@ -30,6 +30,16 @@ var useMenuCheckedState = function (isControlled, props) {
|
|
|
30
30
|
onCheckedChange(e, name, isChecked);
|
|
31
31
|
}
|
|
32
32
|
}, [isControlled, state, onCheckedChange, setCheckedInternal]);
|
|
33
|
-
|
|
33
|
+
var selectRadio = react_1.default.useCallback(function (e, name, isChecked) {
|
|
34
|
+
var _a;
|
|
35
|
+
if (!isControlled) {
|
|
36
|
+
var updatedChecked = (_a = {}, _a[name] = true, _a);
|
|
37
|
+
setCheckedInternal(updatedChecked);
|
|
38
|
+
}
|
|
39
|
+
if (onCheckedChange) {
|
|
40
|
+
onCheckedChange(e, name, isChecked);
|
|
41
|
+
}
|
|
42
|
+
}, [isControlled, onCheckedChange, setCheckedInternal]);
|
|
43
|
+
return [state, setChecked, selectRadio];
|
|
34
44
|
};
|
|
35
45
|
//# sourceMappingURL=useMenuList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMenuList.js","sourceRoot":"","sources":["../../src/MenuList/useMenuList.ts"],"names":[],"mappings":";;;;AACA,6DAA0B;AAC1B,sDAAwD;AAGjD,IAAM,WAAW,GAAG,UAAC,MAAqB;IAC/C,IAAM,OAAO,GAAG,IAAA,4BAAc,GAAE,CAAC;IAEjC,iFAAiF;IACjF,+DAA+D;IAC/D,IAAM,mBAAmB,GAAG,OAAO,OAAO,CAAC,OAAO,KAAK,WAAW,CAAC;IAC7D,IAAA,
|
|
1
|
+
{"version":3,"file":"useMenuList.js","sourceRoot":"","sources":["../../src/MenuList/useMenuList.ts"],"names":[],"mappings":";;;;AACA,6DAA0B;AAC1B,sDAAwD;AAGjD,IAAM,WAAW,GAAG,UAAC,MAAqB;IAC/C,IAAM,OAAO,GAAG,IAAA,4BAAc,GAAE,CAAC;IAEjC,iFAAiF;IACjF,+DAA+D;IAC/D,IAAM,mBAAmB,GAAG,OAAO,OAAO,CAAC,OAAO,KAAK,WAAW,CAAC;IAC7D,IAAA,KAA0C,mBAAmB,CAAC,mBAAmB,EAAE,OAAO,CAAC,EAA1F,OAAO,QAAA,EAAE,eAAe,QAAA,EAAE,WAAW,QAAqD,CAAC;IAElG,uDACK,OAAO,KACV,mBAAmB,qBAAA,EACnB,OAAO,SAAA,EACP,eAAe,iBAAA,EACf,WAAW,aAAA,IACX;AACJ,CAAC,CAAC;AAfW,QAAA,WAAW,eAetB;AAEF,IAAM,mBAAmB,GAAG,UAC1B,YAAqB,EACrB,KAAoB;;IAMZ,IAAA,cAAc,GAA+B,KAAK,eAApC,EAAE,eAAe,GAAc,KAAK,gBAAnB,EAAE,OAAO,GAAK,KAAK,QAAV,CAAW;IAC3D,IAAM,YAAY,GAAG,MAAA,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,OAAO,mCAAI,EAAE,CAAC;IAC/C,IAAA,KAAwC,eAAK,CAAC,QAAQ,CAA0B,YAAY,CAAC,EAA5F,eAAe,QAAA,EAAE,kBAAkB,QAAyD,CAAC;IAEpG,IAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;IAEvD,IAAM,UAAU,GAAG,eAAK,CAAC,WAAW,CAClC,UAAC,CAAmB,EAAE,IAAY,EAAE,SAAkB;QACpD,IAAI,CAAC,YAAY,EAAE;YACjB,IAAM,UAAU,GAAG,KAAK,CAAC;YACzB,UAAU,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;YAC7B,IAAM,cAAc,6BAAQ,UAAU,CAAE,CAAC;YACzC,kBAAkB,CAAC,cAAc,CAAC,CAAC;SACpC;QAED,IAAI,eAAe,EAAE;YACnB,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;SACrC;IACH,CAAC,EACD,CAAC,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,kBAAkB,CAAC,CAC3D,CAAC;IAEF,IAAM,WAAW,GAAG,eAAK,CAAC,WAAW,CACnC,UAAC,CAAmB,EAAE,IAAY,EAAE,SAAkB;;QACpD,IAAI,CAAC,YAAY,EAAE;YACjB,IAAM,cAAc,aAAK,GAAC,IAAI,IAAG,IAAI,KAAE,CAAC;YACxC,kBAAkB,CAAC,cAAc,CAAC,CAAC;SACpC;QAED,IAAI,eAAe,EAAE;YACnB,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;SACrC;IACH,CAAC,EACD,CAAC,YAAY,EAAE,eAAe,EAAE,kBAAkB,CAAC,CACpD,CAAC;IAEF,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;AAC1C,CAAC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { MenuListContextValue } from '../context/menuListContext';
|
|
2
2
|
import { MenuListState } from './MenuList.types';
|
|
3
3
|
export declare const useMenuListContextValue: (state: MenuListState) => MenuListContextValue;
|
|
4
|
-
//# sourceMappingURL=
|
|
4
|
+
//# sourceMappingURL=useMenuListContextValue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMenuListContextValue.d.ts","sourceRoot":"","sources":["../../src/MenuList/useMenuListContextValue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,eAAO,MAAM,uBAAuB,UAAW,aAAa,KAAG,oBAE9D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMenuListContextValue.js","sourceRoot":"","sources":["../../src/MenuList/useMenuListContextValue.ts"],"names":[],"mappings":";;;;AAGO,IAAM,uBAAuB,GAAG,UAAC,KAAoB;IAC1D,iCAAY,KAAK,EAAG;AACtB,CAAC,CAAC;AAFW,QAAA,uBAAuB,2BAElC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuPopover.d.ts","sourceRoot":"","sources":["../../src/MenuPopover/MenuPopover.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAmB,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGxE,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"MenuPopover.d.ts","sourceRoot":"","sources":["../../src/MenuPopover/MenuPopover.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAmB,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGxE,eAAO,MAAM,WAAW,iFAmBtB,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 }, 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, 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,
|
|
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,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"}
|
|
@@ -6,7 +6,9 @@ export interface MenuPopoverProps extends Omit<IViewProps, 'onPress'> {
|
|
|
6
6
|
}
|
|
7
7
|
export interface MenuPopoverState {
|
|
8
8
|
dismissBehaviors: DismissBehaviors[];
|
|
9
|
+
doNotTakePointerCapture: boolean;
|
|
9
10
|
onDismiss: () => void;
|
|
11
|
+
setInitialFocus: boolean;
|
|
10
12
|
triggerRef: React.RefObject<React.Component>;
|
|
11
13
|
}
|
|
12
14
|
//# sourceMappingURL=MenuPopover.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuPopover.types.d.ts","sourceRoot":"","sources":["../../src/MenuPopover/MenuPopover.types.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAE7C,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC;CAAG;AAExE,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;IACrC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;CAC9C"}
|
|
1
|
+
{"version":3,"file":"MenuPopover.types.d.ts","sourceRoot":"","sources":["../../src/MenuPopover/MenuPopover.types.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAE7C,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC;CAAG;AAExE,MAAM,WAAW,gBAAgB;IAC/B,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":"
|
|
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,gBAgBzD,CAAC"}
|
|
@@ -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,11 @@ var useMenuPopover = function (_props) {
|
|
|
12
13
|
var dismissBehaviors = context.isControlled
|
|
13
14
|
? ['preventDismissOnKeyDown', 'preventDismissOnClickOutside']
|
|
14
15
|
: undefined;
|
|
15
|
-
|
|
16
|
+
// Initial focus behavior differs per platform, Windows platforms move focus
|
|
17
|
+
// automatically onto first element of Callout
|
|
18
|
+
var setInitialFocus = react_native_1.Platform.OS === 'win32' || react_native_1.Platform.OS === 'windows';
|
|
19
|
+
var doNotTakePointerCapture = context.openOnHover;
|
|
20
|
+
return { triggerRef: triggerRef, onDismiss: onDismiss, dismissBehaviors: dismissBehaviors, doNotTakePointerCapture: doNotTakePointerCapture, setInitialFocus: setInitialFocus };
|
|
16
21
|
};
|
|
17
22
|
exports.useMenuPopover = useMenuPopover;
|
|
18
23
|
//# 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,6CAAwC;AAExC,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;IAEd,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,gBAAgB,kBAAA,EAAE,uBAAuB,yBAAA,EAAE,eAAe,iBAAA,EAAE,CAAC;AAC/F,CAAC,CAAC;AAhBW,QAAA,cAAc,kBAgBzB"}
|
|
@@ -4,6 +4,9 @@ import { MenuTriggerProps } from './MenuTrigger.types';
|
|
|
4
4
|
export declare const useMenuTrigger: (_props: MenuTriggerProps) => {
|
|
5
5
|
onClick: (e: InteractionEvent) => void;
|
|
6
6
|
onHoverIn: (e: InteractionEvent) => void;
|
|
7
|
+
onHoverOut: (e: InteractionEvent) => void;
|
|
7
8
|
componentRef: import("react").RefObject<import("react").Component<{}, {}, any>>;
|
|
9
|
+
delayHoverIn: number;
|
|
10
|
+
delayHoverOut: number;
|
|
8
11
|
};
|
|
9
12
|
//# sourceMappingURL=useMenuTrigger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMenuTrigger.d.ts","sourceRoot":"","sources":["../../src/MenuTrigger/useMenuTrigger.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"useMenuTrigger.d.ts","sourceRoot":"","sources":["../../src/MenuTrigger/useMenuTrigger.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,eAAO,MAAM,cAAc,WAAY,gBAAgB;iBAyBjC,gBAAgB;mBAZd,gBAAgB;oBAMf,gBAAgB;;;;CAWxC,CAAC"}
|
|
@@ -2,21 +2,31 @@
|
|
|
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 { onClick: onClick, onHoverIn: onHoverIn, componentRef: triggerRef };
|
|
29
|
+
return { onClick: onClick, onHoverIn: onHoverIn, onHoverOut: onHoverOut, componentRef: triggerRef, delayHoverIn: delayHover, delayHoverOut: delayHover };
|
|
20
30
|
};
|
|
21
31
|
exports.useMenuTrigger = useMenuTrigger;
|
|
22
32
|
//# 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,EAAE,OAAO,SAAA,EAAE,SAAS,WAAA,EAAE,UAAU,YAAA,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;AAC3H,CAAC,CAAC;AA9BW,QAAA,cAAc,kBA8BzB"}
|
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.10.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.15.
|
|
30
|
-
"@fluentui-react-native/theme-tokens": ">=0.
|
|
31
|
-
"@fluentui-react-native/tokens": ">=0.
|
|
26
|
+
"@fluentui-react-native/callout": ">=0.20.3 <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.15.10 <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"
|
|
@@ -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;
|
|
@@ -4,7 +4,9 @@ import { IBackgroundColorTokens, LayoutTokens } from '@fluentui-react-native/tok
|
|
|
4
4
|
|
|
5
5
|
export const menuListName = 'MenuList';
|
|
6
6
|
|
|
7
|
-
export interface MenuListTokens extends LayoutTokens, IBackgroundColorTokens {
|
|
7
|
+
export interface MenuListTokens extends LayoutTokens, IBackgroundColorTokens {
|
|
8
|
+
gap?: number;
|
|
9
|
+
}
|
|
8
10
|
|
|
9
11
|
export interface MenuListProps extends Omit<IViewProps, 'onPress'> {
|
|
10
12
|
checked?: Record<string, boolean>;
|
|
@@ -15,10 +17,11 @@ export interface MenuListProps extends Omit<IViewProps, 'onPress'> {
|
|
|
15
17
|
|
|
16
18
|
export interface MenuListState extends MenuListProps {
|
|
17
19
|
isCheckedControlled: boolean;
|
|
20
|
+
selectRadio?: (e: InteractionEvent, name: string, isChecked: boolean) => void;
|
|
18
21
|
}
|
|
19
22
|
|
|
20
23
|
export interface MenuListSlotProps {
|
|
21
|
-
root: React.PropsWithRef<IViewProps
|
|
24
|
+
root: React.PropsWithRef<IViewProps> & { gap?: number };
|
|
22
25
|
}
|
|
23
26
|
export interface MenuListType {
|
|
24
27
|
props: MenuListProps;
|
|
@@ -9,20 +9,25 @@ export const useMenuList = (_props: MenuListProps): MenuListState => {
|
|
|
9
9
|
// MenuList v2 needs to be able to be standalone, but this is not in scope for v1
|
|
10
10
|
// Assuming that checked information will come from parent Menu
|
|
11
11
|
const isCheckedControlled = typeof context.checked !== 'undefined';
|
|
12
|
-
const [checked, onCheckedChange] = useMenuCheckedState(isCheckedControlled, context);
|
|
12
|
+
const [checked, onCheckedChange, selectRadio] = useMenuCheckedState(isCheckedControlled, context);
|
|
13
13
|
|
|
14
14
|
return {
|
|
15
15
|
...context,
|
|
16
16
|
isCheckedControlled,
|
|
17
17
|
checked,
|
|
18
18
|
onCheckedChange,
|
|
19
|
+
selectRadio,
|
|
19
20
|
};
|
|
20
21
|
};
|
|
21
22
|
|
|
22
23
|
const useMenuCheckedState = (
|
|
23
24
|
isControlled: boolean,
|
|
24
25
|
props: MenuListProps,
|
|
25
|
-
): [
|
|
26
|
+
): [
|
|
27
|
+
Record<string, boolean>,
|
|
28
|
+
(e: InteractionEvent, name: string, isChecked: boolean) => void,
|
|
29
|
+
(e: InteractionEvent, name: string, isChecked: boolean) => void,
|
|
30
|
+
] => {
|
|
26
31
|
const { defaultChecked, onCheckedChange, checked } = props;
|
|
27
32
|
const initialState = defaultChecked ?? checked ?? {};
|
|
28
33
|
const [checkedInternal, setCheckedInternal] = React.useState<Record<string, boolean>>(initialState);
|
|
@@ -45,5 +50,19 @@ const useMenuCheckedState = (
|
|
|
45
50
|
[isControlled, state, onCheckedChange, setCheckedInternal],
|
|
46
51
|
);
|
|
47
52
|
|
|
48
|
-
|
|
53
|
+
const selectRadio = React.useCallback(
|
|
54
|
+
(e: InteractionEvent, name: string, isChecked: boolean) => {
|
|
55
|
+
if (!isControlled) {
|
|
56
|
+
const updatedChecked = { [name]: true };
|
|
57
|
+
setCheckedInternal(updatedChecked);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (onCheckedChange) {
|
|
61
|
+
onCheckedChange(e, name, isChecked);
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
[isControlled, onCheckedChange, setCheckedInternal],
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
return [state, setChecked, selectRadio];
|
|
49
68
|
};
|
|
File without changes
|
|
@@ -16,6 +16,8 @@ export const MenuPopover = stagedComponent((props: MenuPopoverProps) => {
|
|
|
16
16
|
target={state.triggerRef}
|
|
17
17
|
onDismiss={state.onDismiss}
|
|
18
18
|
dismissBehaviors={state.dismissBehaviors}
|
|
19
|
+
setInitialFocus={state.setInitialFocus}
|
|
20
|
+
doNotTakePointerCapture={state.doNotTakePointerCapture}
|
|
19
21
|
>
|
|
20
22
|
{children}
|
|
21
23
|
</Callout>
|