import styled from 'styled-components' import { FontBoldIcon, FontItalicIcon, StrikethroughIcon, ArrowLeftIcon, ArrowRightIcon, DividerVerticalIcon, ListBulletIcon, TableIcon, RowsIcon, ColumnsIcon, SectionIcon, ContainerIcon, ChevronDownIcon, } from '@radix-ui/react-icons' import { AlertCircle, AlertTriangle, BadgeHelp, Code, Cuboid, FileText, ImagePlus, Lightbulb, MousePointerClick, Sigma, Table, Tag, Tags, Video, } from 'lucide-react' import { SiYoutube } from '@icons-pack/react-simple-icons' import ToolTip from '@components/Objects/StyledElements/Tooltip/Tooltip' import React from 'react' export const ToolbarButtons = ({ editor, props }: any) => { const [showTableMenu, setShowTableMenu] = React.useState(false) if (!editor) { return null } // YouTube extension const addYoutubeVideo = () => { const url = prompt('Enter YouTube URL') if (url) { editor.commands.setYoutubeVideo({ src: url, width: 640, height: 480, }) } } const tableOptions = [ { label: 'Insert new table (3×3)', icon: , action: () => editor.chain().focus().insertTable({ rows: 3, cols: 3, withHeaderRow: true }).run() }, { label: 'Add row below', icon: , action: () => editor.chain().focus().addRowAfter().run() }, { label: 'Add column right', icon: , action: () => editor.chain().focus().addColumnAfter().run() }, { label: 'Delete current row', icon: , action: () => editor.chain().focus().deleteRow().run() }, { label: 'Delete current column', icon: , action: () => editor.chain().focus().deleteColumn().run() } ] return ( editor.chain().focus().undo().run()}> editor.chain().focus().redo().run()}> editor.chain().focus().toggleBold().run()} className={editor.isActive('bold') ? 'is-active' : ''} > editor.chain().focus().toggleItalic().run()} className={editor.isActive('italic') ? 'is-active' : ''} > editor.chain().focus().toggleStrike().run()} className={editor.isActive('strike') ? 'is-active' : ''} > editor.chain().focus().toggleOrderedList().run()} className={editor.isActive('orderedList') ? 'is-active' : ''} > editor .chain() .focus() .toggleHeading({ level: parseInt(e.target.value) }) .run() } > setShowTableMenu(!showTableMenu)} className={showTableMenu ? 'is-active' : ''} > {showTableMenu && ( {tableOptions.map((option, index) => ( { option.action() setShowTableMenu(false) }} > {option.icon} {option.label} ))} )} editor.chain().focus().toggleNode('calloutInfo').run()} > editor.chain().focus().toggleNode('calloutWarning').run() } > editor .chain() .focus() .insertContent({ type: 'blockImage', }) .run() } > editor .chain() .focus() .insertContent({ type: 'blockVideo', }) .run() } > editor.chain().focus().insertContent({ type: 'blockEmbed' }).run()}> editor .chain() .focus() .insertContent({ type: 'blockMathEquation', }) .run() } > editor .chain() .focus() .insertContent({ type: 'blockPDF', }) .run() } > editor .chain() .focus() .insertContent({ type: 'blockQuiz', }) .run() } > editor.chain().focus().toggleCodeBlock().run()} className={editor.isActive('codeBlock') ? 'is-active' : ''} > editor.chain().focus().insertContent({ type: 'blockEmbed' }).run()} > editor.chain().focus().insertContent({ type: 'badge', content: [ { type: 'text', text: 'This is a Badge' } ] }).run()} > editor.chain().focus().insertContent({ type: 'button', content: [ { type: 'text', text: 'Click me' } ] }).run()} > ) } const ToolButtonsWrapper = styled.div` display: flex; flex-direction: row; align-items: left; justify-content: left; ` const ToolBtn = styled.div` display: flex; background: rgba(217, 217, 217, 0.24); border-radius: 6px; min-width: 25px; height: 25px; padding: 5px; margin-right: 5px; transition: all 0.2s ease-in-out; svg { padding: 1px; } &.is-active { background: rgba(176, 176, 176, 0.5); &:hover { background: rgba(139, 139, 139, 0.5); cursor: pointer; } } &:hover { background: rgba(217, 217, 217, 0.48); cursor: pointer; } ` const ToolSelect = styled.select` display: flex; background: rgba(217, 217, 217, 0.185); border-radius: 6px; width: 100px; border: none; height: 25px; padding: 5px; font-size: 11px; font-family: 'DM Sans'; margin-right: 5px; ` const TableMenuWrapper = styled.div` position: relative; display: inline-block; ` const TableDropdown = styled.div` position: absolute; top: 100%; left: 0; background: white; border: 1px solid rgba(217, 217, 217, 0.5); border-radius: 6px; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); z-index: 1000; min-width: 180px; margin-top: 4px; ` const TableMenuItem = styled.div` display: flex; align-items: center; padding: 8px 12px; cursor: pointer; transition: background 0.2s; &:hover { background: rgba(217, 217, 217, 0.24); } .icon { margin-right: 8px; display: flex; align-items: center; } .label { font-size: 12px; font-family: 'DM Sans'; } `