11import { FC , InputHTMLAttributes , useRef , useState , useEffect } from "react" ;
22import { useGenerateCode } from "../../context/GenerateCodeContext" ;
3- import Blockly from "blockly" ;
4- import { javascriptGenerator } from "blockly/javascript" ;
5- import { BlocklyWorkspace } from "react-blockly" ;
3+ import { javascriptGenerator as jsg } from "blockly/javascript" ;
4+ import { BlocklyWorkspace , WorkspaceSvg } from "react-blockly" ;
65import "./../../customBlocks/customBlocks" ;
6+ import "../../styles/blockly-custom.css" ;
77
88import { toolbox } from "../../customBlocks/toolbox" ;
99export interface HeaderProps extends InputHTMLAttributes < HTMLInputElement > {
@@ -29,10 +29,10 @@ const BlocklyEditor: FC<HeaderProps> = ({ onWorkspaceChange, externalJson }) =>
2929 }
3030 } , [ externalJson ] ) ;
3131
32- const handleWorkspaceChange = ( newWorkspace : Blockly . WorkspaceSvg ) => {
32+ const handleWorkspaceChange = ( newWorkspace : WorkspaceSvg ) => {
3333 console . log ( "Workspace changed" )
3434 try {
35- let jsCode = javascriptGenerator . workspaceToCode ( newWorkspace ) ;
35+ let jsCode = jsg . workspaceToCode ( newWorkspace ) ;
3636 setCode ( jsCode ) ;
3737 } catch ( e ) {
3838 console . error ( "Error generating code: " + e ) ;
@@ -52,17 +52,99 @@ const BlocklyEditor: FC<HeaderProps> = ({ onWorkspaceChange, externalJson }) =>
5252 return (
5353 < BlocklyWorkspace
5454 key = { workspaceKey } // Force re-mount when key changes
55- className = "w-full h-full"
55+ className = "w-full h-full blockly-custom-theme "
5656 toolboxConfiguration = { toolbox }
5757 onWorkspaceChange = { handleWorkspaceChange }
5858 initialJson = { json }
5959 onJsonChange = { onJsonChange }
6060 workspaceConfiguration = { {
6161 renderer : "zelos" ,
62+ theme : {
63+ name : "custom" ,
64+ base : "classic" , // Can be 'classic', 'modern', or 'deuteranopia'
65+ componentStyles : {
66+ workspaceBackgroundColour : "#f7fafc" ,
67+ toolboxBackgroundColour : "#2d3748" ,
68+ toolboxForegroundColour : "#f7fafc" ,
69+ flyoutBackgroundColour : "#1a202c" ,
70+ flyoutForegroundColour : "#f7fafc" ,
71+ flyoutOpacity : 1 ,
72+ scrollbarColour : "#4a5568" ,
73+ insertionMarkerColour : "#60a5fa" ,
74+ insertionMarkerOpacity : 0.3 ,
75+ markerColour : "#60a5fa" ,
76+ cursorColour : "#60a5fa"
77+ } ,
78+ blockStyles : {
79+ logic_blocks : {
80+ colourPrimary : "#615BA5" ,
81+ colourSecondary : "#715CA5" ,
82+ colourTertiary : "#5B4A95"
83+ } ,
84+ loop_blocks : {
85+ colourPrimary : "#5B67A5" ,
86+ colourSecondary : "#6B77B5" ,
87+ colourTertiary : "#4B5795"
88+ } ,
89+ math_blocks : {
90+ colourPrimary : "#5B80A5" ,
91+ colourSecondary : "#6B90B5" ,
92+ colourTertiary : "#4B7095"
93+ } ,
94+ text_blocks : {
95+ colourPrimary : "#5BA55B" ,
96+ colourSecondary : "#6BB56B" ,
97+ colourTertiary : "#4B954B"
98+ } ,
99+ list_blocks : {
100+ colourPrimary : "#5BA55B" ,
101+ colourSecondary : "#6BB56B" ,
102+ colourTertiary : "#4B954B"
103+ } ,
104+ variable_blocks : {
105+ colourPrimary : "#A55B80" ,
106+ colourSecondary : "#B56B90" ,
107+ colourTertiary : "#954B70"
108+ } ,
109+ procedure_blocks : {
110+ colourPrimary : "#995BA5" ,
111+ colourSecondary : "#A96BB5" ,
112+ colourTertiary : "#894B95"
113+ }
114+ } ,
115+ categoryStyles : {
116+ logic_category : {
117+ colour : "#615BA5"
118+ } ,
119+ loop_category : {
120+ colour : "#5B67A5"
121+ } ,
122+ math_category : {
123+ colour : "#5B80A5"
124+ } ,
125+ text_category : {
126+ colour : "#5BA55B"
127+ } ,
128+ list_category : {
129+ colour : "#5BA55B"
130+ } ,
131+ variable_category : {
132+ colour : "#A55B80"
133+ } ,
134+ procedure_category : {
135+ colour : "#995BA5"
136+ }
137+ } ,
138+ fontStyle : {
139+ family : "Inter, system-ui, sans-serif" ,
140+ weight : "normal" ,
141+ size : 12
142+ }
143+ } ,
62144 grid : {
63145 spacing : 20 ,
64146 length : 3 ,
65- colour : "#ccc " ,
147+ colour : "#e2e8f0 " ,
66148 snap : true
67149 } ,
68150 zoom : {
@@ -71,8 +153,8 @@ const BlocklyEditor: FC<HeaderProps> = ({ onWorkspaceChange, externalJson }) =>
71153 startScale : 1.0 ,
72154 maxScale : 3 ,
73155 minScale : 0.3 ,
74- scaleSpeed : 1.2
75- } ,
156+ scaleSpeed : 1.1 ,
157+ }
76158 } }
77159 />
78160 )
0 commit comments