@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.
- package/css/index-full-carbon.css +517 -56
- package/css/index-full-carbon.css.map +1 -1
- package/css/index-full-carbon.min.css +1 -1
- package/css/index-full-carbon.min.css.map +1 -1
- package/css/index-without-carbon-released-only.css +32 -14
- package/css/index-without-carbon-released-only.css.map +1 -1
- package/css/index-without-carbon-released-only.min.css +1 -1
- package/css/index-without-carbon-released-only.min.css.map +1 -1
- package/css/index-without-carbon.css +517 -56
- package/css/index-without-carbon.css.map +1 -1
- package/css/index-without-carbon.min.css +1 -1
- package/css/index-without-carbon.min.css.map +1 -1
- package/css/index.css +488 -48
- package/css/index.css.map +1 -1
- package/css/index.min.css +1 -1
- package/css/index.min.css.map +1 -1
- package/es/components/BigNumbers/BigNumbers.d.ts +11 -0
- package/es/components/BigNumbers/BigNumbers.js +238 -0
- package/es/components/BigNumbers/constants.d.ts +13 -0
- package/es/components/BigNumbers/constants.js +67 -0
- package/es/components/BigNumbers/index.d.ts +1 -0
- package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +4 -3
- package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +3 -2
- package/es/components/DataSpreadsheet/utils/checkForHoldingKey.d.ts +1 -0
- package/es/components/DataSpreadsheet/utils/checkForHoldingKey.js +17 -0
- package/es/components/Datagrid/Datagrid/Datagrid.js +9 -2
- package/es/components/Datagrid/Datagrid/DatagridContent.d.ts +3 -1
- package/es/components/Datagrid/Datagrid/DatagridContent.js +6 -2
- package/es/components/Datagrid/Datagrid/DatagridHeaderRow.js +8 -4
- package/es/components/Datagrid/Datagrid/DatagridToolbar.d.ts +10 -1
- package/es/components/Datagrid/Datagrid/DatagridToolbar.js +21 -4
- package/es/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +32 -9
- package/es/components/Datagrid/Datagrid/addons/Filtering/constants.d.ts +3 -1
- package/es/components/Datagrid/Datagrid/addons/Filtering/constants.js +4 -1
- package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +35 -3
- package/es/components/Datagrid/Datagrid/addons/stateReducer.js +1 -1
- package/es/components/Datagrid/useSelectAllToggle.js +5 -3
- package/es/components/SidePanel/SidePanel.js +13 -6
- package/es/components/SidePanel/motion/variants.d.ts +39 -12
- package/es/components/SidePanel/motion/variants.js +42 -11
- package/es/components/StringFormatter/StringFormatter.d.ts +6 -0
- package/es/components/StringFormatter/StringFormatter.js +79 -0
- package/es/components/StringFormatter/index.d.ts +1 -0
- package/es/components/StringFormatter/utils/enums.d.ts +14 -0
- package/es/components/StringFormatter/utils/enums.js +23 -0
- package/es/components/Tearsheet/TearsheetShell.js +10 -4
- package/es/components/UserAvatar/UserAvatar.js +58 -42
- package/es/components/index.d.ts +2 -0
- package/es/global/js/hooks/index.d.ts +1 -0
- package/es/global/js/hooks/useIsomorphicEffect.d.ts +2 -0
- package/es/global/js/hooks/useIsomorphicEffect.js +14 -0
- package/es/global/js/package-settings.d.ts +2 -0
- package/es/global/js/package-settings.js +2 -0
- package/es/index.js +2 -0
- package/es/settings.d.ts +2 -0
- package/lib/components/BigNumbers/BigNumbers.d.ts +11 -0
- package/lib/components/BigNumbers/BigNumbers.js +244 -0
- package/lib/components/BigNumbers/constants.d.ts +13 -0
- package/lib/components/BigNumbers/constants.js +76 -0
- package/lib/components/BigNumbers/index.d.ts +1 -0
- package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +4 -3
- package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +3 -2
- package/lib/components/DataSpreadsheet/utils/checkForHoldingKey.d.ts +1 -0
- package/lib/components/DataSpreadsheet/utils/checkForHoldingKey.js +21 -0
- package/lib/components/Datagrid/Datagrid/Datagrid.js +9 -2
- package/lib/components/Datagrid/Datagrid/DatagridContent.d.ts +3 -1
- package/lib/components/Datagrid/Datagrid/DatagridContent.js +6 -2
- package/lib/components/Datagrid/Datagrid/DatagridHeaderRow.js +8 -4
- package/lib/components/Datagrid/Datagrid/DatagridToolbar.d.ts +10 -1
- package/lib/components/Datagrid/Datagrid/DatagridToolbar.js +20 -3
- package/lib/components/Datagrid/Datagrid/addons/Filtering/FilterProvider.js +30 -7
- package/lib/components/Datagrid/Datagrid/addons/Filtering/constants.d.ts +3 -1
- package/lib/components/Datagrid/Datagrid/addons/Filtering/constants.js +4 -0
- package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +33 -1
- package/lib/components/Datagrid/Datagrid/addons/stateReducer.js +1 -1
- package/lib/components/Datagrid/useSelectAllToggle.js +4 -2
- package/lib/components/SidePanel/SidePanel.js +11 -4
- package/lib/components/SidePanel/motion/variants.d.ts +39 -12
- package/lib/components/SidePanel/motion/variants.js +42 -10
- package/lib/components/StringFormatter/StringFormatter.d.ts +6 -0
- package/lib/components/StringFormatter/StringFormatter.js +85 -0
- package/lib/components/StringFormatter/index.d.ts +1 -0
- package/lib/components/StringFormatter/utils/enums.d.ts +14 -0
- package/lib/components/StringFormatter/utils/enums.js +27 -0
- package/lib/components/Tearsheet/TearsheetShell.js +10 -4
- package/lib/components/UserAvatar/UserAvatar.js +58 -42
- package/lib/components/index.d.ts +2 -0
- package/lib/global/js/hooks/index.d.ts +1 -0
- package/lib/global/js/hooks/useIsomorphicEffect.d.ts +2 -0
- package/lib/global/js/hooks/useIsomorphicEffect.js +18 -0
- package/lib/global/js/package-settings.d.ts +2 -0
- package/lib/global/js/package-settings.js +2 -0
- package/lib/index.js +10 -0
- package/lib/settings.d.ts +2 -0
- package/package.json +7 -7
- package/scss/components/BigNumbers/_big-numbers.scss +151 -0
- package/scss/components/BigNumbers/_carbon-imports.scss +11 -0
- package/scss/components/BigNumbers/_index-with-carbon.scss +9 -0
- package/scss/components/BigNumbers/_index.scss +8 -0
- package/scss/components/FullPageError/_full-page-error.scss +2 -2
- package/scss/components/SidePanel/_side-panel.scss +1 -1
- package/scss/components/StringFormatter/_carbon-imports.scss +10 -0
- package/scss/components/StringFormatter/_index-with-carbon.scss +9 -0
- package/scss/components/StringFormatter/_index.scss +8 -0
- package/scss/components/StringFormatter/_string-formatter.scss +97 -0
- package/scss/components/Tearsheet/_tearsheet.scss +34 -2
- package/scss/components/UserAvatar/_user-avatar.scss +40 -0
- package/scss/components/_index-with-carbon.scss +2 -0
- 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
|
-
|
49
|
-
|
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
|
-
|
61
|
-
|
62
|
-
_ref$
|
63
|
-
|
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
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
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(
|
81
|
-
|
82
|
-
|
83
|
-
}
|
84
|
-
|
85
|
-
|
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
|
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)),
|
108
|
+
}, getDevtoolsProps(componentName)), getItem());
|
104
109
|
};
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
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
|
*/
|
package/es/components/index.d.ts
CHANGED
@@ -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,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
|
216
|
-
var isHoldingShiftKey = event
|
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
|
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
|
74
|
-
var isHoldingShiftKey = event
|
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;
|