@pingux/astro 2.155.0-alpha.0 → 2.155.0-alpha.1

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.
Files changed (66) hide show
  1. package/lib/cjs/components/Button/Buttons.styles.d.ts +859 -0
  2. package/lib/cjs/components/Button/Buttons.styles.js +17 -1
  3. package/lib/cjs/components/SearchNav/MoreItemsPopover.d.ts +4 -0
  4. package/lib/cjs/components/SearchNav/MoreItemsPopover.js +74 -0
  5. package/lib/cjs/components/SearchNav/SearchNav.chromatic.stories.d.ts +6 -0
  6. package/lib/cjs/components/SearchNav/SearchNav.chromatic.stories.js +101 -0
  7. package/lib/cjs/components/SearchNav/SearchNav.d.ts +13 -0
  8. package/lib/cjs/components/SearchNav/SearchNav.js +218 -0
  9. package/lib/cjs/components/SearchNav/SearchNav.stories.d.ts +6 -0
  10. package/lib/cjs/components/SearchNav/SearchNav.stories.js +76 -0
  11. package/lib/cjs/components/SearchNav/SearchNav.styles.d.ts +33 -0
  12. package/lib/cjs/components/SearchNav/SearchNav.styles.js +51 -0
  13. package/lib/cjs/components/SearchNav/SearchNav.test.d.ts +1 -0
  14. package/lib/cjs/components/SearchNav/SearchNav.test.js +610 -0
  15. package/lib/cjs/components/SearchNav/SearchNavTab.d.ts +4 -0
  16. package/lib/cjs/components/SearchNav/SearchNavTab.js +69 -0
  17. package/lib/cjs/components/SearchNav/index.d.ts +1 -0
  18. package/lib/cjs/components/SearchNav/index.js +14 -0
  19. package/lib/cjs/components/Text/Text.styles.d.ts +2548 -0
  20. package/lib/cjs/components/Text/Text.styles.js +23 -1
  21. package/lib/cjs/index.d.ts +2 -0
  22. package/lib/cjs/index.js +45 -26
  23. package/lib/cjs/styles/colors.d.ts +6 -0
  24. package/lib/cjs/styles/colors.js +4 -0
  25. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/colors.d.ts +1 -0
  26. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/colors.js +2 -1
  27. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/variants/buttons.d.ts +9 -0
  28. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/variants/buttons.js +10 -0
  29. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/variants/text.d.ts +12 -0
  30. package/lib/cjs/styles/themeOverrides/nextGenDarkMode/variants/text.js +12 -0
  31. package/lib/cjs/styles/themes/next-gen/convertedComponentList.js +1 -1
  32. package/lib/cjs/styles/themes/next-gen/next-gen.d.ts +15 -0
  33. package/lib/cjs/styles/themes/next-gen/variants/button.d.ts +9 -0
  34. package/lib/cjs/styles/themes/next-gen/variants/button.js +10 -0
  35. package/lib/cjs/styles/themes/next-gen/variants/searchNav.d.ts +6 -0
  36. package/lib/cjs/styles/themes/next-gen/variants/searchNav.js +14 -0
  37. package/lib/cjs/styles/themes/next-gen/variants/text.d.ts +1 -0
  38. package/lib/cjs/styles/themes/next-gen/variants/text.js +2 -1
  39. package/lib/cjs/styles/themes/next-gen/variants/variants.d.ts +5 -0
  40. package/lib/cjs/styles/themes/next-gen/variants/variants.js +2 -0
  41. package/lib/cjs/styles/variants/variants.js +2 -0
  42. package/lib/cjs/types/searchNav.d.ts +49 -0
  43. package/lib/cjs/types/searchNav.js +6 -0
  44. package/lib/components/Button/Buttons.styles.js +18 -2
  45. package/lib/components/SearchNav/MoreItemsPopover.js +60 -0
  46. package/lib/components/SearchNav/SearchNav.chromatic.stories.js +86 -0
  47. package/lib/components/SearchNav/SearchNav.js +203 -0
  48. package/lib/components/SearchNav/SearchNav.stories.js +61 -0
  49. package/lib/components/SearchNav/SearchNav.styles.js +43 -0
  50. package/lib/components/SearchNav/SearchNav.test.js +601 -0
  51. package/lib/components/SearchNav/SearchNavTab.js +55 -0
  52. package/lib/components/SearchNav/index.js +1 -0
  53. package/lib/components/Text/Text.styles.js +21 -1
  54. package/lib/index.js +2 -0
  55. package/lib/styles/colors.js +4 -0
  56. package/lib/styles/themeOverrides/nextGenDarkMode/colors.js +2 -1
  57. package/lib/styles/themeOverrides/nextGenDarkMode/variants/buttons.js +10 -0
  58. package/lib/styles/themeOverrides/nextGenDarkMode/variants/text.js +12 -0
  59. package/lib/styles/themes/next-gen/convertedComponentList.js +1 -1
  60. package/lib/styles/themes/next-gen/variants/button.js +10 -0
  61. package/lib/styles/themes/next-gen/variants/searchNav.js +6 -0
  62. package/lib/styles/themes/next-gen/variants/text.js +2 -1
  63. package/lib/styles/themes/next-gen/variants/variants.js +2 -0
  64. package/lib/styles/variants/variants.js +2 -0
  65. package/lib/types/searchNav.js +1 -0
  66. 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 {};
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
4
+ _Object$defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
@@ -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
+ };