@fluentui-react-native/menu 0.5.2 → 0.6.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.
Files changed (59) hide show
  1. package/CHANGELOG.json +16 -1
  2. package/CHANGELOG.md +10 -2
  3. package/lib/Menu/Menu.types.d.ts +6 -1
  4. package/lib/Menu/Menu.types.d.ts.map +1 -1
  5. package/lib/Menu/Menu.types.js.map +1 -1
  6. package/lib/Menu/useMenu.d.ts.map +1 -1
  7. package/lib/Menu/useMenu.js +19 -9
  8. package/lib/Menu/useMenu.js.map +1 -1
  9. package/lib/Menu/useMenuContextValue.js +2 -1
  10. package/lib/Menu/useMenuContextValue.js.map +1 -1
  11. package/lib/MenuPopover/MenuPopover.d.ts.map +1 -1
  12. package/lib/MenuPopover/MenuPopover.js +1 -1
  13. package/lib/MenuPopover/MenuPopover.js.map +1 -1
  14. package/lib/MenuPopover/MenuPopover.types.d.ts +3 -0
  15. package/lib/MenuPopover/MenuPopover.types.d.ts.map +1 -1
  16. package/lib/MenuPopover/MenuPopover.types.js.map +1 -1
  17. package/lib/MenuPopover/useMenuPopover.d.ts.map +1 -1
  18. package/lib/MenuPopover/useMenuPopover.js +7 -1
  19. package/lib/MenuPopover/useMenuPopover.js.map +1 -1
  20. package/lib/MenuTrigger/useMenuTrigger.d.ts +2 -1
  21. package/lib/MenuTrigger/useMenuTrigger.d.ts.map +1 -1
  22. package/lib/MenuTrigger/useMenuTrigger.js +9 -3
  23. package/lib/MenuTrigger/useMenuTrigger.js.map +1 -1
  24. package/lib/context/menuContext.d.ts.map +1 -1
  25. package/lib/context/menuContext.js +1 -0
  26. package/lib/context/menuContext.js.map +1 -1
  27. package/lib-commonjs/Menu/Menu.types.d.ts +6 -1
  28. package/lib-commonjs/Menu/Menu.types.d.ts.map +1 -1
  29. package/lib-commonjs/Menu/Menu.types.js.map +1 -1
  30. package/lib-commonjs/Menu/useMenu.d.ts.map +1 -1
  31. package/lib-commonjs/Menu/useMenu.js +18 -9
  32. package/lib-commonjs/Menu/useMenu.js.map +1 -1
  33. package/lib-commonjs/Menu/useMenuContextValue.js +2 -1
  34. package/lib-commonjs/Menu/useMenuContextValue.js.map +1 -1
  35. package/lib-commonjs/MenuPopover/MenuPopover.d.ts.map +1 -1
  36. package/lib-commonjs/MenuPopover/MenuPopover.js +1 -1
  37. package/lib-commonjs/MenuPopover/MenuPopover.js.map +1 -1
  38. package/lib-commonjs/MenuPopover/MenuPopover.types.d.ts +3 -0
  39. package/lib-commonjs/MenuPopover/MenuPopover.types.d.ts.map +1 -1
  40. package/lib-commonjs/MenuPopover/MenuPopover.types.js.map +1 -1
  41. package/lib-commonjs/MenuPopover/useMenuPopover.d.ts.map +1 -1
  42. package/lib-commonjs/MenuPopover/useMenuPopover.js +8 -1
  43. package/lib-commonjs/MenuPopover/useMenuPopover.js.map +1 -1
  44. package/lib-commonjs/MenuTrigger/useMenuTrigger.d.ts +2 -1
  45. package/lib-commonjs/MenuTrigger/useMenuTrigger.d.ts.map +1 -1
  46. package/lib-commonjs/MenuTrigger/useMenuTrigger.js +9 -3
  47. package/lib-commonjs/MenuTrigger/useMenuTrigger.js.map +1 -1
  48. package/lib-commonjs/context/menuContext.d.ts.map +1 -1
  49. package/lib-commonjs/context/menuContext.js +1 -0
  50. package/lib-commonjs/context/menuContext.js.map +1 -1
  51. package/package.json +1 -1
  52. package/src/Menu/Menu.types.ts +6 -1
  53. package/src/Menu/useMenu.ts +26 -3
  54. package/src/Menu/useMenuContextValue.ts +1 -1
  55. package/src/MenuPopover/MenuPopover.tsx +7 -1
  56. package/src/MenuPopover/MenuPopover.types.ts +3 -0
  57. package/src/MenuPopover/useMenuPopover.ts +8 -1
  58. package/src/MenuTrigger/useMenuTrigger.ts +10 -3
  59. package/src/context/menuContext.ts +1 -0
package/CHANGELOG.json CHANGED
@@ -2,7 +2,22 @@
2
2
  "name": "@fluentui-react-native/menu",
