@coreui/react 5.0.0-alpha.1 → 5.0.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/components/avatar/CAvatar.d.ts +1 -1
- package/dist/components/badge/CBadge.d.ts +1 -1
- package/dist/components/card/CCard.d.ts +1 -1
- package/dist/components/dropdown/CDropdown.d.ts +1 -0
- package/dist/components/dropdown/CDropdownToggle.d.ts +6 -0
- package/dist/index.es.js +45 -19
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +45 -19
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/package.json +1 -1
- package/src/components/avatar/CAvatar.tsx +1 -1
- package/src/components/badge/CBadge.tsx +1 -1
- package/src/components/button/CButton.tsx +1 -1
- package/src/components/button/__tests__/__snapshots__/CButton.spec.tsx.snap +0 -1
- package/src/components/card/CCard.tsx +1 -1
- package/src/components/carousel/__tests__/__snapshots__/CCarousel.spec.tsx.snap +9 -5
- package/src/components/dropdown/CDropdown.tsx +43 -1
- package/src/components/dropdown/CDropdownToggle.tsx +12 -5
- package/src/components/nav/__tests__/__snapshots__/CNav.spec.tsx.snap +5 -4
- package/src/components/navbar/__tests__/CNavbar.spec.tsx +1 -1
- package/src/components/navbar/__tests__/__snapshots__/CNavbar.spec.tsx.snap +2 -1
- package/src/components/progress/__tests__/__snapshots__/CProgress.spec.tsx.snap +10 -5
- package/src/components/progress/__tests__/__snapshots__/CProgressBar.spec.tsx.snap +0 -8
- package/src/components/widgets/CWidgetStatsA.tsx +1 -1
- package/src/components/widgets/CWidgetStatsB.tsx +2 -2
- package/src/components/widgets/CWidgetStatsC.tsx +4 -12
- package/src/components/widgets/CWidgetStatsD.tsx +1 -1
- package/src/components/widgets/CWidgetStatsE.tsx +1 -1
- package/src/components/widgets/CWidgetStatsF.tsx +1 -1
- package/src/components/widgets/__tests__/CWidgetStatsA.spec.tsx +1 -1
- package/src/components/widgets/__tests__/CWidgetStatsB.spec.tsx +1 -1
- package/src/components/widgets/__tests__/CWidgetStatsC.spec.tsx +1 -1
- package/src/components/widgets/__tests__/CWidgetStatsD.spec.tsx +1 -1
- package/src/components/widgets/__tests__/CWidgetStatsE.spec.tsx +1 -1
- package/src/components/widgets/__tests__/CWidgetStatsF.spec.tsx +1 -1
- package/src/components/widgets/__tests__/__snapshots__/CWidgetStatsA.spec.tsx.snap +1 -1
- package/src/components/widgets/__tests__/__snapshots__/CWidgetStatsB.spec.tsx.snap +12 -7
- package/src/components/widgets/__tests__/__snapshots__/CWidgetStatsC.spec.tsx.snap +14 -9
- package/src/components/widgets/__tests__/__snapshots__/CWidgetStatsD.spec.tsx.snap +2 -2
- package/src/components/widgets/__tests__/__snapshots__/CWidgetStatsE.spec.tsx.snap +1 -1
- package/src/components/widgets/__tests__/__snapshots__/CWidgetStatsF.spec.tsx.snap +2 -2
- package/src/types.ts +14 -7
package/README.md
CHANGED
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
|
|
47
47
|
Several quick start options are available:
|
|
48
48
|
|
|
49
|
-
- [Download the latest release](https://github.com/coreui/coreui-react/archive/v5.0.0-alpha.
|
|
49
|
+
- [Download the latest release](https://github.com/coreui/coreui-react/archive/v5.0.0-alpha.3.zip)
|
|
50
50
|
- Clone the repo: `git clone https://github.com/coreui/coreui-react.git`
|
|
51
51
|
- Install with [npm](https://www.npmjs.com/): `npm install @coreui/react`
|
|
52
52
|
- Install with [yarn](https://yarnpkg.com/): `yarn add @coreui/react`
|
|
@@ -34,7 +34,7 @@ export interface CAvatarProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
34
34
|
/**
|
|
35
35
|
* Sets the text color of the component to one of CoreUI’s themed colors.
|
|
36
36
|
*
|
|
37
|
-
* @type 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'dark' | 'light' | '
|
|
37
|
+
* @type 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'dark' | 'light' | 'primary-emphasis' | 'secondary-emphasis' | 'success-emphasis' | 'danger-emphasis' | 'warning-emphasis' | 'info-emphasis' | 'light-emphasis' | 'body' | 'body-emphasis' | 'body-secondary' | 'body-tertiary' | 'black' | 'black-50' | 'white' | 'white-50' | string
|
|
38
38
|
*/
|
|
39
39
|
textColor?: TextColors;
|
|
40
40
|
}
|
|
@@ -32,7 +32,7 @@ export interface CBadgeProps extends HTMLAttributes<HTMLDivElement | HTMLSpanEle
|
|
|
32
32
|
/**
|
|
33
33
|
* Sets the text color of the component to one of CoreUI’s themed colors.
|
|
34
34
|
*
|
|
35
|
-
* @type 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'dark' | 'light' | '
|
|
35
|
+
* @type 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'dark' | 'light' | 'primary-emphasis' | 'secondary-emphasis' | 'success-emphasis' | 'danger-emphasis' | 'warning-emphasis' | 'info-emphasis' | 'light-emphasis' | 'body' | 'body-emphasis' | 'body-secondary' | 'body-tertiary' | 'black' | 'black-50' | 'white' | 'white-50' | string
|
|
36
36
|
*/
|
|
37
37
|
textColor?: TextColors;
|
|
38
38
|
}
|
|
@@ -14,7 +14,7 @@ export interface CCardProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
14
14
|
/**
|
|
15
15
|
* Sets the text color context of the component to one of CoreUI’s themed colors.
|
|
16
16
|
*
|
|
17
|
-
* @type 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'dark' | 'light' | '
|
|
17
|
+
* @type 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'dark' | 'light' | 'primary-emphasis' | 'secondary-emphasis' | 'success-emphasis' | 'danger-emphasis' | 'warning-emphasis' | 'info-emphasis' | 'light-emphasis' | 'body' | 'body-emphasis' | 'body-secondary' | 'body-tertiary' | 'black' | 'black-50' | 'white' | 'white-50' | string
|
|
18
18
|
*/
|
|
19
19
|
textColor?: string;
|
|
20
20
|
}
|
|
@@ -91,6 +91,7 @@ interface ContextProps extends CDropdownProps {
|
|
|
91
91
|
setVisible: React.Dispatch<React.SetStateAction<boolean | undefined>>;
|
|
92
92
|
portal: boolean;
|
|
93
93
|
}
|
|
94
|
+
export declare const getNextActiveElement: (list: HTMLElement[], activeElement: HTMLElement, shouldGetNext: boolean, isCycleAllowed: boolean) => HTMLElement;
|
|
94
95
|
export declare const CDropdownContext: React.Context<ContextProps>;
|
|
95
96
|
export declare const CDropdown: React.ForwardRefExoticComponent<CDropdownProps & React.RefAttributes<HTMLDivElement | HTMLLIElement>>;
|
|
96
97
|
export {};
|
|
@@ -10,6 +10,12 @@ export interface CDropdownToggleProps extends Omit<CButtonProps, 'type'> {
|
|
|
10
10
|
* Create a custom toggler which accepts any content.
|
|
11
11
|
*/
|
|
12
12
|
custom?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* If a dropdown `variant` is set to `nav-item` then render the toggler as a link instead of a button.
|
|
15
|
+
*
|
|
16
|
+
* @since v5.0.0-alpha.3
|
|
17
|
+
*/
|
|
18
|
+
navLink?: boolean;
|
|
13
19
|
/**
|
|
14
20
|
* Similarly, create split button dropdowns with virtually the same markup as single button dropdowns, but with the addition of `.dropdown-toggle-split` className for proper spacing around the dropdown caret.
|
|
15
21
|
*/
|
package/dist/index.es.js
CHANGED
|
@@ -4797,7 +4797,7 @@ CBreadcrumbItem.displayName = 'CBreadcrumbItem';
|
|
|
4797
4797
|
var CButton = forwardRef(function (_a, ref) {
|
|
4798
4798
|
var _b;
|
|
4799
4799
|
var children = _a.children, className = _a.className, _c = _a.color, color = _c === void 0 ? 'primary' : _c, _d = _a.component, component = _d === void 0 ? 'button' : _d, shape = _a.shape, size = _a.size, _e = _a.type, type = _e === void 0 ? 'button' : _e, variant = _a.variant, rest = __rest(_a, ["children", "className", "color", "component", "shape", "size", "type", "variant"]);
|
|
4800
|
-
return (React.createElement(CLink, __assign({ component: rest.href ? 'a' : component, type: type, className: classNames('btn', variant ? "btn-".concat(variant, "-").concat(color) : "btn-".concat(color), (_b = {}, _b["btn-".concat(size)] = size, _b), shape, className) }, rest, { ref: ref }), children));
|
|
4800
|
+
return (React.createElement(CLink, __assign({ component: rest.href ? 'a' : component }, (!rest.href && { type: type }), { className: classNames('btn', variant ? "btn-".concat(variant, "-").concat(color) : "btn-".concat(color), (_b = {}, _b["btn-".concat(size)] = size, _b), shape, className) }, rest, { ref: ref }), children));
|
|
4801
4801
|
});
|
|
4802
4802
|
CButton.propTypes = {
|
|
4803
4803
|
children: PropTypes.node,
|
|
@@ -5218,6 +5218,18 @@ CConditionalPortal.propTypes = {
|
|
|
5218
5218
|
};
|
|
5219
5219
|
CConditionalPortal.displayName = 'CConditionalPortal';
|
|
5220
5220
|
|
|
5221
|
+
var getNextActiveElement = function (list, activeElement, shouldGetNext, isCycleAllowed) {
|
|
5222
|
+
var listLength = list.length;
|
|
5223
|
+
var index = list.indexOf(activeElement);
|
|
5224
|
+
if (index === -1) {
|
|
5225
|
+
return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];
|
|
5226
|
+
}
|
|
5227
|
+
index += shouldGetNext ? 1 : -1;
|
|
5228
|
+
if (isCycleAllowed) {
|
|
5229
|
+
index = (index + listLength) % listLength;
|
|
5230
|
+
}
|
|
5231
|
+
return list[Math.max(0, Math.min(index, listLength - 1))];
|
|
5232
|
+
};
|
|
5221
5233
|
var getPlacement = function (placement, direction, alignment, isRTL) {
|
|
5222
5234
|
var _placement = placement;
|
|
5223
5235
|
if (direction === 'dropup') {
|
|
@@ -5280,18 +5292,33 @@ var CDropdown = forwardRef(function (_a, ref) {
|
|
|
5280
5292
|
}, [visible]);
|
|
5281
5293
|
useEffect(function () {
|
|
5282
5294
|
if (_visible && dropdownToggleRef.current && dropdownMenuRef.current) {
|
|
5295
|
+
dropdownToggleRef.current.focus();
|
|
5283
5296
|
popper && initPopper(dropdownToggleRef.current, dropdownMenuRef.current, popperConfig);
|
|
5284
5297
|
window.addEventListener('mouseup', handleMouseUp);
|
|
5285
5298
|
window.addEventListener('keyup', handleKeyup);
|
|
5299
|
+
dropdownToggleRef.current.addEventListener('keydown', handleKeydown);
|
|
5300
|
+
dropdownMenuRef.current.addEventListener('keydown', handleKeydown);
|
|
5286
5301
|
onShow && onShow();
|
|
5287
5302
|
}
|
|
5288
5303
|
return function () {
|
|
5289
5304
|
popper && destroyPopper();
|
|
5290
5305
|
window.removeEventListener('mouseup', handleMouseUp);
|
|
5291
5306
|
window.removeEventListener('keyup', handleKeyup);
|
|
5307
|
+
dropdownToggleRef.current &&
|
|
5308
|
+
dropdownToggleRef.current.removeEventListener('keydown', handleKeydown);
|
|
5309
|
+
dropdownMenuRef.current &&
|
|
5310
|
+
dropdownMenuRef.current.removeEventListener('keydown', handleKeydown);
|
|
5292
5311
|
onHide && onHide();
|
|
5293
5312
|
};
|
|
5294
5313
|
}, [_visible]);
|
|
5314
|
+
var handleKeydown = function (event) {
|
|
5315
|
+
if (_visible && (event.key === 'ArrowDown' || event.key === 'ArrowUp')) {
|
|
5316
|
+
var target = event.target;
|
|
5317
|
+
event.preventDefault();
|
|
5318
|
+
var items = [].concat.apply([], Element.prototype.querySelectorAll.call(dropdownMenuRef.current, '.dropdown-item:not(.disabled):not(:disabled)'));
|
|
5319
|
+
getNextActiveElement(items, target, event.key === 'ArrowDown', true).focus();
|
|
5320
|
+
}
|
|
5321
|
+
};
|
|
5295
5322
|
var handleKeyup = function (event) {
|
|
5296
5323
|
if (autoClose === false) {
|
|
5297
5324
|
return;
|
|
@@ -5319,7 +5346,6 @@ var CDropdown = forwardRef(function (_a, ref) {
|
|
|
5319
5346
|
'dropup dropup-center': direction === 'dropup-center'
|
|
5320
5347
|
},
|
|
5321
5348
|
_b["".concat(direction)] = direction && direction !== 'center' && direction !== 'dropup-center',
|
|
5322
|
-
_b.show = _visible,
|
|
5323
5349
|
_b), className) }, rest, { ref: forkedRef }), children))));
|
|
5324
5350
|
});
|
|
5325
5351
|
var alignmentDirection = PropTypes.oneOf(['start', 'end']);
|
|
@@ -5431,8 +5457,8 @@ CDropdownMenu.propTypes = {
|
|
|
5431
5457
|
CDropdownMenu.displayName = 'CDropdownMenu';
|
|
5432
5458
|
|
|
5433
5459
|
var CDropdownToggle = function (_a) {
|
|
5434
|
-
var children = _a.children, _b = _a.caret, caret = _b === void 0 ? true : _b, custom = _a.custom, className = _a.className, split = _a.split,
|
|
5435
|
-
var
|
|
5460
|
+
var children = _a.children, _b = _a.caret, caret = _b === void 0 ? true : _b, custom = _a.custom, className = _a.className, _c = _a.navLink, navLink = _c === void 0 ? true : _c, split = _a.split, _d = _a.trigger, trigger = _d === void 0 ? 'click' : _d, rest = __rest(_a, ["children", "caret", "custom", "className", "navLink", "split", "trigger"]);
|
|
5461
|
+
var _e = useContext(CDropdownContext), dropdownToggleRef = _e.dropdownToggleRef, variant = _e.variant, visible = _e.visible, setVisible = _e.setVisible;
|
|
5436
5462
|
var triggers = __assign(__assign({}, ((trigger === 'click' || trigger.includes('click')) && {
|
|
5437
5463
|
onClick: function (event) {
|
|
5438
5464
|
event.preventDefault();
|
|
@@ -5443,19 +5469,19 @@ var CDropdownToggle = function (_a) {
|
|
|
5443
5469
|
onBlur: function () { return setVisible(false); },
|
|
5444
5470
|
}));
|
|
5445
5471
|
var togglerProps = __assign({ className: classNames({
|
|
5472
|
+
'nav-link': variant === 'nav-item' && navLink,
|
|
5446
5473
|
'dropdown-toggle': caret,
|
|
5447
5474
|
'dropdown-toggle-split': split,
|
|
5448
|
-
|
|
5475
|
+
show: visible,
|
|
5449
5476
|
}, className), 'aria-expanded': visible }, (!rest.disabled && __assign({}, triggers)));
|
|
5450
|
-
// We use any because Toggler can be `a` as well as `button`.
|
|
5451
5477
|
var Toggler = function () {
|
|
5452
5478
|
if (custom && React.isValidElement(children)) {
|
|
5453
5479
|
return (React.createElement(React.Fragment, null, React.cloneElement(children, __assign(__assign({ 'aria-expanded': visible }, (!rest.disabled && __assign({}, triggers))), { ref: dropdownToggleRef }))));
|
|
5454
5480
|
}
|
|
5455
|
-
if (variant === 'nav-item') {
|
|
5456
|
-
return (React.createElement("a", __assign({ href: "#" }, togglerProps, { ref: dropdownToggleRef }), children));
|
|
5481
|
+
if (variant === 'nav-item' && navLink) {
|
|
5482
|
+
return (React.createElement("a", __assign({ href: "#" }, togglerProps, { role: "button", ref: dropdownToggleRef }), children));
|
|
5457
5483
|
}
|
|
5458
|
-
return (React.createElement(CButton, __assign({
|
|
5484
|
+
return (React.createElement(CButton, __assign({}, togglerProps, { tabIndex: 0 }, rest, { ref: dropdownToggleRef }),
|
|
5459
5485
|
children,
|
|
5460
5486
|
split && React.createElement("span", { className: "visually-hidden" }, "Toggle Dropdown")));
|
|
5461
5487
|
};
|
|
@@ -7416,7 +7442,7 @@ CTooltip.displayName = 'CTooltip';
|
|
|
7416
7442
|
var CWidgetStatsA = forwardRef(function (_a, ref) {
|
|
7417
7443
|
var _b;
|
|
7418
7444
|
var action = _a.action, chart = _a.chart, className = _a.className, color = _a.color, title = _a.title, value = _a.value, rest = __rest(_a, ["action", "chart", "className", "color", "title", "value"]);
|
|
7419
|
-
return (React.createElement(CCard, __assign({ className: classNames((_b = {}, _b["bg-".concat(color)] = color, _b['text-
|
|
7445
|
+
return (React.createElement(CCard, __assign({ className: classNames((_b = {}, _b["bg-".concat(color)] = color, _b['text-white'] = color, _b), className) }, rest, { ref: ref }),
|
|
7420
7446
|
React.createElement(CCardBody, { className: "pb-0 d-flex justify-content-between align-items-start" },
|
|
7421
7447
|
React.createElement("div", null,
|
|
7422
7448
|
value && React.createElement("div", { className: "fs-4 fw-semibold" }, value),
|
|
@@ -7436,12 +7462,12 @@ CWidgetStatsA.displayName = 'CWidgetStatsA';
|
|
|
7436
7462
|
|
|
7437
7463
|
var CWidgetStatsB = forwardRef(function (_a, ref) {
|
|
7438
7464
|
var className = _a.className, color = _a.color, inverse = _a.inverse, progress = _a.progress, text = _a.text, title = _a.title, value = _a.value, rest = __rest(_a, ["className", "color", "inverse", "progress", "text", "title", "value"]);
|
|
7439
|
-
return (React.createElement(CCard, __assign({ className: className, color: color }, (inverse && { textColor: '
|
|
7465
|
+
return (React.createElement(CCard, __assign({ className: className, color: color }, (inverse && { textColor: 'white' }), rest, { ref: ref }),
|
|
7440
7466
|
React.createElement(CCardBody, null,
|
|
7441
7467
|
value && React.createElement("div", { className: "fs-4 fw-semibold" }, value),
|
|
7442
7468
|
title && React.createElement("div", null, title),
|
|
7443
7469
|
React.createElement(CProgress, __assign({ className: "my-2", height: 4 }, (inverse && { white: true }), progress)),
|
|
7444
|
-
text && (React.createElement("small", { className: inverse ? 'text-
|
|
7470
|
+
text && (React.createElement("small", { className: inverse ? 'text-white text-opacity-75' : 'text-body-secondary' }, text)))));
|
|
7445
7471
|
});
|
|
7446
7472
|
CWidgetStatsB.propTypes = {
|
|
7447
7473
|
className: PropTypes.string,
|
|
@@ -7456,11 +7482,11 @@ CWidgetStatsB.displayName = 'CWidgetCWidgetStatsB';
|
|
|
7456
7482
|
|
|
7457
7483
|
var CWidgetStatsC = forwardRef(function (_a, ref) {
|
|
7458
7484
|
var className = _a.className, color = _a.color, icon = _a.icon, inverse = _a.inverse, progress = _a.progress, title = _a.title, value = _a.value, rest = __rest(_a, ["className", "color", "icon", "inverse", "progress", "title", "value"]);
|
|
7459
|
-
return (React.createElement(CCard, __assign({ className: className, color: color }, (inverse && { textColor: '
|
|
7485
|
+
return (React.createElement(CCard, __assign({ className: className, color: color }, (inverse && { textColor: 'white' }), rest, { ref: ref }),
|
|
7460
7486
|
React.createElement(CCardBody, null,
|
|
7461
|
-
icon &&
|
|
7462
|
-
value &&
|
|
7463
|
-
title && (React.createElement("div", { className: inverse ? 'text-
|
|
7487
|
+
icon && React.createElement("div", { className: "text-end mb-4" }, icon),
|
|
7488
|
+
value && React.createElement("div", { className: "fs-4 fw-semibold" }, value),
|
|
7489
|
+
title && (React.createElement("div", { className: inverse ? 'text-white text-opacity-75' : 'text-body-secondary' }, title)),
|
|
7464
7490
|
React.createElement(CProgress, __assign({ className: "mt-3 mb-0", height: 4 }, (inverse && { white: true }), progress)))));
|
|
7465
7491
|
});
|
|
7466
7492
|
CWidgetStatsC.propTypes = {
|
|
@@ -7489,7 +7515,7 @@ var CWidgetStatsD = forwardRef(function (_a, ref) {
|
|
|
7489
7515
|
index % 2 !== 0 && React.createElement("div", { className: "vr" }),
|
|
7490
7516
|
React.createElement(CCol, null,
|
|
7491
7517
|
React.createElement("div", { className: "fs-5 fw-semibold" }, value.value),
|
|
7492
|
-
React.createElement("div", { className: "text-uppercase text-
|
|
7518
|
+
React.createElement("div", { className: "text-uppercase text-body-secondary small" }, value.title))));
|
|
7493
7519
|
}))));
|
|
7494
7520
|
});
|
|
7495
7521
|
CWidgetStatsD.propTypes = {
|
|
@@ -7505,7 +7531,7 @@ var CWidgetStatsE = forwardRef(function (_a, ref) {
|
|
|
7505
7531
|
var chart = _a.chart, className = _a.className, title = _a.title, value = _a.value, rest = __rest(_a, ["chart", "className", "title", "value"]);
|
|
7506
7532
|
return (React.createElement(CCard, __assign({ className: classNames(className) }, rest, { ref: ref }),
|
|
7507
7533
|
React.createElement(CCardBody, { className: "text-center" },
|
|
7508
|
-
title && (React.createElement("div", { className: "text-
|
|
7534
|
+
title && (React.createElement("div", { className: "text-body-secondary small text-uppercase fw-semibold" }, title)),
|
|
7509
7535
|
value && React.createElement("div", { className: "fs-6 fw-semibold py-3" }, value),
|
|
7510
7536
|
chart)));
|
|
7511
7537
|
});
|
|
@@ -7525,7 +7551,7 @@ var CWidgetStatsF = forwardRef(function (_a, ref) {
|
|
|
7525
7551
|
React.createElement("div", { className: "me-3 text-white bg-".concat(color, " ").concat(padding ? 'p-3' : 'p-4') }, icon),
|
|
7526
7552
|
React.createElement("div", null,
|
|
7527
7553
|
React.createElement("div", { className: "fs-6 fw-semibold text-".concat(color) }, value),
|
|
7528
|
-
React.createElement("div", { className: "text-
|
|
7554
|
+
React.createElement("div", { className: "text-body-secondary text-uppercase fw-semibold small" }, title))),
|
|
7529
7555
|
footer && React.createElement(CCardFooter, null, footer)));
|
|
7530
7556
|
});
|
|
7531
7557
|
CWidgetStatsF.propTypes = {
|