@carbon/react 1.5.0 → 1.7.0-rc.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 (79) hide show
  1. package/es/components/ComposedModal/ComposedModal.js +2 -1
  2. package/es/components/ComposedModal/next/ComposedModal.js +2 -1
  3. package/es/components/DataTable/TableToolbarSearch.js +10 -2
  4. package/es/components/DatePicker/DatePicker.js +14 -5
  5. package/es/components/FileUploader/FileUploader.js +1 -1
  6. package/es/components/FileUploader/FileUploaderButton.js +1 -1
  7. package/es/components/FileUploader/Filename.js +1 -1
  8. package/es/components/Form/Form.js +1 -1
  9. package/es/components/FormGroup/FormGroup.js +4 -4
  10. package/es/components/FormItem/FormItem.js +5 -6
  11. package/es/components/Layer/index.js +13 -1
  12. package/es/components/Link/Link.js +6 -3
  13. package/es/components/ListBox/ListBoxPropTypes.js +1 -2
  14. package/es/components/ListBox/ListBoxSelection.js +3 -4
  15. package/es/components/OverflowMenu/OverflowMenu.js +0 -1
  16. package/es/components/Popover/index.js +137 -8
  17. package/es/components/RadioButton/next/RadioButton.js +2 -1
  18. package/es/components/Select/Select.js +14 -7
  19. package/es/components/Tabs/next/Tabs.js +42 -4
  20. package/es/components/Toggle/Toggle.js +147 -109
  21. package/es/components/UIShell/HeaderMenu.js +1 -1
  22. package/es/components/UIShell/HeaderMenuButton.js +3 -4
  23. package/es/components/UIShell/HeaderName.js +3 -4
  24. package/es/components/UIShell/HeaderNavigation.js +27 -75
  25. package/es/components/UIShell/SideNav.js +3 -3
  26. package/es/components/UIShell/SideNavFooter.js +3 -10
  27. package/es/components/UIShell/SideNavIcon.js +3 -4
  28. package/es/components/UIShell/SideNavItem.js +4 -5
  29. package/es/components/UIShell/SideNavLink.js +0 -6
  30. package/es/components/UIShell/SideNavLinkText.js +3 -4
  31. package/es/components/UIShell/SideNavMenu.js +93 -131
  32. package/es/components/UIShell/SideNavSwitcher.js +4 -2
  33. package/es/components/UIShell/SkipToContent.js +3 -4
  34. package/es/index.js +13 -11
  35. package/lib/components/ComposedModal/ComposedModal.js +2 -1
  36. package/lib/components/ComposedModal/next/ComposedModal.js +2 -1
  37. package/lib/components/DataTable/TableToolbarSearch.js +10 -2
  38. package/lib/components/DatePicker/DatePicker.js +14 -5
  39. package/lib/components/FileUploader/FileUploader.js +1 -1
  40. package/lib/components/FileUploader/FileUploaderButton.js +1 -1
  41. package/lib/components/FileUploader/Filename.js +1 -1
  42. package/lib/components/Form/Form.js +1 -1
  43. package/lib/components/FormGroup/FormGroup.js +4 -4
  44. package/lib/components/FormItem/FormItem.js +5 -6
  45. package/lib/components/Layer/index.js +13 -0
  46. package/lib/components/Link/Link.js +6 -3
  47. package/lib/components/ListBox/ListBoxPropTypes.js +1 -21
  48. package/lib/components/ListBox/ListBoxSelection.js +3 -4
  49. package/lib/components/OverflowMenu/OverflowMenu.js +0 -1
  50. package/lib/components/Popover/index.js +135 -6
  51. package/lib/components/RadioButton/next/RadioButton.js +2 -1
  52. package/lib/components/Select/Select.js +14 -7
  53. package/lib/components/Tabs/next/Tabs.js +42 -4
  54. package/lib/components/Toggle/Toggle.js +146 -107
  55. package/lib/components/UIShell/HeaderMenu.js +1 -1
  56. package/lib/components/UIShell/HeaderMenuButton.js +3 -4
  57. package/lib/components/UIShell/HeaderName.js +3 -4
  58. package/lib/components/UIShell/HeaderNavigation.js +25 -73
  59. package/lib/components/UIShell/SideNav.js +3 -3
  60. package/lib/components/UIShell/SideNavFooter.js +3 -10
  61. package/lib/components/UIShell/SideNavIcon.js +3 -4
  62. package/lib/components/UIShell/SideNavItem.js +4 -5
  63. package/lib/components/UIShell/SideNavLink.js +0 -6
  64. package/lib/components/UIShell/SideNavLinkText.js +3 -4
  65. package/lib/components/UIShell/SideNavMenu.js +89 -128
  66. package/lib/components/UIShell/SideNavSwitcher.js +4 -2
  67. package/lib/components/UIShell/SkipToContent.js +3 -4
  68. package/lib/index.js +86 -82
  69. package/package.json +3 -3
  70. package/es/components/Toggle/index.js +0 -19
  71. package/es/components/Toggle/next/Toggle.js +0 -158
  72. package/es/components/UIShell/index.js +0 -17
  73. package/es/components/UIShell/next/HeaderNavigation.js +0 -52
  74. package/es/components/UIShell/next/SideNavMenu.js +0 -160
  75. package/lib/components/Toggle/index.js +0 -23
  76. package/lib/components/Toggle/next/Toggle.js +0 -169
  77. package/lib/components/UIShell/index.js +0 -42
  78. package/lib/components/UIShell/next/HeaderNavigation.js +0 -62
  79. package/lib/components/UIShell/next/SideNavMenu.js +0 -170
