@dxc-technology/halstack-react 0.0.0-7c194f8 → 0.0.0-7c2b794

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 (119) hide show
  1. package/HalstackContext.d.ts +29 -15
  2. package/HalstackContext.js +1 -1
  3. package/accordion/Accordion.js +1 -1
  4. package/accordion-group/AccordionGroup.d.ts +2 -3
  5. package/accordion-group/AccordionGroup.js +3 -3
  6. package/accordion-group/AccordionGroupAccordion.js +2 -2
  7. package/accordion-group/AccordionGroupContext.d.ts +3 -0
  8. package/accordion-group/AccordionGroupContext.js +8 -0
  9. package/action-icon/ActionIcon.d.ts +4 -0
  10. package/action-icon/ActionIcon.js +47 -0
  11. package/action-icon/ActionIcon.stories.tsx +41 -0
  12. package/action-icon/ActionIcon.test.js +64 -0
  13. package/action-icon/types.d.ts +26 -0
  14. package/action-icon/types.js +5 -0
  15. package/badge/Badge.d.ts +1 -1
  16. package/badge/Badge.js +140 -29
  17. package/badge/Badge.stories.tsx +210 -0
  18. package/badge/Badge.test.js +30 -0
  19. package/badge/types.d.ts +52 -3
  20. package/button/Button.js +3 -2
  21. package/button/Button.stories.tsx +32 -50
  22. package/button/Button.test.js +3 -1
  23. package/button/types.d.ts +1 -1
  24. package/common/coreTokens.js +2 -2
  25. package/common/variables.d.ts +29 -15
  26. package/common/variables.js +36 -22
  27. package/container/Container.js +1 -1
  28. package/contextual-menu/ContextualMenu.d.ts +7 -0
  29. package/contextual-menu/ContextualMenu.js +71 -0
  30. package/contextual-menu/ContextualMenu.stories.tsx +182 -0
  31. package/contextual-menu/ContextualMenu.test.js +71 -0
  32. package/contextual-menu/MenuItemAction.d.ts +4 -0
  33. package/contextual-menu/MenuItemAction.js +46 -0
  34. package/contextual-menu/types.d.ts +22 -0
  35. package/contextual-menu/types.js +5 -0
  36. package/date-input/types.d.ts +2 -2
  37. package/divider/Divider.d.ts +4 -0
  38. package/divider/Divider.js +36 -0
  39. package/divider/Divider.stories.tsx +223 -0
  40. package/divider/Divider.test.js +38 -0
  41. package/divider/types.d.ts +19 -0
  42. package/divider/types.js +5 -0
  43. package/dropdown/Dropdown.js +9 -7
  44. package/dropdown/types.d.ts +1 -1
  45. package/footer/Footer.d.ts +1 -1
  46. package/footer/Footer.js +25 -12
  47. package/footer/Footer.stories.tsx +19 -0
  48. package/footer/Icons.d.ts +1 -0
  49. package/footer/Icons.js +65 -1
  50. package/footer/types.d.ts +6 -0
  51. package/header/types.d.ts +2 -2
  52. package/icon/Icon.d.ts +4 -0
  53. package/icon/Icon.js +33 -0
  54. package/icon/Icon.stories.tsx +26 -0
  55. package/icon/types.d.ts +4 -0
  56. package/icon/types.js +5 -0
  57. package/image/Image.stories.tsx +3 -1
  58. package/layout/ApplicationLayout.d.ts +1 -1
  59. package/layout/ApplicationLayout.js +1 -1
  60. package/main.d.ts +5 -2
  61. package/main.js +22 -1
  62. package/nav-tabs/NavTabs.d.ts +1 -2
  63. package/nav-tabs/NavTabs.js +9 -6
  64. package/nav-tabs/NavTabs.stories.tsx +6 -4
  65. package/nav-tabs/NavTabs.test.js +3 -2
  66. package/nav-tabs/NavTabsContext.d.ts +3 -0
  67. package/nav-tabs/NavTabsContext.js +8 -0
  68. package/nav-tabs/Tab.js +8 -7
  69. package/number-input/NumberInput.d.ts +0 -7
  70. package/number-input/NumberInput.js +24 -5
  71. package/number-input/NumberInput.test.js +165 -6
  72. package/number-input/NumberInputContext.d.ts +3 -0
  73. package/number-input/NumberInputContext.js +8 -0
  74. package/number-input/types.d.ts +6 -0
  75. package/package.json +2 -2
  76. package/radio-group/RadioGroup.js +1 -1
  77. package/resultset-table/ResultsetTable.d.ts +4 -1
  78. package/resultset-table/ResultsetTable.js +13 -6
  79. package/resultset-table/ResultsetTable.stories.tsx +102 -5
  80. package/resultset-table/ResultsetTable.test.js +66 -0
  81. package/resultset-table/types.d.ts +6 -0
  82. package/select/Option.js +8 -1
  83. package/select/Select.js +33 -23
  84. package/select/types.d.ts +2 -2
  85. package/sidenav/Sidenav.js +3 -2
  86. package/slider/Slider.js +5 -6
  87. package/status-light/StatusLight.d.ts +4 -0
  88. package/status-light/StatusLight.js +51 -0
  89. package/status-light/StatusLight.stories.tsx +74 -0
  90. package/status-light/StatusLight.test.js +25 -0
  91. package/status-light/types.d.ts +17 -0
  92. package/status-light/types.js +5 -0
  93. package/table/DropdownTheme.js +62 -0
  94. package/table/Table.d.ts +6 -2
  95. package/table/Table.js +82 -8
  96. package/table/Table.stories.tsx +304 -2
  97. package/table/Table.test.js +92 -0
  98. package/table/types.d.ts +42 -0
  99. package/tabs/Tab.js +7 -4
  100. package/tabs/Tabs.js +4 -5
  101. package/tabs/Tabs.stories.tsx +1 -1
  102. package/text-input/TextInput.js +58 -71
  103. package/text-input/TextInput.test.js +96 -79
  104. package/useTheme.d.ts +29 -15
  105. package/utils/FocusLock.js +3 -0
  106. package/wizard/types.d.ts +1 -1
  107. package/common/OpenSans.css +0 -69
  108. package/common/fonts/OpenSans-Bold.ttf +0 -0
  109. package/common/fonts/OpenSans-BoldItalic.ttf +0 -0
  110. package/common/fonts/OpenSans-ExtraBold.ttf +0 -0
  111. package/common/fonts/OpenSans-ExtraBoldItalic.ttf +0 -0
  112. package/common/fonts/OpenSans-Italic.ttf +0 -0
  113. package/common/fonts/OpenSans-Light.ttf +0 -0
  114. package/common/fonts/OpenSans-LightItalic.ttf +0 -0
  115. package/common/fonts/OpenSans-Regular.ttf +0 -0
  116. package/common/fonts/OpenSans-SemiBold.ttf +0 -0
  117. package/common/fonts/OpenSans-SemiBoldItalic.ttf +0 -0
  118. /package/{layout → sidenav}/SidenavContext.d.ts +0 -0
  119. /package/{layout → sidenav}/SidenavContext.js +0 -0
