diff --git a/services/web/frontend/fonts/material-symbols/MaterialSymbolsRoundedUnfilledPartialSlice.woff2 b/services/web/frontend/fonts/material-symbols/MaterialSymbolsRoundedUnfilledPartialSlice.woff2 index 34f7241410..1e0374e8a3 100644 Binary files a/services/web/frontend/fonts/material-symbols/MaterialSymbolsRoundedUnfilledPartialSlice.woff2 and b/services/web/frontend/fonts/material-symbols/MaterialSymbolsRoundedUnfilledPartialSlice.woff2 differ diff --git a/services/web/frontend/fonts/material-symbols/unfilled-symbols.mjs b/services/web/frontend/fonts/material-symbols/unfilled-symbols.mjs index 09862b2d5f..c708f781d4 100644 --- a/services/web/frontend/fonts/material-symbols/unfilled-symbols.mjs +++ b/services/web/frontend/fonts/material-symbols/unfilled-symbols.mjs @@ -22,6 +22,7 @@ export default /** @type {const} */ ([ 'info', 'integration_instructions', 'lightbulb', + 'more_vert', 'note_add', 'picture_as_pdf', 'rate_review', diff --git a/services/web/frontend/js/features/ide-redesign/components/rail/rail-action-element.tsx b/services/web/frontend/js/features/ide-redesign/components/rail/rail-action-element.tsx index f34518ace7..74cc861496 100644 --- a/services/web/frontend/js/features/ide-redesign/components/rail/rail-action-element.tsx +++ b/services/web/frontend/js/features/ide-redesign/components/rail/rail-action-element.tsx @@ -13,6 +13,7 @@ type RailActionButton = { icon: AvailableUnfilledIcon title: string action: () => void + hide?: boolean } type RailDropdown = { @@ -20,6 +21,7 @@ type RailDropdown = { icon: AvailableUnfilledIcon title: string dropdown: ReactElement + hide?: boolean } export type RailAction = RailDropdown | RailActionButton @@ -31,6 +33,10 @@ export default function RailActionElement({ action }: { action: RailAction }) { } }, [action]) + if (action.hide) { + return null + } + if ('dropdown' in action) { return ( @@ -41,7 +47,7 @@ export default function RailActionElement({ action }: { action: RailAction }) { > + {tabs + .filter(({ hide }) => !hide) + .map(({ icon, key, indicator, title, disabled }) => ( + + ))} + + ) +} diff --git a/services/web/frontend/js/features/ide-redesign/components/rail/rail.tsx b/services/web/frontend/js/features/ide-redesign/components/rail/rail.tsx index 4cf0c4bd14..de8823d435 100644 --- a/services/web/frontend/js/features/ide-redesign/components/rail/rail.tsx +++ b/services/web/frontend/js/features/ide-redesign/components/rail/rail.tsx @@ -29,6 +29,8 @@ import { RailElement } from '../../utils/rail-types' import RailPanel from './rail-panel' import RailResizeHandle from './rail-resize-handle' import RailModals from './rail-modals' +import RailOverflowDropdown from './rail-overflow-dropdown' +import useRailOverflow from '../../hooks/use-rail-overflow' export const RailLayout = () => { const { sendEvent } = useEditorAnalytics() @@ -166,6 +168,25 @@ export const RailLayout = () => { const isReviewPanelOpen = selectedTab === 'review-panel' + const { tabsInRail, tabsInOverflow, tabWrapperRef } = + useRailOverflow(railTabs) + + const moreOptionsAction: RailAction = useMemo(() => { + return { + key: 'more-options', + icon: 'more_vert', + title: t('more_options'), + hide: tabsInOverflow.length === 0, + dropdown: ( + + ), + } + }, [t, isOpen, selectedTab, tabsInOverflow]) + return ( { aria-label={t('files_collaboration_integrations_logs')} >