@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.
Files changed (124) hide show
  1. package/CHANGELOG.json +132 -7
  2. package/CHANGELOG.md +42 -2
  3. package/lib/MenuItemCheckbox/MenuItemCheckbox.d.ts +4 -2
  4. package/lib/MenuItemCheckbox/MenuItemCheckbox.d.ts.map +1 -1
  5. package/lib/MenuItemCheckbox/MenuItemCheckbox.js +11 -8
  6. package/lib/MenuItemCheckbox/MenuItemCheckbox.js.map +1 -1
  7. package/lib/MenuItemCheckbox/useMenuItemCheckbox.d.ts +10 -0
  8. package/lib/MenuItemCheckbox/useMenuItemCheckbox.d.ts.map +1 -1
  9. package/lib/MenuItemCheckbox/useMenuItemCheckbox.js +28 -14
  10. package/lib/MenuItemCheckbox/useMenuItemCheckbox.js.map +1 -1
  11. package/lib/MenuItemRadio/MenuItemRadio.d.ts +4 -0
  12. package/lib/MenuItemRadio/MenuItemRadio.d.ts.map +1 -0
  13. package/lib/MenuItemRadio/MenuItemRadio.js +12 -0
  14. package/lib/MenuItemRadio/MenuItemRadio.js.map +1 -0
  15. package/lib/MenuItemRadio/useMenuItemRadio.d.ts +3 -0
  16. package/lib/MenuItemRadio/useMenuItemRadio.d.ts.map +1 -0
  17. package/lib/MenuItemRadio/useMenuItemRadio.js +15 -0
  18. package/lib/MenuItemRadio/useMenuItemRadio.js.map +1 -0
  19. package/lib/MenuList/MenuList.d.ts +0 -1
  20. package/lib/MenuList/MenuList.d.ts.map +1 -1
  21. package/lib/MenuList/MenuList.js +23 -5
  22. package/lib/MenuList/MenuList.js.map +1 -1
  23. package/lib/MenuList/MenuList.styling.d.ts.map +1 -1
  24. package/lib/MenuList/MenuList.styling.js +2 -1
  25. package/lib/MenuList/MenuList.styling.js.map +1 -1
  26. package/lib/MenuList/MenuList.types.d.ts +5 -1
  27. package/lib/MenuList/MenuList.types.d.ts.map +1 -1
  28. package/lib/MenuList/MenuListTokens.d.ts.map +1 -1
  29. package/lib/MenuList/MenuListTokens.js +1 -0
  30. package/lib/MenuList/MenuListTokens.js.map +1 -1
  31. package/lib/MenuList/useMenuList.d.ts.map +1 -1
  32. package/lib/MenuList/useMenuList.js +13 -3
  33. package/lib/MenuList/useMenuList.js.map +1 -1
  34. package/lib/MenuList/{useMenuContextValue.d.ts → useMenuListContextValue.d.ts} +1 -1
  35. package/lib/MenuList/useMenuListContextValue.d.ts.map +1 -0
  36. package/lib/MenuList/{useMenuContextValue.js → useMenuListContextValue.js} +1 -1
  37. package/lib/MenuList/useMenuListContextValue.js.map +1 -0
  38. package/lib/MenuPopover/MenuPopover.d.ts.map +1 -1
  39. package/lib/MenuPopover/MenuPopover.js +1 -1
  40. package/lib/MenuPopover/MenuPopover.js.map +1 -1
  41. package/lib/MenuPopover/MenuPopover.types.d.ts +2 -0
  42. package/lib/MenuPopover/MenuPopover.types.d.ts.map +1 -1
  43. package/lib/MenuPopover/useMenuPopover.d.ts.map +1 -1
  44. package/lib/MenuPopover/useMenuPopover.js +6 -1
  45. package/lib/MenuPopover/useMenuPopover.js.map +1 -1
  46. package/lib/MenuTrigger/useMenuTrigger.d.ts +3 -0
  47. package/lib/MenuTrigger/useMenuTrigger.d.ts.map +1 -1
  48. package/lib/MenuTrigger/useMenuTrigger.js +11 -1
  49. package/lib/MenuTrigger/useMenuTrigger.js.map +1 -1
  50. package/lib/index.d.ts +1 -0
  51. package/lib/index.d.ts.map +1 -1
  52. package/lib/index.js +1 -0
  53. package/lib/index.js.map +1 -1
  54. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckbox.d.ts +4 -2
  55. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckbox.d.ts.map +1 -1
  56. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckbox.js +12 -8
  57. package/lib-commonjs/MenuItemCheckbox/MenuItemCheckbox.js.map +1 -1
  58. package/lib-commonjs/MenuItemCheckbox/useMenuItemCheckbox.d.ts +10 -0
  59. package/lib-commonjs/MenuItemCheckbox/useMenuItemCheckbox.d.ts.map +1 -1
  60. package/lib-commonjs/MenuItemCheckbox/useMenuItemCheckbox.js +31 -16
  61. package/lib-commonjs/MenuItemCheckbox/useMenuItemCheckbox.js.map +1 -1
  62. package/lib-commonjs/MenuItemRadio/MenuItemRadio.d.ts +4 -0
  63. package/lib-commonjs/MenuItemRadio/MenuItemRadio.d.ts.map +1 -0
  64. package/lib-commonjs/MenuItemRadio/MenuItemRadio.js +15 -0
  65. package/lib-commonjs/MenuItemRadio/MenuItemRadio.js.map +1 -0
  66. package/lib-commonjs/MenuItemRadio/useMenuItemRadio.d.ts +3 -0
  67. package/lib-commonjs/MenuItemRadio/useMenuItemRadio.d.ts.map +1 -0
  68. package/lib-commonjs/MenuItemRadio/useMenuItemRadio.js +20 -0
  69. package/lib-commonjs/MenuItemRadio/useMenuItemRadio.js.map +1 -0
  70. package/lib-commonjs/MenuList/MenuList.d.ts +0 -1
  71. package/lib-commonjs/MenuList/MenuList.d.ts.map +1 -1
  72. package/lib-commonjs/MenuList/MenuList.js +22 -4
  73. package/lib-commonjs/MenuList/MenuList.js.map +1 -1
  74. package/lib-commonjs/MenuList/MenuList.styling.d.ts.map +1 -1
  75. package/lib-commonjs/MenuList/MenuList.styling.js +2 -1
  76. package/lib-commonjs/MenuList/MenuList.styling.js.map +1 -1
  77. package/lib-commonjs/MenuList/MenuList.types.d.ts +5 -1
  78. package/lib-commonjs/MenuList/MenuList.types.d.ts.map +1 -1
  79. package/lib-commonjs/MenuList/MenuListTokens.d.ts.map +1 -1
  80. package/lib-commonjs/MenuList/MenuListTokens.js +1 -0
  81. package/lib-commonjs/MenuList/MenuListTokens.js.map +1 -1
  82. package/lib-commonjs/MenuList/useMenuList.d.ts.map +1 -1
  83. package/lib-commonjs/MenuList/useMenuList.js +13 -3
  84. package/lib-commonjs/MenuList/useMenuList.js.map +1 -1
  85. package/lib-commonjs/MenuList/{useMenuContextValue.d.ts → useMenuListContextValue.d.ts} +1 -1
  86. package/lib-commonjs/MenuList/useMenuListContextValue.d.ts.map +1 -0
  87. package/lib-commonjs/MenuList/{useMenuContextValue.js → useMenuListContextValue.js} +1 -1
  88. package/lib-commonjs/MenuList/useMenuListContextValue.js.map +1 -0
  89. package/lib-commonjs/MenuPopover/MenuPopover.d.ts.map +1 -1
  90. package/lib-commonjs/MenuPopover/MenuPopover.js +1 -1
  91. package/lib-commonjs/MenuPopover/MenuPopover.js.map +1 -1
  92. package/lib-commonjs/MenuPopover/MenuPopover.types.d.ts +2 -0
  93. package/lib-commonjs/MenuPopover/MenuPopover.types.d.ts.map +1 -1
  94. package/lib-commonjs/MenuPopover/useMenuPopover.d.ts.map +1 -1
  95. package/lib-commonjs/MenuPopover/useMenuPopover.js +6 -1
  96. package/lib-commonjs/MenuPopover/useMenuPopover.js.map +1 -1
  97. package/lib-commonjs/MenuTrigger/useMenuTrigger.d.ts +3 -0
  98. package/lib-commonjs/MenuTrigger/useMenuTrigger.d.ts.map +1 -1
  99. package/lib-commonjs/MenuTrigger/useMenuTrigger.js +11 -1
  100. package/lib-commonjs/MenuTrigger/useMenuTrigger.js.map +1 -1
  101. package/lib-commonjs/index.d.ts +1 -0
  102. package/lib-commonjs/index.d.ts.map +1 -1
  103. package/lib-commonjs/index.js +3 -1
  104. package/lib-commonjs/index.js.map +1 -1
  105. package/package.json +7 -7
  106. package/src/MenuItemCheckbox/MenuItemCheckbox.tsx +29 -16
  107. package/src/MenuItemCheckbox/useMenuItemCheckbox.ts +39 -20
  108. package/src/MenuItemRadio/MenuItemRadio.tsx +16 -0
  109. package/src/MenuItemRadio/useMenuItemRadio.ts +21 -0
  110. package/src/MenuList/MenuList.styling.ts +2 -1
  111. package/src/MenuList/MenuList.tsx +23 -5
  112. package/src/MenuList/MenuList.types.ts +5 -2
  113. package/src/MenuList/MenuListTokens.ts +1 -0
  114. package/src/MenuList/useMenuList.ts +22 -3
  115. package/src/MenuList/{useMenuContextValue.ts → useMenuListContextValue.ts} +0 -0
  116. package/src/MenuPopover/MenuPopover.tsx +2 -0
  117. package/src/MenuPopover/MenuPopover.types.ts +2 -0
  118. package/src/MenuPopover/useMenuPopover.ts +7 -1
  119. package/src/MenuTrigger/useMenuTrigger.ts +13 -1
  120. package/src/index.ts +1 -0
  121. package/lib/MenuList/useMenuContextValue.d.ts.map +0 -1
  122. package/lib/MenuList/useMenuContextValue.js.map +0 -1
  123. package/lib-commonjs/MenuList/useMenuContextValue.d.ts.map +0 -1
  124. 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;CAC7C,CAAC,EALuG,CAKvG,CAAC;AALU,QAAA,qBAAqB,yBAK/B"}
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,aAcnD,CAAC"}
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
- return [state, setChecked];
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,KAA6B,mBAAmB,CAAC,mBAAmB,EAAE,OAAO,CAAC,EAA7E,OAAO,QAAA,EAAE,eAAe,QAAqD,CAAC;IAErF,uDACK,OAAO,KACV,mBAAmB,qBAAA,EACnB,OAAO,SAAA,EACP,eAAe,iBAAA,IACf;AACJ,CAAC,CAAC;AAdW,QAAA,WAAW,eActB;AAEF,IAAM,mBAAmB,GAAG,UAC1B,YAAqB,EACrB,KAAoB;;IAEZ,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,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AAC7B,CAAC,CAAC"}
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=useMenuContextValue.d.ts.map
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"}
@@ -6,4 +6,4 @@ var useMenuListContextValue = function (state) {
6
6
  return (0, tslib_1.__assign)({}, state);
7
7
  };