3
3
  "entries": [
4
4
  {
5
- "date": "Wed, 11 May 2022 19:33:47 GMT",
5
+ "date": "Wed, 11 May 2022 22:26:13 GMT",
6
+ "tag": "@fluentui-react-native/menu_v0.6.0",
7
+ "version": "0.6.0",
8
+ "comments": {
9
+ "minor": [
10
+ {
11
+ "author": "ruaraki@microsoft.com",
12
+ "package": "@fluentui-react-native/menu",
13
+ "commit": "0a383e3d6a736a89e628c14d27d82388cf154f2b",
14
+ "comment": "Dismiss and openOnHover"
15
+ }
16
+ ]
17
+ }
18
+ },
19
+ {
20
+ "date": "Wed, 11 May 2022 19:33:59 GMT",
6
21
  "tag": "@fluentui-react-native/menu_v0.5.2",
7
22
  "version": "0.5.2",
8
23
  "comments": {
package/CHANGELOG.md CHANGED
@@ -1,12 +1,20 @@
1
1
  # Change Log - @fluentui-react-native/menu
2
2
 
3
- This log was last generated on Wed, 11 May 2022 19:33:47 GMT and should not be manually modified.
3
+ This log was last generated on Wed, 11 May 2022 22:26:13 GMT and should not be manually modified.
4
4
 
5
5
  <!-- Start content -->
6
6
 
7
+ ## 0.6.0
8
+
9
+ Wed, 11 May 2022 22:26:13 GMT
10
+
11
+ ### Minor changes
12
+
13
+ - Dismiss and openOnHover (ruaraki@microsoft.com)
14
+
7
15
  ## 0.5.2
8
16
 
9
- Wed, 11 May 2022 19:33:47 GMT
17
+ Wed, 11 May 2022 19:33:59 GMT
10
18
 
11
19
  ### Patches
12
20
 
@@ -1,12 +1,17 @@
1
1
  import type { IViewProps } from '@fluentui-react-native/adapters';
2
+ import { InteractionEvent } from '@fluentui-react-native/interactive-hooks';
2
3
  import React from 'react';
3
4
  export declare const menuName = "Menu";
4
5
  export interface MenuProps extends Omit<IViewProps, 'onPress'> {
6
+ defaultOpen?: boolean;
5
7
  open?: boolean;
8
+ onOpenChange?: (e: InteractionEvent, isOpen: boolean) => void;
9
+ openOnHover?: boolean;
6
10
  }
7
11
  export interface MenuState extends MenuProps {
12
+ isControlled: boolean;
8
13
  isSubmenu: boolean;
9
- setOpen: (isOpen: boolean) => void;
14
+ setOpen: (e: InteractionEvent, isOpen: boolean) => void;
10
15
  triggerRef: React.RefObject<React.Component>;
11
16
  }
12
17
  //# sourceMappingURL=Menu.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.types.d.ts","sourceRoot":"","sources":["../../src/Menu/Menu.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,eAAO,MAAM,QAAQ,SAAS,CAAC;AAE/B,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC;IAC5D,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,SAAU,SAAQ,SAAS;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;CAC9C"}
1
+ {"version":3,"file":"Menu.types.d.ts","sourceRoot":"","sources":["../../src/Menu/Menu.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,eAAO,MAAM,QAAQ,SAAS,CAAC;AAE/B,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC;IAC5D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9D,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,SAAU,SAAQ,SAAS;IAC1C,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,CAAC,CAAC,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACxD,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;CAC9C"}
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.types.js","sourceRoot":"","sources":["../../src/Menu/Menu.types.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,IAAM,QAAQ,GAAG,MAAM,CAAC"}
1
+ {"version":3,"file":"Menu.types.js","sourceRoot":"","sources":["../../src/Menu/Menu.types.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,IAAM,QAAQ,GAAG,MAAM,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useMenu.d.ts","sourceRoot":"","sources":["../../src/Menu/useMenu.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpD,eAAO,MAAM,OAAO,UAAW,SAAS,KAAG,SAY1C,CAAC"}
1
+ {"version":3,"file":"useMenu.d.ts","sourceRoot":"","sources":["../../src/Menu/useMenu.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpD,eAAO,MAAM,OAAO,UAAW,SAAS,KAAG,SAe1C,CAAC"}
@@ -1,18 +1,28 @@
1
+ import { __assign } from "tslib";
1
2
  import React from 'react';
2
3
  import { useMenuContext } from '../context/menuContext';
3
4
  export var useMenu = function (props) {
4
- var _a = useMenuOpenState(props), open = _a[0], setOpen = _a[1];
5
5
  var triggerRef = React.useRef(null);
6
6
  var context = useMenuContext();
7
7
  var isSubmenu = context.triggerRef !== null;
8
- return {
9
- open: open,
10
- setOpen: setOpen,
11
- triggerRef: triggerRef,
12
- isSubmenu: isSubmenu,
13
- };
8
+ var isControlled = typeof props.open !== 'undefined';
9
+ var _a = useMenuOpenState(isControlled, props), open = _a[0], setOpen = _a[1];
10
+ return __assign(__assign({}, props), { open: open, setOpen: setOpen, triggerRef: triggerRef, isSubmenu: isSubmenu, isControlled: isControlled });
14
11
  };
15
- var useMenuOpenState = function (props) {
16
- return React.useState(props.open);
12
+ var useMenuOpenState = function (isControlled, props) {
13
+ var defaultOpen = props.defaultOpen, onOpenChange = props.onOpenChange, open = props.open;
14
+ var initialState = typeof defaultOpen !== 'undefined' ? defaultOpen : !!open;
15
+ var _a = React.useState(initialState), openInternal = _a[0], setOpenInternal = _a[1];
16
+ var state = isControlled ? open : openInternal;
17
+ var setOpen = React.useCallback(function (e, isOpen) {
18
+ var openPrev = state;
19
+ if (!isControlled) {
20
+ setOpenInternal(isOpen);
21
+ }
22
+ if (onOpenChange && openPrev !== isOpen) {
23
+ onOpenChange(e, isOpen);
24
+ }
25
+ }, [isControlled, state, onOpenChange, setOpenInternal]);
26
+ return [state, setOpen];
17
27
  };
18
28
  //# sourceMappingURL=useMenu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useMenu.js","sourceRoot":"","sources":["../../src/Menu/useMenu.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,MAAM,CAAC,IAAM,OAAO,GAAG,UAAC,KAAgB;IAChC,IAAA,KAAkB,gBAAgB,CAAC,KAAK,CAAC,EAAxC,IAAI,QAAA,EAAE,OAAO,QAA2B,CAAC;IAChD,IAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtC,IAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,IAAM,SAAS,GAAG,OAAO,CAAC,UAAU,KAAK,IAAI,CAAC;IAE9C,OAAO;QACL,IAAI,MAAA;QACJ,OAAO,SAAA;QACP,UAAU,YAAA;QACV,SAAS,WAAA;KACV,CAAC;AACJ,CAAC,CAAC;AAEF,IAAM,gBAAgB,GAAG,UAAC,KAAgB;IACxC,OAAO,KAAK,CAAC,QAAQ,CAAU,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC,CAAC"}
1
+ {"version":3,"file":"useMenu.js","sourceRoot":"","sources":["../../src/Menu/useMenu.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,MAAM,CAAC,IAAM,OAAO,GAAG,UAAC,KAAgB;IACtC,IAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtC,IAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,IAAM,SAAS,GAAG,OAAO,CAAC,UAAU,KAAK,IAAI,CAAC;IAC9C,IAAM,YAAY,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC;IACjD,IAAA,KAAkB,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,EAAtD,IAAI,QAAA,EAAE,OAAO,QAAyC,CAAC;IAE9D,6BACK,KAAK,KACR,IAAI,MAAA,EACJ,OAAO,SAAA,EACP,UAAU,YAAA,EACV,SAAS,WAAA,EACT,YAAY,cAAA,IACZ;AACJ,CAAC,CAAC;AAEF,IAAM,gBAAgB,GAAG,UAAC,YAAqB,EAAE,KAAgB;IACvD,IAAA,WAAW,GAAyB,KAAK,YAA9B,EAAE,YAAY,GAAW,KAAK,aAAhB,EAAE,IAAI,GAAK,KAAK,KAAV,CAAW;IAClD,IAAM,YAAY,GAAG,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzE,IAAA,KAAkC,KAAK,CAAC,QAAQ,CAAU,YAAY,CAAC,EAAtE,YAAY,QAAA,EAAE,eAAe,QAAyC,CAAC;IAE9E,IAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;IAEjD,IAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAC/B,UAAC,CAAmB,EAAE,MAAe;QACnC,IAAM,QAAQ,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,YAAY,EAAE;YACjB,eAAe,CAAC,MAAM,CAAC,CAAC;SACzB;QACD,IAAI,YAAY,IAAI,QAAQ,KAAK,MAAM,EAAE;YACvC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;SACzB;IACH,CAAC,EACD,CAAC,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,eAAe,CAAC,CACrD,CAAC;IAEF,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC1B,CAAC,CAAC"}
@@ -1,4 +1,5 @@
1
+ import { __assign } from "tslib";
1
2
  export var useMenuContextValue = function (state) {
2
- return { open: state.open, setOpen: state.setOpen, triggerRef: state.triggerRef, isSubmenu: state.isSubmenu };
3
+ return __assign({}, state);
3
4
  };
4
5
  //# sourceMappingURL=useMenuContextValue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useMenuContextValue.js","sourceRoot":"","sources":["../../src/Menu/useMenuContextValue.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,IAAM,mBAAmB,GAAG,UAAC,KAAgB;IAClD,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;AAChH,CAAC,CAAC"}
1
+ {"version":3,"file":"useMenuContextValue.js","sourceRoot":"","sources":["../../src/Menu/useMenuContextValue.ts"],"names":[],"mappings":";AAGA,MAAM,CAAC,IAAM,mBAAmB,GAAG,UAAC,KAAgB;IAClD,oBAAY,KAAK,EAAG;AACtB,CAAC,CAAC"}
@@ -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,iFAWtB,CAAC;AAGH,eAAe,WAAW,CAAC"}
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,iFAiBtB,CAAC;AAGH,eAAe,WAAW,CAAC"}
@@ -7,7 +7,7 @@ export var MenuPopover = stagedComponent(function (props) {
7
7
  var state = useMenuPopover(props);
8
8
  var theme = useFluentTheme();
9
9
  return function (_rest, children) {
10
- return (React.createElement(Callout, { target: state.triggerRef, borderWidth: 1, borderColor: theme.colors.neutralStrokeAccessible }, children));
10
+ return (React.createElement(Callout, { borderWidth: 1, borderColor: theme.colors.neutralStrokeAccessible, target: state.triggerRef, onDismiss: state.onDismiss, dismissBehaviors: state.dismissBehaviors }, children));
11
11
  };
12
12
  });
13
13
  MenuPopover.displayName = menuPopoverName;
@@ -1 +1 @@
1
- {"version":3,"file":"MenuPopover.js","sourceRoot":"","sources":["../../src/MenuPopover/MenuPopover.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACnF,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAE,eAAe,EAAoB,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,CAAC,IAAM,WAAW,GAAG,eAAe,CAAC,UAAC,KAAuB;IACjE,IAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACpC,IAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAE/B,OAAO,UAAC,KAAuB,EAAE,QAAyB;QACxD,OAAO,CACL,oBAAC,OAAO,IAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,uBAAuB,IACjG,QAAQ,CACD,CACX,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AACH,WAAW,CAAC,WAAW,GAAG,eAAe,CAAC;AAE1C,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"MenuPopover.js","sourceRoot":"","sources":["../../src/MenuPopover/MenuPopover.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACnF,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAE,eAAe,EAAoB,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,CAAC,IAAM,WAAW,GAAG,eAAe,CAAC,UAAC,KAAuB;IACjE,IAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACpC,IAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAE/B,OAAO,UAAC,KAAuB,EAAE,QAAyB;QACxD,OAAO,CACL,oBAAC,OAAO,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,IAEvC,QAAQ,CACD,CACX,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AACH,WAAW,CAAC,WAAW,GAAG,eAAe,CAAC;AAE1C,eAAe,WAAW,CAAC"}
@@ -1,9 +1,12 @@
1
1
  /// <reference types="react" />
2
2
  import type { IViewProps } from '@fluentui-react-native/adapters';
3
+ import { DismissBehaviors } from '@fluentui-react-native/callout';
3
4
  export declare const menuPopoverName = "MenuPopover";
4
5
  export interface MenuPopoverProps extends Omit<IViewProps, 'onPress'> {
5
6
  }
6
7
  export interface MenuPopoverState {
8
+ dismissBehaviors: DismissBehaviors[];
9
+ onDismiss: () => void;
7
10
  triggerRef: React.RefObject<React.Component>;
8
11
  }
9
12
  //# 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;AAElE,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAE7C,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC;CAAG;AAExE,MAAM,WAAW,gBAAgB;IAC/B,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,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;CAC9C"}
@@ -1 +1 @@
1
- {"version":3,"file":"MenuPopover.types.js","sourceRoot":"","sources":["../../src/MenuPopover/MenuPopover.types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,IAAM,eAAe,GAAG,aAAa,CAAC"}
1
+ {"version":3,"file":"MenuPopover.types.js","sourceRoot":"","sources":["../../src/MenuPopover/MenuPopover.types.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,IAAM,eAAe,GAAG,aAAa,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useMenuPopover.d.ts","sourceRoot":"","sources":["../../src/MenuPopover/useMenuPopover.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,eAAO,MAAM,cAAc,WAAY,gBAAgB,KAAG,gBAMzD,CAAC"}
1
+ {"version":3,"file":"useMenuPopover.d.ts","sourceRoot":"","sources":["../../src/MenuPopover/useMenuPopover.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,eAAO,MAAM,cAAc,WAAY,gBAAgB,KAAG,gBAWzD,CAAC"}
@@ -1,7 +1,13 @@
1
+ import React from 'react';
1
2
  import { useMenuContext } from '../context/menuContext';
2
3
  export var useMenuPopover = function (_props) {
3
4
  var context = useMenuContext();
5
+ var setOpen = context.setOpen;
4
6
  var triggerRef = context.triggerRef;
5
- return { triggerRef: triggerRef };
7
+ var onDismiss = React.useCallback(function () { return setOpen(undefined, false /* isOpen */); }, [setOpen]);
8
+ var dismissBehaviors = context.isControlled
9
+ ? ['preventDismissOnKeyDown', 'preventDismissOnClickOutside']
10
+ : undefined;
11
+ return { triggerRef: triggerRef, onDismiss: onDismiss, dismissBehaviors: dismissBehaviors };
6
12
  };
7
13
  //# sourceMappingURL=useMenuPopover.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useMenuPopover.js","sourceRoot":"","sources":["../../src/MenuPopover/useMenuPopover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,MAAM,CAAC,IAAM,cAAc,GAAG,UAAC,MAAwB;IACrD,IAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IAEjC,IAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAEtC,OAAO,EAAE,UAAU,YAAA,EAAE,CAAC;AACxB,CAAC,CAAC"}
1
+ {"version":3,"file":"useMenuPopover.js","sourceRoot":"","sources":["../../src/MenuPopover/useMenuPopover.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,MAAM,CAAC,IAAM,cAAc,GAAG,UAAC,MAAwB;IACrD,IAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,IAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAEhC,IAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACtC,IAAM,SAAS,GAAG,KAAK,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,OAAO,EAAE,UAAU,YAAA,EAAE,SAAS,WAAA,EAAE,gBAAgB,kBAAA,EAAE,CAAC;AACrD,CAAC,CAAC"}
@@ -2,7 +2,8 @@
2
2
  import { InteractionEvent } from '@fluentui-react-native/interactive-hooks';
3
3
  import { MenuTriggerProps } from './MenuTrigger.types';
4
4
  export declare const useMenuTrigger: (_props: MenuTriggerProps) => {
5
- onClick: (_e: InteractionEvent) => void;
5
+ onClick: (e: InteractionEvent) => void;
6
+ onHoverIn: (e: InteractionEvent) => void;
6
7
  componentRef: import("react").RefObject<import("react").Component<{}, {}, any>>;
7
8
  };
8
9
  //# 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;AAEvD,eAAO,MAAM,cAAc,WAAY,gBAAgB;kBAOhC,gBAAgB;;CAKtC,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;AAEvD,eAAO,MAAM,cAAc,WAAY,gBAAgB;iBAcjC,gBAAgB;mBANd,gBAAgB;;CAWvC,CAAC"}
@@ -3,10 +3,16 @@ export var useMenuTrigger = function (_props) {
3
3
  var context = useMenuContext();
4
4
  var setOpen = context.setOpen;
5
5
  var open = context.open;
6
+ var openOnHover = context.openOnHover;
6
7
  var triggerRef = context.triggerRef;
7
- var onClick = function (_e) {
8
- setOpen(!open);
8
+ var onHoverIn = function (e) {
9
+ if (openOnHover) {
10
+ setOpen(e, true /* isOpen */);
11
+ }
9
12
  };
10
- return { onClick: onClick, componentRef: triggerRef };
13
+ var onClick = function (e) {
14
+ setOpen(e, !open);
15
+ };
16
+ return { onClick: onClick, onHoverIn: onHoverIn, componentRef: triggerRef };
11
17
  };
12
18
  //# sourceMappingURL=useMenuTrigger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useMenuTrigger.js","sourceRoot":"","sources":["../../src/MenuTrigger/useMenuTrigger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAIxD,MAAM,CAAC,IAAM,cAAc,GAAG,UAAC,MAAwB;IACrD,IAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IAEjC,IAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,IAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,IAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAEtC,IAAM,OAAO,GAAG,UAAC,EAAoB;QACnC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,CAAC;IAEF,OAAO,EAAE,OAAO,SAAA,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;AAC/C,CAAC,CAAC"}
1
+ {"version":3,"file":"useMenuTrigger.js","sourceRoot":"","sources":["../../src/MenuTrigger/useMenuTrigger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAIxD,MAAM,CAAC,IAAM,cAAc,GAAG,UAAC,MAAwB;IACrD,IAAM,OAAO,GAAG,cAAc,EAAE,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,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,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,YAAY,EAAE,UAAU,EAAE,CAAC;AAC1D,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"menuContext.d.ts","sourceRoot":"","sources":["../../src/context/menuContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;GAEG;AACH,oBAAY,gBAAgB,GAAG,SAAS,CAAC;AAEzC,eAAO,MAAM,WAAW,0BAKtB,CAAC;AAEH,eAAO,MAAM,YAAY,2BAAuB,CAAC;AACjD,eAAO,MAAM,cAAc,iBAAsC,CAAC"}
1
+ {"version":3,"file":"menuContext.d.ts","sourceRoot":"","sources":["../../src/context/menuContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;GAEG;AACH,oBAAY,gBAAgB,GAAG,SAAS,CAAC;AAEzC,eAAO,MAAM,WAAW,0BAMtB,CAAC;AAEH,eAAO,MAAM,YAAY,2BAAuB,CAAC;AACjD,eAAO,MAAM,cAAc,iBAAsC,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import * as React from 'react';
2
2
  export var MenuContext = React.createContext({
3
+ isControlled: false,
3
4
  isSubmenu: false,
4
5
  open: false,
5
6
  setOpen: function () { return false; },
@@ -1 +1 @@
1
- {"version":3,"file":"menuContext.js","sourceRoot":"","sources":["../../src/context/menuContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,MAAM,CAAC,IAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAmB;IAC/D,SAAS,EAAE,KAAK;IAChB,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,cAAM,OAAA,KAAK,EAAL,CAAK;IACpB,UAAU,EAAE,IAAI;CACjB,CAAC,CAAC;AAEH,MAAM,CAAC,IAAM,YAAY,GAAG,WAAW,CAAC,QAAQ,CAAC;AACjD,MAAM,CAAC,IAAM,cAAc,GAAG,cAAM,OAAA,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,EAA7B,CAA6B,CAAC"}
1
+ {"version":3,"file":"menuContext.js","sourceRoot":"","sources":["../../src/context/menuContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,MAAM,CAAC,IAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAmB;IAC/D,YAAY,EAAE,KAAK;IACnB,SAAS,EAAE,KAAK;IAChB,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,cAAM,OAAA,KAAK,EAAL,CAAK;IACpB,UAAU,EAAE,IAAI;CACjB,CAAC,CAAC;AAEH,MAAM,CAAC,IAAM,YAAY,GAAG,WAAW,CAAC,QAAQ,CAAC;AACjD,MAAM,CAAC,IAAM,cAAc,GAAG,cAAM,OAAA,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,EAA7B,CAA6B,CAAC"}
@@ -1,12 +1,17 @@
1
1
  import type { IViewProps } from '@fluentui-react-native/adapters';
2
+ import { InteractionEvent } from '@fluentui-react-native/interactive-hooks';
2
3
  import React from 'react';
3
4
  export declare const menuName = "Menu";
4
5
  export interface MenuProps extends Omit<IViewProps, 'onPress'> {
6
+ defaultOpen?: boolean;
5
7
  open?: boolean;
8
+ onOpenChange?: (e: InteractionEvent, isOpen: boolean) => void;
9
+ openOnHover?: boolean;
6
10
  }
7
11
  export interface MenuState extends MenuProps {
12
+ isControlled: boolean;
8
13
  isSubmenu: boolean;
9
- setOpen: (isOpen: boolean) => void;
14
+ setOpen: (e: InteractionEvent, isOpen: boolean) => void;
10
15
  triggerRef: React.RefObject<React.Component>;
11
16
  }
12
17
  //# sourceMappingURL=Menu.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.types.d.ts","sourceRoot":"","sources":["../../src/Menu/Menu.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,eAAO,MAAM,QAAQ,SAAS,CAAC;AAE/B,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC;IAC5D,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,SAAU,SAAQ,SAAS;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;CAC9C"}
1
+ {"version":3,"file":"Menu.types.d.ts","sourceRoot":"","sources":["../../src/Menu/Menu.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,eAAO,MAAM,QAAQ,SAAS,CAAC;AAE/B,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC;IAC5D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9D,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,SAAU,SAAQ,SAAS;IAC1C,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,CAAC,CAAC,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACxD,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;CAC9C"}
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.types.js","sourceRoot":"","sources":["../../src/Menu/Menu.types.ts"],"names":[],"mappings":";;;AAGa,QAAA,QAAQ,GAAG,MAAM,CAAC"}
1
+ {"version":3,"file":"Menu.types.js","sourceRoot":"","sources":["../../src/Menu/Menu.types.ts"],"names":[],"mappings":";;;AAIa,QAAA,QAAQ,GAAG,MAAM,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useMenu.d.ts","sourceRoot":"","sources":["../../src/Menu/useMenu.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpD,eAAO,MAAM,OAAO,UAAW,SAAS,KAAG,SAY1C,CAAC"}
1
+ {"version":3,"file":"useMenu.d.ts","sourceRoot":"","sources":["../../src/Menu/useMenu.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpD,eAAO,MAAM,OAAO,UAAW,SAAS,KAAG,SAe1C,CAAC"}
@@ -5,19 +5,28 @@ var tslib_1 = require("tslib");
5
5
  var react_1 = (0, tslib_1.__importDefault)(require("react"));
6
6
  var menuContext_1 = require("../context/menuContext");
7
7
  var useMenu = function (props) {
8
- var _a = useMenuOpenState(props), open = _a[0], setOpen = _a[1];
9
8
  var triggerRef = react_1.default.useRef(null);
10
9
  var context = (0, menuContext_1.useMenuContext)();
11
10
  var isSubmenu = context.triggerRef !== null;
12
- return {
13
- open: open,
14
- setOpen: setOpen,
15
- triggerRef: triggerRef,
16
- isSubmenu: isSubmenu,
17
- };
11
+ var isControlled = typeof props.open !== 'undefined';
12
+ var _a = useMenuOpenState(isControlled, props), open = _a[0], setOpen = _a[1];
13
+ return (0, tslib_1.__assign)((0, tslib_1.__assign)({}, props), { open: open, setOpen: setOpen, triggerRef: triggerRef, isSubmenu: isSubmenu, isControlled: isControlled });
18
14
  };
19
15
  exports.useMenu = useMenu;
20
- var useMenuOpenState = function (props) {
21
- return react_1.default.useState(props.open);
16
+ var useMenuOpenState = function (isControlled, props) {
17
+ var defaultOpen = props.defaultOpen, onOpenChange = props.onOpenChange, open = props.open;
18
+ var initialState = typeof defaultOpen !== 'undefined' ? defaultOpen : !!open;
19
+ var _a = react_1.default.useState(initialState), openInternal = _a[0], setOpenInternal = _a[1];
20
+ var state = isControlled ? open : openInternal;
21
+ var setOpen = react_1.default.useCallback(function (e, isOpen) {
22
+ var openPrev = state;
23
+ if (!isControlled) {
24
+ setOpenInternal(isOpen);
25
+ }
26
+ if (onOpenChange && openPrev !== isOpen) {
27
+ onOpenChange(e, isOpen);
28
+ }
29
+ }, [isControlled, state, onOpenChange, setOpenInternal]);
30
+ return [state, setOpen];
22
31
  };
23
32
  //# sourceMappingURL=useMenu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useMenu.js","sourceRoot":"","sources":["../../src/Menu/useMenu.ts"],"names":[],"mappings":";;;;AAAA,6DAA0B;AAC1B,sDAAwD;AAGjD,IAAM,OAAO,GAAG,UAAC,KAAgB;IAChC,IAAA,KAAkB,gBAAgB,CAAC,KAAK,CAAC,EAAxC,IAAI,QAAA,EAAE,OAAO,QAA2B,CAAC;IAChD,IAAM,UAAU,GAAG,eAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtC,IAAM,OAAO,GAAG,IAAA,4BAAc,GAAE,CAAC;IACjC,IAAM,SAAS,GAAG,OAAO,CAAC,UAAU,KAAK,IAAI,CAAC;IAE9C,OAAO;QACL,IAAI,MAAA;QACJ,OAAO,SAAA;QACP,UAAU,YAAA;QACV,SAAS,WAAA;KACV,CAAC;AACJ,CAAC,CAAC;AAZW,QAAA,OAAO,WAYlB;AAEF,IAAM,gBAAgB,GAAG,UAAC,KAAgB;IACxC,OAAO,eAAK,CAAC,QAAQ,CAAU,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC,CAAC"}
1
+ {"version":3,"file":"useMenu.js","sourceRoot":"","sources":["../../src/Menu/useMenu.ts"],"names":[],"mappings":";;;;AACA,6DAA0B;AAC1B,sDAAwD;AAGjD,IAAM,OAAO,GAAG,UAAC,KAAgB;IACtC,IAAM,UAAU,GAAG,eAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtC,IAAM,OAAO,GAAG,IAAA,4BAAc,GAAE,CAAC;IACjC,IAAM,SAAS,GAAG,OAAO,CAAC,UAAU,KAAK,IAAI,CAAC;IAC9C,IAAM,YAAY,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC;IACjD,IAAA,KAAkB,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,EAAtD,IAAI,QAAA,EAAE,OAAO,QAAyC,CAAC;IAE9D,uDACK,KAAK,KACR,IAAI,MAAA,EACJ,OAAO,SAAA,EACP,UAAU,YAAA,EACV,SAAS,WAAA,EACT,YAAY,cAAA,IACZ;AACJ,CAAC,CAAC;AAfW,QAAA,OAAO,WAelB;AAEF,IAAM,gBAAgB,GAAG,UAAC,YAAqB,EAAE,KAAgB;IACvD,IAAA,WAAW,GAAyB,KAAK,YAA9B,EAAE,YAAY,GAAW,KAAK,aAAhB,EAAE,IAAI,GAAK,KAAK,KAAV,CAAW;IAClD,IAAM,YAAY,GAAG,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzE,IAAA,KAAkC,eAAK,CAAC,QAAQ,CAAU,YAAY,CAAC,EAAtE,YAAY,QAAA,EAAE,eAAe,QAAyC,CAAC;IAE9E,IAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;IAEjD,IAAM,OAAO,GAAG,eAAK,CAAC,WAAW,CAC/B,UAAC,CAAmB,EAAE,MAAe;QACnC,IAAM,QAAQ,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,YAAY,EAAE;YACjB,eAAe,CAAC,MAAM,CAAC,CAAC;SACzB;QACD,IAAI,YAAY,IAAI,QAAQ,KAAK,MAAM,EAAE;YACvC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;SACzB;IACH,CAAC,EACD,CAAC,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,eAAe,CAAC,CACrD,CAAC;IAEF,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC1B,CAAC,CAAC"}
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useMenuContextValue = void 0;
4
+ var tslib_1 = require("tslib");
4
5
  var useMenuContextValue = function (state) {
5
- return { open: state.open, setOpen: state.setOpen, triggerRef: state.triggerRef, isSubmenu: state.isSubmenu };
6
+ return (0, tslib_1.__assign)({}, state);
6
7
  };
7
8
  exports.useMenuContextValue = useMenuContextValue;
8
9
  //# sourceMappingURL=useMenuContextValue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useMenuContextValue.js","sourceRoot":"","sources":["../../src/Menu/useMenuContextValue.ts"],"names":[],"mappings":";;;AAGO,IAAM,mBAAmB,GAAG,UAAC,KAAgB;IAClD,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;AAChH,CAAC,CAAC;AAFW,QAAA,mBAAmB,uBAE9B"}
1
+ {"version":3,"file":"useMenuContextValue.js","sourceRoot":"","sources":["../../src/Menu/useMenuContextValue.ts"],"names":[],"mappings":";;;;AAGO,IAAM,mBAAmB,GAAG,UAAC,KAAgB;IAClD,iCAAY,KAAK,EAAG;AACtB,CAAC,CAAC;AAFW,QAAA,mBAAmB,uBAE9B"}
@@ -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,iFAWtB,CAAC;AAGH,eAAe,WAAW,CAAC"}
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,iFAiBtB,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, { target: state.triggerRef, borderWidth: 1, borderColor: theme.colors.neutralStrokeAccessible }, 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));
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,IAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,uBAAuB,IACjG,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,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,IAEvC,QAAQ,CACD,CACX,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AACH,mBAAW,CAAC,WAAW,GAAG,mCAAe,CAAC;AAE1C,kBAAe,mBAAW,CAAC"}
@@ -1,9 +1,12 @@
1
1
  /// <reference types="react" />
2
2
  import type { IViewProps } from '@fluentui-react-native/adapters';
3
+ import { DismissBehaviors } from '@fluentui-react-native/callout';
3
4
  export declare const menuPopoverName = "MenuPopover";
4
5
  export interface MenuPopoverProps extends Omit<IViewProps, 'onPress'> {
5
6
  }
6
7
  export interface MenuPopoverState {
8
+ dismissBehaviors: DismissBehaviors[];
9
+ onDismiss: () => void;
7
10
  triggerRef: React.RefObject<React.Component>;
8
11
  }
9
12
  //# 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;AAElE,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAE7C,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC;CAAG;AAExE,MAAM,WAAW,gBAAgB;IAC/B,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,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;CAC9C"}
@@ -1 +1 @@
1
- {"version":3,"file":"MenuPopover.types.js","sourceRoot":"","sources":["../../src/MenuPopover/MenuPopover.types.ts"],"names":[],"mappings":";;;AAEa,QAAA,eAAe,GAAG,aAAa,CAAC"}
1
+ {"version":3,"file":"MenuPopover.types.js","sourceRoot":"","sources":["../../src/MenuPopover/MenuPopover.types.ts"],"names":[],"mappings":";;;AAGa,QAAA,eAAe,GAAG,aAAa,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useMenuPopover.d.ts","sourceRoot":"","sources":["../../src/MenuPopover/useMenuPopover.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,eAAO,MAAM,cAAc,WAAY,gBAAgB,KAAG,gBAMzD,CAAC"}
1
+ {"version":3,"file":"useMenuPopover.d.ts","sourceRoot":"","sources":["../../src/MenuPopover/useMenuPopover.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,eAAO,MAAM,cAAc,WAAY,gBAAgB,KAAG,gBAWzD,CAAC"}
@@ -1,11 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useMenuPopover = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var react_1 = (0, tslib_1.__importDefault)(require("react"));
4
6
  var menuContext_1 = require("../context/menuContext");
5
7
  var useMenuPopover = function (_props) {
6
8
  var context = (0, menuContext_1.useMenuContext)();
9
+ var setOpen = context.setOpen;
7
10
  var triggerRef = context.triggerRef;
8
- return { triggerRef: triggerRef };
11
+ var onDismiss = react_1.default.useCallback(function () { return setOpen(undefined, false /* isOpen */); }, [setOpen]);
12
+ var dismissBehaviors = context.isControlled
13
+ ? ['preventDismissOnKeyDown', 'preventDismissOnClickOutside']
14
+ : undefined;
15
+ return { triggerRef: triggerRef, onDismiss: onDismiss, dismissBehaviors: dismissBehaviors };
9
16
  };
10
17
  exports.useMenuPopover = useMenuPopover;
11
18
  //# sourceMappingURL=useMenuPopover.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useMenuPopover.js","sourceRoot":"","sources":["../../src/MenuPopover/useMenuPopover.ts"],"names":[],"mappings":";;;AAAA,sDAAwD;AAGjD,IAAM,cAAc,GAAG,UAAC,MAAwB;IACrD,IAAM,OAAO,GAAG,IAAA,4BAAc,GAAE,CAAC;IAEjC,IAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAEtC,OAAO,EAAE,UAAU,YAAA,EAAE,CAAC;AACxB,CAAC,CAAC;AANW,QAAA,cAAc,kBAMzB"}
1
+ {"version":3,"file":"useMenuPopover.js","sourceRoot":"","sources":["../../src/MenuPopover/useMenuPopover.ts"],"names":[],"mappings":";;;;AAAA,6DAA0B;AAE1B,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,OAAO,EAAE,UAAU,YAAA,EAAE,SAAS,WAAA,EAAE,gBAAgB,kBAAA,EAAE,CAAC;AACrD,CAAC,CAAC;AAXW,QAAA,cAAc,kBAWzB"}
@@ -2,7 +2,8 @@
2
2
  import { InteractionEvent } from '@fluentui-react-native/interactive-hooks';
3
3
  import { MenuTriggerProps } from './MenuTrigger.types';
4
4
  export declare const useMenuTrigger: (_props: MenuTriggerProps) => {
5
- onClick: (_e: InteractionEvent) => void;
5
+ onClick: (e: InteractionEvent) => void;
6
+ onHoverIn: (e: InteractionEvent) => void;
6
7
  componentRef: import("react").RefObject<import("react").Component<{}, {}, any>>;
7
8
  };
8
9
  //# 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;AAEvD,eAAO,MAAM,cAAc,WAAY,gBAAgB;kBAOhC,gBAAgB;;CAKtC,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;AAEvD,eAAO,MAAM,cAAc,WAAY,gBAAgB;iBAcjC,gBAAgB;mBANd,gBAAgB;;CAWvC,CAAC"}
@@ -6,11 +6,17 @@ var useMenuTrigger = function (_props) {
6
6
  var context = (0, menuContext_1.useMenuContext)();
7
7
  var setOpen = context.setOpen;
8
8
  var open = context.open;
9
+ var openOnHover = context.openOnHover;
9
10
  var triggerRef = context.triggerRef;
10
- var onClick = function (_e) {
11
- setOpen(!open);
11
+ var onHoverIn = function (e) {
12
+ if (openOnHover) {
13
+ setOpen(e, true /* isOpen */);
14
+ }
12
15
  };
13
- return { onClick: onClick, componentRef: triggerRef };
16
+ var onClick = function (e) {
17
+ setOpen(e, !open);
18
+ };
19
+ return { onClick: onClick, onHoverIn: onHoverIn, componentRef: triggerRef };
14
20
  };
15
21
  exports.useMenuTrigger = useMenuTrigger;
16
22
  //# sourceMappingURL=useMenuTrigger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useMenuTrigger.js","sourceRoot":"","sources":["../../src/MenuTrigger/useMenuTrigger.ts"],"names":[],"mappings":";;;AAAA,sDAAwD;AAIjD,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,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAEtC,IAAM,OAAO,GAAG,UAAC,EAAoB;QACnC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,CAAC;IAEF,OAAO,EAAE,OAAO,SAAA,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;AAC/C,CAAC,CAAC;AAZW,QAAA,cAAc,kBAYzB"}
1
+ {"version":3,"file":"useMenuTrigger.js","sourceRoot":"","sources":["../../src/MenuTrigger/useMenuTrigger.ts"],"names":[],"mappings":";;;AAAA,sDAAwD;AAIjD,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,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,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,YAAY,EAAE,UAAU,EAAE,CAAC;AAC1D,CAAC,CAAC;AAnBW,QAAA,cAAc,kBAmBzB"}
@@ -1 +1 @@
1
- {"version":3,"file":"menuContext.d.ts","sourceRoot":"","sources":["../../src/context/menuContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;GAEG;AACH,oBAAY,gBAAgB,GAAG,SAAS,CAAC;AAEzC,eAAO,MAAM,WAAW,0BAKtB,CAAC;AAEH,eAAO,MAAM,YAAY,2BAAuB,CAAC;AACjD,eAAO,MAAM,cAAc,iBAAsC,CAAC"}
1
+ {"version":3,"file":"menuContext.d.ts","sourceRoot":"","sources":["../../src/context/menuContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;GAEG;AACH,oBAAY,gBAAgB,GAAG,SAAS,CAAC;AAEzC,eAAO,MAAM,WAAW,0BAMtB,CAAC;AAEH,eAAO,MAAM,YAAY,2BAAuB,CAAC;AACjD,eAAO,MAAM,cAAc,iBAAsC,CAAC"}
@@ -4,6 +4,7 @@ exports.useMenuContext = exports.MenuProvider = exports.MenuContext = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var React = (0, tslib_1.__importStar)(require("react"));
6
6
  exports.MenuContext = React.createContext({
7
+ isControlled: false,
7
8
  isSubmenu: false,
8
9
  open: false,
9
10
  setOpen: function () { return false; },
@@ -1 +1 @@
1
- {"version":3,"file":"menuContext.js","sourceRoot":"","sources":["../../src/context/menuContext.ts"],"names":[],"mappings":";;;;AAAA,wDAA+B;AAQlB,QAAA,WAAW,GAAG,KAAK,CAAC,aAAa,CAAmB;IAC/D,SAAS,EAAE,KAAK;IAChB,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,cAAM,OAAA,KAAK,EAAL,CAAK;IACpB,UAAU,EAAE,IAAI;CACjB,CAAC,CAAC;AAEU,QAAA,YAAY,GAAG,mBAAW,CAAC,QAAQ,CAAC;AAC1C,IAAM,cAAc,GAAG,cAAM,OAAA,KAAK,CAAC,UAAU,CAAC,mBAAW,CAAC,EAA7B,CAA6B,CAAC;AAArD,QAAA,cAAc,kBAAuC"}
1
+ {"version":3,"file":"menuContext.js","sourceRoot":"","sources":["../../src/context/menuContext.ts"],"names":[],"mappings":";;;;AAAA,wDAA+B;AAQlB,QAAA,WAAW,GAAG,KAAK,CAAC,aAAa,CAAmB;IAC/D,YAAY,EAAE,KAAK;IACnB,SAAS,EAAE,KAAK;IAChB,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,cAAM,OAAA,KAAK,EAAL,CAAK;IACpB,UAAU,EAAE,IAAI;CACjB,CAAC,CAAC;AAEU,QAAA,YAAY,GAAG,mBAAW,CAAC,QAAQ,CAAC;AAC1C,IAAM,cAAc,GAAG,cAAM,OAAA,KAAK,CAAC,UAAU,CAAC,mBAAW,CAAC,EAA7B,CAA6B,CAAC;AAArD,QAAA,cAAc,kBAAuC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluentui-react-native/menu",
3
- "version": "0.5.2",
3
+ "version": "0.6.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",
@@ -1,14 +1,19 @@
1
1
  import type { IViewProps } from '@fluentui-react-native/adapters';
2
+ import { InteractionEvent } from '@fluentui-react-native/interactive-hooks';
2
3
  import React from 'react';
3
4
 
4
5
  export const menuName = 'Menu';
5
6
 
6
7
  export interface MenuProps extends Omit<IViewProps, 'onPress'> {
8
+ defaultOpen?: boolean;
7
9
  open?: boolean;
10
+ onOpenChange?: (e: InteractionEvent, isOpen: boolean) => void;
11
+ openOnHover?: boolean;
8
12
  }
9
13
 
10
14
  export interface MenuState extends MenuProps {
15
+ isControlled: boolean;
11
16
  isSubmenu: boolean;
12
- setOpen: (isOpen: boolean) => void;
17
+ setOpen: (e: InteractionEvent, isOpen: boolean) => void;
13
18
  triggerRef: React.RefObject<React.Component>;
14
19
  }
@@ -1,21 +1,44 @@
1
+ import { InteractionEvent } from '@fluentui-react-native/interactive-hooks';
1
2
  import React from 'react';
2
3
  import { useMenuContext } from '../context/menuContext';
3
4
  import { MenuProps, MenuState } from './Menu.types';
4
5
 
5
6
  export const useMenu = (props: MenuProps): MenuState => {
6
- const [open, setOpen] = useMenuOpenState(props);
7
7
  const triggerRef = React.useRef(null);
8
8
  const context = useMenuContext();
9
9
  const isSubmenu = context.triggerRef !== null;
10
+ const isControlled = typeof props.open !== 'undefined';
11
+ const [open, setOpen] = useMenuOpenState(isControlled, props);
10
12
 
11
13
  return {
14
+ ...props,
12
15
  open,
13
16
  setOpen,
14
17
  triggerRef,
15
18
  isSubmenu,
19
+ isControlled,
16
20
  };
17
21
  };
18
22
 
19
- const useMenuOpenState = (props: MenuProps) => {
20
- return React.useState<boolean>(props.open);
23
+ const useMenuOpenState = (isControlled: boolean, props: MenuProps): [boolean, (e: InteractionEvent, isOpen: boolean) => void] => {
24
+ const { defaultOpen, onOpenChange, open } = props;
25
+ const initialState = typeof defaultOpen !== 'undefined' ? defaultOpen : !!open;
26
+ const [openInternal, setOpenInternal] = React.useState<boolean>(initialState);
27
+
28
+ const state = isControlled ? open : openInternal;
29
+
30
+ const setOpen = React.useCallback(
31
+ (e: InteractionEvent, isOpen: boolean) => {
32
+ const openPrev = state;
33
+ if (!isControlled) {
34
+ setOpenInternal(isOpen);
35
+ }
36
+ if (onOpenChange && openPrev !== isOpen) {
37
+ onOpenChange(e, isOpen);
38
+ }
39
+ },
40
+ [isControlled, state, onOpenChange, setOpenInternal],
41
+ );
42
+
43
+ return [state, setOpen];
21
44
  };
@@ -2,5 +2,5 @@ import { MenuContextValue } from '../context/menuContext';
2
2
  import { MenuState } from './Menu.types';
3
3
 
4
4
  export const useMenuContextValue = (state: MenuState): MenuContextValue => {
5
- return { open: state.open, setOpen: state.setOpen, triggerRef: state.triggerRef, isSubmenu: state.isSubmenu };
5
+ return { ...state };
6
6
  };
@@ -10,7 +10,13 @@ export const MenuPopover = stagedComponent((props: MenuPopoverProps) => {
10
10
 
11
11
  return (_rest: MenuPopoverProps, children: React.ReactNode) => {
12
12
  return (
13
- <Callout target={state.triggerRef} borderWidth={1} borderColor={theme.colors.neutralStrokeAccessible}>
13
+ <Callout
14
+ borderWidth={1}
15
+ borderColor={theme.colors.neutralStrokeAccessible}
16
+ target={state.triggerRef}
17
+ onDismiss={state.onDismiss}
18
+ dismissBehaviors={state.dismissBehaviors}
19
+ >
14
20
  {children}
15
21
  </Callout>
16
22
  );
@@ -1,9 +1,12 @@
1
1
  import type { IViewProps } from '@fluentui-react-native/adapters';
2
+ import { DismissBehaviors } from '@fluentui-react-native/callout';
2
3
 
3
4
  export const menuPopoverName = 'MenuPopover';
4
5
 
5
6
  export interface MenuPopoverProps extends Omit<IViewProps, 'onPress'> {}
6
7
 
7
8
  export interface MenuPopoverState {
9
+ dismissBehaviors: DismissBehaviors[];
10
+ onDismiss: () => void;
8
11
  triggerRef: React.RefObject<React.Component>;
9
12
  }
@@ -1,10 +1,17 @@
1
+ import React from 'react';
2
+ import { DismissBehaviors } from '@fluentui-react-native/callout';
1
3
  import { useMenuContext } from '../context/menuContext';
2
4
  import { MenuPopoverProps, MenuPopoverState } from './MenuPopover.types';
3
5
 
4
6
  export const useMenuPopover = (_props: MenuPopoverProps): MenuPopoverState => {
5
7
  const context = useMenuContext();
8
+ const setOpen = context.setOpen;
6
9
 
7
10
  const triggerRef = context.triggerRef;
11
+ const onDismiss = React.useCallback(() => setOpen(undefined, false /* isOpen */), [setOpen]);
12
+ const dismissBehaviors = context.isControlled
13
+ ? (['preventDismissOnKeyDown', 'preventDismissOnClickOutside'] as DismissBehaviors[])
14
+ : undefined;
8
15
 
9
- return { triggerRef };
16
+ return { triggerRef, onDismiss, dismissBehaviors };
10
17
  };
@@ -7,11 +7,18 @@ export const useMenuTrigger = (_props: MenuTriggerProps) => {
7
7
 
8
8
  const setOpen = context.setOpen;
9
9
  const open = context.open;
10
+ const openOnHover = context.openOnHover;
10
11
  const triggerRef = context.triggerRef;
11
12
 
12
- const onClick = (_e: InteractionEvent) => {
13
- setOpen(!open);
13
+ const onHoverIn = (e: InteractionEvent) => {
14
+ if (openOnHover) {
15
+ setOpen(e, true /* isOpen */);
16
+ }
14
17
  };
15
18
 
16
- return { onClick, componentRef: triggerRef };
19
+ const onClick = (e: InteractionEvent) => {
20
+ setOpen(e, !open);
21
+ };
22
+
23
+ return { onClick, onHoverIn, componentRef: triggerRef };
17
24
  };
@@ -7,6 +7,7 @@ import type { MenuState } from '../Menu/Menu.types';
7
7
  export type MenuContextValue = MenuState;
8
8
 
9
9
  export const MenuContext = React.createContext<MenuContextValue>({
10
+ isControlled: false,
10
11
  isSubmenu: false,
11
12
  open: false,
12
13
  setOpen: () => false,