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()
}
>
addYoutubeVideo()}>
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';
}
`