@carbon/ibm-products 2.26.0 → 2.27.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. package/css/index-full-carbon.css +517 -56
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +1 -1
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon-released-only.css +32 -14
  6. package/css/index-without-carbon-released-only.css.map +1 -1
  7. package/css/index-without-carbon-released-only.min.css +1 -1
  8. package/css/index-without-carbon-released-only.min.css.map +1 -1
  9. package/css/index-without-carbon.css +517 -56
  10. package/css/index-without-carbon.css.map +1 -1
  11. package/css/index-without-carbon.min.css +1 -1
  12. package/css/index-without-carbon.min.css.map +1 -1
  13. package/css/index.css +488 -48
  14. package/css/index.css.map +1 -1
  15. package/css/index.min.css +1 -1
  16. package/css/index.min.css.map +1 -1
  17. package/es/components/BigNumbers/BigNumbers.d.ts +11 -0
  18. package/es/components/BigNumbers/BigNumbers.js +238 -0
  19. package/es/components/BigNumbers/constants.d.ts +13 -0
  20. package/es/components/BigNumbers/constants.js +67 -0
  21. package/es/components/BigNumbers/index.d.ts +1 -0
  22. package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +4 -3
  23. package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +3 -2
  24. package/es/components/DataSpreadsheet/utils/checkForHoldingKey.d.ts +1 -0
  25. package/es/components/DataSpreadsheet/utils/checkForHoldingKey.js +17 -0
  26. package/es/components/Datagrid/Datagrid/Datagrid.js +9 -2
  27. package/es/components/Datagrid/Datagrid/DatagridContent.d.ts +3 -1
  28. package/es/components/Datagrid/Datagrid/DatagridContent.js +6 -2
  29. package/es/components/Datagrid/Datagrid/DatagridHeaderRow.js +8 -4
  30. package/es/components/Datagrid/Datagrid/DatagridToolbar.d.ts +10 -1
  31. package/es/components/Datagrid/Datagrid/DatagridToolbar.js +21 -4
  32. package/es/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +32 -9
  33. package/es/components/Datagrid/Datagrid/addons/Filtering/constants.d.ts +3 -1
  34. package/es/components/Datagrid/Datagrid/addons/Filtering/constants.js +4 -1
  35. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +35 -3
  36. package/es/components/Datagrid/Datagrid/addons/stateReducer.js +1 -1
  37. package/es/components/Datagrid/useSelectAllToggle.js +5 -3
  38. package/es/components/SidePanel/SidePanel.js +13 -6
  39. package/es/components/SidePanel/motion/variants.d.ts +39 -12
  40. package/es/components/SidePanel/motion/variants.js +42 -11
  41. package/es/components/StringFormatter/StringFormatter.d.ts +6 -0
  42. package/es/components/StringFormatter/StringFormatter.js +79 -0
  43. package/es/components/StringFormatter/index.d.ts +1 -0
  44. package/es/components/StringFormatter/utils/enums.d.ts +14 -0
  45. package/es/components/StringFormatter/utils/enums.js +23 -0
  46. package/es/components/Tearsheet/TearsheetShell.js +10 -4
  47. package/es/components/UserAvatar/UserAvatar.js +58 -42
  48. package/es/components/index.d.ts +2 -0
  49. package/es/global/js/hooks/index.d.ts +1 -0
  50. package/es/global/js/hooks/useIsomorphicEffect.d.ts +2 -0
  51. package/es/global/js/hooks/useIsomorphicEffect.js +14 -0
  52. package/es/global/js/package-settings.d.ts +2 -0
  53. package/es/global/js/package-settings.js +2 -0
  54. package/es/index.js +2 -0
  55. package/es/settings.d.ts +2 -0
  56. package/lib/components/BigNumbers/BigNumbers.d.ts +11 -0
  57. package/lib/components/BigNumbers/BigNumbers.js +244 -0
  58. package/lib/components/BigNumbers/constants.d.ts +13 -0
  59. package/lib/components/BigNumbers/constants.js +76 -0
  60. package/lib/components/BigNumbers/index.d.ts +1 -0
  61. package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +4 -3
  62. package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +3 -2
  63. package/lib/components/DataSpreadsheet/utils/checkForHoldingKey.d.ts +1 -0
  64. package/lib/components/DataSpreadsheet/utils/checkForHoldingKey.js +21 -0
  65. package/lib/components/Datagrid/Datagrid/Datagrid.js +9 -2
  66. package/lib/components/Datagrid/Datagrid/DatagridContent.d.ts +3 -1
  67. package/lib/components/Datagrid/Datagrid/DatagridContent.js +6 -2
  68. package/lib/components/Datagrid/Datagrid/DatagridHeaderRow.js +8 -4
  69. package/lib/components/Datagrid/Datagrid/DatagridToolbar.d.ts +10 -1
  70. package/lib/components/Datagrid/Datagrid/DatagridToolbar.js +20 -3
  71. package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +30 -7
  72. package/lib/components/Datagrid/Datagrid/addons/Filtering/constants.d.ts +3 -1
  73. package/lib/components/Datagrid/Datagrid/addons/Filtering/constants.js +4 -0
  74. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +33 -1
  75. package/lib/components/Datagrid/Datagrid/addons/stateReducer.js +1 -1
  76. package/lib/components/Datagrid/useSelectAllToggle.js +4 -2
  77. package/lib/components/SidePanel/SidePanel.js +11 -4
  78. package/lib/components/SidePanel/motion/variants.d.ts +39 -12
  79. package/lib/components/SidePanel/motion/variants.js +42 -10
  80. package/lib/components/StringFormatter/StringFormatter.d.ts +6 -0
  81. package/lib/components/StringFormatter/StringFormatter.js +85 -0
  82. package/lib/components/StringFormatter/index.d.ts +1 -0
  83. package/lib/components/StringFormatter/utils/enums.d.ts +14 -0
  84. package/lib/components/StringFormatter/utils/enums.js +27 -0
  85. package/lib/components/Tearsheet/TearsheetShell.js +10 -4
  86. package/lib/components/UserAvatar/UserAvatar.js +58 -42
  87. package/lib/components/index.d.ts +2 -0
  88. package/lib/global/js/hooks/index.d.ts +1 -0
  89. package/lib/global/js/hooks/useIsomorphicEffect.d.ts +2 -0
  90. package/lib/global/js/hooks/useIsomorphicEffect.js +18 -0
  91. package/lib/global/js/package-settings.d.ts +2 -0
  92. package/lib/global/js/package-settings.js +2 -0
  93. package/lib/index.js +10 -0
  94. package/lib/settings.d.ts +2 -0
  95. package/package.json +7 -7
  96. package/scss/components/BigNumbers/_big-numbers.scss +151 -0
  97. package/scss/components/BigNumbers/_carbon-imports.scss +11 -0
  98. package/scss/components/BigNumbers/_index-with-carbon.scss +9 -0
  99. package/scss/components/BigNumbers/_index.scss +8 -0
  100. package/scss/components/FullPageError/_full-page-error.scss +2 -2
  101. package/scss/components/SidePanel/_side-panel.scss +1 -1
  102. package/scss/components/StringFormatter/_carbon-imports.scss +10 -0
  103. package/scss/components/StringFormatter/_index-with-carbon.scss +9 -0
  104. package/scss/components/StringFormatter/_index.scss +8 -0
  105. package/scss/components/StringFormatter/_string-formatter.scss +97 -0
  106. package/scss/components/Tearsheet/_tearsheet.scss +34 -2
  107. package/scss/components/UserAvatar/_user-avatar.scss +40 -0
  108. package/scss/components/_index-with-carbon.scss +2 -0
  109. package/scss/components/_index.scss +2 -0