@@ -38,7 +38,7 @@ declare const HalstackContext: React.Context<DeepPartial<{
38
38
  disabledIconColor: string;
39
39
  iconSize: string;
40
40
  iconMarginLeft: string;
41
- iconMarginRigth: string;
41
+ iconMarginRight: string;
42
42
  accordionGroupSeparatorBorderColor: string;
43
43
  accordionGroupSeparatorBorderThickness: string;
44
44
  accordionGroupSeparatorBorderRadius: string;
@@ -284,8 +284,14 @@ declare const HalstackContext: React.Context<DeepPartial<{
284
284
  buttonPaddingBottom: string;
285
285
  buttonPaddingLeft: string;
286
286
  buttonPaddingRight: string;
287
+ buttonHeight: string;
288
+ buttonBorderRadius: string;
289
+ buttonBorderStyle: string;
290
+ buttonBorderThickness: string;
291
+ buttonBorderColor: string;
287
292
  disabledColor: string;
288
293
  disabledButtonBackgroundColor: string;
294
+ disabledButtonBorderColor: string;
289
295
  disabledBorderColor: string;
290
296
  optionBackgroundColor: string;
291
297
  hoverOptionBackgroundColor: string;
@@ -848,8 +854,16 @@ declare const HalstackContext: React.Context<DeepPartial<{
848
854
  dataPaddingBottom: string;
849
855
  dataPaddingRight: string;
850
856
  dataPaddingLeft: string;
857
+ dataPaddingTopReduced: string;
858
+ dataPaddingBottomReduced: string;
859
+ dataPaddingRightReduced: string;
860
+ dataPaddingLeftReduced: string;
851
861
  dataTextAlign: string;
852
862
  dataTextLineHeight: string;
863
+ firstChildPaddingLeft: string;
864
+ lastChildPaddingRight: string;
865
+ firstChildPaddingLeftReduced: string;
866
+ lastChildPaddingRightReduced: string;
853
867
  headerBackgroundColor: string;
854
868
  headerBorderRadius: string;
855
869
  headerFontFamily: string;
@@ -862,11 +876,25 @@ declare const HalstackContext: React.Context<DeepPartial<{
862
876
  headerPaddingBottom: string;
863
877
  headerPaddingRight: string;
864
878
  headerPaddingLeft: string;
879
+ headerPaddingTopReduced: string;
880
+ headerPaddingBottomReduced: string;
881
+ headerPaddingRightReduced: string;
882
+ headerPaddingLeftReduced: string;
865
883
  headerTextAlign: string;
866
884
  headerTextLineHeight: string;
867
885
  scrollBarThumbColor: string;
868
886
  scrollBarTrackColor: string;
869
887
  sortIconColor: string;
888
+ actionIconColor: string;
889
+ disabledActionIconColor: string;
890
+ hoverActionIconColor: string;
891
+ focusActionIconColor: string;
892
+ activeActionIconColor: string;
893
+ actionBackgroundColor: string;
894
+ disabledActionBackgroundColor: string;
895
+ hoverActionBackgroundColor: string;
896
+ focusActionBorderColor: string;
897
+ activeActionBackgroundColor: string;
870
898
  };
871
899
  tabs: {
872
900
  fontFamily: string;
@@ -885,7 +913,6 @@ declare const HalstackContext: React.Context<DeepPartial<{
885
913
  disabledFontColor: string;
886
914
  disabledIconColor: string;
887
915
  disabledFontStyle: string;
888
- disabledBadgeBackgroundColor: string;
889
916
  hoverBackgroundColor: string;
890
917
  pressedBackgroundColor: string;
891
918
  pressedFontWeight: string;
@@ -893,19 +920,6 @@ declare const HalstackContext: React.Context<DeepPartial<{
893
920
  dividerThickness: string;
894
921
  focusOutline: string;
895
922
  scrollButtonsWidth: string;
896
- badgeBackgroundColor: string;
897
- badgeFontFamily: string;
898
- badgeFontSize: string;
899
- badgeFontStyle: string;
900
- badgeFontWeight: string;
901
- badgeFontColor: string;
902
- badgeLetterSpacing: string;
903
- badgeWidth: string;
904
- badgeHeight: string;
905
- badgeRadius: string;
906
- badgeWidthWithNotificationNumber: string;
907
- badgeHeightWithNotificationNumber: string;
908
- badgeRadiusWithNotificationNumber: string;
909
923
  };
910
924
  tag: {
911
925
  fontFamily: string;
@@ -306,5 +306,5 @@ var HalstackProvider = exports.HalstackProvider = function HalstackProvider(_ref
306
306
  value: parsedLabels
307
307
  }, children)));
308
308
  };
309
- var Halstack = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n @import url(\"https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300;0,400;0,600;0,700;0,800;1,300;1,400;1,600;1,700;1,800&display=swap\");\n"])));
309
+ var Halstack = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n @import url(\"https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300;0,400;0,600;0,700;0,800;1,300;1,400;1,600;1,700;1,800&display=swap\");\n @import url(\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:FILL@0..1\");\n"])));
310
310
  var _default = exports["default"] = HalstackContext;
