@canonical/react-components 2.14.0 → 2.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ScrollableContainer/ScrollableContainer.d.ts +27 -0
- package/dist/components/ScrollableContainer/ScrollableContainer.js +51 -0
- package/dist/components/ScrollableContainer/ScrollableContainer.scss +7 -0
- package/dist/components/ScrollableContainer/ScrollableContainer.stories.d.ts +6 -0
- package/dist/components/ScrollableContainer/ScrollableContainer.stories.js +36 -0
- package/dist/components/ScrollableContainer/ScrollableContainer.test.d.ts +1 -0
- package/dist/components/ScrollableContainer/index.d.ts +2 -0
- package/dist/components/ScrollableContainer/index.js +13 -0
- package/dist/components/ScrollableTable/ScrollableTable.d.ts +27 -0
- package/dist/components/ScrollableTable/ScrollableTable.js +44 -0
- package/dist/components/ScrollableTable/ScrollableTable.scss +58 -0
- package/dist/components/ScrollableTable/ScrollableTable.stories.d.ts +6 -0
- package/dist/components/ScrollableTable/ScrollableTable.stories.js +69 -0
- package/dist/components/ScrollableTable/ScrollableTable.test.d.ts +1 -0
- package/dist/components/ScrollableTable/index.d.ts +2 -0
- package/dist/components/ScrollableTable/index.js +13 -0
- package/dist/components/SidePanel/SidePanel.js +1 -1
- package/dist/components/TablePagination/TablePagination.scss +6 -6
- package/dist/components/TablePagination/TablePagination.stories.d.ts +8 -0
- package/dist/components/TablePagination/TablePagination.stories.js +53 -1
- package/dist/components/TablePagination/TablePaginationControls/TablePaginationControls.js +7 -4
- package/dist/components/TablePagination/utils.d.ts +2 -1
- package/dist/components/TablePagination/utils.js +10 -3
- package/dist/esm/components/ScrollableContainer/ScrollableContainer.d.ts +27 -0
- package/dist/esm/components/ScrollableContainer/ScrollableContainer.js +43 -0
- package/dist/esm/components/ScrollableContainer/ScrollableContainer.scss +7 -0
- package/dist/esm/components/ScrollableContainer/ScrollableContainer.stories.d.ts +6 -0
- package/dist/esm/components/ScrollableContainer/ScrollableContainer.stories.js +29 -0
- package/dist/esm/components/ScrollableContainer/ScrollableContainer.test.d.ts +1 -0
- package/dist/esm/components/ScrollableContainer/index.d.ts +2 -0
- package/dist/esm/components/ScrollableContainer/index.js +1 -0
- package/dist/esm/components/ScrollableTable/ScrollableTable.d.ts +27 -0
- package/dist/esm/components/ScrollableTable/ScrollableTable.js +37 -0
- package/dist/esm/components/ScrollableTable/ScrollableTable.scss +58 -0
- package/dist/esm/components/ScrollableTable/ScrollableTable.stories.d.ts +6 -0
- package/dist/esm/components/ScrollableTable/ScrollableTable.stories.js +62 -0
- package/dist/esm/components/ScrollableTable/ScrollableTable.test.d.ts +1 -0
- package/dist/esm/components/ScrollableTable/index.d.ts +2 -0
- package/dist/esm/components/ScrollableTable/index.js +1 -0
- package/dist/esm/components/SidePanel/SidePanel.js +1 -1
- package/dist/esm/components/TablePagination/TablePagination.scss +6 -6
- package/dist/esm/components/TablePagination/TablePagination.stories.d.ts +8 -0
- package/dist/esm/components/TablePagination/TablePagination.stories.js +52 -0
- package/dist/esm/components/TablePagination/TablePaginationControls/TablePaginationControls.js +7 -4
- package/dist/esm/components/TablePagination/utils.d.ts +2 -1
- package/dist/esm/components/TablePagination/utils.js +10 -3
- package/dist/esm/hooks/useId.d.ts +1 -1
- package/dist/esm/hooks/useId.js +1 -1
- package/dist/esm/hooks/useListener.js +8 -7
- package/dist/esm/index.d.ts +5 -1
- package/dist/esm/index.js +3 -1
- package/dist/esm/utils.d.ts +4 -0
- package/dist/esm/utils.js +32 -1
- package/dist/hooks/useId.d.ts +1 -1
- package/dist/hooks/useId.js +1 -1
- package/dist/hooks/useListener.js +8 -7
- package/dist/index.d.ts +5 -1
- package/dist/index.js +37 -0
- package/dist/utils.d.ts +4 -0
- package/dist/utils.js +37 -2
- package/package.json +2 -2
package/dist/hooks/useId.js
CHANGED
|
@@ -7,7 +7,7 @@ exports.useId = void 0;
|
|
|
7
7
|
var _react = require("react");
|
|
8
8
|
var _utils = require("../utils");
|
|
9
9
|
/**
|
|
10
|
-
* @deprecated Code component is deprecated. Use
|
|
10
|
+
* @deprecated Code component is deprecated. Use useId from React directly instead.
|
|
11
11
|
*/
|
|
12
12
|
const useId = () => {
|
|
13
13
|
const id = (0, _react.useId)();
|
|
@@ -45,13 +45,14 @@ const useListener = function (targetNode, callback, eventType) {
|
|
|
45
45
|
targetNode.addEventListener(eventType, eventListener.current, options);
|
|
46
46
|
isListening.current = true;
|
|
47
47
|
}
|
|
48
|
+
return () => {
|
|
49
|
+
// Unattach the listener if the component gets unmounted while
|
|
50
|
+
// listening.
|
|
51
|
+
if (targetNode && eventListener.current && isListening.current) {
|
|
52
|
+
targetNode.removeEventListener(eventType, eventListener.current, options);
|
|
53
|
+
isListening.current = false;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
48
56
|
}, [callback, eventType, options, previousCallback, previousEventType, previousOptions, previousShouldThrottle, previousTargetNode, shouldListen, shouldThrottle, targetNode, throttle]);
|
|
49
|
-
(0, _react.useEffect)(() => () => {
|
|
50
|
-
// Unattach the listener if the component gets unmounted while
|
|
51
|
-
// listening.
|
|
52
|
-
if (targetNode && isListening.current) {
|
|
53
|
-
targetNode.removeEventListener(eventType, eventListener.current, options);
|
|
54
|
-
}
|
|
55
|
-
}, [eventType, targetNode, options]);
|
|
56
57
|
};
|
|
57
58
|
exports.useListener = useListener;
|
package/dist/index.d.ts
CHANGED
|
@@ -44,6 +44,8 @@ export { default as Panel } from "./components/Panel";
|
|
|
44
44
|
export { default as PasswordToggle } from "./components/PasswordToggle";
|
|
45
45
|
export { default as RadioInput } from "./components/RadioInput";
|
|
46
46
|
export { default as Row } from "./components/Row";
|
|
47
|
+
export { default as ScrollableContainer } from "./components/ScrollableContainer";
|
|
48
|
+
export { default as ScrollableTable } from "./components/ScrollableTable";
|
|
47
49
|
export { default as SearchAndFilter } from "./components/SearchAndFilter";
|
|
48
50
|
export { default as SearchBox } from "./components/SearchBox";
|
|
49
51
|
export { default as Select } from "./components/Select";
|
|
@@ -116,6 +118,8 @@ export type { PaginationProps } from "./components/Pagination";
|
|
|
116
118
|
export type { PanelProps } from "./components/Panel";
|
|
117
119
|
export type { RadioInputProps } from "./components/RadioInput";
|
|
118
120
|
export type { RowProps } from "./components/Row";
|
|
121
|
+
export type { ScrollableTableProps } from "./components/ScrollableTable";
|
|
122
|
+
export type { ScrollableContainerProps } from "./components/ScrollableContainer";
|
|
119
123
|
export type { SearchAndFilterProps } from "./components/SearchAndFilter";
|
|
120
124
|
export type { SearchBoxProps } from "./components/SearchBox";
|
|
121
125
|
export type { SelectProps } from "./components/Select";
|
|
@@ -143,7 +147,7 @@ export type { TablePaginationProps } from "./components/TablePagination";
|
|
|
143
147
|
export type { CustomSelectProps, CustomSelectDropdownProps, CustomSelectOption, } from "./components/CustomSelect";
|
|
144
148
|
export { useOnClickOutside, useClickOutside, useId, useListener, useOnEscapePressed, usePagination, usePrevious, usePrefersReducedMotion, useThrottle, useWindowFitment, } from "./hooks";
|
|
145
149
|
export type { WindowFitment } from "./hooks";
|
|
146
|
-
export { isNavigationAnchor, isNavigationButton } from "./utils";
|
|
150
|
+
export { isNavigationAnchor, isNavigationButton, getElementAbsoluteHeight, getAbsoluteHeightBelowById, getParentsBottomSpacing, } from "./utils";
|
|
147
151
|
export type { ClassName, Headings, PropsWithSpread, SortDirection, SubComponentProps, TSFixMe, ValueOf, } from "./types";
|
|
148
152
|
export { Theme } from "./enums";
|
|
149
153
|
export type { UsePortalOptions } from "./external";
|
package/dist/index.js
CHANGED
|
@@ -63,6 +63,8 @@ var _exportNames = {
|
|
|
63
63
|
PasswordToggle: true,
|
|
64
64
|
RadioInput: true,
|
|
65
65
|
Row: true,
|
|
66
|
+
ScrollableContainer: true,
|
|
67
|
+
ScrollableTable: true,
|
|
66
68
|
SearchAndFilter: true,
|
|
67
69
|
SearchBox: true,
|
|
68
70
|
Select: true,
|
|
@@ -108,6 +110,9 @@ var _exportNames = {
|
|
|
108
110
|
useWindowFitment: true,
|
|
109
111
|
isNavigationAnchor: true,
|
|
110
112
|
isNavigationButton: true,
|
|
113
|
+
getElementAbsoluteHeight: true,
|
|
114
|
+
getAbsoluteHeightBelowById: true,
|
|
115
|
+
getParentsBottomSpacing: true,
|
|
111
116
|
Theme: true,
|
|
112
117
|
usePortal: true
|
|
113
118
|
};
|
|
@@ -417,6 +422,18 @@ Object.defineProperty(exports, "Row", {
|
|
|
417
422
|
return _Row.default;
|
|
418
423
|
}
|
|
419
424
|
});
|
|
425
|
+
Object.defineProperty(exports, "ScrollableContainer", {
|
|
426
|
+
enumerable: true,
|
|
427
|
+
get: function () {
|
|
428
|
+
return _ScrollableContainer.default;
|
|
429
|
+
}
|
|
430
|
+
});
|
|
431
|
+
Object.defineProperty(exports, "ScrollableTable", {
|
|
432
|
+
enumerable: true,
|
|
433
|
+
get: function () {
|
|
434
|
+
return _ScrollableTable.default;
|
|
435
|
+
}
|
|
436
|
+
});
|
|
420
437
|
Object.defineProperty(exports, "SearchAndFilter", {
|
|
421
438
|
enumerable: true,
|
|
422
439
|
get: function () {
|
|
@@ -627,6 +644,24 @@ Object.defineProperty(exports, "failure", {
|
|
|
627
644
|
return _NotificationProvider.failure;
|
|
628
645
|
}
|
|
629
646
|
});
|
|
647
|
+
Object.defineProperty(exports, "getAbsoluteHeightBelowById", {
|
|
648
|
+
enumerable: true,
|
|
649
|
+
get: function () {
|
|
650
|
+
return _utils.getAbsoluteHeightBelowById;
|
|
651
|
+
}
|
|
652
|
+
});
|
|
653
|
+
Object.defineProperty(exports, "getElementAbsoluteHeight", {
|
|
654
|
+
enumerable: true,
|
|
655
|
+
get: function () {
|
|
656
|
+
return _utils.getElementAbsoluteHeight;
|
|
657
|
+
}
|
|
658
|
+
});
|
|
659
|
+
Object.defineProperty(exports, "getParentsBottomSpacing", {
|
|
660
|
+
enumerable: true,
|
|
661
|
+
get: function () {
|
|
662
|
+
return _utils.getParentsBottomSpacing;
|
|
663
|
+
}
|
|
664
|
+
});
|
|
630
665
|
Object.defineProperty(exports, "info", {
|
|
631
666
|
enumerable: true,
|
|
632
667
|
get: function () {
|
|
@@ -804,6 +839,8 @@ var _Panel = _interopRequireDefault(require("./components/Panel"));
|
|
|
804
839
|
var _PasswordToggle = _interopRequireDefault(require("./components/PasswordToggle"));
|
|
805
840
|
var _RadioInput = _interopRequireDefault(require("./components/RadioInput"));
|
|
806
841
|
var _Row = _interopRequireDefault(require("./components/Row"));
|
|
842
|
+
var _ScrollableContainer = _interopRequireDefault(require("./components/ScrollableContainer"));
|
|
843
|
+
var _ScrollableTable = _interopRequireDefault(require("./components/ScrollableTable"));
|
|
807
844
|
var _SearchAndFilter = _interopRequireDefault(require("./components/SearchAndFilter"));
|
|
808
845
|
var _SearchBox = _interopRequireDefault(require("./components/SearchBox"));
|
|
809
846
|
var _Select = _interopRequireDefault(require("./components/Select"));
|
package/dist/utils.d.ts
CHANGED
|
@@ -25,3 +25,7 @@ export declare const isNavigationButton: (link: NavLink) => link is NavLinkButto
|
|
|
25
25
|
* A typeguard for whether an element is a ReactNode.
|
|
26
26
|
*/
|
|
27
27
|
export declare const isReactNode: (element: unknown) => element is ReactNode;
|
|
28
|
+
export declare const getElementAbsoluteHeight: (element: HTMLElement) => number;
|
|
29
|
+
export declare const getAbsoluteHeightBelowById: (belowId: string) => number;
|
|
30
|
+
export declare const getParentsBottomSpacing: (element: Element) => number;
|
|
31
|
+
export declare const toFloat: (value: string) => number;
|
package/dist/utils.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.isReactNode = exports.isNavigationButton = exports.isNavigationAnchor = exports.highlightSubString = exports.IS_DEV = void 0;
|
|
6
|
+
exports.toFloat = exports.isReactNode = exports.isNavigationButton = exports.isNavigationAnchor = exports.highlightSubString = exports.getParentsBottomSpacing = exports.getElementAbsoluteHeight = exports.getAbsoluteHeightBelowById = exports.IS_DEV = void 0;
|
|
7
7
|
var _react = require("react");
|
|
8
8
|
const IS_DEV = exports.IS_DEV = process.env.NODE_ENV === "development";
|
|
9
9
|
|
|
@@ -48,4 +48,39 @@ const isNavigationButton = link => !link.url;
|
|
|
48
48
|
*/
|
|
49
49
|
exports.isNavigationButton = isNavigationButton;
|
|
50
50
|
const isReactNode = element => /*#__PURE__*/(0, _react.isValidElement)(element);
|
|
51
|
-
exports.isReactNode = isReactNode;
|
|
51
|
+
exports.isReactNode = isReactNode;
|
|
52
|
+
const getElementAbsoluteHeight = element => {
|
|
53
|
+
if (!element) {
|
|
54
|
+
return 0;
|
|
55
|
+
}
|
|
56
|
+
const style = window.getComputedStyle(element);
|
|
57
|
+
const margin = toFloat(style.marginTop) + toFloat(style.marginBottom);
|
|
58
|
+
const padding = toFloat(style.paddingTop) + toFloat(style.paddingBottom);
|
|
59
|
+
return element.offsetHeight + margin + padding + 1;
|
|
60
|
+
};
|
|
61
|
+
exports.getElementAbsoluteHeight = getElementAbsoluteHeight;
|
|
62
|
+
const getAbsoluteHeightBelowById = belowId => {
|
|
63
|
+
const element = belowId ? document.getElementById(belowId) : undefined;
|
|
64
|
+
if (!element) {
|
|
65
|
+
return 0;
|
|
66
|
+
}
|
|
67
|
+
return getElementAbsoluteHeight(element);
|
|
68
|
+
};
|
|
69
|
+
exports.getAbsoluteHeightBelowById = getAbsoluteHeightBelowById;
|
|
70
|
+
const getParentsBottomSpacing = element => {
|
|
71
|
+
let sum = 0;
|
|
72
|
+
while (element.parentElement) {
|
|
73
|
+
element = element.parentElement;
|
|
74
|
+
const style = window.getComputedStyle(element);
|
|
75
|
+
const margin = toFloat(style.marginBottom);
|
|
76
|
+
const padding = toFloat(style.paddingBottom);
|
|
77
|
+
sum += margin + padding;
|
|
78
|
+
}
|
|
79
|
+
return sum;
|
|
80
|
+
};
|
|
81
|
+
exports.getParentsBottomSpacing = getParentsBottomSpacing;
|
|
82
|
+
const toFloat = value => {
|
|
83
|
+
const result = parseFloat(value);
|
|
84
|
+
return Number.isNaN(result) ? 0 : result;
|
|
85
|
+
};
|
|
86
|
+
exports.toFloat = toFloat;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@canonical/react-components",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.15.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"module": "dist/index.js",
|
|
6
6
|
"author": {
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
"tsc-alias": "1.8.10",
|
|
94
94
|
"typescript": "5.7.3",
|
|
95
95
|
"typescript-eslint": "8.24.1",
|
|
96
|
-
"vanilla-framework": "4.
|
|
96
|
+
"vanilla-framework": "4.29.0",
|
|
97
97
|
"wait-on": "8.0.2",
|
|
98
98
|
"webpack": "5.98.0"
|
|
99
99
|
},
|