@@ -11,12 +11,11 @@ import PropTypes from '../../node_modules/prop-types/index.js';
11
11
  import cx from '../../node_modules/classnames/index.js';
12
12
  import { getDevtoolsProps } from '../../global/js/utils/devtools.js';
13
13
  import { pkg } from '../../settings.js';
14
- import { User, Group } from '@carbon/react/icons';
15
14
  import { usePrefix, Tooltip } from '@carbon/react';
15
+ import { User } from '@carbon/react/icons';
16
16
  import { TooltipTrigger } from '../TooltipTrigger/TooltipTrigger.js';
17
17
 
18
- var _excluded = ["backgroundColor", "className", "renderIcon", "tooltipText", "tooltipAlignment"];
19
- var _User, _User2, _Group;
18
+ var _excluded = ["backgroundColor", "className", "name", "renderIcon", "size", "tooltipText", "tooltipAlignment"];
20
19
  // Carbon and package components we use.
21
20
  /* TODO: @import(s) of carbon components and other package components. */
22
21
 
@@ -45,54 +44,60 @@ var componentName = 'UserAvatar';
45
44
  */
46
45
 
47
46
  var defaults = {
48
- renderIcon: function renderIcon() {
49
- return _User || (_User = /*#__PURE__*/React__default.createElement(User, {
50
- size: 32
51
- }));
52
- },
53
- tooltipAlignment: 'bottom',
54
- tooltipText: 'Thomas J. Watson'
47
+ size: 'md',
48
+ tooltipAlignment: 'bottom'
55
49
  };
