<aside> ✏️
목차
</aside>
customToolbox.tsx
import 'blockly/blocks';
import * as Blockly from 'blockly/core';
import { toolboxConfig, toolboxConfig2, classMakerPrompt } from '@/widgets';
interface IExtendedIToolbox extends Blockly.IToolbox {
HtmlDiv: HTMLElement;
}
export const customToolbox = (newWorkspace: any) => {
const toolbox: IExtendedIToolbox = newWorkspace.getToolbox()! as IExtendedIToolbox;
const flyout = newWorkspace!.getToolbox()!.getFlyout();
const tabs = document.createElement('div');
tabs.className = 'flex w-96';
const tagTab = document.createElement('button');
tagTab.classList.add('tab');
tagTab.textContent = '태그';
const styleTab = document.createElement('button');
styleTab.classList.add('tab');
styleTab.textContent = '스타일';
tagTab.addEventListener('click', () => {
newWorkspace.updateToolbox(toolboxConfig);
const toolboxContents = document.querySelector('.blocklyToolboxContents');
toolboxContents!.classList.remove('hidden');
tagTab.classList.add('tabSelected');
styleTab.classList.remove('tabSelected');
});
styleTab.addEventListener('click', () => {
newWorkspace.updateToolbox(toolboxConfig2);
const toolboxContents = document.querySelector('.blocklyToolboxContents');
toolboxContents!.classList.add('hidden');
const flyoutContents = toolboxConfig2.contents;
// 추가하기 버튼에 prompt 이벤트 뜨게 콜백등록
newWorkspace.registerButtonCallback('classMakerPrompt', () => classMakerPrompt(newWorkspace));
flyout.show(flyoutContents);
styleTab.classList.add('tabSelected');
tagTab.classList.remove('tabSelected');
});
tabs.appendChild(tagTab);
tabs.appendChild(styleTab);
toolbox!.HtmlDiv.prepend(tabs);
flyout!.hide = () => {};
};
flyout!.hide = () => {};
hide
메서드를 비활성화합니다.hide()
메서드는 Flyout을 숨기고, 콘텐츠를 제거하는 역할을 합니다.hide
메서드를 빈 함수로 재정의하면 Flyout이 숨겨지지 않으며, 항상 화면에 표시됩니다.현재상황
문제