@@ -10,33 +10,13 @@
10
10
  Object.defineProperty(exports, '__esModule', { value: true });
11
11
 
12
12
  var PropTypes = require('prop-types');
13
- var FeatureFlags = require('@carbon/feature-flags');
14
13
 
15
14
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
16
15
 
17
- function _interopNamespace(e) {
18
- if (e && e.__esModule) return e;
19
- var n = Object.create(null);
20
- if (e) {
21
- Object.keys(e).forEach(function (k) {
22
- if (k !== 'default') {
23
- var d = Object.getOwnPropertyDescriptor(e, k);
24
- Object.defineProperty(n, k, d.get ? d : {
25
- enumerable: true,
26
- get: function () { return e[k]; }
27
- });
28
- }
29
- });
30
- }
31
- n["default"] = e;
32
- return Object.freeze(n);
33
- }
34
-
35
16
  var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
36
- var FeatureFlags__namespace = /*#__PURE__*/_interopNamespace(FeatureFlags);
37
17
 
38
18
  var ListBoxType = PropTypes__default["default"].oneOf(['default', 'inline']);
39
- var ListBoxSize = FeatureFlags__namespace.enabled('enable-v11-release') ? PropTypes__default["default"].oneOf(['sm', 'md', 'lg']) : PropTypes__default["default"].oneOf(['sm', 'md', 'lg', 'xl']);
19
+ var ListBoxSize = PropTypes__default["default"].oneOf(['sm', 'md', 'lg']);
40
20
 
41
21
  exports.ListBoxSize = ListBoxSize;
42
22
  exports.ListBoxType = ListBoxType;
@@ -31,7 +31,7 @@ var _Close, _Close2, _defaultTranslations;
31
31
  * selection.
32
32
  */
33
33
 
34
- var ListBoxSelection = function ListBoxSelection(_ref) {
34
+ function ListBoxSelection(_ref) {
35
35
  var _cx;
36
36
 
37
37
  var clearSelection = _ref.clearSelection,
@@ -98,7 +98,7 @@ var ListBoxSelection = function ListBoxSelection(_ref) {
98
98
  "aria-label": description,
99
99
  title: description
100
100
  }, selectionCount, _Close2 || (_Close2 = /*#__PURE__*/React__default["default"].createElement(iconsReact.Close, null)));
101
- };
101
+ }
102
102
 
103
103
  var translationIds = {
104
104
  'clear.all': 'clear.all',
@@ -153,7 +153,6 @@ ListBoxSelection.defaultProps = {
153
153
  return defaultTranslations[id];
154
154
  }
155
155
  };
156
- var ListBoxSelection$1 = ListBoxSelection;
157
156
 
158
- exports["default"] = ListBoxSelection$1;
157
+ exports["default"] = ListBoxSelection;
159
158
  exports.translationIds = translationIds;
@@ -539,7 +539,6 @@ _rollupPluginBabelHelpers.defineProperty(OverflowMenu, "defaultProps", {
539
539
  onOpen: function onOpen() {},
540
540
  menuOffset: getMenuOffset,
541
541
  menuOffsetFlip: getMenuOffset,
542
- light: false,
543
542
  selectorPrimaryFocus: '[data-overflow-menu-primary-focus]'
544
543
  });
545
544
 
@@ -13,6 +13,8 @@ var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelper
13
13
  var cx = require('classnames');
14
14
  var PropTypes = require('prop-types');
15
15
  var React = require('react');
16
+ var useIsomorphicEffect = require('../../internal/useIsomorphicEffect.js');
17
+ var useMergedRefs = require('../../internal/useMergedRefs.js');
16
18
  var usePrefix = require('../../internal/usePrefix.js');
17
19
 
18
20
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -21,15 +23,22 @@ var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
21
23
  var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
22
24
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
23
25
 
24
- var _excluded = ["align", "as", "caret", "className", "children", "dropShadow", "highContrast", "open"],
26
+ var _excluded = ["align", "as", "autoAlign", "caret", "className", "children", "dropShadow", "highContrast", "open"],
25
27
  _excluded2 = ["className", "children"];
