import { HASH_PATTERN_ZOOM_NAMES, TLDefaultColorStyle, TLDefaultColorTheme, TLDefaultFillStyle, getDefaultColorTheme, useEditor, useIsDarkMode, useValue, } from '@bigbluebutton/editor' import React from 'react' export interface ShapeFillProps { d: string fill: TLDefaultFillStyle color: TLDefaultColorStyle theme: TLDefaultColorTheme } export function useDefaultColorTheme() { return getDefaultColorTheme({ isDarkMode: useIsDarkMode() }) } export const ShapeFill = React.memo(function ShapeFill({ theme, d, color, fill }: ShapeFillProps) { switch (fill) { case 'none': { return null } case 'solid': { return } case 'semi': { return } case 'pattern': { return } } }) const PatternFill = function PatternFill({ d, color, theme }: ShapeFillProps) { const editor = useEditor() const zoomLevel = useValue('zoomLevel', () => editor.getZoomLevel(), [editor]) const intZoom = Math.ceil(zoomLevel) const teenyTiny = editor.getZoomLevel() <= 0.18 return ( <> ) } export function getShapeFillSvg({ d, color, fill, theme }: ShapeFillProps) { if (fill === 'none') { return } if (fill === 'pattern') { const gEl = document.createElementNS('http://www.w3.org/2000/svg', 'g') const path1El = document.createElementNS('http://www.w3.org/2000/svg', 'path') path1El.setAttribute('d', d) path1El.setAttribute('fill', theme[color].pattern) const path2El = document.createElementNS('http://www.w3.org/2000/svg', 'path') path2El.setAttribute('d', d) path2El.setAttribute('fill', `url(#hash_pattern)`) gEl.appendChild(path1El) gEl.appendChild(path2El) return gEl } const path = document.createElementNS('http://www.w3.org/2000/svg', 'path') path.setAttribute('d', d) switch (fill) { case 'semi': { path.setAttribute('fill', theme.solid) break } case 'solid': { { path.setAttribute('fill', theme[color].semi) } break } } return path } export function getSvgWithShapeFill(foregroundPath: SVGElement, backgroundPath?: SVGElement) { if (backgroundPath) { // If there is a fill element, return a group containing the fill and the path const g = document.createElementNS('http://www.w3.org/2000/svg', 'g') g.appendChild(backgroundPath) g.appendChild(foregroundPath) return g } else { // Otherwise, just return the path return foregroundPath } }