@@ -156,7 +156,7 @@ var AccordionLabel = _styledComponents["default"].span(_templateObject5 || (_tem
156
156
  var IconContainer = _styledComponents["default"].span(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n margin-left: ", ";\n margin-right: ", ";\n color: ", ";\n\n svg,\n img {\n height: ", ";\n width: ", ";\n }\n"])), function (props) {
157
157
  return props.theme.iconMarginLeft;
158
158
  }, function (props) {
159
- return props.theme.iconMarginRigth;
159
+ return props.theme.iconMarginRight;
160
160
  }, function (props) {
161
161
  return props.disabled ? props.theme.disabledIconColor : props.theme.iconColor;
162
162
  }, function (props) {
@@ -1,6 +1,5 @@
1
- import React from "react";
2
- import AccordionGroupPropsType, { AccordionGroupAccordionContextProps } from "./types";
3
- export declare const AccordionGroupAccordionContext: React.Context<AccordionGroupAccordionContextProps>;
1
+ /// <reference types="react" />
2
+ import AccordionGroupPropsType from "./types";
4
3
  declare const DxcAccordionGroup: {
5
4
  ({ defaultIndexActive, indexActive, disabled, onActiveChange, margin, children, }: AccordionGroupPropsType): JSX.Element;
6
5
  Accordion: ({ ...childProps }: import("./types").AccordionPropsType) => JSX.Element;
@@ -5,7 +5,7 @@ var _typeof3 = require("@babel/runtime/helpers/typeof");
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports["default"] = exports.AccordionGroupAccordionContext = void 0;
8
+ exports["default"] = void 0;
9
9
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
10
10
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
11
11
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
@@ -16,12 +16,12 @@ var _utils = require("../common/utils");
16
16
  var _variables = require("../common/variables");
17
17
  var _useTheme = _interopRequireDefault(require("../useTheme"));
18
18
  var _AccordionGroupAccordion = _interopRequireDefault(require("./AccordionGroupAccordion"));
19
+ var _AccordionGroupContext = require("./AccordionGroupContext");
19
20
  var _templateObject;
20
21
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
21
22
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
22
23
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
23
24
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
24
- var AccordionGroupAccordionContext = exports.AccordionGroupAccordionContext = /*#__PURE__*/(0, _react.createContext)(null);
25
25
  var DxcAccordionGroup = function DxcAccordionGroup(_ref) {
26
26
  var defaultIndexActive = _ref.defaultIndexActive,
27
27
  indexActive = _ref.indexActive,
@@ -54,7 +54,7 @@ var DxcAccordionGroup = function DxcAccordionGroup(_ref) {
54
54
  margin: margin,
55
55
  disabled: disabled
56
56
  }, _react.Children.map(children, function (accordion, index) {
57
- return /*#__PURE__*/_react["default"].createElement(AccordionGroupAccordionContext.Provider, {
57
+ return /*#__PURE__*/_react["default"].createElement(_AccordionGroupContext.AccordionGroupAccordionContext.Provider, {
58
58
  key: "accordion-".concat(index),
59
59
  value: _objectSpread({
60
60
  index: index
@@ -10,12 +10,12 @@ var _objectDestructuringEmpty2 = _interopRequireDefault(require("@babel/runtime/
10
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
11
  var _react = _interopRequireWildcard(require("react"));
12
12
  var _Accordion = _interopRequireDefault(require("../accordion/Accordion"));
13
- var _AccordionGroup = require("./AccordionGroup");
13
+ var _AccordionGroupContext = require("./AccordionGroupContext");
14
14
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
15
15
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
16
16
  var AccordionGroupAccordion = function AccordionGroupAccordion(_ref) {
17
17
  var childProps = (0, _extends2["default"])({}, ((0, _objectDestructuringEmpty2["default"])(_ref), _ref));
18
- var _useContext = (0, _react.useContext)(_AccordionGroup.AccordionGroupAccordionContext),
18
+ var _useContext = (0, _react.useContext)(_AccordionGroupContext.AccordionGroupAccordionContext),
19
19
  activeIndex = _useContext.activeIndex,
20
20
  handlerActiveChange = _useContext.handlerActiveChange,
21
21
  disabled = _useContext.disabled,
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ import { AccordionGroupAccordionContextProps } from "./types";
3
+ export declare const AccordionGroupAccordionContext: import("react").Context<AccordionGroupAccordionContextProps>;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.AccordionGroupAccordionContext = void 0;
7
+ var _react = require("react");
8
+ var AccordionGroupAccordionContext = exports.AccordionGroupAccordionContext = /*#__PURE__*/(0, _react.createContext)(null);
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import ActionIconPropsTypes from "./types";
3
+ declare const DxcActionIcon: React.ForwardRefExoticComponent<ActionIconPropsTypes & React.RefAttributes<HTMLButtonElement>>;
4
+ export default DxcActionIcon;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
11
+ var _coreTokens = _interopRequireDefault(require("../common/coreTokens"));
12
+ var _templateObject;
13
+ var DxcActionIcon = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
14
+ var _ref$disabled = _ref.disabled,
15
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
16
+ title = _ref.title,
17
+ icon = _ref.icon,
18
+ onClick = _ref.onClick,
19
+ tabIndex = _ref.tabIndex;
20
+ return /*#__PURE__*/_react["default"].createElement(ActionIcon, {
21
+ "aria-label": title,
22
+ disabled: disabled,
23
+ onClick: onClick,
24
+ onMouseDown: function onMouseDown(event) {
25
+ event.stopPropagation();
26
+ },
27
+ tabIndex: tabIndex,
28
+ title: title,
29
+ type: "button",
30
+ ref: ref
31
+ }, typeof icon === "string" ? /*#__PURE__*/_react["default"].createElement("img", {
32
+ src: icon
33
+ }) : icon);
34
+ });
35
+ var ActionIcon = _styledComponents["default"].button(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n border: none;\n border-radius: 2px;\n width: 24px;\n height: 24px;\n padding: 0px;\n ", "\n\n box-shadow: 0 0 0 2px transparent;\n background-color: ", ";\n color: ", ";\n\n ", "\n\n img, svg {\n width: 16px;\n height: 16px;\n }\n"])), function (props) {
36
+ return props.disabled ? "cursor: not-allowed;" : "cursor: pointer;";
37
+ }, function (props) {
38
+ var _props$theme$disabled, _props$theme$actionBa;
39
+ return props.disabled ? (_props$theme$disabled = props.theme.disabledActionBackgroundColor) !== null && _props$theme$disabled !== void 0 ? _props$theme$disabled : _coreTokens["default"].color_transparent : (_props$theme$actionBa = props.theme.actionBackgroundColor) !== null && _props$theme$actionBa !== void 0 ? _props$theme$actionBa : _coreTokens["default"].color_transparent;
40
+ }, function (props) {
41
+ var _props$theme$disabled2, _props$theme$actionIc;
42
+ return props.disabled ? (_props$theme$disabled2 = props.theme.disabledActionIconColor) !== null && _props$theme$disabled2 !== void 0 ? _props$theme$disabled2 : _coreTokens["default"].color_grey_500 : (_props$theme$actionIc = props.theme.actionIconColor) !== null && _props$theme$actionIc !== void 0 ? _props$theme$actionIc : _coreTokens["default"].color_black;
43
+ }, function (props) {
44
+ var _props$theme$focusAct, _props$theme$focusAct2, _props$theme$hoverAct, _props$theme$hoverAct2, _props$theme$activeAc, _props$theme$activeAc2;
45
+ return !props.disabled && "\n &:focus,\n &:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px ".concat((_props$theme$focusAct = props.theme.focusActionBorderColor) !== null && _props$theme$focusAct !== void 0 ? _props$theme$focusAct : _coreTokens["default"].color_blue_600, ";\n color: ").concat((_props$theme$focusAct2 = props.theme.focusActionIconColor) !== null && _props$theme$focusAct2 !== void 0 ? _props$theme$focusAct2 : _coreTokens["default"].color_black, ";\n }\n &:hover {\n background-color: ").concat((_props$theme$hoverAct = props.theme.hoverActionBackgroundColor) !== null && _props$theme$hoverAct !== void 0 ? _props$theme$hoverAct : _coreTokens["default"].color_grey_100, ";\n color: ").concat((_props$theme$hoverAct2 = props.theme.hoverActionIconColor) !== null && _props$theme$hoverAct2 !== void 0 ? _props$theme$hoverAct2 : _coreTokens["default"].color_black, ";\n }\n &:active {\n background-color: ").concat((_props$theme$activeAc = props.theme.activeActionBackgroundColor) !== null && _props$theme$activeAc !== void 0 ? _props$theme$activeAc : _coreTokens["default"].color_grey_300, ";\n color: ").concat((_props$theme$activeAc2 = props.theme.activeActionIconColor) !== null && _props$theme$activeAc2 !== void 0 ? _props$theme$activeAc2 : _coreTokens["default"].color_black, ";\n }\n ");
46
+ });
47
+ var _default = exports["default"] = DxcActionIcon;
@@ -0,0 +1,41 @@
1
+ import React from "react";
2
+ import Title from "../../.storybook/components/Title";
3
+ import ExampleContainer from "../../.storybook/components/ExampleContainer";
4
+ import DxcActionIcon from "./ActionIcon";
5
+
6
+ export default {
7
+ title: "Action Icon ",
8
+ component: DxcActionIcon,
9
+ };
10
+
11
+ const iconSVG = (
12
+ <svg width="24px" height="24px" viewBox="0 0 24 24" fill="currentColor">
13
+ <path d="M0 0h24v24H0z" fill="none" />
14
+ <path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z" />
15
+ </svg>
16
+ );
17
+
18
+ export const Chromatic = () => (
19
+ <>
20
+ <Title title="Default" theme="light" level={2} />
21
+ <ExampleContainer>
22
+ <DxcActionIcon icon={"https://www.freepnglogos.com/uploads/facebook-logo-design-1.png"} title="Favourite" />
23
+ </ExampleContainer>
24
+ <Title title="Disabled" theme="light" level={2} />
25
+ <ExampleContainer>
26
+ <DxcActionIcon icon={iconSVG} title="Favourite" disabled />
27
+ </ExampleContainer>
28
+ <Title title="Hover" theme="light" level={2} />
29
+ <ExampleContainer pseudoState="pseudo-hover">
30
+ <DxcActionIcon icon={iconSVG} title="Favourite" />
31
+ </ExampleContainer>
32
+ <Title title="Focus" theme="light" level={2} />
33
+ <ExampleContainer pseudoState="pseudo-focus">
34
+ <DxcActionIcon icon={iconSVG} title="Favourite" />
35
+ </ExampleContainer>
36
+ <Title title="Active" theme="light" level={2} />
37
+ <ExampleContainer pseudoState="pseudo-active">
38
+ <DxcActionIcon icon={iconSVG} title="Favourite" />
39
+ </ExampleContainer>
40
+ </>
41
+ );
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _react = _interopRequireDefault(require("react"));
5
+ var _react2 = require("@testing-library/react");
6
+ var _ActionIcon = _interopRequireDefault(require("./ActionIcon.tsx"));
7
+ var iconSVG = /*#__PURE__*/_react["default"].createElement("svg", {
8
+ width: "24px",
9
+ height: "24px",
10
+ viewBox: "0 0 24 24",
11
+ fill: "currentColor"
12
+ }, /*#__PURE__*/_react["default"].createElement("path", {
13
+ d: "M0 0h24v24H0z",
14
+ fill: "none"
15
+ }), /*#__PURE__*/_react["default"].createElement("path", {
16
+ d: "M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"
17
+ }));
18
+ describe("Action icon component tests", function () {
19
+ test("Action icon renders with correct text", function () {
20
+ var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ActionIcon["default"], {
21
+ icon: iconSVG,
22
+ title: "favourite"
23
+ })),
24
+ getByTitle = _render.getByTitle;
25
+ expect(getByTitle("favourite")).toBeTruthy();
26
+ });
27
+ test("Calls correct function on click", function () {
28
+ var onClick = jest.fn();
29
+ var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ActionIcon["default"], {
30
+ icon: iconSVG,
31
+ title: "favourite",
32
+ onClick: onClick
33
+ })),
34
+ getByTitle = _render2.getByTitle;
35
+ var action = getByTitle("favourite");
36
+ _react2.fireEvent.click(action);
37
+ expect(onClick).toHaveBeenCalled();
38
+ });
39
+ test("On click is not called when disabled", function () {
40
+ var onClick = jest.fn();
41
+ var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ActionIcon["default"], {
42
+ disabled: true,
43
+ icon: iconSVG,
44
+ title: "favourite",
45
+ onClick: onClick
46
+ })),
47
+ getByTitle = _render3.getByTitle;
48
+ var action = getByTitle("favourite");
49
+ _react2.fireEvent.click(action);
50
+ expect(onClick).toHaveBeenCalledTimes(0);
51
+ });
52
+ test("Renders with correct accessibility attributes", function () {
53
+ var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ActionIcon["default"], {
54
+ icon: iconSVG,
55
+ title: "favourite",
56
+ tabIndex: 1
57
+ })),
58
+ getByRole = _render4.getByRole;
59
+ var button = getByRole("button");
60
+ expect(button.getAttribute("aria-label")).toBe("favourite");
61
+ expect(button.getAttribute("title")).toBe("favourite");
62
+ expect(button.getAttribute("tabindex")).toBe("1");
63
+ });
64
+ });
@@ -0,0 +1,26 @@
1
+ /// <reference types="react" />
2
+ type SVG = React.ReactNode & React.SVGProps<SVGSVGElement>;
3
+ type Props = {
4
+ /**
5
+ * If true, the component will be disabled.
6
+ */
7
+ disabled?: boolean;
8
+ /**
9
+ * Value for the HTML properties title and aria-label.
10
+ */
11
+ title: string;
12
+ /**
13
+ * Element or path used as the icon that will be placed next to the label.
14
+ */
15
+ icon: string | SVG;
16
+ /**
17
+ * This function will be called when the user clicks the button.
18
+ */
19
+ onClick?: () => void;
20
+ /**
21
+ * Value of the tabindex attribute.
22
+ */
23
+ tabIndex?: number;
24
+ };
25
+ export type RefType = HTMLButtonElement;
26
+ export default Props;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
package/badge/Badge.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  /// <reference types="react" />
2
2
  import BadgePropsType from "./types";
3
- declare const DxcBadge: ({ notificationText, disabled }: BadgePropsType) => JSX.Element;
3
+ declare const DxcBadge: ({ label, title, mode, color, icon, notificationLimit, size, }: BadgePropsType) => JSX.Element;
4
4
  export default DxcBadge;
package/badge/Badge.js CHANGED
@@ -1,48 +1,159 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof = require("@babel/runtime/helpers/typeof");
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports["default"] = void 0;
9
8
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
10
9
  var _react = _interopRequireDefault(require("react"));
11
- var _styledComponents = _interopRequireWildcard(require("styled-components"));
12
- var _useTheme = _interopRequireDefault(require("../useTheme"));
13
- var _templateObject;
14
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
15
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
16
- var DxcBadge = function DxcBadge(_ref) {
17
- var notificationText = _ref.notificationText,
18
- disabled = _ref.disabled;
19
- var colorsTheme = (0, _useTheme["default"])();
20
- return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
21
- theme: colorsTheme.tabs
22
- }, /*#__PURE__*/_react["default"].createElement(StyledDxcBadge, {
23
- notificationText: notificationText,
24
- disabled: disabled
25
- }, /*#__PURE__*/_react["default"].createElement("span", null, notificationText)));
10
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
11
+ var _Flex = _interopRequireDefault(require("../flex/Flex"));
12
+ var _coreTokens = _interopRequireDefault(require("../common/coreTokens"));
13
+ var _templateObject, _templateObject2, _templateObject3;
14
+ var contextualColorMap = {
15
+ grey: {
16
+ background: _coreTokens["default"].color_grey_200,
17
+ text: _coreTokens["default"].color_grey_900
18
+ },
19
+ blue: {
20
+ background: _coreTokens["default"].color_blue_200,
21
+ text: _coreTokens["default"].color_blue_900
22
+ },
23
+ green: {
24
+ background: _coreTokens["default"].color_green_200,
25
+ text: _coreTokens["default"].color_green_900
26
+ },
27
+ orange: {
28
+ background: _coreTokens["default"].color_orange_200,
29
+ text: _coreTokens["default"].color_orange_900
30
+ },
31
+ red: {
32
+ background: _coreTokens["default"].color_red_200,
33
+ text: _coreTokens["default"].color_red_900
34
+ },
35
+ yellow: {
36
+ background: _coreTokens["default"].color_yellow_200,
37
+ text: _coreTokens["default"].color_yellow_900
38
+ },
39
+ purple: {
40
+ background: _coreTokens["default"].color_purple_200,
41
+ text: _coreTokens["default"].color_purple_900
42
+ }
26
43
  };
27
- var StyledDxcBadge = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n background-color: ", ";\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n color: ", ";\n letter-spacing: ", ";\n width: ", ";\n height: ", ";\n border-radius: ", ";\n display: flex;\n padding-bottom: 1px;\n padding-right: 1px;\n flex-wrap: wrap;\n box-sizing: border-box;\n align-items: center;\n line-height: 1;\n align-content: center;\n flex-direction: row;\n justify-content: center;\n"])), function (props) {
28
- return props.disabled ? props.theme.disabledBadgeBackgroundColor : props.theme.badgeBackgroundColor;
29
- }, function (props) {
30
- return props.theme.badgeFontFamily;
31
- }, function (props) {
32
- return props.theme.badgeFontSize;
44
+ var sizeMap = {
45
+ small: {
46
+ height: "20px",
47
+ width: "20px",
48
+ minWidth: "20px",
49
+ fontSize: _coreTokens["default"].type_scale_01,
50
+ borderRadius: _coreTokens["default"].spacing_12,
51
+ iconSize: "14px",
52
+ padding: {
53
+ contextual: "".concat(_coreTokens["default"].spacing_4),
54
+ notification: "".concat(_coreTokens["default"].spacing_0, " ").concat(_coreTokens["default"].spacing_4)
55
+ }
56
+ },
57
+ medium: {
58
+ height: "24px",
59
+ width: "24px",
60
+ minWidth: "24px",
61
+ fontSize: _coreTokens["default"].type_scale_02,
62
+ borderRadius: _coreTokens["default"].spacing_12,
63
+ iconSize: "16px",
64
+ padding: {
65
+ contextual: "".concat(_coreTokens["default"].spacing_4, " ").concat(_coreTokens["default"].spacing_8),
66
+ notification: "".concat(_coreTokens["default"].spacing_0, " ").concat(_coreTokens["default"].spacing_4)
67
+ }
68
+ },
69
+ large: {
70
+ height: "32px",
71
+ width: "32px",
72
+ minWidth: "32px",
73
+ fontSize: _coreTokens["default"].type_scale_04,
74
+ borderRadius: _coreTokens["default"].spacing_24,
75
+ iconSize: "24px",
76
+ padding: {
77
+ contextual: "".concat(_coreTokens["default"].spacing_4, " ").concat(_coreTokens["default"].spacing_8),
78
+ notification: "".concat(_coreTokens["default"].spacing_0, " ").concat(_coreTokens["default"].spacing_8)
79
+ }
80
+ }
81
+ };
82
+ var Label = function Label(_ref) {
83
+ var label = _ref.label,
84
+ notificationLimit = _ref.notificationLimit,
85
+ size = _ref.size;
86
+ return /*#__PURE__*/_react["default"].createElement(LabelContainer, {
87
+ size: size
88
+ }, typeof label === "number" ? label > notificationLimit ? "+" + notificationLimit : label : label);
89
+ };
90
+ var DxcBadge = function DxcBadge(_ref2) {
91
+ var label = _ref2.label,
92
+ title = _ref2.title,
93
+ _ref2$mode = _ref2.mode,
94
+ mode = _ref2$mode === void 0 ? "contextual" : _ref2$mode,
95
+ _ref2$color = _ref2.color,
96
+ color = _ref2$color === void 0 ? "grey" : _ref2$color,
97
+ icon = _ref2.icon,
98
+ _ref2$notificationLim = _ref2.notificationLimit,
99
+ notificationLimit = _ref2$notificationLim === void 0 ? 99 : _ref2$notificationLim,
100
+ _ref2$size = _ref2.size,
101
+ size = _ref2$size === void 0 ? "medium" : _ref2$size;
102
+ return /*#__PURE__*/_react["default"].createElement(BadgeContainer, {
103
+ label: label,
104
+ mode: mode,
105
+ color: mode === "contextual" && color || undefined,
106
+ size: size,
107
+ title: title,
108
+ "aria-label": title
109
+ }, mode === "contextual" && /*#__PURE__*/_react["default"].createElement(_Flex["default"], {
110
+ gap: "0.125rem",
111
+ alignItems: "center"
112
+ }, icon && /*#__PURE__*/_react["default"].createElement(IconContainer, {
113
+ size: size
114
+ }, typeof icon === "string" ? /*#__PURE__*/_react["default"].createElement("img", {
115
+ src: icon,
116
+ alt: title
117
+ }) : icon), /*#__PURE__*/_react["default"].createElement(Label, {
118
+ label: label,
119
+ notificationLimit: notificationLimit,
120
+ size: size
121
+ })) || /*#__PURE__*/_react["default"].createElement(Label, {
122
+ label: label,
123
+ notificationLimit: notificationLimit,
124
+ size: size
125
+ }));
126
+ };
127
+ var getColor = function getColor(mode, color) {
128
+ return mode === "contextual" ? contextualColorMap[color].text : _coreTokens["default"].color_white;
129
+ };
130
+ var getBackgroundColor = function getBackgroundColor(mode, color) {
131
+ return mode === "contextual" ? contextualColorMap[color].background : _coreTokens["default"].color_red_700;
132
+ };
133
+ var getPadding = function getPadding(mode, size) {
134
+ return mode === "contextual" ? sizeMap[size].padding.contextual : sizeMap[size].padding.notification;
135
+ };
136
+ var BadgeContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n color: ", ";\n background-color: ", ";\n border-radius: ", ";\n width: ", ";\n min-width: ", ";\n height: ", ";\n padding: ", ";\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n"])), function (props) {
137
+ return getColor(props.mode, props.color);
33
138
  }, function (props) {
34
- return props.theme.badgeFontStyle;
139
+ return getBackgroundColor(props.mode, props.color);
35
140
  }, function (props) {
36
- return props.theme.badgeFontWeight;
141
+ return sizeMap[props.size].borderRadius;
37
142
  }, function (props) {
38
- return props.theme.badgeFontColor;
143
+ return !props.label && props.mode === "notification" ? sizeMap[props.size].width : "fit-content";
39
144
  }, function (props) {
40
- return props.theme.badgeLetterSpacing;
145
+ return props.mode === "notification" && sizeMap[props.size].minWidth;
41
146
  }, function (props) {
42
- return props.notificationText === true ? props.theme.badgeWidth : props.theme.badgeWidthWithNotificationNumber;
147
+ return sizeMap[props.size].height;
43
148
  }, function (props) {
44
- return props.notificationText === true ? props.theme.badgeHeight : props.theme.badgeHeightWithNotificationNumber;
149
+ return props.label ? getPadding(props.mode, props.size) : "";
150
+ });
151
+ var IconContainer = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n img,\n svg {\n height: ", ";\n width: ", ";\n }\n"])), function (props) {
152
+ return sizeMap[props.size].iconSize;
45
153
  }, function (props) {
46
- return props.notificationText === true ? props.theme.badgeRadius : props.theme.badgeRadiusWithNotificationNumber;
154
+ return sizeMap[props.size].iconSize;
47
155
  });
156
+ var LabelContainer = _styledComponents["default"].span(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n font-family: ", ";\n font-size: ", ";\n font-weight: ", ";\n white-space: nowrap;\n"])), _coreTokens["default"].type_sans, function (props) {
157
+ return sizeMap[props.size].fontSize;
158
+ }, _coreTokens["default"].type_semibold);
48
159
  var _default = exports["default"] = DxcBadge;