@pingux/astro 2.155.0-alpha.0 → 2.155.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/lib/cjs/components/Button/Buttons.styles.d.ts +859 -0
- package/lib/cjs/components/Button/Buttons.styles.js +17 -1
- package/lib/cjs/components/SearchNav/MoreItemsPopover.d.ts +4 -0
- package/lib/cjs/components/SearchNav/MoreItemsPopover.js +74 -0
- package/lib/cjs/components/SearchNav/SearchNav.chromatic.stories.d.ts +6 -0
- package/lib/cjs/components/SearchNav/SearchNav.chromatic.stories.js +101 -0
- package/lib/cjs/components/SearchNav/SearchNav.d.ts +13 -0
- package/lib/cjs/components/SearchNav/SearchNav.js +218 -0
- package/lib/cjs/components/SearchNav/SearchNav.stories.d.ts +6 -0
- package/lib/cjs/components/SearchNav/SearchNav.stories.js +76 -0
- package/lib/cjs/components/SearchNav/SearchNav.styles.d.ts +33 -0
- package/lib/cjs/components/SearchNav/SearchNav.styles.js +51 -0
- package/lib/cjs/components/SearchNav/SearchNav.test.d.ts +1 -0
- package/lib/cjs/components/SearchNav/SearchNav.test.js +610 -0
- package/lib/cjs/components/SearchNav/SearchNavTab.d.ts +4 -0
- package/lib/cjs/components/SearchNav/SearchNavTab.js +69 -0
- package/lib/cjs/components/SearchNav/index.d.ts +1 -0
- package/lib/cjs/components/SearchNav/index.js +14 -0
- package/lib/cjs/components/Text/Text.styles.d.ts +2548 -0
- package/lib/cjs/components/Text/Text.styles.js +23 -1
- package/lib/cjs/index.d.ts +2 -0
- package/lib/cjs/index.js +45 -26
- package/lib/cjs/styles/colors.d.ts +6 -0
- package/lib/cjs/styles/colors.js +4 -0
- package/lib/cjs/styles/themeOverrides/nextGenDarkMode/colors.d.ts +1 -0
- package/lib/cjs/styles/themeOverrides/nextGenDarkMode/colors.js +2 -1
- package/lib/cjs/styles/themeOverrides/nextGenDarkMode/variants/buttons.d.ts +9 -0
- package/lib/cjs/styles/themeOverrides/nextGenDarkMode/variants/buttons.js +10 -0
- package/lib/cjs/styles/themeOverrides/nextGenDarkMode/variants/text.d.ts +12 -0
- package/lib/cjs/styles/themeOverrides/nextGenDarkMode/variants/text.js +12 -0
- package/lib/cjs/styles/themes/next-gen/convertedComponentList.js +1 -1
- package/lib/cjs/styles/themes/next-gen/next-gen.d.ts +15 -0
- package/lib/cjs/styles/themes/next-gen/variants/button.d.ts +9 -0
- package/lib/cjs/styles/themes/next-gen/variants/button.js +10 -0
- package/lib/cjs/styles/themes/next-gen/variants/searchNav.d.ts +6 -0
- package/lib/cjs/styles/themes/next-gen/variants/searchNav.js +14 -0
- package/lib/cjs/styles/themes/next-gen/variants/text.d.ts +1 -0
- package/lib/cjs/styles/themes/next-gen/variants/text.js +2 -1
- package/lib/cjs/styles/themes/next-gen/variants/variants.d.ts +5 -0
- package/lib/cjs/styles/themes/next-gen/variants/variants.js +2 -0
- package/lib/cjs/styles/variants/variants.js +2 -0
- package/lib/cjs/types/searchNav.d.ts +49 -0
- package/lib/cjs/types/searchNav.js +6 -0
- package/lib/components/Button/Buttons.styles.js +18 -2
- package/lib/components/SearchNav/MoreItemsPopover.js +60 -0
- package/lib/components/SearchNav/SearchNav.chromatic.stories.js +86 -0
- package/lib/components/SearchNav/SearchNav.js +203 -0
- package/lib/components/SearchNav/SearchNav.stories.js +61 -0
- package/lib/components/SearchNav/SearchNav.styles.js +43 -0
- package/lib/components/SearchNav/SearchNav.test.js +601 -0
- package/lib/components/SearchNav/SearchNavTab.js +55 -0
- package/lib/components/SearchNav/index.js +1 -0
- package/lib/components/Text/Text.styles.js +21 -1
- package/lib/index.js +2 -0
- package/lib/styles/colors.js +4 -0
- package/lib/styles/themeOverrides/nextGenDarkMode/colors.js +2 -1
- package/lib/styles/themeOverrides/nextGenDarkMode/variants/buttons.js +10 -0
- package/lib/styles/themeOverrides/nextGenDarkMode/variants/text.js +12 -0
- package/lib/styles/themes/next-gen/convertedComponentList.js +1 -1
- package/lib/styles/themes/next-gen/variants/button.js +10 -0
- package/lib/styles/themes/next-gen/variants/searchNav.js +6 -0
- package/lib/styles/themes/next-gen/variants/text.js +2 -1
- package/lib/styles/themes/next-gen/variants/variants.js +2 -0
- package/lib/styles/variants/variants.js +2 -0
- package/lib/types/searchNav.js +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Dispatch, Key, MutableRefObject, SetStateAction } from 'react';
|
|
2
|
+
import { BoxProps } from './box';
|
|
3
|
+
import { ButtonProps } from './button';
|
|
4
|
+
import { MenuProps } from './menu';
|
|
5
|
+
import { PopoverMenuProps } from './popoverMenu';
|
|
6
|
+
import { TabProps } from './tab';
|
|
7
|
+
import { TextProps } from './text';
|
|
8
|
+
type GenericItemType = {
|
|
9
|
+
text: string;
|
|
10
|
+
key: Key;
|
|
11
|
+
};
|
|
12
|
+
type StandardCallback = (key: Key) => void;
|
|
13
|
+
type KeySetter = Dispatch<SetStateAction<Key>>;
|
|
14
|
+
type CallbackOrSetter = StandardCallback | KeySetter;
|
|
15
|
+
export interface MoreItemsPopoverProps {
|
|
16
|
+
buttonRef: MutableRefObject<HTMLButtonElement | null>;
|
|
17
|
+
items: GenericItemType[];
|
|
18
|
+
moreButtonText?: string;
|
|
19
|
+
onOpenChange?: (isOpen: boolean) => void;
|
|
20
|
+
popoverButtonProps?: ButtonProps;
|
|
21
|
+
popoverMenuProps?: MenuProps;
|
|
22
|
+
popoverProps?: PopoverMenuProps;
|
|
23
|
+
setSelectedKey: (key: Key) => void;
|
|
24
|
+
tabProps?: TabProps;
|
|
25
|
+
}
|
|
26
|
+
export interface SearchNavTabProps {
|
|
27
|
+
className?: string;
|
|
28
|
+
item: GenericItemType;
|
|
29
|
+
labelProps?: TextProps;
|
|
30
|
+
selectedKey?: Key;
|
|
31
|
+
setSelectedKey: (key: Key) => void;
|
|
32
|
+
tabProps?: TabProps;
|
|
33
|
+
}
|
|
34
|
+
export interface SearchNavProps {
|
|
35
|
+
defaultSelectedKey?: Key;
|
|
36
|
+
items: GenericItemType[];
|
|
37
|
+
labelProps?: TextProps;
|
|
38
|
+
moreButtonText?: string;
|
|
39
|
+
onSelectionChange?: (key?: Key | null) => void;
|
|
40
|
+
popoverButtonProps?: ButtonProps;
|
|
41
|
+
popoverMenuProps?: MenuProps;
|
|
42
|
+
popoverProps?: PopoverMenuProps;
|
|
43
|
+
rowProps?: BoxProps;
|
|
44
|
+
selectedKey?: Key;
|
|
45
|
+
setSelectedKey?: CallbackOrSetter;
|
|
46
|
+
onOpenChange?: (isOpen: boolean) => void;
|
|
47
|
+
tabProps?: TabProps;
|
|
48
|
+
}
|
|
49
|
+
export {};
|
|
@@ -9,7 +9,7 @@ import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object
|
|
|
9
9
|
import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
|
|
10
10
|
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
11
11
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
12
|
-
import { text as textVariants } from '../Text/Text.styles';
|
|
12
|
+
import { searchNavTabLabel, text as textVariants } from '../Text/Text.styles';
|
|
13
13
|
export var base = _objectSpread({
|
|
14
14
|
cursor: 'pointer',
|
|
15
15
|
height: '37px',
|
|
@@ -280,6 +280,21 @@ var exampleText = _objectSpread(_objectSpread({}, base), {}, {
|
|
|
280
280
|
var paginationMenu = _objectSpread(_objectSpread({}, link), {}, {
|
|
281
281
|
fontWeight: 0
|
|
282
282
|
});
|
|
283
|
+
var tabLabelButton = _objectSpread(_objectSpread({}, searchNavTabLabel), {}, {
|
|
284
|
+
backgroundColor: 'transparent',
|
|
285
|
+
mb: '10px',
|
|
286
|
+
p: '0px',
|
|
287
|
+
borderImage: 'none',
|
|
288
|
+
display: 'inline-flex',
|
|
289
|
+
alignItems: 'center',
|
|
290
|
+
'&.is-hovered': {
|
|
291
|
+
color: 'active',
|
|
292
|
+
cursor: 'pointer'
|
|
293
|
+
},
|
|
294
|
+
'&.is-focused': _objectSpread(_objectSpread({}, defaultFocus), {}, {
|
|
295
|
+
borderRadius: '4px'
|
|
296
|
+
})
|
|
297
|
+
});
|
|
283
298
|
export default {
|
|
284
299
|
colorBlock: colorBlock,
|
|
285
300
|
colorBlockPrimary: colorBlockPrimary,
|
|
@@ -306,5 +321,6 @@ export default {
|
|
|
306
321
|
quiet: quiet,
|
|
307
322
|
success: success,
|
|
308
323
|
withIcon: withIcon,
|
|
309
|
-
filter: filter
|
|
324
|
+
filter: filter,
|
|
325
|
+
searchNavTabLabel: tabLabelButton
|
|
310
326
|
};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
|
|
2
|
+
import _slicedToArray from "@babel/runtime-corejs3/helpers/esm/slicedToArray";
|
|
3
|
+
import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
|
|
4
|
+
import React, { useEffect, useState } from 'react';
|
|
5
|
+
import DownIcon from '@pingux/mdi-react/ChevronDownIcon';
|
|
6
|
+
import UpIcon from '@pingux/mdi-react/ChevronUpIcon';
|
|
7
|
+
import { Box, Button, Icon, Item, Menu, PopoverMenu } from '../../index';
|
|
8
|
+
import { jsx as ___EmotionJSX } from "@emotion/react";
|
|
9
|
+
var MoreItemsPopover = function MoreItemsPopover(props) {
|
|
10
|
+
var buttonRef = props.buttonRef,
|
|
11
|
+
items = props.items,
|
|
12
|
+
moreButtonText = props.moreButtonText,
|
|
13
|
+
onOpenChange = props.onOpenChange,
|
|
14
|
+
popoverButtonProps = props.popoverButtonProps,
|
|
15
|
+
popoverMenuProps = props.popoverMenuProps,
|
|
16
|
+
popoverProps = props.popoverProps,
|
|
17
|
+
setSelectedKey = props.setSelectedKey,
|
|
18
|
+
tabProps = props.tabProps;
|
|
19
|
+
var _useState = useState(false),
|
|
20
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
21
|
+
isOpen = _useState2[0],
|
|
22
|
+
setIsOpen = _useState2[1];
|
|
23
|
+
useEffect(function () {
|
|
24
|
+
if (onOpenChange) {
|
|
25
|
+
onOpenChange(isOpen);
|
|
26
|
+
}
|
|
27
|
+
}, [isOpen]);
|
|
28
|
+
return ___EmotionJSX(Box, _extends({
|
|
29
|
+
role: "listitem",
|
|
30
|
+
variant: "searchNav.tab",
|
|
31
|
+
isRow: true,
|
|
32
|
+
alignItems: "center",
|
|
33
|
+
ml: "sm"
|
|
34
|
+
}, tabProps), ___EmotionJSX(PopoverMenu, _extends({}, popoverProps, {
|
|
35
|
+
isOpen: isOpen,
|
|
36
|
+
onOpenChange: setIsOpen
|
|
37
|
+
}), ___EmotionJSX(Button, _extends({
|
|
38
|
+
tabIndex: 0,
|
|
39
|
+
variant: "searchNavTabLabel",
|
|
40
|
+
ref: buttonRef
|
|
41
|
+
}, popoverButtonProps), moreButtonText, ___EmotionJSX(Icon, {
|
|
42
|
+
icon: isOpen ? UpIcon : DownIcon,
|
|
43
|
+
ml: "2px",
|
|
44
|
+
mt: "2px",
|
|
45
|
+
size: 13,
|
|
46
|
+
title: {
|
|
47
|
+
name: 'Add Circle Icon'
|
|
48
|
+
}
|
|
49
|
+
})), ___EmotionJSX(Menu, _extends({
|
|
50
|
+
onAction: function onAction(e) {
|
|
51
|
+
setSelectedKey(e);
|
|
52
|
+
}
|
|
53
|
+
}, popoverMenuProps), _mapInstanceProperty(items).call(items, function (item) {
|
|
54
|
+
return ___EmotionJSX(Item, {
|
|
55
|
+
key: item.key,
|
|
56
|
+
textValue: item.text
|
|
57
|
+
}, item.text);
|
|
58
|
+
}))));
|
|
59
|
+
};
|
|
60
|
+
export default MoreItemsPopover;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime-corejs3/helpers/esm/slicedToArray";
|
|
2
|
+
import _findInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/find";
|
|
3
|
+
import React, { useState } from 'react';
|
|
4
|
+
import { Box, SearchNav, Text } from '../../index';
|
|
5
|
+
import { jsx as ___EmotionJSX } from "@emotion/react";
|
|
6
|
+
export default {
|
|
7
|
+
title: 'Chromatic Only Search Nav Responsive'
|
|
8
|
+
};
|
|
9
|
+
var items = [{
|
|
10
|
+
text: 'Overview',
|
|
11
|
+
key: 'Overview',
|
|
12
|
+
children: ___EmotionJSX(Text, null, "Overview")
|
|
13
|
+
}, {
|
|
14
|
+
text: 'Configuration',
|
|
15
|
+
key: 'Configuration',
|
|
16
|
+
children: ___EmotionJSX(Text, null, "Configuration")
|
|
17
|
+
}, {
|
|
18
|
+
text: 'Resources',
|
|
19
|
+
key: 'Resources',
|
|
20
|
+
children: ___EmotionJSX(Text, null, "Resources")
|
|
21
|
+
}, {
|
|
22
|
+
text: 'Policies',
|
|
23
|
+
key: 'Policies',
|
|
24
|
+
children: ___EmotionJSX(Text, null, "Policies")
|
|
25
|
+
}, {
|
|
26
|
+
text: 'Attribute Mappings',
|
|
27
|
+
key: 'Attribute Mappings',
|
|
28
|
+
children: ___EmotionJSX(Text, null, "Attribute body")
|
|
29
|
+
}, {
|
|
30
|
+
text: 'Access',
|
|
31
|
+
key: 'Access',
|
|
32
|
+
children: ___EmotionJSX(Text, null, "Access")
|
|
33
|
+
}, {
|
|
34
|
+
text: 'Integration',
|
|
35
|
+
key: 'Integration',
|
|
36
|
+
children: ___EmotionJSX(Text, null, "Integration")
|
|
37
|
+
}];
|
|
38
|
+
export var Default = function Default() {
|
|
39
|
+
var _items$find, _items$find2, _items$find3;
|
|
40
|
+
var _useState = useState('Access'),
|
|
41
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
42
|
+
selectedKey = _useState2[0],
|
|
43
|
+
setSelectedKey = _useState2[1];
|
|
44
|
+
var setSelectedKeyCallback = function setSelectedKeyCallback(e) {
|
|
45
|
+
setSelectedKey(e);
|
|
46
|
+
};
|
|
47
|
+
return ___EmotionJSX(Box, {
|
|
48
|
+
gap: "md"
|
|
49
|
+
}, ___EmotionJSX(Box, {
|
|
50
|
+
maxWidth: "600px"
|
|
51
|
+
}, ___EmotionJSX(SearchNav, {
|
|
52
|
+
items: items,
|
|
53
|
+
selectedKey: selectedKey,
|
|
54
|
+
setSelectedKey: function setSelectedKey(e) {
|
|
55
|
+
return setSelectedKeyCallback(e);
|
|
56
|
+
}
|
|
57
|
+
}), ___EmotionJSX(Box, {
|
|
58
|
+
p: "sm"
|
|
59
|
+
}, (_items$find = _findInstanceProperty(items).call(items, function (item) {
|
|
60
|
+
return item.key === selectedKey;
|
|
61
|
+
})) === null || _items$find === void 0 ? void 0 : _items$find.children)), ___EmotionJSX(Box, {
|
|
62
|
+
maxWidth: "400px"
|
|
63
|
+
}, ___EmotionJSX(SearchNav, {
|
|
64
|
+
items: items,
|
|
65
|
+
selectedKey: selectedKey,
|
|
66
|
+
setSelectedKey: function setSelectedKey(e) {
|
|
67
|
+
return setSelectedKeyCallback(e);
|
|
68
|
+
}
|
|
69
|
+
}), ___EmotionJSX(Box, {
|
|
70
|
+
p: "sm"
|
|
71
|
+
}, (_items$find2 = _findInstanceProperty(items).call(items, function (item) {
|
|
72
|
+
return item.key === selectedKey;
|
|
73
|
+
})) === null || _items$find2 === void 0 ? void 0 : _items$find2.children)), ___EmotionJSX(Box, {
|
|
74
|
+
maxWidth: "200px"
|
|
75
|
+
}, ___EmotionJSX(SearchNav, {
|
|
76
|
+
items: items,
|
|
77
|
+
selectedKey: selectedKey,
|
|
78
|
+
setSelectedKey: function setSelectedKey(e) {
|
|
79
|
+
return setSelectedKeyCallback(e);
|
|
80
|
+
}
|
|
81
|
+
}), ___EmotionJSX(Box, {
|
|
82
|
+
p: "sm"
|
|
83
|
+
}, (_items$find3 = _findInstanceProperty(items).call(items, function (item) {
|
|
84
|
+
return item.key === selectedKey;
|
|
85
|
+
})) === null || _items$find3 === void 0 ? void 0 : _items$find3.children)));
|
|
86
|
+
};
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
|
|
2
|
+
import _slicedToArray from "@babel/runtime-corejs3/helpers/esm/slicedToArray";
|
|
3
|
+
import _objectWithoutProperties from "@babel/runtime-corejs3/helpers/esm/objectWithoutProperties";
|
|
4
|
+
var _excluded = ["defaultSelectedKey", "items", "labelProps", "moreButtonText", "onSelectionChange", "onOpenChange", "popoverButtonProps", "popoverMenuProps", "popoverProps", "rowProps", "selectedKey", "setSelectedKey", "tabProps"];
|
|
5
|
+
import _Array$from from "@babel/runtime-corejs3/core-js-stable/array/from";
|
|
6
|
+
import _sliceInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/slice";
|
|
7
|
+
import _findIndexInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/find-index";
|
|
8
|
+
import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
|
|
9
|
+
import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
|
|
10
|
+
import React, { forwardRef, useEffect, useMemo, useRef, useState } from 'react';
|
|
11
|
+
import { useLayoutEffect, useResizeObserver } from '@react-aria/utils';
|
|
12
|
+
import { useLocalOrForwardRef } from '../../hooks';
|
|
13
|
+
import useProgressiveState from '../../hooks/useProgressiveState';
|
|
14
|
+
import { Box, Text } from '../../index';
|
|
15
|
+
import MoreItemsPopover from './MoreItemsPopover';
|
|
16
|
+
import SearchNavTab from './SearchNavTab';
|
|
17
|
+
import { jsx as ___EmotionJSX } from "@emotion/react";
|
|
18
|
+
var TAB_MARGIN_WIDTH = 10; // Example constant value
|
|
19
|
+
var MORE_BUTTON_WIDTH = 60;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* 1. Measures the width of all items based on their refs.
|
|
23
|
+
*/
|
|
24
|
+
export var measureItemWidths = function measureItemWidths(items, measurementRefs) {
|
|
25
|
+
var widths = {};
|
|
26
|
+
for (var i = 0; i < items.length; i += 1) {
|
|
27
|
+
var item = items[i];
|
|
28
|
+
var itemRef = measurementRefs.current[item.key];
|
|
29
|
+
if (itemRef) {
|
|
30
|
+
widths[item.key] = itemRef.offsetWidth;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return widths;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* 2. Calculates the number of visible items based on available container width
|
|
38
|
+
* and item widths.
|
|
39
|
+
*/
|
|
40
|
+
|
|
41
|
+
export var calculateVisibleCount = function calculateVisibleCount(containerWidth, moreButtonWidth, orderedItems, itemWidths) {
|
|
42
|
+
var totalItemsWidth = 0;
|
|
43
|
+
var visibleCount = 0;
|
|
44
|
+
for (var i = 0; i < orderedItems.length; i += 1) {
|
|
45
|
+
var item = orderedItems[i];
|
|
46
|
+
var itemWidth = itemWidths[item.key] + TAB_MARGIN_WIDTH;
|
|
47
|
+
if (itemWidth) {
|
|
48
|
+
var itemsRemaining = orderedItems.length - (visibleCount + 1);
|
|
49
|
+
// Only require space for 'more' button if there are items that will be hidden
|
|
50
|
+
var requiredSpaceForMoreButton = itemsRemaining > 0 ? moreButtonWidth : 0;
|
|
51
|
+
var widthNeeded = totalItemsWidth + itemWidth + requiredSpaceForMoreButton;
|
|
52
|
+
if (widthNeeded > containerWidth) {
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
totalItemsWidth += itemWidth;
|
|
56
|
+
visibleCount += 1;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return visibleCount;
|
|
60
|
+
};
|
|
61
|
+
var SearchNav = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
62
|
+
var defaultSelectedKey = props.defaultSelectedKey,
|
|
63
|
+
items = props.items,
|
|
64
|
+
labelProps = props.labelProps,
|
|
65
|
+
_props$moreButtonText = props.moreButtonText,
|
|
66
|
+
moreButtonText = _props$moreButtonText === void 0 ? 'More' : _props$moreButtonText,
|
|
67
|
+
onSelectionChange = props.onSelectionChange,
|
|
68
|
+
onOpenChange = props.onOpenChange,
|
|
69
|
+
popoverButtonProps = props.popoverButtonProps,
|
|
70
|
+
popoverMenuProps = props.popoverMenuProps,
|
|
71
|
+
popoverProps = props.popoverProps,
|
|
72
|
+
rowProps = props.rowProps,
|
|
73
|
+
selectedKeyProp = props.selectedKey,
|
|
74
|
+
setSelectedKeyProp = props.setSelectedKey,
|
|
75
|
+
tabProps = props.tabProps,
|
|
76
|
+
others = _objectWithoutProperties(props, _excluded);
|
|
77
|
+
var _useProgressiveState = useProgressiveState(selectedKeyProp, defaultSelectedKey),
|
|
78
|
+
_useProgressiveState2 = _slicedToArray(_useProgressiveState, 2),
|
|
79
|
+
selectedKey = _useProgressiveState2[0],
|
|
80
|
+
setSelectedKey = _useProgressiveState2[1];
|
|
81
|
+
var _useState = useState(_Array$from(items)),
|
|
82
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
83
|
+
orderedItems = _useState2[0],
|
|
84
|
+
setOrderedItems = _useState2[1];
|
|
85
|
+
var buttonRef = useRef(null);
|
|
86
|
+
var measurementRefs = useRef({});
|
|
87
|
+
var tabListRef = useLocalOrForwardRef(ref);
|
|
88
|
+
var _useState3 = useState(items.length),
|
|
89
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
90
|
+
numVisibleItems = _useState4[0],
|
|
91
|
+
setNumVisibleItems = _useState4[1];
|
|
92
|
+
useEffect(function () {
|
|
93
|
+
setOrderedItems(items);
|
|
94
|
+
}, [items]);
|
|
95
|
+
var calculateVisibleItems = function calculateVisibleItems() {
|
|
96
|
+
var _buttonRef$current;
|
|
97
|
+
if (!tabListRef.current) return;
|
|
98
|
+
|
|
99
|
+
// Step 1: Measure (updates itemWidths ref in parent scope if needed, or returns new object)
|
|
100
|
+
var currentItemWidths = measureItemWidths(items, measurementRefs);
|
|
101
|
+
var containerWidth = tabListRef.current.offsetWidth;
|
|
102
|
+
var moreButtonWidth = ((_buttonRef$current = buttonRef.current) === null || _buttonRef$current === void 0 ? void 0 : _buttonRef$current.offsetWidth) || MORE_BUTTON_WIDTH;
|
|
103
|
+
|
|
104
|
+
// Step 2: Calculate visible count (pure logic)
|
|
105
|
+
var visibleCount = calculateVisibleCount(containerWidth, moreButtonWidth, orderedItems, currentItemWidths);
|
|
106
|
+
|
|
107
|
+
// Step 3: Update state
|
|
108
|
+
setNumVisibleItems(visibleCount);
|
|
109
|
+
};
|
|
110
|
+
useResizeObserver({
|
|
111
|
+
ref: tabListRef,
|
|
112
|
+
onResize: calculateVisibleItems
|
|
113
|
+
});
|
|
114
|
+
var visibleItems = useMemo(function () {
|
|
115
|
+
return _sliceInstanceProperty(orderedItems).call(orderedItems, 0, numVisibleItems);
|
|
116
|
+
}, [orderedItems, numVisibleItems]);
|
|
117
|
+
var hiddenItems = useMemo(function () {
|
|
118
|
+
return _sliceInstanceProperty(orderedItems).call(orderedItems, numVisibleItems);
|
|
119
|
+
}, [orderedItems, numVisibleItems]);
|
|
120
|
+
useEffect(function () {
|
|
121
|
+
if (onSelectionChange) {
|
|
122
|
+
onSelectionChange(selectedKey);
|
|
123
|
+
}
|
|
124
|
+
}, [selectedKey]);
|
|
125
|
+
useLayoutEffect(function () {
|
|
126
|
+
calculateVisibleItems();
|
|
127
|
+
}, [items]);
|
|
128
|
+
var reorderTabs = function reorderTabs() {
|
|
129
|
+
var selectedIndex = _findIndexInstanceProperty(orderedItems).call(orderedItems, function (item) {
|
|
130
|
+
return item.key === selectedKey;
|
|
131
|
+
});
|
|
132
|
+
var isSelectedHidden = selectedIndex >= numVisibleItems;
|
|
133
|
+
if (isSelectedHidden && selectedIndex !== -1 && numVisibleItems > 0) {
|
|
134
|
+
var _context;
|
|
135
|
+
var newOrderedItems = _concatInstanceProperty(_context = []).call(_context, orderedItems);
|
|
136
|
+
var selectedItem = newOrderedItems[selectedIndex];
|
|
137
|
+
var displacedItem = newOrderedItems[numVisibleItems - 1];
|
|
138
|
+
newOrderedItems[numVisibleItems - 1] = selectedItem;
|
|
139
|
+
newOrderedItems[selectedIndex] = displacedItem;
|
|
140
|
+
setOrderedItems(newOrderedItems);
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
useEffect(function () {
|
|
144
|
+
reorderTabs();
|
|
145
|
+
}, [selectedKey, numVisibleItems]);
|
|
146
|
+
var handleSelection = function handleSelection(key) {
|
|
147
|
+
setSelectedKey(key);
|
|
148
|
+
if (setSelectedKeyProp) {
|
|
149
|
+
setSelectedKeyProp(key);
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
return ___EmotionJSX(Box, {
|
|
153
|
+
maxWidth: "100%",
|
|
154
|
+
role: "navigation"
|
|
155
|
+
}, ___EmotionJSX(Box, _extends({
|
|
156
|
+
role: "list",
|
|
157
|
+
isRow: true,
|
|
158
|
+
ref: tabListRef,
|
|
159
|
+
alignItems: "center",
|
|
160
|
+
variant: "searchNav.list"
|
|
161
|
+
}, others, rowProps), _mapInstanceProperty(visibleItems).call(visibleItems, function (item) {
|
|
162
|
+
return ___EmotionJSX(SearchNavTab, {
|
|
163
|
+
key: item.key,
|
|
164
|
+
item: item,
|
|
165
|
+
selectedKey: selectedKey,
|
|
166
|
+
setSelectedKey: handleSelection,
|
|
167
|
+
tabProps: tabProps,
|
|
168
|
+
labelProps: labelProps
|
|
169
|
+
});
|
|
170
|
+
}), hiddenItems.length > 0 && ___EmotionJSX(MoreItemsPopover, {
|
|
171
|
+
onOpenChange: onOpenChange,
|
|
172
|
+
items: hiddenItems,
|
|
173
|
+
setSelectedKey: handleSelection,
|
|
174
|
+
buttonRef: buttonRef,
|
|
175
|
+
tabProps: tabProps,
|
|
176
|
+
popoverProps: popoverProps,
|
|
177
|
+
popoverButtonProps: popoverButtonProps,
|
|
178
|
+
popoverMenuProps: popoverMenuProps,
|
|
179
|
+
moreButtonText: moreButtonText
|
|
180
|
+
})), ___EmotionJSX(Box
|
|
181
|
+
// Off-screen positioning to allow measurement without affecting layout
|
|
182
|
+
, {
|
|
183
|
+
sx: {
|
|
184
|
+
position: 'absolute',
|
|
185
|
+
top: 0,
|
|
186
|
+
left: '-9999px',
|
|
187
|
+
overflow: 'hidden'
|
|
188
|
+
}
|
|
189
|
+
}, _mapInstanceProperty(items).call(items, function (item) {
|
|
190
|
+
return ___EmotionJSX(Box, {
|
|
191
|
+
sx: {
|
|
192
|
+
maxWidth: 'fit-content'
|
|
193
|
+
},
|
|
194
|
+
key: "".concat(item.key, "-box")
|
|
195
|
+
}, ___EmotionJSX(Text, {
|
|
196
|
+
key: "hidden-".concat(item.key),
|
|
197
|
+
ref: function ref(el) {
|
|
198
|
+
measurementRefs.current[item.key] = el;
|
|
199
|
+
}
|
|
200
|
+
}, item.text));
|
|
201
|
+
})));
|
|
202
|
+
});
|
|
203
|
+
export default SearchNav;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime-corejs3/helpers/esm/slicedToArray";
|
|
2
|
+
import _findInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/find";
|
|
3
|
+
import React, { useState } from 'react';
|
|
4
|
+
import { Box, Text } from '../../index';
|
|
5
|
+
import SearchNav from './SearchNav';
|
|
6
|
+
import { jsx as ___EmotionJSX } from "@emotion/react";
|
|
7
|
+
export default {
|
|
8
|
+
title: 'Components/SearchNav'
|
|
9
|
+
};
|
|
10
|
+
var items = [{
|
|
11
|
+
text: 'Overview',
|
|
12
|
+
key: 'Overview',
|
|
13
|
+
children: ___EmotionJSX(Text, null, "Overview")
|
|
14
|
+
}, {
|
|
15
|
+
text: 'Configuration',
|
|
16
|
+
key: 'Configuration',
|
|
17
|
+
children: ___EmotionJSX(Text, null, "Configuration")
|
|
18
|
+
}, {
|
|
19
|
+
text: 'Resources',
|
|
20
|
+
key: 'Resources',
|
|
21
|
+
children: ___EmotionJSX(Text, null, "Resources")
|
|
22
|
+
}, {
|
|
23
|
+
text: 'Policies',
|
|
24
|
+
key: 'Policies',
|
|
25
|
+
children: ___EmotionJSX(Text, null, "Policies")
|
|
26
|
+
}, {
|
|
27
|
+
text: 'Attribute Mappings',
|
|
28
|
+
key: 'Attribute Mappings',
|
|
29
|
+
children: ___EmotionJSX(Text, null, "Attribute body")
|
|
30
|
+
}, {
|
|
31
|
+
text: 'Access',
|
|
32
|
+
key: 'Access',
|
|
33
|
+
children: ___EmotionJSX(Text, null, "Access")
|
|
34
|
+
}, {
|
|
35
|
+
text: 'Integration',
|
|
36
|
+
key: 'Integration',
|
|
37
|
+
children: ___EmotionJSX(Text, null, "Integration")
|
|
38
|
+
}];
|
|
39
|
+
export var Default = function Default() {
|
|
40
|
+
var _items$find;
|
|
41
|
+
var _useState = useState('Policies'),
|
|
42
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
43
|
+
selectedKey = _useState2[0],
|
|
44
|
+
setSelectedKey = _useState2[1];
|
|
45
|
+
var setSelectedKeyCallback = function setSelectedKeyCallback(e) {
|
|
46
|
+
setSelectedKey(e);
|
|
47
|
+
};
|
|
48
|
+
return ___EmotionJSX(Box, {
|
|
49
|
+
maxWidth: "600px"
|
|
50
|
+
}, ___EmotionJSX(SearchNav, {
|
|
51
|
+
items: items,
|
|
52
|
+
selectedKey: selectedKey,
|
|
53
|
+
setSelectedKey: function setSelectedKey(e) {
|
|
54
|
+
return setSelectedKeyCallback(e);
|
|
55
|
+
}
|
|
56
|
+
}), ___EmotionJSX(Box, {
|
|
57
|
+
p: "sm"
|
|
58
|
+
}, (_items$find = _findInstanceProperty(items).call(items, function (item) {
|
|
59
|
+
return item.key === selectedKey;
|
|
60
|
+
})) === null || _items$find === void 0 ? void 0 : _items$find.children));
|
|
61
|
+
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
|
|
2
|
+
import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
|
|
3
|
+
import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
|
|
4
|
+
import _Object$getOwnPropertyDescriptor from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor";
|
|
5
|
+
import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each";
|
|
6
|
+
import _Object$getOwnPropertyDescriptors from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors";
|
|
7
|
+
import _Object$defineProperties from "@babel/runtime-corejs3/core-js-stable/object/define-properties";
|
|
8
|
+
import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property";
|
|
9
|
+
import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
|
|
10
|
+
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
11
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
12
|
+
import { defaultFocus } from '../Button/Buttons.styles';
|
|
13
|
+
var tab = {
|
|
14
|
+
pt: 'md',
|
|
15
|
+
cursor: 'pointer',
|
|
16
|
+
alignItems: 'center',
|
|
17
|
+
display: 'inline-flex',
|
|
18
|
+
borderBottom: '2px solid transparent',
|
|
19
|
+
outline: 'none',
|
|
20
|
+
marginBottom: '-1px',
|
|
21
|
+
position: 'relative',
|
|
22
|
+
zIndex: '2',
|
|
23
|
+
'&.is-focused': {
|
|
24
|
+
'& > span': _objectSpread(_objectSpread({}, defaultFocus), {}, {
|
|
25
|
+
borderRadius: '4px'
|
|
26
|
+
})
|
|
27
|
+
},
|
|
28
|
+
'&.is-disabled': {
|
|
29
|
+
cursor: 'default'
|
|
30
|
+
},
|
|
31
|
+
'&.is-selected': {
|
|
32
|
+
borderBottomWidth: '2px',
|
|
33
|
+
borderBottomColor: 'active'
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
var list = {
|
|
37
|
+
borderBottom: '1px solid',
|
|
38
|
+
borderBottomColor: 'border.hairline'
|
|
39
|
+
};
|
|
40
|
+
export default {
|
|
41
|
+
tab: tab,
|
|
42
|
+
list: list
|
|
43
|
+
};
|