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, User, 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' : ''} > { const value = e.target.value; if (value === "0") { editor.chain().focus().setParagraph().run(); } else { editor.chain().focus().toggleHeading({ level: parseInt(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()} > editor.chain().focus().insertContent({ type: 'blockUser' }).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: 120px; border: none; height: 25px; padding: 2px 5px; font-size: 11px; font-family: 'DM Sans'; margin-right: 5px; cursor: pointer; appearance: none; -webkit-appearance: none; -moz-appearance: none; background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e"); background-repeat: no-repeat; background-position: right 5px center; background-size: 12px; padding-right: 20px; &:hover { background-color: rgba(217, 217, 217, 0.3); } &:focus { outline: none; box-shadow: 0 0 0 2px rgba(217, 217, 217, 0.5); } ` 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'; } `