import { Flex, Provider, ShorthandValue, Toolbar, ToolbarItemProps, ToolbarItemShorthandKinds, ToolbarMenuItemProps, ToolbarMenuItemShorthandKinds, teamsTheme, } from '@fluentui/react-northstar'; import * as _ from 'lodash'; import * as React from 'react'; import * as ReactDOM from 'react-dom'; import { BoldIcon, BulletsIcon, CodeSnippetIcon, FontColorIcon, FontSizeIcon, HighlightIcon, ItalicIcon, LinkIcon, NumberListIcon, RemoveFormatIcon, TrashCanIcon, UnderlineIcon, } from '@fluentui/react-icons-northstar'; type ToolbarItem = ShorthandValue; type OverflowItem = ShorthandValue; const FrameRenderer: React.FC & { children: (externalDocument: Document) => React.ReactElement; }> = props => { const { children, ...rest } = props; const [node, setNode] = React.useState(); React.useLayoutEffect(() => { if (node) { node.contentDocument.documentElement.style.fontSize = '14px'; node.contentDocument.documentElement.style.height = '100%'; node.contentDocument.documentElement.style.width = '100%'; node.contentDocument.body.style.height = '100%'; node.contentDocument.body.style.width = '100%'; } }, [node]); return ( ); }; const EditorToolbar: React.FC = () => { const [overflowOpen, setOverflowOpen] = React.useState(false); const overflowIndex = React.useRef(); const combinedItems: { toolbarItem: ToolbarItem; overflowItem?: OverflowItem; }[] = [ { toolbarItem: { key: 'bold', icon: } }, { toolbarItem: { key: 'italic', icon: } }, { toolbarItem: { key: 'underline', icon: } }, { toolbarItem: { key: 'divider-1', kind: 'divider' } }, { toolbarItem: { key: 'highlight', icon: } }, { toolbarItem: { key: 'font-color', icon: } }, { toolbarItem: { key: 'font-size', icon: } }, { toolbarItem: { key: 'remove-format', icon: }, overflowItem: { key: 'remove-format', icon: , content: 'Clear formatting' }, }, { toolbarItem: { key: 'divider-2', kind: 'divider' } }, { toolbarItem: { key: 'bullets', icon: }, overflowItem: { key: 'bullets', icon: , content: 'Bulleted list' }, }, { toolbarItem: { key: 'number-list', icon: }, overflowItem: { key: 'number-list', icon: , content: 'Number list' }, }, { toolbarItem: { key: 'divider-3', kind: 'divider' } }, { toolbarItem: { key: 'link', icon: }, overflowItem: { key: 'link', icon: , content: 'Insert link' }, }, { toolbarItem: { key: 'code', icon: }, overflowItem: { key: 'code', icon: , content: 'Code snippet' }, }, ]; return ( { overflowIndex.current = itemsVisible - 1; }} onOverflowOpenChange={(e, { overflowOpen }) => setOverflowOpen(overflowOpen)} getOverflowItems={startIndex => { const firstToolbarItem = combinedItems[startIndex].toolbarItem; let actualIndex = startIndex; // We want to remove first item if it's a divider // @ts-ignore if (firstToolbarItem.kind === 'divider') { actualIndex += 1; } return combinedItems.slice(actualIndex).map(item => item.overflowItem || item.toolbarItem); }} /> , key: 'trash', }, ]} /> ); }; const ToolbarExampleOverflowPositioningShorthand: React.FC = () => ( {externalDocument => ( )} ); export default ToolbarExampleOverflowPositioningShorthand;