@telus-uds/components-web 1.10.0 → 1.12.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/CHANGELOG.md +47 -2
- package/lib/Breadcrumbs/Item/Item.js +31 -6
- package/lib/Callout/Callout.js +24 -3
- package/lib/DatePicker/CalendarContainer.js +60 -71
- package/lib/DatePicker/DatePicker.js +66 -22
- package/lib/Disclaimer/Disclaimer.js +72 -0
- package/lib/Disclaimer/index.js +15 -0
- package/lib/Footnote/Footnote.js +3 -4
- package/lib/Footnote/FootnoteLink.js +11 -13
- package/lib/List/List.js +11 -0
- package/lib/List/ListItem.js +48 -0
- package/lib/List/index.js +16 -0
- package/lib/NavigationBar/NavigationBar.js +231 -0
- package/lib/NavigationBar/NavigationItem.js +111 -0
- package/lib/NavigationBar/NavigationSubMenu.js +179 -0
- package/lib/NavigationBar/collapseItems.js +51 -0
- package/lib/NavigationBar/index.js +13 -0
- package/lib/PriceLockup/PriceLockup.js +60 -23
- package/lib/PriceLockup/tokens.js +49 -116
- package/lib/Progress/ProgressBar.js +100 -0
- package/lib/Progress/index.js +16 -0
- package/lib/Ribbon/Ribbon.js +53 -32
- package/lib/SkeletonProvider/SkeletonImage.js +55 -0
- package/lib/SkeletonProvider/SkeletonProvider.js +84 -0
- package/lib/SkeletonProvider/SkeletonTypography.js +54 -0
- package/lib/SkeletonProvider/index.js +13 -0
- package/lib/Spinner/Spinner.js +18 -14
- package/lib/Table/Cell.js +15 -1
- package/lib/Table/Table.js +14 -5
- package/lib/Toast/Toast.js +1 -1
- package/lib/VideoPicker/VideoPicker.js +177 -0
- package/lib/VideoPicker/VideoPickerPlayer.js +54 -0
- package/lib/VideoPicker/VideoPickerThumbnail.js +201 -0
- package/lib/VideoPicker/VideoSlider.js +100 -0
- package/lib/VideoPicker/index.js +13 -0
- package/lib/VideoPicker/videoPropType.js +25 -0
- package/lib/index.js +55 -1
- package/lib-module/Breadcrumbs/Item/Item.js +32 -7
- package/lib-module/Callout/Callout.js +24 -3
- package/lib-module/DatePicker/CalendarContainer.js +61 -72
- package/lib-module/DatePicker/DatePicker.js +67 -23
- package/lib-module/Disclaimer/Disclaimer.js +54 -0
- package/lib-module/Disclaimer/index.js +1 -0
- package/lib-module/Footnote/Footnote.js +3 -3
- package/lib-module/Footnote/FootnoteLink.js +12 -14
- package/lib-module/List/List.js +2 -0
- package/lib-module/List/ListItem.js +31 -0
- package/lib-module/List/index.js +4 -0
- package/lib-module/NavigationBar/NavigationBar.js +207 -0
- package/lib-module/NavigationBar/NavigationItem.js +87 -0
- package/lib-module/NavigationBar/NavigationSubMenu.js +161 -0
- package/lib-module/NavigationBar/collapseItems.js +43 -0
- package/lib-module/NavigationBar/index.js +2 -0
- package/lib-module/PriceLockup/PriceLockup.js +62 -25
- package/lib-module/PriceLockup/tokens.js +54 -119
- package/lib-module/Progress/ProgressBar.js +83 -0
- package/lib-module/Progress/index.js +4 -0
- package/lib-module/Ribbon/Ribbon.js +53 -32
- package/lib-module/SkeletonProvider/SkeletonImage.js +42 -0
- package/lib-module/SkeletonProvider/SkeletonProvider.js +65 -0
- package/lib-module/SkeletonProvider/SkeletonTypography.js +41 -0
- package/lib-module/SkeletonProvider/index.js +2 -0
- package/lib-module/Spinner/Spinner.js +17 -14
- package/lib-module/Table/Cell.js +15 -1
- package/lib-module/Table/Table.js +14 -5
- package/lib-module/Toast/Toast.js +1 -1
- package/lib-module/VideoPicker/VideoPicker.js +151 -0
- package/lib-module/VideoPicker/VideoPickerPlayer.js +41 -0
- package/lib-module/VideoPicker/VideoPickerThumbnail.js +180 -0
- package/lib-module/VideoPicker/VideoSlider.js +83 -0
- package/lib-module/VideoPicker/index.js +2 -0
- package/lib-module/VideoPicker/videoPropType.js +9 -0
- package/lib-module/index.js +6 -0
- package/package.json +3 -3
- package/src/Breadcrumbs/Item/Item.jsx +18 -4
- package/src/Callout/Callout.jsx +27 -3
- package/src/DatePicker/CalendarContainer.jsx +61 -71
- package/src/DatePicker/DatePicker.jsx +47 -19
- package/src/Disclaimer/Disclaimer.jsx +39 -0
- package/src/Disclaimer/index.js +1 -0
- package/src/Footnote/Footnote.jsx +3 -3
- package/src/Footnote/FootnoteLink.jsx +28 -18
- package/src/List/List.jsx +3 -0
- package/src/List/ListItem.jsx +21 -0
- package/src/List/index.js +6 -0
- package/src/NavigationBar/NavigationBar.jsx +217 -0
- package/src/NavigationBar/NavigationItem.jsx +83 -0
- package/src/NavigationBar/NavigationSubMenu.jsx +121 -0
- package/src/NavigationBar/collapseItems.js +29 -0
- package/src/NavigationBar/index.js +3 -0
- package/src/PriceLockup/PriceLockup.jsx +58 -26
- package/src/PriceLockup/tokens.js +34 -54
- package/src/Progress/ProgressBar.jsx +67 -0
- package/src/Progress/index.js +6 -0
- package/src/Ribbon/Ribbon.jsx +21 -9
- package/src/SkeletonProvider/SkeletonImage.jsx +33 -0
- package/src/SkeletonProvider/SkeletonProvider.jsx +62 -0
- package/src/SkeletonProvider/SkeletonTypography.jsx +31 -0
- package/src/SkeletonProvider/index.js +3 -0
- package/src/Spinner/Spinner.jsx +20 -17
- package/src/Table/Cell.jsx +22 -5
- package/src/Table/Table.jsx +7 -4
- package/src/Toast/Toast.jsx +1 -0
- package/src/VideoPicker/VideoPicker.jsx +144 -0
- package/src/VideoPicker/VideoPickerPlayer.jsx +21 -0
- package/src/VideoPicker/VideoPickerThumbnail.jsx +182 -0
- package/src/VideoPicker/VideoSlider.jsx +85 -0
- package/src/VideoPicker/index.js +3 -0
- package/src/VideoPicker/videoPropType.js +12 -0
- package/src/index.js +6 -0
package/lib/Footnote/Footnote.js
CHANGED
|
@@ -13,8 +13,6 @@ var _styledComponents = _interopRequireWildcard(require("styled-components"));
|
|
|
13
13
|
|
|
14
14
|
var _componentsBase = require("@telus-uds/components-base");
|
|
15
15
|
|
|
16
|
-
var _Close = _interopRequireDefault(require("../../__fixtures__/icons/Close"));
|
|
17
|
-
|
|
18
16
|
var _OrderedListBase = _interopRequireDefault(require("../OrderedList/OrderedListBase"));
|
|
19
17
|
|
|
20
18
|
var _utils = require("../utils");
|
|
@@ -312,7 +310,8 @@ const Footnote = props => {
|
|
|
312
310
|
closeButtonMarginRight,
|
|
313
311
|
closeButtonMarginBottom,
|
|
314
312
|
closeButtonWidth,
|
|
315
|
-
closeButtonIconSize
|
|
313
|
+
closeButtonIconSize,
|
|
314
|
+
closeIcon
|
|
316
315
|
} = (0, _componentsBase.useThemeTokens)('Footnote', tokens, variant);
|
|
317
316
|
const footnoteRef = (0, _react.useRef)(null);
|
|
318
317
|
const headerRef = (0, _react.useRef)(null);
|
|
@@ -528,7 +527,7 @@ const Footnote = props => {
|
|
|
528
527
|
},
|
|
529
528
|
"aria-label": getCopy('close'),
|
|
530
529
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_componentsBase.Icon, {
|
|
531
|
-
icon:
|
|
530
|
+
icon: closeIcon,
|
|
532
531
|
tokens: {
|
|
533
532
|
size: `${closeButtonIconSize}px`
|
|
534
533
|
}
|
|
@@ -28,22 +28,26 @@ const StyledSup = /*#__PURE__*/_styledComponents.default.sup.withConfig({
|
|
|
28
28
|
componentId: "components-web__sc-17nd7xo-0"
|
|
29
29
|
})(_ref => {
|
|
30
30
|
let {
|
|
31
|
-
fontSize
|
|
31
|
+
fontSize,
|
|
32
32
|
lineHeight,
|
|
33
33
|
paddingLeft,
|
|
34
|
-
paddingRight
|
|
34
|
+
paddingRight,
|
|
35
|
+
...fontNameAndWeight
|
|
35
36
|
} = _ref;
|
|
36
37
|
return {
|
|
37
38
|
border: 0,
|
|
38
39
|
color: 'inherit',
|
|
39
40
|
cursor: 'pointer',
|
|
40
|
-
|
|
41
|
+
// we want to fallback on 'smaller' but have a valid size when a custom font size is provided.
|
|
42
|
+
fontSize: fontSize ? `${fontSize}px` : 'smaller',
|
|
41
43
|
lineHeight,
|
|
42
44
|
margin: 0,
|
|
43
45
|
paddingVertical: 0,
|
|
44
46
|
paddingLeft,
|
|
45
47
|
paddingRight,
|
|
46
|
-
textDecoration: 'underline'
|
|
48
|
+
textDecoration: 'underline',
|
|
49
|
+
// apply font family
|
|
50
|
+
...(0, _componentsBase.applyTextStyles)(fontNameAndWeight)
|
|
47
51
|
};
|
|
48
52
|
});
|
|
49
53
|
/**
|
|
@@ -67,11 +71,7 @@ const FootnoteLink = _ref2 => {
|
|
|
67
71
|
variant = {},
|
|
68
72
|
...rest
|
|
69
73
|
} = _ref2;
|
|
70
|
-
const
|
|
71
|
-
lineHeight,
|
|
72
|
-
paddingLeft,
|
|
73
|
-
paddingRight
|
|
74
|
-
} = (0, _componentsBase.useThemeTokens)('FootnoteLink', tokens, variant);
|
|
74
|
+
const themeTokens = (0, _componentsBase.useThemeTokens)('FootnoteLink', tokens, variant);
|
|
75
75
|
const numbers = Array.isArray(number) ? number : [number];
|
|
76
76
|
const refs = numbers.map(() => /*#__PURE__*/_react.default.createRef());
|
|
77
77
|
|
|
@@ -103,11 +103,9 @@ const FootnoteLink = _ref2 => {
|
|
|
103
103
|
"aria-label": getCopy('a11yLabel'),
|
|
104
104
|
ref: refs[index],
|
|
105
105
|
onClick: event => handleOnClick(event, index),
|
|
106
|
-
fontSize: fontSize,
|
|
107
|
-
lineHeight: lineHeight,
|
|
108
|
-
paddingLeft: paddingLeft,
|
|
109
|
-
paddingRight: paddingRight,
|
|
110
106
|
...selectProps(rest),
|
|
107
|
+
...themeTokens,
|
|
108
|
+
fontSize: fontSize,
|
|
111
109
|
children: `${num}${index !== numbers.length - 1 ? ',' : ''}`
|
|
112
110
|
}, num))
|
|
113
111
|
});
|
package/lib/List/List.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
|
|
10
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
|
+
|
|
12
|
+
var _componentsBase = require("@telus-uds/components-base");
|
|
13
|
+
|
|
14
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
15
|
+
|
|
16
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
+
|
|
18
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
19
|
+
|
|
20
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
21
|
+
|
|
22
|
+
const ListItem = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
23
|
+
let {
|
|
24
|
+
children,
|
|
25
|
+
title,
|
|
26
|
+
...rest
|
|
27
|
+
} = _ref;
|
|
28
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_componentsBase.ListItem, {
|
|
29
|
+
ref: ref,
|
|
30
|
+
...rest,
|
|
31
|
+
children: [Boolean(title) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_componentsBase.Typography, {
|
|
32
|
+
variant: {
|
|
33
|
+
size: 'h4'
|
|
34
|
+
},
|
|
35
|
+
children: title
|
|
36
|
+
}), children]
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
ListItem.displayName = 'ListItem';
|
|
40
|
+
ListItem.propTypes = {
|
|
41
|
+
children: _propTypes.default.node.isRequired,
|
|
42
|
+
title: _propTypes.default.string
|
|
43
|
+
};
|
|
44
|
+
ListItem.defaultProps = {
|
|
45
|
+
title: undefined
|
|
46
|
+
};
|
|
47
|
+
var _default = ListItem;
|
|
48
|
+
exports.default = _default;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _List = _interopRequireDefault(require("./List"));
|
|
9
|
+
|
|
10
|
+
var _ListItem = _interopRequireDefault(require("./ListItem"));
|
|
11
|
+
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
|
|
14
|
+
_List.default.Item = _ListItem.default;
|
|
15
|
+
var _default = _List.default;
|
|
16
|
+
exports.default = _default;
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
|
|
10
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
|
+
|
|
12
|
+
var _componentsBase = require("@telus-uds/components-base");
|
|
13
|
+
|
|
14
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
15
|
+
|
|
16
|
+
var _utils = require("../utils");
|
|
17
|
+
|
|
18
|
+
var _NavigationItem = _interopRequireDefault(require("./NavigationItem"));
|
|
19
|
+
|
|
20
|
+
var _NavigationSubMenu = _interopRequireDefault(require("./NavigationSubMenu"));
|
|
21
|
+
|
|
22
|
+
var _collapseItems = _interopRequireDefault(require("./collapseItems"));
|
|
23
|
+
|
|
24
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
25
|
+
|
|
26
|
+
var _withLinkRouter$propT, _withLinkRouter$propT2, _withLinkRouter$propT3, _withLinkRouter$propT4;
|
|
27
|
+
|
|
28
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
29
|
+
|
|
30
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
31
|
+
|
|
32
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
33
|
+
|
|
34
|
+
const [selectProps, selectedSystemPropTypes] = (0, _componentsBase.selectSystemProps)([_utils.htmlAttrs]);
|
|
35
|
+
|
|
36
|
+
const Heading = /*#__PURE__*/_styledComponents.default.div.withConfig({
|
|
37
|
+
displayName: "NavigationBar__Heading",
|
|
38
|
+
componentId: "components-web__sc-1vis1gt-0"
|
|
39
|
+
})({
|
|
40
|
+
alignItems: 'center',
|
|
41
|
+
display: 'flex',
|
|
42
|
+
flex: 1,
|
|
43
|
+
justifyContent: 'flex-start',
|
|
44
|
+
'> *': {
|
|
45
|
+
display: 'contents',
|
|
46
|
+
letterSpacing: 0
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
/**
|
|
50
|
+
* NavigationBar can be used to allow customers to consistently navigate across
|
|
51
|
+
* key pages within a specific product line
|
|
52
|
+
*/
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
const NavigationBar = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
56
|
+
let {
|
|
57
|
+
accessibilityRole = 'navigation',
|
|
58
|
+
heading,
|
|
59
|
+
headingLevel = 'h1',
|
|
60
|
+
items,
|
|
61
|
+
onChange = () => {},
|
|
62
|
+
selectedId,
|
|
63
|
+
LinkRouter,
|
|
64
|
+
linkRouterProps,
|
|
65
|
+
...rest
|
|
66
|
+
} = _ref;
|
|
67
|
+
const direction = (0, _componentsBase.useResponsiveProp)({
|
|
68
|
+
xs: 'column',
|
|
69
|
+
sm: 'row'
|
|
70
|
+
});
|
|
71
|
+
const itemsForViewport = (0, _componentsBase.useResponsiveProp)({
|
|
72
|
+
xs: (0, _collapseItems.default)(items, selectedId),
|
|
73
|
+
lg: items
|
|
74
|
+
});
|
|
75
|
+
const openOverlayRef = (0, _react.useRef)(null);
|
|
76
|
+
const [openSubMenuId, setOpenSubMenuId] = (0, _react.useState)(null);
|
|
77
|
+
|
|
78
|
+
const handleSubMenuClose = event => {
|
|
79
|
+
var _openOverlayRef$curre, _openOverlayRef$curre2;
|
|
80
|
+
|
|
81
|
+
if (event.type === 'keydown') {
|
|
82
|
+
if (event.key === 'Escape' || event.key === 27) {
|
|
83
|
+
setOpenSubMenuId(null);
|
|
84
|
+
}
|
|
85
|
+
} else if (event.type === 'click' && openOverlayRef !== null && openOverlayRef !== void 0 && openOverlayRef.current && event.target && !(openOverlayRef !== null && openOverlayRef !== void 0 && (_openOverlayRef$curre = openOverlayRef.current) !== null && _openOverlayRef$curre !== void 0 && _openOverlayRef$curre.contains(event.target))) {
|
|
86
|
+
setOpenSubMenuId(null);
|
|
87
|
+
} else if (event.type === 'touchstart' && openOverlayRef !== null && openOverlayRef !== void 0 && openOverlayRef.current && event.touches[0].target && !(openOverlayRef !== null && openOverlayRef !== void 0 && (_openOverlayRef$curre2 = openOverlayRef.current) !== null && _openOverlayRef$curre2 !== void 0 && _openOverlayRef$curre2.contains(event.touches[0].target))) {
|
|
88
|
+
setOpenSubMenuId(null);
|
|
89
|
+
}
|
|
90
|
+
}; // Add listeners for mouse clicks outside and for ESCAPE key presses
|
|
91
|
+
// TODO: create a custom hook for that and use here and in the Footnote
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
(0, _react.useEffect)(() => {
|
|
95
|
+
if (openSubMenuId !== null) {
|
|
96
|
+
window.addEventListener('click', handleSubMenuClose);
|
|
97
|
+
window.addEventListener('keydown', handleSubMenuClose);
|
|
98
|
+
window.addEventListener('touchstart', handleSubMenuClose);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return () => {
|
|
102
|
+
if (openSubMenuId !== null) {
|
|
103
|
+
window.removeEventListener('click', handleSubMenuClose);
|
|
104
|
+
window.removeEventListener('keydown', handleSubMenuClose);
|
|
105
|
+
window.removeEventListener('touchstart', handleSubMenuClose);
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
}, [openSubMenuId]);
|
|
109
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_componentsBase.StackView, {
|
|
110
|
+
accessibilityRole: accessibilityRole,
|
|
111
|
+
direction: direction,
|
|
112
|
+
ref: ref,
|
|
113
|
+
space: 2,
|
|
114
|
+
tokens: {
|
|
115
|
+
alignItems: direction === 'column' ? 'flex-start' : 'center',
|
|
116
|
+
justifyContent: 'flex-end'
|
|
117
|
+
},
|
|
118
|
+
...selectProps(rest),
|
|
119
|
+
children: [heading && /*#__PURE__*/(0, _jsxRuntime.jsx)(Heading, {
|
|
120
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_componentsBase.Typography, {
|
|
121
|
+
variant: {
|
|
122
|
+
size: 'h5'
|
|
123
|
+
},
|
|
124
|
+
heading: headingLevel,
|
|
125
|
+
children: heading
|
|
126
|
+
})
|
|
127
|
+
}), itemsForViewport === null || itemsForViewport === void 0 ? void 0 : itemsForViewport.map((_ref2, index) => {
|
|
128
|
+
let {
|
|
129
|
+
href,
|
|
130
|
+
label,
|
|
131
|
+
id,
|
|
132
|
+
onClick,
|
|
133
|
+
ref: itemRef,
|
|
134
|
+
LinkRouter: ItemLinkRouter = LinkRouter,
|
|
135
|
+
linkRouterProps: itemLinkRouterProps,
|
|
136
|
+
items: nestedItems,
|
|
137
|
+
...itemRest
|
|
138
|
+
} = _ref2;
|
|
139
|
+
const itemId = id ?? label;
|
|
140
|
+
|
|
141
|
+
const handleClick = event => {
|
|
142
|
+
if (nestedItems) {
|
|
143
|
+
setOpenSubMenuId(openSubMenuId !== itemId ? itemId : null);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
onClick === null || onClick === void 0 ? void 0 : onClick(event);
|
|
147
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(itemId, event);
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
const ItemComponent = nestedItems ? _NavigationSubMenu.default : _NavigationItem.default;
|
|
151
|
+
const isOpen = itemId === openSubMenuId;
|
|
152
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(ItemComponent, {
|
|
153
|
+
ref: itemRef,
|
|
154
|
+
href: href,
|
|
155
|
+
onClick: handleClick // TODO: refactor to pass selected ID via context
|
|
156
|
+
,
|
|
157
|
+
selectedId: selectedId,
|
|
158
|
+
index: index,
|
|
159
|
+
LinkRouter: ItemLinkRouter,
|
|
160
|
+
linkRouterProps: { ...linkRouterProps,
|
|
161
|
+
...itemLinkRouterProps
|
|
162
|
+
},
|
|
163
|
+
items: nestedItems,
|
|
164
|
+
selected: itemId === selectedId,
|
|
165
|
+
...itemRest,
|
|
166
|
+
...(nestedItems && {
|
|
167
|
+
isOpen
|
|
168
|
+
}),
|
|
169
|
+
...(nestedItems && isOpen && {
|
|
170
|
+
openOverlayRef
|
|
171
|
+
}),
|
|
172
|
+
children: label
|
|
173
|
+
}, itemId);
|
|
174
|
+
})]
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
NavigationBar.displayName = 'NavigationBar';
|
|
178
|
+
NavigationBar.propTypes = { ...selectedSystemPropTypes,
|
|
179
|
+
..._componentsBase.withLinkRouter.propTypes,
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* NavigationBar pages
|
|
183
|
+
*
|
|
184
|
+
* Each `item` object must contain:
|
|
185
|
+
* - `heading` - user-facing text in the tab link
|
|
186
|
+
* - `href` - the URL of the page linked to. Do not use hash links, for content within a page, use `Tabs`.
|
|
187
|
+
* - `id` - a stable, unique identifier of the page within the set. Not written into the HTML.
|
|
188
|
+
*/
|
|
189
|
+
items: _propTypes.default.arrayOf(_propTypes.default.shape({
|
|
190
|
+
label: _propTypes.default.string.isRequired,
|
|
191
|
+
href: _propTypes.default.string,
|
|
192
|
+
id: _propTypes.default.string.isRequired,
|
|
193
|
+
onClick: _propTypes.default.func,
|
|
194
|
+
selected: _propTypes.default.bool,
|
|
195
|
+
LinkRouter: (_withLinkRouter$propT = _componentsBase.withLinkRouter.propTypes) === null || _withLinkRouter$propT === void 0 ? void 0 : _withLinkRouter$propT.LinkRouter,
|
|
196
|
+
linkRouterProps: (_withLinkRouter$propT2 = _componentsBase.withLinkRouter.propTypes) === null || _withLinkRouter$propT2 === void 0 ? void 0 : _withLinkRouter$propT2.linkRouterProps,
|
|
197
|
+
// One layer of nested links is allowed
|
|
198
|
+
items: _propTypes.default.arrayOf(_propTypes.default.shape({
|
|
199
|
+
label: _propTypes.default.string.isRequired,
|
|
200
|
+
href: _propTypes.default.string,
|
|
201
|
+
id: _propTypes.default.string.isRequired,
|
|
202
|
+
onClick: _propTypes.default.func,
|
|
203
|
+
selected: _propTypes.default.bool,
|
|
204
|
+
LinkRouter: (_withLinkRouter$propT3 = _componentsBase.withLinkRouter.propTypes) === null || _withLinkRouter$propT3 === void 0 ? void 0 : _withLinkRouter$propT3.LinkRouter,
|
|
205
|
+
linkRouterProps: (_withLinkRouter$propT4 = _componentsBase.withLinkRouter.propTypes) === null || _withLinkRouter$propT4 === void 0 ? void 0 : _withLinkRouter$propT4.linkRouterProps
|
|
206
|
+
}))
|
|
207
|
+
})).isRequired,
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Common navigation bar heading.
|
|
211
|
+
*/
|
|
212
|
+
heading: _propTypes.default.string,
|
|
213
|
+
headingLevel: _propTypes.default.oneOf(['h1', 'h2', 'h3', 'h4', 'h5', 'h6']),
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Matches the `id` property of the item in `items` corresponding to the current page
|
|
217
|
+
*/
|
|
218
|
+
selectedId: _propTypes.default.string.isRequired,
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Optional function to be called on pressing a link
|
|
222
|
+
*/
|
|
223
|
+
onChange: _propTypes.default.func
|
|
224
|
+
};
|
|
225
|
+
NavigationBar.defaultProps = {
|
|
226
|
+
heading: undefined,
|
|
227
|
+
headingLevel: 'h1',
|
|
228
|
+
onChange: () => {}
|
|
229
|
+
};
|
|
230
|
+
var _default = NavigationBar;
|
|
231
|
+
exports.default = _default;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
|
|
10
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
|
+
|
|
12
|
+
var _componentsBase = require("@telus-uds/components-base");
|
|
13
|
+
|
|
14
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
15
|
+
|
|
16
|
+
var _utils = require("../utils");
|
|
17
|
+
|
|
18
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
19
|
+
|
|
20
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
|
+
|
|
22
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
23
|
+
|
|
24
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
25
|
+
|
|
26
|
+
const [selectProps, selectedSystemPropTypes] = (0, _componentsBase.selectSystemProps)([_utils.htmlAttrs]);
|
|
27
|
+
const defaultMaxWidth = 192;
|
|
28
|
+
|
|
29
|
+
const ItemContainer = /*#__PURE__*/_styledComponents.default.div.withConfig({
|
|
30
|
+
displayName: "NavigationItem__ItemContainer",
|
|
31
|
+
componentId: "components-web__sc-ql9x7c-0"
|
|
32
|
+
})(_ref => {
|
|
33
|
+
let {
|
|
34
|
+
targetWidth
|
|
35
|
+
} = _ref;
|
|
36
|
+
return {
|
|
37
|
+
display: 'flex',
|
|
38
|
+
flexDirection: 'column',
|
|
39
|
+
justifyContent: 'center',
|
|
40
|
+
maxWidth: `${Math.max(defaultMaxWidth, targetWidth ?? 0)}px`,
|
|
41
|
+
flexGrow: targetWidth ? 1 : 0,
|
|
42
|
+
flexShrink: 1
|
|
43
|
+
};
|
|
44
|
+
});
|
|
45
|
+
/**
|
|
46
|
+
* NavigationItem within a NavigationBar component.
|
|
47
|
+
*
|
|
48
|
+
* This is rendered automatically by `NavigationBar` and isn't intended be used directly.
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
const NavigationItem = /*#__PURE__*/(0, _react.forwardRef)((_ref2, ref) => {
|
|
53
|
+
let {
|
|
54
|
+
accessibilityRole = 'link',
|
|
55
|
+
// @todo switch to 'button' for dropdowns
|
|
56
|
+
children,
|
|
57
|
+
id,
|
|
58
|
+
onClick: handleClick = () => {},
|
|
59
|
+
selected,
|
|
60
|
+
accessibilityState = {
|
|
61
|
+
current: selected ? 'page' : false
|
|
62
|
+
},
|
|
63
|
+
href,
|
|
64
|
+
tokens,
|
|
65
|
+
variant = {},
|
|
66
|
+
...rest
|
|
67
|
+
} = _ref2;
|
|
68
|
+
const selectedProps = selectProps(rest);
|
|
69
|
+
const targetWidth = (0, _componentsBase.useResponsiveProp)({
|
|
70
|
+
xs: 288,
|
|
71
|
+
lg: null
|
|
72
|
+
});
|
|
73
|
+
const viewport = (0, _componentsBase.useViewport)();
|
|
74
|
+
const getTokens = (0, _componentsBase.useThemeTokensCallback)('NavigationBar', tokens, variant);
|
|
75
|
+
|
|
76
|
+
const getStateTokens = state => getTokens({ ...state,
|
|
77
|
+
viewport
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(ItemContainer, {
|
|
81
|
+
targetWidth: targetWidth,
|
|
82
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_componentsBase.Button, {
|
|
83
|
+
accessibilityRole: accessibilityRole,
|
|
84
|
+
accessibilityState: accessibilityState,
|
|
85
|
+
onPress: handleClick,
|
|
86
|
+
ref: ref,
|
|
87
|
+
tokens: getStateTokens,
|
|
88
|
+
variant: {
|
|
89
|
+
selected
|
|
90
|
+
},
|
|
91
|
+
href: href,
|
|
92
|
+
...selectedProps,
|
|
93
|
+
children: children
|
|
94
|
+
})
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
NavigationItem.displayName = 'NavigationItem';
|
|
98
|
+
NavigationItem.propTypes = { ...selectedSystemPropTypes,
|
|
99
|
+
..._componentsBase.withLinkRouter.propTypes,
|
|
100
|
+
onClick: _propTypes.default.func,
|
|
101
|
+
selected: _propTypes.default.bool,
|
|
102
|
+
children: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.func]).isRequired
|
|
103
|
+
};
|
|
104
|
+
NavigationItem.defaultProps = {
|
|
105
|
+
onClick: () => {},
|
|
106
|
+
selected: false
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
var _default = (0, _componentsBase.withLinkRouter)(NavigationItem);
|
|
110
|
+
|
|
111
|
+
exports.default = _default;
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
|
|
10
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
|
+
|
|
12
|
+
var _componentsBase = require("@telus-uds/components-base");
|
|
13
|
+
|
|
14
|
+
var _NavigationItem = _interopRequireDefault(require("./NavigationItem"));
|
|
15
|
+
|
|
16
|
+
var _Listbox = _interopRequireDefault(require("../Listbox"));
|
|
17
|
+
|
|
18
|
+
var _useOverlaidPosition = _interopRequireDefault(require("../utils/useOverlaidPosition"));
|
|
19
|
+
|
|
20
|
+
var _resolveItemSelection = _interopRequireDefault(require("./resolveItemSelection"));
|
|
21
|
+
|
|
22
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
23
|
+
|
|
24
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
25
|
+
|
|
26
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
27
|
+
|
|
28
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* A NavigationItem that opens or closes a Listbox of other NavigationItems.
|
|
32
|
+
*
|
|
33
|
+
* This is rendered automatically by `NavigationBar` and isn't intended be used directly.
|
|
34
|
+
*/
|
|
35
|
+
const NavigationSubMenu = _ref => {
|
|
36
|
+
let {
|
|
37
|
+
children,
|
|
38
|
+
id,
|
|
39
|
+
isOpen = false,
|
|
40
|
+
label,
|
|
41
|
+
onClick,
|
|
42
|
+
selectedId,
|
|
43
|
+
items = [],
|
|
44
|
+
openOverlayRef,
|
|
45
|
+
LinkRouter,
|
|
46
|
+
linkRouterProps
|
|
47
|
+
} = _ref;
|
|
48
|
+
const focusTrapRef = (0, _react.useRef)();
|
|
49
|
+
const maxWidth = 289; // Slightly over 288 of nav item to account for subpixel rounding
|
|
50
|
+
|
|
51
|
+
const {
|
|
52
|
+
align,
|
|
53
|
+
offsets,
|
|
54
|
+
minWidth
|
|
55
|
+
} = (0, _componentsBase.useResponsiveProp)({
|
|
56
|
+
xs: {
|
|
57
|
+
align: {
|
|
58
|
+
top: 'top',
|
|
59
|
+
left: 'left'
|
|
60
|
+
},
|
|
61
|
+
minWidth: maxWidth
|
|
62
|
+
},
|
|
63
|
+
sm: {
|
|
64
|
+
align: {
|
|
65
|
+
top: 'top',
|
|
66
|
+
right: 'right'
|
|
67
|
+
},
|
|
68
|
+
minWidth: maxWidth
|
|
69
|
+
},
|
|
70
|
+
lg: {
|
|
71
|
+
align: {
|
|
72
|
+
top: 'bottom',
|
|
73
|
+
center: 'center'
|
|
74
|
+
},
|
|
75
|
+
offsets: {
|
|
76
|
+
vertical: 4
|
|
77
|
+
},
|
|
78
|
+
minWidth: 192
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
const {
|
|
82
|
+
overlaidPosition,
|
|
83
|
+
sourceRef,
|
|
84
|
+
targetRef,
|
|
85
|
+
onTargetLayout,
|
|
86
|
+
isReady
|
|
87
|
+
} = (0, _useOverlaidPosition.default)({
|
|
88
|
+
isShown: isOpen,
|
|
89
|
+
offsets,
|
|
90
|
+
align
|
|
91
|
+
});
|
|
92
|
+
const {
|
|
93
|
+
selected
|
|
94
|
+
} = (0, _resolveItemSelection.default)({
|
|
95
|
+
id,
|
|
96
|
+
label,
|
|
97
|
+
items
|
|
98
|
+
}, selectedId);
|
|
99
|
+
|
|
100
|
+
const handleClick = event => {
|
|
101
|
+
if (typeof onClick === 'function') onClick(event);
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
const {
|
|
105
|
+
icoMenu
|
|
106
|
+
} = (0, _componentsBase.useThemeTokens)('NavigationBar', {}, {}, {
|
|
107
|
+
expanded: isOpen
|
|
108
|
+
});
|
|
109
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
110
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_NavigationItem.default, {
|
|
111
|
+
ref: sourceRef,
|
|
112
|
+
accessibilityRole: "button",
|
|
113
|
+
id: id,
|
|
114
|
+
selected: selected,
|
|
115
|
+
onClick: handleClick,
|
|
116
|
+
icon: icoMenu,
|
|
117
|
+
children: _ref2 => {
|
|
118
|
+
var _textStyles$, _textStyles$2;
|
|
119
|
+
|
|
120
|
+
let {
|
|
121
|
+
textStyles
|
|
122
|
+
} = _ref2;
|
|
123
|
+
return [children, /*#__PURE__*/(0, _jsxRuntime.jsx)(_componentsBase.Spacer, {
|
|
124
|
+
space: 1,
|
|
125
|
+
direction: "row"
|
|
126
|
+
}, `${id}_spacer`), /*#__PURE__*/(0, _jsxRuntime.jsx)(_componentsBase.Icon, {
|
|
127
|
+
icon: icoMenu,
|
|
128
|
+
variant: {
|
|
129
|
+
size: 'small'
|
|
130
|
+
},
|
|
131
|
+
tokens: {
|
|
132
|
+
color: (_textStyles$ = textStyles[0]) === null || _textStyles$ === void 0 ? void 0 : _textStyles$.color,
|
|
133
|
+
size: (_textStyles$2 = textStyles[0]) === null || _textStyles$2 === void 0 ? void 0 : _textStyles$2.fontSize
|
|
134
|
+
}
|
|
135
|
+
}, `${id}_icon`)];
|
|
136
|
+
}
|
|
137
|
+
}), isOpen && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
138
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Listbox.default.Overlay, {
|
|
139
|
+
overlaidPosition: overlaidPosition,
|
|
140
|
+
maxWidth: maxWidth,
|
|
141
|
+
minWidth: minWidth,
|
|
142
|
+
isReady: isReady,
|
|
143
|
+
onLayout: onTargetLayout,
|
|
144
|
+
ref: openOverlayRef,
|
|
145
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Listbox.default, {
|
|
146
|
+
items: items,
|
|
147
|
+
firstItemRef: targetRef,
|
|
148
|
+
parentRef: sourceRef,
|
|
149
|
+
selectedId: selectedId,
|
|
150
|
+
LinkRouter: LinkRouter,
|
|
151
|
+
linkRouterProps: linkRouterProps
|
|
152
|
+
})
|
|
153
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
154
|
+
// This catches and shifts focus to other interactive elements.
|
|
155
|
+
// eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex
|
|
156
|
+
tabIndex: 0,
|
|
157
|
+
ref: focusTrapRef,
|
|
158
|
+
onFocus: () => targetRef.current.focus()
|
|
159
|
+
})]
|
|
160
|
+
})]
|
|
161
|
+
});
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
NavigationSubMenu.displayName = 'NavigationSubMenu'; // @TODO - proper prop types and comments
|
|
165
|
+
|
|
166
|
+
NavigationSubMenu.propTypes = {
|
|
167
|
+
children: _propTypes.default.node,
|
|
168
|
+
id: _propTypes.default.string,
|
|
169
|
+
isOpen: _propTypes.default.bool,
|
|
170
|
+
label: _propTypes.default.string,
|
|
171
|
+
onClick: _propTypes.default.func,
|
|
172
|
+
selectedId: _propTypes.default.string,
|
|
173
|
+
items: _propTypes.default.array,
|
|
174
|
+
openOverlayRef: _propTypes.default.object,
|
|
175
|
+
LinkRouter: _propTypes.default.elementType,
|
|
176
|
+
linkRouterProps: _propTypes.default.object
|
|
177
|
+
};
|
|
178
|
+
var _default = NavigationSubMenu;
|
|
179
|
+
exports.default = _default;
|