@atlaskit/dropdown-menu 10.1.8 → 11.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +148 -0
- package/__perf__/default.tsx +1 -1
- package/__perf__/dropdown-menu.tsx +216 -0
- package/codemods/11.0.0-lite-mode.tsx +39 -0
- package/codemods/__tests__/11.0.0-lite-mode.test.tsx +48 -0
- package/codemods/__tests__/convert-position.test.tsx +88 -0
- package/codemods/__tests__/convert-triggerType.test.tsx +100 -0
- package/codemods/__tests__/deprecate-items.test.tsx +108 -0
- package/codemods/__tests__/deprecate-onItemActivated.test.tsx +108 -0
- package/codemods/__tests__/deprecate-onPositioned.test.tsx +108 -0
- package/codemods/__tests__/deprecate-shouldFitContainer.tsx +108 -0
- package/codemods/__tests__/rename-imports.tsx +136 -0
- package/codemods/__tests__/replace-position-to-placement.test.tsx +84 -0
- package/codemods/__tests__/replace-shouldAllowMultipleLine.test.tsx +122 -0
- package/codemods/__tests__/update-component-callsites.tsx +66 -0
- package/codemods/migrates/convert-trigger-type.tsx +57 -0
- package/codemods/migrates/deprecate-items.tsx +9 -0
- package/codemods/migrates/deprecate-onItemActivated.tsx +9 -0
- package/codemods/migrates/deprecate-onPositioned.tsx +9 -0
- package/codemods/migrates/deprecate-shouldFitContainer.tsx +9 -0
- package/codemods/migrates/rename-imports.tsx +22 -0
- package/codemods/migrates/replace-position-to-placement.tsx +38 -0
- package/codemods/migrates/replace-shouldAllowMultiline.tsx +47 -0
- package/codemods/migrates/update-component-callsites.tsx +13 -0
- package/codemods/utils/convert-position.tsx +24 -0
- package/codemods/utils/create-rename-import.tsx +41 -0
- package/codemods/utils/create-update-callsite.tsx +32 -0
- package/dist/cjs/checkbox/dropdown-item-checkbox-group.js +31 -0
- package/dist/cjs/checkbox/dropdown-item-checkbox.js +108 -0
- package/dist/cjs/dropdown-menu-item-group.js +22 -0
- package/dist/cjs/dropdown-menu-item.js +67 -0
- package/dist/cjs/dropdown-menu.js +194 -0
- package/dist/cjs/index.js +21 -29
- package/dist/cjs/{components/item/DropdownItemRadio.js → internal/components/focus-manager.js} +40 -9
- package/dist/cjs/internal/components/menu-wrapper.js +68 -0
- package/dist/cjs/internal/context/checkbox-group-context.js +14 -0
- package/dist/cjs/internal/context/selection-store.js +76 -0
- package/dist/cjs/internal/hooks/use-checkbox-state.js +68 -0
- package/dist/cjs/internal/hooks/use-radio-state.js +84 -0
- package/dist/cjs/internal/hooks/use-register-item-with-focus-manager.js +29 -0
- package/dist/cjs/internal/utils/get-icon-colors.js +25 -0
- package/dist/cjs/internal/utils/handle-focus.js +58 -0
- package/dist/cjs/internal/utils/is-checkbox-item.js +11 -0
- package/dist/cjs/internal/utils/is-radio-item.js +11 -0
- package/dist/cjs/internal/utils/is-voice-over-supported.js +23 -0
- package/dist/cjs/internal/utils/reset-options-in-group.js +23 -0
- package/dist/cjs/radio/dropdown-item-radio-group.js +89 -0
- package/dist/cjs/radio/dropdown-item-radio.js +108 -0
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/checkbox/dropdown-item-checkbox-group.js +21 -0
- package/dist/es2019/checkbox/dropdown-item-checkbox.js +67 -0
- package/dist/es2019/dropdown-menu-item-group.js +11 -0
- package/dist/es2019/dropdown-menu-item.js +49 -0
- package/dist/es2019/dropdown-menu.js +151 -0
- package/dist/es2019/index.js +7 -11
- package/dist/es2019/internal/components/focus-manager.js +40 -0
- package/dist/es2019/internal/components/menu-wrapper.js +44 -0
- package/dist/es2019/internal/context/checkbox-group-context.js +6 -0
- package/dist/es2019/internal/context/selection-store.js +54 -0
- package/dist/es2019/internal/hooks/use-checkbox-state.js +45 -0
- package/dist/es2019/internal/hooks/use-radio-state.js +56 -0
- package/dist/es2019/internal/hooks/use-register-item-with-focus-manager.js +19 -0
- package/dist/es2019/internal/utils/get-icon-colors.js +17 -0
- package/dist/es2019/internal/utils/handle-focus.js +48 -0
- package/dist/es2019/internal/utils/is-checkbox-item.js +4 -0
- package/dist/es2019/internal/utils/is-radio-item.js +4 -0
- package/dist/es2019/internal/utils/is-voice-over-supported.js +11 -0
- package/dist/es2019/internal/utils/reset-options-in-group.js +7 -0
- package/dist/es2019/radio/dropdown-item-radio-group.js +56 -0
- package/dist/es2019/radio/dropdown-item-radio.js +67 -0
- package/dist/es2019/version.json +1 -1
- package/dist/esm/checkbox/dropdown-item-checkbox-group.js +19 -0
- package/dist/esm/checkbox/dropdown-item-checkbox.js +81 -0
- package/dist/esm/dropdown-menu-item-group.js +11 -0
- package/dist/esm/dropdown-menu-item.js +52 -0
- package/dist/esm/dropdown-menu.js +168 -0
- package/dist/esm/index.js +7 -11
- package/dist/esm/internal/components/focus-manager.js +39 -0
- package/dist/esm/internal/components/menu-wrapper.js +45 -0
- package/dist/esm/internal/context/checkbox-group-context.js +6 -0
- package/dist/esm/internal/context/selection-store.js +58 -0
- package/dist/esm/internal/hooks/use-checkbox-state.js +55 -0
- package/dist/esm/internal/hooks/use-radio-state.js +70 -0
- package/dist/esm/internal/hooks/use-register-item-with-focus-manager.js +19 -0
- package/dist/esm/internal/utils/get-icon-colors.js +17 -0
- package/dist/esm/internal/utils/handle-focus.js +47 -0
- package/dist/esm/internal/utils/is-checkbox-item.js +4 -0
- package/dist/esm/internal/utils/is-radio-item.js +4 -0
- package/dist/esm/internal/utils/is-voice-over-supported.js +15 -0
- package/dist/esm/internal/utils/reset-options-in-group.js +13 -0
- package/dist/esm/radio/dropdown-item-radio-group.js +66 -0
- package/dist/esm/radio/dropdown-item-radio.js +81 -0
- package/dist/esm/version.json +1 -1
- package/dist/types/checkbox/dropdown-item-checkbox-group.d.ts +16 -0
- package/dist/types/checkbox/dropdown-item-checkbox.d.ts +13 -0
- package/dist/types/dropdown-menu-item-group.d.ts +11 -0
- package/dist/types/dropdown-menu-item.d.ts +13 -0
- package/dist/types/dropdown-menu.d.ts +13 -0
- package/dist/types/index.d.ts +8 -10
- package/dist/types/internal/components/focus-manager.d.ts +19 -0
- package/dist/types/internal/components/menu-wrapper.d.ts +11 -0
- package/dist/types/internal/context/checkbox-group-context.d.ts +5 -0
- package/dist/types/internal/context/selection-store.d.ts +27 -0
- package/dist/types/internal/hooks/use-checkbox-state.d.ts +14 -0
- package/dist/types/internal/hooks/use-radio-state.d.ts +9 -0
- package/dist/types/internal/hooks/use-register-item-with-focus-manager.d.ts +4 -0
- package/dist/types/internal/utils/get-icon-colors.d.ts +8 -0
- package/dist/types/internal/utils/handle-focus.d.ts +2 -0
- package/dist/types/internal/utils/is-checkbox-item.d.ts +1 -0
- package/dist/types/internal/utils/is-radio-item.d.ts +1 -0
- package/dist/types/internal/utils/is-voice-over-supported.d.ts +2 -0
- package/dist/types/internal/utils/reset-options-in-group.d.ts +4 -0
- package/dist/types/radio/dropdown-item-radio-group.d.ts +25 -0
- package/dist/types/radio/dropdown-item-radio.d.ts +13 -0
- package/dist/types/types.d.ts +254 -79
- package/package.json +39 -23
- package/dist/cjs/components/DropdownMenu.js +0 -230
- package/dist/cjs/components/DropdownMenuStateless.js +0 -523
- package/dist/cjs/components/context/DropdownItemClickManager.js +0 -72
- package/dist/cjs/components/context/DropdownItemFocusManager.js +0 -178
- package/dist/cjs/components/context/DropdownItemSelectionCache.js +0 -131
- package/dist/cjs/components/context/DropdownItemSelectionManager.js +0 -185
- package/dist/cjs/components/group/DropdownItemGroup.js +0 -61
- package/dist/cjs/components/group/DropdownItemGroupCheckbox.js +0 -16
- package/dist/cjs/components/group/DropdownItemGroupRadio.js +0 -16
- package/dist/cjs/components/group/ert-group-selection.js +0 -8
- package/dist/cjs/components/hoc/withItemSelectionManager.js +0 -66
- package/dist/cjs/components/hoc/withToggleInteraction.js +0 -175
- package/dist/cjs/components/item/DropdownItem.js +0 -19
- package/dist/cjs/components/item/DropdownItemCheckbox.js +0 -28
- package/dist/cjs/components/item/ert-item-checkbox.js +0 -8
- package/dist/cjs/components/item/ert-item-radio.js +0 -8
- package/dist/cjs/components/item/ert-item.js +0 -8
- package/dist/cjs/styled/WidthConstrainer.js +0 -21
- package/dist/cjs/util/contextNamespace.js +0 -19
- package/dist/cjs/util/getDisplayName.js +0 -14
- package/dist/cjs/util/keys.js +0 -18
- package/dist/cjs/util/safeContextCall.js +0 -27
- package/dist/cjs/util/supportsVoiceover.js +0 -17
- package/dist/es2019/components/DropdownMenu.js +0 -156
- package/dist/es2019/components/DropdownMenuStateless.js +0 -459
- package/dist/es2019/components/context/DropdownItemClickManager.js +0 -31
- package/dist/es2019/components/context/DropdownItemFocusManager.js +0 -134
- package/dist/es2019/components/context/DropdownItemSelectionCache.js +0 -68
- package/dist/es2019/components/context/DropdownItemSelectionManager.js +0 -140
- package/dist/es2019/components/group/DropdownItemGroup.js +0 -17
- package/dist/es2019/components/group/DropdownItemGroupCheckbox.js +0 -3
- package/dist/es2019/components/group/DropdownItemGroupRadio.js +0 -3
- package/dist/es2019/components/group/ert-group-selection.js +0 -1
- package/dist/es2019/components/hoc/withItemSelectionManager.js +0 -20
- package/dist/es2019/components/hoc/withToggleInteraction.js +0 -119
- package/dist/es2019/components/item/DropdownItem.js +0 -3
- package/dist/es2019/components/item/DropdownItemCheckbox.js +0 -5
- package/dist/es2019/components/item/DropdownItemRadio.js +0 -5
- package/dist/es2019/components/item/ert-item-checkbox.js +0 -1
- package/dist/es2019/components/item/ert-item-radio.js +0 -1
- package/dist/es2019/components/item/ert-item.js +0 -1
- package/dist/es2019/styled/WidthConstrainer.js +0 -6
- package/dist/es2019/util/contextNamespace.js +0 -6
- package/dist/es2019/util/getDisplayName.js +0 -4
- package/dist/es2019/util/keys.js +0 -6
- package/dist/es2019/util/safeContextCall.js +0 -10
- package/dist/es2019/util/supportsVoiceover.js +0 -5
- package/dist/esm/components/DropdownMenu.js +0 -215
- package/dist/esm/components/DropdownMenuStateless.js +0 -516
- package/dist/esm/components/context/DropdownItemClickManager.js +0 -59
- package/dist/esm/components/context/DropdownItemFocusManager.js +0 -164
- package/dist/esm/components/context/DropdownItemSelectionCache.js +0 -113
- package/dist/esm/components/context/DropdownItemSelectionManager.js +0 -174
- package/dist/esm/components/group/DropdownItemGroup.js +0 -43
- package/dist/esm/components/group/DropdownItemGroupCheckbox.js +0 -3
- package/dist/esm/components/group/DropdownItemGroupRadio.js +0 -3
- package/dist/esm/components/group/ert-group-selection.js +0 -1
- package/dist/esm/components/hoc/withItemSelectionManager.js +0 -47
- package/dist/esm/components/hoc/withToggleInteraction.js +0 -155
- package/dist/esm/components/item/DropdownItem.js +0 -3
- package/dist/esm/components/item/DropdownItemCheckbox.js +0 -7
- package/dist/esm/components/item/DropdownItemRadio.js +0 -7
- package/dist/esm/components/item/ert-item-checkbox.js +0 -1
- package/dist/esm/components/item/ert-item-radio.js +0 -1
- package/dist/esm/components/item/ert-item.js +0 -1
- package/dist/esm/styled/WidthConstrainer.js +0 -9
- package/dist/esm/util/contextNamespace.js +0 -8
- package/dist/esm/util/getDisplayName.js +0 -6
- package/dist/esm/util/keys.js +0 -6
- package/dist/esm/util/safeContextCall.js +0 -18
- package/dist/esm/util/supportsVoiceover.js +0 -9
- package/dist/types/components/DropdownMenu.d.ts +0 -36
- package/dist/types/components/DropdownMenuStateless.d.ts +0 -82
- package/dist/types/components/context/DropdownItemClickManager.d.ts +0 -19
- package/dist/types/components/context/DropdownItemFocusManager.d.ts +0 -35
- package/dist/types/components/context/DropdownItemSelectionCache.d.ts +0 -31
- package/dist/types/components/context/DropdownItemSelectionManager.d.ts +0 -34
- package/dist/types/components/group/DropdownItemGroup.d.ts +0 -12
- package/dist/types/components/group/DropdownItemGroupCheckbox.d.ts +0 -55
- package/dist/types/components/group/DropdownItemGroupRadio.d.ts +0 -55
- package/dist/types/components/group/ert-group-selection.d.ts +0 -6
- package/dist/types/components/hoc/withItemSelectionManager.d.ts +0 -63
- package/dist/types/components/hoc/withToggleInteraction.d.ts +0 -98
- package/dist/types/components/item/DropdownItem.d.ts +0 -65
- package/dist/types/components/item/DropdownItemCheckbox.d.ts +0 -80
- package/dist/types/components/item/DropdownItemRadio.d.ts +0 -80
- package/dist/types/components/item/ert-item-checkbox.d.ts +0 -2
- package/dist/types/components/item/ert-item-radio.d.ts +0 -2
- package/dist/types/components/item/ert-item.d.ts +0 -2
- package/dist/types/styled/WidthConstrainer.d.ts +0 -7
- package/dist/types/util/contextNamespace.d.ts +0 -4
- package/dist/types/util/getDisplayName.d.ts +0 -3
- package/dist/types/util/keys.d.ts +0 -6
- package/dist/types/util/safeContextCall.d.ts +0 -6
- package/dist/types/util/supportsVoiceover.d.ts +0 -2
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
|
|
12
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
|
+
|
|
14
|
+
var _react = require("react");
|
|
15
|
+
|
|
16
|
+
var _dropdownItemRadioGroup = require("../../radio/dropdown-item-radio-group");
|
|
17
|
+
|
|
18
|
+
var _selectionStore = require("../context/selection-store");
|
|
19
|
+
|
|
20
|
+
var _resetOptionsInGroup = _interopRequireDefault(require("../utils/reset-options-in-group"));
|
|
21
|
+
|
|
22
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
23
|
+
|
|
24
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
25
|
+
|
|
26
|
+
function useRadioState(_ref) {
|
|
27
|
+
var id = _ref.id,
|
|
28
|
+
isSelected = _ref.isSelected,
|
|
29
|
+
defaultSelected = _ref.defaultSelected;
|
|
30
|
+
|
|
31
|
+
var _useContext = (0, _react.useContext)(_selectionStore.SelectionStoreContext),
|
|
32
|
+
setGroupState = _useContext.setGroupState,
|
|
33
|
+
getGroupState = _useContext.getGroupState;
|
|
34
|
+
|
|
35
|
+
var _useContext2 = (0, _react.useContext)(_dropdownItemRadioGroup.RadioGroupContext),
|
|
36
|
+
group = _useContext2.id,
|
|
37
|
+
radioGroupState = _useContext2.radioGroupState,
|
|
38
|
+
selectRadioItem = _useContext2.selectRadioItem;
|
|
39
|
+
|
|
40
|
+
var persistedIsSelected = radioGroupState[id];
|
|
41
|
+
|
|
42
|
+
var _useState = (0, _react.useState)(function () {
|
|
43
|
+
return persistedIsSelected !== undefined ? persistedIsSelected : defaultSelected || false;
|
|
44
|
+
}),
|
|
45
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
46
|
+
localIsSelected = _useState2[0],
|
|
47
|
+
setLocalIsSelected = _useState2[1];
|
|
48
|
+
|
|
49
|
+
var setLocalState = (0, _react.useCallback)(function (newValue) {
|
|
50
|
+
if (!persistedIsSelected) {
|
|
51
|
+
var nextValue = newValue(persistedIsSelected);
|
|
52
|
+
selectRadioItem(id, nextValue);
|
|
53
|
+
setLocalIsSelected(nextValue);
|
|
54
|
+
}
|
|
55
|
+
}, [persistedIsSelected, id, selectRadioItem]);
|
|
56
|
+
/**
|
|
57
|
+
* - radio state changes any time a radio child is changed
|
|
58
|
+
* - when it changes we want all radio buttons to update their local state
|
|
59
|
+
* - it takes the value from radio group state and applies it locally if it exists which it will only exist, if it is selected
|
|
60
|
+
*/
|
|
61
|
+
|
|
62
|
+
(0, _react.useEffect)(function () {
|
|
63
|
+
setLocalIsSelected(function () {
|
|
64
|
+
var existing = radioGroupState[id];
|
|
65
|
+
return existing !== undefined ? existing : defaultSelected || false;
|
|
66
|
+
});
|
|
67
|
+
}, [radioGroupState, group, id, defaultSelected]);
|
|
68
|
+
|
|
69
|
+
if (typeof isSelected === 'boolean') {
|
|
70
|
+
return [isSelected, function () {
|
|
71
|
+
return false;
|
|
72
|
+
}];
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (persistedIsSelected === undefined) {
|
|
76
|
+
var existing = getGroupState(group);
|
|
77
|
+
setGroupState(group, _objectSpread(_objectSpread({}, (0, _resetOptionsInGroup.default)(existing || {})), {}, (0, _defineProperty2.default)({}, id, defaultSelected || false)));
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return [localIsSelected, setLocalState];
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
var _default = useRadioState;
|
|
84
|
+
exports.default = _default;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
var _focusManager = require("../components/focus-manager");
|
|
11
|
+
|
|
12
|
+
// This function is called whenever a MenuItem mounts.
|
|
13
|
+
// The refs stored in the context are used to programatically
|
|
14
|
+
// control focus on a user navigates using the keyboard.
|
|
15
|
+
function useRegisterItemWithFocusManager() {
|
|
16
|
+
var _useContext = (0, _react.useContext)(_focusManager.FocusManagerContext),
|
|
17
|
+
registerRef = _useContext.registerRef;
|
|
18
|
+
|
|
19
|
+
var itemRef = (0, _react.useRef)(null);
|
|
20
|
+
(0, _react.useEffect)(function () {
|
|
21
|
+
if (itemRef.current !== null) {
|
|
22
|
+
registerRef(itemRef.current);
|
|
23
|
+
}
|
|
24
|
+
}, [registerRef]);
|
|
25
|
+
return itemRef;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
var _default = useRegisterItemWithFocusManager;
|
|
29
|
+
exports.default = _default;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _colors = require("@atlaskit/theme/colors");
|
|
9
|
+
|
|
10
|
+
var getIconColors = function getIconColors(isSelected) {
|
|
11
|
+
if (isSelected) {
|
|
12
|
+
return {
|
|
13
|
+
primary: "var(--ds-background-boldBrand-resting, ".concat(_colors.B400, ")"),
|
|
14
|
+
secondary: "var(--ds-background-default, ".concat(_colors.N40, ")")
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
return {
|
|
19
|
+
primary: "var(--ds-border-neutral, ".concat(_colors.N40, ")"),
|
|
20
|
+
secondary: "var(--ds-UNSAFE_util-transparent, ".concat(_colors.N40, ")")
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
var _default = getIconColors;
|
|
25
|
+
exports.default = _default;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = handleFocus;
|
|
9
|
+
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
|
|
12
|
+
var _keycodes = require("@atlaskit/ds-lib/keycodes");
|
|
13
|
+
|
|
14
|
+
var _actionMap;
|
|
15
|
+
|
|
16
|
+
var actionMap = (_actionMap = {}, (0, _defineProperty2.default)(_actionMap, _keycodes.KEY_DOWN, 'next'), (0, _defineProperty2.default)(_actionMap, _keycodes.KEY_UP, 'prev'), (0, _defineProperty2.default)(_actionMap, _keycodes.KEY_HOME, 'first'), (0, _defineProperty2.default)(_actionMap, _keycodes.KEY_END, 'last'), _actionMap);
|
|
17
|
+
|
|
18
|
+
function handleFocus(refs) {
|
|
19
|
+
return function (e) {
|
|
20
|
+
var currentFocusedIdx = refs.findIndex(function (el) {
|
|
21
|
+
var _document$activeEleme;
|
|
22
|
+
|
|
23
|
+
return (_document$activeEleme = document.activeElement) === null || _document$activeEleme === void 0 ? void 0 : _document$activeEleme.isSameNode(el);
|
|
24
|
+
});
|
|
25
|
+
var action = actionMap[e.key];
|
|
26
|
+
|
|
27
|
+
switch (action) {
|
|
28
|
+
case 'next':
|
|
29
|
+
if (currentFocusedIdx < refs.length - 1) {
|
|
30
|
+
e.preventDefault();
|
|
31
|
+
refs[currentFocusedIdx + 1].focus();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
break;
|
|
35
|
+
|
|
36
|
+
case 'prev':
|
|
37
|
+
if (currentFocusedIdx > 0) {
|
|
38
|
+
e.preventDefault();
|
|
39
|
+
refs[currentFocusedIdx - 1].focus();
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
break;
|
|
43
|
+
|
|
44
|
+
case 'first':
|
|
45
|
+
e.preventDefault();
|
|
46
|
+
refs[0].focus();
|
|
47
|
+
break;
|
|
48
|
+
|
|
49
|
+
case 'last':
|
|
50
|
+
e.preventDefault();
|
|
51
|
+
refs[refs.length - 1].focus();
|
|
52
|
+
break;
|
|
53
|
+
|
|
54
|
+
default:
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = isCheckboxItem;
|
|
7
|
+
|
|
8
|
+
function isCheckboxItem(element) {
|
|
9
|
+
var role = element.getAttribute('role');
|
|
10
|
+
return role === 'checkbox' || role === 'menuitemcheckbox';
|
|
11
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = isCheckboxItem;
|
|
7
|
+
|
|
8
|
+
function isCheckboxItem(element) {
|
|
9
|
+
var role = element.getAttribute('role');
|
|
10
|
+
return role === 'radio' || role === 'menuitemradio';
|
|
11
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var canUseDOM = function canUseDOM() {
|
|
9
|
+
return Boolean(typeof window !== 'undefined' && window.document && window.document.createElement);
|
|
10
|
+
};
|
|
11
|
+
/*
|
|
12
|
+
* Making sure we can fallback to browsers doesn't support voice over -
|
|
13
|
+
* we would using menuitemcheckbox / menuitemradio for these that supports voice over, and
|
|
14
|
+
* will fallback to checkbox / radio for these doesn't
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
var isVoiceOverSupported = function isVoiceOverSupported() {
|
|
19
|
+
return /Mac OS X/.test(canUseDOM() ? navigator.userAgent : '');
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
var _default = isVoiceOverSupported;
|
|
23
|
+
exports.default = _default;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
|
|
12
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
13
|
+
|
|
14
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
15
|
+
|
|
16
|
+
var resetOptionsInGroup = function resetOptionsInGroup(group) {
|
|
17
|
+
return Object.keys(group || {}).reduce(function (accumulator, current) {
|
|
18
|
+
return _objectSpread(_objectSpread({}, accumulator), {}, (0, _defineProperty2.default)({}, current, typeof group[current] === 'undefined' ? undefined : false));
|
|
19
|
+
}, {});
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
var _default = resetOptionsInGroup;
|
|
23
|
+
exports.default = _default;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports.default = exports.RadioGroupContext = void 0;
|
|
11
|
+
|
|
12
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
|
+
|
|
14
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
15
|
+
|
|
16
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
17
|
+
|
|
18
|
+
var _noop = _interopRequireDefault(require("@atlaskit/ds-lib/noop"));
|
|
19
|
+
|
|
20
|
+
var _section = _interopRequireDefault(require("@atlaskit/menu/section"));
|
|
21
|
+
|
|
22
|
+
var _selectionStore = require("../internal/context/selection-store");
|
|
23
|
+
|
|
24
|
+
var _resetOptionsInGroup = _interopRequireDefault(require("../internal/utils/reset-options-in-group"));
|
|
25
|
+
|
|
26
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
27
|
+
|
|
28
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
29
|
+
|
|
30
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
31
|
+
|
|
32
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* __Radio group context__
|
|
36
|
+
* Context provider that wraps each DropdownItemRadioGroup
|
|
37
|
+
*/
|
|
38
|
+
var RadioGroupContext = /*#__PURE__*/(0, _react.createContext)({
|
|
39
|
+
id: '',
|
|
40
|
+
radioGroupState: {},
|
|
41
|
+
selectRadioItem: _noop.default
|
|
42
|
+
});
|
|
43
|
+
/**
|
|
44
|
+
* __Dropdown item radio group__
|
|
45
|
+
* Store which manages the selection state for each DropdownItemRadio
|
|
46
|
+
* across mount and unmounts.
|
|
47
|
+
*
|
|
48
|
+
*/
|
|
49
|
+
|
|
50
|
+
exports.RadioGroupContext = RadioGroupContext;
|
|
51
|
+
|
|
52
|
+
var DropdownItemRadioGroup = function DropdownItemRadioGroup(props) {
|
|
53
|
+
var children = props.children,
|
|
54
|
+
id = props.id;
|
|
55
|
+
|
|
56
|
+
var _useContext = (0, _react.useContext)(_selectionStore.SelectionStoreContext),
|
|
57
|
+
setGroupState = _useContext.setGroupState,
|
|
58
|
+
getGroupState = _useContext.getGroupState;
|
|
59
|
+
/**
|
|
60
|
+
* - initially `radioGroupState` is from selection store, so it's safe to update without re-rendering
|
|
61
|
+
* - we flush a render by updating this local radio group state
|
|
62
|
+
*/
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
var _useState = (0, _react.useState)(function () {
|
|
66
|
+
return getGroupState(id);
|
|
67
|
+
}),
|
|
68
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
69
|
+
radioGroupState = _useState2[0],
|
|
70
|
+
setRadioGroupState = _useState2[1];
|
|
71
|
+
|
|
72
|
+
var selectRadioItem = function selectRadioItem(childId, value) {
|
|
73
|
+
var newValue = _objectSpread(_objectSpread({}, (0, _resetOptionsInGroup.default)(getGroupState(id))), {}, (0, _defineProperty2.default)({}, childId, value));
|
|
74
|
+
|
|
75
|
+
setRadioGroupState(newValue);
|
|
76
|
+
setGroupState(id, newValue);
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
return /*#__PURE__*/_react.default.createElement(RadioGroupContext.Provider, {
|
|
80
|
+
value: {
|
|
81
|
+
id: id,
|
|
82
|
+
radioGroupState: radioGroupState,
|
|
83
|
+
selectRadioItem: selectRadioItem
|
|
84
|
+
}
|
|
85
|
+
}, /*#__PURE__*/_react.default.createElement(_section.default, props, children));
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
var _default = DropdownItemRadioGroup;
|
|
89
|
+
exports.default = _default;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports.default = void 0;
|
|
11
|
+
|
|
12
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
13
|
+
|
|
14
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
15
|
+
|
|
16
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
17
|
+
|
|
18
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
19
|
+
|
|
20
|
+
var _noop = _interopRequireDefault(require("@atlaskit/ds-lib/noop"));
|
|
21
|
+
|
|
22
|
+
var _radio = _interopRequireDefault(require("@atlaskit/icon/glyph/radio"));
|
|
23
|
+
|
|
24
|
+
var _buttonItem = _interopRequireDefault(require("@atlaskit/menu/button-item"));
|
|
25
|
+
|
|
26
|
+
var _useRadioState3 = _interopRequireDefault(require("../internal/hooks/use-radio-state"));
|
|
27
|
+
|
|
28
|
+
var _useRegisterItemWithFocusManager = _interopRequireDefault(require("../internal/hooks/use-register-item-with-focus-manager"));
|
|
29
|
+
|
|
30
|
+
var _getIconColors = _interopRequireDefault(require("../internal/utils/get-icon-colors"));
|
|
31
|
+
|
|
32
|
+
var _isVoiceOverSupported = _interopRequireDefault(require("../internal/utils/is-voice-over-supported"));
|
|
33
|
+
|
|
34
|
+
var _excluded = ["id", "isSelected", "defaultSelected", "onClick", "shouldTitleWrap", "shouldDescriptionWrap"];
|
|
35
|
+
|
|
36
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
37
|
+
|
|
38
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* __Dropdown item radio__
|
|
42
|
+
*
|
|
43
|
+
* A dropdown item radio displays groups that have a single selection.
|
|
44
|
+
*
|
|
45
|
+
* - [Examples](https://atlassian.design/components/dropdown-menu/dropdown-item-radio/examples)
|
|
46
|
+
* - [Code](https://atlassian.design/components/dropdown-menu/dropdown-item-radio/code)
|
|
47
|
+
* - [Usage](https://atlassian.design/components/dropdown-menu/dropdown-item-radio/usage)
|
|
48
|
+
*/
|
|
49
|
+
var DropdownItemRadio = function DropdownItemRadio(props) {
|
|
50
|
+
var id = props.id,
|
|
51
|
+
isSelected = props.isSelected,
|
|
52
|
+
defaultSelected = props.defaultSelected,
|
|
53
|
+
_props$onClick = props.onClick,
|
|
54
|
+
providedOnClick = _props$onClick === void 0 ? _noop.default : _props$onClick,
|
|
55
|
+
_props$shouldTitleWra = props.shouldTitleWrap,
|
|
56
|
+
shouldTitleWrap = _props$shouldTitleWra === void 0 ? true : _props$shouldTitleWra,
|
|
57
|
+
_props$shouldDescript = props.shouldDescriptionWrap,
|
|
58
|
+
shouldDescriptionWrap = _props$shouldDescript === void 0 ? true : _props$shouldDescript,
|
|
59
|
+
rest = (0, _objectWithoutProperties2.default)(props, _excluded);
|
|
60
|
+
|
|
61
|
+
if (process.env.NODE_ENV !== 'production' && typeof isSelected !== 'undefined' && typeof defaultSelected !== 'undefined') {
|
|
62
|
+
// eslint-disable-next-line no-console
|
|
63
|
+
console.warn("[DropdownItemRadio] You've used both `defaultSelected` and `isSelected` props. This is dangerous and can lead to unexpected results. Use one or the other depending if you want to control the components state yourself.");
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
var _useRadioState = (0, _useRadioState3.default)({
|
|
67
|
+
id: id,
|
|
68
|
+
isSelected: isSelected,
|
|
69
|
+
defaultSelected: defaultSelected
|
|
70
|
+
}),
|
|
71
|
+
_useRadioState2 = (0, _slicedToArray2.default)(_useRadioState, 2),
|
|
72
|
+
selected = _useRadioState2[0],
|
|
73
|
+
setSelected = _useRadioState2[1];
|
|
74
|
+
|
|
75
|
+
var _useState = (0, _react.useState)((0, _getIconColors.default)(defaultSelected)),
|
|
76
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
77
|
+
iconColors = _useState2[0],
|
|
78
|
+
setIconColors = _useState2[1];
|
|
79
|
+
|
|
80
|
+
var onClickHandler = (0, _react.useCallback)(function (event) {
|
|
81
|
+
setSelected(function (selected) {
|
|
82
|
+
return !selected;
|
|
83
|
+
});
|
|
84
|
+
providedOnClick(event);
|
|
85
|
+
}, [providedOnClick, setSelected]);
|
|
86
|
+
(0, _react.useEffect)(function () {
|
|
87
|
+
setIconColors((0, _getIconColors.default)(selected));
|
|
88
|
+
}, [selected]);
|
|
89
|
+
var itemRef = (0, _useRegisterItemWithFocusManager.default)();
|
|
90
|
+
return /*#__PURE__*/_react.default.createElement(_buttonItem.default, (0, _extends2.default)({
|
|
91
|
+
id: id,
|
|
92
|
+
onClick: onClickHandler,
|
|
93
|
+
role: (0, _isVoiceOverSupported.default)() ? 'radio' : 'menuitemradio',
|
|
94
|
+
"aria-checked": selected,
|
|
95
|
+
shouldTitleWrap: shouldTitleWrap,
|
|
96
|
+
shouldDescriptionWrap: shouldDescriptionWrap,
|
|
97
|
+
iconBefore: /*#__PURE__*/_react.default.createElement(_radio.default, {
|
|
98
|
+
label: "",
|
|
99
|
+
size: "medium",
|
|
100
|
+
primaryColor: iconColors.primary,
|
|
101
|
+
secondaryColor: iconColors.secondary
|
|
102
|
+
}),
|
|
103
|
+
ref: itemRef
|
|
104
|
+
}, rest));
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
var _default = DropdownItemRadio;
|
|
108
|
+
exports.default = _default;
|
package/dist/cjs/version.json
CHANGED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import Section from '@atlaskit/menu/section';
|
|
3
|
+
import { CheckboxGroupContext } from '../internal/context/checkbox-group-context';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* __Dropdown item checkbox group__
|
|
7
|
+
*
|
|
8
|
+
* A wrapping element for dropdown menu checkbox items.
|
|
9
|
+
*
|
|
10
|
+
*/
|
|
11
|
+
const DropdownItemCheckboxGroup = props => {
|
|
12
|
+
const {
|
|
13
|
+
children,
|
|
14
|
+
id
|
|
15
|
+
} = props;
|
|
16
|
+
return /*#__PURE__*/React.createElement(CheckboxGroupContext.Provider, {
|
|
17
|
+
value: id
|
|
18
|
+
}, /*#__PURE__*/React.createElement(Section, props, children));
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export default DropdownItemCheckboxGroup;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
+
import React, { useCallback, useEffect, useState } from 'react';
|
|
3
|
+
import noop from '@atlaskit/ds-lib/noop';
|
|
4
|
+
import CheckboxIcon from '@atlaskit/icon/glyph/checkbox';
|
|
5
|
+
import ButtonItem from '@atlaskit/menu/button-item';
|
|
6
|
+
import useCheckboxState from '../internal/hooks/use-checkbox-state';
|
|
7
|
+
import useRegisterItemWithFocusManager from '../internal/hooks/use-register-item-with-focus-manager';
|
|
8
|
+
import getIconColors from '../internal/utils/get-icon-colors';
|
|
9
|
+
import isVoiceOverSupported from '../internal/utils/is-voice-over-supported';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* __Dropdown item checkbox__
|
|
13
|
+
*
|
|
14
|
+
* A dropdown item checkbox creates groups that have multiple selections.
|
|
15
|
+
*
|
|
16
|
+
* - [Examples](https://atlassian.design/components/dropdown-menu/dropdown-item-checkbox/examples)
|
|
17
|
+
* - [Code](https://atlassian.design/components/dropdown-menu/dropdown-item-checkbox/code)
|
|
18
|
+
* - [Usage](https://atlassian.design/components/dropdown-menu/dropdown-item-checkbox/usage)
|
|
19
|
+
*/
|
|
20
|
+
const DropdownItemCheckbox = props => {
|
|
21
|
+
const {
|
|
22
|
+
id,
|
|
23
|
+
isSelected,
|
|
24
|
+
defaultSelected,
|
|
25
|
+
onClick: providedOnClick = noop,
|
|
26
|
+
shouldTitleWrap = true,
|
|
27
|
+
shouldDescriptionWrap = true,
|
|
28
|
+
...rest
|
|
29
|
+
} = props;
|
|
30
|
+
|
|
31
|
+
if (process.env.NODE_ENV !== 'production' && typeof isSelected !== 'undefined' && typeof defaultSelected !== 'undefined') {
|
|
32
|
+
// eslint-disable-next-line no-console
|
|
33
|
+
console.warn("[DropdownItemCheckbox] You've used both `defaultSelected` and `isSelected` props. This is dangerous and can lead to unexpected results. Use one or the other depending if you want to control the components state yourself.");
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const [selected, setSelected] = useCheckboxState({
|
|
37
|
+
id,
|
|
38
|
+
isSelected,
|
|
39
|
+
defaultSelected
|
|
40
|
+
});
|
|
41
|
+
const [iconColors, setIconColors] = useState(getIconColors(defaultSelected));
|
|
42
|
+
const onClickHandler = useCallback(event => {
|
|
43
|
+
setSelected(selected => !selected);
|
|
44
|
+
providedOnClick(event);
|
|
45
|
+
}, [providedOnClick, setSelected]);
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
setIconColors(getIconColors(selected));
|
|
48
|
+
}, [selected]);
|
|
49
|
+
const itemRef = useRegisterItemWithFocusManager();
|
|
50
|
+
return /*#__PURE__*/React.createElement(ButtonItem, _extends({
|
|
51
|
+
id: id,
|
|
52
|
+
onClick: onClickHandler,
|
|
53
|
+
role: isVoiceOverSupported() ? 'checkbox' : 'menuitemcheckbox',
|
|
54
|
+
"aria-checked": selected,
|
|
55
|
+
shouldTitleWrap: shouldTitleWrap,
|
|
56
|
+
shouldDescriptionWrap: shouldDescriptionWrap,
|
|
57
|
+
iconBefore: /*#__PURE__*/React.createElement(CheckboxIcon, {
|
|
58
|
+
label: "",
|
|
59
|
+
size: "medium",
|
|
60
|
+
primaryColor: iconColors.primary,
|
|
61
|
+
secondaryColor: iconColors.secondary
|
|
62
|
+
}),
|
|
63
|
+
ref: itemRef
|
|
64
|
+
}, rest));
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
export default DropdownItemCheckbox;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* __Section__
|
|
3
|
+
*
|
|
4
|
+
* A dropdown item group includes all the actions or items in a dropdown menu.
|
|
5
|
+
*
|
|
6
|
+
* - [Examples](https://atlassian.design/components/dropdown-menu/dropdown-item-group/examples)
|
|
7
|
+
* - [Code](https://atlassian.design/components/dropdown-menu/dropdown-item-group/code)
|
|
8
|
+
* - [Usage](https://atlassian.design/components/dropdown-menu/dropdown-item-group/usage)
|
|
9
|
+
*/
|
|
10
|
+
import Section from '@atlaskit/menu/section';
|
|
11
|
+
export default Section;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import ButtonItem from '@atlaskit/menu/button-item';
|
|
4
|
+
import LinkItem from '@atlaskit/menu/link-item';
|
|
5
|
+
import useRegisterItemWithFocusManager from './internal/hooks/use-register-item-with-focus-manager';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* __Dropdown menu item__
|
|
9
|
+
*
|
|
10
|
+
* A dropdown item populates the dropdown menu with items. Every item should be inside a dropdown item group.
|
|
11
|
+
*
|
|
12
|
+
* - [Examples](https://atlassian.design/components/dropdown-item/examples)
|
|
13
|
+
* - [Code](https://atlassian.design/components/dropdown-item/code)
|
|
14
|
+
* - [Usage](https://atlassian.design/components/dropdown-item/usage)
|
|
15
|
+
*/
|
|
16
|
+
const DropdownMenuItem = props => {
|
|
17
|
+
const {
|
|
18
|
+
elemBefore,
|
|
19
|
+
elemAfter,
|
|
20
|
+
href,
|
|
21
|
+
shouldTitleWrap = true,
|
|
22
|
+
shouldDescriptionWrap = true,
|
|
23
|
+
...rest
|
|
24
|
+
} = props;
|
|
25
|
+
const itemRef = useRegisterItemWithFocusManager();
|
|
26
|
+
|
|
27
|
+
if (href) {
|
|
28
|
+
return /*#__PURE__*/React.createElement(LinkItem, _extends({
|
|
29
|
+
href: href,
|
|
30
|
+
iconBefore: elemBefore,
|
|
31
|
+
iconAfter: elemAfter,
|
|
32
|
+
role: "menuitem",
|
|
33
|
+
ref: itemRef,
|
|
34
|
+
shouldTitleWrap: shouldTitleWrap,
|
|
35
|
+
shouldDescriptionWrap: shouldDescriptionWrap
|
|
36
|
+
}, rest));
|
|
37
|
+
} else {
|
|
38
|
+
return /*#__PURE__*/React.createElement(ButtonItem, _extends({
|
|
39
|
+
role: "menuitem",
|
|
40
|
+
iconBefore: elemBefore,
|
|
41
|
+
iconAfter: elemAfter,
|
|
42
|
+
ref: itemRef,
|
|
43
|
+
shouldTitleWrap: shouldTitleWrap,
|
|
44
|
+
shouldDescriptionWrap: shouldDescriptionWrap
|
|
45
|
+
}, rest));
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export default DropdownMenuItem;
|