8
8
  exports.useMenuListContextValue = useMenuListContextValue;
9
- //# sourceMappingURL=useMenuContextValue.js.map
9
+ //# sourceMappingURL=useMenuListContextValue.js.map
@@ -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,iFAiBtB,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,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,IAEvC,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,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":"AAGA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,eAAO,MAAM,cAAc,WAAY,gBAAgB,KAAG,gBAWzD,CAAC"}
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
- return { triggerRef: triggerRef, onDismiss: onDismiss, dismissBehaviors: dismissBehaviors };
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;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"}
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;AAEvD,eAAO,MAAM,cAAc,WAAY,gBAAgB;iBAcjC,gBAAgB;mBANd,gBAAgB;;CAWvC,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;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
+ {"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"}
@@ -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"}
@@ -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.9.1",
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.1 <1.0.0",
27
- "@fluentui-react-native/experimental-text": ">=0.7.27 <1.0.0",
28
- "@fluentui-react-native/framework": "0.7.27",
29
- "@fluentui-react-native/interactive-hooks": ">=0.15.7 <1.0.0",
30
- "@fluentui-react-native/theme-tokens": ">=0.16.3 <1.0.0",
31
- "@fluentui-react-native/tokens": ">=0.12.1 <1.0.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 { menuItemCheckboxName, MenuItemCheckboxProps, MenuItemCheckboxType } from './MenuItemCheckbox.types';
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 (final: MenuItemCheckboxProps) => {
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
- // attach the pressable state handlers
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, toggleChecked);
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(toggleChecked, ' ');
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
- toggleChecked(event);
78
+ toggleCallback(event);
52
79
  }
53
80
  onAccessibilityAction && onAccessibilityAction(event);
54
81
  },
55
- [toggleChecked, onAccessibilityAction],
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 './useMenuContextValue';
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: View,
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;
@@ -8,4 +8,5 @@ export const defaultMenuListTokens: TokenSettings<MenuListTokens, Theme> = (t: T
8
8
  minWidth: 128,
9
9
  maxWidth: 300,
10
10
  backgroundColor: t.colors.neutralBackground1,
11
+ gap: globalTokens.spacing.xxs,
11
12
  });
@@ -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
- ): [Record<string, boolean>, (e: InteractionEvent, name: string, isChecked: boolean) => void] => {
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
- return [state, setChecked];
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
  };
@@ -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>