26
- var Popover = /*#__PURE__*/React__default["default"].forwardRef(function Popover(props, ref) {
28
+ var PopoverContext = /*#__PURE__*/React__default["default"].createContext({
29
+ floating: {
30
+ current: null
31
+ }
32
+ });
33
+ var Popover = /*#__PURE__*/React__default["default"].forwardRef(function Popover(props, forwardRef) {
27
34
  var _cx;
28
35
 
29
36
  var _props$align = props.align,
30
37
  align = _props$align === void 0 ? 'bottom' : _props$align,
31
38
  _props$as = props.as,
32
39
  BaseComponent = _props$as === void 0 ? 'span' : _props$as,
40
+ _props$autoAlign = props.autoAlign,
41
+ autoAlign = _props$autoAlign === void 0 ? false : _props$autoAlign,
33
42
  _props$caret = props.caret,
34
43
  caret = _props$caret === void 0 ? true : _props$caret,
35
44
  customClassName = props.className,
@@ -42,11 +51,121 @@ var Popover = /*#__PURE__*/React__default["default"].forwardRef(function Popover
42
51
  rest = _rollupPluginBabelHelpers.objectWithoutProperties(props, _excluded);
43
52
 
44
53
  var prefix = usePrefix.usePrefix();
45
- var className = cx__default["default"]((_cx = {}, _rollupPluginBabelHelpers.defineProperty(_cx, "".concat(prefix, "--popover-container"), true), _rollupPluginBabelHelpers.defineProperty(_cx, "".concat(prefix, "--popover--caret"), caret), _rollupPluginBabelHelpers.defineProperty(_cx, "".concat(prefix, "--popover--drop-shadow"), dropShadow), _rollupPluginBabelHelpers.defineProperty(_cx, "".concat(prefix, "--popover--high-contrast"), highContrast), _rollupPluginBabelHelpers.defineProperty(_cx, "".concat(prefix, "--popover--open"), open), _rollupPluginBabelHelpers.defineProperty(_cx, "".concat(prefix, "--popover--").concat(align), true), _rollupPluginBabelHelpers.defineProperty(_cx, customClassName, !!customClassName), _cx));
46
- return /*#__PURE__*/React__default["default"].createElement(BaseComponent, _rollupPluginBabelHelpers["extends"]({}, rest, {
54
+ var floating = React.useRef();
55
+ var popover = React.useRef();
56
+ var value = React.useMemo(function () {
57
+ return {
58
+ floating: floating
59
+ };
60
+ }, []);
61
+ var ref = useMergedRefs.useMergedRefs([forwardRef, popover]);
62
+
63
+ var _useState = React.useState(false),
64
+ _useState2 = _rollupPluginBabelHelpers.slicedToArray(_useState, 2),
65
+ autoAligned = _useState2[0],
66
+ setAutoAligned = _useState2[1];
67
+
68
+ var _useState3 = React.useState(align),
69
+ _useState4 = _rollupPluginBabelHelpers.slicedToArray(_useState3, 2),
70
+ autoAlignment = _useState4[0],
71
+ setAutoAlignment = _useState4[1];
72
+
73
+ var className = cx__default["default"]((_cx = {}, _rollupPluginBabelHelpers.defineProperty(_cx, "".concat(prefix, "--popover-container"), true), _rollupPluginBabelHelpers.defineProperty(_cx, "".concat(prefix, "--popover--caret"), caret), _rollupPluginBabelHelpers.defineProperty(_cx, "".concat(prefix, "--popover--drop-shadow"), dropShadow), _rollupPluginBabelHelpers.defineProperty(_cx, "".concat(prefix, "--popover--high-contrast"), highContrast), _rollupPluginBabelHelpers.defineProperty(_cx, "".concat(prefix, "--popover--open"), open), _rollupPluginBabelHelpers.defineProperty(_cx, "".concat(prefix, "--popover--").concat(autoAlignment), autoAligned), _rollupPluginBabelHelpers.defineProperty(_cx, "".concat(prefix, "--popover--").concat(align), !autoAligned), _rollupPluginBabelHelpers.defineProperty(_cx, customClassName, !!customClassName), _cx));
74
+ useIsomorphicEffect["default"](function () {
75
+ if (!autoAlign) {
76
+ setAutoAligned(false);
77
+ return;
78
+ }
79
+
80
+ if (!floating.current) {
81
+ return;
82
+ }
83
+
84
+ if (autoAligned === true) {
85
+ return;
86
+ }
87
+
88
+ var rect = floating.current.getBoundingClientRect(); // The conditions, per side, of when the popover is not visible, excluding the popover's internal padding(16)
89
+
90
+ var conditions = {
91
+ left: rect.x < -16,
92
+ top: rect.y < -16,
93
+ right: rect.x + (rect.width - 16) > document.documentElement.clientWidth,
94
+ bottom: rect.y + (rect.height - 16) > document.documentElement.clientHeight
95
+ };
96
+
97
+ if (!conditions.left && !conditions.top && !conditions.right && !conditions.bottom) {
98
+ setAutoAligned(false);
99
+ return;
100
+ }
101
+
102
+ var alignments = ['top', 'top-left', 'right-bottom', 'right', 'right-top', 'bottom-left', 'bottom', 'bottom-right', 'left-top', 'left', 'left-bottom', 'top-right']; // Creates the prioritized list of options depending on ideal alignment coming from `align`
103
+
104
+ var options = [align];
105
+ var option = alignments[(alignments.indexOf(align) + 1) % alignments.length];
106
+
107
+ while (option) {
108
+ if (options.includes(option)) {
109
+ break;
110
+ }
111
+
112
+ options.push(option);
113
+ option = alignments[(alignments.indexOf(option) + 1) % alignments.length];
114
+ }
115
+
116
+ function isVisible(alignment) {
117
+ popover.current.classList.add("".concat(prefix, "--popover--").concat(alignment));
118
+ var rect = floating.current.getBoundingClientRect(); // Check if popover is not visible to the left of the screen
119
+
120
+ if (rect.x < -16) {
121
+ popover.current.classList.remove("".concat(prefix, "--popover--").concat(alignment));
122
+ return false;
123
+ } // Check if popover is not visible at the top of the screen
124
+
125
+
126
+ if (rect.y < -16) {
127
+ popover.current.classList.remove("".concat(prefix, "--popover--").concat(alignment));
128
+ return false;
129
+ } // Check if popover is not visible to right of screen
130
+
131
+
132
+ if (rect.x + (rect.width - 16) > document.documentElement.clientWidth) {
133
+ popover.current.classList.remove("".concat(prefix, "--popover--").concat(alignment));
134
+ return false;
135
+ } // Check if popover is not visible to bottom of screen
136
+
137
+
138
+ if (rect.y + (rect.height - 16) > document.documentElement.clientHeight) {
139
+ popover.current.classList.remove("".concat(prefix, "--popover--").concat(alignment));
140
+ return false;
141
+ }
142
+
143
+ popover.current.classList.remove("".concat(prefix, "--popover--").concat(alignment));
144
+ return true;
145
+ }
146
+
147
+ var alignment = null;
148
+
149
+ for (var i = 0; i < options.length; i++) {
150
+ var _option = options[i];
151
+
152
+ if (isVisible(_option)) {
153
+ alignment = _option;
154
+ break;
155
+ }
156
+ }
157
+
158
+ if (alignment) {
159
+ setAutoAligned(true);
160
+ setAutoAlignment(alignment);
161
+ }
162
+ }, [autoAligned, align, autoAlign, prefix]);
163
+ return /*#__PURE__*/React__default["default"].createElement(PopoverContext.Provider, {
164
+ value: value
165
+ }, /*#__PURE__*/React__default["default"].createElement(BaseComponent, _rollupPluginBabelHelpers["extends"]({}, rest, {
47
166
  className: className,
48
167
  ref: ref
49
- }), children);
168
+ }), children));
50
169
  }); // Note: this displayName is temporarily set so that Storybook ArgTable
51
170
  // correctly displays the name of this component
52
171
 
@@ -66,6 +185,11 @@ Popover.propTypes = {
66
185
  */
67
186
  as: PropTypes__default["default"].oneOfType([PropTypes__default["default"].string, PropTypes__default["default"].elementType]),
68
187
 
188
+ /**
189
+ * Will auto-align the popover on first render if it is not visible. This prop is currently experimental and is subject to futurue changes.
190
+ */
191
+ autoAlign: PropTypes__default["default"].bool,
192
+
69
193
  /**
70
194
  * Specify whether a caret should be rendered
71
195
  */
@@ -97,12 +221,17 @@ Popover.propTypes = {
97
221
  */
98
222
  open: PropTypes__default["default"].bool.isRequired
99
223
  };
100
- var PopoverContent = /*#__PURE__*/React__default["default"].forwardRef(function PopoverContent(_ref, ref) {
224
+ var PopoverContent = /*#__PURE__*/React__default["default"].forwardRef(function PopoverContent(_ref, forwardRef) {
101
225
  var className = _ref.className,
102
226
  children = _ref.children,
103
227
  rest = _rollupPluginBabelHelpers.objectWithoutProperties(_ref, _excluded2);
104
228
 
105
229
  var prefix = usePrefix.usePrefix();
230
+
231
+ var _React$useContext = React__default["default"].useContext(PopoverContext),
232
+ floating = _React$useContext.floating;
233
+
234
+ var ref = useMergedRefs.useMergedRefs([floating, forwardRef]);
106
235
  return /*#__PURE__*/React__default["default"].createElement("span", _rollupPluginBabelHelpers["extends"]({}, rest, {
107
236
  className: "".concat(prefix, "--popover")
108
237
  }), /*#__PURE__*/React__default["default"].createElement("span", {
@@ -60,7 +60,8 @@ var RadioButton = /*#__PURE__*/React__default["default"].forwardRef(function Rad
60
60
  id: uniqueId,
61
61
  ref: ref,
62
62
  disabled: disabled,
63
- value: value
63
+ value: value,
64
+ name: name
64
65
  })), /*#__PURE__*/React__default["default"].createElement("label", {
65
66
  htmlFor: uniqueId,
66
67
  className: "".concat(prefix, "--radio-button__label")
@@ -30,18 +30,25 @@ var Select = /*#__PURE__*/React__default["default"].forwardRef(function Select(_
30
30
 
31
31
  var className = _ref.className,
32
32
  id = _ref.id,
33
- inline = _ref.inline,
33
+ _ref$inline = _ref.inline,
34
+ inline = _ref$inline === void 0 ? false : _ref$inline,
34
35
  labelText = _ref.labelText,
35
- disabled = _ref.disabled,
36
+ _ref$disabled = _ref.disabled,
37
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
36
38
  children = _ref.children,
37
- noLabel = _ref.noLabel,
38
- hideLabel = _ref.hideLabel,
39
- invalid = _ref.invalid,
39
+ _ref$noLabel = _ref.noLabel,
40
+ noLabel = _ref$noLabel === void 0 ? false : _ref$noLabel,
41
+ _ref$hideLabel = _ref.hideLabel,
42
+ hideLabel = _ref$hideLabel === void 0 ? false : _ref$hideLabel,
43
+ _ref$invalid = _ref.invalid,
44
+ invalid = _ref$invalid === void 0 ? false : _ref$invalid,
40
45
  invalidText = _ref.invalidText,
41
46
  helperText = _ref.helperText,
42
- light = _ref.light,
47
+ _ref$light = _ref.light,
48
+ light = _ref$light === void 0 ? false : _ref$light,
43
49
  size = _ref.size,
44
- warn = _ref.warn,
50
+ _ref$warn = _ref.warn,
51
+ warn = _ref$warn === void 0 ? false : _ref$warn,
45
52
  warnText = _ref.warnText,
46
53
  other = _rollupPluginBabelHelpers.objectWithoutProperties(_ref, _excluded);
47
54
 
@@ -608,6 +608,11 @@ var TabPanel = /*#__PURE__*/React__default["default"].forwardRef(function TabPan
608
608
  tabIndex = _useState8[0],
609
609
  setTabIndex = _useState8[1];
610
610
 
611
+ var _useState9 = React.useState(false),
612
+ _useState10 = _rollupPluginBabelHelpers.slicedToArray(_useState9, 2),
613
+ interactiveContent = _useState10[0],
614
+ setInteractiveContent = _useState10[1];
615
+
611
616
  var _React$useContext3 = React__default["default"].useContext(TabsContext),
612
617
  selectedIndex = _React$useContext3.selectedIndex,
613
618
  baseId = _React$useContext3.baseId;
@@ -615,14 +620,47 @@ var TabPanel = /*#__PURE__*/React__default["default"].forwardRef(function TabPan
615
620
  var index = React__default["default"].useContext(TabPanelContext);
616
621
  var id = "".concat(baseId, "-tabpanel-").concat(index);
617
622
  var tabId = "".concat(baseId, "-tab-").concat(index);
618
- var className = cx__default["default"]("".concat(prefix, "--tab-content"), customClassName); // tabindex should only be 0 if no interactive content in children
623
+ var className = cx__default["default"]("".concat(prefix, "--tab-content"), customClassName, _rollupPluginBabelHelpers.defineProperty({}, "".concat(prefix, "--tab-content--interactive"), interactiveContent));
624
+ useEffectOnce.useEffectOnce(function () {
625
+ if (!panel.current) {
626
+ return;
627
+ }
619
628
 
620
- React.useEffect(function () {
621
- var interactiveContent = useNoInteractiveChildren.getInteractiveContent(panel.current);
629
+ var content = useNoInteractiveChildren.getInteractiveContent(panel.current);
622
630
 
623
- if (interactiveContent) {
631
+ if (content) {
632
+ setInteractiveContent(true);
624
633
  setTabIndex('-1');
625
634
  }
635
+ }); // tabindex should only be 0 if no interactive content in children
636
+
637
+ React.useEffect(function () {
638
+ if (!panel.current) {
639
+ return;
640
+ }
641
+
642
+ var node = panel.current;
643
+
644
+ function callback() {
645
+ var content = useNoInteractiveChildren.getInteractiveContent(node);
646
+
647
+ if (content) {
648
+ setInteractiveContent(true);
649
+ setTabIndex('-1');
650
+ } else {
651
+ setInteractiveContent(false);
652
+ setTabIndex('0');
653
+ }
654
+ }
655
+
656
+ var observer = new MutationObserver(callback);
657
+ observer.observe(node, {
658
+ childList: true,
659
+ subtree: true
660
+ });
661
+ return function () {
662
+ observer.disconnect(node);
663
+ };
626
664
  }, []);
627
665
  return /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({}, rest, {
628
666
  "aria-labelledby": tabId,
@@ -10,121 +10,160 @@
10
10
  Object.defineProperty(exports, '__esModule', { value: true });
11
11
 
12
12
  var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js');
13
- var PropTypes = require('prop-types');
14
13
  var React = require('react');
14
+ var PropTypes = require('prop-types');
15
15
  var cx = require('classnames');
16
- var setupGetInstanceId = require('../../tools/setupGetInstanceId.js');
16
+ var useControllableState = require('../../internal/useControllableState.js');
17
17
  var usePrefix = require('../../internal/usePrefix.js');
18
- var match = require('../../internal/keyboard/match.js');
19
- var keys = require('../../internal/keyboard/keys.js');
20
18
 
21
19
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
22
20
 
23
- var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
24
21
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
22
+ var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
25
23
  var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
26
24
 
27
- var _path, _defineProperty2, _defineProperty3;
28
-
29
- var _excluded = ["className", "defaultToggled", "toggled", "onChange", "onToggle", "id", "labelText", "labelA", "labelB", "size"];
30
- var getInstanceId = setupGetInstanceId["default"]();
31
-
32
- var Toggle = /*#__PURE__*/function (_React$Component) {
33
- _rollupPluginBabelHelpers.inherits(Toggle, _React$Component);
34
-
35
- var _super = _rollupPluginBabelHelpers.createSuper(Toggle);
36
-
37
- function Toggle() {
38
- _rollupPluginBabelHelpers.classCallCheck(this, Toggle);
39
-
40
- return _super.apply(this, arguments);
41
- }
42
-
43
- _rollupPluginBabelHelpers.createClass(Toggle, [{
44
- key: "render",
45
- value: function render() {
46
- var prefix = this.context;
47
-
48
- var _this$props = this.props,
49
- className = _this$props.className,
50
- defaultToggled = _this$props.defaultToggled,
51
- toggled = _this$props.toggled,
52
- _onChange = _this$props.onChange,
53
- onToggle = _this$props.onToggle,
54
- _this$props$id = _this$props.id,
55
- id = _this$props$id === void 0 ? this.inputId = this.inputId || "__carbon-toggle_".concat(getInstanceId()) : _this$props$id,
56
- labelText = _this$props.labelText,
57
- labelA = _this$props.labelA,
58
- labelB = _this$props.labelB,
59
- size = _this$props.size,
60
- other = _rollupPluginBabelHelpers.objectWithoutProperties(_this$props, _excluded);
61
-
62
- var input;
63
- var wrapperClasses = cx__default["default"]("".concat(prefix, "--form-item"), _rollupPluginBabelHelpers.defineProperty({}, className, className));
64
- var toggleClasses = cx__default["default"]("".concat(prefix, "--toggle-input"), _rollupPluginBabelHelpers.defineProperty({}, "".concat(prefix, "--toggle-input--small"), size === 'sm'));
65
- var checkedProps = {};
66
-
67
- if (typeof toggled !== 'undefined') {
68
- checkedProps.checked = toggled;
69
- } else {
70
- checkedProps.defaultChecked = defaultToggled;
71
- }
72
-
73
- return /*#__PURE__*/React__default["default"].createElement("div", {
74
- className: wrapperClasses
75
- }, /*#__PURE__*/React__default["default"].createElement("input", _rollupPluginBabelHelpers["extends"]({}, other, checkedProps, {
76
- "aria-label": null,
77
- type: "checkbox",
78
- id: id,
79
- className: toggleClasses,
80
- onChange: function onChange(evt) {
81
- _onChange && _onChange(evt);
82
- onToggle(input.checked, id, evt);
83
- },
84
- ref: function ref(el) {
85
- input = el;
86
- },
87
- onKeyUp: function onKeyUp(evt) {
88
- if (match.match(evt, keys.Enter)) {
89
- input.checked = !input.checked;
90
- _onChange && _onChange(evt);
91
- onToggle(input.checked, id, evt);
92
- }
93
- }
94
- })), /*#__PURE__*/React__default["default"].createElement("label", {
95
- className: "".concat(prefix, "--toggle-input__label"),
96
- htmlFor: id,
97
- "aria-label": typeof labelText === 'string' ? null : this.props['aria-label']
98
- }, labelText, /*#__PURE__*/React__default["default"].createElement("span", {
99
- className: "".concat(prefix, "--toggle__switch")
100
- }, size && /*#__PURE__*/React__default["default"].createElement("svg", {
101
- className: "".concat(prefix, "--toggle__check"),
102
- width: "6px",
103
- height: "5px",
104
- viewBox: "0 0 6 5"
105
- }, _path || (_path = /*#__PURE__*/React__default["default"].createElement("path", {
106
- d: "M2.2 2.7L5 0 6 1 2.2 5 0 2.7 1 1.5z"
107
- }))), /*#__PURE__*/React__default["default"].createElement("span", {
108
- className: "".concat(prefix, "--toggle__text--off"),
109
- "aria-hidden": "true"
110
- }, labelA), /*#__PURE__*/React__default["default"].createElement("span", {
111
- className: "".concat(prefix, "--toggle__text--on"),
112
- "aria-hidden": "true"
113
- }, labelB))));
25
+ var _path;
26
+
27
+ var _excluded = ["className", "defaultToggled", "disabled", "hideLabel", "id", "labelA", "labelB", "labelText", "onClick", "onToggle", "size", "toggled"];
28
+ function Toggle(_ref) {
29
+ var className = _ref.className,
30
+ _ref$defaultToggled = _ref.defaultToggled,
31
+ defaultToggled = _ref$defaultToggled === void 0 ? false : _ref$defaultToggled,
32
+ _ref$disabled = _ref.disabled,
33
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
34
+ _ref$hideLabel = _ref.hideLabel,
35
+ hideLabel = _ref$hideLabel === void 0 ? false : _ref$hideLabel,
36
+ id = _ref.id,
37
+ _ref$labelA = _ref.labelA,
38
+ labelA = _ref$labelA === void 0 ? 'Off' : _ref$labelA,
39
+ _ref$labelB = _ref.labelB,
40
+ labelB = _ref$labelB === void 0 ? 'On' : _ref$labelB,
41
+ labelText = _ref.labelText,
42
+ onClick = _ref.onClick,
43
+ onToggle = _ref.onToggle,
44
+ _ref$size = _ref.size,
45
+ size = _ref$size === void 0 ? 'md' : _ref$size,
46
+ toggled = _ref.toggled,
47
+ other = _rollupPluginBabelHelpers.objectWithoutProperties(_ref, _excluded);
48
+
49
+ var prefix = usePrefix.usePrefix();
50
+
51
+ var _useControllableState = useControllableState.useControllableState({
52
+ value: toggled,
53
+ onChange: onToggle,
54
+ defaultValue: defaultToggled
55
+ }),
56
+ _useControllableState2 = _rollupPluginBabelHelpers.slicedToArray(_useControllableState, 2),
57
+ checked = _useControllableState2[0],
58
+ setChecked = _useControllableState2[1];
59
+
60
+ function handleClick(e) {
61
+ setChecked(!checked);
62
+
63
+ if (onClick) {
64
+ onClick(e);
114
65
  }
115
- }]);
116
-
117
- return Toggle;
118
- }(React__default["default"].Component);
119
-
120
- _rollupPluginBabelHelpers.defineProperty(Toggle, "propTypes", (_defineProperty2 = {}, _rollupPluginBabelHelpers.defineProperty(_defineProperty2, 'aria-label', PropTypes__default["default"].string.isRequired), _rollupPluginBabelHelpers.defineProperty(_defineProperty2, "className", PropTypes__default["default"].string), _rollupPluginBabelHelpers.defineProperty(_defineProperty2, "defaultToggled", PropTypes__default["default"].bool), _rollupPluginBabelHelpers.defineProperty(_defineProperty2, "id", PropTypes__default["default"].string.isRequired), _rollupPluginBabelHelpers.defineProperty(_defineProperty2, "labelA", PropTypes__default["default"].node.isRequired), _rollupPluginBabelHelpers.defineProperty(_defineProperty2, "labelB", PropTypes__default["default"].node.isRequired), _rollupPluginBabelHelpers.defineProperty(_defineProperty2, "labelText", PropTypes__default["default"].node), _rollupPluginBabelHelpers.defineProperty(_defineProperty2, "onChange", PropTypes__default["default"].func), _rollupPluginBabelHelpers.defineProperty(_defineProperty2, "onToggle", PropTypes__default["default"].func), _rollupPluginBabelHelpers.defineProperty(_defineProperty2, "size", PropTypes__default["default"].oneOf(['sm', 'md'])), _rollupPluginBabelHelpers.defineProperty(_defineProperty2, "toggled", PropTypes__default["default"].bool), _defineProperty2));
121
-
122
- _rollupPluginBabelHelpers.defineProperty(Toggle, "contextType", usePrefix.PrefixContext);
123
-
124
- _rollupPluginBabelHelpers.defineProperty(Toggle, "defaultProps", (_defineProperty3 = {
125
- defaultToggled: false
126
- }, _rollupPluginBabelHelpers.defineProperty(_defineProperty3, 'aria-label', 'Toggle'), _rollupPluginBabelHelpers.defineProperty(_defineProperty3, "labelA", 'Off'), _rollupPluginBabelHelpers.defineProperty(_defineProperty3, "labelB", 'On'), _rollupPluginBabelHelpers.defineProperty(_defineProperty3, "onToggle", function onToggle() {}), _defineProperty3));
127
-
128
- var ToggleClassic = Toggle;
66
+ }
129
67
 
130
- exports["default"] = ToggleClassic;
68
+ var isSm = size === 'sm';
69
+ var sideLabel = hideLabel ? labelText : checked ? labelB : labelA;
70
+ var wrapperClasses = cx__default["default"]("".concat(prefix, "--toggle"), _rollupPluginBabelHelpers.defineProperty({}, "".concat(prefix, "--toggle--disabled"), disabled), className);
71
+ var labelTextClasses = cx__default["default"]("".concat(prefix, "--toggle__label-text"), _rollupPluginBabelHelpers.defineProperty({}, "".concat(prefix, "--visually-hidden"), hideLabel));
72
+ var appearanceClasses = cx__default["default"]("".concat(prefix, "--toggle__appearance"), _rollupPluginBabelHelpers.defineProperty({}, "".concat(prefix, "--toggle__appearance--sm"), isSm));
73
+ var switchClasses = cx__default["default"]("".concat(prefix, "--toggle__switch"), _rollupPluginBabelHelpers.defineProperty({}, "".concat(prefix, "--toggle__switch--checked"), checked));
74
+ return /*#__PURE__*/React__default["default"].createElement("div", {
75
+ className: wrapperClasses
76
+ }, /*#__PURE__*/React__default["default"].createElement("button", _rollupPluginBabelHelpers["extends"]({}, other, {
77
+ id: id,
78
+ className: "".concat(prefix, "--toggle__button"),
79
+ role: "switch",
80
+ type: "button",
81
+ "aria-checked": checked,
82
+ disabled: disabled,
83
+ onClick: handleClick
84
+ })), /*#__PURE__*/React__default["default"].createElement("label", {
85
+ htmlFor: id,
86
+ className: "".concat(prefix, "--toggle__label")
87
+ }, /*#__PURE__*/React__default["default"].createElement("span", {
88
+ className: labelTextClasses
89
+ }, labelText), /*#__PURE__*/React__default["default"].createElement("div", {
90
+ className: appearanceClasses
91
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
92
+ className: switchClasses
93
+ }, isSm && /*#__PURE__*/React__default["default"].createElement("svg", {
94
+ className: "".concat(prefix, "--toggle__check"),
95
+ width: "6px",
96
+ height: "5px",
97
+ viewBox: "0 0 6 5"
98
+ }, _path || (_path = /*#__PURE__*/React__default["default"].createElement("path", {
99
+ d: "M2.2 2.7L5 0 6 1 2.2 5 0 2.7 1 1.5z"
100
+ })))), /*#__PURE__*/React__default["default"].createElement("span", {
101
+ className: "".concat(prefix, "--toggle__text"),
102
+ "aria-hidden": "true"
103
+ }, sideLabel))));
104
+ }
105
+ Toggle.propTypes = {
106
+ /**
107
+ * Specify a custom className to apply to the form-item node
108
+ */
109
+ className: PropTypes__default["default"].string,
110
+
111
+ /**
112
+ * Specify whether the toggle should be on by default
113
+ */
114
+ defaultToggled: PropTypes__default["default"].bool,
115
+
116
+ /**
117
+ * Whether this control should be disabled
118
+ */
119
+ disabled: PropTypes__default["default"].bool,
120
+
121
+ /**
122
+ * Specify whether the label should be hidden, or not
123
+ */
124
+ hideLabel: PropTypes__default["default"].bool,
125
+
126
+ /**
127
+ * Provide an id that unique represents the underlying `<button>`
128
+ */
129
+ id: PropTypes__default["default"].string.isRequired,
130
+
131
+ /**
132
+ * Specify the label for the "off" position
133
+ */
134
+ labelA: PropTypes__default["default"].node,
135
+
136
+ /**
137
+ * Specify the label for the "on" position
138
+ */
139
+ labelB: PropTypes__default["default"].node,
140
+
141
+ /**
142
+ * Provide the text that will be read by a screen reader when visiting this
143
+ * control
144
+ */
145
+ labelText: PropTypes__default["default"].node.isRequired,
146
+
147
+ /**
148
+ * Provide an event listener that is called when the control is clicked
149
+ */
150
+ onClick: PropTypes__default["default"].func,
151
+
152
+ /**
153
+ * Provide an event listener that is called when the control is toggled
154
+ */
155
+ onToggle: PropTypes__default["default"].func,
156
+
157
+ /**
158
+ * Specify the size of the Toggle. Currently only supports 'sm' or 'md' (default)
159
+ */
160
+ size: PropTypes__default["default"].oneOf(['sm', 'md']),
161
+
162
+ /**
163
+ * Specify whether the control is toggled
164
+ */
165
+ toggled: PropTypes__default["default"].bool
166
+ };
167
+
168
+ exports.Toggle = Toggle;
169
+ exports["default"] = Toggle;
@@ -173,7 +173,7 @@ var HeaderMenu = /*#__PURE__*/function (_React$Component) {
173
173
  'aria-label': ariaLabel,
174
174
  'aria-labelledby': ariaLabelledBy
175
175
  };
176
- var className = cx__default["default"]((_cx = {}, _rollupPluginBabelHelpers.defineProperty(_cx, "".concat(prefix, "--header__submenu"), true), _rollupPluginBabelHelpers.defineProperty(_cx, customClassName, true), _rollupPluginBabelHelpers.defineProperty(_cx, "".concat(prefix, "--header__submenu--current"), isCurrentPage), _cx)); // Notes on eslint comments and based on the examples in:
176
+ var className = cx__default["default"]((_cx = {}, _rollupPluginBabelHelpers.defineProperty(_cx, "".concat(prefix, "--header__submenu"), true), _rollupPluginBabelHelpers.defineProperty(_cx, "".concat(prefix, "--header__submenu--current"), isCurrentPage), _rollupPluginBabelHelpers.defineProperty(_cx, customClassName, !!customClassName), _cx)); // Notes on eslint comments and based on the examples in:
177
177
  // https://www.w3.org/TR/wai-aria-practices/examples/menubar/menubar-1/menubar-1.html#
178
178
  // - The focus is handled by the <a> menuitem, onMouseOver is for mouse
179
179
  // users