@teambit/component 1.0.1218 → 1.0.1220
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/{preview-1791883225352.js → preview-1791913706953.js} +2 -2
- package/dist/ui/menu/menu-nav.js +55 -12
- package/dist/ui/menu/menu-nav.js.map +1 -1
- package/dist/ui/menu/menu.module.scss +25 -0
- package/dist/ui/menu/nav-plugin.d.ts +11 -0
- package/dist/ui/menu/nav-plugin.js.map +1 -1
- package/dist/ui/top-bar-nav/top-bar-nav.d.ts +1 -1
- package/dist/ui/top-bar-nav/top-bar-nav.js +6 -2
- package/dist/ui/top-bar-nav/top-bar-nav.js.map +1 -1
- package/package.json +21 -21
- package/ui/menu/menu-nav.tsx +73 -26
- package/ui/menu/menu.module.scss +25 -0
- package/ui/menu/nav-plugin.tsx +11 -0
- package/ui/top-bar-nav/top-bar-nav.tsx +4 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.component_component@1.0.
|
|
2
|
-
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.component_component@1.0.
|
|
1
|
+
import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.component_component@1.0.1220/dist/component.composition.js';
|
|
2
|
+
import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.component_component@1.0.1220/dist/component.docs.mdx';
|
|
3
3
|
|
|
4
4
|
export const compositions = [compositions_0];
|
|
5
5
|
export const overview = [overview_0];
|
package/dist/ui/menu/menu-nav.js
CHANGED
|
@@ -109,12 +109,27 @@ function CollapsibleMenuNav({
|
|
|
109
109
|
}
|
|
110
110
|
return (_widgetPlugins || []).filter(widget => !widget[1].props.hideInMinimalMode).sort(sortFn);
|
|
111
111
|
}, [widgetSlot, widgetPlugins, isMinimal]);
|
|
112
|
-
|
|
112
|
+
|
|
113
|
+
// in minimal mode, primary tabs (e.g. Preview) render outside the ResponsiveNavbar, which would
|
|
114
|
+
// otherwise collapse any tab but the first when space runs out. The first tab is kept with them
|
|
115
|
+
// to preserve its position (the navbar never collapses it either); all other tabs stay collapsible.
|
|
116
|
+
const hasPrimary = isMinimal && plugins.some(([, {
|
|
117
|
+
props
|
|
118
|
+
}]) => props.primaryInMinimalMode);
|
|
119
|
+
const fixedPlugins = hasPrimary ? plugins.filter(([, {
|
|
120
|
+
props
|
|
121
|
+
}], index) => index === 0 || props.primaryInMinimalMode) : [];
|
|
122
|
+
const collapsiblePlugins = plugins.filter(plugin => !fixedPlugins.includes(plugin));
|
|
123
|
+
const responsiveItems = [...collapsiblePlugins, ...widgets];
|
|
124
|
+
|
|
125
|
+
// `activeTabIndex` refers to the full list; map it to the responsive list (-1 when a fixed tab is active)
|
|
126
|
+
const responsiveActiveIndex = activeTabIndex === undefined ? undefined : responsiveItems.indexOf([...plugins, ...widgets][activeTabIndex]);
|
|
127
|
+
const links = responsiveItems.map(([, menuItem], index) => {
|
|
113
128
|
// these styles keep plugins to the left and widgets to the right.
|
|
114
|
-
const lastPluginStyle =
|
|
129
|
+
const lastPluginStyle = collapsiblePlugins.length - 1 === index ? {
|
|
115
130
|
marginRight: 'auto'
|
|
116
131
|
} : {};
|
|
117
|
-
const firstWidgetStyle =
|
|
132
|
+
const firstWidgetStyle = collapsiblePlugins.length === index ? {
|
|
118
133
|
marginLeft: 'auto'
|
|
119
134
|
} : {};
|
|
120
135
|
return {
|
|
@@ -127,9 +142,17 @@ function CollapsibleMenuNav({
|
|
|
127
142
|
};
|
|
128
143
|
});
|
|
129
144
|
return /*#__PURE__*/_react().default.createElement(_react().default.Fragment, null, isMinimal && /*#__PURE__*/_react().default.createElement(MinimalMenuNav, {
|
|
130
|
-
|
|
145
|
+
navItems: [...plugins, ...widgets],
|
|
131
146
|
secondaryNavClassName: secondaryNavClassName
|
|
132
|
-
}), /*#__PURE__*/_react().default.createElement(
|
|
147
|
+
}), fixedPlugins.length > 0 && /*#__PURE__*/_react().default.createElement("div", {
|
|
148
|
+
className: _menuModule().default.minimalFixedNav
|
|
149
|
+
}, fixedPlugins.map(([, {
|
|
150
|
+
props
|
|
151
|
+
}], index) => /*#__PURE__*/_react().default.createElement(TopBarNavComponent, {
|
|
152
|
+
key: `minimal-fixed-${index}`,
|
|
153
|
+
menuItemProps: props,
|
|
154
|
+
isInMenu: false
|
|
155
|
+
}))), /*#__PURE__*/_react().default.createElement(_designNavigation().ResponsiveNavbar, {
|
|
133
156
|
navClassName: (0, _classnames().default)(_menuModule().default.tab, isMinimal && _menuModule().default.hideMinimalMobileNav, className),
|
|
134
157
|
secondaryNavClassName: secondaryNavClassName,
|
|
135
158
|
style: {
|
|
@@ -138,18 +161,27 @@ function CollapsibleMenuNav({
|
|
|
138
161
|
},
|
|
139
162
|
priority: "none",
|
|
140
163
|
tabs: links,
|
|
141
|
-
defaultActiveIndex:
|
|
164
|
+
defaultActiveIndex: responsiveActiveIndex,
|
|
142
165
|
alwaysShowActiveTab: alwaysShowActiveTab
|
|
143
166
|
}, children));
|
|
144
167
|
}
|
|
145
168
|
function MinimalMenuNav({
|
|
146
|
-
|
|
169
|
+
navItems,
|
|
147
170
|
secondaryNavClassName
|
|
148
171
|
}) {
|
|
149
|
-
if (
|
|
172
|
+
if (navItems.length === 0) return null;
|
|
173
|
+
|
|
174
|
+
// primary tabs (e.g. Preview) stay pinned on mobile, right after the More menu that holds the
|
|
175
|
+
// rest (Overview first); they render their compact `minimalMobileChildren` (an icon) when given.
|
|
176
|
+
const primaryItems = navItems.filter(([, {
|
|
177
|
+
props
|
|
178
|
+
}]) => props.primaryInMinimalMode);
|
|
179
|
+
const moreItems = navItems.filter(([, {
|
|
180
|
+
props
|
|
181
|
+
}]) => !props.primaryInMinimalMode);
|
|
150
182
|
return /*#__PURE__*/_react().default.createElement("div", {
|
|
151
183
|
className: _menuModule().default.minimalMoreNav
|
|
152
|
-
}, /*#__PURE__*/_react().default.createElement(_designInputs().Dropdown, {
|
|
184
|
+
}, moreItems.length > 0 && /*#__PURE__*/_react().default.createElement(_designInputs().Dropdown, {
|
|
153
185
|
placeholderContent: /*#__PURE__*/_react().default.createElement("div", {
|
|
154
186
|
className: _menuModule().default.minimalMoreButton,
|
|
155
187
|
"aria-label": "More component sections"
|
|
@@ -162,13 +194,24 @@ function MinimalMenuNav({
|
|
|
162
194
|
placeholderBorder: false,
|
|
163
195
|
clickToggles: true,
|
|
164
196
|
margin: 8
|
|
165
|
-
},
|
|
197
|
+
}, moreItems.map(([, {
|
|
198
|
+
props
|
|
199
|
+
}], index) => /*#__PURE__*/_react().default.createElement(_designInputsSelectors().MenuItem, {
|
|
166
200
|
className: _menuModule().default.minimalMenuItem,
|
|
167
201
|
key: `minimal-dropdown-${index}`
|
|
168
202
|
}, /*#__PURE__*/_react().default.createElement(TopBarNavComponent, {
|
|
169
|
-
menuItemProps:
|
|
203
|
+
menuItemProps: props,
|
|
170
204
|
isInMenu: true
|
|
171
|
-
}))))
|
|
205
|
+
})))), primaryItems.map(([, {
|
|
206
|
+
props
|
|
207
|
+
}], index) => /*#__PURE__*/_react().default.createElement(TopBarNavComponent, {
|
|
208
|
+
key: `minimal-primary-${index}`,
|
|
209
|
+
menuItemProps: _objectSpread(_objectSpread({}, props), {}, {
|
|
210
|
+
children: props.minimalMobileChildren ?? props.children,
|
|
211
|
+
className: (0, _classnames().default)(props.className, _menuModule().default.minimalPrimaryTab)
|
|
212
|
+
}),
|
|
213
|
+
isInMenu: false
|
|
214
|
+
})));
|
|
172
215
|
}
|
|
173
216
|
function sortFn([, {
|
|
174
217
|
order: first
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","data","_interopRequireWildcard","require","_classnames","_interopRequireDefault","_designNavigation","_designInputs","_designInputsSelectors","_workspaceUi","_topBarNav","_menuModule","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_extends","assign","bind","TopBarNavComponent","isInMenu","menuItemProps","widgetDisplayText","displayName","undefined","createElement","TopBarNav","className","classnames","styles","topBarNav","noBorder","children","CollapsibleMenuNav","navigationSlot","widgetSlot","navPlugins","widgetPlugins","secondaryNavClassName","activeTabIndex","alwaysShowActiveTab","isMinimal","useWorkspaceMode","plugins","useMemo","_navPlugins","toArray","sort","sortFn","widget","props","hideInMinimalMode","widgets","_widgetPlugins","links","map","menuItem","index","lastPluginStyle","marginRight","firstWidgetStyle","marginLeft","component","tabProps","style","Fragment","MinimalMenuNav","ResponsiveNavbar","navClassName","tab","hideMinimalMobileNav","width","height","priority","tabs","defaultActiveIndex","minimalMoreNav","Dropdown","placeholderContent","minimalMoreButton","src","alt","dropClass","position","placeholderBorder","clickToggles","margin","link","MenuItem","minimalMenuItem","key","order","first","second"],"sources":["menu-nav.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport classnames from 'classnames';\nimport { ResponsiveNavbar } from '@teambit/design.navigation.responsive-navbar';\nimport type { Tab, TabProps } from '@teambit/design.navigation.responsive-navbar';\nimport { Dropdown } from '@teambit/design.inputs.dropdown';\nimport { MenuItem } from '@teambit/design.inputs.selectors.menu-item';\nimport { useWorkspaceMode } from '@teambit/workspace.ui.use-workspace-mode';\nimport { TopBarNav } from '../top-bar-nav';\nimport styles from './menu.module.scss';\nimport type { NavPlugin, OrderedNavigationSlot } from './nav-plugin';\n\nexport type MenuNavProps = {\n /**\n * @deprecated\n * use @property navPlugins\n */\n navigationSlot?: OrderedNavigationSlot;\n /**\n * @deprecated\n * use @property widgetPlugins\n */\n widgetSlot?: OrderedNavigationSlot;\n navPlugins?: [string, NavPlugin][];\n widgetPlugins?: [string, NavPlugin][];\n /**\n * A className to pass to the secondary nav, i.e dropdown\n */\n secondaryNavClassName?: string;\n activeTabIndex?: number;\n alwaysShowActiveTab?: boolean;\n} & React.HTMLAttributes<HTMLElement>;\n\nfunction TopBarNavComponent({ isInMenu, menuItemProps }: TabProps) {\n /**\n * to accommodate for the top level nav which should display the children\n * in the dropdown secondary menu if there is a displayName set\n */\n const widgetDisplayText = menuItemProps?.displayName && isInMenu ? menuItemProps?.displayName : undefined;\n return (\n <TopBarNav\n {...menuItemProps}\n className={classnames(menuItemProps?.className, styles.topBarNav, isInMenu && styles.noBorder)}\n >\n {widgetDisplayText || menuItemProps?.children}\n </TopBarNav>\n );\n}\n\nexport function CollapsibleMenuNav({\n navigationSlot,\n widgetSlot,\n navPlugins = [],\n widgetPlugins = [],\n className,\n secondaryNavClassName,\n activeTabIndex,\n alwaysShowActiveTab,\n children,\n}: MenuNavProps) {\n const { isMinimal } = useWorkspaceMode();\n const plugins = useMemo(() => {\n const _navPlugins = navPlugins.length > 0 ? navPlugins : navigationSlot?.toArray();\n if (!isMinimal) {\n return (_navPlugins || []).sort(sortFn);\n }\n return (_navPlugins || []).filter((widget) => !widget[1].props.hideInMinimalMode).sort(sortFn);\n }, [navigationSlot, navPlugins, isMinimal]);\n\n const widgets = useMemo(() => {\n const _widgetPlugins = widgetPlugins.length > 0 ? widgetPlugins : widgetSlot?.toArray();\n if (!isMinimal) {\n return (_widgetPlugins || []).sort(sortFn);\n }\n return (_widgetPlugins || []).filter((widget) => !widget[1].props.hideInMinimalMode).sort(sortFn);\n }, [widgetSlot, widgetPlugins, isMinimal]);\n\n const links = [...plugins, ...widgets].map(([, menuItem], index) => {\n // these styles keep plugins to the left and widgets to the right.\n const lastPluginStyle = plugins.length - 1 === index ? { marginRight: 'auto' } : {};\n\n const firstWidgetStyle = plugins.length === index ? { marginLeft: 'auto' } : {};\n\n return {\n component: TopBarNavComponent,\n tabProps: {\n menuItemProps: menuItem.props,\n },\n style: { ...firstWidgetStyle, ...lastPluginStyle },\n className: menuItem.props.className,\n };\n });\n\n return (\n <>\n {isMinimal && <MinimalMenuNav links={links} secondaryNavClassName={secondaryNavClassName} />}\n <ResponsiveNavbar\n navClassName={classnames(styles.tab, isMinimal && styles.hideMinimalMobileNav, className)}\n secondaryNavClassName={secondaryNavClassName}\n style={{ width: '100%', height: '100%' }}\n priority=\"none\"\n tabs={links}\n defaultActiveIndex={activeTabIndex}\n alwaysShowActiveTab={alwaysShowActiveTab}\n >\n {children}\n </ResponsiveNavbar>\n </>\n );\n}\n\nfunction MinimalMenuNav({ links, secondaryNavClassName }: { links: Tab[]; secondaryNavClassName?: string }) {\n if (links.length === 0) return null;\n\n return (\n <div className={styles.minimalMoreNav}>\n <Dropdown\n placeholderContent={\n <div className={styles.minimalMoreButton} aria-label=\"More component sections\">\n <img src=\"https://static.bit.dev/bit-icons/more-h.svg\" alt=\"\" />\n </div>\n }\n dropClass={secondaryNavClassName}\n position=\"bottom-end\"\n placeholderBorder={false}\n clickToggles\n margin={8}\n >\n {links.map((link, index) => (\n <MenuItem className={styles.minimalMenuItem} key={`minimal-dropdown-${index}`}>\n <TopBarNavComponent menuItemProps={link.tabProps?.menuItemProps} isInMenu />\n </MenuItem>\n ))}\n </Dropdown>\n </div>\n );\n}\n\nfunction sortFn([, { order: first }]: [string, NavPlugin], [, { order: second }]: [string, NavPlugin]) {\n return (first ?? 0) - (second ?? 0);\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_react","data","_interopRequireWildcard","require","_classnames","_interopRequireDefault","_designNavigation","_designInputs","_designInputsSelectors","_workspaceUi","_topBarNav","_menuModule","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_extends","assign","bind","TopBarNavComponent","isInMenu","menuItemProps","widgetDisplayText","displayName","undefined","createElement","TopBarNav","className","classnames","styles","topBarNav","noBorder","children","CollapsibleMenuNav","navigationSlot","widgetSlot","navPlugins","widgetPlugins","secondaryNavClassName","activeTabIndex","alwaysShowActiveTab","isMinimal","useWorkspaceMode","plugins","useMemo","_navPlugins","toArray","sort","sortFn","widget","props","hideInMinimalMode","widgets","_widgetPlugins","hasPrimary","some","primaryInMinimalMode","fixedPlugins","index","collapsiblePlugins","plugin","includes","responsiveItems","responsiveActiveIndex","indexOf","links","map","menuItem","lastPluginStyle","marginRight","firstWidgetStyle","marginLeft","component","tabProps","style","Fragment","MinimalMenuNav","navItems","minimalFixedNav","key","ResponsiveNavbar","navClassName","tab","hideMinimalMobileNav","width","height","priority","tabs","defaultActiveIndex","primaryItems","moreItems","minimalMoreNav","Dropdown","placeholderContent","minimalMoreButton","src","alt","dropClass","position","placeholderBorder","clickToggles","margin","MenuItem","minimalMenuItem","minimalMobileChildren","minimalPrimaryTab","order","first","second"],"sources":["menu-nav.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport classnames from 'classnames';\nimport { ResponsiveNavbar } from '@teambit/design.navigation.responsive-navbar';\nimport type { TabProps } from '@teambit/design.navigation.responsive-navbar';\nimport { Dropdown } from '@teambit/design.inputs.dropdown';\nimport { MenuItem } from '@teambit/design.inputs.selectors.menu-item';\nimport { useWorkspaceMode } from '@teambit/workspace.ui.use-workspace-mode';\nimport { TopBarNav } from '../top-bar-nav';\nimport styles from './menu.module.scss';\nimport type { NavPlugin, OrderedNavigationSlot } from './nav-plugin';\n\nexport type MenuNavProps = {\n /**\n * @deprecated\n * use @property navPlugins\n */\n navigationSlot?: OrderedNavigationSlot;\n /**\n * @deprecated\n * use @property widgetPlugins\n */\n widgetSlot?: OrderedNavigationSlot;\n navPlugins?: [string, NavPlugin][];\n widgetPlugins?: [string, NavPlugin][];\n /**\n * A className to pass to the secondary nav, i.e dropdown\n */\n secondaryNavClassName?: string;\n activeTabIndex?: number;\n alwaysShowActiveTab?: boolean;\n} & React.HTMLAttributes<HTMLElement>;\n\nfunction TopBarNavComponent({ isInMenu, menuItemProps }: TabProps) {\n /**\n * to accommodate for the top level nav which should display the children\n * in the dropdown secondary menu if there is a displayName set\n */\n const widgetDisplayText = menuItemProps?.displayName && isInMenu ? menuItemProps?.displayName : undefined;\n return (\n <TopBarNav\n {...menuItemProps}\n className={classnames(menuItemProps?.className, styles.topBarNav, isInMenu && styles.noBorder)}\n >\n {widgetDisplayText || menuItemProps?.children}\n </TopBarNav>\n );\n}\n\nexport function CollapsibleMenuNav({\n navigationSlot,\n widgetSlot,\n navPlugins = [],\n widgetPlugins = [],\n className,\n secondaryNavClassName,\n activeTabIndex,\n alwaysShowActiveTab,\n children,\n}: MenuNavProps) {\n const { isMinimal } = useWorkspaceMode();\n const plugins = useMemo(() => {\n const _navPlugins = navPlugins.length > 0 ? navPlugins : navigationSlot?.toArray();\n if (!isMinimal) {\n return (_navPlugins || []).sort(sortFn);\n }\n return (_navPlugins || []).filter((widget) => !widget[1].props.hideInMinimalMode).sort(sortFn);\n }, [navigationSlot, navPlugins, isMinimal]);\n\n const widgets = useMemo(() => {\n const _widgetPlugins = widgetPlugins.length > 0 ? widgetPlugins : widgetSlot?.toArray();\n if (!isMinimal) {\n return (_widgetPlugins || []).sort(sortFn);\n }\n return (_widgetPlugins || []).filter((widget) => !widget[1].props.hideInMinimalMode).sort(sortFn);\n }, [widgetSlot, widgetPlugins, isMinimal]);\n\n // in minimal mode, primary tabs (e.g. Preview) render outside the ResponsiveNavbar, which would\n // otherwise collapse any tab but the first when space runs out. The first tab is kept with them\n // to preserve its position (the navbar never collapses it either); all other tabs stay collapsible.\n const hasPrimary = isMinimal && plugins.some(([, { props }]) => props.primaryInMinimalMode);\n const fixedPlugins = hasPrimary\n ? plugins.filter(([, { props }], index) => index === 0 || props.primaryInMinimalMode)\n : [];\n const collapsiblePlugins = plugins.filter((plugin) => !fixedPlugins.includes(plugin));\n const responsiveItems = [...collapsiblePlugins, ...widgets];\n\n // `activeTabIndex` refers to the full list; map it to the responsive list (-1 when a fixed tab is active)\n const responsiveActiveIndex =\n activeTabIndex === undefined ? undefined : responsiveItems.indexOf([...plugins, ...widgets][activeTabIndex]);\n\n const links = responsiveItems.map(([, menuItem], index) => {\n // these styles keep plugins to the left and widgets to the right.\n const lastPluginStyle = collapsiblePlugins.length - 1 === index ? { marginRight: 'auto' } : {};\n\n const firstWidgetStyle = collapsiblePlugins.length === index ? { marginLeft: 'auto' } : {};\n\n return {\n component: TopBarNavComponent,\n tabProps: {\n menuItemProps: menuItem.props,\n },\n style: { ...firstWidgetStyle, ...lastPluginStyle },\n className: menuItem.props.className,\n };\n });\n\n return (\n <>\n {isMinimal && (\n <MinimalMenuNav navItems={[...plugins, ...widgets]} secondaryNavClassName={secondaryNavClassName} />\n )}\n {fixedPlugins.length > 0 && (\n <div className={styles.minimalFixedNav}>\n {fixedPlugins.map(([, { props }], index) => (\n <TopBarNavComponent key={`minimal-fixed-${index}`} menuItemProps={props} isInMenu={false} />\n ))}\n </div>\n )}\n <ResponsiveNavbar\n navClassName={classnames(styles.tab, isMinimal && styles.hideMinimalMobileNav, className)}\n secondaryNavClassName={secondaryNavClassName}\n style={{ width: '100%', height: '100%' }}\n priority=\"none\"\n tabs={links}\n defaultActiveIndex={responsiveActiveIndex}\n alwaysShowActiveTab={alwaysShowActiveTab}\n >\n {children}\n </ResponsiveNavbar>\n </>\n );\n}\n\nfunction MinimalMenuNav({\n navItems,\n secondaryNavClassName,\n}: {\n navItems: [string, NavPlugin][];\n secondaryNavClassName?: string;\n}) {\n if (navItems.length === 0) return null;\n\n // primary tabs (e.g. Preview) stay pinned on mobile, right after the More menu that holds the\n // rest (Overview first); they render their compact `minimalMobileChildren` (an icon) when given.\n const primaryItems = navItems.filter(([, { props }]) => props.primaryInMinimalMode);\n const moreItems = navItems.filter(([, { props }]) => !props.primaryInMinimalMode);\n\n return (\n <div className={styles.minimalMoreNav}>\n {moreItems.length > 0 && (\n <Dropdown\n placeholderContent={\n <div className={styles.minimalMoreButton} aria-label=\"More component sections\">\n <img src=\"https://static.bit.dev/bit-icons/more-h.svg\" alt=\"\" />\n </div>\n }\n dropClass={secondaryNavClassName}\n position=\"bottom-end\"\n placeholderBorder={false}\n clickToggles\n margin={8}\n >\n {moreItems.map(([, { props }], index) => (\n <MenuItem className={styles.minimalMenuItem} key={`minimal-dropdown-${index}`}>\n <TopBarNavComponent menuItemProps={props} isInMenu />\n </MenuItem>\n ))}\n </Dropdown>\n )}\n {primaryItems.map(([, { props }], index) => (\n <TopBarNavComponent\n key={`minimal-primary-${index}`}\n menuItemProps={{\n ...props,\n children: props.minimalMobileChildren ?? props.children,\n className: classnames(props.className, styles.minimalPrimaryTab),\n }}\n isInMenu={false}\n />\n ))}\n </div>\n );\n}\n\nfunction sortFn([, { order: first }]: [string, NavPlugin], [, { order: second }]: [string, NavPlugin]) {\n return (first ?? 0) - (second ?? 0);\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -10,6 +10,10 @@
|
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
.topBarMinimal {
|
|
13
|
+
// Size from content (not 100%) so the breadcrumb beside it only shrinks when space is short.
|
|
14
|
+
flex: 1 1 auto;
|
|
15
|
+
width: auto;
|
|
16
|
+
|
|
13
17
|
@media screen and (max-width: $br-md) {
|
|
14
18
|
// The breadcrumb owns the remaining mobile space, while this menu keeps the intrinsic width
|
|
15
19
|
// of its pinned actions and right-side controls.
|
|
@@ -80,6 +84,27 @@
|
|
|
80
84
|
}
|
|
81
85
|
}
|
|
82
86
|
|
|
87
|
+
// Desktop minimal mode: Overview + Preview sit outside the ResponsiveNavbar so they can never
|
|
88
|
+
// collapse into its overflow menu. Matches the navbar's tab row (8px gap, 14px, no wrapping).
|
|
89
|
+
.minimalFixedNav {
|
|
90
|
+
display: flex;
|
|
91
|
+
flex: none;
|
|
92
|
+
gap: 8px;
|
|
93
|
+
height: 100%;
|
|
94
|
+
margin-right: 8px;
|
|
95
|
+
font-size: var(--bit-p-xs, 14px);
|
|
96
|
+
white-space: nowrap;
|
|
97
|
+
color: var(--on-background-color, #2b2b2b);
|
|
98
|
+
|
|
99
|
+
@media screen and (max-width: $br-md) {
|
|
100
|
+
display: none;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.minimalPrimaryTab {
|
|
105
|
+
height: 100%;
|
|
106
|
+
}
|
|
107
|
+
|
|
83
108
|
.hideMinimalMobileNav {
|
|
84
109
|
@media screen and (max-width: $br-md) {
|
|
85
110
|
display: none;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type React from 'react';
|
|
1
2
|
import type { SlotRegistry } from '@teambit/harmony';
|
|
2
3
|
import type { LinkProps } from '@teambit/base-react.navigation.link';
|
|
3
4
|
import type { ConsumeMethod } from '@teambit/ui-foundation.ui.use-box.menu';
|
|
@@ -8,6 +9,16 @@ export type NavPluginProps = {
|
|
|
8
9
|
displayName?: string;
|
|
9
10
|
ignoreQueryParams?: boolean;
|
|
10
11
|
hideInMinimalMode?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* in minimal mode on mobile, keep this tab visible next to the compact "More" menu instead of
|
|
14
|
+
* collapsing it into the menu.
|
|
15
|
+
*/
|
|
16
|
+
primaryInMinimalMode?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* compact content (e.g. an icon) to render instead of `children` for a primary tab in minimal
|
|
19
|
+
* mode on mobile, where the row is shared with the breadcrumb and menu actions.
|
|
20
|
+
*/
|
|
21
|
+
minimalMobileChildren?: React.ReactNode;
|
|
11
22
|
} & LinkProps;
|
|
12
23
|
export type NavPlugin = {
|
|
13
24
|
props: NavPluginProps;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["nav-plugin.tsx"],"sourcesContent":["import type { SlotRegistry } from '@teambit/harmony';\nimport type { LinkProps } from '@teambit/base-react.navigation.link';\nimport type { ConsumeMethod } from '@teambit/ui-foundation.ui.use-box.menu';\nimport type { LaneModel } from '@teambit/lanes.ui.models.lanes-model';\nimport type { ComponentID } from '@teambit/component-id';\nimport type { ComponentModel } from '../component-model';\n\nexport type NavPluginProps = {\n displayName?: string;\n ignoreQueryParams?: boolean;\n hideInMinimalMode?: boolean;\n} & LinkProps;\n\nexport type NavPlugin = {\n props: NavPluginProps;\n order?: number;\n};\n\nexport type OrderedNavigationSlot = SlotRegistry<NavPlugin>;\nexport type ConsumePluginOptions = {\n viewedLane?: LaneModel;\n hide?: boolean;\n disableInstall?: boolean;\n};\n\nexport type ConsumePluginProps = {\n id: ComponentID;\n packageName: string;\n latest?: string;\n // @deprecated - pass id, packageName and latest instead via props\n componentModel?: ComponentModel;\n options?: ConsumePluginOptions;\n authToken?: string;\n};\n\nexport type ConsumePlugin = (props: ConsumePluginProps) => ConsumeMethod | undefined;\n\nexport type ConsumeMethodSlot = SlotRegistry<ConsumePlugin[]>;\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["nav-plugin.tsx"],"sourcesContent":["import type React from 'react';\nimport type { SlotRegistry } from '@teambit/harmony';\nimport type { LinkProps } from '@teambit/base-react.navigation.link';\nimport type { ConsumeMethod } from '@teambit/ui-foundation.ui.use-box.menu';\nimport type { LaneModel } from '@teambit/lanes.ui.models.lanes-model';\nimport type { ComponentID } from '@teambit/component-id';\nimport type { ComponentModel } from '../component-model';\n\nexport type NavPluginProps = {\n displayName?: string;\n ignoreQueryParams?: boolean;\n hideInMinimalMode?: boolean;\n /**\n * in minimal mode on mobile, keep this tab visible next to the compact \"More\" menu instead of\n * collapsing it into the menu.\n */\n primaryInMinimalMode?: boolean;\n /**\n * compact content (e.g. an icon) to render instead of `children` for a primary tab in minimal\n * mode on mobile, where the row is shared with the breadcrumb and menu actions.\n */\n minimalMobileChildren?: React.ReactNode;\n} & LinkProps;\n\nexport type NavPlugin = {\n props: NavPluginProps;\n order?: number;\n};\n\nexport type OrderedNavigationSlot = SlotRegistry<NavPlugin>;\nexport type ConsumePluginOptions = {\n viewedLane?: LaneModel;\n hide?: boolean;\n disableInstall?: boolean;\n};\n\nexport type ConsumePluginProps = {\n id: ComponentID;\n packageName: string;\n latest?: string;\n // @deprecated - pass id, packageName and latest instead via props\n componentModel?: ComponentModel;\n options?: ConsumePluginOptions;\n authToken?: string;\n};\n\nexport type ConsumePlugin = (props: ConsumePluginProps) => ConsumeMethod | undefined;\n\nexport type ConsumeMethodSlot = SlotRegistry<ConsumePlugin[]>;\n"],"mappings":"","ignoreList":[]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { NavPluginProps } from '../menu/nav-plugin';
|
|
3
|
-
export declare function TopBarNav({ href, className, activeClassName, children, displayName, ignoreQueryParams, ...rest }: NavPluginProps): React.JSX.Element;
|
|
3
|
+
export declare function TopBarNav({ href, className, activeClassName, children, displayName, ignoreQueryParams, hideInMinimalMode: _hideInMinimalMode, primaryInMinimalMode: _primaryInMinimalMode, minimalMobileChildren: _minimalMobileChildren, ...rest }: NavPluginProps): React.JSX.Element;
|
|
@@ -39,7 +39,7 @@ function _topBarNavModule() {
|
|
|
39
39
|
};
|
|
40
40
|
return data;
|
|
41
41
|
}
|
|
42
|
-
const _excluded = ["href", "className", "activeClassName", "children", "displayName", "ignoreQueryParams"];
|
|
42
|
+
const _excluded = ["href", "className", "activeClassName", "children", "displayName", "ignoreQueryParams", "hideInMinimalMode", "primaryInMinimalMode", "minimalMobileChildren"];
|
|
43
43
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
44
44
|
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
45
45
|
function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
|
|
@@ -53,7 +53,11 @@ function TopBarNav(_ref) {
|
|
|
53
53
|
activeClassName,
|
|
54
54
|
children,
|
|
55
55
|
displayName,
|
|
56
|
-
ignoreQueryParams
|
|
56
|
+
ignoreQueryParams,
|
|
57
|
+
// menu layout flags, not link attributes
|
|
58
|
+
hideInMinimalMode: _hideInMinimalMode,
|
|
59
|
+
primaryInMinimalMode: _primaryInMinimalMode,
|
|
60
|
+
minimalMobileChildren: _minimalMobileChildren
|
|
57
61
|
} = _ref,
|
|
58
62
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
59
63
|
const {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","data","_interopRequireDefault","require","_classnames","_reactRouterDom","_baseReactNavigation","_topBarNavModule","_excluded","e","__esModule","default","_extends","Object","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","_objectWithoutProperties","o","i","_objectWithoutPropertiesLoose","getOwnPropertySymbols","indexOf","propertyIsEnumerable","Link","BaseLink","TopBarNav","_ref","href","className","activeClassName","children","displayName","ignoreQueryParams","rest","search","useLocation","preventPassingDisplayNameToLink","target","createElement","classnames","styles","topBarLink","active"],"sources":["top-bar-nav.tsx"],"sourcesContent":["import React from 'react';\nimport classnames from 'classnames';\nimport { useLocation } from 'react-router-dom';\nimport { Link as BaseLink } from '@teambit/base-react.navigation.link';\nimport type { NavPluginProps } from '../menu/nav-plugin';\n\nimport styles from './top-bar-nav.module.scss';\n\n// @todo - this will be fixed as part of the @teambit/base-react.navigation.link upgrade to latest\nconst Link = BaseLink as any;\n\nexport function TopBarNav({\n href,\n className,\n activeClassName,\n children,\n displayName,\n ignoreQueryParams,\n ...rest\n}: NavPluginProps) {\n const { search } = useLocation(); // sticky query params\n\n // @hack - this is so that the displayName will not pass to the link and cause a warning in the console.\n // it is used for component page nav link widgets (code, aspects etc),\n // but not for regular menu links (overview, compositions, etc).\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const preventPassingDisplayNameToLink = displayName;\n\n const target = (href && !ignoreQueryParams && `${href}${search}`) || href;\n\n return (\n <Link\n {...rest}\n className={classnames(className, styles.topBarLink)}\n activeClassName={classnames(activeClassName, styles.active)}\n href={target}\n >\n <div>{children}</div>\n </Link>\n );\n}\n"],"mappings":";;;;;;AAAA,SAAAA,OAAA;EAAA,MAAAC,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAH,MAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAG,YAAA;EAAA,MAAAH,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAC,WAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAI,gBAAA;EAAA,MAAAJ,IAAA,GAAAE,OAAA;EAAAE,eAAA,YAAAA,CAAA;IAAA,OAAAJ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAK,qBAAA;EAAA,MAAAL,IAAA,GAAAE,OAAA;EAAAG,oBAAA,YAAAA,CAAA;IAAA,OAAAL,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAGA,SAAAM,iBAAA;EAAA,MAAAN,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAI,gBAAA,YAAAA,CAAA;IAAA,OAAAN,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAA+C,MAAAO,SAAA;AAAA,SAAAN,uBAAAO,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAG,SAAA,WAAAA,QAAA,GAAAC,MAAA,CAAAC,MAAA,GAAAD,MAAA,CAAAC,MAAA,CAAAC,IAAA,eAAAC,CAAA,aAAAP,CAAA,MAAAA,CAAA,GAAAQ,SAAA,CAAAC,MAAA,EAAAT,CAAA,UAAAU,CAAA,GAAAF,SAAA,CAAAR,CAAA,YAAAW,CAAA,IAAAD,CAAA,OAAAE,cAAA,CAAAC,IAAA,CAAAH,CAAA,EAAAC,CAAA,MAAAJ,CAAA,CAAAI,CAAA,IAAAD,CAAA,CAAAC,CAAA,aAAAJ,CAAA,KAAAJ,QAAA,CAAAW,KAAA,OAAAN,SAAA;AAAA,SAAAO,yBAAAf,CAAA,EAAAU,CAAA,gBAAAV,CAAA,iBAAAgB,CAAA,EAAAL,CAAA,EAAAM,CAAA,GAAAC,6BAAA,CAAAlB,CAAA,EAAAU,CAAA,OAAAN,MAAA,CAAAe,qBAAA,QAAAZ,CAAA,GAAAH,MAAA,CAAAe,qBAAA,CAAAnB,CAAA,QAAAW,CAAA,MAAAA,CAAA,GAAAJ,CAAA,CAAAE,MAAA,EAAAE,CAAA,IAAAK,CAAA,GAAAT,CAAA,CAAAI,CAAA,UAAAD,CAAA,CAAAU,OAAA,CAAAJ,CAAA,QAAAK,oBAAA,CAAAR,IAAA,CAAAb,CAAA,EAAAgB,CAAA,MAAAC,CAAA,CAAAD,CAAA,IAAAhB,CAAA,CAAAgB,CAAA,aAAAC,CAAA;AAAA,SAAAC,8BAAAP,CAAA,EAAAX,CAAA,gBAAAW,CAAA,iBAAAD,CAAA,gBAAAH,CAAA,IAAAI,CAAA,SAAAC,cAAA,CAAAC,IAAA,CAAAF,CAAA,EAAAJ,CAAA,gBAAAP,CAAA,CAAAoB,OAAA,CAAAb,CAAA,aAAAG,CAAA,CAAAH,CAAA,IAAAI,CAAA,CAAAJ,CAAA,YAAAG,CAAA;AAE/C;AACA,MAAMY,IAAI,GAAGC,2BAAe;AAErB,SAASC,SAASA,CAAAC,IAAA,
|
|
1
|
+
{"version":3,"names":["_react","data","_interopRequireDefault","require","_classnames","_reactRouterDom","_baseReactNavigation","_topBarNavModule","_excluded","e","__esModule","default","_extends","Object","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","_objectWithoutProperties","o","i","_objectWithoutPropertiesLoose","getOwnPropertySymbols","indexOf","propertyIsEnumerable","Link","BaseLink","TopBarNav","_ref","href","className","activeClassName","children","displayName","ignoreQueryParams","hideInMinimalMode","_hideInMinimalMode","primaryInMinimalMode","_primaryInMinimalMode","minimalMobileChildren","_minimalMobileChildren","rest","search","useLocation","preventPassingDisplayNameToLink","target","createElement","classnames","styles","topBarLink","active"],"sources":["top-bar-nav.tsx"],"sourcesContent":["import React from 'react';\nimport classnames from 'classnames';\nimport { useLocation } from 'react-router-dom';\nimport { Link as BaseLink } from '@teambit/base-react.navigation.link';\nimport type { NavPluginProps } from '../menu/nav-plugin';\n\nimport styles from './top-bar-nav.module.scss';\n\n// @todo - this will be fixed as part of the @teambit/base-react.navigation.link upgrade to latest\nconst Link = BaseLink as any;\n\nexport function TopBarNav({\n href,\n className,\n activeClassName,\n children,\n displayName,\n ignoreQueryParams,\n // menu layout flags, not link attributes\n hideInMinimalMode: _hideInMinimalMode,\n primaryInMinimalMode: _primaryInMinimalMode,\n minimalMobileChildren: _minimalMobileChildren,\n ...rest\n}: NavPluginProps) {\n const { search } = useLocation(); // sticky query params\n\n // @hack - this is so that the displayName will not pass to the link and cause a warning in the console.\n // it is used for component page nav link widgets (code, aspects etc),\n // but not for regular menu links (overview, compositions, etc).\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const preventPassingDisplayNameToLink = displayName;\n\n const target = (href && !ignoreQueryParams && `${href}${search}`) || href;\n\n return (\n <Link\n {...rest}\n className={classnames(className, styles.topBarLink)}\n activeClassName={classnames(activeClassName, styles.active)}\n href={target}\n >\n <div>{children}</div>\n </Link>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teambit/component",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1220",
|
|
4
4
|
"homepage": "https://bit.cloud/teambit/component/component",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"componentId": {
|
|
7
7
|
"scope": "teambit.component",
|
|
8
8
|
"name": "component",
|
|
9
|
-
"version": "1.0.
|
|
9
|
+
"version": "1.0.1220"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@teambit/any-fs": "0.0.5",
|
|
@@ -25,20 +25,15 @@
|
|
|
25
25
|
"classnames": "^2.5.1",
|
|
26
26
|
"lodash.compact": "3.0.1",
|
|
27
27
|
"@teambit/component-id": "1.2.5",
|
|
28
|
-
"@teambit/legacy.extension-data": "0.0.183",
|
|
29
28
|
"@teambit/ui-foundation.ui.menu-widget-icon": "0.0.502",
|
|
30
29
|
"@teambit/graph.cleargraph": "0.0.11",
|
|
31
30
|
"@teambit/legacy-bit-id": "1.1.4",
|
|
32
|
-
"@teambit/legacy.consumer-component": "0.0.182",
|
|
33
|
-
"@teambit/objects": "0.0.715",
|
|
34
|
-
"@teambit/component.sources": "0.0.233",
|
|
35
31
|
"@teambit/toolbox.path.match-patterns": "0.0.37",
|
|
36
32
|
"@teambit/toolbox.string.eol": "0.0.22",
|
|
37
33
|
"@teambit/toolbox.string.capitalize": "0.0.518",
|
|
38
34
|
"@teambit/harmony": "0.4.12",
|
|
39
35
|
"@teambit/graphql": "1.0.1205",
|
|
40
36
|
"@teambit/toolbox.path.path": "0.0.26",
|
|
41
|
-
"@teambit/cli": "0.0.1412",
|
|
42
37
|
"@teambit/express": "0.0.1504",
|
|
43
38
|
"@teambit/harmony.modules.runtimes": "0.0.4",
|
|
44
39
|
"@teambit/logger": "0.0.1498",
|
|
@@ -51,32 +46,23 @@
|
|
|
51
46
|
"@teambit/ui-foundation.ui.react-router.slot-router": "0.0.533",
|
|
52
47
|
"@teambit/ui-foundation.ui.use-box.menu": "1.0.16",
|
|
53
48
|
"@teambit/legacy.utils": "0.0.56",
|
|
54
|
-
"@teambit/component-issues": "0.0.191",
|
|
55
49
|
"@teambit/pkg.modules.semver-helper": "0.0.38",
|
|
56
50
|
"@teambit/ui-foundation.ui.hooks.use-data-query": "0.0.512",
|
|
57
51
|
"@teambit/cli-table": "0.0.66",
|
|
58
|
-
"@teambit/legacy.bit-map": "0.0.238",
|
|
59
|
-
"@teambit/pkg.modules.component-package-name": "0.0.188",
|
|
60
52
|
"@teambit/ui-foundation.ui.react-router.use-query": "0.0.505",
|
|
61
53
|
"@teambit/legacy-component-log": "0.0.434",
|
|
62
54
|
"@teambit/component-descriptor": "0.0.469",
|
|
63
|
-
"@teambit/semantics.doc-parser": "0.0.189",
|
|
64
|
-
"@teambit/legacy.consumer": "0.0.181",
|
|
65
|
-
"@teambit/legacy.dependency-graph": "0.0.184",
|
|
66
55
|
"@teambit/legacy.loader": "0.0.34",
|
|
67
|
-
"@teambit/legacy.scope": "0.0.181",
|
|
68
|
-
"@teambit/scope.remotes": "0.0.181",
|
|
69
|
-
"@teambit/legacy.component-diff": "0.0.237",
|
|
70
56
|
"@teambit/design.ui.empty-box": "0.0.364",
|
|
71
57
|
"@teambit/documenter.ui.heading": "4.1.8",
|
|
72
58
|
"@teambit/documenter.ui.separator": "4.1.7",
|
|
73
59
|
"@teambit/harmony.ui.aspect-box": "0.0.517",
|
|
74
|
-
"@teambit/design.ui.pages.not-found": "0.0.371",
|
|
75
|
-
"@teambit/design.ui.pages.server-error": "0.0.368",
|
|
76
|
-
"@teambit/compositions.model.composition-type": "0.0.538",
|
|
77
60
|
"@teambit/design.ui.styles.ellipsis": "0.0.357",
|
|
78
61
|
"@teambit/envs.ui.env-icon": "0.0.513",
|
|
79
62
|
"@teambit/explorer.ui.command-bar": "2.0.19",
|
|
63
|
+
"@teambit/compositions.model.composition-type": "0.0.538",
|
|
64
|
+
"@teambit/design.ui.pages.not-found": "0.0.371",
|
|
65
|
+
"@teambit/design.ui.pages.server-error": "0.0.368",
|
|
80
66
|
"@teambit/design.inputs.dropdown": "1.3.3",
|
|
81
67
|
"@teambit/design.inputs.selectors.menu-item": "1.1.0",
|
|
82
68
|
"@teambit/design.navigation.responsive-navbar": "0.0.8",
|
|
@@ -86,8 +72,22 @@
|
|
|
86
72
|
"@teambit/lanes.hooks.use-lanes": "0.0.300",
|
|
87
73
|
"@teambit/lanes.ui.models.lanes-model": "0.0.239",
|
|
88
74
|
"@teambit/ui-foundation.ui.use-box.dropdown": "0.0.151",
|
|
89
|
-
"@teambit/
|
|
90
|
-
"@teambit/
|
|
75
|
+
"@teambit/legacy.extension-data": "0.0.184",
|
|
76
|
+
"@teambit/aspect-loader": "1.0.1220",
|
|
77
|
+
"@teambit/dependency-resolver": "1.0.1220",
|
|
78
|
+
"@teambit/legacy.consumer-component": "0.0.183",
|
|
79
|
+
"@teambit/objects": "0.0.716",
|
|
80
|
+
"@teambit/component.sources": "0.0.234",
|
|
81
|
+
"@teambit/cli": "0.0.1413",
|
|
82
|
+
"@teambit/component-issues": "0.0.192",
|
|
83
|
+
"@teambit/legacy.bit-map": "0.0.239",
|
|
84
|
+
"@teambit/pkg.modules.component-package-name": "0.0.189",
|
|
85
|
+
"@teambit/semantics.doc-parser": "0.0.190",
|
|
86
|
+
"@teambit/legacy.consumer": "0.0.182",
|
|
87
|
+
"@teambit/legacy.dependency-graph": "0.0.185",
|
|
88
|
+
"@teambit/legacy.scope": "0.0.182",
|
|
89
|
+
"@teambit/scope.remotes": "0.0.182",
|
|
90
|
+
"@teambit/legacy.component-diff": "0.0.238"
|
|
91
91
|
},
|
|
92
92
|
"devDependencies": {
|
|
93
93
|
"@types/lodash": "4.14.165",
|
package/ui/menu/menu-nav.tsx
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { useMemo } from 'react';
|
|
2
2
|
import classnames from 'classnames';
|
|
3
3
|
import { ResponsiveNavbar } from '@teambit/design.navigation.responsive-navbar';
|
|
4
|
-
import type {
|
|
4
|
+
import type { TabProps } from '@teambit/design.navigation.responsive-navbar';
|
|
5
5
|
import { Dropdown } from '@teambit/design.inputs.dropdown';
|
|
6
6
|
import { MenuItem } from '@teambit/design.inputs.selectors.menu-item';
|
|
7
7
|
import { useWorkspaceMode } from '@teambit/workspace.ui.use-workspace-mode';
|
|
@@ -74,11 +74,25 @@ export function CollapsibleMenuNav({
|
|
|
74
74
|
return (_widgetPlugins || []).filter((widget) => !widget[1].props.hideInMinimalMode).sort(sortFn);
|
|
75
75
|
}, [widgetSlot, widgetPlugins, isMinimal]);
|
|
76
76
|
|
|
77
|
-
|
|
77
|
+
// in minimal mode, primary tabs (e.g. Preview) render outside the ResponsiveNavbar, which would
|
|
78
|
+
// otherwise collapse any tab but the first when space runs out. The first tab is kept with them
|
|
79
|
+
// to preserve its position (the navbar never collapses it either); all other tabs stay collapsible.
|
|
80
|
+
const hasPrimary = isMinimal && plugins.some(([, { props }]) => props.primaryInMinimalMode);
|
|
81
|
+
const fixedPlugins = hasPrimary
|
|
82
|
+
? plugins.filter(([, { props }], index) => index === 0 || props.primaryInMinimalMode)
|
|
83
|
+
: [];
|
|
84
|
+
const collapsiblePlugins = plugins.filter((plugin) => !fixedPlugins.includes(plugin));
|
|
85
|
+
const responsiveItems = [...collapsiblePlugins, ...widgets];
|
|
86
|
+
|
|
87
|
+
// `activeTabIndex` refers to the full list; map it to the responsive list (-1 when a fixed tab is active)
|
|
88
|
+
const responsiveActiveIndex =
|
|
89
|
+
activeTabIndex === undefined ? undefined : responsiveItems.indexOf([...plugins, ...widgets][activeTabIndex]);
|
|
90
|
+
|
|
91
|
+
const links = responsiveItems.map(([, menuItem], index) => {
|
|
78
92
|
// these styles keep plugins to the left and widgets to the right.
|
|
79
|
-
const lastPluginStyle =
|
|
93
|
+
const lastPluginStyle = collapsiblePlugins.length - 1 === index ? { marginRight: 'auto' } : {};
|
|
80
94
|
|
|
81
|
-
const firstWidgetStyle =
|
|
95
|
+
const firstWidgetStyle = collapsiblePlugins.length === index ? { marginLeft: 'auto' } : {};
|
|
82
96
|
|
|
83
97
|
return {
|
|
84
98
|
component: TopBarNavComponent,
|
|
@@ -92,14 +106,23 @@ export function CollapsibleMenuNav({
|
|
|
92
106
|
|
|
93
107
|
return (
|
|
94
108
|
<>
|
|
95
|
-
{isMinimal &&
|
|
109
|
+
{isMinimal && (
|
|
110
|
+
<MinimalMenuNav navItems={[...plugins, ...widgets]} secondaryNavClassName={secondaryNavClassName} />
|
|
111
|
+
)}
|
|
112
|
+
{fixedPlugins.length > 0 && (
|
|
113
|
+
<div className={styles.minimalFixedNav}>
|
|
114
|
+
{fixedPlugins.map(([, { props }], index) => (
|
|
115
|
+
<TopBarNavComponent key={`minimal-fixed-${index}`} menuItemProps={props} isInMenu={false} />
|
|
116
|
+
))}
|
|
117
|
+
</div>
|
|
118
|
+
)}
|
|
96
119
|
<ResponsiveNavbar
|
|
97
120
|
navClassName={classnames(styles.tab, isMinimal && styles.hideMinimalMobileNav, className)}
|
|
98
121
|
secondaryNavClassName={secondaryNavClassName}
|
|
99
122
|
style={{ width: '100%', height: '100%' }}
|
|
100
123
|
priority="none"
|
|
101
124
|
tabs={links}
|
|
102
|
-
defaultActiveIndex={
|
|
125
|
+
defaultActiveIndex={responsiveActiveIndex}
|
|
103
126
|
alwaysShowActiveTab={alwaysShowActiveTab}
|
|
104
127
|
>
|
|
105
128
|
{children}
|
|
@@ -108,29 +131,53 @@ export function CollapsibleMenuNav({
|
|
|
108
131
|
);
|
|
109
132
|
}
|
|
110
133
|
|
|
111
|
-
function MinimalMenuNav({
|
|
112
|
-
|
|
134
|
+
function MinimalMenuNav({
|
|
135
|
+
navItems,
|
|
136
|
+
secondaryNavClassName,
|
|
137
|
+
}: {
|
|
138
|
+
navItems: [string, NavPlugin][];
|
|
139
|
+
secondaryNavClassName?: string;
|
|
140
|
+
}) {
|
|
141
|
+
if (navItems.length === 0) return null;
|
|
142
|
+
|
|
143
|
+
// primary tabs (e.g. Preview) stay pinned on mobile, right after the More menu that holds the
|
|
144
|
+
// rest (Overview first); they render their compact `minimalMobileChildren` (an icon) when given.
|
|
145
|
+
const primaryItems = navItems.filter(([, { props }]) => props.primaryInMinimalMode);
|
|
146
|
+
const moreItems = navItems.filter(([, { props }]) => !props.primaryInMinimalMode);
|
|
113
147
|
|
|
114
148
|
return (
|
|
115
149
|
<div className={styles.minimalMoreNav}>
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
<
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
<
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
150
|
+
{moreItems.length > 0 && (
|
|
151
|
+
<Dropdown
|
|
152
|
+
placeholderContent={
|
|
153
|
+
<div className={styles.minimalMoreButton} aria-label="More component sections">
|
|
154
|
+
<img src="https://static.bit.dev/bit-icons/more-h.svg" alt="" />
|
|
155
|
+
</div>
|
|
156
|
+
}
|
|
157
|
+
dropClass={secondaryNavClassName}
|
|
158
|
+
position="bottom-end"
|
|
159
|
+
placeholderBorder={false}
|
|
160
|
+
clickToggles
|
|
161
|
+
margin={8}
|
|
162
|
+
>
|
|
163
|
+
{moreItems.map(([, { props }], index) => (
|
|
164
|
+
<MenuItem className={styles.minimalMenuItem} key={`minimal-dropdown-${index}`}>
|
|
165
|
+
<TopBarNavComponent menuItemProps={props} isInMenu />
|
|
166
|
+
</MenuItem>
|
|
167
|
+
))}
|
|
168
|
+
</Dropdown>
|
|
169
|
+
)}
|
|
170
|
+
{primaryItems.map(([, { props }], index) => (
|
|
171
|
+
<TopBarNavComponent
|
|
172
|
+
key={`minimal-primary-${index}`}
|
|
173
|
+
menuItemProps={{
|
|
174
|
+
...props,
|
|
175
|
+
children: props.minimalMobileChildren ?? props.children,
|
|
176
|
+
className: classnames(props.className, styles.minimalPrimaryTab),
|
|
177
|
+
}}
|
|
178
|
+
isInMenu={false}
|
|
179
|
+
/>
|
|
180
|
+
))}
|
|
134
181
|
</div>
|
|
135
182
|
);
|
|
136
183
|
}
|
package/ui/menu/menu.module.scss
CHANGED
|
@@ -10,6 +10,10 @@
|
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
.topBarMinimal {
|
|
13
|
+
// Size from content (not 100%) so the breadcrumb beside it only shrinks when space is short.
|
|
14
|
+
flex: 1 1 auto;
|
|
15
|
+
width: auto;
|
|
16
|
+
|
|
13
17
|
@media screen and (max-width: $br-md) {
|
|
14
18
|
// The breadcrumb owns the remaining mobile space, while this menu keeps the intrinsic width
|
|
15
19
|
// of its pinned actions and right-side controls.
|
|
@@ -80,6 +84,27 @@
|
|
|
80
84
|
}
|
|
81
85
|
}
|
|
82
86
|
|
|
87
|
+
// Desktop minimal mode: Overview + Preview sit outside the ResponsiveNavbar so they can never
|
|
88
|
+
// collapse into its overflow menu. Matches the navbar's tab row (8px gap, 14px, no wrapping).
|
|
89
|
+
.minimalFixedNav {
|
|
90
|
+
display: flex;
|
|
91
|
+
flex: none;
|
|
92
|
+
gap: 8px;
|
|
93
|
+
height: 100%;
|
|
94
|
+
margin-right: 8px;
|
|
95
|
+
font-size: var(--bit-p-xs, 14px);
|
|
96
|
+
white-space: nowrap;
|
|
97
|
+
color: var(--on-background-color, #2b2b2b);
|
|
98
|
+
|
|
99
|
+
@media screen and (max-width: $br-md) {
|
|
100
|
+
display: none;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.minimalPrimaryTab {
|
|
105
|
+
height: 100%;
|
|
106
|
+
}
|
|
107
|
+
|
|
83
108
|
.hideMinimalMobileNav {
|
|
84
109
|
@media screen and (max-width: $br-md) {
|
|
85
110
|
display: none;
|
package/ui/menu/nav-plugin.tsx
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type React from 'react';
|
|
1
2
|
import type { SlotRegistry } from '@teambit/harmony';
|
|
2
3
|
import type { LinkProps } from '@teambit/base-react.navigation.link';
|
|
3
4
|
import type { ConsumeMethod } from '@teambit/ui-foundation.ui.use-box.menu';
|
|
@@ -9,6 +10,16 @@ export type NavPluginProps = {
|
|
|
9
10
|
displayName?: string;
|
|
10
11
|
ignoreQueryParams?: boolean;
|
|
11
12
|
hideInMinimalMode?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* in minimal mode on mobile, keep this tab visible next to the compact "More" menu instead of
|
|
15
|
+
* collapsing it into the menu.
|
|
16
|
+
*/
|
|
17
|
+
primaryInMinimalMode?: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* compact content (e.g. an icon) to render instead of `children` for a primary tab in minimal
|
|
20
|
+
* mode on mobile, where the row is shared with the breadcrumb and menu actions.
|
|
21
|
+
*/
|
|
22
|
+
minimalMobileChildren?: React.ReactNode;
|
|
12
23
|
} & LinkProps;
|
|
13
24
|
|
|
14
25
|
export type NavPlugin = {
|
|
@@ -16,6 +16,10 @@ export function TopBarNav({
|
|
|
16
16
|
children,
|
|
17
17
|
displayName,
|
|
18
18
|
ignoreQueryParams,
|
|
19
|
+
// menu layout flags, not link attributes
|
|
20
|
+
hideInMinimalMode: _hideInMinimalMode,
|
|
21
|
+
primaryInMinimalMode: _primaryInMinimalMode,
|
|
22
|
+
minimalMobileChildren: _minimalMobileChildren,
|
|
19
23
|
...rest
|
|
20
24
|
}: NavPluginProps) {
|
|
21
25
|
const { search } = useLocation(); // sticky query params
|