@canonical/react-components 0.36.0 → 0.37.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/Accordion/Accordion.js +1 -1
- package/dist/components/ActionButton/ActionButton.js +1 -1
- package/dist/components/ArticlePagination/ArticlePagination.js +1 -1
- package/dist/components/Button/Button.d.ts +1 -0
- package/dist/components/Button/Button.js +2 -1
- package/dist/components/Card/Card.js +1 -1
- package/dist/components/CheckableInput/CheckableInput.js +1 -1
- package/dist/components/CheckboxInput/CheckboxInput.js +1 -1
- package/dist/components/Chip/Chip.js +1 -1
- package/dist/components/Code/Code.js +1 -1
- package/dist/components/CodeSnippet/CodeSnippet.js +1 -1
- package/dist/components/CodeSnippet/CodeSnippetBlock.js +1 -1
- package/dist/components/CodeSnippet/CodeSnippetDropdown.js +1 -1
- package/dist/components/Col/Col.js +1 -1
- package/dist/components/ContextualMenu/ContextualMenu.js +1 -2
- package/dist/components/ContextualMenu/ContextualMenuDropdown/ContextualMenuDropdown.js +1 -1
- package/dist/components/Form/Form.js +1 -1
- package/dist/components/Icon/Icon.js +1 -1
- package/dist/components/Input/Input.js +1 -1
- package/dist/components/Label/Label.js +1 -1
- package/dist/components/Link/Link.js +1 -1
- package/dist/components/List/List.js +28 -17
- package/dist/components/MainTable/MainTable.js +2 -2
- package/dist/components/Modal/Modal.js +1 -1
- package/dist/components/ModularTable/ModularTable.js +1 -1
- package/dist/components/Navigation/Navigation.d.ts +57 -0
- package/dist/components/Navigation/Navigation.js +266 -0
- package/dist/components/Navigation/NavigationLink/NavigationLink.d.ts +11 -0
- package/dist/components/Navigation/NavigationLink/NavigationLink.js +57 -0
- package/dist/components/Navigation/NavigationLink/index.d.ts +1 -0
- package/dist/components/Navigation/NavigationLink/index.js +15 -0
- package/dist/components/Navigation/NavigationMenu/NavigationMenu.d.ts +11 -0
- package/dist/components/Navigation/NavigationMenu/NavigationMenu.js +97 -0
- package/dist/components/Navigation/NavigationMenu/index.d.ts +1 -0
- package/dist/components/Navigation/NavigationMenu/index.js +15 -0
- package/dist/components/Navigation/index.d.ts +3 -0
- package/dist/components/Navigation/index.js +15 -0
- package/dist/components/Navigation/types.d.ts +57 -0
- package/dist/components/Navigation/types.js +5 -0
- package/dist/components/Notification/Notification.js +1 -1
- package/dist/components/PasswordToggle/PasswordToggle.js +1 -1
- package/dist/components/RadioInput/RadioInput.js +1 -1
- package/dist/components/Row/Row.js +1 -1
- package/dist/components/SearchAndFilter/SearchAndFilter.js +12 -16
- package/dist/components/SearchBox/SearchBox.d.ts +6 -5
- package/dist/components/SearchBox/SearchBox.js +22 -8
- package/dist/components/Select/Select.js +1 -1
- package/dist/components/Slider/Slider.js +1 -1
- package/dist/components/Spinner/Spinner.js +1 -1
- package/dist/components/StatusLabel/StatusLabel.d.ts +31 -0
- package/dist/components/StatusLabel/StatusLabel.js +51 -0
- package/dist/components/StatusLabel/index.d.ts +2 -0
- package/dist/components/StatusLabel/index.js +25 -0
- package/dist/components/Strip/Strip.js +1 -1
- package/dist/components/Switch/Switch.js +1 -1
- package/dist/components/Table/Table.js +1 -1
- package/dist/components/TableCell/TableCell.js +1 -1
- package/dist/components/TableHeader/TableHeader.js +1 -1
- package/dist/components/TableRow/TableRow.js +1 -1
- package/dist/components/Tabs/Tabs.js +1 -1
- package/dist/components/Textarea/Textarea.js +1 -1
- package/dist/hooks/index.d.ts +4 -2
- package/dist/hooks/index.js +19 -3
- package/dist/hooks/useClickOutside.d.ts +7 -0
- package/dist/hooks/useClickOutside.js +41 -0
- package/dist/hooks/useOnEscapePressed.d.ts +4 -0
- package/dist/hooks/useOnEscapePressed.js +27 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.js +34 -0
- package/dist/types/index.d.ts +13 -0
- package/dist/types/index.js +49 -1
- package/package.json +42 -40
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
|
|
12
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
13
|
+
|
|
14
|
+
var _NavigationLink = _interopRequireDefault(require("./NavigationLink"));
|
|
15
|
+
|
|
16
|
+
var _NavigationMenu = _interopRequireDefault(require("./NavigationMenu"));
|
|
17
|
+
|
|
18
|
+
var _types = require("../../types");
|
|
19
|
+
|
|
20
|
+
var _SearchBox = _interopRequireDefault(require("../SearchBox"));
|
|
21
|
+
|
|
22
|
+
var _hooks = require("../../hooks");
|
|
23
|
+
|
|
24
|
+
var _excluded = ["url", "src", "title", "icon", "aria-current", "aria-label"],
|
|
25
|
+
_excluded2 = ["fullWidth", "generateLink", "items", "itemsRight", "leftNavProps", "logo", "navProps", "rightNavProps", "searchProps", "theme"];
|
|
26
|
+
|
|
27
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
28
|
+
|
|
29
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
30
|
+
|
|
31
|
+
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; }
|
|
32
|
+
|
|
33
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
34
|
+
|
|
35
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
36
|
+
|
|
37
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
38
|
+
|
|
39
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
40
|
+
|
|
41
|
+
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
42
|
+
|
|
43
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
44
|
+
|
|
45
|
+
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
46
|
+
|
|
47
|
+
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
48
|
+
|
|
49
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Narrow the type of the nav item to a NavMenu.
|
|
53
|
+
*/
|
|
54
|
+
var isMenu = function isMenu(item) {
|
|
55
|
+
return "items" in item;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Narrow the type of the logo prop to LogoProps.
|
|
59
|
+
*/
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
var isLogoProps = function isLogoProps(logo) {
|
|
63
|
+
return ! /*#__PURE__*/(0, _react.isValidElement)(logo);
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Display the standard logo if the props were provided otherwise display the
|
|
67
|
+
* full element provided.
|
|
68
|
+
*/
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
var generateLogo = function generateLogo(logo, generateLink) {
|
|
72
|
+
if (isLogoProps(logo)) {
|
|
73
|
+
var url = logo.url,
|
|
74
|
+
src = logo.src,
|
|
75
|
+
title = logo.title,
|
|
76
|
+
icon = logo.icon,
|
|
77
|
+
ariaCurrent = logo["aria-current"],
|
|
78
|
+
ariaLabel = logo["aria-label"],
|
|
79
|
+
logoProps = _objectWithoutProperties(logo, _excluded);
|
|
80
|
+
|
|
81
|
+
var content = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
82
|
+
className: "p-navigation__logo-tag"
|
|
83
|
+
}, icon !== null && icon !== void 0 ? icon : /*#__PURE__*/_react.default.createElement("img", {
|
|
84
|
+
className: "p-navigation__logo-icon",
|
|
85
|
+
src: src,
|
|
86
|
+
alt: ""
|
|
87
|
+
})), /*#__PURE__*/_react.default.createElement("span", {
|
|
88
|
+
className: "p-navigation__logo-title"
|
|
89
|
+
}, title));
|
|
90
|
+
|
|
91
|
+
return /*#__PURE__*/_react.default.createElement("div", _extends({
|
|
92
|
+
className: "p-navigation__tagged-logo"
|
|
93
|
+
}, logoProps), /*#__PURE__*/_react.default.createElement(_NavigationLink.default, {
|
|
94
|
+
className: "p-navigation__link",
|
|
95
|
+
url: url,
|
|
96
|
+
label: content,
|
|
97
|
+
"aria-label": ariaLabel,
|
|
98
|
+
generateLink: generateLink,
|
|
99
|
+
isSelected: !!ariaCurrent
|
|
100
|
+
}));
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
104
|
+
className: "p-navigation__logo"
|
|
105
|
+
}, logo);
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* Generate the JSX for a set of nav items. This will map the items to menus,
|
|
109
|
+
* links or generated components.
|
|
110
|
+
* @param items The nav items to map to elements.
|
|
111
|
+
* @param closeMobileMenu A function to close the mobile menu.
|
|
112
|
+
* @param generateLink The optional function used to generate link components.
|
|
113
|
+
* @returns A list of navigation item elements.
|
|
114
|
+
*/
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
var generateItems = function generateItems(items, closeMobileMenu, generateLink) {
|
|
118
|
+
return items.map(function (item, i) {
|
|
119
|
+
return isMenu(item) ? /*#__PURE__*/_react.default.createElement(_NavigationMenu.default, _extends({}, item, {
|
|
120
|
+
generateLink: generateLink,
|
|
121
|
+
key: i
|
|
122
|
+
})) : /*#__PURE__*/_react.default.createElement("li", {
|
|
123
|
+
className: (0, _classnames.default)("p-navigation__item", {
|
|
124
|
+
"is-selected": item.isSelected
|
|
125
|
+
}),
|
|
126
|
+
key: i
|
|
127
|
+
}, /*#__PURE__*/_react.default.createElement(_NavigationLink.default, _extends({}, item, {
|
|
128
|
+
onClick: function onClick(evt) {
|
|
129
|
+
var _item$onClick;
|
|
130
|
+
|
|
131
|
+
(_item$onClick = item.onClick) === null || _item$onClick === void 0 ? void 0 : _item$onClick.call(item, evt);
|
|
132
|
+
closeMobileMenu();
|
|
133
|
+
},
|
|
134
|
+
generateLink: generateLink,
|
|
135
|
+
className: (0, _classnames.default)("p-navigation__link", item.className)
|
|
136
|
+
})));
|
|
137
|
+
});
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
var Navigation = function Navigation(_ref) {
|
|
141
|
+
var fullWidth = _ref.fullWidth,
|
|
142
|
+
generateLink = _ref.generateLink,
|
|
143
|
+
items = _ref.items,
|
|
144
|
+
itemsRight = _ref.itemsRight,
|
|
145
|
+
leftNavProps = _ref.leftNavProps,
|
|
146
|
+
logo = _ref.logo,
|
|
147
|
+
navProps = _ref.navProps,
|
|
148
|
+
rightNavProps = _ref.rightNavProps,
|
|
149
|
+
searchProps = _ref.searchProps,
|
|
150
|
+
theme = _ref.theme,
|
|
151
|
+
headerProps = _objectWithoutProperties(_ref, _excluded2);
|
|
152
|
+
|
|
153
|
+
var searchRef = (0, _react.useRef)();
|
|
154
|
+
|
|
155
|
+
var _useState = (0, _react.useState)(false),
|
|
156
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
157
|
+
mobileMenuOpen = _useState2[0],
|
|
158
|
+
setMobileMenuOpen = _useState2[1];
|
|
159
|
+
|
|
160
|
+
var _useState3 = (0, _react.useState)(false),
|
|
161
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
162
|
+
searchOpen = _useState4[0],
|
|
163
|
+
setSearchOpen = _useState4[1]; // Display the search box if the props have been provided.
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
var hasSearch = !!searchProps; // Close the mobile menu when the search box is opened.
|
|
167
|
+
|
|
168
|
+
var toggleSearch = function toggleSearch(open) {
|
|
169
|
+
setSearchOpen(open !== null && open !== void 0 ? open : !searchOpen);
|
|
170
|
+
setMobileMenuOpen(false);
|
|
171
|
+
}; // Close the search box when the mobile menu is opened.
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
var toggleMobileMenu = function toggleMobileMenu() {
|
|
175
|
+
setMobileMenuOpen(!mobileMenuOpen);
|
|
176
|
+
setSearchOpen(false);
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
var closeMobileMenu = function closeMobileMenu() {
|
|
180
|
+
if (mobileMenuOpen) {
|
|
181
|
+
setMobileMenuOpen(false);
|
|
182
|
+
}
|
|
183
|
+
}; // Hide the searchbox when the escape key is pressed.
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
(0, _hooks.useOnEscapePressed)(function () {
|
|
187
|
+
return toggleSearch(false);
|
|
188
|
+
});
|
|
189
|
+
(0, _react.useEffect)(function () {
|
|
190
|
+
if (searchOpen) {
|
|
191
|
+
var _searchRef$current;
|
|
192
|
+
|
|
193
|
+
// Focus on the searchbox when it appears. This done in a useEffect so
|
|
194
|
+
// that the state change to display the searchbox has already occured and
|
|
195
|
+
// the input has been made visible.
|
|
196
|
+
(_searchRef$current = searchRef.current) === null || _searchRef$current === void 0 ? void 0 : _searchRef$current.focus();
|
|
197
|
+
}
|
|
198
|
+
}, [searchOpen]);
|
|
199
|
+
return /*#__PURE__*/_react.default.createElement("header", _extends({}, headerProps, {
|
|
200
|
+
className: (0, _classnames.default)("p-navigation", headerProps.className, {
|
|
201
|
+
"has-menu-open": mobileMenuOpen,
|
|
202
|
+
"has-search-open": searchOpen,
|
|
203
|
+
"is-dark": theme === _types.Theme.DARK,
|
|
204
|
+
"is-light": theme === _types.Theme.LIGHT
|
|
205
|
+
})
|
|
206
|
+
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
207
|
+
className: fullWidth ? "p-navigation__row--full-width" : "p-navigation__row"
|
|
208
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
209
|
+
className: "p-navigation__banner"
|
|
210
|
+
}, generateLogo(logo, generateLink), /*#__PURE__*/_react.default.createElement("ul", {
|
|
211
|
+
className: "p-navigation__items"
|
|
212
|
+
}, // When the header has a search box then this button is used to
|
|
213
|
+
// toggle the search box at mobile size.
|
|
214
|
+
hasSearch ? /*#__PURE__*/_react.default.createElement("li", {
|
|
215
|
+
className: "p-navigation__item"
|
|
216
|
+
}, /*#__PURE__*/_react.default.createElement("button", {
|
|
217
|
+
"aria-label": "Search",
|
|
218
|
+
className: "p-navigation__link--search-toggle",
|
|
219
|
+
onClick: function onClick() {
|
|
220
|
+
return toggleSearch();
|
|
221
|
+
}
|
|
222
|
+
}, /*#__PURE__*/_react.default.createElement("span", {
|
|
223
|
+
className: "p-navigation__search-label"
|
|
224
|
+
}, "Search"))) : null, /*#__PURE__*/_react.default.createElement("li", {
|
|
225
|
+
className: "p-navigation__item"
|
|
226
|
+
}, /*#__PURE__*/_react.default.createElement("button", {
|
|
227
|
+
"aria-pressed": mobileMenuOpen,
|
|
228
|
+
className: "p-navigation__link",
|
|
229
|
+
onClick: toggleMobileMenu
|
|
230
|
+
}, mobileMenuOpen ? "Close menu" : "Menu")))), /*#__PURE__*/_react.default.createElement("nav", _extends({
|
|
231
|
+
className: "p-navigation__nav"
|
|
232
|
+
}, navProps), /*#__PURE__*/_react.default.createElement("ul", _extends({
|
|
233
|
+
className: "p-navigation__items"
|
|
234
|
+
}, leftNavProps), items ? generateItems(items, closeMobileMenu, generateLink) : null), itemsRight || hasSearch ? /*#__PURE__*/_react.default.createElement("ul", _extends({
|
|
235
|
+
className: "p-navigation__items"
|
|
236
|
+
}, rightNavProps), itemsRight ? generateItems(itemsRight, closeMobileMenu, generateLink) : null, // When the header has a search box then this button is used to
|
|
237
|
+
// toggle the search box at non-mobile size.
|
|
238
|
+
hasSearch ? /*#__PURE__*/_react.default.createElement("li", {
|
|
239
|
+
className: "p-navigation__item"
|
|
240
|
+
}, /*#__PURE__*/_react.default.createElement("button", {
|
|
241
|
+
"aria-label": "Search",
|
|
242
|
+
className: "p-navigation__link--search-toggle",
|
|
243
|
+
onClick: function onClick() {
|
|
244
|
+
return toggleSearch();
|
|
245
|
+
}
|
|
246
|
+
}, /*#__PURE__*/_react.default.createElement("span", {
|
|
247
|
+
className: "p-navigation__search-label"
|
|
248
|
+
}, "Search"))) : null) : null, // When the header has a search box and the user has opened the search
|
|
249
|
+
// form then this search box is displayed.
|
|
250
|
+
hasSearch ? /*#__PURE__*/_react.default.createElement("div", {
|
|
251
|
+
className: "p-navigation__search",
|
|
252
|
+
"aria-hidden": !searchOpen
|
|
253
|
+
}, /*#__PURE__*/_react.default.createElement(_SearchBox.default, {
|
|
254
|
+
ref: searchRef
|
|
255
|
+
})) : null)), // When the header has a search box and the user has opened the search
|
|
256
|
+
// form then this element is overlayed over the whole page.
|
|
257
|
+
hasSearch ? /*#__PURE__*/_react.default.createElement("div", {
|
|
258
|
+
className: "p-navigation__search-overlay",
|
|
259
|
+
onClick: function onClick() {
|
|
260
|
+
return setSearchOpen(false);
|
|
261
|
+
}
|
|
262
|
+
}) : null);
|
|
263
|
+
};
|
|
264
|
+
|
|
265
|
+
var _default = Navigation;
|
|
266
|
+
exports.default = _default;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { HTMLProps } from "react";
|
|
2
|
+
import { PropsWithSpread } from "../../../types";
|
|
3
|
+
import type { GenerateLink, NavLink } from "../types";
|
|
4
|
+
declare type Props = PropsWithSpread<NavLink & {
|
|
5
|
+
generateLink?: GenerateLink;
|
|
6
|
+
}, HTMLProps<HTMLAnchorElement>>;
|
|
7
|
+
/**
|
|
8
|
+
* This component is used internally to display links inside the Navigation component.
|
|
9
|
+
*/
|
|
10
|
+
declare const NavigationLink: ({ generateLink, isSelected, label, url, ...props }: Props) => JSX.Element;
|
|
11
|
+
export default NavigationLink;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
|
|
10
|
+
var _excluded = ["generateLink", "isSelected", "label", "url"];
|
|
11
|
+
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
|
|
14
|
+
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
15
|
+
|
|
16
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
17
|
+
|
|
18
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
19
|
+
|
|
20
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
21
|
+
|
|
22
|
+
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
23
|
+
|
|
24
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* This component is used internally to display links inside the Navigation component.
|
|
28
|
+
*/
|
|
29
|
+
var NavigationLink = function NavigationLink(_ref) {
|
|
30
|
+
var generateLink = _ref.generateLink,
|
|
31
|
+
isSelected = _ref.isSelected,
|
|
32
|
+
label = _ref.label,
|
|
33
|
+
url = _ref.url,
|
|
34
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
35
|
+
|
|
36
|
+
var ariaCurrent = isSelected ? "page" : undefined;
|
|
37
|
+
|
|
38
|
+
if (generateLink) {
|
|
39
|
+
// If a function has been provided then use it to generate the link element.
|
|
40
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, generateLink(_objectSpread({
|
|
41
|
+
isSelected: isSelected,
|
|
42
|
+
label: label,
|
|
43
|
+
url: url,
|
|
44
|
+
"aria-current": ariaCurrent
|
|
45
|
+
}, props)));
|
|
46
|
+
} else {
|
|
47
|
+
// If a function has not been provided then use a standard anchor element.
|
|
48
|
+
return /*#__PURE__*/_react.default.createElement("a", _extends({
|
|
49
|
+
href: url
|
|
50
|
+
}, props, {
|
|
51
|
+
"aria-current": ariaCurrent
|
|
52
|
+
}), label);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
var _default = NavigationLink;
|
|
57
|
+
exports.default = _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from "./NavigationLink";
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "default", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function get() {
|
|
9
|
+
return _NavigationLink.default;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
var _NavigationLink = _interopRequireDefault(require("./NavigationLink"));
|
|
14
|
+
|
|
15
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { HTMLProps } from "react";
|
|
2
|
+
import type { GenerateLink, NavMenu } from "../types";
|
|
3
|
+
import { PropsWithSpread } from "../../../types";
|
|
4
|
+
declare type Props = PropsWithSpread<NavMenu & {
|
|
5
|
+
generateLink?: GenerateLink;
|
|
6
|
+
}, HTMLProps<HTMLLIElement>>;
|
|
7
|
+
/**
|
|
8
|
+
* This component is used internally to display menus inside the Navigation component.
|
|
9
|
+
*/
|
|
10
|
+
declare const NavigationMenu: ({ alignRight, generateLink, items, label, ...props }: Props) => JSX.Element;
|
|
11
|
+
export default NavigationMenu;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
|
|
12
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
13
|
+
|
|
14
|
+
var _NavigationLink = _interopRequireDefault(require("../NavigationLink"));
|
|
15
|
+
|
|
16
|
+
var _hooks = require("../../../hooks");
|
|
17
|
+
|
|
18
|
+
var _excluded = ["alignRight", "generateLink", "items", "label"];
|
|
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 _getRequireWildcardCache(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
|
+
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
27
|
+
|
|
28
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
29
|
+
|
|
30
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
31
|
+
|
|
32
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
33
|
+
|
|
34
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
35
|
+
|
|
36
|
+
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
37
|
+
|
|
38
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
39
|
+
|
|
40
|
+
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
41
|
+
|
|
42
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* This component is used internally to display menus inside the Navigation component.
|
|
46
|
+
*/
|
|
47
|
+
var NavigationMenu = function NavigationMenu(_ref) {
|
|
48
|
+
var alignRight = _ref.alignRight,
|
|
49
|
+
generateLink = _ref.generateLink,
|
|
50
|
+
items = _ref.items,
|
|
51
|
+
label = _ref.label,
|
|
52
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
53
|
+
|
|
54
|
+
var _useState = (0, _react.useState)(false),
|
|
55
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
56
|
+
isOpen = _useState2[0],
|
|
57
|
+
setIsOpen = _useState2[1];
|
|
58
|
+
|
|
59
|
+
var closeMenu = (0, _react.useCallback)(function () {
|
|
60
|
+
return setIsOpen(false);
|
|
61
|
+
}, [setIsOpen]);
|
|
62
|
+
|
|
63
|
+
var _useClickOutside = (0, _hooks.useClickOutside)(closeMenu),
|
|
64
|
+
_useClickOutside2 = _slicedToArray(_useClickOutside, 2),
|
|
65
|
+
menuRef = _useClickOutside2[0],
|
|
66
|
+
menuId = _useClickOutside2[1];
|
|
67
|
+
|
|
68
|
+
return /*#__PURE__*/_react.default.createElement("li", _extends({}, props, {
|
|
69
|
+
className: (0, _classnames.default)(props.className, "p-navigation__item--dropdown-toggle", {
|
|
70
|
+
"is-active": isOpen
|
|
71
|
+
})
|
|
72
|
+
}), /*#__PURE__*/_react.default.createElement("button", {
|
|
73
|
+
"aria-controls": menuId,
|
|
74
|
+
className: "p-navigation__link u-no-margin--right",
|
|
75
|
+
onClick: function onClick(evt) {
|
|
76
|
+
evt.preventDefault();
|
|
77
|
+
setIsOpen(!isOpen);
|
|
78
|
+
},
|
|
79
|
+
ref: menuRef
|
|
80
|
+
}, label), /*#__PURE__*/_react.default.createElement("ul", {
|
|
81
|
+
"aria-hidden": !isOpen,
|
|
82
|
+
className: (0, _classnames.default)("p-navigation__dropdown", {
|
|
83
|
+
"p-navigation__dropdown--right": alignRight
|
|
84
|
+
}),
|
|
85
|
+
id: menuId
|
|
86
|
+
}, items.map(function (item, i) {
|
|
87
|
+
return /*#__PURE__*/_react.default.createElement("li", {
|
|
88
|
+
key: i
|
|
89
|
+
}, /*#__PURE__*/_react.default.createElement(_NavigationLink.default, _extends({}, item, {
|
|
90
|
+
generateLink: generateLink,
|
|
91
|
+
className: (0, _classnames.default)("p-navigation__dropdown-item", item.className)
|
|
92
|
+
})));
|
|
93
|
+
})));
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
var _default = NavigationMenu;
|
|
97
|
+
exports.default = _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from "./NavigationMenu";
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "default", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function get() {
|
|
9
|
+
return _NavigationMenu.default;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
var _NavigationMenu = _interopRequireDefault(require("./NavigationMenu"));
|
|
14
|
+
|
|
15
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "default", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function get() {
|
|
9
|
+
return _Navigation.default;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
var _Navigation = _interopRequireDefault(require("./Navigation"));
|
|
14
|
+
|
|
15
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { HTMLProps, ReactNode } from "react";
|
|
2
|
+
import { PropsWithSpread } from "../../types";
|
|
3
|
+
export declare type NavLink = PropsWithSpread<{
|
|
4
|
+
/**
|
|
5
|
+
* Whether this nav item is currently selected.
|
|
6
|
+
*/
|
|
7
|
+
isSelected?: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* The label of the link.
|
|
10
|
+
*/
|
|
11
|
+
label: ReactNode;
|
|
12
|
+
/**
|
|
13
|
+
* The URL of the link.
|
|
14
|
+
*/
|
|
15
|
+
url?: string;
|
|
16
|
+
}, HTMLProps<HTMLAnchorElement>>;
|
|
17
|
+
export declare type NavMenu = {
|
|
18
|
+
/**
|
|
19
|
+
* Whether to align the dropdown to the right edge of the navigation item.
|
|
20
|
+
*/
|
|
21
|
+
alignRight?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* The links to appear in the dropdown.
|
|
24
|
+
*/
|
|
25
|
+
items: NavLink[];
|
|
26
|
+
/**
|
|
27
|
+
* The label of the navigation item that opens the menu.
|
|
28
|
+
*/
|
|
29
|
+
label: string;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Navigation items which can be either a link or a menu containing links.
|
|
33
|
+
*/
|
|
34
|
+
export declare type NavItem = NavLink | NavMenu;
|
|
35
|
+
/**
|
|
36
|
+
* A function that can be used to generate link elements when you don't want to
|
|
37
|
+
* use a standard HTML anchor.
|
|
38
|
+
*/
|
|
39
|
+
export declare type GenerateLink = (item: NavLink) => ReactNode;
|
|
40
|
+
export declare type LogoProps = PropsWithSpread<{
|
|
41
|
+
/**
|
|
42
|
+
* An icon to display in the tag.
|
|
43
|
+
*/
|
|
44
|
+
icon?: ReactNode;
|
|
45
|
+
/**
|
|
46
|
+
* The logo image source URL.
|
|
47
|
+
*/
|
|
48
|
+
src?: string;
|
|
49
|
+
/**
|
|
50
|
+
* The site's title.
|
|
51
|
+
*/
|
|
52
|
+
title: string;
|
|
53
|
+
/**
|
|
54
|
+
* The URL to navigate to when the logo is clicked.
|
|
55
|
+
*/
|
|
56
|
+
url: string;
|
|
57
|
+
}, HTMLProps<HTMLDivElement>>;
|
|
@@ -23,7 +23,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
23
23
|
|
|
24
24
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
25
25
|
|
|
26
|
-
function _extends() { _extends = Object.assign
|
|
26
|
+
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
27
27
|
|
|
28
28
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
29
29
|
|
|
@@ -27,7 +27,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
27
27
|
|
|
28
28
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
29
29
|
|
|
30
|
-
function _extends() { _extends = Object.assign
|
|
30
|
+
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
31
31
|
|
|
32
32
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
33
33
|
|
|
@@ -13,7 +13,7 @@ var _excluded = ["label"];
|
|
|
13
13
|
|
|
14
14
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
15
|
|
|
16
|
-
function _extends() { _extends = Object.assign
|
|
16
|
+
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
17
17
|
|
|
18
18
|
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
19
19
|
|
|
@@ -13,7 +13,7 @@ var _excluded = ["children", "className"];
|
|
|
13
13
|
|
|
14
14
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
15
|
|
|
16
|
-
function _extends() { _extends = Object.assign
|
|
16
|
+
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
17
17
|
|
|
18
18
|
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
19
19
|
|