56
50
  var UserAvatar = /*#__PURE__*/React__default.forwardRef(function (_ref, ref) {
57
- var _SetItem;
58
51
  var backgroundColor = _ref.backgroundColor,
59
52
  className = _ref.className,
60
- _ref$renderIcon = _ref.renderIcon,
61
- renderIcon = _ref$renderIcon === void 0 ? defaults.renderIcon : _ref$renderIcon,
62
- _ref$tooltipText = _ref.tooltipText,
63
- tooltipText = _ref$tooltipText === void 0 ? defaults.tooltipText : _ref$tooltipText,
53
+ name = _ref.name,
54
+ RenderIcon = _ref.renderIcon,
55
+ _ref$size = _ref.size,
56
+ size = _ref$size === void 0 ? defaults.size : _ref$size,
57
+ tooltipText = _ref.tooltipText,
64
58
  _ref$tooltipAlignment = _ref.tooltipAlignment,
65
59
  tooltipAlignment = _ref$tooltipAlignment === void 0 ? defaults.tooltipAlignment : _ref$tooltipAlignment,
66
60
  rest = _objectWithoutProperties(_ref, _excluded);
67
61
  var carbonPrefix = usePrefix();
68
- var icons = {
69
- user: {
70
- md: _User2 || (_User2 = /*#__PURE__*/React__default.createElement(User, {
71
- size: 32
72
- }))
73
- },
74
- group: {
75
- md: _Group || (_Group = /*#__PURE__*/React__default.createElement(Group, {
76
- size: 32
77
- }))
62
+ var iconSize = {
63
+ sm: 16,
64
+ md: 20,
65
+ lg: 24,
66
+ xl: 32
67
+ };
68
+ var formatInitials = function formatInitials() {
69
+ var _ref2;
70
+ var parts = name.split(' ');
71
+ var firstChar = parts[0].charAt(0).toUpperCase();
72
+ var secondChar = parts[0].charAt(1).toUpperCase();
73
+ if (parts.length === 1) {
74
+ return firstChar + secondChar;
75
+ }
76
+ var lastChar = parts[parts.length - 1].charAt(0).toUpperCase();
77
+ var initials = [firstChar];
78
+ if (lastChar) {
79
+ initials.push(lastChar);
78
80
  }
81
+ return (_ref2 = '').concat.apply(_ref2, initials);
79
82
  };
80
- var getItem = function getItem(renderIcon) {
81
- if (renderIcon === User) {
82
- return icons.user['md'];
83
- } else if (renderIcon === Group) {
84
- return icons.group['md'];
85
- } else {
86
- return renderIcon;
83
+ var getItem = function getItem() {
84
+ var iconProps = {
85
+ size: iconSize[size]
86
+ };
87
+ if (RenderIcon) {
88
+ return /*#__PURE__*/React__default.createElement(RenderIcon, iconProps);
87
89
  }
90
+ if (name) {
91
+ return formatInitials();
92
+ }
93
+ return /*#__PURE__*/React__default.createElement(User, iconProps);
88
94
  };
89
- var SetItem = getItem(renderIcon);
90
- var renderUserAvatar = function renderUserAvatar() {
95
+ var Avatar = function Avatar() {
91
96
  return /*#__PURE__*/React__default.createElement("div", _extends({}, rest, {
92
97
  className: cx(blockClass,
93
98
  // Apply the block class to the main HTML element
94
99
  className, // Apply any supplied class names to the main HTML element.
95
- "".concat(blockClass, "--").concat(backgroundColor),
100
+ "".concat(blockClass, "--").concat(backgroundColor), "".concat(blockClass, "--").concat(size),
96
101
  // example: `${blockClass}__template-string-class-${kind}-n-${size}`,
97
102
  {
98
103
  // switched classes dependant on props or state
@@ -100,13 +105,16 @@ var UserAvatar = /*#__PURE__*/React__default.forwardRef(function (_ref, ref) {
100
105
  }),
101
106
  ref: ref,
102
107
  role: "img"
103
- }, getDevtoolsProps(componentName)), _SetItem || (_SetItem = /*#__PURE__*/React__default.createElement(SetItem, null)));
108
+ }, getDevtoolsProps(componentName)), getItem());
104
109
  };
105
- return SetItem && (tooltipText ? /*#__PURE__*/React__default.createElement(Tooltip, {
106
- align: tooltipAlignment,
107
- label: tooltipText,
108
- className: "".concat(blockClass, "__tooltip ").concat(carbonPrefix, "--icon-tooltip")
109
- }, /*#__PURE__*/React__default.createElement(TooltipTrigger, null, renderUserAvatar())) : renderUserAvatar());
110
+ if (tooltipText) {
111
+ return /*#__PURE__*/React__default.createElement(Tooltip, {
112
+ align: tooltipAlignment,
113
+ label: tooltipText,
114
+ className: "".concat(blockClass, "__tooltip ").concat(carbonPrefix, "--icon-tooltip")
115
+ }, /*#__PURE__*/React__default.createElement(TooltipTrigger, null, /*#__PURE__*/React__default.createElement(Avatar, null)));
116
+ }
117
+ return /*#__PURE__*/React__default.createElement(Avatar, null);
110
118
  });
111
119
 
112
120
  // Return a placeholder if not released and not enabled by feature flag
@@ -128,10 +136,18 @@ UserAvatar.propTypes = {
128
136
  * Provide an optional class to be applied to the containing node.
129
137
  */
130
138
  className: PropTypes.string,
139
+ /**
140
+ * When passing the name prop, either send the initials to be used or the user's full name. The first two capital letters of the user's name will be used as the name.
141
+ */
142
+ name: PropTypes.string,
131
143
  /**
132
144
  * Provide a custom icon to use if you need to use an icon other than the default one
133
145
  */
134
- renderIcon: PropTypes.func,
146
+ renderIcon: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
147
+ /**
148
+ * Set the size of the avatar circle
149
+ */
150
+ size: PropTypes.oneOf(['xl', 'lg', 'md', 'sm']),
135
151
  /**
136
152
  * Specify how the trigger should align with the tooltip
137
153
  */
@@ -34,6 +34,7 @@ export { CoachmarkOverlayElement } from "./CoachmarkOverlayElement";
34
34
  export { CoachmarkOverlayElements } from "./CoachmarkOverlayElements";
35
35
  export { CoachmarkStack } from "./CoachmarkStack";
36
36
  export { NonLinearReading } from "./NonLinearReading";
37
+ export { BigNumbers } from "./BigNumbers";
37
38
  export { TruncatedList } from "./TruncatedList";
38
39
  export { InterstitialScreen } from "./InterstitialScreen";
39
40
  export { InterstitialScreenView } from "./InterstitialScreenView";
@@ -41,6 +42,7 @@ export { InterstitialScreenViewModule } from "./InterstitialScreenViewModule";
41
42
  export { DelimitedList } from "./DelimitedList";
42
43
  export { FullPageError } from "./FullPageError";
43
44
  export { SearchBar } from "./SearchBar";
45
+ export { StringFormatter } from "./StringFormatter";
44
46
  export { UserAvatar } from "./UserAvatar";
45
47
  export { ComboButton, ComboButtonItem } from "./ComboButton";
46
48
  export { CreateFullPage, CreateFullPageStep } from "./CreateFullPage";
@@ -10,4 +10,5 @@ export { useValidCreateStepCount } from "./useValidCreateStepCount";
10
10
  export { useControllableState } from "./useControllableState";
11
11
  export { usePrefix } from "./usePrefix";
12
12
  export { useFocus } from "./useFocus";
13
+ export { useIsomorphicEffect } from "./useIsomorphicEffect";
13
14
  export { useNearestScroll, useWindowScroll } from "./useWindowScroll";
@@ -0,0 +1,2 @@
1
+ export const useIsomorphicEffect: typeof useEffect;
2
+ import { useEffect } from 'react';
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Copyright IBM Corp. 2020, 2024
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import { useLayoutEffect, useEffect } from 'react';
9
+
10
+ // Originally from `@carbon/react`, https://github.com/carbon-design-system/carbon/blob/main/packages/react/src/internal/useIsomorphicEffect.js
11
+ // useLayoutEffect on the client, useEffect on the server
12
+ var useIsomorphicEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;
13
+
14
+ export { useIsomorphicEffect };
@@ -75,9 +75,11 @@ declare namespace defaults {
75
75
  let EditTearsheetNarrow: boolean;
76
76
  let EditFullPage: boolean;
77
77
  let EditUpdateCards: boolean;
78
+ let BigNumbers: boolean;
78
79
  let TruncatedList: boolean;
79
80
  let DelimitedList: boolean;
80
81
  let FullPageError: boolean;
82
+ let StringFormatter: boolean;
81
83
  let Coachmark: boolean;
82
84
  let CoachmarkBeacon: boolean;
83
85
  let CoachmarkButton: boolean;
@@ -74,9 +74,11 @@ var defaults = {
74
74
  EditTearsheetNarrow: false,
75
75
  EditFullPage: false,
76
76
  EditUpdateCards: false,
77
+ BigNumbers: false,
77
78
  TruncatedList: false,
78
79
  DelimitedList: false,
79
80
  FullPageError: false,
81
+ StringFormatter: false,
80
82
  /* new component flags here - comment used by generate CLI */
81
83
 
82
84
  // Novice to pro components not yet reviewed and released:
package/es/index.js CHANGED
@@ -99,6 +99,7 @@ export { InlineTip } from './components/InlineTip/InlineTip.js';
99
99
  export { InlineTipButton } from './components/InlineTip/InlineTipButton.js';
100
100
  export { InlineTipLink } from './components/InlineTip/InlineTipLink.js';
101
101
  export { NonLinearReading } from './components/NonLinearReading/NonLinearReading.js';
102
+ export { BigNumbers } from './components/BigNumbers/BigNumbers.js';
102
103
  export { TruncatedList } from './components/TruncatedList/TruncatedList.js';
103
104
  export { InterstitialScreen } from './components/InterstitialScreen/InterstitialScreen.js';
104
105
  export { InterstitialScreenView } from './components/InterstitialScreenView/InterstitialScreenView.js';
@@ -106,4 +107,5 @@ export { InterstitialScreenViewModule } from './components/InterstitialScreenVie
106
107
  export { DelimitedList } from './components/DelimitedList/DelimitedList.js';
107
108
  export { FullPageError } from './components/FullPageError/FullPageError.js';
108
109
  export { SearchBar } from './components/SearchBar/SearchBar.js';
110
+ export { StringFormatter } from './components/StringFormatter/StringFormatter.js';
109
111
  export { UserAvatar } from './components/UserAvatar/UserAvatar.js';
package/es/settings.d.ts CHANGED
@@ -61,9 +61,11 @@ export const pkg: {
61
61
  EditTearsheetNarrow: boolean;
62
62
  EditFullPage: boolean;
63
63
  EditUpdateCards: boolean;
64
+ BigNumbers: boolean;
64
65
  TruncatedList: boolean;
65
66
  DelimitedList: boolean;
66
67
  FullPageError: boolean;
68
+ StringFormatter: boolean;
67
69
  Coachmark: boolean;
68
70
  CoachmarkBeacon: boolean;
69
71
  CoachmarkButton: boolean;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * BigNumbers is used to display large values in a small area. The display of
3
+ * values can be the value itself, or grouped in a numerator / denominator fashion.
4
+ * Control over the total fraction decimals displayed as well as how the
5
+ * values/totals are displayed are done via a locale prop. Other optional props
6
+ * allow control over size, truncation, if the value is a percentage, the addition
7
+ * of a button as well as tool tip functionality.
8
+ * The default locale is English (`en-US`) if one is not provided or if the provided one is not supported.
9
+ */
10
+ export let BigNumbers: React.ForwardRefExoticComponent<React.RefAttributes<any>>;
11
+ import React from 'react';
@@ -0,0 +1,244 @@
1
+ /**
2
+ * Copyright IBM Corp. 2020, 2024
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ 'use strict';
9
+
10
+ Object.defineProperty(exports, '__esModule', { value: true });
11
+
12
+ var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js');
13
+ var React = require('react');
14
+ var index$1 = require('../../node_modules/prop-types/index.js');
15
+ var index = require('../../node_modules/classnames/index.js');
16
+ var devtools = require('../../global/js/utils/devtools.js');
17
+ var settings = require('../../settings.js');
18
+ var icons = require('@carbon/react/icons');
19
+ var react = require('@carbon/react');
20
+ var constants = require('./constants.js');
21
+ var TooltipTrigger = require('../TooltipTrigger/TooltipTrigger.js');
22
+
23
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
24
+
25
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
26
+
27
+ var _Information;
28
+ var _excluded = ["className", "forceShowTotal", "fractionDigits", "iconButton", "loading", "label", "locale", "percentage", "size", "tooltipDescription", "total", "trending", "truncate", "value"],
29
+ _excluded2 = ["className", "size"];
30
+
31
+ // The block part of our conventional BEM class names (blockClass__E--M).
32
+ var blockClass = "".concat(settings.pkg.prefix, "--big-numbers");
33
+ var skeletonBlockClass = "".concat(settings.pkg.prefix, "--big-numbers-skeleton");
34
+ var componentName = 'BigNumbers';
35
+
36
+ // NOTE: the component SCSS is not imported here: it is rolled up separately.
37
+
38
+ // Default values for props
39
+ var defaults = {
40
+ forceShowTotal: false,
41
+ fractionDigits: 1,
42
+ loading: false,
43
+ locale: constants.DefaultLocale,
44
+ percentage: false,
45
+ size: constants.BigNumbersSize.Default,
46
+ total: 0,
47
+ trending: false,
48
+ truncate: true,
49
+ value: null
50
+ };
51
+
52
+ /**
53
+ * BigNumbers is used to display large values in a small area. The display of
54
+ * values can be the value itself, or grouped in a numerator / denominator fashion.
55
+ * Control over the total fraction decimals displayed as well as how the
56
+ * values/totals are displayed are done via a locale prop. Other optional props
57
+ * allow control over size, truncation, if the value is a percentage, the addition
58
+ * of a button as well as tool tip functionality.
59
+ * The default locale is English (`en-US`) if one is not provided or if the provided one is not supported.
60
+ */
61
+ exports.BigNumbers = /*#__PURE__*/React__default["default"].forwardRef(function (_ref, ref) {
62
+ var _formatValue, _formatValue2;
63
+ var className = _ref.className,
64
+ _ref$forceShowTotal = _ref.forceShowTotal,
65
+ forceShowTotal = _ref$forceShowTotal === void 0 ? defaults.forceShowTotal : _ref$forceShowTotal,
66
+ _ref$fractionDigits = _ref.fractionDigits,
67
+ fractionDigits = _ref$fractionDigits === void 0 ? defaults.fractionDigits : _ref$fractionDigits,
68
+ iconButton = _ref.iconButton,
69
+ _ref$loading = _ref.loading,
70
+ loading = _ref$loading === void 0 ? defaults.loading : _ref$loading,
71
+ label = _ref.label,
72
+ _ref$locale = _ref.locale,
73
+ locale = _ref$locale === void 0 ? defaults.locale : _ref$locale,
74
+ _ref$percentage = _ref.percentage,
75
+ percentage = _ref$percentage === void 0 ? defaults.percentage : _ref$percentage,
76
+ _ref$size = _ref.size,
77
+ size = _ref$size === void 0 ? defaults.size : _ref$size,
78
+ tooltipDescription = _ref.tooltipDescription,
79
+ _ref$total = _ref.total,
80
+ total = _ref$total === void 0 ? defaults.total : _ref$total,
81
+ _ref$trending = _ref.trending,
82
+ trending = _ref$trending === void 0 ? defaults.trending : _ref$trending,
83
+ _ref$truncate = _ref.truncate,
84
+ truncate = _ref$truncate === void 0 ? defaults.truncate : _ref$truncate,
85
+ _ref$value = _ref.value,
86
+ value = _ref$value === void 0 ? defaults.value : _ref$value,
87
+ rest = _rollupPluginBabelHelpers.objectWithoutProperties(_ref, _excluded);
88
+ var BigNumbersClasses = index["default"](className, _rollupPluginBabelHelpers.defineProperty(_rollupPluginBabelHelpers.defineProperty({}, "".concat(blockClass, "--lg"), size === constants.BigNumbersSize.Large), "".concat(blockClass, "--xl"), size === constants.BigNumbersSize.XLarge));
89
+ var supportedLocale = constants.getSupportedLocale(locale);
90
+ var truncatedValue = (_formatValue = constants.formatValue(supportedLocale, value, fractionDigits, truncate)) !== null && _formatValue !== void 0 ? _formatValue : constants.Characters.Dash;
91
+ var truncatedTotal = (_formatValue2 = constants.formatValue(supportedLocale, total, fractionDigits, truncate)) !== null && _formatValue2 !== void 0 ? _formatValue2 : 'Unknown';
92
+ var shouldDisplayDenominator = !percentage && total > value && truncatedValue !== truncatedTotal || forceShowTotal && total > 0;
93
+ if (loading) {
94
+ return /*#__PURE__*/React__default["default"].createElement(SkeletonBigNumbers, _rollupPluginBabelHelpers["extends"]({}, rest, {
95
+ ref: ref,
96
+ className: className,
97
+ size: size
98
+ }, devtools.getDevtoolsProps(componentName)));
99
+ }
100
+ return /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({}, rest, {
101
+ className: index["default"](blockClass, BigNumbersClasses, className),
102
+ ref: ref
103
+ }, devtools.getDevtoolsProps(componentName)), /*#__PURE__*/React__default["default"].createElement("span", {
104
+ className: "".concat(blockClass, "__row")
105
+ }, /*#__PURE__*/React__default["default"].createElement("h4", {
106
+ className: "".concat(blockClass, "__label")
107
+ }, label), tooltipDescription && /*#__PURE__*/React__default["default"].createElement(react.Tooltip, {
108
+ description: tooltipDescription,
109
+ align: "right",
110
+ className: "".concat(blockClass, "__info")
111
+ }, /*#__PURE__*/React__default["default"].createElement(TooltipTrigger.TooltipTrigger, {
112
+ className: "".concat(blockClass, "__tooltip-trigger")
113
+ }, _Information || (_Information = /*#__PURE__*/React__default["default"].createElement(icons.Information, {
114
+ size: 16
115
+ }))))), /*#__PURE__*/React__default["default"].createElement("span", {
116
+ className: "".concat(blockClass, "__row"),
117
+ role: "math"
118
+ }, trending && /*#__PURE__*/React__default["default"].createElement(icons.ArrowUp, {
119
+ className: "".concat(blockClass, "__trend"),
120
+ size: constants.getIconSize(size)
121
+ }), /*#__PURE__*/React__default["default"].createElement("span", {
122
+ className: "".concat(blockClass, "__value")
123
+ }, percentage ? /*#__PURE__*/React__default["default"].createElement("div", {
124
+ className: "".concat(blockClass, "__percentage")
125
+ }, truncatedValue, /*#__PURE__*/React__default["default"].createElement("span", {
126
+ className: "".concat(blockClass, "__percentage-mark")
127
+ }, "%")) : truncatedValue), shouldDisplayDenominator && /*#__PURE__*/React__default["default"].createElement("span", {
128
+ className: "".concat(blockClass, "__total")
129
+ }, /*#__PURE__*/React__default["default"].createElement("span", null, constants.Characters.Slash, truncatedTotal)), iconButton));
130
+ });
131
+
132
+ // Return a placeholder if not released and not enabled by feature flag
133
+ exports.BigNumbers = settings.pkg.checkComponentEnabled(exports.BigNumbers, componentName);
134
+
135
+ // The display name of the component, used by React. Note that displayName
136
+ // is used in preference to relying on function.name.
137
+ exports.BigNumbers.displayName = componentName;
138
+
139
+ // The types and DocGen commentary for the component props,
140
+ // in alphabetical order (for consistency).
141
+ // See https://www.npmjs.com/package/prop-types#usage.
142
+ exports.BigNumbers.propTypes = {
143
+ /**
144
+ * Optional class name.
145
+ * @type number
146
+ */
147
+ className: index$1["default"].string,
148
+ /**
149
+ * Display the `total` even when the `value` is equal to
150
+ * the `total` when `forceShowTotal` prop is true on the
151
+ * condition that the `total` is greater than 0.
152
+ * @type bool
153
+ */
154
+ forceShowTotal: index$1["default"].bool,
155
+ /**
156
+ * Optional value to control the maximum fraction digits
157
+ * used when truncating the value and total.
158
+ * @type number
159
+ */
160
+ fractionDigits: index$1["default"].number,
161
+ /** Displays an iconButton next to the BigNumbers value
162
+ * @type node
163
+ */
164
+ iconButton: index$1["default"].node,
165
+ /**
166
+ * Text label for BigNumbers.
167
+ * @type string
168
+ */
169
+ label: index$1["default"].string.isRequired,
170
+ /** Specify if the BigNumbers is in a loading state
171
+ * @type bool
172
+ */
173
+ loading: index$1["default"].bool,
174
+ /**
175
+ * Locale value to determine approach to formatting numbers.
176
+ * @type string
177
+ */
178
+ locale: index$1["default"].string,
179
+ /**
180
+ * Format number to percentage when `percentage` prop is true.
181
+ * @type bool
182
+ */
183
+ percentage: index$1["default"].bool,
184
+ /** The size of the BigNumbers.
185
+ * @type string
186
+ */
187
+ size: index$1["default"].oneOf(Object.values(constants.BigNumbersSize)),
188
+ /** Label applied to a Tooltip - marked with the Information icon.
189
+ * @type string
190
+ */
191
+ tooltipDescription: index$1["default"].string,
192
+ /**
193
+ * Total value that the main BigNumbers value is a subset of.
194
+ * @type number
195
+ */
196
+ total: index$1["default"].number,
197
+ /** Display trending icon.
198
+ * @type boolean
199
+ */
200
+ trending: index$1["default"].bool,
201
+ /** Specify whether or not the values should be truncated.
202
+ * @type boolean
203
+ */
204
+ truncate: index$1["default"].bool,
205
+ /**
206
+ * The main BigNumbers value to display
207
+ * @type number
208
+ */
209
+ value: index$1["default"].number
210
+ };
211
+
212
+ /**
213
+ * SkeletonBigNumbers is used to display a skeleton version while
214
+ * content is loading (handled by the BigNumbers prop `loading').
215
+ *
216
+ * Note: This component is only used within BigNumbers.
217
+ */
218
+ var SkeletonBigNumbers = /*#__PURE__*/React__default["default"].forwardRef(function (_ref2, ref) {
219
+ var className = _ref2.className,
220
+ size = _ref2.size,
221
+ rest = _rollupPluginBabelHelpers.objectWithoutProperties(_ref2, _excluded2);
222
+ var BigNumbersSkeletonClasses = index["default"](className, _rollupPluginBabelHelpers.defineProperty(_rollupPluginBabelHelpers.defineProperty({}, "".concat(skeletonBlockClass, "--lg"), size === constants.BigNumbersSize.Large), "".concat(skeletonBlockClass, "--xl"), size === constants.BigNumbersSize.XLarge));
223
+ return /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({}, rest, {
224
+ className: index["default"](className, skeletonBlockClass, BigNumbersSkeletonClasses),
225
+ ref: ref
226
+ }, devtools.getDevtoolsProps(componentName)), /*#__PURE__*/React__default["default"].createElement(react.SkeletonText, {
227
+ className: "".concat(skeletonBlockClass, "__label")
228
+ }), /*#__PURE__*/React__default["default"].createElement(react.SkeletonText, {
229
+ heading: true,
230
+ className: "".concat(skeletonBlockClass, "__value"),
231
+ width: "80%"
232
+ }));
233
+ });
234
+ SkeletonBigNumbers.propTypes = {
235
+ /**
236
+ * Optional class name.
237
+ * @type number
238
+ */
239
+ className: index$1["default"].string,
240
+ /** The size of the BigNumbers.
241
+ * @type string
242
+ */
243
+ size: index$1["default"].oneOf(Object.values(constants.BigNumbersSize))
244
+ };
@@ -0,0 +1,13 @@
1
+ export namespace BigNumbersSize {
2
+ let Default: string;
3
+ let Large: string;
4
+ let XLarge: string;
5
+ }
6
+ export namespace Characters {
7
+ let Dash: string;
8
+ let Slash: string;
9
+ }
10
+ export const DefaultLocale: "en-US";
11
+ export function formatValue(locale: string, value: number, fractionDigits: number, truncate: boolean): string | null;
12
+ export function getIconSize(size: string): 16 | 20 | 24;
13
+ export function getSupportedLocale(locale: string): string;
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Copyright IBM Corp. 2020, 2024
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ 'use strict';
9
+
10
+ Object.defineProperty(exports, '__esModule', { value: true });
11
+
12
+ /* **************************** | CONSTANTS | ***************************** */
13
+
14
+ var BigNumbersSize = {
15
+ Default: 'default',
16
+ Large: 'lg',
17
+ XLarge: 'xl'
18
+ };
19
+ var Characters = {
20
+ Dash: '–',
21
+ Slash: '/'
22
+ };
23
+ var DefaultLocale = 'en-US';
24
+
25
+ /* ************************ | UTILITY FUNCTIONS | ************************* */
26
+
27
+ /**
28
+ * Ensure that the value is formatted correctly based on whether it should be truncated or not.
29
+ * @param {string} locale Locale value to be used in formatting numbers.
30
+ * @param {number} value The value to format.
31
+ * @param {number} fractionDigits How many significant figures should be displayed.
32
+ * @param {boolean} truncate Whether or not the value should be truncated.
33
+ * @returns {string | null} The formatted value.
34
+ */
35
+ var formatValue = function formatValue(locale, value, fractionDigits, truncate) {
36
+ if (value === null || value === undefined || typeof value !== 'number') {
37
+ return null;
38
+ }
39
+ return truncate ? Intl.NumberFormat(locale, {
40
+ notation: 'compact',
41
+ minimumFractionDigits: 0,
42
+ maximumFractionDigits: Math.round(fractionDigits)
43
+ }).format(value) : Intl.NumberFormat(locale).format(value);
44
+ };
45
+
46
+ /**
47
+ * Function which takes a size and returns a numeric value for sizing icons
48
+ * @param {string} size Size of desired icon. Expected values are 'default', 'lg', or 'xl'.
49
+ */
50
+ var getIconSize = function getIconSize(size) {
51
+ switch (size) {
52
+ case BigNumbersSize.Large:
53
+ return 20;
54
+ case BigNumbersSize.XLarge:
55
+ return 24;
56
+ default:
57
+ return 16;
58
+ }
59
+ };
60
+
61
+ /**
62
+ * Function which takes a locale and returns a supported locale or the default
63
+ * @param {string} locale Desired locale for number formatting.
64
+ *
65
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#locales
66
+ */
67
+ var getSupportedLocale = function getSupportedLocale(locale) {
68
+ return Intl.NumberFormat.supportedLocalesOf(locale).length > 0 ? locale : DefaultLocale;
69
+ };
70
+
71
+ exports.BigNumbersSize = BigNumbersSize;
72
+ exports.Characters = Characters;
73
+ exports.DefaultLocale = DefaultLocale;
74
+ exports.formatValue = formatValue;
75
+ exports.getIconSize = getIconSize;
76
+ exports.getSupportedLocale = getSupportedLocale;
@@ -0,0 +1 @@
1
+ export { BigNumbers } from "./BigNumbers";
@@ -24,6 +24,7 @@ var checkActiveHeaderCell = require('./utils/checkActiveHeaderCell.js');
24
24
  var checkSelectedHeaderCell = require('./utils/checkSelectedHeaderCell.js');
25
25
  var handleHeaderCellSelection = require('./utils/handleHeaderCellSelection.js');
26
26
  var getSpreadsheetWidth = require('./utils/getSpreadsheetWidth.js');
27
+ var checkForHoldingKey = require('./utils/checkForHoldingKey.js');
27
28
  var usePreviousValue = require('../../global/js/hooks/usePreviousValue.js');
28
29
  var useSpreadsheetMouseUp = require('./hooks/useSpreadsheetMouseUp.js');
29
30
 
@@ -212,8 +213,8 @@ var DataSpreadsheetBody = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
212
213
  var closestBodyCell = event.target.closest(".".concat(blockClass, "__body--td"));
213
214
  var isValidSelectionAreaStart = closestBodyCell.classList.contains("".concat(blockClass, "__body--td"));
214
215
  setValidStartingPoint(isValidSelectionAreaStart);
215
- var isHoldingCommandKey = event.metaKey || event.ctrlKey;
216
- var isHoldingShiftKey = event.shiftKey;
216
+ var isHoldingCommandKey = checkForHoldingKey.checkForHoldingKey(event, 'cmd');
217
+ var isHoldingShiftKey = checkForHoldingKey.checkForHoldingKey(event, 'shiftKey');
217
218
  setContainerHasFocus(true);
218
219
  var activeCoordinates = {
219
220
  row: cell.row.index,
@@ -315,7 +316,7 @@ var DataSpreadsheetBody = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
315
316
  }, [clickAndHoldActive, currentMatcher, setSelectionAreas]);
316
317
  var handleRowHeaderClick = React.useCallback(function (index) {
317
318
  return function (event) {
318
- var isHoldingCommandKey = event.metaKey || event.ctrlKey;
319
+ var isHoldingCommandKey = checkForHoldingKey.checkForHoldingKey(event, 'cmd');
319
320
  handleHeaderCellSelection.handleHeaderCellSelection({
320
321
  type: 'row',
321
322
  activeCellCoordinates: activeCellCoordinates,
@@ -20,6 +20,7 @@ var checkSelectedHeaderCell = require('./utils/checkSelectedHeaderCell.js');
20
20
  var handleHeaderCellSelection = require('./utils/handleHeaderCellSelection.js');
21
21
  var selectAllCells = require('./utils/selectAllCells.js');
22
22
  var getSpreadsheetWidth = require('./utils/getSpreadsheetWidth.js');
23
+ var checkForHoldingKey = require('./utils/checkForHoldingKey.js');
23
24
  var usePreviousValue = require('../../global/js/hooks/usePreviousValue.js');
24
25
  var useSpreadsheetMouseMove = require('./hooks/useSpreadsheetMouseMove.js');
25
26
 
@@ -70,8 +71,8 @@ var DataSpreadsheetHeader = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
70
71
  }, [cellSize, ref, scrollBarSize, previousState === null || previousState === void 0 ? void 0 : previousState.cellSize]);
71
72
  var handleColumnHeaderClick = function handleColumnHeaderClick(index) {
72
73
  return function (event) {
73
- var isHoldingCommandKey = event.metaKey || event.ctrlKey;
74
- var isHoldingShiftKey = event.shiftKey;
74
+ var isHoldingCommandKey = checkForHoldingKey.checkForHoldingKey(event, 'cmd');
75
+ var isHoldingShiftKey = checkForHoldingKey.checkForHoldingKey(event, 'shiftKey');
75
76
  handleHeaderCellSelection.handleHeaderCellSelection({
76
77
  type: 'column',
77
78
  activeCellCoordinates: activeCellCoordinates,
@@ -0,0 +1 @@
1
+ export function checkForHoldingKey(event: any, key: any): any;