Forum Discussion

Túlio's avatar
Túlio
Frequent Visitor
2 years ago
Solved

How can I configure CSS modules to style my visual with react - powerbi-visuals-api

How can I access "styles.title" like the example below?

 

 

 

 

 

import * as React from "react"; 
import styles from "./styles.module.css"; 

export class Visual implements IVisual { 
    constructor(options: VisualConstructorOptions) { 
        const element = document.createElement("div"); 
        element.className = styles.title; 
        element.innerText = "Hello, Power BI!"; 
        options.element.appendChild(element); 
    } 
}

 

 

 

 

 

I am using "powerbi-visuals-api": "5.11.0"

  • Túlio's avatar
    Túlio
    1 year ago

    I changed the property "esModules" to false, which works for me.

     

    {
    	test: /\.css$/,
    	include: /\.module\.css$/,
    	exclude: /node_modules/,
    	use: [
    	  'style-loader',
    	  {
    		loader: 'css-loader',
    		options: {
    		  esModule: false,
    		  modules: {
    			localIdentName: '[name]__[local]__[hash:base64:5]'
    		  }
    		},
    	  },
    	],
    }

     

6 Replies

  • Anonymous's avatar
    Anonymous
    Not applicable

    Hi, Túlio 
     

    Thanks for your detailed explanation, I am more than willing to help you out.
     

    As far as I understand, if you want to go through a custom CSS file, I hope you can check if it meets the requirements of the custom visual.

    Here are the relevant documents I found that I hope will help you:

    Create a React-based visual for Power . - Power BI | Microsoft Learn
    Get your Power BI visuals certified - Power BI | Microsoft Learn
     

    Of course, if you only want to implement custom visuals in Desktop, you can try to find out if there are similar custom visuals in your app that can run your CSS files.


    For the issue you mentioned, it would be more advisable to post your question in
    Custom Visuals Development community to get professional support in time.We've now moved your question to that forum.

     

    Here is the link to the forum you need:
    Custom Visuals Development Discussion - Microsoft Fabric Community

    Best Regards,

    Leroy Lu

  • hackcrr's avatar
    hackcrr
    Memorable Member

    Túlio 

    You need to make sure your project has the dependencies required by CSS modules installed. You may need the css-loader dependency required by Webpack. Here is the code to install the corresponding dependencies:

    npm install css-loader style-loader --save-dev
    

    Modify your Webpack configuration to support CSS modules:

    module.exports = {
        module: {
            rules: [
                {
                    test: /\.css$/,
                    use: [
                        {
                            loader: 'style-loader'
                        },
                        {
                            loader: 'css-loader',
                            options: {
                                modules: true
                            }
                        }
                    ]
                }
            ]
        }
    };
    

    Create a CSS Modules file:

    /* styles.module.css */
    .title {
        color: blue;
        font-size: 24px;
        font-weight: bold;
    }
    

    In your React component or Power BI visual, import the CSS module:

    import * as React from "react";
    import styles from "./styles.module.css";
    
    export class Visual implements IVisual {
        constructor(options: VisualConstructorOptions) {
            const element = document.createElement("div");
            element.className = styles.title;  // This accesses the .title class from your CSS module
            element.innerText = "Hello, Power BI!";
            options.element.appendChild(element);
        }
    }
    

    When you set element.className to styles.title , it applies the styles defined in the CSS module to that element. The class name is automatically scoped to avoid conflicts with other styles.

     

    hackcrr

    If I have answered your question, please mark my reply as solution and kudos to this post, thank you!

    • Anonymous's avatar
      Anonymous
      Not applicable

      This is not working for me. I'm still not able to import it as

      import styles from "./styles.module.css";

       Is there some other solution?

      • Túlio's avatar
        Túlio
        Frequent Visitor

        I changed the property "esModules" to false, which works for me.

         

        {
        	test: /\.css$/,
        	include: /\.module\.css$/,
        	exclude: /node_modules/,
        	use: [
        	  'style-loader',
        	  {
        		loader: 'css-loader',
        		options: {
        		  esModule: false,
        		  modules: {
        			localIdentName: '[name]__[local]__[hash:base64:5]'
        		  }
        		},
        	  },
        	],
        }

         

    • Túlio's avatar
      Túlio
      Frequent Visitor

      It doesn't work for me 😓.